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
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex CLI's status detector (Issue #1927, 方針書 §4 D2).
|
|
4
|
+
*
|
|
5
|
+
* A verbatim lift of the `cliToolId === 'codex'` blocks (priorities 0.7, 0.75,
|
|
6
|
+
* 0.8, the #1160 staleness guard and 2.7) out of `detectSessionStatus`.
|
|
7
|
+
*
|
|
8
|
+
* codex declares NO `readIdleEvidence`. That is the tool-by-tool rollout of
|
|
9
|
+
* §4 D1 決定 1 (DR2-002), not an oversight: its idle row is the bare `›`
|
|
10
|
+
* composer, and telling an empty composer from one holding residual text needs
|
|
11
|
+
* the two SGR attributes `composer-text.ts` reads, which the ANSI-stripped frame
|
|
12
|
+
* this chain runs on no longer carries. Until that rule is measured and
|
|
13
|
+
* fixtured, codex's `input_prompt` keeps the pre-#1927 reading — which the chain
|
|
14
|
+
* expresses by answering `'positive'` for a tool with no rule.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.codexStatusDetector = exports.VERIFIED_AGAINST = void 0;
|
|
18
|
+
exports.isCodexStalePrompt = isCodexStalePrompt;
|
|
19
|
+
const cli_patterns_1 = require("../../cli-patterns");
|
|
20
|
+
const prompt_detector_1 = require("../../prompt-detector");
|
|
21
|
+
const status_reason_1 = require("../../status-reason");
|
|
22
|
+
const prompt_1 = require("./prompt");
|
|
23
|
+
const frame_1 = require("../frame");
|
|
24
|
+
const run_detection_1 = require("../run-detection");
|
|
25
|
+
const verified_against_1 = require("../verified-against");
|
|
26
|
+
const thinking_constants_1 = require("../../../../config/thinking-constants");
|
|
27
|
+
/** codex-cli build these rules were read off (#1628 / #1829 / #1890; value in ../verified-against, #1929). */
|
|
28
|
+
exports.VERIFIED_AGAINST = verified_against_1.CODEX_VERIFIED_AGAINST;
|
|
29
|
+
/**
|
|
30
|
+
* Issue #1160: anchors for the BOTTOM edge of a Codex approval / numbered-choice
|
|
31
|
+
* prompt. Used only by isCodexStalePrompt() to distinguish an ACTIVE prompt (the
|
|
32
|
+
* bottom-most interactive element → waiting) from an already-ANSWERED one lingering
|
|
33
|
+
* in scrollback with Codex processing below it (→ fall through to running detection).
|
|
34
|
+
* Detection-wide Codex patterns live in cli-patterns.ts; these stay local to the guard.
|
|
35
|
+
*
|
|
36
|
+
* CODEX_CONFIRMATION_FOOTER_PATTERN matches the "press number/enter to confirm" footer
|
|
37
|
+
* that closes a numbered prompt. CODEX_NUMBERED_OPTION_PATTERN matches an option line
|
|
38
|
+
* ("1. Yes", optionally prefixed by a ❯/›/● selection indicator). Neither pattern uses
|
|
39
|
+
* /g (keeps .test() stateless) nor nested quantifiers (ReDoS-safe).
|
|
40
|
+
*/
|
|
41
|
+
const CODEX_CONFIRMATION_FOOTER_PATTERN = /press\s+(?:number|enter)\s+to\s+confirm/i;
|
|
42
|
+
const CODEX_NUMBERED_OPTION_PATTERN = /^\s*[❯›●]?\s*\d{1,2}[.)]\s/;
|
|
43
|
+
/** Index of the Codex status bar within the last 10 content rows, or -1. */
|
|
44
|
+
function findCodexFooterBoundary(contentLines) {
|
|
45
|
+
for (let ci = contentLines.length - 1; ci >= Math.max(0, contentLines.length - 10); ci--) {
|
|
46
|
+
if (cli_patterns_1.CODEX_STATUS_BAR_PATTERN.test(contentLines[ci]))
|
|
47
|
+
return ci;
|
|
48
|
+
}
|
|
49
|
+
return -1;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Exclusive end of the conversation area — the row below the status bar, with
|
|
53
|
+
* the padding above it walked off (Issue #1928).
|
|
54
|
+
*
|
|
55
|
+
* The same boundary branches 0.8 and 2.7 compute inline, named once so
|
|
56
|
+
* `detectDialog` reads the region THEY read. Falls back to the whole frame when
|
|
57
|
+
* the bar cannot be located, which is Issue #1150's drift case: there the tail
|
|
58
|
+
* is the conversation, so the dialog rule still has the right rows.
|
|
59
|
+
*/
|
|
60
|
+
function findCodexContentEnd(contentLines) {
|
|
61
|
+
const boundary = findCodexFooterBoundary(contentLines);
|
|
62
|
+
let end = boundary >= 0 ? boundary - 1 : contentLines.length - 1;
|
|
63
|
+
while (end >= 0 && contentLines[end].trim() === '')
|
|
64
|
+
end--;
|
|
65
|
+
return end + 1;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Issue #1160: decide whether a Codex prompt that detectPrompt() matched is a stale,
|
|
69
|
+
* already-answered prompt left in the 50-line scan window rather than an active one.
|
|
70
|
+
*
|
|
71
|
+
* Codex keeps the answered "1. Yes / 2. No" block + "press number to confirm" footer in
|
|
72
|
+
* its transcript (it draws on the normal screen, so tmux retains a scrollback for it —
|
|
73
|
+
* TMUX_HISTORY_LIMIT lines deep) instead of repainting it away like Claude,
|
|
74
|
+
* so detectPrompt() keeps matching it and the chain reports `waiting` even
|
|
75
|
+
* after the user answered and Codex resumed — the sidebar status dot then stays orange
|
|
76
|
+
* forever (the reported bug).
|
|
77
|
+
*
|
|
78
|
+
* Position-based guard (mirrors isCodexPromptReady()'s bottom-most-element idea): the
|
|
79
|
+
* prompt is stale when a Codex thinking indicator (• Working / • Ran / …) sits strictly
|
|
80
|
+
* BELOW the bottom-most prompt anchor (footer or numbered option) within the content
|
|
81
|
+
* above the status bar. An UNANSWERED prompt has no running indicator below its block,
|
|
82
|
+
* so this returns false and the caller keeps reporting `waiting` (Auto-Yes unaffected).
|
|
83
|
+
*
|
|
84
|
+
* The bare "›" input-line case ("answered, then › below") is already handled upstream by
|
|
85
|
+
* detectPrompt()'s user-input barrier (prompt-detect-multiple-choice.ts), which returns
|
|
86
|
+
* isPrompt=false before this guard runs, so only the thinking-indicator signal is needed
|
|
87
|
+
* here — keeping the guard conservative against flipping a genuine prompt to running.
|
|
88
|
+
*/
|
|
89
|
+
function isCodexStalePrompt(contentLines) {
|
|
90
|
+
const footerBoundary = findCodexFooterBoundary(contentLines);
|
|
91
|
+
const end = footerBoundary >= 0 ? footerBoundary : contentLines.length;
|
|
92
|
+
let lastPromptIdx = -1;
|
|
93
|
+
let lastThinkingIdx = -1;
|
|
94
|
+
for (let i = 0; i < end; i++) {
|
|
95
|
+
const line = contentLines[i];
|
|
96
|
+
const trimmed = line.trim();
|
|
97
|
+
if (trimmed === '') {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (CODEX_CONFIRMATION_FOOTER_PATTERN.test(trimmed) ||
|
|
101
|
+
CODEX_NUMBERED_OPTION_PATTERN.test(trimmed)) {
|
|
102
|
+
lastPromptIdx = i;
|
|
103
|
+
}
|
|
104
|
+
// detectThinking('codex', …) requires the "•" activity prefix, so option text that
|
|
105
|
+
// merely contains a word like "Running" cannot be mistaken for a running indicator.
|
|
106
|
+
if ((0, cli_patterns_1.detectThinking)('codex', line)) {
|
|
107
|
+
lastThinkingIdx = i;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return lastPromptIdx >= 0 && lastThinkingIdx > lastPromptIdx;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Issue #1628: decide whether a Codex frame that matched CODEX_SELECTION_LIST_PATTERN
|
|
114
|
+
* is the agent ASKING FOR APPROVAL rather than the user browsing a menu.
|
|
115
|
+
*
|
|
116
|
+
* Why this exists: Codex renders both with a "Press enter to confirm" footer, so the
|
|
117
|
+
* selection-list branch (added for `/model` in Issue #622) also swallowed every approval
|
|
118
|
+
* request and returned `hasActivePrompt: false`. `isPromptWaiting` is the only
|
|
119
|
+
* blocked-on-a-human signal the current-output payload carries, so `commandmate wait
|
|
120
|
+
* --on-prompt agent` could never raise exit 10 for a Codex worker sitting on
|
|
121
|
+
* "Would you like to run the following command?" — it polled until the timeout while the
|
|
122
|
+
* agent was stopped. Auto-Yes was unaffected because it calls detectPrompt() directly,
|
|
123
|
+
* which parses these frames correctly; only the status-detector layer lost them.
|
|
124
|
+
*
|
|
125
|
+
* Two OR'd signals, both measured against live codex-cli 0.146.0 captures
|
|
126
|
+
* (5 approval frames from one real session + 2 `/model` picker frames):
|
|
127
|
+
* 1. an interrogative question line directly above the options
|
|
128
|
+
* 2. the approval escape verb ("esc to cancel" vs a menu's "esc to go back")
|
|
129
|
+
* Either alone covers every measured approval frame, so a rewording of one does not
|
|
130
|
+
* reopen the bug.
|
|
131
|
+
*
|
|
132
|
+
* Gated on `promptDetection.isPrompt` so a frame detectPrompt() could not parse into
|
|
133
|
+
* options (e.g. the unnumbered "Select a model" list of Issue #619) can never be
|
|
134
|
+
* promoted to an active prompt.
|
|
135
|
+
*/
|
|
136
|
+
function isCodexApprovalRequest(promptDetection, selectionWindow) {
|
|
137
|
+
if (!promptDetection.isPrompt)
|
|
138
|
+
return false;
|
|
139
|
+
const question = promptDetection.promptData?.question?.trim() ?? '';
|
|
140
|
+
return question.endsWith('?') || cli_patterns_1.CODEX_APPROVAL_FOOTER_PATTERN.test(selectionWindow);
|
|
141
|
+
}
|
|
142
|
+
exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
143
|
+
tool: 'codex',
|
|
144
|
+
verifiedAgainst: exports.VERIFIED_AGAINST,
|
|
145
|
+
beforePrompt(frame) {
|
|
146
|
+
const { contentLines } = frame;
|
|
147
|
+
// 0.7. Codex: pager / edit-previous (transcript) mode detection (Issue #1017)
|
|
148
|
+
// Codex's transcript pager renders scroll / edit key-hint footers, e.g.:
|
|
149
|
+
// "↑/↓ to scroll pgup/pgdn to page home/end to jump"
|
|
150
|
+
// "q to quit esc/← to edit prev → to edit next enter to edit message"
|
|
151
|
+
// together with a scroll-percentage separator ("─ N% ─") in place of the usual
|
|
152
|
+
// "model · N% left · path" status bar. So neither CODEX_SELECTION_LIST_PATTERN
|
|
153
|
+
// (footer is "enter to edit message", not "press enter to confirm/select") nor the
|
|
154
|
+
// status-bar boundary logic below fires, leaving the read-only TerminalDisplay
|
|
155
|
+
// with no way to scroll or escape. Detect the pager footer directly — independent of
|
|
156
|
+
// the "N% left ·" status bar — and surface it as a selection list so NavigationButtons
|
|
157
|
+
// render (isSelectionListActive via SELECTION_LIST_REASONS). Checked ahead of
|
|
158
|
+
// detectPrompt/thinking because the pager has no active y/n prompt and its transcript
|
|
159
|
+
// content must not be misread as one. CODEX_PAGER_FOOTER_PATTERN does not match the
|
|
160
|
+
// genuine "/model" selection footer, so the 0.8 path below is unaffected (no regression).
|
|
161
|
+
if (cli_patterns_1.CODEX_PAGER_FOOTER_PATTERN.test(frame.lastLines)) {
|
|
162
|
+
return {
|
|
163
|
+
status: 'waiting',
|
|
164
|
+
confidence: 'high',
|
|
165
|
+
reason: status_reason_1.STATUS_REASON.CODEX_PAGER,
|
|
166
|
+
hasActivePrompt: false,
|
|
167
|
+
evidence: 'positive',
|
|
168
|
+
promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
// 0.75. Codex: the hooks review screens (Issue #1829)
|
|
172
|
+
// codex-cli 0.148.0 answers "1. Review hooks" with a two-screen review UI:
|
|
173
|
+
// screen 2 "Press t to trust all; enter to review hooks; esc to close"
|
|
174
|
+
// screen 3 "Press t to trust; esc to go back"
|
|
175
|
+
// Neither carries a numbered option, a "press enter to confirm" footer, or any
|
|
176
|
+
// thinking indicator, so every branch below falls through to the `running`
|
|
177
|
+
// default -- which is how two live sessions sat parked on screen 3 while the UI
|
|
178
|
+
// and `cmate wait` both reported them as busy. They are the bottom-most
|
|
179
|
+
// interactive element and nothing but a keypress moves them: that is `waiting`.
|
|
180
|
+
// Checked ahead of prompt detection because the transcript rows on screen 2 are
|
|
181
|
+
// ordinary text that must not be read as options.
|
|
182
|
+
const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)(frame.clean);
|
|
183
|
+
if (codexLifecycleDialog === 'hooks-list' || codexLifecycleDialog === 'hooks-detail') {
|
|
184
|
+
return {
|
|
185
|
+
status: 'waiting',
|
|
186
|
+
confidence: 'high',
|
|
187
|
+
reason: status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW,
|
|
188
|
+
hasActivePrompt: false,
|
|
189
|
+
evidence: 'positive',
|
|
190
|
+
promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// 0.8. Codex: selection list detection BEFORE prompt detection (Issue #622)
|
|
194
|
+
// CODEX_SELECTION_LIST_PATTERN matches "press enter to confirm/select" footer.
|
|
195
|
+
// Without this early check, detectPrompt() would detect the numbered
|
|
196
|
+
// options (e.g., "› 1. gpt-5.4") as a multiple_choice prompt, preventing
|
|
197
|
+
// NavigationButtons from being shown. This mirrors the Copilot pattern.
|
|
198
|
+
//
|
|
199
|
+
// The pattern is scoped to the content window immediately above the Codex status
|
|
200
|
+
// bar (mirroring branch 2.7's boundary detection). Matching against the full content
|
|
201
|
+
// would allow stale "Press enter to confirm" text from already-answered approval
|
|
202
|
+
// prompts high in scrollback to falsely trigger NavigationButtons.
|
|
203
|
+
//
|
|
204
|
+
// Issue #1150: the status bar is located via CODEX_STATUS_BAR_PATTERN (version-
|
|
205
|
+
// independent; matches both legacy "N% left ·" and v0.141 "model · path" bars).
|
|
206
|
+
const codexFooterBoundary = findCodexFooterBoundary(contentLines);
|
|
207
|
+
let codexContentEnd = codexFooterBoundary >= 0 ? codexFooterBoundary - 1 : contentLines.length - 1;
|
|
208
|
+
while (codexContentEnd >= 0 && contentLines[codexContentEnd].trim() === '') {
|
|
209
|
+
codexContentEnd--;
|
|
210
|
+
}
|
|
211
|
+
if (codexContentEnd >= 0) {
|
|
212
|
+
const codexSelectionWindow = contentLines
|
|
213
|
+
.slice(Math.max(0, codexContentEnd - frame_1.STATUS_CHECK_LINE_COUNT + 1), codexContentEnd + 1)
|
|
214
|
+
.join('\n');
|
|
215
|
+
if (cli_patterns_1.CODEX_SELECTION_LIST_PATTERN.test(codexSelectionWindow)) {
|
|
216
|
+
const codexPromptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex'));
|
|
217
|
+
// Issue #1628: an approval request wears the same footer as a menu but is the
|
|
218
|
+
// agent blocked on the human, so it must surface as an active prompt (exit 10
|
|
219
|
+
// for `wait`, PromptPanel in the UI) instead of a navigable list. The #1160
|
|
220
|
+
// staleness guard still applies: an ALREADY-ANSWERED approval whose footer is
|
|
221
|
+
// still inside the window, with Codex running below it, is dead scrollback.
|
|
222
|
+
if (isCodexApprovalRequest(codexPromptDetection, codexSelectionWindow) &&
|
|
223
|
+
!isCodexStalePrompt(contentLines)) {
|
|
224
|
+
return {
|
|
225
|
+
status: 'waiting',
|
|
226
|
+
confidence: 'high',
|
|
227
|
+
reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
|
|
228
|
+
hasActivePrompt: true,
|
|
229
|
+
evidence: 'positive',
|
|
230
|
+
promptDetection: codexPromptDetection,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
status: 'waiting',
|
|
235
|
+
confidence: 'high',
|
|
236
|
+
reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
|
|
237
|
+
hasActivePrompt: false,
|
|
238
|
+
evidence: 'positive',
|
|
239
|
+
promptDetection: codexPromptDetection,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return null;
|
|
244
|
+
},
|
|
245
|
+
isStalePrompt(frame) {
|
|
246
|
+
return isCodexStalePrompt(frame.contentLines);
|
|
247
|
+
},
|
|
248
|
+
// §4 D1 決定 4 (Issue #1928). All three inputs are readings this module
|
|
249
|
+
// already performs for its status branches, passed rather than recomputed:
|
|
250
|
+
// the content boundary (0.8 / 2.7), the #1160 staleness guard and the #1829
|
|
251
|
+
// lifecycle screens. `prompt.ts` therefore needs no import from this file.
|
|
252
|
+
detectDialog(frame) {
|
|
253
|
+
return (0, prompt_1.detectCodexDialog)(frame, {
|
|
254
|
+
contentEnd: findCodexContentEnd(frame.contentLines),
|
|
255
|
+
stalePrompt: isCodexStalePrompt(frame.contentLines),
|
|
256
|
+
lifecycleDialog: (0, cli_patterns_1.getCodexLifecycleDialog)(frame.clean),
|
|
257
|
+
});
|
|
258
|
+
},
|
|
259
|
+
afterThinking(frame) {
|
|
260
|
+
const { contentLines } = frame;
|
|
261
|
+
// 2.7. Codex TUI content area detection (thinking + idle prompt)
|
|
262
|
+
// Codex TUI layout: conversation area (top) | empty padding (~30 lines) | input area + status bar (bottom).
|
|
263
|
+
// Standard windowed checks (last 5/15 lines) only see padding/status bar, missing both:
|
|
264
|
+
// A. Thinking indicators (• Ran, • Planning) in the conversation area → should show spinner
|
|
265
|
+
// B. Idle prompt (›) at the end of the conversation area → should show ready
|
|
266
|
+
// Strategy: find the Codex status bar, extract content above it, then check for thinking/idle.
|
|
267
|
+
const codexFooterBoundary = findCodexFooterBoundary(contentLines);
|
|
268
|
+
if (codexFooterBoundary >= 0) {
|
|
269
|
+
// Find last non-empty content line above footer (skip padding + input area)
|
|
270
|
+
let lastContentIdx = codexFooterBoundary - 1;
|
|
271
|
+
while (lastContentIdx >= 0 && contentLines[lastContentIdx].trim() === '') {
|
|
272
|
+
lastContentIdx--;
|
|
273
|
+
}
|
|
274
|
+
if (lastContentIdx >= 0) {
|
|
275
|
+
// A. Check content area for thinking indicators (wider window than the shared step)
|
|
276
|
+
const codexThinkingWindow = contentLines
|
|
277
|
+
.slice(Math.max(0, lastContentIdx - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastContentIdx + 1)
|
|
278
|
+
.join('\n');
|
|
279
|
+
if ((0, cli_patterns_1.detectThinking)('codex', codexThinkingWindow)) {
|
|
280
|
+
return {
|
|
281
|
+
status: 'running',
|
|
282
|
+
confidence: 'high',
|
|
283
|
+
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
284
|
+
hasActivePrompt: false,
|
|
285
|
+
evidence: 'positive',
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
// B. Check if the last content line is the idle › prompt.
|
|
289
|
+
// The last non-empty line above the status bar is the current active line.
|
|
290
|
+
// When Codex is idle, this is the › prompt (with optional suggestion text).
|
|
291
|
+
// When processing, this is command output (not ›), so the check naturally fails.
|
|
292
|
+
//
|
|
293
|
+
// The evidence stays `positive` here: codex has no measured idle rule yet
|
|
294
|
+
// (see the module docstring), so DR2-002 keeps its pre-#1927 reading.
|
|
295
|
+
if (cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[lastContentIdx].trim())) {
|
|
296
|
+
return {
|
|
297
|
+
status: 'ready',
|
|
298
|
+
confidence: 'high',
|
|
299
|
+
reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
|
|
300
|
+
hasActivePrompt: false,
|
|
301
|
+
evidence: 'positive',
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
// C. Fallback: status bar present but neither thinking nor idle › detected.
|
|
305
|
+
// This means Codex is actively processing — command output has pushed the
|
|
306
|
+
// • Ran/• Working indicators beyond the 5-line thinking window.
|
|
307
|
+
// The status bar ("model · N% left · path") is always visible during Codex
|
|
308
|
+
// sessions, and the only idle state (›) was checked in B above.
|
|
309
|
+
return {
|
|
310
|
+
status: 'running',
|
|
311
|
+
confidence: 'high',
|
|
312
|
+
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
313
|
+
hasActivePrompt: false,
|
|
314
|
+
evidence: 'positive',
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
// D. Status-bar-independent running detection (Issue #1150, mitigation B).
|
|
320
|
+
// Defense-in-depth for the next Codex CLI status-bar format drift: if the bar
|
|
321
|
+
// can't be located (the exact failure that broke Issue #1150), fall back to the
|
|
322
|
+
// Codex thinking indicator in the wider 15-line footer window — mirroring
|
|
323
|
+
// Claude's interrupt-hint net. Gated so idle frames are unaffected:
|
|
324
|
+
// only fires when the tail is NOT the idle › prompt, so an idle session still
|
|
325
|
+
// falls through to the generic composer check.
|
|
326
|
+
let codexTailIdx = contentLines.length - 1;
|
|
327
|
+
while (codexTailIdx >= 0 && contentLines[codexTailIdx].trim() === '') {
|
|
328
|
+
codexTailIdx--;
|
|
329
|
+
}
|
|
330
|
+
const codexTailIsIdlePrompt = codexTailIdx >= 0 && cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[codexTailIdx].trim());
|
|
331
|
+
if (!codexTailIsIdlePrompt && (0, cli_patterns_1.detectThinking)('codex', frame.lastLines)) {
|
|
332
|
+
return {
|
|
333
|
+
status: 'running',
|
|
334
|
+
confidence: 'high',
|
|
335
|
+
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
336
|
+
hasActivePrompt: false,
|
|
337
|
+
evidence: 'positive',
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return null;
|
|
342
|
+
},
|
|
343
|
+
});
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Codex CLI's positive dialog detection (Issue #1928, 方針書 §4 D1 決定 4).
|
|
4
|
+
*
|
|
5
|
+
* ## What was measured (codex-cli 0.148.0 / 0.146.0, 200x1000 pane)
|
|
6
|
+
*
|
|
7
|
+
* Codex draws every numbered dialog the same way — a `›` cursor on the
|
|
8
|
+
* highlighted option and a `Press enter to confirm …` footer — and encodes the
|
|
9
|
+
* DIFFERENCE between "the agent is asking you for permission" and "you opened a
|
|
10
|
+
* menu" in the escape verb of that footer
|
|
11
|
+
* (`tests/unit/lib/detection/fixtures/codex-live-1628/`):
|
|
12
|
+
*
|
|
13
|
+
* | frame | footer | family |
|
|
14
|
+
* |-----------------------------|--------------------------------------------|------------|
|
|
15
|
+
* | `approval-run-command.txt` | `Press enter to confirm or esc to cancel` | permission |
|
|
16
|
+
* | `approval-apply-patch.txt` | `Press enter to confirm or esc to cancel` | permission |
|
|
17
|
+
* | `model-picker-step1.txt` | `Press enter to confirm or esc to go back` | picker |
|
|
18
|
+
* | `model-picker-step2.txt` | `Press enter to confirm or esc to go back` | picker |
|
|
19
|
+
*
|
|
20
|
+
* That is the same pair of anchors Issue #1628 measured for `detect.ts`'s
|
|
21
|
+
* selection-list branch, and they are deliberately the same anchors here: two
|
|
22
|
+
* readings of "is this codex's dialog?" would be two chances to disagree, and
|
|
23
|
+
* this one is the one Auto-Yes acts on.
|
|
24
|
+
*
|
|
25
|
+
* ## Why the footer and not the numbers
|
|
26
|
+
*
|
|
27
|
+
* Codex draws on the NORMAL screen, so its pane keeps scrollback: an approval
|
|
28
|
+
* the operator answered five minutes ago is still on the frame, options and
|
|
29
|
+
* footer intact. That is Issue #1160, and the guard for it already exists —
|
|
30
|
+
* `isCodexStalePrompt` — so this module takes its verdict rather than inventing
|
|
31
|
+
* a second one. Without it a `detectDialog` that only looked at the rows would
|
|
32
|
+
* vouch for a dead prompt and Auto-Yes would answer it again.
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.detectCodexDialog = detectCodexDialog;
|
|
36
|
+
const cli_patterns_1 = require("../../cli-patterns");
|
|
37
|
+
const dialog_block_1 = require("../dialog-block");
|
|
38
|
+
/**
|
|
39
|
+
* The dialog family each lifecycle screen belongs to (Issue #1829).
|
|
40
|
+
*
|
|
41
|
+
* They are dialogs by any reading — the pane is blocked on a keypress — so this
|
|
42
|
+
* module reports them. Auto-Yes never reaches the report: `detectAndRespondToPrompt`
|
|
43
|
+
* suppresses a lifecycle screen with `agent-launch-dialog` BEFORE consulting the
|
|
44
|
+
* gate, because answering one is `CodexTool.waitForReady()`'s job and its
|
|
45
|
+
* answers differ from the defaults. Naming them anyway keeps `respond` and the
|
|
46
|
+
* UI able to say what is on screen.
|
|
47
|
+
*/
|
|
48
|
+
const LIFECYCLE_DIALOG_KINDS = {
|
|
49
|
+
'hooks-review': 'permission',
|
|
50
|
+
'hooks-list': 'picker',
|
|
51
|
+
'hooks-detail': 'picker',
|
|
52
|
+
update: 'update',
|
|
53
|
+
trust: 'trust',
|
|
54
|
+
};
|
|
55
|
+
/** How many non-blank rows above the options may hold the question. */
|
|
56
|
+
const QUESTION_SCAN_ROWS = 4;
|
|
57
|
+
function readContextAbove(lines, firstRow) {
|
|
58
|
+
const rows = [];
|
|
59
|
+
for (let i = firstRow - 1; i >= 0 && rows.length < QUESTION_SCAN_ROWS; i--) {
|
|
60
|
+
const row = lines[i].trim();
|
|
61
|
+
if (row === '')
|
|
62
|
+
continue;
|
|
63
|
+
rows.push(row);
|
|
64
|
+
}
|
|
65
|
+
return rows.join('\n');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Does this frame carry a Codex dialog?
|
|
69
|
+
*
|
|
70
|
+
* @param frame - The normalised capture
|
|
71
|
+
* @param context - What `detect.ts` measured; see {@link CodexDialogContext}
|
|
72
|
+
*/
|
|
73
|
+
function detectCodexDialog(frame, context) {
|
|
74
|
+
const lines = (0, cli_patterns_1.stripBoxDrawing)(frame.clean).split('\n');
|
|
75
|
+
const block = (0, dialog_block_1.findNumberedOptionBlock)(lines, context.contentEnd);
|
|
76
|
+
if (context.lifecycleDialog) {
|
|
77
|
+
return {
|
|
78
|
+
kind: LIFECYCLE_DIALOG_KINDS[context.lifecycleDialog],
|
|
79
|
+
options: block?.options ?? [],
|
|
80
|
+
answerMode: 'numbered',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (!block)
|
|
84
|
+
return null;
|
|
85
|
+
// The footer is the whole guard. It is positional as well as textual: only the
|
|
86
|
+
// rows between the options and the status bar are looked at, so the same words
|
|
87
|
+
// quoted inside a transcript hundreds of rows up cannot reach it.
|
|
88
|
+
if (!cli_patterns_1.CODEX_SELECTION_LIST_PATTERN.test(block.footer))
|
|
89
|
+
return null;
|
|
90
|
+
// Issue #1160: an already-answered block still inside the window is not a
|
|
91
|
+
// dialog. Codex keeps it on screen and goes on working underneath it.
|
|
92
|
+
if (context.stalePrompt)
|
|
93
|
+
return null;
|
|
94
|
+
const question = readContextAbove(lines, block.firstRow);
|
|
95
|
+
const isApproval = cli_patterns_1.CODEX_APPROVAL_FOOTER_PATTERN.test(block.footer) || question.split('\n')[0]?.endsWith('?');
|
|
96
|
+
return {
|
|
97
|
+
kind: isApproval ? 'permission' : 'picker',
|
|
98
|
+
options: block.options,
|
|
99
|
+
// Measured: codex takes the digit as text. `sendPromptAnswer` types it for
|
|
100
|
+
// this tool, and the hooks-review screens confirm the digit lands
|
|
101
|
+
// immediately (reference: codex 0.148 review flow).
|
|
102
|
+
answerMode: 'numbered',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GitHub Copilot CLI's status detector (Issue #1927, 方針書 §4 D2).
|
|
4
|
+
*
|
|
5
|
+
* Every branch here is a verbatim lift of the `cliToolId === 'copilot'` blocks
|
|
6
|
+
* that were interleaved with six other tools' branches inside
|
|
7
|
+
* `detectSessionStatus`. Nothing about the reading changed — copilot's rules
|
|
8
|
+
* were already the §4 D1 shape after #1885 and #1895, which is why it is one of
|
|
9
|
+
* the three tools shipping with `enforce` (see `detection-evidence-config.ts`).
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.copilotStatusDetector = exports.VERIFIED_AGAINST = void 0;
|
|
13
|
+
exports.readIdleEvidence = readIdleEvidence;
|
|
14
|
+
const cli_patterns_1 = require("../../cli-patterns");
|
|
15
|
+
const prompt_detector_1 = require("../../prompt-detector");
|
|
16
|
+
const status_reason_1 = require("../../status-reason");
|
|
17
|
+
const prompt_1 = require("./prompt");
|
|
18
|
+
const run_detection_1 = require("../run-detection");
|
|
19
|
+
const verified_against_1 = require("../verified-against");
|
|
20
|
+
/** copilot-cli build these rules were read off (#1885 / #1895; value in ../verified-against, #1929). */
|
|
21
|
+
exports.VERIFIED_AGAINST = verified_against_1.COPILOT_VERIFIED_AGAINST;
|
|
22
|
+
/**
|
|
23
|
+
* §4 D1 決定 1: copilot's idle evidence is the bottom row of the pane.
|
|
24
|
+
*
|
|
25
|
+
* Recorded here for completeness rather than for effect: branch 2.9 below
|
|
26
|
+
* already refuses to publish `ready` unless `readCopilotStatusBar` says `idle`,
|
|
27
|
+
* and copilot opts out of the generic composer check, so no `ready` verdict can
|
|
28
|
+
* reach the chain's evidence gate without this having been true. Stating it
|
|
29
|
+
* anyway keeps the tool table honest — `detection-evidence-config.ts` says
|
|
30
|
+
* copilot has a measured rule, and this is the rule.
|
|
31
|
+
*
|
|
32
|
+
* Do NOT widen this to a window. `status-vocabulary-in-response.txt` is a live
|
|
33
|
+
* frame in which copilot printed ` ● Working esc interrupt` as body text; a
|
|
34
|
+
* window match would pin a finished session to `running` forever.
|
|
35
|
+
*/
|
|
36
|
+
function readIdleEvidence(frame) {
|
|
37
|
+
return (0, cli_patterns_1.readCopilotStatusBar)(frame.contentLines) === 'idle' ? 'positive' : 'none';
|
|
38
|
+
}
|
|
39
|
+
exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
40
|
+
tool: 'copilot',
|
|
41
|
+
verifiedAgainst: exports.VERIFIED_AGAINST,
|
|
42
|
+
beforePrompt(frame) {
|
|
43
|
+
// 0. Copilot: picker detection BEFORE thinking detection
|
|
44
|
+
// COPILOT_THINKING_PATTERN includes "Reasoning\s+[■▪▮]" which matches the
|
|
45
|
+
// "Reasoning ■■■ medium" UI element shown in /model selection lists.
|
|
46
|
+
// Without this early check, the selection list would be misdetected as thinking.
|
|
47
|
+
// However, yes/no prompts also contain "to navigate · enter to select" footer,
|
|
48
|
+
// so we must check detectPrompt first — if a prompt is detected, it takes priority
|
|
49
|
+
// over selection list (prompts show PromptPanel with Yes/No buttons). That branch
|
|
50
|
+
// is not hypothetical on 1.0.80: `/permissions` is a picker whose body is a
|
|
51
|
+
// two-option numbered list, and it is the one of the eleven that belongs on
|
|
52
|
+
// PromptPanel rather than on NavigationButtons.
|
|
53
|
+
//
|
|
54
|
+
// Issue #1895 replaced what this reads. The 30-row window it used to match
|
|
55
|
+
// `COPILOT_SELECTION_LIST_PATTERN` against was wrong in both directions at once:
|
|
56
|
+
// it matched none of 1.0.80's eleven pickers (so `/model` fell through to the
|
|
57
|
+
// `running`/`default` floor with no NavigationButtons and `wait` sat on it until
|
|
58
|
+
// the operator closed the picker), and it matched copilot's own prose whenever a
|
|
59
|
+
// reply mentioned "Select Model" or "Search models..." (so a finished turn was
|
|
60
|
+
// published as `waiting`). `isCopilotSelectionFrame` is positional instead: a
|
|
61
|
+
// picker is what copilot draws INSTEAD of its bottom chrome, so the evidence is
|
|
62
|
+
// the bottom row of the pane -- the same row the status-bar branches read -- and
|
|
63
|
+
// never the transcript. Ordering against them is therefore settled inside the
|
|
64
|
+
// helper: it declines any frame that still has a status bar.
|
|
65
|
+
if ((0, cli_patterns_1.isCopilotSelectionFrame)(frame.contentLines)) {
|
|
66
|
+
const promptOptions = (0, cli_patterns_1.buildDetectPromptOptions)('copilot');
|
|
67
|
+
const promptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), promptOptions);
|
|
68
|
+
if (promptDetection.isPrompt) {
|
|
69
|
+
// Distinguish yes/no prompts (2-3 options, e.g., "Do you want to run this command?")
|
|
70
|
+
// from ask_user multi-select prompts (4+ options). Yes/no prompts should show
|
|
71
|
+
// PromptPanel with buttons; ask_user prompts need NavigationButtons for ↑↓ selection.
|
|
72
|
+
const optionsCount = promptDetection.promptData?.options?.length ?? 0;
|
|
73
|
+
if (optionsCount <= 3) {
|
|
74
|
+
return {
|
|
75
|
+
status: 'waiting',
|
|
76
|
+
confidence: 'high',
|
|
77
|
+
reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
|
|
78
|
+
hasActivePrompt: true,
|
|
79
|
+
evidence: 'positive',
|
|
80
|
+
promptDetection,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// 4+ options: treat as selection list (NavigationButtons)
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
status: 'waiting',
|
|
87
|
+
confidence: 'high',
|
|
88
|
+
reason: status_reason_1.STATUS_REASON.COPILOT_SELECTION_LIST,
|
|
89
|
+
hasActivePrompt: false,
|
|
90
|
+
evidence: 'positive',
|
|
91
|
+
promptDetection,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// 0.5. Copilot: the bottom status bar carries the running half of the turn
|
|
95
|
+
// (Issue #547 put a thinking check here; Issue #1885 replaced what it reads).
|
|
96
|
+
//
|
|
97
|
+
// Copilot keeps the "❯" composer drawn between its two full-width rules even
|
|
98
|
+
// while it generates, so prompt detection matches every frame and the running
|
|
99
|
+
// state has to be resolved before it -- that part is unchanged since #547.
|
|
100
|
+
// What changed is the evidence. `COPILOT_THINKING_PATTERN` was written for
|
|
101
|
+
// copilot's pre-1.0.79 vocabulary and matches NOTHING that 1.0.80 draws
|
|
102
|
+
// (measured: 0 of 44 live generating frames), which is how every frame of a
|
|
103
|
+
// generating session reached the composer check and was published as
|
|
104
|
+
// `ready`/`input_prompt` -- the sidebar showed no glow and `wait` reported the
|
|
105
|
+
// running agent as Completed on its first poll.
|
|
106
|
+
//
|
|
107
|
+
// 1.0.80 puts the state in the bottom row of the pane: " ◉ Working · 1.5 KiB
|
|
108
|
+
// esc interrupt" while the turn runs, key hints when it does not. Reading that
|
|
109
|
+
// ROW rather than a 15-line window is what makes this safe to keep ahead of
|
|
110
|
+
// `detectPrompt`: a dialog takes the row away entirely (its box occupies the
|
|
111
|
+
// bottom of the pane), so a frame with a permission prompt on it cannot reach
|
|
112
|
+
// this branch and still lands on `waiting` at the shared prompt step. The
|
|
113
|
+
// window form would also have matched copilot's own response text -- see
|
|
114
|
+
// `status-vocabulary-in-response.txt`.
|
|
115
|
+
if ((0, cli_patterns_1.readCopilotStatusBar)(frame.contentLines) === 'working') {
|
|
116
|
+
const promptOptions = (0, cli_patterns_1.buildDetectPromptOptions)('copilot');
|
|
117
|
+
const promptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), promptOptions);
|
|
118
|
+
return {
|
|
119
|
+
status: 'running',
|
|
120
|
+
confidence: 'high',
|
|
121
|
+
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
122
|
+
hasActivePrompt: false,
|
|
123
|
+
evidence: 'positive',
|
|
124
|
+
promptDetection,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
},
|
|
129
|
+
afterThinking(frame) {
|
|
130
|
+
// 2.9. Copilot: the idle status bar is the completion evidence (Issue #1885)
|
|
131
|
+
//
|
|
132
|
+
// The other rendering of the row branch 0.5 read. Copilot has no completion
|
|
133
|
+
// marker of its own -- no `▣ Build · model · duration` -- and its composer is
|
|
134
|
+
// drawn throughout a turn, so this bar is the only thing on the screen that
|
|
135
|
+
// changes when the turn ends. Seeing the key hints is therefore an affirmative
|
|
136
|
+
// observation that copilot is not working, which is what design rule D1
|
|
137
|
+
// (`docs/design/multi-agent-state-architecture.md` §4 D1 decision 1, item 2)
|
|
138
|
+
// requires before `ready` may be published; the old route to `ready` here was
|
|
139
|
+
// the generic composer check matching an always-visible `❯`, which is the
|
|
140
|
+
// "absence of a busy marker" inference D1 forbids and Issue #1885 reported.
|
|
141
|
+
//
|
|
142
|
+
// Placed after prompt detection, unlike its running counterpart: a `waiting`
|
|
143
|
+
// verdict must never be overtaken by an idle bar, even though no measured
|
|
144
|
+
// 1.0.80 frame draws a dialog and the status bar at once.
|
|
145
|
+
//
|
|
146
|
+
// The wire value stays `ready`/`input_prompt` (DR3-002) -- this is the same
|
|
147
|
+
// verdict claude's `❯` row and codex's `›` row publish, so nothing downstream
|
|
148
|
+
// has to learn a new reason code.
|
|
149
|
+
if ((0, cli_patterns_1.readCopilotStatusBar)(frame.contentLines) === 'idle') {
|
|
150
|
+
return {
|
|
151
|
+
status: 'ready',
|
|
152
|
+
confidence: 'high',
|
|
153
|
+
reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
|
|
154
|
+
hasActivePrompt: false,
|
|
155
|
+
evidence: 'positive',
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
},
|
|
160
|
+
// Issue #1885: copilot opts out of the generic composer check. Its `❯` row is
|
|
161
|
+
// drawn during generation as well as after it, so that check answered `ready`
|
|
162
|
+
// for every frame of a running turn -- the reported bug. Leaving it in would
|
|
163
|
+
// also make branch 2.9 unobservable: every frame the status bar declined to
|
|
164
|
+
// vouch for would be re-admitted with the same verdict, and the anchor would
|
|
165
|
+
// stop being load-bearing.
|
|
166
|
+
skipGenericInputPrompt: true,
|
|
167
|
+
readIdleEvidence,
|
|
168
|
+
// §4 D1 決定 4 (Issue #1928). Both inputs are the SAME two readings the status
|
|
169
|
+
// branches above use, passed rather than recomputed: the bottom row is
|
|
170
|
+
// copilot's only positional evidence, and a second reading of it would be a
|
|
171
|
+
// second chance to disagree about whether a dialog is on screen.
|
|
172
|
+
detectDialog(frame) {
|
|
173
|
+
return (0, prompt_1.detectCopilotDialog)(frame, {
|
|
174
|
+
statusBar: (0, cli_patterns_1.readCopilotStatusBar)(frame.contentLines),
|
|
175
|
+
selectionFrame: (0, cli_patterns_1.isCopilotSelectionFrame)(frame.contentLines),
|
|
176
|
+
contentEnd: frame.contentLines.length,
|
|
177
|
+
});
|
|
178
|
+
},
|
|
179
|
+
// With the generic check off, this module's own rules are the ONLY rules that
|
|
180
|
+
// run for copilot. A frame that reaches the floor is one they could not read
|
|
181
|
+
// -- a `/model` picker this build draws differently, an unrecognised overlay --
|
|
182
|
+
// and saying so names something an operator can act on (capture it as a
|
|
183
|
+
// fixture) where `default` would only say "nothing matched".
|
|
184
|
+
unreadableReason: status_reason_1.STATUS_REASON.UNKNOWN_FRAME,
|
|
185
|
+
});
|