commandmate 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +431 -403
- package/.next/app-path-routes-manifest.json +26 -22
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- 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_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_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 +26 -22
- 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/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-9303430933084b56.js → 6381-b7250e8ca7a44c6c.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-e4f28966b4fc0ce1.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/static/t0BoV4H46ZgKmTjSi7GIz/_buildManifest.js +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-fbdf4621a2911ac1.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/hNdNiFes2xLls68SWhAU9/_buildManifest.js +0 -1
- /package/.next/static/{hNdNiFes2xLls68SWhAU9 → t0BoV4H46ZgKmTjSi7GIz}/_ssgManifest.js +0 -0
|
@@ -141,14 +141,45 @@ function cleanGeminiResponse(response) {
|
|
|
141
141
|
return cleanedLines.join('\n').trim();
|
|
142
142
|
}
|
|
143
143
|
/**
|
|
144
|
-
* Copilot tool-action pattern: ● followed by
|
|
145
|
-
* These lines represent Copilot's internal tool calls (shell, file reads, etc.)
|
|
146
|
-
* and should be filtered from saved responses.
|
|
147
|
-
* Does NOT match ● followed by non-action text (e.g., Japanese response content).
|
|
144
|
+
* Copilot tool-action pattern: ● followed by one of copilot's TOOL NAMES.
|
|
148
145
|
*
|
|
149
146
|
* Issue #571: Distinguish tool actions from actual response content starting with ●
|
|
147
|
+
*
|
|
148
|
+
* Issue #1897: the list used to hold ~110 ordinary English verbs (Check, Add,
|
|
149
|
+
* Update, Show, Find, Set, Test, Save, Watch, Verify, Build, Start, …). On
|
|
150
|
+
* copilot 1.0.80 `●` is the marker for the AGENT'S MESSAGE -- tool calls are
|
|
151
|
+
* drawn as `$ <Tool> …` (see {@link COPILOT_TOOL_INVOCATION_PATTERN}) -- so every
|
|
152
|
+
* one of those verbs matched prose and nothing else. `● Check the config file`
|
|
153
|
+
* was deleted as a tool call, and because the match also opened a
|
|
154
|
+
* skip-until-next-marker block it took the rest of the reply with it.
|
|
155
|
+
*
|
|
156
|
+
* What remains is the set of names copilot actually labels tool rows with, which
|
|
157
|
+
* is why the ≤1.0.79 rows this was written for (`● Read package.json`,
|
|
158
|
+
* `● Get current directory structure (shell)`) are still filtered. A match is now
|
|
159
|
+
* a SINGLE-LINE skip: the follow-on command and output rows are recognised on
|
|
160
|
+
* their own by {@link COPILOT_FOLD_MARKER_PATTERN} and
|
|
161
|
+
* {@link COPILOT_COMMAND_OUTPUT_PATTERN}, so nothing needs a block that can run
|
|
162
|
+
* away over a whole message.
|
|
163
|
+
*/
|
|
164
|
+
const COPILOT_TOOL_ACTION_PATTERN = /^●\s+(?:Get |Read |Run |Search |Write |Edit |Delete |List |Create |Fetch |Explore |Execute |Install |Model changed to:)/;
|
|
165
|
+
/**
|
|
166
|
+
* copilot 1.0.80's tool invocation row (Issue #1897).
|
|
167
|
+
*
|
|
168
|
+
* Measured on the live frames in
|
|
169
|
+
* `tests/unit/lib/detection/fixtures/copilot-live-1885/`: a tool call is a `$`
|
|
170
|
+
* marker row naming the tool, with the fold marker and the elapsed time
|
|
171
|
+
* right-aligned onto the same row, and the command it ran on the indented rows
|
|
172
|
+
* below:
|
|
173
|
+
*
|
|
174
|
+
* $ Shell Wait 25 seconds then print status 2 lines… 1m 27s
|
|
175
|
+
* sleep 25; echo finished
|
|
176
|
+
*
|
|
177
|
+
* The capitalised tool name is required so a `$ npm install` line inside a reply's
|
|
178
|
+
* code block is not read as copilot's own chrome. This is the one construct that
|
|
179
|
+
* still opens a skip block, and that block now ends at the next marker row or the
|
|
180
|
+
* next blank row rather than running to the end of the message.
|
|
150
181
|
*/
|
|
151
|
-
const
|
|
182
|
+
const COPILOT_TOOL_INVOCATION_PATTERN = /^\$\s+[A-Z][A-Za-z]*(?:\s|$)/;
|
|
152
183
|
/**
|
|
153
184
|
* Pattern for "N lines..." fold markers in Copilot TUI output.
|
|
154
185
|
* These indicate collapsed command output.
|
|
@@ -161,8 +192,17 @@ const COPILOT_THINKING_INDICATOR_PATTERN = /^[◐◑◒◓]/;
|
|
|
161
192
|
/**
|
|
162
193
|
* Pattern for shell command output lines in Copilot TUI.
|
|
163
194
|
* Matches common command prefixes that appear in tool call output.
|
|
195
|
+
*
|
|
196
|
+
* Issue #1897: the heads that are also ordinary English words at the start of a
|
|
197
|
+
* sentence were removed -- `find`, `go`, `make`, `cat`, `ls`, `cd`, `echo`,
|
|
198
|
+
* `node`, `python`, `ruby`. "find the file in src/", "go to the settings page",
|
|
199
|
+
* "make sure you run npm test" and "cat the file to check" were all being deleted
|
|
200
|
+
* from saved replies as if they were shell transcript. The heads that remain are
|
|
201
|
+
* tool names no English sentence opens with, so the rule keeps its purpose (the
|
|
202
|
+
* `git --no-pager …` and `npm run …` rows copilot echoes under a tool call) at no
|
|
203
|
+
* cost to prose.
|
|
164
204
|
*/
|
|
165
|
-
const COPILOT_COMMAND_OUTPUT_PATTERN = /^(?:git\s+--no-pager|git\s+(?:log|diff|show|status|branch|remote|fetch|pull|push|merge|rebase|checkout|reset|stash|tag|config|clone|init|add|commit|rm|mv|bisect|grep|ls-files|rev-parse|describe|shortlog|blame|reflog|cherry-pick|revert|submodule|worktree)\b|npm\s+|npx\s+|
|
|
205
|
+
const COPILOT_COMMAND_OUTPUT_PATTERN = /^(?:git\s+--no-pager|git\s+(?:log|diff|show|status|branch|remote|fetch|pull|push|merge|rebase|checkout|reset|stash|tag|config|clone|init|add|commit|rm|mv|bisect|grep|ls-files|rev-parse|describe|shortlog|blame|reflog|cherry-pick|revert|submodule|worktree)\b|npm\s+|npx\s+|yarn\s+|pnpm\s+|cargo\s+|pip\s+|rustc\s+|cmake\s+|docker\s+|kubectl\s+|aws\s+|gcloud\s+|az\s+|terraform\s+|ansible\s+|curl\s+|wget\s+|ssh\s+|scp\s+|rsync\s+|grep\s+|sed\s+|awk\s+|mkdir\s+|rm\s+|cp\s+|mv\s+|chmod\s+|chown\s+)/;
|
|
166
206
|
/**
|
|
167
207
|
* Clean Copilot response by removing TUI artifacts, extracting only the latest
|
|
168
208
|
* response, and normalizing content.
|
|
@@ -182,7 +222,15 @@ const COPILOT_COMMAND_OUTPUT_PATTERN = /^(?:git\s+--no-pager|git\s+(?:log|diff|s
|
|
|
182
222
|
*/
|
|
183
223
|
function cleanCopilotResponse(response) {
|
|
184
224
|
const strippedResponse = (0, cli_patterns_1.stripAnsi)(response);
|
|
185
|
-
const
|
|
225
|
+
const allLines = strippedResponse.split('\n');
|
|
226
|
+
// Issue #1897: cut copilot's bottom-pinned chrome (cwd row, rules, composer,
|
|
227
|
+
// status bar) before anything else, positionally — the status bar's wording is
|
|
228
|
+
// something copilot will happily print as body text, so only its position tells
|
|
229
|
+
// the two apart. Returns -1, and so changes nothing, for input that is not a
|
|
230
|
+
// whole captured frame: the accumulated content this normally receives, and the
|
|
231
|
+
// synthetic strings the unit tests pass.
|
|
232
|
+
const chromeStart = (0, cli_patterns_1.findCopilotChromeStart)(allLines);
|
|
233
|
+
const lines = chromeStart >= 0 ? allLines.slice(0, chromeStart) : allLines;
|
|
186
234
|
// Step 1: Find the last ❯ prompt line with user input (not empty prompt)
|
|
187
235
|
// This marks the boundary — everything after is the latest response
|
|
188
236
|
let lastUserPromptIndex = -1;
|
|
@@ -196,32 +244,54 @@ function cleanCopilotResponse(response) {
|
|
|
196
244
|
break;
|
|
197
245
|
}
|
|
198
246
|
}
|
|
199
|
-
// Extract lines after the last user prompt
|
|
200
|
-
|
|
247
|
+
// Extract lines after the last user prompt.
|
|
248
|
+
//
|
|
249
|
+
// Issue #1897: a prompt too long for one row wraps onto indented continuation
|
|
250
|
+
// rows, and starting at `+ 1` opened the saved reply with the tail of the
|
|
251
|
+
// operator's own question. Walk past them. (Indentation only survives on a raw
|
|
252
|
+
// frame; the accumulator has its own copy of this rule for the normalised path.)
|
|
253
|
+
let startIndex = lastUserPromptIndex >= 0 ? lastUserPromptIndex + 1 : 0;
|
|
254
|
+
if (lastUserPromptIndex >= 0) {
|
|
255
|
+
while (startIndex < lines.length &&
|
|
256
|
+
cli_patterns_1.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN.test(lines[startIndex])) {
|
|
257
|
+
startIndex++;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
201
260
|
const responseLines = lines.slice(startIndex);
|
|
202
261
|
const cleanedLines = [];
|
|
203
262
|
// Track block-level skip state for multi-line constructs
|
|
204
263
|
let inThinkingBlock = false;
|
|
205
|
-
let
|
|
264
|
+
let inToolOutputBlock = false;
|
|
206
265
|
for (const line of responseLines) {
|
|
207
266
|
// Normalize using the same function as TUI accumulator (DRY)
|
|
208
267
|
const normalized = (0, tui_accumulator_1.normalizeCopilotLine)(line);
|
|
209
|
-
if (!normalized)
|
|
268
|
+
if (!normalized) {
|
|
269
|
+
// Issue #1897: a blank row closes whatever block is open. copilot separates
|
|
270
|
+
// every transcript block with one, and skipping this reset is what allowed a
|
|
271
|
+
// single misclassified marker row to swallow the entire rest of the reply.
|
|
272
|
+
inThinkingBlock = false;
|
|
273
|
+
inToolOutputBlock = false;
|
|
210
274
|
continue;
|
|
275
|
+
}
|
|
211
276
|
// Skip lines matching any Copilot skip pattern (existing patterns)
|
|
212
277
|
const shouldSkip = cli_patterns_1.COPILOT_SKIP_PATTERNS.some(pattern => pattern.test(normalized));
|
|
213
278
|
if (shouldSkip)
|
|
214
279
|
continue;
|
|
215
|
-
// Issue #
|
|
216
|
-
|
|
217
|
-
|
|
280
|
+
// Issue #1897: copilot 1.0.80's tool call. Its command / output rows follow
|
|
281
|
+
// until the next marker row or blank row.
|
|
282
|
+
if (COPILOT_TOOL_INVOCATION_PATTERN.test(normalized)) {
|
|
283
|
+
inToolOutputBlock = true;
|
|
218
284
|
inThinkingBlock = false;
|
|
219
285
|
continue;
|
|
220
286
|
}
|
|
287
|
+
// Issue #571: Skip ● tool-action lines (but preserve ● response content).
|
|
288
|
+
// Issue #1897: a single-line skip — see COPILOT_TOOL_ACTION_PATTERN.
|
|
289
|
+
if (COPILOT_TOOL_ACTION_PATTERN.test(normalized))
|
|
290
|
+
continue;
|
|
221
291
|
// Issue #571: Skip ◐◑◒◓ thinking indicator lines and their continuation lines
|
|
222
292
|
if (COPILOT_THINKING_INDICATOR_PATTERN.test(normalized)) {
|
|
223
293
|
inThinkingBlock = true;
|
|
224
|
-
|
|
294
|
+
inToolOutputBlock = false;
|
|
225
295
|
continue;
|
|
226
296
|
}
|
|
227
297
|
// Issue #571: Skip "N lines..." fold markers
|
|
@@ -231,8 +301,11 @@ function cleanCopilotResponse(response) {
|
|
|
231
301
|
if (COPILOT_COMMAND_OUTPUT_PATTERN.test(normalized))
|
|
232
302
|
continue;
|
|
233
303
|
// Skip empty ❯ prompt lines and ❯ with content (previous prompts that leaked through)
|
|
234
|
-
if (/^❯\s*/.test(normalized))
|
|
304
|
+
if (/^❯\s*/.test(normalized)) {
|
|
305
|
+
inThinkingBlock = false;
|
|
306
|
+
inToolOutputBlock = false;
|
|
235
307
|
continue;
|
|
308
|
+
}
|
|
236
309
|
// Issue #571: Skip │ and └ prefixed lines (command output block content)
|
|
237
310
|
if (/^[│└]/.test(normalized)) {
|
|
238
311
|
continue;
|
|
@@ -240,16 +313,16 @@ function cleanCopilotResponse(response) {
|
|
|
240
313
|
// Detect new content block: ● starts a new response block, reset skip states
|
|
241
314
|
if (/^●/.test(normalized)) {
|
|
242
315
|
inThinkingBlock = false;
|
|
243
|
-
|
|
316
|
+
inToolOutputBlock = false;
|
|
244
317
|
// This is a ● line that didn't match COPILOT_TOOL_ACTION_PATTERN,
|
|
245
318
|
// so it's actual response content — keep it, but remove the ● prefix
|
|
246
319
|
cleanedLines.push(normalized.replace(/^●\s*/, ''));
|
|
247
320
|
continue;
|
|
248
321
|
}
|
|
249
|
-
// If we're in a thinking or
|
|
250
|
-
//
|
|
322
|
+
// If we're in a thinking or tool output block, skip continuation lines until a
|
|
323
|
+
// new block marker (●, ❯, $) or a blank row is found.
|
|
251
324
|
// Note: TUI accumulator normalizes lines (trim), so indentation is lost.
|
|
252
|
-
if (inThinkingBlock ||
|
|
325
|
+
if (inThinkingBlock || inToolOutputBlock) {
|
|
253
326
|
continue;
|
|
254
327
|
}
|
|
255
328
|
cleanedLines.push(normalized);
|
|
@@ -7,28 +7,121 @@
|
|
|
7
7
|
* Issue #479: Extracted from response-poller.ts for single-responsibility separation
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.resolveOpenCodeTurnRegion = resolveOpenCodeTurnRegion;
|
|
11
|
+
exports.sliceOpenCodeTurn = sliceOpenCodeTurn;
|
|
10
12
|
exports.isOpenCodeComplete = isOpenCodeComplete;
|
|
11
13
|
exports.resolveExtractionStartIndex = resolveExtractionStartIndex;
|
|
12
14
|
const cli_patterns_1 = require("./detection/cli-patterns");
|
|
15
|
+
/**
|
|
16
|
+
* The slice of an opencode pane that belongs to the turn currently on screen
|
|
17
|
+
* (Issue #1911).
|
|
18
|
+
*
|
|
19
|
+
* opencode renders in the alternate screen, so one capture holds the tail of the
|
|
20
|
+
* whole conversation plus the bottom-anchored chrome. Three of #1911's defects
|
|
21
|
+
* are the same missing boundary seen from different sides, so all three read the
|
|
22
|
+
* region from here:
|
|
23
|
+
*
|
|
24
|
+
* - the echoed user prompt was saved as part of the assistant's reply, because
|
|
25
|
+
* extraction anchored on the PREVIOUS turn's `▣ Build` row (and on the first
|
|
26
|
+
* turn of a session, where there is no previous row, on line 0);
|
|
27
|
+
* - the composer's model row and the footer's wrapped cwd were saved with it,
|
|
28
|
+
* because nothing bounded the extraction from below;
|
|
29
|
+
* - the previous turn's finished-turn marker satisfied `isOpenCodeComplete` on
|
|
30
|
+
* the first poll of a new turn, so the previous answer was re-saved as the
|
|
31
|
+
* new one and polling stopped before the real reply arrived.
|
|
32
|
+
*
|
|
33
|
+
* @param lines - Captured pane lines, ANSI-stripped, box drawing intact.
|
|
34
|
+
* @returns The turn's `[start, end)` bounds plus the two anchors they came from.
|
|
35
|
+
*
|
|
36
|
+
* @internal Exported for unit testing
|
|
37
|
+
*/
|
|
38
|
+
function resolveOpenCodeTurnRegion(lines) {
|
|
39
|
+
const chromeStart = (0, cli_patterns_1.findOpenCodeChromeStart)(lines);
|
|
40
|
+
const echoEnd = (0, cli_patterns_1.findOpenCodeUserEchoEnd)(lines, chromeStart);
|
|
41
|
+
return {
|
|
42
|
+
chromeStart,
|
|
43
|
+
echoEnd,
|
|
44
|
+
start: echoEnd + 1,
|
|
45
|
+
end: chromeStart >= 0 ? chromeStart : lines.length,
|
|
46
|
+
headTruncated: echoEnd < 0,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The current turn's rows of an opencode capture, ANSI intact (Issue #1911).
|
|
51
|
+
*
|
|
52
|
+
* Thin wrapper over {@link resolveOpenCodeTurnRegion} for callers that hold a
|
|
53
|
+
* raw capture rather than a line array — today the Layer-2 accumulator, which is
|
|
54
|
+
* fed this instead of the whole pane so it never records the previous turn, the
|
|
55
|
+
* echoed prompt, or the bottom chrome.
|
|
56
|
+
*
|
|
57
|
+
* @param output - Raw `capture-pane` output.
|
|
58
|
+
* @returns The region's rows joined by newlines; `''` when the turn has no rows
|
|
59
|
+
* on screen yet.
|
|
60
|
+
*/
|
|
61
|
+
function sliceOpenCodeTurn(output) {
|
|
62
|
+
const rawLines = output.split('\n');
|
|
63
|
+
const region = resolveOpenCodeTurnRegion(rawLines.map(cli_patterns_1.stripAnsi));
|
|
64
|
+
if (region.start >= region.end)
|
|
65
|
+
return '';
|
|
66
|
+
return rawLines.slice(region.start, region.end).join('\n');
|
|
67
|
+
}
|
|
13
68
|
/**
|
|
14
69
|
* Check if OpenCode has completed its response.
|
|
15
|
-
* Detects the
|
|
70
|
+
* Detects the finished-turn marker (e.g., "square Build . model . 2.5s").
|
|
16
71
|
* [D2-002] Independent completion detection for OpenCode.
|
|
17
72
|
*
|
|
18
73
|
* Unlike Claude (prompt + separator) or Codex/Gemini (prompt + not thinking),
|
|
19
74
|
* OpenCode signals completion via the Build summary line, which includes
|
|
20
75
|
* the model name and generation timing.
|
|
21
76
|
*
|
|
22
|
-
*
|
|
77
|
+
* Issue #1893 tightened both halves of this, because a `true` here is what
|
|
78
|
+
* makes `response-checker` persist the frame as the agent's answer and stop
|
|
79
|
+
* polling — the failure mode is a permission dialog saved as if it were a
|
|
80
|
+
* reply, with the turn it belongs to still unanswered:
|
|
81
|
+
*
|
|
82
|
+
* 1. the marker must carry its DURATION ({@link OPENCODE_TURN_COMPLETE_PATTERN}).
|
|
83
|
+
* The duration-less `▣ Build · <model>` row opencode draws for a step that
|
|
84
|
+
* is still open used to satisfy the old, looser pattern.
|
|
85
|
+
* 2. a permission dialog on screen is never a completion, whatever marker sits
|
|
86
|
+
* above it. `opencode-live-1893/permission-after-complete.txt` is a live
|
|
87
|
+
* frame with the box open and a genuine `· 2.3s` marker from the PREVIOUS
|
|
88
|
+
* turn still in the transcript, so (1) alone does not cover it.
|
|
89
|
+
*
|
|
90
|
+
* Issue #1911 adds the third half that (1) and (2) between them still left open:
|
|
91
|
+
* the marker must belong to the CURRENT turn, i.e. sit below the newest echoed
|
|
92
|
+
* user prompt ({@link resolveOpenCodeTurnRegion}). Without that, the very first
|
|
93
|
+
* poll after a send — before opencode has repainted `esc interrupt`, with the
|
|
94
|
+
* previous turn's duration-carrying marker still on screen — reported the turn
|
|
95
|
+
* as finished, so the previous answer was saved as the new one and polling
|
|
96
|
+
* stopped before the real reply existed.
|
|
97
|
+
*
|
|
98
|
+
* @param output - Cleaned tmux output to check (ANSI-stripped). Box drawing must
|
|
99
|
+
* still be present: `OPENCODE_PERMISSION_PATTERN` anchors on the dialog box's
|
|
100
|
+
* own gutter. `response-checker` passes `stripAnsi(lines.join('\n'))`, which
|
|
101
|
+
* is exactly that.
|
|
23
102
|
* @returns True if OpenCode response is complete
|
|
24
103
|
*
|
|
25
104
|
* @internal Exported for unit testing (response-poller-opencode.test.ts)
|
|
26
105
|
*/
|
|
27
106
|
function isOpenCodeComplete(output) {
|
|
28
|
-
|
|
107
|
+
const lines = output.split('\n');
|
|
108
|
+
const region = resolveOpenCodeTurnRegion(lines);
|
|
109
|
+
// Issue #1911: the marker has to belong to THIS turn. Restricting the search
|
|
110
|
+
// to the region below the newest echoed prompt is what stops the previous
|
|
111
|
+
// turn's `▣ … · 2.3s` — still on screen, and still carrying its duration, so
|
|
112
|
+
// #1893's tightening does not touch it — from completing a turn that has not
|
|
113
|
+
// been answered yet. The upper bound matters too: the composer's own
|
|
114
|
+
// `┃ Build · GPT-5.6 Luna GitHub Copilot` row sits in the chrome.
|
|
115
|
+
const turnRegion = region.start >= region.end
|
|
116
|
+
? ''
|
|
117
|
+
: lines.slice(region.start, region.end).join('\n');
|
|
118
|
+
// Must have a finished-turn marker in this turn, must NOT be actively
|
|
119
|
+
// processing, and must NOT be blocked on a permission dialog. The last two are
|
|
120
|
+
// read from the WHOLE frame: both live in the chrome the region excludes.
|
|
29
121
|
// The "esc interrupt" indicator appears in the TUI footer during model processing.
|
|
30
|
-
|
|
31
|
-
|
|
122
|
+
return (cli_patterns_1.OPENCODE_TURN_COMPLETE_PATTERN.test(turnRegion) &&
|
|
123
|
+
!cli_patterns_1.OPENCODE_PROCESSING_INDICATOR.test(output) &&
|
|
124
|
+
!cli_patterns_1.OPENCODE_PERMISSION_PATTERN.test(output));
|
|
32
125
|
}
|
|
33
126
|
/**
|
|
34
127
|
* Determine the start index for response extraction based on buffer state.
|
|
@@ -7,9 +7,116 @@
|
|
|
7
7
|
* before spawning child processes like `claude -p`.
|
|
8
8
|
*
|
|
9
9
|
* [S1-001/S4-001] Centralized sensitive key management
|
|
10
|
+
*
|
|
11
|
+
* ## What this file defends — the one sentence (Issue #1996)
|
|
12
|
+
*
|
|
13
|
+
* **A CommandMate process must hand its children neither a credential nor the
|
|
14
|
+
* identity of the agent that started it.**
|
|
15
|
+
*
|
|
16
|
+
* Two halves, and they fail differently:
|
|
17
|
+
*
|
|
18
|
+
* - **Credentials** — {@link SENSITIVE_ENV_KEYS}. A child that can read them
|
|
19
|
+
* can act as this server, or read its database.
|
|
20
|
+
* - **The launching agent's identity** — {@link AGENT_CORRELATION_ENV_KEYS}:
|
|
21
|
+
* every variable `AgentLaunchPlan.env` writes onto an agent's launch line
|
|
22
|
+
* that says *which server to report to* and *as which instance*. A child
|
|
23
|
+
* that inherits them reports somebody else's work as that instance's.
|
|
24
|
+
*
|
|
25
|
+
* A per-tool config redirect (`CODEX_HOME`) is on the launch line too and is
|
|
26
|
+
* deliberately **not** stripped: it says where a tool reads its own settings,
|
|
27
|
+
* which is neither a credential nor an identity, and a child that inherits one
|
|
28
|
+
* is unaffected.
|
|
29
|
+
*
|
|
30
|
+
* ## Issue #1942 — why a *prefix* joined the list
|
|
31
|
+
*
|
|
32
|
+
* 設計方針書 §13.2 S8 asks for two halves. #1904 landed the first: the values a
|
|
33
|
+
* hook needs are handed to the agent on its launch line (`CM_HOOK_PORT=3011
|
|
34
|
+
* copilot`) instead of being baked into a machine-global settings file. This is
|
|
35
|
+
* the second: those variables must not travel any further than the agent.
|
|
36
|
+
*
|
|
37
|
+
* The leak this closes is not the agent's own children — CommandMate does not
|
|
38
|
+
* own that environment — it is **CommandMate's**. A server started from inside
|
|
39
|
+
* a pane CommandMate itself launched inherits that pane's launch line, and
|
|
40
|
+
* every child *this* process then spawns (`claude -p` for Assistant Chat, the
|
|
41
|
+
* slash-command probes, `copilot --version`) inherits it in turn. The values
|
|
42
|
+
* are a correlation key and a port: a relay firing from one of those children
|
|
43
|
+
* posts its events to another server, attributed to an instance that is not the
|
|
44
|
+
* one running. Nothing errors; the events simply land on the wrong session.
|
|
45
|
+
*
|
|
46
|
+
* ## Issue #1996 — why the prefix could not be the whole rule
|
|
47
|
+
*
|
|
48
|
+
* #1942 chose `CM_HOOK_*` because a namespace is stronger than a list: the next
|
|
49
|
+
* variable in it is stripped whether or not its author reads this file. That
|
|
50
|
+
* reasoning is still right, and the prefix stays. What was wrong was the
|
|
51
|
+
* premise that the namespace *covers the launch line*. Building all seven
|
|
52
|
+
* sources' `prepareLaunch` and reading `env` back — the measurement is pinned in
|
|
53
|
+
* `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` — finds six identity
|
|
54
|
+
* variables, and two of them start with `CM_HOOK_`.
|
|
55
|
+
*
|
|
56
|
+
* The other four produce the same failure #1942 named, by two measured routes:
|
|
57
|
+
*
|
|
58
|
+
* - `scripts/hooks/cmate-agent-event.sh` reads `CM_AGENT_TOOL` from the
|
|
59
|
+
* environment (`TOOL="${CM_AGENT_TOOL:-claude}"`) and, with no `CM_HOOK_URL`,
|
|
60
|
+
* falls back to `http://127.0.0.1:${CM_PORT:-3000}/api/hooks/agent-event`.
|
|
61
|
+
* Stripping only the `CM_HOOK_` half therefore makes the destination *valid
|
|
62
|
+
* again* — usually the live server — while the attribution stays wrong. The
|
|
63
|
+
* event lands, on the wrong tool.
|
|
64
|
+
* - The generated antigravity `PreToolUse` command gates on
|
|
65
|
+
* `[ -z "${CM_PERMISSION_HOOK_URL:-}" ]`, which is its whole test for "am I a
|
|
66
|
+
* CommandMate-launched session". `~/.gemini/config/hooks.json` is a
|
|
67
|
+
* machine-global singleton, so an inherited `CM_PERMISSION_HOOK_URL` makes
|
|
68
|
+
* any agy started under one of CommandMate's children ask *another
|
|
69
|
+
* instance's* server for permission, and obey the answer.
|
|
70
|
+
*
|
|
71
|
+
* ### Why the prefix was not simply widened to `CM_AGENT_`
|
|
72
|
+
*
|
|
73
|
+
* Because `CM_AGENT_` is not CommandMate's own namespace, and the sentence that
|
|
74
|
+
* justifies the `CM_HOOK_` prefix — "there is no operator value here to
|
|
75
|
+
* preserve" — is false for it. `CM_AGENT_HOOKS_INJECT` and `CM_AGENT_HOOKS_DIR`
|
|
76
|
+
* are **operator switches read from the ambient environment**
|
|
77
|
+
* (`hooks/sources/copilot/hook-settings.ts`, `hooks/hook-settings-generator.ts`);
|
|
78
|
+
* stripping them would silently change a child's configuration. #1942's own test
|
|
79
|
+
* already pinned that shape. And `CM_PERMISSION_HOOK_URL` shares no prefix with
|
|
80
|
+
* anything, so no namespace rule could have covered the set in any case.
|
|
81
|
+
*
|
|
82
|
+
* Renaming the four into `CM_HOOK_*` so the prefix *would* suffice was
|
|
83
|
+
* considered and rejected: `CM_AGENT_TOOL` is documented in the shipped relay's
|
|
84
|
+
* own `--help` and depended on by the hand-configured hooks of #1549, and
|
|
85
|
+
* `~/.copilot/settings.json` / `~/.gemini/config/hooks.json` are machine-global
|
|
86
|
+
* files already on disk carrying the old names — every already-configured
|
|
87
|
+
* session would stop correlating until rewritten.
|
|
88
|
+
*
|
|
89
|
+
* So the rule is a **union**: the credential list, the enumerated identity set,
|
|
90
|
+
* and the `CM_HOOK_` prefix that still covers whatever is invented inside it.
|
|
91
|
+
*
|
|
92
|
+
* ## The join with `lib/hooks`, and what replaces the prefix as a drift guard
|
|
93
|
+
*
|
|
94
|
+
* `lib/security` does not import `lib/hooks` — the dependency already runs the
|
|
95
|
+
* other way (`hooks/agent-event-service`, `hooks/sources/copilot/hook-settings`
|
|
96
|
+
* and `hooks/sources/codex/hooks-config` all import
|
|
97
|
+
* `lib/security/path-validator`), and inverting it would put a package cycle
|
|
98
|
+
* underneath four child-process spawners. `tests/unit/guards/security-no-hooks-import.test.ts`
|
|
99
|
+
* holds that.
|
|
100
|
+
*
|
|
101
|
+
* The enumeration below is therefore a second copy of a list `lib/hooks` also
|
|
102
|
+
* declares, and two tests are the join:
|
|
103
|
+
*
|
|
104
|
+
* 1. `tests/unit/lib/agent-launch-plan-secrets-1933.test.ts` builds all seven
|
|
105
|
+
* `prepareLaunch` plans and asserts their env keys are **exactly**
|
|
106
|
+
* `AGENT_CORRELATION_ENV_VARS` plus `AGENT_LAUNCH_CONFIG_ENV_VARS`. A source
|
|
107
|
+
* that starts writing a new variable — in any namespace — goes red there, by
|
|
108
|
+
* name.
|
|
109
|
+
* 2. `tests/unit/security/child-process-agent-env-1996.test.ts` takes that
|
|
110
|
+
* declared list and proves, with a real child process, that none of it is
|
|
111
|
+
* readable. Deleting a name from {@link AGENT_CORRELATION_ENV_KEYS} does not
|
|
112
|
+
* shrink what that test iterates, so the deletion is what goes red.
|
|
113
|
+
*
|
|
114
|
+
* Together those two are stronger than the prefix was, because the prefix never
|
|
115
|
+
* covered a name outside its own namespace at all.
|
|
10
116
|
*/
|
|
11
117
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.SENSITIVE_ENV_KEYS = void 0;
|
|
118
|
+
exports.AGENT_CORRELATION_ENV_KEYS = exports.COMMANDMATE_HOOK_ENV_PREFIX = exports.SENSITIVE_ENV_KEYS = void 0;
|
|
119
|
+
exports.isStrippedChildProcessEnvKey = isStrippedChildProcessEnvKey;
|
|
13
120
|
exports.sanitizeEnvForChildProcess = sanitizeEnvForChildProcess;
|
|
14
121
|
/**
|
|
15
122
|
* List of environment variable keys that must be removed before
|
|
@@ -18,9 +125,24 @@ exports.sanitizeEnvForChildProcess = sanitizeEnvForChildProcess;
|
|
|
18
125
|
* These include authentication tokens, TLS certificates, IP restriction
|
|
19
126
|
* settings, and database paths that should not be inherited by spawned
|
|
20
127
|
* CLI tool processes.
|
|
128
|
+
*
|
|
129
|
+
* `CM_AUTH_TOKEN` — the **plaintext** bearer token — joined in Issue #1996. Only
|
|
130
|
+
* the `_HASH` form was listed, and the plaintext one is what a request is
|
|
131
|
+
* actually authenticated with: measured with a real child, `claude -p` and the
|
|
132
|
+
* version probes could read it back. It is expected in a server's environment
|
|
133
|
+
* (the CLI's own `--token` warning tells operators to prefer the variable, and
|
|
134
|
+
* §10.7 of the 設計方針書 has the agent's hooks read it "from process
|
|
135
|
+
* inheritance"), and `lib/slash-command-catalog`'s docblock already claimed a
|
|
136
|
+
* probe "never hands CommandMate's auth token … to a third-party CLI".
|
|
137
|
+
*
|
|
138
|
+
* Nothing that spawns with {@link sanitizeEnvForChildProcess} needs it: none of
|
|
139
|
+
* the five call sites configures hooks for its child. The **agent's** pane is
|
|
140
|
+
* unaffected — tmux inherits the server's environment directly and never goes
|
|
141
|
+
* through this function — so `$CM_AUTH_TOKEN` still expands in a hook.
|
|
21
142
|
*/
|
|
22
143
|
exports.SENSITIVE_ENV_KEYS = [
|
|
23
144
|
'CLAUDECODE',
|
|
145
|
+
'CM_AUTH_TOKEN', // Issue #1996: plaintext bearer token, not just its hash
|
|
24
146
|
'CM_AUTH_TOKEN_HASH',
|
|
25
147
|
'CM_AUTH_EXPIRE',
|
|
26
148
|
'CM_HTTPS_KEY',
|
|
@@ -30,11 +152,61 @@ exports.SENSITIVE_ENV_KEYS = [
|
|
|
30
152
|
'CM_DB_PATH',
|
|
31
153
|
'GH_DEBUG', // Issue #545: Prevent gh debug output in child processes [SEC4-003]
|
|
32
154
|
];
|
|
155
|
+
/**
|
|
156
|
+
* The namespace CommandMate writes onto an agent's launch line (Issue #1942).
|
|
157
|
+
*
|
|
158
|
+
* Kept alongside {@link AGENT_CORRELATION_ENV_KEYS} rather than replaced by it.
|
|
159
|
+
* Inside this namespace the prefix is still the stronger rule — a `CM_HOOK_*`
|
|
160
|
+
* variable invented next year is stripped whether or not anyone remembers this
|
|
161
|
+
* file exists, and `CM_HOOK_` is CommandMate's own namespace, so there is no
|
|
162
|
+
* operator value here to preserve. What #1996 measured is that the namespace is
|
|
163
|
+
* two of the launch line's six identity variables, not all of them; see the
|
|
164
|
+
* module comment.
|
|
165
|
+
*/
|
|
166
|
+
exports.COMMANDMATE_HOOK_ENV_PREFIX = 'CM_HOOK_';
|
|
167
|
+
/**
|
|
168
|
+
* Every variable an agent's launch line uses to say **which server to report to
|
|
169
|
+
* and as which instance** (Issue #1996).
|
|
170
|
+
*
|
|
171
|
+
* The measured contents of `AgentLaunchPlan.env` across all seven sources, minus
|
|
172
|
+
* the per-tool config redirects. `lib/hooks/sources/launch-command` declares the
|
|
173
|
+
* same set as `AGENT_CORRELATION_ENV_VARS`; this is the second copy, and the two
|
|
174
|
+
* tests named in the module comment are the join. Sorted, so a diff against the
|
|
175
|
+
* measured set reads cleanly.
|
|
176
|
+
*
|
|
177
|
+
* Two of them are inside {@link COMMANDMATE_HOOK_ENV_PREFIX} and would be
|
|
178
|
+
* stripped anyway. They are listed regardless: this array is the statement of
|
|
179
|
+
* *what the rule is about*, and a reader who has to subtract a prefix to see the
|
|
180
|
+
* set is a reader who will get it wrong again.
|
|
181
|
+
*/
|
|
182
|
+
exports.AGENT_CORRELATION_ENV_KEYS = [
|
|
183
|
+
'CM_AGENT_INSTANCE_ID',
|
|
184
|
+
'CM_AGENT_TOOL',
|
|
185
|
+
'CM_AGENT_WORKTREE_ID',
|
|
186
|
+
'CM_HOOK_PORT',
|
|
187
|
+
'CM_HOOK_URL',
|
|
188
|
+
'CM_PERMISSION_HOOK_URL',
|
|
189
|
+
];
|
|
190
|
+
/**
|
|
191
|
+
* Whether `key` is removed from a child process's environment.
|
|
192
|
+
*
|
|
193
|
+
* @param key - An environment variable name
|
|
194
|
+
* @returns `true` for a listed secret, a launch-line identity variable, or
|
|
195
|
+
* anything in CommandMate's hook namespace
|
|
196
|
+
*/
|
|
197
|
+
function isStrippedChildProcessEnvKey(key) {
|
|
198
|
+
return (exports.SENSITIVE_ENV_KEYS.includes(key) ||
|
|
199
|
+
exports.AGENT_CORRELATION_ENV_KEYS.includes(key) ||
|
|
200
|
+
key.startsWith(exports.COMMANDMATE_HOOK_ENV_PREFIX));
|
|
201
|
+
}
|
|
33
202
|
/**
|
|
34
203
|
* Create a sanitized copy of process.env suitable for child processes.
|
|
35
204
|
*
|
|
36
|
-
* Removes
|
|
37
|
-
*
|
|
205
|
+
* Removes every key {@link isStrippedChildProcessEnvKey} claims: the listed
|
|
206
|
+
* secrets (Issue #294/#545/#1996), the launch-line identity of the agent this
|
|
207
|
+
* process was started under (Issue #1996), and CommandMate's own `CM_HOOK_*`
|
|
208
|
+
* namespace (Issue #1942). Non-sensitive variables (PATH, HOME, NODE_ENV, etc.)
|
|
209
|
+
* are preserved, including the operator's own `CM_AGENT_HOOKS_*` switches.
|
|
38
210
|
*
|
|
39
211
|
* @returns A shallow copy of process.env with sensitive keys removed
|
|
40
212
|
*
|
|
@@ -51,8 +223,10 @@ exports.SENSITIVE_ENV_KEYS = [
|
|
|
51
223
|
*/
|
|
52
224
|
function sanitizeEnvForChildProcess() {
|
|
53
225
|
const env = { ...process.env };
|
|
54
|
-
for (const key of
|
|
55
|
-
|
|
226
|
+
for (const key of Object.keys(env)) {
|
|
227
|
+
if (isStrippedChildProcessEnvKey(key)) {
|
|
228
|
+
delete env[key];
|
|
229
|
+
}
|
|
56
230
|
}
|
|
57
231
|
return env;
|
|
58
232
|
}
|