commandmate 0.19.0 → 0.21.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 +259 -238
- package/.next/app-path-routes-manifest.json +28 -26
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +18 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +5 -3
- package/.next/server/app/api/app/update/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +1 -1
- 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.js +1 -1
- package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route.js +1 -1
- package/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route.js +1 -1
- package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +2 -2
- package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +2 -2
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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.js +1 -1
- package/.next/server/app/api/ollama/models/route.js.nft.json +1 -1
- package/.next/server/app/api/ollama/models/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 +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js +2 -2
- 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 +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +3 -3
- 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 +2 -2
- 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 +2 -2
- 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]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +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 +6 -6
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +4 -4
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/apple-icon.png/route.js +1 -1
- package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/icon.png/route.js +1 -1
- package/.next/server/app/icon.png/route.js.nft.json +1 -1
- package/.next/server/app/icon1.png/route.js +1 -1
- package/.next/server/app/icon1.png/route.js.nft.json +1 -1
- package/.next/server/app/icon2.png/route.js +1 -1
- package/.next/server/app/icon2.png/route.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_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 +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +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_client-reference-manifest.js +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 +8 -8
- 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 +28 -26
- package/.next/server/chunks/1029.js +1 -0
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1503.js +1 -1
- package/.next/server/chunks/1598.js +4 -0
- package/.next/server/chunks/22.js +1 -1
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2546.js +1 -0
- package/.next/server/chunks/2710.js +2 -2
- package/.next/server/chunks/28.js +2 -2
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3451.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/365.js +1 -0
- package/.next/server/chunks/3736.js +1 -1
- package/.next/server/chunks/3753.js +33 -20
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/406.js +5 -5
- package/.next/server/chunks/4444.js +1 -1
- package/.next/server/chunks/{1185.js → 5048.js} +1 -1
- package/.next/server/chunks/5064.js +1 -1
- package/.next/server/chunks/5737.js +1 -1
- package/.next/server/chunks/5959.js +10 -3
- package/.next/server/chunks/{5381.js → 5998.js} +2 -2
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +5 -5
- package/.next/server/chunks/6283.js +1 -1
- package/.next/server/chunks/6401.js +1 -0
- package/.next/server/chunks/641.js +1 -0
- package/.next/server/chunks/848.js +1 -0
- package/.next/server/chunks/8536.js +1 -0
- package/.next/server/chunks/8543.js +1 -0
- package/.next/server/chunks/8584.js +1 -1
- package/.next/server/chunks/8807.js +157 -143
- package/.next/server/chunks/8856.js +2 -2
- package/.next/server/chunks/9058.js +1 -0
- package/.next/server/chunks/9067.js +1 -0
- package/.next/server/chunks/9123.js +1 -1
- package/.next/server/chunks/9360.js +2 -0
- package/.next/server/chunks/9687.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- 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/chunks/{8562-6e2ab32452f4fa5b.js → 2053-52d3c82014e1cd54.js} +1 -1
- package/.next/static/chunks/2751-9ef0f4b450bd4ef0.js +1 -0
- package/.next/static/chunks/{6488-2c412c29258637b6.js → 6488-b5e707dfdd33d633.js} +1 -1
- package/.next/static/chunks/744-fa8c0ae444c8338c.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/templates/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-10d6f983e5f06ffb.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-b73ac6531829c698.js +1 -0
- package/.next/trace +12 -12
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/update/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -2
- package/.next/types/validator.ts +27 -0
- package/README.md +10 -1
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +4 -3
- package/dist/cli/commands/capture.d.ts +1 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +112 -2
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +9 -3
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +34 -8
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +6 -5
- package/dist/cli/commands/skill-format.d.ts +7 -1
- package/dist/cli/commands/skill-format.d.ts.map +1 -1
- package/dist/cli/commands/skill-format.js +67 -0
- package/dist/cli/commands/skill.d.ts +2 -0
- package/dist/cli/commands/skill.d.ts.map +1 -1
- package/dist/cli/commands/skill.js +149 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +53 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +66 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +3 -2
- package/dist/cli/config/agent-target-options.d.ts +46 -0
- package/dist/cli/config/agent-target-options.d.ts.map +1 -0
- package/dist/cli/config/agent-target-options.js +54 -0
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +72 -17
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +3 -0
- package/dist/cli/types/api-responses.d.ts +174 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +31 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +4 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +43 -5
- package/dist/cli/utils/npm-runner.d.ts +24 -0
- package/dist/cli/utils/npm-runner.d.ts.map +1 -1
- package/dist/cli/utils/npm-runner.js +51 -1
- package/dist/cli/utils/pid-manager.d.ts +12 -2
- package/dist/cli/utils/pid-manager.d.ts.map +1 -1
- package/dist/cli/utils/pid-manager.js +76 -13
- package/dist/cli/utils/verify-runner.d.ts +9 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +28 -2
- package/dist/config/history-display-config.d.ts +61 -0
- package/dist/config/history-display-config.d.ts.map +1 -0
- package/dist/config/history-display-config.js +62 -0
- package/dist/server/server.js +107 -14
- package/dist/server/src/lib/auto-yes-poller.js +49 -0
- package/dist/server/src/lib/auto-yes-state.js +64 -0
- package/dist/server/src/lib/db/chat-db.js +75 -1
- package/dist/server/src/lib/db/db-repository.js +66 -2
- package/dist/server/src/lib/db/db.js +13 -3
- package/dist/server/src/lib/db/migrations/index.js +6 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v53-worktree-aliases.js +53 -0
- package/dist/server/src/lib/db/migrations/v54-worktree-id-path-derived.js +204 -0
- package/dist/server/src/lib/db/migrations/v55-compact-churned-worktree-ids.js +207 -0
- package/dist/server/src/lib/db/migrations/worktree-id-rename.js +153 -0
- package/dist/server/src/lib/db/worktree-alias-db.js +155 -0
- package/dist/server/src/lib/db/worktree-db.js +53 -71
- package/dist/server/src/lib/detection/cli-patterns.js +86 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +10 -1
- package/dist/server/src/lib/git/worktree-id.js +145 -0
- package/dist/server/src/lib/git/worktree-redirect.js +155 -0
- package/dist/server/src/lib/git/worktrees.js +173 -27
- package/dist/server/src/lib/logger.js +13 -1
- package/dist/server/src/lib/polling/auto-yes-manager.js +3 -1
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +54 -0
- package/dist/server/src/lib/polling/prompt-dedup.js +22 -0
- package/dist/server/src/lib/polling/response-checker.js +53 -13
- package/dist/server/src/lib/polling/response-dedup.js +22 -0
- package/dist/server/src/lib/polling/response-poller-core.js +107 -0
- package/dist/server/src/lib/polling/response-poller.js +4 -1
- package/dist/server/src/lib/response-extractor.js +22 -2
- package/dist/server/src/lib/session/claude-session.js +117 -35
- package/dist/server/src/lib/session/current-output-builder.js +16 -1
- package/dist/server/src/lib/session/session-start-error.js +125 -0
- package/dist/server/src/lib/session/worktree-session-reconcile.js +603 -0
- package/dist/server/src/lib/skills/install-apply.js +63 -23
- package/dist/server/src/lib/skills/operation-audit.js +5 -6
- package/dist/server/src/lib/skills/startup-reconcile.js +26 -5
- package/dist/server/src/lib/skills/updater.js +830 -0
- package/dist/server/src/lib/tasks/contract-parser.js +17 -1
- package/dist/server/src/lib/tasks/task-state-machine.js +23 -1
- package/dist/server/src/lib/tmux/control-mode-tmux-transport.js +7 -0
- package/dist/server/src/lib/tmux/read-mode.js +22 -2
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +33 -0
- package/dist/server/src/lib/tmux/tmux-control-client.js +12 -0
- package/dist/server/src/lib/tmux/tmux-control-registry.js +55 -11
- package/dist/server/src/lib/tmux/tmux.js +61 -0
- package/dist/server/src/lib/ws-server.js +104 -1
- package/package.json +1 -1
- package/.next/server/chunks/1117.js +0 -1
- package/.next/server/chunks/1356.js +0 -4
- package/.next/server/chunks/1692.js +0 -1
- package/.next/server/chunks/3042.js +0 -1
- package/.next/server/chunks/4018.js +0 -1
- package/.next/server/chunks/4390.js +0 -1
- package/.next/server/chunks/4440.js +0 -2
- package/.next/server/chunks/4548.js +0 -1
- package/.next/server/chunks/5793.js +0 -1
- package/.next/server/chunks/8681.js +0 -1
- package/.next/static/chunks/2751-7fabd91275b14ca3.js +0 -1
- package/.next/static/chunks/744-d5e47fe16e7b9e06.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/templates/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/repositories/page-1ed1e5a542ecc168.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-6008b904225ebb25.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-f6e09d25cd3b56f9.js +0 -1
- /package/.next/static/{-E7I667pJDTBamyG8M_Z- → _AR-TSCnEog5nL9JjjCna}/_buildManifest.js +0 -0
- /package/.next/static/{-E7I667pJDTBamyG8M_Z- → _AR-TSCnEog5nL9JjjCna}/_ssgManifest.js +0 -0
package/dist/server/server.js
CHANGED
|
@@ -78,7 +78,11 @@ const resource_cleanup_1 = require("./src/lib/resource-cleanup");
|
|
|
78
78
|
const db_migrations_1 = require("./src/lib/db/db-migrations");
|
|
79
79
|
const env_1 = require("./src/lib/env");
|
|
80
80
|
const db_repository_1 = require("./src/lib/db/db-repository");
|
|
81
|
-
|
|
81
|
+
// Issue #1666: `resolveRepositoryPath`, `getWorktreeIdsByRepository`,
|
|
82
|
+
// `deleteWorktreesByIds`, `cleanupMultipleWorktrees` and `killWorktreeSession`
|
|
83
|
+
// went with the startup purge — they had no other caller here. `npm run lint`
|
|
84
|
+
// only covers `src/`, and tsconfig sets no `noUnusedLocals`, so nothing in the
|
|
85
|
+
// gates would have flagged them: they were removed by inspection, not by a tool.
|
|
82
86
|
const session_cleanup_1 = require("./src/lib/session-cleanup");
|
|
83
87
|
const dev = process.env.NODE_ENV !== 'production';
|
|
84
88
|
const hostname = (0, env_1.getEnvByKey)('CM_BIND') || '127.0.0.1';
|
|
@@ -116,6 +120,32 @@ function validateCertPath(filePath, label) {
|
|
|
116
120
|
// Create Next.js app
|
|
117
121
|
const app = (0, next_1.default)({ dev, hostname, port });
|
|
118
122
|
const handle = app.getRequestHandler();
|
|
123
|
+
let worktreeRedirectModule = null;
|
|
124
|
+
let worktreeRedirectLoad = null;
|
|
125
|
+
async function resolveWorktreeAliasRedirect(url) {
|
|
126
|
+
if (!worktreeRedirectModule) {
|
|
127
|
+
if (!worktreeRedirectLoad) {
|
|
128
|
+
worktreeRedirectLoad = Promise.resolve().then(() => __importStar(require('./src/lib/git/worktree-redirect'))).then((mod) => {
|
|
129
|
+
worktreeRedirectModule = mod;
|
|
130
|
+
})
|
|
131
|
+
.catch((error) => {
|
|
132
|
+
// Fail open: without the resolver the layout's meta refresh still
|
|
133
|
+
// lands the user on the right worktree.
|
|
134
|
+
console.error('Failed to load worktree redirect resolver:', error);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
await worktreeRedirectLoad;
|
|
138
|
+
}
|
|
139
|
+
if (!worktreeRedirectModule)
|
|
140
|
+
return null;
|
|
141
|
+
try {
|
|
142
|
+
return worktreeRedirectModule.resolveWorktreeRedirect(url);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.error('Worktree redirect resolution failed:', error);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
119
149
|
// Issue #331: Prevent Next.js (NextCustomServer) from registering its own upgrade
|
|
120
150
|
// event listener on the HTTP server.
|
|
121
151
|
//
|
|
@@ -160,6 +190,21 @@ app.prepare().then(() => {
|
|
|
160
190
|
}
|
|
161
191
|
const method = req.method ?? 'UNKNOWN';
|
|
162
192
|
const url = req.url ?? '/';
|
|
193
|
+
// Issue #1621/#1645: a URL naming a worktree by a retired ID gets a real
|
|
194
|
+
// 308 here, before Next renders anything. The cheap prefix test keeps every
|
|
195
|
+
// other route free of the dynamic import and the alias lookup.
|
|
196
|
+
if (url.startsWith('/worktrees/')) {
|
|
197
|
+
const redirect = await resolveWorktreeAliasRedirect(url);
|
|
198
|
+
if (redirect && !res.headersSent) {
|
|
199
|
+
res.statusCode = redirect.statusCode;
|
|
200
|
+
res.setHeader('Location', redirect.location);
|
|
201
|
+
// See WORKTREE_REDIRECT_CACHE_CONTROL: alias -> live is durable, not
|
|
202
|
+
// eternal, and a cached permanent redirect could never be corrected.
|
|
203
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
204
|
+
res.end();
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
163
208
|
try {
|
|
164
209
|
const parsedUrl = (0, url_1.parse)(url, true);
|
|
165
210
|
await handle(req, res, parsedUrl);
|
|
@@ -226,6 +271,42 @@ app.prepare().then(() => {
|
|
|
226
271
|
catch (error) {
|
|
227
272
|
console.error('Error reconciling Skill operations:', error);
|
|
228
273
|
}
|
|
274
|
+
// Issue #1621 Phase 3/4: make live tmux sessions follow the worktree IDs
|
|
275
|
+
// that migration v54 has just renumbered. Session names are DERIVED from
|
|
276
|
+
// the ID (`mcbd-{cli}-{worktreeId}`), so a running agent would otherwise
|
|
277
|
+
// keep its process while disappearing from the UI — and the app would
|
|
278
|
+
// happily start a second agent in the same directory. `worktree_aliases`
|
|
279
|
+
// is the durable record of every ID that has moved, which makes this pass
|
|
280
|
+
// idempotent: when nothing is stale it costs one `tmux list-sessions`.
|
|
281
|
+
//
|
|
282
|
+
// Fail-open in its own try/catch — reconciling sessions must never be
|
|
283
|
+
// able to stop the server from serving. Dynamic import for the same
|
|
284
|
+
// reason as the reconcilers around it: a static import here perturbs
|
|
285
|
+
// Next's AsyncLocalStorage bootstrap under `tsx server.ts` and the first
|
|
286
|
+
// request that compiles middleware dies. Do not hoist this.
|
|
287
|
+
try {
|
|
288
|
+
const { reconcileWorktreeSessionsFromAliases } = await Promise.resolve().then(() => __importStar(require('./src/lib/session/worktree-session-reconcile')));
|
|
289
|
+
const sessionReport = await reconcileWorktreeSessionsFromAliases(db);
|
|
290
|
+
if (sessionReport.renamedSessions.length > 0) {
|
|
291
|
+
console.log(`Reconciled ${sessionReport.renamedSessions.length} tmux session(s) to renamed worktree IDs ` +
|
|
292
|
+
`(predicted=${sessionReport.planSources.predicted} ` +
|
|
293
|
+
`discovered=${sessionReport.planSources.discovered})`);
|
|
294
|
+
}
|
|
295
|
+
// Issue #1661: a live `mcbd-*` session that no known worktree ID
|
|
296
|
+
// explains is exactly what the previous report could not express — the
|
|
297
|
+
// pass ran clean while two agents sat stranded under stale names. Say
|
|
298
|
+
// it out loud, with the names, so it is actionable from the log alone.
|
|
299
|
+
if (sessionReport.unaccountedSessions.length > 0) {
|
|
300
|
+
console.warn(`${sessionReport.unaccountedSessions.length} tmux session(s) match no known worktree ID ` +
|
|
301
|
+
`and were left untouched: ${sessionReport.unaccountedSessions.join(', ')}`);
|
|
302
|
+
}
|
|
303
|
+
if (sessionReport.errors.length > 0) {
|
|
304
|
+
console.warn(`Session reconcile warnings: ${sessionReport.errors.join(', ')}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
console.error('Error reconciling worktree sessions:', error);
|
|
309
|
+
}
|
|
229
310
|
// Issue #1543: close verification runs that a crash left in `running`.
|
|
230
311
|
// Gate execution lives in process memory, so none of them survived the
|
|
231
312
|
// restart; leaving the rows open would keep their worktrees permanently
|
|
@@ -269,19 +350,31 @@ app.prepare().then(() => {
|
|
|
269
350
|
excludedPaths.forEach(p => {
|
|
270
351
|
console.log(` [excluded] ${p}`);
|
|
271
352
|
});
|
|
272
|
-
// Issue #
|
|
273
|
-
//
|
|
274
|
-
//
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
353
|
+
// Issue #1666: exclusion is where startup STOPS, not where it deletes.
|
|
354
|
+
//
|
|
355
|
+
// This branch used to purge every excluded repository — kill its tmux
|
|
356
|
+
// sessions, then `deleteWorktreesByIds`, taking chat history, memos,
|
|
357
|
+
// todos, timers, schedules, execution logs, tasks and verification runs
|
|
358
|
+
// with it by cascade. That was #202's "deleted repositories must not
|
|
359
|
+
// reappear after a restart", and it was harmless for exactly as long as
|
|
360
|
+
// `DELETE /api/repositories` was the only route to `enabled = 0`: that
|
|
361
|
+
// route already purged, so the loop re-deleted nothing.
|
|
362
|
+
//
|
|
363
|
+
// #1658 added a non-destructive disable (a single
|
|
364
|
+
// `UPDATE repositories SET enabled = 0`), which made this loop the
|
|
365
|
+
// thing that undid it — and only for `WORKTREE_REPOS` repositories,
|
|
366
|
+
// because a DB-only one leaves `allPaths` when disabled and never
|
|
367
|
+
// reaches `excludedPaths` at all. So the same toggle was destructive or
|
|
368
|
+
// not depending on where the repository had been configured, and the
|
|
369
|
+
// damage landed a restart later, far from the click that caused it.
|
|
370
|
+
//
|
|
371
|
+
// #202 survives without the deletion: an excluded repository is not
|
|
372
|
+
// scanned, so nothing re-creates its rows, and keeping rows is not the
|
|
373
|
+
// same as showing them. Hiding a repository's worktrees from the
|
|
374
|
+
// sidebar is `visible`'s job (#690) — a separate, reversible flag that
|
|
375
|
+
// the user sets deliberately — whereas `enabled` only decides what gets
|
|
376
|
+
// scanned. Deleting rows to achieve "not shown" destroys history to
|
|
377
|
+
// implement a view filter, and cannot be undone by re-enabling.
|
|
285
378
|
}
|
|
286
379
|
// Scan filtered repositories (excluded repos are skipped)
|
|
287
380
|
const worktrees = await (0, worktrees_1.scanMultipleRepositories)(filteredPaths);
|
|
@@ -62,8 +62,10 @@ const cli_session_1 = require("./session/cli-session");
|
|
|
62
62
|
const prompt_detector_1 = require("./detection/prompt-detector");
|
|
63
63
|
const auto_yes_resolver_1 = require("./polling/auto-yes-resolver");
|
|
64
64
|
const auto_yes_policy_1 = require("./polling/auto-yes-policy");
|
|
65
|
+
const auto_yes_suppression_state_1 = require("./polling/auto-yes-suppression-state");
|
|
65
66
|
const task_transition_service_1 = require("./tasks/task-transition-service");
|
|
66
67
|
const db_instance_1 = require("./db/db-instance");
|
|
68
|
+
const chat_db_1 = require("./db/chat-db");
|
|
67
69
|
const prompt_answer_sender_1 = require("./prompt-answer-sender");
|
|
68
70
|
const manager_1 = require("./cli-tools/manager");
|
|
69
71
|
const cli_patterns_1 = require("./detection/cli-patterns");
|
|
@@ -303,6 +305,15 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
|
|
|
303
305
|
const policy = (0, auto_yes_policy_1.getSessionAutoYesPolicy)(worktreeId, cliToolId, instanceId);
|
|
304
306
|
const resolution = (0, auto_yes_resolver_1.resolveAutoAnswerWithPolicy)(promptDetection.promptData, policy);
|
|
305
307
|
if (resolution.suppressedBy) {
|
|
308
|
+
// Issue #1684: the log line alone leaves a CLI-driven pipeline blind to
|
|
309
|
+
// why its worker stalled. Record the suppression so buildCurrentOutput
|
|
310
|
+
// can publish it (`autoYes.lastSuppression` in capture --json).
|
|
311
|
+
(0, auto_yes_suppression_state_1.recordPolicySuppression)(worktreeId, cliToolId, instanceId, {
|
|
312
|
+
reason: resolution.suppressedBy,
|
|
313
|
+
mode: policy?.mode ?? null,
|
|
314
|
+
promptType: promptDetection.promptData.type,
|
|
315
|
+
pattern: resolution.pattern,
|
|
316
|
+
});
|
|
306
317
|
logger.warn('poller:auto-yes-suppressed-by-policy', {
|
|
307
318
|
worktreeId,
|
|
308
319
|
cliToolId,
|
|
@@ -346,6 +357,44 @@ async function detectAndRespondToPrompt(worktreeId, pollerState, cliToolId, clea
|
|
|
346
357
|
// Undefined means the primary instance, which the task lookup identifies
|
|
347
358
|
// by the tool id itself (see getActiveTaskForInstance).
|
|
348
359
|
instanceId ?? cliToolId, 'prompt_answered_auto', { promptType: promptDetection.promptData.type });
|
|
360
|
+
// Issue #1685: persist question/options/answer to chat history so the audit
|
|
361
|
+
// trail survives even when the answer landed inside the response poller's
|
|
362
|
+
// interval and the prompt was never saved as a pending message. Must never
|
|
363
|
+
// fail the answer that already reached tmux.
|
|
364
|
+
let auditRecord = null;
|
|
365
|
+
try {
|
|
366
|
+
auditRecord = (0, chat_db_1.recordAnsweredPrompt)((0, db_instance_1.getDbInstance)(), {
|
|
367
|
+
worktreeId,
|
|
368
|
+
cliToolId,
|
|
369
|
+
instanceId: instanceId ?? cliToolId,
|
|
370
|
+
promptData: promptDetection.promptData,
|
|
371
|
+
answer,
|
|
372
|
+
answeredBy: 'auto',
|
|
373
|
+
content: promptDetection.rawContent || promptDetection.cleanContent,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
catch (recordError) {
|
|
377
|
+
logger.warn('poller:prompt-audit-record-failed', {
|
|
378
|
+
worktreeId,
|
|
379
|
+
cliToolId,
|
|
380
|
+
instanceId,
|
|
381
|
+
error: (0, errors_1.getErrorMessage)(recordError),
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
if (auditRecord) {
|
|
385
|
+
const record = auditRecord;
|
|
386
|
+
// Fire-and-forget on purpose: the WS push is advisory, and awaiting a
|
|
387
|
+
// cold ws-server module load inside the poll path would make its
|
|
388
|
+
// completion timing nondeterministic for a side effect it doesn't
|
|
389
|
+
// depend on (the audit row is already committed above).
|
|
390
|
+
void Promise.resolve().then(() => __importStar(require('../lib/ws-server'))).then(({ broadcastMessage }) => {
|
|
391
|
+
broadcastMessage(record.created ? 'message' : 'message_updated', {
|
|
392
|
+
worktreeId,
|
|
393
|
+
message: record.message,
|
|
394
|
+
});
|
|
395
|
+
})
|
|
396
|
+
.catch(() => { });
|
|
397
|
+
}
|
|
349
398
|
// Dynamic imports avoid a module cycle through terminal-broadcast ->
|
|
350
399
|
// current-output-builder -> auto-yes-manager -> this poller.
|
|
351
400
|
const [{ startPolling: startResponsePolling }, { broadcastTerminalSnapshotAfterInteraction }] = await Promise.all([
|
|
@@ -27,6 +27,7 @@ exports.getAutoYesStateCompositeKeys = getAutoYesStateCompositeKeys;
|
|
|
27
27
|
exports.filterCompositeKeysByWorktree = filterCompositeKeysByWorktree;
|
|
28
28
|
exports.getCompositeKeysByWorktree = getCompositeKeysByWorktree;
|
|
29
29
|
exports.deleteAutoYesStateByWorktree = deleteAutoYesStateByWorktree;
|
|
30
|
+
exports.migrateAutoYesStateWorktreeIds = migrateAutoYesStateWorktreeIds;
|
|
30
31
|
exports.calculateBackoffInterval = calculateBackoffInterval;
|
|
31
32
|
const auto_yes_config_1 = require("../config/auto-yes-config");
|
|
32
33
|
const path_validator_1 = require("./security/path-validator");
|
|
@@ -358,6 +359,69 @@ function deleteAutoYesStateByWorktree(worktreeId) {
|
|
|
358
359
|
keys.forEach(key => autoYesStates.delete(key));
|
|
359
360
|
return keys.length;
|
|
360
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* Re-key every auto-yes state whose worktree ID is being renamed
|
|
364
|
+
* (Issue #1621 Phase 3).
|
|
365
|
+
*
|
|
366
|
+
* **Transfer, never invalidate.** Auto-Yes is what keeps an unattended worker
|
|
367
|
+
* answering prompts; dropping the state at rename time would leave the agent
|
|
368
|
+
* alive and silently stuck at the next confirmation, hours later, with nothing
|
|
369
|
+
* in the UI to explain it. The state object itself (enabledAt / expiresAt /
|
|
370
|
+
* stopPattern) is moved verbatim, so the countdown a user started keeps running
|
|
371
|
+
* against its original deadline.
|
|
372
|
+
*
|
|
373
|
+
* Takes the whole batch rather than one pair because IDs can **swap**: with
|
|
374
|
+
* A→B and B→A applied one at a time, the first move overwrites the destination's
|
|
375
|
+
* state before the destination has been read. Every source key is therefore read
|
|
376
|
+
* and removed first, and only then are the new keys written.
|
|
377
|
+
*
|
|
378
|
+
* The poller that consumes these states is a separate map with its own timers,
|
|
379
|
+
* and its timer callbacks capture the worktree ID — see
|
|
380
|
+
* `reconcileWorktreeSessions`, which restarts them. Moving the state without
|
|
381
|
+
* restarting the poller would stop Auto-Yes just as surely as deleting it.
|
|
382
|
+
*
|
|
383
|
+
* @param renames - Worktree ID pairs being applied
|
|
384
|
+
* @returns One entry per state that moved
|
|
385
|
+
*/
|
|
386
|
+
function migrateAutoYesStateWorktreeIds(renames) {
|
|
387
|
+
const targets = new Map();
|
|
388
|
+
for (const { oldId, newId } of renames) {
|
|
389
|
+
if (!oldId || !newId || oldId === newId)
|
|
390
|
+
continue;
|
|
391
|
+
targets.set(oldId, newId);
|
|
392
|
+
}
|
|
393
|
+
if (targets.size === 0)
|
|
394
|
+
return [];
|
|
395
|
+
const moves = [];
|
|
396
|
+
for (const [key, state] of autoYesStates) {
|
|
397
|
+
const oldWorktreeId = extractWorktreeId(key);
|
|
398
|
+
const newWorktreeId = targets.get(oldWorktreeId);
|
|
399
|
+
if (!newWorktreeId)
|
|
400
|
+
continue;
|
|
401
|
+
const cliToolId = extractCliToolId(key);
|
|
402
|
+
// A key whose second segment is not a known CLI tool cannot be rebuilt
|
|
403
|
+
// safely; leave it where it is rather than guess (it is unreachable through
|
|
404
|
+
// buildCompositeKey, so this only fires on hand-written state).
|
|
405
|
+
if (!cliToolId)
|
|
406
|
+
continue;
|
|
407
|
+
const instanceId = extractInstanceId(key) ?? cliToolId;
|
|
408
|
+
moves.push({
|
|
409
|
+
oldKey: key,
|
|
410
|
+
newKey: buildCompositeKey(newWorktreeId, cliToolId, instanceId),
|
|
411
|
+
oldWorktreeId,
|
|
412
|
+
newWorktreeId,
|
|
413
|
+
cliToolId,
|
|
414
|
+
instanceId,
|
|
415
|
+
state,
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
// Two passes so a swap (A→B, B→A) cannot have one half clobber the other.
|
|
419
|
+
for (const move of moves)
|
|
420
|
+
autoYesStates.delete(move.oldKey);
|
|
421
|
+
for (const move of moves)
|
|
422
|
+
autoYesStates.set(move.newKey, move.state);
|
|
423
|
+
return moves.map(({ state: _state, ...rest }) => rest);
|
|
424
|
+
}
|
|
361
425
|
/**
|
|
362
426
|
* Calculate backoff interval based on consecutive errors.
|
|
363
427
|
* Returns the normal polling interval when errors are below the threshold,
|
|
@@ -24,6 +24,7 @@ exports.getMessagesByDateRange = getMessagesByDateRange;
|
|
|
24
24
|
exports.getMessageById = getMessageById;
|
|
25
25
|
exports.updatePromptData = updatePromptData;
|
|
26
26
|
exports.markPendingPromptsAsAnswered = markPendingPromptsAsAnswered;
|
|
27
|
+
exports.recordAnsweredPrompt = recordAnsweredPrompt;
|
|
27
28
|
const crypto_1 = require("crypto");
|
|
28
29
|
const logger_1 = require("../../lib/logger");
|
|
29
30
|
const logger = (0, logger_1.createLogger)('chat-db');
|
|
@@ -123,7 +124,7 @@ function updateMessageContent(db, messageId, content, options) {
|
|
|
123
124
|
* Get messages for a worktree, optionally filtered by CLI tool
|
|
124
125
|
*/
|
|
125
126
|
function getMessages(db, worktreeId, options = {}) {
|
|
126
|
-
const { before, limit = 50, cliToolId, instanceId, includeArchived = false, limitUnit = 'messages' } = options;
|
|
127
|
+
const { before, limit = 50, cliToolId, instanceId, includeArchived = false, messageType, limitUnit = 'messages' } = options;
|
|
127
128
|
// Build the shared scope clause (worktree + before cursor + archived + instance/cli
|
|
128
129
|
// filter) and its bound params. Used for both the message-unit and pair-unit paths
|
|
129
130
|
// so their filtering stays identical.
|
|
@@ -144,6 +145,11 @@ function getMessages(db, worktreeId, options = {}) {
|
|
|
144
145
|
clause += ` AND cli_tool_id = ?`;
|
|
145
146
|
params.push(cliToolId);
|
|
146
147
|
}
|
|
148
|
+
// Issue #1685: message-type filter (prompt audit listing)
|
|
149
|
+
if (messageType) {
|
|
150
|
+
clause += ` AND message_type = ?`;
|
|
151
|
+
params.push(messageType);
|
|
152
|
+
}
|
|
147
153
|
return { clause, params };
|
|
148
154
|
};
|
|
149
155
|
const SELECT_COLS = `SELECT id, worktree_id, role, content, summary, timestamp, log_file_name, request_id, message_type, prompt_data, cli_tool_id, instance_id, archived`;
|
|
@@ -425,6 +431,10 @@ function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
|
|
|
425
431
|
promptData.status = 'answered';
|
|
426
432
|
promptData.answer = '(answered via terminal)';
|
|
427
433
|
promptData.answeredAt = new Date().toISOString();
|
|
434
|
+
// Issue #1685: attribution for the audit trail. This sweep only sees
|
|
435
|
+
// prompts nothing else claimed, so all that is known is that the agent
|
|
436
|
+
// moved on — i.e. someone acted in the terminal.
|
|
437
|
+
promptData.answeredBy = 'terminal';
|
|
428
438
|
updateStmt.run(JSON.stringify(promptData), row.id);
|
|
429
439
|
updatedCount++;
|
|
430
440
|
}
|
|
@@ -434,3 +444,67 @@ function markPendingPromptsAsAnswered(db, worktreeId, cliToolId, instanceId) {
|
|
|
434
444
|
}
|
|
435
445
|
return updatedCount;
|
|
436
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* Persist "this prompt was just answered" to chat history (Issue #1685).
|
|
449
|
+
*
|
|
450
|
+
* The answer paths (Auto-Yes poller, /prompt-response) act on what is on
|
|
451
|
+
* screen, not on a stored message, so the prompt they resolve may or may not
|
|
452
|
+
* have been saved by the response poller yet:
|
|
453
|
+
*
|
|
454
|
+
* - If a pending prompt row exists for the instance, it is marked answered in
|
|
455
|
+
* place — preferring the row whose question matches the screen, falling back
|
|
456
|
+
* to the newest pending row (the two capture paths can clean text slightly
|
|
457
|
+
* differently).
|
|
458
|
+
* - If none exists (the answer landed inside the response poller's interval —
|
|
459
|
+
* the exact case Issue #1685 is about), a new already-answered prompt row is
|
|
460
|
+
* created so the question/options/answer survive for the audit trail.
|
|
461
|
+
*/
|
|
462
|
+
function recordAnsweredPrompt(db, params) {
|
|
463
|
+
const { worktreeId, cliToolId, promptData, answer, answeredBy } = params;
|
|
464
|
+
const resolvedInstanceId = params.instanceId ?? cliToolId;
|
|
465
|
+
const rows = db
|
|
466
|
+
.prepare(`
|
|
467
|
+
SELECT id, prompt_data
|
|
468
|
+
FROM chat_messages
|
|
469
|
+
WHERE worktree_id = ?
|
|
470
|
+
AND instance_id = ?
|
|
471
|
+
AND message_type = 'prompt'
|
|
472
|
+
AND json_extract(prompt_data, '$.status') = 'pending'
|
|
473
|
+
${exports.ACTIVE_FILTER}
|
|
474
|
+
ORDER BY timestamp DESC
|
|
475
|
+
`)
|
|
476
|
+
.all(worktreeId, resolvedInstanceId);
|
|
477
|
+
let target = null;
|
|
478
|
+
for (const row of rows) {
|
|
479
|
+
try {
|
|
480
|
+
const parsed = JSON.parse(row.prompt_data);
|
|
481
|
+
if (!target) {
|
|
482
|
+
target = { id: row.id, parsed };
|
|
483
|
+
}
|
|
484
|
+
if (parsed.question === promptData.question) {
|
|
485
|
+
target = { id: row.id, parsed };
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
catch {
|
|
490
|
+
// Skip if prompt_data is invalid JSON
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
const answeredAt = new Date().toISOString();
|
|
494
|
+
if (target) {
|
|
495
|
+
const updated = { ...target.parsed, status: 'answered', answer, answeredAt, answeredBy };
|
|
496
|
+
updatePromptData(db, target.id, updated);
|
|
497
|
+
return { message: getMessageById(db, target.id), created: false };
|
|
498
|
+
}
|
|
499
|
+
const message = createMessage(db, {
|
|
500
|
+
worktreeId,
|
|
501
|
+
role: 'assistant',
|
|
502
|
+
content: params.content || promptData.question || '[prompt]',
|
|
503
|
+
messageType: 'prompt',
|
|
504
|
+
promptData: { ...promptData, status: 'answered', answer, answeredAt, answeredBy },
|
|
505
|
+
timestamp: new Date(),
|
|
506
|
+
cliToolId,
|
|
507
|
+
instanceId: resolvedInstanceId,
|
|
508
|
+
});
|
|
509
|
+
return { message, created: true };
|
|
510
|
+
}
|
|
@@ -28,6 +28,8 @@ exports.disableExistingRepository = disableExistingRepository;
|
|
|
28
28
|
exports.getExcludedRepositoryPaths = getExcludedRepositoryPaths;
|
|
29
29
|
exports.getExcludedRepositories = getExcludedRepositories;
|
|
30
30
|
exports.restoreRepository = restoreRepository;
|
|
31
|
+
exports.countDisabledRepositories = countDisabledRepositories;
|
|
32
|
+
exports.setRepositoryEnabled = setRepositoryEnabled;
|
|
31
33
|
exports.createCloneJob = createCloneJob;
|
|
32
34
|
exports.getCloneJob = getCloneJob;
|
|
33
35
|
exports.updateCloneJob = updateCloneJob;
|
|
@@ -449,8 +451,7 @@ function disableRepository(db, repositoryPath) {
|
|
|
449
451
|
}
|
|
450
452
|
const resolvedPath = resolveRepositoryPath(repositoryPath);
|
|
451
453
|
// SEC-SF-004: Check disabled repository count limit before creating new record
|
|
452
|
-
|
|
453
|
-
if (disabledCount.count >= exports.MAX_DISABLED_REPOSITORIES) {
|
|
454
|
+
if (countDisabledRepositories(db) >= exports.MAX_DISABLED_REPOSITORIES) {
|
|
454
455
|
throw new Error('Disabled repository limit exceeded');
|
|
455
456
|
}
|
|
456
457
|
createRepository(db, {
|
|
@@ -508,6 +509,69 @@ function restoreRepository(db, repoPath) {
|
|
|
508
509
|
updateRepository(db, repo.id, { enabled: true });
|
|
509
510
|
return { ...repo, enabled: true };
|
|
510
511
|
}
|
|
512
|
+
/**
|
|
513
|
+
* Number of repositories currently excluded from scans (`enabled = 0`).
|
|
514
|
+
*
|
|
515
|
+
* Extracted so the SEC-SF-004 ceiling is counted the same way by every caller
|
|
516
|
+
* that can create one more disabled row ({@link disableRepository}) or flip an
|
|
517
|
+
* enabled row to disabled ({@link setRepositoryEnabled}).
|
|
518
|
+
*/
|
|
519
|
+
function countDisabledRepositories(db) {
|
|
520
|
+
const row = db
|
|
521
|
+
.prepare('SELECT COUNT(*) as count FROM repositories WHERE enabled = 0')
|
|
522
|
+
.get();
|
|
523
|
+
return Number(row.count) || 0;
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Flip a repository's scan-inclusion flag by id, and touch NOTHING else
|
|
527
|
+
* (Issue #1658).
|
|
528
|
+
*
|
|
529
|
+
* This is the non-destructive counterpart to `DELETE /api/repositories`, which
|
|
530
|
+
* is "exclude **and purge**": it disables the repository, kills every tmux
|
|
531
|
+
* session under it, and deletes its `worktrees` rows — taking chat history,
|
|
532
|
+
* memos, todos, timers, schedules, execution logs, tasks and verification runs
|
|
533
|
+
* with them (`deleteWorktreeChildRows`). A user who only wants a scan root to
|
|
534
|
+
* stop being scanned had no other route, so "stop scanning this" cost them
|
|
535
|
+
* their history and their running agents.
|
|
536
|
+
*
|
|
537
|
+
* What this function does, exhaustively: one `UPDATE repositories SET enabled`.
|
|
538
|
+
* It does not read, write or delete `worktrees` or any child table, and it
|
|
539
|
+
* never touches `visible` — `enabled` (scan inclusion, Issue #190) and
|
|
540
|
+
* `visible` (sidebar display, Issue #690) stay orthogonal columns, so
|
|
541
|
+
* re-enabling restores the user's own visibility choice rather than a guess.
|
|
542
|
+
*
|
|
543
|
+
* The scan side is the other half of the pair and already reads this flag:
|
|
544
|
+
* `POST /api/repositories/sync` and `server.ts` both drop `enabled = 0` paths
|
|
545
|
+
* via {@link registerAndFilterRepositories}, and neither
|
|
546
|
+
* `syncWorktreesToDB`'s per-repository prune nor `pruneStaleRepositoryWorktrees`
|
|
547
|
+
* can reach the rows of a repository that is merely absent from the scan while
|
|
548
|
+
* its directory still exists.
|
|
549
|
+
*
|
|
550
|
+
* SEC-SF-004: disabling one more repository is refused once
|
|
551
|
+
* {@link MAX_DISABLED_REPOSITORIES} rows are already disabled. Re-disabling an
|
|
552
|
+
* already-disabled repository adds no row and is therefore always allowed.
|
|
553
|
+
*
|
|
554
|
+
* @param db - Database instance
|
|
555
|
+
* @param id - Repository id (`repositories.id`), not a path
|
|
556
|
+
* @param enabled - `true` to include in scans, `false` to exclude
|
|
557
|
+
* @returns The repository as it now stands, or `null` when no row has that id
|
|
558
|
+
* @throws {RepositoryDbError} code `LIMIT_EXCEEDED` when the disabled ceiling
|
|
559
|
+
* would be crossed
|
|
560
|
+
*/
|
|
561
|
+
function setRepositoryEnabled(db, id, enabled) {
|
|
562
|
+
const repo = getRepositoryById(db, id);
|
|
563
|
+
if (!repo)
|
|
564
|
+
return null;
|
|
565
|
+
// Already in the requested state: nothing to write, and no ceiling to test
|
|
566
|
+
// (the row is already counted).
|
|
567
|
+
if (repo.enabled === enabled)
|
|
568
|
+
return repo;
|
|
569
|
+
if (!enabled && countDisabledRepositories(db) >= exports.MAX_DISABLED_REPOSITORIES) {
|
|
570
|
+
throw new RepositoryDbError(`Cannot disable more than ${exports.MAX_DISABLED_REPOSITORIES} repositories`, 'LIMIT_EXCEEDED');
|
|
571
|
+
}
|
|
572
|
+
updateRepository(db, id, { enabled });
|
|
573
|
+
return getRepositoryById(db, id);
|
|
574
|
+
}
|
|
511
575
|
// ============================================================
|
|
512
576
|
// Clone Job Operations
|
|
513
577
|
// ============================================================
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
* @internal functions from being unintentionally exposed.
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = void 0;
|
|
13
|
+
exports.setInProgressMessageId = exports.updateSessionState = exports.getSessionState = exports.getMessagesByDateRange = exports.ACTIVE_FILTER = exports.recordAnsweredPrompt = exports.markPendingPromptsAsAnswered = exports.updatePromptData = exports.getMessageById = exports.recomputeLastUserMessage = exports.clearLastUserMessage = exports.updateLastUserMessage = exports.deleteMessagesByInstance = exports.deleteMessagesByCliTool = exports.deleteMessageById = exports.deleteAllMessages = exports.getLastMessage = exports.getLastUserMessage = exports.getMessages = exports.updateMessageContent = exports.createMessage = exports.getLastAssistantMessageAt = exports.getAliasedWorktreeIds = exports.getAllWorktreeAliases = exports.getWorktreeAliases = exports.resolveWorktreeIdWithAlias = exports.recordWorktreeAlias = exports.deleteWorktreesByIds = exports.deleteRepositoryWorktrees = exports.migrateWorktreeIdPreservingChildren = exports.getAllWorktreePathIds = exports.getAllWorktreeIds = exports.getWorktreesByRepository = exports.getWorktreeIdsByRepository = exports.getInitialBranch = exports.saveInitialBranch = exports.updateVibeLocalContextWindow = exports.updateVibeLocalModel = exports.updateSelectedAgents = exports.updateCliToolId = exports.updateStatus = exports.updateFavorite = exports.updateLastViewedAt = exports.updateWorktreeLink = exports.updateWorktreeDescription = exports.upsertWorktree = exports.getWorktreeById = exports.getRepositories = exports.getWorktrees = exports.initDatabase = void 0;
|
|
14
|
+
exports.createAssistantMessage = exports.updateAssistantConversation = exports.createAssistantConversation = exports.getAssistantConversationByRepositoryAndCliTool = exports.getAssistantConversationById = exports.updateDailyReportContent = exports.saveDailyReport = exports.getDailyReport = exports.recoverStuckSendingTimers = exports.clearTimerHistory = exports.cleanupOldTimers = exports.getPendingTimerCountByWorktree = exports.cancelTimersByWorktree = exports.cancelTimer = exports.updateTimerStatus = exports.getPendingTimers = exports.getTimerById = exports.getTimersByWorktree = exports.createTimer = exports.WORKTREE_TODO_STATUSES = exports.isWorktreeTodoStatus = exports.reorderWorktreeTodos = exports.deleteWorktreeTodo = exports.updateWorktreeTodo = exports.createWorktreeTodo = exports.getWorktreeTodoById = exports.getTodosByWorktreeId = exports.deleteTodo = exports.updateTodo = exports.createTodo = exports.getTodoById = exports.getAllTodos = exports.getTodosByRepositoryId = exports.MemoDbError = exports.reorderMemos = exports.deleteMemo = exports.updateMemo = exports.createMemo = exports.getMemoById = exports.getMemosByWorktreeId = exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = exports.removeAgentInstance = exports.addAgentInstance = exports.setAgentInstances = exports.countAgentInstances = exports.getAgentInstance = exports.getAgentInstances = exports.deleteSessionState = exports.clearInProgressMessageId = void 0;
|
|
15
|
+
exports.listTaskEvents = exports.ACTIVE_TASK_STATUSES = exports.TERMINAL_TASK_STATUSES = exports.TASK_STATUSES = exports.isTerminalTaskStatus = exports.getActiveTaskForInstance = exports.getActiveTask = exports.listTasks = exports.getTask = exports.createTask = exports.VERIFICATION_TRIGGERS = exports.MAX_RUN_HISTORY_DAYS = exports.MAX_RUN_HISTORY_LIMIT = exports.DEFAULT_RUN_HISTORY_LIMIT = exports.listVerificationRunsForPeriod = exports.listRunningVerificationRuns = exports.getRunningVerificationRun = exports.listVerificationRuns = exports.getVerificationRun = exports.finishGateResult = exports.createGateResult = exports.finishVerificationRun = exports.createVerificationRun = exports.deletePushSubscriptionByEndpoint = exports.updatePushSubscriptionPreferences = exports.getPushSubscriptionsForKind = exports.getAllPushSubscriptions = exports.getPushSubscriptionByEndpoint = exports.upsertPushSubscription = exports.deleteAssistantSessionState = exports.updateAssistantSessionState = exports.getAssistantSessionState = exports.listRunningAssistantExecutions = exports.getRunningAssistantExecutionByConversation = exports.getLatestAssistantExecutionByConversation = exports.getAssistantExecutionById = exports.updateAssistantExecution = exports.createAssistantExecution = exports.archiveAssistantMessagesFrom = exports.archiveAllAssistantMessages = exports.getAssistantMessageById = exports.getAssistantMessages = exports.updateAssistantMessageStatus = void 0;
|
|
16
16
|
// init-db
|
|
17
17
|
var init_db_1 = require("./init-db");
|
|
18
18
|
Object.defineProperty(exports, "initDatabase", { enumerable: true, get: function () { return init_db_1.initDatabase; } });
|
|
@@ -35,9 +35,18 @@ Object.defineProperty(exports, "saveInitialBranch", { enumerable: true, get: fun
|
|
|
35
35
|
Object.defineProperty(exports, "getInitialBranch", { enumerable: true, get: function () { return worktree_db_1.getInitialBranch; } });
|
|
36
36
|
Object.defineProperty(exports, "getWorktreeIdsByRepository", { enumerable: true, get: function () { return worktree_db_1.getWorktreeIdsByRepository; } });
|
|
37
37
|
Object.defineProperty(exports, "getWorktreesByRepository", { enumerable: true, get: function () { return worktree_db_1.getWorktreesByRepository; } });
|
|
38
|
+
Object.defineProperty(exports, "getAllWorktreeIds", { enumerable: true, get: function () { return worktree_db_1.getAllWorktreeIds; } });
|
|
39
|
+
Object.defineProperty(exports, "getAllWorktreePathIds", { enumerable: true, get: function () { return worktree_db_1.getAllWorktreePathIds; } });
|
|
38
40
|
Object.defineProperty(exports, "migrateWorktreeIdPreservingChildren", { enumerable: true, get: function () { return worktree_db_1.migrateWorktreeIdPreservingChildren; } });
|
|
39
41
|
Object.defineProperty(exports, "deleteRepositoryWorktrees", { enumerable: true, get: function () { return worktree_db_1.deleteRepositoryWorktrees; } });
|
|
40
42
|
Object.defineProperty(exports, "deleteWorktreesByIds", { enumerable: true, get: function () { return worktree_db_1.deleteWorktreesByIds; } });
|
|
43
|
+
// worktree-alias-db (Issue #1621: old IDs stay resolvable after a rename)
|
|
44
|
+
var worktree_alias_db_1 = require("./worktree-alias-db");
|
|
45
|
+
Object.defineProperty(exports, "recordWorktreeAlias", { enumerable: true, get: function () { return worktree_alias_db_1.recordWorktreeAlias; } });
|
|
46
|
+
Object.defineProperty(exports, "resolveWorktreeIdWithAlias", { enumerable: true, get: function () { return worktree_alias_db_1.resolveWorktreeIdWithAlias; } });
|
|
47
|
+
Object.defineProperty(exports, "getWorktreeAliases", { enumerable: true, get: function () { return worktree_alias_db_1.getWorktreeAliases; } });
|
|
48
|
+
Object.defineProperty(exports, "getAllWorktreeAliases", { enumerable: true, get: function () { return worktree_alias_db_1.getAllWorktreeAliases; } });
|
|
49
|
+
Object.defineProperty(exports, "getAliasedWorktreeIds", { enumerable: true, get: function () { return worktree_alias_db_1.getAliasedWorktreeIds; } });
|
|
41
50
|
// chat-db
|
|
42
51
|
var chat_db_1 = require("./chat-db");
|
|
43
52
|
Object.defineProperty(exports, "getLastAssistantMessageAt", { enumerable: true, get: function () { return chat_db_1.getLastAssistantMessageAt; } });
|
|
@@ -56,6 +65,7 @@ Object.defineProperty(exports, "recomputeLastUserMessage", { enumerable: true, g
|
|
|
56
65
|
Object.defineProperty(exports, "getMessageById", { enumerable: true, get: function () { return chat_db_1.getMessageById; } });
|
|
57
66
|
Object.defineProperty(exports, "updatePromptData", { enumerable: true, get: function () { return chat_db_1.updatePromptData; } });
|
|
58
67
|
Object.defineProperty(exports, "markPendingPromptsAsAnswered", { enumerable: true, get: function () { return chat_db_1.markPendingPromptsAsAnswered; } });
|
|
68
|
+
Object.defineProperty(exports, "recordAnsweredPrompt", { enumerable: true, get: function () { return chat_db_1.recordAnsweredPrompt; } });
|
|
59
69
|
Object.defineProperty(exports, "ACTIVE_FILTER", { enumerable: true, get: function () { return chat_db_1.ACTIVE_FILTER; } });
|
|
60
70
|
Object.defineProperty(exports, "getMessagesByDateRange", { enumerable: true, get: function () { return chat_db_1.getMessagesByDateRange; } });
|
|
61
71
|
// session-db
|
|
@@ -36,6 +36,9 @@ const v49_verification_runs_1 = require("./v49-verification-runs");
|
|
|
36
36
|
const v50_tasks_1 = require("./v50-tasks");
|
|
37
37
|
const v51_task_events_1 = require("./v51-task-events");
|
|
38
38
|
const v52_orphaned_worktree_children_1 = require("./v52-orphaned-worktree-children");
|
|
39
|
+
const v53_worktree_aliases_1 = require("./v53-worktree-aliases");
|
|
40
|
+
const v54_worktree_id_path_derived_1 = require("./v54-worktree-id-path-derived");
|
|
41
|
+
const v55_compact_churned_worktree_ids_1 = require("./v55-compact-churned-worktree-ids");
|
|
39
42
|
/**
|
|
40
43
|
* Complete ordered list of all migrations.
|
|
41
44
|
* Used internally by the barrel file (db-migrations.ts); NOT exported from the barrel (DR2-004).
|
|
@@ -75,4 +78,7 @@ exports.migrations = [
|
|
|
75
78
|
...v50_tasks_1.v50_migrations,
|
|
76
79
|
...v51_task_events_1.v51_migrations,
|
|
77
80
|
...v52_orphaned_worktree_children_1.v52_migrations,
|
|
81
|
+
...v53_worktree_aliases_1.v53_migrations,
|
|
82
|
+
...v54_worktree_id_path_derived_1.v54_migrations,
|
|
83
|
+
...v55_compact_churned_worktree_ids_1.v55_migrations,
|
|
78
84
|
];
|
|
@@ -17,7 +17,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
17
17
|
* Current schema version
|
|
18
18
|
* Increment this when adding new migrations
|
|
19
19
|
*/
|
|
20
|
-
exports.CURRENT_SCHEMA_VERSION =
|
|
20
|
+
exports.CURRENT_SCHEMA_VERSION = 55;
|
|
21
21
|
/**
|
|
22
22
|
* Get current schema version from database
|
|
23
23
|
*/
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v53: worktree_aliases (Issue #1621, Phase 2).
|
|
4
|
+
*
|
|
5
|
+
* Every ID a worktree has ever answered to, mapped to the ID it answers to now.
|
|
6
|
+
* #1644 froze the ID at first registration, but rows written before that carry
|
|
7
|
+
* a branch-derived ID, and #1645 will renumber them. The moment an ID moves,
|
|
8
|
+
* every URL a human kept — an open tab, a phone, a PWA shortcut, a bookmark, a
|
|
9
|
+
* script's `commandmate send <id>` — points at something that no longer
|
|
10
|
+
* resolves. An alias makes the old ID keep working instead of 404ing.
|
|
11
|
+
*
|
|
12
|
+
* `old_id` is the primary key: one historical ID resolves to exactly one
|
|
13
|
+
* worktree. `worktree_id` cascades, so a deleted worktree takes its aliases
|
|
14
|
+
* with it rather than leaving redirects to a dead row. (The column is also
|
|
15
|
+
* named `worktree_id`, so `getWorktreeChildTables` finds this table on both of
|
|
16
|
+
* its axes and a *rename* re-points the alias as well — an ID renamed twice
|
|
17
|
+
* still resolves in one hop, never a chain.)
|
|
18
|
+
*
|
|
19
|
+
* Resolution order is worktrees-first, aliases-second, and the ID minter is
|
|
20
|
+
* told about alias IDs too (`deriveWorktreeId`'s taken set), so a fresh
|
|
21
|
+
* worktree cannot be handed an ID that an alias would otherwise shadow. Both
|
|
22
|
+
* halves are needed: the index below exists for the second lookup, which runs
|
|
23
|
+
* on every API request whose worktree ID is not a live row.
|
|
24
|
+
*
|
|
25
|
+
* Timestamps are epoch milliseconds (INTEGER), matching v44 onward.
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.v53_migrations = void 0;
|
|
29
|
+
exports.v53_migrations = [
|
|
30
|
+
{
|
|
31
|
+
version: 53,
|
|
32
|
+
name: 'add-worktree-aliases',
|
|
33
|
+
up: (db) => {
|
|
34
|
+
db.exec(`
|
|
35
|
+
CREATE TABLE IF NOT EXISTS worktree_aliases (
|
|
36
|
+
old_id TEXT PRIMARY KEY,
|
|
37
|
+
worktree_id TEXT NOT NULL REFERENCES worktrees(id) ON DELETE CASCADE,
|
|
38
|
+
created_at INTEGER NOT NULL
|
|
39
|
+
);
|
|
40
|
+
`);
|
|
41
|
+
// Aliases are read by old_id (the PK covers that) and swept by
|
|
42
|
+
// worktree_id whenever a worktree is renamed or deleted.
|
|
43
|
+
db.exec(`
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_worktree_aliases_worktree_id
|
|
45
|
+
ON worktree_aliases(worktree_id);
|
|
46
|
+
`);
|
|
47
|
+
},
|
|
48
|
+
down: (db) => {
|
|
49
|
+
db.exec('DROP INDEX IF EXISTS idx_worktree_aliases_worktree_id;');
|
|
50
|
+
db.exec('DROP TABLE IF EXISTS worktree_aliases;');
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
];
|