commandmate 0.39.1 → 0.40.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +249 -242
- package/.next/app-path-routes-manifest.json +25 -24
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_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.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 +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.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.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_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_client-reference-manifest.js +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
- 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 -0
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -0
- 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_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_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_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_client-reference-manifest.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_client-reference-manifest.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_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_client-reference-manifest.js +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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_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 +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_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_client-reference-manifest.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_client-reference-manifest.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_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.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 +10 -10
- 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 +25 -24
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/252.js +1 -0
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3323.js +1 -1
- package/.next/server/chunks/4443.js +1 -1
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/650.js +1 -1
- package/.next/server/chunks/6661.js +1 -1
- package/.next/server/chunks/6793.js +1 -1
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +29 -29
- package/.next/server/chunks/8673.js +14 -0
- package/.next/server/chunks/8728.js +4 -3
- package/.next/server/chunks/8800.js +1 -1
- package/.next/server/chunks/9080.js +1 -1
- package/.next/server/chunks/9731.js +2 -2
- package/.next/server/chunks/9882.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-9ac8b6188ddbb119.js → 2407-d750620d0511e94f.js} +1 -1
- package/.next/static/chunks/4768-979c8a03bed218e7.js +1 -0
- package/.next/static/chunks/7705-25076b57224da370.js +1 -0
- package/.next/static/chunks/8606-9a381b996f9b6834.js +1 -0
- package/.next/static/chunks/9619-22adf5367c4b7080.js +1 -0
- package/.next/static/chunks/app/api/agents/update/{route-70779af8b4c8259a.js → route-0468c3c4baa46028.js} +1 -1
- package/.next/static/chunks/app/api/agents/versions/{route-70779af8b4c8259a.js → route-0468c3c4baa46028.js} +1 -1
- package/.next/static/chunks/app/api/app/release-notes/{route-70779af8b4c8259a.js → route-0468c3c4baa46028.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/{route-70779af8b4c8259a.js → route-0468c3c4baa46028.js} +1 -1
- package/.next/static/chunks/app/api/auth/login/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/relays/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/skills/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/templates/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/layout-3d3fcc8aac7b3bb5.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/review/page-30616daa1dc595c2.js +1 -0
- package/.next/static/chunks/app/sessions/page-1a8ba152bbcb9efb.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-0468c3c4baa46028.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-a91e812ad9d94697.js +1 -0
- package/.next/static/css/974314e796232f53.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/worktrees/[id]/direct-input/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +9 -0
- package/dist/cli/commands/peers.d.ts.map +1 -1
- package/dist/cli/commands/peers.js +4 -0
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +20 -6
- package/dist/cli/config/model-validation.d.ts +22 -0
- package/dist/cli/config/model-validation.d.ts.map +1 -1
- package/dist/cli/config/model-validation.js +35 -1
- package/dist/cli/types/api-responses.d.ts +11 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.d.ts +13 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.js +13 -0
- package/dist/lib/detection/tools/verified-against.d.ts +74 -5
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +74 -5
- package/dist/server/locales/en/worktree.json +58 -0
- package/dist/server/locales/ja/worktree.json +58 -0
- package/dist/server/src/config/claude-constants.js +27 -0
- package/dist/server/src/lib/cli-tools/base.js +2 -1
- package/dist/server/src/lib/cli-tools/claude.js +5 -1
- package/dist/server/src/lib/cli-tools/command-code.js +5 -1
- package/dist/server/src/lib/cli-tools/direct-input.js +22 -0
- package/dist/server/src/lib/cmate-cli-tool-parser.js +31 -0
- package/dist/server/src/lib/detection/cli-patterns.js +44 -5
- package/dist/server/src/lib/detection/model-info-extractor.js +49 -10
- package/dist/server/src/lib/detection/selection-shape.js +274 -19
- package/dist/server/src/lib/detection/status-detector.js +2 -0
- package/dist/server/src/lib/detection/status-reason.js +13 -0
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +67 -27
- package/dist/server/src/lib/detection/tools/codex/detect.js +18 -3
- package/dist/server/src/lib/detection/tools/command-code/detect.js +46 -0
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +116 -25
- package/dist/server/src/lib/detection/tools/verified-against.js +74 -5
- package/dist/server/src/lib/detection/tui-detection-frame.js +18 -3
- package/dist/server/src/lib/polling/auto-yes-resolver.js +8 -0
- package/dist/server/src/lib/prompt-answer-sender.js +255 -1
- package/dist/server/src/lib/realtime-snippet.js +53 -0
- package/dist/server/src/lib/session/agent-event-state.js +8 -1
- package/dist/server/src/lib/session/claude-session.js +19 -2
- package/dist/server/src/lib/session/current-output-builder.js +4 -1
- package/dist/server/src/lib/session/status-mapping.js +58 -8
- package/dist/server/src/lib/tmux/key-sequence.js +27 -1
- package/dist/server/src/lib/tmux/tmux-control-client.js +26 -3
- package/dist/server/src/lib/tmux/tmux.js +64 -3
- package/dist/server/src/types/direct-input.js +113 -0
- package/dist/server/src/types/sidebar.js +67 -7
- package/dist/server/src/types/terminal-keys.js +33 -1
- package/dist/types/terminal-keys.d.ts +28 -1
- package/dist/types/terminal-keys.d.ts.map +1 -1
- package/dist/types/terminal-keys.js +33 -1
- package/package.json +1 -1
- package/release-notes/0.40.0.json +69 -0
- package/release-notes/0.40.1.json +20 -0
- package/.next/server/chunks/6092.js +0 -14
- package/.next/static/chunks/4768-0ad5eb716bed5de9.js +0 -1
- package/.next/static/chunks/8606-e893c1dab6fb81bc.js +0 -1
- package/.next/static/chunks/9619-7bc0e9524f0773b5.js +0 -1
- package/.next/static/chunks/982-edf98d9d54c5ce9b.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/relays/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/skills/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/templates/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/layout-542d075e9d7cc541.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/review/page-8ed49e2edcc7667b.js +0 -1
- package/.next/static/chunks/app/sessions/page-56f6a2466dd0479d.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-70779af8b4c8259a.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-760408096ad697b4.js +0 -1
- package/.next/static/css/b4aaf81d10efdd00.css +0 -1
- /package/.next/static/{7Ge9-hsqlip_Z6bhEnVkd → JfzIPPhL-ikSVcJYOKgfD}/_buildManifest.js +0 -0
- /package/.next/static/{7Ge9-hsqlip_Z6bhEnVkd → JfzIPPhL-ikSVcJYOKgfD}/_ssgManifest.js +0 -0
|
@@ -23,12 +23,14 @@ exports.tokenizeCliToolColumn = tokenizeCliToolColumn;
|
|
|
23
23
|
exports.parseCliToolColumn = parseCliToolColumn;
|
|
24
24
|
exports.validateCopilotModelName = validateCopilotModelName;
|
|
25
25
|
exports.validateAntigravityModelName = validateAntigravityModelName;
|
|
26
|
+
exports.validateClaudeModelName = validateClaudeModelName;
|
|
26
27
|
exports.validateOpencodeRunName = validateOpencodeRunName;
|
|
27
28
|
exports.validateOpencodeTitle = validateOpencodeTitle;
|
|
28
29
|
exports.parseAndValidateCliToolColumn = parseAndValidateCliToolColumn;
|
|
29
30
|
exports.resolveScheduleCommandOptions = resolveScheduleCommandOptions;
|
|
30
31
|
const copilot_constants_1 = require("../config/copilot-constants");
|
|
31
32
|
const antigravity_constants_1 = require("../config/antigravity-constants");
|
|
33
|
+
const claude_constants_1 = require("../config/claude-constants");
|
|
32
34
|
const opencode_constants_1 = require("../config/opencode-constants");
|
|
33
35
|
// =============================================================================
|
|
34
36
|
// Constants
|
|
@@ -342,6 +344,35 @@ function validateAntigravityModelName(modelName) {
|
|
|
342
344
|
}
|
|
343
345
|
return { valid: true };
|
|
344
346
|
}
|
|
347
|
+
/**
|
|
348
|
+
* Validate a Claude model name using the reject approach (no sanitization).
|
|
349
|
+
* Issue #2771: `claude --model` takes an alias (`sonnet`, `opus`, `opus[1m]`) or
|
|
350
|
+
* a full id (`claude-sonnet-5`, `claude-opus-5[1m]`, a Bedrock / Vertex id). The
|
|
351
|
+
* brackets are why Copilot's pattern cannot be reused, and the display names
|
|
352
|
+
* Antigravity accepts ("Gemini 3.1 Pro (High)") are not something Claude takes.
|
|
353
|
+
*
|
|
354
|
+
* @param modelName - Model name to validate
|
|
355
|
+
* @returns Validation result with optional reason for rejection
|
|
356
|
+
*/
|
|
357
|
+
function validateClaudeModelName(modelName) {
|
|
358
|
+
// Control character rejection
|
|
359
|
+
if (/[\x00-\x1f\x7f]/.test(modelName)) {
|
|
360
|
+
return { valid: false, reason: 'Model name contains control characters' };
|
|
361
|
+
}
|
|
362
|
+
// Empty / whitespace-only rejection
|
|
363
|
+
if (modelName.trim() === '') {
|
|
364
|
+
return { valid: false, reason: 'Model name must not be empty' };
|
|
365
|
+
}
|
|
366
|
+
// Pattern validation (leading alphanumeric required, DR4-001)
|
|
367
|
+
if (!claude_constants_1.CLAUDE_MODEL_NAME_PATTERN.test(modelName)) {
|
|
368
|
+
return { valid: false, reason: 'Model name contains invalid characters' };
|
|
369
|
+
}
|
|
370
|
+
// Length validation
|
|
371
|
+
if (modelName.length > claude_constants_1.MAX_CLAUDE_MODEL_NAME_LENGTH) {
|
|
372
|
+
return { valid: false, reason: `Model name exceeds ${claude_constants_1.MAX_CLAUDE_MODEL_NAME_LENGTH} characters` };
|
|
373
|
+
}
|
|
374
|
+
return { valid: true };
|
|
375
|
+
}
|
|
345
376
|
/**
|
|
346
377
|
* Validate an opencode `--agent` / `--variant` value (Issue #2044).
|
|
347
378
|
*
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Shared between response-poller.ts and API routes
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
8
|
-
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = void 0;
|
|
7
|
+
exports.COPILOT_USER_ECHO_PATTERN = exports.COPILOT_REASONING_HEADER_PATTERN = exports.COPILOT_BOX_ROW_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_IDLE_STATUS_PATTERN = exports.COPILOT_WORKING_STATUS_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_FOOTER_STATUS_PATTERN = exports.OPENCODE_USER_ECHO_PATTERN = exports.OPENCODE_GUTTER_ROW_PATTERN = exports.OPENCODE_COMPOSER_BOTTOM_BORDER = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_PERMISSION_PATTERN = exports.OPENCODE_TURN_COMPLETE_PATTERN = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_IDLE_COMPOSER_PATTERN = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_USER_ECHO_PATTERN = exports.CODEX_TRAILED_STATUS_BAR_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_FORM_SUBMIT_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_HOOKS_REVIEW_ANCHORS = exports.CODEX_DIALOG_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
|
|
8
|
+
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.COMMAND_CODE_SKIP_PATTERNS = exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = exports.COMMAND_CODE_BANNER_PATTERNS = exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = exports.COMMAND_CODE_COMPLETION_PATTERN = exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = exports.COMMAND_CODE_THINKING_PATTERN = exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = exports.COMMAND_CODE_SEPARATOR_PATTERN = exports.COMMAND_CODE_PROMPT_PATTERN = exports.COMMAND_CODE_SPINNER_CHARS = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SURVEY_PATTERN = exports.ANTIGRAVITY_DIALOG_MAX_ROWS = exports.ANTIGRAVITY_DIALOG_BOUNDARY_PATTERN = exports.ANTIGRAVITY_SWITCH_MODEL_HEADER_PATTERN = exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NAVIGATE_FOOTER_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_PATTERN = exports.ANTIGRAVITY_COMPOSER_MODE_BANNER_SOURCE = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = exports.COPILOT_FOLDER_TRUST_ANCHORS = exports.COPILOT_SELECTION_FOOTER_PATTERN = exports.COPILOT_BOOT_BANNER_ANCHORS = exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = void 0;
|
|
9
9
|
exports.isCodexTurnActive = isCodexTurnActive;
|
|
10
10
|
exports.findClaudeChromeStart = findClaudeChromeStart;
|
|
11
11
|
exports.isCodexPromptReady = isCodexPromptReady;
|
|
@@ -629,6 +629,43 @@ exports.CODEX_PAGER_FOOTER_PATTERN = /(?:↑\/↓|pgup\/pgdn|home\/end)\s+to\s+(
|
|
|
629
629
|
* line. No nested quantifiers (ReDoS-safe; adjacent greedy quantifiers only).
|
|
630
630
|
*/
|
|
631
631
|
exports.CODEX_STATUS_BAR_PATTERN = /^\s*\S.*·\s*~?\/\S*\s*$/;
|
|
632
|
+
/**
|
|
633
|
+
* Codex status bar with something drawn AFTER the path (Issue #2818) — the
|
|
634
|
+
* second shape `findCodexFooterBoundary` in `tools/codex/detect.ts` accepts.
|
|
635
|
+
*
|
|
636
|
+
* From codex 0.154.0 on, the bar stops ending in the path once the first turn
|
|
637
|
+
* has named the thread, and Plan mode adds a right-aligned badge:
|
|
638
|
+
*
|
|
639
|
+
* ```text
|
|
640
|
+
* gpt-5.6-terra low · /private/var/…/repo · Run touch probe.txt
|
|
641
|
+
* gpt-6-astra medium · ~/uat3-…/sandbox-repo Plan mode (shift+tab to cycle)
|
|
642
|
+
* ```
|
|
643
|
+
*
|
|
644
|
+
* {@link CODEX_STATUS_BAR_PATTERN} wants the path last, so every such frame had
|
|
645
|
+
* no boundary and fell to the detector's bar-independent branch D (#1150's
|
|
646
|
+
* safety net). That branch reads the 15-row tail, and on an idle frame the tail
|
|
647
|
+
* still holds the finished turn's `• Ran …` record — which is how an idle
|
|
648
|
+
* session read `running` (#2808's `idle-after-declined-approval.txt`; #2818
|
|
649
|
+
* reproduced it on a turn that simply ran one command and answered).
|
|
650
|
+
*
|
|
651
|
+
* Kept a SEPARATE pattern rather than a widened {@link CODEX_STATUS_BAR_PATTERN}
|
|
652
|
+
* so the change stays on the one reader it was measured for: that pattern is
|
|
653
|
+
* also the stripped-capture landmark of {@link findCodexChromeStart} and the
|
|
654
|
+
* value reader's first test in `model-info-extractor.ts`, neither of which
|
|
655
|
+
* this Issue measured.
|
|
656
|
+
*
|
|
657
|
+
* The shape is the one `CODEX_STATUS_BAR_WITH_TRAILER_PATTERN`
|
|
658
|
+
* (`model-info-extractor.ts`, #2592) reads values off, written out here rather
|
|
659
|
+
* than imported: that module's rule is that it must never be the reason this
|
|
660
|
+
* boundary moves. Head segment, `·`, a path, then EITHER a further `·`
|
|
661
|
+
* segment OR a column gap (two spaces) before right-aligned text. `[^·]*` puts
|
|
662
|
+
* the path right after the FIRST `·`, so codex's in-flight row (`• Working (…)
|
|
663
|
+
* · 1 background terminal running · /ps to view`) is not a bar — its first `·`
|
|
664
|
+
* is followed by a count, not a path.
|
|
665
|
+
*
|
|
666
|
+
* Single-line, no /g, no nested quantifiers (ReDoS-safe), as above.
|
|
667
|
+
*/
|
|
668
|
+
exports.CODEX_TRAILED_STATUS_BAR_PATTERN = /^\s*\S[^·]*·\s*~?\/\S*(?:\s*·[^\n]*|[^\S\n]{2,}\S[^\n]*)$/;
|
|
632
669
|
/**
|
|
633
670
|
* How far above the last non-blank row {@link findCodexChromeStart} looks for the
|
|
634
671
|
* composer.
|
|
@@ -702,9 +739,11 @@ const CODEX_CHROME_GLYPH_ROW_PATTERN = /^›(\s|$)/;
|
|
|
702
739
|
* the list silently stopped matching the thing it was written for. Issue #2310
|
|
703
740
|
* measured what actually separates codex's three uses of `›` (U+203A), and it is
|
|
704
741
|
* the SGR attributes, not the text: the composer glyph is bold (`ESC[1m›`), a
|
|
705
|
-
* transcript echo is dim (`ESC[1;2m›`), a dialog option carries a
|
|
706
|
-
*
|
|
707
|
-
*
|
|
742
|
+
* transcript echo is dim (`ESC[1;2m›`), a dialog option carries a bold label or
|
|
743
|
+
* a label drawn in the glyph's own colour (one span — since #2798 a coloured
|
|
744
|
+
* glyph alone is not enough, because 0.155.1 colours the composer's glyph too).
|
|
745
|
+
* {@link readCodexGlyphRowKind} is that measurement, and this reader is one of
|
|
746
|
+
* its callers.
|
|
708
747
|
*
|
|
709
748
|
* `-1` is returned for a frame whose bottom-most `›` is an option row: codex
|
|
710
749
|
* replaces the composer with the dialog, so there is no chrome to trim and the
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
* @see Issue #1784, Phase 2 of the model/effort visibility series
|
|
63
63
|
*/
|
|
64
64
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
-
exports.ANTIGRAVITY_MODEL_ID_EFFORT_PATTERN = exports.COMMAND_CODE_BANNER_MODELS_PATTERN = exports.OPENCODE_STEP_MODEL_PATTERN = exports.COPILOT_MODEL_CHANGE_PATTERN = exports.ANTIGRAVITY_BANNER_MODEL_PATTERN = exports.ANTIGRAVITY_STATUS_BAR_HINT_PATTERN = exports.CLAUDE_MODEL_SWITCH_PATTERN = exports.CLAUDE_STARTUP_BANNER_PATTERN = exports.CODEX_STATUS_BAR_WITH_TRAILER_PATTERN = exports.CODEX_FOOTER_MODEL_PATTERN = exports.REASONING_EFFORT_LEVELS = void 0;
|
|
65
|
+
exports.ANTIGRAVITY_MODEL_ID_EFFORT_PATTERN = exports.COMMAND_CODE_BANNER_MODELS_PATTERN = exports.OPENCODE_STEP_MODEL_PATTERN = exports.COPILOT_MODEL_CHANGE_PATTERN = exports.ANTIGRAVITY_BANNER_MODEL_PATTERN = exports.ANTIGRAVITY_STATUS_BAR_HINT_PATTERN = exports.CLAUDE_MODEL_SWITCH_PATTERN = exports.CLAUDE_STARTUP_BANNER_PATTERN = exports.CODEX_STATUS_BAR_WITH_TRAILER_PATTERN = exports.CODEX_FOOTER_EFFORT_SLOT_PATTERN = exports.CODEX_FOOTER_MODEL_PATTERN = exports.REASONING_EFFORT_LEVELS = void 0;
|
|
66
66
|
exports.resolveEffortToken = resolveEffortToken;
|
|
67
67
|
exports.extractModelInfo = extractModelInfo;
|
|
68
68
|
exports.deriveEffortFromModelId = deriveEffortFromModelId;
|
|
@@ -72,11 +72,27 @@ const cli_patterns_1 = require("./cli-patterns");
|
|
|
72
72
|
/**
|
|
73
73
|
* The reasoning-effort vocabulary these tools actually print.
|
|
74
74
|
*
|
|
75
|
-
* `minimal` and `xhigh` are the ends Codex
|
|
75
|
+
* `minimal` and `xhigh` are the ends Codex exposed until 0.155; Claude prints
|
|
76
|
+
* `xhigh` too. Issue #2835 adds the three levels above `xhigh` that codex 0.155.1
|
|
77
|
+
* defines (`ReasoningEffort` in `codex-rs/protocol/src/openai_models.rs`, tag
|
|
78
|
+
* `rust-v0.155.1`: `max` / `ultra` / `persistent`, drawn in the status bar
|
|
79
|
+
* verbatim by `status_line_reasoning_effort_label`). Its `None` is drawn as
|
|
80
|
+
* `default` and is deliberately NOT a level — it names no effort. Command Code's
|
|
81
|
+
* `with max effort` banner resolves through the same list.
|
|
82
|
+
*
|
|
76
83
|
* Anything outside this list is treated as "not an effort token", which is what
|
|
77
84
|
* keeps a stray word at the end of a status bar from being published as one.
|
|
78
85
|
*/
|
|
79
|
-
exports.REASONING_EFFORT_LEVELS = [
|
|
86
|
+
exports.REASONING_EFFORT_LEVELS = [
|
|
87
|
+
'minimal',
|
|
88
|
+
'low',
|
|
89
|
+
'medium',
|
|
90
|
+
'high',
|
|
91
|
+
'xhigh',
|
|
92
|
+
'max',
|
|
93
|
+
'ultra',
|
|
94
|
+
'persistent',
|
|
95
|
+
];
|
|
80
96
|
/**
|
|
81
97
|
* Longest string accepted as a model name.
|
|
82
98
|
*
|
|
@@ -156,7 +172,23 @@ function resolveEffortToken(token, options = {}) {
|
|
|
156
172
|
* optional `\s+<keyword>` are adjacent, never nested (ReDoS-safe, same rule
|
|
157
173
|
* `cli-patterns.ts` documents).
|
|
158
174
|
*/
|
|
159
|
-
exports.CODEX_FOOTER_MODEL_PATTERN = /^\s*([^\s·]+)(?:\s+(minimal|low|medium|high|xhigh)\b)?/i;
|
|
175
|
+
exports.CODEX_FOOTER_MODEL_PATTERN = /^\s*([^\s·]+)(?:\s+(minimal|low|medium|high|xhigh|max|ultra|persistent)\b)?/i;
|
|
176
|
+
/**
|
|
177
|
+
* The head of a Codex status bar that has a word where the effort goes
|
|
178
|
+
* (Issue #2835).
|
|
179
|
+
*
|
|
180
|
+
* codex draws `<model> <effort>` and, for an effort it has no name for, still
|
|
181
|
+
* draws a word there: `default` for `None` (`status_line_reasoning_effort_label`,
|
|
182
|
+
* codex 0.155.1; live in `tests/fixtures/agent-mode-2592/codex-default.txt`), or
|
|
183
|
+
* a model-defined value verbatim. A head whose second token is a word is
|
|
184
|
+
* therefore a bar that SHOWS an effort, even when {@link CODEX_FOOTER_MODEL_PATTERN}
|
|
185
|
+
* cannot name it. The legacy o4-mini head (`o4-mini 50% left`) has no
|
|
186
|
+
* such slot — its second token starts with a digit — and neither does a status
|
|
187
|
+
* line configured to show the model alone.
|
|
188
|
+
*
|
|
189
|
+
* No /g. No nested quantifiers: two adjacent runs and a lookahead.
|
|
190
|
+
*/
|
|
191
|
+
exports.CODEX_FOOTER_EFFORT_SLOT_PATTERN = /^\s*[^\s·]+\s+[A-Za-z][A-Za-z_-]*(?=\s|$)/;
|
|
160
192
|
/**
|
|
161
193
|
* A codex status bar with something AFTER the path (Issue #2592).
|
|
162
194
|
*
|
|
@@ -202,7 +234,8 @@ function readCodexFooter(line) {
|
|
|
202
234
|
const separator = line.indexOf('·');
|
|
203
235
|
if (separator < 0)
|
|
204
236
|
return null;
|
|
205
|
-
const
|
|
237
|
+
const head = line.slice(0, separator);
|
|
238
|
+
const match = exports.CODEX_FOOTER_MODEL_PATTERN.exec(head);
|
|
206
239
|
if (!match)
|
|
207
240
|
return null;
|
|
208
241
|
const model = match[1];
|
|
@@ -219,6 +252,13 @@ function readCodexFooter(line) {
|
|
|
219
252
|
// beside it is what separates chrome from prose.
|
|
220
253
|
if (effort === null && !/\d/.test(model))
|
|
221
254
|
return null;
|
|
255
|
+
// Issue #2835: a bar that shows an effort this module cannot name says the
|
|
256
|
+
// latched effort is no longer current. Publishing the old one would be a
|
|
257
|
+
// wrong value, which is worse than none — the case that found it was a
|
|
258
|
+
// session moved from `xhigh` to `max` while `max` was not yet a level.
|
|
259
|
+
if (effort === null && exports.CODEX_FOOTER_EFFORT_SLOT_PATTERN.test(head)) {
|
|
260
|
+
return { model, effort: null, effortUnreadable: true };
|
|
261
|
+
}
|
|
222
262
|
return { model, effort };
|
|
223
263
|
}
|
|
224
264
|
// =============================================================================
|
|
@@ -612,11 +652,10 @@ function readOpencodeStepMarker(line) {
|
|
|
612
652
|
* footer reads `? for shortcuts · taste on`), so everything from the dot on
|
|
613
653
|
* is dropped, and the dot itself is optional.
|
|
614
654
|
* - **The effort is read when the banner prints one, through the shared
|
|
615
|
-
* vocabulary.** `low` / `high` resolve
|
|
616
|
-
* {@link
|
|
617
|
-
*
|
|
618
|
-
*
|
|
619
|
-
* half-read.
|
|
655
|
+
* vocabulary.** `low` / `high` / `max` resolve (`max` since Issue #2835,
|
|
656
|
+
* which added it to {@link REASONING_EFFORT_LEVELS} for codex; before that it
|
|
657
|
+
* answered null). The model half is published either way: the
|
|
658
|
+
* ` with … effort` frame delimits it cleanly, so nothing is half-read.
|
|
620
659
|
*
|
|
621
660
|
* ## After a `/model` switch (measured, 1.49.0)
|
|
622
661
|
*
|
|
@@ -64,10 +64,12 @@
|
|
|
64
64
|
* written once.
|
|
65
65
|
*/
|
|
66
66
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
-
exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = void 0;
|
|
67
|
+
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = exports.COMMAND_CODE_PLAN_REVIEW_FOOTER = exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = void 0;
|
|
68
|
+
exports.isCommandCodePlanApproveChoice = isCommandCodePlanApproveChoice;
|
|
68
69
|
exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
|
|
69
70
|
exports.readCommandCodeQuestionRegion = readCommandCodeQuestionRegion;
|
|
70
71
|
exports.hasCommandCodeQuestionChrome = hasCommandCodeQuestionChrome;
|
|
72
|
+
exports.readCommandCodeReviewPage = readCommandCodeReviewPage;
|
|
71
73
|
exports.extractCommandCodeSelectionListFrame = extractCommandCodeSelectionListFrame;
|
|
72
74
|
exports.readSelectionListShape = readSelectionListShape;
|
|
73
75
|
exports.shouldOfferOptionNumbers = shouldOfferOptionNumbers;
|
|
@@ -188,6 +190,98 @@ exports.COMMAND_CODE_SELECTION_LIST_FOOTER = /\benter\s+to\s+select\b\s*[·•]\
|
|
|
188
190
|
* Code writes its picker hints in lower case; nothing rests on which it uses.
|
|
189
191
|
*/
|
|
190
192
|
exports.DISMISSABLE_PANEL_FOOTER_PATTERN = /^\s*(?:press|hit|type)?\s*(?:<)?esc(?:ape)?(?:>)?\s+to\s+(?:close|dismiss|exit)\b[\s.·•]*$/im;
|
|
193
|
+
/**
|
|
194
|
+
* The two footer rows of Command Code's plan review overlay (Issue #2761).
|
|
195
|
+
*
|
|
196
|
+
* Measured on 1.58.0 at 200x1000. The overlay is a rule, a `Plan review: <title>
|
|
197
|
+
* · <path> · v1` header, the plan with a line-number gutter, a second rule, a
|
|
198
|
+
* ` REVIEW ` badge and then, verbatim:
|
|
199
|
+
*
|
|
200
|
+
* Approve ctrl+a executes the plan
|
|
201
|
+
* Cancel esc
|
|
202
|
+
*
|
|
203
|
+
* BOTH rows, adjacent, because each half alone is weak: `Cancel esc` is two
|
|
204
|
+
* words any picker might print, and `Approve` is a word an agent writes in a
|
|
205
|
+
* plan. Multi-line on purpose — it is tested against a joined tail
|
|
206
|
+
* (`NormalizedFrame.lastLines`, or the tail {@link readSelectionListShape}
|
|
207
|
+
* builds), never against a single row.
|
|
208
|
+
*
|
|
209
|
+
* Swept against every fixture in `tests/fixtures` and
|
|
210
|
+
* `tests/unit/lib/detection/fixtures` when this was written (300 files): the
|
|
211
|
+
* only match is the plan review capture itself.
|
|
212
|
+
*
|
|
213
|
+
* ## The `❯` either row may carry (Issue #2793)
|
|
214
|
+
*
|
|
215
|
+
* `↓` past the plan's last line moves the focus onto the ACTION list, and the
|
|
216
|
+
* focused action is drawn with a `❯ ` in front of it and two spaces before its
|
|
217
|
+
* key (`tests/fixtures/command-code-plan-review-2763/`, 1.58.0):
|
|
218
|
+
*
|
|
219
|
+
* ❯ Approve ctrl+a executes the plan ← `plan-review-action-focus-approve.txt`
|
|
220
|
+
* Cancel esc
|
|
221
|
+
*
|
|
222
|
+
* Approve ctrl+a executes the plan · comments go along as notes
|
|
223
|
+
* ❯ Cancel esc ← `plan-review-long-scrolled-cancel-focused.txt`
|
|
224
|
+
*
|
|
225
|
+
* Without the optional `❯ ` this pattern missed both frames, and they went on to
|
|
226
|
+
* the composer check, where `COMMAND_CODE_PROMPT_PATTERN` (`^❯(\s*$|\s+\S)`)
|
|
227
|
+
* read the cursor row as the composer and published `ready` / `input_prompt`:
|
|
228
|
+
* `wait` exited 0 on a plan nobody had approved — #2754's `❯`-outside-the-list
|
|
229
|
+
* family. It is also the frame on which `Enter` EXECUTES the focused action, so
|
|
230
|
+
* missing it here would also have left the chat surface's `Enter` on screen
|
|
231
|
+
* (see {@link SelectionListShape.offersPlanApprove}). Only `❯`, and only as a
|
|
232
|
+
* prefix: `❯ ` + the row is the one measured spelling of a focused action.
|
|
233
|
+
* Re-swept over the same two directories with the widened pattern: every match
|
|
234
|
+
* is still a `command-code-plan-review-*` capture, which
|
|
235
|
+
* `command-code-plan-review-2793.test.ts` keeps pinned.
|
|
236
|
+
*/
|
|
237
|
+
exports.COMMAND_CODE_PLAN_REVIEW_FOOTER = /^\s*(?:❯ +)?Approve\s+ctrl\+a\b[^\n]*\n\s*(?:❯ +)?Cancel\s+esc\s*$/im;
|
|
238
|
+
/**
|
|
239
|
+
* The radio row `ctrl+a` puts in place of the action list when comments are
|
|
240
|
+
* pending (Issue #2793).
|
|
241
|
+
*
|
|
242
|
+
* Measured on 1.58.0 (`tests/fixtures/command-code-plan-review-2763/`): with
|
|
243
|
+
* zero comments `ctrl+a` approves at once, and with one or more it first asks
|
|
244
|
+
* what to do with them. The three action rows are replaced by ONE row, and the
|
|
245
|
+
* selected side is `(•)`, the other `( )` — readable without the ANSI:
|
|
246
|
+
*
|
|
247
|
+
* Approve (•) with 4 comments as notes ( ) original plan · discard comments
|
|
248
|
+
*
|
|
249
|
+
* `comments?` because the badge above it is measured in both numbers
|
|
250
|
+
* (`1 pending comment` / `4 pending comments`); the radio itself was captured
|
|
251
|
+
* with four.
|
|
252
|
+
*/
|
|
253
|
+
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;
|
|
254
|
+
/**
|
|
255
|
+
* The hint bar under {@link COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW}, verbatim
|
|
256
|
+
* `←/→ choose · enter confirm · esc back`.
|
|
257
|
+
*
|
|
258
|
+
* Anchored to the LAST row of the text it is tested against (no `m` flag: `$` is
|
|
259
|
+
* the end of the input), because that is where the overlay draws every one of
|
|
260
|
+
* its five measured hint bars, and because it is what keeps a transcript that
|
|
261
|
+
* QUOTES this screen from matching — the composer is always drawn below a
|
|
262
|
+
* transcript, so there the quote is never the last row.
|
|
263
|
+
*/
|
|
264
|
+
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = /(?:^|\n)[ \t]*←\/→\s+choose\s*·\s*enter\s+confirm\s*·\s*esc\s+back\s*$/i;
|
|
265
|
+
/**
|
|
266
|
+
* Whether this tail is the approve-with-comments confirmation (Issue #2793).
|
|
267
|
+
*
|
|
268
|
+
* BOTH rows, for the reason {@link COMMAND_CODE_PLAN_REVIEW_FOOTER} gives for
|
|
269
|
+
* its two: either half alone is a sentence something else could print. Not
|
|
270
|
+
* adjacent — `Editor exited with code 127` and a blank row sit between them on
|
|
271
|
+
* both captures — so each is tested on its own.
|
|
272
|
+
*
|
|
273
|
+
* Deliberately NOT folded into {@link COMMAND_CODE_PLAN_REVIEW_FOOTER}, and
|
|
274
|
+
* therefore not {@link SelectionListShape.offersPlanApprove}: on this screen
|
|
275
|
+
* `enter` is the documented CONFIRM of an approval the human already started
|
|
276
|
+
* with `ctrl+a`, so the chat surface must keep its `Enter`, and what `ctrl+a`
|
|
277
|
+
* does here was not measured.
|
|
278
|
+
*
|
|
279
|
+
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
280
|
+
*/
|
|
281
|
+
function isCommandCodePlanApproveChoice(tail) {
|
|
282
|
+
return (exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW.test(tail) &&
|
|
283
|
+
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER.test(tail));
|
|
284
|
+
}
|
|
191
285
|
/**
|
|
192
286
|
* How many rows from the end of the content the dismiss footer is looked for.
|
|
193
287
|
*
|
|
@@ -276,8 +370,24 @@ const COMMAND_CODE_CURSOR_GLYPH = '❯';
|
|
|
276
370
|
const COMMAND_CODE_TAB_SELECTED_MARKERS = '●◉⦿';
|
|
277
371
|
/** The hollow half of {@link COMMAND_CODE_TAB_SELECTED_MARKERS}'s pair. */
|
|
278
372
|
const COMMAND_CODE_TAB_UNSELECTED_MARKERS = '◯○◌⚪';
|
|
373
|
+
/**
|
|
374
|
+
* The ANSWERED half, measured on 1.54.1 (Issue #2753).
|
|
375
|
+
*
|
|
376
|
+
* A multi-question `AskUserQuestion` keeps one tab per question and marks the
|
|
377
|
+
* ones already answered: `✔ Party size | ✔ Rental car | ● Update scope | ◯ Review`.
|
|
378
|
+
* Before this family existed the whole strip failed the cell test, the reader answered
|
|
379
|
+
* `none`, and the generic parser read the checkbox list under it as a single
|
|
380
|
+
* select — see the Issue for the capture.
|
|
381
|
+
*
|
|
382
|
+
* U+2714 and nothing else. `✓` (U+2713) and `☑` (U+2611) are the shapes a check
|
|
383
|
+
* mark could take; neither has been seen on a pane, and this reading is shared
|
|
384
|
+
* with `ChatSurface` and `extractCommandCodeSelectionListFrame`, which run for
|
|
385
|
+
* EVERY tool — so an unmeasured glyph here widens what other tools' frames can
|
|
386
|
+
* be claimed as this screen.
|
|
387
|
+
*/
|
|
388
|
+
const COMMAND_CODE_TAB_ANSWERED_MARKERS = '✔';
|
|
279
389
|
/** One `<marker> <label>` cell of the tab strip. */
|
|
280
|
-
const COMMAND_CODE_TAB_SEGMENT_PATTERN = new RegExp(`^\\s*([${COMMAND_CODE_TAB_SELECTED_MARKERS}${COMMAND_CODE_TAB_UNSELECTED_MARKERS}])\\s+\\S`);
|
|
390
|
+
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`);
|
|
281
391
|
/**
|
|
282
392
|
* Is this row Command Code's question-screen tab strip?
|
|
283
393
|
*
|
|
@@ -288,16 +398,19 @@ const COMMAND_CODE_TAB_SEGMENT_PATTERN = new RegExp(`^\\s*([${COMMAND_CODE_TAB_S
|
|
|
288
398
|
* the structure and the one prose never has in this position;
|
|
289
399
|
* - **every cell is `<marker> <label>`.** A row that is a strip for its first
|
|
290
400
|
* cell and prose for its second is prose;
|
|
291
|
-
* - **at least one filled marker and at least one
|
|
401
|
+
* - **at least one filled marker, and at least one other cell.** A tab strip
|
|
292
402
|
* says which tab has the screen. A row of identical bullets does not, and
|
|
293
|
-
* `● one | ● two` is exactly the list-with-a-pipe this rules out.
|
|
403
|
+
* `● one | ● two` is exactly the list-with-a-pipe this rules out. The other
|
|
404
|
+
* cell may be hollow (not answered yet) or the `✔` of an answered tab
|
|
405
|
+
* (measured on 1.54.1 — Issue #2753); what may not be missing is the filled
|
|
406
|
+
* one, so `✔ one | ✔ two` is still refused.
|
|
294
407
|
*/
|
|
295
408
|
function isCommandCodeQuestionTabRow(line) {
|
|
296
409
|
const segments = line.split('|');
|
|
297
410
|
if (segments.length < 2)
|
|
298
411
|
return false;
|
|
299
412
|
let selected = 0;
|
|
300
|
-
let
|
|
413
|
+
let others = 0;
|
|
301
414
|
for (const segment of segments) {
|
|
302
415
|
const match = COMMAND_CODE_TAB_SEGMENT_PATTERN.exec(segment);
|
|
303
416
|
if (match === null)
|
|
@@ -305,9 +418,9 @@ function isCommandCodeQuestionTabRow(line) {
|
|
|
305
418
|
if (COMMAND_CODE_TAB_SELECTED_MARKERS.includes(match[1]))
|
|
306
419
|
selected += 1;
|
|
307
420
|
else
|
|
308
|
-
|
|
421
|
+
others += 1;
|
|
309
422
|
}
|
|
310
|
-
return selected > 0 &&
|
|
423
|
+
return selected > 0 && others > 0;
|
|
311
424
|
}
|
|
312
425
|
/**
|
|
313
426
|
* Rows that mean the region spans more than the one dialog on screen now.
|
|
@@ -382,9 +495,13 @@ const COMMAND_CODE_QUESTION_REGION_REJECT_PATTERN = /\besc\s+to\s+interrupt\b|^[
|
|
|
382
495
|
* 3. the options are a STRICT run `1.` … `N.`, 2 ≤ N ≤ {@link
|
|
383
496
|
* MAX_OPTION_NUMBER}. A gap, a repeat or a list that starts at `2` is not
|
|
384
497
|
* this screen;
|
|
385
|
-
* 4. exactly one {@link COMMAND_CODE_CURSOR_GLYPH} in the region
|
|
386
|
-
*
|
|
387
|
-
*
|
|
498
|
+
* 4. exactly one {@link COMMAND_CODE_CURSOR_GLYPH} in the region. Two cursors
|
|
499
|
+
* means two screens — typically a composer's own `❯` under the dialog — and
|
|
500
|
+
* none means the highlight is elsewhere. Issue #2755 dropped the "and it is
|
|
501
|
+
* on an option row" half: 1.54.1 parks the cursor on `Submit`, on `Next` and
|
|
502
|
+
* on the `notes:` row, and refusing those frames published six measured
|
|
503
|
+
* captures of a live question as finished turns. WHERE it sits is reported
|
|
504
|
+
* as {@link CommandCodeQuestionRegion.cursorOnOptionRow} instead;
|
|
388
505
|
* 5. no filter box, no `/model` footer, no dismiss-only footer and no other
|
|
389
506
|
* turn's UI in the region ({@link FILTER_INPUT_PATTERN},
|
|
390
507
|
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER},
|
|
@@ -446,6 +563,7 @@ function readCommandCodeQuestionRegion(frame) {
|
|
|
446
563
|
lastLineIndex: screen.lastLineIndex,
|
|
447
564
|
tabLineIndex: screen.tabLineIndex,
|
|
448
565
|
cursorLineIndex: screen.cursorLineIndex,
|
|
566
|
+
cursorOnOptionRow: screen.cursorOnOptionRow,
|
|
449
567
|
optionCount: screen.numbers.length,
|
|
450
568
|
};
|
|
451
569
|
}
|
|
@@ -478,17 +596,126 @@ function readCommandCodeQuestionRegion(frame) {
|
|
|
478
596
|
* Every structural condition stays: the last qualifying rule row, a genuine tab
|
|
479
597
|
* strip as the first row under it ({@link isCommandCodeQuestionTabRow} — one
|
|
480
598
|
* filled marker, one hollow, `|`-separated), a non-blank question body before
|
|
481
|
-
* the first option, at least two numbered rows, at least one `❯`
|
|
599
|
+
* the first option, at least two numbered rows, at least one `❯` in the region,
|
|
482
600
|
* and none of the pickers, panels or other-turn UI the other branches own. An
|
|
483
601
|
* assistant answering in a numbered list carries none of that, and a frame with
|
|
484
|
-
* one option
|
|
485
|
-
*
|
|
602
|
+
* one option is still `false`.
|
|
603
|
+
*
|
|
604
|
+
* Issue #2755 no longer requires that `❯` to be ON a numbered row — see
|
|
605
|
+
* condition 4 of {@link readCommandCodeQuestionRegion} for why, and
|
|
606
|
+
* {@link CommandCodeQuestionRegion.cursorOnOptionRow} for what is reported
|
|
607
|
+
* instead.
|
|
486
608
|
*
|
|
487
609
|
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
|
|
488
610
|
*/
|
|
489
611
|
function hasCommandCodeQuestionChrome(frame) {
|
|
490
612
|
return scanCommandCodeQuestionScreen(frame) !== null;
|
|
491
613
|
}
|
|
614
|
+
/**
|
|
615
|
+
* The Review page's own three rows, measured on 1.54.1 (Issue #2755 §7).
|
|
616
|
+
*
|
|
617
|
+
* `Enter` on the `Submit` row does not send the answers — it opens a SECOND
|
|
618
|
+
* screen:
|
|
619
|
+
*
|
|
620
|
+
* ✔ Update scope | ● Review
|
|
621
|
+
*
|
|
622
|
+
* 1. Which files should I update?
|
|
623
|
+
* calc.js
|
|
624
|
+
*
|
|
625
|
+
* ❯ 1. Submit
|
|
626
|
+
* 2. Cancel
|
|
627
|
+
*
|
|
628
|
+
* ← to go back and edit
|
|
629
|
+
*
|
|
630
|
+
* ## Why this needs a reading of its own
|
|
631
|
+
*
|
|
632
|
+
* Because it is a real numbered list under a real tab strip, and the GENERIC
|
|
633
|
+
* parser answers it: a two-option `multiple_choice` whose default is `Submit`.
|
|
634
|
+
* The default answer on that payload does not pick anything — it COMMITS
|
|
635
|
+
* whatever the human has ticked so far, from a payload nobody meant to expose,
|
|
636
|
+
* which is #1928's shape one screen later. Auto-Yes fires on defaults.
|
|
637
|
+
*
|
|
638
|
+
* Words rather than structure, and deliberately: the two numbered rows are
|
|
639
|
+
* `Submit` and `Cancel`, which is the same shape as any other two-option
|
|
640
|
+
* question. What separates this page from a question is only what it SAYS, so
|
|
641
|
+
* all three rows are required together — the confirm pair AND the back hint —
|
|
642
|
+
* and the whole thing is anchored inside a recognised question region. A screen
|
|
643
|
+
* that carries two of the three keeps every verdict it had.
|
|
644
|
+
*
|
|
645
|
+
* The cursor glyph is optional on both numbered rows: it rests on `1. Submit`
|
|
646
|
+
* when the page is reached by `Enter`, and the Issue is explicit that a pattern
|
|
647
|
+
* decided on the bare word would miss it.
|
|
648
|
+
*/
|
|
649
|
+
const COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN = /^[^\S\n]*(?:\u276F[^\S\n]*)?1[.)][^\S\n]+Submit[^\S\n]*$/im;
|
|
650
|
+
/** The `Cancel` half of {@link COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN}'s pair. */
|
|
651
|
+
const COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN = /^[^\S\n]*(?:\u276F[^\S\n]*)?2[.)][^\S\n]+Cancel[^\S\n]*$/im;
|
|
652
|
+
/** The footer only the Review page draws. */
|
|
653
|
+
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;
|
|
654
|
+
/**
|
|
655
|
+
* The warning the Review page carries when it was reached with answers missing.
|
|
656
|
+
*
|
|
657
|
+
* Measured from the undocumented `d`, which ends a multi-select from any row:
|
|
658
|
+
* `⚠ You have not answered all questions` over a `No answer`. Issue #2755 §7
|
|
659
|
+
* requires that such a page is never read as "answered", which is why the
|
|
660
|
+
* predicate below reports it rather than hiding it.
|
|
661
|
+
*/
|
|
662
|
+
const COMMAND_CODE_REVIEW_UNANSWERED_PATTERN = /have\s+not\s+answered\s+all\s+questions/i;
|
|
663
|
+
/**
|
|
664
|
+
* Read Command Code's `AskUserQuestion` Review page, if this frame is one
|
|
665
|
+
* (Issue #2755 §7).
|
|
666
|
+
*
|
|
667
|
+
* The same region {@link readCommandCodeQuestionRegion} works on — last rule
|
|
668
|
+
* row, tab strip as the first row under it — plus the three rows above. The
|
|
669
|
+
* question-shaped conditions are deliberately NOT applied: this page has no
|
|
670
|
+
* question body of its own on the `Submit`/`Cancel` spelling (the answers sit
|
|
671
|
+
* where the question would), and it draws `1.` twice, so the strict reading
|
|
672
|
+
* declines it for a numbering reason that says nothing about what it is.
|
|
673
|
+
*
|
|
674
|
+
* `null` for everything else, so no existing verdict moves except the two
|
|
675
|
+
* captures this is about.
|
|
676
|
+
*
|
|
677
|
+
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
|
|
678
|
+
*/
|
|
679
|
+
function readCommandCodeReviewPage(frame) {
|
|
680
|
+
if (!frame)
|
|
681
|
+
return null;
|
|
682
|
+
const lines = frame.replace(/\r\n/g, '\n').split('\n').map(ansi_1.stripAnsi);
|
|
683
|
+
let last = lines.length - 1;
|
|
684
|
+
while (last >= 0 && lines[last].trim() === '')
|
|
685
|
+
last -= 1;
|
|
686
|
+
if (last < 1)
|
|
687
|
+
return null;
|
|
688
|
+
let ruleLineIndex = -1;
|
|
689
|
+
for (let i = last - 1; i >= 0; i -= 1) {
|
|
690
|
+
const row = lines[i].trim();
|
|
691
|
+
if (row.length < COMMAND_CODE_RULE_MIN_COLUMNS)
|
|
692
|
+
continue;
|
|
693
|
+
if (!COMMAND_CODE_RULE_ROW_PATTERN.test(row))
|
|
694
|
+
continue;
|
|
695
|
+
ruleLineIndex = i;
|
|
696
|
+
break;
|
|
697
|
+
}
|
|
698
|
+
if (ruleLineIndex < 0)
|
|
699
|
+
return null;
|
|
700
|
+
const region = lines.slice(ruleLineIndex + 1, last + 1);
|
|
701
|
+
const tabOffset = region.findIndex((line) => line.trim() !== '');
|
|
702
|
+
if (tabOffset < 0)
|
|
703
|
+
return null;
|
|
704
|
+
if (!isCommandCodeQuestionTabRow(region[tabOffset]))
|
|
705
|
+
return null;
|
|
706
|
+
const body = region.join('\n');
|
|
707
|
+
if (!COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body))
|
|
708
|
+
return null;
|
|
709
|
+
if (!COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN.test(body))
|
|
710
|
+
return null;
|
|
711
|
+
if (!COMMAND_CODE_REVIEW_BACK_HINT_PATTERN.test(body))
|
|
712
|
+
return null;
|
|
713
|
+
const submitRow = region.find((row) => COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(row));
|
|
714
|
+
return {
|
|
715
|
+
hasUnansweredWarning: COMMAND_CODE_REVIEW_UNANSWERED_PATTERN.test(body),
|
|
716
|
+
cursorOnSubmit: submitRow !== undefined && submitRow.includes(COMMAND_CODE_CURSOR_GLYPH),
|
|
717
|
+
};
|
|
718
|
+
}
|
|
492
719
|
/**
|
|
493
720
|
* The structural half of the question-screen reading, shared by the strict
|
|
494
721
|
* {@link readCommandCodeQuestionRegion} and the weaker
|
|
@@ -566,18 +793,38 @@ function scanCommandCodeQuestionScreen(frame) {
|
|
|
566
793
|
if (!region.slice(tabOffset + 1, firstOptionOffset).some((line) => line.trim() !== '')) {
|
|
567
794
|
return null;
|
|
568
795
|
}
|
|
569
|
-
// 4. A cursor,
|
|
796
|
+
// 4. A cursor, somewhere in the region.
|
|
797
|
+
//
|
|
798
|
+
// Issue #2755 removed the second half of this condition ("and it is on an
|
|
799
|
+
// option row"). 1.54.1 lets the `❯` leave the list — onto `Submit`, onto
|
|
800
|
+
// `Next`, onto the `notes:` input — and requiring it on a numbered row made
|
|
801
|
+
// six measured captures of a LIVE question fall through to the composer
|
|
802
|
+
// check, which answers `ready` off the dialog's own `❯` row and makes `wait`
|
|
803
|
+
// exit 0 on a pane that is asking a human a question (#2521's 偽完了, §8).
|
|
804
|
+
//
|
|
805
|
+
// The generalisation is deliberate and is stated in the Issue: the condition
|
|
806
|
+
// is "the `❯` is outside the list", NOT the word `Submit`. Adding the three
|
|
807
|
+
// measured labels would have to be re-opened for the fourth, and 1.54.1
|
|
808
|
+
// already draws three. Where the cursor sits is reported instead, in
|
|
809
|
+
// {@link CommandCodeQuestionScreen.cursorOnOptionRow}, and the reader decides
|
|
810
|
+
// what a screen it cannot answer is worth.
|
|
811
|
+
//
|
|
812
|
+
// Nothing else about the reading moved, so a frame that is not a question
|
|
813
|
+
// screen is refused by exactly the conditions that refused it before: the last
|
|
814
|
+
// rule row, a genuine tab strip as its first row, a question body, two or more
|
|
815
|
+
// numbered rows, and none of the pickers or panels the other branches own.
|
|
570
816
|
let cursorCount = 0;
|
|
571
817
|
let cursorOffset = -1;
|
|
818
|
+
let cursorOnOptionRow = false;
|
|
572
819
|
for (let i = 0; i < region.length; i += 1) {
|
|
573
820
|
const inRow = region[i].split(COMMAND_CODE_CURSOR_GLYPH).length - 1;
|
|
574
821
|
if (inRow === 0)
|
|
575
822
|
continue;
|
|
576
823
|
cursorCount += inRow;
|
|
577
|
-
|
|
578
|
-
|
|
824
|
+
cursorOffset = i;
|
|
825
|
+
cursorOnOptionRow = OPTION_ROW_PATTERN.test(region[i]);
|
|
579
826
|
}
|
|
580
|
-
if (cursorCount === 0
|
|
827
|
+
if (cursorCount === 0)
|
|
581
828
|
return null;
|
|
582
829
|
return {
|
|
583
830
|
ruleLineIndex,
|
|
@@ -587,6 +834,7 @@ function scanCommandCodeQuestionScreen(frame) {
|
|
|
587
834
|
numbers,
|
|
588
835
|
cursorCount,
|
|
589
836
|
cursorLineIndex: ruleLineIndex + 1 + cursorOffset,
|
|
837
|
+
cursorOnOptionRow,
|
|
590
838
|
};
|
|
591
839
|
}
|
|
592
840
|
/**
|
|
@@ -690,6 +938,7 @@ const EMPTY_SHAPE = {
|
|
|
690
938
|
offersSessionScope: false,
|
|
691
939
|
commitsDefaultOnEnter: false,
|
|
692
940
|
hasFilterInput: false,
|
|
941
|
+
offersPlanApprove: false,
|
|
693
942
|
};
|
|
694
943
|
/** The last {@link SELECTION_SHAPE_TAIL_LINE_COUNT} rows that carry content. */
|
|
695
944
|
function tailLines(frame) {
|
|
@@ -750,12 +999,13 @@ function readSelectionListShape(frame) {
|
|
|
750
999
|
offersSessionScope: exports.SESSION_SCOPE_FOOTER_PATTERN.test(tail),
|
|
751
1000
|
commitsDefaultOnEnter: exports.SET_AS_DEFAULT_FOOTER_PATTERN.test(tail),
|
|
752
1001
|
hasFilterInput: FILTER_INPUT_PATTERN.test(tail),
|
|
1002
|
+
offersPlanApprove: exports.COMMAND_CODE_PLAN_REVIEW_FOOTER.test(tail),
|
|
753
1003
|
};
|
|
754
1004
|
}
|
|
755
1005
|
/**
|
|
756
1006
|
* Whether the card may draw a `1`…`N` row for this shape.
|
|
757
1007
|
*
|
|
758
|
-
*
|
|
1008
|
+
* Three refusals, all measured rather than defensive:
|
|
759
1009
|
*
|
|
760
1010
|
* - **a session-scope footer.** On claude's `/model` a number key commits AND
|
|
761
1011
|
* rewrites the global default in one press (probed live on 2.1.260), so a
|
|
@@ -764,7 +1014,12 @@ function readSelectionListShape(frame) {
|
|
|
764
1014
|
* - **a filter input.** copilot's `/model` and Command Code's picker put a
|
|
765
1015
|
* focused search box on the dialog, where a `4` is four characters of a
|
|
766
1016
|
* query and not the fourth model.
|
|
1017
|
+
* - **a plan review.** Every character typed there is a comment on the plan,
|
|
1018
|
+
* and the plan's own text is full of `1.` `2.` rows.
|
|
767
1019
|
*/
|
|
768
1020
|
function shouldOfferOptionNumbers(shape) {
|
|
769
|
-
return shape.optionCount > 0 &&
|
|
1021
|
+
return (shape.optionCount > 0 &&
|
|
1022
|
+
!shape.offersSessionScope &&
|
|
1023
|
+
!shape.hasFilterInput &&
|
|
1024
|
+
!shape.offersPlanApprove);
|
|
770
1025
|
}
|
|
@@ -60,6 +60,8 @@ exports.SELECTION_LIST_REASONS = new Set([
|
|
|
60
60
|
// unclassified floor, whose controls are the answer characters and whose
|
|
61
61
|
// answer characters go into the picker's search box.
|
|
62
62
|
status_reason_1.STATUS_REASON.COMMAND_CODE_SELECTION_LIST,
|
|
63
|
+
// Issue #2761: Command Code's plan review. Arrow-driven, human-only.
|
|
64
|
+
status_reason_1.STATUS_REASON.COMMAND_CODE_PLAN_REVIEW,
|
|
63
65
|
status_reason_1.STATUS_REASON.COPILOT_SELECTION_LIST,
|
|
64
66
|
status_reason_1.STATUS_REASON.CODEX_SELECTION_LIST,
|
|
65
67
|
// Issue #1017: Codex pager/edit-previous mode also drives NavigationButtons.
|