commandmate 0.26.1 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +430 -402
- package/.next/app-path-routes-manifest.json +32 -28
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +6 -6
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +24 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +1 -1
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +2 -2
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -0
- package/.next/server/app/api/capabilities/route.js.nft.json +1 -0
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route.js +2 -2
- package/.next/server/app/api/fs/browse/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route.js +2 -2
- package/.next/server/app/api/fs/recent-paths/route.js.nft.json +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +19 -1
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route.js.nft.json +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route.js.nft.json +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +2 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +2 -0
- package/.next/server/app/api/worktrees/[id]/env/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -5
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +2 -6
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +2 -2
- package/.next/server/app/skills/page.js.nft.json +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +9 -7
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +32 -28
- package/.next/server/chunks/1029.js +1 -1
- package/.next/server/chunks/1068.js +3 -1
- package/.next/server/chunks/1296.js +1 -1
- package/.next/server/chunks/1538.js +7 -0
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +3 -2
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2546.js +1 -1
- package/.next/server/chunks/2689.js +13 -0
- package/.next/server/chunks/2759.js +8 -0
- package/.next/server/chunks/2839.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3292.js +1 -0
- package/.next/server/chunks/3417.js +1 -1
- package/.next/server/chunks/3480.js +1 -17
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4423.js +1 -0
- package/.next/server/chunks/4444.js +22 -8
- package/.next/server/chunks/4565.js +3 -0
- package/.next/server/chunks/467.js +1 -0
- package/.next/server/chunks/4905.js +5 -0
- package/.next/server/chunks/5017.js +1 -0
- package/.next/server/chunks/5089.js +1 -0
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/5220.js +1 -0
- package/.next/server/chunks/5354.js +1 -0
- package/.next/server/chunks/552.js +19 -0
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5998.js +3 -3
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6274.js +11 -11
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/7472.js +1 -0
- package/.next/server/chunks/7506.js +1 -0
- package/.next/server/chunks/848.js +1 -1
- package/.next/server/chunks/8536.js +1 -1
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +5 -5
- package/.next/server/chunks/9067.js +1 -1
- package/.next/server/chunks/9284.js +1 -0
- package/.next/server/chunks/9358.js +1 -1
- package/.next/server/chunks/9508.js +1 -0
- package/.next/server/chunks/9938.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/9IXgWfBUtnEnRqnbmErTp/_buildManifest.js +1 -0
- package/.next/static/chunks/{2053-dfac2d49227cc942.js → 2053-c0e931eb4391baa1.js} +1 -1
- package/.next/static/chunks/3361-5d6e93fba8a92bc1.js +1 -0
- package/.next/static/chunks/3922.0d2e64daf9f187da.js +1 -0
- package/.next/static/chunks/{5229-35f9acab97a553c5.js → 5229-1f5f19740a8d6c11.js} +1 -1
- package/.next/static/chunks/{6381-0e097c0286155883.js → 6381-8cfe50a5ca5425b1.js} +1 -1
- package/.next/static/chunks/{8649-f551b0010dba4986.js → 8521-c43994fb58501d13.js} +1 -1
- package/.next/static/chunks/app/api/app/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/templates/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/chat/{page-439b35c9cb90dbe0.js → page-231df45127e876c2.js} +1 -1
- package/.next/static/chunks/app/login/{page-eefd515d8c37e5ee.js → page-adc51f0f7cbb7ac6.js} +1 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/more/{page-889b7546a8a553dc.js → page-3266dfa945972649.js} +1 -1
- package/.next/static/chunks/app/{page-a8d04ac0e3e4c9fc.js → page-0305431f43195431.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/repositories/{page-f3c4d8839b1ca203.js → page-ae8fa55749976f79.js} +1 -1
- package/.next/static/chunks/app/review/{page-6dc88649fe88ac16.js → page-8f63aff862fee421.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-2c9ed9e969097688.js → page-4d5382b257077c14.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-19beef6121c4c982.js → page-aaf0bcb1dfb558b9.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-d5b9cef6d21fabda.js → page-dafc486410e839b7.js} +1 -1
- package/.next/static/chunks/app/skills/{page-06ef637e07dd9377.js → page-9e3c91da31514893.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/{page-5fed3984fafcd910.js → page-90f96977c741bbf8.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-6add0d88e2828c23.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f7b3dfbe757dc6b8.js +1 -0
- package/.next/static/chunks/{webpack-9d892a9ff07c289d.js → webpack-6a9668cf54a26eba.js} +1 -1
- package/.next/static/css/928e5a8830fbf997.css +1 -0
- package/.next/trace +13 -12
- package/.next/types/app/api/capabilities/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/clear-composer/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/env/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/resolve-target/route.ts +347 -0
- package/.next/types/routes.d.ts +5 -1
- package/.next/types/validator.ts +36 -0
- package/dist/cli/commands/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +40 -2
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +28 -13
- package/dist/cli/commands/instances.d.ts +30 -18
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +32 -36
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +73 -1
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +18 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +21 -15
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +38 -0
- package/dist/cli/commands/wait.d.ts +26 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +390 -43
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +16 -0
- package/dist/cli/config/cli-tool-ids.d.ts +11 -0
- package/dist/cli/config/cli-tool-ids.d.ts.map +1 -1
- package/dist/cli/config/cli-tool-ids.js +12 -1
- package/dist/cli/types/api-responses.d.ts +443 -2
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +18 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +22 -0
- package/dist/cli/utils/server-capabilities.d.ts +56 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -0
- package/dist/cli/utils/server-capabilities.js +166 -0
- package/dist/cli/utils/session-target.d.ts +70 -0
- package/dist/cli/utils/session-target.d.ts.map +1 -0
- package/dist/cli/utils/session-target.js +118 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +79 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/lib/cli-tools/types.d.ts +61 -0
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +41 -0
- package/dist/lib/detection/ansi.d.ts +2 -1
- package/dist/lib/detection/ansi.d.ts.map +1 -1
- package/dist/lib/detection/ansi.js +3 -2
- package/dist/lib/detection/tools/verified-against.d.ts +84 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -0
- package/dist/lib/detection/tools/verified-against.js +88 -0
- package/dist/lib/detection/version-probes.d.ts +207 -0
- package/dist/lib/detection/version-probes.d.ts.map +1 -0
- package/dist/lib/detection/version-probes.js +290 -0
- package/dist/lib/security/env-sanitizer.d.ts +198 -0
- package/dist/lib/security/env-sanitizer.d.ts.map +1 -0
- package/dist/lib/security/env-sanitizer.js +232 -0
- package/dist/server/locales/en/notifications.json +17 -6
- package/dist/server/locales/ja/notifications.json +17 -6
- package/dist/server/src/config/activity-bar-config.js +4 -0
- package/dist/server/src/config/cli-tool-timing-config.js +59 -2
- package/dist/server/src/config/copilot-constants.js +11 -1
- package/dist/server/src/config/detection-evidence-config.js +129 -0
- package/dist/server/src/config/schedule-config.js +56 -7
- package/dist/server/src/config/tmux-pane-config.js +18 -1
- package/dist/server/src/lib/auto-yes-poller.js +36 -0
- package/dist/server/src/lib/cli-tools/antigravity.js +4 -2
- package/dist/server/src/lib/cli-tools/base.js +131 -10
- package/dist/server/src/lib/cli-tools/capture-spec.js +56 -0
- package/dist/server/src/lib/cli-tools/claude.js +1 -1
- package/dist/server/src/lib/cli-tools/codex.js +6 -2
- package/dist/server/src/lib/cli-tools/composer-spec.js +96 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +155 -0
- package/dist/server/src/lib/cli-tools/copilot.js +307 -81
- package/dist/server/src/lib/cli-tools/gemini.js +8 -6
- package/dist/server/src/lib/cli-tools/graceful-exit.js +181 -0
- package/dist/server/src/lib/cli-tools/index.js +11 -1
- package/dist/server/src/lib/cli-tools/manager.js +56 -4
- package/dist/server/src/lib/cli-tools/opencode-config.js +195 -24
- package/dist/server/src/lib/cli-tools/opencode.js +233 -30
- package/dist/server/src/lib/cli-tools/session-name.js +57 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +213 -30
- package/dist/server/src/lib/cli-tools/types.js +41 -0
- package/dist/server/src/lib/cli-tools/vibe-local.js +7 -3
- package/dist/server/src/lib/cmate-cli-tool-parser.js +29 -1
- package/dist/server/src/lib/cmate-parser.js +12 -4
- package/dist/server/src/lib/db/db.js +5 -1
- package/dist/server/src/lib/db/migrations/v41-push-subscriptions.js +11 -0
- package/dist/server/src/lib/db/push-subscriptions-db.js +60 -3
- package/dist/server/src/lib/detection/ansi.js +3 -2
- package/dist/server/src/lib/detection/cli-patterns.js +901 -67
- package/dist/server/src/lib/detection/composer-text.js +455 -0
- package/dist/server/src/lib/detection/idle-evidence-observation.js +51 -0
- package/dist/server/src/lib/detection/model-info-extractor.js +195 -4
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +19 -0
- package/dist/server/src/lib/detection/status-detector.js +76 -675
- package/dist/server/src/lib/detection/status-reason.js +57 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +75 -0
- package/dist/server/src/lib/detection/tools/claude/detect.js +144 -0
- package/dist/server/src/lib/detection/tools/claude/patterns.js +98 -0
- package/dist/server/src/lib/detection/tools/claude/prompt.js +124 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +343 -0
- package/dist/server/src/lib/detection/tools/codex/prompt.js +104 -0
- package/dist/server/src/lib/detection/tools/copilot/detect.js +185 -0
- package/dist/server/src/lib/detection/tools/copilot/prompt.js +89 -0
- package/dist/server/src/lib/detection/tools/dialog-block.js +159 -0
- package/dist/server/src/lib/detection/tools/frame.js +47 -0
- package/dist/server/src/lib/detection/tools/opencode/detect.js +242 -0
- package/dist/server/src/lib/detection/tools/opencode/prompt.js +85 -0
- package/dist/server/src/lib/detection/tools/registry.js +58 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +202 -0
- package/dist/server/src/lib/detection/tools/types.js +34 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +88 -0
- package/dist/server/src/lib/hooks/agent-event-types.js +19 -1
- package/dist/server/src/lib/hooks/permission-adjudication.js +160 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +81 -14
- package/dist/server/src/lib/hooks/permission-decision-state.js +62 -0
- package/dist/server/src/lib/hooks/permission-request-payload.js +18 -1
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +20 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +403 -50
- package/dist/server/src/lib/hooks/sources/copilot/source.js +40 -4
- package/dist/server/src/lib/hooks/sources/define-source.js +23 -1
- package/dist/server/src/lib/hooks/sources/event-mapper.js +29 -1
- package/dist/server/src/lib/hooks/sources/gemini/source.js +10 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/launch-command.js +96 -1
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +12 -0
- package/dist/server/src/lib/hooks/sources/opencode/client.js +295 -32
- package/dist/server/src/lib/hooks/sources/opencode/ingest.js +120 -42
- package/dist/server/src/lib/hooks/sources/opencode/mappers.js +95 -3
- package/dist/server/src/lib/hooks/sources/opencode/ports.js +70 -9
- package/dist/server/src/lib/hooks/sources/opencode/runtime.js +62 -4
- package/dist/server/src/lib/hooks/sources/opencode/source.js +54 -3
- package/dist/server/src/lib/hooks/sources/opencode/subscription.js +254 -26
- package/dist/server/src/lib/hooks/sources/opencode/turn-gate.js +119 -4
- package/dist/server/src/lib/hooks/sources/pending-decisions.js +40 -2
- package/dist/server/src/lib/hooks/tool-input-normalization-state.js +67 -0
- package/dist/server/src/lib/hooks/tool-input-normalization.js +157 -0
- package/dist/server/src/lib/job-executor.js +16 -4
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +184 -0
- package/dist/server/src/lib/polling/response-checker.js +243 -26
- package/dist/server/src/lib/push/failure-episode-state.js +127 -0
- package/dist/server/src/lib/push/failure-push-notifier.js +344 -0
- package/dist/server/src/lib/push/index.js +35 -1
- package/dist/server/src/lib/push/prompt-card-state.js +93 -0
- package/dist/server/src/lib/push/prompt-push-gate.js +130 -0
- package/dist/server/src/lib/push/push-sender.js +82 -7
- package/dist/server/src/lib/push/resolution-push-notifier.js +193 -0
- package/dist/server/src/lib/push/waiting-push-notifier.js +42 -0
- package/dist/server/src/lib/response-cleaner.js +93 -20
- package/dist/server/src/lib/response-extractor.js +98 -5
- package/dist/server/src/lib/security/env-sanitizer.js +179 -5
- package/dist/server/src/lib/session/agent-event-state.js +1038 -189
- package/dist/server/src/lib/session/agent-session-lifecycle.js +8 -0
- package/dist/server/src/lib/session/claude-executor.js +23 -3
- package/dist/server/src/lib/session/claude-session.js +11 -1
- package/dist/server/src/lib/session/composer-clear.js +95 -0
- package/dist/server/src/lib/session/current-output-builder.js +267 -25
- package/dist/server/src/lib/session/provisional-turn.js +310 -0
- package/dist/server/src/lib/session/resolve-session-target.js +156 -0
- package/dist/server/src/lib/session/send-user-message.js +14 -18
- package/dist/server/src/lib/session/session-start-error.js +53 -1
- package/dist/server/src/lib/session/status-evidence.js +217 -0
- package/dist/server/src/lib/session/structured-prompt.js +46 -4
- package/dist/server/src/lib/session/waiting-episode-state.js +24 -0
- package/dist/server/src/lib/tmux/key-sequence.js +120 -0
- package/dist/server/src/lib/tmux/tmux.js +91 -19
- package/dist/server/src/lib/tui-accumulator.js +68 -1
- package/dist/server/src/lib/verification/gate-runner.js +84 -1
- package/dist/server/src/lib/ws-server.js +8 -5
- package/dist/server/src/types/cli-tool-contracts.js +75 -0
- package/dist/server/src/types/terminal-keys.js +37 -0
- package/dist/types/cli-tool-contracts.d.ts +235 -0
- package/dist/types/cli-tool-contracts.d.ts.map +1 -0
- package/dist/types/cli-tool-contracts.js +75 -0
- package/package.json +3 -2
- package/public/sw.js +65 -2
- package/.next/server/chunks/1841.js +0 -1
- package/.next/server/chunks/233.js +0 -1
- package/.next/server/chunks/3022.js +0 -1
- package/.next/server/chunks/3270.js +0 -1
- package/.next/server/chunks/4455.js +0 -1
- package/.next/server/chunks/5959.js +0 -27
- package/.next/server/chunks/7458.js +0 -6
- package/.next/server/chunks/8730.js +0 -1
- package/.next/server/chunks/9058.js +0 -1
- package/.next/server/chunks/9687.js +0 -3
- package/.next/static/chunks/3898-ef488bfa804507d9.js +0 -1
- package/.next/static/chunks/9263.f2034ec525abcf72.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/templates/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-fae89f8d4cc3ff97.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-fdfca039b7f5837e.js +0 -1
- package/.next/static/css/e865c4979a41aa03.css +0 -1
- package/.next/static/wyFLOpmKpr45BHZ4svYpE/_buildManifest.js +0 -1
- /package/.next/static/{wyFLOpmKpr45BHZ4svYpE → 9IXgWfBUtnEnRqnbmErTp}/_ssgManifest.js +0 -0
|
@@ -97,9 +97,76 @@ function normalizeCopilotLine(line) {
|
|
|
97
97
|
*/
|
|
98
98
|
function extractCopilotContentLines(rawOutput) {
|
|
99
99
|
const strippedOutput = (0, cli_patterns_1.stripAnsi)(rawOutput);
|
|
100
|
-
const
|
|
100
|
+
const allLines = strippedOutput.split('\n');
|
|
101
|
+
// Issue #1895, and it must run BEFORE the #1897 chrome trim below, against
|
|
102
|
+
// `allLines`. The two checks are complementary, not alternatives, and the
|
|
103
|
+
// order is forced in BOTH directions — measured over the 16 live fixtures:
|
|
104
|
+
//
|
|
105
|
+
// - Trim-then-ask MISSES the real picker. `/model` draws its search field as
|
|
106
|
+
// rule / `❯ Search models…` / rule with the key-hint footer where the
|
|
107
|
+
// status bar would be, which is structurally a composer, so
|
|
108
|
+
// `findCopilotChromeStart` accepts it (996, six rows off the end) instead
|
|
109
|
+
// of returning -1 — and the six rows it takes are the only evidence that
|
|
110
|
+
// this frame is a picker. 112 non-blank rows of model list stay behind and
|
|
111
|
+
// `isCopilotSelectionFrame` on what is left answers no. (The other ten
|
|
112
|
+
// pickers do give -1, so for them the order is merely harmless.)
|
|
113
|
+
// - Trim-then-ask also INVENTS a picker. On
|
|
114
|
+
// `picker-vocabulary-in-response.txt` — a finished turn whose reply quotes
|
|
115
|
+
// two key-hint bars — the trim removes the status bar, which is exactly the
|
|
116
|
+
// guard `isCopilotSelectionFrame` leans on, and the quoted bars are then the
|
|
117
|
+
// bottom rows. Asked after the trim it answers yes and the whole reply is
|
|
118
|
+
// discarded. Asked before, it answers no and the 54 rows survive.
|
|
119
|
+
//
|
|
120
|
+
// While a picker is open the frame carries NO response content at all: copilot
|
|
121
|
+
// draws the list instead of the transcript. The poller feeds this function the
|
|
122
|
+
// whole pane on every tick (`response-checker.ts`), so an operator who opens
|
|
123
|
+
// `/model` and reads it for a minute would otherwise have the model list
|
|
124
|
+
// appended to the saved response once per poll. Line patterns cannot fix that:
|
|
125
|
+
// `Recommended models` and `GPT-5.6 Luna 328K Medium` are not distinguishable
|
|
126
|
+
// from prose, and the pattern that used to sit in `COPILOT_SKIP_PATTERNS` for
|
|
127
|
+
// this (`Search \w+\.\.\.|Select Model`) matched none of the chrome and DID
|
|
128
|
+
// match copilot's own answers about the picker. The frame-level question has an
|
|
129
|
+
// exact answer, so ask that instead.
|
|
130
|
+
//
|
|
131
|
+
// Returning [] leaves the accumulator untouched (`accumulateTuiContent`
|
|
132
|
+
// early-returns on empty), which is the wanted behaviour: the picker is a
|
|
133
|
+
// transient overlay over a transcript whose earlier polls are already
|
|
134
|
+
// accumulated, and the next poll after it closes resumes normally.
|
|
135
|
+
if ((0, cli_patterns_1.isCopilotSelectionFrame)(allLines))
|
|
136
|
+
return [];
|
|
137
|
+
// Issue #1897: this accumulator, not extractResponse(), is what actually feeds
|
|
138
|
+
// cleanCopilotResponse() in checkForResponse(), so copilot's bottom-pinned
|
|
139
|
+
// chrome has to be cut HERE or the status bar joins the transcript on every
|
|
140
|
+
// poll and is saved as the agent's reply (" Working esc interrupt GPT-5.6
|
|
141
|
+
// Terra"). Cut positionally: copilot prints its own status-bar vocabulary as
|
|
142
|
+
// body text when asked to, so no wording rule can tell the two apart.
|
|
143
|
+
const chromeStart = (0, cli_patterns_1.findCopilotChromeStart)(allLines);
|
|
144
|
+
const lines = chromeStart >= 0 ? allLines.slice(0, chromeStart) : allLines;
|
|
101
145
|
const contentLines = [];
|
|
146
|
+
// Issue #1897: copilot wraps a long prompt echo onto indented continuation rows.
|
|
147
|
+
// Normalisation trims them, so downstream they are indistinguishable from reply
|
|
148
|
+
// text and `cleanCopilotResponse`'s "everything after the last ❯" rule opened
|
|
149
|
+
// the saved reply with the tail of the operator's own question. The echo row
|
|
150
|
+
// itself is kept — it is the turn boundary the cleaner anchors on.
|
|
151
|
+
let inUserEcho = false;
|
|
102
152
|
for (const line of lines) {
|
|
153
|
+
// Issue #1897: tested before normalisation. normalizeCopilotLine() deletes
|
|
154
|
+
// every U+2500..U+257F glyph, so COPILOT_SKIP_PATTERNS' `[╭╮╰╯│]` rule can
|
|
155
|
+
// never fire below -- which is how copilot's reasoning block (rows of
|
|
156
|
+
// `│ <chain of thought>` under a `⌄ Thought for 41s` header) reached History
|
|
157
|
+
// as the reply.
|
|
158
|
+
if (cli_patterns_1.COPILOT_BOX_ROW_PATTERN.test(line)) {
|
|
159
|
+
inUserEcho = false;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if (cli_patterns_1.COPILOT_USER_ECHO_PATTERN.test(line)) {
|
|
163
|
+
inUserEcho = true;
|
|
164
|
+
}
|
|
165
|
+
else if (inUserEcho) {
|
|
166
|
+
if (cli_patterns_1.COPILOT_TRANSCRIPT_CONTINUATION_PATTERN.test(line))
|
|
167
|
+
continue;
|
|
168
|
+
inUserEcho = false;
|
|
169
|
+
}
|
|
103
170
|
const normalized = normalizeCopilotLine(line);
|
|
104
171
|
if (!normalized)
|
|
105
172
|
continue;
|
|
@@ -35,6 +35,10 @@ const db_1 = require("../../lib/db");
|
|
|
35
35
|
const tasks_db_1 = require("../../lib/db/tasks-db");
|
|
36
36
|
const git_default_branch_1 = require("../../lib/git/git-default-branch");
|
|
37
37
|
const logger_1 = require("../../lib/logger");
|
|
38
|
+
// Issue #2000: deep path, not the `@/lib/push` barrel — several suites replace
|
|
39
|
+
// that barrel with a stub declaring only `notifyPushSubscribers`, and a call
|
|
40
|
+
// reached through it would be `undefined` in exactly those tests.
|
|
41
|
+
const failure_push_notifier_1 = require("../../lib/push/failure-push-notifier");
|
|
38
42
|
const contract_message_1 = require("../../lib/tasks/contract-message");
|
|
39
43
|
const task_transition_service_1 = require("../../lib/tasks/task-transition-service");
|
|
40
44
|
const env_clean_gate_1 = require("./env-clean-gate");
|
|
@@ -264,6 +268,42 @@ class TailBuffer {
|
|
|
264
268
|
return this.chunks.length === 0 ? '' : Buffer.concat(this.chunks).toString('utf8');
|
|
265
269
|
}
|
|
266
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* The environment a gate command runs in (Issue #1994).
|
|
273
|
+
*
|
|
274
|
+
* A gate is a re-run of the repository's CI check, so what it must inherit is
|
|
275
|
+
* CI's shape — not the shape of whatever process happens to be hosting the
|
|
276
|
+
* runner. `CI=true` was already normalized for that reason; `NODE_ENV` is the
|
|
277
|
+
* variable where the omission bit.
|
|
278
|
+
*
|
|
279
|
+
* Gates are spawned by the CommandMate **server**, and the server has a
|
|
280
|
+
* NODE_ENV of its own — `production` under `commandmate start`, `development`
|
|
281
|
+
* under `commandmate start --dev` and `npm run dev`. A gate that shells out to
|
|
282
|
+
* a framework build reads it. Measured on this branch: `npm run build`
|
|
283
|
+
* (Next.js 15) exits 0 with NODE_ENV unset and **exits 1 with
|
|
284
|
+
* NODE_ENV=development**, on `<Html> should not be imported outside of
|
|
285
|
+
* pages/_document` while prerendering `/404`, `/500` and `/offline`. A `build`
|
|
286
|
+
* gate would therefore have been red for every worker on every run whenever an
|
|
287
|
+
* operator had started the server with `--dev`: a verdict about the host,
|
|
288
|
+
* reported as a verdict about the diff.
|
|
289
|
+
*
|
|
290
|
+
* GitHub Actions leaves NODE_ENV unset, so dropping it is precisely what makes
|
|
291
|
+
* the gate match CI. A command that needs one says so itself, as this
|
|
292
|
+
* repository's scripts already do (`NODE_ENV=test vitest run`,
|
|
293
|
+
* `NODE_ENV=production next build`).
|
|
294
|
+
*/
|
|
295
|
+
function gateProcessEnv(gateEnv) {
|
|
296
|
+
const env = { ...process.env, CI: 'true', ...gateEnv };
|
|
297
|
+
// Removed rather than set to `undefined`: an explicitly-undefined key can
|
|
298
|
+
// still reach the child as an empty string, and `NODE_ENV=` is not the same
|
|
299
|
+
// thing as "unset".
|
|
300
|
+
delete env.NODE_ENV;
|
|
301
|
+
// `next/types/global.d.ts` augments NodeJS.ProcessEnv with a *required*
|
|
302
|
+
// readonly NODE_ENV, so the absence this function exists to produce cannot be
|
|
303
|
+
// expressed in that type. The runtime contract `spawn` uses is a plain string
|
|
304
|
+
// map, which is what is built above.
|
|
305
|
+
return env;
|
|
306
|
+
}
|
|
267
307
|
/**
|
|
268
308
|
* Run one shell command and report its exit code.
|
|
269
309
|
*
|
|
@@ -286,7 +326,7 @@ function runCommand(command, cwd, timeoutSec, maxLogTailBytes, gateEnv) {
|
|
|
286
326
|
// a different fileParallelism otherwise, and a gate that passes here but
|
|
287
327
|
// fails in CI is worse than no gate. `gateEnv` carries the per-worktree
|
|
288
328
|
// identity (#1771) and is code-supplied, never user input.
|
|
289
|
-
env:
|
|
329
|
+
env: gateProcessEnv(gateEnv),
|
|
290
330
|
detached: true,
|
|
291
331
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
292
332
|
});
|
|
@@ -939,6 +979,40 @@ function findDetachedContract(db, input, task) {
|
|
|
939
979
|
return null;
|
|
940
980
|
return latest.contract.success.requireScopeClean ? latest : null;
|
|
941
981
|
}
|
|
982
|
+
/**
|
|
983
|
+
* Tell the operator's phone that a run did not pass (Issue #2000).
|
|
984
|
+
*
|
|
985
|
+
* Called from both terminal paths — the synchronous config failure and the
|
|
986
|
+
* executed run — because both leave the caller with no verdict and something to
|
|
987
|
+
* fix. Whether it actually notifies (a contract run does not) and how it is
|
|
988
|
+
* logged belongs to `push/failure-push-notifier`; this wrapper exists only to
|
|
989
|
+
* gather the failing gate ids and to guarantee that a broken notifier cannot
|
|
990
|
+
* take a verification run down with it.
|
|
991
|
+
*
|
|
992
|
+
* Fire-and-forget: the run's verdict is already recorded and the caller is
|
|
993
|
+
* waiting on it.
|
|
994
|
+
*/
|
|
995
|
+
function notifyRunFailure(db, input, runId, taskId, status) {
|
|
996
|
+
let failedGateIds;
|
|
997
|
+
try {
|
|
998
|
+
failedGateIds = (0, db_1.getVerificationRun)(db, runId)
|
|
999
|
+
?.gates.filter((gate) => gate.status !== 'passed' && gate.status !== 'skipped')
|
|
1000
|
+
.map((gate) => gate.gateId);
|
|
1001
|
+
}
|
|
1002
|
+
catch {
|
|
1003
|
+
// The row is gone (worktree deleted mid-run). The notification is still
|
|
1004
|
+
// worth sending; it just cannot name the gates.
|
|
1005
|
+
}
|
|
1006
|
+
void (0, failure_push_notifier_1.notifyVerificationFailurePush)({
|
|
1007
|
+
worktreeId: input.worktreeId,
|
|
1008
|
+
runId,
|
|
1009
|
+
taskId,
|
|
1010
|
+
status,
|
|
1011
|
+
trigger: input.trigger,
|
|
1012
|
+
instanceId: input.instanceId ?? null,
|
|
1013
|
+
failedGateIds,
|
|
1014
|
+
}).catch(() => { });
|
|
1015
|
+
}
|
|
942
1016
|
/**
|
|
943
1017
|
* Open a verification run and execute it in the background.
|
|
944
1018
|
*
|
|
@@ -1036,6 +1110,10 @@ async function startVerification(input) {
|
|
|
1036
1110
|
});
|
|
1037
1111
|
(0, db_1.finishVerificationRun)(db, run.id, 'error');
|
|
1038
1112
|
logger.warn('verification-config-unusable', { runId: run.id, worktreeId: input.worktreeId });
|
|
1113
|
+
// Issue #2000: an unusable config leaves the verdict as absent as a red
|
|
1114
|
+
// gate does, and the operator's next move is the same — so this path
|
|
1115
|
+
// notifies too, subject to the same contract-task exclusion.
|
|
1116
|
+
notifyRunFailure(db, input, run.id, taskId, 'error');
|
|
1039
1117
|
if (trackedTask) {
|
|
1040
1118
|
// The run opened and immediately errored, so the task passes through
|
|
1041
1119
|
// `verifying` the same way it would for gates that ran: an unusable config
|
|
@@ -1086,6 +1164,11 @@ async function startVerification(input) {
|
|
|
1086
1164
|
if (trackedTask) {
|
|
1087
1165
|
recordTaskTransition(db, trackedTask.id, taskEventForRunStatus(terminalStatus), run.id);
|
|
1088
1166
|
}
|
|
1167
|
+
// Issue #2000. In the `finally` so a crashed run (which is recorded as
|
|
1168
|
+
// `error` in the catch above) notifies exactly like a judged one, and
|
|
1169
|
+
// after the task transition so the run's own history is complete before
|
|
1170
|
+
// anything is said about it.
|
|
1171
|
+
notifyRunFailure(db, input, run.id, taskId, terminalStatus);
|
|
1089
1172
|
releaseSlot();
|
|
1090
1173
|
inFlight.delete(run.id);
|
|
1091
1174
|
}
|
|
@@ -19,7 +19,12 @@ const net_1 = require("net");
|
|
|
19
19
|
const auth_1 = require("./security/auth");
|
|
20
20
|
const ip_restriction_1 = require("./security/ip-restriction");
|
|
21
21
|
const types_1 = require("./cli-tools/types");
|
|
22
|
-
|
|
22
|
+
// Issue #1984: `CLIToolManager` ではなくセッション名の規則だけを引く。ここで欲しいのは
|
|
23
|
+
// `getTool(id).getSessionName(...)` の戻り値 1 つで、7 ツールの実装は module load 時には
|
|
24
|
+
// 1 つも要らない。manager 経由の静的 import は
|
|
25
|
+
// `ws-server -> cli-tools/manager -> polling/response-poller -> ... -> ws-server` という
|
|
26
|
+
// モジュールスコープの循環の一辺でもあった。
|
|
27
|
+
const session_name_1 = require("./cli-tools/session-name");
|
|
23
28
|
const db_instance_1 = require("./db/db-instance");
|
|
24
29
|
const db_1 = require("./db");
|
|
25
30
|
const tmux_control_mode_metrics_1 = require("./tmux/tmux-control-mode-metrics");
|
|
@@ -588,8 +593,7 @@ async function handleTerminalSubscribe(ws, message) {
|
|
|
588
593
|
await clientInfo.terminalSubscription.unsubscribe();
|
|
589
594
|
clientInfo.terminalSubscription = null;
|
|
590
595
|
}
|
|
591
|
-
const
|
|
592
|
-
const sessionName = cliTool.getSessionName(worktreeId);
|
|
596
|
+
const sessionName = (0, session_name_1.resolveSessionName)(cliToolId, worktreeId);
|
|
593
597
|
const transport = (0, control_mode_tmux_transport_1.getControlModeTmuxTransport)();
|
|
594
598
|
if (transport.getSubscriberCount(sessionName) >= MAX_TERMINAL_SUBSCRIBERS_PER_SESSION) {
|
|
595
599
|
sendTerminalEvent(ws, {
|
|
@@ -837,8 +841,7 @@ function migrateWorktreeRooms(renames) {
|
|
|
837
841
|
try {
|
|
838
842
|
if (!(0, types_1.isCliToolType)(subscription.cliToolId))
|
|
839
843
|
continue;
|
|
840
|
-
|
|
841
|
-
subscription.sessionName = cliTool.getSessionName(newId);
|
|
844
|
+
subscription.sessionName = (0, session_name_1.resolveSessionName)(subscription.cliToolId, newId);
|
|
842
845
|
subscription.worktreeId = newId;
|
|
843
846
|
}
|
|
844
847
|
catch (error) {
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* The vocabulary an `ICLITool` uses to describe its own TUI (Issue #1933).
|
|
4
|
+
*
|
|
5
|
+
* 設計方針書 §4 D4 / §6.3 / §10.12 / §13.2. Three questions used to be answered
|
|
6
|
+
* by tables keyed on `CLIToolType` scattered outside the tool classes — "where
|
|
7
|
+
* is this tool's composer?", "how does it quit?", "how many rows must a status
|
|
8
|
+
* capture ask for?" — and each table had to be found and edited by anybody
|
|
9
|
+
* adding a tool. They are declarations now, and a tool answers its own.
|
|
10
|
+
*
|
|
11
|
+
* This module lives in `src/types/**` for the same reason `./terminal-keys`
|
|
12
|
+
* does: `src/lib/tmux/**` and `src/lib/cli-tools/**` both need the vocabulary,
|
|
13
|
+
* and putting it in either one would make the other import across a boundary
|
|
14
|
+
* `.eslintrc.json`'s `no-restricted-imports` rule exists to keep closed. Values
|
|
15
|
+
* and types only — nothing here touches a process.
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.GRACEFUL_EXIT_FAILURE_REASONS = exports.KEY_SEQUENCE_KEY_NAMES = void 0;
|
|
19
|
+
exports.keyStep = keyStep;
|
|
20
|
+
exports.literalStep = literalStep;
|
|
21
|
+
exports.isLiteralStep = isLiteralStep;
|
|
22
|
+
exports.isKeyStep = isKeyStep;
|
|
23
|
+
exports.isKeySequenceKeyName = isKeySequenceKeyName;
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Key sequences (受入条件 S9)
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
/**
|
|
28
|
+
* The key names a {@link KeySequence} step may name.
|
|
29
|
+
*
|
|
30
|
+
* Deliberately the same five values as `SPECIAL_KEY_VALUES` in
|
|
31
|
+
* `src/lib/tmux/tmux.ts` — `tests/unit/lib/key-sequence-1933.test.ts` pins the
|
|
32
|
+
* two lists equal. The list is duplicated rather than imported because this
|
|
33
|
+
* module must stay free of `src/lib/tmux/**` (see the module docblock); the
|
|
34
|
+
* pin is what keeps the duplication from drifting.
|
|
35
|
+
*/
|
|
36
|
+
exports.KEY_SEQUENCE_KEY_NAMES = ['Escape', 'C-c', 'C-d', 'C-m', 'Enter'];
|
|
37
|
+
/** Build a key step. */
|
|
38
|
+
function keyStep(name, delayAfterMs) {
|
|
39
|
+
return delayAfterMs === undefined ? { kind: 'key', name } : { kind: 'key', name, delayAfterMs };
|
|
40
|
+
}
|
|
41
|
+
/** Build a literal-text step. Text is always sent verbatim, never as a key. */
|
|
42
|
+
function literalStep(text, delayAfterMs) {
|
|
43
|
+
return delayAfterMs === undefined
|
|
44
|
+
? { kind: 'literal', text }
|
|
45
|
+
: { kind: 'literal', text, delayAfterMs };
|
|
46
|
+
}
|
|
47
|
+
/** Whether a step sends text rather than a key. */
|
|
48
|
+
function isLiteralStep(step) {
|
|
49
|
+
return step.kind === 'literal';
|
|
50
|
+
}
|
|
51
|
+
/** Whether a step sends a named key rather than text. */
|
|
52
|
+
function isKeyStep(step) {
|
|
53
|
+
return step.kind === 'key';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Whether `name` is a key name a {@link KeySequence} step may carry.
|
|
57
|
+
*
|
|
58
|
+
* Defense in depth against a JavaScript caller or an `as` cast: the executor
|
|
59
|
+
* refuses anything else rather than handing an unvalidated string to tmux.
|
|
60
|
+
*/
|
|
61
|
+
function isKeySequenceKeyName(name) {
|
|
62
|
+
return exports.KEY_SEQUENCE_KEY_NAMES.includes(name);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Why a graceful exit's postcondition was not met.
|
|
66
|
+
*
|
|
67
|
+
* `graceful_exit_timeout` - the tmux session still existed after the tool's
|
|
68
|
+
* own exit window. The TUI did not quit; the pane must be force-killed.
|
|
69
|
+
* `port_orphaned` - the pane is gone but the port it was allocated is still
|
|
70
|
+
* answering `/global/health` as opencode. Handing that number to the next
|
|
71
|
+
* instance makes two owners of one port: the new instance's subscription
|
|
72
|
+
* attaches to the old server and files its events against the wrong
|
|
73
|
+
* worktree, silently. The number must not be reused until it goes quiet.
|
|
74
|
+
*/
|
|
75
|
+
exports.GRACEFUL_EXIT_FAILURE_REASONS = ['graceful_exit_timeout', 'port_orphaned'];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Terminal navigation key vocabulary (Issue #1922).
|
|
4
|
+
*
|
|
5
|
+
* This lives outside `src/lib/tmux/**` on purpose. `NavigationKey` is the one
|
|
6
|
+
* tmux-adjacent symbol the browser bundle needs (`NavigationButtons.tsx` /
|
|
7
|
+
* `TerminalEscapeHatch.tsx` type their key props with it), and as long as it was
|
|
8
|
+
* declared in `src/lib/tmux/tmux.ts` those two client components had to import
|
|
9
|
+
* from the tmux module to get it — a client → tmux dependency edge that the
|
|
10
|
+
* `no-restricted-imports` guard added for §4 D4 of
|
|
11
|
+
* `docs/design/multi-agent-state-architecture.md` exists to remove.
|
|
12
|
+
*
|
|
13
|
+
* The alternative considered and rejected (D4, DR3-001) was switching the guard
|
|
14
|
+
* to `@typescript-eslint/no-restricted-imports` with `allowTypeImports: true`.
|
|
15
|
+
* That would permanently bless the edge and leave a path where deleting the word
|
|
16
|
+
* `type` from an import turns a compile-time reference into a runtime one. Moving
|
|
17
|
+
* the declaration costs one file and closes the edge outright.
|
|
18
|
+
*
|
|
19
|
+
* Values only — no tmux process access — so this module is safe from any layer.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.NAVIGATION_KEY_VALUES = void 0;
|
|
23
|
+
/**
|
|
24
|
+
* Navigation keys accepted by the special-keys API and the terminal UI.
|
|
25
|
+
*
|
|
26
|
+
* Separate from `SPECIAL_KEY_VALUES` (the `sendSpecialKey()` control keys) and
|
|
27
|
+
* from `ALLOWED_SPECIAL_KEYS` (the broader `sendSpecialKeys()` TUI set).
|
|
28
|
+
*
|
|
29
|
+
* [DR3-001] Named NAVIGATION_KEY_VALUES to avoid collision with existing SPECIAL_KEY_VALUES.
|
|
30
|
+
* [DR2-004] Exported as an `as const` array + type guard (not a Set) for immutability.
|
|
31
|
+
*/
|
|
32
|
+
exports.NAVIGATION_KEY_VALUES = [
|
|
33
|
+
'Up', 'Down', 'Left', 'Right', 'Enter', 'Escape', 'Tab', 'BTab',
|
|
34
|
+
// Issue #1017: Codex pager / edit-previous mode keys surfaced by NavigationButtons.
|
|
35
|
+
// 'q' is the pager quit key (literal char). PageUp/PageDown/Home/End are tmux named keys.
|
|
36
|
+
'PageUp', 'PageDown', 'Home', 'End', 'q',
|
|
37
|
+
];
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The vocabulary an `ICLITool` uses to describe its own TUI (Issue #1933).
|
|
3
|
+
*
|
|
4
|
+
* 設計方針書 §4 D4 / §6.3 / §10.12 / §13.2. Three questions used to be answered
|
|
5
|
+
* by tables keyed on `CLIToolType` scattered outside the tool classes — "where
|
|
6
|
+
* is this tool's composer?", "how does it quit?", "how many rows must a status
|
|
7
|
+
* capture ask for?" — and each table had to be found and edited by anybody
|
|
8
|
+
* adding a tool. They are declarations now, and a tool answers its own.
|
|
9
|
+
*
|
|
10
|
+
* This module lives in `src/types/**` for the same reason `./terminal-keys`
|
|
11
|
+
* does: `src/lib/tmux/**` and `src/lib/cli-tools/**` both need the vocabulary,
|
|
12
|
+
* and putting it in either one would make the other import across a boundary
|
|
13
|
+
* `.eslintrc.json`'s `no-restricted-imports` rule exists to keep closed. Values
|
|
14
|
+
* and types only — nothing here touches a process.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* The key names a {@link KeySequence} step may name.
|
|
18
|
+
*
|
|
19
|
+
* Deliberately the same five values as `SPECIAL_KEY_VALUES` in
|
|
20
|
+
* `src/lib/tmux/tmux.ts` — `tests/unit/lib/key-sequence-1933.test.ts` pins the
|
|
21
|
+
* two lists equal. The list is duplicated rather than imported because this
|
|
22
|
+
* module must stay free of `src/lib/tmux/**` (see the module docblock); the
|
|
23
|
+
* pin is what keeps the duplication from drifting.
|
|
24
|
+
*/
|
|
25
|
+
export declare const KEY_SEQUENCE_KEY_NAMES: readonly ["Escape", "C-c", "C-d", "C-m", "Enter"];
|
|
26
|
+
/** A tmux key name a {@link KeySequence} step may send. */
|
|
27
|
+
export type KeySequenceKeyName = typeof KEY_SEQUENCE_KEY_NAMES[number];
|
|
28
|
+
/**
|
|
29
|
+
* One step of a keystroke sequence — a *key*, or *text*.
|
|
30
|
+
*
|
|
31
|
+
* ## Why this is a discriminated union and not a string
|
|
32
|
+
*
|
|
33
|
+
* `tmux send-keys` looks its argument up in the key table before it sends
|
|
34
|
+
* anything, so the SAME string means two different things depending on a flag
|
|
35
|
+
* nobody was passing. Measured on tmux 3.5a against a private socket, with a
|
|
36
|
+
* pane running `cat` on a raw pty so the bytes are the bytes the TUI receives:
|
|
37
|
+
*
|
|
38
|
+
* ```
|
|
39
|
+
* send-keys -t X 'Escape' -> 1b (the ESC key)
|
|
40
|
+
* send-keys -t X -l 'Escape' -> 45 73 63 61 70 65 ("Escape")
|
|
41
|
+
* send-keys -t X 'Enter' -> 0d (CR)
|
|
42
|
+
* send-keys -t X -l 'Enter' -> 45 6e 74 65 72 ("Enter")
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* `grep -n "'-l'" src/lib/tmux/*.ts` returned **zero** hits before this Issue,
|
|
46
|
+
* and `sendMessageWithSubmitVerification` types the user's message body with
|
|
47
|
+
* `sendKeys(sessionName, message, false)`. So a message whose body was exactly
|
|
48
|
+
* `Escape` interrupted the agent instead of being typed, `Enter` submitted an
|
|
49
|
+
* empty composer, and `C-c` sent SIGINT — none of which produced an error, or
|
|
50
|
+
* even a differing log line.
|
|
51
|
+
*
|
|
52
|
+
* The same probe found a second, worse shape. tmux parses its arguments with
|
|
53
|
+
* getopt, and the body is positional:
|
|
54
|
+
*
|
|
55
|
+
* ```
|
|
56
|
+
* send-keys -t X '-l' -> rc 0, NOTHING sent (parsed as the -l flag)
|
|
57
|
+
* send-keys -t X '-N hello' -> rc 1, "repeat count invalid"
|
|
58
|
+
* send-keys -t X -l -- '-l' -> 2d 6c ("-l")
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* i.e. a body starting with `-` was silently swallowed and reported as a
|
|
62
|
+
* successful send. Both halves are why a literal step must reach tmux as
|
|
63
|
+
* `send-keys -l -- <text>` and a key step as `send-keys -- <name>`; see
|
|
64
|
+
* `keySequenceArgs` in `src/lib/tmux/key-sequence.ts`, which is the only place
|
|
65
|
+
* that mapping is written.
|
|
66
|
+
*
|
|
67
|
+
* `delayAfterMs` is optional and carries what a sequence's own measurements
|
|
68
|
+
* say has to elapse before the next step (opencode's 100 ms between `/exit`
|
|
69
|
+
* and its Enter, gemini's 300 ms after `C-c`). It is metadata about the step,
|
|
70
|
+
* not a third member of the union: every step is still a key or a literal.
|
|
71
|
+
*/
|
|
72
|
+
export type KeySequence = {
|
|
73
|
+
readonly kind: 'key';
|
|
74
|
+
readonly name: KeySequenceKeyName;
|
|
75
|
+
/** ms to pause after this keystroke before the next step. */
|
|
76
|
+
readonly delayAfterMs?: number;
|
|
77
|
+
} | {
|
|
78
|
+
readonly kind: 'literal';
|
|
79
|
+
readonly text: string;
|
|
80
|
+
/** ms to pause after this text before the next step. */
|
|
81
|
+
readonly delayAfterMs?: number;
|
|
82
|
+
};
|
|
83
|
+
/** Build a key step. */
|
|
84
|
+
export declare function keyStep(name: KeySequenceKeyName, delayAfterMs?: number): Extract<KeySequence, {
|
|
85
|
+
kind: 'key';
|
|
86
|
+
}>;
|
|
87
|
+
/** Build a literal-text step. Text is always sent verbatim, never as a key. */
|
|
88
|
+
export declare function literalStep(text: string, delayAfterMs?: number): Extract<KeySequence, {
|
|
89
|
+
kind: 'literal';
|
|
90
|
+
}>;
|
|
91
|
+
/** Whether a step sends text rather than a key. */
|
|
92
|
+
export declare function isLiteralStep(step: KeySequence): step is Extract<KeySequence, {
|
|
93
|
+
kind: 'literal';
|
|
94
|
+
}>;
|
|
95
|
+
/** Whether a step sends a named key rather than text. */
|
|
96
|
+
export declare function isKeyStep(step: KeySequence): step is Extract<KeySequence, {
|
|
97
|
+
kind: 'key';
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Whether `name` is a key name a {@link KeySequence} step may carry.
|
|
101
|
+
*
|
|
102
|
+
* Defense in depth against a JavaScript caller or an `as` cast: the executor
|
|
103
|
+
* refuses anything else rather than handing an unvalidated string to tmux.
|
|
104
|
+
*/
|
|
105
|
+
export declare function isKeySequenceKeyName(name: string): name is KeySequenceKeyName;
|
|
106
|
+
/**
|
|
107
|
+
* How a tool's input box is located on a captured frame.
|
|
108
|
+
*
|
|
109
|
+
* `input-line-marker` - the composer is a row that starts with a prompt
|
|
110
|
+
* marker (`>` / `❯` / `›`, optionally behind vibe-local's `ctx:N%`).
|
|
111
|
+
* Every supported tool except opencode.
|
|
112
|
+
* `opencode-box` - a bordered box with a gutter and no marker anywhere, whose
|
|
113
|
+
* rows are found structurally (#1911's chrome walk) and whose emptiness is
|
|
114
|
+
* said by its own `Ask anything...` placeholder (#1883).
|
|
115
|
+
* `unreadable` - nobody has measured this tool's box. Every send is then
|
|
116
|
+
* classified `submitted` without evidence, which is what #1906 found
|
|
117
|
+
* opencode had been doing since #1471 — so this is a state to declare
|
|
118
|
+
* knowingly, never a default to fall into.
|
|
119
|
+
*/
|
|
120
|
+
export type ComposerReader = 'input-line-marker' | 'opencode-box' | 'unreadable';
|
|
121
|
+
/**
|
|
122
|
+
* What the submit-verified sender needs to know about one tool's composer.
|
|
123
|
+
*
|
|
124
|
+
* Returned by `ICLITool.describeComposer()`; `sendMessageWithSubmitVerification`
|
|
125
|
+
* takes one so the sender no longer keys three separate module-level tables on
|
|
126
|
+
* `CLIToolType`.
|
|
127
|
+
*/
|
|
128
|
+
export interface ComposerSpec {
|
|
129
|
+
/** How the composer is found on a frame. */
|
|
130
|
+
readonly reader: ComposerReader;
|
|
131
|
+
/**
|
|
132
|
+
* Rows of pane to ask tmux for when reading the submit back.
|
|
133
|
+
*
|
|
134
|
+
* A tail window for the marker tools, whose composer is the last thing on the
|
|
135
|
+
* pane. opencode needs the whole visible frame: it centres its box under the
|
|
136
|
+
* banner until the first turn is answered, roughly 100 rows above the bottom
|
|
137
|
+
* of a 200-row pane (measured live on opencode 1.18.21 in #1906).
|
|
138
|
+
*/
|
|
139
|
+
readonly verifyCaptureLines: number;
|
|
140
|
+
/**
|
|
141
|
+
* Whether this layer may empty the composer before typing into it (#1880).
|
|
142
|
+
*
|
|
143
|
+
* True only for a tool whose input box has been captured at the production
|
|
144
|
+
* geometry, placeholder and dialogs included. Blind `C-e`+`C-u` into a box
|
|
145
|
+
* nobody has measured replaces a residual-text problem with a data-loss one.
|
|
146
|
+
*/
|
|
147
|
+
readonly clearBeforeSend: boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Enter presses for the INITIAL submit.
|
|
150
|
+
*
|
|
151
|
+
* 2 for vibe-local, whose IME mode makes the first Enter insert a newline.
|
|
152
|
+
*/
|
|
153
|
+
readonly submitEnterCount: number;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* What a status probe must ask tmux for, per tool.
|
|
157
|
+
*
|
|
158
|
+
* Returned by `ICLITool.captureSpec()`. Replaces the `if (cliToolId === …)`
|
|
159
|
+
* ladder that `src/lib/session/worktree-status-helper.ts` carried, which is
|
|
160
|
+
* outside `src/lib/cli-tools/**` and therefore had to import two tool modules
|
|
161
|
+
* for their pane heights.
|
|
162
|
+
*/
|
|
163
|
+
export interface CaptureSpec {
|
|
164
|
+
/**
|
|
165
|
+
* Rows of pane the status DETECTION path captures.
|
|
166
|
+
*
|
|
167
|
+
* A tool that paints a fixed-height alternate screen asks for exactly its own
|
|
168
|
+
* pane height, because that is all `capture-pane` can ever return for it.
|
|
169
|
+
*/
|
|
170
|
+
readonly statusLines: number;
|
|
171
|
+
/**
|
|
172
|
+
* Whether the tool renders in the terminal's alternate screen (#1268).
|
|
173
|
+
*
|
|
174
|
+
* When true tmux keeps no scrollback, every capture returns exactly
|
|
175
|
+
* `pane_height` rows, and a captured line COUNT is a screen-row count rather
|
|
176
|
+
* than a monotonic cursor — so it must never be used to decide "have I
|
|
177
|
+
* already read this?".
|
|
178
|
+
*/
|
|
179
|
+
readonly usesAlternateScreen: boolean;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* How a tool is asked to quit, and what must be true afterwards.
|
|
183
|
+
*
|
|
184
|
+
* Returned by `ICLITool.gracefulExitSequence()`.
|
|
185
|
+
*/
|
|
186
|
+
export interface GracefulExitSpec {
|
|
187
|
+
/** The keystrokes that ask the TUI to quit, in order. */
|
|
188
|
+
readonly keys: readonly KeySequence[];
|
|
189
|
+
/**
|
|
190
|
+
* ms to wait after the last keystroke before the postcondition is checked.
|
|
191
|
+
*
|
|
192
|
+
* Per tool because the shutdowns differ by an order of magnitude: copilot
|
|
193
|
+
* 1.0.80 was measured between 1.006 s and 2.193 s (#1905), opencode 1.18.21
|
|
194
|
+
* at ~0.45 s, and the Ctrl-D tools inside the generic 500 ms.
|
|
195
|
+
*/
|
|
196
|
+
readonly exitWaitMs: number;
|
|
197
|
+
/**
|
|
198
|
+
* Whether this tool owns a loopback HTTP server whose port is handed back on
|
|
199
|
+
* exit — opencode alone, whose TUI *is* an HTTP server once it is given
|
|
200
|
+
* `--port` (#1758 §5.1.2).
|
|
201
|
+
*
|
|
202
|
+
* When true, "the pane is gone" is not the whole postcondition: the assigned
|
|
203
|
+
* port must also stop answering `/global/health` before it may be handed to
|
|
204
|
+
* the next instance. See {@link GracefulExitFailureReason}.
|
|
205
|
+
*/
|
|
206
|
+
readonly ownsLoopbackServer: boolean;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Why a graceful exit's postcondition was not met.
|
|
210
|
+
*
|
|
211
|
+
* `graceful_exit_timeout` - the tmux session still existed after the tool's
|
|
212
|
+
* own exit window. The TUI did not quit; the pane must be force-killed.
|
|
213
|
+
* `port_orphaned` - the pane is gone but the port it was allocated is still
|
|
214
|
+
* answering `/global/health` as opencode. Handing that number to the next
|
|
215
|
+
* instance makes two owners of one port: the new instance's subscription
|
|
216
|
+
* attaches to the old server and files its events against the wrong
|
|
217
|
+
* worktree, silently. The number must not be reused until it goes quiet.
|
|
218
|
+
*/
|
|
219
|
+
export declare const GRACEFUL_EXIT_FAILURE_REASONS: readonly ["graceful_exit_timeout", "port_orphaned"];
|
|
220
|
+
/** Reason token for a graceful exit that did not meet its postcondition. */
|
|
221
|
+
export type GracefulExitFailureReason = typeof GRACEFUL_EXIT_FAILURE_REASONS[number];
|
|
222
|
+
/**
|
|
223
|
+
* The postcondition's verdict.
|
|
224
|
+
*
|
|
225
|
+
* `ok: false` always carries a reason, and the reason is always one a caller can
|
|
226
|
+
* act on: both of them mean "force kill", and `port_orphaned` additionally means
|
|
227
|
+
* "do not hand this port out yet".
|
|
228
|
+
*/
|
|
229
|
+
export type GracefulExitVerdict = {
|
|
230
|
+
readonly ok: true;
|
|
231
|
+
} | {
|
|
232
|
+
readonly ok: false;
|
|
233
|
+
readonly reason: GracefulExitFailureReason;
|
|
234
|
+
};
|
|
235
|
+
//# sourceMappingURL=cli-tool-contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-tool-contracts.d.ts","sourceRoot":"","sources":["../../src/types/cli-tool-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,mDAAoD,CAAC;AAExF,2DAA2D;AAC3D,MAAM,MAAM,kBAAkB,GAAG,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,MAAM,WAAW,GACnB;IACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEN,wBAAwB;AACxB,wBAAgB,OAAO,CACrB,IAAI,EAAE,kBAAkB,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAEvC;AAED,+EAA+E;AAC/E,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAI3C;AAED,mDAAmD;AACnD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,GAChB,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAEnD;AAED,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAE1F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB,CAE7E;AAMD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,cAAc,GAAG,YAAY,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAMD;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;;;;OAOG;IACH,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC;AAMD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;CACtC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B,qDAAsD,CAAC;AAEjG,4EAA4E;AAC5E,MAAM,MAAM,yBAAyB,GAAG,OAAO,6BAA6B,CAAC,MAAM,CAAC,CAAC;AAErF;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GACrB;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAA;CAAE,CAAC"}
|