commandmate 0.46.0 → 0.46.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 +259 -259
- package/.next/app-path-routes-manifest.json +14 -14
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +2 -2
- package/.next/required-server-files.json +1 -1
- 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.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 +9 -9
- 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.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.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/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.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_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_client-reference-manifest.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.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_client-reference-manifest.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_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_client-reference-manifest.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_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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.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.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +9 -9
- 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_client-reference-manifest.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_client-reference-manifest.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_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]/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_client-reference-manifest.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_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 +1 -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.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_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_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_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +7 -7
- 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 +14 -14
- package/.next/server/chunks/1501.js +2 -2
- package/.next/server/chunks/1559.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2908.js +1 -1
- package/.next/server/chunks/2984.js +25 -0
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5292.js +2 -2
- package/.next/server/chunks/5845.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6722.js +1 -1
- package/.next/server/chunks/8581.js +4 -4
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8918.js +5 -5
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9627.js +2 -1
- package/.next/server/chunks/9731.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-acb644c5487e1720.js → 2407-9703c569370b8a9d.js} +1 -1
- package/.next/static/chunks/{2717.21abf5b6bbd45520.js → 2717.1583400c272dc1d9.js} +1 -1
- package/.next/static/chunks/5371-0dc947683e46e78c.js +1 -0
- package/.next/static/chunks/5794-4eee51ff1e878aa6.js +1 -0
- package/.next/static/chunks/{8407-9a72e6f07c5d5458.js → 8407-155f84e5ba05f1d5.js} +1 -1
- package/.next/static/chunks/app/{layout-ae30ce63569c22be.js → layout-3e357690446cd2da.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-effbf0796881dd5a.js +1 -0
- package/.next/static/chunks/{webpack-c0b821f340afdebf.js → webpack-468b7b33030234b3.js} +1 -1
- package/.next/trace +13 -13
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +6 -1
- package/dist/cli/types/api-responses.d.ts +8 -6
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts +13 -1
- package/dist/lib/polling/auto-yes-suppression-reason.d.ts.map +1 -1
- package/dist/lib/polling/auto-yes-suppression-reason.js +3 -0
- package/dist/server/src/lib/assistant-response-saver.js +13 -0
- package/dist/server/src/lib/auto-yes-poller.js +252 -54
- package/dist/server/src/lib/conversation-logger.js +14 -2
- package/dist/server/src/lib/db/chat-db.js +2 -1
- package/dist/server/src/lib/history/user-turn-recorder.js +14 -0
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +28 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/codex/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/command-code/history.js +7 -0
- package/dist/server/src/lib/hooks/sources/transcript-history.js +34 -0
- package/dist/server/src/lib/log-manager.js +7 -2
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +22 -3
- package/dist/server/src/lib/polling/auto-yes-poller-state.js +234 -0
- package/dist/server/src/lib/polling/auto-yes-suppression-reason.js +3 -0
- package/dist/server/src/lib/polling/pending-scraped-response.js +119 -3
- package/dist/server/src/lib/polling/poller-owner.js +110 -0
- package/dist/server/src/lib/polling/response-checker.js +202 -39
- package/dist/server/src/lib/polling/response-dedup.js +8 -0
- package/dist/server/src/lib/polling/response-poller-core.js +131 -12
- package/dist/server/src/lib/polling/structured-history-gate.js +20 -1
- package/dist/server/src/lib/prompt-answer-sender.js +59 -12
- package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -0
- package/dist/server/src/lib/session/chat-turn-progress.js +57 -6
- package/dist/server/src/lib/session/current-output-builder.js +19 -0
- package/dist/server/src/lib/session/worktree-session-reconcile.js +83 -10
- package/dist/server/src/lib/timer-manager.js +7 -0
- package/dist/server/src/lib/tmux/tmux.js +24 -2
- package/dist/server/src/lib/verification/env-clean-gate.js +30 -2
- package/package.json +1 -1
- package/release-notes/0.46.1.json +40 -0
- package/.next/server/chunks/5625.js +0 -25
- package/.next/static/chunks/5371-a94ed618148287a0.js +0 -1
- package/.next/static/chunks/5794-947fb4934d8be193.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-2eb1d0fd0a077b7e.js +0 -1
- /package/.next/static/{zI2nQ6WKboSbFbMF4EtrJ → QxDf7lm-JJkWoj-TyWiSB}/_buildManifest.js +0 -0
- /package/.next/static/{zI2nQ6WKboSbFbMF4EtrJ → QxDf7lm-JJkWoj-TyWiSB}/_ssgManifest.js +0 -0
|
@@ -86,6 +86,8 @@ const session_ownership_1 = require("../../lib/tmux/session-ownership");
|
|
|
86
86
|
const control_mode_tmux_transport_1 = require("../../lib/tmux/control-mode-tmux-transport");
|
|
87
87
|
const auto_yes_manager_1 = require("../../lib/polling/auto-yes-manager");
|
|
88
88
|
const response_poller_1 = require("../../lib/polling/response-poller");
|
|
89
|
+
const auto_yes_poller_state_1 = require("../../lib/polling/auto-yes-poller-state");
|
|
90
|
+
const auto_yes_enter_fallback_1 = require("../../lib/polling/auto-yes-enter-fallback");
|
|
89
91
|
const ws_server_1 = require("../../lib/ws-server");
|
|
90
92
|
const logger_1 = require("../../lib/logger");
|
|
91
93
|
const logger = (0, logger_1.createLogger)('worktree-session-reconcile');
|
|
@@ -152,8 +154,9 @@ function planSessionRenames(db, rename, errors) {
|
|
|
152
154
|
// getSessionName validates already; assert it explicitly so the guarantee
|
|
153
155
|
// is stated where the name is about to be handed to tmux (Issue #1621).
|
|
154
156
|
(0, validation_1.validateSessionName)(newName);
|
|
155
|
-
if (oldName !== newName)
|
|
156
|
-
plans.push({ oldName, newName, rename, source: 'roster' });
|
|
157
|
+
if (oldName !== newName) {
|
|
158
|
+
plans.push({ oldName, newName, rename, cliToolId, instanceId, source: 'roster' });
|
|
159
|
+
}
|
|
157
160
|
}
|
|
158
161
|
catch (error) {
|
|
159
162
|
errors.push(`session name for ${rename.oldId}/${instanceId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -284,8 +287,16 @@ function discoverSessionRenames(renames, liveNames, knownIds, result) {
|
|
|
284
287
|
: attributed.cliToolId;
|
|
285
288
|
const newName = tool.getSessionName(rename.newId, instanceId);
|
|
286
289
|
(0, validation_1.validateSessionName)(newName);
|
|
287
|
-
if (name !== newName)
|
|
288
|
-
plans.push({
|
|
290
|
+
if (name !== newName) {
|
|
291
|
+
plans.push({
|
|
292
|
+
oldName: name,
|
|
293
|
+
newName,
|
|
294
|
+
rename,
|
|
295
|
+
cliToolId: attributed.cliToolId,
|
|
296
|
+
instanceId,
|
|
297
|
+
source: 'live',
|
|
298
|
+
});
|
|
299
|
+
}
|
|
289
300
|
}
|
|
290
301
|
catch (error) {
|
|
291
302
|
result.errors.push(`attribute session ${name}: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -374,6 +385,10 @@ function allocateTempName(taken, ordinal) {
|
|
|
374
385
|
}
|
|
375
386
|
/**
|
|
376
387
|
* Rename the live tmux sessions in two stages so no intermediate state collides.
|
|
388
|
+
*
|
|
389
|
+
* @returns The plans whose session was renamed in BOTH stages (Issue #3713: a
|
|
390
|
+
* stage-2 `false` — the session vanished from its temporary name — is not
|
|
391
|
+
* one; it is reported as skipped).
|
|
377
392
|
*/
|
|
378
393
|
async function renameSessionsTwoStage(plans, live, deps, result) {
|
|
379
394
|
if (plans.length === 0)
|
|
@@ -426,7 +441,14 @@ async function renameSessionsTwoStage(plans, live, deps, result) {
|
|
|
426
441
|
const completed = [];
|
|
427
442
|
for (const { plan, tempName } of staged) {
|
|
428
443
|
try {
|
|
429
|
-
await deps.renameSession(tempName, plan.newName)
|
|
444
|
+
if (!(await deps.renameSession(tempName, plan.newName))) {
|
|
445
|
+
result.skippedSessions.push({
|
|
446
|
+
oldName: plan.oldName,
|
|
447
|
+
newName: plan.newName,
|
|
448
|
+
reason: 'session no longer exists',
|
|
449
|
+
});
|
|
450
|
+
continue;
|
|
451
|
+
}
|
|
430
452
|
result.renamedSessions.push({ oldName: plan.oldName, newName: plan.newName });
|
|
431
453
|
completed.push(plan);
|
|
432
454
|
// The control-mode attach survived the rename; only the registry key is
|
|
@@ -453,6 +475,37 @@ async function renameSessionsTwoStage(plans, live, deps, result) {
|
|
|
453
475
|
}
|
|
454
476
|
return completed;
|
|
455
477
|
}
|
|
478
|
+
/** The Auto-Yes composite key of a plan's instance under `worktreeId`. */
|
|
479
|
+
function autoYesKeyOf(plan, worktreeId) {
|
|
480
|
+
return (0, auto_yes_manager_1.buildCompositeKey)(worktreeId, plan.cliToolId, plan.instanceId);
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Carry Auto-Yes's memory of an answer stopped part-way, and of a send still in
|
|
484
|
+
* flight, to the new key of each session that moved (Issue #3713).
|
|
485
|
+
*
|
|
486
|
+
* Only for the renames that succeeded in both stages: a refused, failed or
|
|
487
|
+
* vanished rename leaves the destination's live session — and its memory —
|
|
488
|
+
* alone. Not part of {@link migrateRuntimeState}, which still runs for every
|
|
489
|
+
* requested pair: a grant, a response poller or a WebSocket room is about the
|
|
490
|
+
* worktree, this memory is about one process.
|
|
491
|
+
*/
|
|
492
|
+
function moveAutoYesPartialAnswers(completed, sourceEpochs) {
|
|
493
|
+
const moves = [];
|
|
494
|
+
for (const plan of completed) {
|
|
495
|
+
const sourceEpoch = sourceEpochs.get(plan);
|
|
496
|
+
if (sourceEpoch === undefined)
|
|
497
|
+
continue;
|
|
498
|
+
moves.push({
|
|
499
|
+
oldKey: autoYesKeyOf(plan, plan.rename.oldId),
|
|
500
|
+
newKey: autoYesKeyOf(plan, plan.rename.newId),
|
|
501
|
+
sourceEpoch,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
const received = (0, auto_yes_poller_state_1.movePartialAnswers)(moves);
|
|
505
|
+
if (received.length > 0) {
|
|
506
|
+
logger.info('reconcile:auto-yes-partial-answers-moved', { keys: received });
|
|
507
|
+
}
|
|
508
|
+
}
|
|
456
509
|
/**
|
|
457
510
|
* Move the in-process state that is keyed on a worktree ID.
|
|
458
511
|
*
|
|
@@ -468,15 +521,27 @@ function migrateRuntimeState(db, renames, result) {
|
|
|
468
521
|
const runningAutoYesPollers = new Set((0, auto_yes_manager_1.getAutoYesPollerCompositeKeys)());
|
|
469
522
|
const movedAutoYes = (0, auto_yes_manager_1.migrateAutoYesStateWorktreeIds)(renames);
|
|
470
523
|
result.movedAutoYesKeys = movedAutoYes.map((move) => move.newKey);
|
|
524
|
+
// The poller's timer chain captures the worktree ID, so re-keying its map
|
|
525
|
+
// would leave it polling the old session. Stop and restart instead — the
|
|
526
|
+
// Auto-Yes *state* (deadline, stop pattern) is what must survive, and it
|
|
527
|
+
// already has. Every old poller is stopped before any successor starts
|
|
528
|
+
// (Issue #3713): in a swap (A↔B) with both running, stop A → start B would
|
|
529
|
+
// find B's own poller still there ("already_running"), and the stop B that
|
|
530
|
+
// follows would leave the B side with none.
|
|
531
|
+
const restarts = [];
|
|
471
532
|
for (const move of movedAutoYes) {
|
|
472
533
|
if (!runningAutoYesPollers.has(move.oldKey))
|
|
473
534
|
continue;
|
|
474
535
|
try {
|
|
475
|
-
// The poller's timer chain captures the worktree ID, so re-keying its map
|
|
476
|
-
// would leave it polling the old session. Stop and restart instead — the
|
|
477
|
-
// Auto-Yes *state* (deadline, stop pattern) is what must survive, and it
|
|
478
|
-
// already has.
|
|
479
536
|
(0, auto_yes_manager_1.stopAutoYesPolling)(move.oldKey);
|
|
537
|
+
restarts.push(move);
|
|
538
|
+
}
|
|
539
|
+
catch (error) {
|
|
540
|
+
result.errors.push(`auto-yes poller ${move.newKey}: ${error instanceof Error ? error.message : String(error)}`);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
for (const move of restarts) {
|
|
544
|
+
try {
|
|
480
545
|
const started = (0, auto_yes_manager_1.startAutoYesPolling)(move.newWorktreeId, move.cliToolId, move.instanceId);
|
|
481
546
|
if (started.started) {
|
|
482
547
|
result.restartedAutoYesPollers.push(move.newKey);
|
|
@@ -572,7 +637,15 @@ async function reconcileWorktreeSessions(db, renamesOrOldId, newIdOrOptions, may
|
|
|
572
637
|
result.planSources.discovered++;
|
|
573
638
|
}
|
|
574
639
|
const ownedPlans = excludeForeignSessionPlans(db, plans, live, livePaths, deps, result);
|
|
575
|
-
|
|
640
|
+
// Issue #3713: each source session's epoch, read before the first rename's
|
|
641
|
+
// await — a session begun under the old key while the renames run is not the
|
|
642
|
+
// one that moves, and its memory stays where it is.
|
|
643
|
+
const sourceEpochs = new Map(ownedPlans.map((plan) => [plan, (0, auto_yes_enter_fallback_1.getEnterFallbackSessionEpoch)(autoYesKeyOf(plan, plan.rename.oldId))]));
|
|
644
|
+
const completed = await renameSessionsTwoStage(ownedPlans, live, deps, result);
|
|
645
|
+
// No await between the renames and this: Auto-Yes's memory of an answer
|
|
646
|
+
// stopped part-way (and of a send still in flight) follows exactly the
|
|
647
|
+
// sessions that moved, before any poller restarts below.
|
|
648
|
+
moveAutoYesPartialAnswers(completed, sourceEpochs);
|
|
576
649
|
}
|
|
577
650
|
// Runtime state moves after the sessions: a poller that ticks in between
|
|
578
651
|
// fails one capture against a name that is briefly gone, which is a logged
|
|
@@ -53,6 +53,13 @@ async function executeTimer(timerId) {
|
|
|
53
53
|
const instanceId = timer.instanceId;
|
|
54
54
|
// [Issue #539] Check if session is running before sending
|
|
55
55
|
const isRunning = await cliTool.isRunning(timer.worktreeId, instanceId);
|
|
56
|
+
// [Issue #3707] A cancel can succeed while the await above is pending.
|
|
57
|
+
// Re-read synchronously (no await between this read and the update below,
|
|
58
|
+
// so better-sqlite3 makes read+update atomic) and bail out unless the
|
|
59
|
+
// timer is still pending; otherwise 'cancelled' would be overwritten.
|
|
60
|
+
const current = (0, timer_db_1.getTimerById)(db, timerId);
|
|
61
|
+
if (!current || current.status !== 'pending')
|
|
62
|
+
return;
|
|
56
63
|
if (!isRunning) {
|
|
57
64
|
logger.warn('timer:no-session', { timerId, worktreeId: timer.worktreeId, instanceId });
|
|
58
65
|
(0, timer_db_1.updateTimerStatus)(db, timerId, timer_constants_1.TIMER_STATUS.NO_SESSION);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Provides functions to manage tmux sessions for Claude CLI integration
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.DIRECT_INPUT_TEXT_CHUNK_BYTES = exports.REPAINT_INVALIDATE_DELAY_MS = exports.NAVIGATION_KEY_VALUES = exports.SPECIAL_KEY_VALUES = void 0;
|
|
7
|
+
exports.DIRECT_INPUT_TEXT_CHUNK_BYTES = exports.REPAINT_INVALIDATE_DELAY_MS = exports.NAVIGATION_KEY_VALUES = exports.SPECIAL_KEY_VALUES = exports.SpecialKeysAbortedError = void 0;
|
|
8
8
|
exports.exactTarget = exactTarget;
|
|
9
9
|
exports.reconcileSessionGeometry = reconcileSessionGeometry;
|
|
10
10
|
exports.hasSession = hasSession;
|
|
@@ -577,6 +577,21 @@ function isSendableSpecialKey(key) {
|
|
|
577
577
|
}
|
|
578
578
|
/** Delay between individual key presses for TUI apps that need processing time (ms). */
|
|
579
579
|
const SPECIAL_KEY_DELAY_MS = 100;
|
|
580
|
+
/**
|
|
581
|
+
* {@link sendSpecialKeys} stopped between two keys because its
|
|
582
|
+
* `shouldContinue` said so (Issue #3706). Not wrapped in the transport error.
|
|
583
|
+
*/
|
|
584
|
+
class SpecialKeysAbortedError extends Error {
|
|
585
|
+
keysSent;
|
|
586
|
+
constructor(
|
|
587
|
+
/** How many keys reached tmux before the stop (always at least one). */
|
|
588
|
+
keysSent) {
|
|
589
|
+
super(`Special key sequence stopped after ${keysSent} key(s)`);
|
|
590
|
+
this.keysSent = keysSent;
|
|
591
|
+
this.name = 'SpecialKeysAbortedError';
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
exports.SpecialKeysAbortedError = SpecialKeysAbortedError;
|
|
580
595
|
/**
|
|
581
596
|
* Send tmux special keys (unquoted key names like Down, Up, Enter, Space).
|
|
582
597
|
* Used for cursor-based navigation in CLI tool prompts (e.g., Claude Code AskUserQuestion).
|
|
@@ -587,9 +602,11 @@ const SPECIAL_KEY_DELAY_MS = 100;
|
|
|
587
602
|
*
|
|
588
603
|
* @param sessionName - Target session name
|
|
589
604
|
* @param keys - Array of tmux special key names (e.g., ['Down', 'Down', 'Space', 'Enter'])
|
|
605
|
+
* @param options - Optional `shouldContinue`, asked after each delay (Issue #3706)
|
|
590
606
|
* @throws {Error} If any key name is not in the allowed set, or if tmux command fails
|
|
607
|
+
* @throws {SpecialKeysAbortedError} If `shouldContinue` returned false between two keys
|
|
591
608
|
*/
|
|
592
|
-
async function sendSpecialKeys(sessionName, keys) {
|
|
609
|
+
async function sendSpecialKeys(sessionName, keys, options) {
|
|
593
610
|
if (keys.length === 0)
|
|
594
611
|
return;
|
|
595
612
|
// Validate all keys are in the allowed set (command injection prevention)
|
|
@@ -604,10 +621,15 @@ async function sendSpecialKeys(sessionName, keys) {
|
|
|
604
621
|
// Delay between key presses (skip after the last key)
|
|
605
622
|
if (i < keys.length - 1) {
|
|
606
623
|
await new Promise(resolve => setTimeout(resolve, SPECIAL_KEY_DELAY_MS));
|
|
624
|
+
if (options?.shouldContinue && !options.shouldContinue()) {
|
|
625
|
+
throw new SpecialKeysAbortedError(i + 1);
|
|
626
|
+
}
|
|
607
627
|
}
|
|
608
628
|
}
|
|
609
629
|
}
|
|
610
630
|
catch (error) {
|
|
631
|
+
if (error instanceof SpecialKeysAbortedError)
|
|
632
|
+
throw error;
|
|
611
633
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
612
634
|
throw new Error(`Failed to send special keys to tmux session: ${errorMessage}`);
|
|
613
635
|
}
|
|
@@ -572,6 +572,7 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
572
572
|
removedByOtherRepository: [],
|
|
573
573
|
removedStaleDemoVitest: [],
|
|
574
574
|
ignoredByConfig: [],
|
|
575
|
+
ignoredBuiltIn: [],
|
|
575
576
|
};
|
|
576
577
|
}
|
|
577
578
|
if (!after || after.status !== 'ok') {
|
|
@@ -587,18 +588,20 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
587
588
|
removedByOtherRepository: [],
|
|
588
589
|
removedStaleDemoVitest: [],
|
|
589
590
|
ignoredByConfig: [],
|
|
591
|
+
ignoredBuiltIn: [],
|
|
590
592
|
};
|
|
591
593
|
}
|
|
592
594
|
const beforeKeys = new Set(before.entries.map((entry) => entry.key));
|
|
593
595
|
const afterKeys = new Set(after.entries.map((entry) => entry.key));
|
|
594
596
|
// Only `home-entries`, and only by the whole name: the same string under
|
|
595
597
|
// `~/.commandmate` is a different directory and stays counted.
|
|
596
|
-
const isIgnoredByConfig = (entry) => probeId === 'home-entries' &&
|
|
597
|
-
|
|
598
|
+
const isIgnoredByConfig = (entry) => probeId === 'home-entries' && ignoredHomeEntries.has(entry.key);
|
|
599
|
+
const isIgnoredBuiltIn = (entry) => probeId === 'home-entries' && isZcompdumpEntry(entry.key);
|
|
598
600
|
const added = [];
|
|
599
601
|
const ignoredAdded = [];
|
|
600
602
|
const taskSessionAdded = [];
|
|
601
603
|
const ignoredByConfig = [];
|
|
604
|
+
const ignoredBuiltIn = [];
|
|
602
605
|
for (const entry of after.entries) {
|
|
603
606
|
if (beforeKeys.has(entry.key))
|
|
604
607
|
continue;
|
|
@@ -607,6 +610,10 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
607
610
|
ignoredByConfig.push(toChange(entry, owner));
|
|
608
611
|
continue;
|
|
609
612
|
}
|
|
613
|
+
if (isIgnoredBuiltIn(entry)) {
|
|
614
|
+
ignoredBuiltIn.push(toChange(entry, owner));
|
|
615
|
+
continue;
|
|
616
|
+
}
|
|
610
617
|
if (probeId === 'tmux-sessions' && taskSession && entry.key === taskSession) {
|
|
611
618
|
// Additions only: a task session that existed at task start and is gone
|
|
612
619
|
// falls through to `removed` below like everything else (#1624).
|
|
@@ -632,6 +639,9 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
632
639
|
if (isIgnoredByConfig(entry)) {
|
|
633
640
|
ignoredByConfig.push(change);
|
|
634
641
|
}
|
|
642
|
+
else if (isIgnoredBuiltIn(entry)) {
|
|
643
|
+
ignoredBuiltIn.push(change);
|
|
644
|
+
}
|
|
635
645
|
else if (tmuxServerSurvived &&
|
|
636
646
|
change.owner !== 'self' &&
|
|
637
647
|
otherServerSessions.has(entry.key)) {
|
|
@@ -661,6 +671,7 @@ function diffEnvSnapshots(baseline, final, context, options = {}) {
|
|
|
661
671
|
removedByOtherRepository,
|
|
662
672
|
removedStaleDemoVitest,
|
|
663
673
|
ignoredByConfig,
|
|
674
|
+
ignoredBuiltIn,
|
|
664
675
|
};
|
|
665
676
|
});
|
|
666
677
|
// A measured violation is a verdict and outranks an unmeasured probe; an
|
|
@@ -735,6 +746,20 @@ function formatIgnoredByConfig(changes) {
|
|
|
735
746
|
const names = changes.map((change) => change.key).join(', ');
|
|
736
747
|
return [` ignored (options.envCleanIgnoreHomeEntries): ${names}`];
|
|
737
748
|
}
|
|
749
|
+
/** Built-in `home-entries` exclusions (zsh compinit cache), on their own line (#3672). */
|
|
750
|
+
function formatIgnoredBuiltIn(changes) {
|
|
751
|
+
if (changes.length === 0)
|
|
752
|
+
return [];
|
|
753
|
+
const names = changes.map((change) => change.key).join(', ');
|
|
754
|
+
return [` ignored (built-in): ${names}`];
|
|
755
|
+
}
|
|
756
|
+
/** Additions excused as another worktree's, named on a clean report (#3683). */
|
|
757
|
+
function formatIgnoredAttributed(changes) {
|
|
758
|
+
if (changes.length === 0)
|
|
759
|
+
return [];
|
|
760
|
+
const names = changes.map((change) => change.key).join(', ');
|
|
761
|
+
return [` ignored (attributed to another worktree): ${names}`];
|
|
762
|
+
}
|
|
738
763
|
/**
|
|
739
764
|
* The header's account of what could be excused, so a report judged against a
|
|
740
765
|
* baseline written before #2472 says why the task's own session was not.
|
|
@@ -765,6 +790,8 @@ function formatEnvCleanReport(diff) {
|
|
|
765
790
|
lines.push(...formatRemovedByOtherRepository(probe.removedByOtherRepository));
|
|
766
791
|
lines.push(...formatRemovedStaleDemoVitest(probe.removedStaleDemoVitest));
|
|
767
792
|
lines.push(...formatIgnoredByConfig(probe.ignoredByConfig));
|
|
793
|
+
lines.push(...formatIgnoredBuiltIn(probe.ignoredBuiltIn));
|
|
794
|
+
lines.push(...formatIgnoredAttributed(probe.ignoredAdded));
|
|
768
795
|
continue;
|
|
769
796
|
}
|
|
770
797
|
lines.push(` ${probe.probeId} VIOLATED (${label}): +${probe.added.length} -${probe.removed.length}`);
|
|
@@ -775,6 +802,7 @@ function formatEnvCleanReport(diff) {
|
|
|
775
802
|
lines.push(...formatRemovedByOtherRepository(probe.removedByOtherRepository));
|
|
776
803
|
lines.push(...formatRemovedStaleDemoVitest(probe.removedStaleDemoVitest));
|
|
777
804
|
lines.push(...formatIgnoredByConfig(probe.ignoredByConfig));
|
|
805
|
+
lines.push(...formatIgnoredBuiltIn(probe.ignoredBuiltIn));
|
|
778
806
|
for (const excused of probe.ignoredAdded) {
|
|
779
807
|
lines.push(` · ${excused.key} (ignored: belongs to another worktree)`);
|
|
780
808
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "commandmate",
|
|
3
|
-
"version": "0.46.
|
|
3
|
+
"version": "0.46.1",
|
|
4
4
|
"description": "No long blocks of time? Run an AI team from your phone. Git worktree sessions, task contracts and verification gates for Claude Code, Codex, Gemini CLI, Copilot, OpenCode, Antigravity and Command Code.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agents",
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.46.1",
|
|
3
|
+
"date": "2026-10-16",
|
|
4
|
+
"highlight": {
|
|
5
|
+
"ja": "Auto-Yes を切った直後や切り替えの最中に、古い回答が送られたり同じ確認に二重に答えたりする問題を直しました。",
|
|
6
|
+
"en": "Fixed Auto-Yes sending a stale answer, or answering the same prompt twice, right after it was turned off or switched."
|
|
7
|
+
},
|
|
8
|
+
"added": [],
|
|
9
|
+
"improved": [],
|
|
10
|
+
"fixed": [
|
|
11
|
+
{
|
|
12
|
+
"ja": "Auto-Yes を切った直後に、待ちの間に始まっていた回答が 1 回送られてしまう問題を直しました。",
|
|
13
|
+
"en": "Fixed an answer that had already started being sent once right after Auto-Yes was turned off."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"ja": "途中まで入力した回答が残っているとき、Auto-Yes が同じ確認にもう一度入力しないようにしました。",
|
|
17
|
+
"en": "Auto-Yes no longer types into the same prompt again when an earlier answer was left half-entered."
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"ja": "worktree の名前が変わったときも、途中まで入力した回答の記録が引き継がれるようにしました。",
|
|
21
|
+
"en": "The record of a half-entered answer now carries over when a worktree is renamed."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"ja": "止めたセッションの古い処理が、返答の保存や完了の通知を遅れて出す問題を直しました。",
|
|
25
|
+
"en": "Fixed a stopped session's old work saving replies or sending completion notices late."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"ja": "予約送信をキャンセルしたのに送信されてしまうことがある問題を直しました。",
|
|
29
|
+
"en": "Fixed a scheduled message sometimes being sent even though it had been cancelled."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"ja": "Esc キーが、最大化したファイルや検索欄、メニューなどを前面のものから 1 つずつ閉じるようにしました。",
|
|
33
|
+
"en": "The Esc key now closes the front-most layer first, one at a time, such as a maximized file, a search box or a menu."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"ja": "チャットの検索で、記号を表す書き方(< など)に一致したときも強調されるようにしました。",
|
|
37
|
+
"en": "Chat search now highlights matches on character references such as <."
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";exports.id=5625,exports.ids=[5625],exports.modules={60:(a,b,c)=>{c.d(b,{QM:()=>h,V0:()=>e,ZX:()=>f,bE:()=>g});var d=c(61789);function e(a){let b=(0,d.x7)(a),c=(0,d.M4)(a,b);return{chromeStart:b,echoEnd:c,start:c+1,end:b>=0?b:a.length,headTruncated:c<0}}function f(a){let b=a.split("\n"),c=e(b.map(d.aJ));return c.start>=c.end?"":b.slice(c.start,c.end).join("\n")}function g(a){let b=a.split("\n"),c=e(b),f=c.start>=c.end?"":b.slice(c.start,c.end).join("\n");return d.$t.test(f)&&!d.kD.test(a)&&!d.Ty.test(a)}function h(a,b,c,d,e,f=!1){if(a=Math.max(0,a),"opencode"===d||"copilot"===d||f){let a=e(b);return a>=0?a+1:0}if("antigravity"===d||"command-code"===d){let c=e(b);return c>=0?c+1:Math.max(0,a)}if(a>=b||c){let a=e(40);return a>=0?a+1:0}if("codex"===d)return Math.max(0,a);if(a>=b-5){let a=e(50);return a>=0?a+1:Math.max(0,b-40)}return Math.max(0,a)}},8988:(a,b,c)=>{c.d(b,{R:()=>g});let d=/📄 Session log: (.+?\/([^\/\s]+\.jsonl))/,e=/Request ID: ([^\s\n]+)/,f=/Summary: (.+?)(?:\n─|$)/s;function g(a){let b={content:a},c=d.exec(a);c&&(b.logFileName=c[2],b.logFilePath=c[1]);let g=e.exec(a);g&&(b.requestId=g[1]);let h=f.exec(a);return h&&(b.summary=h[1].trim()),b}},9516:(a,b,c)=>{c.d(b,{Hu:()=>i,Ll:()=>j});let d=["type something","chat about this"],e=/^\s*\[[ xX]\]\s*/,f=/(?:…|\.\.\.)\s*$/,g=new Set(["yes","y","no","n"]);function h(a){return a.replace(e,"").replace(f,"").replace(/\s+/g," ").trim().toLowerCase()}function i(a,b){if("multiple_choice"!==a.type)return null;let c=function(a,b){let c=h(b);if(""===c)return null;let d=a.questions.map((a,b)=>({entry:a,index:b})).filter(({entry:a})=>(function(a,b){let[c,d]=a.length<=b.length?[a,b]:[b,a];return c.length<8?c===d:d.includes(c)})(h(a.question),c));return 1===d.length?d[0]:null}(b,a.question);if(null===c)return null;let{entry:f,index:g}=c,i=new Map(a.options.map(a=>[a.number,a])),j=[];for(let[a,b]of f.choices.entries()){var k;let c=a+1,d=i.get(c);if(!d||!function(a,b){if(""===a||""===b)return!1;if(a===b)return!0;let[c,d]=a.length<=b.length?[a,b]:[b,a];return!(c.length<8)&&d.startsWith(c)}(h(d.label),h(b.label)))return null;j.push({...d,label:`${(k=d.label,e.exec(k)?.[0]??"")}${b.label}`,...b.description?{description:b.description}:{}})}let l=[];for(let b of a.options)!(b.number<=f.choices.length)&&function(a){let b=h(a);return d.some(a=>b===a||b.startsWith(a))}(b.label)&&(j.push(b),l.push(b.number));return j.sort((a,b)=>a.number-b.number),{...a,question:f.question,options:j,isAskUserQuestion:!0,askUserQuestion:{...f.header?{header:f.header}:{},multiSelect:f.multiSelect,questionIndex:g,questionCount:b.questions.length,metaOptionNumbers:l}}}function j(a,b){let c=b.trim();if(/^\d+$/.test(c)){let b=Number.parseInt(c,10);return a.options.some(a=>a.number===b)?{ok:!0,input:String(b)}:{ok:!1,reason:"answer_out_of_range",message:"The option number is outside the range this prompt offers. Use `commandmate capture <worktree-id> --json` to list the current options."}}let d=function(a,b){let c=h(b);if(""===c)return[];let d=a.filter(a=>h(a.label)===c);return d.length>0?d:c.length<2?[]:a.filter(a=>h(a.label).startsWith(c))}(a.options,c);if(1===d.length){let[a]=d;return{ok:!0,input:String(a.number),resolved:{via:"semantic",optionNumber:a.number,optionLabel:a.label}}}return d.length>1?{ok:!1,reason:"unresolvable_answer",message:"The answer matches more than one option label. Answer with an option number."}:a.options.some(a=>!0===a.requiresTextInput)&&!g.has(c.toLowerCase())?{ok:!0,input:b}:{ok:!1,reason:"unresolvable_answer",message:"No option label matches the answer. Answer with an option number (yes/no is not resolved on a numbered picker — Issue #1681)."}}},16399:(a,b,c)=>{c.d(b,{v7:()=>d.v7,DR:()=>d.DR,LP:()=>d.LP,XK:()=>d.XK,pL:()=>d.pL,GE:()=>d.GE,Ue:()=>d.Ue,aq:()=>d.aq,hN:()=>d.hN,kC:()=>d.kC,xU:()=>N,bZ:()=>O,W8:()=>d.W8,W5:()=>Y,BS:()=>$,_i:()=>Z,_C:()=>_});var d=c(24455),e=c(31990),f=c(54300),g=c(77244),h=c(75498),i=c(91318),j=c(32236),k=c(61878),l=c(16402),m=c(51607),n=c(52767),o=c(88807),p=c(52660),q=c(34331),r=c(63869),s=c(4803),t=c(79892),u=c(8360),v=c(61789),w=c(85726),x=c(77093),y=c(93997),z=c(68901),A=c(72626),B=c(66007),C=c(36925);let D=(0,A.h)("auto-yes-poller");function E(a){let b="multiple_choice"===a.type?a.options.map(a=>`${a.isDefault?">":""}${a.number}.${a.label}`).join("\n"):"";return[(0,w.J)(a),b,a.approvalTarget??""].join("\0")}function F(a,b,c,d){let e=`${c}\u0000${b}`;if(a.lastSkipWarnKey===e)return void D.debug(c,{...d,repeated:!0});a.lastSkipWarnKey=e,D.warn(c,d)}var G=c(52277);function H(a,b,c,d,e){let{worktreeId:f,cliToolId:g,instanceId:h}=a;(0,G.ZS)(f,g,h,b),F(a.pollerState,c,d,{worktreeId:f,cliToolId:g,instanceId:h,...e})}function I(a,b){let{promptData:c,frameKey:d}=a;H(a,{reason:"unclassified-frame",mode:null,promptType:c.type},`${d}\u0000${b.dialog?.kind??""}\u0000${b.mode}`,"poller:auto-yes-skipped-unclassified-frame",{promptType:c.type,dialogKind:b.dialog?.kind??null,answerMode:b.dialog?.answerMode??null,gateMode:b.mode})}let J=(0,A.h)("auto-yes-poller"),K=(0,C.v)("__autoYesPollerStates",()=>new Map),L=(0,C.v)("__autoYesWithheldNoReceiptLoggedAt",()=>new Map);function M(a){return K.get(a)}function N(a){let b=M(a);return b?.lastServerResponseTimestamp??null}function O(a){return K.has(a)}function P(a){let b=M(a);b&&(b.consecutiveErrors=0,b.currentInterval=d.ps)}function Q(a){let b=M(a);if(b&&(b.consecutiveErrors++,b.currentInterval=(0,d.G)(b.consecutiveErrors),b.consecutiveErrors>=z.ul)){let b=(0,d.Ue)(a),c=(0,d.pL)(a);c&&(0,d.XK)(b,c,"consecutive_errors",(0,d.GE)(a)??void 0),Z(a)}}async function R(a,b,c,d){let f=c??z.FW,g=await (0,e.Wh)(a,b,f,d);return{raw:g,clean:(0,v._A)((0,v.aJ)(g))}}async function S(a,b,c,d){let{worktreeId:g,cliToolId:n,instanceId:o,pollerState:p,promptData:r,frameKey:w}=a,x=null===c.dialog?(0,m.gp)(n,d):null;if(null===x||!x.eligible)return p.enterFallbackCandidateKey=null,I(a,c),!1;let z=(0,m.GR)(r);if(p.enterFallbackSentKey===w)return p.enterFallbackCandidateKey=null,(0,m.gq)(g,n,o,z),I(a,c),F(p,`${w}\u0000enter-fallback-no-effect`,"poller:auto-yes-enter-fallback-no-effect",{worktreeId:g,cliToolId:n,instanceId:o,promptType:r.type,refusalReason:x.refusalReason}),!1;let A=(0,i.n)(g,n,o),B=(0,h.sD)(r,A);if(B.suppressedBy)return p.enterFallbackCandidateKey=null,H(a,{reason:B.suppressedBy,mode:A?.mode??null,promptType:r.type,pattern:B.pattern},`${w}\u0000${B.suppressedBy}\u0000${A?.mode??""}\u0000${B.pattern??""}`,"poller:auto-yes-suppressed-by-policy",{reason:B.suppressedBy,mode:A?.mode??null,pattern:B.pattern,promptType:r.type,enterFallback:!0}),!1;if(null===B.answer||"multiple_choice"===r.type&&(0,s.eM)(r))return p.enterFallbackCandidateKey=null,I(a,c),!1;if(p.enterFallbackCandidateKey!==w)return p.enterFallbackCandidateKey=w,J.debug("poller:auto-yes-enter-fallback-candidate",{worktreeId:g,cliToolId:n,instanceId:o,promptType:r.type}),!1;let C=u.CLIToolManager.getInstance().getTool(n).getSessionName(g,o),D=await (0,q.L)(g,C);if(null===D||"foreign"===D.verdict)return F(p,`${w}\u0000${C}\u0000${D?"foreign":"worktree_not_found"}`,"poller:auto-yes-skipped-foreign-session",{worktreeId:g,cliToolId:n,instanceId:o,sessionName:C,sessionPath:D?.sessionPath??null,reason:D?"foreign":"worktree_not_found",enterFallback:!0}),!1;if(!function(a,b){let{worktreeId:c,cliToolId:d,instanceId:e,frameKey:g}=a,h=(0,v._A)((0,v.aJ)(b)),i=(0,k.zJ)(b,d),n=(0,f.$M)(h,d,h.split("\n"),b,{worktreeId:c,instanceId:e},i);if(!n.isPrompt||!n.promptData||E(n.promptData)!==g||"codex"===d&&((0,v.E6)(i)||(0,j.AD)(i)))return!1;let o=(0,l.r_)(d,n.promptData.type,i);return!o.allowed&&null===o.dialog&&(0,m.gp)(d,b).eligible}(a,await (0,e.WD)(g,n,(d??"").split("\n").length,o)))return p.enterFallbackCandidateKey=null,J.debug("poller:auto-yes-enter-fallback-fresh-frame-differs",{worktreeId:g,cliToolId:n,instanceId:o,promptType:r.type}),!1;try{await (0,t.KB)(C,["Enter"])}finally{(0,y.gm)(C)}return p.enterFallbackSentKey=w,p.enterFallbackCandidateKey=null,(0,m.Wl)(g,n,o,{promptType:r.type,refusalReason:x.refusalReason,screenKey:z}),J.info("poller:auto-yes-enter-fallback-sent",{worktreeId:g,cliToolId:n,instanceId:o,promptType:r.type,refusalReason:x.refusalReason,composerState:x.composerState}),await T(a,b,"[Enter]"),!0}async function T(a,b,d){let{worktreeId:e,cliToolId:f,instanceId:g,compositeKey:h,pollerState:i,promptData:j,promptKey:k}=a;var l=Date.now();let m=M(h);m&&(m.lastServerResponseTimestamp=l),P(h),i.lastAnsweredPromptKey=k,i.lastAnsweredAt=Date.now(),i.lastSkipWarnKey=null,J.info("poller:response-sent",{worktreeId:e,cliToolId:f,instanceId:g}),(0,n.r)((0,o.getDbInstance)(),e,f,g??f,"prompt_answered_auto",{promptType:j.type});let q=null;try{q=(0,p.recordAnsweredPrompt)((0,o.getDbInstance)(),{worktreeId:e,cliToolId:f,instanceId:g??f,promptData:j,answer:d,answeredBy:"auto",content:b.rawContent||b.cleanContent})}catch(a){J.warn("poller:prompt-audit-record-failed",{worktreeId:e,cliToolId:f,instanceId:g,error:(0,x.u1)(a)})}if(q){let a=q;Promise.resolve().then(c.bind(c,43015)).then(({broadcastMessage:b})=>{b(a.created?"message":"message_updated",{worktreeId:e,message:a.message})}).catch(()=>{})}let[{startPolling:r},{broadcastTerminalSnapshotAfterInteraction:s}]=await Promise.all([c.e(2839).then(c.bind(c,95220)),Promise.resolve().then(c.bind(c,99508))]);r(e,f,g),s(e,f,g)}async function U(a,b,c,e,n,o,p){let s=(0,d.v7)(a,c,o);try{let t=(0,m.cr)(s);(b.enterFallbackEpoch??0)!==t&&(b.enterFallbackSentKey=null,b.enterFallbackCandidateKey=null,b.enterFallbackEpoch=t);let x=(0,k.zJ)(p??e,c),z=(0,f.$M)(e,c,n,p,{worktreeId:a,instanceId:o},x);if(!z.isPrompt||!z.promptData)return b.lastAnsweredPromptKey=null,b.lastAnsweredAt=null,b.lastSkipWarnKey=null,b.enterFallbackCandidateKey=null,"antigravity"!==c||z.isPrompt||function(a,b,c,d){if((0,g.FD)(a,"antigravity",b))return;let e=Date.now(),f=L.get(c);if(void 0!==f&&e-f<6e4)return;let h=d();if(h.isPrompt&&h.promptData){for(let[a,b]of L)e-b>=6e4&&L.delete(a);L.set(c,e),J.info("antigravity-autoyes-withheld-no-hook-receipt",{worktreeId:a,instanceId:b??"antigravity",windowMs:g.Wo,hint:"hook の受信記録が直近に無いため Auto-Yes は答えなかった。~/.gemini/config/hooks.json の向き先(#2622)を確認"})}}(a,o,s,()=>(0,f.$M)(e,c,n,p)),"no_prompt";let A=(0,w.J)(z.promptData),B=E(z.promptData);if(b.lastAnsweredPromptKey===A&&null!==b.lastAnsweredAt&&Date.now()-b.lastAnsweredAt<d.UL)return"duplicate";let C={worktreeId:a,cliToolId:c,instanceId:o,compositeKey:s,pollerState:b,promptData:z.promptData,promptKey:A,frameKey:B},D=function(a,b){let{cliToolId:c,promptData:d,frameKey:e}=a,f="codex"===c?(0,v.E6)(b):null;if(f)return H(a,{reason:"agent-launch-dialog",mode:null,promptType:d.type},`${e}\u0000${f}`,"poller:auto-yes-skipped-launch-dialog",{dialog:f,promptType:d.type}),{kind:"left-alone"};if("codex"===c&&(0,j.AD)(b))return H(a,{reason:"unclassified-frame",mode:null,promptType:d.type},`${e}\u0000codex-model-picker`,"poller:auto-yes-skipped-model-picker",{promptType:d.type}),{kind:"left-alone"};let g=(0,l.r_)(c,d.type,b);return g.allowed?{kind:"ours"}:{kind:"dialog-gate-refused",dialogGate:g}}(C,x);if("dialog-gate-refused"!==D.kind&&(b.enterFallbackCandidateKey=null),"left-alone"===D.kind)return"no_answer";if("dialog-gate-refused"===D.kind)return await S(C,z,D.dialogGate,p)?"responded":"no_answer";let G=(0,i.n)(a,c,o),I=(0,h.sD)(z.promptData,G);I.suppressedBy&&H(C,{reason:I.suppressedBy,mode:G?.mode??null,promptType:z.promptData.type,pattern:I.pattern},`${B}\u0000${I.suppressedBy}\u0000${G?.mode??""}\u0000${I.pattern??""}`,"poller:auto-yes-suppressed-by-policy",{reason:I.suppressedBy,mode:G?.mode??null,pattern:I.pattern,promptType:z.promptData.type});let K=I.answer;if(null===K)return"no_answer";let M=u.CLIToolManager.getInstance().getTool(c).getSessionName(a,o),N=await (0,q.L)(a,M);if(null===N||"foreign"===N.verdict)return F(b,`${B}\u0000${M}\u0000${N?"foreign":"worktree_not_found"}`,"poller:auto-yes-skipped-foreign-session",{worktreeId:a,cliToolId:c,instanceId:o,sessionName:M,sessionPath:N?.sessionPath??null,reason:N?"foreign":"worktree_not_found"}),"no_answer";try{await (0,r.tV)({sessionName:M,answer:K,cliToolId:c,promptData:z.promptData})}finally{(0,y.gm)(M)}return await T(C,z,K),"responded"}catch{return Q(s),J.warn("poller:detect-respond-error",{worktreeId:a,cliToolId:c,instanceId:o}),"error"}}async function V(a,b,c){let e=(0,d.v7)(a,b,c),f=M(e);if("valid"===function(a,b){if(!b)return"stopped";let c=(0,d.Ue)(a),e=(0,d.pL)(a);if(!e)return Z(a),"expired";let f=(0,d.GE)(a)??void 0,g=(0,d.aq)(c,e,f);return g?.enabled?"valid":(Z(a),"expired")}(e,f)){try{let g=(0,d.aq)(a,b,c),h=g?.stopPattern?z.FW:z.Ke,{raw:i,clean:j}=await R(a,b,h,c);f.waitingForSession&&(f.waitingForSession=!1,J.info("poller:session-appeared",{worktreeId:a,cliToolId:b,instanceId:c}));let k=j.split("\n");if(function(a,b,c){if(b.stopCheckBaselineLength<0)return b.stopCheckBaselineLength=c.length,!1;let e=b.stopCheckBaselineLength;if(c.length>e){let f=c.substring(e);return b.stopCheckBaselineLength=c.length,(0,d.Cs)(a,f,Z)}return c.length<e&&(b.stopCheckBaselineLength=c.length),!1}(e,f,j))return;let l=await U(a,f,b,j,k,c,i);if("error"!==l&&P(e),"responded"===l)return void X(a,b,c,d.ZO);if("no_prompt"===l){let e=k.slice(-d.Re).join("\n");if((0,v.ut)(b,e))return void X(a,b,c,z.QN)}}catch(g){if(await W(a,b,c)){f.waitingForSession||(f.waitingForSession=!0,J.info("poller:waiting-for-session",{worktreeId:a,cliToolId:b,instanceId:c})),X(a,b,c,d.BT);return}Q(e),J.warn("poller:poll-error",{worktreeId:a,cliToolId:b,instanceId:c,error:(0,x.u1)(g)})}X(a,b,c)}}async function W(a,b,c){try{return await (0,e.Qj)(a,b,c)==="absent"}catch{return!1}}function X(a,b,c,e){let f=M((0,d.v7)(a,b,c));if(!f)return;let g=Math.max(e??f.currentInterval,d.ps);f.timerId=setTimeout(()=>{V(a,b,c)},g)}function Y(a,b,c){if(!(0,B.h6)(a))return{started:!1,reason:"invalid worktree ID"};let e=c??b,f=(0,d.aq)(a,b,e);if(!f?.enabled)return{started:!1,reason:"auto-yes not enabled"};let g=(0,d.v7)(a,b,e),h=M(g);if(!h&&K.size>=d.fC)return{started:!1,reason:"max concurrent pollers reached"};if(h&&h.cliToolId===b)return{started:!0,reason:"already_running"};h&&Z(g);let j={timerId:null,cliToolId:b,instanceId:e,consecutiveErrors:0,currentInterval:d.ps,lastServerResponseTimestamp:null,lastAnsweredPromptKey:null,lastAnsweredAt:null,stopCheckBaselineLength:-1,lastSkipWarnKey:null};return K.set(g,j),(0,i.ie)(g),j.timerId=setTimeout(()=>{V(a,b,e)},d.ps),J.info("poller:started",{worktreeId:a,cliToolId:b,instanceId:e}),{started:!0}}function Z(a){(0,m.MR)(a);let b=M(a);b&&(b.timerId&&clearTimeout(b.timerId),K.delete(a),(0,i.ie)(a),J.info("poller:stopped",{compositeKey:a}))}function $(){for(let[a,b]of K.entries())b.timerId&&clearTimeout(b.timerId),(0,i.ie)(a),J.info("poller:stopped",{compositeKey:a,reason:"shutdown"});K.clear(),(0,m.NR)()}function _(a){(0,d._9)(Array.from(K.keys()),a).forEach(a=>Z(a)),(0,m.vR)(a)}},18778:(a,b,c)=>{c.d(b,{T:()=>g});var d=c(56791),e=c(41364);let f=(0,c(72626).h)("conversation-logger");async function g(a,b,c,h="claude"){let i=(0,d.getLastUserMessage)(a,b);if(i)try{await (0,e.hM)(b,i.content,c,h)}catch(a){f.error("conversation:log-failed",{error:a instanceof Error?a.message:String(a)})}}},21684:(a,b,c)=>{c.d(b,{U:()=>h});var d=c(33873),e=c.n(d),f=c(87447),g=c(8004);function h(){let a=e().join(process.cwd(),"data","logs");return(0,g.T)((0,f._p)("CM_LOG_DIR"),a,"CM_LOG_DIR")}},34331:(a,b,c)=>{c.d(b,{L:()=>g});var d=c(88807),e=c(73753),f=c(96463);async function g(a,b,c=(0,d.getDbInstance)()){let h=(0,e.getWorktreeById)(c,a);return h?(0,f.s_)(b,h.path):null}},40043:(a,b,c)=>{c.d(b,{AD:()=>l,Q4:()=>h,ox:()=>k,xG:()=>m});var d=c(37717),e=c(33294),f=c(36925);let g=new Set([d.g.NO_RECENT_OUTPUT,d.g.UNKNOWN_FRAME,d.g.DEFAULT]);function h(a,b){return"running"===a&&g.has(b)}let i=e.STRUCTURED_STATE_MAX_AGE_MS,j=(0,f.v)("__lastKnownStatusByKey",()=>new Map);function k(a,b,c=Date.now()){for(let[a,b]of j)c-b.at>=i&&j.delete(a);for(;j.size>512;){let a=j.keys().next();if(a.done)break;j.delete(a.value)}"positive"===b.evidence&&(j.delete(a),j.set(a,{status:b.status,reason:b.reason,at:c}))}function l(a,b=Date.now()){let c=j.get(a);return void 0===c?null:b-c.at>=i?(j.delete(a),null):c}function m(a){j.delete(a)}},41364:(a,b,c)=>{c.d(b,{Gv:()=>o,hM:()=>n});var d=c(79748),e=c.n(d),f=c(33873),g=c.n(f),h=c(1634),i=c(21684),j=c(72626),k=c(15194);function l(a="claude"){return g().join((0,i.U)(),a)}async function m(a="claude"){let b=l(a);try{await e().access(b)}catch{await e().mkdir(b,{recursive:!0})}}async function n(a,b,c,d="claude"){await m(d);let f=function(a,b="claude"){let c=(0,h.GP)(new Date,"yyyy-MM-dd"),d=`${a}-${c}.md`,e=l(b);return g().join(e,d)}(a,d),i=(0,h.GP)(new Date,"yyyy-MM-dd HH:mm:ss"),j="";try{j=await e().readFile(f,"utf-8")}catch{let b=(0,k.hR)(d)?k.ef[d]:d;j=`# ${b} Conversation Log: ${a}
|
|
2
|
-
|
|
3
|
-
Created: ${i}
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
`}j+=`## Conversation at ${i}
|
|
8
|
-
|
|
9
|
-
`,j+=`### User
|
|
10
|
-
|
|
11
|
-
`,j+=`${b}
|
|
12
|
-
|
|
13
|
-
`;let o=(0,k.hR)(d)?k.ef[d]:d;return j+=`### ${o}
|
|
14
|
-
|
|
15
|
-
`,j+=`${c}
|
|
16
|
-
|
|
17
|
-
`,j+=`---
|
|
18
|
-
|
|
19
|
-
`,await e().writeFile(f,j,"utf-8"),f}async function o(a,b="all"){let c="all"===b?[...k.XH]:[b],d=[];for(let b of c){await m(b);let c=l(b);try{let b=(await e().readdir(c)).filter(b=>b.startsWith(`${a}-`)&&b.endsWith(".md")).map(a=>g().join(c,a));d.push(...b)}catch{}}return d.sort().reverse()}(0,j.h)("log-manager")},44321:(a,b,c)=>{c.d(b,{DS:()=>h,LN:()=>f,XH:()=>g});var d=c(24455);let e=(0,c(36925).v)("__promptDedupSkips",()=>new Map);function f(a,b,c,g=Date.now()){let h=(0,d.v7)(a,b,c),i=e.get(h);e.set(h,{skippedCount:(i?.skippedCount??0)+1,lastSkippedAt:g})}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??{skippedCount:0,lastSkippedAt:null}}function h(a){let b=[];for(let{oldWorktreeId:c,newWorktreeId:f,cliToolId:g,instanceId:h}of a){if(c===f)continue;let a=(0,d.v7)(c,g,h);b.push({newKey:(0,d.v7)(f,g,h),record:e.get(a)}),e.delete(a)}for(let{newKey:a,record:c}of b)void 0!==c&&e.set(a,c)}},45146:(a,b,c)=>{c.d(b,{Et:()=>A,KQ:()=>C,MN:()=>s,fq:()=>B,g8:()=>u,sR:()=>E});var d=c(84297),e=c(72626),f=c(13033),g=c(72457),h=c(71080),i=c(44321),j=c(54300),k=c(99508),l=c(56455),m=c(40964),n=c(36925);let o=(0,e.h)("response-poller"),p=(0,n.v)("__responsePollerCoordinator",()=>({activePollers:new Map,pollingStartTimes:new Map,owners:new Map,running:new Map,pendingRestart:new Map,ownerStorage:new d.AsyncLocalStorage,generationCounter:0,pausedOnPrompt:new Set}));p.pausedOnPrompt??=new Set;let q=p.activePollers,r=p.pollingStartTimes;function s(a,b,c){return`${a}:${c??b}`}function t(a){return"opencode"===a||"copilot"===a}function u(a,b,c){let d=s(a,b,c),e={worktreeId:a,cliToolId:b,instanceId:c},f=p.running.get(d);if(f){if(f.owner.superseded=!0,Date.now()-f.since<6e4)return void p.pendingRestart.set(d,e);o.warn("poller:restart-past-stalled-tick",{pollerKey:d,generation:f.owner.generation,runningForMs:Date.now()-f.since}),p.running.delete(d)}v(d,e)}function v(a,b){let c=p.pausedOnPrompt.has(a);z(a,{resume:c}),c&&o.info("poller:resumed-after-prompt",{pollerKey:a}),function(a){let b=s(a.worktreeId,a.cliToolId,a.instanceId);p.pollingStartTimes.set(b,Date.now()),t(a.cliToolId)&&(0,f.tb)(b),w(a.worktreeId,a.cliToolId,a.instanceId)}(b)}function w(a,b,c){let d=s(a,b,c);x({worktreeId:a,cliToolId:b,instanceId:c},function(a){let b=p.owners.get(a);b&&(b.superseded=!0);let c={pollerKey:a,generation:++p.generationCounter,superseded:!1,stopped:!1,selfStopped:!1};return p.owners.set(a,c),c}(d))}function x(a,b){let c=setTimeout(()=>{y(a,b)},2e3);p.activePollers.set(b.pollerKey,c)}async function y(a,b){let c=b.pollerKey;if(!b.superseded&&!b.stopped){p.running.set(c,{owner:b,since:Date.now()});try{let d,e=p.pollingStartTimes.get(c);if(e&&Date.now()-e>18e5)return void z(c);try{d=await (0,l.y)(a.worktreeId,(0,m.mf)(a.cliToolId,a.worktreeId,a.instanceId))}catch(d){o.error("poller:ownership-check-failed",{pollerKey:c,error:d instanceof Error?d.message:String(d)}),b.superseded||b.stopped||x(a,b);return}if(null!==d){o.warn("poller:session-refused",{pollerKey:c,generation:b.generation,refusal:d}),b.superseded||b.stopped||z(c);return}let f=!1;try{f=await p.ownerStorage.run(b,()=>(0,j.zX)(a.worktreeId,a.cliToolId,a.instanceId))}catch(a){o.error("error:",{error:a instanceof Error?a.message:String(a)})}b.selfStopped&&function(a,b,c){if(c&&!t(b.cliToolId)){p.pausedOnPrompt.add(a.pollerKey),o.info("poller:paused-on-prompt",{pollerKey:a.pollerKey,generation:a.generation});return}(0,h.L1)(a.pollerKey)}(b,a,f),b.superseded||(0,k.broadcastTerminalSnapshot)(a.worktreeId,a.cliToolId,a.instanceId),b.superseded||b.stopped||x(a,b)}finally{p.running.get(c)?.owner===b&&p.running.delete(c);let a=p.pendingRestart.get(c);a&&(p.pendingRestart.delete(c),v(c,a))}}}function z(a,b={}){let c=p.ownerStorage.getStore();if(c&&c.pollerKey===a&&(c.superseded||c.stopped))return void o.info("poller:stale-stop-ignored",{pollerKey:a,generation:c.generation});b.resume||(0,j.Tq)(a,"poller-stopped");let d=p.owners.get(a),e=void 0!==d&&c===d;d&&(d.stopped=!0,d.selfStopped=e,p.owners.delete(a)),p.pendingRestart.delete(a),p.pausedOnPrompt.delete(a);let i=p.activePollers.get(a);i&&(clearTimeout(i),p.activePollers.delete(a),p.pollingStartTimes.delete(a)),(0,f.q1)(a),(0,g.iX)(a),e||b.resume||(0,h.L1)(a)}function A(a,b,c){z(s(a,b,c))}function B(){for(let a of new Set([...Array.from(p.activePollers.keys()),...Array.from(p.owners.keys()),...Array.from(p.pausedOnPrompt)]))z(a);p.pendingRestart.clear(),p.pausedOnPrompt.clear()}function C(){return Array.from(p.activePollers.keys())}function D(a){let b=a.indexOf(":");return b<=0||b===a.length-1?null:{worktreeId:a.slice(0,b),instanceId:a.slice(b+1)}}function E(a,b){let c=new Map;for(let{oldId:b,newId:d}of a)b&&d&&b!==d&&c.set(b,d);if(0===c.size)return[];let d=[],e=[];for(let a of Array.from(q.keys())){let f=D(a);if(!f)continue;let g=c.get(f.worktreeId);if(!g)continue;let h=b(f.worktreeId,f.instanceId);if(!h){e.push(a);continue}d.push({oldKey:a,newKey:s(g,h,f.instanceId),newWorktreeId:g,cliToolId:h,instanceId:f.instanceId})}let j=new Map;for(let a of d){let b=q.get(a.oldKey);b&&clearTimeout(b),q.delete(a.oldKey);let c=p.owners.get(a.oldKey);c&&(c.superseded=!0,c.stopped=!0,p.owners.delete(a.oldKey)),p.pendingRestart.delete(a.oldKey),j.set(a.newKey,{startedAt:r.get(a.oldKey)}),r.delete(a.oldKey),(0,f.q1)(a.oldKey)}for(let a of e)z(a),o.warn("poller:migrate-abandoned",{pollerKey:a});let k=[];for(let a of Array.from(p.pausedOnPrompt)){let b=D(a);if(!b)continue;let d=c.get(b.worktreeId);d&&k.push({oldKey:a,newKey:`${d}:${b.instanceId}`})}for(let a of((0,g.nZ)(d),(0,h.qt)([...d,...k]),(0,i.DS)(d.flatMap(a=>{let b=D(a.oldKey);return b?[{oldWorktreeId:b.worktreeId,newWorktreeId:a.newWorktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId}]:[]})),d)){let b=j.get(a.newKey)?.startedAt;r.set(a.newKey,b??Date.now()),t(a.cliToolId)&&(0,f.tb)(a.newKey),w(a.newWorktreeId,a.cliToolId,a.instanceId)}for(let a of k)p.pausedOnPrompt.delete(a.oldKey);for(let a of k)p.pausedOnPrompt.add(a.newKey);return d}},50779:(a,b,c)=>{c.d(b,{GT:()=>m});var d=c(88807),e=c(43167),f=c(73753),g=c(72626),h=c(57836),i=c(4806),j=c(61191),k=c(27519);let l=(0,g.h)("push/resolution");async function m(a){let{worktreeId:b,agentName:c,at:g=Date.now()}=a,m=function(a,b=Date.now()){let c;if(!(0,k.lU)())return{send:!1,reason:"push-unconfigured"};if(!(0,i.r0)(a,b))return{send:!1,reason:"no-card"};if((0,h.Te)(a))return{send:!1,reason:"still-waiting"};try{c=(0,e.rC)((0,d.getDbInstance)(),"prompt")}catch{return{send:!1,reason:"single-device",deviceCount:0}}return c<2?{send:!1,reason:"single-device",deviceCount:c}:{send:!0,reason:"cross-device-clear",deviceCount:c}}(b,g),n={worktreeId:b,instanceId:c,reason:m.reason,...void 0!==m.deviceCount?{deviceCount:m.deviceCount}:{}};if("still-waiting"!==m.reason&&(0,i._P)(b),!m.send)return void("single-device"===m.reason?l.info("resolution-push-skipped",n):l.debug("resolution-push-skipped",n));try{await (0,j.notifyPushSubscribers)({worktreeId:b,worktreeName:function(a){try{return(0,f.getWorktreeById)((0,d.getDbInstance)(),a)?.name??a}catch{return a}}(b),kind:"prompt",agentName:c,resolved:!0},g),l.info("resolution-push-sent",n)}catch(a){l.warn("resolution-push-failed",{...n,error:a instanceof Error?a.message:String(a)})}}},51607:(a,b,c)=>{c.d(b,{GR:()=>j.GR,MR:()=>j.MR,NR:()=>j.NR,Wl:()=>j.Wl,YN:()=>j.YN,cr:()=>j.cr,gp:()=>o,gq:()=>j.gq,li:()=>j.li,vR:()=>j.vR});var d=c(91536),e=c(11472),f=c(94154),g=c(61789),h=c(24455),i=c(16402),j=c(27675);let k=["enabled","disabled"],l={claude:"enabled",codex:"enabled",copilot:"disabled",opencode:"disabled","opencode-v2":"disabled",gemini:"disabled",antigravity:"disabled","vibe-local":"disabled","command-code":"disabled"},m=new Set(["content","ghost","empty"]),n=new Set(["claude","codex"]);function o(a,b,c=process.env){if("enabled"!==function(a,b=process.env){let c=b.CM_AUTOYES_ENTER_FALLBACK,d=null,e=null;if("string"==typeof c&&""!==c.trim())for(let b of c.split(",")){let[c,f]=b.split("=");if(void 0===f)continue;let g=c.trim(),h=f.trim();k.includes(h)&&("*"===g?d=h:g===a&&(e=h))}return e??d??l[a]??"disabled"}(a,c))return{eligible:!1,reason:"tool-disabled",refusalReason:null,composerState:null};if(void 0===b)return{eligible:!1,reason:"no-raw-frame",refusalReason:null,composerState:null};let j=(0,i.dd)(a,b).refusal;if(null===j)return{eligible:!1,reason:"answerable",refusalReason:null,composerState:null};let p=(0,f.ji)(b,a).state,q=a=>({eligible:!1,reason:a,refusalReason:j.reason,composerState:p});if(m.has(p))return q("composer-visible");let r=j.reason===i.bj,s=n.has(a)&&"no_composer"===p;if(!r&&!s)return q("no-choice-screen-evidence");if(!(0,e.Hg)(b,(0,d.H7)(a)).alive)return q("tool-exited");let t=(0,g.aJ)(b).split("\n").slice(-h.Re).join("\n");return(0,g.ut)(a,t)?q("thinking"):{eligible:!0,refusalReason:j.reason,composerState:p}}},54300:(a,b,c)=>{c.d(b,{zX:()=>ak,$M:()=>ag,Tq:()=>H});var d=c(31990),e=c(88807),f=c(56791),g=c(43015),h=c(26895),i=c(28861),j=c(61878),k=c(70605),l=c(96742),m=c(18778),n=c(15194),o=c(8988),p=c(61789),q=c(72626),r=c(46423),s=c(93997),t=c(60),u=c(82450),v=c(56263),w=c(13033),x=c(72457),y=c(44321),z=c(71080),A=c(28918),B=c(31517),C=c(36925);let D=(0,q.h)("response-poller"),E=B.sD.reduce((a,b)=>a+b,0),F=(0,C.v)("__pendingScrapedResponses",()=>new Map);function G(a){F.delete(a)}function H(a,b){let c=F.get(a);if(!c)return!1;F.delete(a);try{let a=(0,e.getDbInstance)(),d=(0,f.createMessage)(a,{worktreeId:c.worktreeId,role:"assistant",content:c.content,messageType:"normal",timestamp:c.timestamp,cliToolId:c.cliToolId,instanceId:c.instanceId,summary:c.summary,logFileName:c.logFileName,requestId:c.requestId});return(0,g.broadcastMessage)("message",{worktreeId:c.worktreeId,message:d}),D.info("pending-scrape-flushed",{worktreeId:c.worktreeId,cliToolId:c.cliToolId,instanceId:c.instanceId,reason:b,scrapedLength:c.content.length,heldForMs:Date.now()-c.timestamp.getTime()}),(0,m.T)(a,c.worktreeId,c.content,c.cliToolId).catch(()=>{}),!0}catch(a){return D.warn("pending-scrape-flush-failed",{worktreeId:c.worktreeId,cliToolId:c.cliToolId,instanceId:c.instanceId,reason:b,error:a instanceof Error?a.message:String(a)}),!1}}async function I(a){let b=F.get(a);if(!(!b||Date.now()<b.expiresAt)){if(await (0,A.captureStructuredHistoryTurn)(b.worktreeId,b.cliToolId,b.instanceId,{worktreePath:b.worktreePath,transcriptPathHint:b.transcriptPathHint})){G(a),(0,z.oE)(a),D.info("pending-scrape-superseded",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:b.instanceId,heldForMs:Date.now()-b.timestamp.getTime()});return}H(a,"hold-expired")}}var J=c(43925),K=c(40964),L=c(83598),M=c(31442),N=c(45146),O=c(91601),P=c(92010),Q=c(81099),R=c(63209),S=c(73478),T=c(57836),U=c(52767);function V(a){return{response:"",isComplete:!1,lineCount:a}}function W(a,b,c,d,e,f,g,h=!1){let i=(0,t.QM)(b,c,d,e,f,h),j=a.slice(i);return{response:(0,p.aJ)(j.join("\n")),isComplete:!0,lineCount:c,promptDetection:g,bufferReset:d,captureWindowSaturated:h}}var X=c(77244),Y=c(16402);let Z=(0,q.h)("response-poller");function $(a){return!(void 0===a||(0,X.FD)(a.worktreeId,"antigravity",a.instanceId))&&(Z.debug("antigravity-dialog-no-recent-receipt",{worktreeId:a.worktreeId,instanceId:a.instanceId??"antigravity"}),!0)}function _(a,b,c){let d=(0,Y.vm)(a,b.promptData?.type,c);return!!d.present||(Z.debug("prompt-candidate-not-vouched",{cliToolId:a,promptType:b.promptData?.type,gateMode:d.mode}),!1)}var aa=c(96486);let ab=["Waiting for auth","⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],ac=(0,q.h)("response-poller");function ad(a,b,c,d){let{cliToolId:e,lines:f,lastCapturedLine:g,bufferReset:h,captureWindowSaturated:i}=b;return e===a&&c&&!i&&(0,aa.K)(e,f)?((h||d>g)&&ac.info(`${a} startup screen suppressed, response not saved`,{responseLength:c.length,lineCount:d}),{response:"",isComplete:!0,lineCount:d,bufferReset:h,captureWindowSaturated:i}):null}let ae=(0,q.h)("response-poller");function af(a){return b=>{try{(0,g.broadcastMessage)("message_updated",{worktreeId:a,message:b})}catch(b){ae.warn("prompt-sweep-broadcast-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)})}}}function ag(a,b,c,d,e,f){if("antigravity"===b){let b=(0,i.g)(a);if(null!==b)return $(e)?{isPrompt:!1,cleanContent:a.trim()}:b}if("command-code"===b&&void 0!==d){let b=(0,l.nK)(d);if("prompt"===b.kind)return b.prompt;if("unsupported"===b.kind)return{isPrompt:!1,cleanContent:a.trim()}}let g=(0,p.KO)(b),m=(0,h.gF)(a,c?{...g,precomputedLines:c}:g);if(m.isPrompt){let c=void 0!==f?(0,j.Yc)(f,b):(0,j.zJ)(d??a,b).liveRegion;if((0,k.z8)(c,m))return{isPrompt:!1,cleanContent:a.trim()}}return"antigravity"===b&&m.isPrompt&&$(e)?{isPrompt:!1,cleanContent:a.trim()}:m}function ah(a,b){return ag((0,p._A)((0,p.aJ)(a)),b,void 0,a)}async function ai(a,b,c){let{db:d,worktree:e,worktreeId:g,cliToolId:h,instanceId:i,resolvedInstanceId:j,pollerKey:k}=a,l=(0,z.o_)(k);return l.log&&ae.info("duplicate-response-skipped",{worktreeId:g,cliToolId:h,instanceId:j,...l.consecutive>1?{consecutive:l.consecutive,suppressed:l.suppressed}:{}}),(0,f.updateSessionState)(d,g,h,b.lineCount,j),!!((0,z.pN)(k)&&await (0,A.captureStructuredHistoryTurn)(g,h,i,{worktreePath:e.path,transcriptPathHint:c?.logFilePath??null}))&&((0,z.oE)(k),G(k),ae.info("structured-history-recheck-captured",{worktreeId:g,cliToolId:h,instanceId:j}),!0)}async function aj(a,b,c,d,e){let{db:h,worktree:i,worktreeId:j,cliToolId:k,instanceId:l,resolvedInstanceId:n,pollerKey:o}=a,{result:p,isFullScreenTui:q,lineCountIsCursor:r}=b,s={},t=(0,A.isStructuredHistoryWriterLive)(j,k,l)||await (0,A.captureStructuredHistoryTurn)(j,k,l,{worktreePath:i.path,transcriptPathHint:c?.logFilePath??null},s);t?(0,z.oE)(o):(0,z.Pe)(o);let u=t||e.delegated,v=!u&&"not_yet_closed"===s.outcome;!d||u||v||await (0,m.T)(h,j,d,k),(0,f.markPendingPromptsAsAnswered)(h,j,k,n,af(j))>0&&ae.info("marked-answeredcount-pending");let w=(0,f.getSessionState)(h,j,n);return r&&w&&p.lineCount<=w.lastCapturedLine?(ae.info("race-condition-detected-skipping-save-re"),!1):(!function(a,b,c,d){let{db:e,worktree:h,worktreeId:i,cliToolId:j,resolvedInstanceId:k,pollerKey:l}=a,{structuredHistoryLive:m,suppressScrapedHistory:n,holdScrapedHistory:o}=d;if(o)!function(a,b){let c=F.get(a);if(c){c.content=b.content;return}F.set(a,b)}(l,{worktreeId:i,cliToolId:j,instanceId:k,content:b,timestamp:new Date,summary:c?.summary,logFileName:c?.logFileName,requestId:c?.requestId,worktreePath:h.path,transcriptPathHint:c?.logFilePath??null,expiresAt:Date.now()+E}),ae.info("structured-history-scrape-held",{worktreeId:i,cliToolId:j,instanceId:k,scrapedLength:b.length,holdMs:E}),(0,J.vQ)(i,j,k,!1);else if(n)m&&G(l),ae.info("structured-history-scrape-suppressed",{worktreeId:i,cliToolId:j,instanceId:k,scrapedLength:b.length,reason:m?"structured-history":"geometry-delegated"});else{let a=(0,f.createMessage)(e,{worktreeId:i,role:"assistant",content:b,messageType:"normal",timestamp:new Date,cliToolId:j,instanceId:k,summary:c?.summary,logFileName:c?.logFileName,requestId:c?.requestId});(0,g.broadcastMessage)("message",{worktreeId:i,message:a}),(0,J.vQ)(i,j,k,!1)}}(a,d,c,{structuredHistoryLive:t,suppressScrapedHistory:u,holdScrapedHistory:v}),(0,T.hd)({worktreeId:j,cliToolId:k,instanceId:l,waiting:!1}),(0,O.J$)({worktreeId:j,worktreeName:i.name,kind:"completion",agentName:n,excerpt:d}).catch(()=>{}),(0,f.updateSessionState)(h,j,k,p.lineCount,n),q&&(0,N.Et)(j,k,l),!0)}async function ak(a,b,c){let h=(0,e.getDbInstance)(),i=c??b;try{let e=(0,f.getWorktreeById)(h,a);if(!e)return ae.error("worktree-not-found"),(0,N.Et)(a,b,c),!1;if(!await (0,d.K1)(a,b,c))return ae.info("session-not-running"),(0,N.Et)(a,b,c),!1;let j=(0,N.MN)(a,b,c),k={db:h,worktree:e,worktreeId:a,cliToolId:b,instanceId:c,resolvedInstanceId:i,pollerKey:j};await I(j);let l=(0,K.mf)(b,a,c),m=(0,M.n9)(l)?await (0,L.zQ)(l):{delegated:!1,released:!1};m.released&&((0,f.updateSessionState)(h,a,b,0,i),ae.info("geometry-delegation-released",{worktreeId:a,cliToolId:b,instanceId:i}));let q=(0,f.getSessionState)(h,a,i),A=q?.lastCapturedLine||0,B=await (0,d.Wh)(a,b,s.xE,c),C=function(a,b,c){let{db:d,worktreeId:e,cliToolId:g,instanceId:h,resolvedInstanceId:i,pollerKey:j}=a,k=b.split("\n").slice(-100).join("\n"),l=(0,R.bT)(k);if((0,Q.notifyUpstreamFaultPush)({worktreeId:e,cliToolId:g,instanceId:h,faultId:l?.fault.id??null,matchedText:l?.matchedText}).catch(()=>{}),"opencode"===g||"copilot"===g){let a="opencode"===g?(0,t.ZX)(b):b;(0,w.IZ)(j,a,g)}let m=function(a,b,c,d=s.xE){let e=a.split("\n"),f=e.length;for(;f>0&&""===e[f-1].trim();)f--;let g=e.slice(0,f),h=g.length,i=(0,s.sl)(e.length,d),j="opencode"===c?g.map(p.aJ):null,k="claude"===c?(0,p.GT)(g):"copilot"===c?(0,p.wv)(g):"command-code"===c?(0,p.I$)(g):"codex"===c?(0,p.Zu)(g):j?(0,p.x7)(j):-1,l=k>=0?k:h,m=h>0&&b>25&&h+25<b,n=h>0&&b>50&&h<50,o=m||n;if(!o&&h<b-5)return null;let q=Math.max(0,h-20),u=g.slice(q),v=j?j.join("\n"):u.join("\n"),{promptPattern:w,separatorPattern:x,thinkingPattern:y,skipPatterns:z}=(0,p._X)(c),A=(a=60)=>(function(a,b,c,d,e,f){let g;if("codex"===a)return(0,p.Nc)(b,e,f,d>=0);if(c)return(0,t.V0)(c).echoEnd;if("copilot"===a){for(let a=e-1;a>=Math.max(0,e-f);a--){if(!p.y.test((0,p.aJ)(b[a])))continue;let c=a;for(;c+1<e&&p.Fg.test((0,p.aJ)(b[c+1]));)c++;return c}return -1}g=/^[>❯]\s+\S/;for(let a=e-1;a>=Math.max(0,e-f);a--){let c=(0,p.aJ)(b[a]);if(g.test(c))return a}return -1})(c,g,j,k,l,a);if("claude"===c||"codex"===c||"copilot"===c||"command-code"===c){let a=g.join("\n"),d=ah(a,c);if(d.isPrompt&&_(c,d,a))return W(g,b,h,o,c,A,d,i)}let B={cliToolId:c,lines:g,totalLines:h,openCodeCleanLines:j,chromeStart:k,contentEnd:l,lastCapturedLine:b,bufferReset:o,captureWindowSaturated:i,checkLineCount:20,cleanOutputToCheck:(0,p.aJ)(v),promptPattern:w,separatorPattern:x,thinkingPattern:y,skipPatterns:z,findRecentUserPromptIndex:A};if(function(a){let{cliToolId:b,lines:c,totalLines:d,checkLineCount:e,cleanOutputToCheck:f,promptPattern:g,separatorPattern:h,thinkingPattern:i}=a,j=g.test(f),k=h.test(f),l="codex"===b?(0,p.DR)(c,e):i.test(f),m="copilot"===b?(0,p.Wn)(c.slice(Math.max(0,d-8)).map(p.aJ)):null,n="copilot"===b?"idle"===m:("codex"===b||"gemini"===b||"vibe-local"===b||"antigravity"===b)&&j&&!l,o="opencode"===b&&(0,t.bE)(f);return n||"claude"===b&&j&&k&&!l||"command-code"===b&&j&&k&&!l||o}(B))return function(a){let{cliToolId:b,totalLines:c,openCodeCleanLines:d,bufferReset:e,captureWindowSaturated:f,thinkingPattern:g,skipPatterns:h,findRecentUserPromptIndex:i}=a,{response:j,endIndex:k}=function(a){let{cliToolId:b,lines:c,totalLines:d,chromeStart:e,contentEnd:f,lastCapturedLine:g,bufferReset:h,captureWindowSaturated:i,skipPatterns:j,findRecentUserPromptIndex:k}=a,l=[],m=(0,t.QM)(g,d,h,b,k,i),n="codex"===b?f:d;for(let a=m;a<f;a++){let d=c[a],f=(0,p.aJ)(d);if("codex"===b&&/^›\s+/.test(f)||"gemini"===b&&/^(%|\$|.*@.*[%$#])\s*$/.test(f)||"antigravity"===b&&/^>\s*$/.test(f)||"opencode"===b&&e<0&&(p.sy.test(f)||p.uA.test(f))){n=a;break}j.some(a=>a.test(f))||l.push(d)}return{response:l.join("\n").trim(),endIndex:n}}(a),l=j.split("\n").slice(-r.$).join("\n");if("copilot"!==b&&g.test(l))return V(c);let m=function(a,b,c,d,e){if("claude"===a){let a=(0,p.aJ)(b),f=/[╭╮╰╯]/.test(a)||/░{3,}/.test(a)||/▓{3,}/.test(a),g=/Claude Code v\d+\.\d+|claude\//.test(a),h=/Tip:|for shortcuts|\?\s*for help/.test(a),i=/^\s*\/Users\/.*$/m.test(a)&&a.split("\n").length<30,j=e(c)>=0,k=a.match(/^[>❯]\s+(\S.*)$/m);if(k){let b=a.indexOf(k[0]);if(0===a.substring(b+k[0].length).trim().split("\n").filter(a=>{let b=a.trim();return b&&!d.some(a=>a.test(b))&&!/^─+$/.test(b)}).length)return V(c)}else if(!j&&(f||g||h||i)&&b.length<2e3)return ac.info("Claude startup banner suppressed, response not saved",{responseLength:b.length,hasBannerArt:f,hasVersionInfo:g,hasStartupTips:h,hasProjectInit:i}),V(c)}return null}(b,j,c,h,i)??function(a,b,c){if("copilot"===a){let a=(0,p.aJ)(b);if(!a.split("\n").some(a=>p.y.test(a))&&p.E0.some(b=>b.test(a)))return V(c)}return null}(b,j,c)??("command-code"===b&&0>i(c)?(ac.info("Command Code launch screen suppressed, response not saved",{responseLength:j.length}),V(c)):null)??function(a,b,c){if("gemini"===a&&((b.match(/[░█]/g)||[]).length>.3*b.length||ab.some(a=>b.includes(a))||!b.includes("✦")&&b.length<10))return V(c);return null}(b,j,c)??ad("codex",a,j,k)??ad("vibe-local",a,j,k);return m||{response:j,isComplete:!0,lineCount:k,bufferReset:e,captureWindowSaturated:f,turnHeadTruncated:d?(0,t.V0)(d).headTruncated:void 0}}(B);if("opencode"!==c){let a=g.join("\n"),d=ah(a,c);if(d.isPrompt&&_(c,d,a))return W(g,b,h,o,c,A,d,i)}return function(a){let{lines:b,totalLines:c,contentEnd:d,lastCapturedLine:e,bufferReset:f,captureWindowSaturated:g,skipPatterns:h,findRecentUserPromptIndex:i}=a,j=[],k=f||g||e>=c-5,l=k?i(80):-1,m=k?l>=0?l+1:Math.max(0,c-80):Math.max(0,e);for(let a=m;a<Math.min(c,d);a++){let c=b[a],d=(0,p.aJ)(c);h.some(a=>a.test(d))||j.push(c)}let n=j.join("\n").trim();return n?{response:n,isComplete:!1,lineCount:c}:V(c)}(B)}(b,c,g,s.xE);if(!m||!m.isComplete){m&&((0,x.WR)(j),(0,z.fS)(j));let{thinkingPattern:a}=(0,p._X)(g),c=(0,p.aJ)(b).split("\n").slice(-r.$).join("\n");return a.test(c)&&(0,f.markPendingPromptsAsAnswered)(d,e,g,i,af(e))>0&&ae.info("marked-answeredcount-pending"),!1}let o="opencode"===g||"copilot"===g,q=!(0,n.VA)(g)&&!m.captureWindowSaturated;return(!q||!!m.bufferReset||m.lineCount!==c)&&(q&&!m.bufferReset&&m.lineCount<=c?(ae.debug("already-saved-up-to-last-captured-line",{worktreeId:e,cliToolId:g,instanceId:i,lineCount:m.lineCount,lastCapturedLine:c}),!1):{result:m,isFullScreenTui:o,lineCountIsCursor:q})}(k,B,A);if(!C)return!1;let{result:D,isFullScreenTui:E,lineCountIsCursor:F}=C,G=D.promptDetection??ah(D.response,b);if(G.isPrompt&&_(b,G,B))return(0,z.fS)(j),function(a,b,c,d){let{db:e,worktree:h,worktreeId:i,cliToolId:j,instanceId:k,resolvedInstanceId:l,pollerKey:m}=a,n=b.rawContent||b.cleanContent,o=(0,x.zm)(n,j);if((0,x.gv)(m,o)){(0,y.LN)(i,j,k);let a=(0,x.p6)(m);return a.log&&ae.info("duplicate-prompt-skipped",{worktreeId:i,cliToolId:j,...a.consecutive>1?{consecutive:a.consecutive,suppressed:a.suppressed}:{}}),!1}let p=n;"copilot"===j&&(p=(0,u.LH)(n),p=(0,u.Sj)(p,v.Rf,v.ky)),(0,f.clearInProgressMessageId)(e,i,j,l);let q=(0,f.createMessage)(e,{worktreeId:i,role:"assistant",content:p,messageType:"prompt",promptData:b.promptData,timestamp:new Date,cliToolId:j,instanceId:l});(0,f.updateSessionState)(e,i,j,c.lineCount,l),(0,g.broadcastMessage)("message",{worktreeId:i,message:q}),(0,U.r)(e,i,j,l,"prompt_detected",{promptType:b.promptData?.type});let r=Date.now(),s=(0,T.Jp)(i,j,k)?.since??r;return(0,P.R)({worktreeId:i,cliToolId:j,instanceId:k,waitingSince:s})||(0,O.J$)({worktreeId:i,worktreeName:h.name,kind:"prompt",agentName:l,instanceId:l,waitingKind:"prompt",waitingSince:s,excerpt:b.promptData?.question??p}).catch(()=>{}),(0,T.hd)({worktreeId:i,cliToolId:j,instanceId:k,waiting:!0,kind:"prompt",now:r}),d||(0,N.Et)(i,j,k),!0}(k,G,D,E);if((0,x.WR)(j),!D.response||""===D.response.trim())return(0,z.fS)(j),(0,f.updateSessionState)(h,a,b,D.lineCount,i),!1;let H="claude"===b?(0,o.R)(D.response):void 0,J=function(a,b,c){let d=b.response;if("gemini"===a)d=(0,u.IS)(b.response);else if("claude"===a)d=(0,u.NN)(b.response);else if("copilot"===a){let a=(0,w.Uz)(c)||b.response;d=(0,u.LH)(a),d=(0,u.Sj)(d,v.Rf,v.ky),(0,w.q1)(c)}else if("opencode"===a){let a=(0,w.Uz)(c),e=b.turnHeadTruncated&&a?a:b.response;d=(0,u.aW)(e),(0,w.q1)(c)}return d}(b,D,j);if(!J||""===J.trim()||"[No content]"===J)return(0,z.fS)(j),(0,f.updateSessionState)(h,a,b,D.lineCount,i),(0,f.clearInProgressMessageId)(h,a,b,i),!1;if(!F&&(0,z.j7)(j,J))return await ai(k,D,H);return await aj(k,C,H,J,m)}catch(a){return ae.error("response:check-failed",{error:a instanceof Error?a.message:String(a)}),!1}}(0,S.I7)()},63209:(a,b,c)=>{c.d(b,{bT:()=>g});var d=c(51297),e=c(76777);let f=[{id:"overloaded",pattern:/\b5\d{2}\s+Overloaded\b/i,selfRetrying:!0},{id:"retrying",pattern:/Retrying in \d+s\s*[·•]\s*attempt \d+\/\d+/i,selfRetrying:!0},{id:"context-limit",pattern:/\bmaximum context length is \d+ tokens\b/i,selfRetrying:!1},{id:"limit-reached",pattern:/\blimit reached\b/i,selfRetrying:!1},{id:"api-error",pattern:/\bAPI Error(?::|\s+\d{3})/i,selfRetrying:!1}];function g(a){let b=(0,d.aJ)(a);for(let a of f){var c;let d=a.pattern.exec(b);if(!d)continue;let f=b.lastIndexOf("\n",d.index)+1,g=b.indexOf("\n",d.index);return{fault:a,matchedText:(c=b.slice(f,-1===g?void 0:g).trim()||d[0],(0,e.D)(c,200,"…[truncated]"))}}return null}},63869:(a,b,c)=>{c.d(b,{It:()=>s,Pw:()=>p,WG:()=>w,if:()=>r,tV:()=>A});var d=c(79892),e=c(61878),f=c(8491),g=c(69119),h=c(96742),i=c(29169),j=c(81254),k=c(93997),l=c(4803),m=c(20610);let n=/^\d+(?:,\d+)*$/,o="answer_mode_keys";class p extends Error{constructor(a,b,c){super(`Refused to send "${b}" to ${a}: its ${c.kind} dialog takes '${c.answerMode}' input, not a typed number (${o}). The digit would be swallowed and the Enter after it would confirm whatever is highlighted. Nothing was sent.`),this.name="PromptAnswerRejectedError",this.reason=o,this.dialogKind=c.kind,this.answerMode=c.answerMode}}let q="unresolvable_answer";class r extends Error{constructor(a,b,c){super(function(a,b,c){let d=b.join(", ");return void 0===c?`Refused to type free text at ${a}'s prompt: option ${d} reads as taking your own words, but on this screen it is a menu row, not a text field. The text would be ignored and the Enter after it would confirm whatever is highlighted. Nothing was sent. Answer with the option number, then send the instructions as a message.`:`Refused to type free text at ${a}'s prompt: option ${d} is the text field on this screen, but the cursor is on option ${c.cursorOptionNumber}. The text would be ignored and the Enter after it would confirm option ${c.cursorOptionNumber}. Nothing was sent. Move the cursor onto the text field in the terminal and send the text again — sending its option number does not move the cursor, it selects nothing.`}(a,b,c)),this.name="FreeTextAnswerRejectedError",this.reason=q,this.optionNumbers=b,this.kind=c?.kind??"menu_row",this.cursorOptionNumber=c?.cursorOptionNumber??null}}class s extends Error{constructor(a,b){super(`Refused to type free text at ${a}'s prompt: none of its ${b} options is a text field on this screen, so the text would be ignored and the Enter after it would confirm whatever is highlighted. Nothing was sent. Answer with the option number instead, then send your instructions as a separate message.`),this.name="FreeTextAtChoiceOnlyPromptError",this.reason=q,this.optionCount=b}}async function t(a){if(void 0!==a.frame)return a.frame;try{return await (0,d.Xg)(a.sessionName,200)}catch{return null}}async function u(a){if(!/^\d+$/.test(a.answer))return null;let b=(0,f.bN)(a.cliToolId);if(!b.hasDialogRules)return null;let c=await t(a);if(null===c)return null;let d=b.detectDialog((0,e.zJ)(c,a.cliToolId));if(null===d)return null;if("numbered"===d.answerMode)return d;throw new p(a.cliToolId,a.answer,d)}function v(a){if(0===a)return[];let b=a>0?"Down":"Up";return Array.from({length:Math.abs(a)},()=>b)}class w extends Error{constructor(a,b,c){super(`The question was not submitted (${a}). `+(b?"Some boxes may have been ticked, but the confirm row was not pressed, so the question is still on screen exactly as the pane shows it. ":"No key was sent. ")+`Requested selection: ${c.join(", ")}. Check the terminal and answer it there, or `+"retry once the screen has settled."),this.name="MultiSelectAnswerRejectedError",this.reason="multi_select_not_committed",this.stage=a,this.keysSent=b,this.wanted=c}}function x(a){return a.options.filter(a=>!0===a.checked).map(a=>a.number)}async function y(a){await new Promise(a=>setTimeout(a,m.x9));try{return await (0,d.Xg)(a,200)}catch{return null}}async function z(a,b,c){var e,f;if(void 0===b.options.find(a=>!0===a.isDefault))throw new w("cursor-unknown",!1,c);let g=x(b),j=[...c.filter(a=>!g.includes(a)),...g.filter(a=>!c.includes(a))].sort((a,b)=>a-b);j.length>0&&await (0,d.KB)(a,j.map(String));let k=j.length>0,l=await y(a);if(null===l)throw new w("recapture-failed",k,c);let m=(0,h.nK)(l);if("prompt"!==m.kind||m.prompt.promptData?.type!=="multiple_choice"||!0!==m.prompt.promptData.multiSelect||m.prompt.promptData.question!==b.question||m.prompt.promptData.options.length!==b.options.length)throw new w("screen-changed",k,c);let n=m.prompt.promptData;if(e=x(n),f=[...c],!(e.length===f.length&&e.every((a,b)=>a===f[b])))throw new w("toggle-mismatch",k,c);let o=n.options.find(a=>!0===a.isDefault);if(void 0===o)throw new w("cursor-unknown",k,c);await (0,d.KB)(a,[...Array.from({length:Math.max(0,n.options.length-o.number+1)},()=>"Down"),"Enter"]);let p=await y(a);if(null===p)throw new w("recapture-failed",!0,c);let q=(0,i.uG)(p);if(null!==q){if(q.hasUnansweredWarning)throw new w("review-unanswered",!0,c);await (0,d.KB)(a,["Enter"]);return}let r=(0,h.nK)(p);if("prompt"!==r.kind||r.prompt.promptData?.type!=="multiple_choice"||r.prompt.promptData.question===b.question)throw new w("not-committed",!0,c)}async function A(a){let{sessionName:b,answer:c,cliToolId:e,promptData:f,fallbackPromptType:h,fallbackDefaultOptionNumber:i}=a,o=function(a){if("command-code"!==a.cliToolId)return null;let{promptData:b}=a;return b?.type==="multiple_choice"&&!0===b.multiSelect&&n.test(a.answer)?{promptData:b,wanted:[...new Set(a.answer.split(",").map(Number))].sort((a,b)=>a-b)}:null}(a);if(null!==o){await z(b,o.promptData,o.wanted),(0,k.gm)(b);return}let p=await u(a);if(!function(a){if(/^\d+$/.test(a.answer))return;let{promptData:b}=a;if(b?.type!=="multiple_choice"||0===b.options.length)return;let c=b.options.filter(a=>!0===a.requiresTextInput);if(0===c.length)throw new s(a.cliToolId,b.options.length);if(!c.some(g.J0))throw new r(a.cliToolId,c.map(a=>a.number))}(a),!function(a){if(/^\d+$/.test(a.answer))return;let{promptData:b}=a;if(b?.type!=="multiple_choice")return;let c=b.options.filter(g.J0);if(0===c.length)return;let d=b.options.find(a=>!0===a.isDefault);if(void 0!==d&&!(0,g.J0)(d))throw new r(a.cliToolId,c.map(a=>a.number),{kind:"cursor_elsewhere",cursorOptionNumber:d.number})}(a),("claude"===e||"antigravity"===e)&&(f?.type==="multiple_choice"||"multiple_choice"===h)&&/^\d+$/.test(c)){let a,e=parseInt(c,10),g=null;if(f?.type==="multiple_choice"){let b=(g=f.options).find(a=>a.isDefault);a=b?.number??1}else a=i??1;let h=e-a;if(null!==g&&(0,l.kN)(g)&&null!==g){let a=g.filter(a=>(0,l.kN)([a])).length,c=[...v(h),"Space"];c.push(...v(a-e+1)),c.push("Enter"),await (0,d.KB)(b,c)}else{let a=v(h),c=f?.type==="multiple_choice"&&!0===f.isAskUserQuestion&&0===h?["Down","Up","Enter"]:[...a,"Enter"];await (0,d.KB)(b,c)}}else{await (0,d.V1)(b,c,!1);let e=function(a,b){let c=a.promptData?.type==="multiple_choice"?a.promptData.submitMode:void 0,d=b?.submitMode??c??a.fallbackSubmitMode??"answer_then_enter";return(0,j.MI)(d)?d:"answer_then_enter"}(a,p);"answer_only"===e&&(null!==p||a.promptData?.type==="multiple_choice"||"multiple_choice"===a.fallbackPromptType)&&/^\d+$/.test(a.answer)||(await new Promise(a=>setTimeout(a,m.pL)),await (0,d.V1)(b,"",!0))}(0,k.gm)(b)}},64501:(a,b,c)=>{c.d(b,{$x:()=>j,NV:()=>k,KO:()=>i,$K:()=>l});var d=c(51297);let e={codex:{showsAbandonedTurn:c(27789).Y7}};var f=c(66101),g=c(59409),h=c(33294);function i(a,b,c){return"hooks"!==a||function(a,b){let c=e[a];return!c||c.showsAbandonedTurn((0,d.aJ)(b).split("\n"))}(b,c)}function j(a,b,c,d=Date.now()){let e=(0,g.VM)(b);return(0,f.Kf)(e,e.liveness({worktreeId:a,cliToolId:b,instanceId:c??b}),d).kind}function k(a,b,c,d,e=Date.now()){return!i(j(a,b,c,e),b,d)&&(0,h.getStructuredSessionState)(a,b,c,e)?.status==="running"}function l(a,b,c,f,g,i=Date.now()){let j=(0,h.getStructuredSessionState)(a,b,c,i);return j?.status==="running"&&"hooks"===f&&function(a,b){let c=e[a];return!!c&&c.showsAbandonedTurn((0,d.aJ)(b).split("\n"))}(b,g)?null:j}},70594:(a,b,c)=>{c.d(b,{EV:()=>h,aT:()=>i,mi:()=>k,wG:()=>j});var d=c(52660),e=c(72626),f=c(30008);let g=(0,e.h)("current-output-builder");function h(a){let b=a?.spec.questions[0];return b?{question:b.question,labels:b.choices.map(a=>a.label),questionCount:a.spec.questions.length,...b.custom?{custom:!0}:{}}:null}function i(a,b,c=null,d=null,e=null){if("waiting"===a.status)return{...a,structuredApplied:!1};if(null!==c)return{status:"waiting",reason:(0,f.rB)(c),thinking:!1,evidence:a.evidence,isUnclassifiedActive:a.isUnclassifiedActive,structuredApplied:!0};if(null===b||"waiting"===b.status||function(a,b,c,d){if(null===d||!j(a,b,c))return!1;let e=c?.closedAt??null;return null!==e&&e<d}(a,b,d,e))return{...a,structuredApplied:!1};let g="running"===b.status,h="ready"===b.status&&function(a){if(null===a)return!1;let{closedBy:b,closedAt:c,openedAt:d}=a;return"stop"===b&&null!==c&&null!==d&&c>d}(d)?"positive":a.evidence;return{status:b.status,reason:b.reason,thinking:g,evidence:h,isUnclassifiedActive:a.isUnclassifiedActive,structuredApplied:!0}}function j(a,b,c){return!!a.thinking&&null!==b&&"ready"===b.status&&null!==c&&"stop"===c.closedBy&&null!==c.closedAt}function k(a,b,c,e){try{let f=(0,d.getLastUserMessageForInstance)(a,b,c,e);if(!f)return null;let g=f.timestamp instanceof Date?f.timestamp.getTime():NaN;return Number.isFinite(g)?g:null}catch(a){return g.debug("newest-prompt-read-failed",{worktreeId:b,cliToolId:c,instanceId:e,error:a instanceof Error?a.message:String(a)}),null}}},71080:(a,b,c)=>{c.d(b,{H:()=>i,L1:()=>p,Pe:()=>m,fS:()=>l,j7:()=>j,oE:()=>n,o_:()=>k,pN:()=>o,qt:()=>q});var d=c(55511),e=c(36925);let f=(0,e.v)("__responseHashCache",()=>new Map),g=(0,e.v)("__structuredHistoryRecheckCache",()=>new Map),h=(0,e.v)("__duplicateResponseSkipStreak",()=>new Map),i=30;function j(a,b){let c=(0,d.createHash)("sha256").update(b).digest("hex");return f.get(a)===c||(f.set(a,c),h.delete(a),!1)}function k(a){let b=(h.get(a)??0)+1;h.set(a,b);let c=(b-1)%i==0,d=1===b?0:i-1;return{log:c,consecutive:b,suppressed:d}}function l(a){h.delete(a)}function m(a){g.has(a)||g.set(a,0)}function n(a){g.delete(a)}function o(a){let b=g.get(a);return void 0!==b&&(b>0?(g.set(a,b-1),!1):(g.set(a,2),!0))}function p(a){f.delete(a),g.delete(a),h.delete(a)}function q(a){let b=[];for(let{oldKey:c,newKey:d}of a)c!==d&&b.push({newKey:d,state:function(a){let b={hash:f.get(a),recheck:g.get(a),streak:h.get(a)};return f.delete(a),g.delete(a),h.delete(a),b}(c)});for(let{newKey:a,state:c}of b)void 0!==c.hash&&f.set(a,c.hash),void 0!==c.recheck?g.set(a,c.recheck):void 0!==c.hash&&g.delete(a),void 0!==c.hash&&(void 0!==c.streak?h.set(a,c.streak):h.delete(a))}},72457:(a,b,c)=>{c.d(b,{WR:()=>l,gv:()=>j,i2:()=>n,iX:()=>m,nZ:()=>o,p6:()=>k,zm:()=>p});var d=c(55511),e=c(36925),f=c(71080);let g=(0,e.v)("__promptHashCache",()=>new Map),h=(0,e.v)("__duplicatePromptSkipStreak",()=>new Map),i=f.H;function j(a,b){let c=(0,d.createHash)("sha256").update(b).digest("hex");return g.get(a)===c||(g.set(a,c),h.delete(a),!1)}function k(a){let b=(h.get(a)??0)+1;h.set(a,b);let c=(b-1)%i==0,d=1===b?0:i-1;return{log:c,consecutive:b,suppressed:d}}function l(a){h.delete(a)}function m(a){g.delete(a),h.delete(a)}function n(a,b){o([{oldKey:a,newKey:b}])}function o(a){let b=[];for(let{oldKey:c,newKey:d}of a)c!==d&&(b.push({newKey:d,hash:g.get(c),streak:h.get(c)}),g.delete(c),h.delete(c));for(let{newKey:a,hash:c,streak:d}of b)void 0!==c&&(g.set(a,c),void 0!==d?h.set(a,d):h.delete(a))}function p(a,b){return"copilot"!==b?a:a.replace(/^[❯>]\s/gm," ")}},73478:(a,b,c)=>{c.d(b,{I7:()=>v});var d=c(24455),e=c(88807),f=c(73753),g=c(72626),h=c(57836),i=c(80544),j=c(92010),k=c(61191),l=c(50779),m=c(27519),n=c(36925);let o=(0,g.h)("push/waiting-notifier"),p=(0,n.v)("__waitingPushPending",()=>new Map),q=(0,n.v)("__waitingPushGraceTimers",()=>new Map);async function r(a,b,c){let d=a.instanceId??a.cliToolId;try{await (0,k.notifyPushSubscribers)({worktreeId:a.worktreeId,worktreeName:function(a){try{return(0,f.getWorktreeById)((0,e.getDbInstance)(),a)?.name??a}catch{return a}}(a.worktreeId),kind:"prompt",agentName:d,instanceId:d,waitingKind:a.kind,waitingSince:a.since,escalated:b},c)}catch(c){o.warn("waiting-push-failed",{worktreeId:a.worktreeId,instanceId:d,escalated:b,error:c instanceof Error?c.message:String(c)})}}function s(a){let b=q.get(a);void 0!==b&&(clearTimeout(b),q.delete(a))}function t(a,b){(0,j.R)({worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,waitingSince:a.since})||r(a,!1,b)}function u(){if(p.size>0)return;let a=globalThis.__waitingPushEscalationTimer;void 0!==a&&(clearInterval(a),globalThis.__waitingPushEscalationTimer=void 0)}function v(){let a=globalThis.__waitingPushUnsubscribe;for(let b of(a&&(a(),globalThis.__waitingPushUnsubscribe=void 0),q.values()))clearTimeout(b);q.clear(),p.clear(),u();let b=(0,h.wN)(a=>{!function(a){var b;if(!(0,m.lU)())return;let c=(0,d.v7)(a.worktreeId,a.cliToolId,a.instanceId);if(!a.waiting||null===a.since){s(c),p.delete(c),u(),(0,l.GT)({worktreeId:a.worktreeId,agentName:a.instanceId??a.cliToolId,at:a.at});return}let e={worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,since:a.since,kind:a.kind};if(p.set(c,e),!function(){if(void 0!==globalThis.__waitingPushEscalationTimer)return;let a=setInterval(()=>{!function(a=Date.now()){if(0===p.size)return u();let b=(0,i.rS)(),c=6e4*b.thresholdMinutes;for(let[d,e]of Array.from(p)){let f=(0,h.Jp)(e.worktreeId,e.cliToolId,e.instanceId);if(null===f||f.since!==e.since){p.delete(d);continue}b.enabled&&!(a-e.since<c)&&((0,j.R)({worktreeId:e.worktreeId,cliToolId:e.cliToolId,instanceId:e.instanceId,waitingSince:e.since,escalated:!0})||(p.delete(d),r({...e,kind:f.kind??e.kind},!0,a)))}u()}()},6e4);a.unref?.(),globalThis.__waitingPushEscalationTimer=a}(),null==(b=e.kind)||"unclassified"===b){s(c);let a=setTimeout(()=>{!function(a){q.delete(a);let b=p.get(a);if(void 0===b)return;let c=(0,h.Jp)(b.worktreeId,b.cliToolId,b.instanceId);if(null===c||c.since!==b.since){p.delete(a),u();return}let d={...b,kind:c.kind};p.set(a,d),t(d,Date.now())}(c)},8e3);a.unref?.(),q.set(c,a);return}t(e,a.at)}(a)});return globalThis.__waitingPushUnsubscribe=b,b}},79565:(a,b,c)=>{c.d(b,{$v:()=>aj,emitChatTurnProgress:()=>ab});var d=c(56791),e=c(36925);let f=(0,e.v)("__unclassifiedFrameRuns",()=>new Map);var g=c(35583),h=c(94154),i=c(63209),j=c(51297),k=c(76777),l=c(50524);let m=/^([^\S\n]*)╹(▀{4,})/,n=/^([^\S\n]*)[│┃]/;var o=c(72626),p=c(8360),q=c(15194),r=c(59409),s=c(64501),t=c(66101),u=c(33198),v=c(17287),w=c(15388),x=c(3161),y=c(49154),z=c(62171),A=c(97751),B=c(31990),C=c(95595),D=c(16399),E=c(52277),F=c(51607),G=c(44321),H=c(34405),I=c(93997);function J(a){return""===(0,j.aJ)(a).trim()}var K=c(33294),L=c(30008),M=c(24581),N=c(40043),O=c(9516),P=c(31239),Q=c(16402),R=c(61789),S=c(62887);let T=(0,o.h)("layer-disagreement"),U=(0,e.v)("__layerDisagreementReported",()=>new Set);var V=c(27870),W=c(54325);let X=(0,o.h)("current-output-builder");function Y(){return{version:0,askedAt:-1/0,turnKey:null,body:null,loggedOutcome:null,loggedTurnKey:null}}let Z=(0,e.v)("__chatTurnProgressState",()=>new Map);function $(a){return`${a.worktreeId}:${a.cliToolId}:${a.instanceId??a.cliToolId}`}function _(a,b,c,d={}){let e=$(a),f=Z.get(e)??Y();Z.set(e,f),(f.loggedOutcome!==b||f.loggedTurnKey!==c)&&(f.loggedOutcome=b,f.loggedTurnKey=c,X.info("published"===b?"chat-turn-progress-published":"no-subscribers"===b?"chat-turn-progress-no-subscribers":"chat-turn-progress-failed",{worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,turnKey:c,...d}))}async function aa(a,b,c=Date.now()){let d,e=$(a),f=Z.get(e)??Y();if(c-f.askedAt<W.r9)return null;f.askedAt=c,Z.set(e,f);try{d=await b()}catch{return null}if(!d||0===d.body.length)return null;let g=(0,W.rx)(d.body);return d.turnKey===f.turnKey&&g.body===f.body?null:(f.turnKey=d.turnKey,f.body=g.body,f.version+=1,{type:W.rz,worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,turnKey:d.turnKey,body:g.body,partial:g.truncated||!0===d.partial,version:f.version,done:!1})}async function ab(a,b,d=Date.now()){try{let{broadcast:e,hasRoomSubscribers:f}=await Promise.resolve().then(c.bind(c,43015));if(!f(a.worktreeId))return _(a,"no-subscribers",null),!1;let g=await aa(a,b,d);if(!g)return!1;return e(a.worktreeId,g),_(a,"published",g.turnKey,{version:g.version,bodyLength:g.body.length,partial:g.partial}),!0}catch(b){return _(a,"failed",null,{error:b instanceof Error?b.message:String(b)}),!1}}async function ac(a,b,d,e){if("claude"!==d)return;let f={worktreeId:b,cliToolId:d,instanceId:e};try{let{getWorktreeById:g}=await Promise.resolve().then(c.bind(c,73753)),h=g(a,b)?.path;if(!h)return;let{hasRoomSubscribers:i}=await Promise.resolve().then(c.bind(c,43015));if(!i(b))return void _(f,"no-subscribers",null);ab(f,async()=>{let{readClaudeTurnProgress:a}=await Promise.resolve().then(c.bind(c,71133));return a({worktreeId:b,cliToolId:d,instanceId:e??d},{worktreePath:h})})}catch(a){_(f,"failed",null,{error:a instanceof Error?a.message:String(a)})}}var ad=c(70594),ae=c(81254);let af=(0,o.h)("current-output-builder");function ag(a,b){Promise.resolve().then(c.bind(c,43015)).then(({broadcastMessage:c})=>{c("message",{worktreeId:a,message:b})}).catch(b=>{af.warn("history-row-broadcast-failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)})})}let ah=(0,e.v)("__detectionDivergenceEpisodes",()=>new Map),ai=(0,o.h)("current-output-builder");async function aj(a,b,c,d,e){let f=await ak(a,b,c,d);return(f.isRunning&&"running"===f.sessionStatus&&null==f.startingSince&&await ac(a,b,c,d),e)?{...f,resolvedBy:e.resolvedBy,conflict:e.conflict??null}:f}async function ak(a,b,c,e){let o=e??c,W=p.CLIToolManager.getInstance().getTool(c),X=W.getSessionName(b,e),{stopEventAt:Y,eventSource:Z,askUserQuestion:$,structuredEvents:_}=function(a,b,c,d){let e=(0,K.getLastStopEventAt)(a,b,c),f=(0,K.getLastAgentEvent)(a,b,c),g=(0,r.VM)(b),h=Date.now(),i=(0,K.getPendingDecisions)(a,b,c,h),j=(0,K.getAskUserQuestion)(a,b,c,h),k=(0,x.Jl)(a,b,c),l={lastEventType:f?.event??null,lastEventAt:f?.at??null,lastEventDetail:f?.detail??null,...(0,K.getPublishedAgentTurn)(a,b,c,h),pendingDecisions:i.map(a=>{let b=(0,y.Wk)(a.toolName);return{id:a.decisionId,at:a.at,source:a.source,toolName:a.toolName,confirmedAt:a.confirmedAt,scraperCorroborated:a.scraperCorroborated,deliveryExpired:(0,M.qX)(a,g.capabilities.decisionTimeoutSeconds,h),kind:b,questionOptions:"question"===b&&j?(0,A.dZ)(j.spec).map(a=>({number:a.number,label:a.label})):null}}),dedupDropped:(0,K.getAgentEventDropCounts)(a,b,c),dialogPendingMaxMs:{...M.h_},promptWaitingSince:null,promptWaitingSource:null,toolInputNormalization:(0,w.SQ)(a,b,c),permissionDecision:(0,v.CD)(a,b,c),source:{cliToolId:g.cliToolId,capabilities:g.capabilities,...(0,t.Kf)(g,g.liveness({worktreeId:a,cliToolId:b,instanceId:d}),h),probedActivity:(0,u.hS)({worktreeId:a,cliToolId:b,instanceId:d})},session:k,sessionContext:(0,x.sc)({worktreeId:a,cliToolId:b,instanceId:c},k),sessionDiff:(0,z.rn)({worktreeId:a,cliToolId:b,instanceId:c})};return{stopEventAt:e,eventSource:g,askUserQuestion:j,structuredEvents:l}}(b,c,e,o);if(!await W.isRunning(b,e))return(0,N.xG)((0,D.v7)(b,c,e)),{isRunning:!1,startingSince:(0,g.Bk)(b,c,e),sessionName:X,content:"",lineCount:0,cliToolId:c,sessionStatus:"idle",sessionStatusReason:"session_not_running",statusEvidence:"positive",lastKnownStatus:null,lastKnownStatusAt:null,lastStopEventAt:Y,structuredEvents:_,model:null,reasoningEffort:null,promptDedup:(0,G.XH)(b,c,e),upstreamFault:null,paneObstruction:null,composerText:null,composerState:"no_composer"};let aa=(0,d.getSessionState)(a,b,o),ab=aa?.lastCapturedLine||0,ac=await (0,B.Wh)(b,c,H._,e),aj=ac.split("\n"),ak=aj.length,al=(0,I.sl)(ak,Math.min(H._,I.xE)),am=((0,q.qR)(c,al)?aj.slice(Math.max(0,ab)):aj).join("\n"),{compositeKey:an,lastServerResponseTimestamp:ao,statusResult:ap,startingSince:aq,thinking:ar,scraperPromptWaiting:as,isSelectionListActive:at,isPagerActive:au,isDismissablePanelActive:av,evidence:aw,isUnclassifiedActive:ax}=function(a,b,c,d){let e=(0,D.v7)(a,b,c),f=(0,D.xU)(e),h=f?new Date(f):void 0,i=(0,C.WC)(d,b,h),j=(0,g.a3)(a,b,c,"waiting"===i.status||i.hasActivePrompt),k=null===j?i:(0,g.Gz)(i),l=(0,C.f8)(k),m=k.hasActivePrompt,n="waiting"===k.status&&C.ug.has(k.reason),o=k.reason===C.gv.CODEX_PAGER,p="waiting"===k.status&&k.reason===C.gv.COMMAND_CODE_DISMISSABLE_PANEL,q=k.evidence,r=(0,N.Q4)(k.status,k.reason);return{compositeKey:e,lastServerResponseTimestamp:f,statusResult:k,startingSince:j,thinking:l,scraperPromptWaiting:m,isSelectionListActive:n,isPagerActive:o,isDismissablePanelActive:p,evidence:q,isUnclassifiedActive:r}}(b,c,e,ac);(0,K.observeScraperCompletionEvidence)(b,c,e,"ready"===ap.status&&"positive"===aw,void 0,(0,s.KO)(_.source.kind,c,ac));let ay=(0,s.$K)(b,c,e,_.source.kind,ac),az=(0,L._G)({worktreeId:b,cliToolId:c,instanceId:e,scraper:{status:ap.status,reason:ap.reason,hasActivePrompt:as}}),aA=az.structured;null!==aA&&(_.promptWaitingSince=aA.at,_.promptWaitingSource=aA.source);let aB={status:ap.status,reason:ap.reason,thinking:ar,evidence:aw,isUnclassifiedActive:ax},aC=(0,ad.wG)(aB,ay,_)?(0,ad.mi)(a,b,c,o):null,aD=(0,ad.aT)(aB,ay,aA,_,aC),aE=null===aq&&az.waiting,{structuredFacts:aF,promptData:aG,promptAnswerable:aH}=function({worktreeId:a,cliToolId:b,output:c,statusResult:d,startingSince:e,promptWaiting:f,askUserQuestion:g,eventSource:h}){let i=d.hasActivePrompt,j=d.promptDetection.promptData,k=j&&g?(0,O.Hu)(j,g.spec):null,l=null!==f&&(0,L.$G)(f,h.capabilities.eventIdentity)?f.decisionId:null,m=null!==f&&"question"===(0,y.Wk)(f.toolName),n=null===l||m?null:(0,V.T5)(b),o=null===f?null:{...f,askUserQuestion:(0,ad.EV)(g),decisionOptions:n,decisionId:l,patterns:null!==n?f.patterns:null},p=null!==e?null:i?k??j??(o?(0,V.Yo)(a,o):null):o?(0,V.Yo)(a,o):null;return{structuredFacts:o,promptData:p,promptAnswerable:i&&(k??j)?null===(0,Q.dd)(b,c).refusal:void 0}}({worktreeId:b,cliToolId:c,output:ac,statusResult:ap,startingSince:aq,promptWaiting:aA,askUserQuestion:$,eventSource:Z}),aI=null!==ay&&ay.status!==ap.status;aI&&ai.info("detection-divergence",{worktreeId:b,cliToolId:c,instanceId:o,scraperStatus:ap.status,scraperReason:ap.reason,structuredStatus:ay.status,structuredReason:ay.reason,structuredEvent:ay.event,structuredEventAt:ay.at,applied:aD.structuredApplied});let aJ=function(a,b,c,d,e=Date.now()){let f=`${a}\u0000${b}\u0000${c}`,g=ah.get(f);return d?(g?g.polls++:ah.set(f,{startedAt:e,polls:1}),null):g?(ah.delete(f),{durationMs:Math.max(0,e-g.startedAt),polls:g.polls}):null}(b,c,o,aI);null!==aJ&&ai.info("detection-divergence-resolved",{worktreeId:b,cliToolId:c,instanceId:o,durationMs:aJ.durationMs,polls:aJ.polls});let aK=(function(a){let b=a.slice(-100);if(b.some(a=>!J(a)))return b;let c=a.length-1;for(;c>=0&&J(a[c]);)c-=1;return c<0?b:a.slice(Math.max(0,c+1-100),c+1)})(aj).join("\n"),aL="opencode"===c?function(a){let b=(0,j.aJ)(a).split("\n"),c=-1,d=-1,e=-1;for(let a=0;a<b.length;a++){let f=m.exec(b[a]);f&&(c=a,e=(d=f[1].length)+1+f[2].length)}if(-1===c)return null;let f=0,g="";for(let a=0;a<b.length;a++){let h=b[a];if(a!==c){let a=n.exec(h);if(!a||a[1].length!==d)continue}let i=h.slice((0,l.sh)(h,e)).trim();""!==i&&(f+=1,""===g&&(g=(0,k.D)(i,200,"…[truncated]")))}return f<2?null:{id:"opencode_sidebar",matchedText:g,boxRight:e,rows:f}}(aK):null,aM=(0,V.LF)(Z.capabilities.eventIdentity,_.pendingDecisions??[]),aN=function(a,b,c=Date.now()){for(let[a,b]of f)c-b.lastSeen>36e5&&f.delete(a);if(!b)return f.delete(a),{dwellMs:0,shouldRecord:!1};let d=f.get(a);if(!d)return f.set(a,{since:c,lastSeen:c,recorded:!1}),{dwellMs:0,shouldRecord:!1};d.lastSeen=c;let e=Math.max(0,c-d.since);return d.recorded||e<6e4?{dwellMs:e,shouldRecord:!1}:(d.recorded=!0,{dwellMs:e,shouldRecord:!0})}(an,aD.isUnclassifiedActive&&!aM&&null===aq);aN.shouldRecord&&function(a,b){var c;let e=Math.round(b.dwellMs/1e3),f=`${b.sessionStatus}/${b.sessionStatusReason}`,g=`Unclassified interactive frame (${f}) held for ${e}s. The detection layer could not parse it, so no prompt was published and nothing could answer it. Inspect the raw pane with \`commandmate capture ${b.worktreeId} --pane\`.`+((c=b.obstruction)?` Cause: opencode's sidebar is sharing rows with the transcript (paneObstruction=${c.id}, second column reads ${JSON.stringify(c.matchedText)}), which covers the marker that ends a turn. Press \`ctrl+x b\` in the pane to close it.`:""),h={type:ae.LT,status:"unclassified",question:g,options:[],dwellSeconds:e,sessionStatusReason:f};try{let c=(0,d.createMessage)(a,{worktreeId:b.worktreeId,role:"assistant",content:g,messageType:"prompt",promptData:h,timestamp:new Date,cliToolId:b.cliToolId,instanceId:b.instanceId});af.info("unclassified-frame-recorded",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,dwellSeconds:e,statusReason:f}),ag(b.worktreeId,c)}catch(a){af.warn("unclassified-frame-record-failed",{worktreeId:b.worktreeId,error:a instanceof Error?a.message:String(a)})}}(a,{worktreeId:b,cliToolId:c,instanceId:o,dwellMs:aN.dwellMs,sessionStatus:aD.status,sessionStatusReason:aD.reason,obstruction:aL});let aO=(aP={supportedEvents:Z.capabilities.supportedEvents,scraperStatus:ap.status,scraperReason:ap.reason,hasActivePrompt:as,lastEventType:_.lastEventType,lastEventDetail:_.lastEventDetail}).supportedEvents.includes("user_prompt_submit")&&aP.supportedEvents.includes("stop")&&"waiting"===aP.scraperStatus&&"stop"===aP.lastEventType&&aP.lastEventDetail!==S.HV?aP.hasActivePrompt?"approval-after-stop":C.ug.has(aP.scraperReason)?"menu-after-stop":null:null;if(null!==aO&&function(a){let b=`${a.compositeKey}|${a.turnId??"-"}|${a.kind}`;if(U.has(b))return;U.size>=512&&U.clear(),U.add(b);let c=(0,R.aJ)(a.frame).split("\n").filter(a=>""!==a.trim());T.warn("layerDisagreement",{kind:a.kind,worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId,turnId:a.turnId,scraperReason:a.scraperReason,frameTail:c.slice(-40).join("\n")})}({compositeKey:an,worktreeId:b,cliToolId:c,instanceId:o,turnId:_.turnId,kind:aO,scraperReason:ap.reason,frame:ac}),null!==aA&&null!==aF&&!as&&!aA.recorded&&!aM){(0,K.markStructuredPromptRecorded)(b,c,e);var aP,aQ=b,aR=c,aS=o,aT=aA,aU=aF;let f=(0,V.fO)(aQ,aU);try{let b=(0,d.createMessage)(a,{worktreeId:aQ,role:"assistant",content:f.question,summary:`structured prompt \xb7 source=${aT.source}${aT.toolName?` \xb7 tool=${aT.toolName}`:""}`,messageType:"prompt",promptData:f,timestamp:new Date,cliToolId:aR,instanceId:aS});af.info("structured-prompt-recorded",{worktreeId:aQ,cliToolId:aR,instanceId:aS,source:aT.source,toolName:aT.toolName}),ag(aQ,b)}catch(a){af.warn("structured-prompt-record-failed",{worktreeId:aQ,error:a instanceof Error?a.message:String(a)})}}let aV=(0,h.ji)(ac,c),aW=(0,i.bT)(aK),aX=(0,D.aq)(b,c,e),{model:aY,effort:aZ}=(0,K.getResolvedAgentModelInfo)(b,c,e),a$=null===aq?aD:{...aD,status:"running",reason:C.gv.STARTING,thinking:!1};(0,N.ox)(an,{status:a$.status,reason:a$.reason,evidence:a$.evidence});let a_=(0,N.AD)(an);return function({worktreeId:a,cliToolId:b,instanceId:c,sessionName:d,published:e,merged:f,newContent:g,output:h,realtimeSnippet:i,totalLines:j,lastCapturedLine:k,isPromptWaiting:l,promptData:m,promptAnswerable:n,autoYesState:o,lastEnterFallback:p,isSelectionListActive:q,isPagerActive:r,isDismissablePanelActive:s,startingSince:t,lastKnown:u,lastServerResponseTimestamp:v,compositeKey:w,stopEventAt:x,structuredEvents:y,model:z,effort:A,upstreamFaultMatch:B,paneObstruction:C,composer:F}){return{isRunning:!0,sessionName:d,cliToolId:b,sessionStatus:e.status,sessionStatusReason:e.reason,content:g,fullOutput:h,realtimeSnippet:i,lineCount:j,lastCapturedLine:k,thinking:e.thinking,isPromptWaiting:l,promptData:m,...void 0!==n?{promptAnswerable:n}:{},promptView:(0,P.ds)(m),autoYes:{enabled:o?.enabled??!1,expiresAt:o?.enabled?o.expiresAt:null,stopReason:o?.stopReason,lastSuppression:(0,E.gb)(a,b,c),stopMatchedText:o?.stopMatchedText,lastEnterFallback:p},isSelectionListActive:q,isPagerActive:r,isDismissablePanelActive:s,isUnclassifiedActive:null===t&&f.isUnclassifiedActive,startingSince:t,statusEvidence:e.evidence,lastKnownStatus:u?.status??null,lastKnownStatusAt:u?.at??null,lastServerResponseTimestamp:v,serverPollerActive:(0,D.bZ)(w),lastStopEventAt:x,structuredEvents:y,model:z,reasoningEffort:A,promptDedup:(0,G.XH)(a,b,c),upstreamFault:B?{id:B.fault.id,matchedText:B.matchedText,at:Date.now()}:null,paneObstruction:C?{id:C.id,matchedText:C.matchedText,at:Date.now()}:null,composerText:"content"===F.state?F.text:null,composerState:F.state}}({worktreeId:b,cliToolId:c,instanceId:e,sessionName:X,published:a$,merged:aD,newContent:am,output:ac,realtimeSnippet:aK,totalLines:ak,lastCapturedLine:ab,isPromptWaiting:aE,promptData:aG,promptAnswerable:aH,autoYesState:aX,lastEnterFallback:(0,F.YN)((0,F.li)(b,c,e),void 0!==aH?ap.promptDetection.promptData:null),isSelectionListActive:at,isPagerActive:au,isDismissablePanelActive:av,startingSince:aq,lastKnown:a_,lastServerResponseTimestamp:ao,compositeKey:an,stopEventAt:Y,structuredEvents:_,model:aY,effort:aZ,upstreamFaultMatch:aW,paneObstruction:aL,composer:aV})}},80544:(a,b,c)=>{c.d(b,{Di:()=>h,O$:()=>g,d7:()=>k,rS:()=>j});var d=c(88807);let e=(0,c(72626).h)("push/escalation-settings"),f="push_escalation",g={enabled:!0,thresholdMinutes:10},h=[5,10,30,60];function i(a){if("object"!=typeof a||null===a)return{...g};let b="boolean"==typeof a.enabled?a.enabled:g.enabled,c=a.thresholdMinutes;return{enabled:b,thresholdMinutes:"number"==typeof c&&Number.isFinite(c)&&c>=1&&c<=1440?Math.round(c):g.thresholdMinutes}}function j(){try{let a=(0,d.getDbInstance)().prepare("SELECT value FROM app_settings WHERE key = ?").get(f);if(!a)return{...g};return i(JSON.parse(a.value))}catch(a){return e.warn("escalation-settings-read-failed",{error:a instanceof Error?a.message:String(a)}),{...g}}}function k(a){let b=i(a),c=Date.now();return(0,d.getDbInstance)().prepare(`
|
|
20
|
-
INSERT INTO app_settings (key, value, created_at, updated_at)
|
|
21
|
-
VALUES (?, ?, ?, ?)
|
|
22
|
-
ON CONFLICT(key) DO UPDATE SET
|
|
23
|
-
value = excluded.value,
|
|
24
|
-
updated_at = excluded.updated_at
|
|
25
|
-
`).run(f,JSON.stringify(b),c,c),b}},91601:(a,b,c)=>{c.d(b,{Di:()=>f.Di,HR:()=>d.HR,J$:()=>e.notifyPushSubscribers,O$:()=>f.O$,d7:()=>f.d7,rS:()=>f.rS});var d=c(27519);c(8532);var e=c(61191);c(3915),c(92010),c(81099),c(77703),c(73478);var f=c(80544);c(50779),c(4806),c(55233)},92010:(a,b,c)=>{c.d(b,{R:()=>h});var d=c(24455),e=c(72626),f=c(52277);let g=(0,e.h)("push/prompt-gate");function h(a){let b=function(a){let{worktreeId:b,cliToolId:c,instanceId:e,waitingSince:g}=a,h=(0,d.aq)(b,c,e);if(null===h||!h.enabled)return{suppress:!1,reason:"auto-yes-inactive",stopReason:h?.stopReason};let i=(0,f.gb)(b,c,e);return null!==i&&i.at>=g?{suppress:!1,reason:"policy-withheld",suppressedBy:i.reason}:!0===a.escalated?{suppress:!1,reason:"escalation-reminder"}:{suppress:!0,reason:"auto-yes-answering"}}(a),c={worktreeId:a.worktreeId,cliToolId:a.cliToolId,instanceId:a.instanceId??a.cliToolId,waitingSince:a.waitingSince,escalated:!0===a.escalated,reason:b.reason,...void 0!==b.stopReason?{stopReason:b.stopReason}:{},...void 0!==b.suppressedBy?{suppressedBy:b.suppressedBy}:{}};return b.suppress?g.info("prompt-push-suppressed",c):g.debug("prompt-push-allowed",c),b.suppress}},97751:(a,b,c)=>{c.d(b,{M4:()=>p,W7:()=>r,aK:()=>q,dV:()=>l,dZ:()=>m,yQ:()=>j});var d=c(72626),e=c(27870),f=c(25071),g=c(59409),h=c(62887);let i=(0,d.h)("lib/hooks/structured-decision-response"),j="Rejected by the operator via `commandmate respond`.",k={1:["once","allow once","allow","yes","y"],2:["always","allow always","allow-always"],3:["reject","deny","no","n"]};function l(a,b){let c=a.trim().toLowerCase();if(""===c)return null;for(let a of void 0===b?e.QB:(0,e.T5)(b))if(c===String(a.number)||c===a.label.toLowerCase()||c===a.reply||(k[a.number]??[]).includes(c))return a;return null}function m(a){let b=a.questions[0];return b?b.choices.map((a,b)=>({number:b+1,label:a.label,reply:a.label})):[]}let n=/^\d+(?:\s*[,\s]\s*\d+)*$/;function o(a){return a.map(a=>`${a.number} = ${a.label}`).join(", ")}function p(a,b){let c=b.trim();if(""===c)return{ok:!1,reason:"unresolvable_answer",message:"An empty answer names no choice."};if(1!==a.questions.length)return{ok:!1,reason:"multi_question_unsupported",message:`This call asks ${a.questions.length} questions and \`answers\` carries one array per question; a single answer cannot say what the others are. Answer it in the terminal.`};let d=a.questions[0],e=m(a);if(n.test(c)){let a=[];for(let b of c.split(/[,\s]+/)){let d=e.find(a=>a.number===Number(b));if(!d)return{ok:!1,reason:"answer_out_of_range",message:`'${c}' names no choice this question offers. ${o(e)}.`};a.some(a=>a.number===d.number)||a.push(d)}return a.length>1&&!d.multiSelect?{ok:!1,reason:"multi_select_not_offered",message:`This question accepts one choice. Send a single number: ${o(e)}.`}:{ok:!0,resolved:{answers:[a.map(a=>a.reply)],selected:a,freeText:!1}}}let f=e.find(a=>a.label.toLowerCase()===c.toLowerCase());return f?{ok:!0,resolved:{answers:[[f.reply]],selected:[f],freeText:!1}}:c.length>1e3?{ok:!1,reason:"unresolvable_answer",message:"A free-text answer is limited to 1000 characters; this one is longer and is refused rather than cut short."}:{ok:!0,resolved:{answers:[[c]],selected:[],freeText:!0}}}function q(a){return{kind:"answer",answers:a.answers}}async function r({worktreeId:a,cliToolId:b,instanceId:d,answer:k,useDefault:m=!1}){let n,o=(0,g.VM)(b);if(null===o.capabilities.eventIdentity)return{kind:"not-applicable",reason:"no-decision-identity"};let p={worktreeId:a,cliToolId:b,instanceId:d};try{n=await o.listPending(p)}catch(c){return i.warn("structured-decision-unreachable",{worktreeId:a,cliToolId:b,instanceId:d??b,error:c instanceof Error?c.message:String(c)}),{kind:"not-applicable",reason:"source-unreachable"}}let q=n.filter(a=>"permission"===a.kind);if(0===q.length)return{kind:"not-applicable",reason:"no-pending-decision"};let r=q[0];if(q.length>1&&i.info("structured-decision-multiple-pending",{worktreeId:a,cliToolId:b,instanceId:d??b,pending:q.length,answering:r.id}),m)return{kind:"refused",reason:"unresolvable_answer",message:`--default cannot answer a structured approval: the agent publishes no default verdict. Send a number instead — ${(0,e.T5)(b).map(a=>`${a.number} = ${a.label}`).join(", ")}.`};let s=void 0===k?null:l(k,b);if(!s)return{kind:"refused",reason:"answer_out_of_range",message:`'${k??""}' is not one of the verdicts this approval accepts. `+(0,e.T5)(b).map(a=>`${a.number} = ${a.label} (${a.reply})`).join(", ")+"."};let t=function(a){switch(a){case 1:return{kind:"allowOnce"};case 2:return{kind:"allowAlways"};case 3:return{kind:"deny",message:j};default:return null}}(s.number);if(!t)return{kind:"refused",reason:"unresolvable_answer",message:`Option ${s.number} has no verdict on this server.`};let{delivery:u}=await (0,f.GW)(o,p,r,t),v=u?.delivered===!0;if(v&&o.capabilities.permissionReplyReleasesPrompt){let{recordAgentEvent:e}=await Promise.resolve().then(c.bind(c,33294));e(a,b,d,{event:"notification",at:Date.now(),detail:h.KC,sessionId:r.conversationId,decisionId:r.id,promptSettled:!0})}return i.info("structured-decision-answered",{worktreeId:a,cliToolId:b,instanceId:d??b,decisionId:r.id,optionNumber:s.number,reply:s.reply,delivered:v}),{kind:"answered",decisionId:r.id,option:s,delivered:v}}},99508:(a,b,c)=>{c.r(b),c.d(b,{INTERACTION_SNAPSHOT_RETRY_DELAYS_MS:()=>n,__resetTerminalBroadcastState:()=>v,broadcastSessionStatus:()=>u,broadcastTerminalSnapshot:()=>o,broadcastTerminalSnapshotAfterInteraction:()=>t});var d=c(43015),e=c(88807),f=c(79565),g=c(72626),h=c(8360),i=c(93997),j=c(36925),k=c(56455);let l=(0,g.h)("terminal-broadcast"),m=(0,j.v)("__terminalSnapshotVersions",()=>new Map),n=[100,250,500,750];async function o(a,b,c){if((0,d.hasRoomSubscribers)(a))try{if(!await q(a,b,c))return;let d=(0,e.getDbInstance)(),g=await (0,f.$v)(d,a,b,c);s(a,b,g,c)}catch(b){l.error("terminal-snapshot:failed",{worktreeId:a,error:b instanceof Error?b.message:String(b)})}}function p(a){return JSON.stringify([a.fullOutput??"",a.isRunning,a.sessionStatus,a.thinking??!1,a.isPromptWaiting??!1,a.promptAnswerable??null,a.autoYes?.lastEnterFallback??null,a.isSelectionListActive??!1,a.isPagerActive??!1,a.isDismissablePanelActive??!1,a.isUnclassifiedActive??!1,a.startingSince??null])}async function q(a,b,c){let d=h.CLIToolManager.getInstance().getTool(b).getSessionName(a,c),e=await (0,k.y)(a,d);return null===e||(l.info("terminal-snapshot:refused",{worktreeId:a,cliToolId:b,instanceId:c,refusal:e}),!1)}async function r(a,b,c){if(!await q(a,b,c))return null;let d=h.CLIToolManager.getInstance().getTool(b);return(0,i.gm)(d.getSessionName(a,c)),(0,f.$v)((0,e.getDbInstance)(),a,b,c)}function s(a,b,c,e){let f=e??b,g=`${a}:${b}:${f}`;(0,d.broadcast)(a,{type:"terminal_snapshot",worktreeId:a,cliToolId:b,instanceId:f,output:c.fullOutput??"",isRunning:c.isRunning,sessionStatus:c.sessionStatus,thinking:c.thinking??!1,isPromptWaiting:c.isPromptWaiting??!1,promptData:c.promptData??null,promptAnswerable:c.promptAnswerable,autoYesEnterFallback:c.autoYes?.lastEnterFallback,isSelectionListActive:c.isSelectionListActive??!1,isPagerActive:c.isPagerActive??!1,isDismissablePanelActive:c.isDismissablePanelActive??!1,isUnclassifiedActive:c.isUnclassifiedActive??!1,startingSince:c.startingSince??null,version:function(a){let b=(m.get(a)??0)+1;return m.set(a,b),b}(g)})}async function t(a,b,c,e=n){if((0,d.hasRoomSubscribers)(a))try{let d=await r(a,b,c);if(null===d)return;let f=p(d);for(let g of(s(a,b,d,c),e)){await new Promise(a=>setTimeout(a,g));let d=await r(a,b,c);if(null===d)return;if(p(d)!==f)return void s(a,b,d,c)}}catch(d){l.error("terminal-snapshot:interaction-refresh-failed",{worktreeId:a,cliToolId:b,instanceId:c,error:d instanceof Error?d.message:String(d)})}}function u(a,b,c){(0,d.broadcast)(a,{type:"session_status_changed",worktreeId:a,isRunning:b,cliTool:c?.cliTool??null,instance:c?.instance??null})}function v(){m.clear()}}};
|