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
|
@@ -23,11 +23,14 @@ exports.updateVibeLocalContextWindow = updateVibeLocalContextWindow;
|
|
|
23
23
|
exports.saveInitialBranch = saveInitialBranch;
|
|
24
24
|
exports.getInitialBranch = getInitialBranch;
|
|
25
25
|
exports.getWorktreeIdsByRepository = getWorktreeIdsByRepository;
|
|
26
|
+
exports.getAllWorktreeIds = getAllWorktreeIds;
|
|
27
|
+
exports.getAllWorktreePathIds = getAllWorktreePathIds;
|
|
26
28
|
exports.getWorktreesByRepository = getWorktreesByRepository;
|
|
27
29
|
exports.deleteRepositoryWorktrees = deleteRepositoryWorktrees;
|
|
28
30
|
exports.deleteWorktreesByIds = deleteWorktreesByIds;
|
|
29
31
|
const selected_agents_validator_1 = require("../../lib/selected-agents-validator");
|
|
30
32
|
const chat_db_1 = require("./chat-db");
|
|
33
|
+
const worktree_id_rename_1 = require("./migrations/worktree-id-rename");
|
|
31
34
|
/**
|
|
32
35
|
* Get latest user message per CLI tool for multiple worktrees (batch query)
|
|
33
36
|
* Optimized to avoid N+1 query problem
|
|
@@ -268,69 +271,20 @@ function upsertWorktree(db, worktree) {
|
|
|
268
271
|
});
|
|
269
272
|
run();
|
|
270
273
|
}
|
|
271
|
-
/**
|
|
272
|
-
* Discover every table that has a foreign key referencing `worktrees(id)`,
|
|
273
|
-
* along with the referencing column. Derived dynamically from the live schema
|
|
274
|
-
* so it never drifts out of sync with future migrations that add child tables.
|
|
275
|
-
*
|
|
276
|
-
* Issue #1151.
|
|
277
|
-
*/
|
|
278
|
-
function getWorktreeChildTables(db) {
|
|
279
|
-
const tables = db
|
|
280
|
-
.prepare("SELECT name FROM sqlite_master WHERE type = 'table'")
|
|
281
|
-
.all();
|
|
282
|
-
const children = [];
|
|
283
|
-
for (const { name } of tables) {
|
|
284
|
-
if (name === 'worktrees')
|
|
285
|
-
continue;
|
|
286
|
-
// PRAGMA identifiers cannot be bound; `name` comes from sqlite_master, not
|
|
287
|
-
// user input, so string interpolation here is safe.
|
|
288
|
-
const fks = db.prepare(`PRAGMA foreign_key_list("${name}")`).all();
|
|
289
|
-
for (const fk of fks) {
|
|
290
|
-
if (fk.table === 'worktrees' && (fk.to === 'id' || fk.to === null)) {
|
|
291
|
-
children.push({ table: name, column: fk.from });
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
return children;
|
|
296
|
-
}
|
|
297
274
|
/**
|
|
298
275
|
* Rename a worktree row's primary key from `oldId` to `newId`, re-pointing every
|
|
299
|
-
* child table's foreign key so no CASCADE deletion occurs
|
|
300
|
-
* same-directory branch switch preserve chat history and all related data
|
|
301
|
-
* instead of destroying it (Issue #1151).
|
|
276
|
+
* child table's foreign key so no CASCADE deletion occurs (Issue #1151, #1621).
|
|
302
277
|
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
*
|
|
278
|
+
* The implementation lives in `migrations/worktree-id-rename.ts` because the
|
|
279
|
+
* Phase 4 renumbering (#1645) needs it from inside a migration, and a migration
|
|
280
|
+
* that imports THIS module inherits every `vi.mock('@/lib/db/worktree-db')` in
|
|
281
|
+
* the suite (measured — see that module's header). This wrapper keeps the
|
|
282
|
+
* public API and its import path unchanged.
|
|
283
|
+
*
|
|
284
|
+
* Must be called inside a transaction.
|
|
306
285
|
*/
|
|
307
286
|
function migrateWorktreeIdPreservingChildren(db, oldId, newId) {
|
|
308
|
-
|
|
309
|
-
return;
|
|
310
|
-
const oldExists = db.prepare('SELECT 1 FROM worktrees WHERE id = ?').get(oldId);
|
|
311
|
-
if (!oldExists)
|
|
312
|
-
return;
|
|
313
|
-
// Defer FK checks until COMMIT so the parent PK and child FKs can be updated
|
|
314
|
-
// independently. Resets automatically at the end of the transaction.
|
|
315
|
-
db.pragma('defer_foreign_keys = ON');
|
|
316
|
-
const newExists = db.prepare('SELECT 1 FROM worktrees WHERE id = ?').get(newId);
|
|
317
|
-
const children = getWorktreeChildTables(db);
|
|
318
|
-
if (newExists) {
|
|
319
|
-
// Collision guard. `path` is UNIQUE so two rows for the same directory
|
|
320
|
-
// should never coexist, but if the DB is already inconsistent keep the
|
|
321
|
-
// destination row's data and fold in the source's non-conflicting children;
|
|
322
|
-
// conflicting leftovers are removed by CASCADE when the old row is deleted.
|
|
323
|
-
for (const { table, column } of children) {
|
|
324
|
-
db.prepare(`UPDATE OR IGNORE "${table}" SET "${column}" = ? WHERE "${column}" = ?`).run(newId, oldId);
|
|
325
|
-
}
|
|
326
|
-
db.prepare('DELETE FROM worktrees WHERE id = ?').run(oldId);
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
// Normal rename: move the parent PK, then repoint all child rows.
|
|
330
|
-
db.prepare('UPDATE worktrees SET id = ? WHERE id = ?').run(newId, oldId);
|
|
331
|
-
for (const { table, column } of children) {
|
|
332
|
-
db.prepare(`UPDATE "${table}" SET "${column}" = ? WHERE "${column}" = ?`).run(newId, oldId);
|
|
333
|
-
}
|
|
287
|
+
(0, worktree_id_rename_1.renameWorktreeIdPreservingChildren)(db, oldId, newId);
|
|
334
288
|
}
|
|
335
289
|
/**
|
|
336
290
|
* Update worktree description
|
|
@@ -504,6 +458,46 @@ function getWorktreeIdsByRepository(db, repositoryPath) {
|
|
|
504
458
|
const rows = stmt.all(repositoryPath);
|
|
505
459
|
return rows.map(r => r.id);
|
|
506
460
|
}
|
|
461
|
+
/**
|
|
462
|
+
* Every worktree ID currently stored, across all repositories.
|
|
463
|
+
*
|
|
464
|
+
* Issue #1621: `deriveWorktreeId` mints an ID from a directory's basename, and
|
|
465
|
+
* two repositories can easily hold same-named directories (`.../a/main`,
|
|
466
|
+
* `.../b/main`). The ID is the global primary key of `worktrees`, so the
|
|
467
|
+
* "already taken" set the derivation consults has to be global too;
|
|
468
|
+
* {@link getWorktreeIdsByRepository} would silently allow a cross-repository
|
|
469
|
+
* collision, which then surfaces as a UNIQUE(path) failure on upsert.
|
|
470
|
+
*
|
|
471
|
+
* @param db - Database instance
|
|
472
|
+
* @returns Every `worktrees.id` value
|
|
473
|
+
*/
|
|
474
|
+
function getAllWorktreeIds(db) {
|
|
475
|
+
const rows = db.prepare('SELECT id FROM worktrees').all();
|
|
476
|
+
return rows.map(row => row.id);
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Every worktree row's `(id, path)` pair, across all repositories.
|
|
480
|
+
*
|
|
481
|
+
* The global counterpart of {@link getWorktreesByRepository}, and the difference
|
|
482
|
+
* matters (Issue #1658): `path` is the identity of a worktree — the column is
|
|
483
|
+
* `NOT NULL UNIQUE` — whereas `repository_path` merely records which scan root
|
|
484
|
+
* last upserted the row. When the *same* git repository is registered under two
|
|
485
|
+
* scan roots (a repo and one of its own linked worktrees, both in
|
|
486
|
+
* `WORKTREE_REPOS`), `git worktree list` returns the identical path set from
|
|
487
|
+
* either one, and `repository_path` ping-pongs between them on every sync.
|
|
488
|
+
* Looking an existing ID up per repository then misses the row half the time and
|
|
489
|
+
* re-derives its ID, which appends another 8 hex digits — forever.
|
|
490
|
+
*
|
|
491
|
+
* Resolving "which ID does this path already own?" must therefore be global.
|
|
492
|
+
* Pruning stays per-repository ({@link getWorktreesByRepository}): that question
|
|
493
|
+
* really is scoped to one scan root.
|
|
494
|
+
*
|
|
495
|
+
* @param db - Database instance
|
|
496
|
+
* @returns `{ id, path }` for every worktree row
|
|
497
|
+
*/
|
|
498
|
+
function getAllWorktreePathIds(db) {
|
|
499
|
+
return db.prepare('SELECT id, path FROM worktrees').all();
|
|
500
|
+
}
|
|
507
501
|
/**
|
|
508
502
|
* Get all worktree rows (id + path) for a given repository path.
|
|
509
503
|
*
|
|
@@ -523,29 +517,38 @@ function getWorktreesByRepository(db, repositoryPath) {
|
|
|
523
517
|
}
|
|
524
518
|
/**
|
|
525
519
|
* Delete all worktrees for a given repository path
|
|
526
|
-
*
|
|
527
|
-
*
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
*
|
|
520
|
+
* Child rows are deleted explicitly before the parent, for every table
|
|
521
|
+
* getWorktreeChildTables reports. ON DELETE CASCADE covers only the tables that
|
|
522
|
+
* declare a foreign key; `tasks`, `verification_runs` and `skill_operations`
|
|
523
|
+
* hold a `worktree_id` with no constraint and would otherwise survive their
|
|
524
|
+
* worktree as orphans (#1621). Deleting `verification_runs` still cascades to
|
|
525
|
+
* `verification_gate_results`, which does declare its foreign key.
|
|
531
526
|
*
|
|
532
527
|
* @param db - Database instance
|
|
533
528
|
* @param repositoryPath - Path of the repository to delete
|
|
534
529
|
* @returns Object containing the count of deleted worktrees
|
|
535
530
|
*/
|
|
536
531
|
function deleteRepositoryWorktrees(db, repositoryPath) {
|
|
537
|
-
const
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
532
|
+
const run = db.transaction(() => {
|
|
533
|
+
const ids = db
|
|
534
|
+
.prepare('SELECT id FROM worktrees WHERE repository_path = ?')
|
|
535
|
+
.all(repositoryPath)
|
|
536
|
+
.map((row) => row.id)
|
|
537
|
+
.filter((id) => id !== null);
|
|
538
|
+
(0, worktree_id_rename_1.deleteWorktreeChildRows)(db, ids);
|
|
539
|
+
return db
|
|
540
|
+
.prepare('DELETE FROM worktrees WHERE repository_path = ?')
|
|
541
|
+
.run(repositoryPath).changes;
|
|
542
|
+
});
|
|
543
|
+
return { deletedCount: run() };
|
|
542
544
|
}
|
|
543
545
|
/**
|
|
544
546
|
* Delete worktrees by their IDs
|
|
545
|
-
*
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
547
|
+
* Child rows are deleted explicitly before the parent, for every table
|
|
548
|
+
* getWorktreeChildTables reports — including skill_installations, whose rows
|
|
549
|
+
* used to survive the worktree and make a re-created worktree at the same path
|
|
550
|
+
* un-installable (#1430), and the constraint-less `tasks` / `verification_runs`
|
|
551
|
+
* / `skill_operations`, which no CASCADE can reach (#1621).
|
|
549
552
|
*
|
|
550
553
|
* @param db - Database instance
|
|
551
554
|
* @param worktreeIds - Array of worktree IDs to delete
|
|
@@ -556,9 +559,11 @@ function deleteWorktreesByIds(db, worktreeIds) {
|
|
|
556
559
|
return { deletedCount: 0 };
|
|
557
560
|
}
|
|
558
561
|
const placeholders = worktreeIds.map(() => '?').join(',');
|
|
559
|
-
const
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
562
|
+
const run = db.transaction(() => {
|
|
563
|
+
(0, worktree_id_rename_1.deleteWorktreeChildRows)(db, worktreeIds);
|
|
564
|
+
return db
|
|
565
|
+
.prepare(`DELETE FROM worktrees WHERE id IN (${placeholders})`)
|
|
566
|
+
.run(...worktreeIds).changes;
|
|
567
|
+
});
|
|
568
|
+
return { deletedCount: run() };
|
|
564
569
|
}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* Shared between response-poller.ts and API routes
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_SELECTION_LIST_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_DIALOG_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
|
|
7
|
+
exports.CLAUDE_SESSION_ERROR_REGEX_PATTERNS = exports.CLAUDE_SESSION_ERROR_PATTERNS = exports.extractAnsiSequences = exports.stripAnsi = exports.ANTIGRAVITY_SKIP_PATTERNS = exports.ANTIGRAVITY_SELECTION_LIST_PATTERN = exports.ANTIGRAVITY_SEPARATOR_PATTERN = exports.ANTIGRAVITY_THINKING_PATTERN = exports.ANTIGRAVITY_PROMPT_PATTERN = exports.VIBE_LOCAL_THINKING_PATTERN = exports.VIBE_LOCAL_PROMPT_PATTERN = exports.COPILOT_SKIP_PATTERNS = exports.COPILOT_SELECTION_LIST_PATTERN = exports.COPILOT_SEPARATOR_PATTERN = exports.COPILOT_THINKING_PATTERN = exports.COPILOT_PROMPT_PATTERN = exports.OPENCODE_SKIP_PATTERNS = exports.OPENCODE_SEPARATOR_PATTERN = exports.CLAUDE_SELECTION_LIST_FOOTER = exports.CLAUDE_MODEL_OVERLAY_FOOTER_PATTERN = exports.OPENCODE_SELECTION_LIST_PATTERN = exports.OPENCODE_PROCESSING_INDICATOR = exports.OPENCODE_RESPONSE_COMPLETE = exports.OPENCODE_LOADING_PATTERN = exports.OPENCODE_THINKING_PATTERN = exports.OPENCODE_PROMPT_AFTER_RESPONSE = exports.OPENCODE_PROMPT_PATTERN = exports.GEMINI_THINKING_PATTERN = exports.GEMINI_PROMPT_PATTERN = exports.MAX_PASTED_TEXT_RETRIES = exports.PASTED_TEXT_DETECT_DELAY = exports.PASTED_TEXT_PATTERN = exports.CODEX_STATUS_BAR_PATTERN = exports.CODEX_PAGER_FOOTER_PATTERN = exports.CODEX_APPROVAL_FOOTER_PATTERN = exports.CODEX_SELECTION_LIST_PATTERN = exports.CODEX_SEPARATOR_PATTERN = exports.CODEX_DIALOG_PATTERN = exports.CODEX_PROMPT_PATTERN = exports.CLAUDE_TRUST_DIALOG_PATTERN = exports.CLAUDE_SEPARATOR_PATTERN = exports.CLAUDE_PROMPT_PATTERN = exports.CODEX_INTERRUPT_HINT_PATTERN = exports.CODEX_THINKING_PATTERN = exports.CLAUDE_INTERRUPT_HINT_PATTERN = exports.CLAUDE_THINKING_PATTERN = exports.CLAUDE_SPINNER_CHARS = void 0;
|
|
8
|
+
exports.isCodexTurnActive = isCodexTurnActive;
|
|
8
9
|
exports.findClaudeChromeStart = findClaudeChromeStart;
|
|
9
10
|
exports.isCodexPromptReady = isCodexPromptReady;
|
|
10
11
|
exports.getCodexActiveDialog = getCodexActiveDialog;
|
|
@@ -14,6 +15,7 @@ exports.stripBoxDrawing = stripBoxDrawing;
|
|
|
14
15
|
exports.buildDetectPromptOptions = buildDetectPromptOptions;
|
|
15
16
|
const logger_1 = require("../../lib/logger");
|
|
16
17
|
const ansi_1 = require("./ansi");
|
|
18
|
+
const thinking_constants_1 = require("../../config/thinking-constants");
|
|
17
19
|
const logger = (0, logger_1.createLogger)('cli-patterns');
|
|
18
20
|
/**
|
|
19
21
|
* Claude CLI spinner characters (expanded set)
|
|
@@ -56,11 +58,93 @@ exports.CLAUDE_THINKING_PATTERN = new RegExp(`[${exports.CLAUDE_SPINNER_CHARS.jo
|
|
|
56
58
|
*/
|
|
57
59
|
exports.CLAUDE_INTERRUPT_HINT_PATTERN = /esc to interrupt/;
|
|
58
60
|
/**
|
|
59
|
-
* Codex
|
|
61
|
+
* Codex activity-marker pattern
|
|
60
62
|
* Matches activity indicators like "• Planning", "• Searching", etc.
|
|
61
63
|
* T1.1: Extended to include "Ran" and "Deciding"
|
|
64
|
+
*
|
|
65
|
+
* Issue #1671: these are *transcript records*, not a liveness signal. Codex is
|
|
66
|
+
* inline-rendered (no alternate screen), so every "• Ran <cmd>" / "• Running
|
|
67
|
+
* <cmd>" step it ever printed stays in the pane scrollback forever — measured on
|
|
68
|
+
* a live `mcbd-codex-*` pane: 396 "• Ran" and 11 "• Running" rows, all of them
|
|
69
|
+
* from finished steps. Matching this pattern against a fixed tail window
|
|
70
|
+
* therefore answers "did a step happen recently", not "is Codex working now".
|
|
71
|
+
* Use {@link isCodexTurnActive} for the latter.
|
|
62
72
|
*/
|
|
63
73
|
exports.CODEX_THINKING_PATTERN = /•\s*(Planning|Searching|Exploring|Running|Thinking|Working|Reading|Writing|Analyzing|Ran|Deciding)/m;
|
|
74
|
+
/**
|
|
75
|
+
* Codex live status-line hint (Issue #1671)
|
|
76
|
+
*
|
|
77
|
+
* While a turn is in flight Codex pins a status row directly above the composer:
|
|
78
|
+
*
|
|
79
|
+
* • Working (13s • esc to interrupt) · 1 background terminal running · /ps to view
|
|
80
|
+
*
|
|
81
|
+
* It is repainted in place every tick and erased the moment the turn ends, so —
|
|
82
|
+
* unlike the "• Ran"/"• Running" step records — it never lingers in scrollback.
|
|
83
|
+
* Measured on a 11,000-line capture of an idle Codex pane: zero occurrences of
|
|
84
|
+
* "esc to interrupt", against 396 lingering "• Ran" rows. That makes it the one
|
|
85
|
+
* unambiguous "Codex is still generating" token, mirroring Claude's
|
|
86
|
+
* {@link CLAUDE_INTERRUPT_HINT_PATTERN}.
|
|
87
|
+
*/
|
|
88
|
+
exports.CODEX_INTERRUPT_HINT_PATTERN = /esc to interrupt/;
|
|
89
|
+
/**
|
|
90
|
+
* How far above the last content row Codex's composer ("› …") may sit.
|
|
91
|
+
*
|
|
92
|
+
* Codex pins the composer and the status bar to the bottom of the pane, so the
|
|
93
|
+
* composer lands 2-3 rows above the last non-blank row in every observed frame.
|
|
94
|
+
* The small allowance keeps the search from walking up into the transcript and
|
|
95
|
+
* latching onto the echoed user message, which uses the same "› " marker.
|
|
96
|
+
*/
|
|
97
|
+
const CODEX_COMPOSER_SEARCH_ROWS = 8;
|
|
98
|
+
/**
|
|
99
|
+
* Decide whether a Codex turn is still in flight (Issue #1671).
|
|
100
|
+
*
|
|
101
|
+
* Completion detection used to answer this with {@link CODEX_THINKING_PATTERN}
|
|
102
|
+
* over a fixed 20-row tail. Because "• Ran <cmd>" is a *past-tense record* that
|
|
103
|
+
* never leaves the transcript, a turn that ended with a short final message kept
|
|
104
|
+
* that record inside the tail window and was reported as "still thinking"
|
|
105
|
+
* forever — so its reply was never saved, while a turn whose final message
|
|
106
|
+
* happened to be longer than 20 rows pushed the record out of the window and was
|
|
107
|
+
* saved. Whether a reply reached Message History depended on how long it was.
|
|
108
|
+
*
|
|
109
|
+
* Two signals, both measured against live codex-cli 0.146.0 captures:
|
|
110
|
+
*
|
|
111
|
+
* 1. The live status line ({@link CODEX_INTERRUPT_HINT_PATTERN}) anywhere in the
|
|
112
|
+
* tail window. Present in every generating frame from 1s onwards, absent from
|
|
113
|
+
* every idle frame.
|
|
114
|
+
* 2. An activity marker in the rows immediately above the composer — the band
|
|
115
|
+
* Codex reserves for that status line. Version-agnostic backstop for a Codex
|
|
116
|
+
* build whose status row drops the "esc to interrupt" wording; deliberately
|
|
117
|
+
* narrow (THINKING_TAIL_LINE_COUNT rows, matching the window status-detector
|
|
118
|
+
* already uses) so records further up the transcript cannot reach it.
|
|
119
|
+
*
|
|
120
|
+
* When no composer can be located the frame is not a normal Codex layout (an
|
|
121
|
+
* overlay is up, or the pane is mid-redraw), so signal 2 falls back to the whole
|
|
122
|
+
* tail window — the pre-#1671 behaviour, which errs towards "still active".
|
|
123
|
+
*
|
|
124
|
+
* @param lines - Captured pane lines with trailing blank rows already trimmed
|
|
125
|
+
* @param tailLineCount - Size of the tail window completion detection looks at
|
|
126
|
+
* @returns True while Codex is still generating
|
|
127
|
+
*/
|
|
128
|
+
function isCodexTurnActive(lines, tailLineCount) {
|
|
129
|
+
const tailWindow = (0, ansi_1.stripAnsi)(lines.slice(Math.max(0, lines.length - tailLineCount)).join('\n'));
|
|
130
|
+
// 1. Live status line — unambiguous, never survives the end of a turn.
|
|
131
|
+
if (exports.CODEX_INTERRUPT_HINT_PATTERN.test(tailWindow))
|
|
132
|
+
return true;
|
|
133
|
+
// 2. Activity marker in the status-line band directly above the composer.
|
|
134
|
+
// Searched bottom-up so the composer wins over the echoed user message.
|
|
135
|
+
let composerIndex = -1;
|
|
136
|
+
for (let i = lines.length - 1; i >= Math.max(0, lines.length - CODEX_COMPOSER_SEARCH_ROWS); i--) {
|
|
137
|
+
if (exports.CODEX_PROMPT_PATTERN.test((0, ansi_1.stripAnsi)(lines[i]))) {
|
|
138
|
+
composerIndex = i;
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (composerIndex < 0)
|
|
143
|
+
return exports.CODEX_THINKING_PATTERN.test(tailWindow);
|
|
144
|
+
const bandStart = Math.max(0, composerIndex - thinking_constants_1.THINKING_TAIL_LINE_COUNT + 1);
|
|
145
|
+
const band = (0, ansi_1.stripAnsi)(lines.slice(bandStart, composerIndex + 1).join('\n'));
|
|
146
|
+
return exports.CODEX_THINKING_PATTERN.test(band);
|
|
147
|
+
}
|
|
64
148
|
/**
|
|
65
149
|
* Claude prompt pattern (waiting for input)
|
|
66
150
|
* Supports both legacy '>' and new '❯' (U+276F) prompt characters
|
|
@@ -295,6 +379,29 @@ exports.CODEX_SEPARATOR_PATTERN = /^─.*Worked for.*─+$/m;
|
|
|
295
379
|
* a numbered prompt (PromptPanel with buttons).
|
|
296
380
|
*/
|
|
297
381
|
exports.CODEX_SELECTION_LIST_PATTERN = /press\s+enter\s+to\s+(?:confirm|select)/i;
|
|
382
|
+
/**
|
|
383
|
+
* Codex CLI approval-request footer pattern (Issue #1628).
|
|
384
|
+
*
|
|
385
|
+
* Codex renders an approval request ("Would you like to run the following
|
|
386
|
+
* command?" / "Would you like to make the following edits?") with the SAME
|
|
387
|
+
* "Press enter to confirm" footer as a `/model`-style menu, which is why
|
|
388
|
+
* CODEX_SELECTION_LIST_PATTERN swallows it. The two differ in the escape verb:
|
|
389
|
+
* an approval request can be *cancelled* (it is the agent asking the human for
|
|
390
|
+
* permission), a menu can only be *gone back* from.
|
|
391
|
+
*
|
|
392
|
+
* Measured on codex-cli 0.146.0 (five consecutive live approval frames captured
|
|
393
|
+
* from a real session, plus two live `/model` picker frames):
|
|
394
|
+
* - approval : "Press enter to confirm or esc to cancel"
|
|
395
|
+
* - /model : "Press enter to confirm or esc to go back"
|
|
396
|
+
* - /model : "Press enter to select reasoning effort, or esc to dismiss."
|
|
397
|
+
*
|
|
398
|
+
* Used only as one of two OR'd approval signals (see isCodexApprovalRequest in
|
|
399
|
+
* status-detector.ts); the other is an interrogative question line, so a future
|
|
400
|
+
* rewording of either signal alone does not reopen Issue #1628.
|
|
401
|
+
*
|
|
402
|
+
* No /g flag (keeps .test() stateless), no nested quantifiers (ReDoS-safe).
|
|
403
|
+
*/
|
|
404
|
+
exports.CODEX_APPROVAL_FOOTER_PATTERN = /esc\s+to\s+cancel/i;
|
|
298
405
|
/**
|
|
299
406
|
* Codex CLI pager / edit-previous (transcript) mode footer pattern (Issue #1017)
|
|
300
407
|
*
|
|
@@ -783,7 +783,16 @@ function detectMultipleChoicePrompt(output, options, truncateRawContentFn) {
|
|
|
783
783
|
// Layer 5 [SEC-001]: Enhanced question line validation for requireDefaultIndicator=false.
|
|
784
784
|
// When requireDefault is false, apply stricter validation to prevent false positives
|
|
785
785
|
// from normal numbered lists (e.g., "Recommendations:\n1. Add tests\n2. Update docs").
|
|
786
|
-
|
|
786
|
+
//
|
|
787
|
+
// [Issue #1676] Frames where a ❯/●/› default indicator was actually collected are
|
|
788
|
+
// exempt from Layer 5: the cursor existence check (Layer 2 semantics) is the same
|
|
789
|
+
// false-positive defense that requireDefaultIndicator=true tools (codex/gemini)
|
|
790
|
+
// rely on without any question-line validation. This lets declarative permission
|
|
791
|
+
// dialogs with no question line ("Claude in Chrome wants to run JavaScript on …"
|
|
792
|
+
// + ❯ 1. Allow / 2. … / 3. Deny) and imperative AskUserQuestion headers
|
|
793
|
+
// (「実装方針を選んでください」) be detected. Indicator-less frames (#193 capture
|
|
794
|
+
// artifacts) still go through SEC-001a/b unchanged.
|
|
795
|
+
if (!requireDefault && !hasDefaultIndicator) {
|
|
787
796
|
// SEC-001a: No question line found (questionEndIndex === -1) - reject.
|
|
788
797
|
// Prevents generic question fallback from triggering Auto-Yes
|
|
789
798
|
// on plain numbered lists that happen to be consecutive from 1.
|
|
@@ -100,7 +100,8 @@ const CODEX_NUMBERED_OPTION_PATTERN = /^\s*[❯›●]?\s*\d{1,2}[.)]\s/;
|
|
|
100
100
|
* already-answered prompt left in the 50-line scan window rather than an active one.
|
|
101
101
|
*
|
|
102
102
|
* Codex keeps the answered "1. Yes / 2. No" block + "press number to confirm" footer in
|
|
103
|
-
* its transcript (
|
|
103
|
+
* its transcript (it draws on the normal screen, so tmux retains a scrollback for it —
|
|
104
|
+
* TMUX_HISTORY_LIMIT lines deep) instead of repainting it away like Claude,
|
|
104
105
|
* so detectPrompt() keeps matching it and detectSessionStatus() reports `waiting` even
|
|
105
106
|
* after the user answered and Codex resumed — the sidebar status dot then stays orange
|
|
106
107
|
* forever (the reported bug).
|
|
@@ -147,6 +148,39 @@ function isCodexStalePrompt(contentLines) {
|
|
|
147
148
|
}
|
|
148
149
|
return lastPromptIdx >= 0 && lastThinkingIdx > lastPromptIdx;
|
|
149
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Issue #1628: decide whether a Codex frame that matched CODEX_SELECTION_LIST_PATTERN
|
|
153
|
+
* is the agent ASKING FOR APPROVAL rather than the user browsing a menu.
|
|
154
|
+
*
|
|
155
|
+
* Why this exists: Codex renders both with a "Press enter to confirm" footer, so the
|
|
156
|
+
* priority-0.8 selection-list branch (added for `/model` in Issue #622) also swallowed
|
|
157
|
+
* every approval request and returned `hasActivePrompt: false`. `isPromptWaiting` is the
|
|
158
|
+
* only blocked-on-a-human signal the current-output payload carries, so `commandmate wait
|
|
159
|
+
* --on-prompt agent` could never raise exit 10 for a Codex worker sitting on
|
|
160
|
+
* "Would you like to run the following command?" — it polled until the timeout while the
|
|
161
|
+
* agent was stopped. Auto-Yes was unaffected because it calls detectPrompt() directly,
|
|
162
|
+
* which parses these frames correctly; only the status-detector layer lost them.
|
|
163
|
+
*
|
|
164
|
+
* Two OR'd signals, both measured against live codex-cli 0.146.0 captures
|
|
165
|
+
* (5 approval frames from one real session + 2 `/model` picker frames):
|
|
166
|
+
* 1. an interrogative question line directly above the options
|
|
167
|
+
* ("Would you like to run the following command?" → the extracted question ends
|
|
168
|
+
* with "?"; a picker's ends with its description, e.g. "…browse all models.")
|
|
169
|
+
* 2. the approval escape verb ("esc to cancel" vs a menu's "esc to go back" /
|
|
170
|
+
* "esc to dismiss")
|
|
171
|
+
* Either alone covers every measured approval frame, so a rewording of one does not
|
|
172
|
+
* reopen the bug.
|
|
173
|
+
*
|
|
174
|
+
* Gated on `promptDetection.isPrompt` so a frame detectPrompt() could not parse into
|
|
175
|
+
* options (e.g. the unnumbered "Select a model" list of Issue #619) can never be
|
|
176
|
+
* promoted to an active prompt.
|
|
177
|
+
*/
|
|
178
|
+
function isCodexApprovalRequest(promptDetection, selectionWindow) {
|
|
179
|
+
if (!promptDetection.isPrompt)
|
|
180
|
+
return false;
|
|
181
|
+
const question = promptDetection.promptData?.question?.trim() ?? '';
|
|
182
|
+
return question.endsWith('?') || cli_patterns_1.CODEX_APPROVAL_FOOTER_PATTERN.test(selectionWindow);
|
|
183
|
+
}
|
|
150
184
|
/**
|
|
151
185
|
* Detect session status with confidence level
|
|
152
186
|
*
|
|
@@ -286,6 +320,21 @@ function detectSessionStatus(output, cliToolId, lastOutputTimestamp) {
|
|
|
286
320
|
if (cli_patterns_1.CODEX_SELECTION_LIST_PATTERN.test(codexSelectionWindow)) {
|
|
287
321
|
const codexPromptOptions = (0, cli_patterns_1.buildDetectPromptOptions)(cliToolId);
|
|
288
322
|
const codexPromptDetection = (0, prompt_detector_1.detectPrompt)((0, cli_patterns_1.stripBoxDrawing)(cleanOutput), codexPromptOptions);
|
|
323
|
+
// Issue #1628: an approval request wears the same footer as a menu but is the
|
|
324
|
+
// agent blocked on the human, so it must surface as an active prompt (exit 10
|
|
325
|
+
// for `wait`, PromptPanel in the UI) instead of a navigable list. The #1160
|
|
326
|
+
// staleness guard still applies: an ALREADY-ANSWERED approval whose footer is
|
|
327
|
+
// still inside the window, with Codex running below it, is dead scrollback.
|
|
328
|
+
if (isCodexApprovalRequest(codexPromptDetection, codexSelectionWindow) &&
|
|
329
|
+
!isCodexStalePrompt(contentLines)) {
|
|
330
|
+
return {
|
|
331
|
+
status: 'waiting',
|
|
332
|
+
confidence: 'high',
|
|
333
|
+
reason: exports.STATUS_REASON.PROMPT_DETECTED,
|
|
334
|
+
hasActivePrompt: true,
|
|
335
|
+
promptDetection: codexPromptDetection,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
289
338
|
return {
|
|
290
339
|
status: 'waiting',
|
|
291
340
|
confidence: 'high',
|
|
@@ -333,7 +382,8 @@ function detectSessionStatus(output, cliToolId, lastOutputTimestamp) {
|
|
|
333
382
|
if (promptDetection.isPrompt) {
|
|
334
383
|
// Issue #1160: Codex keeps an ANSWERED approval / numbered-choice block
|
|
335
384
|
// ("1. Yes / 2. No" + "press number to confirm" footer) in its transcript
|
|
336
|
-
// (
|
|
385
|
+
// (non-alternate-screen, so tmux keeps TMUX_HISTORY_LIMIT lines of scrollback for
|
|
386
|
+
// it) instead of repainting it away like Claude. detectPrompt's
|
|
337
387
|
// 50-line window then keeps matching that dead prompt, so this priority-1 branch
|
|
338
388
|
// returns `waiting` even after the user answered and Codex resumed — the sidebar
|
|
339
389
|
// status dot stays orange forever (the reported bug). Guard with a position check:
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Minting a worktree ID from its directory — the pure half of Issue #1621.
|
|
4
|
+
*
|
|
5
|
+
* Split out of `worktrees.ts` for one reason: a **migration** has to mint IDs
|
|
6
|
+
* (the Phase 4 renumbering in #1645), and `worktrees.ts` imports `@/lib/db`,
|
|
7
|
+
* which re-exports `db-migrations` — importing it from a migration closes a
|
|
8
|
+
* cycle. It also drags every `vi.mock('@/lib/git/worktrees')` in the suite into
|
|
9
|
+
* `runMigrations`, which is exactly how v52 was made to throw before it was
|
|
10
|
+
* moved (see `migrations/worktree-child-tables.ts`).
|
|
11
|
+
*
|
|
12
|
+
* This module imports nothing but `crypto` and `path`, so it is safe from both
|
|
13
|
+
* directions.
|
|
14
|
+
*/
|
|
15
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
16
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.FALLBACK_ID_BASE = void 0;
|
|
20
|
+
exports.sanitizeIdSegment = sanitizeIdSegment;
|
|
21
|
+
exports.deriveWorktreeId = deriveWorktreeId;
|
|
22
|
+
exports.isDerivedWorktreeId = isDerivedWorktreeId;
|
|
23
|
+
const crypto_1 = require("crypto");
|
|
24
|
+
const path_1 = __importDefault(require("path"));
|
|
25
|
+
/**
|
|
26
|
+
* Lower-case, URL- and shell-safe slug of one identifier segment.
|
|
27
|
+
*
|
|
28
|
+
* Kept byte-identical to the rule the branch-derived `generateWorktreeId` has
|
|
29
|
+
* always used so the path-derived scheme produces IDs from the same alphabet:
|
|
30
|
+
* lower-case, `[^a-z0-9-]` collapsed to `-`, runs of `-` compressed, edges
|
|
31
|
+
* trimmed. The result always satisfies `isValidWorktreeId`.
|
|
32
|
+
*/
|
|
33
|
+
function sanitizeIdSegment(str) {
|
|
34
|
+
return str
|
|
35
|
+
.toLowerCase()
|
|
36
|
+
.replace(/[^a-z0-9-]/g, '-') // Replace non-alphanumeric (except hyphen) with hyphen
|
|
37
|
+
.replace(/-+/g, '-') // Replace consecutive hyphens with single hyphen
|
|
38
|
+
.replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Base used when a directory name sanitizes to the empty string (`/`, `///`,
|
|
42
|
+
* a name made entirely of separators…). Without it the ID would be `''`, which
|
|
43
|
+
* `isValidWorktreeId` rejects and SQLite would happily store.
|
|
44
|
+
*/
|
|
45
|
+
exports.FALLBACK_ID_BASE = 'worktree';
|
|
46
|
+
/**
|
|
47
|
+
* Mint the ID for a worktree that has never been registered before.
|
|
48
|
+
*
|
|
49
|
+
* The ID is a function of the **directory**, never of the branch, and — this is
|
|
50
|
+
* the part that actually buys stability — it is computed **once**, at first
|
|
51
|
+
* registration. `syncWorktreesToDB` looks an existing row up by path and keeps
|
|
52
|
+
* whatever ID that row already carries, so this function is only reached for a
|
|
53
|
+
* genuinely new path. A worktree's ID therefore survives every branch switch,
|
|
54
|
+
* every detached-HEAD commit, and any future change to the rule below.
|
|
55
|
+
*
|
|
56
|
+
* Rule (Issue #1621):
|
|
57
|
+
*
|
|
58
|
+
* id = sanitize(basename(resolvedPath))
|
|
59
|
+
* on collision only: `${id}-${sha256(resolvedPath).slice(0, 8)}`
|
|
60
|
+
*
|
|
61
|
+
* `takenIds` must contain every ID that is already spoken for — worktree rows
|
|
62
|
+
* across *all* repositories (the ID is a global primary key, not a per-repo one)
|
|
63
|
+
* plus historical IDs still resolvable as aliases, so a fresh worktree can never
|
|
64
|
+
* shadow an old ID that redirects somewhere else.
|
|
65
|
+
*
|
|
66
|
+
* Deterministic: same `(resolvedPath, takenIds)` always yields the same ID.
|
|
67
|
+
*
|
|
68
|
+
* @param resolvedPath - Absolute, `path.resolve()`d worktree directory
|
|
69
|
+
* @param takenIds - IDs that are unavailable
|
|
70
|
+
* @returns A URL-safe ID satisfying `isValidWorktreeId`
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* deriveWorktreeId('/repos/commandmate-issue-1644', []) // => 'commandmate-issue-1644'
|
|
75
|
+
* deriveWorktreeId('/b/main', ['main']) // => 'main-3f2a91cc'
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
function deriveWorktreeId(resolvedPath, takenIds = []) {
|
|
79
|
+
const taken = takenIds instanceof Set ? takenIds : new Set(takenIds);
|
|
80
|
+
const base = sanitizeIdSegment(path_1.default.basename(resolvedPath)) || exports.FALLBACK_ID_BASE;
|
|
81
|
+
if (!taken.has(base)) {
|
|
82
|
+
return base;
|
|
83
|
+
}
|
|
84
|
+
// Collision. Disambiguate with a digest of the path itself (not a counter):
|
|
85
|
+
// the result stays a pure function of the directory, so re-deriving the same
|
|
86
|
+
// path against the same set never produces a second, different ID.
|
|
87
|
+
const digest = (0, crypto_1.createHash)('sha256').update(resolvedPath).digest('hex');
|
|
88
|
+
for (let length = 8; length <= digest.length; length += 8) {
|
|
89
|
+
const candidate = `${base}-${digest.slice(0, length)}`;
|
|
90
|
+
if (!taken.has(candidate)) {
|
|
91
|
+
return candidate;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Unreachable short of a full SHA-256 collision on two different paths with
|
|
95
|
+
// the same basename; kept so the function is total rather than returning a
|
|
96
|
+
// duplicate ID and violating the worktrees PK.
|
|
97
|
+
for (let ordinal = 2;; ordinal++) {
|
|
98
|
+
const candidate = `${base}-${digest}-${ordinal}`;
|
|
99
|
+
if (!taken.has(candidate)) {
|
|
100
|
+
return candidate;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Whether `id` is one that {@link deriveWorktreeId} could have minted for
|
|
106
|
+
* `resolvedPath` — i.e. the basename, or the basename followed by a prefix of
|
|
107
|
+
* the path's SHA-256 in 8-hex steps.
|
|
108
|
+
*
|
|
109
|
+
* The inverse of the derivation, and it exists to tell two kinds of retired ID
|
|
110
|
+
* apart (Issue #1658). When the same directory was re-derived over and over, it
|
|
111
|
+
* left a ladder of aliases — `foo`, `foo-2f4530fe`, `foo-2f4530fe1cf1f9f8`, … —
|
|
112
|
+
* every rung pointing at the same worktree, none of them ever handed out for
|
|
113
|
+
* longer than the second it took the next sync to replace it. Those are safe to
|
|
114
|
+
* discard, and must be, because the minter treats an alias as taken and the
|
|
115
|
+
* ladder would otherwise reserve those IDs forever. An ID like
|
|
116
|
+
* `commandagent-develop-develop` — a genuine former name, from the
|
|
117
|
+
* branch-derived scheme — is not of this shape and is kept.
|
|
118
|
+
*
|
|
119
|
+
* Note this is a statement about *shape*, not about history: an ID that happens
|
|
120
|
+
* to match is one this path would produce today.
|
|
121
|
+
*
|
|
122
|
+
* @param id - Candidate ID
|
|
123
|
+
* @param resolvedPath - Absolute, `path.resolve()`d worktree directory
|
|
124
|
+
*/
|
|
125
|
+
function isDerivedWorktreeId(id, resolvedPath) {
|
|
126
|
+
if (!id)
|
|
127
|
+
return false;
|
|
128
|
+
const base = sanitizeIdSegment(path_1.default.basename(resolvedPath)) || exports.FALLBACK_ID_BASE;
|
|
129
|
+
if (id === base)
|
|
130
|
+
return true;
|
|
131
|
+
if (!id.startsWith(`${base}-`))
|
|
132
|
+
return false;
|
|
133
|
+
const suffix = id.slice(base.length + 1);
|
|
134
|
+
const digest = (0, crypto_1.createHash)('sha256').update(resolvedPath).digest('hex');
|
|
135
|
+
// The collision ladder: 8 hex digits at a time, always a prefix of the digest.
|
|
136
|
+
if (suffix.length > 0 &&
|
|
137
|
+
suffix.length % 8 === 0 &&
|
|
138
|
+
suffix.length <= digest.length &&
|
|
139
|
+
digest.startsWith(suffix)) {
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
// The exhausted-digest tail (`<digest>-<ordinal>`), unreachable short of a
|
|
143
|
+
// SHA-256 collision but part of the function's range all the same.
|
|
144
|
+
return /^-[0-9]+$/.test(suffix.slice(digest.length)) && suffix.startsWith(digest);
|
|
145
|
+
}
|