commandmate 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +431 -403
- package/.next/app-path-routes-manifest.json +26 -22
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +6 -6
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -2
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -0
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +2 -2
- package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +2 -2
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +19 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -5
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -6
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +9 -7
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +26 -22
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +3 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1538.js +7 -0
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +3 -2
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/2689.js +13 -0
- package/.next/server/chunks/2759.js +8 -0
- package/.next/server/chunks/2839.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3292.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -17
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4423.js +1 -0
- package/.next/server/chunks/4444.js +22 -8
- package/.next/server/chunks/4565.js +3 -0
- package/.next/server/chunks/467.js +1 -0
- package/.next/server/chunks/4905.js +5 -0
- package/.next/server/chunks/5017.js +1 -0
- package/.next/server/chunks/5089.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -0
- package/.next/server/chunks/5354.js +1 -0
- package/.next/server/chunks/552.js +19 -0
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5998.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +11 -11
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/7472.js +1 -0
- package/.next/server/chunks/7506.js +1 -0
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +5 -5
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9284.js +1 -0
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9508.js +1 -0
- package/.next/server/chunks/9938.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
- package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
- package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
- package/.next/static/chunks/{6381-9303430933084b56.js → 6381-b7250e8ca7a44c6c.js} +1 -1
- package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
- package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
- package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
- package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
- package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e4f28966b4fc0ce1.js +1 -0
- package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
- package/.next/static/css/928e5a8830fbf997.css +1 -0
- package/.next/static/t0BoV4H46ZgKmTjSi7GIz/_buildManifest.js +1 -0
- package/.next/trace +13 -12
- package/.next/types/app/api/capabilities/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +40 -2
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +28 -13
- package/dist/cli/commands/instances.d.ts +30 -18
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +32 -36
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +73 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +18 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +21 -15
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +38 -0
- package/dist/cli/commands/wait.d.ts +26 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +390 -43
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +16 -0
- package/dist/cli/config/cli-tool-ids.d.ts +11 -0
- package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
- package/dist/cli/config/cli-tool-ids.js +12 -1
- package/dist/cli/types/api-responses.d.ts +443 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +18 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +22 -0
- package/dist/cli/utils/server-capabilities.d.ts +56 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
- package/dist/cli/utils/server-capabilities.js +166 -0
- package/dist/cli/utils/session-target.d.ts +70 -0
- package/dist/cli/utils/session-target.d.ts.map +1 -0
- package/dist/cli/utils/session-target.js +118 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/lib/cli-tools/types.d.ts +61 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +41 -0
- package/dist/lib/detection/ansi.d.ts +2 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +3 -2
- package/dist/lib/detection/tools/verified-against.d.ts +84 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
- package/dist/lib/detection/tools/verified-against.js +88 -0
- package/dist/lib/detection/version-probes.d.ts +207 -0
- package/dist/lib/detection/version-probes.d.ts.map +1 -0
- package/dist/lib/detection/version-probes.js +290 -0
- package/dist/lib/security/env-sanitizer.d.ts +198 -0
- package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
- package/dist/lib/security/env-sanitizer.js +232 -0
- package/dist/server/locales/en/notifications.json +17 -6
- package/dist/server/locales/ja/notifications.json +17 -6
- package/dist/server/src/config/activity-bar-config.js +4 -0
- package/dist/server/src/config/cli-tool-timing-config.js +59 -2
- package/dist/server/src/config/copilot-constants.js +11 -1
- package/dist/server/src/config/detection-evidence-config.js +129 -0
- package/dist/server/src/config/schedule-config.js +56 -7
- package/dist/server/src/config/tmux-pane-config.js +18 -1
- package/dist/server/src/lib/auto-yes-poller.js +36 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
- package/dist/server/src/lib/cli-tools/base.js +131 -10
- package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
- package/dist/server/src/lib/cli-tools/claude.js +1 -1
- package/dist/server/src/lib/cli-tools/codex.js +6 -2
- package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/server/src/lib/cli-tools/copilot.js +307 -81
- package/dist/server/src/lib/cli-tools/gemini.js +8 -6
- package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
- package/dist/server/src/lib/cli-tools/index.js +11 -1
- package/dist/server/src/lib/cli-tools/manager.js +56 -4
- package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
- package/dist/server/src/lib/cli-tools/opencode.js +233 -30
- package/dist/server/src/lib/cli-tools/session-name.js +57 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
- package/dist/server/src/lib/cli-tools/types.js +41 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
- package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
- package/dist/server/src/lib/cmate-parser.js +12 -4
- package/dist/server/src/lib/db/db.js +5 -1
- package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
- package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
- package/dist/server/src/lib/detection/ansi.js +3 -2
- package/dist/server/src/lib/detection/cli-patterns.js +901 -67
- package/dist/server/src/lib/detection/composer-text.js +455 -0
- package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
- package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
- package/dist/server/src/lib/detection/status-detector.js +76 -675
- package/dist/server/src/lib/detection/status-reason.js +57 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
- package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
- package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
- package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
- package/dist/server/src/lib/detection/tools/frame.js +47 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
- package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
- package/dist/server/src/lib/detection/tools/registry.js +58 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
- package/dist/server/src/lib/detection/tools/types.js +34 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
- package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
- package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
- package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
- package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
- package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
- package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
- package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
- package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
- package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
- package/dist/server/src/lib/job-executor.js +16 -4
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
- package/dist/server/src/lib/polling/response-checker.js +243 -26
- package/dist/server/src/lib/push/failure-episode-state.js +127 -0
- package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
- package/dist/server/src/lib/push/index.js +35 -1
- package/dist/server/src/lib/push/prompt-card-state.js +93 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
- package/dist/server/src/lib/push/push-sender.js +82 -7
- package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
- package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
- package/dist/server/src/lib/response-cleaner.js +93 -20
- package/dist/server/src/lib/response-extractor.js +98 -5
- package/dist/server/src/lib/security/env-sanitizer.js +179 -5
- package/dist/server/src/lib/session/agent-event-state.js +1038 -189
- package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
- package/dist/server/src/lib/session/claude-executor.js +23 -3
- package/dist/server/src/lib/session/claude-session.js +11 -1
- package/dist/server/src/lib/session/composer-clear.js +95 -0
- package/dist/server/src/lib/session/current-output-builder.js +267 -25
- package/dist/server/src/lib/session/provisional-turn.js +310 -0
- package/dist/server/src/lib/session/resolve-session-target.js +156 -0
- package/dist/server/src/lib/session/send-user-message.js +14 -18
- package/dist/server/src/lib/session/session-start-error.js +53 -1
- package/dist/server/src/lib/session/status-evidence.js +217 -0
- package/dist/server/src/lib/session/structured-prompt.js +46 -4
- package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
- package/dist/server/src/lib/tmux/key-sequence.js +120 -0
- package/dist/server/src/lib/tmux/tmux.js +91 -19
- package/dist/server/src/lib/tui-accumulator.js +68 -1
- package/dist/server/src/lib/verification/gate-runner.js +84 -1
- package/dist/server/src/lib/ws-server.js +8 -5
- package/dist/server/src/types/cli-tool-contracts.js +75 -0
- package/dist/server/src/types/terminal-keys.js +37 -0
- package/dist/types/cli-tool-contracts.d.ts +235 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -0
- package/dist/types/cli-tool-contracts.js +75 -0
- package/package.json +3 -2
- package/public/sw.js +65 -2
- package/.next/server/chunks/1841.js +0 -1
- package/.next/server/chunks/233.js +0 -1
- package/.next/server/chunks/3022.js +0 -1
- package/.next/server/chunks/3270.js +0 -1
- package/.next/server/chunks/4455.js +0 -1
- package/.next/server/chunks/5959.js +0 -27
- package/.next/server/chunks/7458.js +0 -6
- package/.next/server/chunks/8730.js +0 -1
- package/.next/server/chunks/9058.js +0 -1
- package/.next/server/chunks/9687.js +0 -3
- package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
- package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-fbdf4621a2911ac1.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/hNdNiFes2xLls68SWhAU9/_buildManifest.js +0 -1
- /package/.next/static/{hNdNiFes2xLls68SWhAU9 → t0BoV4H46ZgKmTjSi7GIz}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* How each tool is asked to quit, and what must be true once it has
|
|
4
|
+
* (Issue #1933, 受入条件 S10 / §13.2).
|
|
5
|
+
*
|
|
6
|
+
* ## The postcondition, and why "the pane is gone" is not all of it
|
|
7
|
+
*
|
|
8
|
+
* Every `killSession()` in this package ends with `tmux kill-session`, so the
|
|
9
|
+
* pane always disappears and every shutdown has always *looked* successful.
|
|
10
|
+
* Two failures hide inside that:
|
|
11
|
+
*
|
|
12
|
+
* - **`graceful_exit_timeout`** — the TUI never quit and the pane was
|
|
13
|
+
* destroyed under it. Recoverable (the process dies with the pane) but worth
|
|
14
|
+
* reporting, because a tool that stops honouring its own exit command is
|
|
15
|
+
* otherwise invisible: `COPILOT_EXIT_WAIT_MS` had to be raised from 500 to
|
|
16
|
+
* 3000 in #1905 precisely because every sample of copilot 1.0.80's shutdown
|
|
17
|
+
* (1.006 s … 2.193 s) was past the generic window, i.e. the tmux kill had
|
|
18
|
+
* been landing mid-shutdown for every copilot session, silently.
|
|
19
|
+
* - **`port_orphaned`** — opencode's TUI *is* an HTTP server once it is given
|
|
20
|
+
* `--port` (#1758 §5.1.2), and `lib/hooks/sources/opencode/ports` hands the
|
|
21
|
+
* number to the next instance that asks. If the server outlives the pane,
|
|
22
|
+
* that next instance's subscription attaches to the OLD server: its events
|
|
23
|
+
* are then filed against the wrong worktree, with no error anywhere. The
|
|
24
|
+
* port is only safe to reuse once `/global/health` stops answering.
|
|
25
|
+
*
|
|
26
|
+
* {@link verifyGracefulExit} is the check, with both probes injected so it can
|
|
27
|
+
* be driven without tmux and without a socket.
|
|
28
|
+
*
|
|
29
|
+
* ## What this module deliberately does NOT do
|
|
30
|
+
*
|
|
31
|
+
* It does not execute {@link GracefulExitSpec.keys}. The seven `killSession()`
|
|
32
|
+
* implementations keep sending their own measured sequences, and
|
|
33
|
+
* `tests/unit/cli-tools/graceful-exit-conformance-1933.test.ts` pins that what
|
|
34
|
+
* they actually send equals what they declare here. Routing them through a
|
|
35
|
+
* shared executor would change the argv of calls that
|
|
36
|
+
* `tests/unit/api/kill-session-cli-tool-gateway-1905.test.ts` pins by exact
|
|
37
|
+
* arity — a file outside this Issue's scope — for no behavioural gain: the exit
|
|
38
|
+
* strings (`/exit`, `/quit`) are tool-owned constants, not tmux key names, so
|
|
39
|
+
* `-l` changes not one byte for them. The user-typed message body, which is the
|
|
40
|
+
* string that *does* change, went through `-l` in this same commit.
|
|
41
|
+
*
|
|
42
|
+
* @module lib/cli-tools/graceful-exit
|
|
43
|
+
*/
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.DEFAULT_GRACEFUL_EXIT_SPEC = exports.GEMINI_EXIT_COMMAND_TEXT = exports.OPENCODE_EXIT_COMMAND_TEXT = exports.COPILOT_EXIT_COMMAND_TEXT = void 0;
|
|
46
|
+
exports.resolveGracefulExitSpec = resolveGracefulExitSpec;
|
|
47
|
+
exports.verifyGracefulExit = verifyGracefulExit;
|
|
48
|
+
const copilot_constants_1 = require("../../config/copilot-constants");
|
|
49
|
+
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
50
|
+
const cli_tool_contracts_1 = require("../../types/cli-tool-contracts");
|
|
51
|
+
/** The graceful exit command copilot's TUI accepts. */
|
|
52
|
+
exports.COPILOT_EXIT_COMMAND_TEXT = '/exit';
|
|
53
|
+
/** The graceful exit command opencode's TUI accepts. */
|
|
54
|
+
exports.OPENCODE_EXIT_COMMAND_TEXT = '/exit';
|
|
55
|
+
/** The graceful exit command gemini's TUI accepts. */
|
|
56
|
+
exports.GEMINI_EXIT_COMMAND_TEXT = '/quit';
|
|
57
|
+
/**
|
|
58
|
+
* A literal whose Enter is part of the same tmux write.
|
|
59
|
+
*
|
|
60
|
+
* `send-keys -t X '/quit' 'C-m'` and `send-keys -t X -l -- '/quit\r'` put the
|
|
61
|
+
* identical six bytes (`2f 71 75 69 74 0d`) into the pty in one write —
|
|
62
|
+
* measured on tmux 3.5a, private socket, `cat` on a raw pty. So a tool that
|
|
63
|
+
* still batches its exit command is described faithfully by a single literal
|
|
64
|
+
* step ending in CR, and nothing has to be modelled as "a literal that is
|
|
65
|
+
* secretly not literal".
|
|
66
|
+
*/
|
|
67
|
+
function submittedLiteral(text, delayAfterMs) {
|
|
68
|
+
return (0, cli_tool_contracts_1.literalStep)(`${text}\r`, delayAfterMs);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* The claude-shaped default, which is also `BaseCLITool`'s: one Ctrl-D, then
|
|
72
|
+
* the generic TUI shutdown window.
|
|
73
|
+
*/
|
|
74
|
+
exports.DEFAULT_GRACEFUL_EXIT_SPEC = {
|
|
75
|
+
keys: [(0, cli_tool_contracts_1.keyStep)('C-d')],
|
|
76
|
+
exitWaitMs: cli_tool_timing_config_1.TUI_EXIT_WAIT_MS,
|
|
77
|
+
ownsLoopbackServer: false,
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Per-tool exit descriptions.
|
|
81
|
+
*
|
|
82
|
+
* Every sequence is what the tool's `killSession()` already sends; the
|
|
83
|
+
* conformance suite is what keeps that true.
|
|
84
|
+
*/
|
|
85
|
+
const GRACEFUL_EXIT_SPECS = {
|
|
86
|
+
claude: exports.DEFAULT_GRACEFUL_EXIT_SPEC,
|
|
87
|
+
codex: exports.DEFAULT_GRACEFUL_EXIT_SPEC,
|
|
88
|
+
antigravity: exports.DEFAULT_GRACEFUL_EXIT_SPEC,
|
|
89
|
+
// Ctrl-C to abandon anything running, a settle, then `/quit` submitted in one
|
|
90
|
+
// write (gemini is the one tool still on the pre-#1471 batched form).
|
|
91
|
+
gemini: {
|
|
92
|
+
keys: [
|
|
93
|
+
(0, cli_tool_contracts_1.keyStep)('C-c', cli_tool_timing_config_1.TUI_INTERRUPT_SETTLE_MS),
|
|
94
|
+
submittedLiteral(exports.GEMINI_EXIT_COMMAND_TEXT),
|
|
95
|
+
],
|
|
96
|
+
exitWaitMs: cli_tool_timing_config_1.TUI_EXIT_WAIT_MS,
|
|
97
|
+
ownsLoopbackServer: false,
|
|
98
|
+
},
|
|
99
|
+
// Two Ctrl-Cs: the first interrupts, the second exits.
|
|
100
|
+
'vibe-local': {
|
|
101
|
+
keys: [(0, cli_tool_contracts_1.keyStep)('C-c', cli_tool_timing_config_1.TUI_INTERRUPT_SETTLE_MS), (0, cli_tool_contracts_1.keyStep)('C-c')],
|
|
102
|
+
exitWaitMs: cli_tool_timing_config_1.TUI_EXIT_WAIT_MS,
|
|
103
|
+
ownsLoopbackServer: false,
|
|
104
|
+
},
|
|
105
|
+
// Ctrl-C, then `/exit` typed and submitted as SEPARATE tmux commands. The
|
|
106
|
+
// 3000 ms window is copilot's own: every measured shutdown of 1.0.80 (1.006 /
|
|
107
|
+
// 1.109 / … / 2.193 s) is past the generic 500 (#1905).
|
|
108
|
+
copilot: {
|
|
109
|
+
keys: [
|
|
110
|
+
(0, cli_tool_contracts_1.keyStep)('C-c', cli_tool_timing_config_1.TUI_INTERRUPT_SETTLE_MS),
|
|
111
|
+
(0, cli_tool_contracts_1.literalStep)(exports.COPILOT_EXIT_COMMAND_TEXT, copilot_constants_1.COPILOT_TEXT_INPUT_DELAY_MS),
|
|
112
|
+
(0, cli_tool_contracts_1.keyStep)('Enter'),
|
|
113
|
+
],
|
|
114
|
+
exitWaitMs: cli_tool_timing_config_1.COPILOT_EXIT_WAIT_MS,
|
|
115
|
+
ownsLoopbackServer: false,
|
|
116
|
+
},
|
|
117
|
+
// `/exit` typed and submitted separately, because the batched form does not
|
|
118
|
+
// exit at all: typing `/` opens the command palette and the `C-m` arriving in
|
|
119
|
+
// the same tmux command is consumed by it, leaving `/exit` in the composer
|
|
120
|
+
// 10.8 s later, 2 runs out of 2 (#1905).
|
|
121
|
+
opencode: {
|
|
122
|
+
keys: [
|
|
123
|
+
(0, cli_tool_contracts_1.literalStep)(exports.OPENCODE_EXIT_COMMAND_TEXT, cli_tool_timing_config_1.TUI_TEXT_INPUT_WAIT_MS),
|
|
124
|
+
(0, cli_tool_contracts_1.keyStep)('Enter'),
|
|
125
|
+
],
|
|
126
|
+
exitWaitMs: cli_tool_timing_config_1.OPENCODE_EXIT_WAIT_MS,
|
|
127
|
+
ownsLoopbackServer: true,
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* The graceful-exit description for a CLI tool.
|
|
132
|
+
*
|
|
133
|
+
* @param cliToolId - CLI tool identifier
|
|
134
|
+
* @returns That tool's {@link GracefulExitSpec}
|
|
135
|
+
*/
|
|
136
|
+
function resolveGracefulExitSpec(cliToolId) {
|
|
137
|
+
return GRACEFUL_EXIT_SPECS[cliToolId] ?? exports.DEFAULT_GRACEFUL_EXIT_SPEC;
|
|
138
|
+
}
|
|
139
|
+
const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
140
|
+
/**
|
|
141
|
+
* Decide whether a graceful exit met its postcondition.
|
|
142
|
+
*
|
|
143
|
+
* Order matters and is not arbitrary: the session is checked first because a
|
|
144
|
+
* live pane makes the port question meaningless, and the port is checked only
|
|
145
|
+
* after the pane is gone because that is the only moment "still answering"
|
|
146
|
+
* means "orphaned".
|
|
147
|
+
*
|
|
148
|
+
* The default is a SINGLE check with no polling, which is byte-for-byte what
|
|
149
|
+
* every `killSession()` already did after its own `exitWaitMs` sleep. A caller
|
|
150
|
+
* that wants the tool given more rope passes `attempts` / `intervalMs`.
|
|
151
|
+
*
|
|
152
|
+
* @param probe - How to observe the session and the port
|
|
153
|
+
* @returns `{ ok: true }`, or the reason the postcondition failed
|
|
154
|
+
*/
|
|
155
|
+
async function verifyGracefulExit(probe) {
|
|
156
|
+
const attempts = Math.max(1, probe.attempts ?? 1);
|
|
157
|
+
const intervalMs = probe.intervalMs ?? 0;
|
|
158
|
+
const sleep = probe.sleep ?? defaultSleep;
|
|
159
|
+
let alive = true;
|
|
160
|
+
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
161
|
+
alive = await probe.sessionAlive();
|
|
162
|
+
if (!alive)
|
|
163
|
+
break;
|
|
164
|
+
if (attempt < attempts - 1 && intervalMs > 0)
|
|
165
|
+
await sleep(intervalMs);
|
|
166
|
+
}
|
|
167
|
+
if (alive)
|
|
168
|
+
return { ok: false, reason: 'graceful_exit_timeout' };
|
|
169
|
+
const portAnswering = probe.portAnswering;
|
|
170
|
+
if (!portAnswering)
|
|
171
|
+
return { ok: true };
|
|
172
|
+
let answering = true;
|
|
173
|
+
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
174
|
+
answering = await portAnswering();
|
|
175
|
+
if (!answering)
|
|
176
|
+
break;
|
|
177
|
+
if (attempt < attempts - 1 && intervalMs > 0)
|
|
178
|
+
await sleep(intervalMs);
|
|
179
|
+
}
|
|
180
|
+
return answering ? { ok: false, reason: 'port_orphaned' } : { ok: true };
|
|
181
|
+
}
|
|
@@ -6,9 +6,19 @@
|
|
|
6
6
|
* @module cli-tools
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.CLIToolManager = exports.AntigravityTool = exports.GeminiTool = exports.CodexTool = exports.ClaudeTool = exports.BaseCLITool = exports.isImageCapableCLITool = void 0;
|
|
9
|
+
exports.CLIToolManager = exports.AntigravityTool = exports.GeminiTool = exports.CodexTool = exports.ClaudeTool = exports.BaseCLITool = exports.DEFAULT_GRACEFUL_EXIT_SPEC = exports.verifyGracefulExit = exports.resolveGracefulExitSpec = exports.GEMINI_PANE_HEIGHT = exports.resolveCaptureSpec = exports.DEFAULT_COMPOSER_SPEC = exports.resolveComposerSpec = exports.isImageCapableCLITool = void 0;
|
|
10
10
|
var types_1 = require("./types");
|
|
11
11
|
Object.defineProperty(exports, "isImageCapableCLITool", { enumerable: true, get: function () { return types_1.isImageCapableCLITool; } });
|
|
12
|
+
var composer_spec_1 = require("./composer-spec");
|
|
13
|
+
Object.defineProperty(exports, "resolveComposerSpec", { enumerable: true, get: function () { return composer_spec_1.resolveComposerSpec; } });
|
|
14
|
+
Object.defineProperty(exports, "DEFAULT_COMPOSER_SPEC", { enumerable: true, get: function () { return composer_spec_1.DEFAULT_COMPOSER_SPEC; } });
|
|
15
|
+
var capture_spec_1 = require("./capture-spec");
|
|
16
|
+
Object.defineProperty(exports, "resolveCaptureSpec", { enumerable: true, get: function () { return capture_spec_1.resolveCaptureSpec; } });
|
|
17
|
+
Object.defineProperty(exports, "GEMINI_PANE_HEIGHT", { enumerable: true, get: function () { return capture_spec_1.GEMINI_PANE_HEIGHT; } });
|
|
18
|
+
var graceful_exit_1 = require("./graceful-exit");
|
|
19
|
+
Object.defineProperty(exports, "resolveGracefulExitSpec", { enumerable: true, get: function () { return graceful_exit_1.resolveGracefulExitSpec; } });
|
|
20
|
+
Object.defineProperty(exports, "verifyGracefulExit", { enumerable: true, get: function () { return graceful_exit_1.verifyGracefulExit; } });
|
|
21
|
+
Object.defineProperty(exports, "DEFAULT_GRACEFUL_EXIT_SPEC", { enumerable: true, get: function () { return graceful_exit_1.DEFAULT_GRACEFUL_EXIT_SPEC; } });
|
|
12
22
|
// Export base class
|
|
13
23
|
var base_1 = require("./base");
|
|
14
24
|
Object.defineProperty(exports, "BaseCLITool", { enumerable: true, get: function () { return base_1.BaseCLITool; } });
|
|
@@ -3,6 +3,39 @@
|
|
|
3
3
|
* CLI Tool Manager
|
|
4
4
|
* Singleton class to manage multiple CLI tools (Claude, Codex, Gemini, Vibe Local, OpenCode)
|
|
5
5
|
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
6
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
40
|
exports.CLIToolManager = void 0;
|
|
8
41
|
const claude_1 = require("./claude");
|
|
@@ -12,7 +45,6 @@ const vibe_local_1 = require("./vibe-local");
|
|
|
12
45
|
const opencode_1 = require("./opencode");
|
|
13
46
|
const copilot_1 = require("./copilot");
|
|
14
47
|
const antigravity_1 = require("./antigravity");
|
|
15
|
-
const response_poller_1 = require("../polling/response-poller");
|
|
16
48
|
/**
|
|
17
49
|
* CLI Tool Manager (Singleton)
|
|
18
50
|
* Provides centralized access to all CLI tools (Issue #368: includes Vibe Local, Issue #379: includes OpenCode)
|
|
@@ -155,6 +187,25 @@ class CLIToolManager {
|
|
|
155
187
|
* This method abstracts the poller stopping logic so API layer
|
|
156
188
|
* doesn't need to know about specific poller implementations.
|
|
157
189
|
*
|
|
190
|
+
* ## Issue #1984: なぜ `await import()` なのか
|
|
191
|
+
*
|
|
192
|
+
* この 1 行のためだけに `manager.ts` が `../polling/response-poller` を静的 import して
|
|
193
|
+
* いたことが、モジュールスコープの循環の起点だった:
|
|
194
|
+
*
|
|
195
|
+
* ws-server -> cli-tools/manager -> polling/response-poller
|
|
196
|
+
* -> polling/response-poller-core -> polling/response-checker -> ws-server
|
|
197
|
+
* -> polling/response-poller-core -> realtime/terminal-broadcast -> ws-server
|
|
198
|
+
*
|
|
199
|
+
* `manager` を通る循環は実測 8 本あり、その **8 本すべて**が
|
|
200
|
+
* `manager -> response-poller` を通る。つまりここ 1 辺で全部落ちる
|
|
201
|
+
* (検査は tests/unit/guards/no-manager-poller-cycle-1984.test.ts)。
|
|
202
|
+
*
|
|
203
|
+
* 代償は API の非同期化。呼び出し元は `api/worktrees/[id]/kill-session/route.ts` の
|
|
204
|
+
* 1 箇所だけで、そこは `await` を付けてある。**付け忘れると poller 停止が
|
|
205
|
+
* 直後の `deleteSessionState()` より後ろにずれる**(型も lint も検出しない静かな
|
|
206
|
+
* 挙動変化)ので、順序を
|
|
207
|
+
* tests/unit/api/kill-session-stop-pollers-order-1984.test.ts で固定している。
|
|
208
|
+
*
|
|
158
209
|
* @param worktreeId - Worktree ID
|
|
159
210
|
* @param cliToolId - CLI tool ID
|
|
160
211
|
* @param instanceId - Agent instance ID (Issue #868). Defaults to the primary instance.
|
|
@@ -162,12 +213,13 @@ class CLIToolManager {
|
|
|
162
213
|
* @example
|
|
163
214
|
* ```typescript
|
|
164
215
|
* const manager = CLIToolManager.getInstance();
|
|
165
|
-
* manager.stopPollers('my-worktree', 'claude');
|
|
216
|
+
* await manager.stopPollers('my-worktree', 'claude');
|
|
166
217
|
* ```
|
|
167
218
|
*/
|
|
168
|
-
stopPollers(worktreeId, cliToolId, instanceId) {
|
|
219
|
+
async stopPollers(worktreeId, cliToolId, instanceId) {
|
|
169
220
|
// Stop response-poller for all tools
|
|
170
|
-
|
|
221
|
+
const { stopPolling: stopResponsePolling } = await Promise.resolve().then(() => __importStar(require('../polling/response-poller')));
|
|
222
|
+
stopResponsePolling(worktreeId, cliToolId, instanceId);
|
|
171
223
|
}
|
|
172
224
|
}
|
|
173
225
|
exports.CLIToolManager = CLIToolManager;
|
|
@@ -7,6 +7,35 @@
|
|
|
7
7
|
* @remarks [D1-001 SRP] Separated from opencode.ts to maintain single responsibility.
|
|
8
8
|
* This module handles Ollama/LM Studio HTTP API calls and config file I/O,
|
|
9
9
|
* while opencode.ts handles tmux session management.
|
|
10
|
+
*
|
|
11
|
+
* ## Issue #1908: writing is opt-in, and the worktree is no longer the default
|
|
12
|
+
*
|
|
13
|
+
* Starting an opencode session used to drop a 4 KB `opencode.json` into the
|
|
14
|
+
* worktree root whenever Ollama or LM Studio answered on localhost — one
|
|
15
|
+
* untracked file per repository, in six repositories on the reporting machine,
|
|
16
|
+
* including CommandMate's own checkout. Nothing asked, nothing announced, and
|
|
17
|
+
* `git status` carried it from then on.
|
|
18
|
+
*
|
|
19
|
+
* Measured on opencode 1.18.21 (`opencode debug config`, disposable `HOME`), a
|
|
20
|
+
* worktree-root `opencode.json` is not an additive convenience:
|
|
21
|
+
*
|
|
22
|
+
* | layer | read? | on a key collision |
|
|
23
|
+
* |-----------------------------------------|-------|--------------------|
|
|
24
|
+
* | `<worktree>/opencode.jsonc` | yes | beats `opencode.json` |
|
|
25
|
+
* | `<worktree>/opencode.json` | yes | beats both below |
|
|
26
|
+
* | `$OPENCODE_CONFIG` | yes | **loses** to the worktree file |
|
|
27
|
+
* | `$XDG_CONFIG_HOME/opencode/opencode.json(c)` | yes | loses to the worktree file |
|
|
28
|
+
*
|
|
29
|
+
* `provider` maps merge across the layers, so the generated file is additive
|
|
30
|
+
* *until* the operator defines the same provider key somewhere else — at which
|
|
31
|
+
* point CommandMate's snapshot silently outranks the config they chose,
|
|
32
|
+
* `OPENCODE_CONFIG` included. That is the reason the skip list below is not just
|
|
33
|
+
* "is there an `opencode.json`".
|
|
34
|
+
*
|
|
35
|
+
* So: generation is off unless {@link OPENCODE_LOCAL_PROVIDER_CONFIG_ENV} asks
|
|
36
|
+
* for it, and even then it stands down in front of any configuration the
|
|
37
|
+
* operator already owns. Files written by earlier versions are left exactly
|
|
38
|
+
* where they are — they still load, so nobody's provider list disappears.
|
|
10
39
|
*/
|
|
11
40
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
41
|
if (k2 === undefined) k2 = k;
|
|
@@ -42,12 +71,17 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
42
71
|
};
|
|
43
72
|
})();
|
|
44
73
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.LM_STUDIO_MODEL_PATTERN = exports.MAX_LM_STUDIO_MODELS = exports.LM_STUDIO_BASE_URL = exports.LM_STUDIO_API_URL = exports.OLLAMA_MODEL_PATTERN = exports.MAX_OLLAMA_MODELS = exports.OLLAMA_BASE_URL = exports.OLLAMA_API_URL = void 0;
|
|
74
|
+
exports.OPENCODE_CONFIG_ENV = exports.OPENCODE_LOCAL_PROVIDER_CONFIG_ENV = exports.LM_STUDIO_MODEL_PATTERN = exports.MAX_LM_STUDIO_MODELS = exports.LM_STUDIO_BASE_URL = exports.LM_STUDIO_API_URL = exports.OLLAMA_MODEL_PATTERN = exports.MAX_OLLAMA_MODELS = exports.OLLAMA_BASE_URL = exports.OLLAMA_API_URL = void 0;
|
|
46
75
|
exports.fetchOllamaModels = fetchOllamaModels;
|
|
47
76
|
exports.fetchLmStudioModels = fetchLmStudioModels;
|
|
77
|
+
exports.opencodeGlobalConfigDir = opencodeGlobalConfigDir;
|
|
78
|
+
exports.resolveOpencodeConfigMode = resolveOpencodeConfigMode;
|
|
79
|
+
exports.findOwnedOpencodeConfig = findOwnedOpencodeConfig;
|
|
48
80
|
exports.ensureOpencodeConfig = ensureOpencodeConfig;
|
|
49
81
|
const fs = __importStar(require("fs"));
|
|
82
|
+
const os = __importStar(require("os"));
|
|
50
83
|
const path = __importStar(require("path"));
|
|
84
|
+
const safe_directory_1 = require("../../config/safe-directory");
|
|
51
85
|
const logger_1 = require("../../lib/logger");
|
|
52
86
|
const logger = (0, logger_1.createLogger)('cli-tools/opencode-config');
|
|
53
87
|
// =============================================================================
|
|
@@ -125,6 +159,41 @@ const LM_STUDIO_API_TIMEOUT_MS = 3000;
|
|
|
125
159
|
const MAX_LM_STUDIO_RESPONSE_SIZE = 1 * 1024 * 1024;
|
|
126
160
|
/** Config file name */
|
|
127
161
|
const CONFIG_FILE_NAME = 'opencode.json';
|
|
162
|
+
/**
|
|
163
|
+
* The environment variable that turns local-provider config generation back on
|
|
164
|
+
* (Issue #1908).
|
|
165
|
+
*
|
|
166
|
+
* Unset — the default — means CommandMate writes nothing. `worktree` restores
|
|
167
|
+
* the pre-#1908 destination (`<worktree>/opencode.json`), `global` writes the
|
|
168
|
+
* same content to `$XDG_CONFIG_HOME/opencode/opencode.json` so one machine-wide
|
|
169
|
+
* file serves every checkout instead of one file per repository.
|
|
170
|
+
*
|
|
171
|
+
* An env var rather than a stored setting because that is how every other
|
|
172
|
+
* launch-path switch in this codebase is spelled (`CM_AGENT_HOOKS_INJECT`,
|
|
173
|
+
* `CM_OPENCODE_PORT_FILE`), and because the decision has to be readable from the
|
|
174
|
+
* CLI, the server and a test without a database.
|
|
175
|
+
*/
|
|
176
|
+
exports.OPENCODE_LOCAL_PROVIDER_CONFIG_ENV = 'CM_OPENCODE_LOCAL_PROVIDER_CONFIG';
|
|
177
|
+
/**
|
|
178
|
+
* opencode's own "use this file" override. Treated as **positive evidence that
|
|
179
|
+
* the operator owns the configuration**, never as a write target: measured on
|
|
180
|
+
* 1.18.21, a worktree-root `opencode.json` outranks `$OPENCODE_CONFIG` on a key
|
|
181
|
+
* collision, so generating one is the one thing most likely to defeat it.
|
|
182
|
+
*/
|
|
183
|
+
exports.OPENCODE_CONFIG_ENV = 'OPENCODE_CONFIG';
|
|
184
|
+
/**
|
|
185
|
+
* Config file names opencode reads out of a project directory, in the order it
|
|
186
|
+
* merges them (measured with `opencode debug config`, 1.18.21). `.opencode/` is
|
|
187
|
+
* included because a config placed there loads exactly like a root-level one.
|
|
188
|
+
*/
|
|
189
|
+
const WORKTREE_CONFIG_RELATIVE_PATHS = [
|
|
190
|
+
'opencode.json',
|
|
191
|
+
'opencode.jsonc',
|
|
192
|
+
path.join('.opencode', 'opencode.json'),
|
|
193
|
+
path.join('.opencode', 'opencode.jsonc'),
|
|
194
|
+
];
|
|
195
|
+
/** Config file names opencode reads out of its global config directory. */
|
|
196
|
+
const GLOBAL_CONFIG_FILE_NAMES = ['opencode.json', 'opencode.jsonc'];
|
|
128
197
|
// =============================================================================
|
|
129
198
|
// Helpers
|
|
130
199
|
// =============================================================================
|
|
@@ -308,35 +377,84 @@ async function fetchLmStudioModels() {
|
|
|
308
377
|
// Main function
|
|
309
378
|
// =============================================================================
|
|
310
379
|
/**
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
* and does not generate opencode.json.
|
|
380
|
+
* opencode's global config directory — `$XDG_CONFIG_HOME/opencode`, falling
|
|
381
|
+
* back to `~/.config/opencode` (confirmed against `opencode debug paths` under a
|
|
382
|
+
* disposable `HOME`).
|
|
315
383
|
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
*
|
|
319
|
-
* HTTP fetch logic (fetchWithTimeout) can be extracted to a shared helper.
|
|
384
|
+
* `resolveSafeDirectory` because `XDG_CONFIG_HOME` is an operator-supplied
|
|
385
|
+
* directory that reaches a recursive `mkdir` below, which is the exact shape
|
|
386
|
+
* Issue #1774 guards.
|
|
320
387
|
*
|
|
321
|
-
* @param worktreePath - Worktree directory path (from DB)
|
|
322
388
|
* @internal
|
|
323
389
|
*/
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
390
|
+
function opencodeGlobalConfigDir(env = process.env) {
|
|
391
|
+
const home = path.join(os.homedir(), '.config');
|
|
392
|
+
return path.join((0, safe_directory_1.resolveSafeDirectory)(env.XDG_CONFIG_HOME, home, 'XDG_CONFIG_HOME'), 'opencode');
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Read {@link OPENCODE_LOCAL_PROVIDER_CONFIG_ENV}.
|
|
396
|
+
*
|
|
397
|
+
* Unknown values resolve to `off` rather than to the old behaviour: a typo in an
|
|
398
|
+
* opt-in must not opt the operator in.
|
|
399
|
+
*
|
|
400
|
+
* @internal
|
|
401
|
+
*/
|
|
402
|
+
function resolveOpencodeConfigMode(env = process.env) {
|
|
403
|
+
const raw = (env[exports.OPENCODE_LOCAL_PROVIDER_CONFIG_ENV] ?? '').trim().toLowerCase();
|
|
404
|
+
if (raw === 'worktree' || raw === 'project')
|
|
405
|
+
return 'worktree';
|
|
406
|
+
if (raw === 'global' || raw === 'user')
|
|
407
|
+
return 'global';
|
|
408
|
+
if (raw !== '' && raw !== 'off' && raw !== '0' && raw !== 'false' && raw !== 'none') {
|
|
409
|
+
logger.warn('opencode-config-mode-unrecognised', {
|
|
410
|
+
variable: exports.OPENCODE_LOCAL_PROVIDER_CONFIG_ENV,
|
|
411
|
+
value: raw,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
return 'off';
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* The configuration the operator already owns, if any.
|
|
418
|
+
*
|
|
419
|
+
* Returns the first thing found so the caller can log *what* made it stand down
|
|
420
|
+
* — `'env:OPENCODE_CONFIG'` or a path. Order is "most explicit first".
|
|
421
|
+
*
|
|
422
|
+
* @param worktreePath - Directory to check for project-level config, or null to
|
|
423
|
+
* check only the global layer
|
|
424
|
+
* @internal
|
|
425
|
+
*/
|
|
426
|
+
function findOwnedOpencodeConfig(worktreePath, env = process.env) {
|
|
427
|
+
const explicit = (env[exports.OPENCODE_CONFIG_ENV] ?? '').trim();
|
|
428
|
+
if (explicit !== '')
|
|
429
|
+
return `env:${exports.OPENCODE_CONFIG_ENV}`;
|
|
430
|
+
if (worktreePath !== null) {
|
|
431
|
+
for (const relative of WORKTREE_CONFIG_RELATIVE_PATHS) {
|
|
432
|
+
const candidate = path.join(worktreePath, relative);
|
|
433
|
+
if (fs.existsSync(candidate))
|
|
434
|
+
return candidate;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
const globalDir = opencodeGlobalConfigDir(env);
|
|
438
|
+
for (const name of GLOBAL_CONFIG_FILE_NAMES) {
|
|
439
|
+
const candidate = path.join(globalDir, name);
|
|
440
|
+
if (fs.existsSync(candidate))
|
|
441
|
+
return candidate;
|
|
331
442
|
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
443
|
+
return null;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Build the `provider` block from whatever is answering on localhost.
|
|
447
|
+
*
|
|
448
|
+
* Both fetches catch everything internally and answer `{}`, so `Promise.all`
|
|
449
|
+
* never rejects. Only providers with at least one model are included.
|
|
450
|
+
*
|
|
451
|
+
* @internal
|
|
452
|
+
*/
|
|
453
|
+
async function buildLocalProviderBlock() {
|
|
335
454
|
const [ollamaModels, lmStudioModels] = await Promise.all([
|
|
336
455
|
fetchOllamaModels(),
|
|
337
456
|
fetchLmStudioModels(),
|
|
338
457
|
]);
|
|
339
|
-
// Dynamic provider configuration: only include providers with models
|
|
340
458
|
const provider = {};
|
|
341
459
|
if (Object.keys(ollamaModels).length > 0) {
|
|
342
460
|
provider.ollama = {
|
|
@@ -354,9 +472,56 @@ async function ensureOpencodeConfig(worktreePath) {
|
|
|
354
472
|
models: lmStudioModels,
|
|
355
473
|
};
|
|
356
474
|
}
|
|
357
|
-
|
|
475
|
+
return provider;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Generate a local-provider `opencode.json`, if and only if the operator asked
|
|
479
|
+
* for one (Issue #1908).
|
|
480
|
+
*
|
|
481
|
+
* ## Decision order
|
|
482
|
+
*
|
|
483
|
+
* 1. {@link resolveOpencodeConfigMode} is `off` (the default): return
|
|
484
|
+
* immediately. Nothing is read, nothing is fetched, nothing is written — the
|
|
485
|
+
* two localhost probes that used to run on every launch are skipped too.
|
|
486
|
+
* 2. {@link findOwnedOpencodeConfig} finds configuration the operator owns:
|
|
487
|
+
* stand down. In `worktree` mode that includes the global layer, because a
|
|
488
|
+
* file in the worktree root outranks both `$OPENCODE_CONFIG` and the global
|
|
489
|
+
* config on a key collision (measured, 1.18.21) — writing one would quietly
|
|
490
|
+
* override the very thing that proves they configured opencode themselves.
|
|
491
|
+
* In `global` mode only the global layer is consulted; one repository's
|
|
492
|
+
* config says nothing about the machine.
|
|
493
|
+
* 3. Neither Ollama nor LM Studio has a model: nothing worth writing.
|
|
494
|
+
* 4. Write with `flag: 'wx'`, so a racing writer wins and is left alone.
|
|
495
|
+
*
|
|
496
|
+
* Write failures stay non-fatal — a session must start whether or not this
|
|
497
|
+
* succeeded.
|
|
498
|
+
*
|
|
499
|
+
* **Pre-existing files are never touched or removed.** A file an older
|
|
500
|
+
* CommandMate wrote still loads, so upgrading does not take anyone's provider
|
|
501
|
+
* list away; it only stops new ones appearing.
|
|
502
|
+
*
|
|
503
|
+
* @param worktreePath - Worktree directory path (from DB)
|
|
504
|
+
* @returns What was decided, for logging and tests
|
|
505
|
+
* @internal
|
|
506
|
+
*/
|
|
507
|
+
async function ensureOpencodeConfig(worktreePath) {
|
|
508
|
+
const mode = resolveOpencodeConfigMode();
|
|
509
|
+
if (mode === 'off') {
|
|
510
|
+
return { written: false, configPath: null, reason: 'disabled' };
|
|
511
|
+
}
|
|
512
|
+
// Validate path [D4-004]. Only on the worktree path, which is the only mode
|
|
513
|
+
// that touches the caller-supplied directory.
|
|
514
|
+
const validatedPath = mode === 'worktree' ? validateWorktreePath(worktreePath) : null;
|
|
515
|
+
const owned = findOwnedOpencodeConfig(validatedPath);
|
|
516
|
+
if (owned !== null) {
|
|
517
|
+
logger.info('opencode-config-generation-skipped', { mode, owned });
|
|
518
|
+
return { written: false, configPath: null, reason: 'existing-config' };
|
|
519
|
+
}
|
|
520
|
+
const targetDir = validatedPath ?? opencodeGlobalConfigDir();
|
|
521
|
+
const configPath = path.join(targetDir, CONFIG_FILE_NAME);
|
|
522
|
+
const provider = await buildLocalProviderBlock();
|
|
358
523
|
if (Object.keys(provider).length === 0) {
|
|
359
|
-
return;
|
|
524
|
+
return { written: false, configPath: null, reason: 'no-providers' };
|
|
360
525
|
}
|
|
361
526
|
// [D4-005] Generate config using JSON.stringify (not template literals).
|
|
362
527
|
// JSON.stringify ensures proper escaping of model names and other values,
|
|
@@ -366,6 +531,9 @@ async function ensureOpencodeConfig(worktreePath) {
|
|
|
366
531
|
provider,
|
|
367
532
|
};
|
|
368
533
|
try {
|
|
534
|
+
if (mode === 'global') {
|
|
535
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
536
|
+
}
|
|
369
537
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2), {
|
|
370
538
|
encoding: 'utf-8',
|
|
371
539
|
flag: 'wx',
|
|
@@ -373,9 +541,12 @@ async function ensureOpencodeConfig(worktreePath) {
|
|
|
373
541
|
}
|
|
374
542
|
catch (error) {
|
|
375
543
|
if (error.code === 'EEXIST') {
|
|
376
|
-
return;
|
|
544
|
+
return { written: false, configPath: null, reason: 'existing-config' };
|
|
377
545
|
}
|
|
378
546
|
// Non-fatal: write failure should not prevent session start
|
|
379
547
|
logger.warn('failed-to-write-opencodejson:error-insta');
|
|
548
|
+
return { written: false, configPath: null, reason: 'write-failed' };
|
|
380
549
|
}
|
|
550
|
+
logger.info('opencode-config-generated', { mode, configPath });
|
|
551
|
+
return { written: true, configPath, reason: 'written' };
|
|
381
552
|
}
|