commandmate 0.19.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +259 -238
- package/.next/app-path-routes-manifest.json +28 -26
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +18 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route.js +5 -3
- package/.next/server/app/api/app/update/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route.js.nft.json +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route.js +1 -1
- package/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route.js +1 -1
- package/.next/server/app/api/external-apps/route.js.nft.json +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +2 -2
- package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +2 -2
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route.js +2 -2
- package/.next/server/app/api/metrics/vibe/route.js.nft.json +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route.js +1 -1
- package/.next/server/app/api/ollama/models/route.js.nft.json +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js.nft.json +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js +1 -1
- package/.next/server/app/api/repositories/excluded/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route.js +2 -2
- package/.next/server/app/api/sidebar/group-order/route.js.nft.json +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js +1 -1
- package/.next/server/app/api/skills/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route.js +1 -1
- package/.next/server/app/api/skills/installations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route.js +3 -3
- package/.next/server/app/api/skills/operations/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js +1 -1
- package/.next/server/app/api/skills/reindex/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route.js +1 -1
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js +2 -2
- package/.next/server/app/api/tasks/[taskId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +2 -2
- package/.next/server/app/api/tasks/[taskId]/route.js.nft.json +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route.js +2 -2
- package/.next/server/app/api/templates/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route.js +2 -2
- package/.next/server/app/api/templates/route.js.nft.json +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js.nft.json +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +6 -6
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/skills/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +4 -4
- package/.next/server/app/api/worktrees/[id]/tasks/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/apple-icon.png/route.js +1 -1
- package/.next/server/app/apple-icon.png/route.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/icon.png/route.js +1 -1
- package/.next/server/app/icon.png/route.js.nft.json +1 -1
- package/.next/server/app/icon1.png/route.js +1 -1
- package/.next/server/app/icon1.png/route.js.nft.json +1 -1
- package/.next/server/app/icon2.png/route.js +1 -1
- package/.next/server/app/icon2.png/route.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route.js +2 -2
- package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js +1 -1
- package/.next/server/app/proxy/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +8 -8
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
- package/.next/server/app/worktrees/[id]/terminal/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +28 -26
- package/.next/server/chunks/1029.js +1 -0
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1503.js +1 -1
- package/.next/server/chunks/1598.js +4 -0
- package/.next/server/chunks/22.js +1 -1
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2546.js +1 -0
- package/.next/server/chunks/2710.js +2 -2
- package/.next/server/chunks/28.js +2 -2
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3451.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/365.js +1 -0
- package/.next/server/chunks/3736.js +1 -1
- package/.next/server/chunks/3753.js +33 -20
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/406.js +5 -5
- package/.next/server/chunks/4444.js +1 -1
- package/.next/server/chunks/{1185.js → 5048.js} +1 -1
- package/.next/server/chunks/5064.js +1 -1
- package/.next/server/chunks/5737.js +1 -1
- package/.next/server/chunks/5959.js +10 -3
- package/.next/server/chunks/{5381.js → 5998.js} +2 -2
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +5 -5
- package/.next/server/chunks/6283.js +1 -1
- package/.next/server/chunks/6401.js +1 -0
- package/.next/server/chunks/641.js +1 -0
- package/.next/server/chunks/848.js +1 -0
- package/.next/server/chunks/8536.js +1 -0
- package/.next/server/chunks/8543.js +1 -0
- package/.next/server/chunks/8584.js +1 -1
- package/.next/server/chunks/8807.js +157 -143
- package/.next/server/chunks/8856.js +2 -2
- package/.next/server/chunks/9058.js +1 -0
- package/.next/server/chunks/9067.js +1 -0
- package/.next/server/chunks/9123.js +1 -1
- package/.next/server/chunks/9360.js +2 -0
- package/.next/server/chunks/9687.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/{8562-6e2ab32452f4fa5b.js → 2053-52d3c82014e1cd54.js} +1 -1
- package/.next/static/chunks/2751-9ef0f4b450bd4ef0.js +1 -0
- package/.next/static/chunks/{6488-2c412c29258637b6.js → 6488-b5e707dfdd33d633.js} +1 -1
- package/.next/static/chunks/744-fa8c0ae444c8338c.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/skills/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/templates/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/repositories/page-202680fe6ec169c8.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-10d6f983e5f06ffb.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-be21650964d61b1d.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-b73ac6531829c698.js +1 -0
- package/.next/trace +12 -12
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/update/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/skills/[skillId]/update-plan/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -2
- package/.next/types/validator.ts +27 -0
- package/README.md +10 -1
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +4 -3
- package/dist/cli/commands/capture.d.ts +1 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +112 -2
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +9 -3
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +34 -8
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +6 -5
- package/dist/cli/commands/skill-format.d.ts +7 -1
- package/dist/cli/commands/skill-format.d.ts.map +1 -1
- package/dist/cli/commands/skill-format.js +67 -0
- package/dist/cli/commands/skill.d.ts +2 -0
- package/dist/cli/commands/skill.d.ts.map +1 -1
- package/dist/cli/commands/skill.js +149 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +53 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +66 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +3 -2
- package/dist/cli/config/agent-target-options.d.ts +46 -0
- package/dist/cli/config/agent-target-options.d.ts.map +1 -0
- package/dist/cli/config/agent-target-options.js +54 -0
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +72 -17
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +3 -0
- package/dist/cli/types/api-responses.d.ts +174 -0
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +31 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +4 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +43 -5
- package/dist/cli/utils/npm-runner.d.ts +24 -0
- package/dist/cli/utils/npm-runner.d.ts.map +1 -1
- package/dist/cli/utils/npm-runner.js +51 -1
- package/dist/cli/utils/pid-manager.d.ts +12 -2
- package/dist/cli/utils/pid-manager.d.ts.map +1 -1
- package/dist/cli/utils/pid-manager.js +76 -13
- package/dist/cli/utils/verify-runner.d.ts +9 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +28 -2
- package/dist/config/history-display-config.d.ts +61 -0
- package/dist/config/history-display-config.d.ts.map +1 -0
- package/dist/config/history-display-config.js +62 -0
- package/dist/server/server.js +107 -14
- package/dist/server/src/lib/auto-yes-poller.js +49 -0
- package/dist/server/src/lib/auto-yes-state.js +64 -0
- package/dist/server/src/lib/db/chat-db.js +75 -1
- package/dist/server/src/lib/db/db-repository.js +66 -2
- package/dist/server/src/lib/db/db.js +13 -3
- package/dist/server/src/lib/db/migrations/index.js +6 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v53-worktree-aliases.js +53 -0
- package/dist/server/src/lib/db/migrations/v54-worktree-id-path-derived.js +204 -0
- package/dist/server/src/lib/db/migrations/v55-compact-churned-worktree-ids.js +207 -0
- package/dist/server/src/lib/db/migrations/worktree-id-rename.js +153 -0
- package/dist/server/src/lib/db/worktree-alias-db.js +155 -0
- package/dist/server/src/lib/db/worktree-db.js +53 -71
- package/dist/server/src/lib/detection/cli-patterns.js +86 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +10 -1
- package/dist/server/src/lib/git/worktree-id.js +145 -0
- package/dist/server/src/lib/git/worktree-redirect.js +155 -0
- package/dist/server/src/lib/git/worktrees.js +173 -27
- package/dist/server/src/lib/logger.js +13 -1
- package/dist/server/src/lib/polling/auto-yes-manager.js +3 -1
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +54 -0
- package/dist/server/src/lib/polling/prompt-dedup.js +22 -0
- package/dist/server/src/lib/polling/response-checker.js +53 -13
- package/dist/server/src/lib/polling/response-dedup.js +22 -0
- package/dist/server/src/lib/polling/response-poller-core.js +107 -0
- package/dist/server/src/lib/polling/response-poller.js +4 -1
- package/dist/server/src/lib/response-extractor.js +22 -2
- package/dist/server/src/lib/session/claude-session.js +117 -35
- package/dist/server/src/lib/session/current-output-builder.js +16 -1
- package/dist/server/src/lib/session/session-start-error.js +125 -0
- package/dist/server/src/lib/session/worktree-session-reconcile.js +603 -0
- package/dist/server/src/lib/skills/install-apply.js +63 -23
- package/dist/server/src/lib/skills/operation-audit.js +5 -6
- package/dist/server/src/lib/skills/startup-reconcile.js +26 -5
- package/dist/server/src/lib/skills/updater.js +830 -0
- package/dist/server/src/lib/tasks/contract-parser.js +17 -1
- package/dist/server/src/lib/tasks/task-state-machine.js +23 -1
- package/dist/server/src/lib/tmux/control-mode-tmux-transport.js +7 -0
- package/dist/server/src/lib/tmux/read-mode.js +22 -2
- package/dist/server/src/lib/tmux/tmux-capture-cache.js +33 -0
- package/dist/server/src/lib/tmux/tmux-control-client.js +12 -0
- package/dist/server/src/lib/tmux/tmux-control-registry.js +55 -11
- package/dist/server/src/lib/tmux/tmux.js +61 -0
- package/dist/server/src/lib/ws-server.js +104 -1
- package/package.json +1 -1
- package/.next/server/chunks/1117.js +0 -1
- package/.next/server/chunks/1356.js +0 -4
- package/.next/server/chunks/1692.js +0 -1
- package/.next/server/chunks/3042.js +0 -1
- package/.next/server/chunks/4018.js +0 -1
- package/.next/server/chunks/4390.js +0 -1
- package/.next/server/chunks/4440.js +0 -2
- package/.next/server/chunks/4548.js +0 -1
- package/.next/server/chunks/5793.js +0 -1
- package/.next/server/chunks/8681.js +0 -1
- package/.next/static/chunks/2751-7fabd91275b14ca3.js +0 -1
- package/.next/static/chunks/744-d5e47fe16e7b9e06.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/skills/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/templates/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-8440b6c72bed83a1.js +0 -1
- package/.next/static/chunks/app/repositories/page-1ed1e5a542ecc168.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-6008b904225ebb25.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-f6e09d25cd3b56f9.js +0 -1
- /package/.next/static/{-E7I667pJDTBamyG8M_Z- → _AR-TSCnEog5nL9JjjCna}/_buildManifest.js +0 -0
- /package/.next/static/{-E7I667pJDTBamyG8M_Z- → _AR-TSCnEog5nL9JjjCna}/_ssgManifest.js +0 -0
|
@@ -17,6 +17,7 @@ const claude_output_1 = require("../../lib/claude-output");
|
|
|
17
17
|
const cli_patterns_1 = require("../../lib/detection/cli-patterns");
|
|
18
18
|
const logger_1 = require("../../lib/logger");
|
|
19
19
|
const thinking_constants_1 = require("../../config/thinking-constants");
|
|
20
|
+
const tmux_capture_cache_1 = require("../../lib/tmux/tmux-capture-cache");
|
|
20
21
|
const logger = (0, logger_1.createLogger)('response-poller');
|
|
21
22
|
// Sub-module imports
|
|
22
23
|
const response_extractor_1 = require("../response-extractor");
|
|
@@ -52,10 +53,12 @@ function incompleteResult(lineCount) {
|
|
|
52
53
|
* @param bufferReset - External buffer reset flag
|
|
53
54
|
* @param cliToolId - CLI tool identifier
|
|
54
55
|
* @param findRecentUserPromptIndex - Callback to locate the most recent user prompt
|
|
56
|
+
* @param promptDetection - Prompt detection result to carry on the extraction result
|
|
57
|
+
* @param captureWindowSaturated - True when the capture was clipped by the capture window (#1670)
|
|
55
58
|
* @returns ExtractionResult with isComplete: true and ANSI-stripped response
|
|
56
59
|
*/
|
|
57
|
-
function buildPromptExtractionResult(lines, lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, promptDetection) {
|
|
58
|
-
const startIndex = (0, response_extractor_1.resolveExtractionStartIndex)(lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex);
|
|
60
|
+
function buildPromptExtractionResult(lines, lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, promptDetection, captureWindowSaturated = false) {
|
|
61
|
+
const startIndex = (0, response_extractor_1.resolveExtractionStartIndex)(lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, captureWindowSaturated);
|
|
59
62
|
const extractedLines = lines.slice(startIndex);
|
|
60
63
|
return {
|
|
61
64
|
response: (0, cli_patterns_1.stripAnsi)(extractedLines.join('\n')),
|
|
@@ -63,6 +66,7 @@ function buildPromptExtractionResult(lines, lastCapturedLine, totalLines, buffer
|
|
|
63
66
|
lineCount: totalLines,
|
|
64
67
|
promptDetection,
|
|
65
68
|
bufferReset,
|
|
69
|
+
captureWindowSaturated,
|
|
66
70
|
};
|
|
67
71
|
}
|
|
68
72
|
/**
|
|
@@ -89,9 +93,12 @@ function detectPromptWithOptions(output, cliToolId) {
|
|
|
89
93
|
* @param output - Full tmux output
|
|
90
94
|
* @param lastCapturedLine - Number of lines previously captured
|
|
91
95
|
* @param cliToolId - CLI tool ID (claude, codex, gemini)
|
|
96
|
+
* @param captureWindowLines - Size of the capture window `output` was produced with.
|
|
97
|
+
* Used only to decide whether the capture came back clipped (Issue #1670);
|
|
98
|
+
* defaults to the window `checkForResponse()` uses.
|
|
92
99
|
* @returns Extracted response or null if incomplete
|
|
93
100
|
*/
|
|
94
|
-
function extractResponse(output, lastCapturedLine, cliToolId) {
|
|
101
|
+
function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines = tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES) {
|
|
95
102
|
// Trim trailing empty lines from the output before processing
|
|
96
103
|
const rawLines = output.split('\n');
|
|
97
104
|
let trimmedLength = rawLines.length;
|
|
@@ -100,6 +107,12 @@ function extractResponse(output, lastCapturedLine, cliToolId) {
|
|
|
100
107
|
}
|
|
101
108
|
const lines = rawLines.slice(0, trimmedLength);
|
|
102
109
|
const totalLines = lines.length;
|
|
110
|
+
// Issue #1670: measured on the RAW capture, before the trailing-blank trim —
|
|
111
|
+
// the clip happens in sliceOutput(), so it is the untrimmed row count that
|
|
112
|
+
// reveals it. Once this is true the line count is pinned at the window size and
|
|
113
|
+
// `lastCapturedLine` stops being a position in `lines`; see
|
|
114
|
+
// isCaptureWindowSaturated() for why raising the window only relocates it.
|
|
115
|
+
const captureWindowSaturated = (0, tmux_capture_cache_1.isCaptureWindowSaturated)(rawLines.length, captureWindowLines);
|
|
103
116
|
// Issue #1289: Claude Code pins a footer (rotating hint row, input box, status
|
|
104
117
|
// bar) to the bottom of the pane. It is chrome, not transcript, and its hint
|
|
105
118
|
// row rotates while the conversation is idle — so letting it reach the saved
|
|
@@ -164,21 +177,29 @@ function extractResponse(output, lastCapturedLine, cliToolId) {
|
|
|
164
177
|
const fullOutput = lines.join('\n');
|
|
165
178
|
const promptDetection = detectPromptWithOptions(fullOutput, cliToolId);
|
|
166
179
|
if (promptDetection.isPrompt) {
|
|
167
|
-
return buildPromptExtractionResult(lines, lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, promptDetection);
|
|
180
|
+
return buildPromptExtractionResult(lines, lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, promptDetection, captureWindowSaturated);
|
|
168
181
|
}
|
|
169
182
|
}
|
|
170
183
|
// Strip ANSI codes before pattern matching
|
|
171
184
|
const cleanOutputToCheck = (0, cli_patterns_1.stripAnsi)(outputToCheck);
|
|
172
185
|
const hasPrompt = promptPattern.test(cleanOutputToCheck);
|
|
173
186
|
const hasSeparator = separatorPattern.test(cleanOutputToCheck);
|
|
174
|
-
|
|
187
|
+
// Issue #1671: Codex's activity markers are past-tense transcript records that
|
|
188
|
+
// never leave the scrollback, so testing them against this fixed tail window
|
|
189
|
+
// reports "still thinking" for a finished turn whenever its final message was
|
|
190
|
+
// short enough to keep the last "• Ran <cmd>" row inside the window. Codex gets
|
|
191
|
+
// a liveness check that keys off the status line it repaints above the composer
|
|
192
|
+
// instead; every other tool keeps the tail-window match.
|
|
193
|
+
const isThinking = cliToolId === 'codex'
|
|
194
|
+
? (0, cli_patterns_1.isCodexTurnActive)(lines, checkLineCount)
|
|
195
|
+
: thinkingPattern.test(cleanOutputToCheck);
|
|
175
196
|
// Prompt-based completion logic
|
|
176
197
|
const isPromptBasedComplete = (cliToolId === 'codex' || cliToolId === 'gemini' || cliToolId === 'vibe-local' || cliToolId === 'copilot' || cliToolId === 'antigravity') && hasPrompt && !isThinking;
|
|
177
198
|
const isClaudeComplete = cliToolId === 'claude' && hasPrompt && hasSeparator && !isThinking;
|
|
178
199
|
const isOpenCodeDone = cliToolId === 'opencode' && (0, response_extractor_1.isOpenCodeComplete)(cleanOutputToCheck);
|
|
179
200
|
if (isPromptBasedComplete || isClaudeComplete || isOpenCodeDone) {
|
|
180
201
|
const responseLines = [];
|
|
181
|
-
const startIndex = (0, response_extractor_1.resolveExtractionStartIndex)(lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex);
|
|
202
|
+
const startIndex = (0, response_extractor_1.resolveExtractionStartIndex)(lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, captureWindowSaturated);
|
|
182
203
|
let endIndex = totalLines;
|
|
183
204
|
// `contentEnd` bounds the content only; `endIndex` keeps reporting the full
|
|
184
205
|
// buffer so lineCount bookkeeping in session_states is unchanged (#1289).
|
|
@@ -274,6 +295,7 @@ function extractResponse(output, lastCapturedLine, cliToolId) {
|
|
|
274
295
|
isComplete: true,
|
|
275
296
|
lineCount: endIndex,
|
|
276
297
|
bufferReset,
|
|
298
|
+
captureWindowSaturated,
|
|
277
299
|
};
|
|
278
300
|
}
|
|
279
301
|
// Check if this is an interactive prompt
|
|
@@ -281,13 +303,16 @@ function extractResponse(output, lastCapturedLine, cliToolId) {
|
|
|
281
303
|
const fullOutput = lines.join('\n');
|
|
282
304
|
const promptDetection = detectPromptWithOptions(fullOutput, cliToolId);
|
|
283
305
|
if (promptDetection.isPrompt) {
|
|
284
|
-
return buildPromptExtractionResult(lines, lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, promptDetection);
|
|
306
|
+
return buildPromptExtractionResult(lines, lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, promptDetection, captureWindowSaturated);
|
|
285
307
|
}
|
|
286
308
|
}
|
|
287
309
|
// Partial response in progress
|
|
288
310
|
const responseLines = [];
|
|
289
311
|
const endIndex = totalLines;
|
|
290
|
-
|
|
312
|
+
// Issue #1670: a saturated window makes lastCapturedLine meaningless here too —
|
|
313
|
+
// starting the partial slice at it would stream an arbitrary tail fragment
|
|
314
|
+
// instead of the turn so far. Re-anchor on the echoed user prompt.
|
|
315
|
+
const partialBufferReset = bufferReset || captureWindowSaturated || lastCapturedLine >= endIndex - 5;
|
|
291
316
|
const recentPromptIndex = partialBufferReset ? findRecentUserPromptIndex(80) : -1;
|
|
292
317
|
const startIndex = partialBufferReset
|
|
293
318
|
? (recentPromptIndex >= 0 ? recentPromptIndex + 1 : Math.max(0, endIndex - 80))
|
|
@@ -351,15 +376,17 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
351
376
|
// Get session state (last captured line count)
|
|
352
377
|
const sessionState = (0, db_1.getSessionState)(db, worktreeId, resolvedInstanceId);
|
|
353
378
|
const lastCapturedLine = sessionState?.lastCapturedLine || 0;
|
|
354
|
-
// Capture current output
|
|
355
|
-
|
|
379
|
+
// Capture current output. The requested width IS the capture window, so it is
|
|
380
|
+
// taken from the same constant extractResponse() measures saturation against
|
|
381
|
+
// (Issue #1670) — a literal here would silently decouple the two.
|
|
382
|
+
const output = await (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES, instanceId);
|
|
356
383
|
// Layer 2: Accumulate TUI content for full-screen TUI tools (for overlap tracking only).
|
|
357
384
|
if (cliToolId === 'opencode' || cliToolId === 'copilot') {
|
|
358
385
|
const pollerKey = (0, response_poller_core_1.getPollerKey)(worktreeId, cliToolId, instanceId);
|
|
359
386
|
(0, tui_accumulator_1.accumulateTuiContent)(pollerKey, output, cliToolId);
|
|
360
387
|
}
|
|
361
388
|
// Extract response
|
|
362
|
-
const result = extractResponse(output, lastCapturedLine, cliToolId);
|
|
389
|
+
const result = extractResponse(output, lastCapturedLine, cliToolId, tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES);
|
|
363
390
|
if (!result || !result.isComplete) {
|
|
364
391
|
// DR-004 windowing: Only check tail lines
|
|
365
392
|
const { thinkingPattern } = (0, cli_patterns_1.getCliToolPatterns)(cliToolId);
|
|
@@ -381,7 +408,15 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
381
408
|
// `lineCount <= lastCapturedLine` and drop the response forever — leaving
|
|
382
409
|
// History stuck on "Waiting for response..." while the terminal shows the
|
|
383
410
|
// reply. Those tools dedup on response content instead (see below).
|
|
384
|
-
|
|
411
|
+
//
|
|
412
|
+
// Issue #1670: the scrollback tools reach the SAME dead end from the other
|
|
413
|
+
// side. Their buffer does grow — but only until it outgrows the capture
|
|
414
|
+
// window, after which the capture is clipped, the count is pinned at the
|
|
415
|
+
// window size, and the cursor can never be overtaken again. #1268 fixed
|
|
416
|
+
// saturation at pane height; this is saturation at the capture window, and it
|
|
417
|
+
// disables the cursor for exactly as long as the clipping lasts (a session
|
|
418
|
+
// restart or a cleared pane un-saturates it and the cursor comes back).
|
|
419
|
+
const lineCountIsCursor = !(0, types_1.usesAlternateScreen)(cliToolId) && !result.captureWindowSaturated;
|
|
385
420
|
// Duplicate prevention
|
|
386
421
|
if (lineCountIsCursor && !result.bufferReset && result.lineCount === lastCapturedLine && !sessionState?.inProgressMessageId) {
|
|
387
422
|
return false;
|
|
@@ -483,7 +518,12 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
483
518
|
// every subsequent poll re-extracts byte-identical content; save it once.
|
|
484
519
|
// The cache is cleared by stopPolling(), i.e. per polling cycle, so an
|
|
485
520
|
// identical response in a later turn is still recorded.
|
|
486
|
-
|
|
521
|
+
//
|
|
522
|
+
// Issue #1670: keyed off `lineCountIsCursor` rather than the tool trait, so a
|
|
523
|
+
// scrollback tool whose capture window has saturated gets the same substitute.
|
|
524
|
+
// Without this the disabled cursor would leave nothing suppressing re-saves and
|
|
525
|
+
// the poller would append the same finished reply every 2 s.
|
|
526
|
+
if (!lineCountIsCursor) {
|
|
487
527
|
const pollerKey = (0, response_poller_core_1.getPollerKey)(worktreeId, cliToolId, instanceId);
|
|
488
528
|
if ((0, response_dedup_1.isDuplicateResponse)(pollerKey, cleanedResponse)) {
|
|
489
529
|
(0, db_1.updateSessionState)(db, worktreeId, cliToolId, result.lineCount, resolvedInstanceId);
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
22
|
exports.isDuplicateResponse = isDuplicateResponse;
|
|
23
23
|
exports.clearResponseHashCache = clearResponseHashCache;
|
|
24
|
+
exports.renameResponseHashCacheKey = renameResponseHashCacheKey;
|
|
24
25
|
const crypto_1 = require("crypto");
|
|
25
26
|
/**
|
|
26
27
|
* In-memory cache: pollerKey -> SHA-256 hash of the last saved response content.
|
|
@@ -52,3 +53,24 @@ function isDuplicateResponse(pollerKey, content) {
|
|
|
52
53
|
function clearResponseHashCache(pollerKey) {
|
|
53
54
|
responseHashCache.delete(pollerKey);
|
|
54
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Move the cached hash from one pollerKey to another.
|
|
58
|
+
*
|
|
59
|
+
* Used when a worktree ID is renamed underneath a running poller
|
|
60
|
+
* (Issue #1621 Phase 3). The cache answers "did I already save this screen
|
|
61
|
+
* during THIS turn?", and the turn does not end just because the ID moved —
|
|
62
|
+
* dropping it would re-save the screen currently on display.
|
|
63
|
+
*
|
|
64
|
+
* No-op when nothing is cached under `oldKey`.
|
|
65
|
+
*
|
|
66
|
+
* @param oldKey - Poller key the cache entry lives under
|
|
67
|
+
* @param newKey - Poller key it should live under
|
|
68
|
+
*/
|
|
69
|
+
function renameResponseHashCacheKey(oldKey, newKey) {
|
|
70
|
+
if (oldKey === newKey)
|
|
71
|
+
return;
|
|
72
|
+
const hash = responseHashCache.get(oldKey);
|
|
73
|
+
responseHashCache.delete(oldKey);
|
|
74
|
+
if (hash !== undefined)
|
|
75
|
+
responseHashCache.set(newKey, hash);
|
|
76
|
+
}
|
|
@@ -8,6 +8,7 @@ exports.scheduleNextResponsePoll = scheduleNextResponsePoll;
|
|
|
8
8
|
exports.stopPolling = stopPolling;
|
|
9
9
|
exports.stopAllPolling = stopAllPolling;
|
|
10
10
|
exports.getActivePollers = getActivePollers;
|
|
11
|
+
exports.migrateResponsePollerWorktreeIds = migrateResponsePollerWorktreeIds;
|
|
11
12
|
const logger_1 = require("../../lib/logger");
|
|
12
13
|
const tui_accumulator_1 = require("../tui-accumulator");
|
|
13
14
|
const prompt_dedup_1 = require("./prompt-dedup");
|
|
@@ -176,3 +177,109 @@ function stopAllPolling() {
|
|
|
176
177
|
function getActivePollers() {
|
|
177
178
|
return Array.from(exports.activePollers.keys());
|
|
178
179
|
}
|
|
180
|
+
/** Split a poller key into its worktree and instance halves. */
|
|
181
|
+
function splitPollerKey(pollerKey) {
|
|
182
|
+
const separatorIndex = pollerKey.indexOf(':');
|
|
183
|
+
// A worktree ID never contains ':' (isValidWorktreeId), so the first one is
|
|
184
|
+
// always the boundary.
|
|
185
|
+
if (separatorIndex <= 0 || separatorIndex === pollerKey.length - 1)
|
|
186
|
+
return null;
|
|
187
|
+
return {
|
|
188
|
+
worktreeId: pollerKey.slice(0, separatorIndex),
|
|
189
|
+
instanceId: pollerKey.slice(separatorIndex + 1),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Move every running response poller from a renamed worktree ID to the new one
|
|
194
|
+
* (Issue #1621 Phase 3).
|
|
195
|
+
*
|
|
196
|
+
* Re-keying the maps alone is **not** enough, and this is the subtle part: the
|
|
197
|
+
* `setTimeout` chain in {@link scheduleNextResponsePoll} closes over
|
|
198
|
+
* `worktreeId` and recomputes its key on every tick. A poller left running
|
|
199
|
+
* would go on capturing `mcbd-<cli>-<OLD id>` (a session that no longer exists
|
|
200
|
+
* after the rename), writing its messages against an ID no row carries, and
|
|
201
|
+
* re-registering the old key the moment it fired. So each poller is torn down
|
|
202
|
+
* and restarted under the new ID, with everything that represents *progress*
|
|
203
|
+
* carried across:
|
|
204
|
+
*
|
|
205
|
+
* - `pollingStartTimes`, so MAX_POLLING_DURATION still measures from when the
|
|
206
|
+
* turn actually began rather than restarting the 30-minute budget;
|
|
207
|
+
* - the prompt and response dedup hashes, so the screen currently on display is
|
|
208
|
+
* not saved a second time as a new message.
|
|
209
|
+
*
|
|
210
|
+
* The TUI accumulator (opencode / copilot only) is re-initialised empty at the
|
|
211
|
+
* new key instead of carried over: `tui-accumulator.ts` exposes no way to write
|
|
212
|
+
* a buffer back, and it is outside this Issue's allowed scope. The cost is that
|
|
213
|
+
* one in-flight TUI response may be truncated at the rename boundary; the next
|
|
214
|
+
* turn accumulates normally.
|
|
215
|
+
*
|
|
216
|
+
* Takes the whole batch because IDs can swap (A→B, B→A): every source key is
|
|
217
|
+
* removed before any destination key is written.
|
|
218
|
+
*
|
|
219
|
+
* @param renames - Worktree ID pairs being applied
|
|
220
|
+
* @param resolveCliToolId - Maps a poller's (worktree, instance) back to its CLI
|
|
221
|
+
* tool, which the poller key does not encode for alias instances. Callers pass
|
|
222
|
+
* a roster-backed lookup; returning null skips that poller (it is stopped
|
|
223
|
+
* rather than left pointing at a dead ID).
|
|
224
|
+
* @returns One entry per poller that was moved
|
|
225
|
+
*/
|
|
226
|
+
function migrateResponsePollerWorktreeIds(renames, resolveCliToolId) {
|
|
227
|
+
const targets = new Map();
|
|
228
|
+
for (const { oldId, newId } of renames) {
|
|
229
|
+
if (!oldId || !newId || oldId === newId)
|
|
230
|
+
continue;
|
|
231
|
+
targets.set(oldId, newId);
|
|
232
|
+
}
|
|
233
|
+
if (targets.size === 0)
|
|
234
|
+
return [];
|
|
235
|
+
const moves = [];
|
|
236
|
+
const abandoned = [];
|
|
237
|
+
for (const pollerKey of Array.from(exports.activePollers.keys())) {
|
|
238
|
+
const parts = splitPollerKey(pollerKey);
|
|
239
|
+
if (!parts)
|
|
240
|
+
continue;
|
|
241
|
+
const newWorktreeId = targets.get(parts.worktreeId);
|
|
242
|
+
if (!newWorktreeId)
|
|
243
|
+
continue;
|
|
244
|
+
const cliToolId = resolveCliToolId(parts.worktreeId, parts.instanceId);
|
|
245
|
+
if (!cliToolId) {
|
|
246
|
+
abandoned.push(pollerKey);
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
moves.push({
|
|
250
|
+
oldKey: pollerKey,
|
|
251
|
+
newKey: getPollerKey(newWorktreeId, cliToolId, parts.instanceId),
|
|
252
|
+
newWorktreeId,
|
|
253
|
+
cliToolId,
|
|
254
|
+
instanceId: parts.instanceId,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
// Phase 1: stop every affected timer and lift the state off the old keys.
|
|
258
|
+
// Done for the whole batch before any write so a swap cannot self-collide.
|
|
259
|
+
const carried = new Map();
|
|
260
|
+
for (const move of moves) {
|
|
261
|
+
const timerId = exports.activePollers.get(move.oldKey);
|
|
262
|
+
if (timerId)
|
|
263
|
+
clearTimeout(timerId);
|
|
264
|
+
exports.activePollers.delete(move.oldKey);
|
|
265
|
+
carried.set(move.newKey, { startedAt: exports.pollingStartTimes.get(move.oldKey) });
|
|
266
|
+
exports.pollingStartTimes.delete(move.oldKey);
|
|
267
|
+
(0, prompt_dedup_1.renamePromptHashCacheKey)(move.oldKey, move.newKey);
|
|
268
|
+
(0, response_dedup_1.renameResponseHashCacheKey)(move.oldKey, move.newKey);
|
|
269
|
+
(0, tui_accumulator_1.clearTuiAccumulator)(move.oldKey);
|
|
270
|
+
}
|
|
271
|
+
for (const pollerKey of abandoned) {
|
|
272
|
+
stopPollingByKey(pollerKey);
|
|
273
|
+
logger.warn('poller:migrate-abandoned', { pollerKey });
|
|
274
|
+
}
|
|
275
|
+
// Phase 2: restart each poller under its new identity.
|
|
276
|
+
for (const move of moves) {
|
|
277
|
+
const startedAt = carried.get(move.newKey)?.startedAt;
|
|
278
|
+
exports.pollingStartTimes.set(move.newKey, startedAt ?? Date.now());
|
|
279
|
+
if (move.cliToolId === 'opencode' || move.cliToolId === 'copilot') {
|
|
280
|
+
(0, tui_accumulator_1.initTuiAccumulator)(move.newKey);
|
|
281
|
+
}
|
|
282
|
+
scheduleNextResponsePoll(move.newWorktreeId, move.cliToolId, move.instanceId);
|
|
283
|
+
}
|
|
284
|
+
return moves;
|
|
285
|
+
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @internal functions from being unintentionally exposed.
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.normalizePromptForDedup = exports.clearPromptHashCache = exports.isDuplicatePrompt = exports.clearTuiAccumulator = exports.getAccumulatedContent = exports.accumulateTuiContent = exports.initTuiAccumulator = exports.findOverlapIndex = exports.normalizeCopilotLine = exports.extractCopilotContentLines = exports.extractTuiContentLines = exports.truncateMessage = exports.cleanCopilotResponse = exports.cleanOpenCodeResponse = exports.cleanGeminiResponse = exports.cleanClaudeResponse = exports.isOpenCodeComplete = exports.resolveExtractionStartIndex = exports.getActivePollers = exports.stopAllPolling = exports.stopPolling = exports.startPolling = void 0;
|
|
13
|
+
exports.normalizePromptForDedup = exports.renamePromptHashCacheKey = exports.clearPromptHashCache = exports.isDuplicatePrompt = exports.clearTuiAccumulator = exports.getAccumulatedContent = exports.accumulateTuiContent = exports.initTuiAccumulator = exports.findOverlapIndex = exports.normalizeCopilotLine = exports.extractCopilotContentLines = exports.extractTuiContentLines = exports.truncateMessage = exports.cleanCopilotResponse = exports.cleanOpenCodeResponse = exports.cleanGeminiResponse = exports.cleanClaudeResponse = exports.isOpenCodeComplete = exports.resolveExtractionStartIndex = exports.migrateResponsePollerWorktreeIds = exports.getActivePollers = exports.stopAllPolling = exports.stopPolling = exports.startPolling = void 0;
|
|
14
14
|
// ============================================================================
|
|
15
15
|
// Named re-exports from sub-modules (barrel pattern, D4-001: no export *)
|
|
16
16
|
// ============================================================================
|
|
@@ -20,6 +20,8 @@ Object.defineProperty(exports, "startPolling", { enumerable: true, get: function
|
|
|
20
20
|
Object.defineProperty(exports, "stopPolling", { enumerable: true, get: function () { return response_poller_core_1.stopPolling; } });
|
|
21
21
|
Object.defineProperty(exports, "stopAllPolling", { enumerable: true, get: function () { return response_poller_core_1.stopAllPolling; } });
|
|
22
22
|
Object.defineProperty(exports, "getActivePollers", { enumerable: true, get: function () { return response_poller_core_1.getActivePollers; } });
|
|
23
|
+
// Issue #1621 Phase 3: follow a worktree ID rename without dropping the turn
|
|
24
|
+
Object.defineProperty(exports, "migrateResponsePollerWorktreeIds", { enumerable: true, get: function () { return response_poller_core_1.migrateResponsePollerWorktreeIds; } });
|
|
23
25
|
// response-extractor public API
|
|
24
26
|
var response_extractor_1 = require("../response-extractor");
|
|
25
27
|
Object.defineProperty(exports, "resolveExtractionStartIndex", { enumerable: true, get: function () { return response_extractor_1.resolveExtractionStartIndex; } });
|
|
@@ -45,4 +47,5 @@ Object.defineProperty(exports, "clearTuiAccumulator", { enumerable: true, get: f
|
|
|
45
47
|
var prompt_dedup_1 = require("./prompt-dedup");
|
|
46
48
|
Object.defineProperty(exports, "isDuplicatePrompt", { enumerable: true, get: function () { return prompt_dedup_1.isDuplicatePrompt; } });
|
|
47
49
|
Object.defineProperty(exports, "clearPromptHashCache", { enumerable: true, get: function () { return prompt_dedup_1.clearPromptHashCache; } });
|
|
50
|
+
Object.defineProperty(exports, "renamePromptHashCacheKey", { enumerable: true, get: function () { return prompt_dedup_1.renamePromptHashCacheKey; } });
|
|
48
51
|
Object.defineProperty(exports, "normalizePromptForDedup", { enumerable: true, get: function () { return prompt_dedup_1.normalizePromptForDedup; } });
|
|
@@ -34,9 +34,10 @@ function isOpenCodeComplete(output) {
|
|
|
34
34
|
* Determine the start index for response extraction based on buffer state.
|
|
35
35
|
* Shared between normal response extraction and prompt detection paths.
|
|
36
36
|
*
|
|
37
|
-
* Implements a
|
|
37
|
+
* Implements a 6-branch decision tree for startIndex determination:
|
|
38
38
|
* 1. bufferWasReset -> findRecentUserPromptIndex(40) + 1, or 0 if not found
|
|
39
39
|
* 2a. cliToolId === 'opencode' | 'copilot' -> findRecentUserPromptIndex(totalLines) + 1, or 0
|
|
40
|
+
* 2a''. captureWindowSaturated -> findRecentUserPromptIndex(totalLines) + 1, or 0
|
|
40
41
|
* 2a'. cliToolId === 'antigravity' -> findRecentUserPromptIndex(totalLines) + 1, or lastCapturedLine
|
|
41
42
|
* 2b. cliToolId === 'codex' -> Math.max(0, lastCapturedLine)
|
|
42
43
|
* 3. lastCapturedLine >= totalLines - 5 (scroll boundary) ->
|
|
@@ -64,11 +65,14 @@ function isOpenCodeComplete(output) {
|
|
|
64
65
|
* @param findRecentUserPromptIndex - Callback that searches the tmux buffer backwards
|
|
65
66
|
* for the most recent user prompt line within a given window size.
|
|
66
67
|
* Returns the line index (>= 0) if found, or -1 if not found.
|
|
68
|
+
* @param captureWindowSaturated - True when the capture came back clipped by the capture
|
|
69
|
+
* window (Issue #1670), i.e. `lastCapturedLine` no longer indexes into `lines`.
|
|
70
|
+
* Defaults to false so existing callers keep their behavior.
|
|
67
71
|
* @returns The 0-based line index from which response extraction should begin.
|
|
68
72
|
*
|
|
69
73
|
* @internal Exported for testing only
|
|
70
74
|
*/
|
|
71
|
-
function resolveExtractionStartIndex(lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex) {
|
|
75
|
+
function resolveExtractionStartIndex(lastCapturedLine, totalLines, bufferReset, cliToolId, findRecentUserPromptIndex, captureWindowSaturated = false) {
|
|
72
76
|
// Defensive validation: clamp negative values to 0 (Stage 4 SF-001)
|
|
73
77
|
lastCapturedLine = Math.max(0, lastCapturedLine);
|
|
74
78
|
// Branch 2a (highest priority for OpenCode): OpenCode runs in alternate screen mode
|
|
@@ -80,6 +84,22 @@ function resolveExtractionStartIndex(lastCapturedLine, totalLines, bufferReset,
|
|
|
80
84
|
const foundUserPrompt = findRecentUserPromptIndex(totalLines);
|
|
81
85
|
return foundUserPrompt >= 0 ? foundUserPrompt + 1 : 0;
|
|
82
86
|
}
|
|
87
|
+
// Branch 2a'' (Issue #1670): the capture window is saturated, so the buffer no
|
|
88
|
+
// longer grows under the cursor — it slides. `lastCapturedLine` was recorded
|
|
89
|
+
// against a window that has since scrolled by an unknown amount, so it is not a
|
|
90
|
+
// position in `lines` any more and using it would slice off an arbitrary prefix
|
|
91
|
+
// of the turn. Anchor on the newest echoed user prompt instead, exactly as the
|
|
92
|
+
// alternate-screen branch above does for the same reason (#1268), and fall back
|
|
93
|
+
// to the whole window when the echo has scrolled out (a single turn longer than
|
|
94
|
+
// the window) — dropping it would be the very defect this branch fixes.
|
|
95
|
+
//
|
|
96
|
+
// Placed AFTER the opencode/copilot branch so the #1268 path is untouched, and
|
|
97
|
+
// BEFORE the antigravity branch because the two agree wherever an echo exists;
|
|
98
|
+
// only agy's `lastCapturedLine` fallback would still trust the stale cursor.
|
|
99
|
+
if (captureWindowSaturated) {
|
|
100
|
+
const foundUserPrompt = findRecentUserPromptIndex(totalLines);
|
|
101
|
+
return foundUserPrompt >= 0 ? foundUserPrompt + 1 : 0;
|
|
102
|
+
}
|
|
83
103
|
// Branch 2a' (Antigravity / agy, Issue #988): agy is inline-rendered (scrollback
|
|
84
104
|
// retained, like Codex), so lastCapturedLine is meaningful. But the user echo
|
|
85
105
|
// ("> <message>") is reliably present in the captured buffer and gives a cleaner
|
|
@@ -26,6 +26,7 @@ const promises_1 = require("fs/promises");
|
|
|
26
26
|
const logger_1 = require("../../lib/logger");
|
|
27
27
|
const cli_tool_timing_config_1 = require("../../config/cli-tool-timing-config");
|
|
28
28
|
const types_1 = require("../../lib/cli-tools/types");
|
|
29
|
+
const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
29
30
|
const logger = (0, logger_1.createLogger)('claude-session');
|
|
30
31
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
31
32
|
// ----- Helper Functions -----
|
|
@@ -71,9 +72,35 @@ const SHELL_PROMPT_ENDINGS = ['$', '%', '#'];
|
|
|
71
72
|
* This timeout also covers trust dialog auto-response time (typically <1s).
|
|
72
73
|
* When reducing this value, consider dialog response overhead.
|
|
73
74
|
*
|
|
74
|
-
*
|
|
75
|
+
* Issue #1637: raised from 15s to 60s. Measured on the reporter's machine
|
|
76
|
+
* (macOS, Claude Code v2, private tmux socket, the same detection predicates
|
|
77
|
+
* this module uses — `Yes, I trust this folder` for the dialog and
|
|
78
|
+
* CLAUDE_PROMPT_PATTERN for readiness):
|
|
79
|
+
*
|
|
80
|
+
* - idle, already-trusted repository worktree : 1443 / 1470 ms
|
|
81
|
+
* - idle, fresh directory (trust dialog shown): 1885 / 1896 / 1902 ms
|
|
82
|
+
* (dialog visible at ~940 ms, prompt ~950 ms after it is answered)
|
|
83
|
+
* - six cold starts launched concurrently : 2845 / 3450 / 3488 / 4206 /
|
|
84
|
+
* 4215 / 4850 ms
|
|
85
|
+
*
|
|
86
|
+
* So a healthy cold start costs ~2s idle and ~5s at six-way concurrency, and
|
|
87
|
+
* 15s left under 4x headroom over the concurrent case. That is what the six
|
|
88
|
+
* production failures spent: the machine was running an orchestration (several
|
|
89
|
+
* agent sessions plus test suites and builds), and the Issue's own reproduction
|
|
90
|
+
* — re-send ~30s later succeeds — puts the real ready time in that run above
|
|
91
|
+
* 15s and at or below ~45s. 60s covers it with margin and is the same order of
|
|
92
|
+
* magnitude as the window Codex already allows (3s + 30 x 1s polls ≈ 33s).
|
|
93
|
+
*
|
|
94
|
+
* Waiting longer costs nothing on the healthy path (the loop exits as soon as
|
|
95
|
+
* the prompt appears) and a session whose output already shows a terminal error
|
|
96
|
+
* fails immediately rather than consuming the budget — see the error-pattern
|
|
97
|
+
* check in startClaudeSession().
|
|
98
|
+
*
|
|
99
|
+
* This is the *first start* budget only. Sending to a session that already
|
|
100
|
+
* exists is bounded separately by CLAUDE_SEND_PROMPT_WAIT_TIMEOUT (10s), which
|
|
101
|
+
* is unchanged.
|
|
75
102
|
*/
|
|
76
|
-
exports.CLAUDE_INIT_TIMEOUT =
|
|
103
|
+
exports.CLAUDE_INIT_TIMEOUT = 60000;
|
|
77
104
|
/**
|
|
78
105
|
* Initialization polling interval (milliseconds)
|
|
79
106
|
*
|
|
@@ -117,7 +144,7 @@ exports.CLAUDE_PROMPT_WAIT_TIMEOUT = 5000;
|
|
|
117
144
|
* Relationship to other timeout constants:
|
|
118
145
|
* - CLAUDE_PROMPT_WAIT_TIMEOUT (5000ms): Default for waitForPrompt()
|
|
119
146
|
* - CLAUDE_SEND_PROMPT_WAIT_TIMEOUT (10000ms): sendMessageToClaude() specific
|
|
120
|
-
* - CLAUDE_INIT_TIMEOUT (
|
|
147
|
+
* - CLAUDE_INIT_TIMEOUT (60000ms): first-start initialization budget (Issue #1637)
|
|
121
148
|
*
|
|
122
149
|
* @see Issue #187 - Constant unification for sendMessageToClaude timeout
|
|
123
150
|
*/
|
|
@@ -256,6 +283,39 @@ async function getCleanPaneOutput(sessionName, lines = 50) {
|
|
|
256
283
|
const output = await (0, tmux_1.capturePane)(sessionName, { startLine: -lines });
|
|
257
284
|
return (0, cli_patterns_1.stripAnsi)(output);
|
|
258
285
|
}
|
|
286
|
+
/**
|
|
287
|
+
* The terminal error pattern visible in the tail of `cleanOutput`, or null.
|
|
288
|
+
*
|
|
289
|
+
* Extracted from isSessionHealthy() so the initialization loop can apply the
|
|
290
|
+
* same judgement (Issue #1637): with a 60s start budget, a session that has
|
|
291
|
+
* already printed "Claude Code cannot be launched inside another Claude Code
|
|
292
|
+
* session" must not sit there burning the whole budget before saying so.
|
|
293
|
+
*
|
|
294
|
+
* Only the last {@link HEALTH_CHECK_ERROR_TAIL_LINES} lines are searched, so a
|
|
295
|
+
* historical error that has scrolled up cannot condemn a session that recovered.
|
|
296
|
+
*
|
|
297
|
+
* @param cleanOutput - ANSI-stripped pane output
|
|
298
|
+
* @returns The matched pattern (or regex source) for the log, or null
|
|
299
|
+
*/
|
|
300
|
+
function findSessionErrorPattern(cleanOutput) {
|
|
301
|
+
const allLines = cleanOutput
|
|
302
|
+
.trim()
|
|
303
|
+
.split('\n')
|
|
304
|
+
.filter((line) => line.trim() !== '');
|
|
305
|
+
const tailText = allLines.slice(-HEALTH_CHECK_ERROR_TAIL_LINES).join('\n');
|
|
306
|
+
// MF-001: Check error patterns from cli-patterns.ts (SRP - pattern management centralized)
|
|
307
|
+
for (const pattern of cli_patterns_1.CLAUDE_SESSION_ERROR_PATTERNS) {
|
|
308
|
+
if (tailText.includes(pattern)) {
|
|
309
|
+
return pattern;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
for (const regex of cli_patterns_1.CLAUDE_SESSION_ERROR_REGEX_PATTERNS) {
|
|
313
|
+
if (regex.test(tailText)) {
|
|
314
|
+
return regex.source;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
259
319
|
/**
|
|
260
320
|
* Verify that Claude CLI is actually running inside a tmux session
|
|
261
321
|
* Detects broken sessions where tmux exists but Claude failed to start
|
|
@@ -291,18 +351,9 @@ async function isSessionHealthy(sessionName) {
|
|
|
291
351
|
// Only the last HEALTH_CHECK_ERROR_TAIL_LINES lines are searched, so
|
|
292
352
|
// historical errors that have scrolled up do not trigger false negatives.
|
|
293
353
|
const allLines = trimmed.split('\n').filter(line => line.trim() !== '');
|
|
294
|
-
const
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
for (const pattern of cli_patterns_1.CLAUDE_SESSION_ERROR_PATTERNS) {
|
|
298
|
-
if (tailText.includes(pattern)) {
|
|
299
|
-
return { healthy: false, reason: `error pattern: ${pattern}` };
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
for (const regex of cli_patterns_1.CLAUDE_SESSION_ERROR_REGEX_PATTERNS) {
|
|
303
|
-
if (regex.test(tailText)) {
|
|
304
|
-
return { healthy: false, reason: `error pattern: ${regex.source}` };
|
|
305
|
-
}
|
|
354
|
+
const errorPattern = findSessionErrorPattern(trimmed);
|
|
355
|
+
if (errorPattern !== null) {
|
|
356
|
+
return { healthy: false, reason: `error pattern: ${errorPattern}` };
|
|
306
357
|
}
|
|
307
358
|
// S2-F002: Extract last line after empty line filtering
|
|
308
359
|
const lastLine = allLines[allLines.length - 1]?.trim() ?? '';
|
|
@@ -525,35 +576,57 @@ async function startClaudeSession(options) {
|
|
|
525
576
|
let trustDialogHandled = false;
|
|
526
577
|
while (Date.now() - startTime < maxWaitTime) {
|
|
527
578
|
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
579
|
+
// SF-001: Use getCleanPaneOutput helper (DRY)
|
|
580
|
+
let cleanOutput = null;
|
|
528
581
|
try {
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
//
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
//
|
|
542
|
-
|
|
543
|
-
|
|
582
|
+
cleanOutput = await getCleanPaneOutput(sessionName);
|
|
583
|
+
}
|
|
584
|
+
catch {
|
|
585
|
+
// Ignore capture errors during initialization
|
|
586
|
+
}
|
|
587
|
+
if (cleanOutput === null) {
|
|
588
|
+
continue;
|
|
589
|
+
}
|
|
590
|
+
// Claude is ready when we see the prompt (DRY-001)
|
|
591
|
+
// Use CLAUDE_PROMPT_PATTERN from cli-patterns.ts for consistency
|
|
592
|
+
// Note: CLAUDE_SEPARATOR_PATTERN was removed from initialization check (Issue #187, P1-1)
|
|
593
|
+
if (cli_patterns_1.CLAUDE_PROMPT_PATTERN.test(cleanOutput)) {
|
|
594
|
+
// Wait for stability after prompt detection (CONS-007, DOC-001)
|
|
595
|
+
await new Promise((resolve) => setTimeout(resolve, exports.CLAUDE_POST_PROMPT_DELAY));
|
|
596
|
+
logger.info('claude-initialized-in');
|
|
597
|
+
initialized = true;
|
|
598
|
+
break;
|
|
599
|
+
}
|
|
600
|
+
// Issue #201: Detect trust dialog and auto-respond with Enter
|
|
601
|
+
// Condition order: CLAUDE_PROMPT_PATTERN (above) is checked first for shortest path
|
|
602
|
+
if (!trustDialogHandled && cli_patterns_1.CLAUDE_TRUST_DIALOG_PATTERN.test(cleanOutput)) {
|
|
603
|
+
try {
|
|
544
604
|
await (0, tmux_1.sendKeys)(sessionName, '', true);
|
|
545
605
|
trustDialogHandled = true;
|
|
546
606
|
logger.info('trust-dialog-detected');
|
|
547
|
-
// Continue polling to wait for prompt detection
|
|
548
607
|
}
|
|
608
|
+
catch {
|
|
609
|
+
// Left unhandled so the next poll answers the dialog again
|
|
610
|
+
}
|
|
611
|
+
// Continue polling to wait for prompt detection
|
|
549
612
|
}
|
|
550
|
-
|
|
551
|
-
|
|
613
|
+
// Issue #1637: fail fast on a start that cannot succeed. The budget is
|
|
614
|
+
// 60s of patience for a *slow* start; a session already showing a
|
|
615
|
+
// terminal error is not slow, and waiting out the budget would only
|
|
616
|
+
// delay the same answer by 45 more seconds. Checked after the trust
|
|
617
|
+
// dialog so a dialog still on screen is answered first.
|
|
618
|
+
const errorPattern = findSessionErrorPattern(cleanOutput);
|
|
619
|
+
if (errorPattern !== null) {
|
|
620
|
+
throw new session_start_error_1.SessionStartFailedError('Claude Code', sessionName, errorPattern);
|
|
552
621
|
}
|
|
553
622
|
}
|
|
554
|
-
//
|
|
623
|
+
// Issue #1637: not "failed to start" — the session and the CLI process both
|
|
624
|
+
// exist and are still initializing, and they are deliberately left running
|
|
625
|
+
// so the retry the caller is about to make is cheap. The distinction is
|
|
626
|
+
// carried to the caller by the error type rather than lost in a generic
|
|
627
|
+
// message (CONS-005, IMP-001).
|
|
555
628
|
if (!initialized) {
|
|
556
|
-
throw new
|
|
629
|
+
throw new session_start_error_1.SessionStartTimeoutError('Claude Code', sessionName, exports.CLAUDE_INIT_TIMEOUT);
|
|
557
630
|
}
|
|
558
631
|
logger.info('started-claude-session:sessionname');
|
|
559
632
|
}
|
|
@@ -562,6 +635,15 @@ async function startClaudeSession(options) {
|
|
|
562
635
|
clearCachedClaudePath();
|
|
563
636
|
// SEC-SF-002: Log detailed error server-side, throw generic message to client
|
|
564
637
|
logger.error('session:start-failed', { error: error instanceof Error ? error.message : String(error) });
|
|
638
|
+
// Issue #1637: the one exception to SEC-SF-002. These two messages are
|
|
639
|
+
// assembled from a tool name, the tmux session name, a fixed pattern string
|
|
640
|
+
// and a number — no filesystem path, no captured CLI output — so they are
|
|
641
|
+
// safe to hand to the caller, and they are the whole reason the caller can
|
|
642
|
+
// tell "still starting" from "broken" instead of being told to read a log
|
|
643
|
+
// it may not have.
|
|
644
|
+
if ((0, session_start_error_1.isSafeSessionStartError)(error)) {
|
|
645
|
+
throw error;
|
|
646
|
+
}
|
|
565
647
|
throw new Error('Failed to start Claude session');
|
|
566
648
|
}
|
|
567
649
|
}
|