commandmate 0.44.2 → 0.44.3
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 +149 -149
- package/.next/app-path-routes-manifest.json +21 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +0 -6
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +2 -2
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route.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 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +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.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.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_client-reference-manifest.js +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 +2 -2
- 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 +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.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.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.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +2 -2
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +2 -2
- package/.next/server/app/api/templates/route_client-reference-manifest.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_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 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- 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 +3 -3
- 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 +1 -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]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.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 +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.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.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.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.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.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_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.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.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_client-reference-manifest.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/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_client-reference-manifest.js +1 -1
- 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 +2 -2
- 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 +2 -2
- 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 +3 -3
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -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 +2 -2
- 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.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.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_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_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]/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 +2 -2
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/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/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_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +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 +11 -11
- 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 +21 -21
- package/.next/server/chunks/1191.js +2 -2
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1559.js +2 -0
- package/.next/server/chunks/1789.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2710.js +1 -1
- package/.next/server/chunks/2908.js +1 -1
- package/.next/server/chunks/2980.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3718.js +1 -1
- package/.next/server/chunks/4207.js +2 -2
- package/.next/server/chunks/450.js +1 -1
- package/.next/server/chunks/4672.js +5 -0
- package/.next/server/chunks/{9353.js → 4718.js} +2 -2
- package/.next/server/chunks/4837.js +14 -0
- package/.next/server/chunks/5048.js +1 -1
- package/.next/server/chunks/5209.js +1 -0
- package/.next/server/chunks/5595.js +1 -1
- package/.next/server/chunks/5625.js +25 -0
- package/.next/server/chunks/611.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +3 -3
- package/.next/server/chunks/7491.js +2 -2
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/850.js +1 -1
- package/.next/server/chunks/8728.js +3 -3
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8800.js +1 -1
- package/.next/server/chunks/8918.js +7 -7
- package/.next/server/chunks/9130.js +1 -1
- package/.next/server/chunks/9390.js +2 -2
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +6 -6
- package/.next/server/chunks/9731.js +3 -3
- 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/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
- package/.next/static/chunks/{2407-051f6f84226a9f2c.js → 2407-06d35bb1aa02de80.js} +1 -1
- package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
- package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
- package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
- package/.next/static/chunks/app/{layout-9da1ab602bcb3051.js → layout-0d1750b833f5cc3e.js} +1 -1
- package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
- package/.next/static/css/057f64a65726c439.css +1 -0
- package/.next/trace +13 -13
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +120 -119
- package/dist/cli/commands/attach.d.ts +94 -0
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +145 -7
- package/dist/cli/commands/auto-yes.js +1 -1
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +3 -5
- package/dist/cli/commands/command-target.d.ts +23 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -0
- package/dist/cli/commands/command-target.js +25 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +41 -2
- package/dist/cli/commands/message-dispatch.d.ts +36 -0
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
- package/dist/cli/commands/message-dispatch.js +63 -0
- package/dist/cli/commands/reply.d.ts.map +1 -1
- package/dist/cli/commands/reply.js +2 -5
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +3 -6
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +149 -146
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +589 -431
- package/dist/cli/types/api-responses.d.ts +159 -27
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/api-responses.js +4 -2
- package/dist/cli/utils/api-client.d.ts +25 -5
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +87 -55
- package/dist/cli/utils/server-url.d.ts +1 -0
- package/dist/cli/utils/server-url.d.ts.map +1 -1
- package/dist/cli/utils/server-url.js +7 -0
- package/dist/config/uat-isolation.d.ts +140 -0
- package/dist/config/uat-isolation.d.ts.map +1 -0
- package/dist/config/uat-isolation.js +246 -0
- package/dist/lib/global-state.d.ts +12 -0
- package/dist/lib/global-state.d.ts.map +1 -0
- package/dist/lib/global-state.js +16 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
- package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/lib/session/prompt-view.d.ts +26 -3
- package/dist/lib/session/prompt-view.d.ts.map +1 -1
- package/dist/lib/session/prompt-view.js +26 -3
- package/dist/lib/session/status-evidence-type.d.ts +16 -0
- package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
- package/dist/lib/session/status-evidence-type.js +2 -0
- package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
- package/dist/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/locales/en/worktree.json +3 -1
- package/dist/server/locales/ja/worktree.json +3 -1
- package/dist/server/src/cli/types/api-responses.js +4 -2
- package/dist/server/src/config/cli-tool-timing-config.js +1 -6
- package/dist/server/src/config/uat-isolation.js +246 -0
- package/dist/server/src/lib/assistant-response-saver.js +62 -3
- package/dist/server/src/lib/auto-yes-lifecycle.js +6 -0
- package/dist/server/src/lib/auto-yes-poller.js +450 -160
- package/dist/server/src/lib/auto-yes-state.js +2 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
- package/dist/server/src/lib/cli-tools/base.js +151 -0
- package/dist/server/src/lib/cli-tools/codex.js +44 -80
- package/dist/server/src/lib/cli-tools/command-code.js +24 -56
- package/dist/server/src/lib/cli-tools/copilot.js +25 -67
- package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
- package/dist/server/src/lib/cli-tools/gemini.js +23 -73
- package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
- package/dist/server/src/lib/cli-tools/opencode.js +21 -85
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
- package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
- package/dist/server/src/lib/detection/cli-patterns.js +374 -3065
- package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
- package/dist/server/src/lib/detection/prompt-detector.js +2 -35
- package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
- package/dist/server/src/lib/detection/selection-shape.js +32 -520
- package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
- package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
- package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +5 -29
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
- package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
- package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/codex/detect.js +46 -85
- package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
- package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/command-code/detect.js +8 -50
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
- package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
- package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
- package/dist/server/src/lib/detection/tools/context-above.js +20 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +10 -35
- package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
- package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
- package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
- package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
- package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
- package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
- package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
- package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
- package/dist/server/src/lib/global-state.js +16 -0
- package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
- package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
- package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
- package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
- package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
- package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
- package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
- package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
- package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
- package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
- package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
- package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
- package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
- package/dist/server/src/lib/hooks/sources/registry.js +3 -2
- package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
- package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
- package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
- package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
- package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
- package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
- package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
- package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
- package/dist/server/src/lib/polling/response-checker.js +641 -1142
- package/dist/server/src/lib/polling/response-dedup.js +3 -4
- package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
- package/dist/server/src/lib/polling/response-poller-core.js +54 -20
- package/dist/server/src/lib/polling/startup-screen.js +142 -0
- package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
- package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
- package/dist/server/src/lib/prompt-answer-sender.js +5 -4
- package/dist/server/src/lib/push/failure-episode-state.js +2 -2
- package/dist/server/src/lib/push/notification-dedup.js +3 -4
- package/dist/server/src/lib/push/prompt-card-state.js +2 -2
- package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
- package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
- package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -5
- package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
- package/dist/server/src/lib/relay/relay-delivery.js +3 -2
- package/dist/server/src/lib/relay/relay-readiness.js +38 -1
- package/dist/server/src/lib/response-cleaner.js +24 -1
- package/dist/server/src/lib/response-extractor.js +16 -0
- package/dist/server/src/lib/schedule-manager.js +8 -10
- package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
- package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
- package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
- package/dist/server/src/lib/session/agent-event-model.js +562 -0
- package/dist/server/src/lib/session/agent-event-record.js +10 -0
- package/dist/server/src/lib/session/agent-event-state.js +106 -1854
- package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
- package/dist/server/src/lib/session/agent-event-turn.js +811 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
- package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
- package/dist/server/src/lib/session/claude-executor.js +45 -5
- package/dist/server/src/lib/session/claude-session.js +21 -65
- package/dist/server/src/lib/session/cli-session.js +17 -0
- package/dist/server/src/lib/session/current-output-builder.js +450 -1103
- package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
- package/dist/server/src/lib/session/current-output-types.js +9 -0
- package/dist/server/src/lib/session/detection-divergence.js +55 -0
- package/dist/server/src/lib/session/global-session-constants.js +2 -13
- package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
- package/dist/server/src/lib/session/layer-disagreement.js +2 -2
- package/dist/server/src/lib/session/opencode-session-store.js +2 -1
- package/dist/server/src/lib/session/prompt-view.js +26 -3
- package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
- package/dist/server/src/lib/session/provisional-turn.js +3 -1
- package/dist/server/src/lib/session/send-user-message.js +1 -1
- package/dist/server/src/lib/session/session-starting-state.js +4 -6
- package/dist/server/src/lib/session/status-evidence-type.js +2 -0
- package/dist/server/src/lib/session/status-evidence.js +2 -2
- package/dist/server/src/lib/session/structured-status-merge.js +335 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
- package/dist/server/src/lib/session-cleanup.js +1 -5
- package/dist/server/src/lib/skills/install-plan.js +2 -1
- package/dist/server/src/lib/skills/snapshot-store.js +2 -2
- package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
- package/dist/server/src/lib/timer-manager.js +6 -8
- package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
- package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/src/lib/tmux/session-hooks.js +2 -1
- package/dist/server/src/lib/tmux/session-status-options.js +3 -3
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
- package/dist/server/src/lib/tmux/tmux.js +33 -59
- package/dist/server/src/lib/tui-accumulator.js +2 -2
- package/dist/server/src/lib/version-checker.js +6 -6
- package/dist/server/src/lib/ws-server.js +47 -11
- package/docs/en/user-guide/webapp-guide.md +27 -3
- package/package.json +1 -1
- package/release-notes/0.44.3.json +82 -0
- package/scripts/hooks/cmate-agent-event.sh +18 -0
- package/.next/server/chunks/1068.js +0 -1
- package/.next/server/chunks/4372.js +0 -5
- package/.next/server/chunks/6474.js +0 -14
- package/.next/server/chunks/967.js +0 -1
- package/.next/server/chunks/9798.js +0 -2
- package/.next/server/chunks/9882.js +0 -25
- package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.js +0 -1
- package/.next/static/css/38070d879efa1371.css +0 -1
- package/dist/server/src/lib/cli-tools/index.js +0 -41
- package/dist/server/src/lib/polling/global-session-poller.js +0 -140
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Claude Code's own detection patterns (Issue #1927).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* What comes first is what Issue #1927 had to measure to give Claude a §4 D1
|
|
6
|
+
* idle rule, plus the provenance of that measurement. Below `VERIFIED_AGAINST`
|
|
7
|
+
* are the Claude patterns Issue #3217 moved here from `cli-patterns.ts`, which
|
|
8
|
+
* keeps the per-tool table and re-exports their public names.
|
|
8
9
|
*
|
|
9
10
|
* ## Why Claude needed a new rule at all
|
|
10
11
|
*
|
|
@@ -45,7 +46,11 @@
|
|
|
45
46
|
* argument #1893 used to make opencode's `▣ … · 2.3s` duration mandatory.
|
|
46
47
|
*/
|
|
47
48
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
-
exports.VERIFIED_AGAINST = exports.CLAUDE_EFFORT_CHIP_PATTERN = exports.CLAUDE_TRANSCRIPT_USER_TURN_PATTERN = exports.CLAUDE_BANNER_PATTERN = exports.CLAUDE_TURN_COMPLETE_PATTERN = void 0;
|
|
49
|
+
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = exports.VERIFIED_AGAINST = exports.CLAUDE_EFFORT_CHIP_PATTERN = exports.CLAUDE_TRANSCRIPT_USER_TURN_PATTERN = exports.CLAUDE_BANNER_PATTERN = exports.CLAUDE_TURN_COMPLETE_PATTERN = void 0;
|
|
50
|
+
exports.findClaudeChromeStart = findClaudeChromeStart;
|
|
51
|
+
exports.resolveClaudeTrustDialogKeys = resolveClaudeTrustDialogKeys;
|
|
52
|
+
exports.isClaudeTrustDialogOpen = isClaudeTrustDialogOpen;
|
|
53
|
+
const composer_text_1 = require("../../composer-text");
|
|
49
54
|
/**
|
|
50
55
|
* Claude's turn-completion marker: a spinner glyph, a verb, and a duration.
|
|
51
56
|
*
|
|
@@ -96,3 +101,258 @@ exports.CLAUDE_EFFORT_CHIP_PATTERN = /·\s*\/effort\s*$/;
|
|
|
96
101
|
*/
|
|
97
102
|
var verified_against_1 = require("../verified-against");
|
|
98
103
|
Object.defineProperty(exports, "VERIFIED_AGAINST", { enumerable: true, get: function () { return verified_against_1.CLAUDE_VERIFIED_AGAINST; } });
|
|
104
|
+
/**
|
|
105
|
+
* The Claude blocks moved out of `../../cli-patterns.ts` (Issue #3217 I-7).
|
|
106
|
+
* `cli-patterns.ts` re-exports every public name.
|
|
107
|
+
*/
|
|
108
|
+
/**
|
|
109
|
+
* Claude CLI spinner characters (expanded set)
|
|
110
|
+
* These are shown when Claude is thinking/processing
|
|
111
|
+
*/
|
|
112
|
+
exports.CLAUDE_SPINNER_CHARS = [
|
|
113
|
+
'✻', '✽', '⏺', '·', '∴', '✢', '✳', '✶',
|
|
114
|
+
'⦿', '◉', '●', '○', '◌', '◎', '⊙', '⊚',
|
|
115
|
+
'⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏', // Braille spinner
|
|
116
|
+
];
|
|
117
|
+
/**
|
|
118
|
+
* Claude thinking pattern
|
|
119
|
+
* Matches spinner character followed by activity text ending with …
|
|
120
|
+
* The text can contain spaces (e.g., "Verifying implementation (dead code detection)…")
|
|
121
|
+
*
|
|
122
|
+
* Alternative 2: "esc to interrupt" status bar text (Issue #188)
|
|
123
|
+
* Claude Code shows "esc to interrupt" in the terminal status bar during active processing.
|
|
124
|
+
* Previous pattern required closing paren `to interrupt\)` matching `(esc to interrupt)`,
|
|
125
|
+
* but Claude Code v2.x status bar format uses `· esc to interrupt ·` without parens.
|
|
126
|
+
* Updated to match `esc to interrupt` which covers both formats.
|
|
127
|
+
*/
|
|
128
|
+
exports.CLAUDE_THINKING_PATTERN = new RegExp(`[${exports.CLAUDE_SPINNER_CHARS.join('')}]\\s+.+…|esc to interrupt`, 'm');
|
|
129
|
+
/**
|
|
130
|
+
* Claude status-bar "esc to interrupt" hint (Issue #805)
|
|
131
|
+
*
|
|
132
|
+
* Claude Code shows "esc to interrupt" in the bottom status bar ONLY while it is
|
|
133
|
+
* actively processing. When idle/ready, the status bar shows shortcut hints
|
|
134
|
+
* (e.g., "? for shortcuts") instead -- so this token is a reliable "running" signal.
|
|
135
|
+
*
|
|
136
|
+
* Why this exists separately from CLAUDE_THINKING_PATTERN's "esc to interrupt"
|
|
137
|
+
* alternative: status detection evaluates the spinner+ellipsis branch of
|
|
138
|
+
* CLAUDE_THINKING_PATTERN within a narrow 5-line window (THINKING_TAIL_LINE_COUNT)
|
|
139
|
+
* to avoid mistaking a completed thinking summary in scrollback for active work
|
|
140
|
+
* (Issue #188). During /pm-auto-dev + subagent runs, the bottom task panel
|
|
141
|
+
* ("⏺ main" / "◯ general-purpose ..." rows) pushes both the "✶ Running…" spinner
|
|
142
|
+
* AND the "esc to interrupt" status bar out of that 5-line window, so the session
|
|
143
|
+
* was misdetected as Ready (Issue #805). Unlike the spinner+ellipsis summary, the
|
|
144
|
+
* status-bar text is repainted live and never lingers in scrollback, so it can be
|
|
145
|
+
* matched in a wider footer window without regressing Issue #188.
|
|
146
|
+
*/
|
|
147
|
+
exports.CLAUDE_INTERRUPT_HINT_PATTERN = /esc to interrupt/;
|
|
148
|
+
/**
|
|
149
|
+
* Claude prompt pattern (waiting for input)
|
|
150
|
+
* Supports both legacy '>' and new '❯' (U+276F) prompt characters
|
|
151
|
+
* Issue #132: Also matches prompts with recommended commands (e.g., "❯ /work-plan")
|
|
152
|
+
*
|
|
153
|
+
* Matches:
|
|
154
|
+
* - Empty prompt: "❯ " or "> "
|
|
155
|
+
* - Prompt with command: "❯ /work-plan" or "> npm install"
|
|
156
|
+
*/
|
|
157
|
+
exports.CLAUDE_PROMPT_PATTERN = /^[>❯](\s*$|\s+\S)/m;
|
|
158
|
+
/**
|
|
159
|
+
* Claude separator pattern
|
|
160
|
+
*/
|
|
161
|
+
exports.CLAUDE_SEPARATOR_PATTERN = /^─{10,}$/m;
|
|
162
|
+
/**
|
|
163
|
+
* Locate the start of Claude Code's bottom-pinned footer within a captured pane.
|
|
164
|
+
*
|
|
165
|
+
* Claude Code v2 draws in the alternate screen and reserves the last rows of the
|
|
166
|
+
* pane for a footer that is never transcript content:
|
|
167
|
+
*
|
|
168
|
+
* <hint row> ← "◉ xhigh · /effort", "tmux detected · …", or blank
|
|
169
|
+
* ──────────────────── ← separator
|
|
170
|
+
* ❯ <input box> ← one or more rows
|
|
171
|
+
* ──────────────────── ← separator
|
|
172
|
+
* ⏸ manual mode on · ? for shortcuts · ← for agents focus
|
|
173
|
+
*
|
|
174
|
+
* The hint row rotates every few seconds while the conversation sits idle, so
|
|
175
|
+
* keeping the footer in an extracted response makes its content hash change on
|
|
176
|
+
* every poll tick. That defeated the content-based dedup added in #1268 and
|
|
177
|
+
* re-saved the same reply once per tick (#1289).
|
|
178
|
+
*
|
|
179
|
+
* The boundary is found structurally rather than by matching hint text: the hint
|
|
180
|
+
* strings are Claude Code's to change, and pattern-matching them is what let this
|
|
181
|
+
* regression through (`? for shortcuts` was already listed as a skip pattern, but
|
|
182
|
+
* the real status bar embeds it mid-line so the anchors never matched). The row
|
|
183
|
+
* above the opening separator is reserved by Claude Code's layout and stays blank
|
|
184
|
+
* even when a reply fills the whole pane, so it is always safe to drop.
|
|
185
|
+
*
|
|
186
|
+
* @param lines - Captured pane lines; trailing blank rows are tolerated
|
|
187
|
+
* @returns Index of the first footer row, or -1 when no footer is present
|
|
188
|
+
*/
|
|
189
|
+
function findClaudeChromeStart(lines) {
|
|
190
|
+
// Issue #1879: the structural search (closing separator → opening separator →
|
|
191
|
+
// prompt glyph, including the "is this really the input box and not a reply
|
|
192
|
+
// fenced by two horizontal rules?" check) moved to `findClaudeInputBox` so the
|
|
193
|
+
// composer reader locates the same box this trimmer does. Behaviour here is
|
|
194
|
+
// unchanged; only the caller of the search moved.
|
|
195
|
+
const box = (0, composer_text_1.findClaudeInputBox)(lines);
|
|
196
|
+
if (box === null)
|
|
197
|
+
return -1;
|
|
198
|
+
// Include the reserved hint row directly above the opening separator.
|
|
199
|
+
return Math.max(0, box.openingSeparator - 1);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Claude trust dialog pattern (Issue #201)
|
|
203
|
+
*
|
|
204
|
+
* Matches the "Quick safety check" dialog displayed by Claude CLI v2.x
|
|
205
|
+
* when accessing a workspace for the first time.
|
|
206
|
+
*
|
|
207
|
+
* Intentionally uses partial matching (no line-start anchor ^):
|
|
208
|
+
* Other pattern constants (CLAUDE_PROMPT_PATTERN, CLAUDE_SEPARATOR_PATTERN, etc.)
|
|
209
|
+
* use line-start anchors (^), but this pattern needs to match at any position
|
|
210
|
+
* within the tmux output buffer because the dialog text may appear after
|
|
211
|
+
* tmux padding or other output. (SF-001)
|
|
212
|
+
*/
|
|
213
|
+
exports.CLAUDE_TRUST_DIALOG_PATTERN = /Yes, I trust this folder/m;
|
|
214
|
+
/** The option row of the trust dialog's cursor: `❯` (or legacy `>`) after the dialog's left padding. */
|
|
215
|
+
const CLAUDE_TRUST_CURSOR_ROW_PATTERN = /^\s*[>❯]\s+\S/;
|
|
216
|
+
/** How far the cursor row may sit from the `Yes, I trust this folder` row (the dialog has two options). */
|
|
217
|
+
const CLAUDE_TRUST_MAX_CURSOR_DISTANCE = 3;
|
|
218
|
+
/**
|
|
219
|
+
* Keys that answer Claude Code's folder-trust dialog with "Yes", or null when
|
|
220
|
+
* no answerable dialog is on screen (Issue #3078).
|
|
221
|
+
*
|
|
222
|
+
* The dialog comes in two layouts, and Enter alone is only right for one:
|
|
223
|
+
*
|
|
224
|
+
* - default Yes (Issue #201 era, `tests/unit/lib/claude-session.test.ts`):
|
|
225
|
+
* ` ❯ 1. Yes, I trust this folder` / ` 2. No, exit` — Enter confirms Yes.
|
|
226
|
+
* - default No (2.1.259 `tests/fixtures/chat-dialog-card-2254/claude-trust-2-1-259.txt`,
|
|
227
|
+
* 2.1.287 with a permission allow-list
|
|
228
|
+
* `tests/fixtures/claude-trust-dialog-3078/allowlist-default-no-2-1-287.txt`):
|
|
229
|
+
* ` ❯ No, exit` / ` Yes, I trust this folder` — Enter EXITS Claude Code.
|
|
230
|
+
*
|
|
231
|
+
* So the answer is read off the screen: the distance from the cursor row to the
|
|
232
|
+
* Yes row becomes that many `Up`/`Down` presses, then `Enter`. Only the last
|
|
233
|
+
* dialog in the capture counts, and a dialog followed by Claude's input-box
|
|
234
|
+
* separator is history in the scrollback, not an open dialog.
|
|
235
|
+
*
|
|
236
|
+
* @param output - ANSI-stripped pane output
|
|
237
|
+
* @returns tmux key names ending in `Enter` (just `['Enter']` when the cursor is
|
|
238
|
+
* already on Yes), or null when no open dialog / no readable cursor row
|
|
239
|
+
*/
|
|
240
|
+
function resolveClaudeTrustDialogKeys(output) {
|
|
241
|
+
const lines = output.split('\n');
|
|
242
|
+
const yesIndex = findOpenClaudeTrustYesRow(lines);
|
|
243
|
+
if (yesIndex === -1)
|
|
244
|
+
return null;
|
|
245
|
+
for (let distance = 0; distance <= CLAUDE_TRUST_MAX_CURSOR_DISTANCE; distance++) {
|
|
246
|
+
for (const direction of distance === 0 ? [0] : [-1, 1]) {
|
|
247
|
+
const index = yesIndex + direction * distance;
|
|
248
|
+
if (index < 0 || index >= lines.length)
|
|
249
|
+
continue;
|
|
250
|
+
if (!CLAUDE_TRUST_CURSOR_ROW_PATTERN.test(lines[index]))
|
|
251
|
+
continue;
|
|
252
|
+
// Cursor above Yes → move Down; below → move Up.
|
|
253
|
+
const key = direction < 0 ? 'Down' : 'Up';
|
|
254
|
+
return [...Array(distance).fill(key), 'Enter'];
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Whether Claude Code's folder-trust dialog is the open screen (Issue #3078).
|
|
261
|
+
*
|
|
262
|
+
* The dialog's cursor row (` ❯ No, exit`) has the prompt glyph, so the start
|
|
263
|
+
* wait asks this before CLAUDE_PROMPT_PATTERN rather than reading the dialog as
|
|
264
|
+
* a ready prompt.
|
|
265
|
+
*
|
|
266
|
+
* @param output - ANSI-stripped pane output
|
|
267
|
+
*/
|
|
268
|
+
function isClaudeTrustDialogOpen(output) {
|
|
269
|
+
return findOpenClaudeTrustYesRow(output.split('\n')) !== -1;
|
|
270
|
+
}
|
|
271
|
+
/** Row of the last `Yes, I trust this folder`, or -1 when absent or already answered. */
|
|
272
|
+
function findOpenClaudeTrustYesRow(lines) {
|
|
273
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
274
|
+
if (!exports.CLAUDE_TRUST_DIALOG_PATTERN.test(lines[i]))
|
|
275
|
+
continue;
|
|
276
|
+
// Claude's input box (separator rows) drawn below it: the dialog is scrollback.
|
|
277
|
+
return lines.slice(i + 1).some((line) => exports.CLAUDE_SEPARATOR_PATTERN.test(line)) ? -1 : i;
|
|
278
|
+
}
|
|
279
|
+
return -1;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* [Issue #1495] Footer signature of Claude Code's `/model` local-settings overlay.
|
|
283
|
+
* Verified against a real Claude Code v2.1.218 capture, the footer reads:
|
|
284
|
+
* "Enter to set as default · s to use this session only · Esc to cancel"
|
|
285
|
+
*
|
|
286
|
+
* The overlay renders a ❯-marked numbered model list ("1. Default … 5. Haiku")
|
|
287
|
+
* under a "Select model" header that detectMultipleChoicePrompt() otherwise
|
|
288
|
+
* matches as a genuine multiple_choice prompt — which let Auto-Yes Enter-confirm
|
|
289
|
+
* a selection and silently change the user's default model. This "set as default"
|
|
290
|
+
* phrasing is unique to the model picker: genuine confirmation prompts never
|
|
291
|
+
* contain it (the trust dialog uses "Enter to confirm · Esc to cancel", Bash-tool
|
|
292
|
+
* approvals use "Esc to cancel · Tab to amend", AskUserQuestion uses
|
|
293
|
+
* "Enter to select · … to navigate"), so it is a safe exclusion signal.
|
|
294
|
+
*
|
|
295
|
+
* Linear pattern, no nested quantifiers — ReDoS safe (S4-001).
|
|
296
|
+
*/
|
|
297
|
+
exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = /Enter\s+to\s+set\s+as\s+default\b/i;
|
|
298
|
+
/**
|
|
299
|
+
* Claude CLI selection list footer pattern
|
|
300
|
+
* Detects Claude CLI's interactive selection prompts that require
|
|
301
|
+
* arrow key navigation and Enter to select/toggle.
|
|
302
|
+
*
|
|
303
|
+
* Matches footer instruction lines (known variants):
|
|
304
|
+
* "Enter to select · Tab/Arrow keys to navigate · Esc to cancel"
|
|
305
|
+
* "Enter to select · ↑/↓ to navigate · n to add notes · Esc to cancel"
|
|
306
|
+
* "Enter to confirm · Esc to exit" (legacy /model command footer)
|
|
307
|
+
* "Enter to set as default · s to use this session only · Esc to cancel"
|
|
308
|
+
* (/model command footer as of Claude Code v2.1.218 — Issue #1495)
|
|
309
|
+
*
|
|
310
|
+
* "←/→ to adjust · Enter to confirm · s for this session only · Esc to cancel"
|
|
311
|
+
* (/effort slider footer as of Claude Code v2.1.257 — Issue #3052; before
|
|
312
|
+
* 2.1.257 it was "Enter to confirm · Esc to cancel")
|
|
313
|
+
*
|
|
314
|
+
* The /effort branch keys on "Enter to confirm · s for this session only" rather
|
|
315
|
+
* than "←/→ to adjust": the `s` hint is unique to the pickers (the trust dialog's
|
|
316
|
+
* "Enter to confirm · Esc to cancel" and approval dialogs never carry it), and
|
|
317
|
+
* keeping the match under the `Enter to` prefix leaves the pattern a single
|
|
318
|
+
* linear alternation. Linear, no nested quantifiers — ReDoS safe.
|
|
319
|
+
*
|
|
320
|
+
* The "set as default" branch lets status-detector classify the `/model` overlay
|
|
321
|
+
* as a Claude selection list (NavigationButtons + ESC hatch, hasActivePrompt=false)
|
|
322
|
+
* once detectPrompt() no longer reports it as a prompt (see
|
|
323
|
+
* CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN).
|
|
324
|
+
*/
|
|
325
|
+
exports.CLAUDE_SELECTION_LIST_FOOTER = /Enter\s+to\s+(?:select\s+.*to\s+navigate|confirm\s+·\s+(?:Esc|s\s+for\s+this\s+session\s+only)|set\s+as\s+default)/;
|
|
326
|
+
/**
|
|
327
|
+
* Error patterns that indicate a Claude session failed to start properly
|
|
328
|
+
* Used by isSessionHealthy() to detect broken sessions (MF-001: SRP)
|
|
329
|
+
* Style: readonly + as const for type safety (SF-S2-001: follows response-poller.ts precedent)
|
|
330
|
+
*
|
|
331
|
+
* SEC-SF-004: Pattern maintenance process:
|
|
332
|
+
* - When Claude CLI is updated, verify that error messages still match these patterns.
|
|
333
|
+
* - Test procedure: Intentionally trigger each error condition (e.g., nested session launch)
|
|
334
|
+
* and confirm the error message is captured by the patterns.
|
|
335
|
+
* - If Claude CLI introduces localized error messages, add locale-aware patterns or
|
|
336
|
+
* consider switching to exit code-based detection as a more robust alternative.
|
|
337
|
+
* - Pattern additions should be accompanied by corresponding test cases in
|
|
338
|
+
* claude-session.test.ts.
|
|
339
|
+
*
|
|
340
|
+
* C-S3-001: Codex/Gemini monitoring note:
|
|
341
|
+
* These patterns are currently Claude-specific. If Codex or Gemini exhibit similar
|
|
342
|
+
* "nested session" or startup failure behaviors, analogous error patterns should be
|
|
343
|
+
* added to their respective tool configurations (codex.ts, gemini.ts) rather than
|
|
344
|
+
* extending these arrays, to maintain SRP per CLI tool type.
|
|
345
|
+
*/
|
|
346
|
+
exports.CLAUDE_SESSION_ERROR_PATTERNS = [
|
|
347
|
+
'Claude Code cannot be launched inside another Claude Code session',
|
|
348
|
+
];
|
|
349
|
+
/**
|
|
350
|
+
* Regex patterns for Claude session errors requiring context matching
|
|
351
|
+
* Used by isSessionHealthy() for multi-condition error detection (MF-001: SRP)
|
|
352
|
+
* Style: readonly + as const for type safety (SF-S2-001: follows response-poller.ts precedent)
|
|
353
|
+
*
|
|
354
|
+
* SEC-SF-004: See CLAUDE_SESSION_ERROR_PATTERNS JSDoc for pattern maintenance process.
|
|
355
|
+
*/
|
|
356
|
+
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = [
|
|
357
|
+
/^Error:.*Claude Code/,
|
|
358
|
+
];
|
|
@@ -63,6 +63,7 @@ exports.detectClaudeDialog = detectClaudeDialog;
|
|
|
63
63
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
64
64
|
const prompt_detect_multiple_choice_1 = require("../../prompt-detect-multiple-choice");
|
|
65
65
|
const dialog_block_1 = require("../dialog-block");
|
|
66
|
+
const context_above_1 = require("../context-above");
|
|
66
67
|
const picker_chrome_1 = require("./picker-chrome");
|
|
67
68
|
/**
|
|
68
69
|
* Claude's dialog footers, in every spelling measured.
|
|
@@ -78,8 +79,6 @@ const picker_chrome_1 = require("./picker-chrome");
|
|
|
78
79
|
const CLAUDE_DIALOG_FOOTER_PATTERN = /esc\s+to\s+cancel|enter\s+to\s+(?:select|confirm|set\s+as\s+default)/i;
|
|
79
80
|
/** The selection cursor Claude puts on the highlighted option. */
|
|
80
81
|
const CLAUDE_SELECTION_GLYPHS = new Set(['❯', '>']);
|
|
81
|
-
/** How many non-blank rows above the options may hold the question. */
|
|
82
|
-
const QUESTION_SCAN_ROWS = 4;
|
|
83
82
|
/** The permission dialog's question, in the spellings 2.1.x draws. */
|
|
84
83
|
const CLAUDE_PERMISSION_QUESTION_PATTERN = /do you want to\b|allow\b.*\?$/i;
|
|
85
84
|
/** The AskUserQuestion review screen's closing question. */
|
|
@@ -94,14 +93,7 @@ const CLAUDE_PICKER_FOOTER_PATTERN = /set\s+as\s+default/i;
|
|
|
94
93
|
*/
|
|
95
94
|
function readContextAbove(lines, firstRow) {
|
|
96
95
|
const tabRow = (0, picker_chrome_1.findAskUserQuestionTabRow)(lines, firstRow, prompt_detect_multiple_choice_1.APPROVAL_TARGET_MAX_LOOKBACK);
|
|
97
|
-
|
|
98
|
-
for (let i = firstRow - 1; i > tabRow && rows.length < QUESTION_SCAN_ROWS; i--) {
|
|
99
|
-
const row = lines[i].trim();
|
|
100
|
-
if (row === '')
|
|
101
|
-
continue;
|
|
102
|
-
rows.push(row);
|
|
103
|
-
}
|
|
104
|
-
return rows.join('\n');
|
|
96
|
+
return (0, context_above_1.readContextAbove)(lines, firstRow, tabRow);
|
|
105
97
|
}
|
|
106
98
|
/**
|
|
107
99
|
* The non-blank rows in [from, end) — the block's footer — without Claude's
|
|
@@ -19,15 +19,20 @@ exports.isCodexStalePrompt = isCodexStalePrompt;
|
|
|
19
19
|
exports.isCodexModelPickerFrame = isCodexModelPickerFrame;
|
|
20
20
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
21
21
|
const prompt_detector_1 = require("../../prompt-detector");
|
|
22
|
+
const verdicts_1 = require("../verdicts");
|
|
22
23
|
const status_reason_1 = require("../../status-reason");
|
|
23
24
|
const cli_patterns_2 = require("./cli-patterns");
|
|
24
25
|
const prompt_1 = require("./prompt");
|
|
25
26
|
const frame_1 = require("../frame");
|
|
26
27
|
const dialog_block_1 = require("../dialog-block");
|
|
27
28
|
const live_region_1 = require("./live-region");
|
|
29
|
+
const patterns_1 = require("./patterns");
|
|
28
30
|
const run_detection_1 = require("../run-detection");
|
|
29
31
|
const verified_against_1 = require("../verified-against");
|
|
30
32
|
const thinking_constants_1 = require("../../../../config/thinking-constants");
|
|
33
|
+
function detectCodexPrompt(clean) {
|
|
34
|
+
return (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex'));
|
|
35
|
+
}
|
|
31
36
|
/** codex-cli build these rules were read off (#1628 / #1829 / #1890; value in ../verified-against, #1929). */
|
|
32
37
|
exports.VERIFIED_AGAINST = verified_against_1.CODEX_VERIFIED_AGAINST;
|
|
33
38
|
/**
|
|
@@ -132,6 +137,23 @@ function isCodexApprovalRequest(promptDetection, selectionWindow) {
|
|
|
132
137
|
function isCodexDialogGlyphTail(raw) {
|
|
133
138
|
return (0, cli_patterns_2.findCodexBottomGlyphRow)(raw)?.kind === 'option';
|
|
134
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Issue #3205: the bottom content row as the idle/running branches read it.
|
|
142
|
+
*
|
|
143
|
+
* A composer holding several lines puts its continuation rows below the `›`
|
|
144
|
+
* row, so `lastRow` is then the composer's last line (` world`), which is
|
|
145
|
+
* neither the `›` the idle branch looks for nor anything codex is working on —
|
|
146
|
+
* branch C read every such frame as `running`. When the live region's composer
|
|
147
|
+
* ends on `lastRow`, the composer's `›` row is returned instead, so its 2nd and
|
|
148
|
+
* later lines are read as composer text and never as transcript or a working
|
|
149
|
+
* row. Any other frame keeps `lastRow`.
|
|
150
|
+
*/
|
|
151
|
+
function codexTailRowAboveComposerText(frame, lastRow) {
|
|
152
|
+
const region = (0, frame_1.liveRegionOf)(frame, 'codex');
|
|
153
|
+
if (region.anchor !== 'composer' || region.composerEndRow !== lastRow)
|
|
154
|
+
return lastRow;
|
|
155
|
+
return region.startRow;
|
|
156
|
+
}
|
|
135
157
|
exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
136
158
|
tool: 'codex',
|
|
137
159
|
verifiedAgainst: exports.VERIFIED_AGAINST,
|
|
@@ -168,14 +190,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
168
190
|
// content must not be misread as one. CODEX_PAGER_FOOTER_PATTERN does not match the
|
|
169
191
|
// genuine "/model" selection footer, so the 0.8 path below is unaffected (no regression).
|
|
170
192
|
if (cli_patterns_1.CODEX_PAGER_FOOTER_PATTERN.test(frame.lastLines)) {
|
|
171
|
-
return
|
|
172
|
-
status: 'waiting',
|
|
173
|
-
confidence: 'high',
|
|
174
|
-
reason: status_reason_1.STATUS_REASON.CODEX_PAGER,
|
|
175
|
-
hasActivePrompt: false,
|
|
176
|
-
evidence: 'positive',
|
|
177
|
-
promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
|
|
178
|
-
};
|
|
193
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_PAGER, detectCodexPrompt(frame.clean));
|
|
179
194
|
}
|
|
180
195
|
// 0.75. Codex: the hooks review screens (Issue #1829)
|
|
181
196
|
// codex-cli 0.148.0 answers "1. Review hooks" with a two-screen review UI:
|
|
@@ -190,14 +205,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
190
205
|
// ordinary text that must not be read as options.
|
|
191
206
|
const codexLifecycleDialog = (0, cli_patterns_1.getCodexLifecycleDialog)((0, frame_1.withLiveRegion)(frame, 'codex'));
|
|
192
207
|
if (codexLifecycleDialog === 'hooks-list' || codexLifecycleDialog === 'hooks-detail') {
|
|
193
|
-
return
|
|
194
|
-
status: 'waiting',
|
|
195
|
-
confidence: 'high',
|
|
196
|
-
reason: status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW,
|
|
197
|
-
hasActivePrompt: false,
|
|
198
|
-
evidence: 'positive',
|
|
199
|
-
promptDetection: (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), (0, cli_patterns_1.buildDetectPromptOptions)('codex')),
|
|
200
|
-
};
|
|
208
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_HOOKS_REVIEW, detectCodexPrompt(frame.clean));
|
|
201
209
|
}
|
|
202
210
|
// 0.8. Codex: selection list detection BEFORE prompt detection (Issue #622)
|
|
203
211
|
// CODEX_SELECTION_LIST_PATTERN matches "press enter to confirm/select" footer.
|
|
@@ -213,11 +221,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
213
221
|
// Issue #1150: the status bar is located via CODEX_STATUS_BAR_PATTERN (version-
|
|
214
222
|
// independent; matches both legacy "N% left ·" and v0.141 "model · path" bars),
|
|
215
223
|
// and since #2818 via CODEX_TRAILED_STATUS_BAR_PATTERN too (0.154+ "· <title>").
|
|
216
|
-
const
|
|
217
|
-
let codexContentEnd = codexFooterBoundary >= 0 ? codexFooterBoundary - 1 : contentLines.length - 1;
|
|
218
|
-
while (codexContentEnd >= 0 && contentLines[codexContentEnd].trim() === '') {
|
|
219
|
-
codexContentEnd--;
|
|
220
|
-
}
|
|
224
|
+
const codexContentEnd = (0, live_region_1.findCodexContentEnd)(contentLines) - 1;
|
|
221
225
|
if (codexContentEnd >= 0) {
|
|
222
226
|
const codexSelectionWindow = contentLines
|
|
223
227
|
.slice(Math.max(0, codexContentEnd - frame_1.STATUS_CHECK_LINE_COUNT + 1), codexContentEnd + 1)
|
|
@@ -230,7 +234,7 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
230
234
|
if (cli_patterns_1.CODEX_SELECTION_LIST_PATTERN.test(codexSelectionWindow) ||
|
|
231
235
|
cli_patterns_1.CODEX_PICKER_FOOTER_PATTERN.test(codexLastRow) ||
|
|
232
236
|
cli_patterns_1.CODEX_EFFORT_PICKER_FOOTER_PATTERN.test(codexLastRow)) {
|
|
233
|
-
const codexPromptDetection = (
|
|
237
|
+
const codexPromptDetection = detectCodexPrompt(frame.clean);
|
|
234
238
|
// Issue #1628: an approval request wears the same footer as a menu but is the
|
|
235
239
|
// agent blocked on the human, so it must surface as an active prompt (exit 10
|
|
236
240
|
// for `wait`, PromptPanel in the UI) instead of a navigable list. The #1160
|
|
@@ -238,23 +242,9 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
238
242
|
// still inside the window, with Codex running below it, is dead scrollback.
|
|
239
243
|
if (isCodexApprovalRequest(codexPromptDetection, codexSelectionWindow) &&
|
|
240
244
|
!isCodexStalePrompt(contentLines)) {
|
|
241
|
-
return
|
|
242
|
-
status: 'waiting',
|
|
243
|
-
confidence: 'high',
|
|
244
|
-
reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
|
|
245
|
-
hasActivePrompt: true,
|
|
246
|
-
evidence: 'positive',
|
|
247
|
-
promptDetection: codexPromptDetection,
|
|
248
|
-
};
|
|
245
|
+
return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, codexPromptDetection);
|
|
249
246
|
}
|
|
250
|
-
return
|
|
251
|
-
status: 'waiting',
|
|
252
|
-
confidence: 'high',
|
|
253
|
-
reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
|
|
254
|
-
hasActivePrompt: false,
|
|
255
|
-
evidence: 'positive',
|
|
256
|
-
promptDetection: codexPromptDetection,
|
|
257
|
-
};
|
|
247
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST, codexPromptDetection);
|
|
258
248
|
}
|
|
259
249
|
}
|
|
260
250
|
// 0.85. Codex: every OTHER dialog — recognised by structure (Issue #2310)
|
|
@@ -292,25 +282,11 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
292
282
|
if (!codexDialogFrame.footerRecognised) {
|
|
293
283
|
(0, cli_patterns_2.reportCodexDialogFooterDrift)(codexDialogFrame.footer);
|
|
294
284
|
}
|
|
295
|
-
const codexPromptDetection = (
|
|
285
|
+
const codexPromptDetection = detectCodexPrompt(frame.clean);
|
|
296
286
|
if (codexPromptDetection.isPrompt) {
|
|
297
|
-
return
|
|
298
|
-
status: 'waiting',
|
|
299
|
-
confidence: 'high',
|
|
300
|
-
reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
|
|
301
|
-
hasActivePrompt: true,
|
|
302
|
-
evidence: 'positive',
|
|
303
|
-
promptDetection: codexPromptDetection,
|
|
304
|
-
};
|
|
287
|
+
return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, codexPromptDetection);
|
|
305
288
|
}
|
|
306
|
-
return
|
|
307
|
-
status: 'waiting',
|
|
308
|
-
confidence: 'high',
|
|
309
|
-
reason: status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
|
|
310
|
-
hasActivePrompt: false,
|
|
311
|
-
evidence: 'positive',
|
|
312
|
-
promptDetection: codexPromptDetection,
|
|
313
|
-
};
|
|
289
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST, codexPromptDetection);
|
|
314
290
|
}
|
|
315
291
|
return null;
|
|
316
292
|
},
|
|
@@ -354,19 +330,18 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
354
330
|
while (lastContentIdx >= 0 && contentLines[lastContentIdx].trim() === '') {
|
|
355
331
|
lastContentIdx--;
|
|
356
332
|
}
|
|
333
|
+
// Issue #3205: a multi-line composer ends on its own `›` row here.
|
|
334
|
+
lastContentIdx = codexTailRowAboveComposerText(frame, lastContentIdx);
|
|
357
335
|
if (lastContentIdx >= 0) {
|
|
358
336
|
// A. Check content area for thinking indicators (wider window than the shared step)
|
|
359
337
|
const codexThinkingWindow = contentLines
|
|
360
338
|
.slice(Math.max(0, lastContentIdx - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1), lastContentIdx + 1)
|
|
361
339
|
.join('\n');
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
hasActivePrompt: false,
|
|
368
|
-
evidence: 'positive',
|
|
369
|
-
};
|
|
340
|
+
// Issue #3337: or the live status row, whatever its bullet and header —
|
|
341
|
+
// codex 0.160.0's `◦ Working (43s • esc to interrupt)` frame reached B.
|
|
342
|
+
if ((0, cli_patterns_1.detectThinking)('codex', codexThinkingWindow) ||
|
|
343
|
+
patterns_1.CODEX_LIVE_STATUS_ROW_PATTERN.test(codexThinkingWindow)) {
|
|
344
|
+
return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
|
|
370
345
|
}
|
|
371
346
|
// B. Check if the last content line is the idle › prompt.
|
|
372
347
|
// The last non-empty line above the status bar is the current active line.
|
|
@@ -386,26 +361,14 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
386
361
|
// ANSI has been stripped still reports idle exactly as it did before.
|
|
387
362
|
if (cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[lastContentIdx].trim()) &&
|
|
388
363
|
!isCodexDialogGlyphTail(frame.raw)) {
|
|
389
|
-
return
|
|
390
|
-
status: 'ready',
|
|
391
|
-
confidence: 'high',
|
|
392
|
-
reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
|
|
393
|
-
hasActivePrompt: false,
|
|
394
|
-
evidence: 'positive',
|
|
395
|
-
};
|
|
364
|
+
return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
|
|
396
365
|
}
|
|
397
366
|
// C. Fallback: status bar present but neither thinking nor idle › detected.
|
|
398
367
|
// This means Codex is actively processing — command output has pushed the
|
|
399
368
|
// • Ran/• Working indicators beyond the 5-line thinking window.
|
|
400
369
|
// The status bar ("model · N% left · path") is always visible during Codex
|
|
401
370
|
// sessions, and the only idle state (›) was checked in B above.
|
|
402
|
-
return
|
|
403
|
-
status: 'running',
|
|
404
|
-
confidence: 'high',
|
|
405
|
-
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
406
|
-
hasActivePrompt: false,
|
|
407
|
-
evidence: 'positive',
|
|
408
|
-
};
|
|
371
|
+
return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
|
|
409
372
|
}
|
|
410
373
|
}
|
|
411
374
|
else {
|
|
@@ -426,17 +389,15 @@ exports.codexStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
426
389
|
while (codexTailIdx >= 0 && contentLines[codexTailIdx].trim() === '') {
|
|
427
390
|
codexTailIdx--;
|
|
428
391
|
}
|
|
392
|
+
// Issue #3205: as in 2.7, a multi-line composer is read from its `›` row.
|
|
393
|
+
codexTailIdx = codexTailRowAboveComposerText(frame, codexTailIdx);
|
|
429
394
|
const codexTailIsIdlePrompt = codexTailIdx >= 0 &&
|
|
430
395
|
cli_patterns_1.CODEX_PROMPT_PATTERN.test(contentLines[codexTailIdx].trim()) &&
|
|
431
396
|
!isCodexDialogGlyphTail(frame.raw);
|
|
432
|
-
if (!codexTailIsIdlePrompt &&
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
437
|
-
hasActivePrompt: false,
|
|
438
|
-
evidence: 'positive',
|
|
439
|
-
};
|
|
397
|
+
if (!codexTailIsIdlePrompt &&
|
|
398
|
+
((0, cli_patterns_1.detectThinking)('codex', frame.lastLines) ||
|
|
399
|
+
patterns_1.CODEX_LIVE_STATUS_ROW_PATTERN.test(frame.lastLines))) {
|
|
400
|
+
return (0, verdicts_1.positiveVerdict)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR);
|
|
440
401
|
}
|
|
441
402
|
}
|
|
442
403
|
return null;
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
* separate readings in two files; they are now the two halves of one marker.
|
|
10
10
|
* Measured: `codex-dialogs-0157/quoted-approval-idle.txt` L997 (composer) under
|
|
11
11
|
* the quotation at L40-L49.
|
|
12
|
+
* - **composer end** — the composer's last row (Issue #3205). A composer holding
|
|
13
|
+
* several lines draws its continuation rows under the `›` row, so the bottom
|
|
14
|
+
* content row is then the composer's last line, not the `›` row. The extent is
|
|
15
|
+
* `composer-text.ts`'s {@link findCodexInputBox} (the #1890 reading), mapped
|
|
16
|
+
* onto `contentLines` by {@link findCodexComposerEndRow}.
|
|
12
17
|
* - **dialog top** — not declared. codex removes its composer while a dialog is
|
|
13
18
|
* open and the dialog takes the bottom of the pane (`codex-dialogs-0157/
|
|
14
19
|
* approval.txt` L987-L1000), so the whole frame is the right fallback.
|
|
@@ -19,8 +24,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
19
24
|
exports.CODEX_LIVE_REGION = void 0;
|
|
20
25
|
exports.findCodexFooterBoundary = findCodexFooterBoundary;
|
|
21
26
|
exports.findCodexContentEnd = findCodexContentEnd;
|
|
27
|
+
exports.findCodexComposerEndRow = findCodexComposerEndRow;
|
|
22
28
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
23
29
|
const cli_patterns_2 = require("./cli-patterns");
|
|
30
|
+
const composer_text_1 = require("../../composer-text");
|
|
31
|
+
const ansi_1 = require("../../ansi");
|
|
24
32
|
const live_region_1 = require("../live-region");
|
|
25
33
|
/**
|
|
26
34
|
* Index of the Codex status bar within the last 10 content rows, or -1.
|
|
@@ -53,14 +61,37 @@ function findCodexContentEnd(contentLines) {
|
|
|
53
61
|
end--;
|
|
54
62
|
return end + 1;
|
|
55
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Index into `contentLines` of the composer's last row, given its `›` row
|
|
66
|
+
* (Issue #3205).
|
|
67
|
+
*
|
|
68
|
+
* The rows are counted on the RAW capture by {@link findCodexInputBox}, which
|
|
69
|
+
* is what reads the composer's text for `send` (#1890), so both answer with the
|
|
70
|
+
* same rows. `contentLines` has had its blank rows compacted, so the raw index
|
|
71
|
+
* cannot be used as it is; the composer block holds no blank row, though, so
|
|
72
|
+
* its row count carries over once its first row is the same text as
|
|
73
|
+
* `composerRow`. Anything else — no input box found, or a different first row —
|
|
74
|
+
* answers `composerRow`: the one-row composer every rule read before #3205.
|
|
75
|
+
*/
|
|
76
|
+
function findCodexComposerEndRow(raw, contentLines, composerRow, contentEnd) {
|
|
77
|
+
const rawLines = raw.split('\n');
|
|
78
|
+
const box = (0, composer_text_1.findCodexInputBox)(rawLines);
|
|
79
|
+
if (box === null)
|
|
80
|
+
return composerRow;
|
|
81
|
+
if ((0, ansi_1.stripAnsi)(rawLines[box.firstRow]).trim() !== contentLines[composerRow]?.trim())
|
|
82
|
+
return composerRow;
|
|
83
|
+
const end = Math.min(composerRow + (box.lastRow - box.firstRow), contentEnd - 1);
|
|
84
|
+
return Math.max(composerRow, end);
|
|
85
|
+
}
|
|
56
86
|
exports.CODEX_LIVE_REGION = {
|
|
57
87
|
composer: {
|
|
58
88
|
locate({ raw, contentLines }) {
|
|
59
89
|
const contentEnd = findCodexContentEnd(contentLines);
|
|
60
90
|
const atBottom = (0, cli_patterns_2.isCodexComposerAtBottom)(raw, contentLines, contentEnd);
|
|
61
91
|
const row = (0, cli_patterns_1.findCodexComposerRow)(contentLines);
|
|
62
|
-
if (row >= 0)
|
|
63
|
-
return { start: row, end: row, atBottom };
|
|
92
|
+
if (row >= 0) {
|
|
93
|
+
return { start: row, end: findCodexComposerEndRow(raw, contentLines, row, contentEnd), atBottom };
|
|
94
|
+
}
|
|
64
95
|
if (!atBottom)
|
|
65
96
|
return null;
|
|
66
97
|
// The raw glyph row said "composer" although its text reads as a numbered
|