commandmate 0.26.1 → 0.27.1
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 +430 -402
- package/.next/app-path-routes-manifest.json +32 -28
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +6 -6
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +24 -0
- 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 +2 -2
- 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/capabilities/route.js +1 -0
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
- 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.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 +19 -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 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- 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/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/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_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.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.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.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.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.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.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]/clear-composer/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.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 +2 -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]/env/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.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.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_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.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.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.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.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.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.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.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.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.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.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.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.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.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]/resolve-target/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
- 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 +1 -5
- 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 +2 -6
- 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 +3 -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.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.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 +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +3 -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_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_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 +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.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.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.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.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +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.js +2 -2
- package/.next/server/app/more/page.js.nft.json +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.js +1 -1
- package/.next/server/app/page.js.nft.json +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.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +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.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +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 +9 -7
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +32 -28
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +3 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1538.js +7 -0
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +3 -2
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/2689.js +13 -0
- package/.next/server/chunks/2759.js +8 -0
- package/.next/server/chunks/2839.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3292.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -17
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4423.js +1 -0
- package/.next/server/chunks/4444.js +22 -8
- package/.next/server/chunks/4565.js +3 -0
- package/.next/server/chunks/467.js +1 -0
- package/.next/server/chunks/4905.js +5 -0
- package/.next/server/chunks/5017.js +1 -0
- package/.next/server/chunks/5089.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -0
- package/.next/server/chunks/5354.js +1 -0
- package/.next/server/chunks/552.js +19 -0
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5998.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +11 -11
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/7472.js +1 -0
- package/.next/server/chunks/7506.js +1 -0
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +5 -5
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9284.js +1 -0
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9508.js +1 -0
- package/.next/server/chunks/9938.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/9IXgWfBUtnEnRqnbmErTp/_buildManifest.js +1 -0
- package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
- package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
- package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
- package/.next/static/chunks/{6381-0e097c0286155883.js → 6381-8cfe50a5ca5425b1.js} +1 -1
- package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
- package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
- package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
- package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
- package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f7b3dfbe757dc6b8.js +1 -0
- package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
- package/.next/static/css/928e5a8830fbf997.css +1 -0
- package/.next/trace +13 -12
- package/.next/types/app/api/capabilities/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +40 -2
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +28 -13
- package/dist/cli/commands/instances.d.ts +30 -18
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +32 -36
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +73 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +18 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +21 -15
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +38 -0
- package/dist/cli/commands/wait.d.ts +26 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +390 -43
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +16 -0
- package/dist/cli/config/cli-tool-ids.d.ts +11 -0
- package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
- package/dist/cli/config/cli-tool-ids.js +12 -1
- package/dist/cli/types/api-responses.d.ts +443 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +18 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +22 -0
- package/dist/cli/utils/server-capabilities.d.ts +56 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
- package/dist/cli/utils/server-capabilities.js +166 -0
- package/dist/cli/utils/session-target.d.ts +70 -0
- package/dist/cli/utils/session-target.d.ts.map +1 -0
- package/dist/cli/utils/session-target.js +118 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/lib/cli-tools/types.d.ts +61 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +41 -0
- package/dist/lib/detection/ansi.d.ts +2 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +3 -2
- package/dist/lib/detection/tools/verified-against.d.ts +84 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
- package/dist/lib/detection/tools/verified-against.js +88 -0
- package/dist/lib/detection/version-probes.d.ts +207 -0
- package/dist/lib/detection/version-probes.d.ts.map +1 -0
- package/dist/lib/detection/version-probes.js +290 -0
- package/dist/lib/security/env-sanitizer.d.ts +198 -0
- package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
- package/dist/lib/security/env-sanitizer.js +232 -0
- package/dist/server/locales/en/notifications.json +17 -6
- package/dist/server/locales/ja/notifications.json +17 -6
- package/dist/server/src/config/activity-bar-config.js +4 -0
- package/dist/server/src/config/cli-tool-timing-config.js +59 -2
- package/dist/server/src/config/copilot-constants.js +11 -1
- package/dist/server/src/config/detection-evidence-config.js +129 -0
- package/dist/server/src/config/schedule-config.js +56 -7
- package/dist/server/src/config/tmux-pane-config.js +18 -1
- package/dist/server/src/lib/auto-yes-poller.js +36 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
- package/dist/server/src/lib/cli-tools/base.js +131 -10
- package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
- package/dist/server/src/lib/cli-tools/claude.js +1 -1
- package/dist/server/src/lib/cli-tools/codex.js +6 -2
- package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/server/src/lib/cli-tools/copilot.js +307 -81
- package/dist/server/src/lib/cli-tools/gemini.js +8 -6
- package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
- package/dist/server/src/lib/cli-tools/index.js +11 -1
- package/dist/server/src/lib/cli-tools/manager.js +56 -4
- package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
- package/dist/server/src/lib/cli-tools/opencode.js +233 -30
- package/dist/server/src/lib/cli-tools/session-name.js +57 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
- package/dist/server/src/lib/cli-tools/types.js +41 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
- package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
- package/dist/server/src/lib/cmate-parser.js +12 -4
- package/dist/server/src/lib/db/db.js +5 -1
- package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
- package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
- package/dist/server/src/lib/detection/ansi.js +3 -2
- package/dist/server/src/lib/detection/cli-patterns.js +901 -67
- package/dist/server/src/lib/detection/composer-text.js +455 -0
- package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
- package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
- package/dist/server/src/lib/detection/status-detector.js +76 -675
- package/dist/server/src/lib/detection/status-reason.js +57 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
- package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
- package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
- package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
- package/dist/server/src/lib/detection/tools/frame.js +47 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
- package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
- package/dist/server/src/lib/detection/tools/registry.js +58 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
- package/dist/server/src/lib/detection/tools/types.js +34 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
- package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
- package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
- package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
- package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
- package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
- package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
- package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
- package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
- package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
- package/dist/server/src/lib/job-executor.js +16 -4
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
- package/dist/server/src/lib/polling/response-checker.js +243 -26
- package/dist/server/src/lib/push/failure-episode-state.js +127 -0
- package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
- package/dist/server/src/lib/push/index.js +35 -1
- package/dist/server/src/lib/push/prompt-card-state.js +93 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
- package/dist/server/src/lib/push/push-sender.js +82 -7
- package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
- package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
- package/dist/server/src/lib/response-cleaner.js +93 -20
- package/dist/server/src/lib/response-extractor.js +98 -5
- package/dist/server/src/lib/security/env-sanitizer.js +179 -5
- package/dist/server/src/lib/session/agent-event-state.js +1038 -189
- package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
- package/dist/server/src/lib/session/claude-executor.js +23 -3
- package/dist/server/src/lib/session/claude-session.js +11 -1
- package/dist/server/src/lib/session/composer-clear.js +95 -0
- package/dist/server/src/lib/session/current-output-builder.js +267 -25
- package/dist/server/src/lib/session/provisional-turn.js +310 -0
- package/dist/server/src/lib/session/resolve-session-target.js +156 -0
- package/dist/server/src/lib/session/send-user-message.js +14 -18
- package/dist/server/src/lib/session/session-start-error.js +53 -1
- package/dist/server/src/lib/session/status-evidence.js +217 -0
- package/dist/server/src/lib/session/structured-prompt.js +46 -4
- package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
- package/dist/server/src/lib/tmux/key-sequence.js +120 -0
- package/dist/server/src/lib/tmux/tmux.js +91 -19
- package/dist/server/src/lib/tui-accumulator.js +68 -1
- package/dist/server/src/lib/verification/gate-runner.js +84 -1
- package/dist/server/src/lib/ws-server.js +8 -5
- package/dist/server/src/types/cli-tool-contracts.js +75 -0
- package/dist/server/src/types/terminal-keys.js +37 -0
- package/dist/types/cli-tool-contracts.d.ts +235 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -0
- package/dist/types/cli-tool-contracts.js +75 -0
- package/package.json +3 -2
- package/public/sw.js +65 -2
- package/.next/server/chunks/1841.js +0 -1
- package/.next/server/chunks/233.js +0 -1
- package/.next/server/chunks/3022.js +0 -1
- package/.next/server/chunks/3270.js +0 -1
- package/.next/server/chunks/4455.js +0 -1
- package/.next/server/chunks/5959.js +0 -27
- package/.next/server/chunks/7458.js +0 -6
- package/.next/server/chunks/8730.js +0 -1
- package/.next/server/chunks/9058.js +0 -1
- package/.next/server/chunks/9687.js +0 -3
- package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
- package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-fdfca039b7f5837e.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/wyFLOpmKpr45BHZ4svYpE/_buildManifest.js +0 -1
- /package/.next/static/{wyFLOpmKpr45BHZ4svYpE → 9IXgWfBUtnEnRqnbmErTp}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The one position that can stop Issue #1896: Auto-Yes may fire only on a
|
|
4
|
+
* POSITIVELY detected tool dialog (Issue #1928, 方針書 §4 D1 決定 4).
|
|
5
|
+
*
|
|
6
|
+
* ## What goes wrong without it
|
|
7
|
+
*
|
|
8
|
+
* `detectPrompt` answers "does this frame look like a numbered choice?" from the
|
|
9
|
+
* text alone. An agent that lists three deployment options and asks which one
|
|
10
|
+
* the operator wants satisfies it exactly — and on opencode the `1` Auto-Yes
|
|
11
|
+
* typed in reply was not answering anything, it was SENT AS A USER UTTERANCE
|
|
12
|
+
* (#1896). Same shape, different tool: a codex approval the operator answered
|
|
13
|
+
* five minutes ago is still on the pane, options and footer intact (#1160).
|
|
14
|
+
*
|
|
15
|
+
* The generic inference cannot tell any of these from a live dialog, because
|
|
16
|
+
* nothing in the ROWS distinguishes them — what distinguishes them is position
|
|
17
|
+
* and chrome, which only the tool's own module knows. So this gate asks that
|
|
18
|
+
* module, through the `detectDialog` seam §4 D2 declared, and sends nothing when
|
|
19
|
+
* it declines.
|
|
20
|
+
*
|
|
21
|
+
* ## Rollout, and why the table is explicit
|
|
22
|
+
*
|
|
23
|
+
* Per tool, exactly like the idle-evidence rollout in
|
|
24
|
+
* `config/detection-evidence-config.ts`. A tool whose dialogs nobody has
|
|
25
|
+
* measured must NOT be gated: gating it would turn every one of its prompts into
|
|
26
|
+
* a suppression and stop Auto-Yes working at all for that tool, which is a
|
|
27
|
+
* bigger regression than the false positive the gate exists to prevent. The
|
|
28
|
+
* table states that decision rather than leaving it implicit in which modules
|
|
29
|
+
* happen to declare `detectDialog` — although the two are cross-checked, because
|
|
30
|
+
* an `enforce` row for a tool with no rules would silence it.
|
|
31
|
+
*
|
|
32
|
+
* ## Which inference is gated
|
|
33
|
+
*
|
|
34
|
+
* The NUMBERED-LIST one, and only it. §4 D1 決定 4 names it in as many words
|
|
35
|
+
* (「`detectPrompt` の汎用な番号リスト推定だけでは撃たない」) and #1896 is an
|
|
36
|
+
* instance of it, so `multiple_choice` is what this gate judges.
|
|
37
|
+
*
|
|
38
|
+
* A `yes_no` prompt is a different inference — `detectPrompt` requires an
|
|
39
|
+
* explicit `(y/n)`-shaped token in the text rather than deriving it from layout
|
|
40
|
+
* — and NO tool in the registry has a measured yes/no dialog rule to gate it
|
|
41
|
+
* against. Gating an inference for which no positive rule exists is the failure
|
|
42
|
+
* mode the rollout guidance is written to prevent: every such prompt would
|
|
43
|
+
* become a suppression, and the operator would see a worker that had silently
|
|
44
|
+
* gone quiet. When a tool's yes/no dialog is measured and fixtured, widen this
|
|
45
|
+
* the same way a tool is added to the table.
|
|
46
|
+
*
|
|
47
|
+
* ## What "allowed" does NOT mean
|
|
48
|
+
*
|
|
49
|
+
* It does not mean "send this answer". The contract policy (#1547), the deny
|
|
50
|
+
* patterns (#1699) and the base rules all still run afterwards and can each
|
|
51
|
+
* withhold. This gate only removes an answer the tool's own rules cannot vouch
|
|
52
|
+
* for.
|
|
53
|
+
*
|
|
54
|
+
* @module lib/polling/auto-yes-dialog-gate
|
|
55
|
+
*/
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.AUTO_YES_DIALOG_GATE_ENV_VAR = exports.AUTO_YES_DIALOG_GATE_DEFAULT_MODE = exports.AUTO_YES_DIALOG_GATE_MODES = void 0;
|
|
58
|
+
exports.resolveAutoYesDialogGateMode = resolveAutoYesDialogGateMode;
|
|
59
|
+
exports.evaluateAutoYesDialogGate = evaluateAutoYesDialogGate;
|
|
60
|
+
const frame_1 = require("../../lib/detection/tools/frame");
|
|
61
|
+
const registry_1 = require("../../lib/detection/tools/registry");
|
|
62
|
+
/** Every accepted value of {@link AutoYesDialogGateMode}, for parsing and tests. */
|
|
63
|
+
exports.AUTO_YES_DIALOG_GATE_MODES = ['enforce', 'legacy'];
|
|
64
|
+
/**
|
|
65
|
+
* The rollout state each tool ships in.
|
|
66
|
+
*
|
|
67
|
+
* `enforce` is set only for the four tools with a dialog rule measured from
|
|
68
|
+
* their own live captures, each with a positive fixture and a mutation fixture
|
|
69
|
+
* (`tests/unit/detection/tools/dialogs.test.ts`):
|
|
70
|
+
*
|
|
71
|
+
* | tool | positive rule | Issue |
|
|
72
|
+
* |----------|----------------------------------------------------------------------|---------------|
|
|
73
|
+
* | claude | `❯` cursor on the option run above the chrome, dialog footer or none | #1708 / #1495 |
|
|
74
|
+
* | codex | `Press enter to confirm …` under the options, above the status bar, not stale | #1628 / #1160 |
|
|
75
|
+
* | copilot | the bottom status bar is GONE and the option run carries a picker footer | #1885 / #1895 |
|
|
76
|
+
* | opencode | the `Allow once / Allow always / Reject` strip, or a picker header | #1893 / #1896 |
|
|
77
|
+
*
|
|
78
|
+
* The rest are `legacy` because nobody has measured them:
|
|
79
|
+
*
|
|
80
|
+
* - `gemini` and `vibe-local` have no tool module at all
|
|
81
|
+
* (`createGenericStatusDetector`), so there is nothing to ask.
|
|
82
|
+
* - `antigravity` has a module, but its permission menu was measured only well
|
|
83
|
+
* enough to answer it (#999: an ASCII `>` cursor, a `↑/↓ Navigate` footer and
|
|
84
|
+
* no `press enter to confirm`), and the repository holds no live agy capture
|
|
85
|
+
* to write a dialog rule against. Gating it on a rule inferred from another
|
|
86
|
+
* tool's frames is the mistake #1979 had to correct; leaving it `legacy` keeps
|
|
87
|
+
* agy's Auto-Yes working exactly as it does today.
|
|
88
|
+
*/
|
|
89
|
+
exports.AUTO_YES_DIALOG_GATE_DEFAULT_MODE = {
|
|
90
|
+
claude: 'enforce',
|
|
91
|
+
codex: 'enforce',
|
|
92
|
+
copilot: 'enforce',
|
|
93
|
+
opencode: 'enforce',
|
|
94
|
+
gemini: 'legacy',
|
|
95
|
+
antigravity: 'legacy',
|
|
96
|
+
'vibe-local': 'legacy',
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* The kill switch (§13.1 DR3-016).
|
|
100
|
+
*
|
|
101
|
+
* A comma-separated list of `<tool>=<mode>` pairs, with `*` for "every tool",
|
|
102
|
+
* spelled exactly like `CM_DETECTION_IDLE_EVIDENCE`:
|
|
103
|
+
*
|
|
104
|
+
* ```
|
|
105
|
+
* CM_AUTOYES_DIALOG_GATE=codex=legacy # one tool back to the pre-#1928 behaviour
|
|
106
|
+
* CM_AUTOYES_DIALOG_GATE=*=legacy # the whole gate off
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* Read on every poll rather than at module load, for the same reason the
|
|
110
|
+
* idle-evidence switch is: an operator whose unattended pipeline has stopped
|
|
111
|
+
* answering prompts must be able to undo this without a redeploy, and a cached
|
|
112
|
+
* read would put a restart between them and the incident.
|
|
113
|
+
*/
|
|
114
|
+
exports.AUTO_YES_DIALOG_GATE_ENV_VAR = 'CM_AUTOYES_DIALOG_GATE';
|
|
115
|
+
function isMode(value) {
|
|
116
|
+
return exports.AUTO_YES_DIALOG_GATE_MODES.includes(value);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolve one tool's gate mode.
|
|
120
|
+
*
|
|
121
|
+
* Later entries win over earlier ones and a tool-specific entry beats `*` in
|
|
122
|
+
* either order. An unparseable entry is ignored rather than thrown: this runs on
|
|
123
|
+
* the Auto-Yes polling path, and a typo in an env var must not take the poller
|
|
124
|
+
* down.
|
|
125
|
+
*
|
|
126
|
+
* @param tool - CLI tool to resolve for
|
|
127
|
+
* @param env - Environment to read; injectable for tests
|
|
128
|
+
*/
|
|
129
|
+
function resolveAutoYesDialogGateMode(tool, env = process.env) {
|
|
130
|
+
const raw = env[exports.AUTO_YES_DIALOG_GATE_ENV_VAR];
|
|
131
|
+
let wildcard = null;
|
|
132
|
+
let specific = null;
|
|
133
|
+
if (typeof raw === 'string' && raw.trim() !== '') {
|
|
134
|
+
for (const entry of raw.split(',')) {
|
|
135
|
+
const [rawKey, rawValue] = entry.split('=');
|
|
136
|
+
if (rawValue === undefined)
|
|
137
|
+
continue;
|
|
138
|
+
const key = rawKey.trim();
|
|
139
|
+
const value = rawValue.trim();
|
|
140
|
+
if (!isMode(value))
|
|
141
|
+
continue;
|
|
142
|
+
if (key === '*')
|
|
143
|
+
wildcard = value;
|
|
144
|
+
else if (key === tool)
|
|
145
|
+
specific = value;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return specific ?? wildcard ?? exports.AUTO_YES_DIALOG_GATE_DEFAULT_MODE[tool] ?? 'legacy';
|
|
149
|
+
}
|
|
150
|
+
/** The only prompt family this gate judges. See the module docstring. */
|
|
151
|
+
const GATED_PROMPT_TYPE = 'multiple_choice';
|
|
152
|
+
/**
|
|
153
|
+
* May Auto-Yes answer the prompt the generic inference found on this frame?
|
|
154
|
+
*
|
|
155
|
+
* @param cliToolId - CLI tool being polled
|
|
156
|
+
* @param promptType - How `detectPrompt` classified the frame
|
|
157
|
+
* @param cleanOutput - The capture Auto-Yes judged, i.e. what
|
|
158
|
+
* `captureAndCleanOutput` produced: ANSI **and** box drawing already removed.
|
|
159
|
+
* Every `detectDialog` implementation is written against that spelling as well
|
|
160
|
+
* as the untouched one, so the same frame reaches the same verdict on both
|
|
161
|
+
* paths.
|
|
162
|
+
* @param env - Environment to read the kill switch from; injectable for tests
|
|
163
|
+
*/
|
|
164
|
+
function evaluateAutoYesDialogGate(cliToolId, promptType, cleanOutput, env = process.env) {
|
|
165
|
+
const detector = (0, registry_1.getToolStatusDetector)(cliToolId);
|
|
166
|
+
const mode = resolveAutoYesDialogGateMode(cliToolId, env);
|
|
167
|
+
// A tool nobody has measured is not gated whatever the table says. Belt and
|
|
168
|
+
// braces on purpose: the failure mode of getting this wrong is Auto-Yes going
|
|
169
|
+
// permanently silent for that tool, which looks exactly like a hung worker.
|
|
170
|
+
if (promptType !== GATED_PROMPT_TYPE || !detector.hasDialogRules || mode === 'legacy') {
|
|
171
|
+
return { allowed: true, dialog: null, mode, gated: false };
|
|
172
|
+
}
|
|
173
|
+
const dialog = detector.detectDialog((0, frame_1.normalizeFrame)(cleanOutput));
|
|
174
|
+
return {
|
|
175
|
+
// `keys` is a dialog and still not answerable: opencode's button strip takes
|
|
176
|
+
// ←/→ + Enter, so the digit is swallowed and the Enter confirms whatever is
|
|
177
|
+
// highlighted — asking to Reject would Approve (#1893). Sending nothing is
|
|
178
|
+
// the only safe answer, and `wait` still stops for the frame.
|
|
179
|
+
allowed: dialog !== null && dialog.answerMode === 'numbered',
|
|
180
|
+
dialog,
|
|
181
|
+
mode,
|
|
182
|
+
gated: true,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
@@ -32,9 +32,69 @@ const push_1 = require("../../lib/push");
|
|
|
32
32
|
// Issue #1790: imported by deep path, not through `@/lib/push`. Suites that
|
|
33
33
|
// replace the barrel to count notifications (e.g. the #1547 escalation test)
|
|
34
34
|
// would otherwise get `undefined` here and take down module evaluation.
|
|
35
|
+
// Issue #1999: imported from its own module, not from the `@/lib/push` barrel
|
|
36
|
+
// above. Several suites replace that barrel wholesale with a stub that only
|
|
37
|
+
// declares `notifyPushSubscribers`, and a gate reached through it would be
|
|
38
|
+
// `undefined` in exactly those tests — a TypeError this function's catch would
|
|
39
|
+
// report as an ordinary "no response found".
|
|
40
|
+
const prompt_push_gate_1 = require("../../lib/push/prompt-push-gate");
|
|
41
|
+
// Issue #2000: deep path for the same reason as the two imports above.
|
|
42
|
+
const failure_push_notifier_1 = require("../../lib/push/failure-push-notifier");
|
|
43
|
+
const upstream_faults_1 = require("../../lib/detection/upstream-faults");
|
|
35
44
|
const waiting_push_notifier_1 = require("../../lib/push/waiting-push-notifier");
|
|
36
45
|
const waiting_episode_state_1 = require("../../lib/session/waiting-episode-state");
|
|
37
46
|
const task_transition_service_1 = require("../../lib/tasks/task-transition-service");
|
|
47
|
+
/**
|
|
48
|
+
* How many rows from the bottom of a copilot capture may hold its status bar.
|
|
49
|
+
*
|
|
50
|
+
* `readCopilotStatusBar` stops at the first non-blank row from the end, and the
|
|
51
|
+
* capture handed to it here has already had its trailing blanks trimmed, so one
|
|
52
|
+
* row is enough in practice. The slack exists so the reader keeps working if that
|
|
53
|
+
* trim ever changes, without mapping a thousand rows through `stripAnsi` on every
|
|
54
|
+
* poll tick. (Issue #1897)
|
|
55
|
+
*/
|
|
56
|
+
const COPILOT_STATUS_BAR_SCAN_ROWS = 8;
|
|
57
|
+
/**
|
|
58
|
+
* How many rows from the bottom of a capture the upstream-fault check reads
|
|
59
|
+
* (Issue #2000).
|
|
60
|
+
*
|
|
61
|
+
* The same 100 as `current-output-builder`'s `realtimeSnippet`, and for the
|
|
62
|
+
* reason #1839 gives there: the wider capture keeps a banner from an hour ago
|
|
63
|
+
* in scope, and "is this happening now" is the only question worth ringing a
|
|
64
|
+
* phone about. Keeping the two windows equal also means the notification and
|
|
65
|
+
* the `upstreamFault` field an operator reads in `capture --json` are judging
|
|
66
|
+
* the same rows — a fault that rang but is invisible in the payload next to it
|
|
67
|
+
* is unverifiable.
|
|
68
|
+
*/
|
|
69
|
+
const UPSTREAM_FAULT_SCAN_ROWS = 100;
|
|
70
|
+
/**
|
|
71
|
+
* Raise a push notification when this frame shows a NEW upstream fault
|
|
72
|
+
* (Issue #2000).
|
|
73
|
+
*
|
|
74
|
+
* Observed here, on the poller, rather than in `current-output-builder` where
|
|
75
|
+
* the published `upstreamFault` field is computed. That field is on a read
|
|
76
|
+
* path: it is evaluated when a browser polls the status API or holds the
|
|
77
|
+
* WebSocket open, i.e. exactly when the user is already looking. A phone
|
|
78
|
+
* notification is for the opposite situation, so the observation has to come
|
|
79
|
+
* from something the server runs on its own — and this poller is it.
|
|
80
|
+
*
|
|
81
|
+
* Every decision (new episode / still the same one / inside the cooldown) is
|
|
82
|
+
* made and logged by `push/failure-push-notifier`; nothing here decides
|
|
83
|
+
* anything, so the level can be handed over on every poll.
|
|
84
|
+
*/
|
|
85
|
+
function observeUpstreamFaultForPush(worktreeId, cliToolId, instanceId, output) {
|
|
86
|
+
const snippet = output.split('\n').slice(-UPSTREAM_FAULT_SCAN_ROWS).join('\n');
|
|
87
|
+
const match = (0, upstream_faults_1.matchUpstreamFault)(snippet);
|
|
88
|
+
// Fire-and-forget, like every other push call in this file: the poller must
|
|
89
|
+
// not slow down or break because a notification could not be delivered.
|
|
90
|
+
void (0, failure_push_notifier_1.notifyUpstreamFaultPush)({
|
|
91
|
+
worktreeId,
|
|
92
|
+
cliToolId,
|
|
93
|
+
instanceId,
|
|
94
|
+
faultId: match?.fault.id ?? null,
|
|
95
|
+
matchedText: match?.matchedText,
|
|
96
|
+
}).catch(() => { });
|
|
97
|
+
}
|
|
38
98
|
// Issue #1790: arm the waiting-edge push subscription.
|
|
39
99
|
//
|
|
40
100
|
// It has to exist before the first edge, and `server.ts` reaches this module at
|
|
@@ -134,7 +194,35 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
134
194
|
// defeating the content dedup from #1268. Completion detection below still
|
|
135
195
|
// reads the untouched buffer: it keys off that very footer (the input box
|
|
136
196
|
// supplies `hasPrompt`, its rules supply `hasSeparator`).
|
|
137
|
-
|
|
197
|
+
//
|
|
198
|
+
// Issue #1897: copilot pins the same shape of chrome (cwd row, two rules, the
|
|
199
|
+
// composer, the status bar) to the bottom of its pane, and it is the reason the
|
|
200
|
+
// agent's saved reply read " Working esc interrupt GPT-5.6 Terra" -- see
|
|
201
|
+
// findCopilotChromeStart().
|
|
202
|
+
//
|
|
203
|
+
// Issue #1911: opencode pins the same kind of chrome to the bottom of its
|
|
204
|
+
// alternate-screen pane — the composer box (whose model row reads
|
|
205
|
+
// `Build · GPT-5.6 Luna GitHub Copilot`) and, below its `╹▀▀▀` border, a footer
|
|
206
|
+
// whose wrapped cwd carries no signature at all. Both were being saved as part
|
|
207
|
+
// of the assistant's reply, which is defect 1 of #1911; no pattern can remove
|
|
208
|
+
// the cwd rows, so the boundary has to be structural.
|
|
209
|
+
//
|
|
210
|
+
// The three readers stay three functions on purpose. All three answer "where
|
|
211
|
+
// does the transcript stop?", but each is anchored on a DIFFERENT measured
|
|
212
|
+
// landmark — claude's two full-width rules around its input box (#1289),
|
|
213
|
+
// copilot's bottom status-bar row (#1885/#1897), opencode's `╹▀▀▀` composer
|
|
214
|
+
// border (#1911) — and a landmark is only as good as the frames it was measured
|
|
215
|
+
// on. Folding them into one reader would let a rewording in one tool's chrome
|
|
216
|
+
// silently delete another tool's boundary, and a boundary that stops existing
|
|
217
|
+
// does not fail loudly: it puts terminal furniture back into History.
|
|
218
|
+
const openCodeCleanLines = cliToolId === 'opencode' ? lines.map(cli_patterns_1.stripAnsi) : null;
|
|
219
|
+
const chromeStart = cliToolId === 'claude'
|
|
220
|
+
? (0, cli_patterns_1.findClaudeChromeStart)(lines)
|
|
221
|
+
: cliToolId === 'copilot'
|
|
222
|
+
? (0, cli_patterns_1.findCopilotChromeStart)(lines)
|
|
223
|
+
: openCodeCleanLines
|
|
224
|
+
? (0, cli_patterns_1.findOpenCodeChromeStart)(openCodeCleanLines)
|
|
225
|
+
: -1;
|
|
138
226
|
const contentEnd = chromeStart >= 0 ? chromeStart : totalLines;
|
|
139
227
|
const BUFFER_RESET_TOLERANCE = 25;
|
|
140
228
|
const bufferShrank = totalLines > 0 && lastCapturedLine > BUFFER_RESET_TOLERANCE && (totalLines + BUFFER_RESET_TOLERANCE) < lastCapturedLine;
|
|
@@ -148,8 +236,8 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
148
236
|
const checkLineCount = 20;
|
|
149
237
|
const startLine = Math.max(0, totalLines - checkLineCount);
|
|
150
238
|
const linesToCheck = lines.slice(startLine);
|
|
151
|
-
const outputToCheck =
|
|
152
|
-
?
|
|
239
|
+
const outputToCheck = openCodeCleanLines
|
|
240
|
+
? openCodeCleanLines.join('\n')
|
|
153
241
|
: linesToCheck.join('\n');
|
|
154
242
|
// Get tool-specific patterns from shared module
|
|
155
243
|
const { promptPattern, separatorPattern, thinkingPattern, skipPatterns } = (0, cli_patterns_1.getCliToolPatterns)(cliToolId);
|
|
@@ -158,16 +246,41 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
158
246
|
if (cliToolId === 'codex') {
|
|
159
247
|
userPromptPattern = /^›\s+(?!Implement|Find and fix|Type|Summarize)/;
|
|
160
248
|
}
|
|
161
|
-
else if (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
249
|
+
else if (openCodeCleanLines) {
|
|
250
|
+
// Issue #1911: anchor on the newest ECHOED USER PROMPT, not on the
|
|
251
|
+
// second-to-last `▣ Build` row. The old anchor belonged to the PREVIOUS
|
|
252
|
+
// turn, so the echoed prompt of the current one was always extracted as
|
|
253
|
+
// part of the reply — and on the first turn of a session, where there is
|
|
254
|
+
// no second marker, it fell through to line 0 and the whole pane (banner
|
|
255
|
+
// included) became the answer. `windowSize` is ignored: the alternate
|
|
256
|
+
// screen has no scrollback, so the whole pane IS the window, and every
|
|
257
|
+
// caller already passes `totalLines` or more for this tool.
|
|
258
|
+
return (0, response_extractor_1.resolveOpenCodeTurnRegion)(openCodeCleanLines).echoEnd;
|
|
259
|
+
}
|
|
260
|
+
else if (cliToolId === 'copilot') {
|
|
261
|
+
// Issue #1897: copilot 1.0.80 draws the transcript one column in, so the
|
|
262
|
+
// bare `^[>❯]` form below never matched the echoed prompt -- every copilot
|
|
263
|
+
// extraction fell back to line 0, i.e. to the launch banner. The composer,
|
|
264
|
+
// which IS at column 0, lives below `contentEnd` and so cannot be picked up
|
|
265
|
+
// as an echo here.
|
|
266
|
+
//
|
|
267
|
+
// The scan then walks past the echo's own wrapped rows and returns the LAST
|
|
268
|
+
// of them, so that callers' `+ 1` lands on the reply rather than on the
|
|
269
|
+
// second half of the operator's question.
|
|
270
|
+
//
|
|
271
|
+
// Same defect as #1911's opencode branch above and the same shape of fix,
|
|
272
|
+
// but NOT the same code: opencode's echo is a `┃ <text>` gutter row and
|
|
273
|
+
// copilot's is ` ❯ <text>` at the pane's one-column indent, so the anchor
|
|
274
|
+
// and the continuation rule are both tool-specific measurements.
|
|
275
|
+
for (let i = contentEnd - 1; i >= Math.max(0, contentEnd - windowSize); i--) {
|
|
276
|
+
if (!cli_patterns_1.COPILOT_USER_ECHO_PATTERN.test((0, cli_patterns_1.stripAnsi)(lines[i])))
|
|
277
|
+
continue;
|
|
278
|
+
let echoEnd = i;
|
|
279
|
+
while (echoEnd + 1 < contentEnd &&
|
|
280
|
+
cli_patterns_1.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN.test((0, cli_patterns_1.stripAnsi)(lines[echoEnd + 1]))) {
|
|
281
|
+
echoEnd++;
|
|
170
282
|
}
|
|
283
|
+
return echoEnd;
|
|
171
284
|
}
|
|
172
285
|
return -1;
|
|
173
286
|
}
|
|
@@ -207,8 +320,29 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
207
320
|
const isThinking = cliToolId === 'codex'
|
|
208
321
|
? (0, cli_patterns_1.isCodexTurnActive)(lines, checkLineCount)
|
|
209
322
|
: thinkingPattern.test(cleanOutputToCheck);
|
|
323
|
+
// Issue #1897: copilot's `hasPrompt` is worthless as a completion signal and
|
|
324
|
+
// its `isThinking` is worthless as a liveness one. The `❯` composer is drawn
|
|
325
|
+
// between its two rules throughout a turn (measured on every frame of #1885's
|
|
326
|
+
// running fixtures), and `COPILOT_THINKING_PATTERN` matches nothing copilot
|
|
327
|
+
// 1.0.80 draws (0 of 44 live generating frames). So `hasPrompt && !isThinking`
|
|
328
|
+
// was true on the very first poll of a running turn -- the extractor declared
|
|
329
|
+
// the turn finished, saved the status bar as the reply, and `checkForResponse`
|
|
330
|
+
// stopped polling, which is why the real answer never reached History.
|
|
331
|
+
//
|
|
332
|
+
// 1.0.80 paints the turn's state on the bottom row of the pane and nowhere
|
|
333
|
+
// else, so that ROW -- never a tail window, which copilot's own reply text can
|
|
334
|
+
// forge (`status-vocabulary-in-response.txt`) -- is the evidence. `idle` is a
|
|
335
|
+
// positive observation that the turn is over (design policy §4 D1 decision 1
|
|
336
|
+
// item 2); `working` and `null` (a dialog box has taken the bar away) both mean
|
|
337
|
+
// "not finished", and the dialog case is already served by the prompt path
|
|
338
|
+
// above.
|
|
339
|
+
const copilotStatusBar = cliToolId === 'copilot'
|
|
340
|
+
? (0, cli_patterns_1.readCopilotStatusBar)(lines.slice(Math.max(0, totalLines - COPILOT_STATUS_BAR_SCAN_ROWS)).map(cli_patterns_1.stripAnsi))
|
|
341
|
+
: null;
|
|
210
342
|
// Prompt-based completion logic
|
|
211
|
-
const isPromptBasedComplete =
|
|
343
|
+
const isPromptBasedComplete = cliToolId === 'copilot'
|
|
344
|
+
? copilotStatusBar === 'idle'
|
|
345
|
+
: (cliToolId === 'codex' || cliToolId === 'gemini' || cliToolId === 'vibe-local' || cliToolId === 'antigravity') && hasPrompt && !isThinking;
|
|
212
346
|
const isClaudeComplete = cliToolId === 'claude' && hasPrompt && hasSeparator && !isThinking;
|
|
213
347
|
const isOpenCodeDone = cliToolId === 'opencode' && (0, response_extractor_1.isOpenCodeComplete)(cleanOutputToCheck);
|
|
214
348
|
if (isPromptBasedComplete || isClaudeComplete || isOpenCodeDone) {
|
|
@@ -234,7 +368,14 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
234
368
|
endIndex = i;
|
|
235
369
|
break;
|
|
236
370
|
}
|
|
237
|
-
|
|
371
|
+
// Issue #1911: both rows this stops on (`Ask anything...` in the composer,
|
|
372
|
+
// `tab agents ctrl+p commands` under its border) live in the chrome, which
|
|
373
|
+
// `contentEnd` now excludes structurally. Kept only as the fallback for a
|
|
374
|
+
// frame whose chrome could not be located, because there it is still the
|
|
375
|
+
// one boundary available — and #1883 measured that a REPLY can contain
|
|
376
|
+
// `Ask anything...`, so cutting the turn on it is a last resort, not the
|
|
377
|
+
// primary rule.
|
|
378
|
+
if (cliToolId === 'opencode' && chromeStart < 0) {
|
|
238
379
|
if (cli_patterns_1.OPENCODE_PROMPT_PATTERN.test(cleanLine) || cli_patterns_1.OPENCODE_PROMPT_AFTER_RESPONSE.test(cleanLine)) {
|
|
239
380
|
endIndex = i;
|
|
240
381
|
break;
|
|
@@ -248,8 +389,16 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
248
389
|
}
|
|
249
390
|
const response = responseLines.join('\n').trim();
|
|
250
391
|
// DR-004: Check only the tail of the response for thinking indicators.
|
|
392
|
+
//
|
|
393
|
+
// Issue #1897: not for copilot. This is the same tail-window match the #1671
|
|
394
|
+
// codex fix removed from the liveness test, and on copilot it is both
|
|
395
|
+
// redundant and harmful: the status bar above has already made a positive
|
|
396
|
+
// `idle` observation about THIS frame, while the window here sees transcript
|
|
397
|
+
// that never scrolls away. `COPILOT_THINKING_PATTERN`'s braille alternative
|
|
398
|
+
// matches any spinner glyph a reply happens to quote, and the turn would then
|
|
399
|
+
// be reported unfinished for the rest of the session.
|
|
251
400
|
const responseTailLines = response.split('\n').slice(-thinking_constants_1.THINKING_TAIL_LINE_COUNT).join('\n');
|
|
252
|
-
if (thinkingPattern.test(responseTailLines)) {
|
|
401
|
+
if (cliToolId !== 'copilot' && thinkingPattern.test(responseTailLines)) {
|
|
253
402
|
return incompleteResult(totalLines);
|
|
254
403
|
}
|
|
255
404
|
// CRITICAL FIX: Detect and skip Claude Code startup banner/screen
|
|
@@ -277,6 +426,25 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
277
426
|
return incompleteResult(totalLines);
|
|
278
427
|
}
|
|
279
428
|
}
|
|
429
|
+
// Issue #1897: copilot's launch screen is a complete, idle frame -- composer
|
|
430
|
+
// drawn, key hints on the status bar -- so every check above accepts it and
|
|
431
|
+
// History used to open with the banner ("Current Sessions Issues Pull
|
|
432
|
+
// requests Gists / No copilot-instructions.md found… / Tip: /app") saved as
|
|
433
|
+
// the agent's first reply, before the operator had said anything.
|
|
434
|
+
//
|
|
435
|
+
// What actually distinguishes it is that no turn has happened: copilot echoes
|
|
436
|
+
// every prompt into the transcript as ` ❯ <text>`, and the launch screen has
|
|
437
|
+
// none. The banner anchors are only consulted once that echo is missing, so a
|
|
438
|
+
// reply that quotes any of this wording is unaffected.
|
|
439
|
+
if (cliToolId === 'copilot') {
|
|
440
|
+
const cleanResponse = (0, cli_patterns_1.stripAnsi)(response);
|
|
441
|
+
const hasUserEcho = cleanResponse
|
|
442
|
+
.split('\n')
|
|
443
|
+
.some(line => cli_patterns_1.COPILOT_USER_ECHO_PATTERN.test(line));
|
|
444
|
+
if (!hasUserEcho && cli_patterns_1.COPILOT_BOOT_BANNER_ANCHORS.some(anchor => anchor.test(cleanResponse))) {
|
|
445
|
+
return incompleteResult(totalLines);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
280
448
|
// Gemini-specific check
|
|
281
449
|
if (cliToolId === 'gemini') {
|
|
282
450
|
const bannerCharCount = (response.match(/[░███]/g) || []).length;
|
|
@@ -310,6 +478,12 @@ function extractResponse(output, lastCapturedLine, cliToolId, captureWindowLines
|
|
|
310
478
|
lineCount: endIndex,
|
|
311
479
|
bufferReset,
|
|
312
480
|
captureWindowSaturated,
|
|
481
|
+
// Issue #1911: opencode only. `echoEnd < 0` means the turn is longer than
|
|
482
|
+
// the alternate-screen pane and its head has already scrolled away, so
|
|
483
|
+
// `response` starts mid-answer. Nothing else in this frame can recover it.
|
|
484
|
+
turnHeadTruncated: openCodeCleanLines
|
|
485
|
+
? (0, response_extractor_1.resolveOpenCodeTurnRegion)(openCodeCleanLines).headTruncated
|
|
486
|
+
: undefined,
|
|
313
487
|
};
|
|
314
488
|
}
|
|
315
489
|
// Check if this is an interactive prompt
|
|
@@ -394,10 +568,21 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
394
568
|
// taken from the same constant extractResponse() measures saturation against
|
|
395
569
|
// (Issue #1670) — a literal here would silently decouple the two.
|
|
396
570
|
const output = await (0, cli_session_1.captureSessionOutput)(worktreeId, cliToolId, tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES, instanceId);
|
|
397
|
-
//
|
|
571
|
+
// Issue #2000: the frame is in hand, so this is the cheapest place to ask
|
|
572
|
+
// whether the model API has stalled the session. Level in, edge out — see
|
|
573
|
+
// the helper.
|
|
574
|
+
observeUpstreamFaultForPush(worktreeId, cliToolId, instanceId, output);
|
|
575
|
+
// Layer 2: Accumulate TUI content for full-screen TUI tools, so a turn that
|
|
576
|
+
// outgrows the alternate-screen pane keeps the head that has scrolled away.
|
|
398
577
|
if (cliToolId === 'opencode' || cliToolId === 'copilot') {
|
|
399
578
|
const pollerKey = (0, response_poller_core_1.getPollerKey)(worktreeId, cliToolId, instanceId);
|
|
400
|
-
|
|
579
|
+
// Issue #1911: opencode is accumulated from the CURRENT TURN'S REGION
|
|
580
|
+
// rather than the whole frame. Feeding the raw pane seeded the accumulator
|
|
581
|
+
// with the previous turn's transcript, the echoed prompt and the bottom
|
|
582
|
+
// chrome on the very first poll, so the accumulated content could never be
|
|
583
|
+
// used as a response source without re-introducing defect 1.
|
|
584
|
+
const accumulatorSource = cliToolId === 'opencode' ? (0, response_extractor_1.sliceOpenCodeTurn)(output) : output;
|
|
585
|
+
(0, tui_accumulator_1.accumulateTuiContent)(pollerKey, accumulatorSource, cliToolId);
|
|
401
586
|
}
|
|
402
587
|
// Extract response
|
|
403
588
|
const result = extractResponse(output, lastCapturedLine, cliToolId, tmux_capture_cache_1.CACHE_MAX_CAPTURE_LINES);
|
|
@@ -499,16 +684,30 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
499
684
|
// episode the store opens are the same number.
|
|
500
685
|
const promptObservedAt = Date.now();
|
|
501
686
|
const promptWaitingSince = (0, waiting_episode_state_1.getWaitingEpisode)(worktreeId, cliToolId, instanceId)?.since ?? promptObservedAt;
|
|
502
|
-
|
|
687
|
+
// Issue #1999: Auto-Yes is a declaration that this session's prompts are
|
|
688
|
+
// answered without a human, so notifying for one is telling the reader the
|
|
689
|
+
// opposite of the truth. Only the notification is gated — the episode
|
|
690
|
+
// below still opens, so the WebSocket frame, the status API and the #1790
|
|
691
|
+
// reminder all see the wait exactly as they did before. The gate runs
|
|
692
|
+
// before the call rather than inside it because `shouldSendWaitingPush`
|
|
693
|
+
// records the episode the moment it decides to send.
|
|
694
|
+
if (!(0, prompt_push_gate_1.isPromptPushSuppressed)({
|
|
503
695
|
worktreeId,
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
agentName: resolvedInstanceId,
|
|
507
|
-
instanceId: resolvedInstanceId,
|
|
508
|
-
waitingKind: 'prompt',
|
|
696
|
+
cliToolId,
|
|
697
|
+
instanceId,
|
|
509
698
|
waitingSince: promptWaitingSince,
|
|
510
|
-
|
|
511
|
-
|
|
699
|
+
})) {
|
|
700
|
+
void (0, push_1.notifyPushSubscribers)({
|
|
701
|
+
worktreeId,
|
|
702
|
+
worktreeName: worktree.name,
|
|
703
|
+
kind: 'prompt',
|
|
704
|
+
agentName: resolvedInstanceId,
|
|
705
|
+
instanceId: resolvedInstanceId,
|
|
706
|
+
waitingKind: 'prompt',
|
|
707
|
+
waitingSince: promptWaitingSince,
|
|
708
|
+
excerpt: promptDetection.promptData?.question ?? promptSaveContent,
|
|
709
|
+
}).catch(() => { });
|
|
710
|
+
}
|
|
512
711
|
(0, waiting_episode_state_1.observeWaitingEdge)({
|
|
513
712
|
worktreeId,
|
|
514
713
|
cliToolId,
|
|
@@ -548,8 +747,26 @@ async function checkForResponse(worktreeId, cliToolId, instanceId) {
|
|
|
548
747
|
(0, tui_accumulator_1.clearTuiAccumulator)(pollerKey);
|
|
549
748
|
}
|
|
550
749
|
else if (cliToolId === 'opencode') {
|
|
551
|
-
cleanedResponse = (0, response_cleaner_1.cleanOpenCodeResponse)(result.response);
|
|
552
750
|
const pollerKey = (0, response_poller_core_1.getPollerKey)(worktreeId, cliToolId, instanceId);
|
|
751
|
+
// Issue #1911 defect 3: opencode wrote to the Layer-2 accumulator but never
|
|
752
|
+
// read it, so any turn longer than the pane was saved without its head.
|
|
753
|
+
//
|
|
754
|
+
// Read it only when the head is ACTUALLY gone, which is what
|
|
755
|
+
// `turnHeadTruncated` measures — deliberately NOT copilot's unconditional
|
|
756
|
+
// `accumulated || response`. The accumulator appends whatever the overlap
|
|
757
|
+
// check cannot match against the previous poll, and opencode rewrites rows
|
|
758
|
+
// in place while it works (`+ Thought: … · 12ms` becomes `· 579ms`, a
|
|
759
|
+
// pending patch row becomes the applied edit). Every such rewrite breaks
|
|
760
|
+
// the overlap and re-appends the lines above it, so preferring the
|
|
761
|
+
// accumulator for the common short answer would duplicate content that
|
|
762
|
+
// `result.response` already holds exactly. When the echo is off screen the
|
|
763
|
+
// frame is missing content outright, and a possible duplicate beats a
|
|
764
|
+
// guaranteed truncation.
|
|
765
|
+
const accumulatedContent = (0, tui_accumulator_1.getAccumulatedContent)(pollerKey);
|
|
766
|
+
const sourceContent = result.turnHeadTruncated && accumulatedContent
|
|
767
|
+
? accumulatedContent
|
|
768
|
+
: result.response;
|
|
769
|
+
cleanedResponse = (0, response_cleaner_1.cleanOpenCodeResponse)(sourceContent);
|
|
553
770
|
(0, tui_accumulator_1.clearTuiAccumulator)(pollerKey);
|
|
554
771
|
}
|
|
555
772
|
// If cleaned response is empty or just "[No content]", skip saving
|