commandmate 0.44.1 → 0.44.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +169 -169
- package/.next/app-path-routes-manifest.json +35 -35
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +0 -6
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +2 -2
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +2 -2
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +2 -2
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +2 -2
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -2
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -2
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +35 -35
- package/.next/server/chunks/1191.js +2 -2
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1559.js +2 -0
- package/.next/server/chunks/1789.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -0
- package/.next/server/chunks/2710.js +1 -1
- package/.next/server/chunks/2908.js +1 -0
- package/.next/server/chunks/2980.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3718.js +1 -1
- package/.next/server/chunks/4207.js +2 -2
- package/.next/server/chunks/450.js +1 -1
- package/.next/server/chunks/4672.js +5 -0
- package/.next/server/chunks/{9353.js → 4718.js} +2 -2
- package/.next/server/chunks/4837.js +14 -0
- package/.next/server/chunks/5048.js +1 -1
- package/.next/server/chunks/5209.js +1 -0
- package/.next/server/chunks/5595.js +1 -0
- package/.next/server/chunks/5625.js +25 -0
- package/.next/server/chunks/5845.js +1 -0
- package/.next/server/chunks/611.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +3 -3
- package/.next/server/chunks/7491.js +2 -2
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/850.js +1 -0
- package/.next/server/chunks/8543.js +1 -1
- package/.next/server/chunks/8728.js +3 -3
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8800.js +1 -1
- package/.next/server/chunks/8918.js +7 -7
- package/.next/server/chunks/9130.js +1 -5
- package/.next/server/chunks/9390.js +2 -3
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +6 -6
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
- package/.next/static/chunks/{2407-f1f258d4a1d92620.js → 2407-06d35bb1aa02de80.js} +1 -1
- package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
- package/.next/static/chunks/4727-5d695d71e3fdf97b.js +1 -0
- package/.next/static/chunks/{8165-3853772f6ae1299b.js → 8165-3525fb42f1b4976e.js} +1 -1
- package/.next/static/chunks/app/{layout-da66300cc20244ed.js → layout-0d1750b833f5cc3e.js} +1 -1
- package/.next/static/chunks/app/sessions/page-2af68c63211c751f.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
- package/.next/static/css/057f64a65726c439.css +1 -0
- package/.next/trace +13 -13
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +120 -119
- package/dist/cli/commands/attach.d.ts +94 -0
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +145 -7
- package/dist/cli/commands/auto-yes.js +1 -1
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +10 -13
- package/dist/cli/commands/command-target.d.ts +23 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -0
- package/dist/cli/commands/command-target.js +25 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +41 -2
- package/dist/cli/commands/message-dispatch.d.ts +36 -0
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -0
- package/dist/cli/commands/message-dispatch.js +63 -0
- package/dist/cli/commands/reply.d.ts.map +1 -1
- package/dist/cli/commands/reply.js +2 -5
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +3 -6
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +149 -146
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +608 -416
- package/dist/cli/types/api-responses.d.ts +174 -27
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/api-responses.js +4 -2
- package/dist/cli/utils/api-client.d.ts +25 -5
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +87 -55
- package/dist/cli/utils/server-url.d.ts +1 -0
- package/dist/cli/utils/server-url.d.ts.map +1 -1
- package/dist/cli/utils/server-url.js +7 -0
- package/dist/config/uat-isolation.d.ts +140 -0
- package/dist/config/uat-isolation.d.ts.map +1 -0
- package/dist/config/uat-isolation.js +246 -0
- package/dist/lib/global-state.d.ts +12 -0
- package/dist/lib/global-state.d.ts.map +1 -0
- package/dist/lib/global-state.js +16 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +33 -0
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -0
- package/dist/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/lib/session/prompt-view.d.ts +228 -0
- package/dist/lib/session/prompt-view.d.ts.map +1 -0
- package/dist/lib/session/prompt-view.js +290 -0
- package/dist/lib/session/status-evidence-type.d.ts +16 -0
- package/dist/lib/session/status-evidence-type.d.ts.map +1 -0
- package/dist/lib/session/status-evidence-type.js +2 -0
- package/dist/lib/tmux/legacy-session-alias.d.ts.map +1 -1
- package/dist/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/locales/en/worktree.json +3 -1
- package/dist/server/locales/ja/worktree.json +3 -1
- package/dist/server/server.js +5 -3
- package/dist/server/src/cli/types/api-responses.js +4 -2
- package/dist/server/src/config/cli-tool-timing-config.js +1 -6
- package/dist/server/src/config/uat-isolation.js +246 -0
- package/dist/server/src/lib/assistant-response-saver.js +62 -3
- package/dist/server/src/lib/auto-yes-lifecycle.js +139 -0
- package/dist/server/src/lib/auto-yes-poller.js +465 -160
- package/dist/server/src/lib/auto-yes-state.js +2 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +39 -80
- package/dist/server/src/lib/cli-tools/base.js +151 -0
- package/dist/server/src/lib/cli-tools/codex.js +44 -80
- package/dist/server/src/lib/cli-tools/command-code.js +24 -56
- package/dist/server/src/lib/cli-tools/copilot.js +25 -67
- package/dist/server/src/lib/cli-tools/direct-input.js +8 -0
- package/dist/server/src/lib/cli-tools/gemini.js +23 -73
- package/dist/server/src/lib/cli-tools/opencode-pane-width.js +53 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +9 -7
- package/dist/server/src/lib/cli-tools/opencode.js +21 -85
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +127 -4
- package/dist/server/src/lib/cli-tools/vibe-local.js +21 -66
- package/dist/server/src/lib/detection/cli-patterns.js +374 -3047
- package/dist/server/src/lib/detection/idle-evidence-observation.js +2 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +7 -32
- package/dist/server/src/lib/detection/prompt-detector.js +2 -35
- package/dist/server/src/lib/detection/selection-shape-patterns.js +69 -0
- package/dist/server/src/lib/detection/selection-shape.js +32 -520
- package/dist/server/src/lib/detection/shared/pasted-text.js +41 -0
- package/dist/server/src/lib/detection/shared/shell-pane-command.js +16 -0
- package/dist/server/src/lib/detection/shared/strip-box-drawing.js +25 -0
- package/dist/server/src/lib/detection/status-detector.js +1 -1
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +12 -60
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
- package/dist/server/src/lib/detection/tools/antigravity/live-region.js +39 -0
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +11 -17
- package/dist/server/src/lib/detection/tools/claude/live-region.js +26 -0
- package/dist/server/src/lib/detection/tools/claude/patterns.js +264 -4
- package/dist/server/src/lib/detection/tools/claude/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +1 -1
- package/dist/server/src/lib/detection/tools/codex/detect.js +71 -130
- package/dist/server/src/lib/detection/tools/codex/live-region.js +104 -0
- package/dist/server/src/lib/detection/tools/codex/patterns.js +855 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/command-code/detect.js +19 -50
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
- package/dist/server/src/lib/detection/tools/command-code/live-region.js +36 -0
- package/dist/server/src/lib/detection/tools/command-code/patterns.js +234 -0
- package/dist/server/src/lib/detection/tools/command-code/selection-shape.js +461 -0
- package/dist/server/src/lib/detection/tools/context-above.js +20 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +13 -35
- package/dist/server/src/lib/detection/tools/copilot/live-region.js +52 -0
- package/dist/server/src/lib/detection/tools/copilot/patterns.js +640 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +2 -10
- package/dist/server/src/lib/detection/tools/frame.js +36 -2
- package/dist/server/src/lib/detection/tools/gemini/patterns.js +29 -0
- package/dist/server/src/lib/detection/tools/live-region-specs.js +31 -0
- package/dist/server/src/lib/detection/tools/live-region.js +204 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +11 -49
- package/dist/server/src/lib/detection/tools/opencode/live-region.js +24 -0
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
- package/dist/server/src/lib/detection/tools/opencode-gutter-live-region.js +72 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +10 -42
- package/dist/server/src/lib/detection/tools/opencode-v2/live-region.js +24 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +31 -50
- package/dist/server/src/lib/detection/tools/verdicts.js +59 -0
- package/dist/server/src/lib/detection/tools/vibe-local/patterns.js +20 -0
- package/dist/server/src/lib/detection/truncate-raw-content.js +38 -0
- package/dist/server/src/lib/detection/turn-abandoned.js +66 -0
- package/dist/server/src/lib/detection/unclassified-frame-tracker.js +2 -2
- package/dist/server/src/lib/global-state.js +16 -0
- package/dist/server/src/lib/hooks/agent-session-telemetry.js +4 -6
- package/dist/server/src/lib/hooks/permission-decision-state.js +2 -2
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +11 -76
- package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +63 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +16 -0
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +3 -12
- package/dist/server/src/lib/hooks/sources/claude/history.js +17 -156
- package/dist/server/src/lib/hooks/sources/claude/queued-notice.js +53 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +33 -3
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/codex/history.js +11 -74
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +147 -11
- package/dist/server/src/lib/hooks/sources/codex/relay-install.js +64 -21
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +5 -15
- package/dist/server/src/lib/hooks/sources/command-code/history.js +20 -121
- package/dist/server/src/lib/hooks/sources/command-code/transcript.js +3 -13
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +161 -31
- package/dist/server/src/lib/hooks/sources/define-source.js +40 -55
- package/dist/server/src/lib/hooks/sources/event-mapper.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/diff.js +3 -4
- package/dist/server/src/lib/hooks/sources/opencode/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/launch-settings.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/payloads.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +4 -3
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +3 -16
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +5 -4
- package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +2 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +3 -7
- package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +2 -1
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +2 -1
- package/dist/server/src/lib/hooks/sources/registry.js +3 -2
- package/dist/server/src/lib/hooks/sources/transcript-history.js +262 -0
- package/dist/server/src/lib/hooks/sources/turn-body.js +31 -0
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +2 -2
- package/dist/server/src/lib/polling/antigravity-permission-receipts.js +2 -2
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +16 -4
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +142 -0
- package/dist/server/src/lib/polling/auto-yes-enter-fallback.js +187 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +9 -3
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +2 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -2
- package/dist/server/src/lib/polling/pending-scraped-response.js +190 -0
- package/dist/server/src/lib/polling/prompt-dedup-state.js +2 -2
- package/dist/server/src/lib/polling/prompt-dedup.js +2 -2
- package/dist/server/src/lib/polling/response-checker-dialog-gate.js +95 -0
- package/dist/server/src/lib/polling/response-checker-extraction-result.js +50 -0
- package/dist/server/src/lib/polling/response-checker-extraction-steps.js +670 -0
- package/dist/server/src/lib/polling/response-checker.js +666 -1162
- package/dist/server/src/lib/polling/response-dedup.js +3 -4
- package/dist/server/src/lib/polling/response-poller-constants.js +17 -0
- package/dist/server/src/lib/polling/response-poller-core.js +54 -20
- package/dist/server/src/lib/polling/startup-screen.js +142 -0
- package/dist/server/src/lib/polling/structured-history-gate.js +3 -2
- package/dist/server/src/lib/prompt-answer-semantic.js +178 -0
- package/dist/server/src/lib/prompt-answer-sender.js +6 -5
- package/dist/server/src/lib/push/failure-episode-state.js +2 -2
- package/dist/server/src/lib/push/notification-dedup.js +3 -4
- package/dist/server/src/lib/push/prompt-card-state.js +2 -2
- package/dist/server/src/lib/push/waiting-push-notifier.js +3 -4
- package/dist/server/src/lib/realtime/publisher-registry.js +3 -2
- package/dist/server/src/lib/realtime/terminal-broadcast.js +38 -2
- package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
- package/dist/server/src/lib/relay/relay-delivery.js +6 -2
- package/dist/server/src/lib/relay/relay-readiness.js +38 -1
- package/dist/server/src/lib/relay/relay-triggers.js +9 -0
- package/dist/server/src/lib/resource-cleanup.js +6 -4
- package/dist/server/src/lib/response-cleaner.js +24 -1
- package/dist/server/src/lib/response-extractor.js +16 -0
- package/dist/server/src/lib/schedule-manager.js +8 -10
- package/dist/server/src/lib/session/agent-event-ask-user-question.js +168 -0
- package/dist/server/src/lib/session/agent-event-awaiting-instruction.js +104 -0
- package/dist/server/src/lib/session/agent-event-dedup.js +539 -0
- package/dist/server/src/lib/session/agent-event-model.js +562 -0
- package/dist/server/src/lib/session/agent-event-record.js +10 -0
- package/dist/server/src/lib/session/agent-event-state.js +106 -1854
- package/dist/server/src/lib/session/agent-event-structured-state.js +109 -0
- package/dist/server/src/lib/session/agent-event-turn.js +811 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -2
- package/dist/server/src/lib/session/chat-turn-progress.js +322 -0
- package/dist/server/src/lib/session/claude-executor.js +45 -5
- package/dist/server/src/lib/session/claude-session.js +21 -65
- package/dist/server/src/lib/session/cli-session.js +17 -0
- package/dist/server/src/lib/session/current-output-builder.js +454 -1103
- package/dist/server/src/lib/session/current-output-history-writers.js +255 -0
- package/dist/server/src/lib/session/current-output-types.js +9 -0
- package/dist/server/src/lib/session/detection-divergence.js +55 -0
- package/dist/server/src/lib/session/global-session-constants.js +2 -13
- package/dist/server/src/lib/session/hook-turn-hold.js +102 -0
- package/dist/server/src/lib/session/layer-disagreement.js +2 -2
- package/dist/server/src/lib/session/opencode-session-store.js +2 -1
- package/dist/server/src/lib/session/prompt-view.js +290 -0
- package/dist/server/src/lib/session/prompt-waiting-composition.js +35 -0
- package/dist/server/src/lib/session/provisional-turn.js +3 -1
- package/dist/server/src/lib/session/send-user-message.js +1 -1
- package/dist/server/src/lib/session/session-starting-state.js +4 -6
- package/dist/server/src/lib/session/status-evidence-type.js +2 -0
- package/dist/server/src/lib/session/status-evidence.js +2 -2
- package/dist/server/src/lib/session/structured-status-merge.js +335 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +3 -4
- package/dist/server/src/lib/session/waiting-kind.js +3 -0
- package/dist/server/src/lib/session-cleanup.js +6 -8
- package/dist/server/src/lib/skills/install-plan.js +2 -1
- package/dist/server/src/lib/skills/snapshot-store.js +2 -2
- package/dist/server/src/lib/skills/uninstall-plan.js +2 -2
- package/dist/server/src/lib/timer-manager.js +6 -8
- package/dist/server/src/lib/tmux/geometry-delegation.js +3 -4
- package/dist/server/src/lib/tmux/legacy-session-alias.js +2 -1
- package/dist/server/src/lib/tmux/session-hooks.js +2 -1
- package/dist/server/src/lib/tmux/session-status-options.js +3 -3
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +3 -2
- package/dist/server/src/lib/tmux/tmux.js +33 -59
- package/dist/server/src/lib/tui-accumulator.js +2 -2
- package/dist/server/src/lib/version-checker.js +6 -6
- package/dist/server/src/lib/ws-server.js +47 -11
- package/docs/en/user-guide/webapp-guide.md +27 -3
- package/package.json +1 -1
- package/release-notes/0.44.2.json +33 -0
- package/release-notes/0.44.3.json +82 -0
- package/scripts/hooks/cmate-agent-event.sh +18 -0
- package/.next/server/chunks/1068.js +0 -1
- package/.next/server/chunks/434.js +0 -1
- package/.next/server/chunks/5775.js +0 -1
- package/.next/server/chunks/6474.js +0 -14
- package/.next/server/chunks/650.js +0 -1
- package/.next/server/chunks/6661.js +0 -1
- package/.next/server/chunks/8583.js +0 -1
- package/.next/server/chunks/964.js +0 -1
- package/.next/server/chunks/967.js +0 -1
- package/.next/server/chunks/9882.js +0 -25
- package/.next/static/chunks/591-308072f285c34787.js +0 -1
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +0 -1
- package/.next/static/css/38070d879efa1371.css +0 -1
- package/dist/server/src/lib/cli-tools/index.js +0 -41
- package/dist/server/src/lib/polling/global-session-poller.js +0 -140
- /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
- /package/.next/static/{57lOiz8zSEHdw97XIm0af → tWwHQzmvc-rv9KKUtDWfQ}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,640 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copilot pattern constants and helpers moved out of `../../cli-patterns.ts`
|
|
4
|
+
* (Issue #3217). `cli-patterns.ts` re-exports every public name.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
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 = 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 = void 0;
|
|
8
|
+
exports.readCopilotStatusBar = readCopilotStatusBar;
|
|
9
|
+
exports.findCopilotChromeStart = findCopilotChromeStart;
|
|
10
|
+
exports.isCopilotSelectionFrame = isCopilotSelectionFrame;
|
|
11
|
+
exports.isCopilotFolderTrustDialog = isCopilotFolderTrustDialog;
|
|
12
|
+
const ansi_1 = require("../../ansi");
|
|
13
|
+
const pasted_text_1 = require("../../shared/pasted-text");
|
|
14
|
+
const strip_box_drawing_1 = require("../../shared/strip-box-drawing");
|
|
15
|
+
/**
|
|
16
|
+
* Copilot prompt pattern (Issue #545)
|
|
17
|
+
* Copilot CLI shows "❯" followed by cursor/text hint:
|
|
18
|
+
* - "❯ [7m [0mType @ to mention files, # for issues/PRs, / for commands, or ? for"
|
|
19
|
+
* - "❯ " (bare prompt)
|
|
20
|
+
* Also matches "? " prefix for question prompts.
|
|
21
|
+
*/
|
|
22
|
+
exports.COPILOT_PROMPT_PATTERN = /^[>❯]\s|^\?\s+/m;
|
|
23
|
+
/**
|
|
24
|
+
* Copilot thinking/processing pattern (Issue #545)
|
|
25
|
+
* Copilot CLI shows various action indicators during processing:
|
|
26
|
+
* - "Exploring repo (Esc to cancel · 2.3 KiB)"
|
|
27
|
+
* - "Reasoning ■■■ medium"
|
|
28
|
+
* - "... Thinking"
|
|
29
|
+
* - Tool use: "● Read package.json" / "◉ Mapping structure (Esc to cancel · 8.4 KiB)"
|
|
30
|
+
* Note: "Esc to cancel" alone is not used because trust dialog footer also contains it.
|
|
31
|
+
* Instead, match the action pattern with parenthesized context: "(Esc to cancel ·"
|
|
32
|
+
* Braille spinner characters (U+2800-U+28FF) are also checked.
|
|
33
|
+
*
|
|
34
|
+
* Issue #1897: the bare words `Generating` and `Processing` were dropped. This
|
|
35
|
+
* constant is also a member of {@link COPILOT_SKIP_PATTERNS}, so every
|
|
36
|
+
* alternative here doubles as a "delete this line from the saved response" rule
|
|
37
|
+
* and as the tail-window liveness test in `extractResponse`. Those two words are
|
|
38
|
+
* ordinary English -- a reply whose last line reads "Processing complete." had
|
|
39
|
+
* the line deleted AND pinned the turn to "still thinking" for as long as it was
|
|
40
|
+
* on screen, so the response was never saved at all. The remaining alternatives
|
|
41
|
+
* are all glyph- or punctuation-shaped and cannot occur in prose by accident.
|
|
42
|
+
* Nothing is lost as a running signal either: #1885 measured 0 matches for this
|
|
43
|
+
* whole pattern across 44 live generating frames of copilot 1.0.80, whose turn
|
|
44
|
+
* state is read from the status bar by {@link readCopilotStatusBar} instead.
|
|
45
|
+
*/
|
|
46
|
+
exports.COPILOT_THINKING_PATTERN = /[\u2800-\u28FF]|\(Esc to cancel|Reasoning\s+[■▪▮]|\.\.\.\s+Thinking/;
|
|
47
|
+
/**
|
|
48
|
+
* Copilot CLI's bottom status bar while a turn is in flight (Issue #1885).
|
|
49
|
+
*
|
|
50
|
+
* Measured on copilot 1.0.80 at the production 200x1000 geometry
|
|
51
|
+
* (`tests/unit/lib/detection/fixtures/copilot-live-1885/`). The bar is the
|
|
52
|
+
* bottom row of the pane and reads, across 44 captured generating frames:
|
|
53
|
+
*
|
|
54
|
+
* " ● Working esc interrupt GPT-5.6 Terra"
|
|
55
|
+
* " ◉ Working · 1.5 KiB esc interrupt GPT-5.6 Terra"
|
|
56
|
+
*
|
|
57
|
+
* The leading glyph cycles through ● ◉ ◎ ○ and the byte counter appears only
|
|
58
|
+
* once the turn has produced output, so neither is anchored on. `esc interrupt`
|
|
59
|
+
* is the affordance hint copilot draws for as long as the turn can be
|
|
60
|
+
* interrupted -- it is on every generating frame and on every tool-execution
|
|
61
|
+
* frame -- which makes it the same signal opencode's
|
|
62
|
+
* {@link OPENCODE_PROCESSING_INDICATOR} rests on.
|
|
63
|
+
*
|
|
64
|
+
* It is matched against the STATUS BAR ROW ONLY, never a window
|
|
65
|
+
* (see {@link readCopilotStatusBar}). `status-vocabulary-in-response.txt` is a
|
|
66
|
+
* live frame where copilot was asked to print this vocabulary and answered
|
|
67
|
+
* " ● Working esc interrupt" as body text: a window match would have pinned that
|
|
68
|
+
* finished session to `running` for the rest of its life.
|
|
69
|
+
*
|
|
70
|
+
* No /g flag (S4-5: would make test() stateful). No quantifier over a
|
|
71
|
+
* character class that can match its neighbour (SEC4-001: ReDoS safe).
|
|
72
|
+
*/
|
|
73
|
+
exports.COPILOT_WORKING_STATUS_PATTERN = /\besc\s+interrupt\b/;
|
|
74
|
+
/**
|
|
75
|
+
* Copilot CLI's bottom status bar while no turn is running (Issue #1885).
|
|
76
|
+
*
|
|
77
|
+
* The same row as {@link COPILOT_WORKING_STATUS_PATTERN}, in the state copilot
|
|
78
|
+
* paints when it is NOT working:
|
|
79
|
+
*
|
|
80
|
+
* " ← open sidebar · / commands · ? help · tab next tab GPT-5.6 Terra"
|
|
81
|
+
*
|
|
82
|
+
* This is copilot's positive completion evidence under design rule D1
|
|
83
|
+
* (`docs/design/multi-agent-state-architecture.md` §4 D1 decision 1, item 2):
|
|
84
|
+
* the key-hint bar and the working bar are two renderings of one row, so seeing
|
|
85
|
+
* the hints is an affirmative observation that the turn is over -- not the
|
|
86
|
+
* absence of a busy marker somewhere on screen. The composer cannot carry that
|
|
87
|
+
* evidence on copilot: `❯` between its two full-width rules is drawn during
|
|
88
|
+
* generation too (measured on every frame of the running fixtures), which is
|
|
89
|
+
* exactly why the always-visible prompt used to win at step 3 of
|
|
90
|
+
* `detectSessionStatus` and report a generating session as ready.
|
|
91
|
+
*
|
|
92
|
+
* Two alternative spellings of one affordance, because copilot has reworded
|
|
93
|
+
* this row before: 1.0.80 shows "? help", and the pre-1.0.79 wording survives
|
|
94
|
+
* in {@link COPILOT_SKIP_PATTERNS} as "? for shortcuts". "/ commands" covers
|
|
95
|
+
* the slash-command hint independently, so a rewording of either half alone
|
|
96
|
+
* does not cost the tool its completion evidence.
|
|
97
|
+
*
|
|
98
|
+
* No /g flag (S4-5). Linear alternation, no nested quantifiers (SEC4-001).
|
|
99
|
+
*/
|
|
100
|
+
exports.COPILOT_IDLE_STATUS_PATTERN = /\/\s+commands\b|\?\s+(?:help\b|for\s+shortcuts\b)/;
|
|
101
|
+
/**
|
|
102
|
+
* Read copilot's bottom status bar out of a captured frame (Issue #1885).
|
|
103
|
+
*
|
|
104
|
+
* Takes the whole frame rather than a row so the positional anchor -- "the
|
|
105
|
+
* status bar is the bottom row of the pane" -- cannot be lost at a call site.
|
|
106
|
+
* The scan stops at the first non-blank row from the bottom: if that row is
|
|
107
|
+
* neither state, this returns null and the caller has no evidence, which is the
|
|
108
|
+
* D1-correct answer rather than a guess. Two measured frames rely on it:
|
|
109
|
+
*
|
|
110
|
+
* - a permission dialog replaces the whole bottom of the pane with its box, so
|
|
111
|
+
* the bottom row is `╰───…` and neither pattern matches. The dialog then
|
|
112
|
+
* reaches `detectPrompt` and is reported as `waiting`, unchanged.
|
|
113
|
+
* - the `/model` picker ends in its own footer
|
|
114
|
+
* ("↑/↓ to navigate · … · enter to select · esc to cancel"), which is not the
|
|
115
|
+
* status bar either -- so this reports nothing about it and leaves that
|
|
116
|
+
* screen to the selection-list branch (Issue #1895's subject).
|
|
117
|
+
*
|
|
118
|
+
* @param contentLines - Frame rows, ANSI already stripped, in pane order
|
|
119
|
+
* @returns The state the bottom row announces, or null when it announces neither
|
|
120
|
+
*/
|
|
121
|
+
function readCopilotStatusBar(contentLines) {
|
|
122
|
+
for (let i = contentLines.length - 1; i >= 0; i--) {
|
|
123
|
+
const row = contentLines[i];
|
|
124
|
+
if (row.trim() === '')
|
|
125
|
+
continue;
|
|
126
|
+
if (exports.COPILOT_WORKING_STATUS_PATTERN.test(row))
|
|
127
|
+
return 'working';
|
|
128
|
+
if (exports.COPILOT_IDLE_STATUS_PATTERN.test(row))
|
|
129
|
+
return 'idle';
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Copilot separator pattern (Issue #545)
|
|
136
|
+
* Placeholder - to be updated after Phase 1 TUI investigation.
|
|
137
|
+
*/
|
|
138
|
+
exports.COPILOT_SEPARATOR_PATTERN = /^─{10,}$/m;
|
|
139
|
+
/** How far above the bottom row copilot's closing rule may sit. */
|
|
140
|
+
const COPILOT_STATUS_BAR_MAX_ROWS = 2;
|
|
141
|
+
/** How many rows copilot's composer may span before the block stops looking like chrome. */
|
|
142
|
+
const COPILOT_COMPOSER_MAX_ROWS = 40;
|
|
143
|
+
/**
|
|
144
|
+
* One of the two rows that fence copilot's composer.
|
|
145
|
+
*
|
|
146
|
+
* Two renderings of one thing, because copilot redrew its composer between the
|
|
147
|
+
* builds this file is measured against (Issue #2269):
|
|
148
|
+
*
|
|
149
|
+
* - **1.0.80** fences it with a full-width horizontal rule, `─` to the pane's
|
|
150
|
+
* width, above and below.
|
|
151
|
+
* - **1.0.82** fences it with a half-block frame instead: `╻` (U+257B) followed
|
|
152
|
+
* by `▄` to the pane's width above, `╹` (U+2579) followed by `▀` below.
|
|
153
|
+
*
|
|
154
|
+
* The corner glyph is REQUIRED on the 1.0.82 forms and that is load-bearing, not
|
|
155
|
+
* decoration. 1.0.82 also boxes the echoed user prompt in the transcript between
|
|
156
|
+
* two dividers of the same half blocks — `tests/unit/lib/detection/fixtures/
|
|
157
|
+
* copilot-live-2269/turn-complete.txt` rows 10 and 12 — and those carry no
|
|
158
|
+
* corner. Accepting a bare `▄`/`▀` run here would let the newest echo's box be
|
|
159
|
+
* read as the composer, which would put `findCopilotChromeStart` ~985 rows too
|
|
160
|
+
* high and delete the reply along with the chrome.
|
|
161
|
+
*/
|
|
162
|
+
const COPILOT_RULE_ROW = /^(?:─{10,}|╻▄{10,}|╹▀{10,})$/;
|
|
163
|
+
/**
|
|
164
|
+
* copilot's composer glyph, at the pane's own indent.
|
|
165
|
+
*
|
|
166
|
+
* `>` is the legacy spelling, `❯` is 1.0.80's. 1.0.82 draws no prompt glyph in
|
|
167
|
+
* the composer at all: the row is the frame's left edge, `┃` (U+2503), and the
|
|
168
|
+
* operator's text follows it (`copilot-live-2269/boot-idle.txt` row 998 is the
|
|
169
|
+
* bare glyph on an empty composer). `┃` is safe to accept here even though the
|
|
170
|
+
* reasoning block's rows also start with a vertical — that one is `│` (U+2502,
|
|
171
|
+
* {@link COPILOT_BOX_ROW_PATTERN}) — and in any case this test is only ever
|
|
172
|
+
* applied to the single row between two fence rows, never to a window.
|
|
173
|
+
*/
|
|
174
|
+
const COPILOT_COMPOSER_GLYPH = /^ {0,2}[>❯┃]/;
|
|
175
|
+
/**
|
|
176
|
+
* Locate the start of copilot CLI's bottom-pinned chrome within a captured pane
|
|
177
|
+
* (Issue #1897).
|
|
178
|
+
*
|
|
179
|
+
* copilot 1.0.80 runs on the alternate screen and reserves the last five rows of
|
|
180
|
+
* the pane. Measured at the production 200x1000 geometry
|
|
181
|
+
* (`tests/unit/lib/detection/fixtures/copilot-live-1885/`), with the transcript
|
|
182
|
+
* ~970 rows above and nothing but padding in between:
|
|
183
|
+
*
|
|
184
|
+
* <cwd> [⎇ <branch>] Session: N AIC used
|
|
185
|
+
* ──────────────────── ← opening rule
|
|
186
|
+
* ❯ <composer>
|
|
187
|
+
* ──────────────────── ← closing rule
|
|
188
|
+
* ◉ Working · 1.5 KiB esc interrupt GPT-5.6 Terra ← status bar
|
|
189
|
+
*
|
|
190
|
+
* Issue #2269 re-measured the same five rows on 1.0.82, where the fence and the
|
|
191
|
+
* composer are drawn differently but the layout is unchanged:
|
|
192
|
+
*
|
|
193
|
+
* <cwd> Session: N AIC used
|
|
194
|
+
* ╻▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ← opening frame
|
|
195
|
+
* ┃<composer>
|
|
196
|
+
* ╹▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ← closing frame
|
|
197
|
+
* ← open sidebar · / commands · ? help · tab next tab GPT-5.6 Terra
|
|
198
|
+
*
|
|
199
|
+
* Both spellings live in {@link COPILOT_RULE_ROW} and
|
|
200
|
+
* {@link COPILOT_COMPOSER_GLYPH}; the search below is unchanged. Until they were
|
|
201
|
+
* added this function returned -1 on every 1.0.82 frame, `contentEnd` fell back
|
|
202
|
+
* to the whole pane, and the saved reply opened with 199 `▀` and ended with the
|
|
203
|
+
* `← open sidebar …` footer -- #2269's headline symptom.
|
|
204
|
+
*
|
|
205
|
+
* The boundary is found structurally -- closing rule, opening rule, composer
|
|
206
|
+
* glyph -- and never by matching the status bar's wording. That is the same
|
|
207
|
+
* reasoning {@link findClaudeChromeStart} records (#1289) plus the measurement
|
|
208
|
+
* behind {@link COPILOT_WORKING_STATUS_PATTERN}: copilot will print its own
|
|
209
|
+
* status-bar vocabulary as body text when asked to
|
|
210
|
+
* (`status-vocabulary-in-response.txt` holds ` ● Working esc interrupt` as a
|
|
211
|
+
* reply), so a vocabulary rule strong enough to delete the real bar also deletes
|
|
212
|
+
* that reply. Position is the only thing that separates them.
|
|
213
|
+
*
|
|
214
|
+
* Without this trim the bar is transcript as far as every consumer is concerned:
|
|
215
|
+
* it reached the TUI accumulator on every poll and was saved to History as the
|
|
216
|
+
* agent's answer (#1897's headline symptom, ` Working esc interrupt GPT-5.6
|
|
217
|
+
* Terra`), and its spinner glyph and byte counter change on every tick, so it
|
|
218
|
+
* also defeats the content dedup the alternate-screen tools rely on (#1268).
|
|
219
|
+
*
|
|
220
|
+
* @param lines - Captured pane rows, ANSI-bearing or not; trailing blanks tolerated
|
|
221
|
+
* @returns Index of the first chrome row, or -1 when the pane carries no chrome
|
|
222
|
+
* (a permission dialog draws its box over the whole bottom of the pane, so
|
|
223
|
+
* there is no composer and no bar -- those frames return -1 and are left to
|
|
224
|
+
* `detectPrompt`, exactly as {@link readCopilotStatusBar} leaves them)
|
|
225
|
+
*/
|
|
226
|
+
function findCopilotChromeStart(lines) {
|
|
227
|
+
const isRule = (line) => COPILOT_RULE_ROW.test((0, ansi_1.stripAnsi)(line).trim());
|
|
228
|
+
let lastRow = lines.length - 1;
|
|
229
|
+
while (lastRow >= 0 && (0, ansi_1.stripAnsi)(lines[lastRow]).trim() === '')
|
|
230
|
+
lastRow--;
|
|
231
|
+
if (lastRow < 0)
|
|
232
|
+
return -1;
|
|
233
|
+
let closingRule = -1;
|
|
234
|
+
for (let i = lastRow; i >= Math.max(0, lastRow - COPILOT_STATUS_BAR_MAX_ROWS); i--) {
|
|
235
|
+
if (isRule(lines[i])) {
|
|
236
|
+
closingRule = i;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (closingRule < 0)
|
|
241
|
+
return -1;
|
|
242
|
+
let openingRule = -1;
|
|
243
|
+
for (let i = closingRule - 1; i >= Math.max(0, closingRule - COPILOT_COMPOSER_MAX_ROWS); i--) {
|
|
244
|
+
if (isRule(lines[i])) {
|
|
245
|
+
openingRule = i;
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (openingRule < 0)
|
|
250
|
+
return -1;
|
|
251
|
+
// Confirm the fenced rows are the composer rather than a reply that happens to
|
|
252
|
+
// sit between two horizontal rules.
|
|
253
|
+
if (!COPILOT_COMPOSER_GLYPH.test((0, ansi_1.stripAnsi)(lines[openingRule + 1] ?? '')))
|
|
254
|
+
return -1;
|
|
255
|
+
// The row above the opening rule is copilot's cwd/branch/session header, which
|
|
256
|
+
// an overlay (the `/model` picker) replaces with a blank rather than with
|
|
257
|
+
// transcript -- measured on all five non-dialog fixtures.
|
|
258
|
+
return Math.max(0, openingRule - 1);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* A row copilot draws as part of a box or a collapsed reasoning block
|
|
262
|
+
* (Issue #1897).
|
|
263
|
+
*
|
|
264
|
+
* 1.0.80 renders the model's private reasoning as a `⌄ Thought for 41s` header
|
|
265
|
+
* followed by rows that each begin `│ `, and draws dialogs inside `╭─╮`/`╰─╯`
|
|
266
|
+
* frames. {@link COPILOT_SKIP_PATTERNS} already carries a `[╭╮╰╯│]` rule, but
|
|
267
|
+
* `normalizeCopilotLine` deletes every U+2500..U+257F glyph *before* the skip
|
|
268
|
+
* patterns are applied, so by the time that rule runs the row it is meant to
|
|
269
|
+
* catch reads as ordinary prose -- which is how the TUI accumulator came to save
|
|
270
|
+
* copilot's chain-of-thought as the reply. Matched against the ANSI-stripped row,
|
|
271
|
+
* before normalisation.
|
|
272
|
+
*
|
|
273
|
+
* `─` is deliberately absent: a rule row is {@link COPILOT_SEPARATOR_PATTERN}'s
|
|
274
|
+
* job, and `── heading ──` is content.
|
|
275
|
+
*/
|
|
276
|
+
exports.COPILOT_BOX_ROW_PATTERN = /^\s*[│└╰╭╮╯├┤┬┴┼]/;
|
|
277
|
+
/**
|
|
278
|
+
* copilot's collapsed-section header (Issue #1897).
|
|
279
|
+
*
|
|
280
|
+
* Measured on 1.0.80: `⌄ Thinking…` while the reasoning block is live, replaced
|
|
281
|
+
* by `⌄ Thought for 41s` once the turn moves on. Anchored on the `⌄` disclosure
|
|
282
|
+
* glyph rather than on the words, because "Thinking…" also occurs as body text
|
|
283
|
+
* -- `status-vocabulary-in-response.txt` contains exactly that row as a reply,
|
|
284
|
+
* and it must survive cleaning.
|
|
285
|
+
*/
|
|
286
|
+
exports.COPILOT_REASONING_HEADER_PATTERN = /^\s*⌄\s/;
|
|
287
|
+
/**
|
|
288
|
+
* copilot's echo of the operator's own prompt in the transcript (Issue #1897).
|
|
289
|
+
*
|
|
290
|
+
* 1.0.80 draws every transcript row at the pane's one-column indent -- ` ❯ Reply
|
|
291
|
+
* with exactly the word: pong` -- while the composer at the bottom of the pane is
|
|
292
|
+
* at column 0. The bare `^[>❯]` form therefore never matched the echo, so
|
|
293
|
+
* `resolveExtractionStartIndex`'s copilot branch found no anchor, fell back to
|
|
294
|
+
* line 0, and handed the launch banner to the cleaner as the turn's reply.
|
|
295
|
+
*
|
|
296
|
+
* Bounded to two leading spaces rather than `\s*` so a quoted `> …` line inside a
|
|
297
|
+
* reply cannot be mistaken for a new turn boundary.
|
|
298
|
+
*/
|
|
299
|
+
exports.COPILOT_USER_ECHO_PATTERN = /^ {0,2}[>❯]\s+\S/;
|
|
300
|
+
/**
|
|
301
|
+
* One of the half-block dividers copilot 1.0.82 boxes a transcript row with
|
|
302
|
+
* (Issue #2269).
|
|
303
|
+
*
|
|
304
|
+
* 1.0.80 drew the echoed prompt as a single bare ` ❯ <text>` row. 1.0.82 draws
|
|
305
|
+
* a full-width `▄` run above it and a full-width `▀` run below it
|
|
306
|
+
* (`copilot-live-2269/turn-complete.txt` rows 10 and 12):
|
|
307
|
+
*
|
|
308
|
+
* ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
|
|
309
|
+
* ❯ Reply with exactly the word: uat-run1 00:27
|
|
310
|
+
* ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
|
|
311
|
+
* ● uat-run1
|
|
312
|
+
*
|
|
313
|
+
* {@link COPILOT_SKIP_PATTERNS}' `/[█▘▝▖▗▔▄▌▐]/` rule already dropped the `▄`
|
|
314
|
+
* row. `▀` (U+2580) was not in that class, so the row BELOW the echo survived --
|
|
315
|
+
* and extraction starts one row past the echo, which made a wall of 199 `▀` the
|
|
316
|
+
* first line of every saved 1.0.82 reply.
|
|
317
|
+
*
|
|
318
|
+
* Deliberately not "add `▀` to that character class": this requires a run of ten
|
|
319
|
+
* or more and nothing else on the row, so a reply that happens to use a single
|
|
320
|
+
* half block as a glyph is untouched. The optional leading corner accepts the
|
|
321
|
+
* composer's own fence rows (`╻▄…` / `╹▀…`) as well, which is defence in depth
|
|
322
|
+
* only -- {@link findCopilotChromeStart} cuts those structurally, and this rule
|
|
323
|
+
* is what stops them reaching History if a future build moves the fence again.
|
|
324
|
+
*/
|
|
325
|
+
exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN = /^\s*[╻╹]?[▀▄]{10,}\s*$/;
|
|
326
|
+
/**
|
|
327
|
+
* The verbs copilot prints on a tool row, as a regex alternation source.
|
|
328
|
+
*
|
|
329
|
+
* One list, shared by {@link COPILOT_TOOL_ROW_PATTERN} here and by
|
|
330
|
+
* `COPILOT_TOOL_ACTION_PATTERN` in `response-cleaner.ts`: the two match the same
|
|
331
|
+
* vocabulary behind different markers, and a verb added to one and not the other
|
|
332
|
+
* is a leak nothing fails on.
|
|
333
|
+
*
|
|
334
|
+
* `Asked user` / `Asking user` are Issue #2269's addition. copilot answers a
|
|
335
|
+
* prompt it cannot act on by calling its ask-user tool, and the row it leaves in
|
|
336
|
+
* the transcript (`● Asked user What would you like me to help with?`, measured
|
|
337
|
+
* in `copilot-live-2269/turn-oneword-echo-askuser.txt`) was being saved as the
|
|
338
|
+
* agent's reply -- the "launch screen as the answer" the Issue reports.
|
|
339
|
+
*/
|
|
340
|
+
exports.COPILOT_TOOL_VERBS = 'Get|Read|Run|Search|Write|Edit|Delete|List|Create|Fetch|Explore|Execute|Install|Asked user|Asking user|Model changed to:';
|
|
341
|
+
/**
|
|
342
|
+
* copilot 1.0.82's tool row, whose marker is a file-type badge (Issue #2269).
|
|
343
|
+
*
|
|
344
|
+
* 1.0.80 drew every tool row as `● <Verb> …` and `COPILOT_TOOL_ACTION_PATTERN`
|
|
345
|
+
* reads exactly that. 1.0.82 puts a short badge for the file the tool touched in
|
|
346
|
+
* front of the verb instead, and only falls back to `●` for a type it has no
|
|
347
|
+
* badge for. Measured verbatim over
|
|
348
|
+
* `copilot-live-2269/turn-tool-badges.txt` and `turn-tool-rows.txt`:
|
|
349
|
+
*
|
|
350
|
+
* / Search "a.ts" 1 file found
|
|
351
|
+
* MD Read note.md L1:1 (1 line read)
|
|
352
|
+
* TS Read a.ts 1 line read
|
|
353
|
+
* PY Read c.py 1 line read
|
|
354
|
+
* {} Read b.json 1 line read
|
|
355
|
+
* ● Read d.txt 1 line read ← plain text keeps the 1.0.80 marker
|
|
356
|
+
*
|
|
357
|
+
* So the badge is `/`, `{}`, or two to four upper-case characters. Two is the
|
|
358
|
+
* floor on purpose: a one-character class would also match the pronoun in an
|
|
359
|
+
* English sentence ("I Read the file"), and no measured badge is one character.
|
|
360
|
+
* `●` is left to `COPILOT_TOOL_ACTION_PATTERN`, which is the rule that already
|
|
361
|
+
* owns it -- copilot's own prose is `● <text>` too (`● done`, `● 対象ファイルを
|
|
362
|
+
* 確認して内容を読み込みます。`), and only the verb list separates the two.
|
|
363
|
+
*
|
|
364
|
+
* The `$` badge is absent for the same reason: `$ Shell Print requested text 2
|
|
365
|
+
* lines…` opens a BLOCK whose command rows follow, which is
|
|
366
|
+
* `COPILOT_TOOL_INVOCATION_PATTERN`'s job, and `Shell` is not in the verb list
|
|
367
|
+
* anyway.
|
|
368
|
+
*
|
|
369
|
+
* No /g flag (S4-5: would make test() stateful). No quantifier nested inside
|
|
370
|
+
* another (SEC4-001: ReDoS safe).
|
|
371
|
+
*/
|
|
372
|
+
exports.COPILOT_TOOL_ROW_PATTERN = new RegExp(`^\\s*(?:\\/|\\{\\}|[A-Z][A-Z0-9+#]{1,3})\\s+(?:${exports.COPILOT_TOOL_VERBS})[\\s:]`);
|
|
373
|
+
/**
|
|
374
|
+
* A wrapped continuation of the copilot transcript row above it (Issue #1897).
|
|
375
|
+
*
|
|
376
|
+
* Marker rows (` ❯ `, ` ● `, ` $ `, ` ⌄ `) carry one leading space; the rows they
|
|
377
|
+
* wrap onto are indented further and carry no marker, and a blank row separates
|
|
378
|
+
* one block from the next (measured on 1.0.80 at 200x1000). Used to walk past the
|
|
379
|
+
* tail of a long *user* prompt so the extracted reply does not open with the
|
|
380
|
+
* second half of the operator's own question.
|
|
381
|
+
*/
|
|
382
|
+
exports.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN = /^ {2,}\S/;
|
|
383
|
+
/**
|
|
384
|
+
* Rows that only copilot's first-launch screen draws (Issue #1897).
|
|
385
|
+
*
|
|
386
|
+
* The launch screen is a complete, idle frame: the composer is drawn, the status
|
|
387
|
+
* bar shows key hints, and nothing about it says "no turn has happened yet". So
|
|
388
|
+
* `extractResponse` classified it as a finished response and History opened with
|
|
389
|
+
* the banner as the agent's first message -- before the operator's first prompt.
|
|
390
|
+
*
|
|
391
|
+
* These anchors are only ever consulted for a frame that carries no echoed user
|
|
392
|
+
* prompt at all (see the copilot banner guard in `extractResponse`), which is
|
|
393
|
+
* what keeps a reply that quotes any of this wording from being suppressed.
|
|
394
|
+
*/
|
|
395
|
+
exports.COPILOT_BOOT_BANNER_ANCHORS = [
|
|
396
|
+
/No copilot-instructions\.md found/,
|
|
397
|
+
/Copilot uses AI, so always check for mistakes\./,
|
|
398
|
+
/Copilot v\d[\w.]*\s+uses AI/,
|
|
399
|
+
/^\s*(?:●\s+)?GitHub Copilot\s+v\d/m,
|
|
400
|
+
/^\s*(?:●\s+)?Tip:\s*\//m,
|
|
401
|
+
/Describe a task to get started/,
|
|
402
|
+
/Prefer a visual workspace\?/,
|
|
403
|
+
// Issue #2269: copilot's greeting for a prompt it cannot act on. It arrives
|
|
404
|
+
// through the ask-user tool, so the row that reaches the transcript is
|
|
405
|
+
// `● Asked user Hi — what would you like to work on?` and the dialog's own
|
|
406
|
+
// body repeats the question. Both are chrome for a turn that produced no
|
|
407
|
+
// answer, and the operator saw the greeting saved as the agent's reply.
|
|
408
|
+
/what would you like to work on\?/i,
|
|
409
|
+
];
|
|
410
|
+
/**
|
|
411
|
+
* The key-hint footer copilot draws under a picker, matched one ROW at a time
|
|
412
|
+
* (Issue #547; rewritten against live 1.0.80 frames by Issue #1895).
|
|
413
|
+
*
|
|
414
|
+
* The pattern this replaced --
|
|
415
|
+
* `/Search\s+\w+\.\.\.|Select\s+Model|to (?:navigate|select).*Enter to (?:select|confirm)/`
|
|
416
|
+
* -- matched **none** of the eleven pickers 1.0.80 opens (measured; the frames
|
|
417
|
+
* are in `tests/unit/lib/detection/fixtures/copilot-picker-1895/`, and #1885 /
|
|
418
|
+
* #1886 / #1913 reached the same result independently). `/model` renders
|
|
419
|
+
* `❯ Search models…` with U+2026 rather than three periods, no picker carries
|
|
420
|
+
* the words `Select Model`, and every footer spells its verbs in lower case.
|
|
421
|
+
*
|
|
422
|
+
* What all eleven footers do share is the shape of a key-hint bar: `·`-separated
|
|
423
|
+
* hints carrying either arrow-key navigation or a lower-case dismiss verb.
|
|
424
|
+
* Measured verbatim, bottom-most first:
|
|
425
|
+
*
|
|
426
|
+
* /model ↑/↓ to navigate · ←/→ reasoning effort · tab context window ·
|
|
427
|
+
* shift+tab group: recommended · enter to select · esc to cancel
|
|
428
|
+
* /agent n new agent · ? learn more · esc cancel
|
|
429
|
+
* /theme ↑/↓ to navigate · enter to select · esc to cancel
|
|
430
|
+
* /permissions 1-2 to select · ↑/↓ to navigate · enter to confirm · esc to cancel
|
|
431
|
+
* /skills ↑/↓ to navigate · enter to toggle · esc to close
|
|
432
|
+
* /mcp ↑/↓ to select · enter to show · a to add · esc to close
|
|
433
|
+
* /settings / search · ↑/↓ navigate · tab switch scope · enter edit ·
|
|
434
|
+
* ctrl+r reset · ctrl+e editor · esc close
|
|
435
|
+
* /statusline ↑/↓ nav · enter toggle · esc close
|
|
436
|
+
* /subagents ↑/↓ to navigate · space on/off · r reset · enter to select · esc to cancel
|
|
437
|
+
* /resume / search · ↑/↓ navigate · enter select · ←/→ switch tabs · r refresh ·
|
|
438
|
+
* x delete · s sort:relevance · esc cancel
|
|
439
|
+
* /session / search · ↑/↓ navigate · enter open · n new · tab switch tabs · a filter:all
|
|
440
|
+
*
|
|
441
|
+
* Neither half of the alternation is universal -- `/agent` has no list to walk
|
|
442
|
+
* so it prints no `↑/↓`, and `/session` offers no `esc` -- but every footer has
|
|
443
|
+
* one of them, so the union covers 11/11 while each individual disjunct stays
|
|
444
|
+
* specific enough to be worth requiring. The slash in `↑/↓` is optional only as
|
|
445
|
+
* a rewording tolerance: the synthetic frames pinned since Issue #547 spell it
|
|
446
|
+
* `↑↓`, and whether copilot ever drew it that way is not something this Issue
|
|
447
|
+
* measured. Every 1.0.80 footer above has the slash.
|
|
448
|
+
*
|
|
449
|
+
* Three deliberate narrowings keep this off ordinary text:
|
|
450
|
+
* - the `·` lookahead, so a sentence such as "press esc to cancel" is not a
|
|
451
|
+
* footer unless it is also a hint bar;
|
|
452
|
+
* - lower case, which is what 1.0.80 draws. `(Esc to cancel · 2.3 KiB)` -- the
|
|
453
|
+
* capitalised spelling in {@link COPILOT_THINKING_PATTERN} -- is a *progress*
|
|
454
|
+
* row, and it would otherwise satisfy both halves of this pattern;
|
|
455
|
+
* - `cancel|close` only, so the status bar's `esc interrupt`
|
|
456
|
+
* ({@link COPILOT_WORKING_STATUS_PATTERN}) is not a footer either.
|
|
457
|
+
*
|
|
458
|
+
* The narrowings are defence in depth; the load-bearing guard is positional and
|
|
459
|
+
* lives in {@link isCopilotSelectionFrame} -- copilot's own answer text can and
|
|
460
|
+
* does contain these exact rows (`picker-vocabulary-in-response.txt` is a live
|
|
461
|
+
* frame of it), so no window-scoped match on this vocabulary can be safe.
|
|
462
|
+
*
|
|
463
|
+
* No /g flag (S4-5: would make test() stateful). `[^\n]*` cannot cross a row and
|
|
464
|
+
* no quantifier is nested inside another (SEC4-001: ReDoS safe).
|
|
465
|
+
*/
|
|
466
|
+
exports.COPILOT_SELECTION_FOOTER_PATTERN = /^(?=[^\n]*·)[^\n]*(?:↑\/?↓|\besc\s+(?:to\s+)?(?:cancel|close)\b)/m;
|
|
467
|
+
/**
|
|
468
|
+
* How many non-blank rows up from the bottom of the pane may carry the footer.
|
|
469
|
+
*
|
|
470
|
+
* Nine of the eleven pickers put it on the bottom row itself; `/agent` and
|
|
471
|
+
* `/subagents` draw their panel with a closing full-width rule underneath it,
|
|
472
|
+
* which puts the footer two non-blank rows up. Three is that measurement plus
|
|
473
|
+
* one row of slack -- deliberately far short of a window that could reach the
|
|
474
|
+
* transcript, which on the production 200x1000 geometry sits ~950 rows above.
|
|
475
|
+
*/
|
|
476
|
+
const COPILOT_SELECTION_FOOTER_SCAN_ROWS = 3;
|
|
477
|
+
/**
|
|
478
|
+
* Whether the pane is sitting on one of copilot's pickers (Issue #1895).
|
|
479
|
+
*
|
|
480
|
+
* Takes the whole frame rather than a window for the same reason
|
|
481
|
+
* {@link readCopilotStatusBar} does: the evidence is positional, and a call site
|
|
482
|
+
* cannot be trusted to preserve "near the bottom of the pane" on its own. Two
|
|
483
|
+
* facts, both measured on 1.0.80, make the position sufficient:
|
|
484
|
+
*
|
|
485
|
+
* - **A picker replaces copilot's chrome.** In the idle and generating states
|
|
486
|
+
* the bottom five rows are cwd / rule / composer / rule / status bar; while a
|
|
487
|
+
* picker is up, none of them are drawn. So a frame whose bottom row is a
|
|
488
|
+
* status bar is not a picker, whatever its transcript says -- which is the
|
|
489
|
+
* whole of the false-positive half of Issue #1895. `detectSessionStatus`
|
|
490
|
+
* reads the same row for the running verdict at step 0.5, so checking it
|
|
491
|
+
* first here also fixes the order between the two branches: the status bar
|
|
492
|
+
* wins, and the picker branch only speaks when copilot has taken it away.
|
|
493
|
+
* - **An answerable dialog is drawn inside a box; a picker is not.** The
|
|
494
|
+
* folder-trust and permission dialogs wear the same lower-case
|
|
495
|
+
* `↑/↓ to navigate · enter to select · esc to cancel` footer, but every one of
|
|
496
|
+
* their rows reads `│ … │` and the bottom row is `╰─…─╯`. Skipping boxed rows
|
|
497
|
+
* keeps those on the prompt branch, where they belong: they are the agent
|
|
498
|
+
* blocked on the human (`hasActivePrompt: true`, exit 10 for `wait`), not a
|
|
499
|
+
* list the operator opened.
|
|
500
|
+
*
|
|
501
|
+
* @param contentLines - Frame rows, ANSI already stripped, in pane order
|
|
502
|
+
* @returns True when the bottom of the pane is a picker's key-hint footer
|
|
503
|
+
*/
|
|
504
|
+
function isCopilotSelectionFrame(contentLines) {
|
|
505
|
+
if (readCopilotStatusBar(contentLines) !== null)
|
|
506
|
+
return false;
|
|
507
|
+
let scanned = 0;
|
|
508
|
+
for (let i = contentLines.length - 1; i >= 0; i--) {
|
|
509
|
+
const row = contentLines[i];
|
|
510
|
+
const trimmed = row.trim();
|
|
511
|
+
if (trimmed === '')
|
|
512
|
+
continue;
|
|
513
|
+
if (++scanned > COPILOT_SELECTION_FOOTER_SCAN_ROWS)
|
|
514
|
+
break;
|
|
515
|
+
// A boxed row belongs to a dialog, not a picker (see above).
|
|
516
|
+
if (trimmed.startsWith('│') || trimmed.endsWith('│'))
|
|
517
|
+
continue;
|
|
518
|
+
if (exports.COPILOT_SELECTION_FOOTER_PATTERN.test(row))
|
|
519
|
+
return true;
|
|
520
|
+
}
|
|
521
|
+
return false;
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Anchors of Copilot CLI's first-launch "Confirm folder trust" dialog (Issue #1886).
|
|
525
|
+
*
|
|
526
|
+
* Recorded from copilot 1.0.80 (`tests/fixtures/copilot-folder-trust-1080.ts`):
|
|
527
|
+
* copilot asks this once per untrusted git repository, before anything else runs,
|
|
528
|
+
* and the whole dialog is drawn inside a box — every row reads `│ <content>`.
|
|
529
|
+
* That is why `COPILOT_PROMPT_PATTERN` (`^[>❯]\s`) does not match the frame at
|
|
530
|
+
* all and `waitForReady` used to spin its full 30-second window against it.
|
|
531
|
+
*
|
|
532
|
+
* Both anchors are required. One of them alone would also match this dialog's
|
|
533
|
+
* text quoted back inside a model response, and a false positive here does not
|
|
534
|
+
* merely mis-report a status: it sends a bare `1` into a live composer.
|
|
535
|
+
*
|
|
536
|
+
* The anchors live here rather than in `cli-tools/copilot` for the same reason
|
|
537
|
+
* codex's do (Issue #1829): the Auto-Yes poller judges the same screen through
|
|
538
|
+
* `detectPrompt`, and two copies of the wording would be two chances to disagree
|
|
539
|
+
* about what this dialog is.
|
|
540
|
+
*/
|
|
541
|
+
exports.COPILOT_FOLDER_TRUST_ANCHORS = [
|
|
542
|
+
'Confirm folder trust',
|
|
543
|
+
'Do you trust the files in this folder?',
|
|
544
|
+
];
|
|
545
|
+
/**
|
|
546
|
+
* The one option CommandMate may answer on the operator's behalf: `1. Yes`,
|
|
547
|
+
* which grants trust for THIS SESSION only.
|
|
548
|
+
*
|
|
549
|
+
* Matching the option text — not just the dialog — is the fail-safe. Option 2
|
|
550
|
+
* ("Yes, and remember this folder for future sessions") writes `trustedFolders`
|
|
551
|
+
* into `~/.copilot/config.json`, one file shared by every checkout on the
|
|
552
|
+
* machine (measured: answering `1` leaves that file byte-identical). If copilot
|
|
553
|
+
* ever reorders the list so that `1` is the remembering variant, this stops
|
|
554
|
+
* matching, nothing is sent, and the launch degrades to the pre-#1886 stall
|
|
555
|
+
* instead of silently persisting a trust grant.
|
|
556
|
+
*
|
|
557
|
+
* Written against the box-stripped frame, where the row reads `❯ 1. Yes`.
|
|
558
|
+
* `[ \t]*$` rather than `\s*$` so the trailing anchor cannot roll onto a later
|
|
559
|
+
* line and accept `1. Yes, and remember ...`.
|
|
560
|
+
*/
|
|
561
|
+
exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN = /^[ \t]*(?:[>❯][ \t]*)?1\.[ \t]+Yes[ \t]*$/m;
|
|
562
|
+
/**
|
|
563
|
+
* Key that selects {@link COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN}.
|
|
564
|
+
* Measured on 1.0.80: the digit confirms on its own — sending a trailing Enter
|
|
565
|
+
* would land on the composer that the dialog's dismissal reveals.
|
|
566
|
+
*/
|
|
567
|
+
exports.COPILOT_FOLDER_TRUST_ANSWER_KEY = '1';
|
|
568
|
+
/**
|
|
569
|
+
* Whether the pane is sitting on the folder-trust dialog with the session-only
|
|
570
|
+
* option in first position.
|
|
571
|
+
*
|
|
572
|
+
* @param output - ANSI-stripped pane capture (box drawing still present)
|
|
573
|
+
* @returns True when both anchors and the `1. Yes` option row are present
|
|
574
|
+
*/
|
|
575
|
+
function isCopilotFolderTrustDialog(output) {
|
|
576
|
+
if (!exports.COPILOT_FOLDER_TRUST_ANCHORS.every((anchor) => output.includes(anchor))) {
|
|
577
|
+
return false;
|
|
578
|
+
}
|
|
579
|
+
return exports.COPILOT_FOLDER_TRUST_SESSION_OPTION_PATTERN.test((0, strip_box_drawing_1.stripBoxDrawing)(output));
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Copilot skip patterns for response cleaning (Issue #545)
|
|
583
|
+
* Placeholder patterns - to be refined after Phase 1 TUI investigation.
|
|
584
|
+
*/
|
|
585
|
+
exports.COPILOT_SKIP_PATTERNS = [
|
|
586
|
+
pasted_text_1.PASTED_TEXT_PATTERN,
|
|
587
|
+
exports.COPILOT_SEPARATOR_PATTERN,
|
|
588
|
+
exports.COPILOT_THINKING_PATTERN,
|
|
589
|
+
// Issue #1895 replaced COPILOT_SELECTION_LIST_PATTERN with the row-scoped
|
|
590
|
+
// picker footer; the vocabulary it carried (`Search \w+...` / `Select Model`)
|
|
591
|
+
// is copilot's prose, not its chrome.
|
|
592
|
+
exports.COPILOT_SELECTION_FOOTER_PATTERN,
|
|
593
|
+
// Collapsed reasoning header (Issue #1897): "⌄ Thinking…" / "⌄ Thought for 41s"
|
|
594
|
+
exports.COPILOT_REASONING_HEADER_PATTERN,
|
|
595
|
+
// 1.0.82's transcript dividers and badge-marked tool rows (Issue #2269)
|
|
596
|
+
exports.COPILOT_TRANSCRIPT_DIVIDER_PATTERN,
|
|
597
|
+
exports.COPILOT_TOOL_ROW_PATTERN,
|
|
598
|
+
// Issue #2269: the anchored box-row rule, so the raw-row consumer agrees with
|
|
599
|
+
// the accumulator. `[╭╮╰╯│]` below is unanchored and omits `└`, which is the
|
|
600
|
+
// glyph copilot opens a detail row with (` └ Enable all permissions (tools,
|
|
601
|
+
// paths, and URLs)` under the launch screen's tip). `normalizeCopilotLine`
|
|
602
|
+
// deletes every U+2500..U+257F glyph, so by the time the skip patterns run in
|
|
603
|
+
// `cleanCopilotResponse` that row reads as prose -- which is how the ONE row
|
|
604
|
+
// of the 1.0.82 launch screen that no other rule caught became the agent's
|
|
605
|
+
// first reply. `extractCopilotContentLines` already tests this pattern before
|
|
606
|
+
// normalising (#1897); adding it here is what gives `extractResponse`, which
|
|
607
|
+
// never normalises, the same answer.
|
|
608
|
+
exports.COPILOT_BOX_ROW_PATTERN,
|
|
609
|
+
// Logo/banner lines
|
|
610
|
+
/^GitHub Copilot\s+v/,
|
|
611
|
+
/[█▘▝▖▗▔▄▌▐]/,
|
|
612
|
+
/[╭╮╰╯│]/,
|
|
613
|
+
// Status bar (branch + model display)
|
|
614
|
+
/\[⎇\s+\w[^\]]*\]/,
|
|
615
|
+
// Operation guide lines
|
|
616
|
+
/^shift\+tab\s/,
|
|
617
|
+
/^\?\s+for\s+shortcuts/,
|
|
618
|
+
/^ctrl\+[a-z]\s+\w/,
|
|
619
|
+
// Prompt lines
|
|
620
|
+
/^[❯>]\s*(Type\s+@|$)/,
|
|
621
|
+
// Tip/hint lines. Issue #2269 added the `●` marker: 1.0.82 draws the launch
|
|
622
|
+
// screen's tip as `● Tip: /allow-all`, and `cleanCopilotResponse` strips the
|
|
623
|
+
// bullet only AFTER the skip patterns have run, so the bare form never
|
|
624
|
+
// matched and the tip was the one banner row that reached History.
|
|
625
|
+
/^\s*(?:●\s+)?Tip:\s*\//,
|
|
626
|
+
// Issue #2269: copilot's own tab bar, the top row of every 1.0.82 frame. It is
|
|
627
|
+
// the second banner row the launch screen leaked (the logo, the disclaimer and
|
|
628
|
+
// the tip's `└ …` detail row are all caught by the glyph rules above), and
|
|
629
|
+
// between them they are the whole difference between "the launch screen cleans
|
|
630
|
+
// to nothing and cannot be saved" and "History opens with the banner". Spelled
|
|
631
|
+
// out in full rather than as a keyword so a reply that mentions one of these
|
|
632
|
+
// words is untouched.
|
|
633
|
+
/^\s*Current\s+Sessions\s+Issues\s+Pull requests\s+Gists\s*$/,
|
|
634
|
+
// Initial display text
|
|
635
|
+
/^Describe a task to get started/,
|
|
636
|
+
// Issue #571: Disclaimer, initialization message, environment info
|
|
637
|
+
/^Copilot uses AI, so always check for mistakes\.$/, // Disclaimer (full-line match to avoid filtering user content mentioning Copilot)
|
|
638
|
+
/^● 💡/, // Initialization hint message
|
|
639
|
+
/^● Environment loaded:/, // Environment info
|
|
640
|
+
];
|
|
@@ -40,19 +40,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
40
40
|
exports.detectCopilotDialog = detectCopilotDialog;
|
|
41
41
|
const cli_patterns_1 = require("../../cli-patterns");
|
|
42
42
|
const dialog_block_1 = require("../dialog-block");
|
|
43
|
+
const context_above_1 = require("../context-above");
|
|
43
44
|
/** copilot's permission question, in the spelling 1.0.80 draws. */
|
|
44
45
|
const COPILOT_PERMISSION_QUESTION_PATTERN = /do you want to\b/i;
|
|
45
|
-
/** How many non-blank rows above the options may hold the question. */
|
|
46
|
-
const QUESTION_SCAN_ROWS = 4;
|
|
47
46
|
function readContextAbove(lines, firstRow) {
|
|
48
|
-
|
|
49
|
-
for (let i = firstRow - 1; i >= 0 && rows.length < QUESTION_SCAN_ROWS; i--) {
|
|
50
|
-
const row = lines[i].trim();
|
|
51
|
-
if (row === '')
|
|
52
|
-
continue;
|
|
53
|
-
rows.push(row);
|
|
54
|
-
}
|
|
55
|
-
return rows.join('\n');
|
|
47
|
+
return (0, context_above_1.readContextAbove)(lines, firstRow, -1);
|
|
56
48
|
}
|
|
57
49
|
/**
|
|
58
50
|
* Does this frame carry a copilot dialog?
|