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
|
@@ -68,17 +68,51 @@
|
|
|
68
68
|
* left alone entirely and the session starts without hooks — losing events is
|
|
69
69
|
* recoverable, overwriting a user's settings is not.
|
|
70
70
|
*
|
|
71
|
+
* Since Issue #1904 the write is a temp file plus `rename` under a lock file in
|
|
72
|
+
* the same directory, because `commandmate start --issue N --auto-port` makes
|
|
73
|
+
* several servers writing this one file a supported workflow and
|
|
74
|
+
* `writeFileSync` truncates before it writes. A lock this process cannot take
|
|
75
|
+
* means starting without hooks, same as every other failure here.
|
|
76
|
+
*
|
|
77
|
+
* ## What one machine-global file is *not* allowed to fix (Issue #1904)
|
|
78
|
+
*
|
|
79
|
+
* Measurement 5 solves correlation. Issue #1904 found the same argument applies
|
|
80
|
+
* to two more values that were being fixed at write time, and one that was not
|
|
81
|
+
* a value at all:
|
|
82
|
+
*
|
|
83
|
+
* - **The port.** A development server on 3011 rewrote the file and every
|
|
84
|
+
* copilot session on the machine — including the one on 3000 — started
|
|
85
|
+
* posting to 3011. It now travels in {@link COPILOT_HOOK_PORT_ENV}, behind a
|
|
86
|
+
* numeric guard, with no default to fall back to.
|
|
87
|
+
* - **The relay script's path** stays an absolute literal, because it names
|
|
88
|
+
* the program the hook executes and that is not a decision to delegate to
|
|
89
|
+
* the environment (設計方針書 §10.8 決定 2). What changed is *when* it is
|
|
90
|
+
* checked: `[ -x … ]` at fire time, falling back to the inline `curl` that
|
|
91
|
+
* was already written for a package layout without the script. A removed
|
|
92
|
+
* checkout no longer takes every session's events with it.
|
|
93
|
+
* - **`config.json`.** Copilot 1.0.80 migrates a `hooks` key out of it and
|
|
94
|
+
* **over** `settings.json` at startup, so an operator following
|
|
95
|
+
* `copilot help config` silently loses everything written here.
|
|
96
|
+
* {@link inspectCopilotConfigHooks} finds that key first and the launch goes
|
|
97
|
+
* ahead without hooks rather than writing a file that is about to be erased.
|
|
98
|
+
*
|
|
99
|
+
* Scheme and host stay module constants. {@link curlArgumentPreamble} attaches
|
|
100
|
+
* the bearer header without looking at where it is going, so a constant
|
|
101
|
+
* destination is what keeps the token on loopback (設計方針書 §10.7).
|
|
102
|
+
*
|
|
71
103
|
* @module lib/hooks/sources/copilot/hook-settings
|
|
72
104
|
*/
|
|
73
105
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
74
|
-
exports.COPILOT_EVENT_HOOKS = exports.COPILOT_PERMISSION_HOOK_EVENT = exports.COPILOT_AUTH_TOKEN_ENV = exports.COPILOT_INSTANCE_ID_ENV = exports.COPILOT_WORKTREE_ID_ENV = exports.COPILOT_HOOK_CURL_TIMEOUT_SECONDS = exports.COPILOT_HOOK_TIMEOUT_SECONDS = exports.COPILOT_HOOK_MARKER = exports.COPILOT_LAUNCH_COMMAND = void 0;
|
|
106
|
+
exports.COPILOT_SETTINGS_BACKUP_SUFFIX = exports.COPILOT_SETTINGS_LOCK_STALE_MS = exports.COPILOT_SETTINGS_LOCK_BASENAME = exports.CopilotConfigHooksShadowError = exports.COPILOT_EVENT_HOOKS = exports.COPILOT_PERMISSION_HOOK_EVENT = exports.COPILOT_HOOK_PORT_ENV = exports.COPILOT_AUTH_TOKEN_ENV = exports.COPILOT_INSTANCE_ID_ENV = exports.COPILOT_WORKTREE_ID_ENV = exports.COPILOT_HOOK_CURL_TIMEOUT_SECONDS = exports.COPILOT_HOOK_TIMEOUT_SECONDS = exports.COPILOT_HOOK_MARKER = exports.COPILOT_LAUNCH_COMMAND = void 0;
|
|
75
107
|
exports.getCopilotHomeDirectory = getCopilotHomeDirectory;
|
|
76
108
|
exports.getCopilotSettingsPath = getCopilotSettingsPath;
|
|
109
|
+
exports.getCopilotConfigPath = getCopilotConfigPath;
|
|
77
110
|
exports.buildCopilotEventCommand = buildCopilotEventCommand;
|
|
78
111
|
exports.buildCopilotPermissionCommand = buildCopilotPermissionCommand;
|
|
79
112
|
exports.buildCopilotHookSettings = buildCopilotHookSettings;
|
|
80
113
|
exports.mergeCopilotHookSettings = mergeCopilotHookSettings;
|
|
81
114
|
exports.readCopilotSettings = readCopilotSettings;
|
|
115
|
+
exports.inspectCopilotConfigHooks = inspectCopilotConfigHooks;
|
|
82
116
|
exports.writeCopilotHookSettings = writeCopilotHookSettings;
|
|
83
117
|
exports.buildCopilotHookEnvironment = buildCopilotHookEnvironment;
|
|
84
118
|
exports.isCopilotHookInjectionEnabled = isCopilotHookInjectionEnabled;
|
|
@@ -92,6 +126,7 @@ const env_1 = require("../../../../lib/env");
|
|
|
92
126
|
const hook_settings_generator_1 = require("../../../../lib/hooks/hook-settings-generator");
|
|
93
127
|
const path_validator_1 = require("../../../../lib/security/path-validator");
|
|
94
128
|
const logger_1 = require("../../../../lib/logger");
|
|
129
|
+
const launch_command_1 = require("../launch-command");
|
|
95
130
|
const tool_id_1 = require("./tool-id");
|
|
96
131
|
const logger = (0, logger_1.createLogger)('lib/hooks/sources/copilot/hook-settings');
|
|
97
132
|
/** Loopback: the agent runs on the machine the server runs on. */
|
|
@@ -143,6 +178,21 @@ exports.COPILOT_WORKTREE_ID_ENV = 'CM_AGENT_WORKTREE_ID';
|
|
|
143
178
|
exports.COPILOT_INSTANCE_ID_ENV = 'CM_AGENT_INSTANCE_ID';
|
|
144
179
|
/** Bearer token variable, read at fire time exactly as the relay script reads it. */
|
|
145
180
|
exports.COPILOT_AUTH_TOKEN_ENV = 'CM_AUTH_TOKEN';
|
|
181
|
+
/**
|
|
182
|
+
* Carries the receiving server's port, the same way (Issue #1904).
|
|
183
|
+
*
|
|
184
|
+
* `~/.copilot/settings.json` is one file for the whole machine, so a port fixed
|
|
185
|
+
* at write time is the port of whichever server wrote last. CommandMate
|
|
186
|
+
* supports several servers at once — `commandmate start --issue N --auto-port`
|
|
187
|
+
* is a documented workflow — and the measured consequence was every copilot
|
|
188
|
+
* session on the machine posting to a development server on port 3011.
|
|
189
|
+
*
|
|
190
|
+
* Only the port moves. `HOOK_HOST`, the scheme and the receiver paths stay
|
|
191
|
+
* literals in the generated command: they are what decides where the bearer
|
|
192
|
+
* header goes, and {@link curlArgumentPreamble} attaches that header without
|
|
193
|
+
* looking at the destination. See 設計方針書 §10.8 決定 1.
|
|
194
|
+
*/
|
|
195
|
+
exports.COPILOT_HOOK_PORT_ENV = launch_command_1.HOOK_PORT_ENV_VAR;
|
|
146
196
|
/**
|
|
147
197
|
* Copilot's name for the event that gates a tool call (#1757 §5.2.4).
|
|
148
198
|
*
|
|
@@ -190,13 +240,30 @@ function getCopilotHomeDirectory() {
|
|
|
190
240
|
function getCopilotSettingsPath() {
|
|
191
241
|
return (0, path_1.join)(getCopilotHomeDirectory(), 'settings.json');
|
|
192
242
|
}
|
|
193
|
-
|
|
194
|
-
|
|
243
|
+
/**
|
|
244
|
+
* The file copilot manages for itself, and the reason {@link writeCopilotHookSettings}
|
|
245
|
+
* sometimes declines to write anything (Issue #1904).
|
|
246
|
+
*
|
|
247
|
+
* Never written here. It is read for one key — see
|
|
248
|
+
* {@link inspectCopilotConfigHooks}.
|
|
249
|
+
*/
|
|
250
|
+
function getCopilotConfigPath() {
|
|
251
|
+
return (0, path_1.join)(getCopilotHomeDirectory(), 'config.json');
|
|
195
252
|
}
|
|
196
253
|
/**
|
|
197
254
|
* The guard every generated command opens with.
|
|
198
255
|
*
|
|
199
|
-
*
|
|
256
|
+
* Two conditions, in this order:
|
|
257
|
+
*
|
|
258
|
+
* 1. **No worktree id — not a session CommandMate started.** Exit quietly.
|
|
259
|
+
* 2. **No usable port.** `CM_HOOK_PORT` is what the command builds its URL
|
|
260
|
+
* from since Issue #1904, and a value that is not a run of digits is a URL
|
|
261
|
+
* this hook must not assemble. Spelled without a `${…:-…}` default on
|
|
262
|
+
* purpose: a default would send the payload — and the bearer header — to
|
|
263
|
+
* some other port in silence whenever CommandMate forgot to set the
|
|
264
|
+
* variable. Not firing is the safe answer (設計方針書 §10.8 決定 3).
|
|
265
|
+
*
|
|
266
|
+
* Both consume stdin before exiting rather than exiting straight away: copilot
|
|
200
267
|
* writes the payload to the hook's stdin, and a hook that exits first turns
|
|
201
268
|
* that write into an EPIPE on the agent's side.
|
|
202
269
|
*
|
|
@@ -204,7 +271,8 @@ function receiverUrl(path, options) {
|
|
|
204
271
|
*/
|
|
205
272
|
function guardPrelude(onSkip = '') {
|
|
206
273
|
return (`: ${exports.COPILOT_HOOK_MARKER}; ` +
|
|
207
|
-
`if [ -z "\${${exports.COPILOT_WORKTREE_ID_ENV}:-}" ]; then cat >/dev/null; ${onSkip}exit 0; fi; `
|
|
274
|
+
`if [ -z "\${${exports.COPILOT_WORKTREE_ID_ENV}:-}" ]; then cat >/dev/null; ${onSkip}exit 0; fi; ` +
|
|
275
|
+
`case "$${exports.COPILOT_HOOK_PORT_ENV}" in ''|*[!0-9]*) cat >/dev/null; ${onSkip}exit 0;; esac; `);
|
|
208
276
|
}
|
|
209
277
|
/** `"$CM_AGENT_INSTANCE_ID"`, defaulting to the primary instance. */
|
|
210
278
|
const INSTANCE_EXPANSION = `"\${${exports.COPILOT_INSTANCE_ID_ENV}:-${tool_id_1.COPILOT_CLI_TOOL_ID}}"`;
|
|
@@ -217,25 +285,58 @@ const WORKTREE_EXPANSION = `"$${exports.COPILOT_WORKTREE_ID_ENV}"`;
|
|
|
217
285
|
* Written this way rather than as `${TOKEN:+-H "…"}` because that expansion
|
|
218
286
|
* word-splits into four arguments and sends a header of `Authorization:`
|
|
219
287
|
* alone. The relay script solves it identically.
|
|
288
|
+
*
|
|
289
|
+
* `-f` since Issue #1904, and it is not cosmetic on the `PreToolUse` path:
|
|
290
|
+
* without it a 400 body such as `{"error":"cwd rejected: …"}` is printed to
|
|
291
|
+
* stdout and copilot reads **the receiver's error message as its verdict**.
|
|
292
|
+
* With `-f` curl prints nothing and exits 22, which the callers turn into an
|
|
293
|
+
* explicit no-opinion `{}` plus one line on stderr. The relay script has always
|
|
294
|
+
* used `-fsS` for the same reason.
|
|
220
295
|
*/
|
|
221
296
|
function curlArgumentPreamble() {
|
|
222
|
-
return (`set -- -
|
|
297
|
+
return (`set -- -fsS -m ${exports.COPILOT_HOOK_CURL_TIMEOUT_SECONDS} -X POST ` +
|
|
223
298
|
`-H 'Content-Type: application/json'; ` +
|
|
224
299
|
`if [ -n "\${${exports.COPILOT_AUTH_TOKEN_ENV}:-}" ]; then ` +
|
|
225
300
|
`set -- "$@" -H "Authorization: Bearer $${exports.COPILOT_AUTH_TOKEN_ENV}"; fi; `);
|
|
226
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* `http://127.0.0.1:` + `"$CM_HOOK_PORT"` + the rest, as one shell word.
|
|
304
|
+
*
|
|
305
|
+
* Everything except the port is a single-quoted literal, so the only thing the
|
|
306
|
+
* environment can move is the port number the {@link guardPrelude} has already
|
|
307
|
+
* proved to be digits. Host and scheme staying constant is what keeps the
|
|
308
|
+
* bearer header pointed at loopback (設計方針書 §10.7 / §10.8).
|
|
309
|
+
*/
|
|
310
|
+
function runtimeUrl(tail) {
|
|
311
|
+
return (`${(0, hook_settings_generator_1.shellQuote)(`http://${HOOK_HOST}:`)}"$${exports.COPILOT_HOOK_PORT_ENV}"${(0, hook_settings_generator_1.shellQuote)(tail)}`);
|
|
312
|
+
}
|
|
227
313
|
/**
|
|
228
314
|
* A receiver URL with the correlation keys appended at fire time.
|
|
229
315
|
*
|
|
230
|
-
* The static
|
|
231
|
-
*
|
|
232
|
-
* ids are validated before injection
|
|
233
|
-
* draw from `[A-Za-z0-9_-]`, so no
|
|
316
|
+
* The static halves are single-quoted and the variables are double-quoted next
|
|
317
|
+
* to them, so the shell concatenates the lot into one word without
|
|
318
|
+
* re-splitting. Both ids are validated before injection
|
|
319
|
+
* ({@link buildCopilotLaunchCommand}) and draw from `[A-Za-z0-9_-]`, so no
|
|
320
|
+
* percent-encoding is required.
|
|
234
321
|
*/
|
|
235
322
|
function runtimeCorrelatedUrl(base) {
|
|
236
|
-
return (`${(
|
|
323
|
+
return (`${runtimeUrl(`${base}?tool=${tool_id_1.COPILOT_CLI_TOOL_ID}&worktreeId=`)}${WORKTREE_EXPANSION}` +
|
|
237
324
|
`'&instanceId='${INSTANCE_EXPANSION}`);
|
|
238
325
|
}
|
|
326
|
+
/**
|
|
327
|
+
* One line on stderr naming why a POST produced nothing, and curl's exit code.
|
|
328
|
+
*
|
|
329
|
+
* A hook whose delivery fails in complete silence is a `commandmate wait` that
|
|
330
|
+
* never returns and an operator with nothing to read. The relay script prints
|
|
331
|
+
* its own equivalent line; these are the inline paths, which used to end in
|
|
332
|
+
* `|| true` and `2>/dev/null`.
|
|
333
|
+
*
|
|
334
|
+
* The marker leads so `grep` finds CommandMate's lines in a transcript the same
|
|
335
|
+
* way it finds CommandMate's entries in the settings file.
|
|
336
|
+
*/
|
|
337
|
+
function reportFailure(reasonCode) {
|
|
338
|
+
return (`rc=$?; printf '%s\\n' "${exports.COPILOT_HOOK_MARKER}: ${reasonCode} rc=$rc" >&2`);
|
|
339
|
+
}
|
|
239
340
|
/**
|
|
240
341
|
* The command for one observation event.
|
|
241
342
|
*
|
|
@@ -246,28 +347,39 @@ function runtimeCorrelatedUrl(base) {
|
|
|
246
347
|
* `normalizeEvent` is what turns `hook_event_name` into a word (S1/S2).
|
|
247
348
|
*/
|
|
248
349
|
function buildCopilotEventCommand(event, options = {}) {
|
|
249
|
-
const url = receiverUrl(hook_settings_generator_1.AGENT_EVENT_PATH, options);
|
|
250
350
|
const relay = options.relayScriptPath === undefined ? (0, hook_settings_generator_1.resolveRelayScriptPath)() : options.relayScriptPath;
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
'--stdin-json',
|
|
266
|
-
].join(' '));
|
|
267
|
-
}
|
|
351
|
+
const inline = curlArgumentPreamble() +
|
|
352
|
+
`curl "$@" --data-binary @- ${runtimeCorrelatedUrl(hook_settings_generator_1.AGENT_EVENT_PATH)} >/dev/null 2>&1 || ` +
|
|
353
|
+
`{ ${reportFailure('agent_event_post_failed')}; }`;
|
|
354
|
+
if (!relay)
|
|
355
|
+
return guardPrelude() + inline;
|
|
356
|
+
// The `[ -x … ]` is Issue #1904. `~/.copilot/settings.json` is one file for
|
|
357
|
+
// the whole machine, so the absolute path in it is whichever checkout's
|
|
358
|
+
// server wrote last — and when that checkout is a worktree that has since
|
|
359
|
+
// been removed, every copilot session on the machine loses every event with
|
|
360
|
+
// nothing to read. Deciding at fire time costs one `test` and falls back to
|
|
361
|
+
// the branch that was already written for a package layout with no relay.
|
|
362
|
+
// The path stays a literal rather than moving into the environment: it names
|
|
363
|
+
// the program the hook executes, and that is not a decision to hand to
|
|
364
|
+
// whoever can set a variable (設計方針書 §10.8 決定 2).
|
|
268
365
|
return (guardPrelude() +
|
|
269
|
-
|
|
270
|
-
|
|
366
|
+
`if [ -x ${(0, hook_settings_generator_1.shellQuote)(relay)} ]; then ` +
|
|
367
|
+
[
|
|
368
|
+
(0, hook_settings_generator_1.shellQuote)(relay),
|
|
369
|
+
'--tool',
|
|
370
|
+
(0, hook_settings_generator_1.shellQuote)(tool_id_1.COPILOT_CLI_TOOL_ID),
|
|
371
|
+
'--event',
|
|
372
|
+
(0, hook_settings_generator_1.shellQuote)(event),
|
|
373
|
+
'--worktree-id',
|
|
374
|
+
WORKTREE_EXPANSION,
|
|
375
|
+
'--instance-id',
|
|
376
|
+
INSTANCE_EXPANSION,
|
|
377
|
+
'--url',
|
|
378
|
+
runtimeUrl(hook_settings_generator_1.AGENT_EVENT_PATH),
|
|
379
|
+
'--stdin-json',
|
|
380
|
+
].join(' ') +
|
|
381
|
+
`; exit 0; fi; ` +
|
|
382
|
+
inline);
|
|
271
383
|
}
|
|
272
384
|
/**
|
|
273
385
|
* The command for `PreToolUse`, whose stdout copilot obeys.
|
|
@@ -284,11 +396,15 @@ function buildCopilotEventCommand(event, options = {}) {
|
|
|
284
396
|
* session CommandMate did not start all have to look like "no opinion", which
|
|
285
397
|
* is the measured fail-safe.
|
|
286
398
|
*/
|
|
287
|
-
function buildCopilotPermissionCommand(
|
|
288
|
-
|
|
399
|
+
function buildCopilotPermissionCommand(
|
|
400
|
+
// Unused since Issue #1904 moved the port into the environment: nothing this
|
|
401
|
+
// command says depends on the writing server any more. Kept so the two
|
|
402
|
+
// builders stay callable the same way from {@link buildCopilotHookSettings}.
|
|
403
|
+
_options = {}) {
|
|
289
404
|
return (guardPrelude(`printf '{}'; `) +
|
|
290
405
|
curlArgumentPreamble() +
|
|
291
|
-
`out=$(curl "$@" --data-binary @- ${runtimeCorrelatedUrl(
|
|
406
|
+
`out=$(curl "$@" --data-binary @- ${runtimeCorrelatedUrl(hook_settings_generator_1.PERMISSION_REQUEST_PATH)} ` +
|
|
407
|
+
`2>/dev/null) || { ${reportFailure('permission_request_failed')}; out=''; }; ` +
|
|
292
408
|
`[ -n "$out" ] || out='{}'; printf '%s' "$out"`);
|
|
293
409
|
}
|
|
294
410
|
/**
|
|
@@ -372,6 +488,17 @@ function mergeCopilotHookSettings(existing, generated) {
|
|
|
372
488
|
}
|
|
373
489
|
return { ...existing, hooks: merged };
|
|
374
490
|
}
|
|
491
|
+
/** `''` when the file is not there; anything else throws. */
|
|
492
|
+
function readFileOrEmpty(path) {
|
|
493
|
+
try {
|
|
494
|
+
return (0, fs_1.readFileSync)(path, 'utf8');
|
|
495
|
+
}
|
|
496
|
+
catch (error) {
|
|
497
|
+
if (error.code === 'ENOENT')
|
|
498
|
+
return '';
|
|
499
|
+
throw error;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
375
502
|
/**
|
|
376
503
|
* Read the user's `settings.json`.
|
|
377
504
|
*
|
|
@@ -380,15 +507,9 @@ function mergeCopilotHookSettings(existing, generated) {
|
|
|
380
507
|
* the caller turns that into "start without hooks", never into a rewrite
|
|
381
508
|
*/
|
|
382
509
|
function readCopilotSettings(settingsPath) {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
}
|
|
387
|
-
catch (error) {
|
|
388
|
-
if (error.code === 'ENOENT')
|
|
389
|
-
return {};
|
|
390
|
-
throw error;
|
|
391
|
-
}
|
|
510
|
+
return parseCopilotSettings(readFileOrEmpty(settingsPath));
|
|
511
|
+
}
|
|
512
|
+
function parseCopilotSettings(raw) {
|
|
392
513
|
if (raw.trim() === '')
|
|
393
514
|
return {};
|
|
394
515
|
const parsed = JSON.parse(raw);
|
|
@@ -397,18 +518,235 @@ function readCopilotSettings(settingsPath) {
|
|
|
397
518
|
}
|
|
398
519
|
return parsed;
|
|
399
520
|
}
|
|
521
|
+
/**
|
|
522
|
+
* Strip `//` and block comments from JSONC, leaving string literals alone.
|
|
523
|
+
*
|
|
524
|
+
* `~/.copilot/config.json` is not JSON. Copilot writes two comment lines at the
|
|
525
|
+
* top of the file it manages — measured verbatim on 1.0.80:
|
|
526
|
+
*
|
|
527
|
+
* ```text
|
|
528
|
+
* // User settings belong in settings.json.
|
|
529
|
+
* // This file is managed automatically.
|
|
530
|
+
* ```
|
|
531
|
+
*
|
|
532
|
+
* so `JSON.parse` on the real file throws at character 0. A detector that
|
|
533
|
+
* treated that as "unreadable" would never see the `hooks` key it exists to
|
|
534
|
+
* find, which is the whole of {@link inspectCopilotConfigHooks}.
|
|
535
|
+
*/
|
|
536
|
+
function stripJsonComments(raw) {
|
|
537
|
+
let out = '';
|
|
538
|
+
let inString = false;
|
|
539
|
+
let escaped = false;
|
|
540
|
+
for (let i = 0; i < raw.length; i += 1) {
|
|
541
|
+
const char = raw[i];
|
|
542
|
+
if (inString) {
|
|
543
|
+
out += char;
|
|
544
|
+
if (escaped)
|
|
545
|
+
escaped = false;
|
|
546
|
+
else if (char === '\\')
|
|
547
|
+
escaped = true;
|
|
548
|
+
else if (char === '"')
|
|
549
|
+
inString = false;
|
|
550
|
+
continue;
|
|
551
|
+
}
|
|
552
|
+
if (char === '"') {
|
|
553
|
+
inString = true;
|
|
554
|
+
out += char;
|
|
555
|
+
continue;
|
|
556
|
+
}
|
|
557
|
+
if (char === '/' && raw[i + 1] === '/') {
|
|
558
|
+
while (i < raw.length && raw[i] !== '\n')
|
|
559
|
+
i += 1;
|
|
560
|
+
out += '\n';
|
|
561
|
+
continue;
|
|
562
|
+
}
|
|
563
|
+
if (char === '/' && raw[i + 1] === '*') {
|
|
564
|
+
i += 2;
|
|
565
|
+
while (i < raw.length && !(raw[i] === '*' && raw[i + 1] === '/'))
|
|
566
|
+
i += 1;
|
|
567
|
+
i += 1;
|
|
568
|
+
continue;
|
|
569
|
+
}
|
|
570
|
+
out += char;
|
|
571
|
+
}
|
|
572
|
+
return out;
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Look for the key that silently erases everything this module writes
|
|
576
|
+
* (Issue #1904).
|
|
577
|
+
*
|
|
578
|
+
* Measured on copilot 1.0.80: with a marker hook in **both** files, only the
|
|
579
|
+
* `config.json` one fired, and the `settings.json` read back immediately
|
|
580
|
+
* afterwards held six `config.json` entries and none of the settings ones.
|
|
581
|
+
* `copilot help config` still documents `hooks` as a `config.json` key, so an
|
|
582
|
+
* operator who follows the published documentation loses CommandMate's hooks —
|
|
583
|
+
* events and Auto-Yes both — with no error anywhere.
|
|
584
|
+
*/
|
|
585
|
+
function inspectCopilotConfigHooks(configPath) {
|
|
586
|
+
const raw = readFileOrEmpty(configPath);
|
|
587
|
+
if (raw.trim() === '')
|
|
588
|
+
return 'absent';
|
|
589
|
+
let parsed;
|
|
590
|
+
try {
|
|
591
|
+
parsed = JSON.parse(stripJsonComments(raw));
|
|
592
|
+
}
|
|
593
|
+
catch {
|
|
594
|
+
return 'unreadable';
|
|
595
|
+
}
|
|
596
|
+
if (!isPlainObject(parsed))
|
|
597
|
+
return 'unreadable';
|
|
598
|
+
const hooks = parsed.hooks;
|
|
599
|
+
if (hooks === undefined || hooks === null)
|
|
600
|
+
return 'absent';
|
|
601
|
+
if (isPlainObject(hooks) && Object.keys(hooks).length === 0)
|
|
602
|
+
return 'absent';
|
|
603
|
+
if (Array.isArray(hooks) && hooks.length === 0)
|
|
604
|
+
return 'absent';
|
|
605
|
+
return 'present';
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Thrown instead of writing a settings file copilot is about to overwrite.
|
|
609
|
+
*
|
|
610
|
+
* A distinct type so {@link buildCopilotLaunchCommand} can log this as its own
|
|
611
|
+
* reason code: "your config.json shadows the file we write" is a thing an
|
|
612
|
+
* operator can act on, and `copilot-hook-settings-write-failed` is not.
|
|
613
|
+
*/
|
|
614
|
+
class CopilotConfigHooksShadowError extends Error {
|
|
615
|
+
configPath;
|
|
616
|
+
constructor(configPath) {
|
|
617
|
+
super(`copilot config.json still has a "hooks" key (${configPath}); ` +
|
|
618
|
+
'copilot migrates it over settings.json at startup, so CommandMate is not writing hooks this launch');
|
|
619
|
+
this.configPath = configPath;
|
|
620
|
+
this.name = 'CopilotConfigHooksShadowError';
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
exports.CopilotConfigHooksShadowError = CopilotConfigHooksShadowError;
|
|
624
|
+
/** Where the cross-process lock lives, next to the file it guards. */
|
|
625
|
+
exports.COPILOT_SETTINGS_LOCK_BASENAME = '.cmate.lock';
|
|
626
|
+
/**
|
|
627
|
+
* How old a lock has to be before it is treated as a crashed process's leftover.
|
|
628
|
+
*
|
|
629
|
+
* The critical section is a read, a merge and a rename of a file measured in
|
|
630
|
+
* kilobytes, so a lock that has been held for this long is not a slow write; it
|
|
631
|
+
* is a server that died between `openSync` and `unlinkSync`. Without a ceiling
|
|
632
|
+
* that leftover would disable copilot hooks on the machine until somebody
|
|
633
|
+
* deleted the file by hand.
|
|
634
|
+
*/
|
|
635
|
+
exports.COPILOT_SETTINGS_LOCK_STALE_MS = 10_000;
|
|
636
|
+
/** Suffix of the one generation of the user's file kept before a rewrite. */
|
|
637
|
+
exports.COPILOT_SETTINGS_BACKUP_SUFFIX = '.cmate-backup';
|
|
638
|
+
/**
|
|
639
|
+
* Run `write` with `~/.copilot` held against other CommandMate servers.
|
|
640
|
+
*
|
|
641
|
+
* `commandmate start --issue N --auto-port` makes several servers on one
|
|
642
|
+
* machine a supported workflow, and every one of them writes this same file.
|
|
643
|
+
* Within a process the writes are already serialised — everything here is
|
|
644
|
+
* synchronous — so the lock exists for the cross-process case (設計方針書
|
|
645
|
+
* §10.9 決定 2).
|
|
646
|
+
*
|
|
647
|
+
* @throws When the lock is held and fresh. The caller turns that into "start
|
|
648
|
+
* without hooks", which is the same fail-open every other failure here takes.
|
|
649
|
+
*/
|
|
650
|
+
function withCopilotSettingsLock(directory, write) {
|
|
651
|
+
const lockPath = (0, path_1.join)(directory, exports.COPILOT_SETTINGS_LOCK_BASENAME);
|
|
652
|
+
let fd;
|
|
653
|
+
try {
|
|
654
|
+
fd = (0, fs_1.openSync)(lockPath, 'wx', 0o600);
|
|
655
|
+
}
|
|
656
|
+
catch (error) {
|
|
657
|
+
if (error.code !== 'EEXIST')
|
|
658
|
+
throw error;
|
|
659
|
+
const heldForMs = Date.now() - (0, fs_1.statSync)(lockPath).mtimeMs;
|
|
660
|
+
if (heldForMs < exports.COPILOT_SETTINGS_LOCK_STALE_MS) {
|
|
661
|
+
throw new Error(`copilot settings.json is locked by another CommandMate server (${lockPath})`);
|
|
662
|
+
}
|
|
663
|
+
logger.warn('copilot-hook-settings-lock-stale', { lockPath, heldForMs });
|
|
664
|
+
(0, fs_1.unlinkSync)(lockPath);
|
|
665
|
+
fd = (0, fs_1.openSync)(lockPath, 'wx', 0o600);
|
|
666
|
+
}
|
|
667
|
+
try {
|
|
668
|
+
(0, fs_1.writeSync)(fd, `${process.pid}\n`);
|
|
669
|
+
}
|
|
670
|
+
finally {
|
|
671
|
+
(0, fs_1.closeSync)(fd);
|
|
672
|
+
}
|
|
673
|
+
try {
|
|
674
|
+
return write();
|
|
675
|
+
}
|
|
676
|
+
finally {
|
|
677
|
+
try {
|
|
678
|
+
(0, fs_1.unlinkSync)(lockPath);
|
|
679
|
+
}
|
|
680
|
+
catch {
|
|
681
|
+
// Already gone: another server judged this lock stale. Nothing to undo.
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* Replace a file's contents without ever leaving it half-written.
|
|
687
|
+
*
|
|
688
|
+
* `writeFileSync` truncates first, so a process that dies mid-write leaves the
|
|
689
|
+
* operator with a truncated `settings.json` — and this module's own docstring
|
|
690
|
+
* says overwriting a user's settings is the unrecoverable failure. A temp file
|
|
691
|
+
* in the same directory plus `rename` is atomic on every filesystem CommandMate
|
|
692
|
+
* runs on (設計方針書 §10.9 決定 1).
|
|
693
|
+
*/
|
|
694
|
+
function writeFileAtomic(path, contents) {
|
|
695
|
+
const temp = `${path}.${process.pid}.tmp`;
|
|
696
|
+
try {
|
|
697
|
+
(0, fs_1.writeFileSync)(temp, contents, { mode: 0o600 });
|
|
698
|
+
(0, fs_1.renameSync)(temp, path);
|
|
699
|
+
}
|
|
700
|
+
catch (error) {
|
|
701
|
+
try {
|
|
702
|
+
(0, fs_1.unlinkSync)(temp);
|
|
703
|
+
}
|
|
704
|
+
catch {
|
|
705
|
+
// The temp file never got created, or is already gone.
|
|
706
|
+
}
|
|
707
|
+
throw error;
|
|
708
|
+
}
|
|
709
|
+
}
|
|
400
710
|
/**
|
|
401
711
|
* Merge the generated hooks into copilot's settings file and return its path.
|
|
402
712
|
*
|
|
403
|
-
* @throws
|
|
404
|
-
* a
|
|
713
|
+
* @throws {CopilotConfigHooksShadowError} When copilot's `config.json` still
|
|
714
|
+
* has a `hooks` key, which it migrates over this file at startup
|
|
715
|
+
* @throws Anything the read, the merge or the write throws, plus a lock the
|
|
716
|
+
* file's other writers are holding. Callers must treat a throw as "launch
|
|
717
|
+
* without hooks" (fail-open).
|
|
405
718
|
*/
|
|
406
719
|
function writeCopilotHookSettings(options = {}) {
|
|
407
720
|
const settingsPath = options.settingsPath ?? getCopilotSettingsPath();
|
|
408
|
-
|
|
721
|
+
// Next to the settings file rather than via `getCopilotConfigPath()`: the
|
|
722
|
+
// config.json that can erase a settings.json is the one copilot reads from
|
|
723
|
+
// the same directory, and an overridden `settingsPath` must not be checked
|
|
724
|
+
// against a different home's config.
|
|
725
|
+
const configPath = options.configPath ?? (0, path_1.join)((0, path_1.dirname)(settingsPath), 'config.json');
|
|
726
|
+
const configHooks = inspectCopilotConfigHooks(configPath);
|
|
727
|
+
if (configHooks === 'present')
|
|
728
|
+
throw new CopilotConfigHooksShadowError(configPath);
|
|
729
|
+
if (configHooks === 'unreadable') {
|
|
730
|
+
// Not fatal: proceeding is what this module did before #1904, and a shape
|
|
731
|
+
// nobody has measured is not evidence that a migration is coming.
|
|
732
|
+
logger.warn('copilot-config-json-unreadable', { configPath });
|
|
733
|
+
}
|
|
409
734
|
(0, fs_1.mkdirSync)((0, path_1.dirname)(settingsPath), { recursive: true, mode: 0o700 });
|
|
410
|
-
(0,
|
|
411
|
-
|
|
735
|
+
return withCopilotSettingsLock((0, path_1.dirname)(settingsPath), () => {
|
|
736
|
+
const raw = readFileOrEmpty(settingsPath);
|
|
737
|
+
const merged = mergeCopilotHookSettings(parseCopilotSettings(raw), buildCopilotHookSettings(options));
|
|
738
|
+
const next = `${JSON.stringify(merged, null, 2)}\n`;
|
|
739
|
+
// Since #1904 the generated commands carry no port and no per-launch value,
|
|
740
|
+
// so the common re-launch produces the bytes already on disk. Returning
|
|
741
|
+
// early keeps the user's file — and its mtime — untouched, and skips the
|
|
742
|
+
// backup that would otherwise be rewritten on every session start.
|
|
743
|
+
if (raw === next)
|
|
744
|
+
return settingsPath;
|
|
745
|
+
if (raw !== '')
|
|
746
|
+
(0, fs_1.copyFileSync)(settingsPath, `${settingsPath}${exports.COPILOT_SETTINGS_BACKUP_SUFFIX}`);
|
|
747
|
+
writeFileAtomic(settingsPath, next);
|
|
748
|
+
return settingsPath;
|
|
749
|
+
});
|
|
412
750
|
}
|
|
413
751
|
/**
|
|
414
752
|
* The environment that tells a hook which instance fired it.
|
|
@@ -425,10 +763,15 @@ function writeCopilotHookSettings(options = {}) {
|
|
|
425
763
|
* separately, all four assuming a shell nobody had declared. The rendering now
|
|
426
764
|
* happens once, in `../launch-command`, and the bytes are identical.
|
|
427
765
|
*/
|
|
428
|
-
function buildCopilotHookEnvironment(worktreeId, instanceId) {
|
|
766
|
+
function buildCopilotHookEnvironment(worktreeId, instanceId, options = {}) {
|
|
429
767
|
return {
|
|
430
768
|
[exports.COPILOT_WORKTREE_ID_ENV]: worktreeId,
|
|
431
769
|
[exports.COPILOT_INSTANCE_ID_ENV]: instanceId,
|
|
770
|
+
// Issue #1904. Not a secret — the launch line is typed into the pane and
|
|
771
|
+
// shows up in `capture --json` (設計方針書 §10.7 / 受入条件 S18) — and the
|
|
772
|
+
// one value that has to be *this* server's rather than the last one to
|
|
773
|
+
// write the machine-global settings file.
|
|
774
|
+
[exports.COPILOT_HOOK_PORT_ENV]: String(options.port ?? (0, env_1.getServerPort)()),
|
|
432
775
|
};
|
|
433
776
|
}
|
|
434
777
|
/**
|
|
@@ -470,10 +813,20 @@ function buildCopilotLaunchCommand(executablePath, target, options = {}) {
|
|
|
470
813
|
return {
|
|
471
814
|
command: executablePath,
|
|
472
815
|
settingsPath,
|
|
473
|
-
env: buildCopilotHookEnvironment(target.worktreeId, instanceId),
|
|
816
|
+
env: buildCopilotHookEnvironment(target.worktreeId, instanceId, options),
|
|
474
817
|
};
|
|
475
818
|
}
|
|
476
819
|
catch (error) {
|
|
820
|
+
if (error instanceof CopilotConfigHooksShadowError) {
|
|
821
|
+
// Its own reason code because it is the one failure here an operator can
|
|
822
|
+
// fix: move `hooks` out of config.json and into settings.json, or let
|
|
823
|
+
// copilot's own migration do it, and the next launch injects normally.
|
|
824
|
+
logger.warn('copilot-hook-config-json-shadows-settings', {
|
|
825
|
+
worktreeId: target.worktreeId,
|
|
826
|
+
configPath: error.configPath,
|
|
827
|
+
});
|
|
828
|
+
return bare;
|
|
829
|
+
}
|
|
477
830
|
logger.warn('copilot-hook-settings-write-failed', {
|
|
478
831
|
worktreeId: target.worktreeId,
|
|
479
832
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -58,6 +58,14 @@
|
|
|
58
58
|
* wrong for this tool specifically, which is why the fence in
|
|
59
59
|
* `beginAgentSession` is a timestamp rather than a state machine.
|
|
60
60
|
*
|
|
61
|
+
* On a first turn the gap is not milliseconds but 12-15 s (#1903, measured
|
|
62
|
+
* twice), which is long enough for the structured layer to publish a verdict
|
|
63
|
+
* and then take it away again. That is what `sessionStartMayArriveLate` below
|
|
64
|
+
* declares, and `agent-event-state.recordAgentEvent` is what reads it: a
|
|
65
|
+
* `SessionStart` arriving inside a turn this instance has already opened does
|
|
66
|
+
* not replace the event the verdict is read from. Nothing there compares
|
|
67
|
+
* against `copilot`.
|
|
68
|
+
*
|
|
61
69
|
* @module lib/hooks/sources/copilot/source
|
|
62
70
|
*/
|
|
63
71
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -65,6 +73,7 @@ exports.copilotAgentEventSource = void 0;
|
|
|
65
73
|
exports.parseCopilotPermissionRequest = parseCopilotPermissionRequest;
|
|
66
74
|
exports.encodeCopilotVerdict = encodeCopilotVerdict;
|
|
67
75
|
const permission_request_payload_1 = require("../../../../lib/hooks/permission-request-payload");
|
|
76
|
+
const tool_input_normalization_1 = require("../../../../lib/hooks/tool-input-normalization");
|
|
68
77
|
const define_source_1 = require("../define-source");
|
|
69
78
|
const event_mapper_1 = require("../event-mapper");
|
|
70
79
|
const hook_event_vocabulary_1 = require("../hook-event-vocabulary");
|
|
@@ -106,13 +115,24 @@ function parseCopilotPermissionRequest(body) {
|
|
|
106
115
|
const toolName = (0, event_mapper_1.readStringField)(body, 'tool_name');
|
|
107
116
|
if (!toolName || toolName.length > permission_request_payload_1.MAX_TOOL_NAME_LENGTH)
|
|
108
117
|
return null;
|
|
109
|
-
// No `tool_input` means nothing for the deny patterns to be judged
|
|
110
|
-
// which makes the request unadjudicatable rather than harmless.
|
|
111
|
-
|
|
118
|
+
// No usable `tool_input` means nothing for the deny patterns to be judged
|
|
119
|
+
// against, which makes the request unadjudicatable rather than harmless.
|
|
120
|
+
//
|
|
121
|
+
// Issue #1902: this used to be `isPlainObject(body.tool_input)`, and that was
|
|
122
|
+
// the bug. Copilot 1.0.80's `Edit` sends the apply-patch envelope as a bare
|
|
123
|
+
// *string*, so the object check answered null for every file edit copilot
|
|
124
|
+
// ever made — null became `unknown-payload`, `unknown-payload` is a
|
|
125
|
+
// no-decision, and Auto-Yes v2 abstained on the whole edit family while
|
|
126
|
+
// working perfectly on `Read` and `Bash`, whose inputs are objects. The
|
|
127
|
+
// string is now read as a patch and the rewrite is reported rather than done
|
|
128
|
+
// in silence; see `lib/hooks/tool-input-normalization`.
|
|
129
|
+
const input = (0, tool_input_normalization_1.readPermissionToolInput)(body.tool_input);
|
|
130
|
+
if (!input)
|
|
112
131
|
return null;
|
|
113
132
|
return {
|
|
114
133
|
toolName,
|
|
115
|
-
toolInput:
|
|
134
|
+
toolInput: input.toolInput,
|
|
135
|
+
toolInputNormalization: input.normalization,
|
|
116
136
|
promptId: null,
|
|
117
137
|
sessionId: (0, event_mapper_1.readStringField)(body, 'session_id'),
|
|
118
138
|
permissionMode: null,
|
|
@@ -184,6 +204,22 @@ exports.copilotAgentEventSource = (0, define_source_1.definePushHookSource)({
|
|
|
184
204
|
// One file for the whole machine. See `./hook-settings`.
|
|
185
205
|
configScope: 'global-singleton',
|
|
186
206
|
decisionTimeoutSeconds: hook_settings_1.COPILOT_HOOK_TIMEOUT_SECONDS,
|
|
207
|
+
// Issue #1924, §4 D3. copilot DOES register a permission hook — this is the
|
|
208
|
+
// row where registration and prediction come apart. It fires on every tool
|
|
209
|
+
// call and copilot executes most of them straight away (#1901), so reading a
|
|
210
|
+
// non-allow as "a dialog is coming" files a prompt that never appears and
|
|
211
|
+
// leaves the pane `waiting` until the provisional record expires.
|
|
212
|
+
permissionHookPredictsDialog: false,
|
|
213
|
+
// The one `true` in this column, and a stopwatch rather than an inference:
|
|
214
|
+
// `UserPromptSubmit` at 20.813Z, `SessionStart` at 20.915Z (#1903). See the
|
|
215
|
+
// module comment above.
|
|
216
|
+
sessionStartMayArriveLate: true,
|
|
217
|
+
permissionReplyReleasesPrompt: false,
|
|
218
|
+
// Not audited. No captured copilot payload carries a `tool_use_id`, so
|
|
219
|
+
// `'tool-call-id'` would be a guess; whether one exists is still to be
|
|
220
|
+
// measured. Default = Claude's fallback, the time window.
|
|
221
|
+
eventIdentity: null,
|
|
222
|
+
resync: 'none',
|
|
187
223
|
},
|
|
188
224
|
// The same CamelCase dialect as Claude and codex — measured against six
|
|
189
225
|
// captured payloads (#1757 §8.1), not assumed from the resemblance. Shared
|