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
|
@@ -55,13 +55,40 @@
|
|
|
55
55
|
* the window where a reconnect lands between a turn's end and its trailing
|
|
56
56
|
* repeat.
|
|
57
57
|
*
|
|
58
|
+
* ## Which session's turn is the *instance's* turn (Issue #1900)
|
|
59
|
+
*
|
|
60
|
+
* One opencode server can carry several sessions at once (#1758 §5.6.1
|
|
61
|
+
* measured two busy simultaneously), and a sub-agent runs in a session of its
|
|
62
|
+
* own. Every frame is tagged with its `sessionID`, but CommandMate's unit of
|
|
63
|
+
* state is the **instance** — `(worktree, tool, instance)` — so an idle that
|
|
64
|
+
* belongs to a sub-agent used to be published as the instance's `stop` while
|
|
65
|
+
* the session the human is waiting on was still working. Downstream that is not
|
|
66
|
+
* a cosmetic error: `mergeStructuredStatus` lets a structured `ready` overwrite
|
|
67
|
+
* a scraper `running`, so `commandmate wait` returned 0 mid-turn.
|
|
68
|
+
*
|
|
69
|
+
* So the gate also decides *whose* completion counts:
|
|
70
|
+
*
|
|
71
|
+
* - A session first seen busy while **nothing else is busy** becomes the
|
|
72
|
+
* **primary** session — the one whose turn is the instance's turn. A session
|
|
73
|
+
* that goes busy *during* another session's turn cannot take the title,
|
|
74
|
+
* which is exactly the shape a sub-agent has.
|
|
75
|
+
* - A session ever seen with a non-empty `info.parentID` is a **child** and can
|
|
76
|
+
* never be primary. `parentID` is in the server's own `Session` schema
|
|
77
|
+
* (verified against `GET /doc` on 1.18.21) and is the only positive statement
|
|
78
|
+
* opencode makes about the relationship.
|
|
79
|
+
* - An idle from any other session is dropped as `foreign-session` **while the
|
|
80
|
+
* primary is still busy**. Once the primary's own turn has closed the rule
|
|
81
|
+
* lifts: at that point the instance is not working, so letting a stray idle
|
|
82
|
+
* through cannot cut a live turn short — which bounds the cost of inferring
|
|
83
|
+
* the primary wrongly to "one turn is closed late by the scraper".
|
|
84
|
+
*
|
|
58
85
|
* The gate is a pure state machine over frame types so it can be driven from
|
|
59
86
|
* fixtures. The subscription owns one per connection.
|
|
60
87
|
*
|
|
61
88
|
* @module lib/hooks/sources/opencode/turn-gate
|
|
62
89
|
*/
|
|
63
90
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
|
-
exports.MAX_TRACKED_USER_MESSAGES = exports.MAX_TRACKED_TURN_SESSIONS = void 0;
|
|
91
|
+
exports.MAX_TRACKED_CHILD_SESSIONS = exports.MAX_TRACKED_USER_MESSAGES = exports.MAX_TRACKED_TURN_SESSIONS = void 0;
|
|
65
92
|
exports.createTurnGate = createTurnGate;
|
|
66
93
|
const event_mapper_1 = require("../event-mapper");
|
|
67
94
|
/**
|
|
@@ -81,6 +108,14 @@ exports.MAX_TRACKED_TURN_SESSIONS = 64;
|
|
|
81
108
|
* re-announced `user_prompt_submit` for a prompt from thousands of turns ago.
|
|
82
109
|
*/
|
|
83
110
|
exports.MAX_TRACKED_USER_MESSAGES = 512;
|
|
111
|
+
/**
|
|
112
|
+
* Cap on remembered child sessions.
|
|
113
|
+
*
|
|
114
|
+
* Same order as the session cap and for the same reason. Forgetting the oldest
|
|
115
|
+
* costs the `parentID` half of the primary rule for an ancient sub-agent; the
|
|
116
|
+
* "cannot take the title mid-turn" half is unaffected.
|
|
117
|
+
*/
|
|
118
|
+
exports.MAX_TRACKED_CHILD_SESSIONS = 64;
|
|
84
119
|
/** `properties.sessionID`, or null. */
|
|
85
120
|
function sessionIdOf(payload) {
|
|
86
121
|
const properties = (0, event_mapper_1.isPlainObject)(payload.properties) ? payload.properties : {};
|
|
@@ -96,6 +131,24 @@ function errorName(payload) {
|
|
|
96
131
|
const properties = (0, event_mapper_1.isPlainObject)(payload.properties) ? payload.properties : {};
|
|
97
132
|
return (0, event_mapper_1.readNestedString)(properties, ['error', 'name']);
|
|
98
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* The session this frame declares a parent for, or null (Issue #1900).
|
|
136
|
+
*
|
|
137
|
+
* `Session.parentID` is optional in opencode's own schema and present only on a
|
|
138
|
+
* sub-agent's session, so a non-empty value is a positive identification. Read
|
|
139
|
+
* off `info.id` rather than `properties.sessionID` because those differ on
|
|
140
|
+
* `message.updated`, whose `info` is a *message* and carries no `parentID` at
|
|
141
|
+
* all — which is what keeps this generic read from mislabelling one.
|
|
142
|
+
*/
|
|
143
|
+
function childSessionOf(payload) {
|
|
144
|
+
const properties = (0, event_mapper_1.isPlainObject)(payload.properties) ? payload.properties : {};
|
|
145
|
+
const info = (0, event_mapper_1.isPlainObject)(properties.info) ? properties.info : null;
|
|
146
|
+
if (info === null)
|
|
147
|
+
return null;
|
|
148
|
+
if (!(0, event_mapper_1.readNestedString)(info, ['parentID']))
|
|
149
|
+
return null;
|
|
150
|
+
return (0, event_mapper_1.readNestedString)(info, ['id']) ?? (0, event_mapper_1.readNestedString)(properties, ['sessionID']);
|
|
151
|
+
}
|
|
99
152
|
/** `properties.info.role` / `properties.info.id` for `message.updated`. */
|
|
100
153
|
function messageInfo(payload) {
|
|
101
154
|
const properties = (0, event_mapper_1.isPlainObject)(payload.properties) ? payload.properties : {};
|
|
@@ -122,16 +175,56 @@ function trim(keys, max) {
|
|
|
122
175
|
* @param maxUserMessages - Cap on remembered user-message ids; defaults to
|
|
123
176
|
* {@link MAX_TRACKED_USER_MESSAGES}
|
|
124
177
|
*/
|
|
125
|
-
function createTurnGate(maxSessions = exports.MAX_TRACKED_TURN_SESSIONS, maxUserMessages = exports.MAX_TRACKED_USER_MESSAGES) {
|
|
178
|
+
function createTurnGate(maxSessions = exports.MAX_TRACKED_TURN_SESSIONS, maxUserMessages = exports.MAX_TRACKED_USER_MESSAGES, maxChildSessions = exports.MAX_TRACKED_CHILD_SESSIONS) {
|
|
126
179
|
const phases = new Map();
|
|
127
180
|
const announced = new Set();
|
|
181
|
+
const children = new Set();
|
|
182
|
+
let primary = null;
|
|
128
183
|
const remember = (sessionId, phase) => {
|
|
129
184
|
phases.delete(sessionId);
|
|
130
185
|
phases.set(sessionId, phase);
|
|
131
186
|
trim(phases, maxSessions);
|
|
132
187
|
};
|
|
188
|
+
/** Whether the instance's own turn is open. */
|
|
189
|
+
const primaryIsBusy = () => primary !== null && phases.get(primary) === 'busy';
|
|
190
|
+
/**
|
|
191
|
+
* Take the title, if this session is allowed to and nobody holds it.
|
|
192
|
+
*
|
|
193
|
+
* Called after the session has been recorded busy, so `primaryIsBusy()` here
|
|
194
|
+
* asks about a *different* session — the one whose turn this new arrival is
|
|
195
|
+
* running inside.
|
|
196
|
+
*/
|
|
197
|
+
const adoptPrimary = (sessionId) => {
|
|
198
|
+
if (children.has(sessionId))
|
|
199
|
+
return;
|
|
200
|
+
if (primary === sessionId)
|
|
201
|
+
return;
|
|
202
|
+
if (primaryIsBusy())
|
|
203
|
+
return;
|
|
204
|
+
primary = sessionId;
|
|
205
|
+
};
|
|
206
|
+
/** Whether this idle belongs to somebody else's turn. */
|
|
207
|
+
const isForeign = (sessionId) => {
|
|
208
|
+
if (children.has(sessionId))
|
|
209
|
+
return true;
|
|
210
|
+
return primary !== null && sessionId !== primary && primaryIsBusy();
|
|
211
|
+
};
|
|
212
|
+
const armSession = (sessionId) => {
|
|
213
|
+
remember(sessionId, 'busy');
|
|
214
|
+
adoptPrimary(sessionId);
|
|
215
|
+
};
|
|
133
216
|
return {
|
|
134
217
|
observe(type, payload) {
|
|
218
|
+
// Before the dispatch and for every frame: parentage arrives on
|
|
219
|
+
// `session.created` / `session.updated`, which are not the frames the
|
|
220
|
+
// turn rules below look at.
|
|
221
|
+
const child = childSessionOf(payload);
|
|
222
|
+
if (child !== null) {
|
|
223
|
+
children.add(child);
|
|
224
|
+
trim(children, maxChildSessions);
|
|
225
|
+
if (primary === child)
|
|
226
|
+
primary = null;
|
|
227
|
+
}
|
|
135
228
|
if (type === 'message.updated') {
|
|
136
229
|
const { role, id } = messageInfo(payload);
|
|
137
230
|
// Only the user's own message is `user_prompt_submit`; the assistant's
|
|
@@ -155,7 +248,7 @@ function createTurnGate(maxSessions = exports.MAX_TRACKED_TURN_SESSIONS, maxUser
|
|
|
155
248
|
const sessionId = sessionIdOf(payload);
|
|
156
249
|
if (sessionId === null)
|
|
157
250
|
return { kind: 'ignored' };
|
|
158
|
-
|
|
251
|
+
armSession(sessionId);
|
|
159
252
|
return { kind: 'armed', sessionId };
|
|
160
253
|
}
|
|
161
254
|
if (type === 'session.error') {
|
|
@@ -172,6 +265,15 @@ function createTurnGate(maxSessions = exports.MAX_TRACKED_TURN_SESSIONS, maxUser
|
|
|
172
265
|
const sessionId = sessionIdOf(payload);
|
|
173
266
|
if (sessionId === null)
|
|
174
267
|
return { kind: 'ignored' };
|
|
268
|
+
// Issue #1900. Checked before the phase rules so the reason names the
|
|
269
|
+
// real cause: a sub-agent's idle is not "a turn we did not watch start",
|
|
270
|
+
// it is a turn that is not this instance's. Recorded as idle on the way
|
|
271
|
+
// out so the session does not sit armed forever and reappear as a
|
|
272
|
+
// synthesised completion after the next reconnect.
|
|
273
|
+
if (isForeign(sessionId)) {
|
|
274
|
+
remember(sessionId, 'idle');
|
|
275
|
+
return { kind: 'suppressed', sessionId, reason: 'foreign-session' };
|
|
276
|
+
}
|
|
175
277
|
const phase = phases.get(sessionId);
|
|
176
278
|
if (phase === undefined) {
|
|
177
279
|
return { kind: 'suppressed', sessionId, reason: 'never-armed' };
|
|
@@ -185,9 +287,22 @@ function createTurnGate(maxSessions = exports.MAX_TRACKED_TURN_SESSIONS, maxUser
|
|
|
185
287
|
isArmed(sessionId) {
|
|
186
288
|
return phases.get(sessionId) === 'busy';
|
|
187
289
|
},
|
|
290
|
+
arm(sessionId) {
|
|
291
|
+
armSession(sessionId);
|
|
292
|
+
},
|
|
293
|
+
armedSessions() {
|
|
294
|
+
return [...phases.entries()]
|
|
295
|
+
.filter(([, phase]) => phase === 'busy')
|
|
296
|
+
.map(([sessionId]) => sessionId);
|
|
297
|
+
},
|
|
298
|
+
primarySession() {
|
|
299
|
+
return primary;
|
|
300
|
+
},
|
|
188
301
|
reset() {
|
|
189
302
|
phases.clear();
|
|
190
|
-
|
|
303
|
+
primary = null;
|
|
304
|
+
// `announced` and `children` are deliberately kept — see the module
|
|
305
|
+
// comment and {@link TurnGate.reset}.
|
|
191
306
|
},
|
|
192
307
|
};
|
|
193
308
|
}
|
|
@@ -29,9 +29,11 @@ exports.MAX_OPEN_DECISIONS_PER_INSTANCE = void 0;
|
|
|
29
29
|
exports.openDecisionSlot = openDecisionSlot;
|
|
30
30
|
exports.closeDecisionSlot = closeDecisionSlot;
|
|
31
31
|
exports.listOpenDecisions = listOpenDecisions;
|
|
32
|
+
exports.recordDecisionDelivery = recordDecisionDelivery;
|
|
32
33
|
exports.fillDecisionSlot = fillDecisionSlot;
|
|
33
34
|
exports.resetPendingDecisions = resetPendingDecisions;
|
|
34
35
|
exports.answerPendingDecision = answerPendingDecision;
|
|
36
|
+
exports.answerPendingDecisionWithReceipt = answerPendingDecisionWithReceipt;
|
|
35
37
|
const auto_yes_state_1 = require("../../../lib/auto-yes-state");
|
|
36
38
|
const logger_1 = require("../../../lib/logger");
|
|
37
39
|
const logger = (0, logger_1.createLogger)('lib/hooks/sources/pending-decisions');
|
|
@@ -50,7 +52,7 @@ function keyOf(ref) {
|
|
|
50
52
|
/** Register a decision as in flight. Always paired with {@link closeDecisionSlot}. */
|
|
51
53
|
function openDecisionSlot(ref, decision) {
|
|
52
54
|
const key = keyOf(ref);
|
|
53
|
-
const slot = { key, ref, decision, body: null };
|
|
55
|
+
const slot = { key, ref, decision, body: null, delivery: null };
|
|
54
56
|
const open = pendingByInstance.get(key) ?? [];
|
|
55
57
|
open.push(slot);
|
|
56
58
|
while (open.length > exports.MAX_OPEN_DECISIONS_PER_INSTANCE)
|
|
@@ -80,6 +82,25 @@ function closeDecisionSlot(slot) {
|
|
|
80
82
|
function listOpenDecisions(ref) {
|
|
81
83
|
return (pendingByInstance.get(keyOf(ref)) ?? []).map((slot) => slot.decision);
|
|
82
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Record what became of the verdict for an open slot (Issue #1898).
|
|
87
|
+
*
|
|
88
|
+
* Called from a source's own `decide()`, beside — not instead of — filling the
|
|
89
|
+
* body: a push source that wrote a body delivered it, and a pull source that
|
|
90
|
+
* POSTed it somewhere has an HTTP result nobody else can see.
|
|
91
|
+
*
|
|
92
|
+
* @returns Whether a slot was still open to record against
|
|
93
|
+
*/
|
|
94
|
+
function recordDecisionDelivery(ref, decisionId, delivery) {
|
|
95
|
+
const open = pendingByInstance.get(keyOf(ref));
|
|
96
|
+
if (!open)
|
|
97
|
+
return false;
|
|
98
|
+
const slot = open.find((candidate) => candidate.decision.id === decisionId);
|
|
99
|
+
if (!slot)
|
|
100
|
+
return false;
|
|
101
|
+
slot.delivery = delivery;
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
83
104
|
/** Fill the slot a push source is answering, if it is still open. */
|
|
84
105
|
function fillDecisionSlot(ref, decisionId, body) {
|
|
85
106
|
const open = pendingByInstance.get(keyOf(ref));
|
|
@@ -107,6 +128,18 @@ function resetPendingDecisions() {
|
|
|
107
128
|
* ack of a request whose answer went elsewhere.
|
|
108
129
|
*/
|
|
109
130
|
async function answerPendingDecision(source, ref, decision, verdict) {
|
|
131
|
+
return (await answerPendingDecisionWithReceipt(source, ref, decision, verdict)).body;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Answer one decision and keep the receipt (Issue #1898).
|
|
135
|
+
*
|
|
136
|
+
* The same call as {@link answerPendingDecision} — one slot, one `decide()`,
|
|
137
|
+
* one close — and the reason it exists separately is that the receiver routes
|
|
138
|
+
* only ever want the body, while a caller that adjudicated *on the agent's
|
|
139
|
+
* behalf* (opencode's ingest, the Auto-Yes re-check) has to know whether the
|
|
140
|
+
* verdict landed before it decides that no dialog is open.
|
|
141
|
+
*/
|
|
142
|
+
async function answerPendingDecisionWithReceipt(source, ref, decision, verdict) {
|
|
110
143
|
const slot = openDecisionSlot(ref, decision);
|
|
111
144
|
try {
|
|
112
145
|
await source.decide(ref, decision, verdict);
|
|
@@ -122,6 +155,11 @@ async function answerPendingDecision(source, ref, decision, verdict) {
|
|
|
122
155
|
decisionId: decision.id,
|
|
123
156
|
error: error instanceof Error ? error.message : String(error),
|
|
124
157
|
});
|
|
158
|
+
slot.delivery = {
|
|
159
|
+
delivered: false,
|
|
160
|
+
reason: error instanceof Error ? `decide-threw:${error.message}` : 'decide-threw',
|
|
161
|
+
};
|
|
125
162
|
}
|
|
126
|
-
|
|
163
|
+
const delivery = slot.delivery;
|
|
164
|
+
return { body: closeDecisionSlot(slot), delivery };
|
|
127
165
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* In-memory record of the last `tool_input` this server had to normalise
|
|
4
|
+
* (Issue #1902).
|
|
5
|
+
*
|
|
6
|
+
* `readPermissionToolInput` turns copilot's string `tool_input` into an object
|
|
7
|
+
* so the request can be adjudicated at all. That is a rewrite of what the agent
|
|
8
|
+
* sent, and the design policy's discoverability rule (§7 of
|
|
9
|
+
* `docs/design/multi-agent-state-architecture.md`) is that a judgement or an
|
|
10
|
+
* automatic action which only exists in the server log does not exist: an
|
|
11
|
+
* operator has to be able to read *"the tool_input was a string, so it was read
|
|
12
|
+
* as a patch"* out of the CLI.
|
|
13
|
+
*
|
|
14
|
+
* So the same record `permission-decision-service` acts on is kept here per
|
|
15
|
+
* session and published by `buildCurrentOutput` as
|
|
16
|
+
* `structuredEvents.toolInputNormalization` — which is what `capture --json`
|
|
17
|
+
* prints verbatim and what `wait` polls.
|
|
18
|
+
*
|
|
19
|
+
* Exposure only: nothing reads this back to decide anything. The decision uses
|
|
20
|
+
* the normalisation carried on the payload itself, not this record.
|
|
21
|
+
*
|
|
22
|
+
* The module is a near-copy of `polling/auto-yes-suppression-state` on purpose;
|
|
23
|
+
* that similarity is the convention for a per-session diagnostic, and the
|
|
24
|
+
* `globalThis` indirection is load-bearing for the same reason it is there
|
|
25
|
+
* (#1736): the writer is `/api/hooks/permission-request` and the reader is
|
|
26
|
+
* `/api/worktrees/:id/current-output`, which `next dev` bundles separately and
|
|
27
|
+
* would otherwise give a private copy of this map each.
|
|
28
|
+
*
|
|
29
|
+
* @module lib/hooks/tool-input-normalization-state
|
|
30
|
+
*/
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.recordToolInputNormalization = recordToolInputNormalization;
|
|
33
|
+
exports.getLastToolInputNormalization = getLastToolInputNormalization;
|
|
34
|
+
exports.clearToolInputNormalizations = clearToolInputNormalizations;
|
|
35
|
+
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
36
|
+
/** compositeKey -> the most recent normalisation for that session. */
|
|
37
|
+
const lastNormalizations = globalThis.__toolInputNormalizations ??
|
|
38
|
+
(globalThis.__toolInputNormalizations = new Map());
|
|
39
|
+
/**
|
|
40
|
+
* Record that `instanceId`'s last permission request arrived in a shape this
|
|
41
|
+
* server had to rewrite before it could judge it.
|
|
42
|
+
*
|
|
43
|
+
* Recorded for every verdict, not only for allows: the operator's question is
|
|
44
|
+
* "why did this get adjudicated the way it did", and suppressing the record on
|
|
45
|
+
* the suppressed path would remove the answer exactly when it is asked.
|
|
46
|
+
*
|
|
47
|
+
* @param at - Epoch ms; defaults to now. Overridable so tests are deterministic.
|
|
48
|
+
*/
|
|
49
|
+
function recordToolInputNormalization(worktreeId, cliToolId, instanceId, normalization, toolName, at = Date.now()) {
|
|
50
|
+
lastNormalizations.set((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId), {
|
|
51
|
+
...normalization,
|
|
52
|
+
toolName,
|
|
53
|
+
at,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @returns The last normalisation for this session, or null — the ordinary case
|
|
58
|
+
* for every tool but copilot, and for copilot sessions that have not edited a
|
|
59
|
+
* file yet.
|
|
60
|
+
*/
|
|
61
|
+
function getLastToolInputNormalization(worktreeId, cliToolId, instanceId) {
|
|
62
|
+
return lastNormalizations.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
|
|
63
|
+
}
|
|
64
|
+
/** Drop every recorded normalisation. Test seam. */
|
|
65
|
+
function clearToolInputNormalizations() {
|
|
66
|
+
lastNormalizations.clear();
|
|
67
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Reading a `tool_input` that did not arrive as an object (Issue #1902).
|
|
4
|
+
*
|
|
5
|
+
* Every permission parser in `sources/` requires `tool_input` to be a plain
|
|
6
|
+
* object, and copilot 1.0.80's `Edit` breaks that: its `PreToolUse` sends the
|
|
7
|
+
* whole apply-patch envelope as a **bare string**.
|
|
8
|
+
*
|
|
9
|
+
* ```json
|
|
10
|
+
* {"hook_event_name":"PreToolUse","tool_name":"Edit",
|
|
11
|
+
* "tool_input":"*** Begin Patch\n*** Add File: note4.txt\n+yo\n*** End Patch\n"}
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The object check answered null for that payload, null became
|
|
15
|
+
* `unknown-payload`, and `unknown-payload` is a no-decision — so **every file
|
|
16
|
+
* edit copilot made fell through to a dialog**, no matter what Auto-Yes or the
|
|
17
|
+
* contract said, and the screen-scraping poller answered it two to four seconds
|
|
18
|
+
* later. `Read` and `Bash` were unaffected because their `tool_input` is an
|
|
19
|
+
* object, which is why the symptom looked like "Auto-Yes works, except for
|
|
20
|
+
* edits".
|
|
21
|
+
*
|
|
22
|
+
* ## What normalising must not become
|
|
23
|
+
*
|
|
24
|
+
* A silent rewrite. The adjudicated shape is no longer the shape the agent
|
|
25
|
+
* sent, and an operator reading `capture --json` has to be able to see that —
|
|
26
|
+
* hence {@link ToolInputNormalization}, which is carried on the payload,
|
|
27
|
+
* recorded per session by `./tool-input-normalization-state`, and published in
|
|
28
|
+
* `structuredEvents.toolInputNormalization`. The reason code is the point: it
|
|
29
|
+
* says *"the tool_input was a string, so it was read as a patch"* rather than
|
|
30
|
+
* leaving a `{ patch }` object that nothing explains.
|
|
31
|
+
*
|
|
32
|
+
* ## Where the deny patterns are applied — and why not to the body
|
|
33
|
+
*
|
|
34
|
+
* To the envelope's **action header lines** (`*** Add File: note4.txt`,
|
|
35
|
+
* `*** Update File: …`, `*** Delete File: …`, `*** Move to: …`), never to the
|
|
36
|
+
* hunk bodies.
|
|
37
|
+
*
|
|
38
|
+
* That is not a new rule; it is the one `PRIMARY_TOOL_INPUT_KEYS` already
|
|
39
|
+
* states. `Write.content` and `Edit.new_string` are deliberately excluded from
|
|
40
|
+
* the matching surface there, because a deny pattern is a statement about the
|
|
41
|
+
* *action* and matching it against a file body suppresses an edit for quoting
|
|
42
|
+
* the very string the contract is trying to keep out of the shell. A patch body
|
|
43
|
+
* is exactly those two fields fused into one string. Matching it would make
|
|
44
|
+
* copilot's `Edit` strictly stricter than Claude's `Edit` and `Write` for the
|
|
45
|
+
* same action, so a contract that runs unattended on Claude would deadlock on
|
|
46
|
+
* copilot the first time an agent wrote a shell script — and the escalation
|
|
47
|
+
* would be a dialog nobody is watching.
|
|
48
|
+
*
|
|
49
|
+
* The header lines carry the verb *and* the path, so both kinds of contract
|
|
50
|
+
* still work: `Delete File` blocks deletions, `\.env` blocks a path.
|
|
51
|
+
*
|
|
52
|
+
* Under-matching is the one thing worth guarding, since it ends in an
|
|
53
|
+
* unattended approval rather than a dialog. So the summary is only used when it
|
|
54
|
+
* is trustworthy: **no header line found, or more than
|
|
55
|
+
* {@link MAX_PATCH_ACTION_LINES} of them, falls back to the whole envelope** —
|
|
56
|
+
* over-matching, which costs a dialog, the same direction
|
|
57
|
+
* `collectToolInputMatchTexts` already falls in for an unknown tool.
|
|
58
|
+
*
|
|
59
|
+
* @module lib/hooks/tool-input-normalization
|
|
60
|
+
*/
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
exports.MAX_PATCH_ACTION_LINES = exports.PATCH_ENVELOPE_OPENING = exports.TEXT_TOOL_INPUT_KEY = exports.PATCH_TOOL_INPUT_KEY = void 0;
|
|
63
|
+
exports.isPatchEnvelope = isPatchEnvelope;
|
|
64
|
+
exports.collectPatchMatchTexts = collectPatchMatchTexts;
|
|
65
|
+
exports.readPermissionToolInput = readPermissionToolInput;
|
|
66
|
+
/** Key a string `tool_input` recognised as an apply-patch envelope is stored under. */
|
|
67
|
+
exports.PATCH_TOOL_INPUT_KEY = 'patch';
|
|
68
|
+
/** Key any other string `tool_input` is stored under. */
|
|
69
|
+
exports.TEXT_TOOL_INPUT_KEY = 'text';
|
|
70
|
+
/** The opening line of an apply-patch envelope. */
|
|
71
|
+
exports.PATCH_ENVELOPE_OPENING = '*** Begin Patch';
|
|
72
|
+
/** Column-0 prefix of an envelope's structural lines. */
|
|
73
|
+
const PATCH_ACTION_PREFIX = '*** ';
|
|
74
|
+
/** Structural lines that name no action, so nothing is judged against them. */
|
|
75
|
+
const PATCH_ENVELOPE_MARKERS = new Set(['Begin Patch', 'End Patch']);
|
|
76
|
+
/**
|
|
77
|
+
* How much of the string is examined for the opening marker.
|
|
78
|
+
*
|
|
79
|
+
* Bounded so a multi-megabyte patch does not get copied by `trimStart()` just
|
|
80
|
+
* to look at its first sixteen characters.
|
|
81
|
+
*/
|
|
82
|
+
const PATCH_OPENING_SCAN_LENGTH = 64;
|
|
83
|
+
/**
|
|
84
|
+
* Most action lines a patch may have before its summary stops being trusted.
|
|
85
|
+
*
|
|
86
|
+
* A patch touching more files than this is not summarised at all — see the
|
|
87
|
+
* module comment on why the fallback goes to over-matching.
|
|
88
|
+
*/
|
|
89
|
+
exports.MAX_PATCH_ACTION_LINES = 64;
|
|
90
|
+
/** Whether a string opens an apply-patch envelope. */
|
|
91
|
+
function isPatchEnvelope(raw) {
|
|
92
|
+
return raw.slice(0, PATCH_OPENING_SCAN_LENGTH).trimStart().startsWith(exports.PATCH_ENVELOPE_OPENING);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The strings a deny pattern is matched against for a patch (Issue #1902).
|
|
96
|
+
*
|
|
97
|
+
* The envelope's action headers, verbatim and including the `*** ` prefix, so a
|
|
98
|
+
* contract can name either the verb or the path. Falls back to the whole
|
|
99
|
+
* envelope when there is no header to summarise or too many to trust; see the
|
|
100
|
+
* module comment.
|
|
101
|
+
*
|
|
102
|
+
* @param patch - The raw envelope, exactly as the agent sent it
|
|
103
|
+
* @returns Texts to match, never empty for a non-empty patch
|
|
104
|
+
*/
|
|
105
|
+
function collectPatchMatchTexts(patch) {
|
|
106
|
+
const actions = [];
|
|
107
|
+
for (const rawLine of patch.split('\n')) {
|
|
108
|
+
// Content lines inside a hunk are prefixed (` `, `+`, `-`), so a `*** ` at
|
|
109
|
+
// column 0 is structural. A CRLF payload leaves the `\r` on the line.
|
|
110
|
+
const line = rawLine.endsWith('\r') ? rawLine.slice(0, -1) : rawLine;
|
|
111
|
+
if (!line.startsWith(PATCH_ACTION_PREFIX))
|
|
112
|
+
continue;
|
|
113
|
+
const action = line.slice(PATCH_ACTION_PREFIX.length).trim();
|
|
114
|
+
if (action === '' || PATCH_ENVELOPE_MARKERS.has(action))
|
|
115
|
+
continue;
|
|
116
|
+
actions.push(`${PATCH_ACTION_PREFIX}${action}`);
|
|
117
|
+
if (actions.length > exports.MAX_PATCH_ACTION_LINES)
|
|
118
|
+
return [patch];
|
|
119
|
+
}
|
|
120
|
+
return actions.length > 0 ? actions : [patch];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Read a `tool_input` field, normalising a string into an object.
|
|
124
|
+
*
|
|
125
|
+
* Only copilot calls this today, because copilot is the only tool measured
|
|
126
|
+
* sending a string (#1902). It lives here rather than in `sources/copilot/`
|
|
127
|
+
* because the shape is not copilot-specific — the apply-patch envelope is a
|
|
128
|
+
* format several tools speak — and a second copy is a second place for the
|
|
129
|
+
* deny-pattern surface to be decided differently.
|
|
130
|
+
*
|
|
131
|
+
* @param value - `body.tool_input`, whatever it turned out to be
|
|
132
|
+
* @returns The readable input, or null when there is nothing to adjudicate —
|
|
133
|
+
* which every caller must turn into a no-decision, i.e. a dialog
|
|
134
|
+
*/
|
|
135
|
+
function readPermissionToolInput(value) {
|
|
136
|
+
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
137
|
+
return { toolInput: value, normalization: null };
|
|
138
|
+
}
|
|
139
|
+
if (typeof value === 'string') {
|
|
140
|
+
// An empty string is the string case's version of an absent `tool_input`:
|
|
141
|
+
// nothing for the deny patterns to be judged against, so the request is
|
|
142
|
+
// unadjudicatable rather than harmless.
|
|
143
|
+
if (value === '')
|
|
144
|
+
return null;
|
|
145
|
+
const isPatch = isPatchEnvelope(value);
|
|
146
|
+
const key = isPatch ? exports.PATCH_TOOL_INPUT_KEY : exports.TEXT_TOOL_INPUT_KEY;
|
|
147
|
+
return {
|
|
148
|
+
toolInput: { [key]: value },
|
|
149
|
+
normalization: {
|
|
150
|
+
reason: isPatch ? 'string-tool-input-as-patch' : 'string-tool-input-as-text',
|
|
151
|
+
key,
|
|
152
|
+
receivedType: 'string',
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
@@ -18,6 +18,7 @@ exports.resolveModelOption = resolveModelOption;
|
|
|
18
18
|
exports.executeSchedule = executeSchedule;
|
|
19
19
|
const crypto_1 = require("crypto");
|
|
20
20
|
const claude_executor_1 = require("./session/claude-executor");
|
|
21
|
+
const cmate_cli_tool_parser_1 = require("../lib/cmate-cli-tool-parser");
|
|
21
22
|
const logger_1 = require("../lib/logger");
|
|
22
23
|
const logger = (0, logger_1.createLogger)('job-executor');
|
|
23
24
|
// =============================================================================
|
|
@@ -104,16 +105,27 @@ function recoverRunningLogs() {
|
|
|
104
105
|
// =============================================================================
|
|
105
106
|
/**
|
|
106
107
|
* Resolve the model option for a scheduled execution (DR1-004).
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* -
|
|
108
|
+
*
|
|
109
|
+
* Two sources, because a model reaches a schedule two different ways:
|
|
110
|
+
* - **the CMATE.md CLI Tool column** (`<tool> --model <name>`), for every tool in
|
|
111
|
+
* {@link TOOLS_WITH_MODEL_SUPPORT};
|
|
112
|
+
* - **the DB** (`worktree.vibe_local_model`), for vibe-local, whose model is
|
|
113
|
+
* chosen in the worktree's Agent settings rather than written in the file.
|
|
114
|
+
*
|
|
115
|
+
* Issue #1914: the first branch used to read `entry.cliToolId === 'copilot'`,
|
|
116
|
+
* a second hard-coded copy of the parser's Set. That is what made
|
|
117
|
+
* `buildCliArgs()`'s `opencode run -m …` branch unreachable — the parser would
|
|
118
|
+
* have to start accepting `opencode --model x` *and* somebody would have to
|
|
119
|
+
* remember this line. Reading the Set means adding an id in one place wires the
|
|
120
|
+
* whole path, and a tool added to the Set can no longer have its model silently
|
|
121
|
+
* dropped here.
|
|
110
122
|
*
|
|
111
123
|
* @param entry - Schedule entry from CMATE.md
|
|
112
124
|
* @param worktree - Worktree row from DB
|
|
113
125
|
* @returns ExecuteCommandOptions with model, or undefined
|
|
114
126
|
*/
|
|
115
127
|
function resolveModelOption(entry, worktree) {
|
|
116
|
-
if (entry.
|
|
128
|
+
if (entry.model && cmate_cli_tool_parser_1.TOOLS_WITH_MODEL_SUPPORT.has(entry.cliToolId)) {
|
|
117
129
|
return { model: entry.model };
|
|
118
130
|
}
|
|
119
131
|
if (entry.cliToolId === 'vibe-local' && worktree.vibe_local_model) {
|