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
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v54: renumber every existing worktree to its path-derived ID
|
|
4
|
+
* (Issue #1621 Phase 4, delivered by #1645).
|
|
5
|
+
*
|
|
6
|
+
* #1644 stopped the ID from moving on its own — `syncWorktreesToDB` now looks a
|
|
7
|
+
* row up by path and keeps whatever ID it already carries. What it deliberately
|
|
8
|
+
* did NOT do is touch the rows already in the database: those still hold
|
|
9
|
+
* `sanitize(repoName)-sanitize(branch)`, so every one of them is still a
|
|
10
|
+
* branch-derived ID that merely happens to be frozen. The failures #1621
|
|
11
|
+
* enumerates are only really gone once the stored IDs are the directory's.
|
|
12
|
+
*
|
|
13
|
+
* This migration is the one moment the whole table moves at once, which is what
|
|
14
|
+
* makes the two problems below real rather than theoretical.
|
|
15
|
+
*
|
|
16
|
+
* ## Why the renaming is staged through temporary IDs
|
|
17
|
+
*
|
|
18
|
+
* One worktree's NEW ID can be another worktree's CURRENT ID. The design's own
|
|
19
|
+
* example: the directory registered today as `mycodebranchdesk-main` (repo
|
|
20
|
+
* `MyCodeBranchDesk`, branch `main`) is at `.../commandmate-main`, so its new ID
|
|
21
|
+
* is `commandmate-main` — which is exactly the shape another row could already
|
|
22
|
+
* be using. Renaming pairwise would then hit
|
|
23
|
+
* `renameWorktreeIdPreservingChildren`'s collision branch, which *merges* the
|
|
24
|
+
* source into the destination and deletes the source row: silent data loss. A
|
|
25
|
+
* straight swap (A→B, B→A) has no safe ordering at all. Every rename therefore
|
|
26
|
+
* goes `old → cmate-mig54-<n> → new`, so no intermediate state can collide.
|
|
27
|
+
*
|
|
28
|
+
* ## Why an ID is never minted onto an ID somebody else is vacating
|
|
29
|
+
*
|
|
30
|
+
* A retired ID does not disappear, it becomes an alias, and live worktrees beat
|
|
31
|
+
* aliases at resolution time. So if worktree B were handed `x` — the ID worktree
|
|
32
|
+
* A is retiring — every bookmark of A's `x` would silently start landing on B.
|
|
33
|
+
* The taken set therefore holds **every current worktree ID** and **every
|
|
34
|
+
* pre-existing alias**, minus the row's own ID (which it is free to keep). A
|
|
35
|
+
* blocked candidate falls back to `basename-<sha256(path)[0..8]>`, exactly as a
|
|
36
|
+
* same-basename collision does.
|
|
37
|
+
*
|
|
38
|
+
* ## What follows the move, and what deliberately does not
|
|
39
|
+
*
|
|
40
|
+
* Child rows follow through `renameWorktreeIdPreservingChildren`, which
|
|
41
|
+
* enumerates by `worktree_id` column rather than by declared foreign key — the
|
|
42
|
+
* only reason `tasks` (#1548), `verification_runs` (#1544) and the aliases
|
|
43
|
+
* themselves come along. `skill_operations` does NOT: it is an append-only
|
|
44
|
+
* ledger whose `BEFORE UPDATE ... RAISE(ABORT)` trigger (#1234) would abort this
|
|
45
|
+
* migration outright. Its rows keep the ID that was in force when they were
|
|
46
|
+
* written, which is what an audit log is for, and the alias recorded here keeps
|
|
47
|
+
* them resolvable.
|
|
48
|
+
*
|
|
49
|
+
* tmux sessions and in-process state cannot be reached from a migration. They
|
|
50
|
+
* are reconciled at startup by `reconcileWorktreeSessionsFromAliases`, which
|
|
51
|
+
* reads the very alias rows this migration writes (`server.ts`).
|
|
52
|
+
*/
|
|
53
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
54
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
55
|
+
};
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.v54_migrations = void 0;
|
|
58
|
+
exports.planWorktreeIdRenumbering = planWorktreeIdRenumbering;
|
|
59
|
+
const path_1 = __importDefault(require("path"));
|
|
60
|
+
const worktree_id_1 = require("../../../lib/git/worktree-id");
|
|
61
|
+
const worktree_id_rename_1 = require("./worktree-id-rename");
|
|
62
|
+
/**
|
|
63
|
+
* Prefix for the intermediate IDs used by the two-stage renaming.
|
|
64
|
+
*
|
|
65
|
+
* Deliberately not a plausible directory basename, and the rows carrying it
|
|
66
|
+
* exist only between the two loops below — both inside the migration's
|
|
67
|
+
* transaction, so no reader ever observes one.
|
|
68
|
+
*/
|
|
69
|
+
const TEMP_ID_PREFIX = 'cmate-mig54-';
|
|
70
|
+
/**
|
|
71
|
+
* Decide the new ID for every worktree row.
|
|
72
|
+
*
|
|
73
|
+
* Exported for the unit tests: the planning is the part with the interesting
|
|
74
|
+
* rules (collision, self-retention, alias shadowing), and it is a pure function
|
|
75
|
+
* of the rows plus the reserved set.
|
|
76
|
+
*
|
|
77
|
+
* @param rows - Every worktree row, `id` and `path`
|
|
78
|
+
* @param aliasIds - IDs already answerable as aliases
|
|
79
|
+
* @returns The renames to apply, in row order; rows keeping their ID are omitted
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
function planWorktreeIdRenumbering(rows, aliasIds) {
|
|
83
|
+
const currentIds = new Set(rows.map((row) => row.id));
|
|
84
|
+
const reserved = new Set([...currentIds, ...aliasIds]);
|
|
85
|
+
const assigned = new Set();
|
|
86
|
+
const plan = [];
|
|
87
|
+
for (const row of rows) {
|
|
88
|
+
const taken = new Set([...reserved, ...assigned]);
|
|
89
|
+
// A row is never blocked by its own ID: when the directory basename already
|
|
90
|
+
// equals it, the right answer is "keep it" and no rename is emitted.
|
|
91
|
+
taken.delete(row.id);
|
|
92
|
+
const newId = (0, worktree_id_1.deriveWorktreeId)(path_1.default.resolve(row.path), taken);
|
|
93
|
+
assigned.add(newId);
|
|
94
|
+
if (newId !== row.id)
|
|
95
|
+
plan.push({ oldId: row.id, newId });
|
|
96
|
+
}
|
|
97
|
+
return plan;
|
|
98
|
+
}
|
|
99
|
+
exports.v54_migrations = [
|
|
100
|
+
{
|
|
101
|
+
version: 54,
|
|
102
|
+
name: 'renumber-worktree-ids-from-path',
|
|
103
|
+
up: (db) => {
|
|
104
|
+
const rows = db
|
|
105
|
+
.prepare('SELECT id, path FROM worktrees ORDER BY id')
|
|
106
|
+
.all();
|
|
107
|
+
if (rows.length === 0) {
|
|
108
|
+
console.log('No worktrees to renumber');
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const aliasTableExists = db
|
|
112
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'worktree_aliases'")
|
|
113
|
+
.get() !== undefined;
|
|
114
|
+
const aliasIds = aliasTableExists
|
|
115
|
+
? db.prepare('SELECT old_id FROM worktree_aliases').all().map((row) => row.old_id)
|
|
116
|
+
: [];
|
|
117
|
+
const plan = planWorktreeIdRenumbering(rows, aliasIds);
|
|
118
|
+
if (plan.length === 0) {
|
|
119
|
+
console.log(`Worktree IDs already path-derived (${rows.length} row(s) checked)`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Temporary IDs must not collide with anything real, including an ID this
|
|
123
|
+
// migration is about to hand out.
|
|
124
|
+
const inUse = new Set([
|
|
125
|
+
...rows.map((row) => row.id),
|
|
126
|
+
...aliasIds,
|
|
127
|
+
...plan.map((entry) => entry.newId),
|
|
128
|
+
]);
|
|
129
|
+
const tempIds = plan.map((_entry, index) => {
|
|
130
|
+
let candidate = `${TEMP_ID_PREFIX}${index}`;
|
|
131
|
+
for (let attempt = 1; inUse.has(candidate); attempt++) {
|
|
132
|
+
candidate = `${TEMP_ID_PREFIX}${index}-${attempt}`;
|
|
133
|
+
}
|
|
134
|
+
inUse.add(candidate);
|
|
135
|
+
return candidate;
|
|
136
|
+
});
|
|
137
|
+
// A single timestamp for every alias this migration writes, so the rows
|
|
138
|
+
// read as one event. (`Date.now()` is called once rather than per row for
|
|
139
|
+
// the same reason.)
|
|
140
|
+
const now = Date.now();
|
|
141
|
+
// Stage 1: park every row on an ID nothing else can want.
|
|
142
|
+
plan.forEach((entry, index) => {
|
|
143
|
+
(0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, entry.oldId, tempIds[index], now);
|
|
144
|
+
});
|
|
145
|
+
// Stage 2: into the real IDs, now guaranteed free.
|
|
146
|
+
plan.forEach((entry, index) => {
|
|
147
|
+
(0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, tempIds[index], entry.newId, now);
|
|
148
|
+
});
|
|
149
|
+
// Stage 1 recorded `oldId → temp` and stage 2 re-pointed it to
|
|
150
|
+
// `oldId → newId` (aliases are a child table, so the sweep moved them).
|
|
151
|
+
// What stage 2 also wrote is `temp → newId`, which is a redirect for an ID
|
|
152
|
+
// that never left this transaction — drop it so it neither answers
|
|
153
|
+
// requests nor blocks a future ID.
|
|
154
|
+
const deleteAlias = aliasTableExists
|
|
155
|
+
? db.prepare('DELETE FROM worktree_aliases WHERE old_id = ?')
|
|
156
|
+
: null;
|
|
157
|
+
if (deleteAlias) {
|
|
158
|
+
for (const tempId of tempIds)
|
|
159
|
+
deleteAlias.run(tempId);
|
|
160
|
+
}
|
|
161
|
+
for (const entry of plan) {
|
|
162
|
+
console.log(`Renumbered worktree ${entry.oldId} -> ${entry.newId}`);
|
|
163
|
+
}
|
|
164
|
+
console.log(`Renumbered ${plan.length} of ${rows.length} worktree(s) to path-derived IDs`);
|
|
165
|
+
},
|
|
166
|
+
down: (db) => {
|
|
167
|
+
// The alias rows record where each ID came from, so the move is reversible
|
|
168
|
+
// as long as they are still there. Same two-stage staging, in reverse.
|
|
169
|
+
const aliasTableExists = db
|
|
170
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'worktree_aliases'")
|
|
171
|
+
.get() !== undefined;
|
|
172
|
+
if (!aliasTableExists) {
|
|
173
|
+
console.log('No worktree_aliases table: nothing to roll back');
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const aliases = db
|
|
177
|
+
.prepare(`SELECT a.old_id, a.worktree_id
|
|
178
|
+
FROM worktree_aliases AS a
|
|
179
|
+
JOIN worktrees AS w ON w.id = a.worktree_id
|
|
180
|
+
ORDER BY a.old_id`)
|
|
181
|
+
.all();
|
|
182
|
+
if (aliases.length === 0) {
|
|
183
|
+
console.log('No worktree aliases to roll back');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const now = Date.now();
|
|
187
|
+
const tempIds = aliases.map((_alias, index) => `${TEMP_ID_PREFIX}down-${index}`);
|
|
188
|
+
aliases.forEach((alias, index) => {
|
|
189
|
+
(0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, alias.worktree_id, tempIds[index], now);
|
|
190
|
+
});
|
|
191
|
+
aliases.forEach((alias, index) => {
|
|
192
|
+
(0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, tempIds[index], alias.old_id, now);
|
|
193
|
+
});
|
|
194
|
+
const deleteAlias = db.prepare('DELETE FROM worktree_aliases WHERE old_id = ?');
|
|
195
|
+
for (const tempId of tempIds)
|
|
196
|
+
deleteAlias.run(tempId);
|
|
197
|
+
// The forward IDs are now the historical ones; the rollback should not
|
|
198
|
+
// leave them redirecting back to the IDs it just undid.
|
|
199
|
+
for (const alias of aliases)
|
|
200
|
+
deleteAlias.run(alias.worktree_id);
|
|
201
|
+
console.log(`Rolled back ${aliases.length} worktree ID renumbering(s)`);
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
];
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v55: fold worktree IDs that ran away back onto their directory name
|
|
4
|
+
* (Issue #1658).
|
|
5
|
+
*
|
|
6
|
+
* ## What went wrong
|
|
7
|
+
*
|
|
8
|
+
* `syncWorktreesToDB` resolved "which ID does this path already own?" against
|
|
9
|
+
* `worktrees.repository_path`, but identity lives in `worktrees.path` — that is
|
|
10
|
+
* the `NOT NULL UNIQUE` column, one row per directory for the whole table.
|
|
11
|
+
* `repository_path` only records which scan root last upserted the row, and when
|
|
12
|
+
* the *same* git repository is registered under two scan roots (a repository and
|
|
13
|
+
* one of its own linked worktrees, both listed in `WORKTREE_REPOS`),
|
|
14
|
+
* `git worktree list` returns the identical path set from either one. The column
|
|
15
|
+
* then ping-pongs, the per-repository lookup came up empty on whichever pass did
|
|
16
|
+
* not write it last, and the row's ID was re-derived — against a taken set
|
|
17
|
+
* containing its own current ID and every ID it had already been renamed away
|
|
18
|
+
* from. `deriveWorktreeId` answered by walking one rung further up the digest
|
|
19
|
+
* ladder, so every sync appended another 8 hex digits:
|
|
20
|
+
*
|
|
21
|
+
* commandagent-bon0-run
|
|
22
|
+
* commandagent-bon0-run-2f4530fe
|
|
23
|
+
* commandagent-bon0-run-2f4530fe1cf1f9f8
|
|
24
|
+
* commandagent-bon0-run-2f4530fe1cf1f9f85d499f80
|
|
25
|
+
* …
|
|
26
|
+
*
|
|
27
|
+
* Production reached 81 characters, at which point the tmux session name derived
|
|
28
|
+
* from the ID no longer matched the running session and the UI lost it.
|
|
29
|
+
*
|
|
30
|
+
* ## Why a migration, and not just the fix
|
|
31
|
+
*
|
|
32
|
+
* The fix stops the growth; it does not undo it, because it works by *keeping*
|
|
33
|
+
* whatever ID a path already has. Left alone, those five rows would stay
|
|
34
|
+
* permanently on their inflated IDs and the abandoned rungs would stay reserved
|
|
35
|
+
* forever (the minter counts aliases as taken). This migration is the one moment
|
|
36
|
+
* they are collapsed.
|
|
37
|
+
*
|
|
38
|
+
* ## The rules
|
|
39
|
+
*
|
|
40
|
+
* - A row is compacted only when re-deriving its ID — with the path's **own**
|
|
41
|
+
* history excluded from the taken set, which is precisely what was missing —
|
|
42
|
+
* yields something *shorter*. Nothing else moves; a row whose short ID is
|
|
43
|
+
* genuinely taken by another directory keeps what it has.
|
|
44
|
+
* - Another row's ID and another row's alias are never taken. Live worktrees beat
|
|
45
|
+
* aliases at resolution, so handing out an ID somebody else still answers to
|
|
46
|
+
* would silently redirect their bookmarks (the same rule v54 follows).
|
|
47
|
+
* - The ID a row is leaving becomes an alias, via
|
|
48
|
+
* {@link renameWorktreeIdPreservingChildren} — that is what keeps the URLs,
|
|
49
|
+
* open tabs and `commandmate send <id>` lines that were minted during the
|
|
50
|
+
* churn answering.
|
|
51
|
+
* - The **intermediate rungs** are deleted. Every one of them points at the same
|
|
52
|
+
* worktree as the rung above it, and none survived longer than the second it
|
|
53
|
+
* took the next sync to replace it (the production alias rows are ~1s apart);
|
|
54
|
+
* keeping them would reserve those IDs for good. Aliases that are not
|
|
55
|
+
* ladder-shaped — `commandagent-develop-develop`, `commandagent-develop-
|
|
56
|
+
* detached-1c64d87f`, anything from the branch-derived era — are genuine former
|
|
57
|
+
* names and are kept. {@link isDerivedWorktreeId} is what tells them apart.
|
|
58
|
+
*
|
|
59
|
+
* No temporary-ID staging (unlike v54): a destination is only ever chosen from
|
|
60
|
+
* IDs no live row holds, so `renameWorktreeIdPreservingChildren` can never reach
|
|
61
|
+
* its merge-and-delete collision branch.
|
|
62
|
+
*/
|
|
63
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
64
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
65
|
+
};
|
|
66
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
+
exports.v55_migrations = void 0;
|
|
68
|
+
exports.planWorktreeIdCompaction = planWorktreeIdCompaction;
|
|
69
|
+
const path_1 = __importDefault(require("path"));
|
|
70
|
+
const worktree_id_1 = require("../../../lib/git/worktree-id");
|
|
71
|
+
const worktree_id_rename_1 = require("./worktree-id-rename");
|
|
72
|
+
/**
|
|
73
|
+
* Decide which rows collapse, and which of their aliases go with them.
|
|
74
|
+
*
|
|
75
|
+
* Exported for the unit tests: the rules (self-history exclusion, "shorter
|
|
76
|
+
* only", ladder-vs-genuine alias) are the interesting part and are a pure
|
|
77
|
+
* function of the rows plus the aliases.
|
|
78
|
+
*
|
|
79
|
+
* @param rows - Every worktree row, `id` and `path`
|
|
80
|
+
* @param aliases - Every alias row
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
function planWorktreeIdCompaction(rows, aliases) {
|
|
84
|
+
const aliasesByTarget = new Map();
|
|
85
|
+
for (const alias of aliases) {
|
|
86
|
+
const list = aliasesByTarget.get(alias.worktreeId);
|
|
87
|
+
if (list)
|
|
88
|
+
list.push(alias.oldId);
|
|
89
|
+
else
|
|
90
|
+
aliasesByTarget.set(alias.worktreeId, [alias.oldId]);
|
|
91
|
+
}
|
|
92
|
+
const reserved = new Set([...rows.map((row) => row.id), ...aliases.map((a) => a.oldId)]);
|
|
93
|
+
const assigned = new Set();
|
|
94
|
+
const renames = [];
|
|
95
|
+
const droppedAliasIds = [];
|
|
96
|
+
for (const row of rows) {
|
|
97
|
+
const resolvedPath = path_1.default.resolve(row.path);
|
|
98
|
+
const ownAliasIds = aliasesByTarget.get(row.id) ?? [];
|
|
99
|
+
// The row's own history cannot block the row: its current ID and every ID it
|
|
100
|
+
// already answers to are exactly the rungs it is climbing away from.
|
|
101
|
+
const taken = new Set([...reserved, ...assigned]);
|
|
102
|
+
taken.delete(row.id);
|
|
103
|
+
for (const ownAliasId of ownAliasIds)
|
|
104
|
+
taken.delete(ownAliasId);
|
|
105
|
+
const newId = (0, worktree_id_1.deriveWorktreeId)(resolvedPath, taken);
|
|
106
|
+
// Only ever collapse. A longer or equal answer means the short forms are
|
|
107
|
+
// genuinely spoken for by other directories, and moving would buy nothing.
|
|
108
|
+
if (newId.length >= row.id.length) {
|
|
109
|
+
assigned.add(row.id);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
assigned.add(newId);
|
|
113
|
+
renames.push({ oldId: row.id, newId });
|
|
114
|
+
for (const ownAliasId of ownAliasIds) {
|
|
115
|
+
// Strictly longer than the ID we are landing on, and of a shape only this
|
|
116
|
+
// path's own derivation produces: an abandoned rung, nothing else.
|
|
117
|
+
if (ownAliasId.length > newId.length && (0, worktree_id_1.isDerivedWorktreeId)(ownAliasId, resolvedPath)) {
|
|
118
|
+
droppedAliasIds.push(ownAliasId);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { renames, droppedAliasIds };
|
|
123
|
+
}
|
|
124
|
+
exports.v55_migrations = [
|
|
125
|
+
{
|
|
126
|
+
version: 55,
|
|
127
|
+
name: 'compact-churned-worktree-ids',
|
|
128
|
+
up: (db) => {
|
|
129
|
+
const rows = db
|
|
130
|
+
.prepare('SELECT id, path FROM worktrees ORDER BY id')
|
|
131
|
+
.all();
|
|
132
|
+
if (rows.length === 0) {
|
|
133
|
+
console.log('No worktrees to compact');
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const aliasTableExists = db
|
|
137
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'worktree_aliases'")
|
|
138
|
+
.get() !== undefined;
|
|
139
|
+
const aliases = aliasTableExists
|
|
140
|
+
? db
|
|
141
|
+
.prepare('SELECT old_id, worktree_id FROM worktree_aliases ORDER BY old_id')
|
|
142
|
+
.all().map((row) => ({ oldId: row.old_id, worktreeId: row.worktree_id }))
|
|
143
|
+
: [];
|
|
144
|
+
const { renames, droppedAliasIds } = planWorktreeIdCompaction(rows, aliases);
|
|
145
|
+
if (renames.length === 0) {
|
|
146
|
+
console.log(`No churned worktree IDs to compact (${rows.length} row(s) checked)`);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// Drop the abandoned rungs before the rename, so the ID being vacated is
|
|
150
|
+
// the only historical name this worktree is left with besides its genuine
|
|
151
|
+
// former names.
|
|
152
|
+
if (aliasTableExists && droppedAliasIds.length > 0) {
|
|
153
|
+
const deleteAlias = db.prepare('DELETE FROM worktree_aliases WHERE old_id = ?');
|
|
154
|
+
for (const aliasId of droppedAliasIds)
|
|
155
|
+
deleteAlias.run(aliasId);
|
|
156
|
+
}
|
|
157
|
+
// One timestamp for every alias this migration writes, so the rows read as
|
|
158
|
+
// a single event (same reasoning as v54).
|
|
159
|
+
const now = Date.now();
|
|
160
|
+
for (const rename of renames) {
|
|
161
|
+
(0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, rename.oldId, rename.newId, now);
|
|
162
|
+
console.log(`Compacted worktree ${rename.oldId} -> ${rename.newId}`);
|
|
163
|
+
}
|
|
164
|
+
console.log(`Compacted ${renames.length} of ${rows.length} worktree ID(s); ` +
|
|
165
|
+
`dropped ${droppedAliasIds.length} intermediate alias(es)`);
|
|
166
|
+
},
|
|
167
|
+
down: (db) => {
|
|
168
|
+
// The inverse is well defined even though the intermediate rungs are gone:
|
|
169
|
+
// the ID each row was compacted *from* was recorded as an alias by the
|
|
170
|
+
// rename, and it is the longest ladder-shaped alias the row still has (all
|
|
171
|
+
// the shorter rungs were deleted on the way forward). Genuine former names
|
|
172
|
+
// are not ladder-shaped, so they are never mistaken for it.
|
|
173
|
+
const aliasTableExists = db
|
|
174
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'worktree_aliases'")
|
|
175
|
+
.get() !== undefined;
|
|
176
|
+
if (!aliasTableExists) {
|
|
177
|
+
console.log('No worktree_aliases table: nothing to roll back');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const rows = db
|
|
181
|
+
.prepare('SELECT id, path FROM worktrees ORDER BY id')
|
|
182
|
+
.all();
|
|
183
|
+
const deleteAlias = db.prepare('DELETE FROM worktree_aliases WHERE old_id = ?');
|
|
184
|
+
const now = Date.now();
|
|
185
|
+
let restored = 0;
|
|
186
|
+
for (const row of rows) {
|
|
187
|
+
const resolvedPath = path_1.default.resolve(row.path);
|
|
188
|
+
const candidates = db
|
|
189
|
+
.prepare('SELECT old_id FROM worktree_aliases WHERE worktree_id = ?')
|
|
190
|
+
.all(row.id)
|
|
191
|
+
.map((alias) => alias.old_id)
|
|
192
|
+
.filter((oldId) => oldId.length > row.id.length && (0, worktree_id_1.isDerivedWorktreeId)(oldId, resolvedPath))
|
|
193
|
+
.sort((a, b) => b.length - a.length || a.localeCompare(b));
|
|
194
|
+
const previousId = candidates[0];
|
|
195
|
+
if (!previousId)
|
|
196
|
+
continue;
|
|
197
|
+
deleteAlias.run(previousId);
|
|
198
|
+
(0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, row.id, previousId, now);
|
|
199
|
+
// The forward ID is now the historical one; the rollback should not
|
|
200
|
+
// leave it redirecting back to the ID it just undid.
|
|
201
|
+
deleteAlias.run(row.id);
|
|
202
|
+
restored++;
|
|
203
|
+
}
|
|
204
|
+
console.log(`Rolled back ${restored} worktree ID compaction(s)`);
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
];
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Moving a worktree's primary key without losing anything hanging off it.
|
|
4
|
+
*
|
|
5
|
+
* Lives under `migrations/` for the same reason `worktree-child-tables.ts` does,
|
|
6
|
+
* and it is not a stylistic choice: the Phase 4 renumbering (#1645) needs this
|
|
7
|
+
* logic, and a migration that imports `worktree-db.ts` inherits every
|
|
8
|
+
* `vi.mock('@/lib/db/worktree-db')` in the suite — four suites do exactly that
|
|
9
|
+
* today, and it is what made `runMigrations` throw
|
|
10
|
+
* `No "getDeletableWorktreeChildTables" export is defined` before v52 was moved.
|
|
11
|
+
* The same reasoning applies to `worktree-alias-db.ts`, so the alias INSERT is
|
|
12
|
+
* written here and `recordWorktreeAlias` delegates to it rather than the other
|
|
13
|
+
* way round.
|
|
14
|
+
*
|
|
15
|
+
* Issue #1151 (preserve children across a rename), #1621 (FK-less tables,
|
|
16
|
+
* aliases), #1645 (bulk renumbering).
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.recordWorktreeAliasRow = recordWorktreeAliasRow;
|
|
20
|
+
exports.deleteWorktreeChildRows = deleteWorktreeChildRows;
|
|
21
|
+
exports.renameWorktreeIdPreservingChildren = renameWorktreeIdPreservingChildren;
|
|
22
|
+
const worktree_child_tables_1 = require("./worktree-child-tables");
|
|
23
|
+
/** Whether `worktree_aliases` exists in this database. */
|
|
24
|
+
function hasAliasTable(db) {
|
|
25
|
+
const row = db
|
|
26
|
+
.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'worktree_aliases'")
|
|
27
|
+
.get();
|
|
28
|
+
return row !== undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Record that `oldId` used to name the worktree now known as `worktreeId`.
|
|
32
|
+
*
|
|
33
|
+
* The implementation behind `recordWorktreeAlias` (`worktree-alias-db.ts`),
|
|
34
|
+
* kept here so migrations can reach it without importing that module. See that
|
|
35
|
+
* function's doc comment for the rules; in short:
|
|
36
|
+
*
|
|
37
|
+
* - a self-alias is dropped (it would resolve to itself);
|
|
38
|
+
* - an alias whose `old_id` equals the destination is deleted, because that ID
|
|
39
|
+
* names a live worktree again and the live row must win;
|
|
40
|
+
* - re-recording an existing `old_id` re-points it, so A→B→C resolves A→C in
|
|
41
|
+
* one hop rather than a chain.
|
|
42
|
+
*
|
|
43
|
+
* @param db - Database instance (caller supplies the transaction, if any)
|
|
44
|
+
* @param oldId - The ID that is being retired
|
|
45
|
+
* @param worktreeId - The ID it should resolve to from now on
|
|
46
|
+
* @param now - Timestamp in epoch milliseconds
|
|
47
|
+
*/
|
|
48
|
+
function recordWorktreeAliasRow(db, oldId, worktreeId, now) {
|
|
49
|
+
if (!oldId || !worktreeId || oldId === worktreeId)
|
|
50
|
+
return;
|
|
51
|
+
if (!hasAliasTable(db))
|
|
52
|
+
return;
|
|
53
|
+
// The destination ID now names a live worktree; any alias claiming it as a
|
|
54
|
+
// historical name is stale and would only confuse resolution.
|
|
55
|
+
db.prepare('DELETE FROM worktree_aliases WHERE old_id = ?').run(worktreeId);
|
|
56
|
+
db.prepare(`INSERT INTO worktree_aliases (old_id, worktree_id, created_at)
|
|
57
|
+
VALUES (?, ?, ?)
|
|
58
|
+
ON CONFLICT(old_id) DO UPDATE SET
|
|
59
|
+
worktree_id = excluded.worktree_id,
|
|
60
|
+
created_at = excluded.created_at`).run(oldId, worktreeId, now);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Delete every child row pointing at any of `worktreeIds`.
|
|
64
|
+
*
|
|
65
|
+
* Deliberately covers *all* deletable child tables, not just the FK-less ones:
|
|
66
|
+
* doing so makes deletion correct even when `PRAGMA foreign_keys` is off, and
|
|
67
|
+
* the extra statements against CASCADE tables remove rows that would have been
|
|
68
|
+
* removed anyway. Append-only ledgers are skipped (see getWriteGuardedTables).
|
|
69
|
+
* Must run before the parent row is deleted (Issue #1621).
|
|
70
|
+
*/
|
|
71
|
+
function deleteWorktreeChildRows(db, worktreeIds, children = (0, worktree_child_tables_1.getWorktreeChildTables)(db)) {
|
|
72
|
+
if (worktreeIds.length === 0)
|
|
73
|
+
return;
|
|
74
|
+
const { noDelete } = (0, worktree_child_tables_1.getWriteGuardedTables)(db);
|
|
75
|
+
const placeholders = worktreeIds.map(() => '?').join(',');
|
|
76
|
+
for (const { table, column } of children) {
|
|
77
|
+
if (noDelete.has(table))
|
|
78
|
+
continue;
|
|
79
|
+
db.prepare(`DELETE FROM "${table}" WHERE "${column}" IN (${placeholders})`).run(...worktreeIds);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Rename a worktree row's primary key from `oldId` to `newId`, re-pointing every
|
|
84
|
+
* child table's foreign key so no CASCADE deletion occurs. This is what makes a
|
|
85
|
+
* same-directory branch switch preserve chat history and all related data
|
|
86
|
+
* instead of destroying it (Issue #1151).
|
|
87
|
+
*
|
|
88
|
+
* "Every child table" means every table carrying a worktree reference, not just
|
|
89
|
+
* the ones that declare a foreign key: `tasks`, `verification_runs` and
|
|
90
|
+
* `skill_operations` do not, and used to be left addressing an ID that no
|
|
91
|
+
* longer resolves (Issue #1621).
|
|
92
|
+
*
|
|
93
|
+
* Append-only ledgers are the one exception, and the schema states it itself —
|
|
94
|
+
* `skill_operations` aborts any UPDATE (#1234). An immutable audit row records
|
|
95
|
+
* what happened under the identity in force at the time, and rewriting it is
|
|
96
|
+
* precisely what its trigger exists to prevent; attempting it does not fail
|
|
97
|
+
* quietly either, it aborts the enclosing transaction and takes the rename with
|
|
98
|
+
* it (measured). See getWriteGuardedTables.
|
|
99
|
+
*
|
|
100
|
+
* Must be called inside a transaction. `PRAGMA defer_foreign_keys` defers FK
|
|
101
|
+
* enforcement to COMMIT, letting us repoint the parent PK and its children in
|
|
102
|
+
* any order without needing `ON UPDATE CASCADE` on every constraint.
|
|
103
|
+
*
|
|
104
|
+
* @param db - Database instance
|
|
105
|
+
* @param oldId - Current primary key
|
|
106
|
+
* @param newId - Primary key it should have
|
|
107
|
+
* @param now - Timestamp recorded on the alias row (epoch milliseconds)
|
|
108
|
+
*/
|
|
109
|
+
function renameWorktreeIdPreservingChildren(db, oldId, newId, now = Date.now()) {
|
|
110
|
+
if (oldId === newId)
|
|
111
|
+
return;
|
|
112
|
+
const oldExists = db.prepare('SELECT 1 FROM worktrees WHERE id = ?').get(oldId);
|
|
113
|
+
if (!oldExists)
|
|
114
|
+
return;
|
|
115
|
+
// Defer FK checks until COMMIT so the parent PK and child FKs can be updated
|
|
116
|
+
// independently. Resets automatically at the end of the transaction.
|
|
117
|
+
db.pragma('defer_foreign_keys = ON');
|
|
118
|
+
const newExists = db.prepare('SELECT 1 FROM worktrees WHERE id = ?').get(newId);
|
|
119
|
+
const { noUpdate } = (0, worktree_child_tables_1.getWriteGuardedTables)(db);
|
|
120
|
+
const allChildren = (0, worktree_child_tables_1.getWorktreeChildTables)(db);
|
|
121
|
+
const children = allChildren.filter(({ table }) => !noUpdate.has(table));
|
|
122
|
+
if (newExists) {
|
|
123
|
+
// Collision guard. `path` is UNIQUE so two rows for the same directory
|
|
124
|
+
// should never coexist, but if the DB is already inconsistent keep the
|
|
125
|
+
// destination row's data and fold in the source's non-conflicting children.
|
|
126
|
+
for (const { table, column } of children) {
|
|
127
|
+
db.prepare(`UPDATE OR IGNORE "${table}" SET "${column}" = ? WHERE "${column}" = ?`).run(newId, oldId);
|
|
128
|
+
}
|
|
129
|
+
// Conflicting leftovers are dropped explicitly rather than left to CASCADE:
|
|
130
|
+
// tables without a foreign key never cascade, so relying on the parent
|
|
131
|
+
// delete alone would strand their rows on a dead ID (#1621).
|
|
132
|
+
deleteWorktreeChildRows(db, [oldId], allChildren);
|
|
133
|
+
db.prepare('DELETE FROM worktrees WHERE id = ?').run(oldId);
|
|
134
|
+
recordWorktreeAliasRow(db, oldId, newId, now);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
// Normal rename: move the parent PK, then repoint all child rows.
|
|
138
|
+
db.prepare('UPDATE worktrees SET id = ? WHERE id = ?').run(newId, oldId);
|
|
139
|
+
for (const { table, column } of children) {
|
|
140
|
+
db.prepare(`UPDATE "${table}" SET "${column}" = ? WHERE "${column}" = ?`).run(newId, oldId);
|
|
141
|
+
}
|
|
142
|
+
// The rename is what retires `oldId`, so this is the one place that knows an
|
|
143
|
+
// alias is needed. Recording it here (rather than at each call site) means
|
|
144
|
+
// every path that moves an ID — sync, the #1645 bulk migration, a future
|
|
145
|
+
// directory move — keeps old URLs and old `commandmate send <id>` lines
|
|
146
|
+
// answering, without any of them having to remember to.
|
|
147
|
+
//
|
|
148
|
+
// Runs AFTER the child sweep on purpose: `worktree_aliases` carries a
|
|
149
|
+
// `worktree_id`, so the loop above has already re-pointed the aliases this
|
|
150
|
+
// worktree accumulated earlier. A→B→C therefore leaves A→C and B→C, never a
|
|
151
|
+
// chain that resolution would have to walk.
|
|
152
|
+
recordWorktreeAliasRow(db, oldId, newId, now);
|
|
153
|
+
}
|