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,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `DETECTOR_VERSION_PROBES` — are the detector's rules still describing the CLI
|
|
3
|
+
* that is installed? (Issue #1929, 方針書 §4 D2 / §7 / §10.11 / §13.2 S17)
|
|
4
|
+
*
|
|
5
|
+
* Every rule in `src/lib/detection/tools/` was read off a capture of one build
|
|
6
|
+
* of one CLI. `tools/verified-against.ts` records which build. This module reads
|
|
7
|
+
* the other half of the comparison — the version that is installed right now —
|
|
8
|
+
* so `capture --json` and `commandmate status` can say "these rules were
|
|
9
|
+
* measured against copilot 1.0.80 and you are running 1.2.0" instead of leaving
|
|
10
|
+
* a reader to guess whether a misdetection is a bug or a version skew.
|
|
11
|
+
*
|
|
12
|
+
* ## The cost rules, and why they are not optional
|
|
13
|
+
*
|
|
14
|
+
* `capture --json` and `GET /current-output` are the **5-second polling path** —
|
|
15
|
+
* the monitor skills run them with no iteration cap. A probe table that spawns
|
|
16
|
+
* six children cannot sit on that path, so (DR3-013):
|
|
17
|
+
*
|
|
18
|
+
* - probes run **once per process**, concurrent first callers share the same
|
|
19
|
+
* in-flight promise, and the result is cached;
|
|
20
|
+
* - {@link getDetectorStalenessSnapshot} **never awaits a child process**. It
|
|
21
|
+
* answers from the cache or answers `undefined` and starts the probe in the
|
|
22
|
+
* background. `undefined` means "not known yet", never "nothing is stale":
|
|
23
|
+
* the hint is additive, so a poll that lands cold simply shows nothing and
|
|
24
|
+
* the next one shows the banner;
|
|
25
|
+
* - {@link getDetectorFreshness} is the awaiting form, for the two callers that
|
|
26
|
+
* genuinely want the answer (`commandmate status`, `check:detector-freshness`)
|
|
27
|
+
* and are operator-initiated one-offs.
|
|
28
|
+
*
|
|
29
|
+
* ## The execution rules (DR4-010 / §10.11)
|
|
30
|
+
*
|
|
31
|
+
* `PATH` is untrusted input: the server's `PATH` comes from the shell that
|
|
32
|
+
* started it, and a repo-local `node_modules/.bin` on it would let opening a
|
|
33
|
+
* worktree decide which binary a cold probe runs. So every `execFile` probe
|
|
34
|
+
* resolves its command to an **absolute path** through
|
|
35
|
+
* {@link findExecutableOnPath} first and **skips entirely** — spawning nothing —
|
|
36
|
+
* when that resolves to nothing; children run with `sanitizeEnvForChildProcess()`
|
|
37
|
+
* so no probe ever sees CommandMate's auth token or DB path; and both `timeout`
|
|
38
|
+
* and `maxBuffer` are explicit.
|
|
39
|
+
*
|
|
40
|
+
* ## copilot is delegated, and must stay delegated (S17)
|
|
41
|
+
*
|
|
42
|
+
* The design policy's first draft probed `gh copilot -- --version`. It cannot be
|
|
43
|
+
* used: `copilot` is not a gh extension but a preview command built into gh
|
|
44
|
+
* 2.86.0, and gh's own help says that when `PATH` has no copilot it
|
|
45
|
+
* **downloads** the CLI into `~/.local/share/gh/copilot`. A version hint that
|
|
46
|
+
* installs software is not a version hint. #1907 measured this and built
|
|
47
|
+
* {@link resolveCopilotExecutable}; #1913 wired it into the catalog's
|
|
48
|
+
* `VERSION_PROBES` as `kind: 'delegated'`; this table reuses the same shape.
|
|
49
|
+
*
|
|
50
|
+
* Delegating is not an exception to DR4-010 (1) — it satisfies it more strongly
|
|
51
|
+
* than an `execFile` row could, because `CopilotTool.isInstalled()` and
|
|
52
|
+
* `startSession()` decide what to launch from **the same function's same return
|
|
53
|
+
* value**, so probe and launch cannot disagree.
|
|
54
|
+
*
|
|
55
|
+
* ## What "probes must not modify the environment" can actually mean (measured)
|
|
56
|
+
*
|
|
57
|
+
* DR4-010 (5) says a probe must not change the environment ("installation,
|
|
58
|
+
* download, or config-file generation"). Measured on 2026-08-23 (macOS
|
|
59
|
+
* darwin 25.6.0) by running each `--version` under a **disposable** `HOME` /
|
|
60
|
+
* `XDG_DATA_HOME` / `XDG_CONFIG_HOME` and listing what appeared:
|
|
61
|
+
*
|
|
62
|
+
* | probe | version | warm ms | wrote into a pristine HOME |
|
|
63
|
+
* |----------------------|-----------|---------|------------------------------------------|
|
|
64
|
+
* | `claude --version` | 2.1.240 | 199 | nothing |
|
|
65
|
+
* | `agy --version` | 1.1.18 | 176 | nothing |
|
|
66
|
+
* | `codex --version` | 0.148.0 | 172 | `~/.codex/tmp/arg0` |
|
|
67
|
+
* | `opencode --version` | 1.18.21 | 404 | `~/.config/opencode`, `~/.cache/opencode`, `~/.local/{state,share}/opencode` |
|
|
68
|
+
* | `copilot --version` | 1.0.80 | 436 | `~/Library/Caches/copilot` |
|
|
69
|
+
* | `gemini --version` | 0.55.1 | 929 | `~/.gemini/projects.json.<uuid>.tmp` ×2 (leaked, not cleaned up) |
|
|
70
|
+
*
|
|
71
|
+
* So the literal reading of (5) is satisfied by **two** of the six probes, and
|
|
72
|
+
* four of the rows the policy already approved fail it. The rule that the D2
|
|
73
|
+
* premise actually rests on is the narrower one #1979 was defending: a probe
|
|
74
|
+
* must not **install or download software, or change which binary would be
|
|
75
|
+
* launched**. Every row above satisfies that; none of them fetches anything.
|
|
76
|
+
* The gemini row is the weakest — it leaks two temp files into a `~/.gemini`
|
|
77
|
+
* that does not exist yet — and it is kept because it is the same class of
|
|
78
|
+
* side effect as codex/opencode/copilot, which are already in the table, and
|
|
79
|
+
* because dropping gemini would leave the one tool with **no** measured
|
|
80
|
+
* detector rules also with no way to notice that.
|
|
81
|
+
*
|
|
82
|
+
* `~/.config/gh` and `~/.local/share/gh` were checksummed before and after the
|
|
83
|
+
* whole measurement and neither changed (`~/.local/share/gh` still does not
|
|
84
|
+
* exist), which is the receipt #1979 asked for.
|
|
85
|
+
*
|
|
86
|
+
* ## Why this module imports nothing through `@/`
|
|
87
|
+
*
|
|
88
|
+
* `commandmate status` is one of the two exposure surfaces §4 D2 names, and
|
|
89
|
+
* `tsconfig.cli.json` compiles the CLI with `"paths": {}`. See the same
|
|
90
|
+
* constraint spelled out in `src/cli/types/api-responses.ts`.
|
|
91
|
+
*
|
|
92
|
+
* @module lib/detection/version-probes
|
|
93
|
+
*/
|
|
94
|
+
/** Budget for one `<cli> --version`. Matches the catalog probe and copilot-executable. */
|
|
95
|
+
export declare const DETECTOR_VERSION_PROBE_TIMEOUT_MS = 5000;
|
|
96
|
+
/** Extract a normalized `major.minor.patch` version from `--version` output. */
|
|
97
|
+
export declare function parseCliVersion(output: string): string | null;
|
|
98
|
+
/**
|
|
99
|
+
* The comparable form of a `verifiedAgainst` stamp, or null when there is none.
|
|
100
|
+
*
|
|
101
|
+
* `'unmeasured'` is null — a tool nobody has captured frames for cannot be
|
|
102
|
+
* fresh or stale. `'0.4.x'` becomes `0.4.0`: antigravity's stamp is a minor
|
|
103
|
+
* series rather than a build (Issue #995 measured a range), and reading it as
|
|
104
|
+
* "no version" would silently exempt the one tool whose rules are furthest
|
|
105
|
+
* behind. Widening to `.0` is the safe direction — it can only ever call a
|
|
106
|
+
* newer install stale, never call a stale one current.
|
|
107
|
+
*/
|
|
108
|
+
export declare function parseVerifiedAgainstVersion(stamp: string): string | null;
|
|
109
|
+
/**
|
|
110
|
+
* Compare two `major.minor.patch` versions numerically.
|
|
111
|
+
* @returns 1 if a > b, -1 if a < b, 0 if equal.
|
|
112
|
+
*/
|
|
113
|
+
export declare function compareCliVersions(a: string, b: string): number;
|
|
114
|
+
/**
|
|
115
|
+
* One staleness probe.
|
|
116
|
+
*
|
|
117
|
+
* `execFile` is the default: resolve `command` on `PATH`, run it with `args`,
|
|
118
|
+
* read a version out of the output. `delegated` exists for a tool that owns its
|
|
119
|
+
* own resolution, because *finding* the executable is part of the question for
|
|
120
|
+
* it — see the copilot note in the module doc.
|
|
121
|
+
*/
|
|
122
|
+
export type DetectorVersionProbe = {
|
|
123
|
+
readonly kind: 'execFile';
|
|
124
|
+
readonly command: string;
|
|
125
|
+
readonly args: readonly string[];
|
|
126
|
+
} | {
|
|
127
|
+
readonly kind: 'delegated';
|
|
128
|
+
readonly probe: () => Promise<string | null>;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Detector staleness probes: tool id → how to read its installed version.
|
|
132
|
+
*
|
|
133
|
+
* Deliberately the same shape as `VERSION_PROBES` in `slash-command-catalog.ts`
|
|
134
|
+
* (§4 D2: 「`VERSION_PROBES` と同型」), and deliberately a separate table: the
|
|
135
|
+
* catalog's question is "is the bundled slash-command list behind?" and this
|
|
136
|
+
* one's is "were these detection rules read off the build that is installed?".
|
|
137
|
+
* They happen to agree today; nothing requires them to.
|
|
138
|
+
*
|
|
139
|
+
* The binary for antigravity is `agy` — tool id and executable name differ
|
|
140
|
+
* (DR2-023). `gemini`'s row is `gemini --version`, measured for this Issue (the
|
|
141
|
+
* policy left it unconfirmed); its `verifiedAgainst` is `unmeasured`, so it is
|
|
142
|
+
* reported as "installed, rules never measured" rather than compared.
|
|
143
|
+
* `vibe-local` has no row: it is not an external CLI.
|
|
144
|
+
*/
|
|
145
|
+
export declare const DETECTOR_VERSION_PROBES: Readonly<Record<string, DetectorVersionProbe>>;
|
|
146
|
+
/** One row of the full freshness report. */
|
|
147
|
+
export interface DetectorFreshnessRow {
|
|
148
|
+
/** Catalog / `CLIToolType` id. */
|
|
149
|
+
readonly tool: string;
|
|
150
|
+
/** Version the probe read, or null when the tool is absent / unreadable. */
|
|
151
|
+
readonly installed: string | null;
|
|
152
|
+
/** Build the tool module's rules were read off (may be `'unmeasured'`). */
|
|
153
|
+
readonly verifiedAgainst: string;
|
|
154
|
+
/**
|
|
155
|
+
* True only when both sides are comparable versions AND installed is newer.
|
|
156
|
+
*
|
|
157
|
+
* A tool that is not installed, whose `--version` could not be parsed, or
|
|
158
|
+
* whose rules were never measured is **not** stale — those are three kinds of
|
|
159
|
+
* "no answer", and reporting them as staleness would nag about something the
|
|
160
|
+
* operator cannot act on.
|
|
161
|
+
*/
|
|
162
|
+
readonly stale: boolean;
|
|
163
|
+
}
|
|
164
|
+
/** What the wire carries: only the tools whose installed build is newer. */
|
|
165
|
+
export interface DetectorStalenessEntry {
|
|
166
|
+
readonly installed: string;
|
|
167
|
+
readonly verifiedAgainst: string;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* `detector.staleness` as `capture --json` publishes it: tool id → the skew.
|
|
171
|
+
*
|
|
172
|
+
* A tool is **absent** from this map unless it was probed successfully AND is
|
|
173
|
+
* newer than the rules — so `staleness.copilot === undefined` is the answer on a
|
|
174
|
+
* machine with no copilot, which is the S17 receipt (probe skipped, nothing
|
|
175
|
+
* spawned, nothing reported).
|
|
176
|
+
*/
|
|
177
|
+
export type DetectorStaleness = Readonly<Record<string, DetectorStalenessEntry>>;
|
|
178
|
+
/**
|
|
179
|
+
* Run one probe. Resolves null on any failure, and **without spawning anything**
|
|
180
|
+
* when the command does not resolve to an absolute path (DR4-010 (2)).
|
|
181
|
+
*/
|
|
182
|
+
export declare function runDetectorVersionProbe(probe: DetectorVersionProbe): Promise<string | null>;
|
|
183
|
+
/**
|
|
184
|
+
* The full freshness report, computed once per process and cached. Concurrent
|
|
185
|
+
* first callers share one probe.
|
|
186
|
+
*
|
|
187
|
+
* **This awaits child processes — never call it from a request path.** Use
|
|
188
|
+
* {@link getDetectorStalenessSnapshot} there. Kept for `commandmate status`,
|
|
189
|
+
* `npm run check:detector-freshness` and tests, and as the single implementation
|
|
190
|
+
* both entry points share.
|
|
191
|
+
*/
|
|
192
|
+
export declare function getDetectorFreshness(): Promise<readonly DetectorFreshnessRow[]>;
|
|
193
|
+
/** Reduce a report to the wire shape: stale tools only. */
|
|
194
|
+
export declare function toDetectorStaleness(rows: readonly DetectorFreshnessRow[]): DetectorStaleness;
|
|
195
|
+
/**
|
|
196
|
+
* The staleness this process already knows, or `undefined` plus a background
|
|
197
|
+
* probe when it knows nothing yet. **Never awaits a child process** (§4 D2,
|
|
198
|
+
* DR3-013 (a)(b)(c)).
|
|
199
|
+
*
|
|
200
|
+
* `undefined` is "not known yet", not "nothing is stale" — see the module doc.
|
|
201
|
+
* The returned object is `{}` once the cache is warm and nothing is stale, which
|
|
202
|
+
* is how a caller tells the two apart.
|
|
203
|
+
*/
|
|
204
|
+
export declare function getDetectorStalenessSnapshot(): DetectorStaleness | undefined;
|
|
205
|
+
/** Clear the process-level probe cache (tests, and any future cache-control wiring). */
|
|
206
|
+
export declare function clearDetectorVersionProbeCache(): void;
|
|
207
|
+
//# sourceMappingURL=version-probes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-probes.d.ts","sourceRoot":"","sources":["../../../src/lib/detection/version-probes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AAOH,0FAA0F;AAC1F,eAAO,MAAM,iCAAiC,OAAO,CAAC;AActD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAWD;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAE,CAAC;AAEjF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAUlF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAKjF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4B3F;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAWrF;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,oBAAoB,EAAE,GAAG,iBAAiB,CAO5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,IAAI,iBAAiB,GAAG,SAAS,CAS5E;AAED,wFAAwF;AACxF,wBAAgB,8BAA8B,IAAI,IAAI,CAGrD"}
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `DETECTOR_VERSION_PROBES` — are the detector's rules still describing the CLI
|
|
4
|
+
* that is installed? (Issue #1929, 方針書 §4 D2 / §7 / §10.11 / §13.2 S17)
|
|
5
|
+
*
|
|
6
|
+
* Every rule in `src/lib/detection/tools/` was read off a capture of one build
|
|
7
|
+
* of one CLI. `tools/verified-against.ts` records which build. This module reads
|
|
8
|
+
* the other half of the comparison — the version that is installed right now —
|
|
9
|
+
* so `capture --json` and `commandmate status` can say "these rules were
|
|
10
|
+
* measured against copilot 1.0.80 and you are running 1.2.0" instead of leaving
|
|
11
|
+
* a reader to guess whether a misdetection is a bug or a version skew.
|
|
12
|
+
*
|
|
13
|
+
* ## The cost rules, and why they are not optional
|
|
14
|
+
*
|
|
15
|
+
* `capture --json` and `GET /current-output` are the **5-second polling path** —
|
|
16
|
+
* the monitor skills run them with no iteration cap. A probe table that spawns
|
|
17
|
+
* six children cannot sit on that path, so (DR3-013):
|
|
18
|
+
*
|
|
19
|
+
* - probes run **once per process**, concurrent first callers share the same
|
|
20
|
+
* in-flight promise, and the result is cached;
|
|
21
|
+
* - {@link getDetectorStalenessSnapshot} **never awaits a child process**. It
|
|
22
|
+
* answers from the cache or answers `undefined` and starts the probe in the
|
|
23
|
+
* background. `undefined` means "not known yet", never "nothing is stale":
|
|
24
|
+
* the hint is additive, so a poll that lands cold simply shows nothing and
|
|
25
|
+
* the next one shows the banner;
|
|
26
|
+
* - {@link getDetectorFreshness} is the awaiting form, for the two callers that
|
|
27
|
+
* genuinely want the answer (`commandmate status`, `check:detector-freshness`)
|
|
28
|
+
* and are operator-initiated one-offs.
|
|
29
|
+
*
|
|
30
|
+
* ## The execution rules (DR4-010 / §10.11)
|
|
31
|
+
*
|
|
32
|
+
* `PATH` is untrusted input: the server's `PATH` comes from the shell that
|
|
33
|
+
* started it, and a repo-local `node_modules/.bin` on it would let opening a
|
|
34
|
+
* worktree decide which binary a cold probe runs. So every `execFile` probe
|
|
35
|
+
* resolves its command to an **absolute path** through
|
|
36
|
+
* {@link findExecutableOnPath} first and **skips entirely** — spawning nothing —
|
|
37
|
+
* when that resolves to nothing; children run with `sanitizeEnvForChildProcess()`
|
|
38
|
+
* so no probe ever sees CommandMate's auth token or DB path; and both `timeout`
|
|
39
|
+
* and `maxBuffer` are explicit.
|
|
40
|
+
*
|
|
41
|
+
* ## copilot is delegated, and must stay delegated (S17)
|
|
42
|
+
*
|
|
43
|
+
* The design policy's first draft probed `gh copilot -- --version`. It cannot be
|
|
44
|
+
* used: `copilot` is not a gh extension but a preview command built into gh
|
|
45
|
+
* 2.86.0, and gh's own help says that when `PATH` has no copilot it
|
|
46
|
+
* **downloads** the CLI into `~/.local/share/gh/copilot`. A version hint that
|
|
47
|
+
* installs software is not a version hint. #1907 measured this and built
|
|
48
|
+
* {@link resolveCopilotExecutable}; #1913 wired it into the catalog's
|
|
49
|
+
* `VERSION_PROBES` as `kind: 'delegated'`; this table reuses the same shape.
|
|
50
|
+
*
|
|
51
|
+
* Delegating is not an exception to DR4-010 (1) — it satisfies it more strongly
|
|
52
|
+
* than an `execFile` row could, because `CopilotTool.isInstalled()` and
|
|
53
|
+
* `startSession()` decide what to launch from **the same function's same return
|
|
54
|
+
* value**, so probe and launch cannot disagree.
|
|
55
|
+
*
|
|
56
|
+
* ## What "probes must not modify the environment" can actually mean (measured)
|
|
57
|
+
*
|
|
58
|
+
* DR4-010 (5) says a probe must not change the environment ("installation,
|
|
59
|
+
* download, or config-file generation"). Measured on 2026-08-23 (macOS
|
|
60
|
+
* darwin 25.6.0) by running each `--version` under a **disposable** `HOME` /
|
|
61
|
+
* `XDG_DATA_HOME` / `XDG_CONFIG_HOME` and listing what appeared:
|
|
62
|
+
*
|
|
63
|
+
* | probe | version | warm ms | wrote into a pristine HOME |
|
|
64
|
+
* |----------------------|-----------|---------|------------------------------------------|
|
|
65
|
+
* | `claude --version` | 2.1.240 | 199 | nothing |
|
|
66
|
+
* | `agy --version` | 1.1.18 | 176 | nothing |
|
|
67
|
+
* | `codex --version` | 0.148.0 | 172 | `~/.codex/tmp/arg0` |
|
|
68
|
+
* | `opencode --version` | 1.18.21 | 404 | `~/.config/opencode`, `~/.cache/opencode`, `~/.local/{state,share}/opencode` |
|
|
69
|
+
* | `copilot --version` | 1.0.80 | 436 | `~/Library/Caches/copilot` |
|
|
70
|
+
* | `gemini --version` | 0.55.1 | 929 | `~/.gemini/projects.json.<uuid>.tmp` ×2 (leaked, not cleaned up) |
|
|
71
|
+
*
|
|
72
|
+
* So the literal reading of (5) is satisfied by **two** of the six probes, and
|
|
73
|
+
* four of the rows the policy already approved fail it. The rule that the D2
|
|
74
|
+
* premise actually rests on is the narrower one #1979 was defending: a probe
|
|
75
|
+
* must not **install or download software, or change which binary would be
|
|
76
|
+
* launched**. Every row above satisfies that; none of them fetches anything.
|
|
77
|
+
* The gemini row is the weakest — it leaks two temp files into a `~/.gemini`
|
|
78
|
+
* that does not exist yet — and it is kept because it is the same class of
|
|
79
|
+
* side effect as codex/opencode/copilot, which are already in the table, and
|
|
80
|
+
* because dropping gemini would leave the one tool with **no** measured
|
|
81
|
+
* detector rules also with no way to notice that.
|
|
82
|
+
*
|
|
83
|
+
* `~/.config/gh` and `~/.local/share/gh` were checksummed before and after the
|
|
84
|
+
* whole measurement and neither changed (`~/.local/share/gh` still does not
|
|
85
|
+
* exist), which is the receipt #1979 asked for.
|
|
86
|
+
*
|
|
87
|
+
* ## Why this module imports nothing through `@/`
|
|
88
|
+
*
|
|
89
|
+
* `commandmate status` is one of the two exposure surfaces §4 D2 names, and
|
|
90
|
+
* `tsconfig.cli.json` compiles the CLI with `"paths": {}`. See the same
|
|
91
|
+
* constraint spelled out in `src/cli/types/api-responses.ts`.
|
|
92
|
+
*
|
|
93
|
+
* @module lib/detection/version-probes
|
|
94
|
+
*/
|
|
95
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
96
|
+
exports.DETECTOR_VERSION_PROBES = exports.DETECTOR_VERSION_PROBE_TIMEOUT_MS = void 0;
|
|
97
|
+
exports.parseCliVersion = parseCliVersion;
|
|
98
|
+
exports.parseVerifiedAgainstVersion = parseVerifiedAgainstVersion;
|
|
99
|
+
exports.compareCliVersions = compareCliVersions;
|
|
100
|
+
exports.runDetectorVersionProbe = runDetectorVersionProbe;
|
|
101
|
+
exports.getDetectorFreshness = getDetectorFreshness;
|
|
102
|
+
exports.toDetectorStaleness = toDetectorStaleness;
|
|
103
|
+
exports.getDetectorStalenessSnapshot = getDetectorStalenessSnapshot;
|
|
104
|
+
exports.clearDetectorVersionProbeCache = clearDetectorVersionProbeCache;
|
|
105
|
+
const child_process_1 = require("child_process");
|
|
106
|
+
const copilot_executable_1 = require("../cli-tools/copilot-executable");
|
|
107
|
+
const env_sanitizer_1 = require("../security/env-sanitizer");
|
|
108
|
+
const verified_against_1 = require("./tools/verified-against");
|
|
109
|
+
/** Budget for one `<cli> --version`. Matches the catalog probe and copilot-executable. */
|
|
110
|
+
exports.DETECTOR_VERSION_PROBE_TIMEOUT_MS = 5000;
|
|
111
|
+
/**
|
|
112
|
+
* Cap on `--version` output kept in memory (DR4-010 (4)).
|
|
113
|
+
*
|
|
114
|
+
* `execFile` defaults to 1MB. A `--version` that answers with a megabyte is
|
|
115
|
+
* already misbehaving, so the buffer is sized to a version banner and the child
|
|
116
|
+
* is killed past it; the over-long answer is discarded rather than parsed.
|
|
117
|
+
*/
|
|
118
|
+
const DETECTOR_VERSION_PROBE_MAX_BUFFER_BYTES = 64 * 1024;
|
|
119
|
+
/** Extracts a `major.minor.patch` triple from arbitrary `--version` output. */
|
|
120
|
+
const VERSION_REGEX = /(\d+)\.(\d+)\.(\d+)/;
|
|
121
|
+
/** Extract a normalized `major.minor.patch` version from `--version` output. */
|
|
122
|
+
function parseCliVersion(output) {
|
|
123
|
+
const match = VERSION_REGEX.exec(output);
|
|
124
|
+
return match ? `${match[1]}.${match[2]}.${match[3]}` : null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A `verifiedAgainst` stamp written as a minor-series wildcard: `0.4.x`.
|
|
128
|
+
*
|
|
129
|
+
* Only ever applied to the stamp, never to a probe's own output — one side of
|
|
130
|
+
* this comparison is a string a human typed into a tool module, the other is
|
|
131
|
+
* what a binary printed about itself, and only the first is allowed to be vague.
|
|
132
|
+
*/
|
|
133
|
+
const VERIFIED_AGAINST_WILDCARD_REGEX = /^(\d+)\.(\d+)\.(?:x|\*)$/i;
|
|
134
|
+
/**
|
|
135
|
+
* The comparable form of a `verifiedAgainst` stamp, or null when there is none.
|
|
136
|
+
*
|
|
137
|
+
* `'unmeasured'` is null — a tool nobody has captured frames for cannot be
|
|
138
|
+
* fresh or stale. `'0.4.x'` becomes `0.4.0`: antigravity's stamp is a minor
|
|
139
|
+
* series rather than a build (Issue #995 measured a range), and reading it as
|
|
140
|
+
* "no version" would silently exempt the one tool whose rules are furthest
|
|
141
|
+
* behind. Widening to `.0` is the safe direction — it can only ever call a
|
|
142
|
+
* newer install stale, never call a stale one current.
|
|
143
|
+
*/
|
|
144
|
+
function parseVerifiedAgainstVersion(stamp) {
|
|
145
|
+
const wildcard = VERIFIED_AGAINST_WILDCARD_REGEX.exec(stamp);
|
|
146
|
+
if (wildcard)
|
|
147
|
+
return `${wildcard[1]}.${wildcard[2]}.0`;
|
|
148
|
+
return parseCliVersion(stamp);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Compare two `major.minor.patch` versions numerically.
|
|
152
|
+
* @returns 1 if a > b, -1 if a < b, 0 if equal.
|
|
153
|
+
*/
|
|
154
|
+
function compareCliVersions(a, b) {
|
|
155
|
+
const pa = a.split('.').map((n) => Number(n) || 0);
|
|
156
|
+
const pb = b.split('.').map((n) => Number(n) || 0);
|
|
157
|
+
for (let i = 0; i < 3; i++) {
|
|
158
|
+
const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
159
|
+
if (diff !== 0)
|
|
160
|
+
return diff > 0 ? 1 : -1;
|
|
161
|
+
}
|
|
162
|
+
return 0;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Detector staleness probes: tool id → how to read its installed version.
|
|
166
|
+
*
|
|
167
|
+
* Deliberately the same shape as `VERSION_PROBES` in `slash-command-catalog.ts`
|
|
168
|
+
* (§4 D2: 「`VERSION_PROBES` と同型」), and deliberately a separate table: the
|
|
169
|
+
* catalog's question is "is the bundled slash-command list behind?" and this
|
|
170
|
+
* one's is "were these detection rules read off the build that is installed?".
|
|
171
|
+
* They happen to agree today; nothing requires them to.
|
|
172
|
+
*
|
|
173
|
+
* The binary for antigravity is `agy` — tool id and executable name differ
|
|
174
|
+
* (DR2-023). `gemini`'s row is `gemini --version`, measured for this Issue (the
|
|
175
|
+
* policy left it unconfirmed); its `verifiedAgainst` is `unmeasured`, so it is
|
|
176
|
+
* reported as "installed, rules never measured" rather than compared.
|
|
177
|
+
* `vibe-local` has no row: it is not an external CLI.
|
|
178
|
+
*/
|
|
179
|
+
exports.DETECTOR_VERSION_PROBES = {
|
|
180
|
+
claude: { kind: 'execFile', command: 'claude', args: ['--version'] },
|
|
181
|
+
codex: { kind: 'execFile', command: 'codex', args: ['--version'] },
|
|
182
|
+
antigravity: { kind: 'execFile', command: 'agy', args: ['--version'] },
|
|
183
|
+
opencode: { kind: 'execFile', command: 'opencode', args: ['--version'] },
|
|
184
|
+
gemini: { kind: 'execFile', command: 'gemini', args: ['--version'] },
|
|
185
|
+
copilot: {
|
|
186
|
+
kind: 'delegated',
|
|
187
|
+
probe: async () => (await (0, copilot_executable_1.resolveCopilotExecutable)())?.version ?? null,
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
let freshnessCache = null;
|
|
191
|
+
let freshnessInFlight = null;
|
|
192
|
+
/**
|
|
193
|
+
* Run one probe. Resolves null on any failure, and **without spawning anything**
|
|
194
|
+
* when the command does not resolve to an absolute path (DR4-010 (2)).
|
|
195
|
+
*/
|
|
196
|
+
function runDetectorVersionProbe(probe) {
|
|
197
|
+
if (probe.kind === 'delegated') {
|
|
198
|
+
return probe.probe().catch(() => null);
|
|
199
|
+
}
|
|
200
|
+
const executable = (0, copilot_executable_1.findExecutableOnPath)(probe.command);
|
|
201
|
+
// Skip, do not fall back to the bare name: handing an unresolved command to
|
|
202
|
+
// execFile is exactly the PATH-decides-the-binary case DR4-010 removes.
|
|
203
|
+
if (!executable)
|
|
204
|
+
return Promise.resolve(null);
|
|
205
|
+
return new Promise((resolve) => {
|
|
206
|
+
(0, child_process_1.execFile)(executable, [...probe.args], {
|
|
207
|
+
timeout: exports.DETECTOR_VERSION_PROBE_TIMEOUT_MS,
|
|
208
|
+
maxBuffer: DETECTOR_VERSION_PROBE_MAX_BUFFER_BYTES,
|
|
209
|
+
env: (0, env_sanitizer_1.sanitizeEnvForChildProcess)(),
|
|
210
|
+
}, (error, stdout, stderr) => {
|
|
211
|
+
if (error) {
|
|
212
|
+
resolve(null);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
resolve(parseCliVersion(`${stdout ?? ''}\n${stderr ?? ''}`));
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
async function computeDetectorFreshness() {
|
|
220
|
+
const tools = Object.keys(exports.DETECTOR_VERSION_PROBES).sort();
|
|
221
|
+
return Promise.all(tools.map(async (tool) => {
|
|
222
|
+
const verifiedAgainst = verified_against_1.DETECTOR_VERIFIED_AGAINST[tool]?.version ?? 'unmeasured';
|
|
223
|
+
const installed = await runDetectorVersionProbe(exports.DETECTOR_VERSION_PROBES[tool]);
|
|
224
|
+
const baseline = parseVerifiedAgainstVersion(verifiedAgainst);
|
|
225
|
+
return {
|
|
226
|
+
tool,
|
|
227
|
+
installed,
|
|
228
|
+
verifiedAgainst,
|
|
229
|
+
stale: installed !== null && baseline !== null && compareCliVersions(installed, baseline) > 0,
|
|
230
|
+
};
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* The full freshness report, computed once per process and cached. Concurrent
|
|
235
|
+
* first callers share one probe.
|
|
236
|
+
*
|
|
237
|
+
* **This awaits child processes — never call it from a request path.** Use
|
|
238
|
+
* {@link getDetectorStalenessSnapshot} there. Kept for `commandmate status`,
|
|
239
|
+
* `npm run check:detector-freshness` and tests, and as the single implementation
|
|
240
|
+
* both entry points share.
|
|
241
|
+
*/
|
|
242
|
+
async function getDetectorFreshness() {
|
|
243
|
+
if (freshnessCache !== null)
|
|
244
|
+
return freshnessCache;
|
|
245
|
+
if (freshnessInFlight)
|
|
246
|
+
return freshnessInFlight;
|
|
247
|
+
freshnessInFlight = computeDetectorFreshness();
|
|
248
|
+
try {
|
|
249
|
+
freshnessCache = await freshnessInFlight;
|
|
250
|
+
return freshnessCache;
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
freshnessInFlight = null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/** Reduce a report to the wire shape: stale tools only. */
|
|
257
|
+
function toDetectorStaleness(rows) {
|
|
258
|
+
const staleness = {};
|
|
259
|
+
for (const row of rows) {
|
|
260
|
+
if (!row.stale || row.installed === null)
|
|
261
|
+
continue;
|
|
262
|
+
staleness[row.tool] = { installed: row.installed, verifiedAgainst: row.verifiedAgainst };
|
|
263
|
+
}
|
|
264
|
+
return staleness;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* The staleness this process already knows, or `undefined` plus a background
|
|
268
|
+
* probe when it knows nothing yet. **Never awaits a child process** (§4 D2,
|
|
269
|
+
* DR3-013 (a)(b)(c)).
|
|
270
|
+
*
|
|
271
|
+
* `undefined` is "not known yet", not "nothing is stale" — see the module doc.
|
|
272
|
+
* The returned object is `{}` once the cache is warm and nothing is stale, which
|
|
273
|
+
* is how a caller tells the two apart.
|
|
274
|
+
*/
|
|
275
|
+
function getDetectorStalenessSnapshot() {
|
|
276
|
+
if (freshnessCache !== null)
|
|
277
|
+
return toDetectorStaleness(freshnessCache);
|
|
278
|
+
// Fire and forget. No in-flight check here on purpose: getDetectorFreshness
|
|
279
|
+
// owns that slot and hands a concurrent caller the promise that is already
|
|
280
|
+
// running, so a second guard would be a copy of an invariant that lives one
|
|
281
|
+
// function down — and a copy is what goes stale. It swallows its own failures,
|
|
282
|
+
// so nothing here needs the result.
|
|
283
|
+
void getDetectorFreshness().catch(() => []);
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
/** Clear the process-level probe cache (tests, and any future cache-control wiring). */
|
|
287
|
+
function clearDetectorVersionProbeCache() {
|
|
288
|
+
freshnessCache = null;
|
|
289
|
+
freshnessInFlight = null;
|
|
290
|
+
}
|