commandmate 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +230 -223
- package/.next/app-path-routes-manifest.json +32 -32
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +5 -3
- package/.next/server/app/api/app/update/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route.js +1 -1
- package/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route.js +1 -1
- package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +2 -2
- package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +2 -2
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route.js +2 -2
- package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route.js +1 -1
- package/.next/server/app/api/ollama/models/route.js.nft.json +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js +2 -2
- package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +2 -2
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js +2 -2
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +2 -2
- package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +2 -2
- package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +2 -2
- package/.next/server/app/api/templates/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +6 -6
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +4 -4
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/apple-icon.png/route.js +1 -1
- package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/icon.png/route.js +1 -1
- package/.next/server/app/icon.png/route.js.nft.json +1 -1
- package/.next/server/app/icon1.png/route.js +1 -1
- package/.next/server/app/icon1.png/route.js.nft.json +1 -1
- package/.next/server/app/icon2.png/route.js +1 -1
- package/.next/server/app/icon2.png/route.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +8 -8
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +32 -32
- package/.next/server/chunks/1029.js +1 -0
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1598.js +4 -0
- package/.next/server/chunks/3042.js +1 -1
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3451.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3753.js +23 -23
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/406.js +5 -5
- package/.next/server/chunks/{1185.js → 5048.js} +1 -1
- package/.next/server/chunks/5959.js +3 -3
- package/.next/server/chunks/{5381.js → 5998.js} +2 -2
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +6 -5
- package/.next/server/chunks/6283.js +1 -1
- package/.next/server/chunks/6401.js +1 -0
- package/.next/server/chunks/641.js +1 -0
- package/.next/server/chunks/8536.js +1 -0
- package/.next/server/chunks/8543.js +1 -0
- package/.next/server/chunks/8807.js +397 -378
- package/.next/server/chunks/8856.js +2 -2
- package/.next/server/chunks/9058.js +1 -0
- package/.next/server/chunks/9067.js +1 -0
- package/.next/server/chunks/9123.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/{6488-109e3825c7249e47.js → 6488-3e7539550c3ef358.js} +1 -1
- package/.next/static/chunks/744-fa8c0ae444c8338c.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/skills/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/templates/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/todos/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-5bdd550ed6386f57.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-214ee8b97dca856b.js +1 -0
- package/.next/trace +12 -12
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/README.md +10 -1
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +12 -4
- package/dist/cli/commands/capture.d.ts +1 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +115 -4
- package/dist/cli/commands/instances.d.ts +24 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +44 -0
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +9 -3
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +13 -4
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +24 -14
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +66 -0
- package/dist/cli/commands/wait.d.ts +4 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +82 -7
- package/dist/cli/config/agent-target-options.d.ts +46 -0
- package/dist/cli/config/agent-target-options.d.ts.map +1 -0
- package/dist/cli/config/agent-target-options.js +54 -0
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +47 -14
- package/dist/cli/types/index.d.ts +16 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +4 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +43 -5
- package/dist/cli/utils/npm-runner.d.ts +24 -0
- package/dist/cli/utils/npm-runner.d.ts.map +1 -1
- package/dist/cli/utils/npm-runner.js +51 -1
- package/dist/cli/utils/pager.d.ts +28 -0
- package/dist/cli/utils/pager.d.ts.map +1 -0
- package/dist/cli/utils/pager.js +57 -0
- package/dist/cli/utils/pid-manager.d.ts +12 -2
- package/dist/cli/utils/pid-manager.d.ts.map +1 -1
- package/dist/cli/utils/pid-manager.js +76 -13
- package/dist/lib/detection/ansi.d.ts +30 -0
- package/dist/lib/detection/ansi.d.ts.map +1 -0
- package/dist/lib/detection/ansi.js +39 -0
- package/dist/lib/tmux/transcript-squeeze.d.ts +76 -0
- package/dist/lib/tmux/transcript-squeeze.d.ts.map +1 -0
- package/dist/lib/tmux/transcript-squeeze.js +96 -0
- package/dist/server/server.js +125 -14
- package/dist/server/src/config/tmux-pane-config.js +33 -1
- package/dist/server/src/lib/auto-yes-state.js +64 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +2 -1
- package/dist/server/src/lib/cli-tools/codex.js +3 -2
- package/dist/server/src/lib/cli-tools/copilot.js +2 -2
- package/dist/server/src/lib/cli-tools/gemini.js +2 -2
- package/dist/server/src/lib/cli-tools/opencode.js +2 -2
- package/dist/server/src/lib/cli-tools/vibe-local.js +2 -2
- package/dist/server/src/lib/db/agent-instances-db.js +53 -0
- package/dist/server/src/lib/db/db-repository.js +66 -2
- package/dist/server/src/lib/db/db.js +12 -3
- package/dist/server/src/lib/db/migrations/index.js +8 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v52-orphaned-worktree-children.js +76 -0
- package/dist/server/src/lib/db/migrations/v53-worktree-aliases.js +53 -0
- package/dist/server/src/lib/db/migrations/v54-worktree-id-path-derived.js +204 -0
- package/dist/server/src/lib/db/migrations/v55-compact-churned-worktree-ids.js +207 -0
- package/dist/server/src/lib/db/migrations/worktree-child-tables.js +119 -0
- package/dist/server/src/lib/db/migrations/worktree-id-rename.js +153 -0
- package/dist/server/src/lib/db/worktree-alias-db.js +155 -0
- package/dist/server/src/lib/db/worktree-db.js +82 -77
- package/dist/server/src/lib/detection/cli-patterns.js +109 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +10 -1
- package/dist/server/src/lib/detection/status-detector.js +52 -2
- package/dist/server/src/lib/git/worktree-id.js +145 -0
- package/dist/server/src/lib/git/worktree-redirect.js +155 -0
- package/dist/server/src/lib/git/worktrees.js +173 -27
- package/dist/server/src/lib/logger.js +13 -1
- package/dist/server/src/lib/polling/auto-yes-manager.js +3 -1
- package/dist/server/src/lib/polling/prompt-dedup.js +22 -0
- package/dist/server/src/lib/polling/response-checker.js +53 -13
- package/dist/server/src/lib/polling/response-dedup.js +22 -0
- package/dist/server/src/lib/polling/response-poller-core.js +107 -0
- package/dist/server/src/lib/polling/response-poller.js +4 -1
- package/dist/server/src/lib/response-extractor.js +22 -2
- package/dist/server/src/lib/session/claude-session.js +121 -37
- package/dist/server/src/lib/session/current-output-builder.js +14 -1
- package/dist/server/src/lib/session/session-start-error.js +125 -0
- package/dist/server/src/lib/session/worktree-session-reconcile.js +603 -0
- package/dist/server/src/lib/tasks/contract-parser.js +17 -1
- package/dist/server/src/lib/tasks/task-state-machine.js +23 -1
- package/dist/server/src/lib/tmux/control-mode-tmux-transport.js +7 -0
- package/dist/server/src/lib/tmux/read-mode-pager.js +161 -0
- package/dist/server/src/lib/tmux/read-mode.js +347 -0
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +33 -0
- package/dist/server/src/lib/tmux/tmux-control-client.js +12 -0
- package/dist/server/src/lib/tmux/tmux-control-registry.js +55 -11
- package/dist/server/src/lib/tmux/tmux.js +104 -5
- package/dist/server/src/lib/ws-server.js +104 -1
- package/package.json +1 -1
- package/.next/server/chunks/1117.js +0 -1
- package/.next/server/chunks/1356.js +0 -4
- package/.next/server/chunks/1692.js +0 -1
- package/.next/server/chunks/4018.js +0 -1
- package/.next/server/chunks/4390.js +0 -1
- package/.next/server/chunks/8681.js +0 -1
- package/.next/static/chunks/744-d5e47fe16e7b9e06.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/templates/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/repositories/page-1ed1e5a542ecc168.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-12b3c5f32fc6094e.js +0 -1
- /package/.next/static/{-BSmW0Ae2YsxyCl_ue7_d → C01FQOE5FCmB3I_GhMa4_}/_buildManifest.js +0 -0
- /package/.next/static/{-BSmW0Ae2YsxyCl_ue7_d → C01FQOE5FCmB3I_GhMa4_}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whitespace squeeze for the on-demand reading mode (Issue #1623).
|
|
3
|
+
*
|
|
4
|
+
* TUI sessions are pinned to a 200x1000 canvas (`src/config/tmux-pane-config.ts`)
|
|
5
|
+
* and the agent draws its transcript near the top and its composer at the very
|
|
6
|
+
* bottom, so a raw `capture-pane` is mostly layout-only blank rows. Measured on a
|
|
7
|
+
* live `mcbd-claude-*` session: 1000 rows, 480 truly empty, 7 more that LOOK empty
|
|
8
|
+
* but carry an SGR sequence (`ESC[49m`) and therefore survive a naive
|
|
9
|
+
* `grep -v '^$'` or `less -s`. Squeezing those runs is what makes `less +G` land
|
|
10
|
+
* on the composer instead of hundreds of rows below the last readable line.
|
|
11
|
+
*
|
|
12
|
+
* ## Relationship to the Web UI normalizer
|
|
13
|
+
*
|
|
14
|
+
* `src/lib/terminal/terminal-display-normalizer.ts` (Issue #1172) solves the same
|
|
15
|
+
* problem for the browser terminal and its rules are the ones reproduced here.
|
|
16
|
+
* This module exists as a separate entry point rather than importing that one
|
|
17
|
+
* because the CLI is compiled by `tsconfig.cli.json`, which sets `"paths": {}` —
|
|
18
|
+
* the normalizer's `@/lib/detection/ansi` import fails there with TS2307 (verified
|
|
19
|
+
* by adding the import and running `tsc --project tsconfig.cli.json`), while the
|
|
20
|
+
* relative import below resolves under every build. The two are held byte-identical
|
|
21
|
+
* by a conformance test over real captures
|
|
22
|
+
* (`tests/unit/lib/tmux/transcript-squeeze.test.ts`), so neither can drift.
|
|
23
|
+
*
|
|
24
|
+
* The transform is DISPLAY-ONLY. Nothing here touches the raw output that status
|
|
25
|
+
* detection, Auto-Yes, the response saver or the DB record consume — those keep
|
|
26
|
+
* full fidelity and full line counts.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* A line is visually blank when nothing printable remains after ANSI removal.
|
|
30
|
+
*
|
|
31
|
+
* `.trim()` is deliberate: ECMAScript's WhiteSpace includes U+00A0, which the
|
|
32
|
+
* Claude composer emits (`ESC[38;5;246m❯ ESC[39m`). That line still holds
|
|
33
|
+
* `❯`, so it is content either way, but a row of pure NBSP correctly reads blank.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isVisuallyBlank(line: string): boolean;
|
|
36
|
+
/** Options for {@link squeezeTranscript}. */
|
|
37
|
+
export interface SqueezeOptions {
|
|
38
|
+
/**
|
|
39
|
+
* Keep only the last N lines OF THE SQUEEZED RESULT (Issue #1623 decision D5).
|
|
40
|
+
*
|
|
41
|
+
* Tailing after the squeeze rather than before it is what makes the number
|
|
42
|
+
* meaningful: `--tail 40` on a 1000-row canvas whose transcript ends at row 254
|
|
43
|
+
* would otherwise return 40 rows of blank padding. Undefined or <= 0 keeps
|
|
44
|
+
* everything.
|
|
45
|
+
*/
|
|
46
|
+
tail?: number;
|
|
47
|
+
}
|
|
48
|
+
/** Outcome of a squeeze, including the counts callers report in `--json`. */
|
|
49
|
+
export interface SqueezeResult {
|
|
50
|
+
/** Squeezed transcript, no trailing newline. */
|
|
51
|
+
text: string;
|
|
52
|
+
/** Line count of the input, before squeezing. */
|
|
53
|
+
rawLines: number;
|
|
54
|
+
/** Line count of {@link text}. */
|
|
55
|
+
lines: number;
|
|
56
|
+
/** True when {@link SqueezeOptions.tail} actually dropped leading lines. */
|
|
57
|
+
tailed: boolean;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Collapse layout-only blank rows in a `capture-pane` frame.
|
|
61
|
+
*
|
|
62
|
+
* Rules (identical to `normalizeTerminalOutputForDisplay`, Issue #1172):
|
|
63
|
+
* 1. Blankness is judged on `stripAnsi(line).trim()`.
|
|
64
|
+
* 2. Leading and trailing blank runs are removed entirely.
|
|
65
|
+
* 3. An internal blank run of 1-2 rows is kept verbatim (real paragraph spacing).
|
|
66
|
+
* 4. An internal blank run of 3+ rows collapses to ONE row carrying that run's
|
|
67
|
+
* ANSI sequences in order, so a color/reset that spans the gap still applies
|
|
68
|
+
* to the rows below it.
|
|
69
|
+
* 5. Non-blank lines are never altered — content, order and duplicates survive.
|
|
70
|
+
*
|
|
71
|
+
* @param raw - Raw `capture-pane -pe` output
|
|
72
|
+
* @param options - Tail limit
|
|
73
|
+
* @returns The squeezed text plus before/after line counts
|
|
74
|
+
*/
|
|
75
|
+
export declare function squeezeTranscript(raw: string, options?: SqueezeOptions): SqueezeResult;
|
|
76
|
+
//# sourceMappingURL=transcript-squeeze.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-squeeze.d.ts","sourceRoot":"","sources":["../../../src/lib/tmux/transcript-squeeze.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CAwC1F"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Whitespace squeeze for the on-demand reading mode (Issue #1623).
|
|
4
|
+
*
|
|
5
|
+
* TUI sessions are pinned to a 200x1000 canvas (`src/config/tmux-pane-config.ts`)
|
|
6
|
+
* and the agent draws its transcript near the top and its composer at the very
|
|
7
|
+
* bottom, so a raw `capture-pane` is mostly layout-only blank rows. Measured on a
|
|
8
|
+
* live `mcbd-claude-*` session: 1000 rows, 480 truly empty, 7 more that LOOK empty
|
|
9
|
+
* but carry an SGR sequence (`ESC[49m`) and therefore survive a naive
|
|
10
|
+
* `grep -v '^$'` or `less -s`. Squeezing those runs is what makes `less +G` land
|
|
11
|
+
* on the composer instead of hundreds of rows below the last readable line.
|
|
12
|
+
*
|
|
13
|
+
* ## Relationship to the Web UI normalizer
|
|
14
|
+
*
|
|
15
|
+
* `src/lib/terminal/terminal-display-normalizer.ts` (Issue #1172) solves the same
|
|
16
|
+
* problem for the browser terminal and its rules are the ones reproduced here.
|
|
17
|
+
* This module exists as a separate entry point rather than importing that one
|
|
18
|
+
* because the CLI is compiled by `tsconfig.cli.json`, which sets `"paths": {}` —
|
|
19
|
+
* the normalizer's `@/lib/detection/ansi` import fails there with TS2307 (verified
|
|
20
|
+
* by adding the import and running `tsc --project tsconfig.cli.json`), while the
|
|
21
|
+
* relative import below resolves under every build. The two are held byte-identical
|
|
22
|
+
* by a conformance test over real captures
|
|
23
|
+
* (`tests/unit/lib/tmux/transcript-squeeze.test.ts`), so neither can drift.
|
|
24
|
+
*
|
|
25
|
+
* The transform is DISPLAY-ONLY. Nothing here touches the raw output that status
|
|
26
|
+
* detection, Auto-Yes, the response saver or the DB record consume — those keep
|
|
27
|
+
* full fidelity and full line counts.
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.isVisuallyBlank = isVisuallyBlank;
|
|
31
|
+
exports.squeezeTranscript = squeezeTranscript;
|
|
32
|
+
const ansi_1 = require("../detection/ansi");
|
|
33
|
+
/**
|
|
34
|
+
* A line is visually blank when nothing printable remains after ANSI removal.
|
|
35
|
+
*
|
|
36
|
+
* `.trim()` is deliberate: ECMAScript's WhiteSpace includes U+00A0, which the
|
|
37
|
+
* Claude composer emits (`ESC[38;5;246m❯ ESC[39m`). That line still holds
|
|
38
|
+
* `❯`, so it is content either way, but a row of pure NBSP correctly reads blank.
|
|
39
|
+
*/
|
|
40
|
+
function isVisuallyBlank(line) {
|
|
41
|
+
return (0, ansi_1.stripAnsi)(line).trim() === '';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Collapse layout-only blank rows in a `capture-pane` frame.
|
|
45
|
+
*
|
|
46
|
+
* Rules (identical to `normalizeTerminalOutputForDisplay`, Issue #1172):
|
|
47
|
+
* 1. Blankness is judged on `stripAnsi(line).trim()`.
|
|
48
|
+
* 2. Leading and trailing blank runs are removed entirely.
|
|
49
|
+
* 3. An internal blank run of 1-2 rows is kept verbatim (real paragraph spacing).
|
|
50
|
+
* 4. An internal blank run of 3+ rows collapses to ONE row carrying that run's
|
|
51
|
+
* ANSI sequences in order, so a color/reset that spans the gap still applies
|
|
52
|
+
* to the rows below it.
|
|
53
|
+
* 5. Non-blank lines are never altered — content, order and duplicates survive.
|
|
54
|
+
*
|
|
55
|
+
* @param raw - Raw `capture-pane -pe` output
|
|
56
|
+
* @param options - Tail limit
|
|
57
|
+
* @returns The squeezed text plus before/after line counts
|
|
58
|
+
*/
|
|
59
|
+
function squeezeTranscript(raw, options = {}) {
|
|
60
|
+
const lines = raw === '' ? [] : raw.split('\n');
|
|
61
|
+
const result = [];
|
|
62
|
+
let seenContent = false;
|
|
63
|
+
let i = 0;
|
|
64
|
+
while (i < lines.length) {
|
|
65
|
+
if (!isVisuallyBlank(lines[i])) {
|
|
66
|
+
result.push(lines[i]);
|
|
67
|
+
seenContent = true;
|
|
68
|
+
i++;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
let j = i;
|
|
72
|
+
while (j < lines.length && isVisuallyBlank(lines[j]))
|
|
73
|
+
j++;
|
|
74
|
+
const isLeading = !seenContent;
|
|
75
|
+
const isTrailing = j >= lines.length;
|
|
76
|
+
if (!isLeading && !isTrailing) {
|
|
77
|
+
if (j - i <= 2) {
|
|
78
|
+
for (let k = i; k < j; k++)
|
|
79
|
+
result.push(lines[k]);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
result.push((0, ansi_1.extractAnsiSequences)(lines.slice(i, j).join('')));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
i = j;
|
|
86
|
+
}
|
|
87
|
+
const tail = options.tail;
|
|
88
|
+
const tailed = tail !== undefined && tail > 0 && result.length > tail;
|
|
89
|
+
const kept = tailed ? result.slice(result.length - tail) : result;
|
|
90
|
+
return {
|
|
91
|
+
text: kept.join('\n'),
|
|
92
|
+
rawLines: lines.length,
|
|
93
|
+
lines: kept.length,
|
|
94
|
+
tailed,
|
|
95
|
+
};
|
|
96
|
+
}
|
package/dist/server/server.js
CHANGED
|
@@ -78,7 +78,11 @@ const resource_cleanup_1 = require("./src/lib/resource-cleanup");
|
|
|
78
78
|
const db_migrations_1 = require("./src/lib/db/db-migrations");
|
|
79
79
|
const env_1 = require("./src/lib/env");
|
|
80
80
|
const db_repository_1 = require("./src/lib/db/db-repository");
|
|
81
|
-
|
|
81
|
+
// Issue #1666: `resolveRepositoryPath`, `getWorktreeIdsByRepository`,
|
|
82
|
+
// `deleteWorktreesByIds`, `cleanupMultipleWorktrees` and `killWorktreeSession`
|
|
83
|
+
// went with the startup purge — they had no other caller here. `npm run lint`
|
|
84
|
+
// only covers `src/`, and tsconfig sets no `noUnusedLocals`, so nothing in the
|
|
85
|
+
// gates would have flagged them: they were removed by inspection, not by a tool.
|
|
82
86
|
const session_cleanup_1 = require("./src/lib/session-cleanup");
|
|
83
87
|
const dev = process.env.NODE_ENV !== 'production';
|
|
84
88
|
const hostname = (0, env_1.getEnvByKey)('CM_BIND') || '127.0.0.1';
|
|
@@ -116,6 +120,32 @@ function validateCertPath(filePath, label) {
|
|
|
116
120
|
// Create Next.js app
|
|
117
121
|
const app = (0, next_1.default)({ dev, hostname, port });
|
|
118
122
|
const handle = app.getRequestHandler();
|
|
123
|
+
let worktreeRedirectModule = null;
|
|
124
|
+
let worktreeRedirectLoad = null;
|
|
125
|
+
async function resolveWorktreeAliasRedirect(url) {
|
|
126
|
+
if (!worktreeRedirectModule) {
|
|
127
|
+
if (!worktreeRedirectLoad) {
|
|
128
|
+
worktreeRedirectLoad = Promise.resolve().then(() => __importStar(require('./src/lib/git/worktree-redirect'))).then((mod) => {
|
|
129
|
+
worktreeRedirectModule = mod;
|
|
130
|
+
})
|
|
131
|
+
.catch((error) => {
|
|
132
|
+
// Fail open: without the resolver the layout's meta refresh still
|
|
133
|
+
// lands the user on the right worktree.
|
|
134
|
+
console.error('Failed to load worktree redirect resolver:', error);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
await worktreeRedirectLoad;
|
|
138
|
+
}
|
|
139
|
+
if (!worktreeRedirectModule)
|
|
140
|
+
return null;
|
|
141
|
+
try {
|
|
142
|
+
return worktreeRedirectModule.resolveWorktreeRedirect(url);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.error('Worktree redirect resolution failed:', error);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
119
149
|
// Issue #331: Prevent Next.js (NextCustomServer) from registering its own upgrade
|
|
120
150
|
// event listener on the HTTP server.
|
|
121
151
|
//
|
|
@@ -160,6 +190,21 @@ app.prepare().then(() => {
|
|
|
160
190
|
}
|
|
161
191
|
const method = req.method ?? 'UNKNOWN';
|
|
162
192
|
const url = req.url ?? '/';
|
|
193
|
+
// Issue #1621/#1645: a URL naming a worktree by a retired ID gets a real
|
|
194
|
+
// 308 here, before Next renders anything. The cheap prefix test keeps every
|
|
195
|
+
// other route free of the dynamic import and the alias lookup.
|
|
196
|
+
if (url.startsWith('/worktrees/')) {
|
|
197
|
+
const redirect = await resolveWorktreeAliasRedirect(url);
|
|
198
|
+
if (redirect && !res.headersSent) {
|
|
199
|
+
res.statusCode = redirect.statusCode;
|
|
200
|
+
res.setHeader('Location', redirect.location);
|
|
201
|
+
// See WORKTREE_REDIRECT_CACHE_CONTROL: alias -> live is durable, not
|
|
202
|
+
// eternal, and a cached permanent redirect could never be corrected.
|
|
203
|
+
res.setHeader('Cache-Control', 'no-store');
|
|
204
|
+
res.end();
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
163
208
|
try {
|
|
164
209
|
const parsedUrl = (0, url_1.parse)(url, true);
|
|
165
210
|
await handle(req, res, parsedUrl);
|
|
@@ -226,6 +271,42 @@ app.prepare().then(() => {
|
|
|
226
271
|
catch (error) {
|
|
227
272
|
console.error('Error reconciling Skill operations:', error);
|
|
228
273
|
}
|
|
274
|
+
// Issue #1621 Phase 3/4: make live tmux sessions follow the worktree IDs
|
|
275
|
+
// that migration v54 has just renumbered. Session names are DERIVED from
|
|
276
|
+
// the ID (`mcbd-{cli}-{worktreeId}`), so a running agent would otherwise
|
|
277
|
+
// keep its process while disappearing from the UI — and the app would
|
|
278
|
+
// happily start a second agent in the same directory. `worktree_aliases`
|
|
279
|
+
// is the durable record of every ID that has moved, which makes this pass
|
|
280
|
+
// idempotent: when nothing is stale it costs one `tmux list-sessions`.
|
|
281
|
+
//
|
|
282
|
+
// Fail-open in its own try/catch — reconciling sessions must never be
|
|
283
|
+
// able to stop the server from serving. Dynamic import for the same
|
|
284
|
+
// reason as the reconcilers around it: a static import here perturbs
|
|
285
|
+
// Next's AsyncLocalStorage bootstrap under `tsx server.ts` and the first
|
|
286
|
+
// request that compiles middleware dies. Do not hoist this.
|
|
287
|
+
try {
|
|
288
|
+
const { reconcileWorktreeSessionsFromAliases } = await Promise.resolve().then(() => __importStar(require('./src/lib/session/worktree-session-reconcile')));
|
|
289
|
+
const sessionReport = await reconcileWorktreeSessionsFromAliases(db);
|
|
290
|
+
if (sessionReport.renamedSessions.length > 0) {
|
|
291
|
+
console.log(`Reconciled ${sessionReport.renamedSessions.length} tmux session(s) to renamed worktree IDs ` +
|
|
292
|
+
`(predicted=${sessionReport.planSources.predicted} ` +
|
|
293
|
+
`discovered=${sessionReport.planSources.discovered})`);
|
|
294
|
+
}
|
|
295
|
+
// Issue #1661: a live `mcbd-*` session that no known worktree ID
|
|
296
|
+
// explains is exactly what the previous report could not express — the
|
|
297
|
+
// pass ran clean while two agents sat stranded under stale names. Say
|
|
298
|
+
// it out loud, with the names, so it is actionable from the log alone.
|
|
299
|
+
if (sessionReport.unaccountedSessions.length > 0) {
|
|
300
|
+
console.warn(`${sessionReport.unaccountedSessions.length} tmux session(s) match no known worktree ID ` +
|
|
301
|
+
`and were left untouched: ${sessionReport.unaccountedSessions.join(', ')}`);
|
|
302
|
+
}
|
|
303
|
+
if (sessionReport.errors.length > 0) {
|
|
304
|
+
console.warn(`Session reconcile warnings: ${sessionReport.errors.join(', ')}`);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
console.error('Error reconciling worktree sessions:', error);
|
|
309
|
+
}
|
|
229
310
|
// Issue #1543: close verification runs that a crash left in `running`.
|
|
230
311
|
// Gate execution lives in process memory, so none of them survived the
|
|
231
312
|
// restart; leaving the rows open would keep their worktrees permanently
|
|
@@ -269,19 +350,31 @@ app.prepare().then(() => {
|
|
|
269
350
|
excludedPaths.forEach(p => {
|
|
270
351
|
console.log(` [excluded] ${p}`);
|
|
271
352
|
});
|
|
272
|
-
// Issue #
|
|
273
|
-
//
|
|
274
|
-
//
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
353
|
+
// Issue #1666: exclusion is where startup STOPS, not where it deletes.
|
|
354
|
+
//
|
|
355
|
+
// This branch used to purge every excluded repository — kill its tmux
|
|
356
|
+
// sessions, then `deleteWorktreesByIds`, taking chat history, memos,
|
|
357
|
+
// todos, timers, schedules, execution logs, tasks and verification runs
|
|
358
|
+
// with it by cascade. That was #202's "deleted repositories must not
|
|
359
|
+
// reappear after a restart", and it was harmless for exactly as long as
|
|
360
|
+
// `DELETE /api/repositories` was the only route to `enabled = 0`: that
|
|
361
|
+
// route already purged, so the loop re-deleted nothing.
|
|
362
|
+
//
|
|
363
|
+
// #1658 added a non-destructive disable (a single
|
|
364
|
+
// `UPDATE repositories SET enabled = 0`), which made this loop the
|
|
365
|
+
// thing that undid it — and only for `WORKTREE_REPOS` repositories,
|
|
366
|
+
// because a DB-only one leaves `allPaths` when disabled and never
|
|
367
|
+
// reaches `excludedPaths` at all. So the same toggle was destructive or
|
|
368
|
+
// not depending on where the repository had been configured, and the
|
|
369
|
+
// damage landed a restart later, far from the click that caused it.
|
|
370
|
+
//
|
|
371
|
+
// #202 survives without the deletion: an excluded repository is not
|
|
372
|
+
// scanned, so nothing re-creates its rows, and keeping rows is not the
|
|
373
|
+
// same as showing them. Hiding a repository's worktrees from the
|
|
374
|
+
// sidebar is `visible`'s job (#690) — a separate, reversible flag that
|
|
375
|
+
// the user sets deliberately — whereas `enabled` only decides what gets
|
|
376
|
+
// scanned. Deleting rows to achieve "not shown" destroys history to
|
|
377
|
+
// implement a view filter, and cannot be undone by re-enabling.
|
|
285
378
|
}
|
|
286
379
|
// Scan filtered repositories (excluded repos are skipped)
|
|
287
380
|
const worktrees = await (0, worktrees_1.scanMultipleRepositories)(filteredPaths);
|
|
@@ -319,6 +412,24 @@ app.prepare().then(() => {
|
|
|
319
412
|
console.log(`> WebSocket server ready`);
|
|
320
413
|
// Initialize worktrees after server starts
|
|
321
414
|
await initializeWorktrees();
|
|
415
|
+
// Issue #1623: reconcile the `prefix+g` reading-mode binding on the user's
|
|
416
|
+
// tmux server. Fail-open in its own try/catch — a convenience key must never
|
|
417
|
+
// be able to stop the server from serving.
|
|
418
|
+
//
|
|
419
|
+
// Dynamic import, NOT a top-level static import, for the same reason as the
|
|
420
|
+
// reconcilers above: adding a module graph to server.ts's eval-time graph
|
|
421
|
+
// perturbs Next's AsyncLocalStorage bootstrap under `tsx server.ts`, and the
|
|
422
|
+
// first request that compiles middleware then dies. Do not hoist this.
|
|
423
|
+
try {
|
|
424
|
+
const { initReadMode } = await Promise.resolve().then(() => __importStar(require('./src/lib/tmux/read-mode')));
|
|
425
|
+
const readMode = await initReadMode();
|
|
426
|
+
if (readMode.installed) {
|
|
427
|
+
console.log(`Reading mode ready: press prefix+${readMode.key} in an attached CommandMate session`);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
catch (error) {
|
|
431
|
+
console.error('Error initializing tmux reading mode:', error);
|
|
432
|
+
}
|
|
322
433
|
// [S3-010] Initialize schedule manager AFTER worktrees are ready
|
|
323
434
|
(0, schedule_manager_1.initScheduleManager)();
|
|
324
435
|
// Issue #534: Initialize timer manager AFTER schedule manager
|
|
@@ -17,8 +17,40 @@
|
|
|
17
17
|
* so `capture-pane` cost / render load stays reasonable.
|
|
18
18
|
*/
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.TUI_PANE_WIDTH = exports.TUI_PANE_HEIGHT = void 0;
|
|
20
|
+
exports.TMUX_HISTORY_LIMIT = exports.TUI_PANE_WIDTH = exports.TUI_PANE_HEIGHT = void 0;
|
|
21
21
|
/** Fixed pane height (rows) for TUI sessions. Large enough to retain useful history. */
|
|
22
22
|
exports.TUI_PANE_HEIGHT = 1000;
|
|
23
23
|
/** Fixed pane width (columns) for TUI sessions. Matches the historical default. */
|
|
24
24
|
exports.TUI_PANE_WIDTH = 200;
|
|
25
|
+
/**
|
|
26
|
+
* Scrollback lines retained per pane (`history-limit`), Issue #1624.
|
|
27
|
+
*
|
|
28
|
+
* Only NON-alternate-screen tools (codex / gemini / vibe-local / antigravity)
|
|
29
|
+
* consume this: the alternate-screen tools in `ALTERNATE_SCREEN_CLI_TOOLS`
|
|
30
|
+
* (claude / opencode / copilot) keep `history_size` at 0, so scrollback depth is
|
|
31
|
+
* irrelevant to them. See `usesAlternateScreen` in lib/cli-tools/types.ts.
|
|
32
|
+
*
|
|
33
|
+
* WHY 20000 and not the 50000 this used to request — measured on tmux 3.5a with
|
|
34
|
+
* a 200-column pane full of realistic, heavily-SGR-coloured agent output
|
|
35
|
+
* (274 bytes/line as re-emitted by `capture-pane -e`):
|
|
36
|
+
*
|
|
37
|
+
* 1. `capturePane` runs tmux under `execFile` with `maxBuffer: 10 MB`. A full
|
|
38
|
+
* 50000-line capture extrapolates to ~13 MB of escape-laden text, which
|
|
39
|
+
* OVERFLOWS that buffer and makes `capturePane` THROW rather than return a
|
|
40
|
+
* truncated string — i.e. the deepest part of a 50000-line buffer was never
|
|
41
|
+
* readable by this app in the first place. 20000 lines is ~5.2 MB, leaving
|
|
42
|
+
* roughly 2x headroom.
|
|
43
|
+
* 2. Nothing in the app reads deeper than 10000 lines by default (`capturePane`'s
|
|
44
|
+
* options-path default is `-S -10000`; every other call site asks for 1000 or
|
|
45
|
+
* fewer). 20000 keeps a 2x margin over the deepest default read.
|
|
46
|
+
* 3. Memory is charged per line ACTUALLY emitted, not preallocated from the
|
|
47
|
+
* limit: a fresh session cost ~0.3 MB of tmux-server RSS, growing to ~34 MB
|
|
48
|
+
* only after 45000 lines had scrolled (~0.68 KB/line). At 20000 a saturated
|
|
49
|
+
* pane costs ~14 MB, so 20 concurrent sessions cap out near 270 MB instead of
|
|
50
|
+
* the ~680 MB implied by 50000.
|
|
51
|
+
*
|
|
52
|
+
* This is still a 10x increase over tmux's built-in 2000, which is what sessions
|
|
53
|
+
* were actually getting before #1624 (a `mcbd-codex-*` session was observed at
|
|
54
|
+
* 1977/2000 lines used, i.e. actively losing transcript).
|
|
55
|
+
*/
|
|
56
|
+
exports.TMUX_HISTORY_LIMIT = 20000;
|
|
@@ -27,6 +27,7 @@ exports.getAutoYesStateCompositeKeys = getAutoYesStateCompositeKeys;
|
|
|
27
27
|
exports.filterCompositeKeysByWorktree = filterCompositeKeysByWorktree;
|
|
28
28
|
exports.getCompositeKeysByWorktree = getCompositeKeysByWorktree;
|
|
29
29
|
exports.deleteAutoYesStateByWorktree = deleteAutoYesStateByWorktree;
|
|
30
|
+
exports.migrateAutoYesStateWorktreeIds = migrateAutoYesStateWorktreeIds;
|
|
30
31
|
exports.calculateBackoffInterval = calculateBackoffInterval;
|
|
31
32
|
const auto_yes_config_1 = require("../config/auto-yes-config");
|
|
32
33
|
const path_validator_1 = require("./security/path-validator");
|
|
@@ -358,6 +359,69 @@ function deleteAutoYesStateByWorktree(worktreeId) {
|
|
|
358
359
|
keys.forEach(key => autoYesStates.delete(key));
|
|
359
360
|
return keys.length;
|
|
360
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* Re-key every auto-yes state whose worktree ID is being renamed
|
|
364
|
+
* (Issue #1621 Phase 3).
|
|
365
|
+
*
|
|
366
|
+
* **Transfer, never invalidate.** Auto-Yes is what keeps an unattended worker
|
|
367
|
+
* answering prompts; dropping the state at rename time would leave the agent
|
|
368
|
+
* alive and silently stuck at the next confirmation, hours later, with nothing
|
|
369
|
+
* in the UI to explain it. The state object itself (enabledAt / expiresAt /
|
|
370
|
+
* stopPattern) is moved verbatim, so the countdown a user started keeps running
|
|
371
|
+
* against its original deadline.
|
|
372
|
+
*
|
|
373
|
+
* Takes the whole batch rather than one pair because IDs can **swap**: with
|
|
374
|
+
* A→B and B→A applied one at a time, the first move overwrites the destination's
|
|
375
|
+
* state before the destination has been read. Every source key is therefore read
|
|
376
|
+
* and removed first, and only then are the new keys written.
|
|
377
|
+
*
|
|
378
|
+
* The poller that consumes these states is a separate map with its own timers,
|
|
379
|
+
* and its timer callbacks capture the worktree ID — see
|
|
380
|
+
* `reconcileWorktreeSessions`, which restarts them. Moving the state without
|
|
381
|
+
* restarting the poller would stop Auto-Yes just as surely as deleting it.
|
|
382
|
+
*
|
|
383
|
+
* @param renames - Worktree ID pairs being applied
|
|
384
|
+
* @returns One entry per state that moved
|
|
385
|
+
*/
|
|
386
|
+
function migrateAutoYesStateWorktreeIds(renames) {
|
|
387
|
+
const targets = new Map();
|
|
388
|
+
for (const { oldId, newId } of renames) {
|
|
389
|
+
if (!oldId || !newId || oldId === newId)
|
|
390
|
+
continue;
|
|
391
|
+
targets.set(oldId, newId);
|
|
392
|
+
}
|
|
393
|
+
if (targets.size === 0)
|
|
394
|
+
return [];
|
|
395
|
+
const moves = [];
|
|
396
|
+
for (const [key, state] of autoYesStates) {
|
|
397
|
+
const oldWorktreeId = extractWorktreeId(key);
|
|
398
|
+
const newWorktreeId = targets.get(oldWorktreeId);
|
|
399
|
+
if (!newWorktreeId)
|
|
400
|
+
continue;
|
|
401
|
+
const cliToolId = extractCliToolId(key);
|
|
402
|
+
// A key whose second segment is not a known CLI tool cannot be rebuilt
|
|
403
|
+
// safely; leave it where it is rather than guess (it is unreachable through
|
|
404
|
+
// buildCompositeKey, so this only fires on hand-written state).
|
|
405
|
+
if (!cliToolId)
|
|
406
|
+
continue;
|
|
407
|
+
const instanceId = extractInstanceId(key) ?? cliToolId;
|
|
408
|
+
moves.push({
|
|
409
|
+
oldKey: key,
|
|
410
|
+
newKey: buildCompositeKey(newWorktreeId, cliToolId, instanceId),
|
|
411
|
+
oldWorktreeId,
|
|
412
|
+
newWorktreeId,
|
|
413
|
+
cliToolId,
|
|
414
|
+
instanceId,
|
|
415
|
+
state,
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
// Two passes so a swap (A→B, B→A) cannot have one half clobber the other.
|
|
419
|
+
for (const move of moves)
|
|
420
|
+
autoYesStates.delete(move.oldKey);
|
|
421
|
+
for (const move of moves)
|
|
422
|
+
autoYesStates.set(move.newKey, move.state);
|
|
423
|
+
return moves.map(({ state: _state, ...rest }) => rest);
|
|
424
|
+
}
|
|
361
425
|
/**
|
|
362
426
|
* Calculate backoff interval based on consecutive errors.
|
|
363
427
|
* Returns the normal polling interval when errors are below the threshold,
|
|
@@ -119,10 +119,11 @@ class AntigravityTool extends base_1.BaseCLITool {
|
|
|
119
119
|
try {
|
|
120
120
|
// Create tmux session with large history buffer for agy output
|
|
121
121
|
// (agy is inline-rendered and retains scrollback, like Codex)
|
|
122
|
+
// Scrollback depth comes from the shared TMUX_HISTORY_LIMIT default
|
|
123
|
+
// (Issue #1624) — do not re-hardcode it here.
|
|
122
124
|
await (0, tmux_1.createSession)({
|
|
123
125
|
sessionName,
|
|
124
126
|
workingDirectory: worktreePath,
|
|
125
|
-
historyLimit: 50000,
|
|
126
127
|
});
|
|
127
128
|
// Wait a moment for the session to be created
|
|
128
129
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
@@ -67,11 +67,12 @@ class CodexTool extends base_1.BaseCLITool {
|
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
69
|
try {
|
|
70
|
-
// Create tmux session
|
|
70
|
+
// Create tmux session. Codex is inline-rendered, so its transcript lives in
|
|
71
|
+
// the pane scrollback — depth comes from the shared TMUX_HISTORY_LIMIT
|
|
72
|
+
// default (Issue #1624), do not re-hardcode it here.
|
|
71
73
|
await (0, tmux_1.createSession)({
|
|
72
74
|
sessionName,
|
|
73
75
|
workingDirectory: worktreePath,
|
|
74
|
-
historyLimit: 50000,
|
|
75
76
|
});
|
|
76
77
|
// Wait a moment for the session to be created
|
|
77
78
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
@@ -113,11 +113,11 @@ class CopilotTool extends base_1.BaseCLITool {
|
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
115
|
try {
|
|
116
|
-
// Create tmux session
|
|
116
|
+
// Create tmux session. Scrollback depth comes from the shared
|
|
117
|
+
// TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
|
|
117
118
|
await (0, tmux_1.createSession)({
|
|
118
119
|
sessionName,
|
|
119
120
|
workingDirectory: worktreePath,
|
|
120
|
-
historyLimit: 50000,
|
|
121
121
|
});
|
|
122
122
|
// Wait a moment for the session to be created
|
|
123
123
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
@@ -74,11 +74,11 @@ class GeminiTool extends base_1.BaseCLITool {
|
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
76
76
|
try {
|
|
77
|
-
// Create tmux session
|
|
77
|
+
// Create tmux session. Scrollback depth comes from the shared
|
|
78
|
+
// TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
|
|
78
79
|
await (0, tmux_1.createSession)({
|
|
79
80
|
sessionName,
|
|
80
81
|
workingDirectory: worktreePath,
|
|
81
|
-
historyLimit: 50000,
|
|
82
82
|
});
|
|
83
83
|
// Wait a moment for the session to be created
|
|
84
84
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
@@ -89,11 +89,11 @@ class OpenCodeTool extends base_1.BaseCLITool {
|
|
|
89
89
|
try {
|
|
90
90
|
// Generate opencode.json if not present (non-fatal on failure)
|
|
91
91
|
await (0, opencode_config_1.ensureOpencodeConfig)(worktreePath);
|
|
92
|
-
// Create tmux session
|
|
92
|
+
// Create tmux session. Scrollback depth comes from the shared
|
|
93
|
+
// TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
|
|
93
94
|
await (0, tmux_1.createSession)({
|
|
94
95
|
sessionName,
|
|
95
96
|
workingDirectory: worktreePath,
|
|
96
|
-
historyLimit: 50000,
|
|
97
97
|
});
|
|
98
98
|
// Wait a moment for the session to be created
|
|
99
99
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
@@ -66,11 +66,11 @@ class VibeLocalTool extends base_1.BaseCLITool {
|
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
68
|
try {
|
|
69
|
-
// Create tmux session
|
|
69
|
+
// Create tmux session. Scrollback depth comes from the shared
|
|
70
|
+
// TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
|
|
70
71
|
await (0, tmux_1.createSession)({
|
|
71
72
|
sessionName,
|
|
72
73
|
workingDirectory: worktreePath,
|
|
73
|
-
historyLimit: 50000,
|
|
74
74
|
});
|
|
75
75
|
// Wait a moment for the session to be created
|
|
76
76
|
await new Promise((resolve) => setTimeout(resolve, cli_tool_timing_config_1.TUI_SESSION_CREATE_WAIT_MS));
|
|
@@ -15,6 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.InvalidAgentInstanceError = exports.AgentInstanceLimitError = void 0;
|
|
16
16
|
exports.getAgentInstances = getAgentInstances;
|
|
17
17
|
exports.getAgentInstance = getAgentInstance;
|
|
18
|
+
exports.resolveInstanceCliTool = resolveInstanceCliTool;
|
|
18
19
|
exports.countAgentInstances = countAgentInstances;
|
|
19
20
|
exports.setAgentInstances = setAgentInstances;
|
|
20
21
|
exports.addAgentInstance = addAgentInstance;
|
|
@@ -103,6 +104,58 @@ function getAgentInstance(db, worktreeId, instanceId) {
|
|
|
103
104
|
`).get(worktreeId, instanceId);
|
|
104
105
|
return row ? mapAgentInstance(row) : null;
|
|
105
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Resolve which CLI tool backs a targeted agent instance (Issue #1629).
|
|
109
|
+
*
|
|
110
|
+
* The CLI tool id is part of the tmux session name, so getting it wrong starts
|
|
111
|
+
* (or looks for) the wrong agent under a session name that claims otherwise:
|
|
112
|
+
* `--instance codex` used to start Claude in `mcbd-claude-<wt>-codex`.
|
|
113
|
+
*
|
|
114
|
+
* Resolution order:
|
|
115
|
+
* 1. the roster entry for `instanceId` — the roster is what declares that
|
|
116
|
+
* `codex` is a codex instance, so it wins over the worktree default
|
|
117
|
+
* 2. `requestedCliTool`, for an instance the roster does not know about
|
|
118
|
+
* (the ad-hoc `send --instance <new-id>` / `--register` flow)
|
|
119
|
+
* 3. `instanceId` when it is itself a CLI tool id — that is how the primary
|
|
120
|
+
* instance is anchored (Issue #868), and holds without a roster row
|
|
121
|
+
* 4. no signal (`cliToolId: null`) — the caller falls back to its default
|
|
122
|
+
*
|
|
123
|
+
* An explicit `requestedCliTool` that contradicts the roster is reported as a
|
|
124
|
+
* conflict rather than silently overriding it: the roster is user-maintained
|
|
125
|
+
* and a mismatch means one of the two is wrong. Callers surface it as an error.
|
|
126
|
+
*
|
|
127
|
+
* @param db - Database instance
|
|
128
|
+
* @param worktreeId - Worktree ID
|
|
129
|
+
* @param instanceId - Targeted agent instance ID (omitted for the primary instance)
|
|
130
|
+
* @param requestedCliTool - CLI tool explicitly named by the caller, if any
|
|
131
|
+
*/
|
|
132
|
+
function resolveInstanceCliTool(db, worktreeId, instanceId, requestedCliTool) {
|
|
133
|
+
if (!instanceId) {
|
|
134
|
+
return { ok: true, cliToolId: requestedCliTool ?? null };
|
|
135
|
+
}
|
|
136
|
+
const registered = getAgentInstance(db, worktreeId, instanceId);
|
|
137
|
+
if (registered && (0, types_1.isCliToolType)(registered.cliTool)) {
|
|
138
|
+
if (requestedCliTool && requestedCliTool !== registered.cliTool) {
|
|
139
|
+
return {
|
|
140
|
+
ok: false,
|
|
141
|
+
instanceId,
|
|
142
|
+
rosterCliTool: registered.cliTool,
|
|
143
|
+
requestedCliTool,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return { ok: true, cliToolId: registered.cliTool };
|
|
147
|
+
}
|
|
148
|
+
// Not registered: an instance id that names a CLI tool is that tool's primary
|
|
149
|
+
// instance by definition, which outranks the worktree default but not an
|
|
150
|
+
// explicit request.
|
|
151
|
+
if (requestedCliTool) {
|
|
152
|
+
return { ok: true, cliToolId: requestedCliTool };
|
|
153
|
+
}
|
|
154
|
+
if ((0, types_1.isCliToolType)(instanceId)) {
|
|
155
|
+
return { ok: true, cliToolId: instanceId };
|
|
156
|
+
}
|
|
157
|
+
return { ok: true, cliToolId: null };
|
|
158
|
+
}
|
|
106
159
|
/**
|
|
107
160
|
* Count agent instances for a worktree.
|
|
108
161
|
*/
|