fix(kugetsu): remove broken session existence check

The check_opencode_session_exists() function was fundamentally broken
because 'opencode session list' does not include forked sessions,
regardless of output format (table or JSON). This caused false
'session expired' reports even when sessions were fully functional.

Changes:
- Remove session check from cmd_status() - now returns 'ok' if session registered
- Remove session check from cmd_delegate() - let opencode run fail naturally
- Remove warning from cmd_continue() - proceed regardless
- Simplify cmd_doctor() - just show registered sessions
- Update test to reflect new behavior

Issue #38: #38
This commit is contained in:
shokollm
2026-03-31 05:23:39 +00:00
parent 617702d229
commit 963e0f45f2
2 changed files with 40 additions and 68 deletions

View File

@@ -303,7 +303,7 @@ validate_issue_ref() {
check_opencode_session_exists() { check_opencode_session_exists() {
local session_id="$1" local session_id="$1"
opencode session list 2>/dev/null | grep -q "^$session_id" opencode session list --format json 2>/dev/null | grep -q "\"$session_id\""
} }
kugetsu_get_pm_context() { kugetsu_get_pm_context() {
@@ -475,11 +475,6 @@ cmd_status() {
return return
fi fi
if ! check_opencode_session_exists "$pm_agent"; then
echo "pm_agent_expired"
return
fi
echo "ok" echo "ok"
} }
@@ -498,11 +493,6 @@ cmd_delegate() {
exit 1 exit 1
fi fi
if ! check_opencode_session_exists "$pm_session"; then
echo "Error: PM agent session has expired. Run 'kugetsu init' again." >&2
exit 1
fi
opencode run --continue --session "$pm_session" "$message" 2>&1 opencode run --continue --session "$pm_session" "$message" 2>&1
} }
@@ -537,12 +527,6 @@ cmd_doctor() {
issues=$((issues + 1)) issues=$((issues + 1))
else else
echo "[OK] Base session: $base" echo "[OK] Base session: $base"
if check_opencode_session_exists "$base"; then
echo "[OK] Base session active"
else
echo "[ISSUE] Base session expired"
issues=$((issues + 1))
fi
fi fi
local pm_agent=$(get_pm_agent_session_id) local pm_agent=$(get_pm_agent_session_id)
@@ -551,12 +535,6 @@ cmd_doctor() {
issues=$((issues + 1)) issues=$((issues + 1))
else else
echo "[OK] PM agent: $pm_agent" echo "[OK] PM agent: $pm_agent"
if check_opencode_session_exists "$pm_agent"; then
echo "[OK] PM agent session active"
else
echo "[ISSUE] PM agent session expired"
issues=$((issues + 1))
fi
fi fi
local pm_context_file="${KUGETSU_DIR}/pm-agent.md" local pm_context_file="${KUGETSU_DIR}/pm-agent.md"
@@ -583,8 +561,7 @@ cmd_doctor() {
else else
local pm_agent=$(get_pm_agent_session_id) local pm_agent=$(get_pm_agent_session_id)
if [ -n "$pm_agent" ] && [ "$pm_agent" != "null" ] && [ "$pm_agent" != "None" ]; then if [ -n "$pm_agent" ] && [ "$pm_agent" != "null" ] && [ "$pm_agent" != "None" ]; then
if ! check_opencode_session_exists "$pm_agent"; then echo "[FIX] Recreating PM agent session..."
echo "[FIX] Recreating expired PM agent session..."
local base=$(get_base_session_id) local base=$(get_base_session_id)
if [ -n "$base" ] && [ "$base" != "null" ]; then if [ -n "$base" ] && [ "$base" != "null" ]; then
rm -f "$SESSIONS_DIR/pm-agent.json" rm -f "$SESSIONS_DIR/pm-agent.json"
@@ -619,9 +596,6 @@ cmd_doctor() {
else else
echo "[FIX] Cannot recreate PM agent: base session missing" echo "[FIX] Cannot recreate PM agent: base session missing"
fi fi
else
echo "[FIX] PM agent is active, no fix needed"
fi
else else
echo "[FIX] Cannot fix: PM agent not initialized. Run 'kugetsu init' first." echo "[FIX] Cannot fix: PM agent not initialized. Run 'kugetsu init' first."
fi fi
@@ -867,11 +841,6 @@ cmd_continue() {
local opencode_session_id=$(python3 -c "import json; print(json.load(open('$session_path'))['opencode_session_id'])") local opencode_session_id=$(python3 -c "import json; print(json.load(open('$session_path'))['opencode_session_id'])")
local worktree_path=$(python3 -c "import json; print(json.load(open('$session_path')).get('worktree_path', ''))" 2>/dev/null || echo "") local worktree_path=$(python3 -c "import json; print(json.load(open('$session_path')).get('worktree_path', ''))" 2>/dev/null || echo "")
if ! check_opencode_session_exists "$opencode_session_id"; then
echo "Warning: Session may have expired in opencode" >&2
echo "Attempting to continue anyway..." >&2
fi
echo "Continuing session for '$session_name'..." echo "Continuing session for '$session_name'..."
if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then
echo "Using worktree: $worktree_path" echo "Using worktree: $worktree_path"

View File

@@ -417,14 +417,17 @@ else
fi fi
echo "" echo ""
# Test 25: status when all good (pm-agent in json but session expired) # Test 25: status when all good (pm-agent in json - no longer checks opencode)
echo "--- Test: status (session expired) ---" # Note: check_opencode_session_exists was removed because forked sessions
# don't appear in 'opencode session list'. Status now returns 'ok' if
# session is registered in kugetsu index, regardless of opencode state.
echo "--- Test: status (session registered) ---"
setup_mock_base setup_mock_base
OUTPUT=$($KUGETSU status 2>&1 || true) OUTPUT=$($KUGETSU status 2>&1 || true)
if [ "$OUTPUT" = "pm_agent_expired" ]; then if [ "$OUTPUT" = "ok" ]; then
pass "status returns pm_agent_expired when session not in opencode" pass "status returns ok when session is in kugetsu index"
else else
fail "status session expired: got '$OUTPUT', expected 'pm_agent_expired'" fail "status session registered: got '$OUTPUT', expected 'ok'"
fi fi
echo "" echo ""