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
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Command Code's selection-list / plan-review / question-page patterns and
|
|
4
|
+
* readers, moved out of `selection-shape.ts` (Issue #3218). `selection-shape.ts`
|
|
5
|
+
* re-exports every name it used to export from here.
|
|
6
|
+
*
|
|
7
|
+
* Imports only `ansi` and `selection-shape-patterns`: the screen-side modules
|
|
8
|
+
* reach this through `selection-shape.ts`, so nothing server-only may come in,
|
|
9
|
+
* and importing `selection-shape.ts` back would be a cycle.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.COMMAND_CODE_QUESTION_REGION_REJECT_PATTERN = exports.COMMAND_CODE_CURSOR_GLYPH = exports.COMMAND_CODE_RULE_MIN_COLUMNS = exports.COMMAND_CODE_RULE_ROW_PATTERN = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = void 0;
|
|
13
|
+
exports.isCommandCodePlanApproveChoice = isCommandCodePlanApproveChoice;
|
|
14
|
+
exports.hasCommandCodeSelectionListFooterAtBottom = hasCommandCodeSelectionListFooterAtBottom;
|
|
15
|
+
exports.hasCommandCodeDismissablePanelFooterAtBottom = hasCommandCodeDismissablePanelFooterAtBottom;
|
|
16
|
+
exports.hasCommandCodePlanReviewFooterAtBottom = hasCommandCodePlanReviewFooterAtBottom;
|
|
17
|
+
exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
|
|
18
|
+
exports.isCommandCodeQuestionTabRow = isCommandCodeQuestionTabRow;
|
|
19
|
+
exports.readCommandCodeReviewPage = readCommandCodeReviewPage;
|
|
20
|
+
const ansi_1 = require("../../ansi");
|
|
21
|
+
const selection_shape_patterns_1 = require("../../selection-shape-patterns");
|
|
22
|
+
/**
|
|
23
|
+
* Command Code's picker footer (v1.40.1, measured at 200x1000 for Issue #2297).
|
|
24
|
+
*
|
|
25
|
+
* type to search · ↑/↓ navigate · shift+↑/↓ jump provider · enter to select · esc to cancel
|
|
26
|
+
*
|
|
27
|
+
* Before this Issue no detector branch matched it, so the overlay fell through
|
|
28
|
+
* to the `default` floor and the chat surface raised its `unclassified` card —
|
|
29
|
+
* whose controls are the `1`–`9` / `y` / `n` answer keys, every one of which
|
|
30
|
+
* would have been typed into that `Type to search models...` box. The
|
|
31
|
+
* command-code detector imports this and answers
|
|
32
|
+
* `STATUS_REASON.COMMAND_CODE_SELECTION_LIST` instead, which puts the arrow pad
|
|
33
|
+
* on the card.
|
|
34
|
+
*
|
|
35
|
+
* Lower case is what Command Code draws, and the `·` separator keeps the pattern
|
|
36
|
+
* off ordinary prose — the same two narrowings `COPILOT_SELECTION_FOOTER_PATTERN`
|
|
37
|
+
* settled on for the same reason.
|
|
38
|
+
*/
|
|
39
|
+
exports.COMMAND_CODE_SELECTION_LIST_FOOTER = /\benter\s+to\s+select\b\s*[·•]\s*esc\s+to\s+cancel\b/i;
|
|
40
|
+
/**
|
|
41
|
+
* The footer of an overlay whose ONLY exit is the dismiss (Issue #2369).
|
|
42
|
+
*
|
|
43
|
+
* Measured on Command Code 1.49's `/usage`, whose last row is verbatim
|
|
44
|
+
* `Press Esc to close`. The panel above it is read-only — a plan header, two
|
|
45
|
+
* meters, a breakdown URL — so there is no highlight to move and no key to
|
|
46
|
+
* confirm with. Before this pattern existed nothing matched the screen, it
|
|
47
|
+
* reached the `default` floor, and the chat surface answered an
|
|
48
|
+
* eighteen-button `unclassified` card to a panel with one working key.
|
|
49
|
+
*
|
|
50
|
+
* ## Why it is this narrow
|
|
51
|
+
*
|
|
52
|
+
* Three narrowings, and each one is there because this predicate SUPPRESSES
|
|
53
|
+
* controls — a false positive takes the arrow pad and the answer keys away from
|
|
54
|
+
* a screen that needed them:
|
|
55
|
+
*
|
|
56
|
+
* - **a verb before the key.** `Press`/`Hit`/`Type`, or nothing at all, but not
|
|
57
|
+
* an arbitrary run of prose. `esc to cancel` on its own is the tail of every
|
|
58
|
+
* picker footer in this file, including
|
|
59
|
+
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER}, and those screens have a
|
|
60
|
+
* highlight;
|
|
61
|
+
* - **`close`/`dismiss`/`exit`, never `cancel` or `go back`.** The distinction
|
|
62
|
+
* is measured rather than stylistic: `cancel` is what a screen with a
|
|
63
|
+
* COMMITTABLE choice calls its escape (claude's `/model`, codex's picker,
|
|
64
|
+
* Command Code's own), while `close` is what a panel that decided nothing
|
|
65
|
+
* calls it;
|
|
66
|
+
* - **the whole row.** Anchored at both ends (leading/trailing space aside), so
|
|
67
|
+
* a hint bar that offers a dismiss ALONGSIDE something else — `↑/↓ navigate ·
|
|
68
|
+
* enter to select · esc to close` — does not match, and keeps the arrows the
|
|
69
|
+
* other half of its sentence promises.
|
|
70
|
+
*
|
|
71
|
+
* Case-insensitive because the measured row is `Press Esc to close` and Command
|
|
72
|
+
* Code writes its picker hints in lower case; nothing rests on which it uses.
|
|
73
|
+
*/
|
|
74
|
+
exports.DISMISSABLE_PANEL_FOOTER_PATTERN = /^\s*(?:press|hit|type)?\s*(?:<)?esc(?:ape)?(?:>)?\s+to\s+(?:close|dismiss|exit)\b[\s.·•]*$/im;
|
|
75
|
+
/**
|
|
76
|
+
* The radio row `ctrl+a` puts in place of the action list when comments are
|
|
77
|
+
* pending (Issue #2793).
|
|
78
|
+
*
|
|
79
|
+
* Measured on 1.58.0 (`tests/fixtures/command-code-plan-review-2763/`): with
|
|
80
|
+
* zero comments `ctrl+a` approves at once, and with one or more it first asks
|
|
81
|
+
* what to do with them. The three action rows are replaced by ONE row, and the
|
|
82
|
+
* selected side is `(•)`, the other `( )` — readable without the ANSI:
|
|
83
|
+
*
|
|
84
|
+
* Approve (•) with 4 comments as notes ( ) original plan · discard comments
|
|
85
|
+
*
|
|
86
|
+
* `comments?` because the badge above it is measured in both numbers
|
|
87
|
+
* (`1 pending comment` / `4 pending comments`); the radio itself was captured
|
|
88
|
+
* with four.
|
|
89
|
+
*/
|
|
90
|
+
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = /^\s*Approve\s+\([• ]\)\s+with\s+\d+\s+comments?\s+as\s+notes\s+\([• ]\)\s+original\s+plan\b/im;
|
|
91
|
+
/**
|
|
92
|
+
* The hint bar under {@link COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW}, verbatim
|
|
93
|
+
* `←/→ choose · enter confirm · esc back`.
|
|
94
|
+
*
|
|
95
|
+
* Anchored to the LAST row of the text it is tested against (no `m` flag: `$` is
|
|
96
|
+
* the end of the input), because that is where the overlay draws every one of
|
|
97
|
+
* its five measured hint bars, and because it is what keeps a transcript that
|
|
98
|
+
* QUOTES this screen from matching — the composer is always drawn below a
|
|
99
|
+
* transcript, so there the quote is never the last row.
|
|
100
|
+
*/
|
|
101
|
+
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = /(?:^|\n)[ \t]*←\/→\s+choose\s*·\s*enter\s+confirm\s*·\s*esc\s+back\s*$/i;
|
|
102
|
+
/**
|
|
103
|
+
* Whether this tail is the approve-with-comments confirmation (Issue #2793).
|
|
104
|
+
*
|
|
105
|
+
* BOTH rows, for the reason {@link COMMAND_CODE_PLAN_REVIEW_FOOTER} gives for
|
|
106
|
+
* its two: either half alone is a sentence something else could print. Not
|
|
107
|
+
* adjacent — `Editor exited with code 127` and a blank row sit between them on
|
|
108
|
+
* both captures — so each is tested on its own.
|
|
109
|
+
*
|
|
110
|
+
* Deliberately NOT folded into {@link COMMAND_CODE_PLAN_REVIEW_FOOTER}, and
|
|
111
|
+
* therefore not {@link SelectionListShape.offersPlanApprove}: on this screen
|
|
112
|
+
* `enter` is the documented CONFIRM of an approval the human already started
|
|
113
|
+
* with `ctrl+a`, so the chat surface must keep its `Enter`, and what `ctrl+a`
|
|
114
|
+
* does here was not measured.
|
|
115
|
+
*
|
|
116
|
+
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
117
|
+
*/
|
|
118
|
+
function isCommandCodePlanApproveChoice(tail) {
|
|
119
|
+
return (exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW.test(tail) &&
|
|
120
|
+
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER.test(tail));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* How many content rows the plan review footer's LAST row (`Cancel esc`) may
|
|
124
|
+
* have under it and still be the overlay's own footer (Issue #2846): the footer's
|
|
125
|
+
* two rows plus three.
|
|
126
|
+
*
|
|
127
|
+
* Measured over the sixteen plan review captures that carry the footer
|
|
128
|
+
* (`tests/fixtures/command-code-plan-review-2761/`, `-2763/`): fourteen draw ONE
|
|
129
|
+
* row below it, the hint bar (`type + enter to comment · …`); one draws two, an
|
|
130
|
+
* `Editor exited with code 127` row and then the hint bar; and the garbled
|
|
131
|
+
* `editor-killed-staircase.txt` draws three, because the pane wrapped the hint
|
|
132
|
+
* bar. So the plan review footer is NOT the last row the way the picker's is,
|
|
133
|
+
* and a "last two rows" rule misses every one of them.
|
|
134
|
+
*
|
|
135
|
+
* What bounds it from above is the composer. A transcript is always drawn above
|
|
136
|
+
* one, and its shortest measured form is four rows — rule, `❯ Ask your
|
|
137
|
+
* question...`, rule, status row — so a footer QUOTED in a reply has at least
|
|
138
|
+
* four content rows under it and its `Approve` row falls outside this window.
|
|
139
|
+
* The margin between the widest overlay (3) and the narrowest composer (4) is
|
|
140
|
+
* one row; a capture that narrows it is the reason to re-measure, not to widen
|
|
141
|
+
* this.
|
|
142
|
+
*/
|
|
143
|
+
const COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT = 5;
|
|
144
|
+
/**
|
|
145
|
+
* The last `count` rows of `text` that carry content, joined with `\n`.
|
|
146
|
+
*
|
|
147
|
+
* Blank rows are dropped rather than counted: the pane is padded with them, and
|
|
148
|
+
* a real footer is set off from its hint bar by one.
|
|
149
|
+
*/
|
|
150
|
+
function lastContentRows(text, count) {
|
|
151
|
+
return text
|
|
152
|
+
.split('\n')
|
|
153
|
+
.filter((row) => row.trim() !== '')
|
|
154
|
+
.slice(-count)
|
|
155
|
+
.join('\n');
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Whether the LAST content row of this tail is Command Code's picker footer
|
|
159
|
+
* (Issue #2846).
|
|
160
|
+
*
|
|
161
|
+
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER} matches the sentence anywhere, and
|
|
162
|
+
* a reply that quotes the `/model` footer is that sentence in the middle of the
|
|
163
|
+
* transcript. The picker draws the footer as the last row of the pane (all four
|
|
164
|
+
* captures that carry it do, `tests/fixtures/chat-dialog-card-2254/`), and a
|
|
165
|
+
* transcript always has the composer under it — the same reasoning
|
|
166
|
+
* {@link COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER} anchors with `$`.
|
|
167
|
+
*
|
|
168
|
+
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
169
|
+
*/
|
|
170
|
+
function hasCommandCodeSelectionListFooterAtBottom(tail) {
|
|
171
|
+
return exports.COMMAND_CODE_SELECTION_LIST_FOOTER.test(lastContentRows(tail, 1));
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Whether the LAST content row of this tail is the dismiss-only panel's footer
|
|
175
|
+
* (Issue #2846). `Press Esc to close` is the panel's last row
|
|
176
|
+
* ({@link DISMISSABLE_PANEL_FOOTER_PATTERN}); the same row inside a reply has
|
|
177
|
+
* the composer under it.
|
|
178
|
+
*
|
|
179
|
+
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
180
|
+
*/
|
|
181
|
+
function hasCommandCodeDismissablePanelFooterAtBottom(tail) {
|
|
182
|
+
return exports.DISMISSABLE_PANEL_FOOTER_PATTERN.test(lastContentRows(tail, 1));
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Whether the plan review footer ({@link COMMAND_CODE_PLAN_REVIEW_FOOTER}) sits
|
|
186
|
+
* at the bottom of this tail (Issue #2846): both of its rows are within the last
|
|
187
|
+
* {@link COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT} content rows, which is the
|
|
188
|
+
* overlay's own hint bar and nothing as tall as a composer.
|
|
189
|
+
*
|
|
190
|
+
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
191
|
+
*/
|
|
192
|
+
function hasCommandCodePlanReviewFooterAtBottom(tail) {
|
|
193
|
+
return selection_shape_patterns_1.COMMAND_CODE_PLAN_REVIEW_FOOTER.test(lastContentRows(tail, COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* How many rows from the end of the content the dismiss footer is looked for.
|
|
197
|
+
*
|
|
198
|
+
* The same 15-row tail the detection chain hands a tool module as
|
|
199
|
+
* `NormalizedFrame.lastLines` (`STATUS_CHECK_LINE_COUNT`), restated as a number
|
|
200
|
+
* here because this module is a browser-safe leaf and `tools/frame.ts` pulls in
|
|
201
|
+
* `cli-patterns`. `detect.ts` reads `frame.lastLines` and never this constant,
|
|
202
|
+
* so the two cannot disagree about the detector's own window; this one bounds
|
|
203
|
+
* the CLIENT-side reading in {@link hasDismissablePanelFooter}.
|
|
204
|
+
*/
|
|
205
|
+
const DISMISSABLE_PANEL_TAIL_LINE_COUNT = 15;
|
|
206
|
+
/**
|
|
207
|
+
* Whether the tail of this frame is a dismiss-only panel (Issue #2369).
|
|
208
|
+
*
|
|
209
|
+
* The same question `commandCodeStatusDetector.afterPrompt` asks of
|
|
210
|
+
* `frame.lastLines`, asked of a raw capture, so the chat surface can answer for
|
|
211
|
+
* a frame whose server verdict has not reached it. The pattern is shared rather
|
|
212
|
+
* than restated — one expression, two call sites, exactly as
|
|
213
|
+
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER} is shared between the detector and
|
|
214
|
+
* the dialog card.
|
|
215
|
+
*
|
|
216
|
+
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact
|
|
217
|
+
*/
|
|
218
|
+
function hasDismissablePanelFooter(frame) {
|
|
219
|
+
if (!frame)
|
|
220
|
+
return false;
|
|
221
|
+
const lines = (0, ansi_1.stripAnsi)(frame.replace(/\r\n/g, '\n')).split('\n');
|
|
222
|
+
let last = lines.length - 1;
|
|
223
|
+
while (last >= 0 && lines[last].trim() === '')
|
|
224
|
+
last -= 1;
|
|
225
|
+
if (last < 0)
|
|
226
|
+
return false;
|
|
227
|
+
const tail = lines.slice(Math.max(0, last + 1 - DISMISSABLE_PANEL_TAIL_LINE_COUNT), last + 1);
|
|
228
|
+
return tail.some((line) => exports.DISMISSABLE_PANEL_FOOTER_PATTERN.test(line));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* The horizontal rule Command Code draws directly above a full-screen dialog.
|
|
232
|
+
*
|
|
233
|
+
* Command Code is an INLINE tool (`alternate_on=0`): opening `/model` does not
|
|
234
|
+
* clear the pane, it paints the picker under whatever the session has already
|
|
235
|
+
* printed. On the capture taken for Issue #2326 that is 256 rows of banner and
|
|
236
|
+
* transcript followed by a 77-row picker, and this rule row is the seam between
|
|
237
|
+
* them — 200 columns of U+2500 at the production `TUI_PANE_WIDTH`, the only
|
|
238
|
+
* such row anywhere on the frame while the picker is open (the composer's own
|
|
239
|
+
* two rules are not drawn while a dialog has the screen).
|
|
240
|
+
*
|
|
241
|
+
* Matched as "nothing but the rule glyph", not as "contains one", because a box
|
|
242
|
+
* border (`╭──…──╮`, which is how copilot draws ITS pickers) carries corners and
|
|
243
|
+
* must NOT be read as this seam — see
|
|
244
|
+
* {@link extractCommandCodeSelectionListFrame} for why that non-match is the
|
|
245
|
+
* safe answer rather than a missed case.
|
|
246
|
+
*/
|
|
247
|
+
exports.COMMAND_CODE_RULE_ROW_PATTERN = /^\u2500+$/;
|
|
248
|
+
/**
|
|
249
|
+
* How wide a rule row must be before it counts as the dialog seam.
|
|
250
|
+
*
|
|
251
|
+
* The measured row is the full pane width (200 columns), and a pure function
|
|
252
|
+
* cannot know that width, so this is a floor rather than an equality: it only
|
|
253
|
+
* has to reject a short dash run inside a reply. Forty columns is a quarter of
|
|
254
|
+
* the production pane and wider than any decorative rule measured in
|
|
255
|
+
* `tests/fixtures/`.
|
|
256
|
+
*/
|
|
257
|
+
exports.COMMAND_CODE_RULE_MIN_COLUMNS = 40;
|
|
258
|
+
/**
|
|
259
|
+
* The cursor glyph Command Code draws against the highlighted option.
|
|
260
|
+
*
|
|
261
|
+
* U+276F, measured on the capture Issue #2521 was raised from. Only this one,
|
|
262
|
+
* and not codex's `›` or gemini's `●`: {@link readCommandCodeQuestionRegion}
|
|
263
|
+
* counts cursors to decide whether the region holds ONE live dialog, and a
|
|
264
|
+
* wider alphabet would start counting glyphs that are not cursors at all.
|
|
265
|
+
*/
|
|
266
|
+
exports.COMMAND_CODE_CURSOR_GLYPH = '❯';
|
|
267
|
+
/**
|
|
268
|
+
* The markers Command Code paints on a question screen's tab strip.
|
|
269
|
+
*
|
|
270
|
+
* Measured row: `● Dispatch | ◯ Review` — a filled disc on the tab that has the
|
|
271
|
+
* screen and a hollow ring on the one that does not. The names are NOT part of
|
|
272
|
+
* the reading (a different question draws different tabs); what is read is the
|
|
273
|
+
* strip's structure, which is what {@link isCommandCodeQuestionTabRow} states.
|
|
274
|
+
*
|
|
275
|
+
* Two families rather than one alphabet, because "one of these is filled and one
|
|
276
|
+
* of these is not" is the whole signal. A list of bullets (`● item one`) carries
|
|
277
|
+
* the first family and nothing else, and a bullet list is the thing this
|
|
278
|
+
* reading must never mistake for a dialog.
|
|
279
|
+
*/
|
|
280
|
+
const COMMAND_CODE_TAB_SELECTED_MARKERS = '●◉⦿';
|
|
281
|
+
/** The hollow half of {@link COMMAND_CODE_TAB_SELECTED_MARKERS}'s pair. */
|
|
282
|
+
const COMMAND_CODE_TAB_UNSELECTED_MARKERS = '◯○◌⚪';
|
|
283
|
+
/**
|
|
284
|
+
* The ANSWERED half, measured on 1.54.1 (Issue #2753).
|
|
285
|
+
*
|
|
286
|
+
* A multi-question `AskUserQuestion` keeps one tab per question and marks the
|
|
287
|
+
* ones already answered: `✔ Party size | ✔ Rental car | ● Update scope | ◯ Review`.
|
|
288
|
+
* Before this family existed the whole strip failed the cell test, the reader answered
|
|
289
|
+
* `none`, and the generic parser read the checkbox list under it as a single
|
|
290
|
+
* select — see the Issue for the capture.
|
|
291
|
+
*
|
|
292
|
+
* U+2714 and nothing else. `✓` (U+2713) and `☑` (U+2611) are the shapes a check
|
|
293
|
+
* mark could take; neither has been seen on a pane, and this reading is shared
|
|
294
|
+
* with `ChatSurface` and `extractCommandCodeSelectionListFrame`, which run for
|
|
295
|
+
* EVERY tool — so an unmeasured glyph here widens what other tools' frames can
|
|
296
|
+
* be claimed as this screen.
|
|
297
|
+
*/
|
|
298
|
+
const COMMAND_CODE_TAB_ANSWERED_MARKERS = '✔';
|
|
299
|
+
/** One `<marker> <label>` cell of the tab strip. */
|
|
300
|
+
const COMMAND_CODE_TAB_SEGMENT_PATTERN = new RegExp(`^\\s*([${COMMAND_CODE_TAB_SELECTED_MARKERS}${COMMAND_CODE_TAB_UNSELECTED_MARKERS}${COMMAND_CODE_TAB_ANSWERED_MARKERS}])\\s+\\S`);
|
|
301
|
+
/**
|
|
302
|
+
* Is this row Command Code's question-screen tab strip?
|
|
303
|
+
*
|
|
304
|
+
* Three conditions, and each one is a bullet list this predicate has to refuse:
|
|
305
|
+
*
|
|
306
|
+
* - **two or more `|`-separated cells.** `● Dispatch` on its own is a bullet;
|
|
307
|
+
* `● Dispatch | ◯ Review` is a strip. The separator is the cheapest part of
|
|
308
|
+
* the structure and the one prose never has in this position;
|
|
309
|
+
* - **every cell is `<marker> <label>`.** A row that is a strip for its first
|
|
310
|
+
* cell and prose for its second is prose;
|
|
311
|
+
* - **at least one filled marker, and at least one other cell.** A tab strip
|
|
312
|
+
* says which tab has the screen. A row of identical bullets does not, and
|
|
313
|
+
* `● one | ● two` is exactly the list-with-a-pipe this rules out. The other
|
|
314
|
+
* cell may be hollow (not answered yet) or the `✔` of an answered tab
|
|
315
|
+
* (measured on 1.54.1 — Issue #2753); what may not be missing is the filled
|
|
316
|
+
* one, so `✔ one | ✔ two` is still refused.
|
|
317
|
+
*/
|
|
318
|
+
function isCommandCodeQuestionTabRow(line) {
|
|
319
|
+
const segments = line.split('|');
|
|
320
|
+
if (segments.length < 2)
|
|
321
|
+
return false;
|
|
322
|
+
let selected = 0;
|
|
323
|
+
let others = 0;
|
|
324
|
+
for (const segment of segments) {
|
|
325
|
+
const match = COMMAND_CODE_TAB_SEGMENT_PATTERN.exec(segment);
|
|
326
|
+
if (match === null)
|
|
327
|
+
return false;
|
|
328
|
+
if (COMMAND_CODE_TAB_SELECTED_MARKERS.includes(match[1]))
|
|
329
|
+
selected += 1;
|
|
330
|
+
else
|
|
331
|
+
others += 1;
|
|
332
|
+
}
|
|
333
|
+
return selected > 0 && others > 0;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Rows that mean the region spans more than the one dialog on screen now.
|
|
337
|
+
*
|
|
338
|
+
* Issue #2521's condition 4: the tab strip and its options have to be the
|
|
339
|
+
* SAME screen, with no other turn's generating or completion UI between them.
|
|
340
|
+
* Structurally that is mostly settled by taking the LAST rule row as the top
|
|
341
|
+
* edge — a new turn repaints the composer, and the composer's own lower rule
|
|
342
|
+
* then becomes that edge — so this pattern is the belt to that braces, for a
|
|
343
|
+
* frame captured mid-repaint.
|
|
344
|
+
*
|
|
345
|
+
* Two rows, both restated here rather than imported: `cli-patterns` owns
|
|
346
|
+
* Command Code's busy and marker vocabularies and pulls the logger and the tool
|
|
347
|
+
* registry in with them, and this module is the browser-safe leaf the chat
|
|
348
|
+
* surface imports (see the module docblock).
|
|
349
|
+
*
|
|
350
|
+
* - `esc to interrupt`, the tail Command Code appends to every status row
|
|
351
|
+
* (`COMMAND_CODE_INTERRUPT_HINT_PATTERN`). A turn is in flight;
|
|
352
|
+
* - a row that OPENS with U+273B and a word — `✻ Thought for 1 second`,
|
|
353
|
+
* `✻ Worked for 4s`. Matched by shape rather than by the two English verbs,
|
|
354
|
+
* so a reworded or localised marker still ends the region.
|
|
355
|
+
*/
|
|
356
|
+
exports.COMMAND_CODE_QUESTION_REGION_REJECT_PATTERN = /\besc\s+to\s+interrupt\b|^[^\S\n]*✻[^\S\n]+\S/im;
|
|
357
|
+
/**
|
|
358
|
+
* The Review page's own three rows, measured on 1.54.1 (Issue #2755 §7).
|
|
359
|
+
*
|
|
360
|
+
* `Enter` on the `Submit` row does not send the answers — it opens a SECOND
|
|
361
|
+
* screen:
|
|
362
|
+
*
|
|
363
|
+
* ✔ Update scope | ● Review
|
|
364
|
+
*
|
|
365
|
+
* 1. Which files should I update?
|
|
366
|
+
* calc.js
|
|
367
|
+
*
|
|
368
|
+
* ❯ 1. Submit
|
|
369
|
+
* 2. Cancel
|
|
370
|
+
*
|
|
371
|
+
* ← to go back and edit
|
|
372
|
+
*
|
|
373
|
+
* ## Why this needs a reading of its own
|
|
374
|
+
*
|
|
375
|
+
* Because it is a real numbered list under a real tab strip, and the GENERIC
|
|
376
|
+
* parser answers it: a two-option `multiple_choice` whose default is `Submit`.
|
|
377
|
+
* The default answer on that payload does not pick anything — it COMMITS
|
|
378
|
+
* whatever the human has ticked so far, from a payload nobody meant to expose,
|
|
379
|
+
* which is #1928's shape one screen later. Auto-Yes fires on defaults.
|
|
380
|
+
*
|
|
381
|
+
* Words rather than structure, and deliberately: the two numbered rows are
|
|
382
|
+
* `Submit` and `Cancel`, which is the same shape as any other two-option
|
|
383
|
+
* question. What separates this page from a question is only what it SAYS, so
|
|
384
|
+
* all three rows are required together — the confirm pair AND the back hint —
|
|
385
|
+
* and the whole thing is anchored inside a recognised question region. A screen
|
|
386
|
+
* that carries two of the three keeps every verdict it had.
|
|
387
|
+
*
|
|
388
|
+
* The cursor glyph is optional on both numbered rows: it rests on `1. Submit`
|
|
389
|
+
* when the page is reached by `Enter`, and the Issue is explicit that a pattern
|
|
390
|
+
* decided on the bare word would miss it.
|
|
391
|
+
*/
|
|
392
|
+
const COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN = /^[^\S\n]*(?:\u276F[^\S\n]*)?1[.)][^\S\n]+Submit[^\S\n]*$/im;
|
|
393
|
+
/** The `Cancel` half of {@link COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN}'s pair. */
|
|
394
|
+
const COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN = /^[^\S\n]*(?:\u276F[^\S\n]*)?2[.)][^\S\n]+Cancel[^\S\n]*$/im;
|
|
395
|
+
/** The footer only the Review page draws. */
|
|
396
|
+
const COMMAND_CODE_REVIEW_BACK_HINT_PATTERN = /^[^\S\n]*\u2190[^\S\n]+to[^\S\n]+go[^\S\n]+back[^\S\n]+and[^\S\n]+edit[^\S\n]*$/im;
|
|
397
|
+
/**
|
|
398
|
+
* The warning the Review page carries when it was reached with answers missing.
|
|
399
|
+
*
|
|
400
|
+
* Measured from the undocumented `d`, which ends a multi-select from any row:
|
|
401
|
+
* `⚠ You have not answered all questions` over a `No answer`. Issue #2755 §7
|
|
402
|
+
* requires that such a page is never read as "answered", which is why the
|
|
403
|
+
* predicate below reports it rather than hiding it.
|
|
404
|
+
*/
|
|
405
|
+
const COMMAND_CODE_REVIEW_UNANSWERED_PATTERN = /have\s+not\s+answered\s+all\s+questions/i;
|
|
406
|
+
/**
|
|
407
|
+
* Read Command Code's `AskUserQuestion` Review page, if this frame is one
|
|
408
|
+
* (Issue #2755 §7).
|
|
409
|
+
*
|
|
410
|
+
* The same region {@link readCommandCodeQuestionRegion} works on — last rule
|
|
411
|
+
* row, tab strip as the first row under it — plus the three rows above. The
|
|
412
|
+
* question-shaped conditions are deliberately NOT applied: this page has no
|
|
413
|
+
* question body of its own on the `Submit`/`Cancel` spelling (the answers sit
|
|
414
|
+
* where the question would), and it draws `1.` twice, so the strict reading
|
|
415
|
+
* declines it for a numbering reason that says nothing about what it is.
|
|
416
|
+
*
|
|
417
|
+
* `null` for everything else, so no existing verdict moves except the two
|
|
418
|
+
* captures this is about.
|
|
419
|
+
*
|
|
420
|
+
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
|
|
421
|
+
*/
|
|
422
|
+
function readCommandCodeReviewPage(frame) {
|
|
423
|
+
if (!frame)
|
|
424
|
+
return null;
|
|
425
|
+
const lines = frame.replace(/\r\n/g, '\n').split('\n').map(ansi_1.stripAnsi);
|
|
426
|
+
let last = lines.length - 1;
|
|
427
|
+
while (last >= 0 && lines[last].trim() === '')
|
|
428
|
+
last -= 1;
|
|
429
|
+
if (last < 1)
|
|
430
|
+
return null;
|
|
431
|
+
let ruleLineIndex = -1;
|
|
432
|
+
for (let i = last - 1; i >= 0; i -= 1) {
|
|
433
|
+
const row = lines[i].trim();
|
|
434
|
+
if (row.length < exports.COMMAND_CODE_RULE_MIN_COLUMNS)
|
|
435
|
+
continue;
|
|
436
|
+
if (!exports.COMMAND_CODE_RULE_ROW_PATTERN.test(row))
|
|
437
|
+
continue;
|
|
438
|
+
ruleLineIndex = i;
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
if (ruleLineIndex < 0)
|
|
442
|
+
return null;
|
|
443
|
+
const region = lines.slice(ruleLineIndex + 1, last + 1);
|
|
444
|
+
const tabOffset = region.findIndex((line) => line.trim() !== '');
|
|
445
|
+
if (tabOffset < 0)
|
|
446
|
+
return null;
|
|
447
|
+
if (!isCommandCodeQuestionTabRow(region[tabOffset]))
|
|
448
|
+
return null;
|
|
449
|
+
const body = region.join('\n');
|
|
450
|
+
if (!COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body))
|
|
451
|
+
return null;
|
|
452
|
+
if (!COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN.test(body))
|
|
453
|
+
return null;
|
|
454
|
+
if (!COMMAND_CODE_REVIEW_BACK_HINT_PATTERN.test(body))
|
|
455
|
+
return null;
|
|
456
|
+
const submitRow = region.find((row) => COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(row));
|
|
457
|
+
return {
|
|
458
|
+
hasUnansweredWarning: COMMAND_CODE_REVIEW_UNANSWERED_PATTERN.test(body),
|
|
459
|
+
cursorOnSubmit: submitRow !== undefined && submitRow.includes(exports.COMMAND_CODE_CURSOR_GLYPH),
|
|
460
|
+
};
|
|
461
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readContextAbove = readContextAbove;
|
|
4
|
+
/** How many non-blank rows above the options may hold the question. */
|
|
5
|
+
const QUESTION_SCAN_ROWS = 4;
|
|
6
|
+
/**
|
|
7
|
+
* The non-blank rows above `firstRow`, nearest first, joined by newlines.
|
|
8
|
+
* Rows at or above `floorRow` are not read: pass -1 to read to the top of the
|
|
9
|
+
* frame.
|
|
10
|
+
*/
|
|
11
|
+
function readContextAbove(lines, firstRow, floorRow) {
|
|
12
|
+
const rows = [];
|
|
13
|
+
for (let i = firstRow - 1; i > floorRow && rows.length < QUESTION_SCAN_ROWS; i--) {
|
|
14
|
+
const row = lines[i].trim();
|
|
15
|
+
if (row === '')
|
|
16
|
+
continue;
|
|
17
|
+
rows.push(row);
|
|
18
|
+
}
|
|
19
|
+
return rows.join('\n');
|
|
20
|
+
}
|
|
@@ -13,11 +13,15 @@ exports.copilotStatusDetector = exports.VERIFIED_AGAINST = void 0;
|
|
|
13
13
|
exports.readIdleEvidence = readIdleEvidence;
|
|
14
14
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
15
15
|
const prompt_detector_1 = require("../../prompt-detector");
|
|
16
|
+
const verdicts_1 = require("../verdicts");
|
|
16
17
|
const status_reason_1 = require("../../status-reason");
|
|
17
18
|
const prompt_1 = require("./prompt");
|
|
18
19
|
const live_region_1 = require("./live-region");
|
|
19
20
|
const run_detection_1 = require("../run-detection");
|
|
20
21
|
const verified_against_1 = require("../verified-against");
|
|
22
|
+
function detectCopilotPrompt(clean) {
|
|
23
|
+
return (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(clean), (0, cli_patterns_1.buildDetectPromptOptions)('copilot'));
|
|
24
|
+
}
|
|
21
25
|
/** copilot-cli build these rules were read off (#1885 / #1895; value in ../verified-against, #1929). */
|
|
22
26
|
exports.VERIFIED_AGAINST = verified_against_1.COPILOT_VERIFIED_AGAINST;
|
|
23
27
|
/**
|
|
@@ -66,33 +70,18 @@ exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
66
70
|
// never the transcript. Ordering against them is therefore settled inside the
|
|
67
71
|
// helper: it declines any frame that still has a status bar.
|
|
68
72
|
if ((0, cli_patterns_1.isCopilotSelectionFrame)(frame.contentLines)) {
|
|
69
|
-
const
|
|
70
|
-
const promptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(frame.clean), promptOptions);
|
|
73
|
+
const promptDetection = detectCopilotPrompt(frame.clean);
|
|
71
74
|
if (promptDetection.isPrompt) {
|
|
72
75
|
// Distinguish yes/no prompts (2-3 options, e.g., "Do you want to run this command?")
|
|
73
76
|
// from ask_user multi-select prompts (4+ options). Yes/no prompts should show
|
|
74
77
|
// PromptPanel with buttons; ask_user prompts need NavigationButtons for ↑↓ selection.
|
|
75
78
|
const optionsCount = promptDetection.promptData?.options?.length ?? 0;
|
|
76
79
|
if (optionsCount <= 3) {
|
|
77
|
-
return
|
|
78
|
-
status: 'waiting',
|
|
79
|
-
confidence: 'high',
|
|
80
|
-
reason: status_reason_1.STATUS_REASON.PROMPT_DETECTED,
|
|
81
|
-
hasActivePrompt: true,
|
|
82
|
-
evidence: 'positive',
|
|
83
|
-
promptDetection,
|
|
84
|
-
};
|
|
80
|
+
return (0, verdicts_1.activePromptVerdict)(status_reason_1.STATUS_REASON.PROMPT_DETECTED, promptDetection);
|
|
85
81
|
}
|
|
86
82
|
// 4+ options: treat as selection list (NavigationButtons)
|
|
87
83
|
}
|
|
88
|
-
return
|
|
89
|
-
status: 'waiting',
|
|
90
|
-
confidence: 'high',
|
|
91
|
-
reason: status_reason_1.STATUS_REASON.COPILOT_SELECTION_LIST,
|
|
92
|
-
hasActivePrompt: false,
|
|
93
|
-
evidence: 'positive',
|
|
94
|
-
promptDetection,
|
|
95
|
-
};
|
|
84
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('waiting', status_reason_1.STATUS_REASON.COPILOT_SELECTION_LIST, promptDetection);
|
|
96
85
|
}
|
|
97
86
|
// 0.5. Copilot: the bottom status bar carries the running half of the turn
|
|
98
87
|
// (Issue #547 put a thinking check here; Issue #1885 replaced what it reads).
|
|
@@ -116,16 +105,8 @@ exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
116
105
|
// window form would also have matched copilot's own response text -- see
|
|
117
106
|
// `status-vocabulary-in-response.txt`.
|
|
118
107
|
if ((0, cli_patterns_1.readCopilotStatusBar)(frame.contentLines) === 'working') {
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
return {
|
|
122
|
-
status: 'running',
|
|
123
|
-
confidence: 'high',
|
|
124
|
-
reason: status_reason_1.STATUS_REASON.THINKING_INDICATOR,
|
|
125
|
-
hasActivePrompt: false,
|
|
126
|
-
evidence: 'positive',
|
|
127
|
-
promptDetection,
|
|
128
|
-
};
|
|
108
|
+
const promptDetection = detectCopilotPrompt(frame.clean);
|
|
109
|
+
return (0, verdicts_1.positiveVerdictWithPrompt)('running', status_reason_1.STATUS_REASON.THINKING_INDICATOR, promptDetection);
|
|
129
110
|
}
|
|
130
111
|
return null;
|
|
131
112
|
},
|
|
@@ -150,13 +131,7 @@ exports.copilotStatusDetector = (0, run_detection_1.createToolStatusDetector)({
|
|
|
150
131
|
// verdict claude's `❯` row and codex's `›` row publish, so nothing downstream
|
|
151
132
|
// has to learn a new reason code.
|
|
152
133
|
if ((0, cli_patterns_1.readCopilotStatusBar)(frame.contentLines) === 'idle') {
|
|
153
|
-
return
|
|
154
|
-
status: 'ready',
|
|
155
|
-
confidence: 'high',
|
|
156
|
-
reason: status_reason_1.STATUS_REASON.INPUT_PROMPT,
|
|
157
|
-
hasActivePrompt: false,
|
|
158
|
-
evidence: 'positive',
|
|
159
|
-
};
|
|
134
|
+
return (0, verdicts_1.positiveVerdict)('ready', status_reason_1.STATUS_REASON.INPUT_PROMPT);
|
|
160
135
|
}
|
|
161
136
|
return null;
|
|
162
137
|
},
|