diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index 675f137..bdba5de 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -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