From b422b33aa64061cdf0e501dea5a8f51cd447a097 Mon Sep 17 00:00:00 2001 From: shokollm <270575765+shokollm@users.noreply.github.com> Date: Sun, 29 Mar 2026 20:25:41 +0000 Subject: [PATCH] fix(kugetsu): use before/after session list to detect forked session Compare session list before and after fork to reliably detect which session is the newly created one. Avoids relying on parsing output that may not contain session ID. --- skills/kugetsu/scripts/kugetsu | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index d6e97f0..b2fe8fe 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -249,35 +249,35 @@ cmd_start() { local session_file="$(issue_ref_to_filename "$issue_ref").json" - printf '{"type": "forked", "issue_ref": "%s", "opencode_session_id": "pending", "created_at": "%s", "state": "starting"}\n' \ - "$issue_ref" "$(date -Iseconds)" > "$SESSIONS_DIR/$session_file" - - add_issue_to_index "$issue_ref" "$session_file" + local before_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort) + local before_set="${before_sessions//$'\n'/|}" echo "Forking session for '$issue_ref'..." - local fork_output if [ "$DEBUG_MODE" = true ]; then - fork_output=$(opencode run --fork --session "$base_session_id" "$message" 2>&1 | tee "$SESSIONS_DIR/$session_file.debug.log") + opencode run --fork --session "$base_session_id" "$message" 2>&1 | tee "$SESSIONS_DIR/$session_file.debug.log" else - fork_output=$(opencode run --fork --session "$base_session_id" "$message" 2>&1) + opencode run --fork --session "$base_session_id" "$message" 2>&1 fi - local new_session_id=$(echo "$fork_output" | grep -oP 'A new forked session was created: \Kses_\w+' | tail -1) - - if [ -z "$new_session_id" ]; then - new_session_id=$(opencode session list 2>/dev/null | grep -E '^ses_' | awk '{print $1}' | grep -v "^$base_session_id$" | head -1) - fi + local after_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort) + local new_session_id="" + while IFS= read -r sess; do + if [[ ! "$before_set" =~ \|${sess}\| ]] && [[ "$sess" != "$base_session_id" ]]; then + new_session_id="$sess" + break + fi + done <<< "$after_sessions" if [ -z "$new_session_id" ]; then echo "Error: Could not find newly created session" >&2 - printf '{"type": "forked", "issue_ref": "%s", "opencode_session_id": "failed", "created_at": "%s", "state": "failed"}\n' \ - "$issue_ref" "$(date -Iseconds)" > "$SESSIONS_DIR/$session_file" exit 1 fi printf '{"type": "forked", "issue_ref": "%s", "opencode_session_id": "%s", "created_at": "%s", "state": "idle"}\n' \ "$issue_ref" "$new_session_id" "$(date -Iseconds)" > "$SESSIONS_DIR/$session_file" + add_issue_to_index "$issue_ref" "$session_file" + echo "Session started for '$issue_ref': $new_session_id" }