commandmate 0.29.1 → 0.30.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 +468 -417
- package/.next/app-path-routes-manifest.json +30 -23
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +15 -15
- package/.next/react-loadable-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +25 -8
- package/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route.js +2 -0
- package/.next/server/app/api/agents/update/route.js.nft.json +1 -0
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/agents/versions/route.js +1 -0
- package/.next/server/app/api/agents/versions/route.js.nft.json +1 -0
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -0
- 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 +18 -18
- 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 +19 -19
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/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 -7
- 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 -7
- 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 +2 -2
- 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 +2 -2
- 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 +7 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.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 +7 -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/remote/pair/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/settings/default-agents/route.js +1 -0
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/default-surface-mode/route.js +1 -0
- package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/sidebar/group-order/route.js +1 -7
- 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.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +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 +2 -2
- 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 +2 -2
- 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.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +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 -1
- 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 -1
- 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 +2 -2
- 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 +2 -2
- 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]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/{start-polling → cli-reference}/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 -2
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/env/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]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/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 +2 -2
- 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 +3 -3
- 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]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/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 +2 -2
- 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 -7
- 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]/tasks/route.js +1 -1
- 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/config/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -0
- 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/apply-default-agents/route.js +1 -0
- package/.next/server/app/api/worktrees/apply-default-agents/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page.js.nft.json +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 +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +12 -12
- 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 +3 -3
- 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 +30 -23
- package/.next/server/chunks/1058.js +1 -1
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1191.js +1 -1
- package/.next/server/chunks/1341.js +1 -0
- package/.next/server/chunks/1501.js +5 -0
- package/.next/server/chunks/1886.js +3 -4
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/261.js +1 -0
- package/.next/server/chunks/2739.js +1 -0
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/2827.js +29 -0
- package/.next/server/chunks/3123.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3707.js +15 -0
- package/.next/server/chunks/3722.js +25 -1
- package/.next/server/chunks/3869.js +1 -0
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4299.js +1 -1
- package/.next/server/chunks/4325.js +1 -0
- package/.next/server/chunks/4390.js +1 -0
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4443.js +6 -0
- package/.next/server/chunks/5017.js +1 -1
- package/.next/server/chunks/5120.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6337.js +1 -1
- package/.next/server/chunks/663.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6894.js +8 -0
- package/.next/server/chunks/7366.js +5 -0
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/7824.js +1 -1
- package/.next/server/chunks/7836.js +1 -0
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8118.js +1 -0
- package/.next/server/chunks/8356.js +1 -1
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/880.js +3 -3
- package/.next/server/chunks/8800.js +3 -0
- package/.next/server/chunks/8807.js +1 -1
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9130.js +3 -3
- package/.next/server/chunks/9627.js +71 -43
- package/.next/server/chunks/9696.js +3 -0
- package/.next/server/chunks/9798.js +1 -1
- 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 +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/7K0XXFu_ty4wRSkl4X21E/_buildManifest.js +1 -0
- package/.next/static/chunks/{2053-c0e931eb4391baa1.js → 2053-3f299a7a2c7d6767.js} +1 -1
- package/.next/static/chunks/{3968-8d8ca15657748bfb.js → 3916-0e929d089282dc5d.js} +1 -1
- package/.next/static/chunks/3922.9c1ec01fff819c88.js +1 -0
- package/.next/static/chunks/5229-6c89475b61bd2c8b.js +1 -0
- package/.next/static/chunks/6022-7a7d1760fc9814c7.js +1 -0
- package/.next/static/chunks/6381-28d0e95620aa018e.js +1 -0
- package/.next/static/chunks/8019-f8e73c1fb5f6f0d3.js +1 -0
- package/.next/static/chunks/{1188-8567ee5ecfef02ee.js → 8593-fa0eb2802e0ce68a.js} +1 -1
- package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/chat/{page-231df45127e876c2.js → page-9aa2011410895b0d.js} +1 -1
- package/.next/static/chunks/app/login/{page-03659dded846ef1d.js → page-af7241bb4c4a8e59.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/more/page-333bba1c8bbc9c11.js +1 -0
- package/.next/static/chunks/app/{page-0305431f43195431.js → page-214f7ffa13a0cf10.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/repositories/{page-ae8fa55749976f79.js → page-4951cac905e50224.js} +1 -1
- package/.next/static/chunks/app/review/page-a0899b2d285318c3.js +1 -0
- package/.next/static/chunks/app/sessions/page-fb36145ec732092a.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/{page-aaf0bcb1dfb558b9.js → page-9099e26b60442873.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-dafc486410e839b7.js → page-182e32368696d824.js} +1 -1
- package/.next/static/chunks/app/skills/{page-9e3c91da31514893.js → page-d3fdc88239ebe0ab.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-90f96977c741bbf8.js → page-f3361237420719b4.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-d48b95ed554bcd13.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-2631bc5c4b0a9fb8.js +1 -0
- package/.next/static/chunks/{webpack-7e79064bfce988d7.js → webpack-9f75198882fdaf08.js} +1 -1
- package/.next/static/css/61e10d4b1b11b193.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/agents/update/route.ts +347 -0
- package/.next/types/app/api/agents/versions/route.ts +347 -0
- package/.next/types/app/api/settings/default-agents/route.ts +347 -0
- package/.next/types/app/api/settings/default-surface-mode/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/{start-polling → cli-reference}/route.ts +3 -3
- package/.next/types/app/api/worktrees/[id]/verify/config/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.ts +347 -0
- package/.next/types/app/api/worktrees/apply-default-agents/route.ts +347 -0
- package/.next/types/routes.d.ts +9 -2
- package/.next/types/validator.ts +72 -9
- package/dist/cli/commands/agents.d.ts +35 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +212 -0
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +18 -0
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +111 -0
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +11 -0
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +30 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +6 -0
- package/dist/cli/types/api-responses.d.ts +58 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +8 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/preflight.d.ts.map +1 -1
- package/dist/cli/utils/preflight.js +6 -0
- package/dist/config/system-directories.d.ts +101 -0
- package/dist/config/system-directories.d.ts.map +1 -0
- package/dist/config/system-directories.js +211 -0
- package/dist/lib/cli-tools/types.d.ts +15 -1
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.d.ts +92 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -0
- package/dist/lib/detection/status-reason.js +94 -0
- package/dist/lib/updates/agent-updater.d.ts +247 -0
- package/dist/lib/updates/agent-updater.d.ts.map +1 -0
- package/dist/lib/updates/agent-updater.js +373 -0
- package/dist/lib/updates/agent-versions.d.ts +77 -0
- package/dist/lib/updates/agent-versions.d.ts.map +1 -0
- package/dist/lib/updates/agent-versions.js +138 -0
- package/dist/lib/updates/codex-version.d.ts +184 -0
- package/dist/lib/updates/codex-version.d.ts.map +1 -0
- package/dist/lib/updates/codex-version.js +215 -0
- package/dist/lib/verification/verify-config.d.ts +202 -0
- package/dist/lib/verification/verify-config.d.ts.map +1 -0
- package/dist/lib/verification/verify-config.js +429 -0
- package/dist/lib/verification/verify-draft.d.ts +182 -0
- package/dist/lib/verification/verify-draft.d.ts.map +1 -0
- package/dist/lib/verification/verify-draft.js +570 -0
- package/dist/server/server.js +58 -0
- package/dist/server/src/cli/types/api-responses.js +9 -0
- package/dist/server/src/config/cli-tool-timing-config.js +15 -1
- package/dist/server/src/config/codex-update-dialog-config.js +154 -0
- package/dist/server/src/config/default-agents.js +138 -0
- package/dist/server/src/lib/claude-output.js +1 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +36 -12
- package/dist/server/src/lib/cli-tools/base.js +131 -0
- package/dist/server/src/lib/cli-tools/codex.js +350 -100
- package/dist/server/src/lib/cli-tools/copilot.js +34 -10
- package/dist/server/src/lib/cli-tools/gemini.js +34 -10
- package/dist/server/src/lib/cli-tools/liveness-spec.js +214 -0
- package/dist/server/src/lib/cli-tools/opencode.js +72 -19
- package/dist/server/src/lib/cli-tools/session-liveness.js +64 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +30 -10
- package/dist/server/src/lib/db/app-settings-db.js +202 -0
- package/dist/server/src/lib/db/chat-db.js +120 -7
- package/dist/server/src/lib/db/worktree-db.js +178 -3
- package/dist/server/src/lib/detection/status-detector.js +3 -2
- package/dist/server/src/lib/detection/status-reason.js +17 -0
- package/dist/server/src/lib/detection/tool-liveness.js +233 -0
- package/dist/server/src/lib/detection/version-probes.js +290 -0
- package/dist/server/src/lib/env.js +122 -0
- package/dist/server/src/lib/git/worktrees.js +164 -0
- package/dist/server/src/lib/history/transcript-tail.js +80 -0
- package/dist/server/src/lib/history/user-turn-recorder.js +247 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +85 -1
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +519 -0
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +7 -0
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +407 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +654 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +518 -0
- package/dist/server/src/lib/hooks/sources/codex/history.js +576 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +448 -0
- package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +3 -0
- package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -0
- package/dist/server/src/lib/hooks/sources/opencode/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +10 -28
- package/dist/server/src/lib/hooks/sources/turn-body.js +118 -0
- package/dist/server/src/lib/polling/prompt-dedup.js +2 -4
- package/dist/server/src/lib/polling/response-checker.js +44 -3
- package/dist/server/src/lib/polling/response-dedup.js +2 -4
- package/dist/server/src/lib/polling/response-poller-core.js +191 -29
- package/dist/server/src/lib/polling/structured-history-gate.js +147 -16
- package/dist/server/src/lib/push/push-sender.js +21 -1
- package/dist/server/src/lib/push/waiting-push-notifier.js +126 -8
- package/dist/server/src/lib/realtime/publisher-registry.js +171 -0
- package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -1
- package/dist/server/src/lib/realtime/types.js +96 -1
- package/dist/server/src/lib/repo-config/agents-config.js +298 -0
- package/dist/server/src/lib/selected-agents-validator.js +93 -23
- package/dist/server/src/lib/session/claude-session.js +39 -108
- package/dist/server/src/lib/session/current-output-builder.js +263 -4
- package/dist/server/src/lib/session/send-user-message.js +90 -2
- package/dist/server/src/lib/tmux/tmux.js +29 -0
- package/dist/server/src/lib/tui-accumulator.js +2 -8
- package/dist/server/src/lib/updates/agent-updater.js +373 -0
- package/dist/server/src/lib/updates/agent-versions.js +138 -0
- package/dist/server/src/lib/updates/codex-version.js +215 -0
- package/dist/server/src/lib/updates/index.js +42 -0
- package/dist/server/src/lib/verification/gate-runner.js +298 -37
- package/dist/server/src/lib/verification/machine-lock.js +11 -0
- package/dist/server/src/lib/verification/run-verdict-vocabulary.js +151 -0
- package/dist/server/src/lib/verification/verify-config.js +33 -0
- package/dist/server/src/lib/ws-server.js +143 -6
- package/dist/server/src/types/agent-transcript.js +241 -5
- package/dist/server/src/types/sidebar.js +40 -9
- package/dist/server/src/types/ui-state.js +24 -1
- package/dist/types/cli-tool-contracts.d.ts +119 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -1
- package/package.json +1 -1
- package/public/sw.js +15 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +0 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +0 -1
- package/.next/server/chunks/1601.js +0 -7
- package/.next/server/chunks/1714.js +0 -7
- package/.next/server/chunks/221.js +0 -19
- package/.next/server/chunks/222.js +0 -1
- package/.next/server/chunks/2366.js +0 -1
- package/.next/server/chunks/2759.js +0 -8
- package/.next/server/chunks/3558.js +0 -1
- package/.next/server/chunks/4689.js +0 -25
- package/.next/server/chunks/5089.js +0 -1
- package/.next/server/chunks/6274.js +0 -14
- package/.next/server/chunks/9067.js +0 -1
- package/.next/server/chunks/9373.js +0 -9
- package/.next/server/chunks/9508.js +0 -1
- package/.next/static/Dvfs4ZThl5vBhJGP-ZQuJ/_buildManifest.js +0 -1
- package/.next/static/chunks/3361-aa1b6e7c1d7eeeb4.js +0 -1
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +0 -1
- package/.next/static/chunks/5229-580b581fce5aeb52.js +0 -1
- package/.next/static/chunks/6381-9a929249196a0e77.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/skills/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/templates/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/todos/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/more/page-03867ab635d197c7.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/review/page-9a6d18ddcccbb63c.js +0 -1
- package/.next/static/chunks/app/sessions/page-4d5382b257077c14.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-e3626364434d521b.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-817378dd7c580774.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-00ad5d9a62a71cab.js +0 -1
- package/.next/static/css/6266bde3bce465a2.css +0 -1
- /package/.next/static/{Dvfs4ZThl5vBhJGP-ZQuJ → 7K0XXFu_ty4wRSkl4X21E}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* app-settings-db: Key-value store for application settings.
|
|
4
|
+
*
|
|
5
|
+
* Provides typed helpers for reading/writing the app_settings table
|
|
6
|
+
* created in migration v27.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RECENT_BROWSE_PATHS_LIMIT = void 0;
|
|
10
|
+
exports.getSidebarGroupOrder = getSidebarGroupOrder;
|
|
11
|
+
exports.setSidebarGroupOrder = setSidebarGroupOrder;
|
|
12
|
+
exports.getRecentBrowsePaths = getRecentBrowsePaths;
|
|
13
|
+
exports.addRecentBrowsePath = addRecentBrowsePath;
|
|
14
|
+
exports.getDefaultSelectedAgents = getDefaultSelectedAgents;
|
|
15
|
+
exports.setDefaultSelectedAgents = setDefaultSelectedAgents;
|
|
16
|
+
exports.clearDefaultSelectedAgents = clearDefaultSelectedAgents;
|
|
17
|
+
exports.getDefaultSurfaceMode = getDefaultSurfaceMode;
|
|
18
|
+
exports.setDefaultSurfaceMode = setDefaultSurfaceMode;
|
|
19
|
+
const selected_agents_validator_1 = require("../../lib/selected-agents-validator");
|
|
20
|
+
const ui_state_1 = require("../../types/ui-state");
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Key constants
|
|
23
|
+
// ============================================================================
|
|
24
|
+
/** Storage key for sidebar repository group display order */
|
|
25
|
+
const KEY_SIDEBAR_GROUP_ORDER = 'sidebar_group_order';
|
|
26
|
+
/** Storage key for directories recently chosen in the repository picker */
|
|
27
|
+
const KEY_RECENT_BROWSE_PATHS = 'recent_browse_paths';
|
|
28
|
+
/**
|
|
29
|
+
* Storage key for the agent list new worktrees start with (Issue #2065).
|
|
30
|
+
*
|
|
31
|
+
* Server-wide, ordered, and `[0]` is the primary. Absent means "no preference";
|
|
32
|
+
* it is NOT written with the compiled-in default at install time, because a
|
|
33
|
+
* stored copy of the constant would silently pin every install to whatever the
|
|
34
|
+
* constant was on the day it was written.
|
|
35
|
+
*/
|
|
36
|
+
const KEY_DEFAULT_SELECTED_AGENTS = 'default_selected_agents';
|
|
37
|
+
/**
|
|
38
|
+
* Storage key for the output surface new sessions open in (Issue #2201).
|
|
39
|
+
*
|
|
40
|
+
* Server-wide, and stored as the bare mode string rather than JSON: it is a
|
|
41
|
+
* single enum value, and `readStringArray` exists for the two list-shaped
|
|
42
|
+
* settings above. Absent means "no preference" — exactly as for
|
|
43
|
+
* {@link KEY_DEFAULT_SELECTED_AGENTS}, the constant is never written into the
|
|
44
|
+
* row at install time, so a later change to `DEFAULT_SURFACE_MODE` still
|
|
45
|
+
* reaches an install that never chose.
|
|
46
|
+
*/
|
|
47
|
+
const KEY_DEFAULT_SURFACE_MODE = 'default_surface_mode';
|
|
48
|
+
/** How many recently used directories to remember (Issue #1517) */
|
|
49
|
+
exports.RECENT_BROWSE_PATHS_LIMIT = 5;
|
|
50
|
+
// ============================================================================
|
|
51
|
+
// Helpers
|
|
52
|
+
// ============================================================================
|
|
53
|
+
function readStringArray(db, key) {
|
|
54
|
+
try {
|
|
55
|
+
const row = db
|
|
56
|
+
.prepare('SELECT value FROM app_settings WHERE key = ?')
|
|
57
|
+
.get(key);
|
|
58
|
+
if (!row)
|
|
59
|
+
return null;
|
|
60
|
+
const parsed = JSON.parse(row.value);
|
|
61
|
+
if (!Array.isArray(parsed))
|
|
62
|
+
return null;
|
|
63
|
+
if (!parsed.every((v) => typeof v === 'string'))
|
|
64
|
+
return null;
|
|
65
|
+
return parsed;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function writeStringArray(db, key, values) {
|
|
72
|
+
const now = Date.now();
|
|
73
|
+
db.prepare(`
|
|
74
|
+
INSERT INTO app_settings (key, value, created_at, updated_at)
|
|
75
|
+
VALUES (?, ?, ?, ?)
|
|
76
|
+
ON CONFLICT(key) DO UPDATE SET
|
|
77
|
+
value = excluded.value,
|
|
78
|
+
updated_at = excluded.updated_at
|
|
79
|
+
`).run(key, JSON.stringify(values), now, now);
|
|
80
|
+
}
|
|
81
|
+
function readScalar(db, key) {
|
|
82
|
+
try {
|
|
83
|
+
const row = db
|
|
84
|
+
.prepare('SELECT value FROM app_settings WHERE key = ?')
|
|
85
|
+
.get(key);
|
|
86
|
+
return row ? row.value : null;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function writeScalar(db, key, value) {
|
|
93
|
+
const now = Date.now();
|
|
94
|
+
db.prepare(`
|
|
95
|
+
INSERT INTO app_settings (key, value, created_at, updated_at)
|
|
96
|
+
VALUES (?, ?, ?, ?)
|
|
97
|
+
ON CONFLICT(key) DO UPDATE SET
|
|
98
|
+
value = excluded.value,
|
|
99
|
+
updated_at = excluded.updated_at
|
|
100
|
+
`).run(key, value, now, now);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get the sidebar repository group order.
|
|
104
|
+
*
|
|
105
|
+
* @returns Array of repository names in display order, or null if not set.
|
|
106
|
+
*/
|
|
107
|
+
function getSidebarGroupOrder(db) {
|
|
108
|
+
return readStringArray(db, KEY_SIDEBAR_GROUP_ORDER);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Save the sidebar repository group order.
|
|
112
|
+
*
|
|
113
|
+
* @param order - Array of repository names in desired display order.
|
|
114
|
+
*/
|
|
115
|
+
function setSidebarGroupOrder(db, order) {
|
|
116
|
+
writeStringArray(db, KEY_SIDEBAR_GROUP_ORDER, order);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get directories recently chosen in the repository picker, newest first.
|
|
120
|
+
*
|
|
121
|
+
* Issue #1517: these are display hints only. Callers must still validate each
|
|
122
|
+
* path against the allowed roots, because the roots can shrink after a path
|
|
123
|
+
* was stored.
|
|
124
|
+
*/
|
|
125
|
+
function getRecentBrowsePaths(db) {
|
|
126
|
+
return readStringArray(db, KEY_RECENT_BROWSE_PATHS) ?? [];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Record a directory as most recently used, keeping the list de-duplicated and
|
|
130
|
+
* capped at RECENT_BROWSE_PATHS_LIMIT.
|
|
131
|
+
*/
|
|
132
|
+
function addRecentBrowsePath(db, browsePath) {
|
|
133
|
+
const existing = getRecentBrowsePaths(db).filter((p) => p !== browsePath);
|
|
134
|
+
const next = [browsePath, ...existing].slice(0, exports.RECENT_BROWSE_PATHS_LIMIT);
|
|
135
|
+
writeStringArray(db, KEY_RECENT_BROWSE_PATHS, next);
|
|
136
|
+
}
|
|
137
|
+
// ============================================================================
|
|
138
|
+
// Default selected agents (Issue #2065)
|
|
139
|
+
// ============================================================================
|
|
140
|
+
/**
|
|
141
|
+
* Get the server-wide default agent list for new worktrees.
|
|
142
|
+
*
|
|
143
|
+
* Validated on read with the same `validateAgentsPair()` the API writes through,
|
|
144
|
+
* so a row hand-edited to `["claude"]` or `["bogus","claude"]` reads as "unset"
|
|
145
|
+
* rather than propagating an invalid roster into every worktree. The caller then
|
|
146
|
+
* falls through to the next layer (see `resolveSelectedAgents()`).
|
|
147
|
+
*
|
|
148
|
+
* Cheap enough to call per request: one prepared point-query on a table with a
|
|
149
|
+
* handful of rows. It is deliberately NOT called per worktree row — `getWorktrees()`
|
|
150
|
+
* resolves it once and passes it down — and it never probes the filesystem, so
|
|
151
|
+
* this stays clear of the `isInstalled()` hot-path rule (Issue #1913).
|
|
152
|
+
*
|
|
153
|
+
* @returns Ordered agents (`[0]` is the primary), or null when unset/invalid.
|
|
154
|
+
*/
|
|
155
|
+
function getDefaultSelectedAgents(db) {
|
|
156
|
+
const raw = readStringArray(db, KEY_DEFAULT_SELECTED_AGENTS);
|
|
157
|
+
if (!raw)
|
|
158
|
+
return null;
|
|
159
|
+
const result = (0, selected_agents_validator_1.validateAgentsPair)(raw);
|
|
160
|
+
return result.valid ? result.value : null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Save the server-wide default agent list for new worktrees.
|
|
164
|
+
*
|
|
165
|
+
* @param agents - Ordered, already-validated agents; `agents[0]` becomes the primary.
|
|
166
|
+
*/
|
|
167
|
+
function setDefaultSelectedAgents(db, agents) {
|
|
168
|
+
writeStringArray(db, KEY_DEFAULT_SELECTED_AGENTS, agents);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Forget the server-wide default, returning the install to the compiled-in
|
|
172
|
+
* constant. Deletes the row rather than writing the constant into it, so a later
|
|
173
|
+
* change to `DEFAULT_SELECTED_AGENTS` still reaches an install that reset.
|
|
174
|
+
*/
|
|
175
|
+
function clearDefaultSelectedAgents(db) {
|
|
176
|
+
db.prepare('DELETE FROM app_settings WHERE key = ?').run(KEY_DEFAULT_SELECTED_AGENTS);
|
|
177
|
+
}
|
|
178
|
+
// ============================================================================
|
|
179
|
+
// Default surface mode (Issue #2201)
|
|
180
|
+
// ============================================================================
|
|
181
|
+
/**
|
|
182
|
+
* Get the server-wide output surface new sessions open in.
|
|
183
|
+
*
|
|
184
|
+
* Validated on read with `isSurfaceMode()` — the same guard the route writes
|
|
185
|
+
* through and the same guard the browser applies to localStorage — so a row
|
|
186
|
+
* hand-edited to `xterm` (Epic #2192 keeps that value reserved but unshipped)
|
|
187
|
+
* reads as "unset" rather than reaching a component that would switch on it.
|
|
188
|
+
*
|
|
189
|
+
* @returns The stored mode, or null when unset or unparseable.
|
|
190
|
+
*/
|
|
191
|
+
function getDefaultSurfaceMode(db) {
|
|
192
|
+
const raw = readScalar(db, KEY_DEFAULT_SURFACE_MODE);
|
|
193
|
+
return (0, ui_state_1.isSurfaceMode)(raw) ? raw : null;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Save the server-wide output surface new sessions open in.
|
|
197
|
+
*
|
|
198
|
+
* @param mode - Already-validated mode; callers must narrow with `isSurfaceMode()`.
|
|
199
|
+
*/
|
|
200
|
+
function setDefaultSurfaceMode(db, mode) {
|
|
201
|
+
writeScalar(db, KEY_DEFAULT_SURFACE_MODE, mode);
|
|
202
|
+
}
|
|
@@ -6,13 +6,15 @@
|
|
|
6
6
|
* Issue #479: Extracted from db.ts for single-responsibility separation
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.ACTIVE_FILTER = void 0;
|
|
9
|
+
exports.UNKEYED_USER_MESSAGE_LIMIT = exports.ACTIVE_FILTER = void 0;
|
|
10
10
|
exports.getLastAssistantMessageAt = getLastAssistantMessageAt;
|
|
11
11
|
exports.createMessage = createMessage;
|
|
12
12
|
exports.updateMessageContent = updateMessageContent;
|
|
13
13
|
exports.getMessages = getMessages;
|
|
14
14
|
exports.getLastUserMessage = getLastUserMessage;
|
|
15
15
|
exports.findMessageByRequestId = findMessageByRequestId;
|
|
16
|
+
exports.findUnkeyedUserMessages = findUnkeyedUserMessages;
|
|
17
|
+
exports.setMessageRequestId = setMessageRequestId;
|
|
16
18
|
exports.getLastMessage = getLastMessage;
|
|
17
19
|
exports.deleteAllMessages = deleteAllMessages;
|
|
18
20
|
exports.deleteMessageById = deleteMessageById;
|
|
@@ -125,7 +127,7 @@ function updateMessageContent(db, messageId, content, options) {
|
|
|
125
127
|
* Get messages for a worktree, optionally filtered by CLI tool
|
|
126
128
|
*/
|
|
127
129
|
function getMessages(db, worktreeId, options = {}) {
|
|
128
|
-
const { before, limit = 50, cliToolId, instanceId, includeArchived = false, messageType, limitUnit = 'messages' } = options;
|
|
130
|
+
const { before, limit = 50, cliToolId, instanceId, includeArchived = false, messageType, limitUnit = 'messages', matchResolvedInstance = false } = options;
|
|
129
131
|
// Build the shared scope clause (worktree + before cursor + archived + instance/cli
|
|
130
132
|
// filter) and its bound params. Used for both the message-unit and pair-unit paths
|
|
131
133
|
// so their filtering stays identical.
|
|
@@ -138,7 +140,19 @@ function getMessages(db, worktreeId, options = {}) {
|
|
|
138
140
|
clause += ` ${exports.ACTIVE_FILTER}`;
|
|
139
141
|
}
|
|
140
142
|
// Issue #868: instance filter takes precedence; otherwise fall back to CLI tool filter.
|
|
141
|
-
|
|
143
|
+
// Issue #2219: `matchResolvedInstance` reads both columns through the same
|
|
144
|
+
// COALESCE defaults `mapChatMessage` applies, so pre-#868 rows
|
|
145
|
+
// (`instance_id IS NULL`) count as the primary instance instead of
|
|
146
|
+
// vanishing. See the option's doc comment for why the tool filter joins in.
|
|
147
|
+
if (instanceId && matchResolvedInstance) {
|
|
148
|
+
if (cliToolId) {
|
|
149
|
+
clause += ` AND COALESCE(cli_tool_id, 'claude') = ?`;
|
|
150
|
+
params.push(cliToolId);
|
|
151
|
+
}
|
|
152
|
+
clause += ` AND COALESCE(instance_id, cli_tool_id, 'claude') = ?`;
|
|
153
|
+
params.push(instanceId);
|
|
154
|
+
}
|
|
155
|
+
else if (instanceId) {
|
|
142
156
|
clause += ` AND instance_id = ?`;
|
|
143
157
|
params.push(instanceId);
|
|
144
158
|
}
|
|
@@ -229,6 +243,80 @@ function findMessageByRequestId(db, worktreeId, requestId) {
|
|
|
229
243
|
const row = stmt.get(worktreeId, requestId);
|
|
230
244
|
return row ? mapChatMessage(row) : null;
|
|
231
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* How many candidate rows {@link findUnkeyedUserMessages} returns.
|
|
248
|
+
*
|
|
249
|
+
* The caller compares content in JavaScript, so this bounds the work rather than
|
|
250
|
+
* the correctness. Twenty is far above the number of user rows one instance can
|
|
251
|
+
* accumulate inside the caller's few-minute window and still small enough that
|
|
252
|
+
* the query is never the expensive part of a poll.
|
|
253
|
+
*/
|
|
254
|
+
exports.UNKEYED_USER_MESSAGE_LIMIT = 20;
|
|
255
|
+
/**
|
|
256
|
+
* User rows for one instance that no producer has claimed yet (Issue #2196).
|
|
257
|
+
*
|
|
258
|
+
* The lookup behind "the operator's input is already in History — `/send` put it
|
|
259
|
+
* there". A row qualifies when it is this instance's, is a `user` row, sits in
|
|
260
|
+
* the caller's time window, and has **no `request_id`**: that last condition is
|
|
261
|
+
* what makes the query safe to answer a *claim* with, because a row that already
|
|
262
|
+
* carries a key belongs to whoever wrote it and must not be re-pointed at
|
|
263
|
+
* another turn.
|
|
264
|
+
*
|
|
265
|
+
* Content is deliberately not compared here. "The same text" is a normalisation
|
|
266
|
+
* question (trailing whitespace, `\r\n`, a composer that reflowed the body), and
|
|
267
|
+
* SQL is the wrong place to decide it — see `normalizeUserTurnContent` in
|
|
268
|
+
* `lib/history/user-turn-recorder`, which owns that rule and is the only thing
|
|
269
|
+
* that has to change when the rule does.
|
|
270
|
+
*
|
|
271
|
+
* `COALESCE` on both tool columns is not defensive noise: rows written before
|
|
272
|
+
* Issue #868 carry `instance_id IS NULL`, and `mapChatMessage` reads those as
|
|
273
|
+
* the primary instance. A bare `instance_id = ?` would make those rows
|
|
274
|
+
* invisible here while the UI still shows them, so the operator would see their
|
|
275
|
+
* `/send` row *and* a second row this Issue inserted.
|
|
276
|
+
*
|
|
277
|
+
* `ACTIVE_FILTER` applies: an archived row has been cleared out of History, and
|
|
278
|
+
* adopting one would key a turn to a row nobody can see.
|
|
279
|
+
*
|
|
280
|
+
* @returns Candidate rows, newest first
|
|
281
|
+
*/
|
|
282
|
+
function findUnkeyedUserMessages(db, query) {
|
|
283
|
+
const stmt = db.prepare(`
|
|
284
|
+
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id, instance_id, archived
|
|
285
|
+
FROM chat_messages
|
|
286
|
+
WHERE worktree_id = ?
|
|
287
|
+
AND role = 'user'
|
|
288
|
+
AND request_id IS NULL
|
|
289
|
+
AND COALESCE(cli_tool_id, 'claude') = ?
|
|
290
|
+
AND COALESCE(instance_id, cli_tool_id, 'claude') = ?
|
|
291
|
+
AND timestamp >= ? AND timestamp <= ?
|
|
292
|
+
${exports.ACTIVE_FILTER}
|
|
293
|
+
ORDER BY timestamp DESC
|
|
294
|
+
LIMIT ?
|
|
295
|
+
`);
|
|
296
|
+
const rows = stmt.all(query.worktreeId, query.cliToolId, query.instanceId, query.fromMs, query.toMs, query.limit ?? exports.UNKEYED_USER_MESSAGE_LIMIT);
|
|
297
|
+
return rows.map(mapChatMessage);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Claim an unkeyed row for a producer, without touching anything else on it
|
|
301
|
+
* (Issue #2196).
|
|
302
|
+
*
|
|
303
|
+
* A compare-and-set and not an `UPDATE … WHERE id = ?`: the `request_id IS NULL`
|
|
304
|
+
* in the predicate is what makes two pollers racing on the same row safe, since
|
|
305
|
+
* the loser changes nothing and is told so. {@link updateMessageContent} could
|
|
306
|
+
* set the column too, but it also rewrites `content`, and rewriting the
|
|
307
|
+
* operator's own words as a side effect of keying their row is exactly the
|
|
308
|
+
* failure this Issue is trying not to introduce.
|
|
309
|
+
*
|
|
310
|
+
* @returns Whether this call is the one that claimed the row
|
|
311
|
+
*/
|
|
312
|
+
function setMessageRequestId(db, messageId, requestId) {
|
|
313
|
+
const stmt = db.prepare(`
|
|
314
|
+
UPDATE chat_messages
|
|
315
|
+
SET request_id = ?
|
|
316
|
+
WHERE id = ? AND request_id IS NULL
|
|
317
|
+
`);
|
|
318
|
+
return stmt.run(requestId, messageId).changes > 0;
|
|
319
|
+
}
|
|
232
320
|
/**
|
|
233
321
|
* Fetch the most recent message for a worktree (any role).
|
|
234
322
|
* Used to determine if waiting for Claude's response.
|
|
@@ -431,14 +519,27 @@ function updatePromptData(db, messageId, promptData) {
|
|
|
431
519
|
* Mark all pending prompts as answered for a worktree/CLI tool
|
|
432
520
|
* This is called when we detect Claude has started processing (new response detected)
|
|
433
521
|
* which means any pending prompts must have been answered via terminal
|
|
522
|
+
*
|
|
523
|
+
* @param onUpdated - Issue #2195. Invoked once per row that was actually
|
|
524
|
+
* stamped, with the row as it now reads. This sweep is the one prompt-status
|
|
525
|
+
* writer that produced no realtime frame, so a prompt card stayed "pending"
|
|
526
|
+
* in every open pane until the next history poll — up to 15s once #2195
|
|
527
|
+
* demoted that poll to a fallback. The caller supplies the broadcast rather
|
|
528
|
+
* than this module reaching for `ws-server`: the DB layer has no business
|
|
529
|
+
* importing the socket, and the two sweep callers that are *not* a poller
|
|
530
|
+
* (the worktree list/detail routes) have no room to broadcast into anyway.
|
|
531
|
+
* Throwing from the callback is the caller's problem; it is not caught here.
|
|
434
532
|
*/
|
|
435
|
-
function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
|
|
533
|
+
function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId, onUpdated) {
|
|
436
534
|
// Find all pending prompt messages for this worktree/CLI tool.
|
|
437
535
|
// Issue #868: When instanceId is provided, scope to that instance only;
|
|
438
536
|
// otherwise fall back to the legacy cli_tool_id scoping.
|
|
439
537
|
const resolvedInstanceId = instanceId ?? cliToolId;
|
|
538
|
+
// Issue #2195: the full column set, not just (id, prompt_data) — `onUpdated`
|
|
539
|
+
// publishes a `ChatMessage`, and re-reading each row afterwards would be a
|
|
540
|
+
// second query per prompt for data this statement already has to visit.
|
|
440
541
|
const selectStmt = db.prepare(`
|
|
441
|
-
SELECT id, prompt_data
|
|
542
|
+
SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id, instance_id, archived
|
|
442
543
|
FROM chat_messages
|
|
443
544
|
WHERE worktree_id = ?
|
|
444
545
|
AND instance_id = ?
|
|
@@ -458,9 +559,12 @@ function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
|
|
|
458
559
|
WHERE id = ?
|
|
459
560
|
`);
|
|
460
561
|
let updatedCount = 0;
|
|
562
|
+
const updated = [];
|
|
461
563
|
for (const row of rows) {
|
|
462
564
|
try {
|
|
463
|
-
const promptData = JSON.parse(row.prompt_data);
|
|
565
|
+
const promptData = JSON.parse(row.prompt_data ?? 'null');
|
|
566
|
+
if (!promptData || typeof promptData !== 'object')
|
|
567
|
+
continue;
|
|
464
568
|
promptData.status = 'answered';
|
|
465
569
|
promptData.answer = '(answered via terminal)';
|
|
466
570
|
promptData.answeredAt = new Date().toISOString();
|
|
@@ -468,13 +572,22 @@ function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
|
|
|
468
572
|
// prompts nothing else claimed, so all that is known is that the agent
|
|
469
573
|
// moved on — i.e. someone acted in the terminal.
|
|
470
574
|
promptData.answeredBy = 'terminal';
|
|
471
|
-
|
|
575
|
+
const serialized = JSON.stringify(promptData);
|
|
576
|
+
updateStmt.run(serialized, row.id);
|
|
472
577
|
updatedCount++;
|
|
578
|
+
if (onUpdated) {
|
|
579
|
+
updated.push(mapChatMessage({ ...row, prompt_data: serialized }));
|
|
580
|
+
}
|
|
473
581
|
}
|
|
474
582
|
catch {
|
|
475
583
|
// Skip if prompt_data is invalid JSON
|
|
476
584
|
}
|
|
477
585
|
}
|
|
586
|
+
// Published after every write lands, so a listener that reacts by reading the
|
|
587
|
+
// table back cannot observe a half-swept instance.
|
|
588
|
+
for (const message of updated) {
|
|
589
|
+
onUpdated?.(message);
|
|
590
|
+
}
|
|
478
591
|
return updatedCount;
|
|
479
592
|
}
|
|
480
593
|
/**
|
|
@@ -18,6 +18,8 @@ exports.updateFavorite = updateFavorite;
|
|
|
18
18
|
exports.updateStatus = updateStatus;
|
|
19
19
|
exports.updateCliToolId = updateCliToolId;
|
|
20
20
|
exports.updateSelectedAgents = updateSelectedAgents;
|
|
21
|
+
exports.findUnchangedAgentWorktrees = findUnchangedAgentWorktrees;
|
|
22
|
+
exports.applySelectedAgentsToUnchanged = applySelectedAgentsToUnchanged;
|
|
21
23
|
exports.updateVibeLocalModel = updateVibeLocalModel;
|
|
22
24
|
exports.updateVibeLocalContextWindow = updateVibeLocalContextWindow;
|
|
23
25
|
exports.saveInitialBranch = saveInitialBranch;
|
|
@@ -29,6 +31,8 @@ exports.getWorktreesByRepository = getWorktreesByRepository;
|
|
|
29
31
|
exports.deleteRepositoryWorktrees = deleteRepositoryWorktrees;
|
|
30
32
|
exports.deleteWorktreesByIds = deleteWorktreesByIds;
|
|
31
33
|
const selected_agents_validator_1 = require("../../lib/selected-agents-validator");
|
|
34
|
+
const agents_config_1 = require("../../lib/repo-config/agents-config");
|
|
35
|
+
const app_settings_db_1 = require("./app-settings-db");
|
|
32
36
|
const chat_db_1 = require("./chat-db");
|
|
33
37
|
const worktree_id_rename_1 = require("./migrations/worktree-id-rename");
|
|
34
38
|
/**
|
|
@@ -82,6 +86,38 @@ function getLastMessagesByCliBatch(db, worktreeIds) {
|
|
|
82
86
|
}
|
|
83
87
|
return result;
|
|
84
88
|
}
|
|
89
|
+
/** Shared empty set, so the common "no repository declares anything" path allocates nothing. */
|
|
90
|
+
const EMPTY_ID_SET = new Set();
|
|
91
|
+
/**
|
|
92
|
+
* IDs of every worktree that already owns an `agent_instances` roster.
|
|
93
|
+
*
|
|
94
|
+
* One query for the whole list rather than one per row (Issue #2066): the
|
|
95
|
+
* sidebar poll must not grow N point queries. `agent_instances` holds a handful
|
|
96
|
+
* of rows per registered worktree, and only the distinct worktree ids are read.
|
|
97
|
+
*/
|
|
98
|
+
function worktreeIdsWithAgentInstances(db) {
|
|
99
|
+
const rows = db
|
|
100
|
+
.prepare('SELECT DISTINCT worktree_id FROM agent_instances')
|
|
101
|
+
.all();
|
|
102
|
+
return new Set(rows.map((row) => row.worktree_id));
|
|
103
|
+
}
|
|
104
|
+
/** Whether one worktree already owns an `agent_instances` roster (Issue #2066). */
|
|
105
|
+
function hasAgentInstances(db, worktreeId) {
|
|
106
|
+
return (db.prepare('SELECT 1 FROM agent_instances WHERE worktree_id = ? LIMIT 1').get(worktreeId) !==
|
|
107
|
+
undefined);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The repository layer for ONE worktree, withheld when that worktree already
|
|
111
|
+
* owns a roster (Issue #2066). The single-row twin of the batch logic in
|
|
112
|
+
* `getWorktrees()`; see the long comment there for why the withholding exists
|
|
113
|
+
* and why it is narrowed to this layer.
|
|
114
|
+
*/
|
|
115
|
+
function repoDefaultWithheldFromRoster(db, worktreeId, repositoryPath) {
|
|
116
|
+
const declared = (0, agents_config_1.getRepoDefaultSelectedAgents)(repositoryPath);
|
|
117
|
+
if (declared === null)
|
|
118
|
+
return null;
|
|
119
|
+
return hasAgentInstances(db, worktreeId) ? null : declared;
|
|
120
|
+
}
|
|
85
121
|
/**
|
|
86
122
|
* Get all worktrees sorted by updated_at (desc)
|
|
87
123
|
* Optionally filter by repository path
|
|
@@ -111,6 +147,52 @@ function getWorktrees(db, repositoryPath) {
|
|
|
111
147
|
// Batch fetch last messages for all worktrees (N+1 optimization)
|
|
112
148
|
const worktreeIds = rows.map(row => row.id);
|
|
113
149
|
const lastMessagesByCliMap = getLastMessagesByCliBatch(db, worktreeIds);
|
|
150
|
+
// Issue #2065: read the server-wide default ONCE. `upsertWorktree` never
|
|
151
|
+
// writes `selected_agents`, so on a scan/sync-populated install every row
|
|
152
|
+
// below takes the fallback path — resolving it per row would turn one point
|
|
153
|
+
// query into one per worktree on the sidebar's poll.
|
|
154
|
+
const appSettingsDefault = (0, app_settings_db_1.getDefaultSelectedAgents)(db);
|
|
155
|
+
// Issue #2066: the repository layer, resolved ONCE per distinct
|
|
156
|
+
// `repository_path` rather than per row. `getRepoDefaultSelectedAgents()` is
|
|
157
|
+
// itself served from a process-wide cache filled at sync — see its module
|
|
158
|
+
// header for why the read does not belong on this (polled) path.
|
|
159
|
+
const repoDefaults = new Map();
|
|
160
|
+
for (const repositoryPath of new Set(rows.map((row) => row.repository_path))) {
|
|
161
|
+
if (!repositoryPath)
|
|
162
|
+
continue;
|
|
163
|
+
repoDefaults.set(repositoryPath, (0, agents_config_1.getRepoDefaultSelectedAgents)(repositoryPath));
|
|
164
|
+
}
|
|
165
|
+
// Issue #2066: a worktree that ALREADY has an `agent_instances` roster is not
|
|
166
|
+
// offered the repository declaration.
|
|
167
|
+
//
|
|
168
|
+
// `resolveAgentInstances()` protects the roster itself with an early return,
|
|
169
|
+
// but `selectedAgents` is a SECOND channel: `/sessions` and the Review tab
|
|
170
|
+
// render `wt.selectedAgents ?? clientDefault` and never look at
|
|
171
|
+
// `agentInstances`. Without this, committing an `agents.yaml` would repaint
|
|
172
|
+
// the chips of a branch whose tabs it cannot and must not change — and the
|
|
173
|
+
// running agent would drop out of "active agents" because it is not in the
|
|
174
|
+
// declared list. `PATCH /api/worktrees/[id]` writes `agentInstances` and
|
|
175
|
+
// `selectedAgents` from independent branches, so "has a roster, column still
|
|
176
|
+
// NULL" is a state the product produces routinely, not an edge case.
|
|
177
|
+
//
|
|
178
|
+
// Deliberately narrowed to the repository layer. The `app_settings` layer has
|
|
179
|
+
// the same shape (#2065) and the same gap, but changing it is a change to
|
|
180
|
+
// #2065's behaviour; what #2066 has to answer for is that it widened the gap
|
|
181
|
+
// from "an admin who can reach server settings" to "anyone who can commit to
|
|
182
|
+
// the repository". See docs/design/repo-agents-config.md §2.
|
|
183
|
+
//
|
|
184
|
+
// The roster query runs only when some repository actually declares
|
|
185
|
+
// something, so an install with no `agents.yaml` anywhere issues exactly the
|
|
186
|
+
// queries it issued before this Issue.
|
|
187
|
+
const anyRepoDeclares = [...repoDefaults.values()].some((value) => value !== null);
|
|
188
|
+
const withRoster = anyRepoDeclares ? worktreeIdsWithAgentInstances(db) : EMPTY_ID_SET;
|
|
189
|
+
const repoDefaultFor = (row) => {
|
|
190
|
+
if (!row.repository_path)
|
|
191
|
+
return null;
|
|
192
|
+
if (withRoster.has(row.id))
|
|
193
|
+
return null;
|
|
194
|
+
return repoDefaults.get(row.repository_path) ?? null;
|
|
195
|
+
};
|
|
114
196
|
return rows.map((row) => {
|
|
115
197
|
const lastMessagesByCli = lastMessagesByCliMap.get(row.id) || {};
|
|
116
198
|
return {
|
|
@@ -133,7 +215,7 @@ function getWorktrees(db, repositoryPath) {
|
|
|
133
215
|
status: row.status || null,
|
|
134
216
|
link: row.link || undefined,
|
|
135
217
|
cliToolId: row.cli_tool_id ?? 'claude',
|
|
136
|
-
selectedAgents: (0, selected_agents_validator_1.parseSelectedAgents)(row.selected_agents),
|
|
218
|
+
selectedAgents: (0, selected_agents_validator_1.parseSelectedAgents)(row.selected_agents, appSettingsDefault, repoDefaultFor(row)),
|
|
137
219
|
vibeLocalModel: row.vibe_local_model ?? null,
|
|
138
220
|
vibeLocalContextWindow: row.vibe_local_context_window ?? null,
|
|
139
221
|
};
|
|
@@ -216,7 +298,10 @@ function getWorktreeById(db, id) {
|
|
|
216
298
|
status: row.status || null,
|
|
217
299
|
link: row.link || undefined,
|
|
218
300
|
cliToolId: row.cli_tool_id ?? 'claude',
|
|
219
|
-
|
|
301
|
+
// Issue #2066: same layers, and the same withholding, as getWorktrees().
|
|
302
|
+
// The roster probe runs only when this repository actually declares
|
|
303
|
+
// something, so a tree with no `agents.yaml` issues no extra query.
|
|
304
|
+
selectedAgents: (0, selected_agents_validator_1.parseSelectedAgents)(row.selected_agents, (0, app_settings_db_1.getDefaultSelectedAgents)(db), repoDefaultWithheldFromRoster(db, row.id, row.repository_path)),
|
|
220
305
|
vibeLocalModel: row.vibe_local_model ?? null,
|
|
221
306
|
vibeLocalContextWindow: row.vibe_local_context_window ?? null,
|
|
222
307
|
};
|
|
@@ -359,7 +444,7 @@ function updateCliToolId(db, id, cliToolId) {
|
|
|
359
444
|
*
|
|
360
445
|
* @param db - Database instance
|
|
361
446
|
* @param id - Worktree ID
|
|
362
|
-
* @param selectedAgents - Array of 2-
|
|
447
|
+
* @param selectedAgents - Array of 2-6 CLIToolType values (MIN/MAX_SELECTED_AGENTS)
|
|
363
448
|
*/
|
|
364
449
|
function updateSelectedAgents(db, id, selectedAgents) {
|
|
365
450
|
const stmt = db.prepare(`
|
|
@@ -369,6 +454,96 @@ function updateSelectedAgents(db, id, selectedAgents) {
|
|
|
369
454
|
`);
|
|
370
455
|
stmt.run(JSON.stringify(selectedAgents), id);
|
|
371
456
|
}
|
|
457
|
+
/**
|
|
458
|
+
* The worktrees of ONE repository whose agent list is still UNCHANGED by its
|
|
459
|
+
* user (Issue #2067).
|
|
460
|
+
*
|
|
461
|
+
* ## The repository argument is not optional, and that is the point
|
|
462
|
+
*
|
|
463
|
+
* The action this serves lives in the agent pane of ONE worktree, so its blast
|
|
464
|
+
* radius has to be the repository that worktree belongs to. An earlier revision
|
|
465
|
+
* of this function took no repository and scanned `worktrees` whole: pressing
|
|
466
|
+
* "apply to unchanged branches" from a worktree of repository B rewrote the
|
|
467
|
+
* unchanged worktrees of repository A as well. Requiring the argument is what
|
|
468
|
+
* makes that impossible to reintroduce by omission.
|
|
469
|
+
*
|
|
470
|
+
* ## "Unchanged"
|
|
471
|
+
*
|
|
472
|
+
* `selected_agents IS NULL` **and** no `agent_instances` row — deliberately the
|
|
473
|
+
* same two facts #2066 checks before it lets a repository declaration reach a
|
|
474
|
+
* worktree, checked with the same helper (`worktreeIdsWithAgentInstances`)
|
|
475
|
+
* rather than a second query that says the same thing. The two channels are
|
|
476
|
+
* independent: `PATCH /api/worktrees/[id]` writes `agentInstances` and
|
|
477
|
+
* `selectedAgents` from separate branches, so "has a roster, column still NULL"
|
|
478
|
+
* and "column set, no roster" are both states the product produces routinely,
|
|
479
|
+
* and a worktree in EITHER of them has been touched by a human.
|
|
480
|
+
*
|
|
481
|
+
* ## Why a declaring repository yields nothing
|
|
482
|
+
*
|
|
483
|
+
* `SELECTED_AGENTS_LAYERS` puts the `worktree` column ABOVE the repository file,
|
|
484
|
+
* so writing `selected_agents` onto a worktree of a repository that ships
|
|
485
|
+
* `.commandmate/agents.yaml` does not merely win once — it retires the
|
|
486
|
+
* declaration for that branch permanently, and editing the file afterwards has
|
|
487
|
+
* no effect and no explanation. A committed declaration is a more deliberate
|
|
488
|
+
* answer to "which agents does this branch open with" than a button press in one
|
|
489
|
+
* branch's settings pane, so the declaration wins and the caller is told why
|
|
490
|
+
* (`repoDeclares`) instead of being handed a count of zero it cannot explain.
|
|
491
|
+
*
|
|
492
|
+
* @param db - Database instance
|
|
493
|
+
* @param repositoryPath - The repository to scope to (`worktrees.repository_path`)
|
|
494
|
+
* @returns The scope, whether the repository declares, and the eligible IDs
|
|
495
|
+
*/
|
|
496
|
+
function findUnchangedAgentWorktrees(db, repositoryPath) {
|
|
497
|
+
// Served from #2066's process-wide cache; see `agents-config.ts` for why this
|
|
498
|
+
// is not a filesystem probe on a hot path.
|
|
499
|
+
const repoDeclares = (0, agents_config_1.getRepoDefaultSelectedAgents)(repositoryPath) !== null;
|
|
500
|
+
if (repoDeclares) {
|
|
501
|
+
return { repositoryPath, repoDeclares, ids: [] };
|
|
502
|
+
}
|
|
503
|
+
const withRoster = worktreeIdsWithAgentInstances(db);
|
|
504
|
+
const rows = db
|
|
505
|
+
.prepare('SELECT id FROM worktrees WHERE repository_path = ? AND selected_agents IS NULL ORDER BY id ASC')
|
|
506
|
+
.all(repositoryPath);
|
|
507
|
+
return {
|
|
508
|
+
repositoryPath,
|
|
509
|
+
repoDeclares,
|
|
510
|
+
ids: rows.map((row) => row.id).filter((id) => !withRoster.has(id)),
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Write `selectedAgents` onto every worktree {@link findUnchangedAgentWorktrees}
|
|
515
|
+
* reports for `repositoryPath`, in ONE transaction (Issue #2067).
|
|
516
|
+
*
|
|
517
|
+
* The eligible set is recomputed INSIDE the transaction rather than taken as an
|
|
518
|
+
* argument: the UI shows a count before it asks for confirmation, and the number
|
|
519
|
+
* it shows has to be the number of rows this actually writes. Passing the ids in
|
|
520
|
+
* would make the caller's snapshot authoritative and turn a worktree created
|
|
521
|
+
* between the count and the confirmation into a silent miss.
|
|
522
|
+
*
|
|
523
|
+
* The transaction is not decoration. Without it, a write that fails partway —
|
|
524
|
+
* a locked database, a constraint, a trigger — leaves a repository split between
|
|
525
|
+
* branches that took the new order and branches that did not, with nothing on
|
|
526
|
+
* screen saying which. `tests/unit/db/apply-default-agents-2067.test.ts` pins
|
|
527
|
+
* this by aborting a middle row and asserting the earlier ones rolled back.
|
|
528
|
+
*
|
|
529
|
+
* Rows are written through `updateSelectedAgents()` so the column's one writer
|
|
530
|
+
* stays its one writer.
|
|
531
|
+
*
|
|
532
|
+
* @param db - Database instance
|
|
533
|
+
* @param repositoryPath - The repository to scope to; never server-wide
|
|
534
|
+
* @param selectedAgents - Ordered, already-validated agents; `[0]` is the primary
|
|
535
|
+
* @returns The IDs that were written, in the order they were written
|
|
536
|
+
*/
|
|
537
|
+
function applySelectedAgentsToUnchanged(db, repositoryPath, selectedAgents) {
|
|
538
|
+
const apply = db.transaction(() => {
|
|
539
|
+
const { ids } = findUnchangedAgentWorktrees(db, repositoryPath);
|
|
540
|
+
for (const id of ids) {
|
|
541
|
+
updateSelectedAgents(db, id, selectedAgents);
|
|
542
|
+
}
|
|
543
|
+
return ids;
|
|
544
|
+
});
|
|
545
|
+
return apply();
|
|
546
|
+
}
|
|
372
547
|
/**
|
|
373
548
|
* Update vibe_local_model for a worktree
|
|
374
549
|
* Issue #368: Persists the user's Ollama model selection for vibe-local
|
|
@@ -72,8 +72,9 @@ exports.SELECTION_LIST_REASONS = new Set([
|
|
|
72
72
|
* one: branch A of the opencode block answers `opencode_processing_indicator`
|
|
73
73
|
* for the footer that reads `esc interrupt`, which is opencode's ONLY signal
|
|
74
74
|
* while it is between the submitted prompt and the first transcript row. A
|
|
75
|
-
* scraper-only session (no hooks) therefore showed no thinking indicator
|
|
76
|
-
*
|
|
75
|
+
* scraper-only session (no hooks) therefore showed no thinking indicator on the
|
|
76
|
+
* chat surface for exactly the stretch where one is wanted. The consumer is
|
|
77
|
+
* `ChatSurface`, which reads this through `current-output`'s `thinking` flag.
|
|
77
78
|
*
|
|
78
79
|
* `DEFAULT` is deliberately absent: it is the "output changed recently" fallback
|
|
79
80
|
* and says nothing about the agent having announced itself, so promoting it
|
|
@@ -56,6 +56,23 @@ exports.STATUS_REASON = {
|
|
|
56
56
|
OPENCODE_RESPONSE_COMPLETE: 'opencode_response_complete',
|
|
57
57
|
INPUT_PROMPT: 'input_prompt',
|
|
58
58
|
NO_RECENT_OUTPUT: 'no_recent_output',
|
|
59
|
+
/**
|
|
60
|
+
* Issue #2070: the tmux session is there, and the TOOL is not.
|
|
61
|
+
*
|
|
62
|
+
* Published by `worktree-status-helper` when the liveness probe reads a bare
|
|
63
|
+
* shell prompt at the bottom of a pane whose agent quit, updated itself or
|
|
64
|
+
* crashed (`judgeToolLiveness`). It is the ONE reason on this list that
|
|
65
|
+
* accompanies `isRunning: false` — every other one describes a frame a live
|
|
66
|
+
* agent drew — which is exactly why it is worth a token of its own: without
|
|
67
|
+
* it the sidebar and `commandmate ls` render such a session as plain `idle`,
|
|
68
|
+
* indistinguishable from one that was never started, and the operator has no
|
|
69
|
+
* way to tell "start it" from "it died under you".
|
|
70
|
+
*
|
|
71
|
+
* ADDITIVE, in the strict sense: no existing reason's value or meaning
|
|
72
|
+
* changes, and no surface that does not know the token behaves differently —
|
|
73
|
+
* a reader that does not recognise it sees the same `idle` it saw before.
|
|
74
|
+
*/
|
|
75
|
+
EXITED: 'exited',
|
|
59
76
|
/**
|
|
60
77
|
* A tool's own detector looked at this frame and recognised nothing
|
|
61
78
|
* (Issue #1927, §6.1).
|