commandmate 0.22.2 → 0.24.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 +383 -374
- package/.next/app-path-routes-manifest.json +16 -15
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/required-server-files.json +1 -1
- 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 +3 -3
- 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/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/external-apps/route.js.nft.json +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 +1 -1
- 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 +1 -1
- 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 +1 -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.js +1 -1
- package/.next/server/app/api/metrics/vibe/route.js.nft.json +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 -0
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -0
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +1 -1
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js.nft.json +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.js +1 -4
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +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 -4
- package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +1 -1
- package/.next/server/app/api/templates/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +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 +2 -2
- 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 +1 -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]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +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 +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +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 +6 -6
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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]/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 +2 -2
- 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 +3 -3
- 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 +1 -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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +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.js.nft.json +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.js.nft.json +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 +2 -2
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +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.js.nft.json +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 +1 -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.js.nft.json +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.js.nft.json +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 -4
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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_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.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js.nft.json +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 +1 -1
- 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 +1 -1
- 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 +6 -6
- 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.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +16 -15
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1366.js +1 -1
- package/.next/server/chunks/1601.js +7 -0
- package/.next/server/chunks/1825.js +1 -1
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/3241.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3451.js +1 -1
- package/.next/server/chunks/3480.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/406.js +10 -6
- package/.next/server/chunks/4393.js +1 -0
- package/.next/server/chunks/4444.js +1 -1
- package/.next/server/chunks/4455.js +1 -0
- package/.next/server/chunks/5164.js +1 -0
- package/.next/server/chunks/5959.js +5 -6
- package/.next/server/chunks/5998.js +2 -13
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6159.js +1 -1
- package/.next/server/chunks/6274.js +3 -3
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -0
- package/.next/server/chunks/7458.js +6 -0
- package/.next/server/chunks/{3753.js → 7970.js} +57 -32
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +21 -0
- package/.next/server/chunks/8807.js +250 -192
- package/.next/server/chunks/9058.js +1 -1
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9123.js +8 -8
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9360.js +1 -1
- package/.next/server/chunks/9373.js +3 -3
- package/.next/server/chunks/9687.js +2 -2
- 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/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/4322-dfd5a7119b5ba4fc.js +1 -0
- package/.next/static/chunks/{4974-eaf66770bfa9dea0.js → 4974-35592ec312322124.js} +1 -1
- package/.next/static/chunks/5229-0610b4e3288e777d.js +1 -0
- package/.next/static/chunks/6381-18a6a02a94d00d76.js +1 -0
- package/.next/static/chunks/7229.7f0f5a7032b612b4.js +1 -0
- package/.next/static/chunks/{744-fa8c0ae444c8338c.js → 744-3ad06d8c8ca482fc.js} +1 -1
- package/.next/static/chunks/app/api/app/update/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
- package/.next/static/chunks/app/api/app/update-check/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
- package/.next/static/chunks/app/api/assistant/conversation/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
- package/.next/static/chunks/app/api/assistant/current-output/{route-973ec48531555712.js → route-fae89f8d4cc3ff97.js} +1 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/chat/page-15d13fc024d78f5d.js +1 -0
- package/.next/static/chunks/app/layout-6a26ea22d5cf03dc.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/more/page-b8ba537baeac8d5b.js +1 -0
- package/.next/static/chunks/app/page-afc64708362f31e5.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/repositories/page-3469dacb6be7842f.js +1 -0
- package/.next/static/chunks/app/review/page-2d9cb7e068f8f35a.js +1 -0
- package/.next/static/chunks/app/sessions/page-7470c2bfd89e0df9.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-5e24481162f7ea78.js +1 -0
- package/.next/static/chunks/app/skills/installed/page-efd2d710a27f9735.js +1 -0
- package/.next/static/chunks/app/skills/page-0498adfc6e48684b.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9ddcb224594f620f.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-e611d30e47989e5d.js +1 -0
- package/.next/static/chunks/{webpack-180bebdee221b6f4.js → webpack-3534d858912a6c92.js} +1 -1
- package/.next/static/css/3ac44cfc082d02ad.css +1 -0
- package/.next/static/smu4mnL7qMf8w38n9dQJE/_buildManifest.js +1 -0
- package/.next/trace +12 -12
- package/.next/types/app/api/push/escalation/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +6 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +19 -1
- package/dist/cli/commands/task.d.ts.map +1 -1
- package/dist/cli/commands/task.js +6 -0
- package/dist/cli/commands/verify.js +6 -1
- package/dist/cli/types/api-responses.d.ts +46 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +17 -1
- package/dist/server/locales/en/notifications.json +20 -1
- package/dist/server/locales/ja/notifications.json +20 -1
- package/dist/server/server.js +23 -0
- package/dist/server/src/config/log-config.js +10 -1
- package/dist/server/src/config/safe-directory.js +103 -0
- package/dist/server/src/config/system-directories.js +74 -9
- package/dist/server/src/lib/cli-tools/antigravity.js +19 -2
- package/dist/server/src/lib/cli-tools/codex.js +95 -1
- package/dist/server/src/lib/cli-tools/copilot.js +30 -1
- package/dist/server/src/lib/cli-tools/gemini.js +28 -2
- package/dist/server/src/lib/cli-tools/opencode.js +51 -2
- package/dist/server/src/lib/db/db.js +2 -1
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v56-gate-result-source.js +58 -0
- package/dist/server/src/lib/db/verification-db.js +26 -6
- package/dist/server/src/lib/detection/model-info-extractor.js +384 -0
- package/dist/server/src/lib/git/git-default-branch.js +59 -0
- package/dist/server/src/lib/hooks/agent-event-service.js +205 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +7 -86
- package/dist/server/src/lib/hooks/hook-settings-generator.js +26 -11
- package/dist/server/src/lib/hooks/permission-decision-service.js +269 -0
- package/dist/server/src/lib/hooks/sources/abstain.js +78 -0
- package/dist/server/src/lib/hooks/sources/antigravity/hooks-config.js +372 -0
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +229 -0
- package/dist/server/src/lib/hooks/sources/antigravity/tool-id.js +16 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +150 -0
- package/dist/server/src/lib/hooks/sources/claude/tool-id.js +18 -0
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +465 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +143 -0
- package/dist/server/src/lib/hooks/sources/codex/tool-id.js +15 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +473 -0
- package/dist/server/src/lib/hooks/sources/copilot/source.js +210 -0
- package/dist/server/src/lib/hooks/sources/copilot/tool-id.js +15 -0
- package/dist/server/src/lib/hooks/sources/define-source.js +177 -0
- package/dist/server/src/lib/hooks/sources/event-mapper.js +177 -0
- package/dist/server/src/lib/hooks/sources/gemini/event-vocabulary.js +102 -0
- package/dist/server/src/lib/hooks/sources/gemini/settings-generator.js +315 -0
- package/dist/server/src/lib/hooks/sources/gemini/shared-config-tree.js +103 -0
- package/dist/server/src/lib/hooks/sources/gemini/source.js +151 -0
- package/dist/server/src/lib/hooks/sources/gemini/tool-id.js +17 -0
- package/dist/server/src/lib/hooks/sources/hook-event-vocabulary.js +111 -0
- package/dist/server/src/lib/hooks/sources/index.js +62 -0
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +84 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +299 -0
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +267 -0
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +176 -0
- package/dist/server/src/lib/hooks/sources/opencode/payloads.js +189 -0
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +295 -0
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +159 -0
- package/dist/server/src/lib/hooks/sources/opencode/source.js +253 -0
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +422 -0
- package/dist/server/src/lib/hooks/sources/opencode/tool-id.js +14 -0
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +193 -0
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +127 -0
- package/dist/server/src/lib/hooks/sources/registry.js +111 -0
- package/dist/server/src/lib/hooks/sources/types.js +46 -0
- package/dist/server/src/lib/polling/response-checker.js +47 -0
- package/dist/server/src/lib/push/escalation-settings.js +114 -0
- package/dist/server/src/lib/push/index.js +21 -1
- package/dist/server/src/lib/push/notification-dedup.js +35 -0
- package/dist/server/src/lib/push/push-sender.js +66 -7
- package/dist/server/src/lib/push/waiting-push-notifier.js +231 -0
- package/dist/server/src/lib/realtime/waiting-broadcast.js +93 -0
- package/dist/server/src/lib/session/agent-event-state.js +260 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +82 -0
- package/dist/server/src/lib/session/claude-session.js +10 -3
- package/dist/server/src/lib/session/current-output-builder.js +24 -0
- package/dist/server/src/lib/session/next-action-helper.js +93 -0
- package/dist/server/src/lib/session/prompt-waiting-composition.js +38 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +136 -0
- package/dist/server/src/lib/session/waiting-kind.js +59 -0
- package/dist/server/src/lib/tasks/contract-message.js +218 -0
- package/dist/server/src/lib/tasks/contract-parser.js +58 -12
- package/dist/server/src/lib/verification/env-clean-gate.js +320 -0
- package/dist/server/src/lib/verification/env-snapshot.js +474 -0
- package/dist/server/src/lib/verification/gate-runner.js +844 -0
- package/dist/server/src/lib/verification/scope-gate.js +402 -0
- package/dist/server/src/lib/verification/verify-config.js +314 -0
- package/dist/server/src/lib/ws-server.js +9 -0
- package/dist/server/src/types/sidebar.js +68 -0
- package/package.json +1 -1
- package/scripts/hooks/cmate-agent-event.sh +73 -3
- package/.next/server/chunks/6283.js +0 -1
- package/.next/server/chunks/646.js +0 -21
- package/.next/server/chunks/8856.js +0 -4
- package/.next/static/XpKfn5x6H-mtTaXI9yNmb/_buildManifest.js +0 -1
- package/.next/static/chunks/4560-0917ae2e6a0e5400.js +0 -1
- package/.next/static/chunks/6488-53a3e1d78e4fe8f7.js +0 -1
- package/.next/static/chunks/7229.edb331fb9fbafa27.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/skills/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/templates/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/todos/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/chat/page-83a2238ab453afaa.js +0 -1
- package/.next/static/chunks/app/layout-86574192bd3c0e6b.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/more/page-1619018cac999bbc.js +0 -1
- package/.next/static/chunks/app/page-a34d26812f085b6c.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +0 -1
- package/.next/static/chunks/app/review/page-b559bfb11c46931b.js +0 -1
- package/.next/static/chunks/app/sessions/page-3fa7e767d0ab3889.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-10d6f983e5f06ffb.js +0 -1
- package/.next/static/chunks/app/skills/installed/page-6641f95e6a6e5f9d.js +0 -1
- package/.next/static/chunks/app/skills/page-184f8e23e31a3667.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-6041d3c3db326317.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-973ec48531555712.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-6dc0b8c4e808ea3e.js +0 -1
- package/.next/static/css/d3453a6876553d32.css +0 -1
- /package/.next/static/{XpKfn5x6H-mtTaXI9yNmb → smu4mnL7qMf8w38n9dQJE}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Deciding which frames are a turn's real boundaries (Issue #1763).
|
|
4
|
+
*
|
|
5
|
+
* opencode repeats both of the frames CommandMate reads as one-off facts, and
|
|
6
|
+
* in both cases the repeat is byte-identical to the original. A source that
|
|
7
|
+
* mapped frames one-to-one would therefore report the same event several times,
|
|
8
|
+
* and the status layer — which reads only the *newest* event — would turn that
|
|
9
|
+
* into a wrong verdict. This module tells the first from the rest.
|
|
10
|
+
*
|
|
11
|
+
* ## `session.idle` — the end of a turn
|
|
12
|
+
*
|
|
13
|
+
* It is opencode's `Stop`: #1758 §5.3.1 held a session on an approval dialog
|
|
14
|
+
* for 10 minutes 19 seconds and not one `session.idle` arrived for it, so the
|
|
15
|
+
* event really does mean "the turn finished" rather than "the agent is not
|
|
16
|
+
* busy". `commandmate wait` may key off it. What it may not do is count them:
|
|
17
|
+
*
|
|
18
|
+
* - **Abnormal endings fire twice.** An abort emitted `session.idle` at
|
|
19
|
+
* 08:15:00.416 and again at 08:15:00.435 — 19 ms apart, same session, same
|
|
20
|
+
* turn (§5.3.2). Provider errors do the same. Normal endings fire once.
|
|
21
|
+
* - **The payload has no turn identifier.** It is `{ "sessionID": "ses_…" }`
|
|
22
|
+
* and nothing else, so two idles cannot be told apart by looking at them
|
|
23
|
+
* (§5.3.3). Claude's `Stop` carried `prompt_id`; this does not.
|
|
24
|
+
* - **An idle can arrive for a turn this connection never watched start** — a
|
|
25
|
+
* stream opened mid-session, a resubscribe after a restart — and treating
|
|
26
|
+
* that as a completion resolves a `wait` for work that is not over.
|
|
27
|
+
*
|
|
28
|
+
* So: **arm on `session.status(busy)`, complete on the first `session.idle`
|
|
29
|
+
* after arming, drop the rest.** `session.status(idle)` is deliberately inert —
|
|
30
|
+
* it is emitted in the same millisecond as `session.idle` and is the same
|
|
31
|
+
* signal, so honouring both would double every turn (§5.3.2 rule 4).
|
|
32
|
+
*
|
|
33
|
+
* ## `message.updated` — the start of a turn
|
|
34
|
+
*
|
|
35
|
+
* `user_prompt_submit` has no event of its own; it is `message.updated` with
|
|
36
|
+
* `info.role === "user"`. That frame is **re-emitted for the same message
|
|
37
|
+
* several times per turn, including after `session.idle`** — measured live on
|
|
38
|
+
* 1.18.3 while implementing this Issue:
|
|
39
|
+
*
|
|
40
|
+
* ```
|
|
41
|
+
* 13:53:14.251 session.idle
|
|
42
|
+
* 13:53:14.297 message.updated role=user id=msg_ffb668eec001WToZ7VW0lQgmoa
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* Both copies carry `time: { created: … }` and nothing else, so nothing in the
|
|
46
|
+
* payload distinguishes them. Mapped one-to-one, the newest event after a
|
|
47
|
+
* finished turn is `user_prompt_submit`, which `status-mapping` reads as
|
|
48
|
+
* **`running`** — so `commandmate wait` would hang on every completed opencode
|
|
49
|
+
* turn until the 30-minute staleness bound expired. The fix has the same shape:
|
|
50
|
+
* **announce the first `message.updated` for a message id, suppress the
|
|
51
|
+
* repeats.**
|
|
52
|
+
*
|
|
53
|
+
* Unlike the arming state, announced ids **survive a reconnect**. A genuinely
|
|
54
|
+
* new prompt always carries a new id, so keeping them costs nothing and closes
|
|
55
|
+
* the window where a reconnect lands between a turn's end and its trailing
|
|
56
|
+
* repeat.
|
|
57
|
+
*
|
|
58
|
+
* The gate is a pure state machine over frame types so it can be driven from
|
|
59
|
+
* fixtures. The subscription owns one per connection.
|
|
60
|
+
*
|
|
61
|
+
* @module lib/hooks/sources/opencode/turn-gate
|
|
62
|
+
*/
|
|
63
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
|
+
exports.MAX_TRACKED_USER_MESSAGES = exports.MAX_TRACKED_TURN_SESSIONS = void 0;
|
|
65
|
+
exports.createTurnGate = createTurnGate;
|
|
66
|
+
const event_mapper_1 = require("../event-mapper");
|
|
67
|
+
/**
|
|
68
|
+
* Cap on remembered sessions.
|
|
69
|
+
*
|
|
70
|
+
* One opencode server can host several sessions (#1758 §5.6.1) and a long-lived
|
|
71
|
+
* TUI accumulates them, so the map is bounded. The oldest is dropped, which at
|
|
72
|
+
* worst re-arms an ancient session — the failure mode of forgetting is a
|
|
73
|
+
* suppressed idle, never a spurious completion.
|
|
74
|
+
*/
|
|
75
|
+
exports.MAX_TRACKED_TURN_SESSIONS = 64;
|
|
76
|
+
/**
|
|
77
|
+
* Cap on remembered user-message ids.
|
|
78
|
+
*
|
|
79
|
+
* Larger than the session cap because it counts prompts rather than sessions,
|
|
80
|
+
* and because these survive reconnects. Forgetting the oldest costs one
|
|
81
|
+
* re-announced `user_prompt_submit` for a prompt from thousands of turns ago.
|
|
82
|
+
*/
|
|
83
|
+
exports.MAX_TRACKED_USER_MESSAGES = 512;
|
|
84
|
+
/** `properties.sessionID`, or null. */
|
|
85
|
+
function sessionIdOf(payload) {
|
|
86
|
+
const properties = (0, event_mapper_1.isPlainObject)(payload.properties) ? payload.properties : {};
|
|
87
|
+
return (0, event_mapper_1.readNestedString)(properties, ['sessionID']);
|
|
88
|
+
}
|
|
89
|
+
/** `properties.status.type` for `session.status`. */
|
|
90
|
+
function statusType(payload) {
|
|
91
|
+
const properties = (0, event_mapper_1.isPlainObject)(payload.properties) ? payload.properties : {};
|
|
92
|
+
return (0, event_mapper_1.readNestedString)(properties, ['status', 'type']);
|
|
93
|
+
}
|
|
94
|
+
/** `properties.error.name` for `session.error` — `MessageAbortedError`, `APIError`, … */
|
|
95
|
+
function errorName(payload) {
|
|
96
|
+
const properties = (0, event_mapper_1.isPlainObject)(payload.properties) ? payload.properties : {};
|
|
97
|
+
return (0, event_mapper_1.readNestedString)(properties, ['error', 'name']);
|
|
98
|
+
}
|
|
99
|
+
/** `properties.info.role` / `properties.info.id` for `message.updated`. */
|
|
100
|
+
function messageInfo(payload) {
|
|
101
|
+
const properties = (0, event_mapper_1.isPlainObject)(payload.properties) ? payload.properties : {};
|
|
102
|
+
return {
|
|
103
|
+
role: (0, event_mapper_1.readNestedString)(properties, ['info', 'role']),
|
|
104
|
+
id: (0, event_mapper_1.readNestedString)(properties, ['info', 'id']),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/** Drop the oldest entries until the collection fits. */
|
|
108
|
+
function trim(keys, max) {
|
|
109
|
+
// Both Map and Set iterate in insertion order, so the head is the oldest.
|
|
110
|
+
while (keys.size > max) {
|
|
111
|
+
const oldest = keys.keys().next();
|
|
112
|
+
if (oldest.done)
|
|
113
|
+
break;
|
|
114
|
+
keys.delete(oldest.value);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Build a gate.
|
|
119
|
+
*
|
|
120
|
+
* @param maxSessions - Cap on remembered sessions; defaults to
|
|
121
|
+
* {@link MAX_TRACKED_TURN_SESSIONS}
|
|
122
|
+
* @param maxUserMessages - Cap on remembered user-message ids; defaults to
|
|
123
|
+
* {@link MAX_TRACKED_USER_MESSAGES}
|
|
124
|
+
*/
|
|
125
|
+
function createTurnGate(maxSessions = exports.MAX_TRACKED_TURN_SESSIONS, maxUserMessages = exports.MAX_TRACKED_USER_MESSAGES) {
|
|
126
|
+
const phases = new Map();
|
|
127
|
+
const announced = new Set();
|
|
128
|
+
const remember = (sessionId, phase) => {
|
|
129
|
+
phases.delete(sessionId);
|
|
130
|
+
phases.set(sessionId, phase);
|
|
131
|
+
trim(phases, maxSessions);
|
|
132
|
+
};
|
|
133
|
+
return {
|
|
134
|
+
observe(type, payload) {
|
|
135
|
+
if (type === 'message.updated') {
|
|
136
|
+
const { role, id } = messageInfo(payload);
|
|
137
|
+
// Only the user's own message is `user_prompt_submit`; the assistant's
|
|
138
|
+
// updates carry the reply and map to nothing.
|
|
139
|
+
if (role !== 'user' || id === null)
|
|
140
|
+
return { kind: 'ignored' };
|
|
141
|
+
const sessionId = sessionIdOf(payload) ?? '';
|
|
142
|
+
if (announced.has(id)) {
|
|
143
|
+
return { kind: 'suppressed', sessionId, reason: 'already-announced' };
|
|
144
|
+
}
|
|
145
|
+
announced.add(id);
|
|
146
|
+
trim(announced, maxUserMessages);
|
|
147
|
+
return { kind: 'announced', sessionId, messageId: id };
|
|
148
|
+
}
|
|
149
|
+
if (type === 'session.status') {
|
|
150
|
+
// Only `busy` arms. `idle` here is the same signal as `session.idle`,
|
|
151
|
+
// emitted in the same millisecond, and honouring both would count every
|
|
152
|
+
// turn twice (#1758 §5.3.2 rule 4).
|
|
153
|
+
if (statusType(payload) !== 'busy')
|
|
154
|
+
return { kind: 'ignored' };
|
|
155
|
+
const sessionId = sessionIdOf(payload);
|
|
156
|
+
if (sessionId === null)
|
|
157
|
+
return { kind: 'ignored' };
|
|
158
|
+
remember(sessionId, 'busy');
|
|
159
|
+
return { kind: 'armed', sessionId };
|
|
160
|
+
}
|
|
161
|
+
if (type === 'session.error') {
|
|
162
|
+
const sessionId = sessionIdOf(payload);
|
|
163
|
+
if (sessionId === null)
|
|
164
|
+
return { kind: 'ignored' };
|
|
165
|
+
// Not a completion: the idle that follows is. Reported so the caller can
|
|
166
|
+
// tell "finished" from "gave up" — `session.idle` alone cannot (§5.3.3
|
|
167
|
+
// requirement 3).
|
|
168
|
+
return { kind: 'failed', sessionId, errorName: errorName(payload) };
|
|
169
|
+
}
|
|
170
|
+
if (type !== 'session.idle')
|
|
171
|
+
return { kind: 'ignored' };
|
|
172
|
+
const sessionId = sessionIdOf(payload);
|
|
173
|
+
if (sessionId === null)
|
|
174
|
+
return { kind: 'ignored' };
|
|
175
|
+
const phase = phases.get(sessionId);
|
|
176
|
+
if (phase === undefined) {
|
|
177
|
+
return { kind: 'suppressed', sessionId, reason: 'never-armed' };
|
|
178
|
+
}
|
|
179
|
+
if (phase === 'idle') {
|
|
180
|
+
return { kind: 'suppressed', sessionId, reason: 'already-completed' };
|
|
181
|
+
}
|
|
182
|
+
remember(sessionId, 'idle');
|
|
183
|
+
return { kind: 'completed', sessionId };
|
|
184
|
+
},
|
|
185
|
+
isArmed(sessionId) {
|
|
186
|
+
return phases.get(sessionId) === 'busy';
|
|
187
|
+
},
|
|
188
|
+
reset() {
|
|
189
|
+
phases.clear();
|
|
190
|
+
// `announced` is deliberately kept — see the module comment.
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The in-flight decisions a push source is holding, and the one call a receiver
|
|
4
|
+
* makes to answer one (Issue #1759, constraint C2).
|
|
5
|
+
*
|
|
6
|
+
* A hook is answered in the body of the request it arrived on. opencode is
|
|
7
|
+
* answered by `POST`ing to a different URL, minutes later if need be, on a
|
|
8
|
+
* connection the event never travelled over (#1758 §5.5). Those are not two
|
|
9
|
+
* spellings of one operation, and a receiver that branched on which it was
|
|
10
|
+
* dealing with would be a receiver that knows the tool — the thing this whole
|
|
11
|
+
* abstraction exists to remove.
|
|
12
|
+
*
|
|
13
|
+
* {@link answerPendingDecision} is the seam. It opens a slot, hands the
|
|
14
|
+
* decision to {@link AgentEventSource.decide}, and returns whatever body the
|
|
15
|
+
* source left behind — `{}` when the source answered out of band, because there
|
|
16
|
+
* is then nothing for the response to carry. A push source fills the slot
|
|
17
|
+
* synchronously; a pull source ignores it and calls REST. The caller writes the
|
|
18
|
+
* returned object either way.
|
|
19
|
+
*
|
|
20
|
+
* The open slots are also what {@link AgentEventSource.listPending} answers with
|
|
21
|
+
* for push sources (C7): a hook that has not been replied to yet is the only
|
|
22
|
+
* pending state a push transport has, and a hook that was dropped is simply
|
|
23
|
+
* gone — there is no `GET /permission` to re-read it from.
|
|
24
|
+
*
|
|
25
|
+
* @module lib/hooks/sources/pending-decisions
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.MAX_OPEN_DECISIONS_PER_INSTANCE = void 0;
|
|
29
|
+
exports.openDecisionSlot = openDecisionSlot;
|
|
30
|
+
exports.closeDecisionSlot = closeDecisionSlot;
|
|
31
|
+
exports.listOpenDecisions = listOpenDecisions;
|
|
32
|
+
exports.fillDecisionSlot = fillDecisionSlot;
|
|
33
|
+
exports.resetPendingDecisions = resetPendingDecisions;
|
|
34
|
+
exports.answerPendingDecision = answerPendingDecision;
|
|
35
|
+
const auto_yes_state_1 = require("../../../lib/auto-yes-state");
|
|
36
|
+
const logger_1 = require("../../../lib/logger");
|
|
37
|
+
const logger = (0, logger_1.createLogger)('lib/hooks/sources/pending-decisions');
|
|
38
|
+
const pendingByInstance = (globalThis.__agentSourcePendingDecisions ??= new Map());
|
|
39
|
+
/**
|
|
40
|
+
* Cap on simultaneously open slots for one instance.
|
|
41
|
+
*
|
|
42
|
+
* An agent asks one thing at a time, so anything above a handful means slots
|
|
43
|
+
* are leaking rather than that a human is very busy. The oldest is dropped
|
|
44
|
+
* rather than the newest refused: the newest is the one somebody is waiting on.
|
|
45
|
+
*/
|
|
46
|
+
exports.MAX_OPEN_DECISIONS_PER_INSTANCE = 16;
|
|
47
|
+
function keyOf(ref) {
|
|
48
|
+
return (0, auto_yes_state_1.buildCompositeKey)(ref.worktreeId, ref.cliToolId, ref.instanceId);
|
|
49
|
+
}
|
|
50
|
+
/** Register a decision as in flight. Always paired with {@link closeDecisionSlot}. */
|
|
51
|
+
function openDecisionSlot(ref, decision) {
|
|
52
|
+
const key = keyOf(ref);
|
|
53
|
+
const slot = { key, ref, decision, body: null };
|
|
54
|
+
const open = pendingByInstance.get(key) ?? [];
|
|
55
|
+
open.push(slot);
|
|
56
|
+
while (open.length > exports.MAX_OPEN_DECISIONS_PER_INSTANCE)
|
|
57
|
+
open.shift();
|
|
58
|
+
pendingByInstance.set(key, open);
|
|
59
|
+
return slot;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Remove a slot and take whatever the source wrote into it.
|
|
63
|
+
*
|
|
64
|
+
* @returns The response body, or `{}` when the source answered out of band —
|
|
65
|
+
* which is also, and not by accident, the byte-for-byte no-decision body
|
|
66
|
+
* every hook-based tool reads as "carry on" (#1721 D5).
|
|
67
|
+
*/
|
|
68
|
+
function closeDecisionSlot(slot) {
|
|
69
|
+
const open = pendingByInstance.get(slot.key);
|
|
70
|
+
if (open) {
|
|
71
|
+
const index = open.indexOf(slot);
|
|
72
|
+
if (index >= 0)
|
|
73
|
+
open.splice(index, 1);
|
|
74
|
+
if (open.length === 0)
|
|
75
|
+
pendingByInstance.delete(slot.key);
|
|
76
|
+
}
|
|
77
|
+
return slot.body ?? {};
|
|
78
|
+
}
|
|
79
|
+
/** The decisions currently in flight for one instance. */
|
|
80
|
+
function listOpenDecisions(ref) {
|
|
81
|
+
return (pendingByInstance.get(keyOf(ref)) ?? []).map((slot) => slot.decision);
|
|
82
|
+
}
|
|
83
|
+
/** Fill the slot a push source is answering, if it is still open. */
|
|
84
|
+
function fillDecisionSlot(ref, decisionId, body) {
|
|
85
|
+
const open = pendingByInstance.get(keyOf(ref));
|
|
86
|
+
if (!open)
|
|
87
|
+
return false;
|
|
88
|
+
const slot = open.find((candidate) => candidate.decision.id === decisionId);
|
|
89
|
+
if (!slot)
|
|
90
|
+
return false;
|
|
91
|
+
slot.body = body;
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
/** Drop every open slot. For tests; production only ever closes what it opened. */
|
|
95
|
+
function resetPendingDecisions() {
|
|
96
|
+
pendingByInstance.clear();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Answer one decision, whichever way this source answers things.
|
|
100
|
+
*
|
|
101
|
+
* The single call a receiver route makes. It does not know — and after this
|
|
102
|
+
* function exists, cannot find out without going out of its way — whether the
|
|
103
|
+
* verdict left through the response body or through a second HTTP call.
|
|
104
|
+
*
|
|
105
|
+
* @returns The body to write. `{}` means "nothing to say here", which for a
|
|
106
|
+
* hook is the measured no-decision reply and for a pull source is simply the
|
|
107
|
+
* ack of a request whose answer went elsewhere.
|
|
108
|
+
*/
|
|
109
|
+
async function answerPendingDecision(source, ref, decision, verdict) {
|
|
110
|
+
const slot = openDecisionSlot(ref, decision);
|
|
111
|
+
try {
|
|
112
|
+
await source.decide(ref, decision, verdict);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
// Closed even when `decide` throws: a source that failed to deliver must
|
|
116
|
+
// still not leave the receiver holding a slot, and the empty body that then
|
|
117
|
+
// comes back is the fail-open answer for every push tool.
|
|
118
|
+
logger.warn('agent-source-decide-failed', {
|
|
119
|
+
worktreeId: ref.worktreeId,
|
|
120
|
+
cliToolId: ref.cliToolId,
|
|
121
|
+
instanceId: ref.instanceId ?? ref.cliToolId,
|
|
122
|
+
decisionId: decision.id,
|
|
123
|
+
error: error instanceof Error ? error.message : String(error),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return closeDecisionSlot(slot);
|
|
127
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Which {@link AgentEventSource} speaks for which CLI tool (Issue #1759).
|
|
4
|
+
*
|
|
5
|
+
* The lookup that replaces "assume Claude". A receiver holds a
|
|
6
|
+
* {@link CLIToolType} — it came off the hook URL or the request body — and asks
|
|
7
|
+
* here; it never imports a tool's module and never compares against a tool id.
|
|
8
|
+
*
|
|
9
|
+
* ## Held on `globalThis`
|
|
10
|
+
*
|
|
11
|
+
* Not decoration. `agent-event-state` documents what happened the last time a
|
|
12
|
+
* shared map lived in module scope (#1736): under `next dev` every route
|
|
13
|
+
* handler is bundled separately, so `/api/hooks/agent-event` and
|
|
14
|
+
* `/api/hooks/permission-request` each got their own copy of the module, one
|
|
15
|
+
* wrote and the other read, and every field came back null — with no error, no
|
|
16
|
+
* warning and a perfectly well-formed response. A registry has the same shape
|
|
17
|
+
* of failure available to it: a source registered in one bundle would be absent
|
|
18
|
+
* in another, and the fallback below would silently take over. So the map is
|
|
19
|
+
* process-wide, and the registration is idempotent.
|
|
20
|
+
*
|
|
21
|
+
* ## Unregistered tools
|
|
22
|
+
*
|
|
23
|
+
* {@link getAgentEventSource} always answers. A tool with no source gets the
|
|
24
|
+
* compatibility source from `./legacy-relay`, which preserves the pre-#1759
|
|
25
|
+
* receiver behaviour for the hand-configured hooks of #1549. Ask
|
|
26
|
+
* {@link hasAgentEventSource} when the distinction matters.
|
|
27
|
+
*
|
|
28
|
+
* @module lib/hooks/sources/registry
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.registerAgentEventSource = registerAgentEventSource;
|
|
32
|
+
exports.hasAgentEventSource = hasAgentEventSource;
|
|
33
|
+
exports.getAgentEventSource = getAgentEventSource;
|
|
34
|
+
exports.listAgentEventSources = listAgentEventSources;
|
|
35
|
+
exports.unregisterAgentEventSource = unregisterAgentEventSource;
|
|
36
|
+
const legacy_relay_1 = require("./legacy-relay");
|
|
37
|
+
const source_1 = require("./claude/source");
|
|
38
|
+
const source_2 = require("./copilot/source");
|
|
39
|
+
const source_3 = require("./gemini/source");
|
|
40
|
+
const source_4 = require("./antigravity/source");
|
|
41
|
+
const source_5 = require("./codex/source");
|
|
42
|
+
const source_6 = require("./opencode/source");
|
|
43
|
+
const registered = (globalThis.__agentEventSources ??= new Map());
|
|
44
|
+
/** Memoised compatibility sources, so repeated lookups return one object. */
|
|
45
|
+
const legacy = (globalThis.__agentEventLegacySources ??= new Map());
|
|
46
|
+
/**
|
|
47
|
+
* Add or replace a tool's source.
|
|
48
|
+
*
|
|
49
|
+
* @param source - The implementation; its own `cliToolId` is the key
|
|
50
|
+
*/
|
|
51
|
+
function registerAgentEventSource(source) {
|
|
52
|
+
registered.set(source.cliToolId, source);
|
|
53
|
+
// A tool that has a real source must not keep answering from the
|
|
54
|
+
// compatibility one anywhere — including from a memo taken before it was
|
|
55
|
+
// registered, which is reachable in `next dev` where registration order
|
|
56
|
+
// across bundles is not fixed.
|
|
57
|
+
legacy.delete(source.cliToolId);
|
|
58
|
+
}
|
|
59
|
+
/** Whether this tool has a real implementation, as opposed to the fallback. */
|
|
60
|
+
function hasAgentEventSource(cliToolId) {
|
|
61
|
+
return registered.has(cliToolId);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The source for one tool. Never null.
|
|
65
|
+
*
|
|
66
|
+
* @returns The registered implementation, or the compatibility source that
|
|
67
|
+
* keeps a hand-configured #1549 hook working until this tool has one
|
|
68
|
+
*/
|
|
69
|
+
function getAgentEventSource(cliToolId) {
|
|
70
|
+
const source = registered.get(cliToolId);
|
|
71
|
+
if (source)
|
|
72
|
+
return source;
|
|
73
|
+
const existing = legacy.get(cliToolId);
|
|
74
|
+
if (existing)
|
|
75
|
+
return existing;
|
|
76
|
+
const fallback = (0, legacy_relay_1.createLegacyRelaySource)(cliToolId);
|
|
77
|
+
legacy.set(cliToolId, fallback);
|
|
78
|
+
return fallback;
|
|
79
|
+
}
|
|
80
|
+
/** Every tool with a real implementation. Ordered by registration. */
|
|
81
|
+
function listAgentEventSources() {
|
|
82
|
+
return [...registered.values()];
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Undo a registration. For tests — production only ever adds.
|
|
86
|
+
*
|
|
87
|
+
* The mutation "take Claude out of the registry" that Issue #1759 asks to be
|
|
88
|
+
* proved lethal is spelled with this.
|
|
89
|
+
*/
|
|
90
|
+
function unregisterAgentEventSource(cliToolId) {
|
|
91
|
+
registered.delete(cliToolId);
|
|
92
|
+
legacy.delete(cliToolId);
|
|
93
|
+
}
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
// Built-in registrations
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
//
|
|
98
|
+
// Statically imported and registered on load, rather than through a
|
|
99
|
+
// side-effecting `import './claude'` somewhere else: an import a bundler is
|
|
100
|
+
// free to consider unused is a registration that disappears in a production
|
|
101
|
+
// build, and "the source is silently absent" is the exact failure this module's
|
|
102
|
+
// globalThis comment is about.
|
|
103
|
+
//
|
|
104
|
+
// Phase 4-2…4-5 adds one line here per tool. That, plus the tool's own file, is
|
|
105
|
+
// the whole of "adding a tool" — see docs/design/agent-event-source-interface.md.
|
|
106
|
+
registerAgentEventSource(source_1.claudeAgentEventSource);
|
|
107
|
+
registerAgentEventSource(source_2.copilotAgentEventSource);
|
|
108
|
+
registerAgentEventSource(source_3.geminiAgentEventSource);
|
|
109
|
+
registerAgentEventSource(source_4.antigravityAgentEventSource);
|
|
110
|
+
registerAgentEventSource(source_5.codexAgentEventSource);
|
|
111
|
+
registerAgentEventSource(source_6.opencodeAgentEventSource);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `AgentEventSource` — the one seam every agent CLI plugs its lifecycle events
|
|
4
|
+
* into (Issue #1759, Phase 4-1 of Epic #1720).
|
|
5
|
+
*
|
|
6
|
+
* Phases 1-3 left the *consuming* half of the structured-event pipeline already
|
|
7
|
+
* tool-agnostic: `agent-event-state`, `permission-decision-service`,
|
|
8
|
+
* `current-output-builder`, `status-mapping` and `prompt-waiting-composition`
|
|
9
|
+
* all key off `(worktreeId, cliToolId, instanceId)` and branch on nothing else.
|
|
10
|
+
* What stayed Claude-shaped is the half that *produces* the events and the half
|
|
11
|
+
* that *answers* them. This module is the contract for that half, so Phase
|
|
12
|
+
* 4-2…4-5 adds a tool by adding a file rather than by copying Claude's seams.
|
|
13
|
+
*
|
|
14
|
+
* Every type below exists because a measurement demanded it. The two spikes
|
|
15
|
+
* that took those measurements are the specification:
|
|
16
|
+
*
|
|
17
|
+
* - `docs/design/agent-hooks-phase4-live-verification.md` (#1757) — codex /
|
|
18
|
+
* copilot / gemini / antigravity, five push-mode hook implementations that
|
|
19
|
+
* disagree with each other about spelling, casing, correlation keys, config
|
|
20
|
+
* location and — most importantly — what silence means.
|
|
21
|
+
* - `docs/design/opencode-server-live-verification.md` (#1758) — opencode,
|
|
22
|
+
* which is not a hook implementation at all: CommandMate subscribes to *its*
|
|
23
|
+
* HTTP server over SSE and answers with a separate REST call. §9.1 of that
|
|
24
|
+
* report lists eight constraints (C1…C8) and §9.2 sketches this interface;
|
|
25
|
+
* the shapes here follow it.
|
|
26
|
+
*
|
|
27
|
+
* Three of those constraints are worth restating at the top of the file,
|
|
28
|
+
* because getting them wrong is silent:
|
|
29
|
+
*
|
|
30
|
+
* - **C1 — the direction of travel is not fixed.** Hooks push into
|
|
31
|
+
* `POST /api/hooks/agent-event`. opencode has to be *subscribed to*. So a
|
|
32
|
+
* source has a lifecycle (`subscribe` / `Subscription.close`), even when
|
|
33
|
+
* the push implementations make it a no-op.
|
|
34
|
+
* - **C2 — the reply channel is not fixed.** A hook is answered in the body of
|
|
35
|
+
* the request it arrived on; opencode is answered by `POST`ing to a
|
|
36
|
+
* different URL entirely. {@link AgentEventSource.decide} hides which.
|
|
37
|
+
* - **C3 — silence does not mean the same thing twice.** Claude / codex /
|
|
38
|
+
* copilot walk on when nobody answers (fail-open). antigravity reads an
|
|
39
|
+
* empty object as *deny* and stops every tool call. opencode waits forever
|
|
40
|
+
* (10m19s measured, no timeout). {@link NoDecisionBehavior} is a declared
|
|
41
|
+
* field for exactly this reason: "we abstain, which is the safe default" is
|
|
42
|
+
* a sentence that is only true for some of the tools.
|
|
43
|
+
*
|
|
44
|
+
* @module lib/hooks/sources/types
|
|
45
|
+
*/
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -28,7 +28,20 @@ const prompt_dedup_1 = require("./prompt-dedup");
|
|
|
28
28
|
const response_dedup_1 = require("./response-dedup");
|
|
29
29
|
const response_poller_core_1 = require("./response-poller-core");
|
|
30
30
|
const push_1 = require("../../lib/push");
|
|
31
|
+
// Issue #1790: imported by deep path, not through `@/lib/push`. Suites that
|
|
32
|
+
// replace the barrel to count notifications (e.g. the #1547 escalation test)
|
|
33
|
+
// would otherwise get `undefined` here and take down module evaluation.
|
|
34
|
+
const waiting_push_notifier_1 = require("../../lib/push/waiting-push-notifier");
|
|
35
|
+
const waiting_episode_state_1 = require("../../lib/session/waiting-episode-state");
|
|
31
36
|
const task_transition_service_1 = require("../../lib/tasks/task-transition-service");
|
|
37
|
+
// Issue #1790: arm the waiting-edge push subscription.
|
|
38
|
+
//
|
|
39
|
+
// It has to exist before the first edge, and `server.ts` reaches this module at
|
|
40
|
+
// boot (it imports `polling/response-poller` for `stopAllPolling`, which pulls
|
|
41
|
+
// in `response-poller-core` and then this file), so this is the earliest hook
|
|
42
|
+
// the notification path owns. Idempotent by replacement, and it starts no timer
|
|
43
|
+
// and touches no database until a wait actually opens.
|
|
44
|
+
(0, waiting_push_notifier_1.startWaitingPushNotifier)();
|
|
32
45
|
/**
|
|
33
46
|
* Creates an incomplete extraction result with empty response.
|
|
34
47
|
* Centralizes the repeated pattern of returning an in-progress/incomplete state.
|
|
@@ -465,13 +478,39 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
465
478
|
});
|
|
466
479
|
// Web Push fan-out (Issue #1125): agent is now waiting for a prompt reply.
|
|
467
480
|
// Fire-and-forget — push is advisory and must never block/break the poller.
|
|
481
|
+
//
|
|
482
|
+
// Issue #1790: the wait is now named by #1786's episode rather than by the
|
|
483
|
+
// prompt text. The two lines below are ordered, not incidental:
|
|
484
|
+
//
|
|
485
|
+
// 1. the notification is raised first, while it still has the prompt's
|
|
486
|
+
// own question to quote — it records the episode in the dedup, so
|
|
487
|
+
// whichever path reports the wait second says nothing;
|
|
488
|
+
// 2. `observeWaitingEdge` then opens that same episode, which is what
|
|
489
|
+
// lets the edge listener (and #1788's WebSocket frame) agree with this
|
|
490
|
+
// call about *which* wait this is instead of raising a second one.
|
|
491
|
+
//
|
|
492
|
+
// Both use one timestamp so the episode the notification claims and the
|
|
493
|
+
// episode the store opens are the same number.
|
|
494
|
+
const promptObservedAt = Date.now();
|
|
495
|
+
const promptWaitingSince = (0, waiting_episode_state_1.getWaitingEpisode)(worktreeId, cliToolId, instanceId)?.since ?? promptObservedAt;
|
|
468
496
|
void (0, push_1.notifyPushSubscribers)({
|
|
469
497
|
worktreeId,
|
|
470
498
|
worktreeName: worktree.name,
|
|
471
499
|
kind: 'prompt',
|
|
472
500
|
agentName: resolvedInstanceId,
|
|
501
|
+
instanceId: resolvedInstanceId,
|
|
502
|
+
waitingKind: 'prompt',
|
|
503
|
+
waitingSince: promptWaitingSince,
|
|
473
504
|
excerpt: promptDetection.promptData?.question ?? promptSaveContent,
|
|
474
505
|
}).catch(() => { });
|
|
506
|
+
(0, waiting_episode_state_1.observeWaitingEdge)({
|
|
507
|
+
worktreeId,
|
|
508
|
+
cliToolId,
|
|
509
|
+
instanceId,
|
|
510
|
+
waiting: true,
|
|
511
|
+
kind: 'prompt',
|
|
512
|
+
now: promptObservedAt,
|
|
513
|
+
});
|
|
475
514
|
if (!isFullScreenTui) {
|
|
476
515
|
(0, response_poller_core_1.stopPolling)(worktreeId, cliToolId, instanceId);
|
|
477
516
|
}
|
|
@@ -562,6 +601,14 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
562
601
|
});
|
|
563
602
|
// Broadcast message to WebSocket clients
|
|
564
603
|
(0, ws_server_1.broadcastMessage)('message', { worktreeId, message });
|
|
604
|
+
// Issue #1790: the agent has just produced a reply, so whatever it was
|
|
605
|
+
// waiting for is over. Closing the episode here is what makes a *second*
|
|
606
|
+
// prompt in the same session notify again: without it a wait opened by the
|
|
607
|
+
// prompt branch above could stay open until a browser next probes the status
|
|
608
|
+
// API, and every later prompt would be folded into that stale episode and
|
|
609
|
+
// silently deduped. Nothing to close is a no-op, and no notification is
|
|
610
|
+
// raised for a closing edge.
|
|
611
|
+
(0, waiting_episode_state_1.observeWaitingEdge)({ worktreeId, cliToolId, instanceId, waiting: false });
|
|
565
612
|
// Web Push fan-out (Issue #1125): session completed (running → idle).
|
|
566
613
|
// Fire-and-forget — push is advisory and must never block/break the poller.
|
|
567
614
|
void (0, push_1.notifyPushSubscribers)({
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The "still waiting" reminder setting (Issue #1790).
|
|
4
|
+
*
|
|
5
|
+
* A wait that nobody answers is the case push notifications exist for, and one
|
|
6
|
+
* notification is easy to miss — so after a threshold the server sends exactly
|
|
7
|
+
* one more. How long to wait, and whether to do it at all, is a user decision,
|
|
8
|
+
* and it is a *server-side* one: the check runs in the background with no
|
|
9
|
+
* request and no browser attached, so it cannot read a device's localStorage the
|
|
10
|
+
* way #1788's in-app toggle does. It is therefore stored once for the install
|
|
11
|
+
* and applies to every subscribed device.
|
|
12
|
+
*
|
|
13
|
+
* ## Why the SQL lives here
|
|
14
|
+
*
|
|
15
|
+
* `app_settings` (migration v27) is the generic key-value store this rides on,
|
|
16
|
+
* so no migration is added. Its typed helpers live in `db/app-settings-db`, but
|
|
17
|
+
* both existing ones are `string[]`-shaped and this value is an object with two
|
|
18
|
+
* fields of different types; a third helper there would be a fourth reader of
|
|
19
|
+
* the same table with no shared logic to gain. Keeping the accessor beside its
|
|
20
|
+
* only consumer also keeps the defaults — which the escalation tick applies on
|
|
21
|
+
* every failure path — in one file.
|
|
22
|
+
*
|
|
23
|
+
* Every read is total: a missing row, malformed JSON, an out-of-range threshold
|
|
24
|
+
* or an unopenable database all resolve to {@link DEFAULT_ESCALATION_SETTINGS}
|
|
25
|
+
* rather than throwing. The caller is a background timer whose failure mode
|
|
26
|
+
* must be "no reminder", never "the server logs an exception every minute".
|
|
27
|
+
*
|
|
28
|
+
* @module lib/push/escalation-settings
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.MAX_ESCALATION_THRESHOLD_MINUTES = exports.MIN_ESCALATION_THRESHOLD_MINUTES = exports.ESCALATION_THRESHOLD_CHOICES = exports.DEFAULT_ESCALATION_SETTINGS = exports.ESCALATION_SETTINGS_KEY = void 0;
|
|
32
|
+
exports.normalizeEscalationSettings = normalizeEscalationSettings;
|
|
33
|
+
exports.getPushEscalationSettings = getPushEscalationSettings;
|
|
34
|
+
exports.setPushEscalationSettings = setPushEscalationSettings;
|
|
35
|
+
const db_instance_1 = require("../../lib/db/db-instance");
|
|
36
|
+
const logger_1 = require("../../lib/logger");
|
|
37
|
+
const logger = (0, logger_1.createLogger)('push/escalation-settings');
|
|
38
|
+
/** `app_settings.key` this setting is stored under. */
|
|
39
|
+
exports.ESCALATION_SETTINGS_KEY = 'push_escalation';
|
|
40
|
+
/**
|
|
41
|
+
* On by default at ten minutes, per the Issue.
|
|
42
|
+
*
|
|
43
|
+
* Defaulting to *on* is the same call #1788 made for the in-app toast: a user
|
|
44
|
+
* who never opened the settings screen is the one most likely to walk away from
|
|
45
|
+
* a waiting agent, and the cost of being wrong is one extra notification per
|
|
46
|
+
* unanswered wait — bounded, because there is only ever one.
|
|
47
|
+
*/
|
|
48
|
+
exports.DEFAULT_ESCALATION_SETTINGS = {
|
|
49
|
+
enabled: true,
|
|
50
|
+
thresholdMinutes: 10,
|
|
51
|
+
};
|
|
52
|
+
/** The thresholds the settings UI offers, in minutes. */
|
|
53
|
+
exports.ESCALATION_THRESHOLD_CHOICES = [5, 10, 30, 60];
|
|
54
|
+
/** Guard rails for a hand-written value: at least a minute, at most a day. */
|
|
55
|
+
exports.MIN_ESCALATION_THRESHOLD_MINUTES = 1;
|
|
56
|
+
exports.MAX_ESCALATION_THRESHOLD_MINUTES = 1440;
|
|
57
|
+
/**
|
|
58
|
+
* Narrow arbitrary input to a usable setting, filling each field independently.
|
|
59
|
+
*
|
|
60
|
+
* Field-by-field rather than all-or-nothing so that a bad threshold does not
|
|
61
|
+
* silently switch the reminder back on (or off): the half the user did set is
|
|
62
|
+
* the half that is honoured.
|
|
63
|
+
*/
|
|
64
|
+
function normalizeEscalationSettings(value) {
|
|
65
|
+
if (typeof value !== 'object' || value === null)
|
|
66
|
+
return { ...exports.DEFAULT_ESCALATION_SETTINGS };
|
|
67
|
+
const record = value;
|
|
68
|
+
const enabled = typeof record.enabled === 'boolean' ? record.enabled : exports.DEFAULT_ESCALATION_SETTINGS.enabled;
|
|
69
|
+
const raw = record.thresholdMinutes;
|
|
70
|
+
const thresholdMinutes = typeof raw === 'number' &&
|
|
71
|
+
Number.isFinite(raw) &&
|
|
72
|
+
raw >= exports.MIN_ESCALATION_THRESHOLD_MINUTES &&
|
|
73
|
+
raw <= exports.MAX_ESCALATION_THRESHOLD_MINUTES
|
|
74
|
+
? Math.round(raw)
|
|
75
|
+
: exports.DEFAULT_ESCALATION_SETTINGS.thresholdMinutes;
|
|
76
|
+
return { enabled, thresholdMinutes };
|
|
77
|
+
}
|
|
78
|
+
/** Read the setting. Never throws — see the module docblock. */
|
|
79
|
+
function getPushEscalationSettings() {
|
|
80
|
+
try {
|
|
81
|
+
const row = (0, db_instance_1.getDbInstance)()
|
|
82
|
+
.prepare('SELECT value FROM app_settings WHERE key = ?')
|
|
83
|
+
.get(exports.ESCALATION_SETTINGS_KEY);
|
|
84
|
+
if (!row)
|
|
85
|
+
return { ...exports.DEFAULT_ESCALATION_SETTINGS };
|
|
86
|
+
return normalizeEscalationSettings(JSON.parse(row.value));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger.warn('escalation-settings-read-failed', {
|
|
90
|
+
error: error instanceof Error ? error.message : String(error),
|
|
91
|
+
});
|
|
92
|
+
return { ...exports.DEFAULT_ESCALATION_SETTINGS };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Persist the setting, normalizing first so a malformed request cannot store a
|
|
97
|
+
* value later reads would have to reject anyway.
|
|
98
|
+
*
|
|
99
|
+
* @returns What was actually written.
|
|
100
|
+
*/
|
|
101
|
+
function setPushEscalationSettings(value) {
|
|
102
|
+
const settings = normalizeEscalationSettings(value);
|
|
103
|
+
const now = Date.now();
|
|
104
|
+
(0, db_instance_1.getDbInstance)()
|
|
105
|
+
.prepare(`
|
|
106
|
+
INSERT INTO app_settings (key, value, created_at, updated_at)
|
|
107
|
+
VALUES (?, ?, ?, ?)
|
|
108
|
+
ON CONFLICT(key) DO UPDATE SET
|
|
109
|
+
value = excluded.value,
|
|
110
|
+
updated_at = excluded.updated_at
|
|
111
|
+
`)
|
|
112
|
+
.run(exports.ESCALATION_SETTINGS_KEY, JSON.stringify(settings), now, now);
|
|
113
|
+
return settings;
|
|
114
|
+
}
|