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
|
@@ -64,19 +64,15 @@
|
|
|
64
64
|
* written once.
|
|
65
65
|
*/
|
|
66
66
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
-
exports.
|
|
68
|
-
exports.isCommandCodePlanApproveChoice = isCommandCodePlanApproveChoice;
|
|
69
|
-
exports.hasCommandCodeSelectionListFooterAtBottom = hasCommandCodeSelectionListFooterAtBottom;
|
|
70
|
-
exports.hasCommandCodeDismissablePanelFooterAtBottom = hasCommandCodeDismissablePanelFooterAtBottom;
|
|
71
|
-
exports.hasCommandCodePlanReviewFooterAtBottom = hasCommandCodePlanReviewFooterAtBottom;
|
|
72
|
-
exports.hasDismissablePanelFooter = hasDismissablePanelFooter;
|
|
67
|
+
exports.readCommandCodeReviewPage = exports.isCommandCodePlanApproveChoice = exports.hasDismissablePanelFooter = exports.hasCommandCodeSelectionListFooterAtBottom = exports.hasCommandCodePlanReviewFooterAtBottom = exports.hasCommandCodeDismissablePanelFooterAtBottom = exports.DISMISSABLE_PANEL_FOOTER_PATTERN = exports.COMMAND_CODE_SELECTION_LIST_FOOTER = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = exports.SET_AS_DEFAULT_FOOTER_PATTERN = exports.SESSION_SCOPE_FOOTER_PATTERN = exports.MAX_OPTION_NUMBER = exports.SELECTION_SHAPE_TAIL_LINE_COUNT = exports.COMMAND_CODE_PLAN_REVIEW_FOOTER = void 0;
|
|
73
68
|
exports.readCommandCodeQuestionRegion = readCommandCodeQuestionRegion;
|
|
74
69
|
exports.hasCommandCodeQuestionChrome = hasCommandCodeQuestionChrome;
|
|
75
|
-
exports.readCommandCodeReviewPage = readCommandCodeReviewPage;
|
|
76
70
|
exports.extractCommandCodeSelectionListFrame = extractCommandCodeSelectionListFrame;
|
|
77
71
|
exports.readSelectionListShape = readSelectionListShape;
|
|
78
72
|
exports.shouldOfferOptionNumbers = shouldOfferOptionNumbers;
|
|
79
73
|
const ansi_1 = require("./ansi");
|
|
74
|
+
const selection_shape_patterns_1 = require("./selection-shape-patterns");
|
|
75
|
+
Object.defineProperty(exports, "COMMAND_CODE_PLAN_REVIEW_FOOTER", { enumerable: true, get: function () { return selection_shape_patterns_1.COMMAND_CODE_PLAN_REVIEW_FOOTER; } });
|
|
80
76
|
/**
|
|
81
77
|
* How many rows up from the last content row the shape is read.
|
|
82
78
|
*
|
|
@@ -91,6 +87,10 @@ const ansi_1 = require("./ansi");
|
|
|
91
87
|
* Bounded rather than unbounded because the alternative reads the transcript: a
|
|
92
88
|
* markdown answer that happens to contain `1.` / `2.` sits hundreds of rows
|
|
93
89
|
* above the dialog on a 200x1000 pane and must not be counted as options.
|
|
90
|
+
*
|
|
91
|
+
* Forty rows is still wider than an inline tool's dialog, so the number KEYS
|
|
92
|
+
* are not decided off this tail alone: `readSelectionListFrame` also counts on
|
|
93
|
+
* the rows the dialog card draws and takes the smaller (Issue #3336).
|
|
94
94
|
*/
|
|
95
95
|
exports.SELECTION_SHAPE_TAIL_LINE_COUNT = 40;
|
|
96
96
|
/** Highest option number a single keystroke can deliver (`10` is two keys). */
|
|
@@ -125,401 +125,18 @@ exports.SESSION_SCOPE_FOOTER_PATTERN = /\bs\s+to\s+use\s+this\s+session\s+only\b
|
|
|
125
125
|
* claude's wording for a screen that may not carry it.
|
|
126
126
|
*/
|
|
127
127
|
exports.SET_AS_DEFAULT_FOOTER_PATTERN = /\bEnter\s+to\s+set\s+as\s+default\b/i;
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
* which contains the word.
|
|
141
|
-
*/
|
|
142
|
-
const FILTER_INPUT_PATTERN = /\btype\s+to\s+search\b|\bsearch\s+\w+\s*(?:…|\.\.\.)|(?:^|·)\s*\/\s+search\b/im;
|
|
143
|
-
/**
|
|
144
|
-
* Command Code's picker footer (v1.40.1, measured at 200x1000 for Issue #2297).
|
|
145
|
-
*
|
|
146
|
-
* type to search · ↑/↓ navigate · shift+↑/↓ jump provider · enter to select · esc to cancel
|
|
147
|
-
*
|
|
148
|
-
* Before this Issue no detector branch matched it, so the overlay fell through
|
|
149
|
-
* to the `default` floor and the chat surface raised its `unclassified` card —
|
|
150
|
-
* whose controls are the `1`–`9` / `y` / `n` answer keys, every one of which
|
|
151
|
-
* would have been typed into that `Type to search models...` box. The
|
|
152
|
-
* command-code detector imports this and answers
|
|
153
|
-
* `STATUS_REASON.COMMAND_CODE_SELECTION_LIST` instead, which puts the arrow pad
|
|
154
|
-
* on the card.
|
|
155
|
-
*
|
|
156
|
-
* Lower case is what Command Code draws, and the `·` separator keeps the pattern
|
|
157
|
-
* off ordinary prose — the same two narrowings `COPILOT_SELECTION_FOOTER_PATTERN`
|
|
158
|
-
* settled on for the same reason.
|
|
159
|
-
*/
|
|
160
|
-
exports.COMMAND_CODE_SELECTION_LIST_FOOTER = /\benter\s+to\s+select\b\s*[·•]\s*esc\s+to\s+cancel\b/i;
|
|
161
|
-
/**
|
|
162
|
-
* The footer of an overlay whose ONLY exit is the dismiss (Issue #2369).
|
|
163
|
-
*
|
|
164
|
-
* Measured on Command Code 1.49's `/usage`, whose last row is verbatim
|
|
165
|
-
* `Press Esc to close`. The panel above it is read-only — a plan header, two
|
|
166
|
-
* meters, a breakdown URL — so there is no highlight to move and no key to
|
|
167
|
-
* confirm with. Before this pattern existed nothing matched the screen, it
|
|
168
|
-
* reached the `default` floor, and the chat surface answered an
|
|
169
|
-
* eighteen-button `unclassified` card to a panel with one working key.
|
|
170
|
-
*
|
|
171
|
-
* ## Why it is this narrow
|
|
172
|
-
*
|
|
173
|
-
* Three narrowings, and each one is there because this predicate SUPPRESSES
|
|
174
|
-
* controls — a false positive takes the arrow pad and the answer keys away from
|
|
175
|
-
* a screen that needed them:
|
|
176
|
-
*
|
|
177
|
-
* - **a verb before the key.** `Press`/`Hit`/`Type`, or nothing at all, but not
|
|
178
|
-
* an arbitrary run of prose. `esc to cancel` on its own is the tail of every
|
|
179
|
-
* picker footer in this file, including
|
|
180
|
-
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER}, and those screens have a
|
|
181
|
-
* highlight;
|
|
182
|
-
* - **`close`/`dismiss`/`exit`, never `cancel` or `go back`.** The distinction
|
|
183
|
-
* is measured rather than stylistic: `cancel` is what a screen with a
|
|
184
|
-
* COMMITTABLE choice calls its escape (claude's `/model`, codex's picker,
|
|
185
|
-
* Command Code's own), while `close` is what a panel that decided nothing
|
|
186
|
-
* calls it;
|
|
187
|
-
* - **the whole row.** Anchored at both ends (leading/trailing space aside), so
|
|
188
|
-
* a hint bar that offers a dismiss ALONGSIDE something else — `↑/↓ navigate ·
|
|
189
|
-
* enter to select · esc to close` — does not match, and keeps the arrows the
|
|
190
|
-
* other half of its sentence promises.
|
|
191
|
-
*
|
|
192
|
-
* Case-insensitive because the measured row is `Press Esc to close` and Command
|
|
193
|
-
* Code writes its picker hints in lower case; nothing rests on which it uses.
|
|
194
|
-
*/
|
|
195
|
-
exports.DISMISSABLE_PANEL_FOOTER_PATTERN = /^\s*(?:press|hit|type)?\s*(?:<)?esc(?:ape)?(?:>)?\s+to\s+(?:close|dismiss|exit)\b[\s.·•]*$/im;
|
|
196
|
-
/**
|
|
197
|
-
* The two footer rows of Command Code's plan review overlay (Issue #2761).
|
|
198
|
-
*
|
|
199
|
-
* Measured on 1.58.0 at 200x1000. The overlay is a rule, a `Plan review: <title>
|
|
200
|
-
* · <path> · v1` header, the plan with a line-number gutter, a second rule, a
|
|
201
|
-
* ` REVIEW ` badge and then, verbatim:
|
|
202
|
-
*
|
|
203
|
-
* Approve ctrl+a executes the plan
|
|
204
|
-
* Cancel esc
|
|
205
|
-
*
|
|
206
|
-
* BOTH rows, adjacent, because each half alone is weak: `Cancel esc` is two
|
|
207
|
-
* words any picker might print, and `Approve` is a word an agent writes in a
|
|
208
|
-
* plan. Multi-line on purpose — it is tested against a joined tail
|
|
209
|
-
* (`NormalizedFrame.lastLines`, or the tail {@link readSelectionListShape}
|
|
210
|
-
* builds), never against a single row.
|
|
211
|
-
*
|
|
212
|
-
* Swept against every fixture in `tests/fixtures` and
|
|
213
|
-
* `tests/unit/lib/detection/fixtures` when this was written (300 files): the
|
|
214
|
-
* only match is the plan review capture itself.
|
|
215
|
-
*
|
|
216
|
-
* ## The `❯` either row may carry (Issue #2793)
|
|
217
|
-
*
|
|
218
|
-
* `↓` past the plan's last line moves the focus onto the ACTION list, and the
|
|
219
|
-
* focused action is drawn with a `❯ ` in front of it and two spaces before its
|
|
220
|
-
* key (`tests/fixtures/command-code-plan-review-2763/`, 1.58.0):
|
|
221
|
-
*
|
|
222
|
-
* ❯ Approve ctrl+a executes the plan ← `plan-review-action-focus-approve.txt`
|
|
223
|
-
* Cancel esc
|
|
224
|
-
*
|
|
225
|
-
* Approve ctrl+a executes the plan · comments go along as notes
|
|
226
|
-
* ❯ Cancel esc ← `plan-review-long-scrolled-cancel-focused.txt`
|
|
227
|
-
*
|
|
228
|
-
* Without the optional `❯ ` this pattern missed both frames, and they went on to
|
|
229
|
-
* the composer check, where `COMMAND_CODE_PROMPT_PATTERN` (`^❯(\s*$|\s+\S)`)
|
|
230
|
-
* read the cursor row as the composer and published `ready` / `input_prompt`:
|
|
231
|
-
* `wait` exited 0 on a plan nobody had approved — #2754's `❯`-outside-the-list
|
|
232
|
-
* family. It is also the frame on which `Enter` EXECUTES the focused action, so
|
|
233
|
-
* missing it here would also have left the chat surface's `Enter` on screen
|
|
234
|
-
* (see {@link SelectionListShape.offersPlanApprove}). Only `❯`, and only as a
|
|
235
|
-
* prefix: `❯ ` + the row is the one measured spelling of a focused action.
|
|
236
|
-
* Re-swept over the same two directories with the widened pattern: every match
|
|
237
|
-
* is still a `command-code-plan-review-*` capture, which
|
|
238
|
-
* `command-code-plan-review-2793.test.ts` keeps pinned.
|
|
239
|
-
*/
|
|
240
|
-
exports.COMMAND_CODE_PLAN_REVIEW_FOOTER = /^\s*(?:❯ +)?Approve\s+ctrl\+a\b[^\n]*\n\s*(?:❯ +)?Cancel\s+esc\s*$/im;
|
|
241
|
-
/**
|
|
242
|
-
* The radio row `ctrl+a` puts in place of the action list when comments are
|
|
243
|
-
* pending (Issue #2793).
|
|
244
|
-
*
|
|
245
|
-
* Measured on 1.58.0 (`tests/fixtures/command-code-plan-review-2763/`): with
|
|
246
|
-
* zero comments `ctrl+a` approves at once, and with one or more it first asks
|
|
247
|
-
* what to do with them. The three action rows are replaced by ONE row, and the
|
|
248
|
-
* selected side is `(•)`, the other `( )` — readable without the ANSI:
|
|
249
|
-
*
|
|
250
|
-
* Approve (•) with 4 comments as notes ( ) original plan · discard comments
|
|
251
|
-
*
|
|
252
|
-
* `comments?` because the badge above it is measured in both numbers
|
|
253
|
-
* (`1 pending comment` / `4 pending comments`); the radio itself was captured
|
|
254
|
-
* with four.
|
|
255
|
-
*/
|
|
256
|
-
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW = /^\s*Approve\s+\([• ]\)\s+with\s+\d+\s+comments?\s+as\s+notes\s+\([• ]\)\s+original\s+plan\b/im;
|
|
257
|
-
/**
|
|
258
|
-
* The hint bar under {@link COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW}, verbatim
|
|
259
|
-
* `←/→ choose · enter confirm · esc back`.
|
|
260
|
-
*
|
|
261
|
-
* Anchored to the LAST row of the text it is tested against (no `m` flag: `$` is
|
|
262
|
-
* the end of the input), because that is where the overlay draws every one of
|
|
263
|
-
* its five measured hint bars, and because it is what keeps a transcript that
|
|
264
|
-
* QUOTES this screen from matching — the composer is always drawn below a
|
|
265
|
-
* transcript, so there the quote is never the last row.
|
|
266
|
-
*/
|
|
267
|
-
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER = /(?:^|\n)[ \t]*←\/→\s+choose\s*·\s*enter\s+confirm\s*·\s*esc\s+back\s*$/i;
|
|
268
|
-
/**
|
|
269
|
-
* Whether this tail is the approve-with-comments confirmation (Issue #2793).
|
|
270
|
-
*
|
|
271
|
-
* BOTH rows, for the reason {@link COMMAND_CODE_PLAN_REVIEW_FOOTER} gives for
|
|
272
|
-
* its two: either half alone is a sentence something else could print. Not
|
|
273
|
-
* adjacent — `Editor exited with code 127` and a blank row sit between them on
|
|
274
|
-
* both captures — so each is tested on its own.
|
|
275
|
-
*
|
|
276
|
-
* Deliberately NOT folded into {@link COMMAND_CODE_PLAN_REVIEW_FOOTER}, and
|
|
277
|
-
* therefore not {@link SelectionListShape.offersPlanApprove}: on this screen
|
|
278
|
-
* `enter` is the documented CONFIRM of an approval the human already started
|
|
279
|
-
* with `ctrl+a`, so the chat surface must keep its `Enter`, and what `ctrl+a`
|
|
280
|
-
* does here was not measured.
|
|
281
|
-
*
|
|
282
|
-
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
283
|
-
*/
|
|
284
|
-
function isCommandCodePlanApproveChoice(tail) {
|
|
285
|
-
return (exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW.test(tail) &&
|
|
286
|
-
exports.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER.test(tail));
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* How many content rows the plan review footer's LAST row (`Cancel esc`) may
|
|
290
|
-
* have under it and still be the overlay's own footer (Issue #2846): the footer's
|
|
291
|
-
* two rows plus three.
|
|
292
|
-
*
|
|
293
|
-
* Measured over the sixteen plan review captures that carry the footer
|
|
294
|
-
* (`tests/fixtures/command-code-plan-review-2761/`, `-2763/`): fourteen draw ONE
|
|
295
|
-
* row below it, the hint bar (`type + enter to comment · …`); one draws two, an
|
|
296
|
-
* `Editor exited with code 127` row and then the hint bar; and the garbled
|
|
297
|
-
* `editor-killed-staircase.txt` draws three, because the pane wrapped the hint
|
|
298
|
-
* bar. So the plan review footer is NOT the last row the way the picker's is,
|
|
299
|
-
* and a "last two rows" rule misses every one of them.
|
|
300
|
-
*
|
|
301
|
-
* What bounds it from above is the composer. A transcript is always drawn above
|
|
302
|
-
* one, and its shortest measured form is four rows — rule, `❯ Ask your
|
|
303
|
-
* question...`, rule, status row — so a footer QUOTED in a reply has at least
|
|
304
|
-
* four content rows under it and its `Approve` row falls outside this window.
|
|
305
|
-
* The margin between the widest overlay (3) and the narrowest composer (4) is
|
|
306
|
-
* one row; a capture that narrows it is the reason to re-measure, not to widen
|
|
307
|
-
* this.
|
|
308
|
-
*/
|
|
309
|
-
const COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT = 5;
|
|
310
|
-
/**
|
|
311
|
-
* The last `count` rows of `text` that carry content, joined with `\n`.
|
|
312
|
-
*
|
|
313
|
-
* Blank rows are dropped rather than counted: the pane is padded with them, and
|
|
314
|
-
* a real footer is set off from its hint bar by one.
|
|
315
|
-
*/
|
|
316
|
-
function lastContentRows(text, count) {
|
|
317
|
-
return text
|
|
318
|
-
.split('\n')
|
|
319
|
-
.filter((row) => row.trim() !== '')
|
|
320
|
-
.slice(-count)
|
|
321
|
-
.join('\n');
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Whether the LAST content row of this tail is Command Code's picker footer
|
|
325
|
-
* (Issue #2846).
|
|
326
|
-
*
|
|
327
|
-
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER} matches the sentence anywhere, and
|
|
328
|
-
* a reply that quotes the `/model` footer is that sentence in the middle of the
|
|
329
|
-
* transcript. The picker draws the footer as the last row of the pane (all four
|
|
330
|
-
* captures that carry it do, `tests/fixtures/chat-dialog-card-2254/`), and a
|
|
331
|
-
* transcript always has the composer under it — the same reasoning
|
|
332
|
-
* {@link COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER} anchors with `$`.
|
|
333
|
-
*
|
|
334
|
-
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
335
|
-
*/
|
|
336
|
-
function hasCommandCodeSelectionListFooterAtBottom(tail) {
|
|
337
|
-
return exports.COMMAND_CODE_SELECTION_LIST_FOOTER.test(lastContentRows(tail, 1));
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Whether the LAST content row of this tail is the dismiss-only panel's footer
|
|
341
|
-
* (Issue #2846). `Press Esc to close` is the panel's last row
|
|
342
|
-
* ({@link DISMISSABLE_PANEL_FOOTER_PATTERN}); the same row inside a reply has
|
|
343
|
-
* the composer under it.
|
|
344
|
-
*
|
|
345
|
-
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
346
|
-
*/
|
|
347
|
-
function hasCommandCodeDismissablePanelFooterAtBottom(tail) {
|
|
348
|
-
return exports.DISMISSABLE_PANEL_FOOTER_PATTERN.test(lastContentRows(tail, 1));
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Whether the plan review footer ({@link COMMAND_CODE_PLAN_REVIEW_FOOTER}) sits
|
|
352
|
-
* at the bottom of this tail (Issue #2846): both of its rows are within the last
|
|
353
|
-
* {@link COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT} content rows, which is the
|
|
354
|
-
* overlay's own hint bar and nothing as tall as a composer.
|
|
355
|
-
*
|
|
356
|
-
* @param tail - the frame's last rows, ANSI stripped, last content row last
|
|
357
|
-
*/
|
|
358
|
-
function hasCommandCodePlanReviewFooterAtBottom(tail) {
|
|
359
|
-
return exports.COMMAND_CODE_PLAN_REVIEW_FOOTER.test(lastContentRows(tail, COMMAND_CODE_PLAN_REVIEW_TAIL_ROW_COUNT));
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* How many rows from the end of the content the dismiss footer is looked for.
|
|
363
|
-
*
|
|
364
|
-
* The same 15-row tail the detection chain hands a tool module as
|
|
365
|
-
* `NormalizedFrame.lastLines` (`STATUS_CHECK_LINE_COUNT`), restated as a number
|
|
366
|
-
* here because this module is a browser-safe leaf and `tools/frame.ts` pulls in
|
|
367
|
-
* `cli-patterns`. `detect.ts` reads `frame.lastLines` and never this constant,
|
|
368
|
-
* so the two cannot disagree about the detector's own window; this one bounds
|
|
369
|
-
* the CLIENT-side reading in {@link hasDismissablePanelFooter}.
|
|
370
|
-
*/
|
|
371
|
-
const DISMISSABLE_PANEL_TAIL_LINE_COUNT = 15;
|
|
372
|
-
/**
|
|
373
|
-
* Whether the tail of this frame is a dismiss-only panel (Issue #2369).
|
|
374
|
-
*
|
|
375
|
-
* The same question `commandCodeStatusDetector.afterPrompt` asks of
|
|
376
|
-
* `frame.lastLines`, asked of a raw capture, so the chat surface can answer for
|
|
377
|
-
* a frame whose server verdict has not reached it. The pattern is shared rather
|
|
378
|
-
* than restated — one expression, two call sites, exactly as
|
|
379
|
-
* {@link COMMAND_CODE_SELECTION_LIST_FOOTER} is shared between the detector and
|
|
380
|
-
* the dialog card.
|
|
381
|
-
*
|
|
382
|
-
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact
|
|
383
|
-
*/
|
|
384
|
-
function hasDismissablePanelFooter(frame) {
|
|
385
|
-
if (!frame)
|
|
386
|
-
return false;
|
|
387
|
-
const lines = (0, ansi_1.stripAnsi)(frame.replace(/\r\n/g, '\n')).split('\n');
|
|
388
|
-
let last = lines.length - 1;
|
|
389
|
-
while (last >= 0 && lines[last].trim() === '')
|
|
390
|
-
last -= 1;
|
|
391
|
-
if (last < 0)
|
|
392
|
-
return false;
|
|
393
|
-
const tail = lines.slice(Math.max(0, last + 1 - DISMISSABLE_PANEL_TAIL_LINE_COUNT), last + 1);
|
|
394
|
-
return tail.some((line) => exports.DISMISSABLE_PANEL_FOOTER_PATTERN.test(line));
|
|
395
|
-
}
|
|
396
|
-
/**
|
|
397
|
-
* The horizontal rule Command Code draws directly above a full-screen dialog.
|
|
398
|
-
*
|
|
399
|
-
* Command Code is an INLINE tool (`alternate_on=0`): opening `/model` does not
|
|
400
|
-
* clear the pane, it paints the picker under whatever the session has already
|
|
401
|
-
* printed. On the capture taken for Issue #2326 that is 256 rows of banner and
|
|
402
|
-
* transcript followed by a 77-row picker, and this rule row is the seam between
|
|
403
|
-
* them — 200 columns of U+2500 at the production `TUI_PANE_WIDTH`, the only
|
|
404
|
-
* such row anywhere on the frame while the picker is open (the composer's own
|
|
405
|
-
* two rules are not drawn while a dialog has the screen).
|
|
406
|
-
*
|
|
407
|
-
* Matched as "nothing but the rule glyph", not as "contains one", because a box
|
|
408
|
-
* border (`╭──…──╮`, which is how copilot draws ITS pickers) carries corners and
|
|
409
|
-
* must NOT be read as this seam — see
|
|
410
|
-
* {@link extractCommandCodeSelectionListFrame} for why that non-match is the
|
|
411
|
-
* safe answer rather than a missed case.
|
|
412
|
-
*/
|
|
413
|
-
const COMMAND_CODE_RULE_ROW_PATTERN = /^\u2500+$/;
|
|
414
|
-
/**
|
|
415
|
-
* How wide a rule row must be before it counts as the dialog seam.
|
|
416
|
-
*
|
|
417
|
-
* The measured row is the full pane width (200 columns), and a pure function
|
|
418
|
-
* cannot know that width, so this is a floor rather than an equality: it only
|
|
419
|
-
* has to reject a short dash run inside a reply. Forty columns is a quarter of
|
|
420
|
-
* the production pane and wider than any decorative rule measured in
|
|
421
|
-
* `tests/fixtures/`.
|
|
422
|
-
*/
|
|
423
|
-
const COMMAND_CODE_RULE_MIN_COLUMNS = 40;
|
|
424
|
-
/**
|
|
425
|
-
* The cursor glyph Command Code draws against the highlighted option.
|
|
426
|
-
*
|
|
427
|
-
* U+276F, measured on the capture Issue #2521 was raised from. Only this one,
|
|
428
|
-
* and not codex's `›` or gemini's `●`: {@link readCommandCodeQuestionRegion}
|
|
429
|
-
* counts cursors to decide whether the region holds ONE live dialog, and a
|
|
430
|
-
* wider alphabet would start counting glyphs that are not cursors at all.
|
|
431
|
-
*/
|
|
432
|
-
const COMMAND_CODE_CURSOR_GLYPH = '❯';
|
|
433
|
-
/**
|
|
434
|
-
* The markers Command Code paints on a question screen's tab strip.
|
|
435
|
-
*
|
|
436
|
-
* Measured row: `● Dispatch | ◯ Review` — a filled disc on the tab that has the
|
|
437
|
-
* screen and a hollow ring on the one that does not. The names are NOT part of
|
|
438
|
-
* the reading (a different question draws different tabs); what is read is the
|
|
439
|
-
* strip's structure, which is what {@link isCommandCodeQuestionTabRow} states.
|
|
440
|
-
*
|
|
441
|
-
* Two families rather than one alphabet, because "one of these is filled and one
|
|
442
|
-
* of these is not" is the whole signal. A list of bullets (`● item one`) carries
|
|
443
|
-
* the first family and nothing else, and a bullet list is the thing this
|
|
444
|
-
* reading must never mistake for a dialog.
|
|
445
|
-
*/
|
|
446
|
-
const COMMAND_CODE_TAB_SELECTED_MARKERS = '●◉⦿';
|
|
447
|
-
/** The hollow half of {@link COMMAND_CODE_TAB_SELECTED_MARKERS}'s pair. */
|
|
448
|
-
const COMMAND_CODE_TAB_UNSELECTED_MARKERS = '◯○◌⚪';
|
|
449
|
-
/**
|
|
450
|
-
* The ANSWERED half, measured on 1.54.1 (Issue #2753).
|
|
451
|
-
*
|
|
452
|
-
* A multi-question `AskUserQuestion` keeps one tab per question and marks the
|
|
453
|
-
* ones already answered: `✔ Party size | ✔ Rental car | ● Update scope | ◯ Review`.
|
|
454
|
-
* Before this family existed the whole strip failed the cell test, the reader answered
|
|
455
|
-
* `none`, and the generic parser read the checkbox list under it as a single
|
|
456
|
-
* select — see the Issue for the capture.
|
|
457
|
-
*
|
|
458
|
-
* U+2714 and nothing else. `✓` (U+2713) and `☑` (U+2611) are the shapes a check
|
|
459
|
-
* mark could take; neither has been seen on a pane, and this reading is shared
|
|
460
|
-
* with `ChatSurface` and `extractCommandCodeSelectionListFrame`, which run for
|
|
461
|
-
* EVERY tool — so an unmeasured glyph here widens what other tools' frames can
|
|
462
|
-
* be claimed as this screen.
|
|
463
|
-
*/
|
|
464
|
-
const COMMAND_CODE_TAB_ANSWERED_MARKERS = '✔';
|
|
465
|
-
/** One `<marker> <label>` cell of the tab strip. */
|
|
466
|
-
const COMMAND_CODE_TAB_SEGMENT_PATTERN = new RegExp(`^\\s*([${COMMAND_CODE_TAB_SELECTED_MARKERS}${COMMAND_CODE_TAB_UNSELECTED_MARKERS}${COMMAND_CODE_TAB_ANSWERED_MARKERS}])\\s+\\S`);
|
|
467
|
-
/**
|
|
468
|
-
* Is this row Command Code's question-screen tab strip?
|
|
469
|
-
*
|
|
470
|
-
* Three conditions, and each one is a bullet list this predicate has to refuse:
|
|
471
|
-
*
|
|
472
|
-
* - **two or more `|`-separated cells.** `● Dispatch` on its own is a bullet;
|
|
473
|
-
* `● Dispatch | ◯ Review` is a strip. The separator is the cheapest part of
|
|
474
|
-
* the structure and the one prose never has in this position;
|
|
475
|
-
* - **every cell is `<marker> <label>`.** A row that is a strip for its first
|
|
476
|
-
* cell and prose for its second is prose;
|
|
477
|
-
* - **at least one filled marker, and at least one other cell.** A tab strip
|
|
478
|
-
* says which tab has the screen. A row of identical bullets does not, and
|
|
479
|
-
* `● one | ● two` is exactly the list-with-a-pipe this rules out. The other
|
|
480
|
-
* cell may be hollow (not answered yet) or the `✔` of an answered tab
|
|
481
|
-
* (measured on 1.54.1 — Issue #2753); what may not be missing is the filled
|
|
482
|
-
* one, so `✔ one | ✔ two` is still refused.
|
|
483
|
-
*/
|
|
484
|
-
function isCommandCodeQuestionTabRow(line) {
|
|
485
|
-
const segments = line.split('|');
|
|
486
|
-
if (segments.length < 2)
|
|
487
|
-
return false;
|
|
488
|
-
let selected = 0;
|
|
489
|
-
let others = 0;
|
|
490
|
-
for (const segment of segments) {
|
|
491
|
-
const match = COMMAND_CODE_TAB_SEGMENT_PATTERN.exec(segment);
|
|
492
|
-
if (match === null)
|
|
493
|
-
return false;
|
|
494
|
-
if (COMMAND_CODE_TAB_SELECTED_MARKERS.includes(match[1]))
|
|
495
|
-
selected += 1;
|
|
496
|
-
else
|
|
497
|
-
others += 1;
|
|
498
|
-
}
|
|
499
|
-
return selected > 0 && others > 0;
|
|
500
|
-
}
|
|
501
|
-
/**
|
|
502
|
-
* Rows that mean the region spans more than the one dialog on screen now.
|
|
503
|
-
*
|
|
504
|
-
* Issue #2521's condition 4: the tab strip and its options have to be the
|
|
505
|
-
* SAME screen, with no other turn's generating or completion UI between them.
|
|
506
|
-
* Structurally that is mostly settled by taking the LAST rule row as the top
|
|
507
|
-
* edge — a new turn repaints the composer, and the composer's own lower rule
|
|
508
|
-
* then becomes that edge — so this pattern is the belt to that braces, for a
|
|
509
|
-
* frame captured mid-repaint.
|
|
510
|
-
*
|
|
511
|
-
* Two rows, both restated here rather than imported: `cli-patterns` owns
|
|
512
|
-
* Command Code's busy and marker vocabularies and pulls the logger and the tool
|
|
513
|
-
* registry in with them, and this module is the browser-safe leaf the chat
|
|
514
|
-
* surface imports (see the module docblock).
|
|
515
|
-
*
|
|
516
|
-
* - `esc to interrupt`, the tail Command Code appends to every status row
|
|
517
|
-
* (`COMMAND_CODE_INTERRUPT_HINT_PATTERN`). A turn is in flight;
|
|
518
|
-
* - a row that OPENS with U+273B and a word — `✻ Thought for 1 second`,
|
|
519
|
-
* `✻ Worked for 4s`. Matched by shape rather than by the two English verbs,
|
|
520
|
-
* so a reworded or localised marker still ends the region.
|
|
521
|
-
*/
|
|
522
|
-
const COMMAND_CODE_QUESTION_REGION_REJECT_PATTERN = /\besc\s+to\s+interrupt\b|^[^\S\n]*✻[^\S\n]+\S/im;
|
|
128
|
+
const selection_shape_1 = require("./tools/command-code/selection-shape");
|
|
129
|
+
var selection_shape_2 = require("./tools/command-code/selection-shape");
|
|
130
|
+
Object.defineProperty(exports, "COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER", { enumerable: true, get: function () { return selection_shape_2.COMMAND_CODE_PLAN_APPROVE_CHOICE_FOOTER; } });
|
|
131
|
+
Object.defineProperty(exports, "COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW", { enumerable: true, get: function () { return selection_shape_2.COMMAND_CODE_PLAN_APPROVE_CHOICE_ROW; } });
|
|
132
|
+
Object.defineProperty(exports, "COMMAND_CODE_SELECTION_LIST_FOOTER", { enumerable: true, get: function () { return selection_shape_2.COMMAND_CODE_SELECTION_LIST_FOOTER; } });
|
|
133
|
+
Object.defineProperty(exports, "DISMISSABLE_PANEL_FOOTER_PATTERN", { enumerable: true, get: function () { return selection_shape_2.DISMISSABLE_PANEL_FOOTER_PATTERN; } });
|
|
134
|
+
Object.defineProperty(exports, "hasCommandCodeDismissablePanelFooterAtBottom", { enumerable: true, get: function () { return selection_shape_2.hasCommandCodeDismissablePanelFooterAtBottom; } });
|
|
135
|
+
Object.defineProperty(exports, "hasCommandCodePlanReviewFooterAtBottom", { enumerable: true, get: function () { return selection_shape_2.hasCommandCodePlanReviewFooterAtBottom; } });
|
|
136
|
+
Object.defineProperty(exports, "hasCommandCodeSelectionListFooterAtBottom", { enumerable: true, get: function () { return selection_shape_2.hasCommandCodeSelectionListFooterAtBottom; } });
|
|
137
|
+
Object.defineProperty(exports, "hasDismissablePanelFooter", { enumerable: true, get: function () { return selection_shape_2.hasDismissablePanelFooter; } });
|
|
138
|
+
Object.defineProperty(exports, "isCommandCodePlanApproveChoice", { enumerable: true, get: function () { return selection_shape_2.isCommandCodePlanApproveChoice; } });
|
|
139
|
+
Object.defineProperty(exports, "readCommandCodeReviewPage", { enumerable: true, get: function () { return selection_shape_2.readCommandCodeReviewPage; } });
|
|
523
140
|
/**
|
|
524
141
|
* Where a footer-less Command Code question screen sits on a pane (Issue #2521).
|
|
525
142
|
*
|
|
@@ -687,111 +304,6 @@ function readCommandCodeQuestionRegion(frame) {
|
|
|
687
304
|
function hasCommandCodeQuestionChrome(frame) {
|
|
688
305
|
return scanCommandCodeQuestionScreen(frame) !== null;
|
|
689
306
|
}
|
|
690
|
-
/**
|
|
691
|
-
* The Review page's own three rows, measured on 1.54.1 (Issue #2755 §7).
|
|
692
|
-
*
|
|
693
|
-
* `Enter` on the `Submit` row does not send the answers — it opens a SECOND
|
|
694
|
-
* screen:
|
|
695
|
-
*
|
|
696
|
-
* ✔ Update scope | ● Review
|
|
697
|
-
*
|
|
698
|
-
* 1. Which files should I update?
|
|
699
|
-
* calc.js
|
|
700
|
-
*
|
|
701
|
-
* ❯ 1. Submit
|
|
702
|
-
* 2. Cancel
|
|
703
|
-
*
|
|
704
|
-
* ← to go back and edit
|
|
705
|
-
*
|
|
706
|
-
* ## Why this needs a reading of its own
|
|
707
|
-
*
|
|
708
|
-
* Because it is a real numbered list under a real tab strip, and the GENERIC
|
|
709
|
-
* parser answers it: a two-option `multiple_choice` whose default is `Submit`.
|
|
710
|
-
* The default answer on that payload does not pick anything — it COMMITS
|
|
711
|
-
* whatever the human has ticked so far, from a payload nobody meant to expose,
|
|
712
|
-
* which is #1928's shape one screen later. Auto-Yes fires on defaults.
|
|
713
|
-
*
|
|
714
|
-
* Words rather than structure, and deliberately: the two numbered rows are
|
|
715
|
-
* `Submit` and `Cancel`, which is the same shape as any other two-option
|
|
716
|
-
* question. What separates this page from a question is only what it SAYS, so
|
|
717
|
-
* all three rows are required together — the confirm pair AND the back hint —
|
|
718
|
-
* and the whole thing is anchored inside a recognised question region. A screen
|
|
719
|
-
* that carries two of the three keeps every verdict it had.
|
|
720
|
-
*
|
|
721
|
-
* The cursor glyph is optional on both numbered rows: it rests on `1. Submit`
|
|
722
|
-
* when the page is reached by `Enter`, and the Issue is explicit that a pattern
|
|
723
|
-
* decided on the bare word would miss it.
|
|
724
|
-
*/
|
|
725
|
-
const COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN = /^[^\S\n]*(?:\u276F[^\S\n]*)?1[.)][^\S\n]+Submit[^\S\n]*$/im;
|
|
726
|
-
/** The `Cancel` half of {@link COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN}'s pair. */
|
|
727
|
-
const COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN = /^[^\S\n]*(?:\u276F[^\S\n]*)?2[.)][^\S\n]+Cancel[^\S\n]*$/im;
|
|
728
|
-
/** The footer only the Review page draws. */
|
|
729
|
-
const COMMAND_CODE_REVIEW_BACK_HINT_PATTERN = /^[^\S\n]*\u2190[^\S\n]+to[^\S\n]+go[^\S\n]+back[^\S\n]+and[^\S\n]+edit[^\S\n]*$/im;
|
|
730
|
-
/**
|
|
731
|
-
* The warning the Review page carries when it was reached with answers missing.
|
|
732
|
-
*
|
|
733
|
-
* Measured from the undocumented `d`, which ends a multi-select from any row:
|
|
734
|
-
* `⚠ You have not answered all questions` over a `No answer`. Issue #2755 §7
|
|
735
|
-
* requires that such a page is never read as "answered", which is why the
|
|
736
|
-
* predicate below reports it rather than hiding it.
|
|
737
|
-
*/
|
|
738
|
-
const COMMAND_CODE_REVIEW_UNANSWERED_PATTERN = /have\s+not\s+answered\s+all\s+questions/i;
|
|
739
|
-
/**
|
|
740
|
-
* Read Command Code's `AskUserQuestion` Review page, if this frame is one
|
|
741
|
-
* (Issue #2755 §7).
|
|
742
|
-
*
|
|
743
|
-
* The same region {@link readCommandCodeQuestionRegion} works on — last rule
|
|
744
|
-
* row, tab strip as the first row under it — plus the three rows above. The
|
|
745
|
-
* question-shaped conditions are deliberately NOT applied: this page has no
|
|
746
|
-
* question body of its own on the `Submit`/`Cancel` spelling (the answers sit
|
|
747
|
-
* where the question would), and it draws `1.` twice, so the strict reading
|
|
748
|
-
* declines it for a numbering reason that says nothing about what it is.
|
|
749
|
-
*
|
|
750
|
-
* `null` for everything else, so no existing verdict moves except the two
|
|
751
|
-
* captures this is about.
|
|
752
|
-
*
|
|
753
|
-
* @param frame - a raw `capture-pane -p -e` frame, ANSI intact (CRLF tolerated)
|
|
754
|
-
*/
|
|
755
|
-
function readCommandCodeReviewPage(frame) {
|
|
756
|
-
if (!frame)
|
|
757
|
-
return null;
|
|
758
|
-
const lines = frame.replace(/\r\n/g, '\n').split('\n').map(ansi_1.stripAnsi);
|
|
759
|
-
let last = lines.length - 1;
|
|
760
|
-
while (last >= 0 && lines[last].trim() === '')
|
|
761
|
-
last -= 1;
|
|
762
|
-
if (last < 1)
|
|
763
|
-
return null;
|
|
764
|
-
let ruleLineIndex = -1;
|
|
765
|
-
for (let i = last - 1; i >= 0; i -= 1) {
|
|
766
|
-
const row = lines[i].trim();
|
|
767
|
-
if (row.length < COMMAND_CODE_RULE_MIN_COLUMNS)
|
|
768
|
-
continue;
|
|
769
|
-
if (!COMMAND_CODE_RULE_ROW_PATTERN.test(row))
|
|
770
|
-
continue;
|
|
771
|
-
ruleLineIndex = i;
|
|
772
|
-
break;
|
|
773
|
-
}
|
|
774
|
-
if (ruleLineIndex < 0)
|
|
775
|
-
return null;
|
|
776
|
-
const region = lines.slice(ruleLineIndex + 1, last + 1);
|
|
777
|
-
const tabOffset = region.findIndex((line) => line.trim() !== '');
|
|
778
|
-
if (tabOffset < 0)
|
|
779
|
-
return null;
|
|
780
|
-
if (!isCommandCodeQuestionTabRow(region[tabOffset]))
|
|
781
|
-
return null;
|
|
782
|
-
const body = region.join('\n');
|
|
783
|
-
if (!COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(body))
|
|
784
|
-
return null;
|
|
785
|
-
if (!COMMAND_CODE_REVIEW_CANCEL_ROW_PATTERN.test(body))
|
|
786
|
-
return null;
|
|
787
|
-
if (!COMMAND_CODE_REVIEW_BACK_HINT_PATTERN.test(body))
|
|
788
|
-
return null;
|
|
789
|
-
const submitRow = region.find((row) => COMMAND_CODE_REVIEW_SUBMIT_ROW_PATTERN.test(row));
|
|
790
|
-
return {
|
|
791
|
-
hasUnansweredWarning: COMMAND_CODE_REVIEW_UNANSWERED_PATTERN.test(body),
|
|
792
|
-
cursorOnSubmit: submitRow !== undefined && submitRow.includes(COMMAND_CODE_CURSOR_GLYPH),
|
|
793
|
-
};
|
|
794
|
-
}
|
|
795
307
|
/**
|
|
796
308
|
* The structural half of the question-screen reading, shared by the strict
|
|
797
309
|
* {@link readCommandCodeQuestionRegion} and the weaker
|
|
@@ -816,9 +328,9 @@ function scanCommandCodeQuestionScreen(frame) {
|
|
|
816
328
|
let ruleLineIndex = -1;
|
|
817
329
|
for (let i = last - 1; i >= 0; i -= 1) {
|
|
818
330
|
const row = lines[i].trim();
|
|
819
|
-
if (row.length < COMMAND_CODE_RULE_MIN_COLUMNS)
|
|
331
|
+
if (row.length < selection_shape_1.COMMAND_CODE_RULE_MIN_COLUMNS)
|
|
820
332
|
continue;
|
|
821
|
-
if (!COMMAND_CODE_RULE_ROW_PATTERN.test(row))
|
|
333
|
+
if (!selection_shape_1.COMMAND_CODE_RULE_ROW_PATTERN.test(row))
|
|
822
334
|
continue;
|
|
823
335
|
ruleLineIndex = i;
|
|
824
336
|
break;
|
|
@@ -828,19 +340,19 @@ function scanCommandCodeQuestionScreen(frame) {
|
|
|
828
340
|
const region = lines.slice(ruleLineIndex + 1, last + 1);
|
|
829
341
|
const body = region.join('\n');
|
|
830
342
|
// 5. The screens this reading must not take over.
|
|
831
|
-
if (FILTER_INPUT_PATTERN.test(body))
|
|
343
|
+
if (selection_shape_patterns_1.FILTER_INPUT_PATTERN.test(body))
|
|
832
344
|
return null;
|
|
833
|
-
if (
|
|
345
|
+
if (selection_shape_1.COMMAND_CODE_SELECTION_LIST_FOOTER.test(body))
|
|
834
346
|
return null;
|
|
835
|
-
if (
|
|
347
|
+
if (selection_shape_1.DISMISSABLE_PANEL_FOOTER_PATTERN.test(body))
|
|
836
348
|
return null;
|
|
837
|
-
if (COMMAND_CODE_QUESTION_REGION_REJECT_PATTERN.test(body))
|
|
349
|
+
if (selection_shape_1.COMMAND_CODE_QUESTION_REGION_REJECT_PATTERN.test(body))
|
|
838
350
|
return null;
|
|
839
351
|
// 2. The tab strip opens the region.
|
|
840
352
|
const tabOffset = region.findIndex((line) => line.trim() !== '');
|
|
841
353
|
if (tabOffset < 0)
|
|
842
354
|
return null;
|
|
843
|
-
if (!isCommandCodeQuestionTabRow(region[tabOffset]))
|
|
355
|
+
if (!(0, selection_shape_1.isCommandCodeQuestionTabRow)(region[tabOffset]))
|
|
844
356
|
return null;
|
|
845
357
|
// 3. Numbered rows under it.
|
|
846
358
|
const numbers = [];
|
|
@@ -893,7 +405,7 @@ function scanCommandCodeQuestionScreen(frame) {
|
|
|
893
405
|
let cursorOffset = -1;
|
|
894
406
|
let cursorOnOptionRow = false;
|
|
895
407
|
for (let i = 0; i < region.length; i += 1) {
|
|
896
|
-
const inRow = region[i].split(COMMAND_CODE_CURSOR_GLYPH).length - 1;
|
|
408
|
+
const inRow = region[i].split(selection_shape_1.COMMAND_CODE_CURSOR_GLYPH).length - 1;
|
|
897
409
|
if (inRow === 0)
|
|
898
410
|
continue;
|
|
899
411
|
cursorCount += inRow;
|
|
@@ -977,7 +489,7 @@ function extractCommandCodeSelectionListFrame(frame) {
|
|
|
977
489
|
const lines = frame.replace(/\r\n/g, '\n').split('\n');
|
|
978
490
|
let footer = -1;
|
|
979
491
|
for (let i = lines.length - 1; i >= 0; i -= 1) {
|
|
980
|
-
if (
|
|
492
|
+
if (selection_shape_1.COMMAND_CODE_SELECTION_LIST_FOOTER.test((0, ansi_1.stripAnsi)(lines[i]))) {
|
|
981
493
|
footer = i;
|
|
982
494
|
break;
|
|
983
495
|
}
|
|
@@ -1000,9 +512,9 @@ function extractCommandCodeSelectionListFrame(frame) {
|
|
|
1000
512
|
}
|
|
1001
513
|
for (let i = footer - 1; i >= 0; i -= 1) {
|
|
1002
514
|
const row = (0, ansi_1.stripAnsi)(lines[i]).trim();
|
|
1003
|
-
if (row.length < COMMAND_CODE_RULE_MIN_COLUMNS)
|
|
515
|
+
if (row.length < selection_shape_1.COMMAND_CODE_RULE_MIN_COLUMNS)
|
|
1004
516
|
continue;
|
|
1005
|
-
if (!COMMAND_CODE_RULE_ROW_PATTERN.test(row))
|
|
517
|
+
if (!selection_shape_1.COMMAND_CODE_RULE_ROW_PATTERN.test(row))
|
|
1006
518
|
continue;
|
|
1007
519
|
return lines.slice(i + 1, footer + 1).join('\n');
|
|
1008
520
|
}
|
|
@@ -1074,8 +586,8 @@ function readSelectionListShape(frame) {
|
|
|
1074
586
|
optionCount: countTrailingOptionRun(lines),
|
|
1075
587
|
offersSessionScope: exports.SESSION_SCOPE_FOOTER_PATTERN.test(tail),
|
|
1076
588
|
commitsDefaultOnEnter: exports.SET_AS_DEFAULT_FOOTER_PATTERN.test(tail),
|
|
1077
|
-
hasFilterInput: FILTER_INPUT_PATTERN.test(tail),
|
|
1078
|
-
offersPlanApprove:
|
|
589
|
+
hasFilterInput: selection_shape_patterns_1.FILTER_INPUT_PATTERN.test(tail),
|
|
590
|
+
offersPlanApprove: selection_shape_patterns_1.COMMAND_CODE_PLAN_REVIEW_FOOTER.test(tail),
|
|
1079
591
|
};
|
|
1080
592
|
}
|
|
1081
593
|
/**
|