commandmate 0.30.1 → 0.31.0
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 +164 -164
- package/.next/app-path-routes-manifest.json +28 -28
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_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/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +3 -3
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +4 -4
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -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 +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 +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/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/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_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.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.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/todos/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_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]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_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/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.js +4 -3
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +4 -3
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_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.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/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +1 -1
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_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 +28 -28
- package/.next/server/chunks/1058.js +1 -1
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1262.js +1 -1
- package/.next/server/chunks/1886.js +3 -3
- package/.next/server/chunks/1990.js +103 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/261.js +1 -1
- package/.next/server/chunks/3123.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3480.js +5 -4
- package/.next/server/chunks/4299.js +1 -1
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4443.js +1 -5
- package/.next/server/chunks/5017.js +1 -1
- package/.next/server/chunks/5043.js +1 -1
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/552.js +2 -2
- package/.next/server/chunks/6072.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/663.js +4 -3
- package/.next/server/chunks/6894.js +2 -2
- package/.next/server/chunks/7187.js +1 -0
- package/.next/server/chunks/7472.js +1 -1
- package/.next/server/chunks/{880.js → 7859.js} +6 -6
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8800.js +2 -2
- package/.next/server/chunks/8918.js +7 -0
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9130.js +4 -4
- package/.next/server/chunks/9627.js +1 -1
- package/.next/server/chunks/9696.js +2 -2
- package/.next/server/chunks/9798.js +1 -1
- 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/1783-11c9b4d8a52ebd91.js +1 -0
- package/.next/static/chunks/4718-de1224c9e8a6e7fc.js +1 -0
- package/.next/static/chunks/6022-2fa0b5a82d4ce7b6.js +1 -0
- package/.next/static/chunks/{5229-6c89475b61bd2c8b.js → 6170-951b9f5fe6b4b3b5.js} +1 -1
- package/.next/static/chunks/app/chat/{page-9aa2011410895b0d.js → page-37d7615d17d7e2a0.js} +1 -1
- package/.next/static/chunks/app/layout-4c2f21e3f653ee4c.js +1 -0
- package/.next/static/chunks/app/more/{page-333bba1c8bbc9c11.js → page-353a3924e6d7968e.js} +1 -1
- package/.next/static/chunks/app/{page-214f7ffa13a0cf10.js → page-c2bf871d953a1d6f.js} +1 -1
- package/.next/static/chunks/app/repositories/{page-4951cac905e50224.js → page-7d0f26df0537254c.js} +1 -1
- package/.next/static/chunks/app/review/{page-a0899b2d285318c3.js → page-e3f141b2829973e9.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-fb36145ec732092a.js → page-53f188ed9ca49e5f.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-9099e26b60442873.js → page-80569b720aea59cc.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-182e32368696d824.js → page-dbd2690ad72da95b.js} +1 -1
- package/.next/static/chunks/app/skills/{page-d3fdc88239ebe0ab.js → page-dacd36f9c11aa7da.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-97205088520255a5.js +1 -0
- package/.next/static/css/5c13ea243dfdcb66.css +1 -0
- package/.next/trace +13 -13
- package/README.md +37 -11
- package/dist/cli/commands/attach.d.ts +50 -0
- package/dist/cli/commands/attach.d.ts.map +1 -0
- package/dist/cli/commands/attach.js +204 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +114 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +23 -2
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +41 -1
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +34 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +5 -0
- package/dist/cli/types/index.d.ts +36 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/config/tmux-pane-config.d.ts +153 -0
- package/dist/config/tmux-pane-config.d.ts.map +1 -0
- package/dist/config/tmux-pane-config.js +172 -0
- package/dist/lib/cli-tools/session-name.d.ts +44 -0
- package/dist/lib/cli-tools/session-name.d.ts.map +1 -0
- package/dist/lib/cli-tools/session-name.js +57 -0
- package/dist/lib/cli-tools/types.d.ts +1 -1
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +6 -1
- package/dist/lib/cli-tools/validation.d.ts +34 -0
- package/dist/lib/cli-tools/validation.d.ts.map +1 -0
- package/dist/lib/cli-tools/validation.js +41 -0
- package/dist/lib/detection/status-reason.d.ts +18 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.js +18 -0
- package/dist/lib/detection/tools/verified-against.d.ts +57 -7
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +59 -8
- package/dist/lib/detection/version-probes.d.ts +26 -5
- package/dist/lib/detection/version-probes.d.ts.map +1 -1
- package/dist/lib/detection/version-probes.js +28 -6
- package/dist/lib/session/tmux-session-surface.d.ts +369 -0
- package/dist/lib/session/tmux-session-surface.d.ts.map +1 -0
- package/dist/lib/session/tmux-session-surface.js +525 -0
- package/dist/server/src/config/cli-tool-timing-config.js +12 -1
- package/dist/server/src/config/detection-evidence-config.js +5 -0
- package/dist/server/src/config/schedule-config.js +28 -1
- package/dist/server/src/lib/cli-tools/antigravity.js +2 -2
- package/dist/server/src/lib/cli-tools/base.js +13 -8
- package/dist/server/src/lib/cli-tools/claude.js +20 -0
- package/dist/server/src/lib/cli-tools/codex.js +205 -61
- package/dist/server/src/lib/cli-tools/command-code.js +349 -0
- package/dist/server/src/lib/cli-tools/composer-spec.js +6 -0
- package/dist/server/src/lib/cli-tools/copilot.js +2 -2
- package/dist/server/src/lib/cli-tools/gemini.js +2 -2
- package/dist/server/src/lib/cli-tools/graceful-exit.js +16 -1
- package/dist/server/src/lib/cli-tools/index.js +4 -1
- package/dist/server/src/lib/cli-tools/install-hints.js +131 -0
- package/dist/server/src/lib/cli-tools/liveness-spec.js +18 -0
- package/dist/server/src/lib/cli-tools/manager.js +2 -0
- package/dist/server/src/lib/cli-tools/opencode.js +2 -2
- package/dist/server/src/lib/cli-tools/start-availability.js +18 -11
- package/dist/server/src/lib/cli-tools/types.js +6 -1
- package/dist/server/src/lib/cli-tools/vibe-local.js +2 -2
- package/dist/server/src/lib/cmate-parser.js +6 -0
- package/dist/server/src/lib/detection/cli-patterns.js +441 -8
- package/dist/server/src/lib/detection/opencode-modal-overlay.js +66 -100
- package/dist/server/src/lib/detection/selection-shape.js +341 -0
- package/dist/server/src/lib/detection/sgr-background.js +210 -0
- package/dist/server/src/lib/detection/status-detector.js +6 -0
- package/dist/server/src/lib/detection/status-reason.js +18 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +38 -15
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +392 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +83 -2
- package/dist/server/src/lib/detection/tools/command-code/detect.js +159 -0
- package/dist/server/src/lib/detection/tools/registry.js +6 -4
- package/dist/server/src/lib/detection/tools/verified-against.js +59 -8
- package/dist/server/src/lib/detection/version-probes.js +28 -6
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +101 -21
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +39 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +245 -21
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +175 -13
- package/dist/server/src/lib/hooks/sources/codex/history.js +84 -15
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +130 -17
- package/dist/server/src/lib/hooks/sources/codex/relay-install.js +145 -0
- package/dist/server/src/lib/hooks/sources/command-code/history.js +865 -0
- package/dist/server/src/lib/hooks/sources/command-code/hooks-config.js +390 -0
- package/dist/server/src/lib/hooks/sources/command-code/source.js +290 -0
- package/dist/server/src/lib/hooks/sources/command-code/tool-id.js +18 -0
- package/dist/server/src/lib/hooks/sources/command-code/transcript.js +604 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -3
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +24 -28
- package/dist/server/src/lib/hooks/sources/registry.js +4 -0
- package/dist/server/src/lib/hooks/sources/turn-body.js +77 -19
- package/dist/server/src/lib/hooks/stop-history-capture.js +58 -25
- package/dist/server/src/lib/job-executor.js +12 -0
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +6 -0
- package/dist/server/src/lib/polling/response-checker.js +112 -7
- package/dist/server/src/lib/polling/structured-history-gate.js +15 -8
- package/dist/server/src/lib/realtime/types.js +15 -5
- package/dist/server/src/lib/response-cleaner.js +24 -1
- package/dist/server/src/lib/response-extractor.js +11 -0
- package/dist/server/src/lib/session/claude-executor.js +223 -4
- package/dist/server/src/lib/session/cli-session.js +52 -0
- package/dist/server/src/lib/session/tmux-session-surface.js +525 -0
- package/dist/server/src/lib/skills/compatibility-matrix.js +117 -1
- package/dist/server/src/lib/tmux/geometry-delegation.js +143 -0
- package/dist/server/src/lib/tmux/read-mode-pager.js +76 -10
- package/dist/server/src/lib/tmux/read-mode.js +44 -2
- package/dist/server/src/lib/tmux/session-hook-scripts.js +249 -0
- package/dist/server/src/lib/tmux/session-hooks.js +122 -0
- package/dist/server/src/lib/tmux/session-status-options.js +213 -0
- package/dist/server/src/lib/tmux/tmux.js +79 -2
- package/dist/server/src/lib/version-checker.js +110 -0
- package/dist/server/src/lib/ws-server.js +16 -10
- package/dist/server/src/types/agent-transcript.js +73 -1
- package/dist/server/src/types/terminal-keys.js +131 -3
- package/dist/types/terminal-keys.d.ts +100 -3
- package/dist/types/terminal-keys.d.ts.map +1 -1
- package/dist/types/terminal-keys.js +131 -3
- package/package.json +1 -1
- package/.next/server/chunks/3099.js +0 -5
- package/.next/server/chunks/7824.js +0 -1
- package/.next/static/chunks/3916-0e929d089282dc5d.js +0 -1
- package/.next/static/chunks/6022-7a7d1760fc9814c7.js +0 -1
- package/.next/static/chunks/6381-dbf04a99647f6018.js +0 -1
- package/.next/static/chunks/app/layout-6a26ea22d5cf03dc.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-aac399392ec8c273.js +0 -1
- package/.next/static/css/23f9c40ecc458c77.css +0 -1
- /package/.next/static/{pcpB4K6KreMzu2qbhvuRY → nXW4dPkpE_9xUf_9ySRff}/_buildManifest.js +0 -0
- /package/.next/static/{pcpB4K6KreMzu2qbhvuRY → nXW4dPkpE_9xUf_9ySRff}/_ssgManifest.js +0 -0
|
@@ -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.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = 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 = void 0;
|
|
7
|
+
exports.COPILOT_TOOL_ROW_PATTERN = exports.COPILOT_TOOL_VERBS = exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = 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_STATUS_BAR_PATTERN = exports.CODEX_PAGER_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_NUMBERED_OPTION_PATTERN = exports.ANTIGRAVITY_NUMBERED_DIALOG_QUESTION_PATTERN = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = 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 = void 0;
|
|
9
9
|
exports.isCodexTurnActive = isCodexTurnActive;
|
|
10
10
|
exports.findClaudeChromeStart = findClaudeChromeStart;
|
|
11
11
|
exports.isCodexPromptReady = isCodexPromptReady;
|
|
@@ -19,6 +19,8 @@ exports.readCopilotStatusBar = readCopilotStatusBar;
|
|
|
19
19
|
exports.findCopilotChromeStart = findCopilotChromeStart;
|
|
20
20
|
exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
|
|
21
21
|
exports.isCopilotFolderTrustDialog = isCopilotFolderTrustDialog;
|
|
22
|
+
exports.isAntigravityNumberedDialog = isAntigravityNumberedDialog;
|
|
23
|
+
exports.findCommandCodeChromeStart = findCommandCodeChromeStart;
|
|
22
24
|
exports.detectThinking = detectThinking;
|
|
23
25
|
exports.getCliToolPatterns = getCliToolPatterns;
|
|
24
26
|
exports.stripBoxDrawing = stripBoxDrawing;
|
|
@@ -1302,10 +1304,38 @@ exports.COPILOT_SEPARATOR_PATTERN = /^─{10,}$/m;
|
|
|
1302
1304
|
const COPILOT_STATUS_BAR_MAX_ROWS = 2;
|
|
1303
1305
|
/** How many rows copilot's composer may span before the block stops looking like chrome. */
|
|
1304
1306
|
const COPILOT_COMPOSER_MAX_ROWS = 40;
|
|
1305
|
-
/**
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1307
|
+
/**
|
|
1308
|
+
* One of the two rows that fence copilot's composer.
|
|
1309
|
+
*
|
|
1310
|
+
* Two renderings of one thing, because copilot redrew its composer between the
|
|
1311
|
+
* builds this file is measured against (Issue #2269):
|
|
1312
|
+
*
|
|
1313
|
+
* - **1.0.80** fences it with a full-width horizontal rule, `─` to the pane's
|
|
1314
|
+
* width, above and below.
|
|
1315
|
+
* - **1.0.82** fences it with a half-block frame instead: `╻` (U+257B) followed
|
|
1316
|
+
* by `▄` to the pane's width above, `╹` (U+2579) followed by `▀` below.
|
|
1317
|
+
*
|
|
1318
|
+
* The corner glyph is REQUIRED on the 1.0.82 forms and that is load-bearing, not
|
|
1319
|
+
* decoration. 1.0.82 also boxes the echoed user prompt in the transcript between
|
|
1320
|
+
* two dividers of the same half blocks — `tests/unit/lib/detection/fixtures/
|
|
1321
|
+
* copilot-live-2269/turn-complete.txt` rows 10 and 12 — and those carry no
|
|
1322
|
+
* corner. Accepting a bare `▄`/`▀` run here would let the newest echo's box be
|
|
1323
|
+
* read as the composer, which would put `findCopilotChromeStart` ~985 rows too
|
|
1324
|
+
* high and delete the reply along with the chrome.
|
|
1325
|
+
*/
|
|
1326
|
+
const COPILOT_RULE_ROW = /^(?:─{10,}|╻▄{10,}|╹▀{10,})$/;
|
|
1327
|
+
/**
|
|
1328
|
+
* copilot's composer glyph, at the pane's own indent.
|
|
1329
|
+
*
|
|
1330
|
+
* `>` is the legacy spelling, `❯` is 1.0.80's. 1.0.82 draws no prompt glyph in
|
|
1331
|
+
* the composer at all: the row is the frame's left edge, `┃` (U+2503), and the
|
|
1332
|
+
* operator's text follows it (`copilot-live-2269/boot-idle.txt` row 998 is the
|
|
1333
|
+
* bare glyph on an empty composer). `┃` is safe to accept here even though the
|
|
1334
|
+
* reasoning block's rows also start with a vertical — that one is `│` (U+2502,
|
|
1335
|
+
* {@link COPILOT_BOX_ROW_PATTERN}) — and in any case this test is only ever
|
|
1336
|
+
* applied to the single row between two fence rows, never to a window.
|
|
1337
|
+
*/
|
|
1338
|
+
const COPILOT_COMPOSER_GLYPH = /^ {0,2}[>❯┃]/;
|
|
1309
1339
|
/**
|
|
1310
1340
|
* Locate the start of copilot CLI's bottom-pinned chrome within a captured pane
|
|
1311
1341
|
* (Issue #1897).
|
|
@@ -1321,6 +1351,21 @@ const COPILOT_COMPOSER_GLYPH = /^ {0,2}[>❯]/;
|
|
|
1321
1351
|
* ──────────────────── ← closing rule
|
|
1322
1352
|
* ◉ Working · 1.5 KiB esc interrupt GPT-5.6 Terra ← status bar
|
|
1323
1353
|
*
|
|
1354
|
+
* Issue #2269 re-measured the same five rows on 1.0.82, where the fence and the
|
|
1355
|
+
* composer are drawn differently but the layout is unchanged:
|
|
1356
|
+
*
|
|
1357
|
+
* <cwd> Session: N AIC used
|
|
1358
|
+
* ╻▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ← opening frame
|
|
1359
|
+
* ┃<composer>
|
|
1360
|
+
* ╹▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ← closing frame
|
|
1361
|
+
* ← open sidebar · / commands · ? help · tab next tab GPT-5.6 Terra
|
|
1362
|
+
*
|
|
1363
|
+
* Both spellings live in {@link COPILOT_RULE_ROW} and
|
|
1364
|
+
* {@link COPILOT_COMPOSER_GLYPH}; the search below is unchanged. Until they were
|
|
1365
|
+
* added this function returned -1 on every 1.0.82 frame, `contentEnd` fell back
|
|
1366
|
+
* to the whole pane, and the saved reply opened with 199 `▀` and ended with the
|
|
1367
|
+
* `← open sidebar …` footer -- #2269's headline symptom.
|
|
1368
|
+
*
|
|
1324
1369
|
* The boundary is found structurally -- closing rule, opening rule, composer
|
|
1325
1370
|
* glyph -- and never by matching the status bar's wording. That is the same
|
|
1326
1371
|
* reasoning {@link findClaudeChromeStart} records (#1289) plus the measurement
|
|
@@ -1416,6 +1461,79 @@ exports.COPILOT_REASONING_HEADER_PATTERN = /^\s*⌄\s/;
|
|
|
1416
1461
|
* reply cannot be mistaken for a new turn boundary.
|
|
1417
1462
|
*/
|
|
1418
1463
|
exports.COPILOT_USER_ECHO_PATTERN = /^ {0,2}[>❯]\s+\S/;
|
|
1464
|
+
/**
|
|
1465
|
+
* One of the half-block dividers copilot 1.0.82 boxes a transcript row with
|
|
1466
|
+
* (Issue #2269).
|
|
1467
|
+
*
|
|
1468
|
+
* 1.0.80 drew the echoed prompt as a single bare ` ❯ <text>` row. 1.0.82 draws
|
|
1469
|
+
* a full-width `▄` run above it and a full-width `▀` run below it
|
|
1470
|
+
* (`copilot-live-2269/turn-complete.txt` rows 10 and 12):
|
|
1471
|
+
*
|
|
1472
|
+
* ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
|
|
1473
|
+
* ❯ Reply with exactly the word: uat-run1 00:27
|
|
1474
|
+
* ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
|
|
1475
|
+
* ● uat-run1
|
|
1476
|
+
*
|
|
1477
|
+
* {@link COPILOT_SKIP_PATTERNS}' `/[█▘▝▖▗▔▄▌▐]/` rule already dropped the `▄`
|
|
1478
|
+
* row. `▀` (U+2580) was not in that class, so the row BELOW the echo survived --
|
|
1479
|
+
* and extraction starts one row past the echo, which made a wall of 199 `▀` the
|
|
1480
|
+
* first line of every saved 1.0.82 reply.
|
|
1481
|
+
*
|
|
1482
|
+
* Deliberately not "add `▀` to that character class": this requires a run of ten
|
|
1483
|
+
* or more and nothing else on the row, so a reply that happens to use a single
|
|
1484
|
+
* half block as a glyph is untouched. The optional leading corner accepts the
|
|
1485
|
+
* composer's own fence rows (`╻▄…` / `╹▀…`) as well, which is defence in depth
|
|
1486
|
+
* only -- {@link findCopilotChromeStart} cuts those structurally, and this rule
|
|
1487
|
+
* is what stops them reaching History if a future build moves the fence again.
|
|
1488
|
+
*/
|
|
1489
|
+
exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = /^\s*[╻╹]?[▀▄]{10,}\s*$/;
|
|
1490
|
+
/**
|
|
1491
|
+
* The verbs copilot prints on a tool row, as a regex alternation source.
|
|
1492
|
+
*
|
|
1493
|
+
* One list, shared by {@link COPILOT_TOOL_ROW_PATTERN} here and by
|
|
1494
|
+
* `COPILOT_TOOL_ACTION_PATTERN` in `response-cleaner.ts`: the two match the same
|
|
1495
|
+
* vocabulary behind different markers, and a verb added to one and not the other
|
|
1496
|
+
* is a leak nothing fails on.
|
|
1497
|
+
*
|
|
1498
|
+
* `Asked user` / `Asking user` are Issue #2269's addition. copilot answers a
|
|
1499
|
+
* prompt it cannot act on by calling its ask-user tool, and the row it leaves in
|
|
1500
|
+
* the transcript (`● Asked user What would you like me to help with?`, measured
|
|
1501
|
+
* in `copilot-live-2269/turn-oneword-echo-askuser.txt`) was being saved as the
|
|
1502
|
+
* agent's reply -- the "launch screen as the answer" the Issue reports.
|
|
1503
|
+
*/
|
|
1504
|
+
exports.COPILOT_TOOL_VERBS = 'Get|Read|Run|Search|Write|Edit|Delete|List|Create|Fetch|Explore|Execute|Install|Asked user|Asking user|Model changed to:';
|
|
1505
|
+
/**
|
|
1506
|
+
* copilot 1.0.82's tool row, whose marker is a file-type badge (Issue #2269).
|
|
1507
|
+
*
|
|
1508
|
+
* 1.0.80 drew every tool row as `● <Verb> …` and `COPILOT_TOOL_ACTION_PATTERN`
|
|
1509
|
+
* reads exactly that. 1.0.82 puts a short badge for the file the tool touched in
|
|
1510
|
+
* front of the verb instead, and only falls back to `●` for a type it has no
|
|
1511
|
+
* badge for. Measured verbatim over
|
|
1512
|
+
* `copilot-live-2269/turn-tool-badges.txt` and `turn-tool-rows.txt`:
|
|
1513
|
+
*
|
|
1514
|
+
* / Search "a.ts" 1 file found
|
|
1515
|
+
* MD Read note.md L1:1 (1 line read)
|
|
1516
|
+
* TS Read a.ts 1 line read
|
|
1517
|
+
* PY Read c.py 1 line read
|
|
1518
|
+
* {} Read b.json 1 line read
|
|
1519
|
+
* ● Read d.txt 1 line read ← plain text keeps the 1.0.80 marker
|
|
1520
|
+
*
|
|
1521
|
+
* So the badge is `/`, `{}`, or two to four upper-case characters. Two is the
|
|
1522
|
+
* floor on purpose: a one-character class would also match the pronoun in an
|
|
1523
|
+
* English sentence ("I Read the file"), and no measured badge is one character.
|
|
1524
|
+
* `●` is left to `COPILOT_TOOL_ACTION_PATTERN`, which is the rule that already
|
|
1525
|
+
* owns it -- copilot's own prose is `● <text>` too (`● done`, `● 対象ファイルを
|
|
1526
|
+
* 確認して内容を読み込みます。`), and only the verb list separates the two.
|
|
1527
|
+
*
|
|
1528
|
+
* The `$` badge is absent for the same reason: `$ Shell Print requested text 2
|
|
1529
|
+
* lines…` opens a BLOCK whose command rows follow, which is
|
|
1530
|
+
* `COPILOT_TOOL_INVOCATION_PATTERN`'s job, and `Shell` is not in the verb list
|
|
1531
|
+
* anyway.
|
|
1532
|
+
*
|
|
1533
|
+
* No /g flag (S4-5: would make test() stateful). No quantifier nested inside
|
|
1534
|
+
* another (SEC4-001: ReDoS safe).
|
|
1535
|
+
*/
|
|
1536
|
+
exports.COPILOT_TOOL_ROW_PATTERN = new RegExp(`^\\s*(?:\\/|\\{\\}|[A-Z][A-Z0-9+#]{1,3})\\s+(?:${exports.COPILOT_TOOL_VERBS})[\\s:]`);
|
|
1419
1537
|
/**
|
|
1420
1538
|
* A wrapped continuation of the copilot transcript row above it (Issue #1897).
|
|
1421
1539
|
*
|
|
@@ -1446,6 +1564,12 @@ exports.COPILOT_BOOT_BANNER_ANCHORS = [
|
|
|
1446
1564
|
/^\s*(?:●\s+)?Tip:\s*\//m,
|
|
1447
1565
|
/Describe a task to get started/,
|
|
1448
1566
|
/Prefer a visual workspace\?/,
|
|
1567
|
+
// Issue #2269: copilot's greeting for a prompt it cannot act on. It arrives
|
|
1568
|
+
// through the ask-user tool, so the row that reaches the transcript is
|
|
1569
|
+
// `● Asked user Hi — what would you like to work on?` and the dialog's own
|
|
1570
|
+
// body repeats the question. Both are chrome for a turn that produced no
|
|
1571
|
+
// answer, and the operator saw the greeting saved as the agent's reply.
|
|
1572
|
+
/what would you like to work on\?/i,
|
|
1449
1573
|
];
|
|
1450
1574
|
/**
|
|
1451
1575
|
* The key-hint footer copilot draws under a picker, matched one ROW at a time
|
|
@@ -1632,6 +1756,20 @@ exports.COPILOT_SKIP_PATTERNS = [
|
|
|
1632
1756
|
exports.COPILOT_SELECTION_FOOTER_PATTERN,
|
|
1633
1757
|
// Collapsed reasoning header (Issue #1897): "⌄ Thinking…" / "⌄ Thought for 41s"
|
|
1634
1758
|
exports.COPILOT_REASONING_HEADER_PATTERN,
|
|
1759
|
+
// 1.0.82's transcript dividers and badge-marked tool rows (Issue #2269)
|
|
1760
|
+
exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN,
|
|
1761
|
+
exports.COPILOT_TOOL_ROW_PATTERN,
|
|
1762
|
+
// Issue #2269: the anchored box-row rule, so the raw-row consumer agrees with
|
|
1763
|
+
// the accumulator. `[╭╮╰╯│]` below is unanchored and omits `└`, which is the
|
|
1764
|
+
// glyph copilot opens a detail row with (` └ Enable all permissions (tools,
|
|
1765
|
+
// paths, and URLs)` under the launch screen's tip). `normalizeCopilotLine`
|
|
1766
|
+
// deletes every U+2500..U+257F glyph, so by the time the skip patterns run in
|
|
1767
|
+
// `cleanCopilotResponse` that row reads as prose -- which is how the ONE row
|
|
1768
|
+
// of the 1.0.82 launch screen that no other rule caught became the agent's
|
|
1769
|
+
// first reply. `extractCopilotContentLines` already tests this pattern before
|
|
1770
|
+
// normalising (#1897); adding it here is what gives `extractResponse`, which
|
|
1771
|
+
// never normalises, the same answer.
|
|
1772
|
+
exports.COPILOT_BOX_ROW_PATTERN,
|
|
1635
1773
|
// Logo/banner lines
|
|
1636
1774
|
/^GitHub Copilot\s+v/,
|
|
1637
1775
|
/[█▘▝▖▗▔▄▌▐]/,
|
|
@@ -1644,8 +1782,19 @@ exports.COPILOT_SKIP_PATTERNS = [
|
|
|
1644
1782
|
/^ctrl\+[a-z]\s+\w/,
|
|
1645
1783
|
// Prompt lines
|
|
1646
1784
|
/^[❯>]\s*(Type\s+@|$)/,
|
|
1647
|
-
// Tip/hint lines
|
|
1648
|
-
|
|
1785
|
+
// Tip/hint lines. Issue #2269 added the `●` marker: 1.0.82 draws the launch
|
|
1786
|
+
// screen's tip as `● Tip: /allow-all`, and `cleanCopilotResponse` strips the
|
|
1787
|
+
// bullet only AFTER the skip patterns have run, so the bare form never
|
|
1788
|
+
// matched and the tip was the one banner row that reached History.
|
|
1789
|
+
/^\s*(?:●\s+)?Tip:\s*\//,
|
|
1790
|
+
// Issue #2269: copilot's own tab bar, the top row of every 1.0.82 frame. It is
|
|
1791
|
+
// the second banner row the launch screen leaked (the logo, the disclaimer and
|
|
1792
|
+
// the tip's `└ …` detail row are all caught by the glyph rules above), and
|
|
1793
|
+
// between them they are the whole difference between "the launch screen cleans
|
|
1794
|
+
// to nothing and cannot be saved" and "History opens with the banner". Spelled
|
|
1795
|
+
// out in full rather than as a keyword so a reply that mentions one of these
|
|
1796
|
+
// words is untouched.
|
|
1797
|
+
/^\s*Current\s+Sessions\s+Issues\s+Pull requests\s+Gists\s*$/,
|
|
1649
1798
|
// Initial display text
|
|
1650
1799
|
/^Describe a task to get started/,
|
|
1651
1800
|
// Issue #571: Disclaimer, initialization message, environment info
|
|
@@ -1711,6 +1860,50 @@ exports.ANTIGRAVITY_SEPARATOR_PATTERN = /^─{3,}$/m;
|
|
|
1711
1860
|
* No `.*` at all (SEC4-001: ReDoS safe — strictly safer than the #995 form).
|
|
1712
1861
|
*/
|
|
1713
1862
|
exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = /Switch Model|↑\/↓\s*Navigate/m;
|
|
1863
|
+
/**
|
|
1864
|
+
* The question line agy draws above its numbered permission dialog
|
|
1865
|
+
* (Issue #2270; measured on agy 1.1.25, pane 200x1000, 2026-09-04).
|
|
1866
|
+
*
|
|
1867
|
+
* Anchored to the whole line so a model's prose that merely quotes the phrase
|
|
1868
|
+
* inside a sentence cannot match it.
|
|
1869
|
+
*/
|
|
1870
|
+
exports.ANTIGRAVITY_NUMBERED_DIALOG_QUESTION_PATTERN = /^\s*Do you want to proceed\?\s*$/m;
|
|
1871
|
+
/**
|
|
1872
|
+
* One numbered option row of that dialog: `> 1. Yes`, ` 4. No`.
|
|
1873
|
+
*
|
|
1874
|
+
* The `>` gutter marks the highlighted row and is optional, because only one of
|
|
1875
|
+
* the four rows carries it.
|
|
1876
|
+
*/
|
|
1877
|
+
exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN = /^\s*>?\s*\d+\.\s+\S/m;
|
|
1878
|
+
/**
|
|
1879
|
+
* Is this frame agy's NUMBERED permission dialog rather than one of its
|
|
1880
|
+
* arrow-key-only pickers? (Issue #2270)
|
|
1881
|
+
*
|
|
1882
|
+
* Both agy screens share the `↑/↓ Navigate` footer that
|
|
1883
|
+
* {@link ANTIGRAVITY_SELECTION_LIST_PATTERN} matches, which is why #997 could
|
|
1884
|
+
* widen that pattern to cover the permission menu — and why the menu then
|
|
1885
|
+
* resolved as `antigravity_selection_list`, `hasActivePrompt: false`. On the
|
|
1886
|
+
* chat surface that reads as "a selection list is open, drive it from the
|
|
1887
|
+
* terminal": the arrow buttons can only Enter the highlighted option 1, so
|
|
1888
|
+
* options 2-4 became unreachable, while the poller and the push notification
|
|
1889
|
+
* described the very same frame as a `multiple_choice` prompt.
|
|
1890
|
+
*
|
|
1891
|
+
* The discriminator is the pair below, not the footer:
|
|
1892
|
+
*
|
|
1893
|
+
* - `Do you want to proceed?` on its own line, and
|
|
1894
|
+
* - at least one `N. label` row.
|
|
1895
|
+
*
|
|
1896
|
+
* The Switch Model picker has neither (its rows are unnumbered model names and
|
|
1897
|
+
* its header is `Switch Model`), so it keeps the #995 reading. Every other agy
|
|
1898
|
+
* arrow-key TUI keeps it too — this is deliberately a rule about the ONE dialog
|
|
1899
|
+
* whose frames were measured, not a general "numbers mean prompt" inference.
|
|
1900
|
+
*
|
|
1901
|
+
* Callers pass the same text they hand {@link ANTIGRAVITY_SELECTION_LIST_PATTERN}.
|
|
1902
|
+
*/
|
|
1903
|
+
function isAntigravityNumberedDialog(text) {
|
|
1904
|
+
return (exports.ANTIGRAVITY_NUMBERED_DIALOG_QUESTION_PATTERN.test(text) &&
|
|
1905
|
+
exports.ANTIGRAVITY_NUMBERED_OPTION_PATTERN.test(text));
|
|
1906
|
+
}
|
|
1714
1907
|
/**
|
|
1715
1908
|
* Antigravity (agy) skip patterns for response cleaning (Issue #988)
|
|
1716
1909
|
* Filters turn/input-box separators, the bare ">" input prompt, the idle status
|
|
@@ -1725,6 +1918,230 @@ exports.ANTIGRAVITY_SKIP_PATTERNS = [
|
|
|
1725
1918
|
/[▄▀█▌▐]/, // Banner block art (defensive; normally above the user-prompt anchor)
|
|
1726
1919
|
exports.PASTED_TEXT_PATTERN, // [Pasted text #N +XX lines]
|
|
1727
1920
|
];
|
|
1921
|
+
/**
|
|
1922
|
+
* Command Code status-line spinner glyphs (Issue #2250).
|
|
1923
|
+
*
|
|
1924
|
+
* The complete `getWaveSymbol` frame set, read off the shipped bundle
|
|
1925
|
+
* (`command-code@1.40.1`, `dist/cli.mjs`):
|
|
1926
|
+
* `["·","○","◇","☆","✧","☆","◇","○","⌘"]` — six distinct glyphs, cycled.
|
|
1927
|
+
*
|
|
1928
|
+
* Deliberately NOT folded into {@link CLAUDE_SPINNER_CHARS}. Command Code marks
|
|
1929
|
+
* every assistant message with `⠶` (U+2836, see
|
|
1930
|
+
* {@link COMMAND_CODE_RESPONSE_MARKER_PATTERN}); adding that braille glyph to a
|
|
1931
|
+
* shared spinner class would make each reply's own first row read as "still
|
|
1932
|
+
* generating", and adding these glyphs to claude's class would do the same to
|
|
1933
|
+
* any claude reply that opens with `·`.
|
|
1934
|
+
*/
|
|
1935
|
+
exports.COMMAND_CODE_SPINNER_CHARS = ['·', '○', '◇', '☆', '✧', '⌘'];
|
|
1936
|
+
/**
|
|
1937
|
+
* Command Code composer / dialog-cursor prompt pattern (Issue #2250).
|
|
1938
|
+
*
|
|
1939
|
+
* `❯` (U+276F) only — the ASCII `>` claude also accepts is not a glyph Command
|
|
1940
|
+
* Code 1.40.1 draws, and accepting it here would make every shell prompt and
|
|
1941
|
+
* every quoted diff line in a reply look like a composer.
|
|
1942
|
+
*
|
|
1943
|
+
* The row is drawn in two places, which is why prompt presence alone is not
|
|
1944
|
+
* "ready": the bottom-pinned composer (`❯ Ask your question...` between two
|
|
1945
|
+
* full-width rules) and the highlighted option of a permission dialog
|
|
1946
|
+
* (`❯ 1. Yes`). Completion is resolved structurally instead — see
|
|
1947
|
+
* {@link findCommandCodeChromeStart}.
|
|
1948
|
+
*/
|
|
1949
|
+
exports.COMMAND_CODE_PROMPT_PATTERN = /^❯(\s*$|\s+\S)/m;
|
|
1950
|
+
/**
|
|
1951
|
+
* Command Code separator pattern (Issue #2250).
|
|
1952
|
+
*
|
|
1953
|
+
* Full-pane runs of U+2500 fence the composer above and below, and one more is
|
|
1954
|
+
* drawn above a permission dialog. Measured at 200 columns on every fixture in
|
|
1955
|
+
* `tests/fixtures/command-code-live-2250/`.
|
|
1956
|
+
*/
|
|
1957
|
+
exports.COMMAND_CODE_SEPARATOR_PATTERN = /^─{10,}$/m;
|
|
1958
|
+
/**
|
|
1959
|
+
* Command Code status-line "esc to interrupt" hint (Issue #2250).
|
|
1960
|
+
*
|
|
1961
|
+
* The `Status` component renders `esc to interrupt • <elapsed> • ↓ <tokens>`
|
|
1962
|
+
* only in its `"all"` layout, i.e. at a terminal width of 72 columns or more
|
|
1963
|
+
* (read off the bundle's `layoutMode` ladder; CommandMate panes are 200 wide, so
|
|
1964
|
+
* production always takes that branch). Below 42 columns the whole tail is
|
|
1965
|
+
* dropped and only the spinner + verb remain — which is why
|
|
1966
|
+
* {@link COMMAND_CODE_THINKING_PATTERN} keeps the spinner branch as well.
|
|
1967
|
+
*/
|
|
1968
|
+
exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN = /esc to interrupt/;
|
|
1969
|
+
/**
|
|
1970
|
+
* Command Code thinking/processing pattern (Issue #2250).
|
|
1971
|
+
*
|
|
1972
|
+
* Three measured alternatives:
|
|
1973
|
+
*
|
|
1974
|
+
* 1. the status row — a spinner glyph, then a single word ending in `…`
|
|
1975
|
+
* (`⌘ Planning…`, `· Synthesizing…`; the bundle's verb table is 74
|
|
1976
|
+
* single-word entries, all capitalised, but the class is left case-agnostic
|
|
1977
|
+
* because the `status` prop is not restricted to that table). Anchored at
|
|
1978
|
+
* the start of the line with only leading spaces allowed, so the `·` in the
|
|
1979
|
+
* banner's
|
|
1980
|
+
* `# models: … · taste-1` row and in the idle footer's
|
|
1981
|
+
* `? for shortcuts · taste on` cannot reach it;
|
|
1982
|
+
* 2. `✻ Thinking…` — the reasoning block's header WHILE it streams. It becomes
|
|
1983
|
+
* `✻ Thought for 1 second [ctrl+o to expand]` once the block is closed, and
|
|
1984
|
+
* that past-tense form must NOT match: it sits in the transcript of every
|
|
1985
|
+
* finished turn (`turn-version.txt`);
|
|
1986
|
+
* 3. {@link COMMAND_CODE_INTERRUPT_HINT_PATTERN}, unanchored, for the same
|
|
1987
|
+
* reason claude's pattern carries it.
|
|
1988
|
+
*/
|
|
1989
|
+
exports.COMMAND_CODE_THINKING_PATTERN = new RegExp(`^[^\\S\\n]*[${exports.COMMAND_CODE_SPINNER_CHARS.join('')}][^\\S\\n]+[A-Za-z]+…` +
|
|
1990
|
+
`|^[^\\S\\n]*✻ Thinking…` +
|
|
1991
|
+
`|${exports.COMMAND_CODE_INTERRUPT_HINT_PATTERN.source}`, 'm');
|
|
1992
|
+
/**
|
|
1993
|
+
* Command Code assistant-message marker (Issue #2250).
|
|
1994
|
+
*
|
|
1995
|
+
* `⠶` (U+2836) at column 0, one space, then the reply. Fixed, not a spinner
|
|
1996
|
+
* frame: the bundle declares it as `Ct() ? "⠶" : "#"`, i.e. one constant with an
|
|
1997
|
+
* ASCII fallback for terminals without unicode support. That answers 親 Issue
|
|
1998
|
+
* #2249's 未確定事項 1 — the glyph does not rotate — and it is also why the `#`
|
|
1999
|
+
* fallback is deliberately NOT matched here: on such a terminal it is
|
|
2000
|
+
* indistinguishable from the `# Command Code v1.40.1` banner rows.
|
|
2001
|
+
*
|
|
2002
|
+
* Continuation rows of a multi-line reply are indented by two spaces (the marker
|
|
2003
|
+
* is one column wide and the body box carries `marginLeft: 1`).
|
|
2004
|
+
*/
|
|
2005
|
+
exports.COMMAND_CODE_RESPONSE_MARKER_PATTERN = /^⠶(?:\s|$)/;
|
|
2006
|
+
/**
|
|
2007
|
+
* Command Code turn-completion marker (Issue #2250).
|
|
2008
|
+
*
|
|
2009
|
+
* **Advisory only — never require it to declare a turn finished.** Two measured
|
|
2010
|
+
* reasons: `WorkedDurationNote` renders nothing for a turn under 1000 ms, and
|
|
2011
|
+
* the row belongs to the live turn's UI rather than to the transcript — it is
|
|
2012
|
+
* present in `turn-version.txt` and GONE from `dialog-create-file.txt`, which is
|
|
2013
|
+
* the same pane one prompt later.
|
|
2014
|
+
*/
|
|
2015
|
+
exports.COMMAND_CODE_COMPLETION_PATTERN = /^[^\S\n]*✻ Worked for /m;
|
|
2016
|
+
/**
|
|
2017
|
+
* Command Code footer mode indicator (Issue #2250).
|
|
2018
|
+
*
|
|
2019
|
+
* The row under the composer's closing rule. `? for shortcuts` is only the
|
|
2020
|
+
* DEFAULT-mode spelling: the bundle's `ModeIndicator` swaps it for a mode banner
|
|
2021
|
+
* in the other four permission modes, so a rule that keys on `? for shortcuts`
|
|
2022
|
+
* alone would stop recognising an idle pane the moment the operator pressed
|
|
2023
|
+
* shift+tab. All five spellings are listed.
|
|
2024
|
+
*/
|
|
2025
|
+
exports.COMMAND_CODE_MODE_INDICATOR_PATTERN = /\?\s+for\s+shortcuts|»\s+accept edits on|»\s+permission bypass on|»\s+don't-ask on|^[^\S\n]*plan mode\s/m;
|
|
2026
|
+
/**
|
|
2027
|
+
* Command Code startup banner rows (Issue #2250).
|
|
2028
|
+
*
|
|
2029
|
+
* The three-row header under the block-art logo — `# Command Code v1.40.1`,
|
|
2030
|
+
* `# models: …`, `# <cwd>` — plus the logo itself.
|
|
2031
|
+
*
|
|
2032
|
+
* The version row matches the tool's own NAME and version together, which is the
|
|
2033
|
+
* shape #2247 had to retreat to on claude: a bare `v\d+\.\d+` matched any reply
|
|
2034
|
+
* that mentioned a release, and the turn was silently dropped. Nothing here
|
|
2035
|
+
* matches a bare version string, a `│` table glyph, or a `Tip:` line.
|
|
2036
|
+
*/
|
|
2037
|
+
exports.COMMAND_CODE_BANNER_PATTERNS = [
|
|
2038
|
+
/^#\s+Command Code v\d/, // Name + version, together
|
|
2039
|
+
/^#\s+models:\s/, // Model line
|
|
2040
|
+
/^#\s+[~/]/, // Working-directory line
|
|
2041
|
+
/^[^\S\n]*[█▀▄▌▐]{3,}/, // Block-art logo rows
|
|
2042
|
+
];
|
|
2043
|
+
/**
|
|
2044
|
+
* Command Code hook notice row (Issue #2250).
|
|
2045
|
+
*
|
|
2046
|
+
* `◼ Ran 1 session start hook` — emitted into the transcript when SessionStart
|
|
2047
|
+
* hooks fire, so it lands ABOVE the first user echo and is chrome, not a reply.
|
|
2048
|
+
* Measured on a hooks-enabled 1.40.1 pane while capturing #2249's evidence.
|
|
2049
|
+
* Command Code's hook wiring itself is Phase B (#2251); this row only has to be
|
|
2050
|
+
* kept out of History.
|
|
2051
|
+
*/
|
|
2052
|
+
exports.COMMAND_CODE_HOOK_NOTICE_PATTERN = /^[^\S\n]*◼\s+Ran\s+\d+\s+.*hooks?\b/;
|
|
2053
|
+
/** How far above the last row Command Code's footer row may sit. */
|
|
2054
|
+
const COMMAND_CODE_FOOTER_MAX_ROWS = 4;
|
|
2055
|
+
/** How many rows the composer may span before the block stops looking like chrome. */
|
|
2056
|
+
const COMMAND_CODE_INPUT_BOX_MAX_ROWS = 40;
|
|
2057
|
+
/**
|
|
2058
|
+
* Locate the start of Command Code's bottom-pinned chrome within a captured pane.
|
|
2059
|
+
*
|
|
2060
|
+
* Command Code is inline-rendered, so its transcript grows downwards and the
|
|
2061
|
+
* last four rows of a settled pane are always the same four (measured on
|
|
2062
|
+
* `boot-idle.txt`, `turn-version.txt` and `turn-tool-write.txt`):
|
|
2063
|
+
*
|
|
2064
|
+
* ```text
|
|
2065
|
+
* ──────────────────── ← opening rule
|
|
2066
|
+
* ❯ Ask your question… ← composer (one row per wrapped line)
|
|
2067
|
+
* ──────────────────── ← closing rule
|
|
2068
|
+
* ? for shortcuts · taste on
|
|
2069
|
+
* ```
|
|
2070
|
+
*
|
|
2071
|
+
* Everything from the opening rule down is terminal furniture. Two things go
|
|
2072
|
+
* wrong if it reaches the extractor, and both are regressions this repository
|
|
2073
|
+
* has already paid for once: the composer's placeholder is drawn with the same
|
|
2074
|
+
* `❯ <text>` shape as a transcript echo, so the turn anchor lands on the FOOTER
|
|
2075
|
+
* and the reply extracts as empty (#1289); and the footer row is repainted while
|
|
2076
|
+
* the pane sits idle, so keeping it re-hashes the saved response on every poll
|
|
2077
|
+
* tick (#1268 / #1289).
|
|
2078
|
+
*
|
|
2079
|
+
* Structural, like the three readers next to it, and for the reason spelled out
|
|
2080
|
+
* on `findClaudeChromeStart`: the hint strings belong to Command Code and a rule
|
|
2081
|
+
* that matches them stops working the moment they are reworded. `-1` is the
|
|
2082
|
+
* honest answer for a frame with no composer at all — while a permission dialog
|
|
2083
|
+
* is up the whole block is replaced by the dialog, which the caller resolves on
|
|
2084
|
+
* the prompt path instead.
|
|
2085
|
+
*
|
|
2086
|
+
* @param lines - Captured pane lines, ANSI-bearing or not; trailing blanks tolerated
|
|
2087
|
+
* @returns Index of the opening rule, or -1 when no composer block is present
|
|
2088
|
+
*/
|
|
2089
|
+
function findCommandCodeChromeStart(lines) {
|
|
2090
|
+
const isSeparator = (line) => /^─{10,}$/.test((0, ansi_1.stripAnsi)(line ?? '').trimEnd());
|
|
2091
|
+
let lastRow = lines.length - 1;
|
|
2092
|
+
while (lastRow >= 0 && lines[lastRow].trim() === '')
|
|
2093
|
+
lastRow--;
|
|
2094
|
+
if (lastRow < 0)
|
|
2095
|
+
return -1;
|
|
2096
|
+
// The closing rule sits just above the mode-indicator row.
|
|
2097
|
+
let closingSeparator = -1;
|
|
2098
|
+
for (let i = lastRow; i >= Math.max(0, lastRow - COMMAND_CODE_FOOTER_MAX_ROWS); i--) {
|
|
2099
|
+
if (isSeparator(lines[i])) {
|
|
2100
|
+
closingSeparator = i;
|
|
2101
|
+
break;
|
|
2102
|
+
}
|
|
2103
|
+
}
|
|
2104
|
+
if (closingSeparator < 0)
|
|
2105
|
+
return -1;
|
|
2106
|
+
// Walk up over the composer rows to the opening rule.
|
|
2107
|
+
let openingSeparator = -1;
|
|
2108
|
+
for (let i = closingSeparator - 1; i >= Math.max(0, closingSeparator - COMMAND_CODE_INPUT_BOX_MAX_ROWS); i--) {
|
|
2109
|
+
if (isSeparator(lines[i])) {
|
|
2110
|
+
openingSeparator = i;
|
|
2111
|
+
break;
|
|
2112
|
+
}
|
|
2113
|
+
}
|
|
2114
|
+
if (openingSeparator < 0)
|
|
2115
|
+
return -1;
|
|
2116
|
+
// Confirm the fenced rows are the composer and not a reply that happens to
|
|
2117
|
+
// contain two horizontal rules.
|
|
2118
|
+
if (!/^❯/.test((0, ansi_1.stripAnsi)(lines[openingSeparator + 1] ?? '')))
|
|
2119
|
+
return -1;
|
|
2120
|
+
return openingSeparator;
|
|
2121
|
+
}
|
|
2122
|
+
/**
|
|
2123
|
+
* Command Code skip patterns for response cleaning (Issue #2250).
|
|
2124
|
+
*
|
|
2125
|
+
* The dedicated cleaner Issue #2250 item 8 asks for: the startup banner, the
|
|
2126
|
+
* hook notice, the reasoning and turn summaries (`✻ Thought for` / `✻ Worked
|
|
2127
|
+
* for`), the composer, the rules and the footer.
|
|
2128
|
+
*
|
|
2129
|
+
* Nothing here touches the reply body or a tool block: `⠶ <text>`, ` WRITE
|
|
2130
|
+
* [probe.txt]`, ` └ Created probe.txt (1 line)` and ` 1 │ hello` all
|
|
2131
|
+
* survive (`turn-tool-write.txt`). In particular there is no `^\s*│` rule — the
|
|
2132
|
+
* one codex carries — because Command Code renders file previews with it.
|
|
2133
|
+
*/
|
|
2134
|
+
exports.COMMAND_CODE_SKIP_PATTERNS = [
|
|
2135
|
+
/^─{10,}$/, // Composer rules and the dialog's rule
|
|
2136
|
+
/^❯\s*$/, // Bare composer row
|
|
2137
|
+
/^❯\s+Ask your question\.\.\./, // Composer placeholder
|
|
2138
|
+
exports.COMMAND_CODE_MODE_INDICATOR_PATTERN, // Footer mode indicator
|
|
2139
|
+
exports.COMMAND_CODE_THINKING_PATTERN, // Status row
|
|
2140
|
+
/^[^\S\n]*✻\s+(?:Worked|Thought)\s+for\b/, // Turn / reasoning summaries
|
|
2141
|
+
exports.COMMAND_CODE_HOOK_NOTICE_PATTERN, // "◼ Ran N session start hook"
|
|
2142
|
+
...exports.COMMAND_CODE_BANNER_PATTERNS, // Startup banner
|
|
2143
|
+
exports.PASTED_TEXT_PATTERN, // [Pasted text #N +XX lines]
|
|
2144
|
+
];
|
|
1728
2145
|
/**
|
|
1729
2146
|
* Detect if CLI tool is showing "thinking" indicator
|
|
1730
2147
|
*/
|
|
@@ -1754,6 +2171,9 @@ function detectThinking(cliToolId, content) {
|
|
|
1754
2171
|
case 'antigravity':
|
|
1755
2172
|
result = exports.ANTIGRAVITY_THINKING_PATTERN.test(content);
|
|
1756
2173
|
break;
|
|
2174
|
+
case 'command-code':
|
|
2175
|
+
result = exports.COMMAND_CODE_THINKING_PATTERN.test(content);
|
|
2176
|
+
break;
|
|
1757
2177
|
default:
|
|
1758
2178
|
result = exports.CLAUDE_THINKING_PATTERN.test(content);
|
|
1759
2179
|
}
|
|
@@ -1859,6 +2279,19 @@ function getCliToolPatterns(cliToolId) {
|
|
|
1859
2279
|
thinkingPattern: exports.ANTIGRAVITY_THINKING_PATTERN,
|
|
1860
2280
|
skipPatterns: [...exports.ANTIGRAVITY_SKIP_PATTERNS],
|
|
1861
2281
|
};
|
|
2282
|
+
// Issue #2250: Command Code's layout is claude-shaped (inline transcript,
|
|
2283
|
+
// `❯` composer fenced by two full-width rules) but the constants are its
|
|
2284
|
+
// own. Sharing claude's would import the exact defect #2247 had to undo --
|
|
2285
|
+
// claude's rules carry a startup-banner reading that keys on `v\d+\.\d+`
|
|
2286
|
+
// and `|`, and Command Code prints its version into a `# Command Code
|
|
2287
|
+
// v1.40.1` row on every launch.
|
|
2288
|
+
case 'command-code':
|
|
2289
|
+
return {
|
|
2290
|
+
promptPattern: exports.COMMAND_CODE_PROMPT_PATTERN,
|
|
2291
|
+
separatorPattern: exports.COMMAND_CODE_SEPARATOR_PATTERN,
|
|
2292
|
+
thinkingPattern: exports.COMMAND_CODE_THINKING_PATTERN,
|
|
2293
|
+
skipPatterns: [...exports.COMMAND_CODE_SKIP_PATTERNS],
|
|
2294
|
+
};
|
|
1862
2295
|
default:
|
|
1863
2296
|
// Default to Claude patterns
|
|
1864
2297
|
return getCliToolPatterns('claude');
|