Compare commits

..

2 Commits

Author SHA1 Message Date
97d7511e56 Merge pull request 'fix(kugetsu): session detection ordering bug and debugging' (#108) from fix/session-detection-v2 into main 2026-04-02 12:26:57 +02:00
shokollm
cd12a0cda8 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.
2026-04-02 09:57:27 +00:00

View File

@@ -1244,6 +1244,7 @@ cmd_start() {
fi fi
local fork_log="$SESSIONS_DIR/$session_file.fork.log" 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 if [ "$DEBUG_MODE" = true ]; then
(cd "$worktree_path" && opencode run "$message" --fork --session "$base_session_id" 2>&1) | tee "$fork_log" & (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 max_attempts=10
local attempt=1 local attempt=1
local new_session_id="" local new_session_id=""
local fork_log_output=""
while [ $attempt -le $max_attempts ]; do while [ $attempt -le $max_attempts ]; do
sleep 1 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 while IFS= read -r sess; do
[ "$sess" = "$base_session_id" ] && continue [ "$sess" = "$base_session_id" ] && continue
[ "$sess" = "$pm_agent_session_id" ] && continue [ "$sess" = "$pm_agent_session_id" ] && continue
@@ -1290,14 +1284,34 @@ cmd_start() {
break break
fi 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)) attempt=$((attempt + 1))
done done
if [ -z "$new_session_id" ]; then 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 echo "Error: Could not find newly created session after ${max_attempts}s" >&2
if [ -f "$fork_log" ] && [ -s "$fork_log" ]; then if [ -n "$fork_log_output" ]; then
echo "Fork log:" >&2 echo "Fork log output:" >&2
tail -30 "$fork_log" >&2 echo "$fork_log_output" >&2
fi fi
remove_worktree_for_issue "$issue_ref" remove_worktree_for_issue "$issue_ref"
exit 1 exit 1