commandmate 0.49.0 → 0.49.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 +238 -231
- package/.next/app-path-routes-manifest.json +19 -18
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/release-notes/route_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_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 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +2 -2
- 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 +2 -2
- 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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route.js +1 -0
- package/.next/server/app/api/relays/[relayId]/route.js.nft.json +1 -0
- package/.next/server/app/api/relays/[relayId]/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/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/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/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 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/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.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]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/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]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +144 -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 +3 -3
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/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 +103 -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 +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/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/apply-default-agents/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/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.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_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +11 -11
- 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 +19 -18
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/3773.js +1 -0
- package/.next/server/chunks/3801.js +31 -0
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/{9130.js → 5630.js} +1 -1
- package/.next/server/chunks/5775.js +1 -0
- package/.next/server/chunks/610.js +1 -0
- package/.next/server/chunks/6119.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6486.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6808.js +4 -0
- package/.next/server/chunks/7023.js +14 -0
- package/.next/server/chunks/7604.js +1 -1
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +15 -15
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8807.js +63 -53
- package/.next/server/chunks/8918.js +103 -1
- package/.next/server/chunks/9198.js +144 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9627.js +1 -1
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-ab92ae9837c39dce.js → 2407-675ba6b21844dc3b.js} +1 -1
- package/.next/static/chunks/3931-1a1abab16248f14d.js +1 -0
- package/.next/static/chunks/8606-ce17ffa77f39608e.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/release-notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/relays/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/templates/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/layout-8bfac4724277b47f.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/sessions/page-890fd50ec9739973.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-a4f129c451de7859.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-f6d3ab8185d93aae.js +1 -0
- package/.next/static/css/c1e307d05daf93b6.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/relays/[relayId]/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +178 -13
- package/dist/cli/commands/message-dispatch.d.ts +25 -5
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +92 -6
- package/dist/cli/commands/relays.d.ts +25 -2
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +69 -5
- package/dist/cli/commands/respond.d.ts +12 -0
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +63 -1
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +6 -4
- package/dist/cli/commands/wait-hook-stop-settle.d.ts +66 -0
- package/dist/cli/commands/wait-hook-stop-settle.d.ts.map +1 -0
- package/dist/cli/commands/wait-hook-stop-settle.js +150 -0
- package/dist/cli/commands/wait-instance.d.ts +21 -0
- package/dist/cli/commands/wait-instance.d.ts.map +1 -0
- package/dist/cli/commands/wait-instance.js +41 -0
- package/dist/cli/commands/wait-notices.d.ts +87 -0
- package/dist/cli/commands/wait-notices.d.ts.map +1 -0
- package/dist/cli/commands/wait-notices.js +301 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts +15 -0
- package/dist/cli/commands/wait-poll-bookkeeping.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-bookkeeping.js +57 -0
- package/dist/cli/commands/wait-poll-state.d.ts +118 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -0
- package/dist/cli/commands/wait-poll-state.js +6 -0
- package/dist/cli/commands/wait-timing.d.ts +46 -0
- package/dist/cli/commands/wait-timing.d.ts.map +1 -0
- package/dist/cli/commands/wait-timing.js +99 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts +284 -0
- package/dist/cli/commands/wait-turn-boundary.d.ts.map +1 -0
- package/dist/cli/commands/wait-turn-boundary.js +427 -0
- package/dist/cli/commands/wait-verify.d.ts +50 -0
- package/dist/cli/commands/wait-verify.d.ts.map +1 -0
- package/dist/cli/commands/wait-verify.js +124 -0
- package/dist/cli/commands/wait.d.ts +6 -105
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +207 -959
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +23 -1
- package/dist/cli/types/api-responses.d.ts +47 -3
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +15 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +7 -1
- package/dist/cli/utils/reply-ledger.d.ts +79 -0
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +141 -1
- package/dist/lib/session/send-attempt-types.d.ts +23 -1
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +9 -1
- package/dist/server/locales/en/worktree.json +18 -3
- package/dist/server/locales/ja/worktree.json +18 -3
- package/dist/server/src/lib/auto-yes-poller.js +49 -10
- package/dist/server/src/lib/cli-tools/antigravity.js +40 -7
- package/dist/server/src/lib/cli-tools/codex.js +60 -11
- package/dist/server/src/lib/cli-tools/command-code-plan-review.js +24 -2
- package/dist/server/src/lib/cli-tools/copilot.js +120 -30
- package/dist/server/src/lib/cli-tools/gemini.js +28 -9
- package/dist/server/src/lib/cli-tools/opencode.js +55 -13
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +580 -0
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +356 -621
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/pre-migration-backup.js +266 -0
- package/dist/server/src/lib/db/migrations/runner.js +37 -4
- package/dist/server/src/lib/db/migrations/v62-session-relays-bind.js +102 -0
- package/dist/server/src/lib/db/relay-bind-db.js +437 -0
- package/dist/server/src/lib/db/relay-db.js +59 -96
- package/dist/server/src/lib/detection/upstream-faults.js +40 -6
- package/dist/server/src/lib/hooks/sources/opencode/client.js +12 -6
- package/dist/server/src/lib/polling/response-checker.js +7 -5
- package/dist/server/src/lib/prompt-answer-errors.js +288 -0
- package/dist/server/src/lib/prompt-answer-sender.js +264 -288
- package/dist/server/src/lib/push/failure-episode-state.js +4 -1
- package/dist/server/src/lib/realtime/terminal-broadcast.js +1 -4
- package/dist/server/src/lib/realtime-snippet.js +54 -0
- package/dist/server/src/lib/relay/relay-bind.js +294 -0
- package/dist/server/src/lib/relay/relay-boot.js +51 -0
- package/dist/server/src/lib/relay/relay-bound-reply.js +519 -0
- package/dist/server/src/lib/relay/relay-delivery.js +134 -220
- package/dist/server/src/lib/relay/relay-messages.js +39 -4
- package/dist/server/src/lib/relay/relay-overlap.js +92 -0
- package/dist/server/src/lib/relay/relay-system-line.js +3 -2
- package/dist/server/src/lib/relay/types.js +12 -1
- package/dist/server/src/lib/session/agent-session-lifecycle.js +18 -0
- package/dist/server/src/lib/session/claude-session.js +41 -6
- package/dist/server/src/lib/session/composer-clear.js +54 -1
- package/dist/server/src/lib/session/current-output-builder.js +21 -5
- package/dist/server/src/lib/session/instance-input-lock.js +664 -0
- package/dist/server/src/lib/session/send-attempt-state.js +17 -0
- package/dist/server/src/lib/session/send-attempt-types.js +9 -1
- package/dist/server/src/lib/session/send-user-message.js +82 -13
- package/package.json +1 -1
- package/release-notes/0.49.1.json +66 -0
- package/.next/server/chunks/1210.js +0 -1
- package/.next/server/chunks/1945.js +0 -14
- package/.next/server/chunks/1990.js +0 -103
- package/.next/server/chunks/4194.js +0 -67
- package/.next/server/chunks/4280.js +0 -1
- package/.next/server/chunks/5845.js +0 -1
- package/.next/server/chunks/720.js +0 -103
- package/.next/server/chunks/936.js +0 -1
- package/.next/server/chunks/9540.js +0 -1
- package/.next/static/chunks/8606-cf6bdbff44a764cf.js +0 -1
- package/.next/static/chunks/9079-987939d231704218.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/release-notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/relays/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/templates/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/direct-input/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/strict/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/layout-aa8e66164a4367af.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/sessions/page-cfd645305e25fd33.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-a8d7886703ffc7b4.js +0 -1
- package/.next/static/css/db8959555c3d9c96.css +0 -1
- /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → fqfSDqQMweROeHUzOt_m1}/_buildManifest.js +0 -0
- /package/.next/static/{3_JtAZaKMJEDFIIfkHv4n → fqfSDqQMweROeHUzOt_m1}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wait Command - stderr notices about Auto-Yes and pane obstructions
|
|
3
|
+
* Issue #3964: split out of wait.ts; wait.ts re-exports what it exported.
|
|
4
|
+
*/
|
|
5
|
+
import type { CurrentOutputResponse } from '../types/api-responses';
|
|
6
|
+
/**
|
|
7
|
+
* The cause sentence to append when the frame carries a pane obstruction, or ''
|
|
8
|
+
* (Issue #2095).
|
|
9
|
+
*
|
|
10
|
+
* Appended rather than substituted, and no exit code moves: the frame is
|
|
11
|
+
* genuinely unclassified and `wait` was already right to stop on it. What it
|
|
12
|
+
* could not say before is WHY, which left an operator with `capture --pane` and
|
|
13
|
+
* a screenful of box drawing to work it out from.
|
|
14
|
+
*
|
|
15
|
+
* Empty for a server too old to publish the field, which is the same output
|
|
16
|
+
* `wait` produced before this Issue.
|
|
17
|
+
*/
|
|
18
|
+
export declare function describePaneObstruction(data: CurrentOutputResponse): string;
|
|
19
|
+
type LastSuppression = NonNullable<NonNullable<CurrentOutputResponse['autoYes']>['lastSuppression']>;
|
|
20
|
+
/**
|
|
21
|
+
* The suppression currently blocking this session, or null.
|
|
22
|
+
*
|
|
23
|
+
* Issue #3863: with the Auto-Yes answer mode in effect (`autoYesAnswerMode`)
|
|
24
|
+
* when the server publishes one — what `question-left-to-human` and
|
|
25
|
+
* `recommended-option-unidentified` depend on.
|
|
26
|
+
*/
|
|
27
|
+
export declare function activeSuppression(data: CurrentOutputResponse, now: number): {
|
|
28
|
+
suppression: LastSuppression;
|
|
29
|
+
ageSeconds: number;
|
|
30
|
+
answerMode?: string;
|
|
31
|
+
} | null;
|
|
32
|
+
/**
|
|
33
|
+
* One stderr line naming what is holding this prompt (Issue #1699).
|
|
34
|
+
*
|
|
35
|
+
* `wait` used to print only "Waiting for human response...", which reads the
|
|
36
|
+
* same whether a human was always going to answer or whether Auto-Yes silently
|
|
37
|
+
* refused to. That ambiguity is what let a deny pattern matching a finished turn
|
|
38
|
+
* stall two workers unnoticed; the pattern and the reason code belong on screen.
|
|
39
|
+
*
|
|
40
|
+
* Issue #1843: the cause is chosen per reason rather than asserted. `reason=` is
|
|
41
|
+
* in the payload either way, so the prefix is the only part that can lie — and it
|
|
42
|
+
* did, for every non-contract suppression.
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatSuppressionNotice(suppression: LastSuppression, ageSeconds: number, answerMode?: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* One stderr line saying Auto-Yes is off on this instance because the server
|
|
47
|
+
* restarted (Issue #3730), or null.
|
|
48
|
+
*
|
|
49
|
+
* Only words: the prompt was going to be reported either way — an instance
|
|
50
|
+
* whose grant the restart released is an instance with Auto-Yes off, and exit
|
|
51
|
+
* 10 for it is exactly the hand-back it always was. What this adds is the WHY,
|
|
52
|
+
* so a delegating agent re-enables Auto-Yes instead of guessing. A server
|
|
53
|
+
* older than the reason sends none, and nothing is printed.
|
|
54
|
+
*
|
|
55
|
+
* The command it suggests names the instance this wait is about: without
|
|
56
|
+
* `--instance`, `auto-yes --enable` arms the worktree's default primary, which
|
|
57
|
+
* for an alias (or a non-default tool) is another instance — the waited-on one
|
|
58
|
+
* would stay off while a grant went somewhere nobody asked for. The instance is
|
|
59
|
+
* the resolved `--instance` when one was given, else the CLI tool the server
|
|
60
|
+
* answered for (a primary's instance ID is its tool ID).
|
|
61
|
+
*
|
|
62
|
+
* @param instanceId - The resolved `--instance` of this wait, if any
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatRestartReleaseNotice(worktreeId: string, data: CurrentOutputResponse, instanceId?: string): string | null;
|
|
65
|
+
/**
|
|
66
|
+
* One stderr line saying Auto-Yes pressed Enter on THIS prompt (Issue #3397), or
|
|
67
|
+
* null when the record is absent or about another screen.
|
|
68
|
+
*
|
|
69
|
+
* The prompt is one CommandMate could not read (the window offers direct input
|
|
70
|
+
* for it). `sent` — Auto-Yes confirmed whatever was selected; `no-effect` — the
|
|
71
|
+
* same screen outlived the Enter, no second one was sent, and it is a human's
|
|
72
|
+
* again. An outcome this CLI does not know is named verbatim (#1843's rule).
|
|
73
|
+
* `currentPrompt` is the server's judgement that the record is about the
|
|
74
|
+
* `promptData` of the same response, so an Enter sent to an earlier screen is
|
|
75
|
+
* never reported against this one.
|
|
76
|
+
*/
|
|
77
|
+
export declare function formatEnterFallbackNotice(data: CurrentOutputResponse, now: number): string | null;
|
|
78
|
+
/**
|
|
79
|
+
* Issue #3821: the server's own word that Auto-Yes left this prompt to a human
|
|
80
|
+
* (`autoYesDecision.state === 'withheld'`) — `server-poller-inactive` when no
|
|
81
|
+
* poller runs for the instance, or a stop the suppression record does not
|
|
82
|
+
* carry. Read only when the server publishes the field; an older one leaves
|
|
83
|
+
* `wait` holding as before.
|
|
84
|
+
*/
|
|
85
|
+
export declare function decisionWithheldReason(data: CurrentOutputResponse): string | null;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=wait-notices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-notices.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-notices.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAA4B,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAe9F;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAS3E;AAmCD,KAAK,eAAe,GAAG,WAAW,CAChC,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CACjE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,qBAAqB,EAC3B,GAAG,EAAE,MAAM,GACV;IAAE,WAAW,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBlF;AA+GD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAerH;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,qBAAqB,EAC3B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CAMf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAajG;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAIjF"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* wait Command - stderr notices about Auto-Yes and pane obstructions
|
|
4
|
+
* Issue #3964: split out of wait.ts; wait.ts re-exports what it exported.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.describePaneObstruction = describePaneObstruction;
|
|
8
|
+
exports.activeSuppression = activeSuppression;
|
|
9
|
+
exports.formatSuppressionNotice = formatSuppressionNotice;
|
|
10
|
+
exports.formatRestartReleaseNotice = formatRestartReleaseNotice;
|
|
11
|
+
exports.formatEnterFallbackNotice = formatEnterFallbackNotice;
|
|
12
|
+
exports.decisionWithheldReason = decisionWithheldReason;
|
|
13
|
+
/**
|
|
14
|
+
* The keystroke that closes opencode's sidebar, in opencode's own notation
|
|
15
|
+
* (Issue #2095).
|
|
16
|
+
*
|
|
17
|
+
* A local copy of `OPENCODE_SIDEBAR_RECOVERY_CHORD` from
|
|
18
|
+
* `src/lib/detection/opencode-pane-obstruction.ts` and not an import: the CLI
|
|
19
|
+
* builds with `"paths": {}` (tsconfig.cli.json) and cannot reach `@/lib` at all,
|
|
20
|
+
* which is why `api-responses.ts` mirrors payload shapes rather than importing
|
|
21
|
+
* them. Taken from opencode's own keybind table, which its `ctrl+p` palette
|
|
22
|
+
* prints as `Show sidebar ctrl+x b`.
|
|
23
|
+
*/
|
|
24
|
+
const OPENCODE_SIDEBAR_RECOVERY_CHORD = 'ctrl+x b';
|
|
25
|
+
/**
|
|
26
|
+
* The cause sentence to append when the frame carries a pane obstruction, or ''
|
|
27
|
+
* (Issue #2095).
|
|
28
|
+
*
|
|
29
|
+
* Appended rather than substituted, and no exit code moves: the frame is
|
|
30
|
+
* genuinely unclassified and `wait` was already right to stop on it. What it
|
|
31
|
+
* could not say before is WHY, which left an operator with `capture --pane` and
|
|
32
|
+
* a screenful of box drawing to work it out from.
|
|
33
|
+
*
|
|
34
|
+
* Empty for a server too old to publish the field, which is the same output
|
|
35
|
+
* `wait` produced before this Issue.
|
|
36
|
+
*/
|
|
37
|
+
function describePaneObstruction(data) {
|
|
38
|
+
const obstruction = data.paneObstruction;
|
|
39
|
+
if (!obstruction)
|
|
40
|
+
return '';
|
|
41
|
+
return (` Cause: paneObstruction=${obstruction.id} — a second column is sharing rows with the ` +
|
|
42
|
+
`transcript (it reads ${JSON.stringify(obstruction.matchedText)}), which covers the marker ` +
|
|
43
|
+
`that ends a turn. Press \`${OPENCODE_SIDEBAR_RECOVERY_CHORD}\` in the pane to close ` +
|
|
44
|
+
`opencode's sidebar.`);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* How recent `autoYes.lastSuppression` must be to be reported as the reason this
|
|
48
|
+
* wait is blocked (Issue #1699).
|
|
49
|
+
*
|
|
50
|
+
* The record is refreshed on every poll for as long as the suppressed prompt is
|
|
51
|
+
* on screen, so a fresh timestamp means "this is happening now" while an old one
|
|
52
|
+
* is a historical suppression of some earlier prompt. The window is generous
|
|
53
|
+
* against the server's own poll interval — being a few seconds late with a true
|
|
54
|
+
* report beats staying silent, which is the failure this exists to fix.
|
|
55
|
+
*
|
|
56
|
+
* Issue #2463 reads the same window as "the policy withheld THIS prompt", which
|
|
57
|
+
* is what ends the Auto-Yes hold at once. `current-output` publishes no start
|
|
58
|
+
* time for a scraped prompt, so the push gate's `suppression.at >= waitingSince`
|
|
59
|
+
* (`src/lib/push/prompt-push-gate.ts`) cannot be computed here; a record that is
|
|
60
|
+
* still being re-stamped is the CLI's reading of it. Using one window for both
|
|
61
|
+
* keeps the hold and the payload in agreement: an exit 10 carries
|
|
62
|
+
* `autoYesSuppression` exactly when the hold judged the answer withheld. The
|
|
63
|
+
* error runs towards reporting — a withheld answer to an earlier prompt, under a
|
|
64
|
+
* minute old, still ends the hold, which is the pre-#2463 exit rather than a
|
|
65
|
+
* new failure.
|
|
66
|
+
*
|
|
67
|
+
* Issue #3798: a server that names the waiting episodes does what the push gate
|
|
68
|
+
* does — the record's `episodeId` against the payload's
|
|
69
|
+
* `autoYes.waitingEpisodeId`, which decide when both are present: another id
|
|
70
|
+
* (or no wait open) is a record of an earlier wait, however recent; the same
|
|
71
|
+
* id is this wait's. Either one missing (an older server, a record written
|
|
72
|
+
* before any wait was open), this window decides as before. Whichever
|
|
73
|
+
* decides, a record the server marks `lastSuppressionAnswered` — Auto-Yes
|
|
74
|
+
* answered the open wait after it was written — is history, not this wait's
|
|
75
|
+
* reason, as the push gate reads it: the hold goes on.
|
|
76
|
+
*/
|
|
77
|
+
const SUPPRESSION_FRESH_MS = 60_000;
|
|
78
|
+
/**
|
|
79
|
+
* The suppression currently blocking this session, or null.
|
|
80
|
+
*
|
|
81
|
+
* Issue #3863: with the Auto-Yes answer mode in effect (`autoYesAnswerMode`)
|
|
82
|
+
* when the server publishes one — what `question-left-to-human` and
|
|
83
|
+
* `recommended-option-unidentified` depend on.
|
|
84
|
+
*/
|
|
85
|
+
function activeSuppression(data, now) {
|
|
86
|
+
// No `autoYes` at all (a session that is not running, Issue #3300) reads as
|
|
87
|
+
// "nothing was withheld", the same as a null record.
|
|
88
|
+
const suppression = data.autoYes?.lastSuppression;
|
|
89
|
+
if (!suppression)
|
|
90
|
+
return null;
|
|
91
|
+
const ageMs = now - suppression.at;
|
|
92
|
+
const waitId = data.autoYes?.waitingEpisodeId;
|
|
93
|
+
if (suppression.episodeId !== undefined && waitId !== undefined) {
|
|
94
|
+
if (suppression.episodeId !== waitId)
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
else if (ageMs > SUPPRESSION_FRESH_MS) {
|
|
98
|
+
// A negative age is clock skew between the CLI and the server, not staleness.
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
if (data.autoYes?.lastSuppressionAnswered === true)
|
|
102
|
+
return null;
|
|
103
|
+
const answerMode = data.autoYesAnswerMode;
|
|
104
|
+
return {
|
|
105
|
+
suppression,
|
|
106
|
+
ageSeconds: Math.max(0, Math.round(ageMs / 1000)),
|
|
107
|
+
...(answerMode !== undefined ? { answerMode } : {}),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** The wording for the four reasons a contract's `autoYes` block really authors. */
|
|
111
|
+
const CONTRACT_POLICY_CAUSE = 'by contract policy';
|
|
112
|
+
/**
|
|
113
|
+
* What withheld the answer, in the words `wait` puts on stderr (Issue #1843).
|
|
114
|
+
*
|
|
115
|
+
* A Record over the whole reason union rather than one fixed phrase: adding a
|
|
116
|
+
* reason to {@link AutoYesSuppressionReason} without deciding what `wait` should
|
|
117
|
+
* say about it is a compile error here, which is the point. Until #1843 the
|
|
118
|
+
* notice hard-coded "by contract policy" for every reason, so #1829's
|
|
119
|
+
* `agent-launch-dialog` — a product-side decision the poller makes with no
|
|
120
|
+
* contract in sight (`suppressIfNotOursToAnswer` in
|
|
121
|
+
* `src/lib/polling/auto-yes-prompt-suppression.ts`: codex's lifecycle dialogs,
|
|
122
|
+
* gemini's folder trust since #3776 and copilot's since #3790) — sent operators
|
|
123
|
+
* of contract-less worktrees hunting for a `denyPatterns` entry that did not
|
|
124
|
+
* exist.
|
|
125
|
+
*
|
|
126
|
+
* The three sites that record a suppression are covered: the poller's launch-dialog
|
|
127
|
+
* branch (`agent-launch-dialog`), the poller's policy branch and
|
|
128
|
+
* `lib/hooks/permission-decision-service.ts` (both the four `evaluatePolicyAgainstTexts`
|
|
129
|
+
* verdicts, which is why those four keep the pre-#1843 wording exactly), and
|
|
130
|
+
* the poller's stopped-answer branch (`partial-answer`, Issue #3706 / #3713),
|
|
131
|
+
* and the poller's agy trust-screen branch (`startup-trust-unhandled`, Issue #3757),
|
|
132
|
+
* and the poller's question confirm-page branch (`question-confirm-page`, Issue #3748),
|
|
133
|
+
* and the poller's question branch (`question-left-to-human`, Issue #3822),
|
|
134
|
+
* and the resolver's permission-row reading (`allow-once-unidentified`, Issue #3822),
|
|
135
|
+
* and the resolver's choice of a question's recommended option
|
|
136
|
+
* (`recommended-option-unidentified`, Issue #3863),
|
|
137
|
+
* and the poller's agy receipt-gate branch (`no-hook-receipt`, Issue #3767),
|
|
138
|
+
* and a contract lookup that failed on either of the policy paths
|
|
139
|
+
* (`policy-lookup-failed`, Issue #3822).
|
|
140
|
+
*/
|
|
141
|
+
const SUPPRESSION_CAUSE = {
|
|
142
|
+
'mode-off': CONTRACT_POLICY_CAUSE,
|
|
143
|
+
'deny-pattern': CONTRACT_POLICY_CAUSE,
|
|
144
|
+
'deny-pattern-unusable': CONTRACT_POLICY_CAUSE,
|
|
145
|
+
'type-not-allowed': CONTRACT_POLICY_CAUSE,
|
|
146
|
+
// Issue #3822. Not "by contract policy": the contract could not be read at
|
|
147
|
+
// all, so nothing it says was applied. Withheld rather than answered, since
|
|
148
|
+
// the contract may state `off`; it clears once the server reads it again.
|
|
149
|
+
'policy-lookup-failed': 'because the server could not read the execution contract (the database lookup failed), so Auto-Yes does not answer until it can; check the server log for policy-lookup-failed',
|
|
150
|
+
// Issue #3790: after the launch window the poller still leaves copilot's and
|
|
151
|
+
// gemini's trust dialogs alone when the cursor is not on the safe row, and
|
|
152
|
+
// nobody else answers them then.
|
|
153
|
+
'agent-launch-dialog': "while the agent's launch dialog was on screen; if it stays after the launch (copilot's cursor on 2. or 3., gemini's not on 1. Trust folder), answer it at the pane",
|
|
154
|
+
// Issue #1924. Deliberately not "by contract policy": no contract was
|
|
155
|
+
// consulted. The frame looked like a numbered list to the generic estimator
|
|
156
|
+
// and like prose to the tool's own detector, and an operator who reads this
|
|
157
|
+
// should go and look at the pane rather than at `denyPatterns`.
|
|
158
|
+
'unclassified-frame': 'because no tool-specific dialog detector recognised the frame',
|
|
159
|
+
// Issue #3713 (#3706's reason). Not "by contract policy" either: an earlier
|
|
160
|
+
// Auto-Yes answer was stopped with some of its keys already in the input, and
|
|
161
|
+
// typing it again would append to them, so the prompt waits for a human.
|
|
162
|
+
// Issue #3880: or a send of it (Auto-Yes's, or a person's that failed) ended
|
|
163
|
+
// without tmux confirming it, and no key may be known to be there. The #3713
|
|
164
|
+
// sentence is kept as it was and the other case follows it.
|
|
165
|
+
'partial-answer': "because an earlier answer left partial input; Auto-Yes is waiting for a human (or that answer's send could not be confirmed, so the input may hold it: check the pane, then answer; an answer that goes through releases the hold)",
|
|
166
|
+
// Issue #3757. agy's startup folder-trust screen: the launch's to confirm, not
|
|
167
|
+
// Auto-Yes's, and agy drew it after the launch window had ended.
|
|
168
|
+
'startup-trust-unhandled': "because agy's startup folder-trust confirmation is the launch's to answer, not Auto-Yes's; the next send confirms it once, or answer it at the pane",
|
|
169
|
+
// Issue #3748. The AskUserQuestion confirm page (`Submit` / `Cancel`): the
|
|
170
|
+
// tool's own reader recognised it, and `Submit` commits whatever stands as the
|
|
171
|
+
// answers, so it waits for a human. Was recorded as `unclassified-frame`,
|
|
172
|
+
// whose wording above says the opposite (nothing recognised the frame).
|
|
173
|
+
'question-confirm-page': "because the question's Submit/Cancel confirmation commits the answers as they stand, so Auto-Yes leaves it to a human",
|
|
174
|
+
// Issue #3822. A question the agent asks the operator (an AskUserQuestion
|
|
175
|
+
// picker, OpenCode V2's question form): Auto-Yes answers permissions only,
|
|
176
|
+
// and no contract setting delegates the question. Issue #3863: since the
|
|
177
|
+
// answer modes, that is the `careful` mode's rule (and OpenCode V2's form
|
|
178
|
+
// under either mode); `answerMode=` on the line says which mode was on.
|
|
179
|
+
'question-left-to-human': 'because the agent is asking a question, and Auto-Yes answers permissions only (the careful answer mode, or a question form no mode answers); answer it at the pane (prompt --json, respond), or turn Auto-Yes on with --answer-mode recommended to have it pick the recommended option',
|
|
180
|
+
// Issue #3822. A permission dialog none of whose rows allows this call only
|
|
181
|
+
// (each saves a rule, changes the mode or denies), or two of which read so.
|
|
182
|
+
// Auto-Yes never picks a row that outlives this call, so it waits for a human.
|
|
183
|
+
'allow-once-unidentified': 'because no single option of the permission dialog allows this call only (the others save a rule, change the permission mode, or deny); Auto-Yes does not pick those, so answer it at the pane (prompt --json, respond)',
|
|
184
|
+
// Issue #3863. The recommended answer mode answers a question with its one
|
|
185
|
+
// recommended option (else its default), and could not tell which that is.
|
|
186
|
+
'recommended-option-unidentified': "because the question's recommended option could not be told (two or more marked recommended, a title it could not tell from its description, a typed-text or multi-select answer); answer it at the pane (prompt --json, respond)",
|
|
187
|
+
// Issue #3767. agy's approval dialog has no matching hook question (none, too
|
|
188
|
+
// late, already on screen, or the hook stopped arriving). Not a contract verdict.
|
|
189
|
+
// Issue #3789: nor one left unused — the last was spent on keys Auto-Yes sent,
|
|
190
|
+
// and a dialog is still up past the grace — so "no unused question" covers both.
|
|
191
|
+
'no-hook-receipt': "because there is no unused agy hook permission question for this dialog (none arrived in time, or the last one was spent on keys that did not clear it); answer it yourself (auto-yes --disable, prompt --json, respond --expect-screen) or check hooks.json",
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* {@link SUPPRESSION_CAUSE} for a reason that arrived over the wire.
|
|
195
|
+
*
|
|
196
|
+
* `reason` is a server-supplied string, so a server newer than this CLI can name
|
|
197
|
+
* a reason the union does not have. Naming it verbatim is the only honest answer:
|
|
198
|
+
* quietly folding an unknown reason into "by contract policy" is the same
|
|
199
|
+
* misattribution #1843 exists to remove, just for a future reason instead of
|
|
200
|
+
* `agent-launch-dialog`.
|
|
201
|
+
*/
|
|
202
|
+
function suppressionCause(reason) {
|
|
203
|
+
return Object.prototype.hasOwnProperty.call(SUPPRESSION_CAUSE, reason)
|
|
204
|
+
? SUPPRESSION_CAUSE[reason]
|
|
205
|
+
: `for a reason this CLI does not recognise (${reason})`;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* One stderr line naming what is holding this prompt (Issue #1699).
|
|
209
|
+
*
|
|
210
|
+
* `wait` used to print only "Waiting for human response...", which reads the
|
|
211
|
+
* same whether a human was always going to answer or whether Auto-Yes silently
|
|
212
|
+
* refused to. That ambiguity is what let a deny pattern matching a finished turn
|
|
213
|
+
* stall two workers unnoticed; the pattern and the reason code belong on screen.
|
|
214
|
+
*
|
|
215
|
+
* Issue #1843: the cause is chosen per reason rather than asserted. `reason=` is
|
|
216
|
+
* in the payload either way, so the prefix is the only part that can lie — and it
|
|
217
|
+
* did, for every non-contract suppression.
|
|
218
|
+
*/
|
|
219
|
+
function formatSuppressionNotice(suppression, ageSeconds, answerMode) {
|
|
220
|
+
const parts = [
|
|
221
|
+
`reason=${suppression.reason}`,
|
|
222
|
+
`mode=${suppression.mode ?? 'none'}`,
|
|
223
|
+
`promptType=${suppression.promptType}`,
|
|
224
|
+
];
|
|
225
|
+
if (suppression.pattern !== undefined) {
|
|
226
|
+
parts.push(`pattern=${JSON.stringify(suppression.pattern)}`);
|
|
227
|
+
}
|
|
228
|
+
// Issue #3863: the Auto-Yes answer mode in effect, when the server says.
|
|
229
|
+
if (answerMode !== undefined) {
|
|
230
|
+
parts.push(`answerMode=${answerMode}`);
|
|
231
|
+
}
|
|
232
|
+
const cause = suppressionCause(suppression.reason);
|
|
233
|
+
return ` auto-yes suppressed this prompt ${cause}: ${parts.join(' ')} (${ageSeconds}s ago)`;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* One stderr line saying Auto-Yes is off on this instance because the server
|
|
237
|
+
* restarted (Issue #3730), or null.
|
|
238
|
+
*
|
|
239
|
+
* Only words: the prompt was going to be reported either way — an instance
|
|
240
|
+
* whose grant the restart released is an instance with Auto-Yes off, and exit
|
|
241
|
+
* 10 for it is exactly the hand-back it always was. What this adds is the WHY,
|
|
242
|
+
* so a delegating agent re-enables Auto-Yes instead of guessing. A server
|
|
243
|
+
* older than the reason sends none, and nothing is printed.
|
|
244
|
+
*
|
|
245
|
+
* The command it suggests names the instance this wait is about: without
|
|
246
|
+
* `--instance`, `auto-yes --enable` arms the worktree's default primary, which
|
|
247
|
+
* for an alias (or a non-default tool) is another instance — the waited-on one
|
|
248
|
+
* would stay off while a grant went somewhere nobody asked for. The instance is
|
|
249
|
+
* the resolved `--instance` when one was given, else the CLI tool the server
|
|
250
|
+
* answered for (a primary's instance ID is its tool ID).
|
|
251
|
+
*
|
|
252
|
+
* @param instanceId - The resolved `--instance` of this wait, if any
|
|
253
|
+
*/
|
|
254
|
+
function formatRestartReleaseNotice(worktreeId, data, instanceId) {
|
|
255
|
+
if (data.autoYes?.enabled !== false || data.autoYes.stopReason !== 'server-restart')
|
|
256
|
+
return null;
|
|
257
|
+
const target = instanceId ?? data.cliToolId;
|
|
258
|
+
const command = `commandmate auto-yes ${worktreeId} --enable${target ? ` --instance ${target}` : ''}`;
|
|
259
|
+
return ` auto-yes was released by a server restart on ${worktreeId} (it is not turned back on ` +
|
|
260
|
+
`automatically); re-enable it with \`${command}\` if this session should keep answering.`;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* One stderr line saying Auto-Yes pressed Enter on THIS prompt (Issue #3397), or
|
|
264
|
+
* null when the record is absent or about another screen.
|
|
265
|
+
*
|
|
266
|
+
* The prompt is one CommandMate could not read (the window offers direct input
|
|
267
|
+
* for it). `sent` — Auto-Yes confirmed whatever was selected; `no-effect` — the
|
|
268
|
+
* same screen outlived the Enter, no second one was sent, and it is a human's
|
|
269
|
+
* again. An outcome this CLI does not know is named verbatim (#1843's rule).
|
|
270
|
+
* `currentPrompt` is the server's judgement that the record is about the
|
|
271
|
+
* `promptData` of the same response, so an Enter sent to an earlier screen is
|
|
272
|
+
* never reported against this one.
|
|
273
|
+
*/
|
|
274
|
+
function formatEnterFallbackNotice(data, now) {
|
|
275
|
+
const record = data.autoYes?.lastEnterFallback;
|
|
276
|
+
if (!record || record.currentPrompt !== true)
|
|
277
|
+
return null;
|
|
278
|
+
const detail = `refusal=${record.refusalReason} promptType=${record.promptType}`;
|
|
279
|
+
const ago = `(${Math.max(0, Math.round((now - record.at) / 1000))}s ago)`;
|
|
280
|
+
if (record.outcome === 'sent') {
|
|
281
|
+
return ` auto-yes sent Enter to this prompt (CommandMate could not read it): ${detail} ${ago}`;
|
|
282
|
+
}
|
|
283
|
+
if (record.outcome === 'no-effect') {
|
|
284
|
+
return ` auto-yes sent Enter to this prompt, but the same screen is still up (no-effect); ` +
|
|
285
|
+
`answer it in the terminal: ${detail} ${ago}`;
|
|
286
|
+
}
|
|
287
|
+
return ` auto-yes Enter record for this prompt: outcome=${record.outcome} ${detail} ${ago}`;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Issue #3821: the server's own word that Auto-Yes left this prompt to a human
|
|
291
|
+
* (`autoYesDecision.state === 'withheld'`) — `server-poller-inactive` when no
|
|
292
|
+
* poller runs for the instance, or a stop the suppression record does not
|
|
293
|
+
* carry. Read only when the server publishes the field; an older one leaves
|
|
294
|
+
* `wait` holding as before.
|
|
295
|
+
*/
|
|
296
|
+
function decisionWithheldReason(data) {
|
|
297
|
+
const decision = data.autoYesDecision;
|
|
298
|
+
if (decision?.state !== 'withheld')
|
|
299
|
+
return null;
|
|
300
|
+
return decision.reason ?? 'unknown';
|
|
301
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wait Command - what pollWorktree records off each frame before its stages judge it
|
|
3
|
+
* Issue #3966: split out of pollWorktree to bring its complexity under 25.
|
|
4
|
+
*/
|
|
5
|
+
import type { CurrentOutputResponse } from '../types/api-responses';
|
|
6
|
+
import type { PollState, PollWorktreeOptions } from './wait-poll-state';
|
|
7
|
+
/** Stall detection and `everRunning` off one frame. */
|
|
8
|
+
export declare function trackPollActivity(state: PollState, data: CurrentOutputResponse): void;
|
|
9
|
+
/** Adopt the turn this frame names and tell the caller's turn callbacks. */
|
|
10
|
+
export declare function adoptAndPublishTurn(state: PollState, data: CurrentOutputResponse, startTime: number, options: PollWorktreeOptions): void;
|
|
11
|
+
/** Drop a self-resume hold whose `stop` is no longer the newest word. */
|
|
12
|
+
export declare function releaseMovedSelfResumeHold(worktreeId: string, state: PollState, selfResumeStopAt: number | null): void;
|
|
13
|
+
/** Say that the prompt an Auto-Yes hold was waiting on has cleared, and end the hold. */
|
|
14
|
+
export declare function noteAutoYesPromptCleared(worktreeId: string, state: PollState): void;
|
|
15
|
+
//# sourceMappingURL=wait-poll-bookkeeping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-poll-bookkeeping.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-poll-bookkeeping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxE,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAUrF;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,qBAAqB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,mBAAmB,GAC3B,IAAI,CAeN;AAED,yEAAyE;AACzE,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,IAAI,CAUN;AAED,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAQnF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* wait Command - what pollWorktree records off each frame before its stages judge it
|
|
4
|
+
* Issue #3966: split out of pollWorktree to bring its complexity under 25.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.trackPollActivity = trackPollActivity;
|
|
8
|
+
exports.adoptAndPublishTurn = adoptAndPublishTurn;
|
|
9
|
+
exports.releaseMovedSelfResumeHold = releaseMovedSelfResumeHold;
|
|
10
|
+
exports.noteAutoYesPromptCleared = noteAutoYesPromptCleared;
|
|
11
|
+
const wait_turn_boundary_1 = require("./wait-turn-boundary");
|
|
12
|
+
/** Stall detection and `everRunning` off one frame. */
|
|
13
|
+
function trackPollActivity(state, data) {
|
|
14
|
+
// Track content changes for stall detection
|
|
15
|
+
if (data.content !== state.lastContent) {
|
|
16
|
+
state.lastContent = data.content;
|
|
17
|
+
state.lastActivityTime = Date.now();
|
|
18
|
+
}
|
|
19
|
+
if (data.isRunning) {
|
|
20
|
+
state.everRunning = true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Adopt the turn this frame names and tell the caller's turn callbacks. */
|
|
24
|
+
function adoptAndPublishTurn(state, data, startTime, options) {
|
|
25
|
+
// Issue #1839: done before any exit path so the turn is adopted even on a
|
|
26
|
+
// poll that ends in a prompt — the same turn is still open when the human
|
|
27
|
+
// answers and `--on-prompt human` resumes polling.
|
|
28
|
+
state.turnStartedAt = (0, wait_turn_boundary_1.adoptTurnStart)(data, startTime, state.turnStartedAt);
|
|
29
|
+
if (options.onTurnStart) {
|
|
30
|
+
const published = data.structuredEvents;
|
|
31
|
+
const closedAt = published?.openedAt != null && published.openedAt === state.turnStartedAt
|
|
32
|
+
? published.closedAt ?? null
|
|
33
|
+
: null;
|
|
34
|
+
options.onTurnStart(state.turnStartedAt, closedAt);
|
|
35
|
+
}
|
|
36
|
+
if (options.onTurnRecord) {
|
|
37
|
+
options.onTurnRecord(data.structuredEvents?.openedAt ?? null, data.structuredEvents?.closedAt ?? null);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Drop a self-resume hold whose `stop` is no longer the newest word. */
|
|
41
|
+
function releaseMovedSelfResumeHold(worktreeId, state, selfResumeStopAt) {
|
|
42
|
+
if (state.selfResumeHold !== null && state.selfResumeHold.stopAt !== selfResumeStopAt) {
|
|
43
|
+
const heldMs = Date.now() - state.selfResumeHold.since;
|
|
44
|
+
state.selfResumeHeldMs += heldMs;
|
|
45
|
+
state.selfResumeHold = null;
|
|
46
|
+
console.error(`Note: ${worktreeId} has moved past the stop it said it would resume from ` +
|
|
47
|
+
`(held ${Math.round(heldMs / 1000)}s); judging its current state.`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Say that the prompt an Auto-Yes hold was waiting on has cleared, and end the hold. */
|
|
51
|
+
function noteAutoYesPromptCleared(worktreeId, state) {
|
|
52
|
+
if (state.autoYesAnsweringSince !== null) {
|
|
53
|
+
console.error(`Prompt on ${worktreeId} cleared after ` +
|
|
54
|
+
`${Math.round((Date.now() - state.autoYesAnsweringSince) / 1000)}s; judging completion as usual.`);
|
|
55
|
+
state.autoYesAnsweringSince = null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wait Command - what pollWorktree carries between polls and hands its stages
|
|
3
|
+
* Issue #3964: split out of wait.ts; wait.ts re-exports what it exported.
|
|
4
|
+
*/
|
|
5
|
+
import type { WaitOptions } from '../types';
|
|
6
|
+
import type { ApiClient } from '../utils/api-client';
|
|
7
|
+
/**
|
|
8
|
+
* {@link pollWorktree}'s options: {@link WaitOptions} plus the Auto-Yes grace
|
|
9
|
+
* (Issue #2463).
|
|
10
|
+
*/
|
|
11
|
+
export interface PollWorktreeOptions extends WaitOptions {
|
|
12
|
+
/**
|
|
13
|
+
* `--auto-yes-grace`, in seconds; 0 turns the hold off. Absent means
|
|
14
|
+
* {@link AUTO_YES_GRACE_DEFAULT_SECONDS}, which is what `ask` gets: it calls
|
|
15
|
+
* {@link pollWorktree} without the flag.
|
|
16
|
+
*/
|
|
17
|
+
autoYesGrace?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Told the turn this poll has adopted, every poll (Issue #3955).
|
|
20
|
+
*
|
|
21
|
+
* `ask` reads it after a completion to tell whether the turn whose end it
|
|
22
|
+
* waited on had already opened before its own message was sent — the shape
|
|
23
|
+
* of a second `ask` folded into a turn another sender started. Absent for
|
|
24
|
+
* `wait`, which has no send to compare against.
|
|
25
|
+
*
|
|
26
|
+
* `closedAt` is the server's close time for that turn when this poll's
|
|
27
|
+
* published turn is the adopted one, else null: a turn that had already
|
|
28
|
+
* closed before the send is not one the message could have joined.
|
|
29
|
+
*/
|
|
30
|
+
onTurnStart?: (turnStartedAt: number | null, closedAt: number | null) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Told the turn record the server published, every poll, whether or not
|
|
33
|
+
* this poll adopts it (Issue #3955).
|
|
34
|
+
*
|
|
35
|
+
* {@link onTurnStart} only ever names an adopted turn, and adoption drops a
|
|
36
|
+
* closed turn that opened more than {@link TURN_ADOPTION_GRACE_MS} before the
|
|
37
|
+
* poll started. A second `ask` that joined such a turn, which then closed
|
|
38
|
+
* before that ask's first poll, would never hear of it. This is the raw
|
|
39
|
+
* record, read only: nothing `wait` decides depends on it.
|
|
40
|
+
*/
|
|
41
|
+
onTurnRecord?: (openedAt: number | null, closedAt: number | null) => void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* What {@link pollWorktree} carries from one poll to the next: every variable its
|
|
45
|
+
* loop writes. What the loop only reads stays a `const` there.
|
|
46
|
+
*/
|
|
47
|
+
export interface PollState {
|
|
48
|
+
lastActivityTime: number;
|
|
49
|
+
lastContent: string;
|
|
50
|
+
/**
|
|
51
|
+
* Issue #1628: whether this wait ever saw the session alive. `!isRunning` on the
|
|
52
|
+
* FIRST poll is "there is nothing here to wait for", not "the agent finished" —
|
|
53
|
+
* reporting SUCCESS for it is how a wait on a worktree whose agent never started
|
|
54
|
+
* (wrong tool, wrong instance, session never created) came back `Completed` in
|
|
55
|
+
* milliseconds and handed a `passed` verdict to whatever ran next.
|
|
56
|
+
*/
|
|
57
|
+
everRunning: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Epoch ms of the first poll in the current unbroken run of
|
|
60
|
+
* `isUnclassifiedActive === true`, or null when the last poll cleared it
|
|
61
|
+
* (Issue #1708).
|
|
62
|
+
*/
|
|
63
|
+
unclassifiedSince: number | null;
|
|
64
|
+
/**
|
|
65
|
+
* Epoch ms of the `user_prompt_submit` / `pre_tool_use` / `post_tool_use` this
|
|
66
|
+
* wait adopted as "the turn I am waiting on", or null when the agent has
|
|
67
|
+
* reported none (Issue #1839). See {@link adoptTurnStart}.
|
|
68
|
+
*/
|
|
69
|
+
turnStartedAt: number | null;
|
|
70
|
+
/**
|
|
71
|
+
* Whether the chat ledger is still worth asking (Issue #1975). Cleared by the
|
|
72
|
+
* first read that fails, after which this wait judges completion from the
|
|
73
|
+
* frame alone — the pre-#1975 behaviour — rather than re-reporting the same
|
|
74
|
+
* unreachable endpoint on every poll.
|
|
75
|
+
*/
|
|
76
|
+
promptLedgerReadable: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Epoch ms of the first poll in the current unbroken run of an agent-mode
|
|
79
|
+
* prompt the target's Auto-Yes is expected to answer, or null (Issue #2463).
|
|
80
|
+
* Cleared by the first poll that shows no prompt, so every prompt Auto-Yes
|
|
81
|
+
* answers gets a window of its own.
|
|
82
|
+
*/
|
|
83
|
+
autoYesAnsweringSince: number | null;
|
|
84
|
+
/**
|
|
85
|
+
* The self-resume hold in progress: the `stop` it is about, and when this wait
|
|
86
|
+
* first held on it (CLI clock). Null when none is (Issue #2614).
|
|
87
|
+
*/
|
|
88
|
+
selfResumeHold: {
|
|
89
|
+
stopAt: number;
|
|
90
|
+
since: number;
|
|
91
|
+
} | null;
|
|
92
|
+
/** Milliseconds spent in self-resume holds that have already ended (Issue #2614). */
|
|
93
|
+
selfResumeHeldMs: number;
|
|
94
|
+
/** Whether any poll of this wait was held for a self-resume (Issue #2614). */
|
|
95
|
+
selfResumeHeld: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* The orphan turn being held: its `openedAt`, and when this wait first saw it
|
|
98
|
+
* as one (CLI clock). Null when none is (Issue #3429). See
|
|
99
|
+
* {@link releaseOrphanTurn}.
|
|
100
|
+
*/
|
|
101
|
+
orphanTurnHold: {
|
|
102
|
+
openedAt: number;
|
|
103
|
+
since: number;
|
|
104
|
+
} | null;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* What {@link pollWorktree} hands every stage of a poll and never writes: its
|
|
108
|
+
* `const`s, as {@link PollState} is its variables.
|
|
109
|
+
*/
|
|
110
|
+
export interface PollContext {
|
|
111
|
+
client: ApiClient;
|
|
112
|
+
worktreeId: string;
|
|
113
|
+
options: PollWorktreeOptions;
|
|
114
|
+
startTime: number;
|
|
115
|
+
autoYesGraceSeconds: number;
|
|
116
|
+
autoYesGraceMs: number;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=wait-poll-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-poll-state.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-poll-state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9E;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3E;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;OAGG;IACH,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzD,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,cAAc,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,cAAc,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5D;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wait Command - poll interval and the deadline arithmetic of a poll
|
|
3
|
+
* Issue #3964: split out of wait.ts; wait.ts re-exports what it exported.
|
|
4
|
+
*/
|
|
5
|
+
import type { WaitOptions } from '../types';
|
|
6
|
+
/** [IA3-02] Polling interval 5 seconds (matches tmux-capture-cache TTL=2s) */
|
|
7
|
+
export declare const POLL_INTERVAL_MS = 5000;
|
|
8
|
+
/**
|
|
9
|
+
* Whether one more poll interval still lands inside `--timeout` and
|
|
10
|
+
* `--stall-timeout` (Issue #2463).
|
|
11
|
+
*
|
|
12
|
+
* The Auto-Yes hold asks before it sleeps. Otherwise a caller whose deadline
|
|
13
|
+
* lapses during the hold would hear 124 about a prompt it used to hear 10 about:
|
|
14
|
+
* the hold is there to give Auto-Yes a chance to answer, not to turn an open
|
|
15
|
+
* prompt into a timeout. The same two checks the top of {@link pollWorktree}'s
|
|
16
|
+
* loop makes, one interval ahead.
|
|
17
|
+
*/
|
|
18
|
+
export declare function nextPollWithinDeadlines(options: WaitOptions, startTime: number, lastActivityTime: number, now: number): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Milliseconds left before `--timeout` or `--stall-timeout` would end the wait,
|
|
21
|
+
* whichever is sooner; `Infinity` when neither is set (Issue #3956).
|
|
22
|
+
*/
|
|
23
|
+
export declare function msBeforeDeadlines(options: WaitOptions, startTime: number, lastActivityTime: number, now: number): number;
|
|
24
|
+
/**
|
|
25
|
+
* Thrown by {@link readWithinDeadlines} when `--timeout` or `--stall-timeout`
|
|
26
|
+
* ends a read (Issue #3974). Not an `ApiError` and not a failed poll: the poll
|
|
27
|
+
* loop goes back to its deadline check, which ends the wait with exit 124.
|
|
28
|
+
*/
|
|
29
|
+
export declare class DeadlineReached extends Error {
|
|
30
|
+
constructor();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Runs one read of a poll bounded by `--timeout` / `--stall-timeout`
|
|
34
|
+
* (Issue #3974): the read gets an `AbortSignal` that fires when the sooner of
|
|
35
|
+
* the two runs out ({@link msBeforeDeadlines}). With neither set, `read` gets no
|
|
36
|
+
* signal and runs as before (also when the time left is more than a timer can
|
|
37
|
+
* hold). With no time left, no read is started.
|
|
38
|
+
*
|
|
39
|
+
* A read that was aborted — whether it threw (`ApiClient.get`) or swallowed the
|
|
40
|
+
* failure (`readNewestPromptAt`) — throws {@link DeadlineReached}, so a ledger
|
|
41
|
+
* that did not answer is a timeout, not "unreadable". Any other failure is
|
|
42
|
+
* rethrown as it came.
|
|
43
|
+
*/
|
|
44
|
+
export declare function readWithinDeadlines<T>(options: WaitOptions, startTime: number, lastActivityTime: number, read: (signal?: AbortSignal) => Promise<T>): Promise<T>;
|
|
45
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
46
|
+
//# sourceMappingURL=wait-timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wait-timing.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait-timing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,MAAM,GACV,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE,MAAM,GACV,MAAM,CAOR;AAKD;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;;CAKzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
|