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,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOrInitGlobal = getOrInitGlobal;
|
|
4
|
+
/**
|
|
5
|
+
* Process-wide state helper for the `globalThis.__*` cache pattern.
|
|
6
|
+
*
|
|
7
|
+
* Returns the value already stored on `globalThis[key]`, or runs `init` once and
|
|
8
|
+
* stores its result. `init` runs only when the slot is `null`/`undefined`, at the
|
|
9
|
+
* moment this function is called (so callers keep their own init timing).
|
|
10
|
+
*
|
|
11
|
+
* `key` and the initial value are typed from each file's `declare global`
|
|
12
|
+
* declaration. This module imports nothing so any layer (server, CLI) can use it.
|
|
13
|
+
*/
|
|
14
|
+
function getOrInitGlobal(key, init) {
|
|
15
|
+
return (globalThis[key] ??= init());
|
|
16
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why an auto-answer was withheld.
|
|
3
|
+
*
|
|
4
|
+
* `deny-pattern-unusable` is the fail-closed case: a deny pattern that cannot be
|
|
5
|
+
* evaluated (unsafe, unparseable, or over-long) suppresses instead of being
|
|
6
|
+
* skipped. Ignoring it would silently drop the protection the contract author
|
|
7
|
+
* asked for, which is the more dangerous of the two directions.
|
|
8
|
+
*/
|
|
9
|
+
export type AutoYesSuppressionReason = 'mode-off' | 'deny-pattern' | 'deny-pattern-unusable' | 'type-not-allowed'
|
|
10
|
+
/**
|
|
11
|
+
* Issue #1829: not a policy verdict at all, but the same outcome recorded
|
|
12
|
+
* through the same channel. The prompt on screen is a CLI-lifecycle dialog
|
|
13
|
+
* whose answer belongs to the tool's own launch sequence, so the poller
|
|
14
|
+
* withheld one. Listed here so `capture --json` / `cmate wait` can name it
|
|
15
|
+
* instead of showing a session that has silently gone quiet.
|
|
16
|
+
*/
|
|
17
|
+
| 'agent-launch-dialog'
|
|
18
|
+
/**
|
|
19
|
+
* Issue #1924 (§4 D1 decision 4): the generic estimator read a numbered list
|
|
20
|
+
* on the frame and the tool's own dialog detector did not vouch for it, so
|
|
21
|
+
* nothing was sent.
|
|
22
|
+
*
|
|
23
|
+
* Also not a policy verdict. It is the reason code for the one position that
|
|
24
|
+
* can stop #1896 — an agent quoting a numbered list in its *answer* and
|
|
25
|
+
* Auto-Yes replying `1` to the prose. `detectPrompt`'s generic estimate is
|
|
26
|
+
* true on that frame and the tool-specific `detectDialog` is false, and this
|
|
27
|
+
* names the gap instead of letting the session go quiet with no record.
|
|
28
|
+
*
|
|
29
|
+
* Declared in Phase 1 (Issue #1924) and recorded from Phase 3, when the
|
|
30
|
+
* tool-specific detectors that can disagree with the estimator exist.
|
|
31
|
+
*/
|
|
32
|
+
| 'unclassified-frame';
|
|
33
|
+
//# sourceMappingURL=auto-yes-suppression-reason.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-yes-suppression-reason.d.ts","sourceRoot":"","sources":["../../../src/lib/polling/auto-yes-suppression-reason.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAChC,UAAU,GACV,cAAc,GACd,uBAAuB,GACvB,kBAAkB;AACpB;;;;;;GAMG;GACD,qBAAqB;AACvB;;;;;;;;;;;;;GAaG;GACD,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a waiting prompt is shown and answered, decided once (Issue #3184).
|
|
3
|
+
*
|
|
4
|
+
* Before this module every reader of a prompt payload re-derived the same three
|
|
5
|
+
* facts for itself — "can it be answered?", "where are the choices?", "is the
|
|
6
|
+
* answer a keystroke or an API call?" — from `type`, `options`,
|
|
7
|
+
* `decisionOptions`, `decisionId` and `askUserQuestion`. The panel, the phone
|
|
8
|
+
* sheet, the chat surface, Auto-Yes and `wait` each combined them a little
|
|
9
|
+
* differently, and a fix to one surface kept missing the others (#2775 →
|
|
10
|
+
* #2810 → #2822, #3181). {@link derivePromptView} is the one combination; a
|
|
11
|
+
* reader takes its {@link PromptView} and does not look at the raw fields to
|
|
12
|
+
* decide what to show.
|
|
13
|
+
*
|
|
14
|
+
* ## No imports, on purpose
|
|
15
|
+
*
|
|
16
|
+
* The CLI (`tsconfig.cli.json`) compiles with `"paths": {}`, so it can reach a
|
|
17
|
+
* module under `src/lib` by a relative path only when nothing in that module's
|
|
18
|
+
* graph uses the `@/` alias. `types/models` and `session/structured-prompt` both
|
|
19
|
+
* do. The input is therefore a structural type ({@link PromptViewSource}) that
|
|
20
|
+
* every existing prompt shape — `LivePromptData`, `StoredPromptData`, the CLI's
|
|
21
|
+
* own `PromptData` mirror — satisfies without a cast, and this file stays
|
|
22
|
+
* importable from a client component, the server and the CLI alike.
|
|
23
|
+
*
|
|
24
|
+
* ## What it does not replace
|
|
25
|
+
*
|
|
26
|
+
* `isAnswerablePromptData()` (`types/models`) stays: it narrows to the closed
|
|
27
|
+
* `PromptData` union (#1725) for the code that builds an answer body. The two
|
|
28
|
+
* agree by construction — `derivePromptView(x)?.kind === 'screen-choices'`
|
|
29
|
+
* exactly when `isAnswerablePromptData(x)` — and
|
|
30
|
+
* `tests/unit/session/prompt-view-3184.test.ts` holds that over every fixture.
|
|
31
|
+
*
|
|
32
|
+
* @module lib/session/prompt-view
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* `promptData.type` for a frame nothing could classify. Same value as
|
|
36
|
+
* `UNCLASSIFIED_PROMPT_TYPE` in `types/models`, restated because this module may
|
|
37
|
+
* not import it (see the module note); the test asserts the two are equal.
|
|
38
|
+
*/
|
|
39
|
+
export declare const UNCLASSIFIED_PROMPT_VIEW_TYPE = "unclassified";
|
|
40
|
+
/**
|
|
41
|
+
* The fields {@link derivePromptView} reads. Every prompt shape in the codebase
|
|
42
|
+
* is assignable to it as it stands.
|
|
43
|
+
*/
|
|
44
|
+
export interface PromptViewSource {
|
|
45
|
+
type: string;
|
|
46
|
+
question?: string;
|
|
47
|
+
status?: string;
|
|
48
|
+
options?: readonly unknown[];
|
|
49
|
+
defaultOption?: unknown;
|
|
50
|
+
multiSelect?: boolean;
|
|
51
|
+
decisionId?: unknown;
|
|
52
|
+
decisionOptions?: unknown;
|
|
53
|
+
askUserQuestion?: unknown;
|
|
54
|
+
toolName?: unknown;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* How the prompt is answered. "Free text" is not a fourth value: it is the
|
|
58
|
+
* orthogonal {@link PromptView.freeText}, because every prompt that takes typed
|
|
59
|
+
* text today also offers choices (design §2.4).
|
|
60
|
+
*
|
|
61
|
+
* - `screen-choices`: keys on the pane — the option number, or y/n
|
|
62
|
+
* (`/prompt-response`).
|
|
63
|
+
* - `api-choices`: the agent's own API, addressed by `decisionId` (`/respond`).
|
|
64
|
+
* - `unreadable`: nothing to offer; the human answers in the terminal.
|
|
65
|
+
*/
|
|
66
|
+
export type PromptViewKind = 'screen-choices' | 'api-choices' | 'unreadable';
|
|
67
|
+
/** What the heading above the prompt says. */
|
|
68
|
+
export type PromptViewHeading =
|
|
69
|
+
/** The question read off the screen. */
|
|
70
|
+
{
|
|
71
|
+
kind: 'question';
|
|
72
|
+
text: string;
|
|
73
|
+
}
|
|
74
|
+
/** An approval answered over the API (#3181's heading). */
|
|
75
|
+
| {
|
|
76
|
+
kind: 'approval';
|
|
77
|
+
toolName: string | null;
|
|
78
|
+
}
|
|
79
|
+
/** A question answered over the API (#2039). */
|
|
80
|
+
| {
|
|
81
|
+
kind: 'agent-question';
|
|
82
|
+
text: string;
|
|
83
|
+
}
|
|
84
|
+
/** "A dialog is open but its options could not be read." */
|
|
85
|
+
| {
|
|
86
|
+
kind: 'unreadable';
|
|
87
|
+
};
|
|
88
|
+
/** One choice a surface may offer. */
|
|
89
|
+
export interface PromptViewChoice {
|
|
90
|
+
/**
|
|
91
|
+
* The value an answer sends: the option number (`'1'`) or `'yes'`/`'no'` on
|
|
92
|
+
* the screen; the number `respond` resolves for an API decision.
|
|
93
|
+
*/
|
|
94
|
+
answer: string;
|
|
95
|
+
label: string;
|
|
96
|
+
isDefault: boolean;
|
|
97
|
+
/** Choosing it opens a text field (#2573's rule, {@link optionTakesTypedText}). */
|
|
98
|
+
takesText: boolean;
|
|
99
|
+
description?: string;
|
|
100
|
+
}
|
|
101
|
+
/** The one shape every surface reads (Issue #3184). */
|
|
102
|
+
export interface PromptView {
|
|
103
|
+
kind: PromptViewKind;
|
|
104
|
+
heading: PromptViewHeading;
|
|
105
|
+
/** Always empty for `unreadable`. */
|
|
106
|
+
choices: readonly PromptViewChoice[];
|
|
107
|
+
/** A checkbox question (#2755). Only ever true for `screen-choices`. */
|
|
108
|
+
multiSelect: boolean;
|
|
109
|
+
/** Whether typed text is accepted, and by which channel; null when it is not. */
|
|
110
|
+
freeText: {
|
|
111
|
+
via: 'screen' | 'api';
|
|
112
|
+
} | null;
|
|
113
|
+
/** Non-null exactly when `kind === 'api-choices'` (#2031's biconditional). */
|
|
114
|
+
decisionId: string | null;
|
|
115
|
+
/** For `api-choices`, which kind of decision the id names; null otherwise. */
|
|
116
|
+
apiTarget: 'approval' | 'question' | null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* What a surface prints as the heading, as a `prompt.*` message key (Issue
|
|
120
|
+
* #3181, #3184). `text` is set instead of `key` for a question read off the
|
|
121
|
+
* screen, which is printed verbatim. Both answer surfaces translate THIS rather
|
|
122
|
+
* than mapping the heading kinds themselves, so the two cannot disagree about
|
|
123
|
+
* when "could not read its options" is the truth.
|
|
124
|
+
*/
|
|
125
|
+
export type PromptHeadingMessage = {
|
|
126
|
+
text: string;
|
|
127
|
+
} | {
|
|
128
|
+
key: 'structuredApprovalTitle';
|
|
129
|
+
values: {
|
|
130
|
+
toolName: string;
|
|
131
|
+
};
|
|
132
|
+
} | {
|
|
133
|
+
key: 'structuredApprovalTitleNoTool' | 'structuredQuestionTitle' | 'unclassifiedTitle';
|
|
134
|
+
};
|
|
135
|
+
export declare function promptHeadingMessage(heading: PromptViewHeading): PromptHeadingMessage;
|
|
136
|
+
/**
|
|
137
|
+
* Labels of the rows measured to BE a text field on screen (Issue #2573).
|
|
138
|
+
*
|
|
139
|
+
* `requiresTextInput` (from {@link TEXT_INPUT_PATTERNS}) reads the WORDS of a
|
|
140
|
+
* label — "tell … what to do differently", "custom", "enter …" — and says the
|
|
141
|
+
* option is about the user's own text. It does not say where typed characters
|
|
142
|
+
* land, and for two rows it flags alike the measured answer is opposite:
|
|
143
|
+
*
|
|
144
|
+
* | row | on screen | free text + Enter |
|
|
145
|
+
* |-----|-----------|-------------------|
|
|
146
|
+
* | Command Code `AskUserQuestion` `Type something...` (#2522) | a `TextInput` | lands in the field — the answer |
|
|
147
|
+
* | Command Code permission `No, tell Command Code what to do differently` | a menu row | ignored; the Enter confirms the highlighted `1. Yes` |
|
|
148
|
+
*
|
|
149
|
+
* The second is how a "No + reason" was delivered as an approval. The same
|
|
150
|
+
* words sit on codex's and copilot's approval rows (codex's also name letter
|
|
151
|
+
* hotkeys, `(y)` / `(p)`), and the generic patterns match inside the command an
|
|
152
|
+
* approval row quotes (`… commands that start with 'npm run custom'`).
|
|
153
|
+
*
|
|
154
|
+
* So this is an allowlist of what was measured, not a denylist of what went
|
|
155
|
+
* wrong: a flagged row is a field only when its label is one of these. Anchored
|
|
156
|
+
* at the start so Command Code's folded description (`Type something... Give me
|
|
157
|
+
* a branch name …`) still matches. Command Code's reader
|
|
158
|
+
* (`tools/command-code/dialog.ts`) marks the same rows with the same expression.
|
|
159
|
+
*
|
|
160
|
+
* The one definition since Issue #3218: `isTypedTextFieldOption` in
|
|
161
|
+
* `lib/detection/prompt-detect-multiple-choice`, whose graph reaches `fs`,
|
|
162
|
+
* reads it through `optionTakesTypedText` below.
|
|
163
|
+
*/
|
|
164
|
+
export declare const TYPED_TEXT_FIELD_LABEL_PATTERNS: readonly RegExp[];
|
|
165
|
+
/**
|
|
166
|
+
* Whether an option is a text field on screen, so its answer is the typed TEXT
|
|
167
|
+
* rather than its number (Issue #2573). `requiresTextInput` alone is also true
|
|
168
|
+
* for a menu row such as `No, tell Command Code what to do differently`.
|
|
169
|
+
*/
|
|
170
|
+
export declare function optionTakesTypedText(option: {
|
|
171
|
+
readonly label: string;
|
|
172
|
+
readonly requiresTextInput?: boolean;
|
|
173
|
+
}): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* The decision id a payload names, or null (Issue #1932). A validating read:
|
|
176
|
+
* absent, empty or not a string is "no addressable decision".
|
|
177
|
+
*/
|
|
178
|
+
export declare function readDecisionId(source: PromptViewSource | null | undefined): string | null;
|
|
179
|
+
/** The choices of a question answered over the API (Issue #2039 / #2951). */
|
|
180
|
+
export interface QuestionChoices {
|
|
181
|
+
question: string;
|
|
182
|
+
/** In payload order; the answer is the 1-based POSITION in this list. */
|
|
183
|
+
labels: string[];
|
|
184
|
+
questionCount: number;
|
|
185
|
+
/** A typed answer is accepted besides the choices (#2951). */
|
|
186
|
+
custom?: true;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* The choices a question offers when it may be answered over the API, or null
|
|
190
|
+
* (Issue #2039). All three must hold: a decision id, exactly one question with
|
|
191
|
+
* a complete label list, and NO approval verdicts on the same payload.
|
|
192
|
+
*/
|
|
193
|
+
export declare function readQuestionChoices(source: PromptViewSource | null | undefined): QuestionChoices | null;
|
|
194
|
+
/** What a heading should say when the payload carries addressable choices (#3181). */
|
|
195
|
+
export type DecisionHeading = {
|
|
196
|
+
kind: 'approval';
|
|
197
|
+
toolName: string | null;
|
|
198
|
+
} | {
|
|
199
|
+
kind: 'question';
|
|
200
|
+
};
|
|
201
|
+
/** The heading for addressable choices, or null when there is nothing to click (#3181). */
|
|
202
|
+
export declare function readDecisionHeading(source: PromptViewSource | null | undefined): DecisionHeading | null;
|
|
203
|
+
/**
|
|
204
|
+
* Decide how a prompt payload is shown and answered (Issue #3184).
|
|
205
|
+
*
|
|
206
|
+
* Evaluated in this order (design §2.3):
|
|
207
|
+
* 1. any `type` but the unclassified sentinel → `screen-choices`;
|
|
208
|
+
* 2. unclassified + decision id + approval verdicts → `api-choices` (approval);
|
|
209
|
+
* 3. unclassified + decision id + one complete question → `api-choices` (question);
|
|
210
|
+
* 4. every other unclassified payload — no id, #1932's options-without-id half
|
|
211
|
+
* state, and both stored history records — → `unreadable`.
|
|
212
|
+
*
|
|
213
|
+
* @param source - A live or stored prompt payload, or null
|
|
214
|
+
* @returns The view, or null when there is no prompt
|
|
215
|
+
*/
|
|
216
|
+
export declare function derivePromptView(source: PromptViewSource | null | undefined): PromptView | null;
|
|
217
|
+
/**
|
|
218
|
+
* The view a `current-output` payload carries, falling back to deriving it.
|
|
219
|
+
*
|
|
220
|
+
* `??`, not `||`: a server from before #3184 sends no `promptView`, and its
|
|
221
|
+
* absence means "this daemon does not publish the field" — the same function
|
|
222
|
+
* then decides from `promptData`, so old and new servers reach the same answer.
|
|
223
|
+
*/
|
|
224
|
+
export declare function readPromptView(payload: {
|
|
225
|
+
promptView?: PromptView | null;
|
|
226
|
+
promptData?: PromptViewSource | null;
|
|
227
|
+
} | null | undefined): PromptView | null;
|
|
228
|
+
//# sourceMappingURL=prompt-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-view.d.ts","sourceRoot":"","sources":["../../../src/lib/session/prompt-view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,iBAAiB,CAAC;AAE5D;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,aAAa,GAAG,YAAY,CAAC;AAE7E,8CAA8C;AAC9C,MAAM,MAAM,iBAAiB;AAC3B,wCAAwC;AACtC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACpC,2DAA2D;GACzD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE;AAC/C,gDAAgD;GAC9C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC1C,4DAA4D;GAC1D;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAE3B,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,qCAAqC;IACrC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,wEAAwE;IACxE,WAAW,EAAE,OAAO,CAAC;IACrB,iFAAiF;IACjF,QAAQ,EAAE;QAAE,GAAG,EAAE,QAAQ,GAAG,KAAK,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3C,8EAA8E;IAC9E,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,8EAA8E;IAC9E,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,GAAG,EAAE,yBAAyB,CAAC;IAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAChE;IAAE,GAAG,EAAE,+BAA+B,GAAG,yBAAyB,GAAG,mBAAmB,CAAA;CAAE,CAAC;AAE/F,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,oBAAoB,CAarF;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,+BAA+B,EAAE,SAAS,MAAM,EAE5D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GACvE,OAAO,CAGT;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIzF;AAMD,6EAA6E;AAC7E,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,IAAI,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC1C,eAAe,GAAG,IAAI,CA2BxB;AAED,sFAAsF;AACtF,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzB,2FAA2F;AAC3F,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC1C,eAAe,GAAG,IAAI,CASxB;AAuDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAsD/F;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACnG,UAAU,GAAG,IAAI,CAGnB"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* How a waiting prompt is shown and answered, decided once (Issue #3184).
|
|
4
|
+
*
|
|
5
|
+
* Before this module every reader of a prompt payload re-derived the same three
|
|
6
|
+
* facts for itself — "can it be answered?", "where are the choices?", "is the
|
|
7
|
+
* answer a keystroke or an API call?" — from `type`, `options`,
|
|
8
|
+
* `decisionOptions`, `decisionId` and `askUserQuestion`. The panel, the phone
|
|
9
|
+
* sheet, the chat surface, Auto-Yes and `wait` each combined them a little
|
|
10
|
+
* differently, and a fix to one surface kept missing the others (#2775 →
|
|
11
|
+
* #2810 → #2822, #3181). {@link derivePromptView} is the one combination; a
|
|
12
|
+
* reader takes its {@link PromptView} and does not look at the raw fields to
|
|
13
|
+
* decide what to show.
|
|
14
|
+
*
|
|
15
|
+
* ## No imports, on purpose
|
|
16
|
+
*
|
|
17
|
+
* The CLI (`tsconfig.cli.json`) compiles with `"paths": {}`, so it can reach a
|
|
18
|
+
* module under `src/lib` by a relative path only when nothing in that module's
|
|
19
|
+
* graph uses the `@/` alias. `types/models` and `session/structured-prompt` both
|
|
20
|
+
* do. The input is therefore a structural type ({@link PromptViewSource}) that
|
|
21
|
+
* every existing prompt shape — `LivePromptData`, `StoredPromptData`, the CLI's
|
|
22
|
+
* own `PromptData` mirror — satisfies without a cast, and this file stays
|
|
23
|
+
* importable from a client component, the server and the CLI alike.
|
|
24
|
+
*
|
|
25
|
+
* ## What it does not replace
|
|
26
|
+
*
|
|
27
|
+
* `isAnswerablePromptData()` (`types/models`) stays: it narrows to the closed
|
|
28
|
+
* `PromptData` union (#1725) for the code that builds an answer body. The two
|
|
29
|
+
* agree by construction — `derivePromptView(x)?.kind === 'screen-choices'`
|
|
30
|
+
* exactly when `isAnswerablePromptData(x)` — and
|
|
31
|
+
* `tests/unit/session/prompt-view-3184.test.ts` holds that over every fixture.
|
|
32
|
+
*
|
|
33
|
+
* @module lib/session/prompt-view
|
|
34
|
+
*/
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TYPED_TEXT_FIELD_LABEL_PATTERNS = exports.UNCLASSIFIED_PROMPT_VIEW_TYPE = void 0;
|
|
37
|
+
exports.promptHeadingMessage = promptHeadingMessage;
|
|
38
|
+
exports.optionTakesTypedText = optionTakesTypedText;
|
|
39
|
+
exports.readDecisionId = readDecisionId;
|
|
40
|
+
exports.readQuestionChoices = readQuestionChoices;
|
|
41
|
+
exports.readDecisionHeading = readDecisionHeading;
|
|
42
|
+
exports.derivePromptView = derivePromptView;
|
|
43
|
+
exports.readPromptView = readPromptView;
|
|
44
|
+
/**
|
|
45
|
+
* `promptData.type` for a frame nothing could classify. Same value as
|
|
46
|
+
* `UNCLASSIFIED_PROMPT_TYPE` in `types/models`, restated because this module may
|
|
47
|
+
* not import it (see the module note); the test asserts the two are equal.
|
|
48
|
+
*/
|
|
49
|
+
exports.UNCLASSIFIED_PROMPT_VIEW_TYPE = 'unclassified';
|
|
50
|
+
function promptHeadingMessage(heading) {
|
|
51
|
+
switch (heading.kind) {
|
|
52
|
+
case 'question':
|
|
53
|
+
return { text: heading.text };
|
|
54
|
+
case 'approval':
|
|
55
|
+
return heading.toolName
|
|
56
|
+
? { key: 'structuredApprovalTitle', values: { toolName: heading.toolName } }
|
|
57
|
+
: { key: 'structuredApprovalTitleNoTool' };
|
|
58
|
+
case 'agent-question':
|
|
59
|
+
return { key: 'structuredQuestionTitle' };
|
|
60
|
+
case 'unreadable':
|
|
61
|
+
return { key: 'unclassifiedTitle' };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// =============================================================================
|
|
65
|
+
// Field readers (moved from components/worktree/prompt-decision-id, #1932/#2039/#3181)
|
|
66
|
+
// =============================================================================
|
|
67
|
+
/**
|
|
68
|
+
* Labels of the rows measured to BE a text field on screen (Issue #2573).
|
|
69
|
+
*
|
|
70
|
+
* `requiresTextInput` (from {@link TEXT_INPUT_PATTERNS}) reads the WORDS of a
|
|
71
|
+
* label — "tell … what to do differently", "custom", "enter …" — and says the
|
|
72
|
+
* option is about the user's own text. It does not say where typed characters
|
|
73
|
+
* land, and for two rows it flags alike the measured answer is opposite:
|
|
74
|
+
*
|
|
75
|
+
* | row | on screen | free text + Enter |
|
|
76
|
+
* |-----|-----------|-------------------|
|
|
77
|
+
* | Command Code `AskUserQuestion` `Type something...` (#2522) | a `TextInput` | lands in the field — the answer |
|
|
78
|
+
* | Command Code permission `No, tell Command Code what to do differently` | a menu row | ignored; the Enter confirms the highlighted `1. Yes` |
|
|
79
|
+
*
|
|
80
|
+
* The second is how a "No + reason" was delivered as an approval. The same
|
|
81
|
+
* words sit on codex's and copilot's approval rows (codex's also name letter
|
|
82
|
+
* hotkeys, `(y)` / `(p)`), and the generic patterns match inside the command an
|
|
83
|
+
* approval row quotes (`… commands that start with 'npm run custom'`).
|
|
84
|
+
*
|
|
85
|
+
* So this is an allowlist of what was measured, not a denylist of what went
|
|
86
|
+
* wrong: a flagged row is a field only when its label is one of these. Anchored
|
|
87
|
+
* at the start so Command Code's folded description (`Type something... Give me
|
|
88
|
+
* a branch name …`) still matches. Command Code's reader
|
|
89
|
+
* (`tools/command-code/dialog.ts`) marks the same rows with the same expression.
|
|
90
|
+
*
|
|
91
|
+
* The one definition since Issue #3218: `isTypedTextFieldOption` in
|
|
92
|
+
* `lib/detection/prompt-detect-multiple-choice`, whose graph reaches `fs`,
|
|
93
|
+
* reads it through `optionTakesTypedText` below.
|
|
94
|
+
*/
|
|
95
|
+
exports.TYPED_TEXT_FIELD_LABEL_PATTERNS = [
|
|
96
|
+
/^[^\S\n]*type\s+something\b/i,
|
|
97
|
+
];
|
|
98
|
+
/**
|
|
99
|
+
* Whether an option is a text field on screen, so its answer is the typed TEXT
|
|
100
|
+
* rather than its number (Issue #2573). `requiresTextInput` alone is also true
|
|
101
|
+
* for a menu row such as `No, tell Command Code what to do differently`.
|
|
102
|
+
*/
|
|
103
|
+
function optionTakesTypedText(option) {
|
|
104
|
+
return option.requiresTextInput === true
|
|
105
|
+
&& exports.TYPED_TEXT_FIELD_LABEL_PATTERNS.some((pattern) => pattern.test(option.label));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The decision id a payload names, or null (Issue #1932). A validating read:
|
|
109
|
+
* absent, empty or not a string is "no addressable decision".
|
|
110
|
+
*/
|
|
111
|
+
function readDecisionId(source) {
|
|
112
|
+
if (!source)
|
|
113
|
+
return null;
|
|
114
|
+
const candidate = source.decisionId;
|
|
115
|
+
return typeof candidate === 'string' && candidate !== '' ? candidate : null;
|
|
116
|
+
}
|
|
117
|
+
function hasDecisionOptions(source) {
|
|
118
|
+
return Array.isArray(source.decisionOptions) && source.decisionOptions.length > 0;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The choices a question offers when it may be answered over the API, or null
|
|
122
|
+
* (Issue #2039). All three must hold: a decision id, exactly one question with
|
|
123
|
+
* a complete label list, and NO approval verdicts on the same payload.
|
|
124
|
+
*/
|
|
125
|
+
function readQuestionChoices(source) {
|
|
126
|
+
if (!source || readDecisionId(source) === null)
|
|
127
|
+
return null;
|
|
128
|
+
if (hasDecisionOptions(source))
|
|
129
|
+
return null;
|
|
130
|
+
const asked = source.askUserQuestion;
|
|
131
|
+
if (!asked || typeof asked.question !== 'string' || asked.question === '')
|
|
132
|
+
return null;
|
|
133
|
+
if (!Array.isArray(asked.labels) || asked.labels.length === 0)
|
|
134
|
+
return null;
|
|
135
|
+
const labels = asked.labels.filter((label) => typeof label === 'string' && label !== '');
|
|
136
|
+
// Partial is worse than none: the numbers are positions in this list.
|
|
137
|
+
if (labels.length !== asked.labels.length)
|
|
138
|
+
return null;
|
|
139
|
+
const questionCount = typeof asked.questionCount === 'number' ? asked.questionCount : 1;
|
|
140
|
+
if (questionCount !== 1)
|
|
141
|
+
return null;
|
|
142
|
+
return {
|
|
143
|
+
question: asked.question,
|
|
144
|
+
labels,
|
|
145
|
+
questionCount,
|
|
146
|
+
...(asked.custom === true ? { custom: true } : {}),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/** The heading for addressable choices, or null when there is nothing to click (#3181). */
|
|
150
|
+
function readDecisionHeading(source) {
|
|
151
|
+
if (!source || readDecisionId(source) === null)
|
|
152
|
+
return null;
|
|
153
|
+
if (hasDecisionOptions(source)) {
|
|
154
|
+
return {
|
|
155
|
+
kind: 'approval',
|
|
156
|
+
toolName: typeof source.toolName === 'string' && source.toolName ? source.toolName : null,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
return readQuestionChoices(source) ? { kind: 'question' } : null;
|
|
160
|
+
}
|
|
161
|
+
// =============================================================================
|
|
162
|
+
// The view
|
|
163
|
+
// =============================================================================
|
|
164
|
+
function screenChoices(source) {
|
|
165
|
+
const options = Array.isArray(source.options) ? source.options : [];
|
|
166
|
+
const choices = [];
|
|
167
|
+
for (const option of options) {
|
|
168
|
+
if (typeof option === 'string') {
|
|
169
|
+
// yes_no: `['yes', 'no']`, answered by the word itself.
|
|
170
|
+
choices.push({
|
|
171
|
+
answer: option,
|
|
172
|
+
label: option,
|
|
173
|
+
isDefault: source.defaultOption === option,
|
|
174
|
+
takesText: false,
|
|
175
|
+
});
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (!option || typeof option !== 'object')
|
|
179
|
+
continue;
|
|
180
|
+
const o = option;
|
|
181
|
+
if (typeof o.number !== 'number' || typeof o.label !== 'string')
|
|
182
|
+
continue;
|
|
183
|
+
choices.push({
|
|
184
|
+
answer: String(o.number),
|
|
185
|
+
label: o.label,
|
|
186
|
+
isDefault: o.isDefault === true,
|
|
187
|
+
takesText: optionTakesTypedText({ label: o.label, requiresTextInput: o.requiresTextInput === true }),
|
|
188
|
+
...(typeof o.description === 'string' ? { description: o.description } : {}),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return choices;
|
|
192
|
+
}
|
|
193
|
+
function decisionChoices(decisionOptions) {
|
|
194
|
+
if (!Array.isArray(decisionOptions))
|
|
195
|
+
return [];
|
|
196
|
+
const choices = [];
|
|
197
|
+
for (const option of decisionOptions) {
|
|
198
|
+
const o = option;
|
|
199
|
+
if (!o || typeof o.number !== 'number' || typeof o.label !== 'string')
|
|
200
|
+
continue;
|
|
201
|
+
choices.push({ answer: String(o.number), label: o.label, isDefault: false, takesText: false });
|
|
202
|
+
}
|
|
203
|
+
return choices;
|
|
204
|
+
}
|
|
205
|
+
const UNREADABLE_VIEW = {
|
|
206
|
+
kind: 'unreadable',
|
|
207
|
+
heading: { kind: 'unreadable' },
|
|
208
|
+
choices: [],
|
|
209
|
+
multiSelect: false,
|
|
210
|
+
freeText: null,
|
|
211
|
+
decisionId: null,
|
|
212
|
+
apiTarget: null,
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* Decide how a prompt payload is shown and answered (Issue #3184).
|
|
216
|
+
*
|
|
217
|
+
* Evaluated in this order (design §2.3):
|
|
218
|
+
* 1. any `type` but the unclassified sentinel → `screen-choices`;
|
|
219
|
+
* 2. unclassified + decision id + approval verdicts → `api-choices` (approval);
|
|
220
|
+
* 3. unclassified + decision id + one complete question → `api-choices` (question);
|
|
221
|
+
* 4. every other unclassified payload — no id, #1932's options-without-id half
|
|
222
|
+
* state, and both stored history records — → `unreadable`.
|
|
223
|
+
*
|
|
224
|
+
* @param source - A live or stored prompt payload, or null
|
|
225
|
+
* @returns The view, or null when there is no prompt
|
|
226
|
+
*/
|
|
227
|
+
function derivePromptView(source) {
|
|
228
|
+
if (source == null)
|
|
229
|
+
return null;
|
|
230
|
+
if (source.type !== exports.UNCLASSIFIED_PROMPT_VIEW_TYPE) {
|
|
231
|
+
const choices = screenChoices(source);
|
|
232
|
+
return {
|
|
233
|
+
kind: 'screen-choices',
|
|
234
|
+
heading: { kind: 'question', text: typeof source.question === 'string' ? source.question : '' },
|
|
235
|
+
choices,
|
|
236
|
+
multiSelect: source.multiSelect === true,
|
|
237
|
+
freeText: choices.some((choice) => choice.takesText) ? { via: 'screen' } : null,
|
|
238
|
+
decisionId: null,
|
|
239
|
+
apiTarget: null,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
const decisionId = readDecisionId(source);
|
|
243
|
+
if (decisionId !== null && hasDecisionOptions(source)) {
|
|
244
|
+
const choices = decisionChoices(source.decisionOptions);
|
|
245
|
+
if (choices.length > 0) {
|
|
246
|
+
return {
|
|
247
|
+
kind: 'api-choices',
|
|
248
|
+
heading: {
|
|
249
|
+
kind: 'approval',
|
|
250
|
+
toolName: typeof source.toolName === 'string' && source.toolName ? source.toolName : null,
|
|
251
|
+
},
|
|
252
|
+
choices,
|
|
253
|
+
multiSelect: false,
|
|
254
|
+
freeText: null,
|
|
255
|
+
decisionId,
|
|
256
|
+
apiTarget: 'approval',
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
const question = readQuestionChoices(source);
|
|
261
|
+
if (decisionId !== null && question !== null) {
|
|
262
|
+
return {
|
|
263
|
+
kind: 'api-choices',
|
|
264
|
+
heading: { kind: 'agent-question', text: question.question },
|
|
265
|
+
choices: question.labels.map((label, index) => ({
|
|
266
|
+
answer: String(index + 1),
|
|
267
|
+
label,
|
|
268
|
+
isDefault: false,
|
|
269
|
+
takesText: false,
|
|
270
|
+
})),
|
|
271
|
+
multiSelect: false,
|
|
272
|
+
freeText: question.custom === true ? { via: 'api' } : null,
|
|
273
|
+
decisionId,
|
|
274
|
+
apiTarget: 'question',
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
return UNREADABLE_VIEW;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* The view a `current-output` payload carries, falling back to deriving it.
|
|
281
|
+
*
|
|
282
|
+
* `??`, not `||`: a server from before #3184 sends no `promptView`, and its
|
|
283
|
+
* absence means "this daemon does not publish the field" — the same function
|
|
284
|
+
* then decides from `promptData`, so old and new servers reach the same answer.
|
|
285
|
+
*/
|
|
286
|
+
function readPromptView(payload) {
|
|
287
|
+
if (!payload)
|
|
288
|
+
return null;
|
|
289
|
+
return payload.promptView ?? derivePromptView(payload.promptData);
|
|
290
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a status rests on something positive, or on the absence of a negative
|
|
3
|
+
* (Issue #1924, §4 D1 決定 2).
|
|
4
|
+
*
|
|
5
|
+
* `'positive'` — a marker, a tool-specific idle-composer rule, or a structured
|
|
6
|
+
* event said so. `'none'` — nothing on the frame could be read either way, and
|
|
7
|
+
* the status is a fallback.
|
|
8
|
+
*
|
|
9
|
+
* The design policy adds this rather than a fifth `SessionStatus`: the value
|
|
10
|
+
* domain stays four wide, because `src/cli/types/api-responses.ts` enumerates it
|
|
11
|
+
* and a new member is a breaking change for every consumer older than the server
|
|
12
|
+
* — including `commandmate-skills`' `orchestrate-monitor`, which reads
|
|
13
|
+
* `capture --json` as its primary signal.
|
|
14
|
+
*/
|
|
15
|
+
export type StatusEvidence = 'positive' | 'none';
|
|
16
|
+
//# sourceMappingURL=status-evidence-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-evidence-type.d.ts","sourceRoot":"","sources":["../../../src/lib/session/status-evidence-type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legacy-session-alias.d.ts","sourceRoot":"","sources":["../../../src/lib/tmux/legacy-session-alias.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;
|
|
1
|
+
{"version":3,"file":"legacy-session-alias.d.ts","sourceRoot":"","sources":["../../../src/lib/tmux/legacy-session-alias.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAC/D;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAE7E;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAUvE;AAED,wCAAwC;AACxC,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -27,8 +27,9 @@ exports.registerLegacyAlias = registerLegacyAlias;
|
|
|
27
27
|
exports.lookupLegacyAlias = lookupLegacyAlias;
|
|
28
28
|
exports.dropLegacyAliasByLegacyName = dropLegacyAliasByLegacyName;
|
|
29
29
|
exports.clearLegacyAliasesForTests = clearLegacyAliasesForTests;
|
|
30
|
+
const global_state_1 = require("../global-state");
|
|
30
31
|
function aliases() {
|
|
31
|
-
return (
|
|
32
|
+
return (0, global_state_1.getOrInitGlobal)('__cmLegacySessionAliases', () => new Map());
|
|
32
33
|
}
|
|
33
34
|
/**
|
|
34
35
|
* Serve the new-format session name `newName` with the existing legacy session
|
|
@@ -1107,9 +1107,11 @@
|
|
|
1107
1107
|
},
|
|
1108
1108
|
"promptResponse": {
|
|
1109
1109
|
"refused": "Your answer was not sent because the dialog has changed. Please check the screen.",
|
|
1110
|
+
"failed": "Could not send the answer. Please try again.",
|
|
1110
1111
|
"stuckHint": "If sending does not work, operate the terminal in direct input mode.",
|
|
1111
1112
|
"stuckHintLink": "Switch to direct input",
|
|
1112
|
-
"unanswerable": "CommandMate cannot operate this screen. Use direct input mode instead."
|
|
1113
|
+
"unanswerable": "CommandMate cannot operate this screen. Use direct input mode instead.",
|
|
1114
|
+
"autoYesEnterSent": "Auto-Yes sent Enter."
|
|
1113
1115
|
},
|
|
1114
1116
|
"dismissPanelKeys": {
|
|
1115
1117
|
"toolbarLabel": "Close this screen",
|
|
@@ -1107,9 +1107,11 @@
|
|
|
1107
1107
|
},
|
|
1108
1108
|
"promptResponse": {
|
|
1109
1109
|
"refused": "ダイアログの状態が変わったため送信できませんでした。画面を確認してください。",
|
|
1110
|
+
"failed": "送信に失敗しました。もう一度お試しください。",
|
|
1110
1111
|
"stuckHint": "送信がうまくいかない場合は、直接入力モードで操作してください。",
|
|
1111
1112
|
"stuckHintLink": "直接入力に切り替える",
|
|
1112
|
-
"unanswerable": "この画面は CommandMate から操作できません。直接入力モードで操作してください。"
|
|
1113
|
+
"unanswerable": "この画面は CommandMate から操作できません。直接入力モードで操作してください。",
|
|
1114
|
+
"autoYesEnterSent": "Auto-Yes が Enter を送りました。"
|
|
1113
1115
|
},
|
|
1114
1116
|
"dismissPanelKeys": {
|
|
1115
1117
|
"toolbarLabel": "この画面を閉じる",
|