commandmate 0.26.1 → 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 +435 -407
- package/.next/app-path-routes-manifest.json +30 -26
- 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 +30 -26
- 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-0e097c0286155883.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-fdfca039b7f5837e.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/wyFLOpmKpr45BHZ4svYpE/_buildManifest.js +0 -1
- /package/.next/static/{wyFLOpmKpr45BHZ4svYpE → t0BoV4H46ZgKmTjSi7GIz}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Whether a status verdict rests on something positive, and what the last
|
|
4
|
+
* positively confirmed verdict was (Issue #1926, 方針書 §4 D1 / §7).
|
|
5
|
+
*
|
|
6
|
+
* Two things live here, for one reason: they are the pair a surface needs in
|
|
7
|
+
* order to say "I cannot read this frame, and here is what it last was".
|
|
8
|
+
*
|
|
9
|
+
* 1. {@link isUnclassifiedFrame} — the ONE expression that decides whether the
|
|
10
|
+
* detector could classify a frame at all. Issue #1924 introduced the reading
|
|
11
|
+
* inline in `current-output-builder`; §4 D1 決定 2 says in as many words that
|
|
12
|
+
* two expressions for one fact is how consumers come apart, so it lives here
|
|
13
|
+
* and the producer calls it.
|
|
14
|
+
* 2. {@link observeStatusEvidence} / {@link getLastKnownStatus} — the server-side
|
|
15
|
+
* latch of the last verdict that WAS positive, which is what §7's row
|
|
16
|
+
* 「直前の確定状態(証拠なしの間の表示)」 asks a surface to show while the
|
|
17
|
+
* current frame carries no evidence.
|
|
18
|
+
*
|
|
19
|
+
* ## The two facts, and why Issue #2011 had to pull them apart again
|
|
20
|
+
*
|
|
21
|
+
* Until #1927 this module also held `deriveScraperEvidence`, which computed
|
|
22
|
+
* {@link StatusEvidence} from `(status, reason)` — and, because the two sets
|
|
23
|
+
* coincided at the time, doubled as the definition of "unclassified frame".
|
|
24
|
+
* #1927 moved the evidence producer into the detector (only the detector knows
|
|
25
|
+
* which rule answered) and left `current-output-builder` deriving the flag from
|
|
26
|
+
* `evidence === 'none'`. That silently redefined the flag: `'none'` means "I
|
|
27
|
+
* could not prove this pane is idle", which an ordinary Claude composer frame
|
|
28
|
+
* satisfies, while the flag's consumers — `TerminalEscapeHatch`, `wait`'s
|
|
29
|
+
* completion rule, `unclassified_frames` — were all written against "nobody
|
|
30
|
+
* could read this frame at all". Every idle Claude pane then raised the hatch
|
|
31
|
+
* and stalled `wait` (#2011).
|
|
32
|
+
*
|
|
33
|
+
* So they are two facts now, and both are published:
|
|
34
|
+
*
|
|
35
|
+
* - `statusEvidence` — does the verdict rest on something positive? Produced by
|
|
36
|
+
* the detector, per tool, and deliberately widened by the §4 D1 rollout.
|
|
37
|
+
* - `isUnclassifiedActive` — could the frame be classified at all? That is
|
|
38
|
+
* {@link isUnclassifiedFrame}, and it is a statement about the reason
|
|
39
|
+
* vocabulary, not about the strength of the evidence behind it.
|
|
40
|
+
*
|
|
41
|
+
* A frame can be `evidence: 'none'` and classified (an idle composer no idle
|
|
42
|
+
* rule vouches for), and — since #2011's second half — `evidence: 'positive'`
|
|
43
|
+
* and unclassified (an unreadable pane whose agent reported `Stop`).
|
|
44
|
+
*/
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.MAX_LATCHES = exports.LAST_KNOWN_STATUS_TTL_MS = void 0;
|
|
47
|
+
exports.isUnclassifiedFrame = isUnclassifiedFrame;
|
|
48
|
+
exports.observeStatusEvidence = observeStatusEvidence;
|
|
49
|
+
exports.getLastKnownStatus = getLastKnownStatus;
|
|
50
|
+
exports.forgetLastKnownStatus = forgetLastKnownStatus;
|
|
51
|
+
exports.clearLastKnownStatuses = clearLastKnownStatuses;
|
|
52
|
+
// From the leaf module rather than the `status-detector` facade that re-exports
|
|
53
|
+
// it: this Set is built at module evaluation, and a suite that partially mocks
|
|
54
|
+
// the facade to stub `detectSessionStatus` would leave `STATUS_REASON` undefined
|
|
55
|
+
// at exactly that moment (`worktree-status-helper.test.ts` does).
|
|
56
|
+
const status_reason_1 = require("../../lib/detection/status-reason");
|
|
57
|
+
const agent_event_state_1 = require("../../lib/session/agent-event-state");
|
|
58
|
+
/**
|
|
59
|
+
* The reasons that mean "no rule could read this frame" (Issue #2011).
|
|
60
|
+
*
|
|
61
|
+
* These are exactly the three verdicts `tools/run-detection.ts` reaches when its
|
|
62
|
+
* chain has run out: the five-second staleness fallback (`no_recent_output`) and
|
|
63
|
+
* the two floors (`unknown_frame` for a tool whose own rules looked and found
|
|
64
|
+
* nothing, `default` for the generic "no pattern matched anywhere"). Every other
|
|
65
|
+
* reason names something the detector recognised — a completion marker, a
|
|
66
|
+
* thinking indicator, a parsed dialog, a selection list, a composer row.
|
|
67
|
+
*
|
|
68
|
+
* `input_prompt` is deliberately NOT here, and that is the whole of #2011: an
|
|
69
|
+
* idle composer whose tool-specific idle rule declined to vouch for it is a
|
|
70
|
+
* frame that WAS classified, published with `evidence: 'none'`. Putting it in
|
|
71
|
+
* this set is what opened `TerminalEscapeHatch` on every idle Claude pane and
|
|
72
|
+
* stopped `wait` completing on one.
|
|
73
|
+
*/
|
|
74
|
+
const UNCLASSIFIED_FRAME_REASONS = new Set([
|
|
75
|
+
status_reason_1.STATUS_REASON.NO_RECENT_OUTPUT,
|
|
76
|
+
status_reason_1.STATUS_REASON.UNKNOWN_FRAME,
|
|
77
|
+
status_reason_1.STATUS_REASON.DEFAULT,
|
|
78
|
+
]);
|
|
79
|
+
/**
|
|
80
|
+
* Whether the detection layer failed to classify this frame (Issue #1497 /
|
|
81
|
+
* #1708, restated as its own expression by #2011).
|
|
82
|
+
*
|
|
83
|
+
* This is the published `isUnclassifiedActive` contract: `capture --json` sends
|
|
84
|
+
* it, `wait` suppresses its completion check while it holds and exits 10 after
|
|
85
|
+
* {@link https://github.com/Kewton/CommandMate/issues/1708 60 s} of it, and both
|
|
86
|
+
* terminal surfaces open the navigation hatch on it. All three are asking the
|
|
87
|
+
* same question — "is a human looking at something nothing here can drive?" —
|
|
88
|
+
* and none of them is asking how strong the evidence behind a readable verdict
|
|
89
|
+
* is.
|
|
90
|
+
*
|
|
91
|
+
* The status is checked as well as the reason for the reason the pre-#1924
|
|
92
|
+
* expression did: `default` on anything but `running` is not the floor. Since
|
|
93
|
+
* #1927 all three reasons are only ever produced with `running` (§4 D1 決定 3
|
|
94
|
+
* abolished the `ready` the staleness heuristic used to publish), so this is a
|
|
95
|
+
* guard against a future producer rather than a live discriminator.
|
|
96
|
+
*
|
|
97
|
+
* Pure and total, and the single producer: `current-output-builder` calls it
|
|
98
|
+
* rather than restating it, and `mergeStructuredStatus` carries its answer
|
|
99
|
+
* through rather than recomputing one.
|
|
100
|
+
*/
|
|
101
|
+
function isUnclassifiedFrame(status, reason) {
|
|
102
|
+
return status === 'running' && UNCLASSIFIED_FRAME_REASONS.has(reason);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* How long a latched verdict is still worth showing.
|
|
106
|
+
*
|
|
107
|
+
* §7 fixes this at `turnStaleAfterMs`, which §4 D3 決定 2 defines as the current
|
|
108
|
+
* staleness bound — so it is imported rather than restated. A second literal
|
|
109
|
+
* here would be the "value の二重定義" S2 exists to forbid, in a field whose
|
|
110
|
+
* whole job is to be honest about age.
|
|
111
|
+
*/
|
|
112
|
+
exports.LAST_KNOWN_STATUS_TTL_MS = agent_event_state_1.STRUCTURED_STATE_MAX_AGE_MS;
|
|
113
|
+
const latches = globalThis.__lastKnownStatusByKey ??
|
|
114
|
+
(globalThis.__lastKnownStatusByKey = new Map());
|
|
115
|
+
/**
|
|
116
|
+
* Cap on retained latches, so a long-lived server cannot grow one per worktree
|
|
117
|
+
* per tool per instance forever.
|
|
118
|
+
*
|
|
119
|
+
* The TTL below already drops anything half an hour old, and
|
|
120
|
+
* {@link forgetLastKnownStatus} drops a session the moment it is seen not
|
|
121
|
+
* running, so this is the backstop for neither of those happening — a server
|
|
122
|
+
* that is polled about thousands of worktrees and restarted before any of them
|
|
123
|
+
* expires. Map iterates in insertion order, so the head is the oldest write.
|
|
124
|
+
*/
|
|
125
|
+
exports.MAX_LATCHES = 512;
|
|
126
|
+
function expired(latch, now) {
|
|
127
|
+
return now - latch.at >= exports.LAST_KNOWN_STATUS_TTL_MS;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Sweep, called on WRITE only.
|
|
131
|
+
*
|
|
132
|
+
* Reads are O(1) (they age out their own entry) because they are the hot path:
|
|
133
|
+
* `GET /api/worktrees` probes every tool of every worktree on every poll, so a
|
|
134
|
+
* full-map walk per read would be quadratic in the number of sessions for no
|
|
135
|
+
* benefit. Writes happen only for a session that positively confirmed something,
|
|
136
|
+
* which is at most the number of live sessions.
|
|
137
|
+
*/
|
|
138
|
+
function prune(now) {
|
|
139
|
+
for (const [key, latch] of latches) {
|
|
140
|
+
if (expired(latch, now))
|
|
141
|
+
latches.delete(key);
|
|
142
|
+
}
|
|
143
|
+
while (latches.size > exports.MAX_LATCHES) {
|
|
144
|
+
const oldest = latches.keys().next();
|
|
145
|
+
if (oldest.done)
|
|
146
|
+
break;
|
|
147
|
+
latches.delete(oldest.value);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Fold one poll's verdict into the latch for `key`.
|
|
152
|
+
*
|
|
153
|
+
* Only a `'positive'` verdict is latched — that is the whole definition of the
|
|
154
|
+
* field. A frame with no evidence leaves the previous answer standing, which is
|
|
155
|
+
* what makes "here is what it last was" mean anything.
|
|
156
|
+
*
|
|
157
|
+
* ## Two producers, on purpose
|
|
158
|
+
*
|
|
159
|
+
* `current-output-builder` latches the MERGED verdict (scraper folded with the
|
|
160
|
+
* agent's own events); `worktree-status-helper` latches the scraper's, because
|
|
161
|
+
* that is all the list API computes today. On a session with hooks the two can
|
|
162
|
+
* name different statuses for the same moment — but that divergence is the
|
|
163
|
+
* pre-existing gap between `capture --json` and the sidebar, not something this
|
|
164
|
+
* latch introduces, and both readings are genuinely "something confirmed this".
|
|
165
|
+
* Feeding it from both is what keeps the field warm for the surface that needs
|
|
166
|
+
* it most: the header chip and `commandmate ls` are driven by the list API, and
|
|
167
|
+
* a latch only `capture --json` could fill would be null on every one of their
|
|
168
|
+
* polls.
|
|
169
|
+
*
|
|
170
|
+
* @param key - Session identity; use the same composite key the pollers use
|
|
171
|
+
* (`worktree:cliTool:instance`) so instances of one agent latch separately
|
|
172
|
+
* @param verdict - The status as published by the caller
|
|
173
|
+
* @param now - Epoch ms, injectable for tests
|
|
174
|
+
*/
|
|
175
|
+
function observeStatusEvidence(key, verdict, now = Date.now()) {
|
|
176
|
+
prune(now);
|
|
177
|
+
if (verdict.evidence !== 'positive')
|
|
178
|
+
return;
|
|
179
|
+
// Deleted first so the re-insert moves the entry to the tail of the insertion
|
|
180
|
+
// order the eviction above walks; otherwise a session that is polled forever
|
|
181
|
+
// would be evicted ahead of one nobody has asked about since it was created.
|
|
182
|
+
latches.delete(key);
|
|
183
|
+
latches.set(key, { status: verdict.status, reason: verdict.reason, at: now });
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The last positively confirmed verdict for `key`, or null.
|
|
187
|
+
*
|
|
188
|
+
* Null covers three situations a caller does not have to tell apart: nothing has
|
|
189
|
+
* ever been confirmed, the last confirmation is older than
|
|
190
|
+
* {@link LAST_KNOWN_STATUS_TTL_MS}, or the server restarted (§7: 「サーバ再起動で
|
|
191
|
+
* クリア」 — the latch is in-memory by design).
|
|
192
|
+
*/
|
|
193
|
+
function getLastKnownStatus(key, now = Date.now()) {
|
|
194
|
+
const latch = latches.get(key);
|
|
195
|
+
if (latch === undefined)
|
|
196
|
+
return null;
|
|
197
|
+
if (expired(latch, now)) {
|
|
198
|
+
latches.delete(key);
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
return latch;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Drop the latch for a session that is no longer running.
|
|
205
|
+
*
|
|
206
|
+
* A dead session's last confirmed status describes a process that is gone, and
|
|
207
|
+
* reporting `running` from twenty minutes ago next to `isRunning: false` would
|
|
208
|
+
* be the same false confidence `model` is nulled to avoid (#1785). The next
|
|
209
|
+
* session on the same key starts with no history, which is the truth.
|
|
210
|
+
*/
|
|
211
|
+
function forgetLastKnownStatus(key) {
|
|
212
|
+
latches.delete(key);
|
|
213
|
+
}
|
|
214
|
+
/** Drop every latch. Test seam. */
|
|
215
|
+
function clearLastKnownStatuses() {
|
|
216
|
+
latches.clear();
|
|
217
|
+
}
|
|
@@ -34,12 +34,38 @@
|
|
|
34
34
|
* @module lib/session/structured-prompt
|
|
35
35
|
*/
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
-
exports.MAX_STRUCTURED_PROMPT_MESSAGE_LENGTH = void 0;
|
|
37
|
+
exports.MAX_STRUCTURED_PROMPT_MESSAGE_LENGTH = exports.STRUCTURED_DECISION_OPTIONS = void 0;
|
|
38
38
|
exports.buildStructuredPromptQuestion = buildStructuredPromptQuestion;
|
|
39
39
|
exports.buildStructuredPromptData = buildStructuredPromptData;
|
|
40
40
|
exports.buildStructuredPromptHistoryRecord = buildStructuredPromptHistoryRecord;
|
|
41
41
|
exports.isStructuredPromptWaitingData = isStructuredPromptWaitingData;
|
|
42
42
|
const models_1 = require("../../types/models");
|
|
43
|
+
/**
|
|
44
|
+
* The three verdicts an approval dialog accepts, in the order `respond` numbers
|
|
45
|
+
* them (Issue #1898).
|
|
46
|
+
*
|
|
47
|
+
* Verdict kinds rather than a tool's wire words: `allowOnce` / `allowAlways` /
|
|
48
|
+
* `deny` is the shared vocabulary every source encodes for itself
|
|
49
|
+
* (`AgentEventSource.encodeVerdict`), so this list stays true for the next
|
|
50
|
+
* source that can be answered out of band. `reply` is opencode's spelling of
|
|
51
|
+
* the same three, published because it is what its own logs and REST calls say
|
|
52
|
+
* and an operator correlating the two should not have to translate.
|
|
53
|
+
*/
|
|
54
|
+
exports.STRUCTURED_DECISION_OPTIONS = [
|
|
55
|
+
// i18n (#1271) deliberately not applied to these three labels: they are part
|
|
56
|
+
// of the CLI's accepted vocabulary, not display text. `commandmate respond
|
|
57
|
+
// <id> "Allow once"` matches against them (see
|
|
58
|
+
// `lib/hooks/structured-decision-response`), and a locale-dependent label
|
|
59
|
+
// would make the same command work on one machine and fail on another. The
|
|
60
|
+
// whole of this module is English by the same rule — see
|
|
61
|
+
// `buildStructuredPromptQuestion`, whose output goes to stderr and stdout.
|
|
62
|
+
// eslint-disable-next-line no-restricted-syntax -- CLI answer vocabulary, not display text
|
|
63
|
+
{ number: 1, label: 'Allow once', reply: 'once' },
|
|
64
|
+
// eslint-disable-next-line no-restricted-syntax -- CLI answer vocabulary, not display text
|
|
65
|
+
{ number: 2, label: 'Allow always', reply: 'always' },
|
|
66
|
+
// eslint-disable-next-line no-restricted-syntax -- CLI answer vocabulary, not display text
|
|
67
|
+
{ number: 3, label: 'Reject', reply: 'reject' },
|
|
68
|
+
];
|
|
43
69
|
/** Bound on the agent's `message`, which is prose and only ever displayed. */
|
|
44
70
|
exports.MAX_STRUCTURED_PROMPT_MESSAGE_LENGTH = 500;
|
|
45
71
|
/** How each source reads in the one-line question. */
|
|
@@ -61,10 +87,23 @@ function buildStructuredPromptQuestion(worktreeId, facts) {
|
|
|
61
87
|
`A dialog is open in ${worktreeId}: the agent reported it via ${SOURCE_LABEL[facts.source]}` +
|
|
62
88
|
`${facts.toolName ? ` for ${facts.toolName}` : ''}, but the detection layer published no ` +
|
|
63
89
|
`options for it.`,
|
|
64
|
-
`Answer it in the terminal, or send the option NUMBER with ` +
|
|
65
|
-
`\`commandmate respond ${worktreeId} <number>\` — yes/no is not resolved on a numbered ` +
|
|
66
|
-
`dialog (Issue #1681).`,
|
|
67
90
|
];
|
|
91
|
+
if (facts.decisionOptions && facts.decisionOptions.length > 0) {
|
|
92
|
+
// Issue #1898. The numbers are real here — they address a decision the
|
|
93
|
+
// agent is holding, not a line on a screen — so the guidance says which one
|
|
94
|
+
// to send instead of warning that none of them can be trusted.
|
|
95
|
+
parts.push(`Answer it with \`commandmate respond ${worktreeId} <number>\`: ` +
|
|
96
|
+
facts.decisionOptions
|
|
97
|
+
.map((option) => `${option.number} = ${option.label} (${option.reply})`)
|
|
98
|
+
.join(', ') +
|
|
99
|
+
`. The reply goes to the agent's own API, so no keys are sent to the terminal ` +
|
|
100
|
+
`and the label works too (\`respond ${worktreeId} "Allow once"\`).`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
parts.push(`Answer it in the terminal, or send the option NUMBER with ` +
|
|
104
|
+
`\`commandmate respond ${worktreeId} <number>\` — yes/no is not resolved on a numbered ` +
|
|
105
|
+
`dialog (Issue #1681).`);
|
|
106
|
+
}
|
|
68
107
|
if (facts.message) {
|
|
69
108
|
parts.push(`Agent message: "${facts.message}"`);
|
|
70
109
|
}
|
|
@@ -88,6 +127,9 @@ function buildStructuredPromptData(worktreeId, facts) {
|
|
|
88
127
|
...(facts.message ? { message: facts.message } : {}),
|
|
89
128
|
...(facts.toolName ? { toolName: facts.toolName } : {}),
|
|
90
129
|
...(facts.askUserQuestion ? { askUserQuestion: facts.askUserQuestion } : {}),
|
|
130
|
+
...(facts.decisionOptions && facts.decisionOptions.length > 0
|
|
131
|
+
? { decisionOptions: facts.decisionOptions }
|
|
132
|
+
: {}),
|
|
91
133
|
};
|
|
92
134
|
}
|
|
93
135
|
/** The prompt-history row for a structured prompt the scraper never saw. */
|
|
@@ -42,6 +42,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
42
42
|
exports.onWaitingTransition = onWaitingTransition;
|
|
43
43
|
exports.observeWaitingEdge = observeWaitingEdge;
|
|
44
44
|
exports.getWaitingEpisode = getWaitingEpisode;
|
|
45
|
+
exports.hasOpenWaitingEpisode = hasOpenWaitingEpisode;
|
|
45
46
|
exports.clearWaitingEpisodes = clearWaitingEpisodes;
|
|
46
47
|
exports.clearWaitingTransitionListeners = clearWaitingTransitionListeners;
|
|
47
48
|
const auto_yes_state_1 = require("../../lib/auto-yes-state");
|
|
@@ -120,6 +121,29 @@ function observeWaitingEdge({ worktreeId, cliToolId, instanceId, waiting, kind =
|
|
|
120
121
|
function getWaitingEpisode(worktreeId, cliToolId, instanceId) {
|
|
121
122
|
return episodes.get((0, auto_yes_state_1.buildCompositeKey)(worktreeId, cliToolId, instanceId)) ?? null;
|
|
122
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Whether **any** instance in this worktree is still waiting (Issue #2001).
|
|
126
|
+
*
|
|
127
|
+
* The cross-device dismissal is keyed on the worktree, because that is what the
|
|
128
|
+
* Service Worker `tag` names (`<worktreeId>:prompt`, `push-sender`): two agent
|
|
129
|
+
* instances waiting in one worktree share a single notification card on the
|
|
130
|
+
* phone. So one instance crossing the closing edge is not on its own a reason
|
|
131
|
+
* to clear that card — the card is still telling the truth until the last of
|
|
132
|
+
* them has been answered.
|
|
133
|
+
*
|
|
134
|
+
* The prefix test is exact rather than heuristic: `buildCompositeKey` puts the
|
|
135
|
+
* worktree id first and rejects a worktree id containing
|
|
136
|
+
* {@link COMPOSITE_KEY_SEPARATOR}, so no other worktree's key can start with
|
|
137
|
+
* `<worktreeId>:`.
|
|
138
|
+
*/
|
|
139
|
+
function hasOpenWaitingEpisode(worktreeId) {
|
|
140
|
+
const prefix = `${worktreeId}${auto_yes_state_1.COMPOSITE_KEY_SEPARATOR}`;
|
|
141
|
+
for (const key of episodes.keys()) {
|
|
142
|
+
if (key.startsWith(prefix))
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
123
147
|
/**
|
|
124
148
|
* Drop every episode. Test seam.
|
|
125
149
|
*
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The one place a {@link KeySequence} step becomes a `tmux send-keys` argv
|
|
4
|
+
* (Issue #1933, 受入条件 S9).
|
|
5
|
+
*
|
|
6
|
+
* ## What was wrong
|
|
7
|
+
*
|
|
8
|
+
* `tmux send-keys` resolves its positional argument against the key table
|
|
9
|
+
* before sending anything, and it parses its arguments with getopt. Neither
|
|
10
|
+
* fact was accounted for anywhere in this repository: `grep -n "'-l'"
|
|
11
|
+
* src/lib/tmux/*.ts` returned zero hits, and the user's message body is typed
|
|
12
|
+
* with `sendKeys(sessionName, message, false)`.
|
|
13
|
+
*
|
|
14
|
+
* Measured on tmux 3.5a against a private socket (`tmux -L …`), reading the
|
|
15
|
+
* bytes out of a pane running `cat` on a raw pty:
|
|
16
|
+
*
|
|
17
|
+
* | argv | bytes delivered |
|
|
18
|
+
* |-------------------------------------|------------------------------|
|
|
19
|
+
* | `send-keys -t X 'Escape'` | `1b` (ESC key) |
|
|
20
|
+
* | `send-keys -t X -l -- 'Escape'` | `457363617065` -> `Escape` |
|
|
21
|
+
* | `send-keys -t X 'Enter'` | `0d` (CR) |
|
|
22
|
+
* | `send-keys -t X -l -- 'Enter'` | `456e746572` -> `Enter` |
|
|
23
|
+
* | `send-keys -t X '-l'` | **rc 0, nothing sent** |
|
|
24
|
+
* | `send-keys -t X '-N hello'` | rc 1, `repeat count invalid` |
|
|
25
|
+
* | `send-keys -t X -l -- '-l'` | `2d6c` -> `-l` |
|
|
26
|
+
*
|
|
27
|
+
* So before this module a message whose body was exactly `Escape` interrupted
|
|
28
|
+
* the agent, `Enter` submitted an empty composer, `C-c` sent SIGINT, and a body
|
|
29
|
+
* beginning with `-` was silently discarded while the send reported success.
|
|
30
|
+
*
|
|
31
|
+
* ## Why `--` is on both branches
|
|
32
|
+
*
|
|
33
|
+
* The key branch takes a name from a five-value whitelist and could not
|
|
34
|
+
* collide, but a fixed argv shape is cheaper to reason about than one that
|
|
35
|
+
* changes with the payload, and the whitelist is re-checked here anyway (a
|
|
36
|
+
* JavaScript caller or an `as` cast can put anything in a typed field).
|
|
37
|
+
*
|
|
38
|
+
* ## Why the builder is separate from the sending
|
|
39
|
+
*
|
|
40
|
+
* {@link keySequenceArgs} is pure, so the property S9 asks for — *literal text
|
|
41
|
+
* always leaves through `-l`* — is pinned by inspecting an array rather than by
|
|
42
|
+
* trusting a spy on a wrapper. {@link runKeySequence} is the executor and takes
|
|
43
|
+
* its transport as a parameter, so a test drives the real sequencing (including
|
|
44
|
+
* the per-step delays) against a stub. `sendKeys(…, { literal: true })` in
|
|
45
|
+
* `./tmux` builds its argv here too, which is what makes the production
|
|
46
|
+
* message-body path and the pinned property the same code.
|
|
47
|
+
*
|
|
48
|
+
* ## Why these take a target rather than a session name
|
|
49
|
+
*
|
|
50
|
+
* `exactTarget()` lives in `./tmux`, and `./tmux` imports this module. Taking
|
|
51
|
+
* the already-resolved target keeps the dependency one-way instead of putting a
|
|
52
|
+
* cycle underneath every tmux caller — including the suites that replace
|
|
53
|
+
* `@/lib/tmux/tmux` with a factory mock, where a cycle would resolve
|
|
54
|
+
* `exactTarget` to whatever the mock happened to declare.
|
|
55
|
+
*
|
|
56
|
+
* @module lib/tmux/key-sequence
|
|
57
|
+
*/
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.keySequenceArgs = keySequenceArgs;
|
|
60
|
+
exports.runKeySequence = runKeySequence;
|
|
61
|
+
exports.describeKeySequence = describeKeySequence;
|
|
62
|
+
const cli_tool_contracts_1 = require("../../types/cli-tool-contracts");
|
|
63
|
+
/**
|
|
64
|
+
* The `tmux` arguments that send one step to a pane.
|
|
65
|
+
*
|
|
66
|
+
* @param target - An exact tmux target, i.e. `exactTarget(sessionName)`
|
|
67
|
+
* @param step - The keystroke or the text
|
|
68
|
+
* @returns Arguments for `execFile('tmux', …)` — never a shell string
|
|
69
|
+
* @throws Error when a key step names a key outside `KEY_SEQUENCE_KEY_NAMES`
|
|
70
|
+
* (defense in depth against `as` casts and JavaScript callers)
|
|
71
|
+
*/
|
|
72
|
+
function keySequenceArgs(target, step) {
|
|
73
|
+
if (step.kind === 'literal') {
|
|
74
|
+
// `-l` stops the key-table lookup; `--` stops the getopt parse. Both are
|
|
75
|
+
// required: without `-l` a body of `Escape` is the ESC key, and without
|
|
76
|
+
// `--` a body of `-l` is consumed as a flag and nothing is sent at all.
|
|
77
|
+
return ['send-keys', '-t', target, '-l', '--', step.text];
|
|
78
|
+
}
|
|
79
|
+
if (!(0, cli_tool_contracts_1.isKeySequenceKeyName)(step.name)) {
|
|
80
|
+
throw new Error(`Invalid key sequence key name: ${step.name}`);
|
|
81
|
+
}
|
|
82
|
+
return ['send-keys', '-t', target, '--', step.name];
|
|
83
|
+
}
|
|
84
|
+
const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
85
|
+
/**
|
|
86
|
+
* Send a whole sequence, one tmux invocation per step.
|
|
87
|
+
*
|
|
88
|
+
* Never batched into a single `send-keys`: a TUI reading several keys out of one
|
|
89
|
+
* write treats them as a paste and can swallow the trailing submit — measured on
|
|
90
|
+
* opencode 1.18.21, where `send-keys '/exit' C-m` leaves the command palette
|
|
91
|
+
* open with `/exit` still in the composer 10.8 s later, 2 runs out of 2 (#1905).
|
|
92
|
+
*
|
|
93
|
+
* A step's `delayAfterMs` is awaited before the next step and is never applied
|
|
94
|
+
* after the last one.
|
|
95
|
+
*
|
|
96
|
+
* @param target - An exact tmux target, i.e. `exactTarget(sessionName)`
|
|
97
|
+
* @param steps - The sequence, in order
|
|
98
|
+
* @param transport - How one tmux invocation is run
|
|
99
|
+
* @param sleep - How a `delayAfterMs` is waited out (defaults to `setTimeout`)
|
|
100
|
+
*/
|
|
101
|
+
async function runKeySequence(target, steps, transport, sleep = defaultSleep) {
|
|
102
|
+
for (let index = 0; index < steps.length; index += 1) {
|
|
103
|
+
const step = steps[index];
|
|
104
|
+
await transport.run(keySequenceArgs(target, step));
|
|
105
|
+
const delay = step.delayAfterMs;
|
|
106
|
+
if (delay !== undefined && delay > 0 && index < steps.length - 1) {
|
|
107
|
+
await sleep(delay);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* A sequence rendered for a log line or a test assertion.
|
|
113
|
+
*
|
|
114
|
+
* `key:Escape` / `text:/exit` — unambiguous because the prefix says which arm of
|
|
115
|
+
* the union the value came from, which is exactly the distinction that was
|
|
116
|
+
* missing from the code this Issue replaces.
|
|
117
|
+
*/
|
|
118
|
+
function describeKeySequence(steps) {
|
|
119
|
+
return steps.map((step) => (step.kind === 'literal' ? `text:${step.text}` : `key:${step.name}`));
|
|
120
|
+
}
|
|
@@ -12,6 +12,7 @@ exports.hasSession = hasSession;
|
|
|
12
12
|
exports.listSessions = listSessions;
|
|
13
13
|
exports.createSession = createSession;
|
|
14
14
|
exports.sendKeys = sendKeys;
|
|
15
|
+
exports.sendKeySequence = sendKeySequence;
|
|
15
16
|
exports.sendSpecialKeys = sendSpecialKeys;
|
|
16
17
|
exports.capturePane = capturePane;
|
|
17
18
|
exports.killSession = killSession;
|
|
@@ -19,6 +20,7 @@ exports.renameSession = renameSession;
|
|
|
19
20
|
exports.ensureSession = ensureSession;
|
|
20
21
|
exports.sendSpecialKey = sendSpecialKey;
|
|
21
22
|
exports.clearInputLine = clearInputLine;
|
|
23
|
+
exports.clearComposerLine = clearComposerLine;
|
|
22
24
|
exports.isAllowedSpecialKey = isAllowedSpecialKey;
|
|
23
25
|
exports.sendSpecialKeysAndInvalidate = sendSpecialKeysAndInvalidate;
|
|
24
26
|
const child_process_1 = require("child_process");
|
|
@@ -27,6 +29,9 @@ const tmux_capture_cache_1 = require("./tmux-capture-cache");
|
|
|
27
29
|
const validation_1 = require("../../lib/cli-tools/validation");
|
|
28
30
|
const tmux_pane_config_1 = require("../../config/tmux-pane-config");
|
|
29
31
|
const logger_1 = require("../../lib/logger");
|
|
32
|
+
const terminal_keys_1 = require("../../types/terminal-keys");
|
|
33
|
+
Object.defineProperty(exports, "NAVIGATION_KEY_VALUES", { enumerable: true, get: function () { return terminal_keys_1.NAVIGATION_KEY_VALUES; } });
|
|
34
|
+
const key_sequence_1 = require("./key-sequence");
|
|
30
35
|
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
31
36
|
const logger = (0, logger_1.createLogger)('tmux');
|
|
32
37
|
/**
|
|
@@ -294,22 +299,31 @@ async function createSession(sessionNameOrOptions, cwd) {
|
|
|
294
299
|
* @param sessionName - Target session name
|
|
295
300
|
* @param keys - Keys to send (command text)
|
|
296
301
|
* @param sendEnter - Whether to send Enter key after the command (default: true)
|
|
302
|
+
* @param options - {@link SendKeysOptions}; pass `{ literal: true }` for text
|
|
297
303
|
*
|
|
298
|
-
* @throws {Error} If session doesn't exist or
|
|
304
|
+
* @throws {Error} If session doesn't exist, command fails, or `literal` is
|
|
305
|
+
* combined with `sendEnter`
|
|
299
306
|
*
|
|
300
307
|
* @example
|
|
301
308
|
* ```typescript
|
|
302
309
|
* await sendKeys('my-session', 'echo hello');
|
|
303
310
|
* await sendKeys('my-session', 'ls -la', true);
|
|
304
311
|
* await sendKeys('my-session', 'incomplete command', false);
|
|
312
|
+
* // A message body the user typed — never resolved as a key name:
|
|
313
|
+
* await sendKeys('my-session', userMessage, false, { literal: true });
|
|
305
314
|
* ```
|
|
306
315
|
*/
|
|
307
|
-
async function sendKeys(sessionName, keys, sendEnter = true) {
|
|
316
|
+
async function sendKeys(sessionName, keys, sendEnter = true, options) {
|
|
317
|
+
if (options?.literal && sendEnter) {
|
|
318
|
+
throw new Error('sendKeys: { literal: true } cannot be combined with sendEnter — a trailing C-m would be typed as text. Send Enter as a separate key.');
|
|
319
|
+
}
|
|
308
320
|
// execFile() passes arguments directly without shell interpretation,
|
|
309
321
|
// so no shell-level escaping is needed
|
|
310
|
-
const args =
|
|
311
|
-
?
|
|
312
|
-
:
|
|
322
|
+
const args = options?.literal
|
|
323
|
+
? (0, key_sequence_1.keySequenceArgs)(exactTarget(sessionName), { kind: 'literal', text: keys })
|
|
324
|
+
: sendEnter
|
|
325
|
+
? ['send-keys', '-t', exactTarget(sessionName), keys, 'C-m']
|
|
326
|
+
: ['send-keys', '-t', exactTarget(sessionName), keys];
|
|
313
327
|
try {
|
|
314
328
|
await execFileAsync('tmux', args, { timeout: DEFAULT_TIMEOUT });
|
|
315
329
|
}
|
|
@@ -318,6 +332,49 @@ async function sendKeys(sessionName, keys, sendEnter = true) {
|
|
|
318
332
|
throw new Error(`Failed to send keys to tmux session: ${errorMessage}`);
|
|
319
333
|
}
|
|
320
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Send a whole {@link KeySequence} to a session (Issue #1933).
|
|
337
|
+
*
|
|
338
|
+
* The executor half of `./key-sequence`, bound to this module's `execFile`
|
|
339
|
+
* transport. Literal steps go out through `send-keys -l --`, key steps through
|
|
340
|
+
* `send-keys --` after their name is re-validated, and each step is its own
|
|
341
|
+
* tmux invocation so a TUI cannot read the whole sequence as one paste.
|
|
342
|
+
*
|
|
343
|
+
* ## Status: the runner for `GracefulExitSpec.keys`, not yet its caller
|
|
344
|
+
*
|
|
345
|
+
* `ICLITool.gracefulExitSequence()` returns a `KeySequence[]`, so something has
|
|
346
|
+
* to be able to run one; this is that something, and
|
|
347
|
+
* `tests/unit/lib/key-sequence-1933.test.ts` drives it against a stubbed
|
|
348
|
+
* `execFile`. The seven `killSession()` implementations do **not** call it yet,
|
|
349
|
+
* and that is a deliberate scope line rather than an oversight: rerouting them
|
|
350
|
+
* changes the argv of calls that `tests/unit/api/kill-session-cli-tool-gateway-1905.test.ts`
|
|
351
|
+
* pins by exact arity, a file Issue #1933 may not edit — and it would buy no
|
|
352
|
+
* behaviour, because the exit strings (`/exit`, `/quit`) are tool-owned
|
|
353
|
+
* constants rather than tmux key names, so `-l` changes not one byte for them.
|
|
354
|
+
* The user-typed message body, which `-l` changes a great deal for, goes through
|
|
355
|
+
* {@link sendKeys}' `literal` option in the same commit. The Issue that is
|
|
356
|
+
* allowed to touch that gateway test owns the rest of the move;
|
|
357
|
+
* `tests/unit/cli-tools/graceful-exit-conformance-1933.test.ts` holds the
|
|
358
|
+
* declarations equal to the implementations until then.
|
|
359
|
+
*
|
|
360
|
+
* @param sessionName - Target session name
|
|
361
|
+
* @param steps - The sequence, in order
|
|
362
|
+
* @throws {Error} If a key name is not allowed, or a tmux command fails
|
|
363
|
+
*/
|
|
364
|
+
async function sendKeySequence(sessionName, steps) {
|
|
365
|
+
const transport = {
|
|
366
|
+
async run(args) {
|
|
367
|
+
await execFileAsync('tmux', args, { timeout: DEFAULT_TIMEOUT });
|
|
368
|
+
},
|
|
369
|
+
};
|
|
370
|
+
try {
|
|
371
|
+
await (0, key_sequence_1.runKeySequence)(exactTarget(sessionName), steps, transport);
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
375
|
+
throw new Error(`Failed to send key sequence to tmux session: ${errorMessage}`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
321
378
|
/**
|
|
322
379
|
* Allowed tmux special key names for sendSpecialKeys() (multi-key TUI navigation).
|
|
323
380
|
* Used for cursor-based navigation sequences (e.g., ['Down', 'Down', 'Enter']).
|
|
@@ -603,22 +660,37 @@ async function clearInputLine(sessionName) {
|
|
|
603
660
|
}
|
|
604
661
|
}
|
|
605
662
|
/**
|
|
606
|
-
*
|
|
607
|
-
* Used for TUI navigation sequences (e.g., Up/Down cursor, Enter/Escape selection).
|
|
663
|
+
* Send one `C-e` + `C-u` pass over the TUI input line (Issue #1879).
|
|
608
664
|
*
|
|
609
|
-
*
|
|
610
|
-
*
|
|
611
|
-
*
|
|
665
|
+
* `C-u` alone is kill-line-*before-cursor*, so it deletes nothing at all when the
|
|
666
|
+
* cursor sits at column 0 — the state a human leaves behind after pressing Home
|
|
667
|
+
* and walking away, measured live in #1878 §5-1. Moving to end-of-line first is
|
|
668
|
+
* what makes the kill unconditional. Both keys go in one `send-keys` so they
|
|
669
|
+
* cannot be interleaved with anything else the session receives.
|
|
612
670
|
*
|
|
613
|
-
*
|
|
614
|
-
*
|
|
671
|
+
* One pass clears one row. A multi-row composer needs several (also measured in
|
|
672
|
+
* #1878 §5-1: up to `2N-1` for N rows), which is why callers drive this from
|
|
673
|
+
* {@link module:lib/session/composer-clear}'s read-back loop rather than firing
|
|
674
|
+
* it once and declaring victory.
|
|
675
|
+
*
|
|
676
|
+
* Like {@link clearInputLine}, the keys are fixed literals passed through
|
|
677
|
+
* execFile (no shell, no injection) and are deliberately NOT added to
|
|
678
|
+
* `ALLOWED_SPECIAL_KEYS` / `NAVIGATION_KEY_VALUES`: the special-keys API stays a
|
|
679
|
+
* navigation surface, and clearing the composer is its own endpoint with its own
|
|
680
|
+
* verification.
|
|
681
|
+
*
|
|
682
|
+
* @param sessionName - Target session name
|
|
683
|
+
* @throws {Error} If the tmux command fails
|
|
615
684
|
*/
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
685
|
+
async function clearComposerLine(sessionName) {
|
|
686
|
+
try {
|
|
687
|
+
await execFileAsync('tmux', ['send-keys', '-t', exactTarget(sessionName), 'C-e', 'C-u'], { timeout: DEFAULT_TIMEOUT });
|
|
688
|
+
}
|
|
689
|
+
catch (error) {
|
|
690
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
691
|
+
throw new Error(`Failed to clear tmux composer line: ${errorMessage}`);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
622
694
|
/**
|
|
623
695
|
* Type guard for navigation key validation (special-keys API).
|
|
624
696
|
* Returns true if the key is in the NAVIGATION_KEY_VALUES set.
|
|
@@ -629,7 +701,7 @@ exports.NAVIGATION_KEY_VALUES = [
|
|
|
629
701
|
* @returns True if key is a valid NavigationKey
|
|
630
702
|
*/
|
|
631
703
|
function isAllowedSpecialKey(key) {
|
|
632
|
-
return
|
|
704
|
+
return terminal_keys_1.NAVIGATION_KEY_VALUES.includes(key);
|
|
633
705
|
}
|
|
634
706
|
/**
|
|
635
707
|
* Send special keys to a tmux session and invalidate the capture cache.
|