commandmate 0.18.0 → 0.20.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 +230 -223
- package/.next/app-path-routes-manifest.json +32 -32
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.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 +2 -2
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js +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/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_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 +32 -32
- package/.next/server/chunks/1029.js +1 -0
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1598.js +4 -0
- package/.next/server/chunks/3042.js +1 -1
- 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/3753.js +23 -23
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/406.js +5 -5
- package/.next/server/chunks/{1185.js → 5048.js} +1 -1
- package/.next/server/chunks/5959.js +3 -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 +6 -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/8536.js +1 -0
- package/.next/server/chunks/8543.js +1 -0
- package/.next/server/chunks/8807.js +397 -378
- 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/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/{6488-109e3825c7249e47.js → 6488-3e7539550c3ef358.js} +1 -1
- package/.next/static/chunks/744-fa8c0ae444c8338c.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/templates/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/todos/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-214ee8b97dca856b.js +1 -0
- package/.next/trace +12 -12
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/README.md +10 -1
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +12 -4
- 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 +115 -4
- package/dist/cli/commands/instances.d.ts +24 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +44 -0
- 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 +13 -4
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +24 -14
- 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 +4 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +82 -7
- 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 +47 -14
- package/dist/cli/types/index.d.ts +16 -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/pager.d.ts +28 -0
- package/dist/cli/utils/pager.d.ts.map +1 -0
- package/dist/cli/utils/pager.js +57 -0
- 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/lib/detection/ansi.d.ts +30 -0
- package/dist/lib/detection/ansi.d.ts.map +1 -0
- package/dist/lib/detection/ansi.js +39 -0
- package/dist/lib/tmux/transcript-squeeze.d.ts +76 -0
- package/dist/lib/tmux/transcript-squeeze.d.ts.map +1 -0
- package/dist/lib/tmux/transcript-squeeze.js +96 -0
- package/dist/server/server.js +125 -14
- package/dist/server/src/config/tmux-pane-config.js +33 -1
- package/dist/server/src/lib/auto-yes-state.js +64 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +2 -1
- package/dist/server/src/lib/cli-tools/codex.js +3 -2
- package/dist/server/src/lib/cli-tools/copilot.js +2 -2
- package/dist/server/src/lib/cli-tools/gemini.js +2 -2
- package/dist/server/src/lib/cli-tools/opencode.js +2 -2
- package/dist/server/src/lib/cli-tools/vibe-local.js +2 -2
- package/dist/server/src/lib/db/agent-instances-db.js +53 -0
- package/dist/server/src/lib/db/db-repository.js +66 -2
- package/dist/server/src/lib/db/db.js +12 -3
- package/dist/server/src/lib/db/migrations/index.js +8 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v52-orphaned-worktree-children.js +76 -0
- 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-child-tables.js +119 -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 +82 -77
- package/dist/server/src/lib/detection/cli-patterns.js +109 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +10 -1
- package/dist/server/src/lib/detection/status-detector.js +52 -2
- 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/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 +121 -37
- package/dist/server/src/lib/session/current-output-builder.js +14 -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/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-pager.js +161 -0
- package/dist/server/src/lib/tmux/read-mode.js +347 -0
- 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 +104 -5
- 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/4018.js +0 -1
- package/.next/server/chunks/4390.js +0 -1
- package/.next/server/chunks/8681.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/worktrees/[id]/page-12b3c5f32fc6094e.js +0 -1
- /package/.next/static/{-BSmW0Ae2YsxyCl_ue7_d → C01FQOE5FCmB3I_GhMa4_}/_buildManifest.js +0 -0
- /package/.next/static/{-BSmW0Ae2YsxyCl_ue7_d → C01FQOE5FCmB3I_GhMa4_}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Turning `/worktrees/<historical id>` into a **real** HTTP redirect
|
|
4
|
+
* (Issue #1621 Phase 2 follow-up, owned by #1645).
|
|
5
|
+
*
|
|
6
|
+
* ## Why this exists rather than the layout redirect #1644 shipped
|
|
7
|
+
*
|
|
8
|
+
* `src/app/worktrees/[id]/layout.tsx` calls `permanentRedirect`, and measured
|
|
9
|
+
* against a real server that returns
|
|
10
|
+
*
|
|
11
|
+
* HTTP/1.1 200 OK
|
|
12
|
+
* <meta id="__next-page-redirect" http-equiv="refresh" content="0;url=…">
|
|
13
|
+
*
|
|
14
|
+
* — not a 301. That is App Router behaviour, not a bug in that layout: an
|
|
15
|
+
* unconditional `permanentRedirect` as the layout's very first statement
|
|
16
|
+
* produces the same 200 + meta tag. A redirect thrown while a page's HTML is
|
|
17
|
+
* already streaming can no longer set a status line, so it ships inside the
|
|
18
|
+
* document. Only Route Handlers, Server Actions and middleware emit a real 3xx.
|
|
19
|
+
*
|
|
20
|
+
* `middleware.ts` is not an option either: it runs on the edge runtime, where
|
|
21
|
+
* the SQLite lookup this needs is impossible. That leaves the custom
|
|
22
|
+
* `server.ts`, which sees the request before Next does — hence this module,
|
|
23
|
+
* which `server.ts` loads lazily and asks about each `/worktrees/…` URL.
|
|
24
|
+
*
|
|
25
|
+
* The layout redirect stays as a fallback for anything serving the app without
|
|
26
|
+
* `server.ts`; when `server.ts` is in front it never sees a historical ID.
|
|
27
|
+
*
|
|
28
|
+
* ## Two things the layout could not do, and this does
|
|
29
|
+
*
|
|
30
|
+
* 1. **A status code.** A meta refresh is followed by browsers and by nothing
|
|
31
|
+
* else — no bookmark rewrite, no non-browser client, no `curl -I`.
|
|
32
|
+
* 2. **Sub-paths.** A layout cannot see the path below it, so
|
|
33
|
+
* `/worktrees/<old>/terminal` landed on the worktree's detail page. Here the
|
|
34
|
+
* tail of the path and the query string are carried across verbatim.
|
|
35
|
+
*/
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.WORKTREE_REDIRECT_CACHE_CONTROL = exports.WORKTREE_REDIRECT_STATUS = void 0;
|
|
38
|
+
exports.parseWorktreeUrl = parseWorktreeUrl;
|
|
39
|
+
exports.resolveWorktreeRedirect = resolveWorktreeRedirect;
|
|
40
|
+
const db_instance_1 = require("../../lib/db/db-instance");
|
|
41
|
+
const worktree_alias_db_1 = require("../../lib/db/worktree-alias-db");
|
|
42
|
+
const path_validator_1 = require("../../lib/security/path-validator");
|
|
43
|
+
/**
|
|
44
|
+
* Status code used for the redirect.
|
|
45
|
+
*
|
|
46
|
+
* 308 rather than 301 because it is the method-preserving permanent redirect:
|
|
47
|
+
* `/worktrees/<id>` is a page route today, but a Server Action POSTs to the URL
|
|
48
|
+
* of the page it is on, and 301 historically licenses clients to turn that into
|
|
49
|
+
* a GET.
|
|
50
|
+
*
|
|
51
|
+
* Paired with `Cache-Control: no-store` at the call site — see
|
|
52
|
+
* {@link WORKTREE_REDIRECT_CACHE_CONTROL}.
|
|
53
|
+
*/
|
|
54
|
+
exports.WORKTREE_REDIRECT_STATUS = 308;
|
|
55
|
+
/**
|
|
56
|
+
* Cache directive sent with the redirect.
|
|
57
|
+
*
|
|
58
|
+
* A permanent redirect is cacheable by default, and here that would be wrong:
|
|
59
|
+
* "old ID → this worktree" is durable but not eternal. Delete the worktree and
|
|
60
|
+
* its aliases cascade away; a later directory with the same basename can then
|
|
61
|
+
* be minted that ID as a **live** one, and live rows beat aliases. A client
|
|
62
|
+
* holding a cached permanent redirect would never ask again and would keep
|
|
63
|
+
* landing on the wrong worktree. The status code still says "moved" to anything
|
|
64
|
+
* reading it; only the caching of that answer is refused.
|
|
65
|
+
*/
|
|
66
|
+
exports.WORKTREE_REDIRECT_CACHE_CONTROL = 'no-store';
|
|
67
|
+
/**
|
|
68
|
+
* `/worktrees/<id>` optionally followed by more path.
|
|
69
|
+
*
|
|
70
|
+
* Anchored at the start so nothing else can match, and the ID segment excludes
|
|
71
|
+
* `/`, `?` and `#` so the split is unambiguous. `/worktrees` on its own does not
|
|
72
|
+
* match — there is no such page, and there is no ID to resolve.
|
|
73
|
+
*/
|
|
74
|
+
const WORKTREE_URL_PATTERN = /^\/worktrees\/([^/?#]+)(\/[^?#]*)?/;
|
|
75
|
+
/**
|
|
76
|
+
* Split a request URL into the parts a redirect has to rebuild.
|
|
77
|
+
*
|
|
78
|
+
* Pure and total: returns null for anything that is not a `/worktrees/<id>` URL.
|
|
79
|
+
*
|
|
80
|
+
* @param requestUrl - `req.url`, i.e. an origin-form path with optional query
|
|
81
|
+
*/
|
|
82
|
+
function parseWorktreeUrl(requestUrl) {
|
|
83
|
+
if (!requestUrl)
|
|
84
|
+
return null;
|
|
85
|
+
// Fragments never reach a server, but a malformed client could send one.
|
|
86
|
+
const hashIndex = requestUrl.indexOf('#');
|
|
87
|
+
const withoutHash = hashIndex === -1 ? requestUrl : requestUrl.slice(0, hashIndex);
|
|
88
|
+
const queryIndex = withoutHash.indexOf('?');
|
|
89
|
+
const pathname = queryIndex === -1 ? withoutHash : withoutHash.slice(0, queryIndex);
|
|
90
|
+
const search = queryIndex === -1 ? '' : withoutHash.slice(queryIndex);
|
|
91
|
+
const match = WORKTREE_URL_PATTERN.exec(pathname);
|
|
92
|
+
if (!match)
|
|
93
|
+
return null;
|
|
94
|
+
let id;
|
|
95
|
+
try {
|
|
96
|
+
id = decodeURIComponent(match[1]);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// Malformed percent-encoding: not a URL we can reason about. Hand it to
|
|
100
|
+
// Next, which will 404 it as it does today.
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return { id, subPath: match[2] ?? '', search };
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Map a worktree ID that may be historical onto the ID that is current.
|
|
107
|
+
*
|
|
108
|
+
* Total by construction: any failure — an unmigrated database, an unreadable
|
|
109
|
+
* one, no alias table — degrades to "no redirect", which is exactly today's
|
|
110
|
+
* behaviour.
|
|
111
|
+
*/
|
|
112
|
+
function canonicalWorktreeIdFromDb(id) {
|
|
113
|
+
try {
|
|
114
|
+
const db = (0, db_instance_1.getDbInstance)();
|
|
115
|
+
return (0, worktree_alias_db_1.resolveWorktreeIdWithAlias)(db, id) ?? id;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return id;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Decide whether a URL names a worktree by a historical ID, and where it should
|
|
123
|
+
* go instead.
|
|
124
|
+
*
|
|
125
|
+
* @param requestUrl - `req.url` verbatim
|
|
126
|
+
* @param canonicalize - ID resolver; defaults to the alias table. Injectable so
|
|
127
|
+
* the unit tests can state the mapping instead of building a database.
|
|
128
|
+
* @returns The redirect to write, or null to let Next handle the request
|
|
129
|
+
*/
|
|
130
|
+
function resolveWorktreeRedirect(requestUrl, canonicalize = canonicalWorktreeIdFromDb) {
|
|
131
|
+
const parsed = parseWorktreeUrl(requestUrl);
|
|
132
|
+
if (!parsed)
|
|
133
|
+
return null;
|
|
134
|
+
// An ID that cannot be valid is not a historical ID either; let the route
|
|
135
|
+
// report what the caller actually sent (Issue #1644's `canonicalWorktreeId`
|
|
136
|
+
// makes the same choice for the same reason).
|
|
137
|
+
if (!(0, path_validator_1.isValidWorktreeId)(parsed.id))
|
|
138
|
+
return null;
|
|
139
|
+
let canonicalId;
|
|
140
|
+
try {
|
|
141
|
+
canonicalId = canonicalize(parsed.id);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
if (!canonicalId || canonicalId === parsed.id)
|
|
147
|
+
return null;
|
|
148
|
+
return {
|
|
149
|
+
statusCode: exports.WORKTREE_REDIRECT_STATUS,
|
|
150
|
+
// The ID is re-encoded (it is a single segment we just decoded); `subPath`
|
|
151
|
+
// and `search` are carried across byte-for-byte, because they arrived
|
|
152
|
+
// already encoded and re-encoding would corrupt them.
|
|
153
|
+
location: `/worktrees/${encodeURIComponent(canonicalId)}${parsed.subPath}${parsed.search}`,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
@@ -7,11 +7,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.deriveWorktreeId = void 0;
|
|
10
11
|
exports.generateWorktreeId = generateWorktreeId;
|
|
11
12
|
exports.parseWorktreeOutput = parseWorktreeOutput;
|
|
12
13
|
exports.getRepositoryPaths = getRepositoryPaths;
|
|
13
14
|
exports.scanWorktrees = scanWorktrees;
|
|
14
15
|
exports.scanMultipleRepositories = scanMultipleRepositories;
|
|
16
|
+
exports.deriveIdIgnoringOwnHistory = deriveIdIgnoringOwnHistory;
|
|
15
17
|
exports.syncWorktreesToDB = syncWorktreesToDB;
|
|
16
18
|
exports.repositoryExistsOnDisk = repositoryExistsOnDisk;
|
|
17
19
|
exports.pruneStaleRepositoryWorktrees = pruneStaleRepositoryWorktrees;
|
|
@@ -19,12 +21,32 @@ const child_process_1 = require("child_process");
|
|
|
19
21
|
const util_1 = require("util");
|
|
20
22
|
const fs_1 = __importDefault(require("fs"));
|
|
21
23
|
const path_1 = __importDefault(require("path"));
|
|
24
|
+
const worktree_id_1 = require("./worktree-id");
|
|
22
25
|
const db_1 = require("../../lib/db");
|
|
23
26
|
const logger_1 = require("../../lib/logger");
|
|
24
27
|
const logger = (0, logger_1.createLogger)('worktrees');
|
|
28
|
+
/**
|
|
29
|
+
* ID minting lives in `worktree-id.ts` — a module that imports nothing but
|
|
30
|
+
* `crypto` and `path`. A migration has to mint IDs too (the Phase 4 renumbering
|
|
31
|
+
* in #1645), and importing THIS module from one would close a cycle through
|
|
32
|
+
* `@/lib/db` and inherit every `vi.mock('@/lib/git/worktrees')` in the suite.
|
|
33
|
+
* Re-exported here so existing callers are unaffected.
|
|
34
|
+
*/
|
|
35
|
+
var worktree_id_2 = require("./worktree-id");
|
|
36
|
+
Object.defineProperty(exports, "deriveWorktreeId", { enumerable: true, get: function () { return worktree_id_2.deriveWorktreeId; } });
|
|
25
37
|
/**
|
|
26
38
|
* Generate URL-safe ID from repository name and branch name
|
|
27
39
|
*
|
|
40
|
+
* @deprecated Issue #1621/#1644: worktree IDs are no longer derived from the
|
|
41
|
+
* branch. A branch-derived ID changes whenever the branch changes, so checking
|
|
42
|
+
* out a different branch in the *same* directory renamed the worktree's primary
|
|
43
|
+
* key and broke everything keyed on it outside the DB (tmux session names, open
|
|
44
|
+
* tabs, bookmarks, poller/Auto-Yes keys). IDs are now derived from the directory
|
|
45
|
+
* once — see {@link deriveWorktreeId} — and never re-derived.
|
|
46
|
+
*
|
|
47
|
+
* Retained only so an out-of-tree caller keeps compiling; nothing in `src/`
|
|
48
|
+
* calls it any more.
|
|
49
|
+
*
|
|
28
50
|
* @param branchName - Git branch name (e.g., "feature/foo", "main")
|
|
29
51
|
* @param repositoryName - Repository name (e.g., "MyRepo")
|
|
30
52
|
* @returns URL-safe ID (e.g., "myrepo-feature-foo", "myrepo-main")
|
|
@@ -40,14 +62,9 @@ function generateWorktreeId(branchName, repositoryName) {
|
|
|
40
62
|
if (!branchName) {
|
|
41
63
|
return '';
|
|
42
64
|
}
|
|
43
|
-
const
|
|
44
|
-
.toLowerCase()
|
|
45
|
-
.replace(/[^a-z0-9-]/g, '-') // Replace non-alphanumeric (except hyphen) with hyphen
|
|
46
|
-
.replace(/-+/g, '-') // Replace consecutive hyphens with single hyphen
|
|
47
|
-
.replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
|
|
48
|
-
const sanitizedBranch = sanitize(branchName);
|
|
65
|
+
const sanitizedBranch = (0, worktree_id_1.sanitizeIdSegment)(branchName);
|
|
49
66
|
if (repositoryName) {
|
|
50
|
-
const sanitizedRepo =
|
|
67
|
+
const sanitizedRepo = (0, worktree_id_1.sanitizeIdSegment)(repositoryName);
|
|
51
68
|
return `${sanitizedRepo}-${sanitizedBranch}`;
|
|
52
69
|
}
|
|
53
70
|
return sanitizedBranch;
|
|
@@ -132,6 +149,22 @@ function getRepositoryPaths() {
|
|
|
132
149
|
/**
|
|
133
150
|
* Scan git worktrees in a single repository
|
|
134
151
|
*
|
|
152
|
+
* Issue #1621: the `id` on each returned object is a **provisional** suggestion,
|
|
153
|
+
* not the worktree's identity. The scan cannot know which IDs are already taken
|
|
154
|
+
* (it sees one repository, IDs are global) and — more importantly — it must not
|
|
155
|
+
* decide the ID of a directory that is already registered. {@link syncWorktreesToDB}
|
|
156
|
+
* is what confirms an ID: it keeps the existing row's ID when the path is known,
|
|
157
|
+
* and only falls back to this suggestion (or re-derives) for a new path.
|
|
158
|
+
*
|
|
159
|
+
* The field is still populated, rather than dropped from the type, because two
|
|
160
|
+
* callers outside this change's reach — `POST /api/repositories/scan`,
|
|
161
|
+
* `POST /api/repositories/restore` and `syncWorktreesAndCleanup`
|
|
162
|
+
* (`src/lib/session-cleanup.ts`) — are typed on `Worktree[]`.
|
|
163
|
+
*
|
|
164
|
+
* `name` is the **display branch name** and is refreshed on every sync; for a
|
|
165
|
+
* detached HEAD it is `detached-<short sha>` (see {@link parseWorktreeOutput}).
|
|
166
|
+
* Neither `name` nor `branch` participates in the ID any more.
|
|
167
|
+
*
|
|
135
168
|
* @param rootDir - Root directory to scan for worktrees
|
|
136
169
|
* @returns Array of Worktree objects
|
|
137
170
|
*
|
|
@@ -140,7 +173,7 @@ function getRepositoryPaths() {
|
|
|
140
173
|
* @example
|
|
141
174
|
* ```typescript
|
|
142
175
|
* const worktrees = await scanWorktrees('/path/to/repo');
|
|
143
|
-
* console.log(worktrees[0].
|
|
176
|
+
* console.log(worktrees[0].path); // => "/path/to/repo"
|
|
144
177
|
* ```
|
|
145
178
|
*/
|
|
146
179
|
async function scanWorktrees(rootDir) {
|
|
@@ -155,16 +188,21 @@ async function scanWorktrees(rootDir) {
|
|
|
155
188
|
const repositoryName = path_1.default.basename(repositoryPath);
|
|
156
189
|
// Filter and validate worktree paths
|
|
157
190
|
return parsed
|
|
158
|
-
.map((wt) =>
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
191
|
+
.map((wt) => {
|
|
192
|
+
const resolvedPath = path_1.default.resolve(wt.path);
|
|
193
|
+
return {
|
|
194
|
+
// Provisional only — syncWorktreesToDB decides the real ID (see above).
|
|
195
|
+
id: (0, worktree_id_1.deriveWorktreeId)(resolvedPath),
|
|
196
|
+
// Display branch name (Issue #1621): re-read from git on every scan.
|
|
197
|
+
name: wt.branch,
|
|
198
|
+
// Issue #1003: persist the real branch (sync-time snapshot) so
|
|
199
|
+
// `ls --branch` can filter on it rather than the derived name/id slug.
|
|
200
|
+
branch: wt.branch,
|
|
201
|
+
path: resolvedPath,
|
|
202
|
+
repositoryPath,
|
|
203
|
+
repositoryName,
|
|
204
|
+
};
|
|
205
|
+
})
|
|
168
206
|
.filter((wt) => {
|
|
169
207
|
// Git worktrees can be outside the repo root, so we use a more lenient validation
|
|
170
208
|
// Only filter out obviously dangerous system paths
|
|
@@ -232,13 +270,50 @@ async function scanMultipleRepositories(repositoryPaths) {
|
|
|
232
270
|
}
|
|
233
271
|
return allWorktrees;
|
|
234
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* Mint an ID for `resolvedPath` without letting the path's **own** history block
|
|
275
|
+
* it (Issue #1658).
|
|
276
|
+
*
|
|
277
|
+
* `takenIds` holds every live ID plus every alias, which is right for a path
|
|
278
|
+
* nobody has seen before. For a path that IS already registered it is exactly
|
|
279
|
+
* wrong: its own current ID sits in that set, and so does every ID it has ever
|
|
280
|
+
* been renamed away from. `deriveWorktreeId` then rejects the basename it should
|
|
281
|
+
* have produced and walks up the digest ladder — `foo`, `foo-2f4530fe`,
|
|
282
|
+
* `foo-2f4530fe1cf1f9f8`, … — one rung longer on every call. That is the runaway
|
|
283
|
+
* this hotfix is about: production reached an 81-character ID whose derived tmux
|
|
284
|
+
* session name no longer matched the running session.
|
|
285
|
+
*
|
|
286
|
+
* Re-derivation for a known path should be reachable only through a bug now that
|
|
287
|
+
* the lookup is global, so this is a floor rather than a mechanism: excluding
|
|
288
|
+
* the row's own history makes the derivation converge (it re-mints the ID the
|
|
289
|
+
* row already has, or a shorter one), instead of growing without bound.
|
|
290
|
+
*
|
|
291
|
+
* Exported for the unit tests only: the branch it guards is unreachable through
|
|
292
|
+
* `syncWorktreesToDB` now that the path lookup is global, and a floor nobody can
|
|
293
|
+
* exercise is a floor nobody can prove.
|
|
294
|
+
*
|
|
295
|
+
* @param resolvedPath - Absolute, `path.resolve()`d worktree directory
|
|
296
|
+
* @param takenIds - IDs that are unavailable
|
|
297
|
+
* @param ownIds - IDs this very path already answers to (current ID + aliases)
|
|
298
|
+
* @internal
|
|
299
|
+
*/
|
|
300
|
+
function deriveIdIgnoringOwnHistory(resolvedPath, takenIds, ownIds) {
|
|
301
|
+
if (!ownIds || ownIds.size === 0) {
|
|
302
|
+
return (0, worktree_id_1.deriveWorktreeId)(resolvedPath, takenIds);
|
|
303
|
+
}
|
|
304
|
+
const available = new Set(takenIds);
|
|
305
|
+
for (const ownId of ownIds)
|
|
306
|
+
available.delete(ownId);
|
|
307
|
+
return (0, worktree_id_1.deriveWorktreeId)(resolvedPath, available);
|
|
308
|
+
}
|
|
235
309
|
/**
|
|
236
310
|
* Sync scanned worktrees to database
|
|
237
311
|
*
|
|
238
312
|
* This function performs a true sync:
|
|
239
313
|
* 1. Groups worktrees by repository
|
|
240
314
|
* 2. For each repository, removes worktrees that no longer exist
|
|
241
|
-
* 3.
|
|
315
|
+
* 3. Resolves each worktree's ID (existing row by path wins — Issue #1621)
|
|
316
|
+
* 4. Upserts all current worktrees, refreshing the display branch name
|
|
242
317
|
*
|
|
243
318
|
* @param db - Database instance
|
|
244
319
|
* @param worktrees - Array of worktrees to sync
|
|
@@ -266,31 +341,102 @@ function syncWorktreesToDB(db, worktrees) {
|
|
|
266
341
|
}
|
|
267
342
|
worktreesByRepo.get(repoPath).push(worktree);
|
|
268
343
|
}
|
|
344
|
+
// IDs are a GLOBAL primary key, so collision detection has to look at every
|
|
345
|
+
// repository, not just the one being synced. `takenIds` also absorbs the IDs
|
|
346
|
+
// handed out earlier in this same run, so two directories that share a
|
|
347
|
+
// basename across repositories cannot both claim it (which would violate the
|
|
348
|
+
// UNIQUE(path) constraint on the second upsert).
|
|
349
|
+
//
|
|
350
|
+
// Historical IDs count as taken too (Issue #1621, Phase 2): an alias still
|
|
351
|
+
// answers requests, so minting a live worktree with an ID some alias redirects
|
|
352
|
+
// elsewhere would shadow that redirect and silently send old bookmarks to the
|
|
353
|
+
// wrong worktree.
|
|
354
|
+
const takenIds = new Set([...(0, db_1.getAllWorktreeIds)(db), ...(0, db_1.getAliasedWorktreeIds)(db)]);
|
|
355
|
+
// Issue #1621: the ID a path already owns is the ID it keeps.
|
|
356
|
+
//
|
|
357
|
+
// Issue #1658: and that lookup is GLOBAL, because `path` is global — the
|
|
358
|
+
// column is `NOT NULL UNIQUE`, one row per directory for the whole table.
|
|
359
|
+
// `repository_path` is not an identity at all, it only records which scan root
|
|
360
|
+
// last upserted the row, and two scan roots can legitimately report the same
|
|
361
|
+
// directory: registering a repository *and* one of its own linked worktrees in
|
|
362
|
+
// `WORKTREE_REPOS` makes `git worktree list` return the identical path set
|
|
363
|
+
// from either one. Scoping this map per repository then found nothing on
|
|
364
|
+
// whichever pass did not write `repository_path` last, fell through to
|
|
365
|
+
// re-derivation, collided with the row's own ID and aliases, and appended
|
|
366
|
+
// another 8 hex digits — every sync, without limit (measured in production:
|
|
367
|
+
// 81 characters, at which point the tmux session name derived from the ID no
|
|
368
|
+
// longer matched the running session and the UI lost it).
|
|
369
|
+
const idByPath = new Map((0, db_1.getAllWorktreePathIds)(db).map(row => [path_1.default.resolve(row.path), row.id]));
|
|
370
|
+
// Every ID each path still answers to (its current one plus every alias
|
|
371
|
+
// pointing at it), so a re-derivation cannot be blocked by the path's own
|
|
372
|
+
// history — see deriveIdIgnoringOwnHistory.
|
|
373
|
+
const ownIdsByPath = new Map();
|
|
374
|
+
const pathById = new Map();
|
|
375
|
+
for (const [resolvedPath, id] of idByPath) {
|
|
376
|
+
ownIdsByPath.set(resolvedPath, new Set([id]));
|
|
377
|
+
pathById.set(id, resolvedPath);
|
|
378
|
+
}
|
|
379
|
+
for (const alias of (0, db_1.getAllWorktreeAliases)(db)) {
|
|
380
|
+
const aliasedPath = pathById.get(alias.worktreeId);
|
|
381
|
+
if (aliasedPath)
|
|
382
|
+
ownIdsByPath.get(aliasedPath)?.add(alias.oldId);
|
|
383
|
+
}
|
|
384
|
+
// Issue #1151: prune by on-disk PATH, not by ID — only a worktree whose PATH
|
|
385
|
+
// is gone from the scan was genuinely removed. The set is built from the whole
|
|
386
|
+
// scan rather than one repository's slice (#1658): a directory reported by
|
|
387
|
+
// *any* scan root is on disk, whatever `repository_path` currently says about
|
|
388
|
+
// it. Which ROWS a repository may prune is still scoped to that repository, so
|
|
389
|
+
// a scan root never reaches into another one's rows.
|
|
390
|
+
const scannedPaths = new Set(worktrees.map(wt => path_1.default.resolve(wt.path)));
|
|
269
391
|
// Process each repository
|
|
270
392
|
for (const [repoPath, repoWorktrees] of worktreesByRepo) {
|
|
271
393
|
if (!repoPath)
|
|
272
394
|
continue;
|
|
273
395
|
// Get current worktree rows (id + path) in DB for this repository
|
|
274
396
|
const existingRows = (0, db_1.getWorktreesByRepository)(db, repoPath);
|
|
275
|
-
// Issue #1151: prune by on-disk PATH, not by branch-derived ID. A worktree's
|
|
276
|
-
// ID changes when its branch changes (`generateWorktreeId`), so keying the
|
|
277
|
-
// "removed" decision on ID mistakes a same-directory branch switch for a
|
|
278
|
-
// deleted worktree and CASCADE-deletes its chat history and related data.
|
|
279
|
-
// Only a worktree whose PATH is gone from the scan was genuinely removed.
|
|
280
|
-
const newPaths = new Set(repoWorktrees.map(wt => path_1.default.resolve(wt.path)));
|
|
281
397
|
// Find worktrees that no longer exist on disk (genuinely deleted)
|
|
282
398
|
const deletedIds = existingRows
|
|
283
|
-
.filter(row => !
|
|
399
|
+
.filter(row => !scannedPaths.has(path_1.default.resolve(row.path)))
|
|
284
400
|
.map(row => row.id);
|
|
285
401
|
// Delete removed worktrees from DB
|
|
286
402
|
if (deletedIds.length > 0) {
|
|
287
403
|
const result = (0, db_1.deleteWorktreesByIds)(db, deletedIds);
|
|
288
404
|
allDeletedIds.push(...deletedIds);
|
|
405
|
+
// Their IDs are free again (and their alias rows went with them).
|
|
406
|
+
for (const deletedId of deletedIds) {
|
|
407
|
+
takenIds.delete(deletedId);
|
|
408
|
+
const deletedPath = pathById.get(deletedId);
|
|
409
|
+
if (deletedPath !== undefined) {
|
|
410
|
+
idByPath.delete(deletedPath);
|
|
411
|
+
ownIdsByPath.delete(deletedPath);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
289
414
|
logger.info('worktree:cleanup', { deletedCount: result.deletedCount });
|
|
290
415
|
}
|
|
291
416
|
// Upsert current worktrees
|
|
292
417
|
for (const worktree of repoWorktrees) {
|
|
293
|
-
|
|
418
|
+
const resolvedPath = path_1.default.resolve(worktree.path);
|
|
419
|
+
const existingId = idByPath.get(resolvedPath);
|
|
420
|
+
const suggestedId = worktree.id;
|
|
421
|
+
const id = existingId ??
|
|
422
|
+
(suggestedId && !takenIds.has(suggestedId)
|
|
423
|
+
? suggestedId
|
|
424
|
+
: deriveIdIgnoringOwnHistory(resolvedPath, takenIds, ownIdsByPath.get(resolvedPath)));
|
|
425
|
+
takenIds.add(id);
|
|
426
|
+
// Claim the ID for this path for the rest of the run, so the same
|
|
427
|
+
// directory seen again through a second scan root resolves to it instead
|
|
428
|
+
// of minting a second one (#1658 — a brand-new path hits this on its very
|
|
429
|
+
// first sync, before any row exists to look up).
|
|
430
|
+
idByPath.set(resolvedPath, id);
|
|
431
|
+
pathById.set(id, resolvedPath);
|
|
432
|
+
(0, db_1.upsertWorktree)(db, {
|
|
433
|
+
...worktree,
|
|
434
|
+
id,
|
|
435
|
+
// Issue #1621: `name` is the display branch name. The branch no longer
|
|
436
|
+
// feeds the ID, so this is the only place it surfaces — refresh it from
|
|
437
|
+
// the scan every time (a checkout must move the label, not the key).
|
|
438
|
+
name: worktree.branch ?? worktree.name,
|
|
439
|
+
});
|
|
294
440
|
upsertedCount++;
|
|
295
441
|
}
|
|
296
442
|
}
|
|
@@ -49,8 +49,20 @@ const SENSITIVE_PATTERNS = [
|
|
|
49
49
|
];
|
|
50
50
|
/**
|
|
51
51
|
* Sensitive key name patterns
|
|
52
|
+
*
|
|
53
|
+
* Issue #1640: `key` used to be listed on its own, which masked field names that
|
|
54
|
+
* carry no secret at all — `key`, `compositeKey`, `sortKey`, `idempotencyKey`,
|
|
55
|
+
* `publicKey`, ... — including the `read-mode:ready` log whose entire purpose is
|
|
56
|
+
* to report which key was bound (`{"key":"[REDACTED]"}` for the value `g`).
|
|
57
|
+
* Only credential-bearing `*key` compounds are matched now; a bare `key` is not.
|
|
58
|
+
* This brings the key-name side in line with the value side above, which has
|
|
59
|
+
* always used `api_key|apikey` rather than a bare `key`.
|
|
60
|
+
*
|
|
61
|
+
* Note: `auth` matches as a substring so that `authHeader` / `authorization` are
|
|
62
|
+
* covered. Do not narrow it with a `(?!or)` lookahead — that would stop matching
|
|
63
|
+
* `authorization`, which is the most important name in the group.
|
|
52
64
|
*/
|
|
53
|
-
const SENSITIVE_KEY_PATTERN = /password|secret|token|key
|
|
65
|
+
const SENSITIVE_KEY_PATTERN = /password|secret|token|auth|(?:api|private|access|session|signing|encryption|ssh|gpg|deploy)[-_]?key/i;
|
|
54
66
|
function sanitize(value) {
|
|
55
67
|
if (typeof value === 'string') {
|
|
56
68
|
let sanitized = value;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* No `export *` - all exports are explicitly named (Issue #479 constraint).
|
|
12
12
|
*/
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.isAnyPollerActiveForWorktree = exports.stopAutoYesPollingByWorktree = exports.getAutoYesPollerCompositeKeys = exports.stopAllAutoYesPolling = exports.stopAutoYesPolling = exports.startAutoYesPolling = exports.detectAndRespondToPrompt = exports.processStopConditionDelta = exports.captureAndCleanOutput = exports.validatePollingContext = exports.isPollerActive = exports.getLastServerResponseTimestamp = exports.clearAllPollerStates = exports.getActivePollerCount = exports.THINKING_CHECK_LINE_COUNT = exports.MAX_CONCURRENT_POLLERS = exports.MAX_CONSECUTIVE_ERRORS = exports.MAX_BACKOFF_MS = exports.DUPLICATE_RETRY_EXPIRY_MS = exports.COOLDOWN_INTERVAL_MS = exports.POLLING_INTERVAL_MS = exports.calculateBackoffInterval = exports.deleteAutoYesStateByWorktree = exports.getCompositeKeysByWorktree = exports.filterCompositeKeysByWorktree = exports.getAutoYesStateCompositeKeys = exports.deleteAutoYesState = exports.checkStopCondition = exports.executeRegexWithTimeout = exports.clearAllAutoYesStates = exports.disableAutoYes = exports.setAutoYesEnabled = exports.getAutoYesState = exports.isAutoYesExpired = exports.extractInstanceId = exports.extractCliToolId = exports.extractWorktreeId = exports.buildCompositeKey = exports.COMPOSITE_KEY_SEPARATOR = void 0;
|
|
14
|
+
exports.isAnyPollerActiveForWorktree = exports.stopAutoYesPollingByWorktree = exports.getAutoYesPollerCompositeKeys = exports.stopAllAutoYesPolling = exports.stopAutoYesPolling = exports.startAutoYesPolling = exports.detectAndRespondToPrompt = exports.processStopConditionDelta = exports.captureAndCleanOutput = exports.validatePollingContext = exports.isPollerActive = exports.getLastServerResponseTimestamp = exports.clearAllPollerStates = exports.getActivePollerCount = exports.THINKING_CHECK_LINE_COUNT = exports.MAX_CONCURRENT_POLLERS = exports.MAX_CONSECUTIVE_ERRORS = exports.MAX_BACKOFF_MS = exports.DUPLICATE_RETRY_EXPIRY_MS = exports.COOLDOWN_INTERVAL_MS = exports.POLLING_INTERVAL_MS = exports.calculateBackoffInterval = exports.migrateAutoYesStateWorktreeIds = exports.deleteAutoYesStateByWorktree = exports.getCompositeKeysByWorktree = exports.filterCompositeKeysByWorktree = exports.getAutoYesStateCompositeKeys = exports.deleteAutoYesState = exports.checkStopCondition = exports.executeRegexWithTimeout = exports.clearAllAutoYesStates = exports.disableAutoYes = exports.setAutoYesEnabled = exports.getAutoYesState = exports.isAutoYesExpired = exports.extractInstanceId = exports.extractCliToolId = exports.extractWorktreeId = exports.buildCompositeKey = exports.COMPOSITE_KEY_SEPARATOR = void 0;
|
|
15
15
|
var auto_yes_state_1 = require("../auto-yes-state");
|
|
16
16
|
// Composite key helpers (Issue #525, #896)
|
|
17
17
|
Object.defineProperty(exports, "COMPOSITE_KEY_SEPARATOR", { enumerable: true, get: function () { return auto_yes_state_1.COMPOSITE_KEY_SEPARATOR; } });
|
|
@@ -33,6 +33,8 @@ Object.defineProperty(exports, "getAutoYesStateCompositeKeys", { enumerable: tru
|
|
|
33
33
|
Object.defineProperty(exports, "filterCompositeKeysByWorktree", { enumerable: true, get: function () { return auto_yes_state_1.filterCompositeKeysByWorktree; } });
|
|
34
34
|
Object.defineProperty(exports, "getCompositeKeysByWorktree", { enumerable: true, get: function () { return auto_yes_state_1.getCompositeKeysByWorktree; } });
|
|
35
35
|
Object.defineProperty(exports, "deleteAutoYesStateByWorktree", { enumerable: true, get: function () { return auto_yes_state_1.deleteAutoYesStateByWorktree; } });
|
|
36
|
+
// Worktree ID migration (Issue #1621 Phase 3)
|
|
37
|
+
Object.defineProperty(exports, "migrateAutoYesStateWorktreeIds", { enumerable: true, get: function () { return auto_yes_state_1.migrateAutoYesStateWorktreeIds; } });
|
|
36
38
|
// Constants
|
|
37
39
|
Object.defineProperty(exports, "calculateBackoffInterval", { enumerable: true, get: function () { return auto_yes_state_1.calculateBackoffInterval; } });
|
|
38
40
|
Object.defineProperty(exports, "POLLING_INTERVAL_MS", { enumerable: true, get: function () { return auto_yes_state_1.POLLING_INTERVAL_MS; } });
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
11
|
exports.isDuplicatePrompt = isDuplicatePrompt;
|
|
12
12
|
exports.clearPromptHashCache = clearPromptHashCache;
|
|
13
|
+
exports.renamePromptHashCacheKey = renamePromptHashCacheKey;
|
|
13
14
|
exports.normalizePromptForDedup = normalizePromptForDedup;
|
|
14
15
|
const crypto_1 = require("crypto");
|
|
15
16
|
/**
|
|
@@ -41,6 +42,27 @@ function isDuplicatePrompt(pollerKey, content) {
|
|
|
41
42
|
function clearPromptHashCache(pollerKey) {
|
|
42
43
|
promptHashCache.delete(pollerKey);
|
|
43
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Move the cached hash from one pollerKey to another.
|
|
47
|
+
*
|
|
48
|
+
* Used when a worktree ID is renamed underneath a running poller
|
|
49
|
+
* (Issue #1621 Phase 3). Clearing instead of moving would let the poller
|
|
50
|
+
* re-save the prompt it is currently sitting on as a fresh message, which is
|
|
51
|
+
* the duplicate this module exists to prevent.
|
|
52
|
+
*
|
|
53
|
+
* No-op when nothing is cached under `oldKey`.
|
|
54
|
+
*
|
|
55
|
+
* @param oldKey - Poller key the cache entry lives under
|
|
56
|
+
* @param newKey - Poller key it should live under
|
|
57
|
+
*/
|
|
58
|
+
function renamePromptHashCacheKey(oldKey, newKey) {
|
|
59
|
+
if (oldKey === newKey)
|
|
60
|
+
return;
|
|
61
|
+
const hash = promptHashCache.get(oldKey);
|
|
62
|
+
promptHashCache.delete(oldKey);
|
|
63
|
+
if (hash !== undefined)
|
|
64
|
+
promptHashCache.set(newKey, hash);
|
|
65
|
+
}
|
|
44
66
|
/**
|
|
45
67
|
* Normalize prompt content before deduplication check.
|
|
46
68
|
* For Copilot, replaces cursor position markers at line beginnings
|