commandmate 0.44.2 → 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 +149 -149
- package/.next/app-path-routes-manifest.json +21 -21
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- 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 -1
- 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 -1
- 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 +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.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 +21 -21
- 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 -1
- package/.next/server/chunks/2710.js +1 -1
- package/.next/server/chunks/2908.js +1 -1
- 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 -1
- package/.next/server/chunks/5625.js +25 -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 -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 -1
- package/.next/server/chunks/9390.js +2 -2
- 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-051f6f84226a9f2c.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-9da1ab602bcb3051.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 +3 -5
- 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 +589 -431
- package/dist/cli/types/api-responses.d.ts +159 -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 +26 -3
- package/dist/lib/session/prompt-view.d.ts.map +1 -1
- package/dist/lib/session/prompt-view.js +26 -3
- 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/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 +6 -0
- package/dist/server/src/lib/auto-yes-poller.js +450 -160
- package/dist/server/src/lib/auto-yes-state.js +2 -2
- package/dist/server/src/lib/cli-tools/antigravity.js +38 -79
- 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 -3065
- 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/tools/antigravity/detect.js +5 -29
- package/dist/server/src/lib/detection/tools/antigravity/dialog.js +2 -15
- package/dist/server/src/lib/detection/tools/antigravity/patterns.js +286 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +3 -14
- 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/detect.js +46 -85
- package/dist/server/src/lib/detection/tools/codex/live-region.js +33 -2
- 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 +8 -50
- package/dist/server/src/lib/detection/tools/command-code/dialog.js +2 -18
- 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 +10 -35
- 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/gemini/patterns.js +29 -0
- package/dist/server/src/lib/detection/tools/live-region-specs.js +1 -1
- package/dist/server/src/lib/detection/tools/opencode/detect.js +8 -49
- package/dist/server/src/lib/detection/tools/opencode/patterns.js +508 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +7 -42
- package/dist/server/src/lib/detection/tools/opencode-v2/patterns.js +63 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +6 -47
- 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-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 +641 -1142
- 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 +5 -4
- 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 -5
- package/dist/server/src/lib/realtime/terminal-session-ownership.js +45 -0
- package/dist/server/src/lib/relay/relay-delivery.js +3 -2
- package/dist/server/src/lib/relay/relay-readiness.js +38 -1
- 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 +450 -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 +26 -3
- package/dist/server/src/lib/session/prompt-waiting-composition.js +3 -2
- 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-cleanup.js +1 -5
- 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.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/4372.js +0 -5
- package/.next/server/chunks/6474.js +0 -14
- package/.next/server/chunks/967.js +0 -1
- package/.next/server/chunks/9798.js +0 -2
- package/.next/server/chunks/9882.js +0 -25
- package/.next/static/chunks/591-539fec878c9dec5e.js +0 -1
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-2a81397e60f17e63.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/{QlCqLjorauDDBXPa-C7TK → tWwHQzmvc-rv9KKUtDWfQ}/_buildManifest.js +0 -0
- /package/.next/static/{QlCqLjorauDDBXPa-C7TK → 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"}
|
|
@@ -134,9 +134,32 @@ export type PromptHeadingMessage = {
|
|
|
134
134
|
};
|
|
135
135
|
export declare function promptHeadingMessage(heading: PromptViewHeading): PromptHeadingMessage;
|
|
136
136
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* `
|
|
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.
|
|
140
163
|
*/
|
|
141
164
|
export declare const TYPED_TEXT_FIELD_LABEL_PATTERNS: readonly RegExp[];
|
|
142
165
|
/**
|
|
@@ -1 +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
|
|
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"}
|
|
@@ -65,9 +65,32 @@ function promptHeadingMessage(heading) {
|
|
|
65
65
|
// Field readers (moved from components/worktree/prompt-decision-id, #1932/#2039/#3181)
|
|
66
66
|
// =============================================================================
|
|
67
67
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* `
|
|
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.
|
|
71
94
|
*/
|
|
72
95
|
exports.TYPED_TEXT_FIELD_LABEL_PATTERNS = [
|
|
73
96
|
/^[^\S\n]*type\s+something\b/i,
|
|
@@ -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": "この画面を閉じる",
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* CLI-side API Response Type Definitions
|
|
4
4
|
* Issue #518: [DR1-06] All types include Mirrors comments for server-side traceability
|
|
5
5
|
*
|
|
6
|
-
* These types mirror server-side response shapes.
|
|
7
|
-
*
|
|
6
|
+
* These types mirror server-side response shapes. Where a server module has no
|
|
7
|
+
* imports of its own (e.g. `lib/session/prompt-view`), it is imported here by
|
|
8
|
+
* relative path instead of restated, so the CLI build compiles it and there is
|
|
9
|
+
* no second definition to drift (see `promptView` below).
|
|
8
10
|
*/
|
|
9
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* All values are preserved from the original literals (no behavior change).
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.LIVENESS_CONFIRM_DELAY_MS = exports.
|
|
23
|
+
exports.LIVENESS_CONFIRM_DELAY_MS = exports.CLAUDE_ENV_SANITIZE_WAIT_MS = exports.OPENCODE_V2_COMPOSER_WAIT_MS = exports.OPENCODE_V2_EXIT_WAIT_MS = exports.COMMAND_CODE_INIT_WAIT_MS = exports.VIBE_LOCAL_DOUBLE_ENTER_WAIT_MS = exports.COPILOT_EXIT_WAIT_MS = exports.OPENCODE_INTERRUPT_SECOND_ESCAPE_DELAY_MS = exports.OPENCODE_EXIT_WAIT_MS = exports.CODEX_DIALOG_SETTLE_MS = exports.TUI_EXIT_WAIT_MS = exports.TUI_INTERRUPT_SETTLE_MS = exports.TUI_MESSAGE_PROCESSED_WAIT_MS = exports.TUI_TEXT_INPUT_WAIT_MS = exports.TUI_SESSION_CREATE_WAIT_MS = void 0;
|
|
24
24
|
/**
|
|
25
25
|
* Wait (ms) after `createSession()` before sending the first keys, giving tmux
|
|
26
26
|
* time to spin up the session.
|
|
@@ -162,11 +162,6 @@ exports.OPENCODE_V2_COMPOSER_WAIT_MS = 15000;
|
|
|
162
162
|
* Site: session-key-sender sanitizeSessionEnvironment().
|
|
163
163
|
*/
|
|
164
164
|
exports.CLAUDE_ENV_SANITIZE_WAIT_MS = 100;
|
|
165
|
-
/**
|
|
166
|
-
* Wait (ms) before restarting a Claude session, after the old session is stopped.
|
|
167
|
-
* Site: claude-session restartClaudeSession().
|
|
168
|
-
*/
|
|
169
|
-
exports.CLAUDE_RESTART_DELAY_MS = 1000;
|
|
170
165
|
/**
|
|
171
166
|
* Wait (ms) between the two liveness readings that must agree before a reuse
|
|
172
167
|
* path re-sends a launch command (Issue #2070).
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `CM_UAT_ISOLATION=1` — the mode a UAT / daily-check server and its CLI run in
|
|
4
|
+
* (Issue #3360).
|
|
5
|
+
*
|
|
6
|
+
* A UAT server is isolated from production by its own port, DB, tmux socket and
|
|
7
|
+
* state directories (`.commandmate/uat.yaml`). Three paths were left that those
|
|
8
|
+
* do not cover, because they are keyed by the user's login rather than by
|
|
9
|
+
* anything the UAT can move:
|
|
10
|
+
*
|
|
11
|
+
* 1. **codex's shared files.** `$CODEX_HOME/hooks.json`, the relay under
|
|
12
|
+
* `$CODEX_HOME/commandmate/` and the hook trust in `config.toml` live beside
|
|
13
|
+
* codex's login (`auth.json`), so moving `CODEX_HOME` logs codex out. In this
|
|
14
|
+
* mode the server writes none of them: it reuses the shared file only when it
|
|
15
|
+
* is already byte-identical to what this build would write (the per-session
|
|
16
|
+
* URL travels in the environment, so the hooks then reach THIS server), and
|
|
17
|
+
* otherwise refuses the launch ({@link UatIsolationLaunchRefusedError}) —
|
|
18
|
+
* a bare codex would still read the shared file and run production's hooks.
|
|
19
|
+
* antigravity's `~/.gemini/config/hooks.json` and copilot's
|
|
20
|
+
* `~/.copilot/settings.json` (Issue #3391) are handled the same way. It
|
|
21
|
+
* also never answers the hook review with *trust*, which is codex writing
|
|
22
|
+
* `config.toml`.
|
|
23
|
+
* 2. **claude's user-level hooks.** `--settings` is added to
|
|
24
|
+
* `~/.claude/settings.json`, not substituted for it, so the user's own hooks
|
|
25
|
+
* (which post to production) would run in a UAT session too. Moving
|
|
26
|
+
* `CLAUDE_CONFIG_DIR` logs claude out (measured, `-p` and interactive). In
|
|
27
|
+
* this mode claude is launched with `--setting-sources project,local`, which
|
|
28
|
+
* drops the user source and keeps `--settings` (measured on 2.1.289) — the
|
|
29
|
+
* interactive launch and `claude -p` (Schedules, daily summary) alike.
|
|
30
|
+
* 3. **the CLI's `.env`.** A client in this mode reads no `.env` file at all and
|
|
31
|
+
* refuses to fall back to port 3000: it dials only the `CM_PORT` the caller
|
|
32
|
+
* exported.
|
|
33
|
+
*
|
|
34
|
+
* Unset (or any value other than `1` / `own-home`) changes nothing anywhere.
|
|
35
|
+
*
|
|
36
|
+
* ## `CM_UAT_ISOLATION=own-home` (Issue #3312)
|
|
37
|
+
*
|
|
38
|
+
* For a run under a dedicated OS user (the daily product-path check), whose
|
|
39
|
+
* HOME holds nobody else's CLI config. Everything above still holds — the
|
|
40
|
+
* launch is refused rather than started bare when hook setup fails, the
|
|
41
|
+
* receiver URL travels in the launch environment, headless `codex exec` /
|
|
42
|
+
* `agy -p` are refused, claude reads no user-level settings, the CLI reads no
|
|
43
|
+
* `.env` and never falls back to 3000 — with one difference: the shared hook
|
|
44
|
+
* files (codex's `hooks.json`, relay and trust, antigravity's and copilot's
|
|
45
|
+
* hook files, the claude settings under `CM_AGENT_HOOKS_DIR`) are WRITTEN by
|
|
46
|
+
* this build, instead of being reused read-only. Only after
|
|
47
|
+
* {@link assertUatOwnHomeWriteTargets} has checked, before each launch, that
|
|
48
|
+
* this process runs as `CM_UAT_DEDICATED_USER`, that HOME is that user's, and
|
|
49
|
+
* that every file it is about to write resolves (symlinks followed) to a place
|
|
50
|
+
* inside that HOME owned by that user. {@link sharedHookWritePolicy} is the one
|
|
51
|
+
* rule each tool's launch path calls.
|
|
52
|
+
*
|
|
53
|
+
* `docs/user-guide/uat-isolation.md` has the measurement table and the skip
|
|
54
|
+
* conditions for what cannot be isolated.
|
|
55
|
+
*
|
|
56
|
+
* @module config/uat-isolation
|
|
57
|
+
*/
|
|
58
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
59
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
60
|
+
};
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.UAT_OWN_HOME_FIX = exports.UAT_SAME_BUILD_FIX = exports.UatIsolationLaunchRefusedError = exports.CLAUDE_UAT_SETTING_SOURCES = exports.UAT_DEDICATED_USER_ENV_VAR = exports.UAT_ISOLATION_OWN_HOME = exports.UAT_ISOLATION_ENV_VAR = void 0;
|
|
63
|
+
exports.getUatIsolationMode = getUatIsolationMode;
|
|
64
|
+
exports.isUatIsolationEnabled = isUatIsolationEnabled;
|
|
65
|
+
exports.checkUatOwnHomeWriteTargets = checkUatOwnHomeWriteTargets;
|
|
66
|
+
exports.assertUatOwnHomeWriteTargets = assertUatOwnHomeWriteTargets;
|
|
67
|
+
exports.sharedHookWritePolicy = sharedHookWritePolicy;
|
|
68
|
+
const fs_1 = __importDefault(require("fs"));
|
|
69
|
+
const os_1 = __importDefault(require("os"));
|
|
70
|
+
const path_1 = __importDefault(require("path"));
|
|
71
|
+
/** The switch. Only the exact values `1` and `own-home` turn it on. */
|
|
72
|
+
exports.UAT_ISOLATION_ENV_VAR = 'CM_UAT_ISOLATION';
|
|
73
|
+
/** The value of {@link UAT_ISOLATION_ENV_VAR} for a run under a dedicated OS user (Issue #3312). */
|
|
74
|
+
exports.UAT_ISOLATION_OWN_HOME = 'own-home';
|
|
75
|
+
/** The login name `own-home` must run as (Issue #3312). Compared with `os.userInfo().username`. */
|
|
76
|
+
exports.UAT_DEDICATED_USER_ENV_VAR = 'CM_UAT_DEDICATED_USER';
|
|
77
|
+
/**
|
|
78
|
+
* `--setting-sources` for a claude session in this mode: the user source
|
|
79
|
+
* (`$CLAUDE_CONFIG_DIR/settings.json`, hooks and plugins included) is dropped;
|
|
80
|
+
* the repository's own `project` / `local` settings and `--settings` stay.
|
|
81
|
+
*/
|
|
82
|
+
exports.CLAUDE_UAT_SETTING_SOURCES = 'project,local';
|
|
83
|
+
/** Which isolation mode this process runs in. */
|
|
84
|
+
function getUatIsolationMode(env = process.env) {
|
|
85
|
+
const value = env[exports.UAT_ISOLATION_ENV_VAR];
|
|
86
|
+
if (value === '1')
|
|
87
|
+
return 'shared-read-only';
|
|
88
|
+
if (value === exports.UAT_ISOLATION_OWN_HOME)
|
|
89
|
+
return 'own-home';
|
|
90
|
+
return 'off';
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Whether this process runs in UAT isolation mode — `1` or `own-home`. Every
|
|
94
|
+
* protection except "never write the shared hook files" keys off this.
|
|
95
|
+
*/
|
|
96
|
+
function isUatIsolationEnabled(env = process.env) {
|
|
97
|
+
return getUatIsolationMode(env) !== 'off';
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Thrown by a launch that would otherwise start an agent which reads a shared
|
|
101
|
+
* hook config this server did not (and in this mode may not) write.
|
|
102
|
+
*
|
|
103
|
+
* Starting the agent "without hooks" is not an option for codex, antigravity
|
|
104
|
+
* or copilot: the shared file is read regardless of what this server passes,
|
|
105
|
+
* so the production server's hooks — already trusted — would run in the UAT
|
|
106
|
+
* session and post to production. So the launch is refused, and the message says what
|
|
107
|
+
* makes it start.
|
|
108
|
+
*/
|
|
109
|
+
class UatIsolationLaunchRefusedError extends Error {
|
|
110
|
+
constructor(tool, reason, fix) {
|
|
111
|
+
super(getUatIsolationMode() === 'own-home'
|
|
112
|
+
? `${exports.UAT_ISOLATION_ENV_VAR}=${exports.UAT_ISOLATION_OWN_HOME}: refusing to start ${tool}: ${reason}. ` +
|
|
113
|
+
`This server writes the hook config only inside the dedicated user's own HOME, and ${tool} ` +
|
|
114
|
+
`would otherwise start with hooks this server did not prepare. ${fix}`
|
|
115
|
+
: `${exports.UAT_ISOLATION_ENV_VAR}=1: refusing to start ${tool}: ${reason}. ` +
|
|
116
|
+
`This server does not write the shared hook config in UAT isolation, and ${tool} ` +
|
|
117
|
+
`would read it anyway and run the production hooks. ${fix}`);
|
|
118
|
+
this.name = 'UatIsolationLaunchRefusedError';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.UatIsolationLaunchRefusedError = UatIsolationLaunchRefusedError;
|
|
122
|
+
/** The fix for a shared hook config that does not match this build. */
|
|
123
|
+
exports.UAT_SAME_BUILD_FIX = 'Run the UAT with the same CommandMate build as the production server, so the shared file already matches what this build writes.';
|
|
124
|
+
/** The fix for an `own-home` launch whose user, HOME or write targets did not check out. */
|
|
125
|
+
exports.UAT_OWN_HOME_FIX = `Run ${exports.UAT_ISOLATION_ENV_VAR}=${exports.UAT_ISOLATION_OWN_HOME} as the user named by ${exports.UAT_DEDICATED_USER_ENV_VAR}, ` +
|
|
126
|
+
'with HOME set to that user\'s home and every hook config path (CODEX_HOME, CM_AGENT_HOOKS_DIR, ...) inside it.';
|
|
127
|
+
function currentIdentity() {
|
|
128
|
+
const info = os_1.default.userInfo();
|
|
129
|
+
return { username: info.username, uid: info.uid, homedir: info.homedir };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Where a write to `target` would land, symlinks followed, and whose entry
|
|
133
|
+
* decides who may write there: the target itself when it exists, else its
|
|
134
|
+
* nearest existing ancestor (a file not yet created is judged by the directory
|
|
135
|
+
* it would be created in). A dangling symlink is refused: writing through it
|
|
136
|
+
* would create a file wherever it points.
|
|
137
|
+
*/
|
|
138
|
+
function resolveWriteTarget(target) {
|
|
139
|
+
const absolute = path_1.default.resolve(target);
|
|
140
|
+
let existing = absolute;
|
|
141
|
+
const rest = [];
|
|
142
|
+
for (;;) {
|
|
143
|
+
let entryExists = false;
|
|
144
|
+
try {
|
|
145
|
+
fs_1.default.lstatSync(existing);
|
|
146
|
+
entryExists = true;
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
entryExists = false;
|
|
150
|
+
}
|
|
151
|
+
if (entryExists)
|
|
152
|
+
break;
|
|
153
|
+
const parent = path_1.default.dirname(existing);
|
|
154
|
+
if (parent === existing)
|
|
155
|
+
return `${target} has no existing ancestor`;
|
|
156
|
+
rest.unshift(path_1.default.basename(existing));
|
|
157
|
+
existing = parent;
|
|
158
|
+
}
|
|
159
|
+
let real;
|
|
160
|
+
try {
|
|
161
|
+
real = fs_1.default.realpathSync(existing);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return `${existing} is a symlink that points nowhere`;
|
|
165
|
+
}
|
|
166
|
+
return { real: path_1.default.join(real, ...rest), owner: fs_1.default.statSync(real).uid };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Why an `own-home` launch may not write `writeTargets`, or null when it may
|
|
170
|
+
* (Issue #3312). Checks, in this order: `CM_UAT_DEDICATED_USER` is set and is
|
|
171
|
+
* the user this process runs as; `HOME` resolves to that user's home directory
|
|
172
|
+
* (from the account database) and is owned by them; each target resolves —
|
|
173
|
+
* every symlink on the way followed — to a path inside that home, and the entry
|
|
174
|
+
* that decides the write (the target, or its nearest existing ancestor) is
|
|
175
|
+
* owned by that user.
|
|
176
|
+
*/
|
|
177
|
+
function checkUatOwnHomeWriteTargets(writeTargets, env = process.env, identity = currentIdentity()) {
|
|
178
|
+
const dedicated = env[exports.UAT_DEDICATED_USER_ENV_VAR];
|
|
179
|
+
if (!dedicated)
|
|
180
|
+
return `${exports.UAT_DEDICATED_USER_ENV_VAR} is not set`;
|
|
181
|
+
if (identity.username !== dedicated) {
|
|
182
|
+
return `this process runs as ${identity.username}, not as the dedicated user ${dedicated}`;
|
|
183
|
+
}
|
|
184
|
+
const home = env.HOME;
|
|
185
|
+
if (!home || !path_1.default.isAbsolute(home))
|
|
186
|
+
return 'HOME is not set to an absolute path';
|
|
187
|
+
let homeReal;
|
|
188
|
+
let accountHomeReal;
|
|
189
|
+
try {
|
|
190
|
+
homeReal = fs_1.default.realpathSync(home);
|
|
191
|
+
accountHomeReal = fs_1.default.realpathSync(identity.homedir);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return `HOME (${home}) or ${dedicated}'s home directory (${identity.homedir}) does not exist`;
|
|
195
|
+
}
|
|
196
|
+
if (homeReal !== accountHomeReal) {
|
|
197
|
+
return `HOME (${home}) is not ${dedicated}'s home directory (${identity.homedir})`;
|
|
198
|
+
}
|
|
199
|
+
if (fs_1.default.statSync(homeReal).uid !== identity.uid)
|
|
200
|
+
return `HOME (${home}) is not owned by ${dedicated}`;
|
|
201
|
+
for (const target of writeTargets) {
|
|
202
|
+
const resolved = resolveWriteTarget(target);
|
|
203
|
+
if (typeof resolved === 'string')
|
|
204
|
+
return resolved;
|
|
205
|
+
if (resolved.real !== homeReal && !resolved.real.startsWith(`${homeReal}${path_1.default.sep}`)) {
|
|
206
|
+
return `${target} resolves to ${resolved.real}, outside ${dedicated}'s HOME (${homeReal})`;
|
|
207
|
+
}
|
|
208
|
+
if (resolved.owner !== identity.uid) {
|
|
209
|
+
return `${target} (${resolved.real}) is not owned by ${dedicated}`;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Under `own-home`, refuse the launch of `tool` unless
|
|
216
|
+
* {@link checkUatOwnHomeWriteTargets} passes for `writeTargets`. A no-op in
|
|
217
|
+
* every other mode.
|
|
218
|
+
*
|
|
219
|
+
* @throws {UatIsolationLaunchRefusedError}
|
|
220
|
+
*/
|
|
221
|
+
function assertUatOwnHomeWriteTargets(tool, writeTargets, env = process.env) {
|
|
222
|
+
if (getUatIsolationMode(env) !== 'own-home')
|
|
223
|
+
return;
|
|
224
|
+
const problem = checkUatOwnHomeWriteTargets(writeTargets, env);
|
|
225
|
+
if (problem)
|
|
226
|
+
throw new UatIsolationLaunchRefusedError(tool, problem, exports.UAT_OWN_HOME_FIX);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* The one rule for a hook file shared with the user's other CommandMate
|
|
230
|
+
* servers (codex, antigravity and copilot call it; Issue #3312):
|
|
231
|
+
*
|
|
232
|
+
* - not isolated: `write`
|
|
233
|
+
* - `CM_UAT_ISOLATION=1`: `read-only` — reuse it only when it already matches
|
|
234
|
+
* - `CM_UAT_ISOLATION=own-home`: `write`, once
|
|
235
|
+
* {@link assertUatOwnHomeWriteTargets} has passed for every path the write
|
|
236
|
+
* touches; otherwise the launch is refused
|
|
237
|
+
*
|
|
238
|
+
* @throws {UatIsolationLaunchRefusedError} Under `own-home` only
|
|
239
|
+
*/
|
|
240
|
+
function sharedHookWritePolicy(tool, writeTargets, env = process.env) {
|
|
241
|
+
const mode = getUatIsolationMode(env);
|
|
242
|
+
if (mode === 'shared-read-only')
|
|
243
|
+
return 'read-only';
|
|
244
|
+
assertUatOwnHomeWriteTargets(tool, writeTargets, env);
|
|
245
|
+
return 'write';
|
|
246
|
+
}
|
|
@@ -53,6 +53,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
53
53
|
})();
|
|
54
54
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
55
|
exports.detectBufferReset = detectBufferReset;
|
|
56
|
+
exports.isCodexCursorAtOrBelowComposer = isCodexCursorAtOrBelowComposer;
|
|
56
57
|
exports.cleanCliResponse = cleanCliResponse;
|
|
57
58
|
exports.advanceCapturedLineForTranscriptTurn = advanceCapturedLineForTranscriptTurn;
|
|
58
59
|
exports.savePendingAssistantResponse = savePendingAssistantResponse;
|
|
@@ -62,6 +63,7 @@ const ws_server_1 = require("./ws-server");
|
|
|
62
63
|
// Issue #571 [DR1-05]: Import directly from response-cleaner instead of barrel re-export
|
|
63
64
|
const response_cleaner_1 = require("./response-cleaner");
|
|
64
65
|
const types_1 = require("./cli-tools/types");
|
|
66
|
+
const cli_patterns_1 = require("./detection/cli-patterns");
|
|
65
67
|
const logger_1 = require("../lib/logger");
|
|
66
68
|
const logger = (0, logger_1.createLogger)('assistant-response-saver');
|
|
67
69
|
/**
|
|
@@ -141,6 +143,36 @@ function countCapturedLines(output) {
|
|
|
141
143
|
}
|
|
142
144
|
return trimmedLength;
|
|
143
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Does a codex cursor start at or below the composer? (Issue #3335)
|
|
148
|
+
*
|
|
149
|
+
* Nothing at or below codex's composer is a reply: it is the composer, the
|
|
150
|
+
* status bar and `? for shortcuts`. On the inline layout (0.15x) a cursor
|
|
151
|
+
* rarely lands there, because the next turn is printed over the composer band
|
|
152
|
+
* and the composer moves down. On 0.160.0 it is where the cursor always is.
|
|
153
|
+
*
|
|
154
|
+
* codex 0.160.0 draws in the alternate screen: the capture is the pane, 1000
|
|
155
|
+
* rows, whatever the transcript holds, with the composer pinned to row 996.
|
|
156
|
+
* The row count this module stores is therefore NOT a read cursor for it — it
|
|
157
|
+
* settles at 999 or 1000 after the first read (here, or in
|
|
158
|
+
* {@link advanceCapturedLineForTranscriptTurn}) and never grows again, and
|
|
159
|
+
* the reply is drawn above it. The screen read does not take codex's reply
|
|
160
|
+
* from such a pane; the reply reaches History from codex's own transcript
|
|
161
|
+
* (`hooks/sources/codex/history.ts`). What this rule stops is the flush
|
|
162
|
+
* saving the chrome past the parked cursor as the reply — before #3335 a
|
|
163
|
+
* cursor of 999 saved `? for shortcuts`, and 997 or 998 the status bar.
|
|
164
|
+
*
|
|
165
|
+
* The composer is located by its SGR attributes (#2310), on the whole pane.
|
|
166
|
+
* A pane it cannot be found on keeps the reading it had.
|
|
167
|
+
*
|
|
168
|
+
* @param lines - The whole capture, ANSI intact
|
|
169
|
+
* @param cursor - The row the flush would start reading at
|
|
170
|
+
* @returns True when the rows from `cursor` down are all codex chrome
|
|
171
|
+
*/
|
|
172
|
+
function isCodexCursorAtOrBelowComposer(lines, cursor) {
|
|
173
|
+
const chromeStart = (0, cli_patterns_1.findCodexChromeStart)(lines);
|
|
174
|
+
return chromeStart >= 0 && cursor >= chromeStart;
|
|
175
|
+
}
|
|
144
176
|
/**
|
|
145
177
|
* Time offset (in milliseconds) for assistant message timestamp
|
|
146
178
|
* Ensures assistant response appears before user message in chronological order
|
|
@@ -167,9 +199,12 @@ const ASSISTANT_TIMESTAMP_OFFSET_MS = 1;
|
|
|
167
199
|
*
|
|
168
200
|
* @param output - Raw output from CLI tool
|
|
169
201
|
* @param cliToolId - CLI tool identifier
|
|
202
|
+
* @param paneLines - The whole capture `output` was sliced from, for the
|
|
203
|
+
* startup-screen rule of {@link cleanScrollbackResponse} (Issue #3293). Only
|
|
204
|
+
* that cleaner reads it; omitted, no tool's cleaning changes
|
|
170
205
|
* @returns Cleaned response content
|
|
171
206
|
*/
|
|
172
|
-
function cleanCliResponse(output, cliToolId) {
|
|
207
|
+
function cleanCliResponse(output, cliToolId, paneLines) {
|
|
173
208
|
switch (cliToolId) {
|
|
174
209
|
case 'claude':
|
|
175
210
|
return (0, response_cleaner_1.cleanClaudeResponse)(output);
|
|
@@ -183,7 +218,7 @@ function cleanCliResponse(output, cliToolId) {
|
|
|
183
218
|
case 'command-code':
|
|
184
219
|
case 'antigravity':
|
|
185
220
|
case 'vibe-local':
|
|
186
|
-
return (0, response_cleaner_1.cleanScrollbackResponse)(output, cliToolId);
|
|
221
|
+
return (0, response_cleaner_1.cleanScrollbackResponse)(output, cliToolId, paneLines);
|
|
187
222
|
default:
|
|
188
223
|
return output.trim();
|
|
189
224
|
}
|
|
@@ -362,7 +397,31 @@ async function savePendingAssistantResponse(db, worktreeId, cliToolId, userMessa
|
|
|
362
397
|
// 8. Clean the response.
|
|
363
398
|
// Only scrollback-rendering tools reach this point (Issue #1292), so the
|
|
364
399
|
// tool-specific cleaners in cleanCliResponse cover every remaining case.
|
|
365
|
-
|
|
400
|
+
//
|
|
401
|
+
// Issue #3293: the pane goes with the rows. On the first send of a session
|
|
402
|
+
// the cursor is 0 and "everything past it" is the tool's startup screen —
|
|
403
|
+
// measured on vibe-local as `response:saved {"fromLine":0,"toLine":1001}`
|
|
404
|
+
// 30 ms after `started-vibe-local-session`, and on codex as an assistant
|
|
405
|
+
// row holding the version, the cwd and the logo. A pane no message has been
|
|
406
|
+
// echoed on yet holds no reply, and that is a fact about the pane: the rows
|
|
407
|
+
// past the cursor ordinarily carry no echo either. It cleans to '', so the
|
|
408
|
+
// branch below moves the cursor exactly as the banner save used to.
|
|
409
|
+
//
|
|
410
|
+
// Not on a capture that came back at the size it was asked for: the window
|
|
411
|
+
// has clipped it, and the echo of a turn longer than the window is no longer
|
|
412
|
+
// in it. This is `isCaptureWindowSaturated` (#1670) against this module's
|
|
413
|
+
// own window, written out because `lib/tmux` is not imported from here
|
|
414
|
+
// (#1922).
|
|
415
|
+
const captureClipped = lines.length >= SESSION_OUTPUT_BUFFER_SIZE;
|
|
416
|
+
//
|
|
417
|
+
// Issue #3335: on codex, rows from the composer down are chrome, never a
|
|
418
|
+
// reply — and on 0.160.0 (alternate screen) that is where the cursor
|
|
419
|
+
// parks for the life of the session. Read as nothing, so the branch below
|
|
420
|
+
// moves the cursor as an empty clean would. See isCodexCursorAtOrBelowComposer.
|
|
421
|
+
const pastCodexComposer = cliToolId === 'codex' && isCodexCursorAtOrBelowComposer(lines, effectiveLastCapturedLine);
|
|
422
|
+
const cleanedResponse = pastCodexComposer
|
|
423
|
+
? ''
|
|
424
|
+
: cleanCliResponse(newOutput, cliToolId, captureClipped ? undefined : lines);
|
|
366
425
|
// 9. Check if cleaned response is empty
|
|
367
426
|
if (!cleanedResponse || cleanedResponse.trim() === '') {
|
|
368
427
|
// Output exists but cleaned to empty - update position but don't save
|
|
@@ -49,6 +49,12 @@ const auto_yes_manager_1 = require("./polling/auto-yes-manager");
|
|
|
49
49
|
* reason (no new reason was added), for the instance only. `server-shutdown`
|
|
50
50
|
* deliberately does not persist anything: the state lives in memory, and a
|
|
51
51
|
* restarted server starting with every grant off is the safe side.
|
|
52
|
+
*
|
|
53
|
+
* `consecutive-errors` is for real capture failures only: a session that
|
|
54
|
+
* exists but cannot be read. A session that does not exist (not started yet,
|
|
55
|
+
* or not started at all) is not one — the poller waits for it until
|
|
56
|
+
* `expiresAt`, at the backoff cap (Issue #3329), since the grant is
|
|
57
|
+
* independent of the session.
|
|
52
58
|
*/
|
|
53
59
|
exports.AUTO_YES_LIFECYCLE = {
|
|
54
60
|
'session-killed': { state: 'disable', poller: 'stop' },
|