commandmate 0.43.0 → 0.44.1
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 +357 -361
- package/.next/app-path-routes-manifest.json +33 -33
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +3 -3
- 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.nft.json +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.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +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_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.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.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.js.nft.json +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.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +1 -1
- 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.js.nft.json +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.js +2 -2
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +2 -2
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js.nft.json +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.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +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.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.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +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.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.js.nft.json +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.nft.json +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.nft.json +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.js.nft.json +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.nft.json +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.nft.json +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.js.nft.json +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.nft.json +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.js.nft.json +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.nft.json +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.nft.json +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.nft.json +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.nft.json +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.js.nft.json +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.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +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.nft.json +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.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +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.js.nft.json +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.nft.json +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.js.nft.json +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.js.nft.json +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 +7 -7
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +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.nft.json +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.nft.json +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.js.nft.json +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.nft.json +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.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.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.js.nft.json +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.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.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.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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +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.nft.json +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.nft.json +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 +103 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +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.nft.json +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.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_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.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +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 +9 -9
- 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.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +33 -33
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1501.js +3 -3
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2283.js +15 -0
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/4207.js +1 -1
- package/.next/server/chunks/4802.js +1 -1
- package/.next/server/chunks/488.js +1 -0
- package/.next/server/chunks/5326.js +1 -1
- package/.next/server/chunks/5456.js +1 -1
- 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/6474.js +14 -0
- package/.next/server/chunks/650.js +1 -0
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/{5742.js → 6927.js} +1 -1
- package/.next/server/chunks/7506.js +1 -1
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8543.js +1 -1
- package/.next/server/chunks/8581.js +2 -2
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -0
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8918.js +105 -3
- package/.next/server/chunks/9130.js +1 -1
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/967.js +1 -1
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/chunks/9882.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- 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/server/src/middleware.js +2 -2
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/{1642-767aed8e7c61ef7f.js → 1642-fb2e176aaadbd137.js} +1 -1
- package/.next/static/chunks/2053-85a974ddfe7498fe.js +1 -0
- package/.next/static/chunks/{2407-940df9b11fadafc6.js → 2407-f1f258d4a1d92620.js} +1 -1
- package/.next/static/chunks/{2619-a305ad4810f1393a.js → 2619-04bc32f026a0d946.js} +1 -1
- package/.next/static/chunks/344-e1cefd00787060e4.js +1 -0
- package/.next/static/chunks/3922.f45dcfc1e7da552a.js +1 -0
- package/.next/static/chunks/5521-c358c31f60e5e689.js +1 -0
- package/.next/static/chunks/591-308072f285c34787.js +1 -0
- package/.next/static/chunks/6654-ac431270fac1a283.js +1 -0
- package/.next/static/chunks/{8165-3525fb42f1b4976e.js → 8165-3853772f6ae1299b.js} +1 -1
- package/.next/static/chunks/{8566-a6a7c70558927410.js → 8566-aeda747542072ace.js} +1 -1
- package/.next/static/chunks/8811-29eaa24237f48558.js +1 -0
- package/.next/static/chunks/{9619-22adf5367c4b7080.js → 9619-6c17a271f7f98fbb.js} +1 -1
- package/.next/static/chunks/998-2eb5883186abd0bd.js +1 -0
- package/.next/static/chunks/app/layout-da66300cc20244ed.js +1 -0
- package/.next/static/chunks/app/more/{page-30057cf1e0762ad2.js → page-87c84987b2765213.js} +1 -1
- package/.next/static/chunks/app/{page-8483ba400af011f5.js → page-1b820c421db48c2c.js} +1 -1
- package/.next/static/chunks/app/review/page-95f749caae382f46.js +1 -0
- package/.next/static/chunks/app/sessions/page-049e06335187aa91.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/{page-74aac15286504ef4.js → page-9ee7a381636e60cb.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-040c5f0f585e6812.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-c601f3b3ece6557e.js → page-373ea37b16d930c7.js} +1 -1
- package/.next/static/chunks/{webpack-49ade0526854dd4e.js → webpack-021f0741f22dd16a.js} +1 -1
- package/.next/static/css/38070d879efa1371.css +1 -0
- package/.next/trace +13 -13
- package/README.md +90 -605
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +11 -1
- package/dist/cli/commands/docs.d.ts.map +1 -1
- package/dist/cli/commands/docs.js +5 -0
- package/dist/cli/commands/remote.d.ts +34 -1
- package/dist/cli/commands/remote.d.ts.map +1 -1
- package/dist/cli/commands/remote.js +171 -6
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +255 -112
- package/dist/cli/commands/stop.d.ts.map +1 -1
- package/dist/cli/commands/stop.js +53 -1
- package/dist/cli/commands/sync.js +3 -3
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +11 -0
- package/dist/cli/docs/setup-guide.d.ts +14 -0
- package/dist/cli/docs/setup-guide.d.ts.map +1 -0
- package/dist/cli/docs/setup-guide.js +368 -0
- package/dist/cli/types/api-responses.d.ts +21 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +2 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/daemon.d.ts +42 -2
- package/dist/cli/utils/daemon.d.ts.map +1 -1
- package/dist/cli/utils/daemon.js +222 -40
- package/dist/cli/utils/docs-reader.d.ts +6 -0
- package/dist/cli/utils/docs-reader.d.ts.map +1 -1
- package/dist/cli/utils/docs-reader.js +14 -13
- package/dist/cli/utils/npm-runner.d.ts +12 -0
- package/dist/cli/utils/npm-runner.d.ts.map +1 -1
- package/dist/cli/utils/npm-runner.js +36 -0
- package/dist/cli/utils/process-inspect.d.ts +55 -0
- package/dist/cli/utils/process-inspect.d.ts.map +1 -0
- package/dist/cli/utils/process-inspect.js +214 -0
- package/dist/cli/utils/remote-pairing.d.ts +68 -0
- package/dist/cli/utils/remote-pairing.d.ts.map +1 -0
- package/dist/cli/utils/remote-pairing.js +117 -0
- package/dist/cli/utils/server-identity.d.ts +50 -0
- package/dist/cli/utils/server-identity.d.ts.map +1 -0
- package/dist/cli/utils/server-identity.js +118 -0
- package/dist/cli/utils/server-ready.d.ts +13 -0
- package/dist/cli/utils/server-ready.d.ts.map +1 -1
- package/dist/cli/utils/server-ready.js +16 -0
- package/dist/lib/detection/status-reason.d.ts +17 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.js +17 -0
- package/dist/lib/security/pairing-code.d.ts +2 -1
- package/dist/lib/security/pairing-code.d.ts.map +1 -1
- package/dist/server/locales/en/worktree.json +41 -7
- package/dist/server/locales/ja/worktree.json +41 -7
- package/dist/server/src/config/image-extensions.js +1 -0
- package/dist/server/src/config/session-starting-config.js +75 -0
- package/dist/server/src/lib/auto-yes-poller.js +22 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +2 -1
- package/dist/server/src/lib/cli-tools/base.js +15 -1
- package/dist/server/src/lib/cli-tools/codex.js +3 -2
- package/dist/server/src/lib/cli-tools/command-code-plan-review.js +175 -0
- package/dist/server/src/lib/cli-tools/command-code.js +30 -4
- package/dist/server/src/lib/cli-tools/copilot.js +2 -1
- package/dist/server/src/lib/cli-tools/gemini.js +2 -1
- package/dist/server/src/lib/cli-tools/liveness-spec.js +27 -9
- package/dist/server/src/lib/cli-tools/opencode-v2.js +2 -1
- package/dist/server/src/lib/cli-tools/opencode.js +2 -1
- package/dist/server/src/lib/cli-tools/vibe-local.js +2 -1
- package/dist/server/src/lib/detection/cli-patterns.js +94 -1
- package/dist/server/src/lib/detection/status-reason.js +17 -0
- package/dist/server/src/lib/detection/tool-liveness.js +3 -1
- package/dist/server/src/lib/detection/tools/codex/detect.js +26 -0
- package/dist/server/src/lib/detection/tools/command-code/plan-review-state.js +75 -0
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +33 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +5 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +11 -0
- package/dist/server/src/lib/session/claude-executor.js +2 -2
- package/dist/server/src/lib/session/claude-session.js +138 -16
- package/dist/server/src/lib/session/current-output-builder.js +49 -21
- package/dist/server/src/lib/session/launch-screen.js +57 -0
- package/dist/server/src/lib/session/session-start-error.js +20 -0
- package/dist/server/src/lib/session/session-starting-state.js +236 -0
- package/dist/server/src/lib/skills/agent-state-paths.js +39 -0
- package/dist/server/src/lib/skills/receipt-owned-paths.js +118 -0
- package/dist/server/src/lib/tmux/tmux.js +25 -0
- package/dist/server/src/lib/verification/env-clean-gate.js +195 -6
- package/dist/server/src/lib/verification/gate-runner.js +29 -2
- package/dist/server/src/lib/verification/scope-gate.js +58 -4
- package/docs/en/architecture.md +722 -0
- package/docs/en/user-guide/agents-guide.md +306 -0
- package/docs/en/user-guide/cli-setup-guide.md +676 -0
- package/docs/en/user-guide/cmate-schedules-guide.md +388 -0
- package/docs/en/user-guide/commands-guide.md +467 -0
- package/docs/en/user-guide/quick-start.md +231 -0
- package/docs/en/user-guide/webapp-guide.md +1020 -0
- package/docs/en/user-guide/workflow-examples.md +463 -0
- package/package.json +18 -7
- package/release-notes/0.44.0.json +82 -0
- package/release-notes/0.44.1.json +54 -0
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/3707.js +0 -15
- package/.next/server/chunks/6491.js +0 -103
- package/.next/server/chunks/7004.js +0 -1
- package/.next/server/chunks/8673.js +0 -14
- package/.next/static/chunks/2039-117a361f795ddc4b.js +0 -1
- package/.next/static/chunks/2053-611dd27d42721b79.js +0 -1
- package/.next/static/chunks/344-6f9fc1f38f01a839.js +0 -1
- package/.next/static/chunks/3778-56f41fc2cecb8c43.js +0 -1
- package/.next/static/chunks/3922.8e79fc89f593280b.js +0 -1
- package/.next/static/chunks/5449-6cb80bab2bd06b79.js +0 -1
- package/.next/static/chunks/6966-bb854d1145783a64.js +0 -1
- package/.next/static/chunks/7705-1f58d4c03d991fcf.js +0 -1
- package/.next/static/chunks/app/layout-057c850cd0df978e.js +0 -1
- package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +0 -1
- package/.next/static/chunks/app/sessions/page-1a8ba152bbcb9efb.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-eab0bf7564d3f9e2.js +0 -1
- package/.next/static/css/b3f433d52b8ed5c8.css +0 -1
- /package/.next/static/{BVkBYdceLRvMROqQIqeBx → 57lOiz8zSEHdw97XIm0af}/_buildManifest.js +0 -0
- /package/.next/static/{BVkBYdceLRvMROqQIqeBx → 57lOiz8zSEHdw97XIm0af}/_ssgManifest.js +0 -0
|
@@ -115,6 +115,23 @@ exports.STATUS_REASON = {
|
|
|
115
115
|
OPENCODE_RESPONSE_COMPLETE: 'opencode_response_complete',
|
|
116
116
|
INPUT_PROMPT: 'input_prompt',
|
|
117
117
|
NO_RECENT_OUTPUT: 'no_recent_output',
|
|
118
|
+
/**
|
|
119
|
+
* Issue #3179: the agent's launch is still in progress.
|
|
120
|
+
*
|
|
121
|
+
* Published by `current-output-builder` and `worktree-status-helper` while
|
|
122
|
+
* `lib/session/session-starting-state` holds a record for the instance — from
|
|
123
|
+
* `beginAgentSession` until `startSession` returns or throws, bounded by the
|
|
124
|
+
* tool's readiness wait and released early by a dialog the launch does not
|
|
125
|
+
* answer. The frame underneath (a shell prompt and the launch line, or a trust
|
|
126
|
+
* dialog the launch is about to answer) is not read while it is up: the status
|
|
127
|
+
* is `running`, and `isUnclassifiedActive` / `isSelectionListActive` /
|
|
128
|
+
* `isPromptWaiting` are all false, so no pad, no answer sheet and no `wait`
|
|
129
|
+
* exit 10 is raised for a screen nobody has to drive.
|
|
130
|
+
*
|
|
131
|
+
* ADDITIVE in the sense {@link STATUS_REASON.EXITED} is: a reader that does not
|
|
132
|
+
* know the token sees a `running` session.
|
|
133
|
+
*/
|
|
134
|
+
STARTING: 'starting',
|
|
118
135
|
/**
|
|
119
136
|
* Issue #2070: the tmux session is there, and the TOOL is not.
|
|
120
137
|
*
|
|
@@ -66,7 +66,8 @@ export interface PairingHandoff {
|
|
|
66
66
|
export interface CreatedPairing {
|
|
67
67
|
/**
|
|
68
68
|
* Plaintext pairing code. NEVER persisted — the caller renders it as a QR
|
|
69
|
-
* code and drops it.
|
|
69
|
+
* code and drops it. It cannot be displayed again; `remote pair` mints a
|
|
70
|
+
* replacement instead (Issue #3127, `src/cli/utils/remote-pairing.ts`).
|
|
70
71
|
*/
|
|
71
72
|
code: string;
|
|
72
73
|
/** Plaintext long-lived token (also written to the handoff file). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pairing-code.d.ts","sourceRoot":"","sources":["../../../src/lib/security/pairing-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAUH,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,wBAAwB,CAAC;AAEvD,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,MAAQ,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,yBAAyB,qCAAqC,CAAC;AAE5E,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B
|
|
1
|
+
{"version":3,"file":"pairing-code.d.ts","sourceRoot":"","sources":["../../../src/lib/security/pairing-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAUH,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,wBAAwB,CAAC;AAEvD,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,MAAQ,CAAC;AAEvC;;;GAGG;AACH,eAAO,MAAM,yBAAyB,qCAAqC,CAAC;AAE5E,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmB3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,GAAG,IAAI,CAGzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CASnF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,cAAc,CAU9F;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA0B1E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAM5D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAE3F;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAgB5E"}
|
|
@@ -65,6 +65,10 @@
|
|
|
65
65
|
"systemMessage": "System Message",
|
|
66
66
|
"systemMessageLabel": "System message",
|
|
67
67
|
"openFile": "Open file: {path}",
|
|
68
|
+
"imageLoading": "Loading image…",
|
|
69
|
+
"imageUnavailable": "Image unavailable",
|
|
70
|
+
"openImage": "Open image: {path}",
|
|
71
|
+
"videoLabel": "Video: {path}",
|
|
68
72
|
"conversationLabel": "Conversation: {preview}",
|
|
69
73
|
"filePathMissing": "That path is not in this worktree"
|
|
70
74
|
},
|
|
@@ -406,7 +410,12 @@
|
|
|
406
410
|
"stats": "Show usage statistics",
|
|
407
411
|
"thinking": "Switch the model variant",
|
|
408
412
|
"web": "Pair another device with this OpenCode",
|
|
409
|
-
"worktrees": "Manage workspaces"
|
|
413
|
+
"worktrees": "Manage workspaces",
|
|
414
|
+
"artifact-capabilities": "Load the reference for what a published artifact can use, such as connectors and file downloads",
|
|
415
|
+
"artifact-diagramming": "Load guidance for drawing diagrams in artifacts that stay legible in light and dark themes",
|
|
416
|
+
"claude-in-chrome": "Have Claude carry out a task in your browser through Claude in Chrome",
|
|
417
|
+
"plugin-authoring": "Load the reference Claude uses to write a mod",
|
|
418
|
+
"slides": "Make a new Claude Slides presentation from your brief"
|
|
410
419
|
}
|
|
411
420
|
},
|
|
412
421
|
"session": {
|
|
@@ -491,7 +500,10 @@
|
|
|
491
500
|
"buttonAriaLabel": "Update CommandMate to v{version}",
|
|
492
501
|
"buttonReleaseAriaLabel": "Open the v{version} release page",
|
|
493
502
|
"buttonUpdating": "Updating…",
|
|
494
|
-
"statusDialogTitle": "Update status"
|
|
503
|
+
"statusDialogTitle": "Update status",
|
|
504
|
+
"pendingLabel": "v{version} coming soon",
|
|
505
|
+
"pendingDescription": "v{version} is not on npm yet. You can update once it is published there.",
|
|
506
|
+
"notYetPublished": "The new version is not on npm yet. Please try again in a few minutes."
|
|
495
507
|
},
|
|
496
508
|
"terminal": {
|
|
497
509
|
"historyLabel": "History",
|
|
@@ -549,6 +561,13 @@
|
|
|
549
561
|
"dialogCardLabel": "Terminal screen",
|
|
550
562
|
"unreadableHint": "Answer with the number shown on screen (1-9) or y/n. Enter confirms whatever the CLI has highlighted."
|
|
551
563
|
},
|
|
564
|
+
"sessionStarting": {
|
|
565
|
+
"title": "Starting {agent}…",
|
|
566
|
+
"titleWithElapsed": "Starting {agent}… {elapsed}",
|
|
567
|
+
"hint": "The terminal will appear once the agent is ready.",
|
|
568
|
+
"showTerminal": "Show terminal",
|
|
569
|
+
"label": "Agent starting"
|
|
570
|
+
},
|
|
552
571
|
"chatTranscript": {
|
|
553
572
|
"regionLabel": "Chat transcript",
|
|
554
573
|
"loading": "Loading messages",
|
|
@@ -1097,11 +1116,26 @@
|
|
|
1097
1116
|
"close": "Close (Esc)",
|
|
1098
1117
|
"closeAria": "Close this screen (Esc)"
|
|
1099
1118
|
},
|
|
1100
|
-
"
|
|
1101
|
-
"
|
|
1102
|
-
"
|
|
1103
|
-
"
|
|
1104
|
-
"
|
|
1119
|
+
"planReview": {
|
|
1120
|
+
"groupLabel": "Plan review",
|
|
1121
|
+
"commentLabel": "Comment on the plan",
|
|
1122
|
+
"commentPlaceholder": "What should change? (Add comment → Submit review)",
|
|
1123
|
+
"comment": "Add comment",
|
|
1124
|
+
"submit": "Submit review (Ctrl+R)",
|
|
1125
|
+
"approve": "Approve (Ctrl+A)",
|
|
1126
|
+
"cancel": "Cancel (Esc)",
|
|
1127
|
+
"approveConfirmLabel": "Confirm plan approval",
|
|
1128
|
+
"approveConfirmText": "Approving runs the plan. Approve it?",
|
|
1129
|
+
"approveConfirmYes": "Approve and run",
|
|
1130
|
+
"approveConfirmNo": "Not now",
|
|
1131
|
+
"refusal": {
|
|
1132
|
+
"ambiguousAnswer": "Nothing was sent: a bare number or yes / no is not an answer here — the plan review has no numbered options. Approve or cancel, or rephrase it as a comment.",
|
|
1133
|
+
"busy": "Nothing was sent: the plan review's focus is not on the plan. Move it back into the plan in the terminal, then retry.",
|
|
1134
|
+
"nothingToSubmit": "There is no comment to submit. Add a comment first.",
|
|
1135
|
+
"invalidRequest": "That action does not fit this screen. Nothing was sent.",
|
|
1136
|
+
"notActive": "Nothing was sent: no plan review is on screen.",
|
|
1137
|
+
"generic": "Could not send."
|
|
1138
|
+
}
|
|
1105
1139
|
},
|
|
1106
1140
|
"selectionKeys": {
|
|
1107
1141
|
"numbersToolbarLabel": "Option number keys",
|
|
@@ -65,6 +65,10 @@
|
|
|
65
65
|
"systemMessage": "システムメッセージ",
|
|
66
66
|
"systemMessageLabel": "システムメッセージ",
|
|
67
67
|
"openFile": "ファイルを開く: {path}",
|
|
68
|
+
"imageLoading": "画像を読み込み中…",
|
|
69
|
+
"imageUnavailable": "画像を表示できません",
|
|
70
|
+
"openImage": "画像を開く: {path}",
|
|
71
|
+
"videoLabel": "動画: {path}",
|
|
68
72
|
"conversationLabel": "会話: {preview}",
|
|
69
73
|
"filePathMissing": "このパスは worktree にありません"
|
|
70
74
|
},
|
|
@@ -406,7 +410,12 @@
|
|
|
406
410
|
"stats": "使用量の統計を表示",
|
|
407
411
|
"thinking": "モデルのバリアントを切り替え",
|
|
408
412
|
"web": "この OpenCode に別のデバイスをペアリング",
|
|
409
|
-
"worktrees": "ワークスペースを管理"
|
|
413
|
+
"worktrees": "ワークスペースを管理",
|
|
414
|
+
"artifact-capabilities": "公開アーティファクトで使える機能(コネクタ・ファイルのダウンロードなど)のリファレンスを読み込み",
|
|
415
|
+
"artifact-diagramming": "アーティファクトにライト・ダーク両方で読める図を描くためのガイダンスを読み込み",
|
|
416
|
+
"claude-in-chrome": "Claude in Chrome 経由でブラウザ上の作業を Claude に依頼",
|
|
417
|
+
"plugin-authoring": "mod を書くときに Claude が使うリファレンスを読み込み",
|
|
418
|
+
"slides": "指示から Claude Slides のプレゼンテーションを作成"
|
|
410
419
|
}
|
|
411
420
|
},
|
|
412
421
|
"session": {
|
|
@@ -491,7 +500,10 @@
|
|
|
491
500
|
"buttonAriaLabel": "CommandMate を v{version} にアップデート",
|
|
492
501
|
"buttonReleaseAriaLabel": "v{version} のリリースページを開く",
|
|
493
502
|
"buttonUpdating": "更新中…",
|
|
494
|
-
"statusDialogTitle": "アップデートの状態"
|
|
503
|
+
"statusDialogTitle": "アップデートの状態",
|
|
504
|
+
"pendingLabel": "v{version} 公開準備中",
|
|
505
|
+
"pendingDescription": "v{version} は npm への反映待ちです。反映されると更新できるようになります。",
|
|
506
|
+
"notYetPublished": "npm への反映待ちです。しばらくしてから再度お試しください。"
|
|
495
507
|
},
|
|
496
508
|
"terminal": {
|
|
497
509
|
"historyLabel": "履歴",
|
|
@@ -549,6 +561,13 @@
|
|
|
549
561
|
"dialogCardLabel": "ターミナルの画面",
|
|
550
562
|
"unreadableHint": "画面に出ている番号(1〜9)か y/n で答えてください。Enter は選択中の項目をそのまま確定します。"
|
|
551
563
|
},
|
|
564
|
+
"sessionStarting": {
|
|
565
|
+
"title": "{agent} を起動中…",
|
|
566
|
+
"titleWithElapsed": "{agent} を起動中… {elapsed}",
|
|
567
|
+
"hint": "起動が終わるとターミナルを表示します。",
|
|
568
|
+
"showTerminal": "ターミナルを見る",
|
|
569
|
+
"label": "エージェントの起動中"
|
|
570
|
+
},
|
|
552
571
|
"chatTranscript": {
|
|
553
572
|
"regionLabel": "チャット履歴",
|
|
554
573
|
"loading": "メッセージを読み込み中",
|
|
@@ -1097,11 +1116,26 @@
|
|
|
1097
1116
|
"close": "閉じる (Esc)",
|
|
1098
1117
|
"closeAria": "この画面を閉じる (Esc)"
|
|
1099
1118
|
},
|
|
1100
|
-
"
|
|
1101
|
-
"
|
|
1102
|
-
"
|
|
1103
|
-
"
|
|
1104
|
-
"
|
|
1119
|
+
"planReview": {
|
|
1120
|
+
"groupLabel": "プランのレビュー",
|
|
1121
|
+
"commentLabel": "プランへのコメント",
|
|
1122
|
+
"commentPlaceholder": "直してほしい点を書く(コメントを追加 → レビューを送信)",
|
|
1123
|
+
"comment": "コメントを追加",
|
|
1124
|
+
"submit": "レビューを送信 (Ctrl+R)",
|
|
1125
|
+
"approve": "承認 (Ctrl+A)",
|
|
1126
|
+
"cancel": "取り消し (Esc)",
|
|
1127
|
+
"approveConfirmLabel": "プランの承認の確認",
|
|
1128
|
+
"approveConfirmText": "承認するとプランが実行されます。承認しますか?",
|
|
1129
|
+
"approveConfirmYes": "承認して実行",
|
|
1130
|
+
"approveConfirmNo": "やめる",
|
|
1131
|
+
"refusal": {
|
|
1132
|
+
"ambiguousAnswer": "番号や yes / no だけの入力は送っていません。計画には番号付きの選択肢がありません。承認か取り消しを使うか、コメントとして書き直してください。",
|
|
1133
|
+
"busy": "レビュー画面のフォーカスが本文以外にあるため、何も送っていません。ターミナルで本文にフォーカスを戻してから、もう一度送ってください。",
|
|
1134
|
+
"nothingToSubmit": "送るコメントがありません。先にコメントを追加してください。",
|
|
1135
|
+
"invalidRequest": "この画面では送れない操作です。何も送っていません。",
|
|
1136
|
+
"notActive": "計画のレビュー画面が表示されていないため、何も送っていません。",
|
|
1137
|
+
"generic": "送信できませんでした。"
|
|
1138
|
+
}
|
|
1105
1139
|
},
|
|
1106
1140
|
"selectionKeys": {
|
|
1107
1141
|
"numbersToolbarLabel": "選択肢の番号キー",
|
|
@@ -228,6 +228,7 @@ function validateImageContent(extension, buffer) {
|
|
|
228
228
|
return {
|
|
229
229
|
valid: false,
|
|
230
230
|
error: `File size exceeds ${exports.IMAGE_MAX_SIZE_BYTES / 1024 / 1024}MB limit`,
|
|
231
|
+
reason: 'too-large',
|
|
231
232
|
};
|
|
232
233
|
}
|
|
233
234
|
const normalizedExt = normalizeExtension(extension);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* How long a session may be shown as "starting" (Issue #3179).
|
|
4
|
+
*
|
|
5
|
+
* `lib/session/session-starting-state` records when an agent's launch began and
|
|
6
|
+
* clears the record when `BaseCLITool.startSession` returns or throws. These
|
|
7
|
+
* bounds are the escape hatches for the launches that do neither in time:
|
|
8
|
+
* several tools (antigravity, codex, gemini, copilot, Command Code) only LOG
|
|
9
|
+
* when their readiness wait runs out and carry on, so a launch that never
|
|
10
|
+
* became ready would otherwise be shown as starting for as long as the request
|
|
11
|
+
* lingered. Past the bound the screen falls back to what it showed before
|
|
12
|
+
* #3179 — the raw pane — so a human notices the stuck start.
|
|
13
|
+
*
|
|
14
|
+
* @module config/session-starting-config
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.SESSION_STARTING_ELAPSED_THRESHOLD_MS = exports.SESSION_STARTING_PROMPT_GRACE_MS = exports.SESSION_STARTING_DEFAULT_WAIT_MS = exports.SESSION_STARTING_GRACE_MS = void 0;
|
|
18
|
+
exports.getSessionStartingMaxMs = getSessionStartingMaxMs;
|
|
19
|
+
exports.getSessionStartingMaxMsAcrossTools = getSessionStartingMaxMsAcrossTools;
|
|
20
|
+
const types_1 = require("../lib/cli-tools/types");
|
|
21
|
+
/**
|
|
22
|
+
* Slack added on top of a tool's own readiness wait, so the starting display
|
|
23
|
+
* outlives the wait it describes by a little rather than ending a beat before
|
|
24
|
+
* the launch reports.
|
|
25
|
+
*/
|
|
26
|
+
exports.SESSION_STARTING_GRACE_MS = 5_000;
|
|
27
|
+
/**
|
|
28
|
+
* The default readiness wait a launch performs (antigravity / codex / gemini /
|
|
29
|
+
* copilot / opencode / Command Code are all measured at about 30 s, counting
|
|
30
|
+
* their initial settle delay and their prompt wait).
|
|
31
|
+
*/
|
|
32
|
+
exports.SESSION_STARTING_DEFAULT_WAIT_MS = 30_000;
|
|
33
|
+
/**
|
|
34
|
+
* Per-tool readiness waits that differ from the default. Claude waits for its
|
|
35
|
+
* composer for up to `CLAUDE_INIT_TIMEOUT` (60 s); the literal is restated here
|
|
36
|
+
* rather than imported so this config module stays free of the session graph.
|
|
37
|
+
*/
|
|
38
|
+
const SESSION_STARTING_WAIT_MS = {
|
|
39
|
+
claude: 60_000,
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* The longest a launch of `cliToolId` is shown as starting, in ms.
|
|
43
|
+
*
|
|
44
|
+
* @param cliToolId - The tool being launched
|
|
45
|
+
* @returns Its readiness wait plus {@link SESSION_STARTING_GRACE_MS}
|
|
46
|
+
*/
|
|
47
|
+
function getSessionStartingMaxMs(cliToolId) {
|
|
48
|
+
return (SESSION_STARTING_WAIT_MS[cliToolId] ?? exports.SESSION_STARTING_DEFAULT_WAIT_MS)
|
|
49
|
+
+ exports.SESSION_STARTING_GRACE_MS;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The longest {@link getSessionStartingMaxMs} over every tool, in ms.
|
|
53
|
+
*
|
|
54
|
+
* A send to a worktree with no session launches the agent inside the request,
|
|
55
|
+
* so the client must wait at least this long (Issue #3194).
|
|
56
|
+
*/
|
|
57
|
+
function getSessionStartingMaxMsAcrossTools() {
|
|
58
|
+
return Math.max(...types_1.CLI_TOOL_IDS.map(getSessionStartingMaxMs));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* How long a dialog may stay on screen during a launch before it is treated as
|
|
62
|
+
* one the server will NOT answer (a login, an unknown dialog) and the starting
|
|
63
|
+
* display gives way to the raw pane.
|
|
64
|
+
*
|
|
65
|
+
* The dialogs the launch answers itself — the folder-trust screens of
|
|
66
|
+
* antigravity / codex / copilot / claude — are answered within one poll of the
|
|
67
|
+
* launch's readiness loop (≤ 1 s) plus the settle wait after the key, so they
|
|
68
|
+
* never reach this bound.
|
|
69
|
+
*/
|
|
70
|
+
exports.SESSION_STARTING_PROMPT_GRACE_MS = 5_000;
|
|
71
|
+
/**
|
|
72
|
+
* After how long the client starts printing the elapsed time next to
|
|
73
|
+
* "<agent> を起動中…".
|
|
74
|
+
*/
|
|
75
|
+
exports.SESSION_STARTING_ELAPSED_THRESHOLD_MS = 5_000;
|
|
@@ -64,6 +64,7 @@ const response_checker_1 = require("./polling/response-checker");
|
|
|
64
64
|
const antigravity_permission_receipts_1 = require("./polling/antigravity-permission-receipts");
|
|
65
65
|
const auto_yes_resolver_1 = require("./polling/auto-yes-resolver");
|
|
66
66
|
const auto_yes_policy_1 = require("./polling/auto-yes-policy");
|
|
67
|
+
const detect_1 = require("./detection/tools/codex/detect");
|
|
67
68
|
const auto_yes_suppression_state_1 = require("./polling/auto-yes-suppression-state");
|
|
68
69
|
const auto_yes_dialog_gate_1 = require("./polling/auto-yes-dialog-gate");
|
|
69
70
|
const task_transition_service_1 = require("./tasks/task-transition-service");
|
|
@@ -490,6 +491,27 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
|
|
|
490
491
|
});
|
|
491
492
|
return 'no_answer';
|
|
492
493
|
}
|
|
494
|
+
// 3.2. Issue #3062: codex's `/model` picker (both stages) is not ours to
|
|
495
|
+
// answer. A digit there is an immediate decision, so the base rules'
|
|
496
|
+
// default would choose the model and effort for the operator. Judged by the
|
|
497
|
+
// picker's own footer, not by `kind: picker`, which the hooks screens share.
|
|
498
|
+
// The tool's `detectPrompt` still reports the prompt, so `/prompt-response`
|
|
499
|
+
// (the human's answer) is unaffected. Reuses `unclassified-frame`: the tool
|
|
500
|
+
// recognised the frame and deliberately declined it.
|
|
501
|
+
if (cliToolId === 'codex' && (0, detect_1.isCodexModelPickerFrame)(cleanOutput)) {
|
|
502
|
+
(0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, cliToolId, instanceId, {
|
|
503
|
+
reason: 'unclassified-frame',
|
|
504
|
+
mode: null,
|
|
505
|
+
promptType: promptDetection.promptData.type,
|
|
506
|
+
});
|
|
507
|
+
warnOncePerFrame(pollerState, `${frameKey}\u0000codex-model-picker`, 'poller:auto-yes-skipped-model-picker', {
|
|
508
|
+
worktreeId,
|
|
509
|
+
cliToolId,
|
|
510
|
+
instanceId,
|
|
511
|
+
promptType: promptDetection.promptData.type,
|
|
512
|
+
});
|
|
513
|
+
return 'no_answer';
|
|
514
|
+
}
|
|
493
515
|
// 3.5. Issue #1928 (§4 D1 decision 4): the generic numbered-list inference is
|
|
494
516
|
// not enough to send an answer. The detection above judges the ROWS, and the
|
|
495
517
|
// rows of an agent's own reply can be indistinguishable from a dialog's --
|
|
@@ -26,6 +26,7 @@ const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifec
|
|
|
26
26
|
const logger_1 = require("../../lib/logger");
|
|
27
27
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
28
28
|
const install_hints_1 = require("./install-hints");
|
|
29
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
29
30
|
const logger = (0, logger_1.createLogger)('cli-tools/antigravity');
|
|
30
31
|
/**
|
|
31
32
|
* Extract error message from unknown error type (DRY).
|
|
@@ -254,7 +255,7 @@ class AntigravityTool extends base_1.BaseCLITool {
|
|
|
254
255
|
worktreePath,
|
|
255
256
|
});
|
|
256
257
|
const launchCommand = model ? `${base} --model ${shellSingleQuote(model)}` : base;
|
|
257
|
-
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
258
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
258
259
|
// Wait for agy to initialize
|
|
259
260
|
await new Promise((resolve) => setTimeout(resolve, ANTIGRAVITY_INIT_WAIT_MS));
|
|
260
261
|
// Poll until the interactive prompt is ready (handles the trust dialog)
|
|
@@ -28,6 +28,7 @@ const logger_1 = require("../logger");
|
|
|
28
28
|
const terminal_keys_1 = require("../../types/terminal-keys");
|
|
29
29
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
30
30
|
const tmux_pane_config_1 = require("../../config/tmux-pane-config");
|
|
31
|
+
const session_starting_state_1 = require("../session/session-starting-state");
|
|
31
32
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
32
33
|
const logger = (0, logger_1.createLogger)('cli-tools/base');
|
|
33
34
|
/**
|
|
@@ -213,8 +214,12 @@ class BaseCLITool {
|
|
|
213
214
|
* @throws Whatever {@link launchSession} threw — unchanged, after reporting
|
|
214
215
|
*/
|
|
215
216
|
async startSession(worktreeId, worktreePath, instanceId, model) {
|
|
217
|
+
// Issue #3195: this launch's "starting" record is written under this token
|
|
218
|
+
// (see `session-starting-state`), so the `finally` below clears this
|
|
219
|
+
// launch's record and never a later launch's of the same instance.
|
|
220
|
+
const startingToken = (0, session_starting_state_1.issueSessionStartingToken)();
|
|
216
221
|
try {
|
|
217
|
-
await this.launchSession(worktreeId, worktreePath, instanceId, model);
|
|
222
|
+
await (0, session_starting_state_1.runWithSessionStartingToken)(startingToken, () => this.launchSession(worktreeId, worktreePath, instanceId, model));
|
|
218
223
|
}
|
|
219
224
|
catch (error) {
|
|
220
225
|
// Issue #2429: a launch that threw is reported as a failed start and as
|
|
@@ -229,6 +234,15 @@ class BaseCLITool {
|
|
|
229
234
|
}, error);
|
|
230
235
|
throw error;
|
|
231
236
|
}
|
|
237
|
+
finally {
|
|
238
|
+
// Issue #3179: the launch is over, returned or thrown, so the screen
|
|
239
|
+
// stops showing it as starting. `beginAgentSession` wrote the record on
|
|
240
|
+
// the creation path; a reused pane never had one, and this is a no-op for
|
|
241
|
+
// it. `relaunchIfToolExited` comes through here too. Issue #3195: only
|
|
242
|
+
// under this launch's token — a launch killed and started again has a
|
|
243
|
+
// newer record under this key, and it is not this launch's to end.
|
|
244
|
+
(0, session_starting_state_1.clearSessionStarting)(worktreeId, this.id, instanceId, startingToken);
|
|
245
|
+
}
|
|
232
246
|
const adopted = this.takeAdoptionMark(worktreeId, instanceId);
|
|
233
247
|
if (adopted !== null)
|
|
234
248
|
await this.warnIfHookUrlIsStale(worktreeId, adopted, instanceId);
|
|
@@ -20,6 +20,7 @@ const hooks_config_1 = require("../../lib/hooks/sources/codex/hooks-config");
|
|
|
20
20
|
const agent_session_lifecycle_1 = require("../../lib/session/agent-session-lifecycle");
|
|
21
21
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
22
22
|
const install_hints_1 = require("./install-hints");
|
|
23
|
+
const launch_screen_1 = require("../../lib/session/launch-screen");
|
|
23
24
|
const logger = (0, logger_1.createLogger)('cli-tools/codex');
|
|
24
25
|
/**
|
|
25
26
|
* Extract error message from unknown error type (DRY)
|
|
@@ -268,11 +269,11 @@ class CodexTool extends base_1.BaseCLITool {
|
|
|
268
269
|
// as the new one's.
|
|
269
270
|
const relaunchIntoSamePane = async () => {
|
|
270
271
|
(0, agent_session_lifecycle_1.beginAgentSession)({ worktreeId, cliToolId: sources_1.CODEX_CLI_TOOL_ID, instanceId });
|
|
271
|
-
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
272
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
272
273
|
await new Promise((resolve) => setTimeout(resolve, CODEX_INIT_WAIT_MS));
|
|
273
274
|
};
|
|
274
275
|
// Start Codex CLI in interactive mode
|
|
275
|
-
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
276
|
+
await (0, tmux_1.sendKeys)(sessionName, (0, launch_screen_1.withLaunchScreenCleared)(launchCommand), true);
|
|
276
277
|
// Wait for Codex to initialize
|
|
277
278
|
await new Promise((resolve) => setTimeout(resolve, CODEX_INIT_WAIT_MS));
|
|
278
279
|
// Poll until Codex interactive prompt is ready
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Answering Command Code's plan review overlay from the CLI / API (Issue #3125).
|
|
4
|
+
*
|
|
5
|
+
* The overlay (`REVIEW` — `Approve ctrl+a` / `Cancel esc` / `type + enter to
|
|
6
|
+
* comment`) is not a dialog with options and not the composer, so neither
|
|
7
|
+
* `respond` (options) nor `send` (composer) could reach it. This module is the
|
|
8
|
+
* one place its keys are decided:
|
|
9
|
+
*
|
|
10
|
+
* | action | keys | allowed on phase |
|
|
11
|
+
* |-----------|----------------------------------------|-------------------------------|
|
|
12
|
+
* | `comment` | `Enter`, the text (`-l`), `Enter` | `body` |
|
|
13
|
+
* | `submit` | [the comment keys], `C-r` | `body` (needs ≥1 comment) |
|
|
14
|
+
* | `approve` | `C-a` — or `Enter` on the radio | `body`, `approve-choice` |
|
|
15
|
+
* | `cancel` | `Escape` | `body`, `approve-choice` |
|
|
16
|
+
*
|
|
17
|
+
* Why the comment opens the box with `Enter` first instead of just typing: `?`
|
|
18
|
+
* `x` `!` are one-key quick comments on this screen (measured on 1.58.0), so a
|
|
19
|
+
* comment that begins with one of them would pin a canned sentence instead.
|
|
20
|
+
* An empty `Enter` with the cursor in the plan body only opens the box
|
|
21
|
+
* (measured, #2763 §1 問い 4), and inside the box every key is text.
|
|
22
|
+
*
|
|
23
|
+
* Everything else is refused with nothing sent:
|
|
24
|
+
* - `action-focus`: `Enter` RUNS the focused action there (#2763 approved a
|
|
25
|
+
* plan that way), and what the shortcuts and letters do with the focus on
|
|
26
|
+
* the list was not measured;
|
|
27
|
+
* - `comment-box`: someone is typing a comment in the pane, and `Escape` there
|
|
28
|
+
* discards it rather than cancelling the review;
|
|
29
|
+
* - `unknown`: a hint bar this module has not seen.
|
|
30
|
+
*
|
|
31
|
+
* Approval is only ever the explicit `approve` action. Nothing here is reached
|
|
32
|
+
* by Auto-Yes: the detector publishes this screen with `hasActivePrompt: false`.
|
|
33
|
+
*
|
|
34
|
+
* @module lib/cli-tools/command-code-plan-review
|
|
35
|
+
*/
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.PLAN_REVIEW_STEP_DELAY_MS = exports.PLAN_REVIEW_REFUSAL = exports.PLAN_REVIEW_ACTIONS = void 0;
|
|
38
|
+
exports.isPlanReviewAction = isPlanReviewAction;
|
|
39
|
+
exports.planCommandCodePlanReviewKeys = planCommandCodePlanReviewKeys;
|
|
40
|
+
exports.sendCommandCodePlanReviewKeys = sendCommandCodePlanReviewKeys;
|
|
41
|
+
const tmux_1 = require("../tmux/tmux");
|
|
42
|
+
const tmux_capture_cache_1 = require("../tmux/tmux-capture-cache");
|
|
43
|
+
exports.PLAN_REVIEW_ACTIONS = ['comment', 'submit', 'approve', 'cancel'];
|
|
44
|
+
function isPlanReviewAction(value) {
|
|
45
|
+
return typeof value === 'string' && exports.PLAN_REVIEW_ACTIONS.includes(value);
|
|
46
|
+
}
|
|
47
|
+
/** Refusal reason codes. All of them mean "nothing was sent". */
|
|
48
|
+
exports.PLAN_REVIEW_REFUSAL = {
|
|
49
|
+
/** The overlay is up, but its focus is somewhere these keys are unsafe. */
|
|
50
|
+
BUSY: 'plan_review_busy',
|
|
51
|
+
/** `submit` with no comment given and none pending. */
|
|
52
|
+
NOTHING_TO_SUBMIT: 'plan_review_nothing_to_submit',
|
|
53
|
+
/** A bare number / yes / no, which would otherwise become a comment. */
|
|
54
|
+
AMBIGUOUS_ANSWER: 'plan_review_ambiguous_answer',
|
|
55
|
+
/** The request does not fit this screen (no text for a comment, `--default`). */
|
|
56
|
+
INVALID_REQUEST: 'plan_review_invalid_request',
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* A comment the caller did not label as one, that is really an answer meant
|
|
60
|
+
* for an options dialog. Typed as a comment it would land on the plan.
|
|
61
|
+
*/
|
|
62
|
+
const DIALOG_ANSWER_LIKE = /^(?:\d+(?:\s*,\s*\d+)*|y|yes|n|no)$/i;
|
|
63
|
+
/** One line: a newline inside the box would pin the comment half-typed. */
|
|
64
|
+
function normalizeComment(text) {
|
|
65
|
+
return text.replace(/\s*[\r\n]+\s*/g, ' ').trim();
|
|
66
|
+
}
|
|
67
|
+
const PHASE_REFUSALS = {
|
|
68
|
+
'action-focus': 'The plan review has its focus on the action list (`↑/↓ choose · enter to run`), where Enter runs the ' +
|
|
69
|
+
'focused action, so no key was sent. Move the focus back into the plan (↑) in the terminal, then retry.',
|
|
70
|
+
'comment-box': 'A comment is being typed in the plan review (`enter to pin · esc discard`), so no key was sent. ' +
|
|
71
|
+
'Pin or discard it in the terminal, then retry.',
|
|
72
|
+
unknown: 'The plan review is up, but its hint bar is not one this version knows, so no key was sent. ' +
|
|
73
|
+
'Answer it in the terminal.',
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Decide the keys for a request against the screen as it is now. Pure.
|
|
77
|
+
*
|
|
78
|
+
* @param state - `readCommandCodePlanReviewState` of the frame about to be answered
|
|
79
|
+
* @param request - what the caller asked for
|
|
80
|
+
*/
|
|
81
|
+
function planCommandCodePlanReviewKeys(state, request) {
|
|
82
|
+
const comment = request.text === undefined ? '' : normalizeComment(request.text);
|
|
83
|
+
const action = request.action ?? 'comment';
|
|
84
|
+
if (request.useDefault) {
|
|
85
|
+
return {
|
|
86
|
+
ok: false,
|
|
87
|
+
reason: exports.PLAN_REVIEW_REFUSAL.INVALID_REQUEST,
|
|
88
|
+
message: 'The plan review has no default option. Comment with text, or choose ' +
|
|
89
|
+
'--plan-review submit | approve | cancel.',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if ((action === 'approve' || action === 'cancel') && comment) {
|
|
93
|
+
return {
|
|
94
|
+
ok: false,
|
|
95
|
+
reason: exports.PLAN_REVIEW_REFUSAL.INVALID_REQUEST,
|
|
96
|
+
message: `--plan-review ${action} takes no text. Comment first, then ${action}.`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
if (action === 'comment' && !comment) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
reason: exports.PLAN_REVIEW_REFUSAL.INVALID_REQUEST,
|
|
103
|
+
message: 'A plan review comment needs text.',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
if (request.action === undefined && DIALOG_ANSWER_LIKE.test(comment)) {
|
|
107
|
+
return {
|
|
108
|
+
ok: false,
|
|
109
|
+
reason: exports.PLAN_REVIEW_REFUSAL.AMBIGUOUS_ANSWER,
|
|
110
|
+
message: `The plan review has no numbered options, and "${comment}" would be pinned to the plan as a ` +
|
|
111
|
+
'comment, so no key was sent. Approve or cancel with --plan-review approve | cancel; to really ' +
|
|
112
|
+
'comment this text, add --plan-review comment.',
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (state.phase === 'approve-choice') {
|
|
116
|
+
// The radio `ctrl+a` opens when comments are pending (1.58.0): `enter
|
|
117
|
+
// confirm · esc back`. Enter confirms whichever side is `(•)`.
|
|
118
|
+
if (action === 'approve')
|
|
119
|
+
return { ok: true, action, steps: [{ kind: 'key', key: 'Enter' }], comment: null };
|
|
120
|
+
if (action === 'cancel')
|
|
121
|
+
return { ok: true, action, steps: [{ kind: 'key', key: 'Escape' }], comment: null };
|
|
122
|
+
return {
|
|
123
|
+
ok: false,
|
|
124
|
+
reason: exports.PLAN_REVIEW_REFUSAL.BUSY,
|
|
125
|
+
message: 'The plan review is asking how to approve (`←/→ choose · enter confirm · esc back`), so no key was ' +
|
|
126
|
+
'sent. Confirm with --plan-review approve, or go back with --plan-review cancel.',
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (state.phase !== 'body') {
|
|
130
|
+
return { ok: false, reason: exports.PLAN_REVIEW_REFUSAL.BUSY, message: PHASE_REFUSALS[state.phase] };
|
|
131
|
+
}
|
|
132
|
+
const commentSteps = comment
|
|
133
|
+
? [{ kind: 'key', key: 'Enter' }, { kind: 'text', text: comment }, { kind: 'key', key: 'Enter' }]
|
|
134
|
+
: [];
|
|
135
|
+
switch (action) {
|
|
136
|
+
case 'comment':
|
|
137
|
+
return { ok: true, action, steps: commentSteps, comment };
|
|
138
|
+
case 'submit':
|
|
139
|
+
if (!comment && state.pendingComments === 0) {
|
|
140
|
+
return {
|
|
141
|
+
ok: false,
|
|
142
|
+
reason: exports.PLAN_REVIEW_REFUSAL.NOTHING_TO_SUBMIT,
|
|
143
|
+
message: 'The plan review has no pending comment to submit, so no key was sent. Give the comment text ' +
|
|
144
|
+
'with --plan-review submit, or approve / cancel the plan.',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return { ok: true, action, steps: [...commentSteps, { kind: 'key', key: 'C-r' }], comment: comment || null };
|
|
148
|
+
case 'approve':
|
|
149
|
+
return { ok: true, action, steps: [{ kind: 'key', key: 'C-a' }], comment: null };
|
|
150
|
+
case 'cancel':
|
|
151
|
+
return { ok: true, action, steps: [{ kind: 'key', key: 'Escape' }], comment: null };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/** Pause between steps, so the TUI handles each one as its own input event. */
|
|
155
|
+
exports.PLAN_REVIEW_STEP_DELAY_MS = 300;
|
|
156
|
+
/**
|
|
157
|
+
* Send the planned steps, one tmux invocation each.
|
|
158
|
+
*
|
|
159
|
+
* Key steps (including `C-r`) go through `sendSpecialKeys`; the comment text
|
|
160
|
+
* goes through `-l` so it is never resolved as a key name.
|
|
161
|
+
*/
|
|
162
|
+
async function sendCommandCodePlanReviewKeys(sessionName, steps, sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))) {
|
|
163
|
+
for (let i = 0; i < steps.length; i++) {
|
|
164
|
+
const step = steps[i];
|
|
165
|
+
if (step.kind === 'text') {
|
|
166
|
+
await (0, tmux_1.sendKeys)(sessionName, step.text, false, { literal: true });
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
await (0, tmux_1.sendSpecialKeys)(sessionName, [step.key]);
|
|
170
|
+
}
|
|
171
|
+
if (i < steps.length - 1)
|
|
172
|
+
await sleep(exports.PLAN_REVIEW_STEP_DELAY_MS);
|
|
173
|
+
}
|
|
174
|
+
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
175
|
+
}
|