diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index 85c6901..0a56403 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -475,11 +475,6 @@ cmd_status() { return fi - if ! check_opencode_session_exists "$pm_agent"; then - echo "pm_agent_expired" - return - fi - echo "ok" } @@ -498,11 +493,6 @@ cmd_delegate() { exit 1 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 } @@ -537,12 +527,6 @@ cmd_doctor() { issues=$((issues + 1)) else 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 local pm_agent=$(get_pm_agent_session_id) @@ -551,12 +535,6 @@ cmd_doctor() { issues=$((issues + 1)) else 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 local pm_context_file="${KUGETSU_DIR}/pm-agent.md" @@ -583,44 +561,40 @@ cmd_doctor() { else local pm_agent=$(get_pm_agent_session_id) if [ -n "$pm_agent" ] && [ "$pm_agent" != "null" ] && [ "$pm_agent" != "None" ]; then - if ! check_opencode_session_exists "$pm_agent"; then - echo "[FIX] Recreating expired PM agent session..." - local base=$(get_base_session_id) - if [ -n "$base" ] && [ "$base" != "null" ]; then - rm -f "$SESSIONS_DIR/pm-agent.json" - - local before_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort) - local before_set="${before_sessions//$'\n'/|}" - - local pm_context=$(kugetsu_get_pm_context) - if [ -n "$pm_context" ]; then - opencode run --fork --session "$base" "You are a PM (Project Manager) agent. Your role is to coordinate task delegation and review PRs. $pm_context" 2>&1 || true - else - opencode run --fork --session "$base" "You are a PM (Project Manager) agent. Your role is to coordinate task delegation and review PRs. Wait for instructions." 2>&1 || true - fi - - local after_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort) - local new_pm_session_id="" - while IFS= read -r sess; do - if [[ ! "$before_set" =~ \|${sess}\| ]] && [[ "$sess" != "$base" ]]; then - new_pm_session_id="$sess" - break - fi - done <<< "$after_sessions" - - if [ -n "$new_pm_session_id" ]; then - printf '{"type": "pm_agent", "opencode_session_id": "%s", "created_at": "%s", "state": "idle"}\n' \ - "$new_pm_session_id" "$(date -Iseconds)" > "$SESSIONS_DIR/pm-agent.json" - set_pm_agent_in_index "$new_pm_session_id" - echo "[FIX] PM agent recreated: $new_pm_session_id" - else - echo "[FIX] Warning: Could not detect new PM session ID" - fi + echo "[FIX] Recreating PM agent session..." + local base=$(get_base_session_id) + if [ -n "$base" ] && [ "$base" != "null" ]; then + rm -f "$SESSIONS_DIR/pm-agent.json" + + local before_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort) + local before_set="${before_sessions//$'\n'/|}" + + local pm_context=$(kugetsu_get_pm_context) + if [ -n "$pm_context" ]; then + opencode run --fork --session "$base" "You are a PM (Project Manager) agent. Your role is to coordinate task delegation and review PRs. $pm_context" 2>&1 || true else - echo "[FIX] Cannot recreate PM agent: base session missing" + opencode run --fork --session "$base" "You are a PM (Project Manager) agent. Your role is to coordinate task delegation and review PRs. Wait for instructions." 2>&1 || true + fi + + local after_sessions=$(opencode session list 2>/dev/null | grep -oP '^ses_\w+' | sort) + local new_pm_session_id="" + while IFS= read -r sess; do + if [[ ! "$before_set" =~ \|${sess}\| ]] && [[ "$sess" != "$base" ]]; then + new_pm_session_id="$sess" + break + fi + done <<< "$after_sessions" + + if [ -n "$new_pm_session_id" ]; then + printf '{"type": "pm_agent", "opencode_session_id": "%s", "created_at": "%s", "state": "idle"}\n' \ + "$new_pm_session_id" "$(date -Iseconds)" > "$SESSIONS_DIR/pm-agent.json" + set_pm_agent_in_index "$new_pm_session_id" + echo "[FIX] PM agent recreated: $new_pm_session_id" + else + echo "[FIX] Warning: Could not detect new PM session ID" fi else - echo "[FIX] PM agent is active, no fix needed" + echo "[FIX] Cannot recreate PM agent: base session missing" fi else echo "[FIX] Cannot fix: PM agent not initialized. Run 'kugetsu init' first." @@ -867,11 +841,6 @@ cmd_continue() { 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 "") - 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'..." if [ -n "$worktree_path" ] && [ -d "$worktree_path" ]; then echo "Using worktree: $worktree_path" diff --git a/skills/kugetsu/tests/test-kugetsu-v2.sh b/skills/kugetsu/tests/test-kugetsu-v2.sh index 2d6cf52..004a41f 100644 --- a/skills/kugetsu/tests/test-kugetsu-v2.sh +++ b/skills/kugetsu/tests/test-kugetsu-v2.sh @@ -417,14 +417,17 @@ else fi echo "" -# Test 25: status when all good (pm-agent in json but session expired) -echo "--- Test: status (session expired) ---" +# Test 25: status when all good (pm-agent in json - no longer checks opencode) +# 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 OUTPUT=$($KUGETSU status 2>&1 || true) -if [ "$OUTPUT" = "pm_agent_expired" ]; then - pass "status returns pm_agent_expired when session not in opencode" +if [ "$OUTPUT" = "ok" ]; then + pass "status returns ok when session is in kugetsu index" else - fail "status session expired: got '$OUTPUT', expected 'pm_agent_expired'" + fail "status session registered: got '$OUTPUT', expected 'ok'" fi echo ""