fix(kugetsu): fix session detection ordering and add DB debugging
1. Move session detection BEFORE checking if fork process is still running. Previous code broke out of loop if forked process exited, skipping detection. 2. Add database query debugging when detection fails to help diagnose why opencode session list might miss newly created sessions.
This commit is contained in:
@@ -1244,6 +1244,7 @@ cmd_start() {
|
||||
fi
|
||||
|
||||
local fork_log="$SESSIONS_DIR/$session_file.fork.log"
|
||||
local opencode_db="${OPENCODE_DB:-$HOME/.local/share/opencode/opencode.db}"
|
||||
|
||||
if [ "$DEBUG_MODE" = true ]; then
|
||||
(cd "$worktree_path" && opencode run "$message" --fork --session "$base_session_id" 2>&1) | tee "$fork_log" &
|
||||
@@ -1256,18 +1257,11 @@ cmd_start() {
|
||||
local max_attempts=10
|
||||
local attempt=1
|
||||
local new_session_id=""
|
||||
local fork_log_output=""
|
||||
|
||||
while [ $attempt -le $max_attempts ]; do
|
||||
sleep 1
|
||||
|
||||
if ! kill -0 $fork_pid 2>/dev/null; then
|
||||
if [ -s "$fork_log" ]; then
|
||||
echo "Fork command exited. Log output:" >&2
|
||||
tail -20 "$fork_log" >&2
|
||||
fi
|
||||
break
|
||||
fi
|
||||
|
||||
while IFS= read -r sess; do
|
||||
[ "$sess" = "$base_session_id" ] && continue
|
||||
[ "$sess" = "$pm_agent_session_id" ] && continue
|
||||
@@ -1290,14 +1284,34 @@ cmd_start() {
|
||||
break
|
||||
fi
|
||||
|
||||
if ! kill -0 $fork_pid 2>/dev/null; then
|
||||
fork_log_output=$(tail -20 "$fork_log" 2>/dev/null || echo "(log empty or unavailable)")
|
||||
break
|
||||
fi
|
||||
|
||||
attempt=$((attempt + 1))
|
||||
done
|
||||
|
||||
if [ -z "$new_session_id" ]; then
|
||||
if [ -f "$opencode_db" ]; then
|
||||
local db_sessions=$(python3 -c "
|
||||
import sqlite3
|
||||
conn = sqlite3.connect('$opencode_db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute(\"SELECT id FROM session WHERE parent_id IS NOT NULL ORDER BY time_created DESC LIMIT 5\")
|
||||
for row in cursor.fetchall():
|
||||
print(row[0])
|
||||
" 2>/dev/null || echo "")
|
||||
if [ -n "$db_sessions" ]; then
|
||||
echo "Recent forked sessions in DB:" >&2
|
||||
echo "$db_sessions" >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Error: Could not find newly created session after ${max_attempts}s" >&2
|
||||
if [ -f "$fork_log" ] && [ -s "$fork_log" ]; then
|
||||
echo "Fork log:" >&2
|
||||
tail -30 "$fork_log" >&2
|
||||
if [ -n "$fork_log_output" ]; then
|
||||
echo "Fork log output:" >&2
|
||||
echo "$fork_log_output" >&2
|
||||
fi
|
||||
remove_worktree_for_issue "$issue_ref"
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user