commandmate 0.48.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 +292 -285
- package/.next/app-path-routes-manifest.json +35 -34
- 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.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.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.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_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.js +2 -2
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +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 +35 -34
- package/.next/server/chunks/1601.js +2 -2
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/2069.js +1 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2422.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2534.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3773.js +1 -0
- package/.next/server/chunks/3801.js +31 -0
- package/.next/server/chunks/4243.js +1 -1
- package/.next/server/chunks/4248.js +1 -1
- 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 +2 -2
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +16 -16
- package/.next/server/chunks/8728.js +3 -3
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/8791.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 +4 -4
- 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/1128-914c559913546bbc.js +1 -0
- package/.next/static/chunks/{2407-26139a8a2f1adbe8.js → 2407-675ba6b21844dc3b.js} +1 -1
- package/.next/static/chunks/{2619-a305ad4810f1393a.js → 2619-04bc32f026a0d946.js} +1 -1
- package/.next/static/chunks/{2863-f0121af1cbbedb3b.js → 2863-7173dc305dffc4f6.js} +1 -1
- package/.next/static/chunks/3931-1a1abab16248f14d.js +1 -0
- package/.next/static/chunks/6288-6fadbba6e84393b2.js +1 -0
- package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +1 -0
- package/.next/static/chunks/{8165-c68b3dc844210e6a.js → 8165-263172c17ae8e8c3.js} +1 -1
- 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/skills/[skillId]/{page-52ba58712faf3378.js → page-cb6e74fd9a6a571d.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-704086656fb45699.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/chunks/app/worktrees/[id]/terminal/{page-c601f3b3ece6557e.js → page-373ea37b16d930c7.js} +1 -1
- 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/auto-yes.d.ts.map +1 -1
- package/dist/cli/commands/auto-yes.js +3 -5
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +5 -0
- 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 +10 -10
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +8 -1
- 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/config/duration-constants.d.ts +16 -13
- package/dist/cli/config/duration-constants.d.ts.map +1 -1
- package/dist/cli/config/duration-constants.js +21 -21
- 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 +25 -2
- package/dist/cli/types/api-responses.d.ts +76 -4
- 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/cli/utils/verify-runner.d.ts +24 -1
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +54 -1
- package/dist/config/auto-yes-duration.d.ts +56 -0
- package/dist/config/auto-yes-duration.d.ts.map +1 -0
- package/dist/config/auto-yes-duration.js +76 -0
- 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/config/auto-yes-config.js +14 -19
- package/dist/server/src/config/auto-yes-duration.js +76 -0
- package/dist/server/src/lib/auto-yes-poller.js +49 -10
- package/dist/server/src/lib/auto-yes-state.js +9 -2
- 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 +374 -516
- 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/composer-text.js +215 -11
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice-chrome.js +193 -0
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +8 -191
- package/dist/server/src/lib/detection/upstream-faults.js +56 -5
- package/dist/server/src/lib/hooks/sources/opencode/client.js +12 -6
- package/dist/server/src/lib/hooks/structured-decision-response.js +1 -1
- package/dist/server/src/lib/polling/auto-yes-manual-answer.js +4 -2
- package/dist/server/src/lib/polling/response-checker.js +15 -16
- 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 +109 -4
- package/dist/server/src/lib/session/current-output-builder.js +23 -6
- package/dist/server/src/lib/session/instance-input-lock.js +664 -0
- package/dist/server/src/lib/session/send-attempt-state.js +19 -1
- 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/dist/server/src/lib/session/waiting-episode-state-ops.js +152 -0
- package/dist/server/src/lib/session/waiting-episode-state-store.js +202 -0
- package/dist/server/src/lib/session/waiting-episode-state-types.js +6 -0
- package/dist/server/src/lib/session/waiting-episode-state.js +26 -339
- package/dist/server/src/lib/tmux/tmux.js +25 -0
- package/dist/server/src/lib/verification/gate-runner.js +11 -4
- package/docs/en/user-guide/webapp-guide.md +15 -10
- package/package.json +1 -1
- package/release-notes/0.49.0.json +45 -0
- 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/6722.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/2099-c3e0ab70a1b95dd3.js +0 -1
- package/.next/static/chunks/5371-a549a0d2c2044d41.js +0 -1
- package/.next/static/chunks/6288-09feba367cc2c65e.js +0 -1
- package/.next/static/chunks/8606-cf6bdbff44a764cf.js +0 -1
- package/.next/static/chunks/9079-406b84d3cc891a87.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-46b4cbf07520d9b6.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-fb241bed579c67aa.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9cf1ecc59e36a004.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-c81284a9d8b35304.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-cbc7749a33450cc5.js +0 -1
- package/.next/static/css/743f79ff19ab91e9.css +0 -1
- /package/.next/static/{PTlAswXLq8PAe2vUJ8dVP → fqfSDqQMweROeHUzOt_m1}/_buildManifest.js +0 -0
- /package/.next/static/{PTlAswXLq8PAe2vUJ8dVP → fqfSDqQMweROeHUzOt_m1}/_ssgManifest.js +0 -0
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* @module lib/db/relay-db
|
|
18
18
|
*/
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.stashRelayPayload = exports.settleRelaySendState = exports.setRelayPendingReply = exports.setRelayHold = exports.reserveRelayBind = exports.replaceRelayPromptWithReply = exports.replaceRelayPromptWithPendingReply = exports.recordRelayInputBoundary = exports.promoteRelayPendingReply = exports.listRelaysWithPendingPayload = exports.listOpenBoundRelays = exports.getRelayPendingPayload = exports.getRelayBinding = exports.failOrphanedRelayBind = exports.explainRelayBindRefusal = exports.clearRelayPendingReply = exports.clearRelayPending = exports.clearRelayHeldCandidates = exports.appendRelayHeldCandidate = void 0;
|
|
20
21
|
exports.createRelay = createRelay;
|
|
21
22
|
exports.getRelayById = getRelayById;
|
|
22
23
|
exports.listOpenRelaysTo = listOpenRelaysTo;
|
|
@@ -24,9 +25,6 @@ exports.listOpenRelaysFrom = listOpenRelaysFrom;
|
|
|
24
25
|
exports.getSessionRelaySummary = getSessionRelaySummary;
|
|
25
26
|
exports.listOpenRelaysForWorktree = listOpenRelaysForWorktree;
|
|
26
27
|
exports.countOpenRelaysBetween = countOpenRelaysBetween;
|
|
27
|
-
exports.stashRelayPayload = stashRelayPayload;
|
|
28
|
-
exports.listRelaysWithPendingPayload = listRelaysWithPendingPayload;
|
|
29
|
-
exports.clearRelayPending = clearRelayPending;
|
|
30
28
|
exports.markRelayDelivered = markRelayDelivered;
|
|
31
29
|
exports.markRelayPromptNotified = markRelayPromptNotified;
|
|
32
30
|
exports.getRelayPromptSignature = getRelayPromptSignature;
|
|
@@ -37,39 +35,44 @@ exports.countRelays = countRelays;
|
|
|
37
35
|
const crypto_1 = require("crypto");
|
|
38
36
|
const types_1 = require("../../lib/relay/types");
|
|
39
37
|
const logger_1 = require("../../lib/logger");
|
|
38
|
+
const relay_bind_db_1 = require("../../lib/db/relay-bind-db");
|
|
39
|
+
// Issue #3995: the send binding and the pending slots live in `relay-bind-db`;
|
|
40
|
+
// re-exported so every caller (and every `vi.mock`) keeps this module's surface.
|
|
41
|
+
var relay_bind_db_2 = require("../../lib/db/relay-bind-db");
|
|
42
|
+
Object.defineProperty(exports, "appendRelayHeldCandidate", { enumerable: true, get: function () { return relay_bind_db_2.appendRelayHeldCandidate; } });
|
|
43
|
+
Object.defineProperty(exports, "clearRelayHeldCandidates", { enumerable: true, get: function () { return relay_bind_db_2.clearRelayHeldCandidates; } });
|
|
44
|
+
Object.defineProperty(exports, "clearRelayPending", { enumerable: true, get: function () { return relay_bind_db_2.clearRelayPending; } });
|
|
45
|
+
Object.defineProperty(exports, "clearRelayPendingReply", { enumerable: true, get: function () { return relay_bind_db_2.clearRelayPendingReply; } });
|
|
46
|
+
Object.defineProperty(exports, "explainRelayBindRefusal", { enumerable: true, get: function () { return relay_bind_db_2.explainRelayBindRefusal; } });
|
|
47
|
+
Object.defineProperty(exports, "failOrphanedRelayBind", { enumerable: true, get: function () { return relay_bind_db_2.failOrphanedRelayBind; } });
|
|
48
|
+
Object.defineProperty(exports, "getRelayBinding", { enumerable: true, get: function () { return relay_bind_db_2.getRelayBinding; } });
|
|
49
|
+
Object.defineProperty(exports, "getRelayPendingPayload", { enumerable: true, get: function () { return relay_bind_db_2.getRelayPendingPayload; } });
|
|
50
|
+
Object.defineProperty(exports, "listOpenBoundRelays", { enumerable: true, get: function () { return relay_bind_db_2.listOpenBoundRelays; } });
|
|
51
|
+
Object.defineProperty(exports, "listRelaysWithPendingPayload", { enumerable: true, get: function () { return relay_bind_db_2.listRelaysWithPendingPayload; } });
|
|
52
|
+
Object.defineProperty(exports, "promoteRelayPendingReply", { enumerable: true, get: function () { return relay_bind_db_2.promoteRelayPendingReply; } });
|
|
53
|
+
Object.defineProperty(exports, "recordRelayInputBoundary", { enumerable: true, get: function () { return relay_bind_db_2.recordRelayInputBoundary; } });
|
|
54
|
+
Object.defineProperty(exports, "replaceRelayPromptWithPendingReply", { enumerable: true, get: function () { return relay_bind_db_2.replaceRelayPromptWithPendingReply; } });
|
|
55
|
+
Object.defineProperty(exports, "replaceRelayPromptWithReply", { enumerable: true, get: function () { return relay_bind_db_2.replaceRelayPromptWithReply; } });
|
|
56
|
+
Object.defineProperty(exports, "reserveRelayBind", { enumerable: true, get: function () { return relay_bind_db_2.reserveRelayBind; } });
|
|
57
|
+
Object.defineProperty(exports, "setRelayHold", { enumerable: true, get: function () { return relay_bind_db_2.setRelayHold; } });
|
|
58
|
+
Object.defineProperty(exports, "setRelayPendingReply", { enumerable: true, get: function () { return relay_bind_db_2.setRelayPendingReply; } });
|
|
59
|
+
Object.defineProperty(exports, "settleRelaySendState", { enumerable: true, get: function () { return relay_bind_db_2.settleRelaySendState; } });
|
|
60
|
+
Object.defineProperty(exports, "stashRelayPayload", { enumerable: true, get: function () { return relay_bind_db_2.stashRelayPayload; } });
|
|
40
61
|
const logger = (0, logger_1.createLogger)('relay-db');
|
|
41
|
-
/** Every column, in one place, so the readers cannot drift from each other. */
|
|
42
|
-
const RELAY_COLUMNS = `
|
|
43
|
-
id, from_worktree_id, from_instance_id, to_worktree_id, to_instance_id,
|
|
44
|
-
state, hops, sent_request_id, pending_kind, pending_body, prompt_signature,
|
|
45
|
-
created_at, updated_at, expires_at, delivered_at
|
|
46
|
-
`;
|
|
47
|
-
function mapRelay(row) {
|
|
48
|
-
return {
|
|
49
|
-
id: row.id,
|
|
50
|
-
from: { worktreeId: row.from_worktree_id, instanceId: row.from_instance_id },
|
|
51
|
-
to: { worktreeId: row.to_worktree_id, instanceId: row.to_instance_id },
|
|
52
|
-
state: row.state,
|
|
53
|
-
hops: row.hops,
|
|
54
|
-
sentRequestId: row.sent_request_id,
|
|
55
|
-
pendingKind: row.pending_kind ?? null,
|
|
56
|
-
createdAt: row.created_at,
|
|
57
|
-
updatedAt: row.updated_at,
|
|
58
|
-
expiresAt: row.expires_at,
|
|
59
|
-
deliveredAt: row.delivered_at,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
62
|
/** Insert a new `pending` relay and hand it back. */
|
|
63
63
|
function createRelay(db, input) {
|
|
64
64
|
const id = (0, crypto_1.randomUUID)();
|
|
65
65
|
const now = input.now ?? Date.now();
|
|
66
|
+
const bindMode = input.bindMode ?? 'legacy';
|
|
67
|
+
// A legacy row carries no send state at all: NULL, never a pretended `sent`.
|
|
68
|
+
const sendState = bindMode === 'bound' ? 'awaiting' : null;
|
|
66
69
|
db.prepare(`
|
|
67
70
|
INSERT INTO session_relays
|
|
68
71
|
(id, from_worktree_id, from_instance_id, to_worktree_id, to_instance_id,
|
|
69
72
|
state, hops, sent_request_id, pending_kind, pending_body, prompt_signature,
|
|
70
|
-
created_at, updated_at, expires_at, delivered_at)
|
|
71
|
-
VALUES (?, ?, ?, ?, ?, 'pending', ?, NULL, NULL, NULL, NULL, ?, ?, ?, NULL)
|
|
72
|
-
`).run(id, input.from.worktreeId, input.from.instanceId, input.to.worktreeId, input.to.instanceId, input.hops, now, now, input.expiresAt);
|
|
73
|
+
created_at, updated_at, expires_at, delivered_at, bind_mode, send_state)
|
|
74
|
+
VALUES (?, ?, ?, ?, ?, 'pending', ?, NULL, NULL, NULL, NULL, ?, ?, ?, NULL, ?, ?)
|
|
75
|
+
`).run(id, input.from.worktreeId, input.from.instanceId, input.to.worktreeId, input.to.instanceId, input.hops, now, now, input.expiresAt, bindMode, sendState);
|
|
73
76
|
return {
|
|
74
77
|
id,
|
|
75
78
|
from: { ...input.from },
|
|
@@ -82,40 +85,46 @@ function createRelay(db, input) {
|
|
|
82
85
|
updatedAt: now,
|
|
83
86
|
expiresAt: input.expiresAt,
|
|
84
87
|
deliveredAt: null,
|
|
88
|
+
bindMode,
|
|
89
|
+
sendState,
|
|
90
|
+
inputBoundaryAt: null,
|
|
91
|
+
boundaryKind: null,
|
|
92
|
+
turnOpenAtSend: null,
|
|
93
|
+
obsState: null,
|
|
94
|
+
holdReason: null,
|
|
95
|
+
overlap: null,
|
|
85
96
|
};
|
|
86
97
|
}
|
|
87
98
|
/** One relay by id, or null. */
|
|
88
99
|
function getRelayById(db, id) {
|
|
89
100
|
const row = db
|
|
90
|
-
.prepare(`SELECT ${RELAY_COLUMNS} FROM session_relays WHERE id = ?`)
|
|
101
|
+
.prepare(`SELECT ${relay_bind_db_1.RELAY_COLUMNS} FROM session_relays WHERE id = ?`)
|
|
91
102
|
.get(id);
|
|
92
|
-
return row ? mapRelay(row) : null;
|
|
103
|
+
return row ? (0, relay_bind_db_1.mapRelay)(row) : null;
|
|
93
104
|
}
|
|
94
|
-
/** Placeholders for an `IN (…)` over the open states. */
|
|
95
|
-
const OPEN_STATE_PLACEHOLDERS = types_1.OPEN_RELAY_STATES.map(() => '?').join(', ');
|
|
96
105
|
/** Every still-open relay this session must answer (it is the `to` end). */
|
|
97
106
|
function listOpenRelaysTo(db, endpoint) {
|
|
98
107
|
const rows = db
|
|
99
108
|
.prepare(`
|
|
100
|
-
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
109
|
+
SELECT ${relay_bind_db_1.RELAY_COLUMNS} FROM session_relays
|
|
101
110
|
WHERE to_worktree_id = ? AND to_instance_id = ?
|
|
102
|
-
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
111
|
+
AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
|
|
103
112
|
ORDER BY created_at ASC
|
|
104
113
|
`)
|
|
105
114
|
.all(endpoint.worktreeId, endpoint.instanceId, ...types_1.OPEN_RELAY_STATES);
|
|
106
|
-
return rows.map(mapRelay);
|
|
115
|
+
return rows.map(relay_bind_db_1.mapRelay);
|
|
107
116
|
}
|
|
108
117
|
/** Every still-open relay this session is waiting on (it is the `from` end). */
|
|
109
118
|
function listOpenRelaysFrom(db, endpoint) {
|
|
110
119
|
const rows = db
|
|
111
120
|
.prepare(`
|
|
112
|
-
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
121
|
+
SELECT ${relay_bind_db_1.RELAY_COLUMNS} FROM session_relays
|
|
113
122
|
WHERE from_worktree_id = ? AND from_instance_id = ?
|
|
114
|
-
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
123
|
+
AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
|
|
115
124
|
ORDER BY created_at ASC
|
|
116
125
|
`)
|
|
117
126
|
.all(endpoint.worktreeId, endpoint.instanceId, ...types_1.OPEN_RELAY_STATES);
|
|
118
|
-
return rows.map(mapRelay);
|
|
127
|
+
return rows.map(relay_bind_db_1.mapRelay);
|
|
119
128
|
}
|
|
120
129
|
/** Both halves of {@link SessionRelaySummary} in one call. */
|
|
121
130
|
function getSessionRelaySummary(db, endpoint) {
|
|
@@ -128,13 +137,13 @@ function getSessionRelaySummary(db, endpoint) {
|
|
|
128
137
|
function listOpenRelaysForWorktree(db, worktreeId) {
|
|
129
138
|
const rows = db
|
|
130
139
|
.prepare(`
|
|
131
|
-
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
140
|
+
SELECT ${relay_bind_db_1.RELAY_COLUMNS} FROM session_relays
|
|
132
141
|
WHERE (from_worktree_id = ? OR to_worktree_id = ?)
|
|
133
|
-
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
142
|
+
AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
|
|
134
143
|
ORDER BY created_at ASC
|
|
135
144
|
`)
|
|
136
145
|
.all(worktreeId, worktreeId, ...types_1.OPEN_RELAY_STATES);
|
|
137
|
-
return rows.map(mapRelay);
|
|
146
|
+
return rows.map(relay_bind_db_1.mapRelay);
|
|
138
147
|
}
|
|
139
148
|
/**
|
|
140
149
|
* How many open relays already run from `from` to `to`.
|
|
@@ -149,58 +158,11 @@ function countOpenRelaysBetween(db, from, to) {
|
|
|
149
158
|
SELECT COUNT(*) AS n FROM session_relays
|
|
150
159
|
WHERE from_worktree_id = ? AND from_instance_id = ?
|
|
151
160
|
AND to_worktree_id = ? AND to_instance_id = ?
|
|
152
|
-
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
161
|
+
AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
|
|
153
162
|
`)
|
|
154
163
|
.get(from.worktreeId, from.instanceId, to.worktreeId, to.instanceId, ...types_1.OPEN_RELAY_STATES);
|
|
155
164
|
return row.n;
|
|
156
165
|
}
|
|
157
|
-
/**
|
|
158
|
-
* Record a payload that has been decided and not yet delivered.
|
|
159
|
-
*
|
|
160
|
-
* Guarded on `pending_kind IS NULL`, which is what makes two producers finding
|
|
161
|
-
* the same finished turn cost ONE delivery: the second one loses the race and
|
|
162
|
-
* returns false rather than queueing a duplicate. The guard is released by
|
|
163
|
-
* {@link clearRelayPending} once the payload has actually gone out, so the same
|
|
164
|
-
* relay can carry a prompt notice now and a reply later.
|
|
165
|
-
*
|
|
166
|
-
* @returns Whether this call is the one that stashed it
|
|
167
|
-
*/
|
|
168
|
-
function stashRelayPayload(db, id, kind, body, now = Date.now()) {
|
|
169
|
-
const result = db
|
|
170
|
-
.prepare(`
|
|
171
|
-
UPDATE session_relays
|
|
172
|
-
SET pending_kind = ?, pending_body = ?, updated_at = ?
|
|
173
|
-
WHERE id = ? AND pending_kind IS NULL
|
|
174
|
-
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
175
|
-
`)
|
|
176
|
-
.run(kind, body, now, id, ...types_1.OPEN_RELAY_STATES);
|
|
177
|
-
return result.changes === 1;
|
|
178
|
-
}
|
|
179
|
-
/** Every relay carrying an undelivered payload, oldest first. */
|
|
180
|
-
function listRelaysWithPendingPayload(db) {
|
|
181
|
-
const rows = db
|
|
182
|
-
.prepare(`
|
|
183
|
-
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
184
|
-
WHERE pending_kind IS NOT NULL
|
|
185
|
-
ORDER BY updated_at ASC
|
|
186
|
-
`)
|
|
187
|
-
.all();
|
|
188
|
-
return rows
|
|
189
|
-
.filter((row) => row.pending_body !== null && row.pending_kind !== null)
|
|
190
|
-
.map((row) => ({
|
|
191
|
-
relay: mapRelay(row),
|
|
192
|
-
kind: row.pending_kind,
|
|
193
|
-
body: row.pending_body,
|
|
194
|
-
}));
|
|
195
|
-
}
|
|
196
|
-
/** Drop an undelivered payload (it went out, or it was superseded). */
|
|
197
|
-
function clearRelayPending(db, id, now = Date.now()) {
|
|
198
|
-
db.prepare(`
|
|
199
|
-
UPDATE session_relays
|
|
200
|
-
SET pending_kind = NULL, pending_body = NULL, updated_at = ?
|
|
201
|
-
WHERE id = ?
|
|
202
|
-
`).run(now, id);
|
|
203
|
-
}
|
|
204
166
|
/**
|
|
205
167
|
* Close the relay as delivered, exactly once.
|
|
206
168
|
*
|
|
@@ -225,9 +187,9 @@ function markRelayDelivered(db, id, sentRequestId, now = Date.now()) {
|
|
|
225
187
|
.prepare(`
|
|
226
188
|
UPDATE session_relays
|
|
227
189
|
SET state = 'delivered', sent_request_id = ?, delivered_at = ?,
|
|
228
|
-
pending_kind = NULL, pending_body = NULL, updated_at = ?
|
|
190
|
+
pending_kind = NULL, pending_body = NULL, payload_id = NULL, updated_at = ?
|
|
229
191
|
WHERE id = ? AND sent_request_id IS NULL
|
|
230
|
-
AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
192
|
+
AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
|
|
231
193
|
`)
|
|
232
194
|
.run(sentRequestId, now, now, id, ...types_1.OPEN_RELAY_STATES);
|
|
233
195
|
return result.changes === 1;
|
|
@@ -278,7 +240,7 @@ function markRelayExpired(db, id, now = Date.now()) {
|
|
|
278
240
|
.prepare(`
|
|
279
241
|
UPDATE session_relays
|
|
280
242
|
SET state = 'expired', updated_at = ?
|
|
281
|
-
WHERE id = ? AND state IN (${OPEN_STATE_PLACEHOLDERS})
|
|
243
|
+
WHERE id = ? AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
|
|
282
244
|
`)
|
|
283
245
|
.run(now, id, ...types_1.OPEN_RELAY_STATES);
|
|
284
246
|
return result.changes === 1;
|
|
@@ -287,20 +249,21 @@ function markRelayExpired(db, id, now = Date.now()) {
|
|
|
287
249
|
function listExpiredOpenRelays(db, now = Date.now()) {
|
|
288
250
|
const rows = db
|
|
289
251
|
.prepare(`
|
|
290
|
-
SELECT ${RELAY_COLUMNS} FROM session_relays
|
|
291
|
-
WHERE state IN (${OPEN_STATE_PLACEHOLDERS}) AND expires_at <= ?
|
|
252
|
+
SELECT ${relay_bind_db_1.RELAY_COLUMNS} FROM session_relays
|
|
253
|
+
WHERE state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS}) AND expires_at <= ?
|
|
292
254
|
ORDER BY expires_at ASC
|
|
293
255
|
`)
|
|
294
256
|
.all(...types_1.OPEN_RELAY_STATES, now);
|
|
295
|
-
return rows.map(mapRelay);
|
|
257
|
+
return rows.map(relay_bind_db_1.mapRelay);
|
|
296
258
|
}
|
|
297
259
|
/** Withdraw a relay. Returns false when it was already closed or absent. */
|
|
298
260
|
function cancelRelay(db, id, now = Date.now()) {
|
|
299
261
|
const result = db
|
|
300
262
|
.prepare(`
|
|
301
263
|
UPDATE session_relays
|
|
302
|
-
SET state = 'cancelled', pending_kind = NULL, pending_body = NULL,
|
|
303
|
-
|
|
264
|
+
SET state = 'cancelled', pending_kind = NULL, pending_body = NULL, payload_id = NULL,
|
|
265
|
+
pending_reply = NULL, updated_at = ?
|
|
266
|
+
WHERE id = ? AND state IN (${relay_bind_db_1.OPEN_STATE_PLACEHOLDERS})
|
|
304
267
|
`)
|
|
305
268
|
.run(now, id, ...types_1.OPEN_RELAY_STATES);
|
|
306
269
|
return result.changes === 1;
|
|
@@ -93,12 +93,25 @@
|
|
|
93
93
|
* server does. That is deliberate — `useTerminalPanePolling` derives the
|
|
94
94
|
* composer text client-side from the frame it already has, which keeps the
|
|
95
95
|
* WebSocket push path and the HTTP poll path from disagreeing.
|
|
96
|
+
*
|
|
97
|
+
* That is also why the "a dialog below the composer means no composer" rule
|
|
98
|
+
* (Issue #3927, {@link codexDialogBelow}) lives here rather than next to the
|
|
99
|
+
* clear in `session/composer-clear.ts`: the clear, the published
|
|
100
|
+
* `composerText` and the browser's own reading all go through
|
|
101
|
+
* {@link extractLiveComposerText}, and `tools/codex/cli-patterns.ts`, whose
|
|
102
|
+
* `readCodexGlyphRowKind` the rule was first written on, imports the logger.
|
|
96
103
|
*/
|
|
97
104
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
98
105
|
exports.SUPPORTED_COMPOSER_TOOLS = exports.COMPOSER_TEXT_MAX_CHARS = void 0;
|
|
99
106
|
exports.findClaudeInputBox = findClaudeInputBox;
|
|
107
|
+
exports.isCodexComposerRow = isCodexComposerRow;
|
|
108
|
+
exports.isCodexBoldGutterRow = isCodexBoldGutterRow;
|
|
109
|
+
exports.findCodexLiveComposerRow = findCodexLiveComposerRow;
|
|
110
|
+
exports.codexDialogBelow = codexDialogBelow;
|
|
100
111
|
exports.findCodexInputBox = findCodexInputBox;
|
|
101
112
|
exports.extractComposerText = extractComposerText;
|
|
113
|
+
exports.extractLiveComposerText = extractLiveComposerText;
|
|
114
|
+
exports.readCodexComposerFrom = readCodexComposerFrom;
|
|
102
115
|
const ansi_1 = require("./ansi");
|
|
103
116
|
/**
|
|
104
117
|
* Upper bound on the published composer text.
|
|
@@ -208,6 +221,10 @@ function isBlankRow(line) {
|
|
|
208
221
|
* A bare `\u203A` with nothing after it is accepted: `capture-pane` trims trailing
|
|
209
222
|
* whitespace, so that is what a composer with neither text nor placeholder looks
|
|
210
223
|
* like, and calling it `no_composer` would be a worse answer than `empty`.
|
|
224
|
+
*
|
|
225
|
+
* Exported for the send path (Issue #3906): when {@link findCodexInputBox}'s
|
|
226
|
+
* block bound cannot reach a composer split by many blank rows, the sender
|
|
227
|
+
* still has to tell the real `\u203A` row from these look-alikes.
|
|
211
228
|
*/
|
|
212
229
|
function isCodexComposerRow(line) {
|
|
213
230
|
if (line === undefined)
|
|
@@ -226,6 +243,120 @@ function isCodexComposerRow(line) {
|
|
|
226
243
|
const firstText = chars.slice(2).find(c => c.ch !== ' ');
|
|
227
244
|
return firstText === undefined || !firstText.bold;
|
|
228
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Whether a codex `\u203A` row has its gutter space inside the glyph's bold span
|
|
248
|
+
* (Issue #3906).
|
|
249
|
+
*
|
|
250
|
+
* codex also draws the transcript echo of a sent message with a bold glyph that
|
|
251
|
+
* is NOT dim — `ESC[1m\u203A ESC[0m` + text (measured on 0.153.2 and 0.160.0:
|
|
252
|
+
* `tests/fixtures/codex-live-2310/turn-submitted-no-status.txt:36`,
|
|
253
|
+
* `codex-multiline-composer-3205/tc104-raw-pane.txt:20`,
|
|
254
|
+
* `codex-dialogs-0157/approval.txt:24`) — which {@link isCodexComposerRow}
|
|
255
|
+
* accepts. Every measured composer resets right after its glyph
|
|
256
|
+
* (`ESC[1m\u203AESC[0m `), and every echo carries the space in the glyph's span,
|
|
257
|
+
* dim or not. {@link findCodexInputBox} does not need this — it only looks at
|
|
258
|
+
* the frame's last blocks, where the live composer is — but a search that climbs
|
|
259
|
+
* past them into the transcript does.
|
|
260
|
+
*/
|
|
261
|
+
function isCodexBoldGutterRow(line) {
|
|
262
|
+
if (line === undefined)
|
|
263
|
+
return false;
|
|
264
|
+
const chars = scanAttributedChars(line);
|
|
265
|
+
return chars.length > 1 && chars[0].ch === CODEX_PROMPT_GLYPH && chars[1].ch === ' ' && chars[1].bold;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Classify one raw codex row whose first rendered glyph is `\u203A` (Issue #3927).
|
|
269
|
+
*
|
|
270
|
+
* The same reading as `readCodexGlyphRowKind` in `tools/codex/cli-patterns.ts`,
|
|
271
|
+
* re-stated on this module's SGR scan because that module imports the logger
|
|
272
|
+
* and this one is read by the browser bundle. In order: no attributes at all →
|
|
273
|
+
* null (a stripped capture, where every `\u203A` use reads the same); a dim
|
|
274
|
+
* glyph → the transcript echo; a bold label → a dialog option; a dim label →
|
|
275
|
+
* the composer's placeholder; a coloured glyph whose label is drawn in the
|
|
276
|
+
* same colour → a dialog option (from 0.155.1 the composer's glyph is
|
|
277
|
+
* coloured too, but it resets before its label); anything else → the composer.
|
|
278
|
+
* `tests/unit/lib/detection/composer-text-dialog-below-3927.test.ts` holds the
|
|
279
|
+
* two readings equal over the codex fixtures.
|
|
280
|
+
*
|
|
281
|
+
* @param rawRow - One row of the capture, ANSI intact
|
|
282
|
+
*/
|
|
283
|
+
function readCodexGlyphRow(rawRow) {
|
|
284
|
+
if (!rawRow.includes('\x1b'))
|
|
285
|
+
return null;
|
|
286
|
+
const chars = scanAttributedChars(rawRow);
|
|
287
|
+
const glyphIndex = chars.findIndex(c => c.ch.trim() !== '');
|
|
288
|
+
if (glyphIndex < 0 || chars[glyphIndex].ch !== CODEX_PROMPT_GLYPH)
|
|
289
|
+
return null;
|
|
290
|
+
const glyph = chars[glyphIndex];
|
|
291
|
+
if (glyph.dim)
|
|
292
|
+
return 'transcript-echo';
|
|
293
|
+
const label = chars.slice(glyphIndex + 1).find(c => c.ch.trim() !== '');
|
|
294
|
+
if (label?.bold)
|
|
295
|
+
return 'option';
|
|
296
|
+
if (label?.dim)
|
|
297
|
+
return 'composer';
|
|
298
|
+
if (glyph.fg !== null && label?.fg === glyph.fg)
|
|
299
|
+
return 'option';
|
|
300
|
+
return 'composer';
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* A composer row by every reading: {@link isCodexComposerRow}, and not the
|
|
304
|
+
* bold-not-dim echo ({@link isCodexBoldGutterRow}). The caller has already had
|
|
305
|
+
* {@link readCodexGlyphRow} call it `'composer'`, which also requires ANSI
|
|
306
|
+
* attributes: an attribute-free `\u203A` row (a stripped capture, where a dialog
|
|
307
|
+
* option reads the same as a composer) is never taken (Issue #3906).
|
|
308
|
+
*/
|
|
309
|
+
function isLiveComposerRow(row) {
|
|
310
|
+
return isCodexComposerRow(row) && !isCodexBoldGutterRow(row);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* The live codex composer's `\u203A` row, wherever it is in the frame (Issue #3906).
|
|
314
|
+
*
|
|
315
|
+
* Read from the bottom, in the order `findCodexBottomGlyphRow` reads a frame:
|
|
316
|
+
* a dialog's highlighted option reached before any composer row means the
|
|
317
|
+
* dialog is what the pane shows now, and a composer row above it is one left
|
|
318
|
+
* there from before (codex-live-1671) — so the answer is -1, not that row. The
|
|
319
|
+
* transcript echo of a sent message is skipped, dim ({@link isCodexComposerRow}
|
|
320
|
+
* rejects it) or not ({@link isCodexBoldGutterRow}).
|
|
321
|
+
*
|
|
322
|
+
* Moved here from `session/composer-clear.ts` by Issue #3927, with
|
|
323
|
+
* {@link codexDialogBelow}, so the browser can read the same rule.
|
|
324
|
+
*
|
|
325
|
+
* @param rows - The capture split into rows, ANSI intact
|
|
326
|
+
* @returns The row's index, or -1 when no live composer row is drawn
|
|
327
|
+
*/
|
|
328
|
+
function findCodexLiveComposerRow(rows) {
|
|
329
|
+
for (let i = rows.length - 1; i >= 0; i--) {
|
|
330
|
+
const kind = readCodexGlyphRow(rows[i]);
|
|
331
|
+
if (kind === 'option')
|
|
332
|
+
return -1;
|
|
333
|
+
if (kind === 'composer' && isLiveComposerRow(rows[i]))
|
|
334
|
+
return i;
|
|
335
|
+
}
|
|
336
|
+
return -1;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Whether a dialog, not a composer, is what the pane shows below `row` (Issue #3906).
|
|
340
|
+
*
|
|
341
|
+
* The same bottom-up reading as {@link findCodexLiveComposerRow}, stopped at
|
|
342
|
+
* `row`: a dialog's highlighted option reached first means the composer at
|
|
343
|
+
* `row` — even one {@link findCodexInputBox} located among the frame's last
|
|
344
|
+
* blocks — was left there from before the dialog opened. A live composer row
|
|
345
|
+
* reached first means it was not.
|
|
346
|
+
*
|
|
347
|
+
* @param rows - The capture split into rows, ANSI intact
|
|
348
|
+
* @param row - Index of the composer's `\u203A` row
|
|
349
|
+
*/
|
|
350
|
+
function codexDialogBelow(rows, row) {
|
|
351
|
+
for (let i = rows.length - 1; i > row; i--) {
|
|
352
|
+
const kind = readCodexGlyphRow(rows[i]);
|
|
353
|
+
if (kind === 'option')
|
|
354
|
+
return true;
|
|
355
|
+
if (kind === 'composer' && isLiveComposerRow(rows[i]))
|
|
356
|
+
return false;
|
|
357
|
+
}
|
|
358
|
+
return false;
|
|
359
|
+
}
|
|
229
360
|
/**
|
|
230
361
|
* Locate codex's composer in a captured pane (Issue #1890).
|
|
231
362
|
*
|
|
@@ -282,7 +413,7 @@ function findCodexInputBox(lines) {
|
|
|
282
413
|
*/
|
|
283
414
|
function applySgr(params, state) {
|
|
284
415
|
const parts = params === '' ? ['0'] : params.split(';');
|
|
285
|
-
let { dim, bold } = state;
|
|
416
|
+
let { dim, bold, fg } = state;
|
|
286
417
|
for (let i = 0; i < parts.length; i++) {
|
|
287
418
|
const code = parts[i] === '' ? 0 : Number(parts[i]);
|
|
288
419
|
if (Number.isNaN(code))
|
|
@@ -290,15 +421,18 @@ function applySgr(params, state) {
|
|
|
290
421
|
if (code === 38 || code === 48 || code === 58) {
|
|
291
422
|
const mode = parts[i + 1] === '' || parts[i + 1] === undefined ? -1 : Number(parts[i + 1]);
|
|
292
423
|
// 5 = 256-colour (one argument), 2 = 24-bit RGB (three arguments).
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
else
|
|
298
|
-
i += 1;
|
|
424
|
+
const argCount = mode === 5 ? 2 : mode === 2 ? 4 : 1;
|
|
425
|
+
if (code === 38)
|
|
426
|
+
fg = parts.slice(i + 1, i + 1 + argCount).join(';');
|
|
427
|
+
i += argCount;
|
|
299
428
|
continue;
|
|
300
429
|
}
|
|
301
|
-
if (code === 0
|
|
430
|
+
if (code === 0) {
|
|
431
|
+
dim = false;
|
|
432
|
+
bold = false;
|
|
433
|
+
fg = null;
|
|
434
|
+
}
|
|
435
|
+
else if (code === 22) {
|
|
302
436
|
dim = false;
|
|
303
437
|
bold = false;
|
|
304
438
|
}
|
|
@@ -306,8 +440,12 @@ function applySgr(params, state) {
|
|
|
306
440
|
bold = true;
|
|
307
441
|
else if (code === 2)
|
|
308
442
|
dim = true;
|
|
443
|
+
else if (code === 39)
|
|
444
|
+
fg = null;
|
|
445
|
+
else if ((code >= 30 && code <= 37) || (code >= 90 && code <= 97))
|
|
446
|
+
fg = String(code);
|
|
309
447
|
}
|
|
310
|
-
return { dim, bold };
|
|
448
|
+
return { dim, bold, fg };
|
|
311
449
|
}
|
|
312
450
|
/**
|
|
313
451
|
* Split one raw pane row into rendered characters tagged with their dim state.
|
|
@@ -319,12 +457,12 @@ function applySgr(params, state) {
|
|
|
319
457
|
*/
|
|
320
458
|
function scanAttributedChars(line) {
|
|
321
459
|
const out = [];
|
|
322
|
-
let state = { dim: false, bold: false };
|
|
460
|
+
let state = { dim: false, bold: false, fg: null };
|
|
323
461
|
let i = 0;
|
|
324
462
|
while (i < line.length) {
|
|
325
463
|
const ch = line[i];
|
|
326
464
|
if (ch !== '\x1b') {
|
|
327
|
-
out.push({ ch, dim: state.dim, bold: state.bold });
|
|
465
|
+
out.push({ ch, dim: state.dim, bold: state.bold, fg: state.fg });
|
|
328
466
|
i++;
|
|
329
467
|
continue;
|
|
330
468
|
}
|
|
@@ -430,6 +568,72 @@ function extractComposerText(rawCapture, cliToolId) {
|
|
|
430
568
|
const region = locateComposer(lines, cliToolId);
|
|
431
569
|
if (region === null)
|
|
432
570
|
return { text: '', state: 'no_composer' };
|
|
571
|
+
return readComposerRegion(lines, region);
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* The composer the pane shows NOW — {@link extractComposerText}, less a codex
|
|
575
|
+
* composer that a dialog has opened below (Issue #3927).
|
|
576
|
+
*
|
|
577
|
+
* codex draws on the normal screen, so a composer row from before a dialog
|
|
578
|
+
* opened can still sit among the frame's last blocks, above the dialog's
|
|
579
|
+
* highlighted option. {@link extractComposerText} locates it and reports its
|
|
580
|
+
* old text as `content`; this reports `no_composer`, the answer the clear
|
|
581
|
+
* (`session/composer-clear.ts`) has given that frame since #3906. The two
|
|
582
|
+
* display paths — the published `composerText`
|
|
583
|
+
* (`session/current-output-builder.ts`) and the browser's own reading
|
|
584
|
+
* (`hooks/useTerminalPanePolling.ts`) — read through this, so the unsent bar
|
|
585
|
+
* neither shows text its [Clear] cannot remove nor offers a [Run] whose Enter
|
|
586
|
+
* would land in the dialog.
|
|
587
|
+
*
|
|
588
|
+
* {@link extractComposerText} itself keeps its reading. The sender
|
|
589
|
+
* (`cli-tools/submit-verified-sender.ts`) applies {@link codexDialogBelow} to
|
|
590
|
+
* the box it locates on its own branches, and Auto-Yes's Enter fallback and
|
|
591
|
+
* the send-residue check are left reading the box as before.
|
|
592
|
+
*
|
|
593
|
+
* @param rawCapture - A pane capture with ANSI attributes intact
|
|
594
|
+
* @param cliToolId - The CLI whose session was captured
|
|
595
|
+
*/
|
|
596
|
+
function extractLiveComposerText(rawCapture, cliToolId) {
|
|
597
|
+
const read = extractComposerText(rawCapture, cliToolId);
|
|
598
|
+
if (cliToolId !== 'codex' || read.state === 'no_composer' || read.state === 'unsupported_tool')
|
|
599
|
+
return read;
|
|
600
|
+
const lines = rawCapture.split('\n');
|
|
601
|
+
const box = findCodexInputBox(lines);
|
|
602
|
+
if (box !== null && codexDialogBelow(lines, box.firstRow))
|
|
603
|
+
return { text: '', state: 'no_composer' };
|
|
604
|
+
return read;
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Read a codex composer from a known `\u203A` row (Issue #3906).
|
|
608
|
+
*
|
|
609
|
+
* {@link findCodexInputBox} only searches the frame's last four blocks, and
|
|
610
|
+
* takes the composer's own block alone: a body of several paragraphs puts its
|
|
611
|
+
* `\u203A` row higher up, and its text stops at the first blank row. This reads
|
|
612
|
+
* from `firstRow` down to the frame's last block — codex's model / cwd footer —
|
|
613
|
+
* blank rows included, under the same dim rule as {@link extractComposerText}.
|
|
614
|
+
* When the composer's own block is the frame's last block it is read to the end.
|
|
615
|
+
*
|
|
616
|
+
* Whether `firstRow` is the live composer — not a row left above a dialog — is
|
|
617
|
+
* the caller's question; this only reads it.
|
|
618
|
+
*
|
|
619
|
+
* @param lines - Captured pane lines, ANSI intact
|
|
620
|
+
* @param firstRow - Index of a row {@link isCodexComposerRow} accepts
|
|
621
|
+
*/
|
|
622
|
+
function readCodexComposerFrom(lines, firstRow) {
|
|
623
|
+
let end = lines.length - 1;
|
|
624
|
+
while (end >= 0 && isBlankRow(lines[end]))
|
|
625
|
+
end--;
|
|
626
|
+
let lastBlockStart = end;
|
|
627
|
+
while (lastBlockStart > 0 && !isBlankRow(lines[lastBlockStart - 1]))
|
|
628
|
+
lastBlockStart--;
|
|
629
|
+
let ownBlockEnd = firstRow;
|
|
630
|
+
while (ownBlockEnd + 1 < lines.length && !isBlankRow(lines[ownBlockEnd + 1]))
|
|
631
|
+
ownBlockEnd++;
|
|
632
|
+
const lastRow = lastBlockStart > ownBlockEnd ? lastBlockStart - 1 : end;
|
|
633
|
+
return readComposerRegion(lines, { firstRow, lastRow, glyph: CODEX_PROMPT_GLYPH_PATTERN });
|
|
634
|
+
}
|
|
635
|
+
/** The text of a located composer region, under the dim rule. */
|
|
636
|
+
function readComposerRegion(lines, region) {
|
|
433
637
|
const realRows = [];
|
|
434
638
|
const renderedRows = [];
|
|
435
639
|
for (let i = region.firstRow; i <= region.lastRow; i++) {
|