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:
@@ -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"
|
||||||
|
|||||||
@@ -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 ""
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user