commandmate 0.21.5 → 0.22.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 +240 -233
- package/.next/app-path-routes-manifest.json +29 -28
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_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/hooks/permission-request/route.js +1 -0
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -0
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +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_client-reference-manifest.js +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_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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- 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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +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_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 +2 -6
- 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_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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- 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_client-reference-manifest.js +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_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/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +9 -9
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +29 -28
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1356.js +4 -0
- package/.next/server/chunks/1841.js +1 -0
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/3022.js +1 -0
- package/.next/server/chunks/3736.js +1 -1
- package/.next/server/chunks/5959.js +5 -4
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +8 -12
- package/.next/server/chunks/6919.js +1 -0
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/8856.js +1 -1
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9373.js +8 -0
- package/.next/server/chunks/9687.js +2 -2
- 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.map +1 -1
- package/.next/static/b69eWhjC1rRrFTa-g3lMS/_buildManifest.js +1 -0
- package/.next/static/chunks/{6488-572dbfd9986e8a92.js → 6488-2ad4f67779f8d00a.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/skills/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/templates/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/todos/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-973ec48531555712.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-70704fe257e0cccc.js +1 -0
- package/.next/trace +12 -12
- package/.next/types/app/api/hooks/permission-request/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +27 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +9 -3
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +35 -0
- package/dist/cli/commands/wait.d.ts +4 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +109 -2
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +39 -0
- package/dist/cli/types/api-responses.d.ts +69 -4
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +6 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +105 -1
- package/dist/server/src/lib/detection/unclassified-frame-tracker.js +96 -0
- package/dist/server/src/lib/env.js +27 -1
- package/dist/server/src/lib/hooks/agent-event-types.js +131 -0
- package/dist/server/src/lib/hooks/ask-user-question-payload.js +156 -0
- package/dist/server/src/lib/hooks/hook-settings-generator.js +411 -0
- package/dist/server/src/lib/hooks/permission-request-payload.js +144 -0
- package/dist/server/src/lib/polling/auto-yes-resolver.js +25 -10
- package/dist/server/src/lib/polling/auto-yes-suppression-state.js +2 -1
- package/dist/server/src/lib/session/agent-event-state.js +612 -11
- package/dist/server/src/lib/session/ask-user-question-prompt.js +295 -0
- package/dist/server/src/lib/session/claude-session.js +41 -2
- package/dist/server/src/lib/session/current-output-builder.js +375 -8
- package/dist/server/src/lib/session/prompt-waiting-composition.js +178 -0
- package/dist/server/src/lib/session/prompt-waiting-guard.js +147 -0
- package/dist/server/src/lib/session/send-user-message.js +35 -0
- package/dist/server/src/lib/session/status-mapping.js +121 -0
- package/dist/server/src/lib/session/structured-prompt.js +109 -0
- package/dist/server/src/types/models.js +30 -0
- package/package.json +3 -2
- package/scripts/hooks/cmate-agent-event.sh +44 -3
- package/.next/server/chunks/1355.js +0 -1
- package/.next/server/chunks/1598.js +0 -4
- package/.next/server/chunks/2366.js +0 -1
- package/.next/static/-A6IRK1c_KvFlxiDrsyVc/_buildManifest.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/skills/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/templates/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/todos/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-be21650964d61b1d.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-de42fed52de80834.js +0 -1
- /package/.next/static/{-A6IRK1c_KvFlxiDrsyVc → b69eWhjC1rRrFTa-g3lMS}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Putting the agent's own question in front of the human (Issue #1726).
|
|
4
|
+
*
|
|
5
|
+
* `PreToolUse(AskUserQuestion)` hands this server the question and its options
|
|
6
|
+
* as JSON. The screen renders something *related but not equal* to that JSON,
|
|
7
|
+
* and the difference is the whole of this module's subject matter — it was
|
|
8
|
+
* measured, not assumed (`tests/fixtures/canary/askuserquestion-task-panel.ts`,
|
|
9
|
+
* `tests/unit/lib/detection/fixtures/claude-live-1708/`):
|
|
10
|
+
*
|
|
11
|
+
* | on screen | in `tool_input` |
|
|
12
|
+
* |-----------------------------------------------|-----------------|
|
|
13
|
+
* | `1. Clear desk` + an indented description line | yes (the description is a separate line the scraper drops) |
|
|
14
|
+
* | `4. Type something.` | **no** — the picker appends it |
|
|
15
|
+
* | `5. Chat about this` | **no** — the picker appends it |
|
|
16
|
+
* | `1. Submit answers` / `2. Cancel` | **no** — a different screen entirely |
|
|
17
|
+
* | `7. tasks (0 done, 1 in progress, 6 open)` | **no** — a task-panel row misread as an option (#1708) |
|
|
18
|
+
*
|
|
19
|
+
* So the payload is authority over *what was asked*; the screen is authority
|
|
20
|
+
* over *which keys answer it*. Everything below follows from refusing to
|
|
21
|
+
* confuse the two:
|
|
22
|
+
*
|
|
23
|
+
* - options are matched **by position** against what the scraper parsed, and
|
|
24
|
+
* the whole substitution is abandoned unless every one of them lines up. A
|
|
25
|
+
* screen this module cannot explain is a screen it does not touch.
|
|
26
|
+
* - option **numbers always come from the screen**, never from the payload's
|
|
27
|
+
* array index, because the number is what gets typed.
|
|
28
|
+
* - the two picker-added options are kept, by name; anything else the payload
|
|
29
|
+
* does not describe is dropped, which is what keeps the #1708 phantom out.
|
|
30
|
+
*
|
|
31
|
+
* Pure — type-only imports — so a client component can import it.
|
|
32
|
+
*
|
|
33
|
+
* @module lib/session/ask-user-question-prompt
|
|
34
|
+
*/
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PICKER_META_OPTION_LABELS = void 0;
|
|
37
|
+
exports.isPickerMetaOption = isPickerMetaOption;
|
|
38
|
+
exports.matchAskUserQuestion = matchAskUserQuestion;
|
|
39
|
+
exports.applyAskUserQuestion = applyAskUserQuestion;
|
|
40
|
+
exports.resolveAskUserQuestionAnswer = resolveAskUserQuestionAnswer;
|
|
41
|
+
/**
|
|
42
|
+
* Options the Claude picker renders itself, which are therefore in no
|
|
43
|
+
* `tool_input`.
|
|
44
|
+
*
|
|
45
|
+
* Observed verbatim as `Type something.` and `Chat about this` in the live
|
|
46
|
+
* captures. Matched after normalisation (so the multi-select `[ ] ` prefix and
|
|
47
|
+
* the trailing period do not matter) and by prefix, because a narrow terminal
|
|
48
|
+
* truncates them.
|
|
49
|
+
*
|
|
50
|
+
* Keeping them is not cosmetic: they are selectable, so dropping them would
|
|
51
|
+
* make `commandmate respond <id> 5` refuse a number the picker accepts.
|
|
52
|
+
*/
|
|
53
|
+
exports.PICKER_META_OPTION_LABELS = ['type something', 'chat about this'];
|
|
54
|
+
/**
|
|
55
|
+
* Shortest text allowed to line two labels up by prefix.
|
|
56
|
+
*
|
|
57
|
+
* Prefix matching exists for one reason — the picker truncates a label that
|
|
58
|
+
* does not fit the pane — so it must not become a way for short, unrelated
|
|
59
|
+
* words to match. Anything shorter than this has to be equal.
|
|
60
|
+
*/
|
|
61
|
+
const MIN_PREFIX_MATCH_LENGTH = 8;
|
|
62
|
+
/** The multi-select checkbox the picker prefixes each option with. */
|
|
63
|
+
const CHECKBOX_PREFIX_PATTERN = /^\s*\[[ xX]\]\s*/;
|
|
64
|
+
/** Trailing ellipsis left by the picker truncating a label to the pane width. */
|
|
65
|
+
const TRAILING_ELLIPSIS_PATTERN = /(?:…|\.\.\.)\s*$/;
|
|
66
|
+
/** Semantic tokens that must never be delivered as text to a numbered picker. */
|
|
67
|
+
const SEMANTIC_ANSWER_TOKENS = new Set(['yes', 'y', 'no', 'n']);
|
|
68
|
+
/** Normalise a label or a question for comparison against the other source. */
|
|
69
|
+
function normalize(value) {
|
|
70
|
+
return value
|
|
71
|
+
.replace(CHECKBOX_PREFIX_PATTERN, '')
|
|
72
|
+
.replace(TRAILING_ELLIPSIS_PATTERN, '')
|
|
73
|
+
.replace(/\s+/g, ' ')
|
|
74
|
+
.trim()
|
|
75
|
+
.toLowerCase();
|
|
76
|
+
}
|
|
77
|
+
/** The `[ ] ` / `[x] ` the screen carried, so a rewritten label keeps it. */
|
|
78
|
+
function checkboxPrefix(screenLabel) {
|
|
79
|
+
return CHECKBOX_PREFIX_PATTERN.exec(screenLabel)?.[0] ?? '';
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Whether two normalised strings describe the same thing.
|
|
83
|
+
*
|
|
84
|
+
* Equality, or the shorter being a prefix of the longer — the only way the
|
|
85
|
+
* picker distorts a label is by cutting it off at the pane width.
|
|
86
|
+
*/
|
|
87
|
+
function corresponds(a, b) {
|
|
88
|
+
if (a === '' || b === '')
|
|
89
|
+
return false;
|
|
90
|
+
if (a === b)
|
|
91
|
+
return true;
|
|
92
|
+
const [shorter, longer] = a.length <= b.length ? [a, b] : [b, a];
|
|
93
|
+
if (shorter.length < MIN_PREFIX_MATCH_LENGTH)
|
|
94
|
+
return false;
|
|
95
|
+
return longer.startsWith(shorter);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Whether the screen is showing this question.
|
|
99
|
+
*
|
|
100
|
+
* Containment rather than the prefix rule the labels use, because the two are
|
|
101
|
+
* extracted differently. An option label is a parsed line; the question is
|
|
102
|
+
* whatever the detector's upward scan swept together, and on a real capture that
|
|
103
|
+
* is several lines glued into one — the canary frame yields
|
|
104
|
+
* `"⏺ I'll load the TaskCreate tool schema first. ☐ First task Which task would
|
|
105
|
+
* you like to start with?"` for a question that is only its last clause.
|
|
106
|
+
*
|
|
107
|
+
* The floor stops a short question ("Continue?") from matching unrelated prose;
|
|
108
|
+
* the uniqueness requirement in {@link matchAskUserQuestion} does the rest. On
|
|
109
|
+
* the "Review your answers" screen, which lists every question at once, a
|
|
110
|
+
* multi-question call matches them all and is refused for exactly that reason.
|
|
111
|
+
*/
|
|
112
|
+
function questionCorresponds(entryQuestion, screenQuestion) {
|
|
113
|
+
const [shorter, longer] = entryQuestion.length <= screenQuestion.length
|
|
114
|
+
? [entryQuestion, screenQuestion]
|
|
115
|
+
: [screenQuestion, entryQuestion];
|
|
116
|
+
// The floor applies to whichever side is being looked for, not to the payload:
|
|
117
|
+
// a one-character screen question is contained in every question ever written.
|
|
118
|
+
if (shorter.length < MIN_PREFIX_MATCH_LENGTH)
|
|
119
|
+
return shorter === longer;
|
|
120
|
+
return longer.includes(shorter);
|
|
121
|
+
}
|
|
122
|
+
/** Whether this screen option is one the picker adds rather than the agent. */
|
|
123
|
+
function isPickerMetaOption(label) {
|
|
124
|
+
const normalized = normalize(label);
|
|
125
|
+
return exports.PICKER_META_OPTION_LABELS.some((meta) => normalized === meta || normalized.startsWith(meta));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Which of the call's questions the screen is showing, or null.
|
|
129
|
+
*
|
|
130
|
+
* Null is the right answer for more of the flow than it might look. A single
|
|
131
|
+
* `AskUserQuestion` tool call walks through one screen per question, then
|
|
132
|
+
* "Review your answers", then "Ready to submit your answers?" with its own
|
|
133
|
+
* `1. Submit answers / 2. Cancel` — and no event is emitted at any of those
|
|
134
|
+
* transitions (§5.6), so the *only* way to know which screen is up is to read
|
|
135
|
+
* the question off it. A screen whose question matches nothing in the payload is
|
|
136
|
+
* a screen this module has nothing to say about, and the scraper's own parse
|
|
137
|
+
* stands.
|
|
138
|
+
*
|
|
139
|
+
* Ambiguity answers null too: two questions that both match cannot be told
|
|
140
|
+
* apart, and picking either would put one question's options under the other's.
|
|
141
|
+
*/
|
|
142
|
+
function matchAskUserQuestion(spec, screenQuestion) {
|
|
143
|
+
const screen = normalize(screenQuestion);
|
|
144
|
+
if (screen === '')
|
|
145
|
+
return null;
|
|
146
|
+
const matches = spec.questions
|
|
147
|
+
.map((entry, index) => ({ entry, index }))
|
|
148
|
+
.filter(({ entry }) => questionCorresponds(normalize(entry.question), screen));
|
|
149
|
+
return matches.length === 1 ? matches[0] : null;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Rebuild a scraper-parsed picker's options from the agent's own payload.
|
|
153
|
+
*
|
|
154
|
+
* @param promptData - What the detection layer read off the pane
|
|
155
|
+
* @param spec - The `AskUserQuestion` call in flight for this instance
|
|
156
|
+
* @returns The corrected prompt, or **null** when the payload cannot be lined up
|
|
157
|
+
* against this screen — in which case the caller must publish `promptData`
|
|
158
|
+
* unchanged. Null is the answer for the confirmation and review screens, for
|
|
159
|
+
* any prompt that is not a multiple choice, and for any rendering this module
|
|
160
|
+
* does not recognise.
|
|
161
|
+
*/
|
|
162
|
+
function applyAskUserQuestion(promptData, spec) {
|
|
163
|
+
if (promptData.type !== 'multiple_choice')
|
|
164
|
+
return null;
|
|
165
|
+
const matched = matchAskUserQuestion(spec, promptData.question);
|
|
166
|
+
if (matched === null)
|
|
167
|
+
return null;
|
|
168
|
+
const { entry, index } = matched;
|
|
169
|
+
const byNumber = new Map(promptData.options.map((option) => [option.number, option]));
|
|
170
|
+
// Position is the correspondence: the picker renders the payload's options in
|
|
171
|
+
// array order as 1..n. Verifying every one of them before substituting is what
|
|
172
|
+
// makes this safe to do at all — if the screen has moved on to something else
|
|
173
|
+
// (or the scraper mis-parsed it), the check fails and nothing is replaced.
|
|
174
|
+
const options = [];
|
|
175
|
+
for (const [position, choice] of entry.choices.entries()) {
|
|
176
|
+
const number = position + 1;
|
|
177
|
+
const screenOption = byNumber.get(number);
|
|
178
|
+
if (!screenOption)
|
|
179
|
+
return null;
|
|
180
|
+
if (!corresponds(normalize(screenOption.label), normalize(choice.label)))
|
|
181
|
+
return null;
|
|
182
|
+
options.push({
|
|
183
|
+
...screenOption,
|
|
184
|
+
// The checkbox prefix is load-bearing, not decoration: `prompt-answer-sender`
|
|
185
|
+
// recognises a multi-select picker by `^\[[ x]\] ` on the labels and sends a
|
|
186
|
+
// different key sequence for it. Dropping it while "improving" the label
|
|
187
|
+
// would silently turn Space-toggle-then-Next into a bare Enter.
|
|
188
|
+
label: `${checkboxPrefix(screenOption.label)}${choice.label}`,
|
|
189
|
+
...(choice.description ? { description: choice.description } : {}),
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
// Everything past the payload's options is the picker's own doing — or it is
|
|
193
|
+
// not an option at all. `7. tasks (0 done, 1 in progress, 6 open)` is the
|
|
194
|
+
// second kind: a task-panel row that `NORMAL_OPTION_PATTERN` reads as an
|
|
195
|
+
// option whenever the panel's task count lands exactly one past the real
|
|
196
|
+
// options (#1708). The detector has its own guard for that since #1708; this
|
|
197
|
+
// is the second line, and it is the one that does not depend on recognising
|
|
198
|
+
// the panel's wording.
|
|
199
|
+
const metaOptionNumbers = [];
|
|
200
|
+
for (const option of promptData.options) {
|
|
201
|
+
if (option.number <= entry.choices.length)
|
|
202
|
+
continue;
|
|
203
|
+
if (!isPickerMetaOption(option.label))
|
|
204
|
+
continue;
|
|
205
|
+
options.push(option);
|
|
206
|
+
metaOptionNumbers.push(option.number);
|
|
207
|
+
}
|
|
208
|
+
options.sort((a, b) => a.number - b.number);
|
|
209
|
+
return {
|
|
210
|
+
...promptData,
|
|
211
|
+
// The payload's text, not the pane's: the picker wraps and truncates the
|
|
212
|
+
// question to the pane width, and this is the string `respond` echoes and
|
|
213
|
+
// the audit trail keeps.
|
|
214
|
+
question: entry.question,
|
|
215
|
+
options,
|
|
216
|
+
isAskUserQuestion: true,
|
|
217
|
+
askUserQuestion: {
|
|
218
|
+
...(entry.header ? { header: entry.header } : {}),
|
|
219
|
+
multiSelect: entry.multiSelect,
|
|
220
|
+
questionIndex: index,
|
|
221
|
+
questionCount: spec.questions.length,
|
|
222
|
+
metaOptionNumbers,
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Messages are fixed strings and never quote the answer (SEC-003, as in
|
|
228
|
+
* `prompt-answer-semantic`), so they are safe to return to a client verbatim.
|
|
229
|
+
*/
|
|
230
|
+
const OUT_OF_RANGE_MESSAGE = 'The option number is outside the range this prompt offers. ' +
|
|
231
|
+
'Use `commandmate capture <worktree-id> --json` to list the current options.';
|
|
232
|
+
const NO_MATCH_MESSAGE = 'No option label matches the answer. Answer with an option number ' +
|
|
233
|
+
'(yes/no is not resolved on a numbered picker — Issue #1681).';
|
|
234
|
+
const AMBIGUOUS_MESSAGE = 'The answer matches more than one option label. Answer with an option number.';
|
|
235
|
+
/** Every option label this answer matches, exactly or by prefix. */
|
|
236
|
+
function matchingOptions(options, answer) {
|
|
237
|
+
const normalized = normalize(answer);
|
|
238
|
+
if (normalized === '')
|
|
239
|
+
return [];
|
|
240
|
+
const exact = options.filter((option) => normalize(option.label) === normalized);
|
|
241
|
+
if (exact.length > 0)
|
|
242
|
+
return exact;
|
|
243
|
+
// A prefix is allowed here for the human's benefit rather than the picker's:
|
|
244
|
+
// `respond <id> vim` for "Vim / Neovim". Two characters is enough of a floor,
|
|
245
|
+
// because a prefix matching several options is refused as ambiguous anyway.
|
|
246
|
+
if (normalized.length < 2)
|
|
247
|
+
return [];
|
|
248
|
+
return options.filter((option) => normalize(option.label).startsWith(normalized));
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Check an answer against the options the agent actually offered (Issue #1726).
|
|
252
|
+
*
|
|
253
|
+
* Only ever called with a prompt {@link applyAskUserQuestion} vouched for, which
|
|
254
|
+
* is what makes refusing legitimate: the option list is the agent's own, so a
|
|
255
|
+
* number outside it cannot be right, and a word that matches no label cannot be
|
|
256
|
+
* resolved. Without that vouching the pre-#1726 behaviour applies and this
|
|
257
|
+
* function is not consulted at all.
|
|
258
|
+
*
|
|
259
|
+
* The refusal that matters most is `yes` / `no`. On a cursor-navigated picker
|
|
260
|
+
* typed text is not a selection — the Enter that follows it takes whatever
|
|
261
|
+
* option is highlighted — so `respond <id> no` has been able to deliver an
|
|
262
|
+
* approval (Issue #1681). Here it is refused before anything is sent.
|
|
263
|
+
*
|
|
264
|
+
* @param promptData - A prompt `applyAskUserQuestion` produced
|
|
265
|
+
* @param answer - The raw answer from the request
|
|
266
|
+
*/
|
|
267
|
+
function resolveAskUserQuestionAnswer(promptData, answer) {
|
|
268
|
+
const trimmed = answer.trim();
|
|
269
|
+
if (/^\d+$/.test(trimmed)) {
|
|
270
|
+
const number = Number.parseInt(trimmed, 10);
|
|
271
|
+
return promptData.options.some((option) => option.number === number)
|
|
272
|
+
? { ok: true, input: String(number) }
|
|
273
|
+
: { ok: false, reason: 'answer_out_of_range', message: OUT_OF_RANGE_MESSAGE };
|
|
274
|
+
}
|
|
275
|
+
const matches = matchingOptions(promptData.options, trimmed);
|
|
276
|
+
if (matches.length === 1) {
|
|
277
|
+
const [option] = matches;
|
|
278
|
+
return {
|
|
279
|
+
ok: true,
|
|
280
|
+
input: String(option.number),
|
|
281
|
+
resolved: { via: 'semantic', optionNumber: option.number, optionLabel: option.label },
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
if (matches.length > 1) {
|
|
285
|
+
return { ok: false, reason: 'unresolvable_answer', message: AMBIGUOUS_MESSAGE };
|
|
286
|
+
}
|
|
287
|
+
// An option that takes free text ("Tell Claude what to do differently") makes
|
|
288
|
+
// arbitrary text a legitimate answer, so it passes through as it did before.
|
|
289
|
+
// `yes` / `no` never do: they are the Issue #1681 accident, not free text.
|
|
290
|
+
const acceptsFreeText = promptData.options.some((option) => option.requiresTextInput === true);
|
|
291
|
+
if (acceptsFreeText && !SEMANTIC_ANSWER_TOKENS.has(trimmed.toLowerCase())) {
|
|
292
|
+
return { ok: true, input: answer };
|
|
293
|
+
}
|
|
294
|
+
return { ok: false, reason: 'unresolvable_answer', message: NO_MATCH_MESSAGE };
|
|
295
|
+
}
|
|
@@ -26,6 +26,8 @@ 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 hook_settings_generator_1 = require("../../lib/hooks/hook-settings-generator");
|
|
30
|
+
const agent_event_state_1 = require("../../lib/session/agent-event-state");
|
|
29
31
|
const session_start_error_1 = require("../../lib/session/session-start-error");
|
|
30
32
|
const logger = (0, logger_1.createLogger)('claude-session');
|
|
31
33
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
@@ -552,6 +554,19 @@ async function startClaudeSession(options) {
|
|
|
552
554
|
// Fall through to the session creation logic below.
|
|
553
555
|
// (SF-S2-004: Explicit fall-through instead of hidden re-entry)
|
|
554
556
|
}
|
|
557
|
+
// Issue #1723: everything the previous agent process reported through this
|
|
558
|
+
// (worktreeId, instanceId) belongs to a session that no longer exists. The
|
|
559
|
+
// key is reused verbatim by the session about to be created, so without this
|
|
560
|
+
// fence the last `user_prompt_submit` of the old process would be read as the
|
|
561
|
+
// new one's and a brand-new session would publish `running` before anyone had
|
|
562
|
+
// typed into it.
|
|
563
|
+
//
|
|
564
|
+
// Placed on the creation path only — the reuse branch above has already
|
|
565
|
+
// returned — and before `createSession`, so there is no window in which a
|
|
566
|
+
// live pane is matched against a stale generation. Bumped even if the start
|
|
567
|
+
// then fails: falling back to the scraper is always safe, trusting a dead
|
|
568
|
+
// session's events is not.
|
|
569
|
+
(0, agent_event_state_1.beginAgentEventGeneration)(worktreeId, 'claude', instanceId);
|
|
555
570
|
try {
|
|
556
571
|
// Create tmux session. Scrollback depth comes from the shared
|
|
557
572
|
// TMUX_HISTORY_LIMIT default (Issue #1624) — do not re-hardcode it here.
|
|
@@ -565,8 +580,23 @@ async function startClaudeSession(options) {
|
|
|
565
580
|
await (0, session_key_sender_1.sanitizeSessionEnvironment)(sessionName);
|
|
566
581
|
// Get Claude CLI path dynamically
|
|
567
582
|
const claudePath = await getClaudePath();
|
|
583
|
+
// Issue #1722: hand this session its own hooks config, so structured
|
|
584
|
+
// lifecycle events exist without the operator having edited
|
|
585
|
+
// ~/.claude/settings.json (which is never written — `--settings` is
|
|
586
|
+
// concatenated with it, and leaves it byte-identical).
|
|
587
|
+
//
|
|
588
|
+
// Only on the creation path. The reuse branch above has already returned,
|
|
589
|
+
// so the injected generation and the tmux session generation are the same
|
|
590
|
+
// generation by construction. A running session *can* be re-hooked — Claude
|
|
591
|
+
// hot-reloads settings without asking (Issue #1721, D8) — but that would
|
|
592
|
+
// make "which config is this pane running?" a question with a time-varying
|
|
593
|
+
// answer, and the events are not load-bearing enough to buy that.
|
|
594
|
+
//
|
|
595
|
+
// Falls back to the bare path on any failure; a session that starts without
|
|
596
|
+
// hooks is the pre-#1722 status quo, and a session that fails to start is not.
|
|
597
|
+
const launchCommand = (0, hook_settings_generator_1.buildClaudeLaunchCommand)(claudePath, { worktreeId, instanceId });
|
|
568
598
|
// Start Claude CLI in interactive mode using dynamically resolved path
|
|
569
|
-
await (0, tmux_1.sendKeys)(sessionName,
|
|
599
|
+
await (0, tmux_1.sendKeys)(sessionName, launchCommand, true);
|
|
570
600
|
// Wait for Claude to initialize with dynamic detection (OCP-001)
|
|
571
601
|
// Use constants instead of hardcoded values
|
|
572
602
|
const maxWaitTime = exports.CLAUDE_INIT_TIMEOUT;
|
|
@@ -705,7 +735,16 @@ async function captureClaudeOutput(worktreeId, lines = 1000, instanceId) {
|
|
|
705
735
|
*/
|
|
706
736
|
async function stopClaudeSession(worktreeId, instanceId) {
|
|
707
737
|
const sessionName = getSessionName(worktreeId, instanceId);
|
|
708
|
-
|
|
738
|
+
const stopped = await (0, session_key_sender_1.stopSession)(sessionName);
|
|
739
|
+
// Issue #1723: the session this instance's structured state described is
|
|
740
|
+
// gone. Belt and braces rather than the load-bearing guard — a stopped
|
|
741
|
+
// session makes `buildCurrentOutput` return `session_not_running` before it
|
|
742
|
+
// ever asks, and a restart opens a new generation — but the state is about a
|
|
743
|
+
// live pane and should not outlive one. Unconditional: `stopSession` answers
|
|
744
|
+
// false for a session that was already gone, which is not a reason to keep
|
|
745
|
+
// state about it.
|
|
746
|
+
(0, agent_event_state_1.discardAgentEventState)(worktreeId, 'claude', instanceId);
|
|
747
|
+
return stopped;
|
|
709
748
|
}
|
|
710
749
|
/**
|
|
711
750
|
* Restart a Claude session
|