commandmate 0.26.1 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +430 -402
- package/.next/app-path-routes-manifest.json +32 -28
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +6 -6
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -2
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -0
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +2 -2
- package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +2 -2
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +19 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -5
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -6
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +9 -7
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +32 -28
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +3 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1538.js +7 -0
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +3 -2
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/2689.js +13 -0
- package/.next/server/chunks/2759.js +8 -0
- package/.next/server/chunks/2839.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3292.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -17
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4423.js +1 -0
- package/.next/server/chunks/4444.js +22 -8
- package/.next/server/chunks/4565.js +3 -0
- package/.next/server/chunks/467.js +1 -0
- package/.next/server/chunks/4905.js +5 -0
- package/.next/server/chunks/5017.js +1 -0
- package/.next/server/chunks/5089.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -0
- package/.next/server/chunks/5354.js +1 -0
- package/.next/server/chunks/552.js +19 -0
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5998.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +11 -11
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/7472.js +1 -0
- package/.next/server/chunks/7506.js +1 -0
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +5 -5
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9284.js +1 -0
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9508.js +1 -0
- package/.next/server/chunks/9938.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/9IXgWfBUtnEnRqnbmErTp/_buildManifest.js +1 -0
- package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
- package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
- package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
- package/.next/static/chunks/{6381-0e097c0286155883.js → 6381-8cfe50a5ca5425b1.js} +1 -1
- package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
- package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
- package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
- package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
- package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f7b3dfbe757dc6b8.js +1 -0
- package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
- package/.next/static/css/928e5a8830fbf997.css +1 -0
- package/.next/trace +13 -12
- package/.next/types/app/api/capabilities/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +40 -2
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +28 -13
- package/dist/cli/commands/instances.d.ts +30 -18
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +32 -36
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +73 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +18 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +21 -15
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +38 -0
- package/dist/cli/commands/wait.d.ts +26 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +390 -43
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +16 -0
- package/dist/cli/config/cli-tool-ids.d.ts +11 -0
- package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
- package/dist/cli/config/cli-tool-ids.js +12 -1
- package/dist/cli/types/api-responses.d.ts +443 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +18 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +22 -0
- package/dist/cli/utils/server-capabilities.d.ts +56 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
- package/dist/cli/utils/server-capabilities.js +166 -0
- package/dist/cli/utils/session-target.d.ts +70 -0
- package/dist/cli/utils/session-target.d.ts.map +1 -0
- package/dist/cli/utils/session-target.js +118 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/lib/cli-tools/types.d.ts +61 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +41 -0
- package/dist/lib/detection/ansi.d.ts +2 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +3 -2
- package/dist/lib/detection/tools/verified-against.d.ts +84 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
- package/dist/lib/detection/tools/verified-against.js +88 -0
- package/dist/lib/detection/version-probes.d.ts +207 -0
- package/dist/lib/detection/version-probes.d.ts.map +1 -0
- package/dist/lib/detection/version-probes.js +290 -0
- package/dist/lib/security/env-sanitizer.d.ts +198 -0
- package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
- package/dist/lib/security/env-sanitizer.js +232 -0
- package/dist/server/locales/en/notifications.json +17 -6
- package/dist/server/locales/ja/notifications.json +17 -6
- package/dist/server/src/config/activity-bar-config.js +4 -0
- package/dist/server/src/config/cli-tool-timing-config.js +59 -2
- package/dist/server/src/config/copilot-constants.js +11 -1
- package/dist/server/src/config/detection-evidence-config.js +129 -0
- package/dist/server/src/config/schedule-config.js +56 -7
- package/dist/server/src/config/tmux-pane-config.js +18 -1
- package/dist/server/src/lib/auto-yes-poller.js +36 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
- package/dist/server/src/lib/cli-tools/base.js +131 -10
- package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
- package/dist/server/src/lib/cli-tools/claude.js +1 -1
- package/dist/server/src/lib/cli-tools/codex.js +6 -2
- package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/server/src/lib/cli-tools/copilot.js +307 -81
- package/dist/server/src/lib/cli-tools/gemini.js +8 -6
- package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
- package/dist/server/src/lib/cli-tools/index.js +11 -1
- package/dist/server/src/lib/cli-tools/manager.js +56 -4
- package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
- package/dist/server/src/lib/cli-tools/opencode.js +233 -30
- package/dist/server/src/lib/cli-tools/session-name.js +57 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
- package/dist/server/src/lib/cli-tools/types.js +41 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
- package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
- package/dist/server/src/lib/cmate-parser.js +12 -4
- package/dist/server/src/lib/db/db.js +5 -1
- package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
- package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
- package/dist/server/src/lib/detection/ansi.js +3 -2
- package/dist/server/src/lib/detection/cli-patterns.js +901 -67
- package/dist/server/src/lib/detection/composer-text.js +455 -0
- package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
- package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
- package/dist/server/src/lib/detection/status-detector.js +76 -675
- package/dist/server/src/lib/detection/status-reason.js +57 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
- package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
- package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
- package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
- package/dist/server/src/lib/detection/tools/frame.js +47 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
- package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
- package/dist/server/src/lib/detection/tools/registry.js +58 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
- package/dist/server/src/lib/detection/tools/types.js +34 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
- package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
- package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
- package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
- package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
- package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
- package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
- package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
- package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
- package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
- package/dist/server/src/lib/job-executor.js +16 -4
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
- package/dist/server/src/lib/polling/response-checker.js +243 -26
- package/dist/server/src/lib/push/failure-episode-state.js +127 -0
- package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
- package/dist/server/src/lib/push/index.js +35 -1
- package/dist/server/src/lib/push/prompt-card-state.js +93 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
- package/dist/server/src/lib/push/push-sender.js +82 -7
- package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
- package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
- package/dist/server/src/lib/response-cleaner.js +93 -20
- package/dist/server/src/lib/response-extractor.js +98 -5
- package/dist/server/src/lib/security/env-sanitizer.js +179 -5
- package/dist/server/src/lib/session/agent-event-state.js +1038 -189
- package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
- package/dist/server/src/lib/session/claude-executor.js +23 -3
- package/dist/server/src/lib/session/claude-session.js +11 -1
- package/dist/server/src/lib/session/composer-clear.js +95 -0
- package/dist/server/src/lib/session/current-output-builder.js +267 -25
- package/dist/server/src/lib/session/provisional-turn.js +310 -0
- package/dist/server/src/lib/session/resolve-session-target.js +156 -0
- package/dist/server/src/lib/session/send-user-message.js +14 -18
- package/dist/server/src/lib/session/session-start-error.js +53 -1
- package/dist/server/src/lib/session/status-evidence.js +217 -0
- package/dist/server/src/lib/session/structured-prompt.js +46 -4
- package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
- package/dist/server/src/lib/tmux/key-sequence.js +120 -0
- package/dist/server/src/lib/tmux/tmux.js +91 -19
- package/dist/server/src/lib/tui-accumulator.js +68 -1
- package/dist/server/src/lib/verification/gate-runner.js +84 -1
- package/dist/server/src/lib/ws-server.js +8 -5
- package/dist/server/src/types/cli-tool-contracts.js +75 -0
- package/dist/server/src/types/terminal-keys.js +37 -0
- package/dist/types/cli-tool-contracts.d.ts +235 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -0
- package/dist/types/cli-tool-contracts.js +75 -0
- package/package.json +3 -2
- package/public/sw.js +65 -2
- package/.next/server/chunks/1841.js +0 -1
- package/.next/server/chunks/233.js +0 -1
- package/.next/server/chunks/3022.js +0 -1
- package/.next/server/chunks/3270.js +0 -1
- package/.next/server/chunks/4455.js +0 -1
- package/.next/server/chunks/5959.js +0 -27
- package/.next/server/chunks/7458.js +0 -6
- package/.next/server/chunks/8730.js +0 -1
- package/.next/server/chunks/9058.js +0 -1
- package/.next/server/chunks/9687.js +0 -3
- package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
- package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-fdfca039b7f5837e.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/wyFLOpmKpr45BHZ4svYpE/_buildManifest.js +0 -1
- /package/.next/static/{wyFLOpmKpr45BHZ4svYpE → 9IXgWfBUtnEnRqnbmErTp}/_ssgManifest.js +0 -0
|
@@ -25,42 +25,14 @@
|
|
|
25
25
|
* coupling via a minimal DTO/projection type.
|
|
26
26
|
*/
|
|
27
27
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.SELECTION_LIST_REASONS = exports.STATUS_REASON = void 0;
|
|
28
|
+
exports.STATUS_CHECK_LINE_COUNT = exports.GENERATING_REASONS = exports.SELECTION_LIST_REASONS = exports.STATUS_REASON = void 0;
|
|
29
|
+
exports.isGeneratingStatus = isGeneratingStatus;
|
|
29
30
|
exports.detectSessionStatus = detectSessionStatus;
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* Number of lines from the end to check for prompt and input indicators
|
|
36
|
-
* @constant
|
|
37
|
-
*/
|
|
38
|
-
const STATUS_CHECK_LINE_COUNT = 15;
|
|
39
|
-
// THINKING_TAIL_LINE_COUNT imported from @/config/thinking-constants (Issue #575)
|
|
40
|
-
// Previously THINKING_TAIL_LINE_COUNT = 5 (local constant)
|
|
41
|
-
// See also: THINKING_CHECK_LINE_COUNT (50) in auto-yes-manager.ts (wider window for safety)
|
|
42
|
-
/**
|
|
43
|
-
* Reason string constants for StatusDetectionResult.reason.
|
|
44
|
-
* Shared between status-detector.ts and current-output/route.ts to prevent typos (DR2-003).
|
|
45
|
-
*/
|
|
46
|
-
exports.STATUS_REASON = {
|
|
47
|
-
PROMPT_DETECTED: 'prompt_detected',
|
|
48
|
-
THINKING_INDICATOR: 'thinking_indicator',
|
|
49
|
-
OPENCODE_PROCESSING_INDICATOR: 'opencode_processing_indicator',
|
|
50
|
-
OPENCODE_SELECTION_LIST: 'opencode_selection_list',
|
|
51
|
-
CLAUDE_SELECTION_LIST: 'claude_selection_list',
|
|
52
|
-
COPILOT_SELECTION_LIST: 'copilot_selection_list',
|
|
53
|
-
CODEX_SELECTION_LIST: 'codex_selection_list',
|
|
54
|
-
/** Issue #1017: Codex pager / edit-previous (transcript) mode. */
|
|
55
|
-
CODEX_PAGER: 'codex_pager',
|
|
56
|
-
/** Issue #1829: Codex's hooks review screens, which only `t`/`esc` leave. */
|
|
57
|
-
CODEX_HOOKS_REVIEW: 'codex_hooks_review',
|
|
58
|
-
ANTIGRAVITY_SELECTION_LIST: 'antigravity_selection_list',
|
|
59
|
-
OPENCODE_RESPONSE_COMPLETE: 'opencode_response_complete',
|
|
60
|
-
INPUT_PROMPT: 'input_prompt',
|
|
61
|
-
NO_RECENT_OUTPUT: 'no_recent_output',
|
|
62
|
-
DEFAULT: 'default',
|
|
63
|
-
};
|
|
31
|
+
const status_reason_1 = require("./status-reason");
|
|
32
|
+
const frame_1 = require("./tools/frame");
|
|
33
|
+
const registry_1 = require("./tools/registry");
|
|
34
|
+
var status_reason_2 = require("./status-reason");
|
|
35
|
+
Object.defineProperty(exports, "STATUS_REASON", { enumerable: true, get: function () { return status_reason_2.STATUS_REASON; } });
|
|
64
36
|
/**
|
|
65
37
|
* Set of STATUS_REASON values that indicate a selection list is active.
|
|
66
38
|
* Used by current-output/route.ts to determine if NavigationButtons should be shown.
|
|
@@ -69,669 +41,98 @@ exports.STATUS_REASON = {
|
|
|
69
41
|
* @see STATUS_REASON
|
|
70
42
|
*/
|
|
71
43
|
exports.SELECTION_LIST_REASONS = new Set([
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
44
|
+
status_reason_1.STATUS_REASON.OPENCODE_SELECTION_LIST,
|
|
45
|
+
// Issue #1893: opencode's permission dialog is a horizontal button strip that
|
|
46
|
+
// only ←/→ + Enter drive — typing an option number does nothing (measured on
|
|
47
|
+
// 1.18.21), so it is a `menu`, not something `respond <id> N` can answer.
|
|
48
|
+
status_reason_1.STATUS_REASON.OPENCODE_PERMISSION_PROMPT,
|
|
49
|
+
status_reason_1.STATUS_REASON.CLAUDE_SELECTION_LIST,
|
|
50
|
+
status_reason_1.STATUS_REASON.COPILOT_SELECTION_LIST,
|
|
51
|
+
status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
|
|
76
52
|
// Issue #1017: Codex pager/edit-previous mode also drives NavigationButtons.
|
|
77
|
-
|
|
53
|
+
status_reason_1.STATUS_REASON.CODEX_PAGER,
|
|
78
54
|
// Issue #1829: the hooks review screens have no numbered options — `t` and
|
|
79
55
|
// `esc` are the only ways out, and NavigationButtons is how a human sends them.
|
|
80
|
-
|
|
81
|
-
|
|
56
|
+
status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW,
|
|
57
|
+
status_reason_1.STATUS_REASON.ANTIGRAVITY_SELECTION_LIST,
|
|
82
58
|
]);
|
|
83
59
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* @constant
|
|
87
|
-
*/
|
|
88
|
-
const STALE_OUTPUT_THRESHOLD_MS = 5000;
|
|
89
|
-
/**
|
|
90
|
-
* Issue #1160: anchors for the BOTTOM edge of a Codex approval / numbered-choice
|
|
91
|
-
* prompt. Used only by isCodexStalePrompt() to distinguish an ACTIVE prompt (the
|
|
92
|
-
* bottom-most interactive element → waiting) from an already-ANSWERED one lingering
|
|
93
|
-
* in scrollback with Codex processing below it (→ fall through to running detection).
|
|
94
|
-
* Detection-wide Codex patterns live in cli-patterns.ts; these stay local to the guard.
|
|
60
|
+
* The `running` reasons that mean "the agent is producing output right now"
|
|
61
|
+
* (Issue #1912).
|
|
95
62
|
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Issue #1160: decide whether a Codex prompt that detectPrompt() matched is a stale,
|
|
105
|
-
* already-answered prompt left in the 50-line scan window rather than an active one.
|
|
63
|
+
* `current-output-builder` derives `thinking` / `isGenerating` from this, and it
|
|
64
|
+
* was a single `=== THINKING_INDICATOR` comparison until opencode grew a second
|
|
65
|
+
* one: branch A of the opencode block answers `opencode_processing_indicator`
|
|
66
|
+
* for the footer that reads `esc interrupt`, which is opencode's ONLY signal
|
|
67
|
+
* while it is between the submitted prompt and the first transcript row. A
|
|
68
|
+
* scraper-only session (no hooks) therefore showed no thinking indicator in
|
|
69
|
+
* `MessageList` for exactly the stretch where one is wanted.
|
|
106
70
|
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
* so detectPrompt() keeps matching it and detectSessionStatus() reports `waiting` even
|
|
111
|
-
* after the user answered and Codex resumed — the sidebar status dot then stays orange
|
|
112
|
-
* forever (the reported bug).
|
|
71
|
+
* `DEFAULT` is deliberately absent: it is the "output changed recently" fallback
|
|
72
|
+
* and says nothing about the agent having announced itself, so promoting it
|
|
73
|
+
* would light the indicator on any repainting frame.
|
|
113
74
|
*
|
|
114
|
-
*
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
75
|
+
* @see STATUS_REASON
|
|
76
|
+
*/
|
|
77
|
+
exports.GENERATING_REASONS = new Set([
|
|
78
|
+
status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
79
|
+
status_reason_1.STATUS_REASON.OPENCODE_PROCESSING_INDICATOR,
|
|
80
|
+
]);
|
|
81
|
+
/**
|
|
82
|
+
* Whether a detection result describes an agent that is actively generating.
|
|
119
83
|
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* isPrompt=false before this guard runs, so only the thinking-indicator signal is needed
|
|
123
|
-
* here — keeping the guard conservative against flipping a genuine prompt to running.
|
|
84
|
+
* Both halves matter: the reason alone is not enough because a stale frame can
|
|
85
|
+
* carry a `running` reason after the status has degraded to `ready`.
|
|
124
86
|
*/
|
|
125
|
-
function
|
|
126
|
-
|
|
127
|
-
// interest is above it — same footer-boundary scan as priority 2.7 below.
|
|
128
|
-
let footerBoundary = -1;
|
|
129
|
-
for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
|
|
130
|
-
if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(contentLines[ci])) {
|
|
131
|
-
footerBoundary = ci;
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
const end = footerBoundary >= 0 ? footerBoundary : contentLines.length;
|
|
136
|
-
let lastPromptIdx = -1;
|
|
137
|
-
let lastThinkingIdx = -1;
|
|
138
|
-
for (let i = 0; i < end; i++) {
|
|
139
|
-
const line = contentLines[i];
|
|
140
|
-
const trimmed = line.trim();
|
|
141
|
-
if (trimmed === '') {
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
if (CODEX_CONFIRMATION_FOOTER_PATTERN.test(trimmed) ||
|
|
145
|
-
CODEX_NUMBERED_OPTION_PATTERN.test(trimmed)) {
|
|
146
|
-
lastPromptIdx = i;
|
|
147
|
-
}
|
|
148
|
-
// detectThinking('codex', …) requires the "•" activity prefix, so option text that
|
|
149
|
-
// merely contains a word like "Running" cannot be mistaken for a running indicator.
|
|
150
|
-
if ((0, cli_patterns_1.detectThinking)('codex', line)) {
|
|
151
|
-
lastThinkingIdx = i;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return lastPromptIdx >= 0 && lastThinkingIdx > lastPromptIdx;
|
|
87
|
+
function isGeneratingStatus(result) {
|
|
88
|
+
return result.status === 'running' && exports.GENERATING_REASONS.has(result.reason);
|
|
155
89
|
}
|
|
156
90
|
/**
|
|
157
|
-
*
|
|
158
|
-
* is the agent ASKING FOR APPROVAL rather than the user browsing a menu.
|
|
91
|
+
* Number of lines from the end to check for prompt and input indicators.
|
|
159
92
|
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* --on-prompt agent` could never raise exit 10 for a Codex worker sitting on
|
|
165
|
-
* "Would you like to run the following command?" — it polled until the timeout while the
|
|
166
|
-
* agent was stopped. Auto-Yes was unaffected because it calls detectPrompt() directly,
|
|
167
|
-
* which parses these frames correctly; only the status-detector layer lost them.
|
|
168
|
-
*
|
|
169
|
-
* Two OR'd signals, both measured against live codex-cli 0.146.0 captures
|
|
170
|
-
* (5 approval frames from one real session + 2 `/model` picker frames):
|
|
171
|
-
* 1. an interrogative question line directly above the options
|
|
172
|
-
* ("Would you like to run the following command?" → the extracted question ends
|
|
173
|
-
* with "?"; a picker's ends with its description, e.g. "…browse all models.")
|
|
174
|
-
* 2. the approval escape verb ("esc to cancel" vs a menu's "esc to go back" /
|
|
175
|
-
* "esc to dismiss")
|
|
176
|
-
* Either alone covers every measured approval frame, so a rewording of one does not
|
|
177
|
-
* reopen the bug.
|
|
178
|
-
*
|
|
179
|
-
* Gated on `promptDetection.isPrompt` so a frame detectPrompt() could not parse into
|
|
180
|
-
* options (e.g. the unnumbered "Select a model" list of Issue #619) can never be
|
|
181
|
-
* promoted to an active prompt.
|
|
93
|
+
* Re-exported from `tools/frame.ts`, where Issue #1927 moved the definition so
|
|
94
|
+
* the tool modules and the shared chain read one constant. Kept exported here
|
|
95
|
+
* because it was published from this module first and is imported by name
|
|
96
|
+
* elsewhere.
|
|
182
97
|
*/
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
return false;
|
|
186
|
-
const question = promptDetection.promptData?.question?.trim() ?? '';
|
|
187
|
-
return question.endsWith('?') || cli_patterns_1.CODEX_APPROVAL_FOOTER_PATTERN.test(selectionWindow);
|
|
188
|
-
}
|
|
98
|
+
var frame_2 = require("./tools/frame");
|
|
99
|
+
Object.defineProperty(exports, "STATUS_CHECK_LINE_COUNT", { enumerable: true, get: function () { return frame_2.STATUS_CHECK_LINE_COUNT; } });
|
|
189
100
|
/**
|
|
190
|
-
* Detect session status with confidence level
|
|
101
|
+
* Detect session status with confidence level.
|
|
102
|
+
*
|
|
103
|
+
* Since Issue #1927 this is a facade: it normalises the frame once and hands it
|
|
104
|
+
* to the tool's own {@link ToolStatusDetector}, which runs the priority chain in
|
|
105
|
+
* `tools/run-detection.ts`. The signature, the return shape and every verdict a
|
|
106
|
+
* tool can reach are unchanged by that move; what the split buys is a place to
|
|
107
|
+
* state, per tool, what counts as evidence (§4 D1 / D2).
|
|
191
108
|
*
|
|
192
|
-
* Priority order:
|
|
193
|
-
* 1.
|
|
194
|
-
* 2.
|
|
195
|
-
* 3.
|
|
196
|
-
* 4.
|
|
197
|
-
* 5.
|
|
109
|
+
* Priority order (see `tools/run-detection.ts` for the full commentary):
|
|
110
|
+
* 1. Tool-specific pre-prompt branches (pickers, pagers, status bars)
|
|
111
|
+
* 2. Interactive prompt (yes/no, multiple choice) -> waiting
|
|
112
|
+
* 3. Thinking indicator (spinner, progress) -> running
|
|
113
|
+
* 4. Tool-specific running / completion markers
|
|
114
|
+
* 5. Input prompt (>, ❯, ›, $, %) -> ready, with per-tool idle evidence
|
|
115
|
+
* 6. No recent output (>5s) -> running, evidence none (Issue #1927; was `ready`)
|
|
116
|
+
* 7. Floor -> running, evidence none (`unknown_frame` / `default`)
|
|
198
117
|
*
|
|
199
118
|
* @param output - Raw tmux output (including ANSI escape codes).
|
|
200
119
|
* This function handles ANSI stripping internally.
|
|
201
120
|
* @param cliToolId - CLI tool identifier for pattern selection (CLIToolType).
|
|
202
121
|
* @param lastOutputTimestamp - Optional timestamp (Date) for time-based heuristic.
|
|
203
|
-
* @returns Detection result with status, confidence, reason, hasActivePrompt, and promptDetection
|
|
122
|
+
* @returns Detection result with status, confidence, reason, hasActivePrompt, evidence and promptDetection
|
|
204
123
|
*/
|
|
205
124
|
function detectSessionStatus(output, cliToolId, lastOutputTimestamp) {
|
|
206
|
-
|
|
207
|
-
const
|
|
208
|
-
const lines = cleanOutput.split('\n');
|
|
209
|
-
// Strip trailing empty lines (tmux terminal padding) before windowing.
|
|
210
|
-
// tmux buffers often end with many empty padding lines that would otherwise
|
|
211
|
-
// fill the entire detection window, hiding the actual prompt/status content.
|
|
212
|
-
let lastNonEmptyIndex = lines.length - 1;
|
|
213
|
-
while (lastNonEmptyIndex >= 0 && lines[lastNonEmptyIndex].trim() === '') {
|
|
214
|
-
lastNonEmptyIndex--;
|
|
215
|
-
}
|
|
216
|
-
const contentLines = lines.slice(0, lastNonEmptyIndex + 1);
|
|
217
|
-
const lastLines = contentLines.slice(-STATUS_CHECK_LINE_COUNT).join('\n');
|
|
218
|
-
// DR-003: Separate thinking detection window (5 lines) from prompt detection window (15 lines)
|
|
219
|
-
const thinkingLines = contentLines.slice(-thinking_constants_1.THINKING_TAIL_LINE_COUNT).join('\n');
|
|
220
|
-
// 0. Copilot: selection list detection BEFORE thinking detection
|
|
221
|
-
// COPILOT_THINKING_PATTERN includes "Reasoning\s+[■▪▮]" which matches the
|
|
222
|
-
// "Reasoning ■■■ medium" UI element shown in /model selection lists.
|
|
223
|
-
// Without this early check, the selection list would be misdetected as thinking.
|
|
224
|
-
// However, yes/no prompts also contain "to navigate · Enter to select" footer,
|
|
225
|
-
// so we must check detectPrompt first — if a prompt is detected, it takes priority
|
|
226
|
-
// over selection list (prompts show PromptPanel with Yes/No buttons).
|
|
227
|
-
const copilotSelectionWindow = contentLines.slice(-30).join('\n');
|
|
228
|
-
if (cliToolId === 'copilot' && cli_patterns_1.COPILOT_SELECTION_LIST_PATTERN.test(copilotSelectionWindow)) {
|
|
229
|
-
const promptOptions = (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId);
|
|
230
|
-
const promptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(cleanOutput), promptOptions);
|
|
231
|
-
if (promptDetection.isPrompt) {
|
|
232
|
-
// Distinguish yes/no prompts (2-3 options, e.g., "Do you want to run this command?")
|
|
233
|
-
// from ask_user multi-select prompts (4+ options). Yes/no prompts should show
|
|
234
|
-
// PromptPanel with buttons; ask_user prompts need NavigationButtons for ↑↓ selection.
|
|
235
|
-
const optionsCount = promptDetection.promptData?.options?.length ?? 0;
|
|
236
|
-
if (optionsCount <= 3) {
|
|
237
|
-
return {
|
|
238
|
-
status: 'waiting',
|
|
239
|
-
confidence: 'high',
|
|
240
|
-
reason: 'prompt_detected',
|
|
241
|
-
hasActivePrompt: true,
|
|
242
|
-
promptDetection,
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
// 4+ options: treat as selection list (NavigationButtons)
|
|
246
|
-
}
|
|
247
|
-
return {
|
|
248
|
-
status: 'waiting',
|
|
249
|
-
confidence: 'high',
|
|
250
|
-
reason: exports.STATUS_REASON.COPILOT_SELECTION_LIST,
|
|
251
|
-
hasActivePrompt: false,
|
|
252
|
-
promptDetection,
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
// 0.5. Copilot: thinking detection BEFORE prompt detection (Issue #547)
|
|
256
|
-
// Copilot CLI keeps the "❯" prompt visible even during processing,
|
|
257
|
-
// so prompt detection would always match first. Check thinking first for copilot.
|
|
258
|
-
// Uses last 15 lines (not 5) because copilot shows action log lines above prompt.
|
|
259
|
-
const copilotThinkingWindow = contentLines.slice(-STATUS_CHECK_LINE_COUNT).join('\n');
|
|
260
|
-
if (cliToolId === 'copilot' && (0, cli_patterns_1.detectThinking)(cliToolId, copilotThinkingWindow)) {
|
|
261
|
-
const promptOptions = (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId);
|
|
262
|
-
const promptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(cleanOutput), promptOptions);
|
|
263
|
-
return {
|
|
264
|
-
status: 'running',
|
|
265
|
-
confidence: 'high',
|
|
266
|
-
reason: 'thinking_indicator',
|
|
267
|
-
hasActivePrompt: false,
|
|
268
|
-
promptDetection,
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
// 0.7. Codex: pager / edit-previous (transcript) mode detection (Issue #1017)
|
|
272
|
-
// Codex's transcript pager renders scroll / edit key-hint footers, e.g.:
|
|
273
|
-
// "↑/↓ to scroll pgup/pgdn to page home/end to jump"
|
|
274
|
-
// "q to quit esc/← to edit prev → to edit next enter to edit message"
|
|
275
|
-
// together with a scroll-percentage separator ("─ N% ─") in place of the usual
|
|
276
|
-
// "model · N% left · path" status bar. So neither CODEX_SELECTION_LIST_PATTERN
|
|
277
|
-
// (footer is "enter to edit message", not "press enter to confirm/select") nor the
|
|
278
|
-
// status-bar boundary logic in 0.8 / 2.7 fire, leaving the read-only TerminalDisplay
|
|
279
|
-
// with no way to scroll or escape. Detect the pager footer directly — independent of
|
|
280
|
-
// the "N% left ·" status bar — and surface it as a selection list so NavigationButtons
|
|
281
|
-
// render (isSelectionListActive via SELECTION_LIST_REASONS). Checked ahead of
|
|
282
|
-
// detectPrompt/thinking because the pager has no active y/n prompt and its transcript
|
|
283
|
-
// content must not be misread as one. CODEX_PAGER_FOOTER_PATTERN does not match the
|
|
284
|
-
// genuine "/model" selection footer, so the 0.8 path below is unaffected (no regression).
|
|
285
|
-
if (cliToolId === 'codex' && cli_patterns_1.CODEX_PAGER_FOOTER_PATTERN.test(lastLines)) {
|
|
286
|
-
const codexPagerPromptOptions = (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId);
|
|
287
|
-
const codexPagerPromptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(cleanOutput), codexPagerPromptOptions);
|
|
288
|
-
return {
|
|
289
|
-
status: 'waiting',
|
|
290
|
-
confidence: 'high',
|
|
291
|
-
reason: exports.STATUS_REASON.CODEX_PAGER,
|
|
292
|
-
hasActivePrompt: false,
|
|
293
|
-
promptDetection: codexPagerPromptDetection,
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
// 0.75. Codex: the hooks review screens (Issue #1829)
|
|
297
|
-
// codex-cli 0.148.0 answers "1. Review hooks" with a two-screen review UI:
|
|
298
|
-
// screen 2 "Press t to trust all; enter to review hooks; esc to close"
|
|
299
|
-
// screen 3 "Press t to trust; esc to go back"
|
|
300
|
-
// Neither carries a numbered option, a "press enter to confirm" footer, or any
|
|
301
|
-
// thinking indicator, so every branch below falls through to the `running`
|
|
302
|
-
// default -- which is how two live sessions sat parked on screen 3 while the UI
|
|
303
|
-
// and `cmate wait` both reported them as busy. They are the bottom-most
|
|
304
|
-
// interactive element and nothing but a keypress moves them: that is `waiting`.
|
|
305
|
-
// Checked ahead of prompt detection because the transcript rows on screen 2 are
|
|
306
|
-
// ordinary text that must not be read as options.
|
|
307
|
-
if (cliToolId === 'codex') {
|
|
308
|
-
const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)(cleanOutput);
|
|
309
|
-
if (codexLifecycleDialog === 'hooks-list' || codexLifecycleDialog === 'hooks-detail') {
|
|
310
|
-
return {
|
|
311
|
-
status: 'waiting',
|
|
312
|
-
confidence: 'high',
|
|
313
|
-
reason: exports.STATUS_REASON.CODEX_HOOKS_REVIEW,
|
|
314
|
-
hasActivePrompt: false,
|
|
315
|
-
promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(cleanOutput), (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId)),
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
// 0.8. Codex: selection list detection BEFORE prompt detection (Issue #622)
|
|
320
|
-
// CODEX_SELECTION_LIST_PATTERN matches "press enter to confirm/select" footer.
|
|
321
|
-
// Without this early check, detectPrompt() at priority 1 would detect the numbered
|
|
322
|
-
// options (e.g., "› 1. gpt-5.4") as a multiple_choice prompt, preventing
|
|
323
|
-
// NavigationButtons from being shown.
|
|
324
|
-
// This mirrors the Copilot Priority 0 pattern above.
|
|
325
|
-
//
|
|
326
|
-
// The pattern is scoped to the content window immediately above the Codex status
|
|
327
|
-
// bar (mirroring step 2.7's boundary detection). Matching against the full content
|
|
328
|
-
// would allow stale "Press enter to confirm" text from already-answered approval
|
|
329
|
-
// prompts high in scrollback to falsely trigger NavigationButtons.
|
|
330
|
-
if (cliToolId === 'codex') {
|
|
331
|
-
// Issue #1150: locate the status bar via CODEX_STATUS_BAR_PATTERN (version-
|
|
332
|
-
// independent; matches both legacy "N% left ·" and v0.141 "model · path" bars).
|
|
333
|
-
let codexFooterBoundary = -1;
|
|
334
|
-
for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
|
|
335
|
-
if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(contentLines[ci])) {
|
|
336
|
-
codexFooterBoundary = ci;
|
|
337
|
-
break;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
let codexContentEnd = codexFooterBoundary >= 0 ? codexFooterBoundary - 1 : contentLines.length - 1;
|
|
341
|
-
while (codexContentEnd >= 0 && contentLines[codexContentEnd].trim() === '') {
|
|
342
|
-
codexContentEnd--;
|
|
343
|
-
}
|
|
344
|
-
if (codexContentEnd >= 0) {
|
|
345
|
-
const codexSelectionWindow = contentLines
|
|
346
|
-
.slice(Math.max(0, codexContentEnd - STATUS_CHECK_LINE_COUNT + 1), codexContentEnd + 1)
|
|
347
|
-
.join('\n');
|
|
348
|
-
if (cli_patterns_1.CODEX_SELECTION_LIST_PATTERN.test(codexSelectionWindow)) {
|
|
349
|
-
const codexPromptOptions = (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId);
|
|
350
|
-
const codexPromptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(cleanOutput), codexPromptOptions);
|
|
351
|
-
// Issue #1628: an approval request wears the same footer as a menu but is the
|
|
352
|
-
// agent blocked on the human, so it must surface as an active prompt (exit 10
|
|
353
|
-
// for `wait`, PromptPanel in the UI) instead of a navigable list. The #1160
|
|
354
|
-
// staleness guard still applies: an ALREADY-ANSWERED approval whose footer is
|
|
355
|
-
// still inside the window, with Codex running below it, is dead scrollback.
|
|
356
|
-
if (isCodexApprovalRequest(codexPromptDetection, codexSelectionWindow) &&
|
|
357
|
-
!isCodexStalePrompt(contentLines)) {
|
|
358
|
-
return {
|
|
359
|
-
status: 'waiting',
|
|
360
|
-
confidence: 'high',
|
|
361
|
-
reason: exports.STATUS_REASON.PROMPT_DETECTED,
|
|
362
|
-
hasActivePrompt: true,
|
|
363
|
-
promptDetection: codexPromptDetection,
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
return {
|
|
367
|
-
status: 'waiting',
|
|
368
|
-
confidence: 'high',
|
|
369
|
-
reason: exports.STATUS_REASON.CODEX_SELECTION_LIST,
|
|
370
|
-
hasActivePrompt: false,
|
|
371
|
-
promptDetection: codexPromptDetection,
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
// 0.9. Antigravity: selection list detection BEFORE thinking detection (Issue #995)
|
|
377
|
-
// agy's "Switch Model" (and other) selection TUIs render an "esc to cancel"
|
|
378
|
-
// footer that ANTIGRAVITY_THINKING_PATTERN also matches, so the generic thinking
|
|
379
|
-
// check at priority 2 (and the antigravity footer branch at 2.8) would otherwise
|
|
380
|
-
// misreport the selection screen as "generating" and NavigationButtons would never
|
|
381
|
-
// be shown. Detecting the selection list here — ahead of thinking — is the fix.
|
|
382
|
-
// Mirrors the Copilot (priority 0) / Codex (priority 0.8) early-detection pattern.
|
|
383
|
-
if (cliToolId === 'antigravity' && cli_patterns_1.ANTIGRAVITY_SELECTION_LIST_PATTERN.test(lastLines)) {
|
|
384
|
-
const agyPromptOptions = (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId);
|
|
385
|
-
const agyPromptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(cleanOutput), agyPromptOptions);
|
|
386
|
-
return {
|
|
387
|
-
status: 'waiting',
|
|
388
|
-
confidence: 'high',
|
|
389
|
-
reason: exports.STATUS_REASON.ANTIGRAVITY_SELECTION_LIST,
|
|
390
|
-
hasActivePrompt: false,
|
|
391
|
-
promptDetection: agyPromptDetection,
|
|
392
|
-
};
|
|
393
|
-
}
|
|
394
|
-
// 1. Interactive prompt detection (highest priority)
|
|
395
|
-
// This includes yes/no prompts, multiple choice, and approval prompts
|
|
396
|
-
const promptOptions = (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId);
|
|
397
|
-
// Apply stripBoxDrawing() for Gemini CLI and OpenCode TUI compatibility:
|
|
398
|
-
// Gemini wraps prompts in box-drawing characters (╭╮╰╯│─) which prevent
|
|
399
|
-
// detectPrompt() from recognizing the prompt content.
|
|
400
|
-
// OpenCode TUI uses ┃ borders and █ scrollbar that need stripping.
|
|
401
|
-
// For OpenCode, Codex, and Claude, use full cleanOutput instead of lastLines
|
|
402
|
-
// (15-line window) because their multiple-choice prompts with descriptions
|
|
403
|
-
// can exceed 15 lines. Examples: Codex approval prompts with long file lists,
|
|
404
|
-
// Claude "Yes, and don't ask again for: git commit -m ..." options that embed
|
|
405
|
-
// full commit messages. detectPrompt() applies its own 50-line window internally.
|
|
406
|
-
const promptInput = (cliToolId === 'opencode' || cliToolId === 'codex' || cliToolId === 'claude' || cliToolId === 'copilot')
|
|
407
|
-
? (0, cli_patterns_1.stripBoxDrawing)(cleanOutput)
|
|
408
|
-
: (0, cli_patterns_1.stripBoxDrawing)(lastLines);
|
|
409
|
-
let promptDetection = (0, prompt_detector_1.detectPrompt)(promptInput, promptOptions);
|
|
410
|
-
if (promptDetection.isPrompt) {
|
|
411
|
-
// Issue #1160: Codex keeps an ANSWERED approval / numbered-choice block
|
|
412
|
-
// ("1. Yes / 2. No" + "press number to confirm" footer) in its transcript
|
|
413
|
-
// (non-alternate-screen, so tmux keeps TMUX_HISTORY_LIMIT lines of scrollback for
|
|
414
|
-
// it) instead of repainting it away like Claude. detectPrompt's
|
|
415
|
-
// 50-line window then keeps matching that dead prompt, so this priority-1 branch
|
|
416
|
-
// returns `waiting` even after the user answered and Codex resumed — the sidebar
|
|
417
|
-
// status dot stays orange forever (the reported bug). Guard with a position check:
|
|
418
|
-
// treat the prompt as active only when it is the bottom-most interactive element.
|
|
419
|
-
// If a Codex thinking indicator (• Working / • Ran / …) sits BELOW the prompt block,
|
|
420
|
-
// it is stale scrollback — neutralize the detection (so Auto-Yes and the sidebar
|
|
421
|
-
// never act on a dead prompt) and fall through to the priority-2.7 running/idle
|
|
422
|
-
// check. Unanswered prompts (nothing running below the block) still return `waiting`,
|
|
423
|
-
// so Auto-Yes is unaffected.
|
|
424
|
-
if (cliToolId === 'codex' && isCodexStalePrompt(contentLines)) {
|
|
425
|
-
promptDetection = { ...promptDetection, isPrompt: false, promptData: undefined };
|
|
426
|
-
}
|
|
427
|
-
else {
|
|
428
|
-
return {
|
|
429
|
-
status: 'waiting',
|
|
430
|
-
confidence: 'high',
|
|
431
|
-
reason: 'prompt_detected',
|
|
432
|
-
hasActivePrompt: true,
|
|
433
|
-
promptDetection,
|
|
434
|
-
};
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
// 1.5. Claude CLI selection list detection
|
|
438
|
-
// Claude CLI's multi-select/checkbox prompts (e.g., AskUserQuestion with checkboxes)
|
|
439
|
-
// use arrow keys + Enter to navigate and toggle, not number input.
|
|
440
|
-
// The 15-line window may miss the question line, causing SEC-001a rejection above.
|
|
441
|
-
// Detect via the footer instruction pattern and show NavigationButtons instead of PromptPanel.
|
|
442
|
-
if (cliToolId === 'claude' && cli_patterns_1.CLAUDE_SELECTION_LIST_FOOTER.test(lastLines)) {
|
|
443
|
-
return {
|
|
444
|
-
status: 'waiting',
|
|
445
|
-
confidence: 'high',
|
|
446
|
-
reason: exports.STATUS_REASON.CLAUDE_SELECTION_LIST,
|
|
447
|
-
hasActivePrompt: false,
|
|
448
|
-
promptDetection,
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
|
-
// 1.6. Copilot CLI selection list detection — moved to priority 0 (above thinking)
|
|
452
|
-
// See comment at priority 0 for rationale.
|
|
453
|
-
// 2. Thinking indicator detection - THINKING_TAIL_LINE_COUNT window (narrower)
|
|
454
|
-
// CLI tool is actively processing (shows spinner, "Planning...", etc.)
|
|
455
|
-
if ((0, cli_patterns_1.detectThinking)(cliToolId, thinkingLines)) {
|
|
456
|
-
return {
|
|
457
|
-
status: 'running',
|
|
458
|
-
confidence: 'high',
|
|
459
|
-
reason: 'thinking_indicator',
|
|
460
|
-
hasActivePrompt: false,
|
|
461
|
-
promptDetection,
|
|
462
|
-
};
|
|
463
|
-
}
|
|
464
|
-
// 2.6. Claude status-bar "esc to interrupt" detection — wider STATUS_CHECK_LINE_COUNT window (Issue #805)
|
|
465
|
-
// When Claude runs a subagent Task (e.g., /pm-auto-dev + general-purpose subagent), the
|
|
466
|
-
// bottom-of-screen task panel ("⏺ main" / "◯ general-purpose ... 55s" rows) pushes BOTH the
|
|
467
|
-
// "✶ Running…" spinner (top of the footer) and the "esc to interrupt" status bar above the
|
|
468
|
-
// narrow THINKING_TAIL_LINE_COUNT (5) window used by step 2. The visible "❯" input box then
|
|
469
|
-
// matches the input-prompt check at step 3, so the session was misreported as Ready.
|
|
470
|
-
//
|
|
471
|
-
// The "esc to interrupt" status bar appears only while Claude is actively processing (idle
|
|
472
|
-
// sessions show "? for shortcuts" instead) and is repainted live rather than lingering in
|
|
473
|
-
// scrollback, so matching it in the wider 15-line footer window is a safe running signal and
|
|
474
|
-
// does not reintroduce the Issue #188 spinner-summary false positive (only the spinner+ellipsis
|
|
475
|
-
// branch is restricted to the 5-line window).
|
|
476
|
-
if (cliToolId === 'claude' && cli_patterns_1.CLAUDE_INTERRUPT_HINT_PATTERN.test(lastLines)) {
|
|
477
|
-
return {
|
|
478
|
-
status: 'running',
|
|
479
|
-
confidence: 'high',
|
|
480
|
-
reason: exports.STATUS_REASON.THINKING_INDICATOR,
|
|
481
|
-
hasActivePrompt: false,
|
|
482
|
-
promptDetection,
|
|
483
|
-
};
|
|
484
|
-
}
|
|
485
|
-
// 2.5. OpenCode status detection (Issue #379)
|
|
486
|
-
// OpenCode TUI layout: content area (top) | empty padding (~150 lines) | footer status bar (~6 lines at bottom).
|
|
487
|
-
// Standard windowed checks (last N lines) only see footer/padding, never the content area.
|
|
488
|
-
//
|
|
489
|
-
// Detection strategy:
|
|
490
|
-
// A. "esc interrupt" in footer → actively processing (running)
|
|
491
|
-
// B. Find footer boundary via "ctrl+t" keybinding line, extract content above it, check for thinking → running
|
|
492
|
-
// C. Same content window, check for ▣ Build completion → ready
|
|
493
|
-
if (cliToolId === 'opencode') {
|
|
494
|
-
// A. Check footer for processing indicator ("esc interrupt" replaces "ctrl+t variants..." during processing)
|
|
495
|
-
if (cli_patterns_1.OPENCODE_PROCESSING_INDICATOR.test(lastLines)) {
|
|
496
|
-
return {
|
|
497
|
-
status: 'running',
|
|
498
|
-
confidence: 'high',
|
|
499
|
-
reason: 'opencode_processing_indicator',
|
|
500
|
-
hasActivePrompt: false,
|
|
501
|
-
promptDetection,
|
|
502
|
-
};
|
|
503
|
-
}
|
|
504
|
-
// Extract content area by finding TUI footer boundary dynamically.
|
|
505
|
-
// Footer structure (bottom-up): keybinding hints ("ctrl+t variants..."),
|
|
506
|
-
// ╹▀▀ separator, model info bar ("Build GPT-5-mini GitHub Copilot"), ┃ padding.
|
|
507
|
-
// The keybinding line is the anchor; model bar is 2 lines above it.
|
|
508
|
-
// ┃ padding above the model bar becomes empty after stripBoxDrawing and is
|
|
509
|
-
// skipped by the lastNonEmpty search below.
|
|
510
|
-
const strippedForOpenCode = (0, cli_patterns_1.stripBoxDrawing)(cleanOutput);
|
|
511
|
-
const ocLines = strippedForOpenCode.split('\n');
|
|
512
|
-
let footerBoundary = Math.max(0, ocLines.length - 7); // fallback: skip 7 lines
|
|
513
|
-
for (let i = ocLines.length - 1; i >= Math.max(0, ocLines.length - 10); i--) {
|
|
514
|
-
if (/ctrl\+[tp]/.test(ocLines[i])) {
|
|
515
|
-
// Exclude keybinding line (i), separator (i-1), and model info bar (i-2)
|
|
516
|
-
footerBoundary = Math.max(0, i - 2);
|
|
517
|
-
break;
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
const contentCandidates = ocLines.slice(0, footerBoundary);
|
|
521
|
-
let lastContentIdx = contentCandidates.length - 1;
|
|
522
|
-
while (lastContentIdx >= 0 && contentCandidates[lastContentIdx].trim() === '') {
|
|
523
|
-
lastContentIdx--;
|
|
524
|
-
}
|
|
525
|
-
if (lastContentIdx >= 0) {
|
|
526
|
-
// B. Check last few content lines for thinking indicators
|
|
527
|
-
const contentThinkingWindow = contentCandidates
|
|
528
|
-
.slice(Math.max(0, lastContentIdx - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastContentIdx + 1)
|
|
529
|
-
.join('\n');
|
|
530
|
-
if ((0, cli_patterns_1.detectThinking)('opencode', contentThinkingWindow)) {
|
|
531
|
-
return {
|
|
532
|
-
status: 'running',
|
|
533
|
-
confidence: 'high',
|
|
534
|
-
reason: 'thinking_indicator',
|
|
535
|
-
hasActivePrompt: false,
|
|
536
|
-
promptDetection,
|
|
537
|
-
};
|
|
538
|
-
}
|
|
539
|
-
// C. Check content area for selection list (Issue #473: fuzzy-search list detection)
|
|
540
|
-
// Selection list header ("Select model"/"Select provider") may be far above the
|
|
541
|
-
// last content line when many items are listed, so check all content candidates.
|
|
542
|
-
const contentCheckWindow = contentCandidates
|
|
543
|
-
.slice(Math.max(0, lastContentIdx - STATUS_CHECK_LINE_COUNT + 1), lastContentIdx + 1)
|
|
544
|
-
.join('\n');
|
|
545
|
-
const fullContentText = contentCandidates.join('\n');
|
|
546
|
-
if (cli_patterns_1.OPENCODE_SELECTION_LIST_PATTERN.test(fullContentText)) {
|
|
547
|
-
return {
|
|
548
|
-
status: 'waiting',
|
|
549
|
-
confidence: 'high',
|
|
550
|
-
reason: exports.STATUS_REASON.OPENCODE_SELECTION_LIST,
|
|
551
|
-
hasActivePrompt: false,
|
|
552
|
-
promptDetection,
|
|
553
|
-
};
|
|
554
|
-
}
|
|
555
|
-
// D. Check last few content lines for completion marker (▣ Build · model · time)
|
|
556
|
-
if (cli_patterns_1.OPENCODE_RESPONSE_COMPLETE.test(contentCheckWindow)) {
|
|
557
|
-
return {
|
|
558
|
-
status: 'ready',
|
|
559
|
-
confidence: 'high',
|
|
560
|
-
reason: exports.STATUS_REASON.OPENCODE_RESPONSE_COMPLETE,
|
|
561
|
-
hasActivePrompt: false,
|
|
562
|
-
promptDetection,
|
|
563
|
-
};
|
|
564
|
-
}
|
|
565
|
-
// E. Check content area for prompt pattern (Issue #473: "Ask anything..." is in content area,
|
|
566
|
-
// not in lastLines, due to OpenCode TUI padding between content and footer)
|
|
567
|
-
const { promptPattern: ocPromptPattern } = (0, cli_patterns_1.getCliToolPatterns)('opencode');
|
|
568
|
-
if (ocPromptPattern.test(contentCheckWindow)) {
|
|
569
|
-
return {
|
|
570
|
-
status: 'ready',
|
|
571
|
-
confidence: 'high',
|
|
572
|
-
reason: exports.STATUS_REASON.PROMPT_DETECTED,
|
|
573
|
-
hasActivePrompt: true,
|
|
574
|
-
promptDetection,
|
|
575
|
-
};
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
// 2.7. Codex TUI content area detection (thinking + idle prompt)
|
|
580
|
-
// Codex TUI layout: conversation area (top) | empty padding (~30 lines) | input area + status bar (bottom).
|
|
581
|
-
// Standard windowed checks (last 5/15 lines) only see padding/status bar, missing both:
|
|
582
|
-
// A. Thinking indicators (• Ran, • Planning) in the conversation area → should show spinner
|
|
583
|
-
// B. Idle prompt (›) at the end of the conversation area → should show ready
|
|
584
|
-
// Strategy: find the Codex status bar, extract content above it, then check for thinking/idle.
|
|
585
|
-
//
|
|
586
|
-
// Issue #1150: the status-bar pattern was relaxed (CODEX_STATUS_BAR_PATTERN) so it
|
|
587
|
-
// matches v0.141's "model · path" bar (no "N% left ·"). Without this, codexFooterBoundary
|
|
588
|
-
// stayed -1, this whole block was skipped, and generating sessions fell through to the
|
|
589
|
-
// input-prompt check below and were misreported as `ready` (static dot, no glow).
|
|
590
|
-
if (cliToolId === 'codex') {
|
|
591
|
-
let codexFooterBoundary = -1;
|
|
592
|
-
for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
|
|
593
|
-
if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(contentLines[ci])) {
|
|
594
|
-
codexFooterBoundary = ci;
|
|
595
|
-
break;
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
if (codexFooterBoundary >= 0) {
|
|
599
|
-
// Find last non-empty content line above footer (skip padding + input area)
|
|
600
|
-
let lastContentIdx = codexFooterBoundary - 1;
|
|
601
|
-
while (lastContentIdx >= 0 && contentLines[lastContentIdx].trim() === '') {
|
|
602
|
-
lastContentIdx--;
|
|
603
|
-
}
|
|
604
|
-
if (lastContentIdx >= 0) {
|
|
605
|
-
// A. Check content area for thinking indicators (wider window than step 2)
|
|
606
|
-
const codexThinkingWindow = contentLines
|
|
607
|
-
.slice(Math.max(0, lastContentIdx - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastContentIdx + 1)
|
|
608
|
-
.join('\n');
|
|
609
|
-
if ((0, cli_patterns_1.detectThinking)('codex', codexThinkingWindow)) {
|
|
610
|
-
return {
|
|
611
|
-
status: 'running',
|
|
612
|
-
confidence: 'high',
|
|
613
|
-
reason: 'thinking_indicator',
|
|
614
|
-
hasActivePrompt: false,
|
|
615
|
-
promptDetection,
|
|
616
|
-
};
|
|
617
|
-
}
|
|
618
|
-
// A2. (Removed — Codex selection list detection moved to priority 0.8,
|
|
619
|
-
// before detectPrompt, to prevent false multiple_choice detection. Issue #622)
|
|
620
|
-
// B. Check if the last content line is the idle › prompt.
|
|
621
|
-
// The last non-empty line above the status bar is the current active line.
|
|
622
|
-
// When Codex is idle, this is the › prompt (with optional suggestion text).
|
|
623
|
-
// When processing, this is command output (not ›), so the check naturally fails.
|
|
624
|
-
const lastContentLine = contentLines[lastContentIdx].trim();
|
|
625
|
-
if (cli_patterns_1.CODEX_PROMPT_PATTERN.test(lastContentLine)) {
|
|
626
|
-
return {
|
|
627
|
-
status: 'ready',
|
|
628
|
-
confidence: 'high',
|
|
629
|
-
reason: 'input_prompt',
|
|
630
|
-
hasActivePrompt: false,
|
|
631
|
-
promptDetection,
|
|
632
|
-
};
|
|
633
|
-
}
|
|
634
|
-
// C. Fallback: status bar present but neither thinking nor idle › detected.
|
|
635
|
-
// This means Codex is actively processing — command output has pushed the
|
|
636
|
-
// • Ran/• Working indicators beyond the 5-line thinking window.
|
|
637
|
-
// The status bar ("model · N% left · path") is always visible during Codex
|
|
638
|
-
// sessions, and the only idle state (›) was checked in B above.
|
|
639
|
-
return {
|
|
640
|
-
status: 'running',
|
|
641
|
-
confidence: 'high',
|
|
642
|
-
reason: 'thinking_indicator',
|
|
643
|
-
hasActivePrompt: false,
|
|
644
|
-
promptDetection,
|
|
645
|
-
};
|
|
646
|
-
}
|
|
647
|
-
}
|
|
648
|
-
else {
|
|
649
|
-
// D. Status-bar-independent running detection (Issue #1150, mitigation B).
|
|
650
|
-
// Defense-in-depth for the next Codex CLI status-bar format drift: if the bar
|
|
651
|
-
// can't be located (the exact failure that broke Issue #1150), fall back to the
|
|
652
|
-
// Codex thinking indicator in the wider 15-line footer window — mirroring
|
|
653
|
-
// Claude's priority 2.6 interrupt-hint net. Gated so idle frames are unaffected:
|
|
654
|
-
// only fires when the tail is NOT the idle › prompt, so an idle session still
|
|
655
|
-
// falls through to the 'ready' input-prompt check at step 3.
|
|
656
|
-
let codexTailIdx = contentLines.length - 1;
|
|
657
|
-
while (codexTailIdx >= 0 && contentLines[codexTailIdx].trim() === '') {
|
|
658
|
-
codexTailIdx--;
|
|
659
|
-
}
|
|
660
|
-
const codexTailIsIdlePrompt = codexTailIdx >= 0 && cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[codexTailIdx].trim());
|
|
661
|
-
if (!codexTailIsIdlePrompt && (0, cli_patterns_1.detectThinking)('codex', lastLines)) {
|
|
662
|
-
return {
|
|
663
|
-
status: 'running',
|
|
664
|
-
confidence: 'high',
|
|
665
|
-
reason: 'thinking_indicator',
|
|
666
|
-
hasActivePrompt: false,
|
|
667
|
-
promptDetection,
|
|
668
|
-
};
|
|
669
|
-
}
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
// 2.8. Antigravity (agy) footer-based detection (Issue #988)
|
|
673
|
-
// agy renders inline (scrollback retained), with the status bar as the last
|
|
674
|
-
// non-empty line and a bare "> " input box always visible just above it — even
|
|
675
|
-
// while generating. So the always-visible "> " would make step 3's generic
|
|
676
|
-
// prompt check report ready during generation. The footer is the source of
|
|
677
|
-
// truth: "esc to cancel" + braille spinner / "Generating..." while running,
|
|
678
|
-
// "? for shortcuts" when idle. Resolve running explicitly here first, then idle.
|
|
679
|
-
if (cliToolId === 'antigravity') {
|
|
680
|
-
// Running: thinking footer/spinner anywhere in the 15-line footer window.
|
|
681
|
-
if ((0, cli_patterns_1.detectThinking)('antigravity', lastLines)) {
|
|
682
|
-
return {
|
|
683
|
-
status: 'running',
|
|
684
|
-
confidence: 'high',
|
|
685
|
-
reason: exports.STATUS_REASON.THINKING_INDICATOR,
|
|
686
|
-
hasActivePrompt: false,
|
|
687
|
-
promptDetection,
|
|
688
|
-
};
|
|
689
|
-
}
|
|
690
|
-
// Idle: bare "> " input prompt visible and the response has completed.
|
|
691
|
-
const { promptPattern: agyPromptPattern } = (0, cli_patterns_1.getCliToolPatterns)('antigravity');
|
|
692
|
-
if (agyPromptPattern.test(lastLines)) {
|
|
693
|
-
return {
|
|
694
|
-
status: 'ready',
|
|
695
|
-
confidence: 'high',
|
|
696
|
-
reason: exports.STATUS_REASON.INPUT_PROMPT,
|
|
697
|
-
hasActivePrompt: false,
|
|
698
|
-
promptDetection,
|
|
699
|
-
};
|
|
700
|
-
}
|
|
701
|
-
}
|
|
702
|
-
// 3. Input prompt detection
|
|
703
|
-
// CLI tool is waiting for user input (shows >, ❯, ›, $, %, etc.)
|
|
704
|
-
const { promptPattern } = (0, cli_patterns_1.getCliToolPatterns)(cliToolId);
|
|
705
|
-
if (promptPattern.test(lastLines)) {
|
|
706
|
-
return {
|
|
707
|
-
status: 'ready',
|
|
708
|
-
confidence: 'high',
|
|
709
|
-
reason: 'input_prompt',
|
|
710
|
-
hasActivePrompt: false,
|
|
711
|
-
promptDetection,
|
|
712
|
-
};
|
|
713
|
-
}
|
|
714
|
-
// 4. Time-based heuristic
|
|
715
|
-
// If no new output for >5 seconds, assume processing is complete
|
|
716
|
-
if (lastOutputTimestamp) {
|
|
717
|
-
const elapsed = Date.now() - lastOutputTimestamp.getTime();
|
|
718
|
-
if (elapsed > STALE_OUTPUT_THRESHOLD_MS) {
|
|
719
|
-
return {
|
|
720
|
-
status: 'ready',
|
|
721
|
-
confidence: 'low',
|
|
722
|
-
reason: 'no_recent_output',
|
|
723
|
-
hasActivePrompt: false,
|
|
724
|
-
promptDetection,
|
|
725
|
-
};
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
// 5. Default: assume running with low confidence
|
|
729
|
-
// This is a safe default when we cannot determine the state
|
|
125
|
+
const frame = (0, frame_1.normalizeFrame)(output);
|
|
126
|
+
const verdict = (0, registry_1.getToolStatusDetector)(cliToolId).detect(frame, { lastOutputTimestamp });
|
|
730
127
|
return {
|
|
731
|
-
status:
|
|
732
|
-
confidence:
|
|
733
|
-
reason:
|
|
734
|
-
hasActivePrompt:
|
|
735
|
-
|
|
128
|
+
status: verdict.status,
|
|
129
|
+
confidence: verdict.confidence,
|
|
130
|
+
reason: verdict.reason,
|
|
131
|
+
hasActivePrompt: verdict.hasActivePrompt,
|
|
132
|
+
evidence: verdict.evidence,
|
|
133
|
+
// Every chain exit carries one; the fallback keeps the required field
|
|
134
|
+
// total rather than letting a future branch publish `undefined` into a
|
|
135
|
+
// payload that has always had it (Issue #408's defense-in-depth).
|
|
136
|
+
promptDetection: verdict.promptDetection ?? { isPrompt: false, cleanContent: frame.clean },
|
|
736
137
|
};
|
|
737
138
|
}
|