commandmate 0.26.0 → 0.27.0
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 +431 -403
- package/.next/app-path-routes-manifest.json +26 -22
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +6 -6
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -2
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/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 -0
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +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_client-reference-manifest.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.js +2 -2
- 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 +2 -2
- 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 +1 -1
- 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 +19 -1
- 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.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 +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/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/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.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/sidebar/group-order/route_client-reference-manifest.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_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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.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.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 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
- 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 +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 +2 -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]/env/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.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 +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_client-reference-manifest.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.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.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_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.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_client-reference-manifest.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.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.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]/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 +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.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]/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 +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
- 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 +1 -5
- 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 +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 +2 -6
- 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 +3 -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 +1 -1
- 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_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_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_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]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/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 +1 -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 +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 +3 -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.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 +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 +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/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]/route.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.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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/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/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +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.js +2 -2
- package/.next/server/app/more/page.js.nft.json +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.js +1 -1
- package/.next/server/app/page.js.nft.json +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.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +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 +2 -2
- 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.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- 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 -7
- 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 +26 -22
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +3 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1538.js +7 -0
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +3 -2
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/2689.js +13 -0
- package/.next/server/chunks/2759.js +8 -0
- package/.next/server/chunks/2839.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3292.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -17
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4423.js +1 -0
- package/.next/server/chunks/4444.js +22 -8
- package/.next/server/chunks/4565.js +3 -0
- package/.next/server/chunks/467.js +1 -0
- package/.next/server/chunks/4905.js +5 -0
- package/.next/server/chunks/5017.js +1 -0
- package/.next/server/chunks/5089.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -0
- package/.next/server/chunks/5354.js +1 -0
- package/.next/server/chunks/552.js +19 -0
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5998.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +11 -11
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/7472.js +1 -0
- package/.next/server/chunks/7506.js +1 -0
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +5 -5
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9284.js +1 -0
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9508.js +1 -0
- package/.next/server/chunks/9938.js +1 -0
- 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/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
- package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
- package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
- package/.next/static/chunks/{6381-9303430933084b56.js → 6381-b7250e8ca7a44c6c.js} +1 -1
- package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
- package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
- package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
- package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
- package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e4f28966b4fc0ce1.js +1 -0
- package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
- package/.next/static/css/928e5a8830fbf997.css +1 -0
- package/.next/static/t0BoV4H46ZgKmTjSi7GIz/_buildManifest.js +1 -0
- package/.next/trace +13 -12
- package/.next/types/app/api/capabilities/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +40 -2
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +28 -13
- package/dist/cli/commands/instances.d.ts +30 -18
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +32 -36
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +73 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +18 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +21 -15
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +38 -0
- package/dist/cli/commands/wait.d.ts +26 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +390 -43
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +16 -0
- package/dist/cli/config/cli-tool-ids.d.ts +11 -0
- package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
- package/dist/cli/config/cli-tool-ids.js +12 -1
- package/dist/cli/types/api-responses.d.ts +443 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +18 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +22 -0
- package/dist/cli/utils/server-capabilities.d.ts +56 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
- package/dist/cli/utils/server-capabilities.js +166 -0
- package/dist/cli/utils/session-target.d.ts +70 -0
- package/dist/cli/utils/session-target.d.ts.map +1 -0
- package/dist/cli/utils/session-target.js +118 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/lib/cli-tools/types.d.ts +61 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +41 -0
- package/dist/lib/detection/ansi.d.ts +2 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +3 -2
- package/dist/lib/detection/tools/verified-against.d.ts +84 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
- package/dist/lib/detection/tools/verified-against.js +88 -0
- package/dist/lib/detection/version-probes.d.ts +207 -0
- package/dist/lib/detection/version-probes.d.ts.map +1 -0
- package/dist/lib/detection/version-probes.js +290 -0
- package/dist/lib/security/env-sanitizer.d.ts +198 -0
- package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
- package/dist/lib/security/env-sanitizer.js +232 -0
- package/dist/server/locales/en/notifications.json +17 -6
- package/dist/server/locales/ja/notifications.json +17 -6
- package/dist/server/src/config/activity-bar-config.js +4 -0
- package/dist/server/src/config/cli-tool-timing-config.js +59 -2
- package/dist/server/src/config/copilot-constants.js +11 -1
- package/dist/server/src/config/detection-evidence-config.js +129 -0
- package/dist/server/src/config/schedule-config.js +56 -7
- package/dist/server/src/config/tmux-pane-config.js +18 -1
- package/dist/server/src/lib/auto-yes-poller.js +36 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
- package/dist/server/src/lib/cli-tools/base.js +131 -10
- package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
- package/dist/server/src/lib/cli-tools/claude.js +1 -1
- package/dist/server/src/lib/cli-tools/codex.js +6 -2
- package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/server/src/lib/cli-tools/copilot.js +307 -81
- package/dist/server/src/lib/cli-tools/gemini.js +8 -6
- package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
- package/dist/server/src/lib/cli-tools/index.js +11 -1
- package/dist/server/src/lib/cli-tools/manager.js +56 -4
- package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
- package/dist/server/src/lib/cli-tools/opencode.js +233 -30
- package/dist/server/src/lib/cli-tools/session-name.js +57 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
- package/dist/server/src/lib/cli-tools/types.js +41 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
- package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
- package/dist/server/src/lib/cmate-parser.js +12 -4
- package/dist/server/src/lib/db/db.js +5 -1
- package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
- package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
- package/dist/server/src/lib/detection/ansi.js +3 -2
- package/dist/server/src/lib/detection/cli-patterns.js +901 -67
- package/dist/server/src/lib/detection/composer-text.js +455 -0
- package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
- package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
- package/dist/server/src/lib/detection/status-detector.js +76 -675
- package/dist/server/src/lib/detection/status-reason.js +57 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
- package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
- package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
- package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
- package/dist/server/src/lib/detection/tools/frame.js +47 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
- package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
- package/dist/server/src/lib/detection/tools/registry.js +58 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
- package/dist/server/src/lib/detection/tools/types.js +34 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
- package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
- package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
- package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
- package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
- package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
- package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
- package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
- package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
- package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
- package/dist/server/src/lib/job-executor.js +16 -4
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
- package/dist/server/src/lib/polling/response-checker.js +243 -26
- package/dist/server/src/lib/push/failure-episode-state.js +127 -0
- package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
- package/dist/server/src/lib/push/index.js +35 -1
- package/dist/server/src/lib/push/prompt-card-state.js +93 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
- package/dist/server/src/lib/push/push-sender.js +82 -7
- package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
- package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
- package/dist/server/src/lib/response-cleaner.js +93 -20
- package/dist/server/src/lib/response-extractor.js +98 -5
- package/dist/server/src/lib/security/env-sanitizer.js +179 -5
- package/dist/server/src/lib/session/agent-event-state.js +1038 -189
- package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
- package/dist/server/src/lib/session/claude-executor.js +23 -3
- package/dist/server/src/lib/session/claude-session.js +11 -1
- package/dist/server/src/lib/session/composer-clear.js +95 -0
- package/dist/server/src/lib/session/current-output-builder.js +267 -25
- package/dist/server/src/lib/session/provisional-turn.js +310 -0
- package/dist/server/src/lib/session/resolve-session-target.js +156 -0
- package/dist/server/src/lib/session/send-user-message.js +14 -18
- package/dist/server/src/lib/session/session-start-error.js +53 -1
- package/dist/server/src/lib/session/status-evidence.js +217 -0
- package/dist/server/src/lib/session/structured-prompt.js +46 -4
- package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
- package/dist/server/src/lib/tmux/key-sequence.js +120 -0
- package/dist/server/src/lib/tmux/tmux.js +91 -19
- package/dist/server/src/lib/tui-accumulator.js +68 -1
- package/dist/server/src/lib/verification/gate-runner.js +84 -1
- package/dist/server/src/lib/ws-server.js +8 -5
- package/dist/server/src/types/cli-tool-contracts.js +75 -0
- package/dist/server/src/types/terminal-keys.js +37 -0
- package/dist/types/cli-tool-contracts.d.ts +235 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -0
- package/dist/types/cli-tool-contracts.js +75 -0
- package/package.json +3 -2
- package/public/sw.js +65 -2
- package/.next/server/chunks/1841.js +0 -1
- package/.next/server/chunks/233.js +0 -1
- package/.next/server/chunks/3022.js +0 -1
- package/.next/server/chunks/3270.js +0 -1
- package/.next/server/chunks/4455.js +0 -1
- package/.next/server/chunks/5959.js +0 -27
- package/.next/server/chunks/7458.js +0 -6
- package/.next/server/chunks/8730.js +0 -1
- package/.next/server/chunks/9058.js +0 -1
- package/.next/server/chunks/9687.js +0 -3
- package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
- package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-fbdf4621a2911ac1.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/hNdNiFes2xLls68SWhAU9/_buildManifest.js +0 -1
- /package/.next/static/{hNdNiFes2xLls68SWhAU9 → t0BoV4H46ZgKmTjSi7GIz}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Variable Sanitizer
|
|
3
|
+
* Issue #294: Sanitizes environment variables for child processes
|
|
4
|
+
*
|
|
5
|
+
* Removes sensitive environment variables (auth tokens, certificates, database paths)
|
|
6
|
+
* before spawning child processes like `claude -p`.
|
|
7
|
+
*
|
|
8
|
+
* [S1-001/S4-001] Centralized sensitive key management
|
|
9
|
+
*
|
|
10
|
+
* ## What this file defends — the one sentence (Issue #1996)
|
|
11
|
+
*
|
|
12
|
+
* **A CommandMate process must hand its children neither a credential nor the
|
|
13
|
+
* identity of the agent that started it.**
|
|
14
|
+
*
|
|
15
|
+
* Two halves, and they fail differently:
|
|
16
|
+
*
|
|
17
|
+
* - **Credentials** — {@link SENSITIVE_ENV_KEYS}. A child that can read them
|
|
18
|
+
* can act as this server, or read its database.
|
|
19
|
+
* - **The launching agent's identity** — {@link AGENT_CORRELATION_ENV_KEYS}:
|
|
20
|
+
* every variable `AgentLaunchPlan.env` writes onto an agent's launch line
|
|
21
|
+
* that says *which server to report to* and *as which instance*. A child
|
|
22
|
+
* that inherits them reports somebody else's work as that instance's.
|
|
23
|
+
*
|
|
24
|
+
* A per-tool config redirect (`CODEX_HOME`) is on the launch line too and is
|
|
25
|
+
* deliberately **not** stripped: it says where a tool reads its own settings,
|
|
26
|
+
* which is neither a credential nor an identity, and a child that inherits one
|
|
27
|
+
* is unaffected.
|
|
28
|
+
*
|
|
29
|
+
* ## Issue #1942 — why a *prefix* joined the list
|
|
30
|
+
*
|
|
31
|
+
* 設計方針書 §13.2 S8 asks for two halves. #1904 landed the first: the values a
|
|
32
|
+
* hook needs are handed to the agent on its launch line (`CM_HOOK_PORT=3011
|
|
33
|
+
* copilot`) instead of being baked into a machine-global settings file. This is
|
|
34
|
+
* the second: those variables must not travel any further than the agent.
|
|
35
|
+
*
|
|
36
|
+
* The leak this closes is not the agent's own children — CommandMate does not
|
|
37
|
+
* own that environment — it is **CommandMate's**. A server started from inside
|
|
38
|
+
* a pane CommandMate itself launched inherits that pane's launch line, and
|
|
39
|
+
* every child *this* process then spawns (`claude -p` for Assistant Chat, the
|
|
40
|
+
* slash-command probes, `copilot --version`) inherits it in turn. The values
|
|
41
|
+
* are a correlation key and a port: a relay firing from one of those children
|
|
42
|
+
* posts its events to another server, attributed to an instance that is not the
|
|
43
|
+
* one running. Nothing errors; the events simply land on the wrong session.
|
|
44
|
+
*
|
|
45
|
+
* ## Issue #1996 — why the prefix could not be the whole rule
|
|
46
|
+
*
|
|
47
|
+
* #1942 chose `CM_HOOK_*` because a namespace is stronger than a list: the next
|
|
48
|
+
* variable in it is stripped whether or not its author reads this file. That
|
|
49
|
+
* reasoning is still right, and the prefix stays. What was wrong was the
|
|
50
|
+
* premise that the namespace *covers the launch line*. Building all seven
|
|
51
|
+
* sources' `prepareLaunch` and reading `env` back — the measurement is pinned in
|
|
52
|
+
* `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` — finds six identity
|
|
53
|
+
* variables, and two of them start with `CM_HOOK_`.
|
|
54
|
+
*
|
|
55
|
+
* The other four produce the same failure #1942 named, by two measured routes:
|
|
56
|
+
*
|
|
57
|
+
* - `scripts/hooks/cmate-agent-event.sh` reads `CM_AGENT_TOOL` from the
|
|
58
|
+
* environment (`TOOL="${CM_AGENT_TOOL:-claude}"`) and, with no `CM_HOOK_URL`,
|
|
59
|
+
* falls back to `http://127.0.0.1:${CM_PORT:-3000}/api/hooks/agent-event`.
|
|
60
|
+
* Stripping only the `CM_HOOK_` half therefore makes the destination *valid
|
|
61
|
+
* again* — usually the live server — while the attribution stays wrong. The
|
|
62
|
+
* event lands, on the wrong tool.
|
|
63
|
+
* - The generated antigravity `PreToolUse` command gates on
|
|
64
|
+
* `[ -z "${CM_PERMISSION_HOOK_URL:-}" ]`, which is its whole test for "am I a
|
|
65
|
+
* CommandMate-launched session". `~/.gemini/config/hooks.json` is a
|
|
66
|
+
* machine-global singleton, so an inherited `CM_PERMISSION_HOOK_URL` makes
|
|
67
|
+
* any agy started under one of CommandMate's children ask *another
|
|
68
|
+
* instance's* server for permission, and obey the answer.
|
|
69
|
+
*
|
|
70
|
+
* ### Why the prefix was not simply widened to `CM_AGENT_`
|
|
71
|
+
*
|
|
72
|
+
* Because `CM_AGENT_` is not CommandMate's own namespace, and the sentence that
|
|
73
|
+
* justifies the `CM_HOOK_` prefix — "there is no operator value here to
|
|
74
|
+
* preserve" — is false for it. `CM_AGENT_HOOKS_INJECT` and `CM_AGENT_HOOKS_DIR`
|
|
75
|
+
* are **operator switches read from the ambient environment**
|
|
76
|
+
* (`hooks/sources/copilot/hook-settings.ts`, `hooks/hook-settings-generator.ts`);
|
|
77
|
+
* stripping them would silently change a child's configuration. #1942's own test
|
|
78
|
+
* already pinned that shape. And `CM_PERMISSION_HOOK_URL` shares no prefix with
|
|
79
|
+
* anything, so no namespace rule could have covered the set in any case.
|
|
80
|
+
*
|
|
81
|
+
* Renaming the four into `CM_HOOK_*` so the prefix *would* suffice was
|
|
82
|
+
* considered and rejected: `CM_AGENT_TOOL` is documented in the shipped relay's
|
|
83
|
+
* own `--help` and depended on by the hand-configured hooks of #1549, and
|
|
84
|
+
* `~/.copilot/settings.json` / `~/.gemini/config/hooks.json` are machine-global
|
|
85
|
+
* files already on disk carrying the old names — every already-configured
|
|
86
|
+
* session would stop correlating until rewritten.
|
|
87
|
+
*
|
|
88
|
+
* So the rule is a **union**: the credential list, the enumerated identity set,
|
|
89
|
+
* and the `CM_HOOK_` prefix that still covers whatever is invented inside it.
|
|
90
|
+
*
|
|
91
|
+
* ## The join with `lib/hooks`, and what replaces the prefix as a drift guard
|
|
92
|
+
*
|
|
93
|
+
* `lib/security` does not import `lib/hooks` — the dependency already runs the
|
|
94
|
+
* other way (`hooks/agent-event-service`, `hooks/sources/copilot/hook-settings`
|
|
95
|
+
* and `hooks/sources/codex/hooks-config` all import
|
|
96
|
+
* `lib/security/path-validator`), and inverting it would put a package cycle
|
|
97
|
+
* underneath four child-process spawners. `tests/unit/guards/security-no-hooks-import.test.ts`
|
|
98
|
+
* holds that.
|
|
99
|
+
*
|
|
100
|
+
* The enumeration below is therefore a second copy of a list `lib/hooks` also
|
|
101
|
+
* declares, and two tests are the join:
|
|
102
|
+
*
|
|
103
|
+
* 1. `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` builds all seven
|
|
104
|
+
* `prepareLaunch` plans and asserts their env keys are **exactly**
|
|
105
|
+
* `AGENT_CORRELATION_ENV_VARS` plus `AGENT_LAUNCH_CONFIG_ENV_VARS`. A source
|
|
106
|
+
* that starts writing a new variable — in any namespace — goes red there, by
|
|
107
|
+
* name.
|
|
108
|
+
* 2. `tests/unit/security/child-process-agent-env-1996.test.ts` takes that
|
|
109
|
+
* declared list and proves, with a real child process, that none of it is
|
|
110
|
+
* readable. Deleting a name from {@link AGENT_CORRELATION_ENV_KEYS} does not
|
|
111
|
+
* shrink what that test iterates, so the deletion is what goes red.
|
|
112
|
+
*
|
|
113
|
+
* Together those two are stronger than the prefix was, because the prefix never
|
|
114
|
+
* covered a name outside its own namespace at all.
|
|
115
|
+
*/
|
|
116
|
+
/**
|
|
117
|
+
* List of environment variable keys that must be removed before
|
|
118
|
+
* passing environment to child processes.
|
|
119
|
+
*
|
|
120
|
+
* These include authentication tokens, TLS certificates, IP restriction
|
|
121
|
+
* settings, and database paths that should not be inherited by spawned
|
|
122
|
+
* CLI tool processes.
|
|
123
|
+
*
|
|
124
|
+
* `CM_AUTH_TOKEN` — the **plaintext** bearer token — joined in Issue #1996. Only
|
|
125
|
+
* the `_HASH` form was listed, and the plaintext one is what a request is
|
|
126
|
+
* actually authenticated with: measured with a real child, `claude -p` and the
|
|
127
|
+
* version probes could read it back. It is expected in a server's environment
|
|
128
|
+
* (the CLI's own `--token` warning tells operators to prefer the variable, and
|
|
129
|
+
* §10.7 of the 設計方針書 has the agent's hooks read it "from process
|
|
130
|
+
* inheritance"), and `lib/slash-command-catalog`'s docblock already claimed a
|
|
131
|
+
* probe "never hands CommandMate's auth token … to a third-party CLI".
|
|
132
|
+
*
|
|
133
|
+
* Nothing that spawns with {@link sanitizeEnvForChildProcess} needs it: none of
|
|
134
|
+
* the five call sites configures hooks for its child. The **agent's** pane is
|
|
135
|
+
* unaffected — tmux inherits the server's environment directly and never goes
|
|
136
|
+
* through this function — so `$CM_AUTH_TOKEN` still expands in a hook.
|
|
137
|
+
*/
|
|
138
|
+
export declare const SENSITIVE_ENV_KEYS: readonly ["CLAUDECODE", "CM_AUTH_TOKEN", "CM_AUTH_TOKEN_HASH", "CM_AUTH_EXPIRE", "CM_HTTPS_KEY", "CM_HTTPS_CERT", "CM_ALLOWED_IPS", "CM_TRUST_PROXY", "CM_DB_PATH", "GH_DEBUG"];
|
|
139
|
+
/**
|
|
140
|
+
* The namespace CommandMate writes onto an agent's launch line (Issue #1942).
|
|
141
|
+
*
|
|
142
|
+
* Kept alongside {@link AGENT_CORRELATION_ENV_KEYS} rather than replaced by it.
|
|
143
|
+
* Inside this namespace the prefix is still the stronger rule — a `CM_HOOK_*`
|
|
144
|
+
* variable invented next year is stripped whether or not anyone remembers this
|
|
145
|
+
* file exists, and `CM_HOOK_` is CommandMate's own namespace, so there is no
|
|
146
|
+
* operator value here to preserve. What #1996 measured is that the namespace is
|
|
147
|
+
* two of the launch line's six identity variables, not all of them; see the
|
|
148
|
+
* module comment.
|
|
149
|
+
*/
|
|
150
|
+
export declare const COMMANDMATE_HOOK_ENV_PREFIX = "CM_HOOK_";
|
|
151
|
+
/**
|
|
152
|
+
* Every variable an agent's launch line uses to say **which server to report to
|
|
153
|
+
* and as which instance** (Issue #1996).
|
|
154
|
+
*
|
|
155
|
+
* The measured contents of `AgentLaunchPlan.env` across all seven sources, minus
|
|
156
|
+
* the per-tool config redirects. `lib/hooks/sources/launch-command` declares the
|
|
157
|
+
* same set as `AGENT_CORRELATION_ENV_VARS`; this is the second copy, and the two
|
|
158
|
+
* tests named in the module comment are the join. Sorted, so a diff against the
|
|
159
|
+
* measured set reads cleanly.
|
|
160
|
+
*
|
|
161
|
+
* Two of them are inside {@link COMMANDMATE_HOOK_ENV_PREFIX} and would be
|
|
162
|
+
* stripped anyway. They are listed regardless: this array is the statement of
|
|
163
|
+
* *what the rule is about*, and a reader who has to subtract a prefix to see the
|
|
164
|
+
* set is a reader who will get it wrong again.
|
|
165
|
+
*/
|
|
166
|
+
export declare const AGENT_CORRELATION_ENV_KEYS: readonly ["CM_AGENT_INSTANCE_ID", "CM_AGENT_TOOL", "CM_AGENT_WORKTREE_ID", "CM_HOOK_PORT", "CM_HOOK_URL", "CM_PERMISSION_HOOK_URL"];
|
|
167
|
+
/**
|
|
168
|
+
* Whether `key` is removed from a child process's environment.
|
|
169
|
+
*
|
|
170
|
+
* @param key - An environment variable name
|
|
171
|
+
* @returns `true` for a listed secret, a launch-line identity variable, or
|
|
172
|
+
* anything in CommandMate's hook namespace
|
|
173
|
+
*/
|
|
174
|
+
export declare function isStrippedChildProcessEnvKey(key: string): boolean;
|
|
175
|
+
/**
|
|
176
|
+
* Create a sanitized copy of process.env suitable for child processes.
|
|
177
|
+
*
|
|
178
|
+
* Removes every key {@link isStrippedChildProcessEnvKey} claims: the listed
|
|
179
|
+
* secrets (Issue #294/#545/#1996), the launch-line identity of the agent this
|
|
180
|
+
* process was started under (Issue #1996), and CommandMate's own `CM_HOOK_*`
|
|
181
|
+
* namespace (Issue #1942). Non-sensitive variables (PATH, HOME, NODE_ENV, etc.)
|
|
182
|
+
* are preserved, including the operator's own `CM_AGENT_HOOKS_*` switches.
|
|
183
|
+
*
|
|
184
|
+
* @returns A shallow copy of process.env with sensitive keys removed
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* import { execFile } from 'child_process';
|
|
189
|
+
* import { sanitizeEnvForChildProcess } from './env-sanitizer';
|
|
190
|
+
*
|
|
191
|
+
* execFile('claude', ['-p', message], {
|
|
192
|
+
* env: sanitizeEnvForChildProcess(),
|
|
193
|
+
* cwd: worktreePath,
|
|
194
|
+
* });
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
export declare function sanitizeEnvForChildProcess(): NodeJS.ProcessEnv;
|
|
198
|
+
//# sourceMappingURL=env-sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-sanitizer.d.ts","sourceRoot":"","sources":["../../../src/lib/security/env-sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkHG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,kBAAkB,iLAWrB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,aAAa,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,0BAA0B,qIAO7B,CAAC;AAEX;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMjE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,UAAU,CAQ9D"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Environment Variable Sanitizer
|
|
4
|
+
* Issue #294: Sanitizes environment variables for child processes
|
|
5
|
+
*
|
|
6
|
+
* Removes sensitive environment variables (auth tokens, certificates, database paths)
|
|
7
|
+
* before spawning child processes like `claude -p`.
|
|
8
|
+
*
|
|
9
|
+
* [S1-001/S4-001] Centralized sensitive key management
|
|
10
|
+
*
|
|
11
|
+
* ## What this file defends — the one sentence (Issue #1996)
|
|
12
|
+
*
|
|
13
|
+
* **A CommandMate process must hand its children neither a credential nor the
|
|
14
|
+
* identity of the agent that started it.**
|
|
15
|
+
*
|
|
16
|
+
* Two halves, and they fail differently:
|
|
17
|
+
*
|
|
18
|
+
* - **Credentials** — {@link SENSITIVE_ENV_KEYS}. A child that can read them
|
|
19
|
+
* can act as this server, or read its database.
|
|
20
|
+
* - **The launching agent's identity** — {@link AGENT_CORRELATION_ENV_KEYS}:
|
|
21
|
+
* every variable `AgentLaunchPlan.env` writes onto an agent's launch line
|
|
22
|
+
* that says *which server to report to* and *as which instance*. A child
|
|
23
|
+
* that inherits them reports somebody else's work as that instance's.
|
|
24
|
+
*
|
|
25
|
+
* A per-tool config redirect (`CODEX_HOME`) is on the launch line too and is
|
|
26
|
+
* deliberately **not** stripped: it says where a tool reads its own settings,
|
|
27
|
+
* which is neither a credential nor an identity, and a child that inherits one
|
|
28
|
+
* is unaffected.
|
|
29
|
+
*
|
|
30
|
+
* ## Issue #1942 — why a *prefix* joined the list
|
|
31
|
+
*
|
|
32
|
+
* 設計方針書 §13.2 S8 asks for two halves. #1904 landed the first: the values a
|
|
33
|
+
* hook needs are handed to the agent on its launch line (`CM_HOOK_PORT=3011
|
|
34
|
+
* copilot`) instead of being baked into a machine-global settings file. This is
|
|
35
|
+
* the second: those variables must not travel any further than the agent.
|
|
36
|
+
*
|
|
37
|
+
* The leak this closes is not the agent's own children — CommandMate does not
|
|
38
|
+
* own that environment — it is **CommandMate's**. A server started from inside
|
|
39
|
+
* a pane CommandMate itself launched inherits that pane's launch line, and
|
|
40
|
+
* every child *this* process then spawns (`claude -p` for Assistant Chat, the
|
|
41
|
+
* slash-command probes, `copilot --version`) inherits it in turn. The values
|
|
42
|
+
* are a correlation key and a port: a relay firing from one of those children
|
|
43
|
+
* posts its events to another server, attributed to an instance that is not the
|
|
44
|
+
* one running. Nothing errors; the events simply land on the wrong session.
|
|
45
|
+
*
|
|
46
|
+
* ## Issue #1996 — why the prefix could not be the whole rule
|
|
47
|
+
*
|
|
48
|
+
* #1942 chose `CM_HOOK_*` because a namespace is stronger than a list: the next
|
|
49
|
+
* variable in it is stripped whether or not its author reads this file. That
|
|
50
|
+
* reasoning is still right, and the prefix stays. What was wrong was the
|
|
51
|
+
* premise that the namespace *covers the launch line*. Building all seven
|
|
52
|
+
* sources' `prepareLaunch` and reading `env` back — the measurement is pinned in
|
|
53
|
+
* `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` — finds six identity
|
|
54
|
+
* variables, and two of them start with `CM_HOOK_`.
|
|
55
|
+
*
|
|
56
|
+
* The other four produce the same failure #1942 named, by two measured routes:
|
|
57
|
+
*
|
|
58
|
+
* - `scripts/hooks/cmate-agent-event.sh` reads `CM_AGENT_TOOL` from the
|
|
59
|
+
* environment (`TOOL="${CM_AGENT_TOOL:-claude}"`) and, with no `CM_HOOK_URL`,
|
|
60
|
+
* falls back to `http://127.0.0.1:${CM_PORT:-3000}/api/hooks/agent-event`.
|
|
61
|
+
* Stripping only the `CM_HOOK_` half therefore makes the destination *valid
|
|
62
|
+
* again* — usually the live server — while the attribution stays wrong. The
|
|
63
|
+
* event lands, on the wrong tool.
|
|
64
|
+
* - The generated antigravity `PreToolUse` command gates on
|
|
65
|
+
* `[ -z "${CM_PERMISSION_HOOK_URL:-}" ]`, which is its whole test for "am I a
|
|
66
|
+
* CommandMate-launched session". `~/.gemini/config/hooks.json` is a
|
|
67
|
+
* machine-global singleton, so an inherited `CM_PERMISSION_HOOK_URL` makes
|
|
68
|
+
* any agy started under one of CommandMate's children ask *another
|
|
69
|
+
* instance's* server for permission, and obey the answer.
|
|
70
|
+
*
|
|
71
|
+
* ### Why the prefix was not simply widened to `CM_AGENT_`
|
|
72
|
+
*
|
|
73
|
+
* Because `CM_AGENT_` is not CommandMate's own namespace, and the sentence that
|
|
74
|
+
* justifies the `CM_HOOK_` prefix — "there is no operator value here to
|
|
75
|
+
* preserve" — is false for it. `CM_AGENT_HOOKS_INJECT` and `CM_AGENT_HOOKS_DIR`
|
|
76
|
+
* are **operator switches read from the ambient environment**
|
|
77
|
+
* (`hooks/sources/copilot/hook-settings.ts`, `hooks/hook-settings-generator.ts`);
|
|
78
|
+
* stripping them would silently change a child's configuration. #1942's own test
|
|
79
|
+
* already pinned that shape. And `CM_PERMISSION_HOOK_URL` shares no prefix with
|
|
80
|
+
* anything, so no namespace rule could have covered the set in any case.
|
|
81
|
+
*
|
|
82
|
+
* Renaming the four into `CM_HOOK_*` so the prefix *would* suffice was
|
|
83
|
+
* considered and rejected: `CM_AGENT_TOOL` is documented in the shipped relay's
|
|
84
|
+
* own `--help` and depended on by the hand-configured hooks of #1549, and
|
|
85
|
+
* `~/.copilot/settings.json` / `~/.gemini/config/hooks.json` are machine-global
|
|
86
|
+
* files already on disk carrying the old names — every already-configured
|
|
87
|
+
* session would stop correlating until rewritten.
|
|
88
|
+
*
|
|
89
|
+
* So the rule is a **union**: the credential list, the enumerated identity set,
|
|
90
|
+
* and the `CM_HOOK_` prefix that still covers whatever is invented inside it.
|
|
91
|
+
*
|
|
92
|
+
* ## The join with `lib/hooks`, and what replaces the prefix as a drift guard
|
|
93
|
+
*
|
|
94
|
+
* `lib/security` does not import `lib/hooks` — the dependency already runs the
|
|
95
|
+
* other way (`hooks/agent-event-service`, `hooks/sources/copilot/hook-settings`
|
|
96
|
+
* and `hooks/sources/codex/hooks-config` all import
|
|
97
|
+
* `lib/security/path-validator`), and inverting it would put a package cycle
|
|
98
|
+
* underneath four child-process spawners. `tests/unit/guards/security-no-hooks-import.test.ts`
|
|
99
|
+
* holds that.
|
|
100
|
+
*
|
|
101
|
+
* The enumeration below is therefore a second copy of a list `lib/hooks` also
|
|
102
|
+
* declares, and two tests are the join:
|
|
103
|
+
*
|
|
104
|
+
* 1. `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` builds all seven
|
|
105
|
+
* `prepareLaunch` plans and asserts their env keys are **exactly**
|
|
106
|
+
* `AGENT_CORRELATION_ENV_VARS` plus `AGENT_LAUNCH_CONFIG_ENV_VARS`. A source
|
|
107
|
+
* that starts writing a new variable — in any namespace — goes red there, by
|
|
108
|
+
* name.
|
|
109
|
+
* 2. `tests/unit/security/child-process-agent-env-1996.test.ts` takes that
|
|
110
|
+
* declared list and proves, with a real child process, that none of it is
|
|
111
|
+
* readable. Deleting a name from {@link AGENT_CORRELATION_ENV_KEYS} does not
|
|
112
|
+
* shrink what that test iterates, so the deletion is what goes red.
|
|
113
|
+
*
|
|
114
|
+
* Together those two are stronger than the prefix was, because the prefix never
|
|
115
|
+
* covered a name outside its own namespace at all.
|
|
116
|
+
*/
|
|
117
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
118
|
+
exports.AGENT_CORRELATION_ENV_KEYS = exports.COMMANDMATE_HOOK_ENV_PREFIX = exports.SENSITIVE_ENV_KEYS = void 0;
|
|
119
|
+
exports.isStrippedChildProcessEnvKey = isStrippedChildProcessEnvKey;
|
|
120
|
+
exports.sanitizeEnvForChildProcess = sanitizeEnvForChildProcess;
|
|
121
|
+
/**
|
|
122
|
+
* List of environment variable keys that must be removed before
|
|
123
|
+
* passing environment to child processes.
|
|
124
|
+
*
|
|
125
|
+
* These include authentication tokens, TLS certificates, IP restriction
|
|
126
|
+
* settings, and database paths that should not be inherited by spawned
|
|
127
|
+
* CLI tool processes.
|
|
128
|
+
*
|
|
129
|
+
* `CM_AUTH_TOKEN` — the **plaintext** bearer token — joined in Issue #1996. Only
|
|
130
|
+
* the `_HASH` form was listed, and the plaintext one is what a request is
|
|
131
|
+
* actually authenticated with: measured with a real child, `claude -p` and the
|
|
132
|
+
* version probes could read it back. It is expected in a server's environment
|
|
133
|
+
* (the CLI's own `--token` warning tells operators to prefer the variable, and
|
|
134
|
+
* §10.7 of the 設計方針書 has the agent's hooks read it "from process
|
|
135
|
+
* inheritance"), and `lib/slash-command-catalog`'s docblock already claimed a
|
|
136
|
+
* probe "never hands CommandMate's auth token … to a third-party CLI".
|
|
137
|
+
*
|
|
138
|
+
* Nothing that spawns with {@link sanitizeEnvForChildProcess} needs it: none of
|
|
139
|
+
* the five call sites configures hooks for its child. The **agent's** pane is
|
|
140
|
+
* unaffected — tmux inherits the server's environment directly and never goes
|
|
141
|
+
* through this function — so `$CM_AUTH_TOKEN` still expands in a hook.
|
|
142
|
+
*/
|
|
143
|
+
exports.SENSITIVE_ENV_KEYS = [
|
|
144
|
+
'CLAUDECODE',
|
|
145
|
+
'CM_AUTH_TOKEN', // Issue #1996: plaintext bearer token, not just its hash
|
|
146
|
+
'CM_AUTH_TOKEN_HASH',
|
|
147
|
+
'CM_AUTH_EXPIRE',
|
|
148
|
+
'CM_HTTPS_KEY',
|
|
149
|
+
'CM_HTTPS_CERT',
|
|
150
|
+
'CM_ALLOWED_IPS',
|
|
151
|
+
'CM_TRUST_PROXY',
|
|
152
|
+
'CM_DB_PATH',
|
|
153
|
+
'GH_DEBUG', // Issue #545: Prevent gh debug output in child processes [SEC4-003]
|
|
154
|
+
];
|
|
155
|
+
/**
|
|
156
|
+
* The namespace CommandMate writes onto an agent's launch line (Issue #1942).
|
|
157
|
+
*
|
|
158
|
+
* Kept alongside {@link AGENT_CORRELATION_ENV_KEYS} rather than replaced by it.
|
|
159
|
+
* Inside this namespace the prefix is still the stronger rule — a `CM_HOOK_*`
|
|
160
|
+
* variable invented next year is stripped whether or not anyone remembers this
|
|
161
|
+
* file exists, and `CM_HOOK_` is CommandMate's own namespace, so there is no
|
|
162
|
+
* operator value here to preserve. What #1996 measured is that the namespace is
|
|
163
|
+
* two of the launch line's six identity variables, not all of them; see the
|
|
164
|
+
* module comment.
|
|
165
|
+
*/
|
|
166
|
+
exports.COMMANDMATE_HOOK_ENV_PREFIX = 'CM_HOOK_';
|
|
167
|
+
/**
|
|
168
|
+
* Every variable an agent's launch line uses to say **which server to report to
|
|
169
|
+
* and as which instance** (Issue #1996).
|
|
170
|
+
*
|
|
171
|
+
* The measured contents of `AgentLaunchPlan.env` across all seven sources, minus
|
|
172
|
+
* the per-tool config redirects. `lib/hooks/sources/launch-command` declares the
|
|
173
|
+
* same set as `AGENT_CORRELATION_ENV_VARS`; this is the second copy, and the two
|
|
174
|
+
* tests named in the module comment are the join. Sorted, so a diff against the
|
|
175
|
+
* measured set reads cleanly.
|
|
176
|
+
*
|
|
177
|
+
* Two of them are inside {@link COMMANDMATE_HOOK_ENV_PREFIX} and would be
|
|
178
|
+
* stripped anyway. They are listed regardless: this array is the statement of
|
|
179
|
+
* *what the rule is about*, and a reader who has to subtract a prefix to see the
|
|
180
|
+
* set is a reader who will get it wrong again.
|
|
181
|
+
*/
|
|
182
|
+
exports.AGENT_CORRELATION_ENV_KEYS = [
|
|
183
|
+
'CM_AGENT_INSTANCE_ID',
|
|
184
|
+
'CM_AGENT_TOOL',
|
|
185
|
+
'CM_AGENT_WORKTREE_ID',
|
|
186
|
+
'CM_HOOK_PORT',
|
|
187
|
+
'CM_HOOK_URL',
|
|
188
|
+
'CM_PERMISSION_HOOK_URL',
|
|
189
|
+
];
|
|
190
|
+
/**
|
|
191
|
+
* Whether `key` is removed from a child process's environment.
|
|
192
|
+
*
|
|
193
|
+
* @param key - An environment variable name
|
|
194
|
+
* @returns `true` for a listed secret, a launch-line identity variable, or
|
|
195
|
+
* anything in CommandMate's hook namespace
|
|
196
|
+
*/
|
|
197
|
+
function isStrippedChildProcessEnvKey(key) {
|
|
198
|
+
return (exports.SENSITIVE_ENV_KEYS.includes(key) ||
|
|
199
|
+
exports.AGENT_CORRELATION_ENV_KEYS.includes(key) ||
|
|
200
|
+
key.startsWith(exports.COMMANDMATE_HOOK_ENV_PREFIX));
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Create a sanitized copy of process.env suitable for child processes.
|
|
204
|
+
*
|
|
205
|
+
* Removes every key {@link isStrippedChildProcessEnvKey} claims: the listed
|
|
206
|
+
* secrets (Issue #294/#545/#1996), the launch-line identity of the agent this
|
|
207
|
+
* process was started under (Issue #1996), and CommandMate's own `CM_HOOK_*`
|
|
208
|
+
* namespace (Issue #1942). Non-sensitive variables (PATH, HOME, NODE_ENV, etc.)
|
|
209
|
+
* are preserved, including the operator's own `CM_AGENT_HOOKS_*` switches.
|
|
210
|
+
*
|
|
211
|
+
* @returns A shallow copy of process.env with sensitive keys removed
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* ```typescript
|
|
215
|
+
* import { execFile } from 'child_process';
|
|
216
|
+
* import { sanitizeEnvForChildProcess } from './env-sanitizer';
|
|
217
|
+
*
|
|
218
|
+
* execFile('claude', ['-p', message], {
|
|
219
|
+
* env: sanitizeEnvForChildProcess(),
|
|
220
|
+
* cwd: worktreePath,
|
|
221
|
+
* });
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
function sanitizeEnvForChildProcess() {
|
|
225
|
+
const env = { ...process.env };
|
|
226
|
+
for (const key of Object.keys(env)) {
|
|
227
|
+
if (isStrippedChildProcessEnvKey(key)) {
|
|
228
|
+
delete env[key];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return env;
|
|
232
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "Notifications",
|
|
3
|
-
"description": "Get a push notification when
|
|
3
|
+
"description": "Get a push notification when something needs you — a prompt, a failed verification, an upstream API fault, or a session that could not start — even when the app is closed. Completions are optional.",
|
|
4
4
|
"enable": "Enable notifications",
|
|
5
5
|
"enabling": "Enabling…",
|
|
6
6
|
"enabledOnThisDevice": "Notifications are enabled on this device.",
|
|
7
7
|
"unsubscribe": "Unsubscribe this device",
|
|
8
8
|
"types": {
|
|
9
9
|
"heading": "Notify me about",
|
|
10
|
-
"promptWaiting": "
|
|
11
|
-
"promptWaitingDesc": "
|
|
12
|
-
"completion": "
|
|
13
|
-
"completionDesc": "
|
|
10
|
+
"promptWaiting": "When you need to act",
|
|
11
|
+
"promptWaitingDesc": "A prompt waiting for you, a failed verification gate, an upstream API fault, or a session that could not start. Nothing moves until you do",
|
|
12
|
+
"completion": "Also tell me about completions (optional)",
|
|
13
|
+
"completionDesc": "Ordinary completions that need nothing from you. Off by default on newly registered devices (change it for this device here)"
|
|
14
14
|
},
|
|
15
15
|
"permission": {
|
|
16
16
|
"denied": "Notifications are blocked in your browser settings. Allow them for this site to receive push notifications."
|
|
@@ -34,7 +34,18 @@
|
|
|
34
34
|
"terminalAttentionWithExcerpt": "Needs attention in the terminal: {excerpt}",
|
|
35
35
|
"terminalAttention": "Needs attention in the terminal",
|
|
36
36
|
"stillWaitingPrompt": "Still waiting for your reply ({minutes} min)",
|
|
37
|
-
"stillWaitingTerminal": "Still needs attention in the terminal ({minutes} min)"
|
|
37
|
+
"stillWaitingTerminal": "Still needs attention in the terminal ({minutes} min)",
|
|
38
|
+
"failureVerificationWithExcerpt": "Verification failed: {excerpt}",
|
|
39
|
+
"failureVerification": "Verification failed",
|
|
40
|
+
"failureUpstreamWithExcerpt": "Stalled by an upstream API fault: {excerpt}",
|
|
41
|
+
"failureUpstream": "Stalled by an upstream API fault",
|
|
42
|
+
"failureSessionStartWithExcerpt": "Could not start the session: {excerpt}",
|
|
43
|
+
"failureSessionStart": "Could not start the session",
|
|
44
|
+
"failureSessionUnavailableWithExcerpt": "Could not start the session: {excerpt} is not installed",
|
|
45
|
+
"failureSessionUnavailable": "Could not start the session: the CLI tool is not installed",
|
|
46
|
+
"failureWithExcerpt": "Failed: {excerpt}",
|
|
47
|
+
"failure": "Failed",
|
|
48
|
+
"promptResolved": "Handled — answered on another device"
|
|
38
49
|
},
|
|
39
50
|
"escalation": {
|
|
40
51
|
"heading": "Reminder",
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "通知",
|
|
3
|
-
"description": "
|
|
3
|
+
"description": "対応が必要になったとき(応答待ち・検証の不合格・上流APIの障害・セッションの起動失敗)に、アプリを開いていなくてもプッシュ通知を受け取れます。対応の要らない完了通知は任意です。",
|
|
4
4
|
"enable": "通知を有効にする",
|
|
5
5
|
"enabling": "有効化中…",
|
|
6
6
|
"enabledOnThisDevice": "この端末で通知が有効です。",
|
|
7
7
|
"unsubscribe": "この端末の通知を解除",
|
|
8
8
|
"types": {
|
|
9
9
|
"heading": "通知する種別",
|
|
10
|
-
"promptWaiting": "
|
|
11
|
-
"promptWaitingDesc": "
|
|
12
|
-
"completion": "
|
|
13
|
-
"completionDesc": "
|
|
10
|
+
"promptWaiting": "対応が必要なとき",
|
|
11
|
+
"promptWaitingDesc": "応答待ち・検証ゲートの不合格・上流APIの障害・セッションの起動失敗。あなたが動かないと進みません",
|
|
12
|
+
"completion": "完了も知らせる(任意)",
|
|
13
|
+
"completionDesc": "対応の要らない正常完了。新しく登録した端末では既定でオフです(この端末の設定はここで変えられます)"
|
|
14
14
|
},
|
|
15
15
|
"permission": {
|
|
16
16
|
"denied": "ブラウザの設定で通知がブロックされています。このサイトの通知を許可してください。"
|
|
@@ -34,7 +34,18 @@
|
|
|
34
34
|
"terminalAttentionWithExcerpt": "端末の確認が必要です: {excerpt}",
|
|
35
35
|
"terminalAttention": "端末の確認が必要です",
|
|
36
36
|
"stillWaitingPrompt": "まだ応答待ちです({minutes}分経過)",
|
|
37
|
-
"stillWaitingTerminal": "まだ端末の確認が必要です({minutes}分経過)"
|
|
37
|
+
"stillWaitingTerminal": "まだ端末の確認が必要です({minutes}分経過)",
|
|
38
|
+
"failureVerificationWithExcerpt": "検証ゲート不合格: {excerpt}",
|
|
39
|
+
"failureVerification": "検証ゲートに不合格しました",
|
|
40
|
+
"failureUpstreamWithExcerpt": "上流APIの障害で停止しています: {excerpt}",
|
|
41
|
+
"failureUpstream": "上流APIの障害で停止しています",
|
|
42
|
+
"failureSessionStartWithExcerpt": "セッションを起動できませんでした: {excerpt}",
|
|
43
|
+
"failureSessionStart": "セッションを起動できませんでした",
|
|
44
|
+
"failureSessionUnavailableWithExcerpt": "セッションを起動できませんでした: {excerpt} がインストールされていません",
|
|
45
|
+
"failureSessionUnavailable": "セッションを起動できませんでした: CLI ツールがインストールされていません",
|
|
46
|
+
"failureWithExcerpt": "失敗しました: {excerpt}",
|
|
47
|
+
"failure": "失敗しました",
|
|
48
|
+
"promptResolved": "対応済みです(他の端末で応答されました)"
|
|
38
49
|
},
|
|
39
50
|
"escalation": {
|
|
40
51
|
"heading": "再通知",
|
|
@@ -37,6 +37,10 @@ exports.ACTIVITIES = [
|
|
|
37
37
|
// rather than inserted so the existing ArrowUp/ArrowDown order — which users
|
|
38
38
|
// and tests both index by position — is unchanged.
|
|
39
39
|
{ id: 'verification', labelKey: 'activityBar.verification', icon: lucide_react_1.ShieldCheck },
|
|
40
|
+
// Issue #1968: the masked `.env` editor. Appended for the same reason
|
|
41
|
+
// `verification` was — the ArrowUp/ArrowDown order is indexed by position by
|
|
42
|
+
// both users and tests, so an insert would silently renumber every tab.
|
|
43
|
+
{ id: 'env', labelKey: 'activityBar.env', icon: lucide_react_1.KeyRound },
|
|
40
44
|
];
|
|
41
45
|
/**
|
|
42
46
|
* Set of valid ActivityId values for runtime validation.
|
|
@@ -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.CLAUDE_RESTART_DELAY_MS = exports.CLAUDE_ENV_SANITIZE_WAIT_MS = exports.VIBE_LOCAL_DOUBLE_ENTER_WAIT_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;
|
|
23
|
+
exports.CLAUDE_RESTART_DELAY_MS = exports.CLAUDE_ENV_SANITIZE_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.
|
|
@@ -48,8 +48,9 @@ exports.TUI_INTERRUPT_SETTLE_MS = 300;
|
|
|
48
48
|
/**
|
|
49
49
|
* Wait (ms) after an exit/quit command (or Ctrl+D) for the CLI to shut down
|
|
50
50
|
* gracefully before the tmux session is killed.
|
|
51
|
-
* Sites: codex / gemini / vibe-local
|
|
51
|
+
* Sites: codex / gemini / vibe-local killSession(),
|
|
52
52
|
* session-key-sender stopSession().
|
|
53
|
+
* (copilot moved to {@link COPILOT_EXIT_WAIT_MS} in Issue #1905.)
|
|
53
54
|
*/
|
|
54
55
|
exports.TUI_EXIT_WAIT_MS = 500;
|
|
55
56
|
/**
|
|
@@ -62,8 +63,64 @@ exports.CODEX_DIALOG_SETTLE_MS = 500;
|
|
|
62
63
|
* Wait (ms) for OpenCode to process its `/exit` TUI command. Longer than the
|
|
63
64
|
* generic exit wait because OpenCode's TUI teardown is slower.
|
|
64
65
|
* Site: opencode killSession().
|
|
66
|
+
*
|
|
67
|
+
* Issue #1905 measured the teardown on opencode 1.18.21 (private tmux socket,
|
|
68
|
+
* 200x50): once `/exit` is submitted as body-then-Enter the TUI is gone in
|
|
69
|
+
* 0.445 / 0.456 / 0.458 s (n=3), so this window is not the binding constraint.
|
|
70
|
+
* It was left at 2000 rather than tightened because the measurement is for an
|
|
71
|
+
* unloaded machine.
|
|
65
72
|
*/
|
|
66
73
|
exports.OPENCODE_EXIT_WAIT_MS = 2000;
|
|
74
|
+
/**
|
|
75
|
+
* Wait (ms) between the two Escape presses that abort an opencode turn.
|
|
76
|
+
*
|
|
77
|
+
* opencode 1.18 does not interrupt on a single Escape. The first press re-labels
|
|
78
|
+
* the footer `esc interrupt` -> `esc again to interrupt` and abandons nothing;
|
|
79
|
+
* only a SECOND Escape inside that label's lifetime aborts the turn.
|
|
80
|
+
*
|
|
81
|
+
* Issue #1894 measured the label on opencode 1.18.21 (private tmux socket,
|
|
82
|
+
* 80x200): sampling the footer every ~360 ms after one Escape, `esc again to
|
|
83
|
+
* interrupt` is up from 0.31 s through 4.71 s and the row has reverted to `esc
|
|
84
|
+
* interrupt` by 5.07 s. So the deadline is five seconds, and a single Escape
|
|
85
|
+
* really does nothing -- the generation continued to a natural
|
|
86
|
+
* `Build ... 11.3s` completion in 3 runs out of 3.
|
|
87
|
+
*
|
|
88
|
+
* 300 ms is the design policy's number
|
|
89
|
+
* (`docs/design/multi-agent-state-architecture.md` §6.3) and it is kept, because
|
|
90
|
+
* both directions of error are bounded by real measurements rather than by
|
|
91
|
+
* taste:
|
|
92
|
+
*
|
|
93
|
+
* - too LATE is the dangerous side (the turn is not aborted and the pane just
|
|
94
|
+
* collects Escapes). Driving the real `OpenCodeTool.interrupt()` against a
|
|
95
|
+
* live 1.18.21 session, the whole call -- `send-keys`, this wait, `send-keys`
|
|
96
|
+
* -- took 317 ms end to end, i.e. the two tmux executions cost ~17 ms and the
|
|
97
|
+
* press lands at 6% of the deadline. Even the crude shell harness used for
|
|
98
|
+
* the first probe, which pays a python interpreter per step, landed its
|
|
99
|
+
* second press at 594 ms: 8x inside the window.
|
|
100
|
+
* - too EARLY would risk the second press being swallowed before opencode has
|
|
101
|
+
* armed the label. The label was already up at the first sample after the
|
|
102
|
+
* first press (0.31 s), and both the 317 ms and the 594 ms double-press
|
|
103
|
+
* aborted the turn (`▣ Build · GPT-5.6 Luna · interrupted` mid-sentence), so
|
|
104
|
+
* the arming cost is well under one wait.
|
|
105
|
+
*
|
|
106
|
+
* Site: opencode interrupt().
|
|
107
|
+
*/
|
|
108
|
+
exports.OPENCODE_INTERRUPT_SECOND_ESCAPE_DELAY_MS = 300;
|
|
109
|
+
/**
|
|
110
|
+
* Wait (ms) for Copilot to process its `/exit` TUI command before the tmux
|
|
111
|
+
* session is killed. Copilot-specific because {@link TUI_EXIT_WAIT_MS} (500) is
|
|
112
|
+
* shorter than the shutdown actually takes.
|
|
113
|
+
* Site: copilot killSession().
|
|
114
|
+
*
|
|
115
|
+
* Issue #1905 measured GitHub Copilot CLI 1.0.80 in a private tmux socket
|
|
116
|
+
* (200x50, unloaded). Time from the submitting keystroke to the pane's process
|
|
117
|
+
* no longer being `copilot`, across every exit spelling copilot accepts:
|
|
118
|
+
* 1.006 / 1.109 / 1.115 / 1.118 / 1.204 / 1.208 / 1.288 / 1.330 / 1.795 /
|
|
119
|
+
* 2.165 / 2.193 s. Every sample is past 500 ms, i.e. the generic constant
|
|
120
|
+
* guaranteed the tmux kill landed mid-shutdown; 3000 covers the slowest sample
|
|
121
|
+
* with room for a loaded machine.
|
|
122
|
+
*/
|
|
123
|
+
exports.COPILOT_EXIT_WAIT_MS = 3000;
|
|
67
124
|
/**
|
|
68
125
|
* Wait (ms) between the two Enter key presses in vibe-local's IME submit mode
|
|
69
126
|
* (first Enter inserts a newline, second Enter submits).
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* - src/lib/cli-tools/copilot.ts
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.MAX_MODEL_NAME_LENGTH = exports.MODEL_NAME_PATTERN = exports.COPILOT_MODEL_SWITCH_TIMEOUT_MS = exports.COPILOT_TRUNCATION_MARKER = exports.COPILOT_MAX_MESSAGE_LENGTH = exports.COPILOT_TEXT_INPUT_DELAY_MS = exports.COPILOT_SEND_ENTER_DELAY_MS = void 0;
|
|
12
|
+
exports.COPILOT_INSTALL_HINT = exports.MAX_MODEL_NAME_LENGTH = exports.MODEL_NAME_PATTERN = exports.COPILOT_MODEL_SWITCH_TIMEOUT_MS = exports.COPILOT_TRUNCATION_MARKER = exports.COPILOT_MAX_MESSAGE_LENGTH = exports.COPILOT_TEXT_INPUT_DELAY_MS = exports.COPILOT_SEND_ENTER_DELAY_MS = void 0;
|
|
13
13
|
/**
|
|
14
14
|
* Delay (ms) after sending text before pressing Enter.
|
|
15
15
|
* Copilot CLI auto-enters multi-line mode when text exceeds pane width.
|
|
@@ -53,3 +53,13 @@ exports.MODEL_NAME_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9\-._/:]*$/;
|
|
|
53
53
|
* Issue #588: Shared validation constant.
|
|
54
54
|
*/
|
|
55
55
|
exports.MAX_MODEL_NAME_LENGTH = 128;
|
|
56
|
+
/**
|
|
57
|
+
* How to install GitHub Copilot CLI, as shown when a session refuses to start.
|
|
58
|
+
* Issue #1907.
|
|
59
|
+
*
|
|
60
|
+
* The message this replaced was `gh extension install github/gh-copilot`, which
|
|
61
|
+
* installs a different, retired product (the `suggest` / `explain` extension).
|
|
62
|
+
* Copilot CLI is a standalone binary now, and `gh copilot` is a preview command
|
|
63
|
+
* built into `gh` that downloads it rather than a way of installing it.
|
|
64
|
+
*/
|
|
65
|
+
exports.COPILOT_INSTALL_HINT = 'Install with: brew install copilot-cli (macOS) or npm i -g @github/copilot';
|