commandmate 0.26.1 → 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 +435 -407
- package/.next/app-path-routes-manifest.json +30 -26
- 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 +30 -26
- 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-0e097c0286155883.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-fdfca039b7f5837e.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/wyFLOpmKpr45BHZ4svYpE/_buildManifest.js +0 -1
- /package/.next/static/{wyFLOpmKpr45BHZ4svYpE → t0BoV4H46ZgKmTjSi7GIz}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The per-instance turn model (Issue #1930, 方針書 §4 D3 決定 2・3 / §5.2 / §6.2).
|
|
4
|
+
*
|
|
5
|
+
* ## What this replaces
|
|
6
|
+
*
|
|
7
|
+
* Issue #1926 landed the CONTRACT — `turnId` / `openedAt` / `closedAt` /
|
|
8
|
+
* `closedBy` on `structuredEvents` — and derived it from the single most recent
|
|
9
|
+
* structured event, because that was all `agent-event-state` retained. Its own
|
|
10
|
+
* module doc said what was wrong with that and named the fix:
|
|
11
|
+
*
|
|
12
|
+
* > It is not a stable turn identity yet. The retained record is one event, so
|
|
13
|
+
* > a `pre_tool_use` arriving mid-turn re-stamps `openedAt` and therefore the
|
|
14
|
+
* > id. […] that is exactly what the Phase 4 `TurnRecord` fixes.
|
|
15
|
+
*
|
|
16
|
+
* This module is that `TurnRecord`. The state it describes is held by
|
|
17
|
+
* `agent-event-state` (one record per `(worktree, tool, instance)`); everything
|
|
18
|
+
* here is pure, so the whole state machine can be driven from a test with no
|
|
19
|
+
* tmux session, no database and no clock behind it.
|
|
20
|
+
*
|
|
21
|
+
* ## The two rules the old model could not express
|
|
22
|
+
*
|
|
23
|
+
* 1. **An event that carries no verdict does not close a turn, and does not
|
|
24
|
+
* erase one either** (§4 D3 決定 2). Under "the newest event is the
|
|
25
|
+
* verdict", a `session_start`, a `session_end`, an unrecognised
|
|
26
|
+
* `Notification` or a `permission.replied` frame each overwrote the record
|
|
27
|
+
* the verdict was read from, so an event that said nothing published
|
|
28
|
+
* "nothing is known". Issue #1903 fixed the one instance of that which was
|
|
29
|
+
* measured (copilot's late `SessionStart`) by *holding the delivery*; here
|
|
30
|
+
* the rule is general, and the hold is only about which event is displayed.
|
|
31
|
+
* 2. **A turn has an identity**, so `turnId` survives the tool calls inside it
|
|
32
|
+
* and does not survive a session that was recreated underneath it.
|
|
33
|
+
*
|
|
34
|
+
* ## Why the file is still called `provisional-turn.ts`
|
|
35
|
+
*
|
|
36
|
+
* Because the published field names are a contract that `capture --json`,
|
|
37
|
+
* `wait` and the header chip already read, and renaming the module would move
|
|
38
|
+
* that contract for no reader's benefit. The *provisional* derivation is gone;
|
|
39
|
+
* see {@link derivePublishedTurn}, which now reads a real record.
|
|
40
|
+
*
|
|
41
|
+
* @module lib/session/provisional-turn
|
|
42
|
+
*/
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.NO_TURN = exports.MAX_EXTERNAL_ID_LENGTH = exports.MAX_PENDING_DECISIONS_PER_TURN = exports.SCRAPER_COMPLETION_POLLS = exports.DIALOG_PENDING_MAX_MS = exports.TURN_STALE_AFTER_MS = exports.TURN_CLOSE_REASONS = exports.TURN_ACTIVITY_EVENTS = void 0;
|
|
45
|
+
exports.derivePublishedTurn = derivePublishedTurn;
|
|
46
|
+
exports.acceptExternalId = acceptExternalId;
|
|
47
|
+
exports.boundDisplayText = boundDisplayText;
|
|
48
|
+
exports.boundDecisionMessage = boundDecisionMessage;
|
|
49
|
+
exports.boundDecisionToolName = boundDecisionToolName;
|
|
50
|
+
exports.isDecisionLive = isDecisionLive;
|
|
51
|
+
exports.isDeliveryExpired = isDeliveryExpired;
|
|
52
|
+
exports.closesTurn = closesTurn;
|
|
53
|
+
const agent_event_types_1 = require("../../lib/hooks/agent-event-types");
|
|
54
|
+
const structured_prompt_1 = require("../../lib/session/structured-prompt");
|
|
55
|
+
/**
|
|
56
|
+
* The events that mean "the agent is mid-turn".
|
|
57
|
+
*
|
|
58
|
+
* The same three `wait.ts` adopts a turn from (`TURN_OPENING_EVENT_TYPES`), and
|
|
59
|
+
* that is not a coincidence to be tidied away: `wait`'s `adoptTurnStart` reads
|
|
60
|
+
* {@link PublishedTurn.openedAt} since Issue #1930, so a derivation that opened
|
|
61
|
+
* a turn on a different set would silently change `wait`'s completion gate.
|
|
62
|
+
* `tests/unit/session/status-contract-1926.test.ts` pins the two sets equal —
|
|
63
|
+
* the CLI cannot import this module (`tsconfig.cli.json` sets `"paths": {}`),
|
|
64
|
+
* so the pin is the only thing holding them together.
|
|
65
|
+
*
|
|
66
|
+
* `stop` is not here and `notification(idle_prompt)` is not either: #1839
|
|
67
|
+
* measured Claude emitting `idle_prompt` 62 s into a turn that ran nothing, so
|
|
68
|
+
* only `Stop` ends a turn and nothing but these three opens one.
|
|
69
|
+
*/
|
|
70
|
+
exports.TURN_ACTIVITY_EVENTS = new Set([
|
|
71
|
+
'user_prompt_submit',
|
|
72
|
+
'pre_tool_use',
|
|
73
|
+
'post_tool_use',
|
|
74
|
+
]);
|
|
75
|
+
/**
|
|
76
|
+
* Why a turn ended.
|
|
77
|
+
*
|
|
78
|
+
* The vocabulary §7 reserved and this Issue fills in. Every value is a
|
|
79
|
+
* different *kind* of evidence, and an operator reading `capture --json` or a
|
|
80
|
+
* `wait` diagnostic has to be able to tell them apart:
|
|
81
|
+
*
|
|
82
|
+
* - `stop` — the agent's own `Stop`, for the session that opened the turn.
|
|
83
|
+
* The only value that is the agent speaking.
|
|
84
|
+
* - `session_end` — the agent's session ended under the turn (`/clear`, exit).
|
|
85
|
+
* Not a completion: the work was abandoned, so no `ready` is published.
|
|
86
|
+
* - `stale` — nothing has been heard for {@link TURN_STALE_AFTER_MS}. The
|
|
87
|
+
* bound that stops a lost `Stop` from asserting `running` forever.
|
|
88
|
+
* - `scraper_evidence` — the terminal frame said "done" on
|
|
89
|
+
* {@link SCRAPER_COMPLETION_POLLS} consecutive polls with positive evidence.
|
|
90
|
+
* The screen, not the agent.
|
|
91
|
+
* - `resync_idle` — a source that can be re-read (`capabilities.resync`) was
|
|
92
|
+
* asked after a dropped transport and answered "not busy".
|
|
93
|
+
* - `generation` — the process that owned the turn was replaced.
|
|
94
|
+
*/
|
|
95
|
+
exports.TURN_CLOSE_REASONS = [
|
|
96
|
+
'stop',
|
|
97
|
+
'session_end',
|
|
98
|
+
'stale',
|
|
99
|
+
'scraper_evidence',
|
|
100
|
+
'resync_idle',
|
|
101
|
+
'generation',
|
|
102
|
+
];
|
|
103
|
+
/**
|
|
104
|
+
* How long a turn is trusted after the last thing that was heard about it
|
|
105
|
+
* (Issue #1723, renamed here in #1930).
|
|
106
|
+
*
|
|
107
|
+
* Hooks are fail-open by design: a timeout or a refused connection costs the
|
|
108
|
+
* event and never the agent's turn (`agent-hooks-live-verification.md` §1.1).
|
|
109
|
+
* A *lost* `Stop` is therefore possible, and without a bound it would leave
|
|
110
|
+
* this layer asserting `running` for a session that finished — `commandmate
|
|
111
|
+
* wait` would then poll until `--timeout` on a session the scraper could have
|
|
112
|
+
* called done. The bound converts "forever" into "at most this long", after
|
|
113
|
+
* which the scraper takes the session back.
|
|
114
|
+
*
|
|
115
|
+
* Deliberately generous. A single agent turn running past 30 minutes is
|
|
116
|
+
* ordinary for the workloads this tool exists to babysit, and expiring a live
|
|
117
|
+
* verdict mid-turn costs the whole benefit of the two-layer split.
|
|
118
|
+
*
|
|
119
|
+
* Re-exported by `agent-event-state` as `STRUCTURED_STATE_MAX_AGE_MS`, which is
|
|
120
|
+
* the name `status-evidence` and the suites already read. One expression, two
|
|
121
|
+
* names — §4 D1 決定 2 forbids two expressions, not two spellings.
|
|
122
|
+
*/
|
|
123
|
+
exports.TURN_STALE_AFTER_MS = 30 * 60 * 1000;
|
|
124
|
+
/**
|
|
125
|
+
* How long a dialog record is held without being answered (Issue #1930).
|
|
126
|
+
*
|
|
127
|
+
* §4 D3 asks for `dialogPendingMaxMs` as a **retention** bound, and separates it
|
|
128
|
+
* from the **delivery** bound (`decisionTimeoutSeconds`, #1924). The two answer
|
|
129
|
+
* different questions and are allowed to disagree:
|
|
130
|
+
*
|
|
131
|
+
* - delivery — "can a verdict from this server still reach the agent?"
|
|
132
|
+
* copilot gives up after ~10 s. Past it the record is reported as
|
|
133
|
+
* `deliveryExpired`; the dialog is **still on screen**, so `waiting` is kept.
|
|
134
|
+
* Expiring the state there would tell an operator the pane is free while a
|
|
135
|
+
* human is still blocked on it.
|
|
136
|
+
* - retention — "is this record still describing something?" Two values,
|
|
137
|
+
* because the two sources of a record are different kinds of statement:
|
|
138
|
+
*
|
|
139
|
+
* `predicted` (20 s) is a `PermissionRequest` this server declined to decide.
|
|
140
|
+
* It fires *before* the dialog, so it is a prediction — an accurate one (D5
|
|
141
|
+
* measured `{}` landing in the ordinary TUI approval flow), but about a
|
|
142
|
+
* version of the agent, a permission mode and a rule set this server does not
|
|
143
|
+
* get to see in full. A prediction that nothing confirms must expire, because
|
|
144
|
+
* the cost of it sticking is a `wait --on-prompt agent` that exits 10 on a
|
|
145
|
+
* session with no dialog in it. 20 s is generous against both confirmations:
|
|
146
|
+
* `Notification(permission_prompt)` lands at ~6 s, and the scraper reads the
|
|
147
|
+
* pane through a 5 s capture cache on a 5 s poll.
|
|
148
|
+
*
|
|
149
|
+
* `confirmed` is the turn's own staleness bound: something independent saw
|
|
150
|
+
* the dialog, so it is as trustworthy as the turn around it.
|
|
151
|
+
*/
|
|
152
|
+
exports.DIALOG_PENDING_MAX_MS = {
|
|
153
|
+
predicted: 20_000,
|
|
154
|
+
confirmed: exports.TURN_STALE_AFTER_MS,
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Consecutive positive "the agent is back at its composer" polls that close a
|
|
158
|
+
* turn as {@link TurnCloseReason} `scraper_evidence`.
|
|
159
|
+
*
|
|
160
|
+
* Three rather than one, because one poll is one capture and a capture taken
|
|
161
|
+
* mid-repaint is exactly the frame the detector is worst at. Three at the 5 s
|
|
162
|
+
* poll is ~15 s of agreement, which is far inside the 30-minute staleness bound
|
|
163
|
+
* it exists to shorten and far outside any single-frame artefact.
|
|
164
|
+
*
|
|
165
|
+
* **This does not complete a `wait`.** `wait`'s turn-boundary gate is
|
|
166
|
+
* `lastStopEventAt`, and #1839 measured why: a 529 storm returns Claude to its
|
|
167
|
+
* composer in ~3 s having executed nothing, with the frame reading positively
|
|
168
|
+
* as `ready`. Closing the turn here retires the *structured verdict* — so
|
|
169
|
+
* `capture --json` and `instances` stop saying `running` for a session nothing
|
|
170
|
+
* is running in — and leaves the completion question exactly where #1839 and
|
|
171
|
+
* #1975 put it.
|
|
172
|
+
*/
|
|
173
|
+
exports.SCRAPER_COMPLETION_POLLS = 3;
|
|
174
|
+
/**
|
|
175
|
+
* Cap on the decisions one turn retains (S14(d)).
|
|
176
|
+
*
|
|
177
|
+
* The list is fed by frames from a process CommandMate did not start. An agent
|
|
178
|
+
* that raised hundreds of approvals in one turn must cost a bounded record, and
|
|
179
|
+
* the overflow has to be *counted* rather than dropped in silence — see
|
|
180
|
+
* `getAgentEventDropCounts`.
|
|
181
|
+
*/
|
|
182
|
+
exports.MAX_PENDING_DECISIONS_PER_TURN = 16;
|
|
183
|
+
/**
|
|
184
|
+
* Longest external id this layer will store (S1).
|
|
185
|
+
*
|
|
186
|
+
* Ids arrive from the agent and reach a Map key, a log line and a JSON payload.
|
|
187
|
+
* An id longer than this is **discarded, never truncated**: a truncated id
|
|
188
|
+
* compares equal to a different id that shares its prefix, which would let one
|
|
189
|
+
* approval's reply retire another's record. The discard is counted
|
|
190
|
+
* (`idsDiscarded`) so an operator can see it happened.
|
|
191
|
+
*/
|
|
192
|
+
exports.MAX_EXTERNAL_ID_LENGTH = 128;
|
|
193
|
+
/** Nothing has been reported, so nothing can be said about a turn. */
|
|
194
|
+
exports.NO_TURN = {
|
|
195
|
+
turnId: null,
|
|
196
|
+
openedAt: null,
|
|
197
|
+
closedAt: null,
|
|
198
|
+
closedBy: null,
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Publish the turn fields for one instance.
|
|
202
|
+
*
|
|
203
|
+
* Pure, and takes the *effective* record — the caller has already applied the
|
|
204
|
+
* generation fence and the staleness bound, because those need state this
|
|
205
|
+
* module does not hold.
|
|
206
|
+
*/
|
|
207
|
+
function derivePublishedTurn(turn) {
|
|
208
|
+
if (turn === null)
|
|
209
|
+
return exports.NO_TURN;
|
|
210
|
+
return {
|
|
211
|
+
turnId: turn.turnId,
|
|
212
|
+
openedAt: turn.openedAt,
|
|
213
|
+
closedAt: turn.closedAt,
|
|
214
|
+
closedBy: turn.closedBy,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Accept an external id, or refuse it (S1).
|
|
219
|
+
*
|
|
220
|
+
* Refusal is the whole point: an id that is empty, over-long, or carrying
|
|
221
|
+
* control characters is **discarded**, and the caller then behaves as it does
|
|
222
|
+
* for a source that publishes no id at all — a path every consumer already has,
|
|
223
|
+
* because five of the six sources take it. Truncating instead would manufacture
|
|
224
|
+
* collisions between ids that share a prefix, and the failure that produces
|
|
225
|
+
* (one approval's reply retiring another's record) is silent.
|
|
226
|
+
*
|
|
227
|
+
* @returns The id, or null when it must not be used
|
|
228
|
+
*/
|
|
229
|
+
function acceptExternalId(raw) {
|
|
230
|
+
if (typeof raw !== 'string')
|
|
231
|
+
return null;
|
|
232
|
+
if (raw.length === 0 || raw.length > exports.MAX_EXTERNAL_ID_LENGTH)
|
|
233
|
+
return null;
|
|
234
|
+
for (let i = 0; i < raw.length; i++) {
|
|
235
|
+
const code = raw.charCodeAt(i);
|
|
236
|
+
// An id reaches a Map key, a log line and a JSON payload; control
|
|
237
|
+
// characters in any of the three are somebody else's parsing bug.
|
|
238
|
+
if (code < 0x20 || code === 0x7f)
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
return raw;
|
|
242
|
+
}
|
|
243
|
+
/** Bound a human-facing line before it is retained (S3). */
|
|
244
|
+
function boundDisplayText(raw, max) {
|
|
245
|
+
if (typeof raw !== 'string' || raw === '')
|
|
246
|
+
return null;
|
|
247
|
+
return raw.slice(0, max);
|
|
248
|
+
}
|
|
249
|
+
/** {@link boundDisplayText} at the message bound. */
|
|
250
|
+
function boundDecisionMessage(raw) {
|
|
251
|
+
return boundDisplayText(raw, structured_prompt_1.MAX_STRUCTURED_PROMPT_MESSAGE_LENGTH);
|
|
252
|
+
}
|
|
253
|
+
/** {@link boundDisplayText} at the detail bound — tool names, subtypes. */
|
|
254
|
+
function boundDecisionToolName(raw) {
|
|
255
|
+
return boundDisplayText(raw, agent_event_types_1.MAX_EVENT_DETAIL_LENGTH);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Whether this decision is still describing something, at `now`.
|
|
259
|
+
*
|
|
260
|
+
* The retention bound of {@link DIALOG_PENDING_MAX_MS}, applied on read. A
|
|
261
|
+
* decision that has fallen out is not mutated in place — the caller drops it and
|
|
262
|
+
* counts it — so this stays a pure predicate.
|
|
263
|
+
*/
|
|
264
|
+
function isDecisionLive(decision, now) {
|
|
265
|
+
const bound = decision.confirmedAt === null
|
|
266
|
+
? exports.DIALOG_PENDING_MAX_MS.predicted
|
|
267
|
+
: exports.DIALOG_PENDING_MAX_MS.confirmed;
|
|
268
|
+
return now - decision.at < bound;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Whether a verdict from this server can still reach the agent, at `now`.
|
|
272
|
+
*
|
|
273
|
+
* Independent of {@link isDecisionLive} on purpose — see
|
|
274
|
+
* {@link DIALOG_PENDING_MAX_MS}. An expired delivery window keeps `waiting`:
|
|
275
|
+
* the dialog is on the pane whether or not this server can still answer it.
|
|
276
|
+
*
|
|
277
|
+
* The timeout is passed in rather than stored on the record, because it is a
|
|
278
|
+
* *declared capability* of the source (#1924) and `agent-event-state` cannot
|
|
279
|
+
* reach the source registry — its module graph pulls in `better-sqlite3`, which
|
|
280
|
+
* is why every capability arrives there as a value the caller hands over. The
|
|
281
|
+
* one layer that already holds both is `current-output-builder`, which is where
|
|
282
|
+
* this is computed for the payload.
|
|
283
|
+
*
|
|
284
|
+
* @param decisionTimeoutSeconds - `capabilities.decisionTimeoutSeconds`; null
|
|
285
|
+
* for a source that waits forever, which can never expire
|
|
286
|
+
*/
|
|
287
|
+
function isDeliveryExpired(decision, decisionTimeoutSeconds, now) {
|
|
288
|
+
if (decisionTimeoutSeconds === null)
|
|
289
|
+
return false;
|
|
290
|
+
return now - decision.at >= decisionTimeoutSeconds * 1000;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Whether a turn-ending event naming `eventSessionId` ends `turn`.
|
|
294
|
+
*
|
|
295
|
+
* §4 D3 決定 2: a `stop` closes **the turn of the session that sent it**. The
|
|
296
|
+
* acceptance case is "another session's idle": opencode publishes `session.idle`
|
|
297
|
+
* for every session its server holds, including ones belonging to other
|
|
298
|
+
* processes entirely (#1758 §5.6), and one of those completing must not
|
|
299
|
+
* complete this pane's work.
|
|
300
|
+
*
|
|
301
|
+
* When either side is anonymous the two are treated as the same session,
|
|
302
|
+
* because "no id" is the shape a hand-configured #1549 relay hook posts and the
|
|
303
|
+
* rule has to survive it. That residue is bounded by {@link TURN_STALE_AFTER_MS}
|
|
304
|
+
* and by the generation fence.
|
|
305
|
+
*/
|
|
306
|
+
function closesTurn(turn, eventSessionId) {
|
|
307
|
+
if (turn.sessionId === null || eventSessionId === null)
|
|
308
|
+
return true;
|
|
309
|
+
return turn.sessionId === eventSessionId;
|
|
310
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The one place tool / instance resolution happens (Issue #1925, design §4 D5).
|
|
4
|
+
*
|
|
5
|
+
* Before this module the answer to "which CLI tool and which instance does this
|
|
6
|
+
* request target?" had four implementations (design §3 P4): the server-side
|
|
7
|
+
* `resolveInstanceCliTool`, the CLI's own two-stage copy, `kill-session`'s
|
|
8
|
+
* inline expression and `capture`'s `resolvePaneCliTool`. They disagreed —
|
|
9
|
+
* `kill-session` let an explicit `?cliTool` override the roster and never
|
|
10
|
+
* reported the contradiction, and the CLI copy had no primary-anchor stage — so
|
|
11
|
+
* the same (worktree, instance, tool) triple resolved differently depending on
|
|
12
|
+
* which door the request came through. The tool id is part of the tmux session
|
|
13
|
+
* name, so disagreeing means starting or reading the wrong agent under a
|
|
14
|
+
* session name that claims otherwise.
|
|
15
|
+
*
|
|
16
|
+
* Precedence (design §4 D5 決定 2, matching the #1629 implementation):
|
|
17
|
+
*
|
|
18
|
+
* instanceId omitted -> the explicit request, or the worktree default.
|
|
19
|
+
* The roster is not consulted at all (DR3-020).
|
|
20
|
+
* instanceId given -> roster entry
|
|
21
|
+
* -> explicit request (only for an instance the roster
|
|
22
|
+
* does not know: the ad-hoc `send --instance <new-id>`)
|
|
23
|
+
* -> instanceId when it is itself a CLI tool id (the
|
|
24
|
+
* primary-instance anchor, #868)
|
|
25
|
+
* -> worktree default
|
|
26
|
+
* -> DEFAULT_SESSION_CLI_TOOL
|
|
27
|
+
*
|
|
28
|
+
* The roster outranks the explicit request because it is the user-maintained
|
|
29
|
+
* declaration of what a named instance is; a contradiction is reported rather
|
|
30
|
+
* than silently resolved. Callers decide what to do with it: routes with a side
|
|
31
|
+
* effect answer 400, read-only routes answer 200 and surface the conflict in
|
|
32
|
+
* the payload (design §4 D5 / DR3-015).
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.INSTANCE_TOOL_CONFLICT = exports.DEFAULT_SESSION_CLI_TOOL = void 0;
|
|
36
|
+
exports.resolveSessionTarget = resolveSessionTarget;
|
|
37
|
+
exports.resolveSessionTargetStrict = resolveSessionTargetStrict;
|
|
38
|
+
exports.describeSessionTargetConflict = describeSessionTargetConflict;
|
|
39
|
+
const worktree_db_1 = require("../../lib/db/worktree-db");
|
|
40
|
+
const agent_instances_db_1 = require("../../lib/db/agent-instances-db");
|
|
41
|
+
const types_1 = require("../../lib/cli-tools/types");
|
|
42
|
+
/**
|
|
43
|
+
* Last-resort CLI tool when nothing else in the precedence chain has an answer.
|
|
44
|
+
*
|
|
45
|
+
* Design §4 D5 決定 4 names this module as the single place the default agent
|
|
46
|
+
* may be named as a literal: every other copy of it scattered through the
|
|
47
|
+
* resolution paths is a duplicated default that this function exists to absorb.
|
|
48
|
+
* Reaching it is a warning, not a normal outcome — see `resolvedBy: 'fallback'`.
|
|
49
|
+
*/
|
|
50
|
+
exports.DEFAULT_SESSION_CLI_TOOL = 'claude';
|
|
51
|
+
/** Machine-readable reason code for a contradiction, shared by every route. */
|
|
52
|
+
exports.INSTANCE_TOOL_CONFLICT = 'instance_tool_conflict';
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the CLI tool and instance a request targets.
|
|
55
|
+
*
|
|
56
|
+
* Always returns a target: a contradiction is reported through `conflict`
|
|
57
|
+
* rather than by failing, because the two classes of caller need different
|
|
58
|
+
* outcomes from the same facts. Use {@link resolveSessionTargetStrict} for the
|
|
59
|
+
* routes that must refuse instead.
|
|
60
|
+
*
|
|
61
|
+
* @param db - Database instance
|
|
62
|
+
* @param worktreeId - Worktree ID (already canonicalized and validated)
|
|
63
|
+
* @param options - Targeting signals carried by the request
|
|
64
|
+
* @returns The resolved target, with `conflict` set when the request contradicts the roster
|
|
65
|
+
*/
|
|
66
|
+
function resolveSessionTarget(db, worktreeId, options = {}) {
|
|
67
|
+
const { instanceId, requestedCliTool } = options;
|
|
68
|
+
// DR3-020: without an instanceId there is nothing to look up, and reading the
|
|
69
|
+
// roster here would let an unrelated instance's tool leak into a request that
|
|
70
|
+
// never named one.
|
|
71
|
+
if (!instanceId) {
|
|
72
|
+
if (requestedCliTool) {
|
|
73
|
+
return {
|
|
74
|
+
cliToolId: requestedCliTool,
|
|
75
|
+
instanceId: requestedCliTool,
|
|
76
|
+
resolvedBy: 'explicit',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return worktreeDefaultTarget(db, worktreeId, undefined);
|
|
80
|
+
}
|
|
81
|
+
const registered = (0, agent_instances_db_1.getAgentInstance)(db, worktreeId, instanceId);
|
|
82
|
+
if (registered && (0, types_1.isCliToolType)(registered.cliTool)) {
|
|
83
|
+
const target = {
|
|
84
|
+
cliToolId: registered.cliTool,
|
|
85
|
+
instanceId,
|
|
86
|
+
resolvedBy: 'roster',
|
|
87
|
+
};
|
|
88
|
+
if (requestedCliTool && requestedCliTool !== registered.cliTool) {
|
|
89
|
+
target.conflict = {
|
|
90
|
+
instanceId,
|
|
91
|
+
rosterCliTool: registered.cliTool,
|
|
92
|
+
requestedCliTool,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return target;
|
|
96
|
+
}
|
|
97
|
+
// The roster does not know this instance (the ad-hoc `send --instance <new-id>`
|
|
98
|
+
// flow), so an explicit tool is the only declaration there is.
|
|
99
|
+
if (requestedCliTool) {
|
|
100
|
+
return { cliToolId: requestedCliTool, instanceId, resolvedBy: 'explicit' };
|
|
101
|
+
}
|
|
102
|
+
// #868: an instance id that names a CLI tool *is* that tool's primary
|
|
103
|
+
// instance, which holds without a roster row.
|
|
104
|
+
if ((0, types_1.isCliToolType)(instanceId)) {
|
|
105
|
+
return { cliToolId: instanceId, instanceId, resolvedBy: 'primary' };
|
|
106
|
+
}
|
|
107
|
+
return worktreeDefaultTarget(db, worktreeId, instanceId);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The tail of the chain: the worktree's own CLI tool, then the last-resort
|
|
111
|
+
* default. Split out so both entry points into it read the same.
|
|
112
|
+
*/
|
|
113
|
+
function worktreeDefaultTarget(db, worktreeId, instanceId) {
|
|
114
|
+
const worktree = (0, worktree_db_1.getWorktreeById)(db, worktreeId);
|
|
115
|
+
const worktreeCliTool = worktree?.cliToolId;
|
|
116
|
+
if (worktreeCliTool && (0, types_1.isCliToolType)(worktreeCliTool)) {
|
|
117
|
+
return {
|
|
118
|
+
cliToolId: worktreeCliTool,
|
|
119
|
+
instanceId: instanceId ?? worktreeCliTool,
|
|
120
|
+
resolvedBy: 'worktree-default',
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
cliToolId: exports.DEFAULT_SESSION_CLI_TOOL,
|
|
125
|
+
instanceId: instanceId ?? exports.DEFAULT_SESSION_CLI_TOOL,
|
|
126
|
+
resolvedBy: 'fallback',
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* {@link resolveSessionTarget} for routes with a side effect (design §4 D5 決定 3
|
|
131
|
+
* / DR3-015): `send`, `respond`, `interrupt`, `kill-session`, `terminal`,
|
|
132
|
+
* `special-keys` and `auto-yes` POST answer 400 rather than guess which of the
|
|
133
|
+
* two contradicting declarations the operator meant.
|
|
134
|
+
*
|
|
135
|
+
* @param db - Database instance
|
|
136
|
+
* @param worktreeId - Worktree ID (already canonicalized and validated)
|
|
137
|
+
* @param options - Targeting signals carried by the request
|
|
138
|
+
* @returns The resolved target, or the conflict to answer 400 with
|
|
139
|
+
*/
|
|
140
|
+
function resolveSessionTargetStrict(db, worktreeId, options = {}) {
|
|
141
|
+
const target = resolveSessionTarget(db, worktreeId, options);
|
|
142
|
+
if (target.conflict) {
|
|
143
|
+
return { ok: false, error: exports.INSTANCE_TOOL_CONFLICT, conflict: target.conflict };
|
|
144
|
+
}
|
|
145
|
+
return { ok: true, target };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The sentence shown to a human when the roster and the request disagree.
|
|
149
|
+
* Names both declarations and the three ways out, because the operator has to
|
|
150
|
+
* pick which one is wrong.
|
|
151
|
+
*/
|
|
152
|
+
function describeSessionTargetConflict(conflict) {
|
|
153
|
+
return (`Agent instance '${conflict.instanceId}' is registered as ${conflict.rosterCliTool}, `
|
|
154
|
+
+ `but ${conflict.requestedCliTool} was requested. `
|
|
155
|
+
+ `Omit the agent, pass ${conflict.rosterCliTool}, or update the instance's roster entry.`);
|
|
156
|
+
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* 1. savePendingAssistantResponse — persist the previous assistant reply
|
|
13
13
|
* 2. orphan detection — Issue #379 duplicate-message guard
|
|
14
14
|
* 3. copilot /model command — Issue #576 (copilot only)
|
|
15
|
-
* 4. send to CLI tool — image
|
|
15
|
+
* 4. send to CLI tool — image branch / ICLITool.sendMessage
|
|
16
16
|
* 5. createMessage (role: 'user') — INSERT INTO chat_messages (History source)
|
|
17
17
|
* 6. orphan deletion — remove prior duplicate after persist
|
|
18
18
|
* 7. updateLastUserMessage
|
|
@@ -30,11 +30,8 @@ const manager_1 = require("../../lib/cli-tools/manager");
|
|
|
30
30
|
const types_1 = require("../../lib/cli-tools/types");
|
|
31
31
|
const response_poller_1 = require("../../lib/polling/response-poller");
|
|
32
32
|
const assistant_response_saver_1 = require("../../lib/assistant-response-saver");
|
|
33
|
-
const tmux_1 = require("../../lib/tmux/tmux");
|
|
34
|
-
const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
|
|
35
33
|
const logger_1 = require("../../lib/logger");
|
|
36
34
|
const prompt_waiting_guard_1 = require("../../lib/session/prompt-waiting-guard");
|
|
37
|
-
const copilot_constants_1 = require("../../config/copilot-constants");
|
|
38
35
|
const logger = (0, logger_1.createLogger)('session/send-user-message');
|
|
39
36
|
function getErrorMessage(error) {
|
|
40
37
|
return error instanceof Error ? error.message : String(error);
|
|
@@ -140,21 +137,20 @@ async function sendUserMessage(db, params) {
|
|
|
140
137
|
await cliTool.sendMessage(worktreeId, messageWithPath, instanceId);
|
|
141
138
|
}
|
|
142
139
|
}
|
|
143
|
-
else if (cliToolId === 'copilot') {
|
|
144
|
-
// Copilot: use sendKeys directly to avoid waitForPrompt blocking (#559).
|
|
145
|
-
// Copilot CLI auto-enters multi-line mode when text exceeds pane width.
|
|
146
|
-
// In multi-line mode, C-m (bundled with text) adds a newline instead of
|
|
147
|
-
// submitting. Sending Enter as a separate tmux command after a delay
|
|
148
|
-
// allows the TUI to process the text first, then accept Enter as submit.
|
|
149
|
-
const sessionName = cliTool.getSessionName(worktreeId, instanceId);
|
|
150
|
-
// Replace newlines with spaces to prevent Copilot CLI multi-line mode
|
|
151
|
-
const copilotContent = content.replace(/\n+/g, ' ').trim();
|
|
152
|
-
await (0, tmux_1.sendKeys)(sessionName, copilotContent, false);
|
|
153
|
-
await new Promise(resolve => setTimeout(resolve, copilot_constants_1.COPILOT_SEND_ENTER_DELAY_MS));
|
|
154
|
-
await (0, tmux_1.sendSpecialKeys)(sessionName, ['Enter']);
|
|
155
|
-
(0, tmux_capture_cache_1.invalidateCache)(sessionName);
|
|
156
|
-
}
|
|
157
140
|
else {
|
|
141
|
+
// Issue #1906: every tool — copilot included — goes through its own
|
|
142
|
+
// `ICLITool.sendMessage`. copilot used to be special-cased here with a raw
|
|
143
|
+
// `sendKeys` + delayed Enter, which skipped `CopilotTool.sendMessage`
|
|
144
|
+
// entirely: no `waitForPrompt` (so a folder-trust dialog was typed into,
|
|
145
|
+
// #1886), no selection-list branch (#1895), and — because nothing read the
|
|
146
|
+
// pane back — no #1471 "the Enter was swallowed" failure, so a typed-but-
|
|
147
|
+
// unsent message was reported as sent. It also flattened `\n+` to spaces,
|
|
148
|
+
// which silently turned a contract preamble or a Markdown body into one
|
|
149
|
+
// line. Measured on copilot 1.0.80 (private tmux socket, `tmux -L`):
|
|
150
|
+
// `send-keys` with literal newlines leaves the body multi-line in the
|
|
151
|
+
// composer (`❯ line one` / ` line two` / ` line three`) and a SEPARATE
|
|
152
|
+
// Enter submits all of it — the transcript echo keeps the line breaks — so
|
|
153
|
+
// the flattening is not needed to make Enter submit and is now gone.
|
|
158
154
|
await cliTool.sendMessage(worktreeId, content, instanceId);
|
|
159
155
|
}
|
|
160
156
|
}
|
|
@@ -29,13 +29,24 @@
|
|
|
29
29
|
* @module lib/session/session-start-error
|
|
30
30
|
*/
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
-
exports.SessionStartFailedError = exports.SessionStartTimeoutError = exports.SESSION_START_FAILED_CODE = exports.SESSION_STARTING_CODE = void 0;
|
|
32
|
+
exports.SessionStartUnavailableError = exports.SessionStartFailedError = exports.SessionStartTimeoutError = exports.SESSION_START_UNAVAILABLE_CODE = exports.SESSION_START_FAILED_CODE = exports.SESSION_STARTING_CODE = void 0;
|
|
33
33
|
exports.isSessionStartTimeoutError = isSessionStartTimeoutError;
|
|
34
34
|
exports.isSafeSessionStartError = isSafeSessionStartError;
|
|
35
|
+
exports.isSessionStartUnavailableError = isSessionStartUnavailableError;
|
|
35
36
|
/** Code for a session that exists and is still coming up. */
|
|
36
37
|
exports.SESSION_STARTING_CODE = 'SESSION_STARTING';
|
|
37
38
|
/** Code for a session that started and then reported a terminal error. */
|
|
38
39
|
exports.SESSION_START_FAILED_CODE = 'SESSION_START_FAILED';
|
|
40
|
+
/**
|
|
41
|
+
* Code for a start that could not even be attempted — the CLI is not on PATH.
|
|
42
|
+
*
|
|
43
|
+
* Issue #2009: every one of the seven tools already detects this, and every one
|
|
44
|
+
* of them threw a bare `Error`, so nothing downstream could tell "the binary is
|
|
45
|
+
* missing" (install it) from "tmux refused" (something else is wrong) from "it
|
|
46
|
+
* is merely slow" (wait). The code is what lets the ONE notification decision in
|
|
47
|
+
* `lib/push/failure-push-notifier` answer all three differently.
|
|
48
|
+
*/
|
|
49
|
+
exports.SESSION_START_UNAVAILABLE_CODE = 'SESSION_START_UNAVAILABLE';
|
|
39
50
|
/** The codes {@link isSafeSessionStartError} recognises. */
|
|
40
51
|
const SAFE_CODES = [exports.SESSION_STARTING_CODE, exports.SESSION_START_FAILED_CODE];
|
|
41
52
|
/**
|
|
@@ -99,6 +110,35 @@ class SessionStartFailedError extends Error {
|
|
|
99
110
|
}
|
|
100
111
|
}
|
|
101
112
|
exports.SessionStartFailedError = SessionStartFailedError;
|
|
113
|
+
/**
|
|
114
|
+
* The CLI tool is not installed, so no session could be attempted.
|
|
115
|
+
*
|
|
116
|
+
* Issue #2009. The message defaults to the wording `POST /api/worktrees/:id/send`
|
|
117
|
+
* used to compose at the HTTP layer, so a tool that has nothing more useful to
|
|
118
|
+
* say keeps the body its callers already read; a tool that DOES (copilot ships
|
|
119
|
+
* an install hint) passes its own.
|
|
120
|
+
*
|
|
121
|
+
* Deliberately NOT in {@link SAFE_CODES}: that list is #1637's exception to
|
|
122
|
+
* SEC-SF-002 for `startClaudeSession`'s catch, and widening it would change
|
|
123
|
+
* which messages that catch lets past. Nothing throws this from inside that
|
|
124
|
+
* try block — claude's own install check runs before it — so membership would
|
|
125
|
+
* buy nothing and cost the reader a reason to re-audit #1637.
|
|
126
|
+
*/
|
|
127
|
+
class SessionStartUnavailableError extends Error {
|
|
128
|
+
toolName;
|
|
129
|
+
/** @see SESSION_START_UNAVAILABLE_CODE */
|
|
130
|
+
code = exports.SESSION_START_UNAVAILABLE_CODE;
|
|
131
|
+
/**
|
|
132
|
+
* @param toolName - Display name of the CLI tool (e.g. `Codex CLI`)
|
|
133
|
+
* @param message - Tool-specific wording; defaults to the generic advice
|
|
134
|
+
*/
|
|
135
|
+
constructor(toolName, message = `${toolName} is not installed. Please install it first.`) {
|
|
136
|
+
super(message);
|
|
137
|
+
this.toolName = toolName;
|
|
138
|
+
this.name = 'SessionStartUnavailableError';
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.SessionStartUnavailableError = SessionStartUnavailableError;
|
|
102
142
|
/**
|
|
103
143
|
* Whether `error` reports a session that is still initializing.
|
|
104
144
|
*
|
|
@@ -117,6 +157,18 @@ function isSafeSessionStartError(error) {
|
|
|
117
157
|
const code = readErrorCode(error);
|
|
118
158
|
return code !== undefined && SAFE_CODES.includes(code);
|
|
119
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Whether `error` reports a CLI tool that is not installed (Issue #2009).
|
|
162
|
+
*
|
|
163
|
+
* Duck-typed on `code` for the reason the module docblock gives: the thrower
|
|
164
|
+
* (seven separate tool modules) and the reader (the push notifier, the API
|
|
165
|
+
* route) never share a class identity under bundling.
|
|
166
|
+
*
|
|
167
|
+
* @param error - Value caught from a `startSession()` call
|
|
168
|
+
*/
|
|
169
|
+
function isSessionStartUnavailableError(error) {
|
|
170
|
+
return readErrorCode(error) === exports.SESSION_START_UNAVAILABLE_CODE;
|
|
171
|
+
}
|
|
120
172
|
function readErrorCode(error) {
|
|
121
173
|
if (typeof error !== 'object' || error === null)
|
|
122
174
|
return undefined;
|