commandmate 0.44.3 → 0.45.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 +293 -292
- package/.next/app-path-routes-manifest.json +21 -21
- package/.next/build-manifest.json +5 -5
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +9 -9
- package/.next/react-loadable-manifest.json +29 -29
- 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 +2 -2
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_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 +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.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.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 +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +3 -3
- 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 +2 -2
- 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 +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.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +5 -5
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +21 -21
- package/.next/server/chunks/1503.js +2 -2
- package/.next/server/chunks/1559.js +2 -2
- package/.next/server/chunks/1944.js +1 -1
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/22.js +1 -1
- package/.next/server/chunks/2335.js +1 -0
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2460.js +1 -1
- package/.next/server/chunks/2710.js +2 -2
- package/.next/server/chunks/2908.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/4243.js +1 -0
- package/.next/server/chunks/4837.js +3 -3
- package/.next/server/chunks/5048.js +1 -1
- package/.next/server/chunks/5064.js +1 -1
- package/.next/server/chunks/5209.js +1 -1
- package/.next/server/chunks/5292.js +7 -0
- package/.next/server/chunks/5625.js +3 -3
- package/.next/server/chunks/5737.js +1 -1
- package/.next/server/chunks/6065.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6927.js +1 -1
- package/.next/server/chunks/850.js +1 -1
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8918.js +4 -6
- package/.next/server/chunks/9051.js +1 -1
- package/.next/server/chunks/9130.js +1 -1
- package/.next/server/chunks/9355.js +1 -0
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9731.js +1 -1
- package/.next/server/chunks/9862.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{7485.442b21101fca7257.js → 1111.5ab4f0ffb0d944e5.js} +4 -4
- package/.next/static/chunks/1464.09cd37fee202ec4b.js +1 -0
- package/.next/static/chunks/{1642-767aed8e7c61ef7f.js → 1642-0f1bf8fb8161e10a.js} +1 -1
- package/.next/static/chunks/{2407-06d35bb1aa02de80.js → 2407-86890b00eeecf391.js} +1 -1
- package/.next/static/chunks/{2751-9ef0f4b450bd4ef0.js → 2751-5f0b2702accd164d.js} +1 -1
- package/.next/static/chunks/{282.6b6f2e31a96674dd.js → 282.a1013532fd9a61b4.js} +1 -1
- package/.next/static/chunks/3237.94c29281d9ec122e.js +1 -0
- package/.next/static/chunks/3480.2e21f62e5e9d3ba5.js +1 -0
- package/.next/static/chunks/3662-5a27ee39a3ecba49.js +1 -0
- package/.next/static/chunks/3922.0bc2e4e168d2b522.js +1 -0
- package/.next/static/chunks/4290.c06dbe243819fea0.js +66 -0
- package/.next/static/chunks/4541-b0ce0bf829ae79b7.js +1 -0
- package/.next/static/chunks/4727-4c69d1aa4118cc09.js +1 -0
- package/.next/static/chunks/{5222.305dc0ebba9c0784.js → 5222.39e2034d3fce233c.js} +1 -1
- package/.next/static/chunks/5371-af1c2b68e983da61.js +1 -0
- package/.next/static/chunks/6288-09feba367cc2c65e.js +1 -0
- package/.next/static/chunks/{7095.8c869e553133a40e.js → 7095.87323a4fdf426341.js} +1 -1
- package/.next/static/chunks/953.31c52a251deda22d.js +1 -0
- package/.next/static/chunks/app/{layout-0d1750b833f5cc3e.js → layout-eaa6365f8f942e88.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-2af68c63211c751f.js → page-ebfed2c80e916fb8.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/page-e4b14031f946c007.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-9cf1ecc59e36a004.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-3372b78fde232b1f.js +1 -0
- package/.next/static/chunks/{webpack-021f0741f22dd16a.js → webpack-ee3ccbe378c4aa06.js} +1 -1
- package/.next/static/css/{057f64a65726c439.css → 6faeb04a0b6819d4.css} +1 -1
- package/.next/trace +13 -13
- package/dist/cli/commands/skill-format.d.ts +8 -0
- package/dist/cli/commands/skill-format.d.ts.map +1 -1
- package/dist/cli/commands/skill-format.js +13 -3
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +71 -3
- package/dist/cli/types/api-responses.d.ts +7 -10
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.d.ts +21 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +38 -1
- package/dist/server/locales/en/worktree.json +7 -2
- package/dist/server/locales/ja/worktree.json +7 -2
- package/dist/server/src/lib/auto-yes-poller.js +16 -163
- package/dist/server/src/lib/detection/model-info-extractor.js +57 -3
- package/dist/server/src/lib/detection/status-detector.js +1 -1
- package/dist/server/src/lib/git/git-exec.js +23 -5
- package/dist/server/src/lib/hooks/sources/claude/self-resume.js +213 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +24 -7
- package/dist/server/src/lib/polling/auto-yes-enter-fallback-state.js +1 -1
- package/dist/server/src/lib/polling/auto-yes-poller-state.js +52 -0
- package/dist/server/src/lib/polling/auto-yes-prompt-suppression.js +125 -0
- package/dist/server/src/lib/polling/prompt-dedup.js +93 -2
- package/dist/server/src/lib/polling/response-checker.js +40 -2
- package/dist/server/src/lib/polling/response-dedup.js +62 -1
- package/dist/server/src/lib/session/agent-event-dedup.js +2 -2
- package/dist/server/src/lib/session/agent-event-state.js +2 -1
- package/dist/server/src/lib/session/agent-event-turn.js +51 -0
- package/dist/server/src/lib/session/current-output-builder.js +0 -5
- package/dist/server/src/lib/skills/install-plan.js +1 -0
- package/dist/server/src/lib/skills/preview-diff.js +24 -3
- package/dist/server/src/lib/skills/uninstall-plan.js +1 -0
- package/dist/server/src/lib/verification/env-clean-gate.js +6 -5
- package/docs/en/user-guide/commands-guide.md +0 -1
- package/package.json +3 -2
- package/release-notes/0.45.0.json +41 -0
- package/release-notes/0.45.1.json +38 -0
- package/scripts/hooks/cmate-agent-event.sh +20 -0
- package/.next/server/chunks/364.js +0 -1
- package/.next/server/chunks/4672.js +0 -5
- package/.next/server/chunks/4802.js +0 -1
- package/.next/server/chunks/488.js +0 -1
- package/.next/server/chunks/5326.js +0 -1
- package/.next/static/chunks/2053-85a974ddfe7498fe.js +0 -1
- package/.next/static/chunks/3922.f45dcfc1e7da552a.js +0 -1
- package/.next/static/chunks/4290.6cf86f68d73b6e77.js +0 -82
- package/.next/static/chunks/4459.a94b52985a76509a.js +0 -1
- package/.next/static/chunks/4727-5d695d71e3fdf97b.js +0 -1
- package/.next/static/chunks/5951.616956b6aa5df63f.js +0 -1
- package/.next/static/chunks/8283-26ad31a4670ea52d.js +0 -1
- package/.next/static/chunks/8566-aeda747542072ace.js +0 -1
- package/.next/static/chunks/8811-29eaa24237f48558.js +0 -1
- package/.next/static/chunks/953.19e4c8178c9eac4c.js +0 -1
- package/.next/static/chunks/9856.15463dd58437e2ac.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-9ee7a381636e60cb.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/files/[...path]/page-5445205c8dd80109.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-e36898c3a80e7302.js +0 -1
- /package/.next/static/{tWwHQzmvc-rv9KKUtDWfQ → vYIpFRCU_Mt0wtG8F_3-6}/_buildManifest.js +0 -0
- /package/.next/static/{tWwHQzmvc-rv9KKUtDWfQ → vYIpFRCU_Mt0wtG8F_3-6}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";exports.id=9731,exports.ids=[9731],exports.modules={8360:(a,b,c)=>{c.r(b),c.d(b,{CLIToolManager:()=>aX});var d=c(89731),e=c(8953),f=c(57905);class g extends d.Mj{navigationKeys(){return{keys:e.pU,leaderKey:null}}async isInstalled(){return await (0,f.zw)()}async isRunning(a,b){return await (0,f.Yq)(a,b)}async launchSession(a,b,c,d){await (0,f.R7)({worktreeId:a,worktreePath:b,instanceId:c,model:d})}async sendMessage(a,b,c){await (0,f.pU)(a,b,c)}supportsImage(){return!0}async sendMessageWithImage(a,b,c,d){let e=`
|
|
2
|
-
`,f=b?`${b}${e}`:e;await this.sendMessage(a,f,d)}async killSession(a,b){await (0,f.VU)(a,b)}constructor(...a){super(...a),this.id="claude",this.name="Claude Code",this.command="claude"}}var h=c(79892),i=c(40236),j=c(93997),k=c(61789),l=c(11472);let m=["skip","skip-until-next-version","update","ask"],n=Object.freeze({update:"1",skip:"2","skip-until-next-version":"3",ask:null});function o(a){if("string"!=typeof a)return null;let b=a.trim().toLowerCase();return"string"==typeof b&&m.includes(b)?b:null}c(68847);var p=c(61260);c(48800);var q=c(72626),r=c(22354),s=c(99432),t=c(1305),u=c(20610),v=c(46749),w=c(77093);let x=(0,q.h)("cli-tools/codex"),y="codex";function z(){return{screen:null,attempts:0}}class A extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:x,liveAction:"codex-session-exists",relaunchAction:"codex-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:r.c1,instanceId:c});try{let f=(0,t.wK)({target:{worktreeId:a,cliToolId:r.c1,instanceId:c},executablePath:this.command,worktreePath:b});e||await this.createLaunchPane(d,b);let g=async()=>{(0,t.Fq)({worktreeId:a,cliToolId:r.c1,instanceId:c}),await (0,h.V1)(d,(0,v.Y)(f),!0),await new Promise(a=>setTimeout(a,3e3))};await (0,h.V1)(d,(0,v.Y)(f),!0),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(d,{relaunch:g,trustHooks:(0,s.dO)(b)}),x.info("started-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Codex session: ${a}`)}}}async waitForReady(a,b){let c=b?.trustHooks??!1,d=!1,e=!1,f=z(),g=function(a){let b=o(void 0);if(null!==b)return b;let c=o(((void 0)??process.env).CM_CODEX_UPDATE_DIALOG);return null!==c?c:"skip-until-next-version"}(),i=n[g],j=!1,m=!1,q=!1,r=30;try{for(let o=0;o<r;o++){try{let s=await (0,h.Xg)(a,50),t=(0,k.aJ)(s),v=(0,k.E6)(t);if(("hooks-review"===v||"hooks-list"===v||"hooks-detail"===v)&&await this.answerCodexHooksScreen(a,v,f,c)){await new Promise(a=>setTimeout(a,u.CV));continue}if((0,k.zZ)(t))return void x.info("codex-prompt-detected");if(j&&!m&&b?.relaunch&&null!==(0,l.GE)(t,this.livenessSpec())){m=!0,r=Math.max(r,o+1+30),e=!1,f.screen=null,f.attempts=0,q&&(q=!1,(0,p.lM)(y),x.info("codex-update-lock-released",{sessionName:a})),x.info("codex-relaunched-after-update",{sessionName:a,policy:g}),await b.relaunch();continue}let w=(0,k.Qh)(t);if("update"===w){if(j=!0,null===i){await new Promise(a=>setTimeout(a,1e3));continue}if(!d){let b=i;b!==n.update||(0,p.mf)(y)?b===n.update&&(q=!0):(b=n["skip-until-next-version"],x.warn("codex-update-dialog-yielded-to-running-update",{sessionName:a,policy:g,requestedKey:i,key:b})),await (0,h.V1)(a,b,!1),d=!0,b===n.update&&(r=Math.max(r,o+1+120)),x.info("codex-update-dialog-answered",{sessionName:a,policy:g,key:b}),await new Promise(a=>setTimeout(a,u.CV));continue}}if("press-enter"===w){await (0,h.ds)(a,"Enter"),x.info("dismissed-codex-notification"),await new Promise(a=>setTimeout(a,u.CV));continue}if("trust"===w&&!e){await (0,h.V1)(a,"1",!1),e=!0,x.info("auto-trusted-folder-for-codex"),await new Promise(a=>setTimeout(a,u.CV));continue}}catch{}await new Promise(a=>setTimeout(a,1e3))}x.info("codex-prompt-detection")}finally{q&&(q=!1,(0,p.lM)(y),x.warn("codex-update-lock-released-unfinished",{sessionName:a}))}}async answerCodexHooksScreen(a,b,c,d){if(c.screen!==b&&(c.screen=b,c.attempts=0),c.attempts>=3)return x.warn("codex-hooks-screen-unresponsive",{sessionName:a,screen:b,trust:d}),!1;let e=++c.attempts;if("hooks-review"===b){let b=1===e?d?"2":"3":"1";return await (0,h.V1)(a,b,!1),x.info("codex-hooks-review-answered",{sessionName:a,key:b,attempt:e,trust:d}),!0}return d?(await (0,h.V1)(a,"t",!1,{literal:!0}),x.info("codex-hooks-screen-trusted",{sessionName:a,screen:b,attempt:e})):(await (0,h.ds)(a,"Escape"),x.info("codex-hooks-screen-escaped",{sessionName:a,screen:b,attempt:e})),!0}async waitForPrompt(a){let b=Date.now(),c=z(),d=null;for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,50),e=(0,k.aJ)(b),f=(0,k.E6)(e);if("hooks-review"===f||"hooks-list"===f||"hooks-detail"===f){if(null===d){let b=await (0,h.nS)(a);d=null!==b&&(0,s.dO)(b)}await this.answerCodexHooksScreen(a,f,c,d)}else if((0,k.zZ)(e))return}catch{}await new Promise(a=>setTimeout(a,500))}throw x.info("codex-prompt-not-detected"),Error("Codex prompt not ready: timed out waiting for the input prompt before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Codex",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"codex",composer:this.describeComposer(),awaitTypedBody:!0}),(0,j.gm)(d),x.info("sent-message-to-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Codex: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:x,stoppedAction:"stopped-codex-session",requestExit:async a=>{await (0,h.ds)(a,"C-d"),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="codex",this.name="Codex CLI",this.command="codex"}}var B=c(23365);let C=(0,q.h)("cli-tools/gemini");class D extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:C,liveAction:"gemini-session-exists",relaunchAction:"gemini-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:r.o,instanceId:c});try{e||await this.createLaunchPane(d,b);let f=(0,t.wK)({target:{worktreeId:a,cliToolId:r.o,instanceId:c},executablePath:this.command,worktreePath:b});await (0,h.V1)(d,(0,v.Y)(f),!0),await new Promise(a=>setTimeout(a,6e3)),await this.waitForReady(d),C.info("started-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Gemini session: ${a}`)}}}async waitForReady(a){let b=!1;for(let c=0;c<30;c++){try{let c=await (0,h.Xg)(a,B.H),d=(0,k.aJ)(c);if(k.wN.test(d))return void C.info("gemini-prompt-detected");!b&&d.includes("Do you trust this folder?")&&(await (0,h.ds)(a,"Enter"),b=!0,C.info("auto-trusted-folder-for-gemini"))}catch{}await new Promise(a=>setTimeout(a,1e3))}C.info("gemini-prompt-detection")}async waitForPrompt(a){let b=Date.now();for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,B.H),c=(0,k.aJ)(b);if(k.wN.test(c))return}catch{}await new Promise(a=>setTimeout(a,500))}C.info("gemini-prompt-not-detected")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Gemini",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"gemini",composer:this.describeComposer()}),(0,j.gm)(d),C.info("sent-message-to-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Gemini: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:C,stoppedAction:"stopped-gemini-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.V1)(a,"/quit",!0),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}var E=c(15194),F=c(88807),G=c(56791);let H=(0,q.h)("cli-tools/vibe-local");class I extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:H,liveAction:"vibe-local-session-exists",relaunchAction:"vibe-local-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:this.id,instanceId:c});try{e||await this.createLaunchPane(d,b);let c="vibe-local -y";try{let b=(0,F.getDbInstance)(),d=(0,G.getWorktreeById)(b,a);d?.vibeLocalModel&&E.QP.test(d.vibeLocalModel)&&(c+=` -m ${d.vibeLocalModel}`);let e=d?.vibeLocalContextWindow;(0,E.FV)(e)&&(c+=` --context-window ${Number(e)}`)}catch{}await (0,h.V1)(d,(0,v.Y)(c),!0),await new Promise(a=>setTimeout(a,5e3)),H.info("started-vibe-local-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Vibe Local session: ${a}`)}}}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Vibe Local",a,c,{relaunch:!0});try{await (0,i.FW)({sessionName:d,message:b,cliToolId:"vibe-local",composer:this.describeComposer(),interEnterWaitMs:u.PY}),(0,j.gm)(d),H.info("sent-message-to-vibe-local-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Vibe Local: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:H,stoppedAction:"stopped-vibe-local-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="vibe-local",this.name="Vibe Local",this.command="vibe-local"}}var J=c(49319),K=c(81776),L=c(56263),M=c(21758),N=c(54633),O=c(78099);let P=(0,q.h)("cli-tools/copilot"),Q=new Set(["model","agent","theme","permissions","skills","mcp","settings","statusline","subagents","resume","session"]),R=/^[>❯](?:\s|$)/,S=/^\s*\S\s+Loading:/;function T(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=[RegExp(`^\\s*●\\s+Model changed from .+ to ${c}(?=\\s|$)`),RegExp(`^\\s*●\\s+Switched model to:\\s*${c}\\s*$`)],e=RegExp(`^\\s*✗\\s+Model "${c}" is \\S`),f={switched:0,rejected:[]};for(let b of(0,k.aJ)(a).split("\n"))d.some(a=>a.test(b))?f.switched++:e.test(b)&&f.rejected.push(b.trim().replace(/^✗\s+/,""));return f}function U(a){let b=(0,k.aJ)(a).split("\n");for(let a=b.length-1;a>=0;a--){let c=b[a].trim().replace(/\s{2,}/g," ");if(""!==c)return JSON.stringify(c.length>80?`${c.slice(0,80)}…`:c)}return"an empty pane"}class V extends d.Mj{async isInstalled(){return await (0,K.B0)()!==null}launchExecutable(a){return"path"===a.source?this.command:M.nL}async launchSession(a,b,c){let d=await (0,K.B0)();if(!d)throw(0,O.Tl)(this);let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:P,liveAction:"copilot-session-exists",relaunchAction:"copilot-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:N.V,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:N.V,instanceId:c},executablePath:this.launchExecutable(d),worktreePath:b});f||await this.createLaunchPane(e,b),await (0,h.V1)(e,(0,v.Y)(g),!0),await this.waitForReady(e),P.info("started-copilot-session",{executableSource:d.source,version:d.version})}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Copilot session: ${a}`)}}}async answerFolderTrustDialog(a,b){return!!(0,k.Rx)(b)&&(await (0,h.V1)(a,k.oD,!1),(0,j.gm)(a),P.info("copilot-folder-trust-answered"),!0)}isComposerDrawn(a){let b=a.split("\n");for(let a=1;a<b.length-1;a++)if(R.test(b[a])&&k.A.test(b[a-1].trimEnd())&&k.A.test(b[a+1].trimEnd()))return!0;return!1}async waitForReady(a){let b=!1;for(let c=0;c<30;c++){try{let c=await (0,h.Xg)(a,50),d=(0,k.aJ)(c);if(this.isComposerDrawn(d))return void P.info("copilot-prompt-detected");!b&&await this.answerFolderTrustDialog(a,d)&&(b=!0)}catch{}await new Promise(a=>setTimeout(a,1e3))}P.info("copilot-prompt-detection-timeout")}async waitForPrompt(a,b=15e3,c="composer"){let d=Date.now(),e=!1,f="";for(;Date.now()-d<b;){try{let b=await (0,h.Xg)(a,50);if(f=(0,k.aJ)(b),this.isReadyFor(c,f))return{ready:!0,output:f};!e&&await this.answerFolderTrustDialog(a,f)&&(e=!0)}catch{}await new Promise(a=>setTimeout(a,500))}return P.info("copilot-prompt-not-detected",{until:c,bottomRow:U(f)}),{ready:!1,output:f}}isReadyFor(a,b){if(!k.Du.test(b))return!1;let c=b.split("\n");return!function(a){for(let b=a.length-1;b>=0;b--)if(""!==a[b].trim())return S.test(a[b]);return!1}(c)&&("composer"===a||"idle"===(0,k.Wn)(c))}extractSlashCommand(a){let b=a.trim();if(!b.startsWith("/"))return null;let c=b.match(/^\/(\S+)/);return c?c[1]:null}async waitForSelectionList(a){let b=Date.now();for(;Date.now()-b<5e3;){await new Promise(a=>setTimeout(a,300));try{let b=await (0,h.Xg)(a,50),c=(0,k.aJ)(b);if((0,k.gT)(c.split("\n")))return P.info("copilot-selection-list-detected"),!0}catch{}}return P.info("copilot-selection-list-not-detected-timeout"),!1}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!0});try{await this.waitForPrompt(d);let a=this.extractSlashCommand(b);if(a&&Q.has(a)){await (0,h.V1)(d,b,!0),await this.waitForSelectionList(d),(0,j.gm)(d),P.info("sent-selection-list-command-to-copilot",{command:a});return}await (0,i.FW)({sessionName:d,message:b,cliToolId:"copilot",composer:this.describeComposer(),textInputWaitMs:L.L1,verifyDelayMs:L.wp}),(0,j.gm)(d),P.info("sent-message-to-copilot-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Copilot: ${a}`)}}async sendModelCommand(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!1});try{let a=await this.waitForPrompt(d,L.pL,"idle");if(!a.ready)throw Error(`copilot did not become idle within ${L.pL}ms, so /model was not sent (bottom row: ${U(a.output)})`);let c=T(a.output,b);await (0,h.V1)(d,`/model ${b}`,!0);let e=await this.waitForModelSwitchOutcome(d,b,c);if((0,j.gm)(d),"rejected"===e.kind)throw P.warn("copilot-model-rejected",{model:b,reason:e.reason}),Error(`copilot refused it: ${e.reason}`);if("pending"===e.kind)throw P.warn("copilot-model-switch-unconfirmed",{model:b,bottomRow:e.bottomRow}),Error(`copilot printed no answer to /model within ${L.pL}ms (bottom row: ${e.bottomRow}); the switch may still take effect, and nothing further was typed`);P.info("copilot-model-switched",{model:b})}catch(c){let a=(0,w.u1)(c);throw Error(`Failed to switch Copilot model to ${b}: ${a}`)}}async waitForModelSwitchOutcome(a,b,c){let d=Date.now(),e="";for(;Date.now()-d<L.pL;){await new Promise(a=>setTimeout(a,250));try{e=await (0,h.Xg)(a,50)}catch{continue}let d=function(a,b,c){let d=T(b,c);return d.rejected.length>a.rejected.length?{kind:"rejected",reason:d.rejected[d.rejected.length-1]}:d.switched>a.switched?{kind:"switched"}:{kind:"pending"}}(c,e,b);if("pending"!==d.kind)return d}return{kind:"pending",bottomRow:U(e)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:P,stoppedAction:"stopped-copilot-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.V1)(a,"/exit",!1),await new Promise(a=>setTimeout(a,L.L1)),await (0,h.KB)(a,["Enter"]),await new Promise(a=>setTimeout(a,u.Rk))}})}constructor(...a){super(...a),this.id="copilot",this.name="Copilot",this.command="copilot"}}var W=c(61878);let X=(0,q.h)("cli-tools/antigravity"),Y=/\?\s+for\s+shortcuts/,Z=/Do you trust the contents of this project\?/;function $(a){let b=(0,W.zJ)(a,"antigravity");if(k.kT.test(b.lastLines)||Z.test(b.lastLines))return!1;let c=function(a){let b=a.map(a=>a.trim()),c=a=>a>=0&&k.kn.test(b[a]),d=a=>{let c=a;for(;c>=0&&""===b[c];)c--;return c},e=b.length-1,f="";return(e>=0&&!c(e)&&(f=b[e],e=d(e-1)),!c(e)||(e=d(e-1))<0||!k.lE.test(b[e]))?null:c(d(e-1))?f:null}(b.contentLines);return null!==c&&(!!Y.test(c)||!(0,k.ut)("antigravity",b.lastLines))}class _ extends d.Mj{async launchSession(a,b,c,d){await this.requireInstalled();let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:X,liveAction:"antigravity-session-exists",relaunchAction:"antigravity-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:r.F0,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:r.F0,instanceId:c},executablePath:this.command,worktreePath:b}),i=d?`${g} --model '${d.replace(/'/g,"'\\''")}'`:g;f||await this.createLaunchPane(e,b),await (0,h.V1)(e,(0,v.Y)(i),!0),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(e),X.info("started-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Antigravity session: ${a}`)}}}async waitForReady(a){let b=!1;for(let c=0;c<30;c++){try{let c=await (0,h.Xg)(a,50),d=(0,k.aJ)(c);if($(d))return void X.info("antigravity-prompt-detected");if(!b&&Z.test(d)){await (0,h.ds)(a,"Enter"),b=!0,X.info("auto-trusted-folder-for-antigravity"),await new Promise(a=>setTimeout(a,500));continue}}catch{}await new Promise(a=>setTimeout(a,1e3))}X.info("antigravity-prompt-detection-timeout")}async waitForPrompt(a){let b=Date.now();for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,50),c=(0,k.aJ)(b);if($(c))return}catch{}await new Promise(a=>setTimeout(a,500))}throw X.info("antigravity-prompt-not-ready"),Error("Antigravity prompt not ready: timed out waiting for the input prompt before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Antigravity",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"antigravity",composer:this.describeComposer()}),(0,j.gm)(d),X.info("sent-message-to-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Antigravity: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:X,stoppedAction:"stopped-antigravity-session",requestExit:async a=>{await (0,h.ds)(a,"C-d"),await new Promise(a=>setTimeout(a,u.Zf))},afterKill:a=>{(0,j.gm)(a)}})}constructor(...a){super(...a),this.id="antigravity",this.name="Antigravity CLI",this.command="agy"}}var aa=c(28862),ab=c(35566),ac=c(2669);let ad=(0,q.h)("cli-tools/command-code"),ae=["--trust","--skip-onboarding","--no-auto-update"];function af(a){let b=a.split("\n");return!(0>(0,k.I$)(b))&&!k.k0.test((0,k.aJ)(a))}class ag extends d.Mj{navigationKeys(){return{keys:e.G2,leaderKey:null}}async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:ad,liveAction:"command-code-session-exists",relaunchAction:"command-code-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:aa.k,instanceId:c}),this.composerPendingSince.set(d,Date.now());try{var g;e||await this.createLaunchPane(d,b),await (0,h.V1)(d,(0,v.Y)((g={target:{worktreeId:a,cliToolId:aa.k,instanceId:c},executablePath:this.command,worktreePath:b},[(0,t.wK)(g),...ae].join(" "))),!0),await new Promise(a=>setTimeout(a,u.yO)),await this.waitForReady(d),ad.info("started-command-code-session")}catch(a){throw this.composerPendingSince.delete(d),Error(`Failed to start Command Code session: ${(0,w.u1)(a)}`)}}}async waitForReady(a){for(let b=0;b<30;b++){try{let b=await (0,h.Xg)(a,50);if(af(b)){this.composerPendingSince.delete(a),ad.info("command-code-prompt-detected");return}}catch{}await new Promise(a=>setTimeout(a,1e3))}ad.info("command-code-prompt-detection-timeout")}async waitForPrompt(a){let b=Date.now(),c=0;for(;Date.now()-b<15e3;){let b=!1;try{let c=await (0,h.Xg)(a,50);if(!(b=null!==(0,ab.V)(c))&&af(c))return void this.composerPendingSince.delete(a)}catch{}if((c=b?c+1:0)>=2)throw ad.info("command-code-plan-review-blocks-send",{sessionName:a}),Error('Command Code is showing a plan review (REVIEW), which takes review comments, not messages. Comment with `commandmate respond <worktree-id> "<text>"`, then `--plan-review submit` (ctrl+r), `--plan-review approve` (ctrl+a) or `--plan-review cancel` (esc).');await new Promise(a=>setTimeout(a,500))}let d=this.composerPendingSince.get(a);if(void 0!==d){let b=Date.now()-d;if(b<=12e4)throw ad.info("command-code-session-still-starting",{sessionName:a,sinceLaunchMs:b}),new ac.Sr(this.name,a,b);this.composerPendingSince.delete(a)}throw ad.info("command-code-prompt-not-ready"),Error("Command Code prompt not ready: timed out waiting for the composer before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Command Code",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"command-code",composer:this.describeComposer()}),(0,j.gm)(d),ad.info("sent-message-to-command-code-session")}catch(a){if((0,ac.wQ)(a))throw a;throw Error(`Failed to send message to Command Code: ${(0,w.u1)(a)}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:ad,stoppedAction:"stopped-command-code-session",requestExit:async a=>{await (0,h.V1)(a,"/exit",!1),await new Promise(a=>setTimeout(a,u.pL)),await (0,h.KB)(a,["Enter"]),await new Promise(a=>setTimeout(a,u.Zf))},afterKill:a=>{this.composerPendingSince.delete(a),(0,j.gm)(a)}})}constructor(...a){super(...a),this.id="command-code",this.name="Command Code CLI",this.command="commandcode",this.composerPendingSince=new Map}}var ah=c(79646),ai=c(28354),aj=c(16983),ak=c(46684),al=c(34114),am=c(62887),an=c(72272),ao=c(49154),ap=c(33294),aq=c(27870),ar=c(57510),as=c(90488),at=c(51719),au=c(83738),av=c(26945),aw=c(38892),ax=c(16100),ay=c(71193);let az=(0,q.h)("lib/hooks/sources/opencode-v2/ingest");async function aA(a,b){let[{getDbInstance:d},{getWorktreeById:e},{applyAgentStopEvent:f}]=await Promise.all([Promise.resolve().then(c.bind(c,88807)),Promise.resolve().then(c.bind(c,56791)),Promise.all([c.e(1356),c.e(6065),c.e(1191),c.e(3480),c.e(5456),c.e(2710),c.e(1501),c.e(2283),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void az.info("opencode-v2-stop-unresolved-target",{worktreeId:a.worktreeId});await f(g,h,ay.B,b)}async function aB(a,b,c){let d=(0,av.bH)(a),e=(0,aw.X3)(a);if(null===d||null===e)return null;let f=await (0,al.$F)(d,e,b),g=f?.find(a=>(0,ar.Qd)(a)&&a.id===c);return(0,ar.Qd)(g)?g:null}async function aC(a,b,c){let d=(0,au.hl)(b.raw,b.receivedAt);if(!d)return az.info("opencode-v2-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let e=await (0,an.t)(ax.Wp,a,d,ax.Wp.parsePermissionRequest(b.raw));return az.info("opencode-v2-permission-decided",{worktreeId:a.worktreeId,instanceId:c,decisionId:d.id,behavior:e.behavior,reason:e.reason,delivered:e.delivered,settled:e.settled}),e.settled}async function aD(a,b,c){let d=(0,au.rk)(b.raw);if(d)return d;let e=(0,at.DH)(b.raw),f=(0,at.lx)(b.raw);if(null===e||null===f)return null;let g=await c(a,f,e);return g?(0,au.rk)(g):null}async function aE(a,b,c=aA,d=aB){let e=a.instanceId??ay.B;try{let f=(0,ap.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:ay.B,instanceId:e,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:ax.Wp.eventIdentityOf(b.raw),identityKind:ax.Wp.capabilities.eventIdentity});if(f.duplicate)return void az.info("opencode-v2-event-duplicate-dropped",{worktreeId:a.worktreeId,instanceId:e,event:b.event,detail:b.detail,by:f.by});let g={event:b.event,at:b.receivedAt,detail:b.detail?.slice(0,am.h9)??null,sessionId:b.conversationId,message:null,model:b.model},h={sessionStartMayArriveLate:!1};if("notification"===b.event&&b.detail===at.xz){g.decisionId=(0,at.DH)(b.raw);let c=(0,au.vF)(b.raw);g.toolName=c?.toolName??(0,at.Dg)(b.raw),g.decisionPatterns=c?.patterns??null,g.message=(0,au.s8)(b.raw)?.slice(0,aq.lY)??null,g.promptSettled=await aC(a,b,e),(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h)}else if("notification"===b.event&&b.detail===at.er)g.decisionId=(0,at.DH)(b.raw),g.promptSettled=!0,(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h);else if("notification"===b.event&&b.detail===at.Ai){let c=await aD(a,b,d);g.message=c?.questions[0]?.question.slice(0,aq.lY)??null,(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h),c&&(0,ap.recordAskUserQuestion)(a.worktreeId,ay.B,e,c,b.receivedAt),(0,ap.reportQuestionPending)(a.worktreeId,ay.B,e,{toolName:ao.GF,decisionId:(0,at.DH)(b.raw),detail:at.Ai},b.receivedAt),az.info("opencode-v2-question-recorded",{worktreeId:a.worktreeId,instanceId:e,decisionId:(0,at.DH)(b.raw),parsed:null!==c,questionCount:c?.questions.length??0}),await (0,as.Vo)(a,e,g.message,b.receivedAt)}else"stop"===b.event?(b.detail===at.dA&&(g.message=(0,at.ZL)(b.raw)?.slice(0,aq.lY)??null,az.error("opencode-v2-turn-failed",{worktreeId:a.worktreeId,instanceId:e,sessionId:b.conversationId,message:g.message})),(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h),await c(a,e)):(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h);az.info("opencode-v2-event-received",{worktreeId:a.worktreeId,instanceId:e,type:(0,at.Cr)(b.raw),event:b.event,detail:b.detail})}catch(c){az.error("opencode-v2-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:e,event:b.event,error:c instanceof Error?c.message:String(c)})}}var aF=c(32301);let aG=(0,q.h)("lib/hooks/sources/opencode-v2/runtime"),aH=[0,500,1e3,2e3];function aI(a,b){return{worktreeId:a,cliToolId:ay.B,instanceId:b}}function aJ(a){return a instanceof Error?a.message:String(a)}async function aK(a,b){try{let c=await (0,av.ui)(a,b);if(null===c)return null;return(0,aw.OC)(a),c}catch(b){return aG.warn("opencode-v2-server-reserve-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aJ(b)}),null}}async function aL(a,b){let c=(0,aw.X3)(a);return null!==c&&"healthy"===(await (0,al.tJ)(b,c)).kind}async function aM(a){try{let b=(0,av.bH)(a);if(null===b)return!1;if((0,aF.yw)(a))return!0;let c=!1;for(let d of aH)if(d>0&&await new Promise(a=>setTimeout(a,d)),await aL(a,b)){c=!0;break}if(!c)return aG.info("opencode-v2-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!1;return await ax.Wp.subscribe(a,b=>{aE(a,b)}),aG.info("opencode-v2-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!0}catch(b){return aG.warn("opencode-v2-event-stream-attach-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aJ(b)}),!1}}async function aN(a,b){try{if((0,aF.yw)(a))return!0;let c=await (0,av.Lv)(a,b,b=>aL(a,b));if(null===c)return!1;return await aM(a)}catch(b){return aG.warn("opencode-v2-event-stream-resume-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aJ(b)}),!1}}async function aO(a){try{await (0,aF.VV)(a)}catch(b){aG.warn("opencode-v2-subscription-close-failed",{worktreeId:a.worktreeId,error:aJ(b)})}try{(0,av.OZ)(a)}catch(b){aG.warn("opencode-v2-port-forget-failed",{worktreeId:a.worktreeId,error:aJ(b)})}try{(0,aw.Nc)(a)}catch(b){aG.warn("opencode-v2-password-remove-failed",{worktreeId:a.worktreeId,error:aJ(b)})}}var aP=c(93949),aQ=c(95759);let aR=(0,q.h)("cli-tools/opencode-v2"),aS=(0,ai.promisify)(ah.execFile),aT=aj.xT,aU=/^\/\S+$/,aV=[...e.qD,e.Mx,...e.TM,"a","l","m"];class aW extends d.Mj{navigationKeys(){return{keys:aV,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,aQ.Qq)()).executable}async isRunning(a,b){let c=this.getSessionName(a,b),d=await (0,h.N)(c);return d&&this.resumeInBackground(a,c,b),d}resumeInBackground(a,b,c){let d=aI(a,c);if((0,aF.yw)(d))return;let e=Date.now(),f=this.resumeAttemptedAt.get(b);void 0!==f&&e-f<3e4||(this.resumeAttemptedAt.set(b,e),(async()=>{try{let a=await (0,h.nS)(b);if(null===a)return;await aN(d,a)}catch(a){aR.debug("opencode-v2-lazy-resume-failed",{error:(0,w.u1)(a)})}})())}async launchSession(a,b,c){let d=(await (0,aQ.Qq)()).executable;if(!d)throw(0,O.Tl)(this);let e=this.getSessionName(a,c),f=aI(a,c),g={windowWidth:(0,ak.r)({warnSidebar:!1}),windowHeight:aj.xT},i=await (0,h.N)(e);if(i){if(await this.reconcileExistingSession(e,b,g),await this.isToolLive(e,{confirm:!0})){await aN(f,b),aR.info("opencode-v2-session-exists");return}aR.warn("opencode-v2-session-relaunch",{sessionName:e}),await aO(f)}(0,t.Fq)(f);try{i||await this.createLaunchPane(e,b);try{await aS("tmux",["resize-window","-t",(0,h.lA)(e),"-x",String(g.windowWidth),"-y",String(g.windowHeight)])}catch{}let j=await aK(f,b);null===j&&aR.warn("opencode-v2-launch-without-server",{worktreeId:a,instanceId:c}),await (0,h.V1)(e,(0,v.Y)((0,t.wK)({target:f,executablePath:d.path,worktreePath:b})),!0),await this.waitForReady(e),await aM(f),aR.info("started-opencode-v2-session")}catch(a){throw Error(`Failed to start OpenCode V2 session: ${(0,w.u1)(a)}`)}}async waitForReady(a){for(let b=0;b<60;b++){try{let c=(0,k.aJ)(await (0,h.Xg)(a,aT));if((0,k.Ok)(c))return aR.info("opencode-v2-composer-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return aR.info("opencode-v2-ready-detection-timeout"),!1}async waitForComposer(a){let b=Date.now()+u.D1;for(;;){let c=null;try{let b=(0,k.aJ)(await (0,h.Xg)(a,aT));if(c=(0,k.dF)(b),null===c&&(0,k.Ok)(b))return}catch{}if(null!==c)throw Error(`OpenCode V2 composer not available: the "${c}" dialog is open. Close it (esc) or finish the choice, then send again`);if(Date.now()>=b)break;await new Promise(a=>setTimeout(a,500))}throw Error("OpenCode V2 composer not ready: timed out waiting for it before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("OpenCode V2",a,c,{relaunch:!0});try{await this.waitForComposer(d),await (0,i.FW)({sessionName:d,message:aU.test(b)?`${b} `:b,cliToolId:ay.B,composer:this.describeComposer()}),(0,j.gm)(d),aR.info("sent-message-to-opencode-v2-session")}catch(a){throw Error(`Failed to send message to OpenCode V2: ${(0,w.u1)(a)}`)}}async killSession(a,b){let c=this.getSessionName(a,b),d=aI(a,b),e=(0,av.bH)(d);try{if(await (0,h.N)(c)){await (0,h.V1)(c,aP.M0,!1),await new Promise(a=>setTimeout(a,u.pL)),await (0,h.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,u.Lw));let a=await (0,aP.rY)({sessionAlive:()=>(0,h.N)(c),portAnswering:null===e?null:async()=>"unreachable"!==(await (0,al.tJ)(e,"")).kind});a.ok||(aR.info("opencode-v2-graceful-exit-postcondition-unmet",{sessionName:c,reason:a.reason,...null!==e?{port:e}:{}}),await (0,h.fY)(c))}else await (0,h.fY)(c);(0,j.gm)(c),this.resumeAttemptedAt.delete(c),aR.info("stopped-opencode-v2-session")}catch(a){throw aR.error("session:stop-failed",{error:(0,w.u1)(a)}),a}finally{await aO(d)}}constructor(...a){super(...a),this.id=ay.B,this.name="OpenCode V2",this.command=ay.V,this.resumeAttemptedAt=new Map}}class aX{constructor(){this.tools=new Map,this.tools.set("claude",new g),this.tools.set("codex",new A),this.tools.set("gemini",new D),this.tools.set("vibe-local",new I),this.tools.set("opencode",new J.Ui),this.tools.set("copilot",new V),this.tools.set("antigravity",new _),this.tools.set("command-code",new ag),this.tools.set("opencode-v2",new aW)}static getInstance(){return aX.instance||(aX.instance=new aX),aX.instance}getTool(a){let b=this.tools.get(a);if(!b)throw Error(`CLI tool '${a}' not found`);return b}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(a){let b=this.getTool(a),c=await b.isInstalled();return{id:b.id,name:b.name,command:b.command,installed:c}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async a=>{let b=await a.isInstalled();return{id:a.id,name:a.name,command:a.command,installed:b}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(a=>a.installed)}async stopPollers(a,b,d){let{stopPolling:e}=await Promise.all([c.e(1356),c.e(1503),c.e(1634),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(3480),c.e(8728),c.e(8918),c.e(5595),c.e(611),c.e(5625),c.e(5220)]).then(c.bind(c,95220));e(a,b,d)}}},17287:(a,b,c)=>{c.d(b,{CD:()=>g,nL:()=>f});var d=c(24455);let e=(0,c(36925).v)("__permissionDecisions",()=>new Map);function f(a,b,c,f){e.set((0,d.v7)(a,b,c),f)}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??null}},23365:(a,b,c)=>{c.d(b,{H:()=>g,y:()=>h});var d=c(16983),e=c(34405),f=c(15194);let g=200;function h(a){var b;return{statusLines:"opencode"===(b=a)?d.xT:"gemini"===b?g:e.G,usesAlternateScreen:(0,f.VA)(a)}}},29169:(a,b,c)=>{c.d(b,{yt:()=>n,tH:()=>o,f_:()=>B,sl:()=>m,a9:()=>k,Dk:()=>A,uG:()=>y});var d=c(51297);let e=/\btype\s+to\s+search\b|\bsearch\s+\w+\s*(?:…|\.\.\.)|(?:^|·)\s*\/\s+search\b/im,f=/^\s*(?:❯ +)?Approve\s+ctrl\+a\b[^\n]*\n\s*(?:❯ +)?Cancel\s+esc\s*$/im,g=/\benter\s+to\s+select\b\s*[·•]\s*esc\s+to\s+cancel\b/i,h=/^\s*(?:press|hit|type)?\s*(?:<)?esc(?:ape)?(?:>)?\s+to\s+(?:close|dismiss|exit)\b[\s.·•]*$/im,i=/^\s*Approve\s+\([• ]\)\s+with\s+\d+\s+comments?\s+as\s+notes\s+\([• ]\)\s+original\s+plan\b/im,j=/(?:^|\n)[ \t]*←\/→\s+choose\s*·\s*enter\s+confirm\s*·\s*esc\s+back\s*$/i;function k(a){return i.test(a)&&j.test(a)}function l(a,b){return a.split("\n").filter(a=>""!==a.trim()).slice(-b).join("\n")}function m(a){return g.test(l(a,1))}function n(a){return h.test(l(a,1))}function o(a){return f.test(l(a,5))}let p=/^\u2500+$/,q="●◉⦿",r=RegExp(`^\\s*([${q}◯○◌⚪✔])\\s+\\S`);function s(a){let b=a.split("|");if(b.length<2)return!1;let c=0,d=0;for(let a of b){let b=r.exec(a);if(null===b)return!1;q.includes(b[1])?c+=1:d+=1}return c>0&&d>0}let t=/\besc\s+to\s+interrupt\b|^[^\S\n]*✻[^\S\n]+\S/im,u=/^[^\S\n]*(?:\u276F[^\S\n]*)?1[.)][^\S\n]+Submit[^\S\n]*$/im,v=/^[^\S\n]*(?:\u276F[^\S\n]*)?2[.)][^\S\n]+Cancel[^\S\n]*$/im,w=/^[^\S\n]*\u2190[^\S\n]+to[^\S\n]+go[^\S\n]+back[^\S\n]+and[^\S\n]+edit[^\S\n]*$/im,x=/have\s+not\s+answered\s+all\s+questions/i;function y(a){if(!a)return null;let b=a.replace(/\r\n/g,"\n").split("\n").map(d.aJ),c=b.length-1;for(;c>=0&&""===b[c].trim();)c-=1;if(c<1)return null;let e=-1;for(let a=c-1;a>=0;a-=1){let c=b[a].trim();if(!(c.length<40)&&p.test(c)){e=a;break}}if(e<0)return null;let f=b.slice(e+1,c+1),g=f.findIndex(a=>""!==a.trim());if(g<0||!s(f[g]))return null;let h=f.join("\n");if(!u.test(h)||!v.test(h)||!w.test(h))return null;let i=f.find(a=>u.test(a));return{hasUnansweredWarning:x.test(h),cursorOnSubmit:void 0!==i&&i.includes("❯")}}let z=/^[^0-9A-Za-z]*([1-9])[.)]\s+\S/;function A(a){let b=C(a);return null!==b&&b.numbers.every((a,b)=>a===b+1)&&1===b.cursorCount?{ruleLineIndex:b.ruleLineIndex,firstLineIndex:b.firstLineIndex,lastLineIndex:b.lastLineIndex,tabLineIndex:b.tabLineIndex,cursorLineIndex:b.cursorLineIndex,cursorOnOptionRow:b.cursorOnOptionRow,optionCount:b.numbers.length}:null}function B(a){return null!==C(a)}function C(a){if(!a)return null;let b=a.replace(/\r\n/g,"\n").split("\n").map(d.aJ),c=b.length-1;for(;c>=0&&""===b[c].trim();)c-=1;if(c<1)return null;let f=-1;for(let a=c-1;a>=0;a-=1){let c=b[a].trim();if(!(c.length<40)&&p.test(c)){f=a;break}}if(f<0)return null;let i=b.slice(f+1,c+1),j=i.join("\n");if(e.test(j)||g.test(j)||h.test(j)||t.test(j))return null;let k=i.findIndex(a=>""!==a.trim());if(k<0||!s(i[k]))return null;let l=[],m=-1;for(let a=k+1;a<i.length;a+=1){let b=z.exec(i[a]);null!==b&&(m<0&&(m=a),l.push(Number(b[1])))}if(l.length<2||!i.slice(k+1,m).some(a=>""!==a.trim()))return null;let n=0,o=-1,q=!1;for(let a=0;a<i.length;a+=1){let b=i[a].split("❯").length-1;0!==b&&(n+=b,o=a,q=z.test(i[a]))}return 0===n?null:{ruleLineIndex:f,firstLineIndex:f+1,lastLineIndex:c,tabLineIndex:f+1+k,numbers:l,cursorCount:n,cursorLineIndex:f+1+o,cursorOnOptionRow:q}}},34405:(a,b,c)=>{c.d(b,{G:()=>e,_:()=>d});let d=1e4,e=1e3},35566:(a,b,c)=>{c.d(b,{V:()=>l});var d=c(51297),e=c(29169);let f=/^\s*type \+ enter to comment\b/i,g=/^\s*enter to pin\s*·\s*esc discard\s*$/i,h=/^\s*↑\/↓ choose\s*·\s*enter to run\s*$/i,i=/^\s*❯ +(?:Submit review\b|Approve\s+ctrl\+a\b|Cancel\s+esc\b)/im,j=/^\s*REVIEW\s+(\d+)\s+pending comments?\b/im,k=/\(•\)\s+with\s+\d+\s+comments?\s+as\s+notes/i;function l(a){if(!a)return null;let b=(0,d.aJ)(a.replace(/\r\n/g,"\n")).split("\n").filter(a=>""!==a.trim()).slice(-15);if(0===b.length)return null;let c=b.join("\n"),l=j.exec(c),m=l?Number(l[1]):0;if((0,e.a9)(c))return{phase:"approve-choice",pendingComments:m,approveChoice:k.test(c)?"with-comments":"discard-comments"};if(!(0,e.tH)(c))return null;let n=b[b.length-1],o="unknown";return i.test(c)||h.test(n)?o="action-focus":g.test(n)?o="comment-box":f.test(n)&&(o="body"),{phase:o,pendingComments:m,approveChoice:null}}},39333:(a,b,c)=>{c.d(b,{$Y:()=>h,Bg:()=>j,Fg:()=>e,HB:()=>g,df:()=>i,f9:()=>d});let d=[".png",".jpg",".jpeg",".gif",".webp",".svg"],e=0x1400000,f=[{extension:".png",mimeType:"image/png",magicBytes:[137,80,78,71]},{extension:".jpg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".jpeg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".gif",mimeType:"image/gif",magicBytes:[71,73,70,56]},{extension:".webp",mimeType:"image/webp",magicBytes:[82,73,70,70]},{extension:".svg",mimeType:"image/svg+xml"}];function g(a){return a?a.startsWith(".")?a.toLowerCase():"."+a.toLowerCase():""}function h(a){let b=g(a),c=f.find(a=>a.extension===b);return c?.mimeType||"application/octet-stream"}function i(a){if(!a)return!1;let b=g(a);return d.includes(b)}function j(a,b){if(b.length>e)return{valid:!1,error:`File size exceeds ${e/1024/1024}MB limit`,reason:"too-large"};if(".svg"===g(a)){var c;return(c=b.toString("utf-8")).includes("<svg")||c.startsWith("<?xml")?/<script[\s>]/i.test(c)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(c)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(c)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(c)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(a,b){let c=g(a),d=f.find(a=>a.extension===c);if(!d?.magicBytes)return".svg"===c;let e=d.magicBytesOffset||0;return!(b.length<e+d.magicBytes.length)&&d.magicBytes.every((a,c)=>b[e+c]===a)}(a,b)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}d.filter(a=>".svg"!==a).map(a=>h(a)).filter(a=>"application/octet-stream"!==a).join(",")},46684:(a,b,c)=>{c.d(b,{r:()=>f});var d=c(16983);let e=(0,c(72626).h)("cli-tools/opencode-pane-width");function f(a){let b=process.env[d.ao],c=(0,d._u)(),f=b?.trim(),g=void 0!==f&&(!/^\d+$/.test(f)||Number.parseInt(f,10)!==c);return void 0!==b&&g?e.warn("opencode-pane-width-rejected",{requested:b,applied:c}):a.warnSidebar&&c>=d.Lg&&e.warn("opencode-pane-width-sidebar-visible",{width:c,sidebarMinWidth:d.Lg}),c}},47967:(a,b,c)=>{c.d(b,{Z:()=>h,u:()=>i});var d=c(70605);let e=/ctrl\+[tp]\b/,f=/^\s*╹▀+/,g=/^\s*[┃│]/,h={locate({contentLines:a}){let b=(0,d.Sx)(a),c=-1;for(let d=b;d>=Math.max(0,b-4);d--)if(e.test(a[d])){c=d;break}if(c<0)return null;let h=-1;for(let b=c-1;b>=Math.max(0,c-3);b--)if(f.test(a[b])){h=b;break}if(h<0)return null;let i=h;for(;i-1>=0&&g.test(a[i-1]);)i--;return{start:i,end:b,atBottom:!0}}};function i(a){return{locate({contentLines:b}){let c=(0,d.Sx)(b);for(let d=c;d>=Math.max(0,c-60);d--)if(g.test(b[d])&&a.test(b[d]))return{start:d};return null}}}},49319:(a,b,c)=>{c.d(b,{Ui:()=>az,TZ:()=>ay});var d=c(89731),e=c(8953),f=c(79892),g=c(61789),h=c(40236),i=c(93997),j=c(29021),k=c(21820),l=c(33873),m=c(8004),n=c(72626);let o=(0,n.h)("cli-tools/opencode-config"),p=/^[a-zA-Z0-9._:/-]{1,100}$/,q=/^[a-zA-Z0-9._:/@-]{1,200}$/,r="CM_OPENCODE_LOCAL_PROVIDER_CONFIG",s="OPENCODE_CONFIG",t=["opencode.json","opencode.jsonc",l.join(".opencode","opencode.json"),l.join(".opencode","opencode.jsonc")],u=["opencode.json","opencode.jsonc"];async function v(){let a={};try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch("http://localhost:11434/api/tags",{signal:b.signal}).finally(()=>{clearTimeout(c)});if(!d.ok)return o.warn("ollama-api-returned"),{};let e=await d.text();if(e.length>1048576)return o.warn("ollama-api-response"),{};let f=JSON.parse(e);if(!f||!Array.isArray(f.models))return o.warn("invalid-ollama-api"),{};for(let b of f.models.slice(0,100))"string"==typeof b?.name&&p.test(b.name)&&(a[b.name]={name:function(a){let b=String(a.name),c=a.details;if(!c)return b;let d=[b];return"string"==typeof c.parameter_size&&/^[\d.]+[BKMGT]?B?$/i.test(c.parameter_size)&&d.push(c.parameter_size),"string"==typeof c.quantization_level&&/^[A-Z0-9_]{1,20}$/i.test(c.quantization_level)&&d.push(c.quantization_level),d.length>1?`${b} (${d.slice(1).join(", ")})`:b}(b)})}catch(a){a instanceof Error&&"AbortError"===a.name?o.warn("ollama-api-timeout"):o.warn("failed-to-fetch")}return a}async function w(){let a={};try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch("http://localhost:1234/v1/models",{signal:b.signal}).finally(()=>{clearTimeout(c)});if(!d.ok)return o.warn("lm-studio-api"),{};let e=await d.text();if(e.length>1048576)return o.warn("lm-studio-api"),{};let f=JSON.parse(e);if(!f||!Array.isArray(f.data))return o.warn("invalid-lm-studio"),{};for(let b of f.data.slice(0,100))"string"==typeof b?.id&&q.test(b.id)&&(a[b.id]={name:b.id})}catch(a){a instanceof Error&&"AbortError"===a.name?o.warn("lm-studio-api"):o.warn("failed-to-fetch")}return a}function x(a=process.env){let b=l.join(k.homedir(),".config");return l.join((0,m.T)(a.XDG_CONFIG_HOME,b,"XDG_CONFIG_HOME"),"opencode")}async function y(){let[a,b]=await Promise.all([v(),w()]),c={};return Object.keys(a).length>0&&(c.ollama={npm:"@ai-sdk/openai-compatible",name:"Ollama (local)",options:{baseURL:"http://localhost:11434/v1"},models:a}),Object.keys(b).length>0&&(c.lmstudio={npm:"@ai-sdk/openai-compatible",name:"LM Studio (local)",options:{baseURL:"http://localhost:1234/v1"},models:b}),c}async function z(a){let b=function(a=process.env){let b=(a[r]??"").trim().toLowerCase();return"worktree"===b||"project"===b?"worktree":"global"===b||"user"===b?"global":(""!==b&&"off"!==b&&"0"!==b&&"false"!==b&&"none"!==b&&o.warn("opencode-config-mode-unrecognised",{variable:r,value:b}),"off")}();if("off"===b)return{written:!1,configPath:null,reason:"disabled"};let c="worktree"===b?function(a){let b=l.resolve(a);try{if(!j.lstatSync(b).isDirectory())throw Error(`Path is not a directory: ${b}`)}catch(a){if("ENOENT"===a.code)throw Error(`Path does not exist: ${b}`);throw a}return j.realpathSync(b)}(a):null,d=function(a,b=process.env){if(""!==(b[s]??"").trim())return`env:${s}`;if(null!==a)for(let b of t){let c=l.join(a,b);if(j.existsSync(c))return c}let c=x(b);for(let a of u){let b=l.join(c,a);if(j.existsSync(b))return b}return null}(c);if(null!==d)return o.info("opencode-config-generation-skipped",{mode:b,owned:d}),{written:!1,configPath:null,reason:"existing-config"};let e=c??x(),f=l.join(e,"opencode.json"),g=await y();if(0===Object.keys(g).length)return{written:!1,configPath:null,reason:"no-providers"};try{"global"===b&&j.mkdirSync(e,{recursive:!0}),j.writeFileSync(f,JSON.stringify({$schema:"https://opencode.ai/config.json",provider:g},null,2),{encoding:"utf-8",flag:"wx"})}catch(a){if("EEXIST"===a.code)return{written:!1,configPath:null,reason:"existing-config"};return o.warn("failed-to-write-opencodejson:error-insta"),{written:!1,configPath:null,reason:"write-failed"}}return o.info("opencode-config-generated",{mode:b,configPath:f}),{written:!0,configPath:f,reason:"written"}}var A=c(16983),B=c(46684),C=c(79646),D=c(28354),E=c(39333),F=c(1305),G=c(49791),H=c(62887),I=c(72272),J=c(49154),K=c(33294),L=c(27870),M=c(57510),N=c(56365),O=c(75356),P=c(98211),Q=c(90488),R=c(85322);let S=(0,n.h)("lib/hooks/sources/opencode/ingest");async function T(a,b,c){let d=(0,N.VM)(R.k),e=(0,P.Lu)(b.raw,b.receivedAt);if(!e)return S.info("opencode-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let f=await (0,I.t)(d,a,e,d.parsePermissionRequest(b.raw));return S.info("opencode-permission-decided",{worktreeId:a.worktreeId,instanceId:c,decisionId:e.id,behavior:f.behavior,reason:f.reason,delivered:f.delivered,settled:f.settled}),f.settled}async function U(a,b){let[{getDbInstance:d},{getWorktreeById:e},{applyAgentStopEvent:f}]=await Promise.all([Promise.resolve().then(c.bind(c,88807)),Promise.resolve().then(c.bind(c,56791)),Promise.all([c.e(1356),c.e(6065),c.e(1191),c.e(3480),c.e(5456),c.e(2710),c.e(1501),c.e(2283),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void S.info("opencode-stop-unresolved-target",{worktreeId:a.worktreeId});let i=await f(g,h,R.k,b);S.info("opencode-stop-applied",{worktreeId:a.worktreeId,instanceId:b,taskId:i.taskId,taskEventApplied:i.taskEventApplied,verificationRunId:i.verificationRunId})}async function V(a,b){let c=a.instanceId??R.k;try{let d=(0,N.VM)(R.k),e=(0,K.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:R.k,instanceId:c,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:d.eventIdentityOf(b.raw),identityKind:d.capabilities.eventIdentity});if(e.duplicate)return void S.info("opencode-event-duplicate-dropped",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail,by:e.by});let f={event:b.event,at:b.receivedAt,detail:b.detail?.slice(0,H.h9)??null,sessionId:b.conversationId,message:(function(a){let b=(0,M.Qd)(a.raw.properties)?a.raw.properties:{};if(a.detail===O.aF)return(0,M.NZ)(b,["metadata","command"])??(0,M.O2)(b,"permission");if(a.detail===O.Tm){let a=b.questions;return Array.isArray(a)&&(0,M.Qd)(a[0])?(0,M.O2)(a[0],"question"):null}return a.detail===O.vE?(0,M.NZ)(b,["error","data","message"])??(0,M.NZ)(b,["error","name"]):null})(b)?.slice(0,L.lY)??null,model:b.model},g={sessionStartMayArriveLate:d.capabilities.sessionStartMayArriveLate};if("notification"===b.event&&b.detail===O.aF){f.decisionId=(0,M.O2)((0,M.Qd)(b.raw.properties)?b.raw.properties:{},"id");let d=(0,P.LF)(b.raw,b.receivedAt);f.toolName=d?.toolName??null,f.decisionPatterns=d?.patterns??null,f.promptSettled=await T(a,b,c),(0,K.recordAgentEvent)(a.worktreeId,R.k,c,f,g);return}if("notification"===b.event&&b.detail===O.C8){f.decisionId=(0,O.Mn)(b.raw),f.promptSettled=!!(0,N.VM)(R.k).capabilities.permissionReplyReleasesPrompt||(S.info("opencode-permission-reply-not-releasing",{worktreeId:a.worktreeId,instanceId:c,reason:"capability-permissionReplyReleasesPrompt-false"}),!1),(0,K.recordAgentEvent)(a.worktreeId,R.k,c,f,g),S.info("opencode-permission-reply-observed",{worktreeId:a.worktreeId,instanceId:c,decisionId:f.decisionId,released:f.promptSettled});return}if((0,K.recordAgentEvent)(a.worktreeId,R.k,c,f,g),"notification"===b.event&&b.detail===O.Tm){let d=(0,N.VM)(R.k).parseQuestion(b.raw);d&&((0,K.recordAskUserQuestion)(a.worktreeId,R.k,c,d,b.receivedAt),(0,K.reportQuestionPending)(a.worktreeId,R.k,c,{toolName:J.GF,decisionId:d.promptId,detail:O.Tm},b.receivedAt),S.info("opencode-question-recorded",{worktreeId:a.worktreeId,instanceId:c,decisionId:d.promptId,questionCount:d.questions.length,optionCounts:d.questions.map(a=>a.choices.length)})),await (0,Q.Vo)(a,c,f.message??null,b.receivedAt);return}if("stop"===b.event)return void await U(a,c);"notification"===b.event&&b.detail===O.vE&&await (0,Q.dJ)(a,c,(0,M.NZ)((0,M.Qd)(b.raw.properties)?b.raw.properties:{},["error","name"]),f.message??null,b.conversationId,b.receivedAt),S.info("opencode-event-received",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail})}catch(d){S.error("opencode-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:c,event:b.event,error:d instanceof Error?d.message:String(d)})}}var W=c(84574),X=c(85965),Y=c(33198);let Z=(0,n.h)("lib/hooks/sources/opencode/runtime");function $(a,b){return{worktreeId:a,cliToolId:"opencode",instanceId:b}}async function _(a,b){try{return await (0,W.CU)(a,b)}catch(b){return Z.warn("opencode-port-reserve-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),null}}let aa=[0,500,1e3,2e3,4e3];async function ab(a,b){for(let[c,d]of aa.entries()){d>0&&await new Promise(a=>setTimeout(a,d));let e=await (0,G.sc)(b);if("healthy"===e.kind)return c>0&&Z.info("opencode-server-reachable-after-retry",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempt:c}),e.health;if("rejected"===e.kind){Z.warn("opencode-server-refused-commandmate",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,status:e.status,consequence:"structured events are off for this session; the scraper decides"});break}}return null}async function ac(a){try{let b=(0,W.hC)(a);if(null===b)return!1;if((0,Y.wb)(a))return!0;let c=await ab(a,b);if(!c)return Z.info("opencode-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempts:aa.length}),!1;await X.cC.subscribe(a,b=>{V(a,b)});let d=await ad(a);return Z.info("opencode-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,version:c.version,activity:d}),!0}catch(b){return Z.warn("opencode-event-stream-attach-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ad(a){let b=null;try{b=await X.cC.probeActivity(a)}catch(b){Z.debug("opencode-activity-probe-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:b instanceof Error?b.message:String(b)})}return(0,Y.yn)(a,b,Date.now()),b}async function ae(a,b){try{if((0,Y.wb)(a))return!0;let c=await (0,W.jp)(a,b);if(null===c)return!1;return await ac(a)}catch(b){return Z.warn("opencode-event-stream-resume-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function af(a){let b=a.instanceId??a.cliToolId;try{let c=(0,W.hC)(a);if(null===c)return!1;let d=(0,Y.lf)(a);if("live"!==d.state)return Z.info("opencode-abort-skipped-not-live",{worktreeId:a.worktreeId,instanceId:b,port:c,liveness:d.state}),!1;let e=(0,Y.ym)(a);if(null===e)return Z.info("opencode-abort-skipped-no-session",{worktreeId:a.worktreeId,instanceId:b,port:c}),!1;let f=(0,Y.H1)(a,e,2e3);if(!await (0,G.UR)(c,e))return f.cancel(),Z.warn("opencode-abort-rejected",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!1;if(!await f.seen)return Z.warn("opencode-abort-unconfirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e,timeoutMs:2e3}),!1;return Z.info("opencode-abort-confirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!0}catch(c){return Z.warn("opencode-abort-failed",{worktreeId:a.worktreeId,instanceId:b,error:c instanceof Error?c.message:String(c)}),!1}}async function ag(a){try{await (0,Y.FN)(a),(0,W.kE)(a)}catch(b){Z.warn("opencode-event-stream-release-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)})}}var ah=c(18529),ai=c(70849),aj=c(27939),ak=c(93949),al=c(20610),am=c(78099),an=c(95759),ao=c(79748);let ap=/^timestamp=(\S+)/,aq=/no such column: ?[A-Za-z0-9_.]*/;async function ar(a,b){let c;try{c=await (0,ao.open)(a,"r");let{size:d}=await c.stat(),e=Math.min(d,b),f=d-e,g=Buffer.alloc(e);await c.read(g,0,e,f);let h=g.toString("utf8");return f>0&&(h=h.slice(h.indexOf("\n")+1)),h}catch{return null}finally{await c?.close().catch(()=>{})}}async function as(a,b=function(){let a=process.env.XDG_DATA_HOME||(0,l.join)((0,k.homedir)(),".local","share");return(0,l.join)(a,"opencode","log","opencode.log")}()){let c=await ar(b,262144);if(null===c)return null;let d=a-1e3;for(let a of c.split("\n")){let b=ap.exec(a);if(!b)continue;let c=Date.parse(b[1]);if(Number.isNaN(c)||c<d)continue;let e=aq.exec(a);if(e)return e[0]}return null}var at=c(46749),au=c(77093);let av=(0,n.h)("cli-tools/opencode"),aw=(0,D.promisify)(C.execFile),ax=[0,50,100,200];function ay(a,b){return a?`${a}
|
|
2
|
+
`,f=b?`${b}${e}`:e;await this.sendMessage(a,f,d)}async killSession(a,b){await (0,f.VU)(a,b)}constructor(...a){super(...a),this.id="claude",this.name="Claude Code",this.command="claude"}}var h=c(79892),i=c(40236),j=c(93997),k=c(61789),l=c(11472);let m=["skip","skip-until-next-version","update","ask"],n=Object.freeze({update:"1",skip:"2","skip-until-next-version":"3",ask:null});function o(a){if("string"!=typeof a)return null;let b=a.trim().toLowerCase();return"string"==typeof b&&m.includes(b)?b:null}c(68847);var p=c(61260);c(48800);var q=c(72626),r=c(22354),s=c(99432),t=c(1305),u=c(20610),v=c(46749),w=c(77093);let x=(0,q.h)("cli-tools/codex"),y="codex";function z(){return{screen:null,attempts:0}}class A extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:x,liveAction:"codex-session-exists",relaunchAction:"codex-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:r.c1,instanceId:c});try{let f=(0,t.wK)({target:{worktreeId:a,cliToolId:r.c1,instanceId:c},executablePath:this.command,worktreePath:b});e||await this.createLaunchPane(d,b);let g=async()=>{(0,t.Fq)({worktreeId:a,cliToolId:r.c1,instanceId:c}),await (0,h.V1)(d,(0,v.Y)(f),!0),await new Promise(a=>setTimeout(a,3e3))};await (0,h.V1)(d,(0,v.Y)(f),!0),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(d,{relaunch:g,trustHooks:(0,s.dO)(b)}),x.info("started-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Codex session: ${a}`)}}}async waitForReady(a,b){let c=b?.trustHooks??!1,d=!1,e=!1,f=z(),g=function(a){let b=o(void 0);if(null!==b)return b;let c=o(((void 0)??process.env).CM_CODEX_UPDATE_DIALOG);return null!==c?c:"skip-until-next-version"}(),i=n[g],j=!1,m=!1,q=!1,r=30;try{for(let o=0;o<r;o++){try{let s=await (0,h.Xg)(a,50),t=(0,k.aJ)(s),v=(0,k.E6)(t);if(("hooks-review"===v||"hooks-list"===v||"hooks-detail"===v)&&await this.answerCodexHooksScreen(a,v,f,c)){await new Promise(a=>setTimeout(a,u.CV));continue}if((0,k.zZ)(t))return void x.info("codex-prompt-detected");if(j&&!m&&b?.relaunch&&null!==(0,l.GE)(t,this.livenessSpec())){m=!0,r=Math.max(r,o+1+30),e=!1,f.screen=null,f.attempts=0,q&&(q=!1,(0,p.lM)(y),x.info("codex-update-lock-released",{sessionName:a})),x.info("codex-relaunched-after-update",{sessionName:a,policy:g}),await b.relaunch();continue}let w=(0,k.Qh)(t);if("update"===w){if(j=!0,null===i){await new Promise(a=>setTimeout(a,1e3));continue}if(!d){let b=i;b!==n.update||(0,p.mf)(y)?b===n.update&&(q=!0):(b=n["skip-until-next-version"],x.warn("codex-update-dialog-yielded-to-running-update",{sessionName:a,policy:g,requestedKey:i,key:b})),await (0,h.V1)(a,b,!1),d=!0,b===n.update&&(r=Math.max(r,o+1+120)),x.info("codex-update-dialog-answered",{sessionName:a,policy:g,key:b}),await new Promise(a=>setTimeout(a,u.CV));continue}}if("press-enter"===w){await (0,h.ds)(a,"Enter"),x.info("dismissed-codex-notification"),await new Promise(a=>setTimeout(a,u.CV));continue}if("trust"===w&&!e){await (0,h.V1)(a,"1",!1),e=!0,x.info("auto-trusted-folder-for-codex"),await new Promise(a=>setTimeout(a,u.CV));continue}}catch{}await new Promise(a=>setTimeout(a,1e3))}x.info("codex-prompt-detection")}finally{q&&(q=!1,(0,p.lM)(y),x.warn("codex-update-lock-released-unfinished",{sessionName:a}))}}async answerCodexHooksScreen(a,b,c,d){if(c.screen!==b&&(c.screen=b,c.attempts=0),c.attempts>=3)return x.warn("codex-hooks-screen-unresponsive",{sessionName:a,screen:b,trust:d}),!1;let e=++c.attempts;if("hooks-review"===b){let b=1===e?d?"2":"3":"1";return await (0,h.V1)(a,b,!1),x.info("codex-hooks-review-answered",{sessionName:a,key:b,attempt:e,trust:d}),!0}return d?(await (0,h.V1)(a,"t",!1,{literal:!0}),x.info("codex-hooks-screen-trusted",{sessionName:a,screen:b,attempt:e})):(await (0,h.ds)(a,"Escape"),x.info("codex-hooks-screen-escaped",{sessionName:a,screen:b,attempt:e})),!0}async waitForPrompt(a){let b=Date.now(),c=z(),d=null;for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,50),e=(0,k.aJ)(b),f=(0,k.E6)(e);if("hooks-review"===f||"hooks-list"===f||"hooks-detail"===f){if(null===d){let b=await (0,h.nS)(a);d=null!==b&&(0,s.dO)(b)}await this.answerCodexHooksScreen(a,f,c,d)}else if((0,k.zZ)(e))return}catch{}await new Promise(a=>setTimeout(a,500))}throw x.info("codex-prompt-not-detected"),Error("Codex prompt not ready: timed out waiting for the input prompt before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Codex",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"codex",composer:this.describeComposer(),awaitTypedBody:!0}),(0,j.gm)(d),x.info("sent-message-to-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Codex: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:x,stoppedAction:"stopped-codex-session",requestExit:async a=>{await (0,h.ds)(a,"C-d"),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="codex",this.name="Codex CLI",this.command="codex"}}var B=c(23365);let C=(0,q.h)("cli-tools/gemini");class D extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:C,liveAction:"gemini-session-exists",relaunchAction:"gemini-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:r.o,instanceId:c});try{e||await this.createLaunchPane(d,b);let f=(0,t.wK)({target:{worktreeId:a,cliToolId:r.o,instanceId:c},executablePath:this.command,worktreePath:b});await (0,h.V1)(d,(0,v.Y)(f),!0),await new Promise(a=>setTimeout(a,6e3)),await this.waitForReady(d),C.info("started-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Gemini session: ${a}`)}}}async waitForReady(a){let b=!1;for(let c=0;c<30;c++){try{let c=await (0,h.Xg)(a,B.H),d=(0,k.aJ)(c);if(k.wN.test(d))return void C.info("gemini-prompt-detected");!b&&d.includes("Do you trust this folder?")&&(await (0,h.ds)(a,"Enter"),b=!0,C.info("auto-trusted-folder-for-gemini"))}catch{}await new Promise(a=>setTimeout(a,1e3))}C.info("gemini-prompt-detection")}async waitForPrompt(a){let b=Date.now();for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,B.H),c=(0,k.aJ)(b);if(k.wN.test(c))return}catch{}await new Promise(a=>setTimeout(a,500))}C.info("gemini-prompt-not-detected")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Gemini",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"gemini",composer:this.describeComposer()}),(0,j.gm)(d),C.info("sent-message-to-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Gemini: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:C,stoppedAction:"stopped-gemini-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.V1)(a,"/quit",!0),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="gemini",this.name="Gemini CLI",this.command="gemini"}}var E=c(15194),F=c(88807),G=c(56791);let H=(0,q.h)("cli-tools/vibe-local");class I extends d.Mj{async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:H,liveAction:"vibe-local-session-exists",relaunchAction:"vibe-local-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:this.id,instanceId:c});try{e||await this.createLaunchPane(d,b);let c="vibe-local -y";try{let b=(0,F.getDbInstance)(),d=(0,G.getWorktreeById)(b,a);d?.vibeLocalModel&&E.QP.test(d.vibeLocalModel)&&(c+=` -m ${d.vibeLocalModel}`);let e=d?.vibeLocalContextWindow;(0,E.FV)(e)&&(c+=` --context-window ${Number(e)}`)}catch{}await (0,h.V1)(d,(0,v.Y)(c),!0),await new Promise(a=>setTimeout(a,5e3)),H.info("started-vibe-local-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Vibe Local session: ${a}`)}}}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Vibe Local",a,c,{relaunch:!0});try{await (0,i.FW)({sessionName:d,message:b,cliToolId:"vibe-local",composer:this.describeComposer(),interEnterWaitMs:u.PY}),(0,j.gm)(d),H.info("sent-message-to-vibe-local-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Vibe Local: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:H,stoppedAction:"stopped-vibe-local-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Zf))}})}constructor(...a){super(...a),this.id="vibe-local",this.name="Vibe Local",this.command="vibe-local"}}var J=c(49319),K=c(81776),L=c(56263),M=c(21758),N=c(54633),O=c(78099);let P=(0,q.h)("cli-tools/copilot"),Q=new Set(["model","agent","theme","permissions","skills","mcp","settings","statusline","subagents","resume","session"]),R=/^[>❯](?:\s|$)/,S=/^\s*\S\s+Loading:/;function T(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=[RegExp(`^\\s*●\\s+Model changed from .+ to ${c}(?=\\s|$)`),RegExp(`^\\s*●\\s+Switched model to:\\s*${c}\\s*$`)],e=RegExp(`^\\s*✗\\s+Model "${c}" is \\S`),f={switched:0,rejected:[]};for(let b of(0,k.aJ)(a).split("\n"))d.some(a=>a.test(b))?f.switched++:e.test(b)&&f.rejected.push(b.trim().replace(/^✗\s+/,""));return f}function U(a){let b=(0,k.aJ)(a).split("\n");for(let a=b.length-1;a>=0;a--){let c=b[a].trim().replace(/\s{2,}/g," ");if(""!==c)return JSON.stringify(c.length>80?`${c.slice(0,80)}…`:c)}return"an empty pane"}class V extends d.Mj{async isInstalled(){return await (0,K.B0)()!==null}launchExecutable(a){return"path"===a.source?this.command:M.nL}async launchSession(a,b,c){let d=await (0,K.B0)();if(!d)throw(0,O.Tl)(this);let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:P,liveAction:"copilot-session-exists",relaunchAction:"copilot-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:N.V,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:N.V,instanceId:c},executablePath:this.launchExecutable(d),worktreePath:b});f||await this.createLaunchPane(e,b),await (0,h.V1)(e,(0,v.Y)(g),!0),await this.waitForReady(e),P.info("started-copilot-session",{executableSource:d.source,version:d.version})}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Copilot session: ${a}`)}}}async answerFolderTrustDialog(a,b){return!!(0,k.Rx)(b)&&(await (0,h.V1)(a,k.oD,!1),(0,j.gm)(a),P.info("copilot-folder-trust-answered"),!0)}isComposerDrawn(a){let b=a.split("\n");for(let a=1;a<b.length-1;a++)if(R.test(b[a])&&k.A.test(b[a-1].trimEnd())&&k.A.test(b[a+1].trimEnd()))return!0;return!1}async waitForReady(a){let b=!1;for(let c=0;c<30;c++){try{let c=await (0,h.Xg)(a,50),d=(0,k.aJ)(c);if(this.isComposerDrawn(d))return void P.info("copilot-prompt-detected");!b&&await this.answerFolderTrustDialog(a,d)&&(b=!0)}catch{}await new Promise(a=>setTimeout(a,1e3))}P.info("copilot-prompt-detection-timeout")}async waitForPrompt(a,b=15e3,c="composer"){let d=Date.now(),e=!1,f="";for(;Date.now()-d<b;){try{let b=await (0,h.Xg)(a,50);if(f=(0,k.aJ)(b),this.isReadyFor(c,f))return{ready:!0,output:f};!e&&await this.answerFolderTrustDialog(a,f)&&(e=!0)}catch{}await new Promise(a=>setTimeout(a,500))}return P.info("copilot-prompt-not-detected",{until:c,bottomRow:U(f)}),{ready:!1,output:f}}isReadyFor(a,b){if(!k.Du.test(b))return!1;let c=b.split("\n");return!function(a){for(let b=a.length-1;b>=0;b--)if(""!==a[b].trim())return S.test(a[b]);return!1}(c)&&("composer"===a||"idle"===(0,k.Wn)(c))}extractSlashCommand(a){let b=a.trim();if(!b.startsWith("/"))return null;let c=b.match(/^\/(\S+)/);return c?c[1]:null}async waitForSelectionList(a){let b=Date.now();for(;Date.now()-b<5e3;){await new Promise(a=>setTimeout(a,300));try{let b=await (0,h.Xg)(a,50),c=(0,k.aJ)(b);if((0,k.gT)(c.split("\n")))return P.info("copilot-selection-list-detected"),!0}catch{}}return P.info("copilot-selection-list-not-detected-timeout"),!1}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!0});try{await this.waitForPrompt(d);let a=this.extractSlashCommand(b);if(a&&Q.has(a)){await (0,h.V1)(d,b,!0),await this.waitForSelectionList(d),(0,j.gm)(d),P.info("sent-selection-list-command-to-copilot",{command:a});return}await (0,i.FW)({sessionName:d,message:b,cliToolId:"copilot",composer:this.describeComposer(),textInputWaitMs:L.L1,verifyDelayMs:L.wp}),(0,j.gm)(d),P.info("sent-message-to-copilot-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Copilot: ${a}`)}}async sendModelCommand(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!1});try{let a=await this.waitForPrompt(d,L.pL,"idle");if(!a.ready)throw Error(`copilot did not become idle within ${L.pL}ms, so /model was not sent (bottom row: ${U(a.output)})`);let c=T(a.output,b);await (0,h.V1)(d,`/model ${b}`,!0);let e=await this.waitForModelSwitchOutcome(d,b,c);if((0,j.gm)(d),"rejected"===e.kind)throw P.warn("copilot-model-rejected",{model:b,reason:e.reason}),Error(`copilot refused it: ${e.reason}`);if("pending"===e.kind)throw P.warn("copilot-model-switch-unconfirmed",{model:b,bottomRow:e.bottomRow}),Error(`copilot printed no answer to /model within ${L.pL}ms (bottom row: ${e.bottomRow}); the switch may still take effect, and nothing further was typed`);P.info("copilot-model-switched",{model:b})}catch(c){let a=(0,w.u1)(c);throw Error(`Failed to switch Copilot model to ${b}: ${a}`)}}async waitForModelSwitchOutcome(a,b,c){let d=Date.now(),e="";for(;Date.now()-d<L.pL;){await new Promise(a=>setTimeout(a,250));try{e=await (0,h.Xg)(a,50)}catch{continue}let d=function(a,b,c){let d=T(b,c);return d.rejected.length>a.rejected.length?{kind:"rejected",reason:d.rejected[d.rejected.length-1]}:d.switched>a.switched?{kind:"switched"}:{kind:"pending"}}(c,e,b);if("pending"!==d.kind)return d}return{kind:"pending",bottomRow:U(e)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:P,stoppedAction:"stopped-copilot-session",requestExit:async a=>{await (0,h.ds)(a,"C-c"),await new Promise(a=>setTimeout(a,u.Is)),await (0,h.V1)(a,"/exit",!1),await new Promise(a=>setTimeout(a,L.L1)),await (0,h.KB)(a,["Enter"]),await new Promise(a=>setTimeout(a,u.Rk))}})}constructor(...a){super(...a),this.id="copilot",this.name="Copilot",this.command="copilot"}}var W=c(61878);let X=(0,q.h)("cli-tools/antigravity"),Y=/\?\s+for\s+shortcuts/,Z=/Do you trust the contents of this project\?/;function $(a){let b=(0,W.zJ)(a,"antigravity");if(k.kT.test(b.lastLines)||Z.test(b.lastLines))return!1;let c=function(a){let b=a.map(a=>a.trim()),c=a=>a>=0&&k.kn.test(b[a]),d=a=>{let c=a;for(;c>=0&&""===b[c];)c--;return c},e=b.length-1,f="";return(e>=0&&!c(e)&&(f=b[e],e=d(e-1)),!c(e)||(e=d(e-1))<0||!k.lE.test(b[e]))?null:c(d(e-1))?f:null}(b.contentLines);return null!==c&&(!!Y.test(c)||!(0,k.ut)("antigravity",b.lastLines))}class _ extends d.Mj{async launchSession(a,b,c,d){await this.requireInstalled();let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:X,liveAction:"antigravity-session-exists",relaunchAction:"antigravity-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:r.F0,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:r.F0,instanceId:c},executablePath:this.command,worktreePath:b}),i=d?`${g} --model '${d.replace(/'/g,"'\\''")}'`:g;f||await this.createLaunchPane(e,b),await (0,h.V1)(e,(0,v.Y)(i),!0),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(e),X.info("started-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to start Antigravity session: ${a}`)}}}async waitForReady(a){let b=!1;for(let c=0;c<30;c++){try{let c=await (0,h.Xg)(a,50),d=(0,k.aJ)(c);if($(d))return void X.info("antigravity-prompt-detected");if(!b&&Z.test(d)){await (0,h.ds)(a,"Enter"),b=!0,X.info("auto-trusted-folder-for-antigravity"),await new Promise(a=>setTimeout(a,500));continue}}catch{}await new Promise(a=>setTimeout(a,1e3))}X.info("antigravity-prompt-detection-timeout")}async waitForPrompt(a){let b=Date.now();for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,50),c=(0,k.aJ)(b);if($(c))return}catch{}await new Promise(a=>setTimeout(a,500))}throw X.info("antigravity-prompt-not-ready"),Error("Antigravity prompt not ready: timed out waiting for the input prompt before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Antigravity",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"antigravity",composer:this.describeComposer()}),(0,j.gm)(d),X.info("sent-message-to-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Antigravity: ${a}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:X,stoppedAction:"stopped-antigravity-session",requestExit:async a=>{await (0,h.ds)(a,"C-d"),await new Promise(a=>setTimeout(a,u.Zf))},afterKill:a=>{(0,j.gm)(a)}})}constructor(...a){super(...a),this.id="antigravity",this.name="Antigravity CLI",this.command="agy"}}var aa=c(28862),ab=c(35566),ac=c(2669);let ad=(0,q.h)("cli-tools/command-code"),ae=["--trust","--skip-onboarding","--no-auto-update"];function af(a){let b=a.split("\n");return!(0>(0,k.I$)(b))&&!k.k0.test((0,k.aJ)(a))}class ag extends d.Mj{navigationKeys(){return{keys:e.G2,leaderKey:null}}async launchSession(a,b,c){await this.requireInstalled();let{sessionName:d,exists:e,live:f}=await this.resolveLaunchPane(a,b,c,{logger:ad,liveAction:"command-code-session-exists",relaunchAction:"command-code-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:aa.k,instanceId:c}),this.composerPendingSince.set(d,Date.now());try{var g;e||await this.createLaunchPane(d,b),await (0,h.V1)(d,(0,v.Y)((g={target:{worktreeId:a,cliToolId:aa.k,instanceId:c},executablePath:this.command,worktreePath:b},[(0,t.wK)(g),...ae].join(" "))),!0),await new Promise(a=>setTimeout(a,u.yO)),await this.waitForReady(d),ad.info("started-command-code-session")}catch(a){throw this.composerPendingSince.delete(d),Error(`Failed to start Command Code session: ${(0,w.u1)(a)}`)}}}async waitForReady(a){for(let b=0;b<30;b++){try{let b=await (0,h.Xg)(a,50);if(af(b)){this.composerPendingSince.delete(a),ad.info("command-code-prompt-detected");return}}catch{}await new Promise(a=>setTimeout(a,1e3))}ad.info("command-code-prompt-detection-timeout")}async waitForPrompt(a){let b=Date.now(),c=0;for(;Date.now()-b<15e3;){let b=!1;try{let c=await (0,h.Xg)(a,50);if(!(b=null!==(0,ab.V)(c))&&af(c))return void this.composerPendingSince.delete(a)}catch{}if((c=b?c+1:0)>=2)throw ad.info("command-code-plan-review-blocks-send",{sessionName:a}),Error('Command Code is showing a plan review (REVIEW), which takes review comments, not messages. Comment with `commandmate respond <worktree-id> "<text>"`, then `--plan-review submit` (ctrl+r), `--plan-review approve` (ctrl+a) or `--plan-review cancel` (esc).');await new Promise(a=>setTimeout(a,500))}let d=this.composerPendingSince.get(a);if(void 0!==d){let b=Date.now()-d;if(b<=12e4)throw ad.info("command-code-session-still-starting",{sessionName:a,sinceLaunchMs:b}),new ac.Sr(this.name,a,b);this.composerPendingSince.delete(a)}throw ad.info("command-code-prompt-not-ready"),Error("Command Code prompt not ready: timed out waiting for the composer before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Command Code",a,c,{relaunch:!0});try{await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"command-code",composer:this.describeComposer()}),(0,j.gm)(d),ad.info("sent-message-to-command-code-session")}catch(a){if((0,ac.wQ)(a))throw a;throw Error(`Failed to send message to Command Code: ${(0,w.u1)(a)}`)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:ad,stoppedAction:"stopped-command-code-session",requestExit:async a=>{await (0,h.V1)(a,"/exit",!1),await new Promise(a=>setTimeout(a,u.pL)),await (0,h.KB)(a,["Enter"]),await new Promise(a=>setTimeout(a,u.Zf))},afterKill:a=>{this.composerPendingSince.delete(a),(0,j.gm)(a)}})}constructor(...a){super(...a),this.id="command-code",this.name="Command Code CLI",this.command="commandcode",this.composerPendingSince=new Map}}var ah=c(79646),ai=c(28354),aj=c(16983),ak=c(46684),al=c(34114),am=c(62887),an=c(72272),ao=c(49154),ap=c(33294),aq=c(27870),ar=c(57510),as=c(90488),at=c(51719),au=c(83738),av=c(26945),aw=c(38892),ax=c(16100),ay=c(71193);let az=(0,q.h)("lib/hooks/sources/opencode-v2/ingest");async function aA(a,b){let[{getDbInstance:d},{getWorktreeById:e},{applyAgentStopEvent:f}]=await Promise.all([Promise.resolve().then(c.bind(c,88807)),Promise.resolve().then(c.bind(c,56791)),Promise.all([c.e(1356),c.e(6065),c.e(1191),c.e(3480),c.e(5456),c.e(2710),c.e(1501),c.e(2283),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void az.info("opencode-v2-stop-unresolved-target",{worktreeId:a.worktreeId});await f(g,h,ay.B,b)}async function aB(a,b,c){let d=(0,av.bH)(a),e=(0,aw.X3)(a);if(null===d||null===e)return null;let f=await (0,al.$F)(d,e,b),g=f?.find(a=>(0,ar.Qd)(a)&&a.id===c);return(0,ar.Qd)(g)?g:null}async function aC(a,b,c){let d=(0,au.hl)(b.raw,b.receivedAt);if(!d)return az.info("opencode-v2-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let e=await (0,an.t)(ax.Wp,a,d,ax.Wp.parsePermissionRequest(b.raw));return az.info("opencode-v2-permission-decided",{worktreeId:a.worktreeId,instanceId:c,decisionId:d.id,behavior:e.behavior,reason:e.reason,delivered:e.delivered,settled:e.settled}),e.settled}async function aD(a,b,c){let d=(0,au.rk)(b.raw);if(d)return d;let e=(0,at.DH)(b.raw),f=(0,at.lx)(b.raw);if(null===e||null===f)return null;let g=await c(a,f,e);return g?(0,au.rk)(g):null}async function aE(a,b,c=aA,d=aB){let e=a.instanceId??ay.B;try{let f=(0,ap.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:ay.B,instanceId:e,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:ax.Wp.eventIdentityOf(b.raw),identityKind:ax.Wp.capabilities.eventIdentity});if(f.duplicate)return void az.info("opencode-v2-event-duplicate-dropped",{worktreeId:a.worktreeId,instanceId:e,event:b.event,detail:b.detail,by:f.by});let g={event:b.event,at:b.receivedAt,detail:b.detail?.slice(0,am.h9)??null,sessionId:b.conversationId,message:null,model:b.model},h={sessionStartMayArriveLate:!1};if("notification"===b.event&&b.detail===at.xz){g.decisionId=(0,at.DH)(b.raw);let c=(0,au.vF)(b.raw);g.toolName=c?.toolName??(0,at.Dg)(b.raw),g.decisionPatterns=c?.patterns??null,g.message=(0,au.s8)(b.raw)?.slice(0,aq.lY)??null,g.promptSettled=await aC(a,b,e),(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h)}else if("notification"===b.event&&b.detail===at.er)g.decisionId=(0,at.DH)(b.raw),g.promptSettled=!0,(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h);else if("notification"===b.event&&b.detail===at.Ai){let c=await aD(a,b,d);g.message=c?.questions[0]?.question.slice(0,aq.lY)??null,(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h),c&&(0,ap.recordAskUserQuestion)(a.worktreeId,ay.B,e,c,b.receivedAt),(0,ap.reportQuestionPending)(a.worktreeId,ay.B,e,{toolName:ao.GF,decisionId:(0,at.DH)(b.raw),detail:at.Ai},b.receivedAt),az.info("opencode-v2-question-recorded",{worktreeId:a.worktreeId,instanceId:e,decisionId:(0,at.DH)(b.raw),parsed:null!==c,questionCount:c?.questions.length??0}),await (0,as.Vo)(a,e,g.message,b.receivedAt)}else"stop"===b.event?(b.detail===at.dA&&(g.message=(0,at.ZL)(b.raw)?.slice(0,aq.lY)??null,az.error("opencode-v2-turn-failed",{worktreeId:a.worktreeId,instanceId:e,sessionId:b.conversationId,message:g.message})),(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h),await c(a,e)):(0,ap.recordAgentEvent)(a.worktreeId,ay.B,e,g,h);az.info("opencode-v2-event-received",{worktreeId:a.worktreeId,instanceId:e,type:(0,at.Cr)(b.raw),event:b.event,detail:b.detail})}catch(c){az.error("opencode-v2-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:e,event:b.event,error:c instanceof Error?c.message:String(c)})}}var aF=c(32301);let aG=(0,q.h)("lib/hooks/sources/opencode-v2/runtime"),aH=[0,500,1e3,2e3];function aI(a,b){return{worktreeId:a,cliToolId:ay.B,instanceId:b}}function aJ(a){return a instanceof Error?a.message:String(a)}async function aK(a,b){try{let c=await (0,av.ui)(a,b);if(null===c)return null;return(0,aw.OC)(a),c}catch(b){return aG.warn("opencode-v2-server-reserve-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aJ(b)}),null}}async function aL(a,b){let c=(0,aw.X3)(a);return null!==c&&"healthy"===(await (0,al.tJ)(b,c)).kind}async function aM(a){try{let b=(0,av.bH)(a);if(null===b)return!1;if((0,aF.yw)(a))return!0;let c=!1;for(let d of aH)if(d>0&&await new Promise(a=>setTimeout(a,d)),await aL(a,b)){c=!0;break}if(!c)return aG.info("opencode-v2-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!1;return await ax.Wp.subscribe(a,b=>{aE(a,b)}),aG.info("opencode-v2-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!0}catch(b){return aG.warn("opencode-v2-event-stream-attach-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aJ(b)}),!1}}async function aN(a,b){try{if((0,aF.yw)(a))return!0;let c=await (0,av.Lv)(a,b,b=>aL(a,b));if(null===c)return!1;return await aM(a)}catch(b){return aG.warn("opencode-v2-event-stream-resume-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aJ(b)}),!1}}async function aO(a){try{await (0,aF.VV)(a)}catch(b){aG.warn("opencode-v2-subscription-close-failed",{worktreeId:a.worktreeId,error:aJ(b)})}try{(0,av.OZ)(a)}catch(b){aG.warn("opencode-v2-port-forget-failed",{worktreeId:a.worktreeId,error:aJ(b)})}try{(0,aw.Nc)(a)}catch(b){aG.warn("opencode-v2-password-remove-failed",{worktreeId:a.worktreeId,error:aJ(b)})}}var aP=c(93949),aQ=c(95759);let aR=(0,q.h)("cli-tools/opencode-v2"),aS=(0,ai.promisify)(ah.execFile),aT=aj.xT,aU=/^\/\S+$/,aV=[...e.qD,e.Mx,...e.TM,"a","l","m"];class aW extends d.Mj{navigationKeys(){return{keys:aV,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,aQ.Qq)()).executable}async isRunning(a,b){let c=this.getSessionName(a,b),d=await (0,h.N)(c);return d&&this.resumeInBackground(a,c,b),d}resumeInBackground(a,b,c){let d=aI(a,c);if((0,aF.yw)(d))return;let e=Date.now(),f=this.resumeAttemptedAt.get(b);void 0!==f&&e-f<3e4||(this.resumeAttemptedAt.set(b,e),(async()=>{try{let a=await (0,h.nS)(b);if(null===a)return;await aN(d,a)}catch(a){aR.debug("opencode-v2-lazy-resume-failed",{error:(0,w.u1)(a)})}})())}async launchSession(a,b,c){let d=(await (0,aQ.Qq)()).executable;if(!d)throw(0,O.Tl)(this);let e=this.getSessionName(a,c),f=aI(a,c),g={windowWidth:(0,ak.r)({warnSidebar:!1}),windowHeight:aj.xT},i=await (0,h.N)(e);if(i){if(await this.reconcileExistingSession(e,b,g),await this.isToolLive(e,{confirm:!0})){await aN(f,b),aR.info("opencode-v2-session-exists");return}aR.warn("opencode-v2-session-relaunch",{sessionName:e}),await aO(f)}(0,t.Fq)(f);try{i||await this.createLaunchPane(e,b);try{await aS("tmux",["resize-window","-t",(0,h.lA)(e),"-x",String(g.windowWidth),"-y",String(g.windowHeight)])}catch{}let j=await aK(f,b);null===j&&aR.warn("opencode-v2-launch-without-server",{worktreeId:a,instanceId:c}),await (0,h.V1)(e,(0,v.Y)((0,t.wK)({target:f,executablePath:d.path,worktreePath:b})),!0),await this.waitForReady(e),await aM(f),aR.info("started-opencode-v2-session")}catch(a){throw Error(`Failed to start OpenCode V2 session: ${(0,w.u1)(a)}`)}}async waitForReady(a){for(let b=0;b<60;b++){try{let c=(0,k.aJ)(await (0,h.Xg)(a,aT));if((0,k.Ok)(c))return aR.info("opencode-v2-composer-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return aR.info("opencode-v2-ready-detection-timeout"),!1}async waitForComposer(a){let b=Date.now()+u.D1;for(;;){let c=null;try{let b=(0,k.aJ)(await (0,h.Xg)(a,aT));if(c=(0,k.dF)(b),null===c&&(0,k.Ok)(b))return}catch{}if(null!==c)throw Error(`OpenCode V2 composer not available: the "${c}" dialog is open. Close it (esc) or finish the choice, then send again`);if(Date.now()>=b)break;await new Promise(a=>setTimeout(a,500))}throw Error("OpenCode V2 composer not ready: timed out waiting for it before sending")}async sendMessage(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("OpenCode V2",a,c,{relaunch:!0});try{await this.waitForComposer(d),await (0,i.FW)({sessionName:d,message:aU.test(b)?`${b} `:b,cliToolId:ay.B,composer:this.describeComposer()}),(0,j.gm)(d),aR.info("sent-message-to-opencode-v2-session")}catch(a){throw Error(`Failed to send message to OpenCode V2: ${(0,w.u1)(a)}`)}}async killSession(a,b){let c=this.getSessionName(a,b),d=aI(a,b),e=(0,av.bH)(d);try{if(await (0,h.N)(c)){await (0,h.V1)(c,aP.M0,!1),await new Promise(a=>setTimeout(a,u.pL)),await (0,h.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,u.Lw));let a=await (0,aP.rY)({sessionAlive:()=>(0,h.N)(c),portAnswering:null===e?null:async()=>"unreachable"!==(await (0,al.tJ)(e,"")).kind});a.ok||(aR.info("opencode-v2-graceful-exit-postcondition-unmet",{sessionName:c,reason:a.reason,...null!==e?{port:e}:{}}),await (0,h.fY)(c))}else await (0,h.fY)(c);(0,j.gm)(c),this.resumeAttemptedAt.delete(c),aR.info("stopped-opencode-v2-session")}catch(a){throw aR.error("session:stop-failed",{error:(0,w.u1)(a)}),a}finally{await aO(d)}}constructor(...a){super(...a),this.id=ay.B,this.name="OpenCode V2",this.command=ay.V,this.resumeAttemptedAt=new Map}}class aX{constructor(){this.tools=new Map,this.tools.set("claude",new g),this.tools.set("codex",new A),this.tools.set("gemini",new D),this.tools.set("vibe-local",new I),this.tools.set("opencode",new J.Ui),this.tools.set("copilot",new V),this.tools.set("antigravity",new _),this.tools.set("command-code",new ag),this.tools.set("opencode-v2",new aW)}static getInstance(){return aX.instance||(aX.instance=new aX),aX.instance}getTool(a){let b=this.tools.get(a);if(!b)throw Error(`CLI tool '${a}' not found`);return b}getAllTools(){return Array.from(this.tools.values())}async getToolInfo(a){let b=this.getTool(a),c=await b.isInstalled();return{id:b.id,name:b.name,command:b.command,installed:c}}async getAllToolsInfo(){return Promise.all(this.getAllTools().map(async a=>{let b=await a.isInstalled();return{id:a.id,name:a.name,command:a.command,installed:b}}))}async getInstalledTools(){return(await this.getAllToolsInfo()).filter(a=>a.installed)}async stopPollers(a,b,d){let{stopPolling:e}=await Promise.all([c.e(1356),c.e(1503),c.e(1634),c.e(1191),c.e(1719),c.e(2119),c.e(2445),c.e(3480),c.e(8728),c.e(8918),c.e(5595),c.e(611),c.e(5625),c.e(5220)]).then(c.bind(c,95220));e(a,b,d)}}},17287:(a,b,c)=>{c.d(b,{CD:()=>g,nL:()=>f});var d=c(24455);let e=(0,c(36925).v)("__permissionDecisions",()=>new Map);function f(a,b,c,f){e.set((0,d.v7)(a,b,c),f)}function g(a,b,c){return e.get((0,d.v7)(a,b,c))??null}},23365:(a,b,c)=>{c.d(b,{H:()=>g,y:()=>h});var d=c(16983),e=c(34405),f=c(15194);let g=200;function h(a){var b;return{statusLines:"opencode"===(b=a)?d.xT:"gemini"===b?g:e.G,usesAlternateScreen:(0,f.VA)(a)}}},29169:(a,b,c)=>{c.d(b,{yt:()=>n,tH:()=>o,f_:()=>B,sl:()=>m,a9:()=>k,Dk:()=>A,uG:()=>y});var d=c(51297);let e=/\btype\s+to\s+search\b|\bsearch\s+\w+\s*(?:…|\.\.\.)|(?:^|·)\s*\/\s+search\b/im,f=/^\s*(?:❯ +)?Approve\s+ctrl\+a\b[^\n]*\n\s*(?:❯ +)?Cancel\s+esc\s*$/im,g=/\benter\s+to\s+select\b\s*[·•]\s*esc\s+to\s+cancel\b/i,h=/^\s*(?:press|hit|type)?\s*(?:<)?esc(?:ape)?(?:>)?\s+to\s+(?:close|dismiss|exit)\b[\s.·•]*$/im,i=/^\s*Approve\s+\([• ]\)\s+with\s+\d+\s+comments?\s+as\s+notes\s+\([• ]\)\s+original\s+plan\b/im,j=/(?:^|\n)[ \t]*←\/→\s+choose\s*·\s*enter\s+confirm\s*·\s*esc\s+back\s*$/i;function k(a){return i.test(a)&&j.test(a)}function l(a,b){return a.split("\n").filter(a=>""!==a.trim()).slice(-b).join("\n")}function m(a){return g.test(l(a,1))}function n(a){return h.test(l(a,1))}function o(a){return f.test(l(a,5))}let p=/^\u2500+$/,q="●◉⦿",r=RegExp(`^\\s*([${q}◯○◌⚪✔])\\s+\\S`);function s(a){let b=a.split("|");if(b.length<2)return!1;let c=0,d=0;for(let a of b){let b=r.exec(a);if(null===b)return!1;q.includes(b[1])?c+=1:d+=1}return c>0&&d>0}let t=/\besc\s+to\s+interrupt\b|^[^\S\n]*✻[^\S\n]+\S/im,u=/^[^\S\n]*(?:\u276F[^\S\n]*)?1[.)][^\S\n]+Submit[^\S\n]*$/im,v=/^[^\S\n]*(?:\u276F[^\S\n]*)?2[.)][^\S\n]+Cancel[^\S\n]*$/im,w=/^[^\S\n]*\u2190[^\S\n]+to[^\S\n]+go[^\S\n]+back[^\S\n]+and[^\S\n]+edit[^\S\n]*$/im,x=/have\s+not\s+answered\s+all\s+questions/i;function y(a){if(!a)return null;let b=a.replace(/\r\n/g,"\n").split("\n").map(d.aJ),c=b.length-1;for(;c>=0&&""===b[c].trim();)c-=1;if(c<1)return null;let e=-1;for(let a=c-1;a>=0;a-=1){let c=b[a].trim();if(!(c.length<40)&&p.test(c)){e=a;break}}if(e<0)return null;let f=b.slice(e+1,c+1),g=f.findIndex(a=>""!==a.trim());if(g<0||!s(f[g]))return null;let h=f.join("\n");if(!u.test(h)||!v.test(h)||!w.test(h))return null;let i=f.find(a=>u.test(a));return{hasUnansweredWarning:x.test(h),cursorOnSubmit:void 0!==i&&i.includes("❯")}}let z=/^[^0-9A-Za-z]*([1-9])[.)]\s+\S/;function A(a){let b=C(a);return null!==b&&b.numbers.every((a,b)=>a===b+1)&&1===b.cursorCount?{ruleLineIndex:b.ruleLineIndex,firstLineIndex:b.firstLineIndex,lastLineIndex:b.lastLineIndex,tabLineIndex:b.tabLineIndex,cursorLineIndex:b.cursorLineIndex,cursorOnOptionRow:b.cursorOnOptionRow,optionCount:b.numbers.length}:null}function B(a){return null!==C(a)}function C(a){if(!a)return null;let b=a.replace(/\r\n/g,"\n").split("\n").map(d.aJ),c=b.length-1;for(;c>=0&&""===b[c].trim();)c-=1;if(c<1)return null;let f=-1;for(let a=c-1;a>=0;a-=1){let c=b[a].trim();if(!(c.length<40)&&p.test(c)){f=a;break}}if(f<0)return null;let i=b.slice(f+1,c+1),j=i.join("\n");if(e.test(j)||g.test(j)||h.test(j)||t.test(j))return null;let k=i.findIndex(a=>""!==a.trim());if(k<0||!s(i[k]))return null;let l=[],m=-1;for(let a=k+1;a<i.length;a+=1){let b=z.exec(i[a]);null!==b&&(m<0&&(m=a),l.push(Number(b[1])))}if(l.length<2||!i.slice(k+1,m).some(a=>""!==a.trim()))return null;let n=0,o=-1,q=!1;for(let a=0;a<i.length;a+=1){let b=i[a].split("❯").length-1;0!==b&&(n+=b,o=a,q=z.test(i[a]))}return 0===n?null:{ruleLineIndex:f,firstLineIndex:f+1,lastLineIndex:c,tabLineIndex:f+1+k,numbers:l,cursorCount:n,cursorLineIndex:f+1+o,cursorOnOptionRow:q}}},34405:(a,b,c)=>{c.d(b,{G:()=>e,_:()=>d});let d=1e4,e=1e3},35566:(a,b,c)=>{c.d(b,{V:()=>l});var d=c(51297),e=c(29169);let f=/^\s*type \+ enter to comment\b/i,g=/^\s*enter to pin\s*·\s*esc discard\s*$/i,h=/^\s*↑\/↓ choose\s*·\s*enter to run\s*$/i,i=/^\s*❯ +(?:Submit review\b|Approve\s+ctrl\+a\b|Cancel\s+esc\b)/im,j=/^\s*REVIEW\s+(\d+)\s+pending comments?\b/im,k=/\(•\)\s+with\s+\d+\s+comments?\s+as\s+notes/i;function l(a){if(!a)return null;let b=(0,d.aJ)(a.replace(/\r\n/g,"\n")).split("\n").filter(a=>""!==a.trim()).slice(-15);if(0===b.length)return null;let c=b.join("\n"),l=j.exec(c),m=l?Number(l[1]):0;if((0,e.a9)(c))return{phase:"approve-choice",pendingComments:m,approveChoice:k.test(c)?"with-comments":"discard-comments"};if(!(0,e.tH)(c))return null;let n=b[b.length-1],o="unknown";return i.test(c)||h.test(n)?o="action-focus":g.test(n)?o="comment-box":f.test(n)&&(o="body"),{phase:o,pendingComments:m,approveChoice:null}}},39333:(a,b,c)=>{c.d(b,{$Y:()=>h,Bg:()=>j,Fg:()=>e,HB:()=>g,df:()=>i,f9:()=>d});let d=[".png",".jpg",".jpeg",".gif",".webp",".svg"],e=0x1400000,f=[{extension:".png",mimeType:"image/png",magicBytes:[137,80,78,71]},{extension:".jpg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".jpeg",mimeType:"image/jpeg",magicBytes:[255,216,255]},{extension:".gif",mimeType:"image/gif",magicBytes:[71,73,70,56]},{extension:".webp",mimeType:"image/webp",magicBytes:[82,73,70,70]},{extension:".svg",mimeType:"image/svg+xml"}];function g(a){return a?a.startsWith(".")?a.toLowerCase():"."+a.toLowerCase():""}function h(a){let b=g(a),c=f.find(a=>a.extension===b);return c?.mimeType||"application/octet-stream"}function i(a){if(!a)return!1;let b=g(a);return d.includes(b)}function j(a,b){if(b.length>e)return{valid:!1,error:`File size exceeds ${e/1024/1024}MB limit`,reason:"too-large"};if(".svg"===g(a)){var c;return(c=b.toString("utf-8")).includes("<svg")||c.startsWith("<?xml")?/<script[\s>]/i.test(c)?{valid:!1,error:"SVG contains script tags"}:/\s+on\w+\s*=/i.test(c)?{valid:!1,error:"SVG contains event handler attributes"}:/(?:xlink:)?href\s*=\s*["']?\s*(?:javascript|data|vbscript):/i.test(c)?{valid:!1,error:"SVG contains dangerous URI scheme"}:/<foreignObject[\s>]/i.test(c)?{valid:!1,error:"SVG contains foreignObject element"}:{valid:!0}:{valid:!1,error:"Invalid SVG format"}}return!function(a,b){let c=g(a),d=f.find(a=>a.extension===c);if(!d?.magicBytes)return".svg"===c;let e=d.magicBytesOffset||0;return!(b.length<e+d.magicBytes.length)&&d.magicBytes.every((a,c)=>b[e+c]===a)}(a,b)?{valid:!1,error:"Invalid image magic bytes"}:{valid:!0}}d.filter(a=>".svg"!==a).map(a=>h(a)).filter(a=>"application/octet-stream"!==a).join(",")},46684:(a,b,c)=>{c.d(b,{r:()=>f});var d=c(16983);let e=(0,c(72626).h)("cli-tools/opencode-pane-width");function f(a){let b=process.env[d.ao],c=(0,d._u)(),f=b?.trim(),g=void 0!==f&&(!/^\d+$/.test(f)||Number.parseInt(f,10)!==c);return void 0!==b&&g?e.warn("opencode-pane-width-rejected",{requested:b,applied:c}):a.warnSidebar&&c>=d.Lg&&e.warn("opencode-pane-width-sidebar-visible",{width:c,sidebarMinWidth:d.Lg}),c}},47967:(a,b,c)=>{c.d(b,{Z:()=>h,u:()=>i});var d=c(70605);let e=/ctrl\+[tp]\b/,f=/^\s*╹▀+/,g=/^\s*[┃│]/,h={locate({contentLines:a}){let b=(0,d.Sx)(a),c=-1;for(let d=b;d>=Math.max(0,b-4);d--)if(e.test(a[d])){c=d;break}if(c<0)return null;let h=-1;for(let b=c-1;b>=Math.max(0,c-3);b--)if(f.test(a[b])){h=b;break}if(h<0)return null;let i=h;for(;i-1>=0&&g.test(a[i-1]);)i--;return{start:i,end:b,atBottom:!0}}};function i(a){return{locate({contentLines:b}){let c=(0,d.Sx)(b);for(let d=c;d>=Math.max(0,c-60);d--)if(g.test(b[d])&&a.test(b[d]))return{start:d};return null}}}},49319:(a,b,c)=>{c.d(b,{Ui:()=>az,TZ:()=>ay});var d=c(89731),e=c(8953),f=c(79892),g=c(61789),h=c(40236),i=c(93997),j=c(29021),k=c(21820),l=c(33873),m=c(8004),n=c(72626);let o=(0,n.h)("cli-tools/opencode-config"),p=/^[a-zA-Z0-9._:/-]{1,100}$/,q=/^[a-zA-Z0-9._:/@-]{1,200}$/,r="CM_OPENCODE_LOCAL_PROVIDER_CONFIG",s="OPENCODE_CONFIG",t=["opencode.json","opencode.jsonc",l.join(".opencode","opencode.json"),l.join(".opencode","opencode.jsonc")],u=["opencode.json","opencode.jsonc"];async function v(){let a={};try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch("http://localhost:11434/api/tags",{signal:b.signal}).finally(()=>{clearTimeout(c)});if(!d.ok)return o.warn("ollama-api-returned"),{};let e=await d.text();if(e.length>1048576)return o.warn("ollama-api-response"),{};let f=JSON.parse(e);if(!f||!Array.isArray(f.models))return o.warn("invalid-ollama-api"),{};for(let b of f.models.slice(0,100))"string"==typeof b?.name&&p.test(b.name)&&(a[b.name]={name:function(a){let b=String(a.name),c=a.details;if(!c)return b;let d=[b];return"string"==typeof c.parameter_size&&/^[\d.]+[BKMGT]?B?$/i.test(c.parameter_size)&&d.push(c.parameter_size),"string"==typeof c.quantization_level&&/^[A-Z0-9_]{1,20}$/i.test(c.quantization_level)&&d.push(c.quantization_level),d.length>1?`${b} (${d.slice(1).join(", ")})`:b}(b)})}catch(a){a instanceof Error&&"AbortError"===a.name?o.warn("ollama-api-timeout"):o.warn("failed-to-fetch")}return a}async function w(){let a={};try{let b=new AbortController,c=setTimeout(()=>b.abort(),3e3),d=await fetch("http://localhost:1234/v1/models",{signal:b.signal}).finally(()=>{clearTimeout(c)});if(!d.ok)return o.warn("lm-studio-api"),{};let e=await d.text();if(e.length>1048576)return o.warn("lm-studio-api"),{};let f=JSON.parse(e);if(!f||!Array.isArray(f.data))return o.warn("invalid-lm-studio"),{};for(let b of f.data.slice(0,100))"string"==typeof b?.id&&q.test(b.id)&&(a[b.id]={name:b.id})}catch(a){a instanceof Error&&"AbortError"===a.name?o.warn("lm-studio-api"):o.warn("failed-to-fetch")}return a}function x(a=process.env){let b=l.join(k.homedir(),".config");return l.join((0,m.T)(a.XDG_CONFIG_HOME,b,"XDG_CONFIG_HOME"),"opencode")}async function y(){let[a,b]=await Promise.all([v(),w()]),c={};return Object.keys(a).length>0&&(c.ollama={npm:"@ai-sdk/openai-compatible",name:"Ollama (local)",options:{baseURL:"http://localhost:11434/v1"},models:a}),Object.keys(b).length>0&&(c.lmstudio={npm:"@ai-sdk/openai-compatible",name:"LM Studio (local)",options:{baseURL:"http://localhost:1234/v1"},models:b}),c}async function z(a){let b=function(a=process.env){let b=(a[r]??"").trim().toLowerCase();return"worktree"===b||"project"===b?"worktree":"global"===b||"user"===b?"global":(""!==b&&"off"!==b&&"0"!==b&&"false"!==b&&"none"!==b&&o.warn("opencode-config-mode-unrecognised",{variable:r,value:b}),"off")}();if("off"===b)return{written:!1,configPath:null,reason:"disabled"};let c="worktree"===b?function(a){let b=l.resolve(a);try{if(!j.lstatSync(b).isDirectory())throw Error(`Path is not a directory: ${b}`)}catch(a){if("ENOENT"===a.code)throw Error(`Path does not exist: ${b}`);throw a}return j.realpathSync(b)}(a):null,d=function(a,b=process.env){if(""!==(b[s]??"").trim())return`env:${s}`;if(null!==a)for(let b of t){let c=l.join(a,b);if(j.existsSync(c))return c}let c=x(b);for(let a of u){let b=l.join(c,a);if(j.existsSync(b))return b}return null}(c);if(null!==d)return o.info("opencode-config-generation-skipped",{mode:b,owned:d}),{written:!1,configPath:null,reason:"existing-config"};let e=c??x(),f=l.join(e,"opencode.json"),g=await y();if(0===Object.keys(g).length)return{written:!1,configPath:null,reason:"no-providers"};try{"global"===b&&j.mkdirSync(e,{recursive:!0}),j.writeFileSync(f,JSON.stringify({$schema:"https://opencode.ai/config.json",provider:g},null,2),{encoding:"utf-8",flag:"wx"})}catch(a){if("EEXIST"===a.code)return{written:!1,configPath:null,reason:"existing-config"};return o.warn("failed-to-write-opencodejson:error-insta"),{written:!1,configPath:null,reason:"write-failed"}}return o.info("opencode-config-generated",{mode:b,configPath:f}),{written:!0,configPath:f,reason:"written"}}var A=c(16983),B=c(46684),C=c(79646),D=c(28354),E=c(39333),F=c(1305),G=c(49791),H=c(62887),I=c(72272),J=c(49154),K=c(33294),L=c(27870),M=c(57510),N=c(59409),O=c(75356),P=c(98211),Q=c(90488),R=c(85322);let S=(0,n.h)("lib/hooks/sources/opencode/ingest");async function T(a,b,c){let d=(0,N.VM)(R.k),e=(0,P.Lu)(b.raw,b.receivedAt);if(!e)return S.info("opencode-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let f=await (0,I.t)(d,a,e,d.parsePermissionRequest(b.raw));return S.info("opencode-permission-decided",{worktreeId:a.worktreeId,instanceId:c,decisionId:e.id,behavior:f.behavior,reason:f.reason,delivered:f.delivered,settled:f.settled}),f.settled}async function U(a,b){let[{getDbInstance:d},{getWorktreeById:e},{applyAgentStopEvent:f}]=await Promise.all([Promise.resolve().then(c.bind(c,88807)),Promise.resolve().then(c.bind(c,56791)),Promise.all([c.e(1356),c.e(6065),c.e(1191),c.e(3480),c.e(5456),c.e(2710),c.e(1501),c.e(2283),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void S.info("opencode-stop-unresolved-target",{worktreeId:a.worktreeId});let i=await f(g,h,R.k,b);S.info("opencode-stop-applied",{worktreeId:a.worktreeId,instanceId:b,taskId:i.taskId,taskEventApplied:i.taskEventApplied,verificationRunId:i.verificationRunId})}async function V(a,b){let c=a.instanceId??R.k;try{let d=(0,N.VM)(R.k),e=(0,K.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:R.k,instanceId:c,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:d.eventIdentityOf(b.raw),identityKind:d.capabilities.eventIdentity});if(e.duplicate)return void S.info("opencode-event-duplicate-dropped",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail,by:e.by});let f={event:b.event,at:b.receivedAt,detail:b.detail?.slice(0,H.h9)??null,sessionId:b.conversationId,message:(function(a){let b=(0,M.Qd)(a.raw.properties)?a.raw.properties:{};if(a.detail===O.aF)return(0,M.NZ)(b,["metadata","command"])??(0,M.O2)(b,"permission");if(a.detail===O.Tm){let a=b.questions;return Array.isArray(a)&&(0,M.Qd)(a[0])?(0,M.O2)(a[0],"question"):null}return a.detail===O.vE?(0,M.NZ)(b,["error","data","message"])??(0,M.NZ)(b,["error","name"]):null})(b)?.slice(0,L.lY)??null,model:b.model},g={sessionStartMayArriveLate:d.capabilities.sessionStartMayArriveLate};if("notification"===b.event&&b.detail===O.aF){f.decisionId=(0,M.O2)((0,M.Qd)(b.raw.properties)?b.raw.properties:{},"id");let d=(0,P.LF)(b.raw,b.receivedAt);f.toolName=d?.toolName??null,f.decisionPatterns=d?.patterns??null,f.promptSettled=await T(a,b,c),(0,K.recordAgentEvent)(a.worktreeId,R.k,c,f,g);return}if("notification"===b.event&&b.detail===O.C8){f.decisionId=(0,O.Mn)(b.raw),f.promptSettled=!!(0,N.VM)(R.k).capabilities.permissionReplyReleasesPrompt||(S.info("opencode-permission-reply-not-releasing",{worktreeId:a.worktreeId,instanceId:c,reason:"capability-permissionReplyReleasesPrompt-false"}),!1),(0,K.recordAgentEvent)(a.worktreeId,R.k,c,f,g),S.info("opencode-permission-reply-observed",{worktreeId:a.worktreeId,instanceId:c,decisionId:f.decisionId,released:f.promptSettled});return}if((0,K.recordAgentEvent)(a.worktreeId,R.k,c,f,g),"notification"===b.event&&b.detail===O.Tm){let d=(0,N.VM)(R.k).parseQuestion(b.raw);d&&((0,K.recordAskUserQuestion)(a.worktreeId,R.k,c,d,b.receivedAt),(0,K.reportQuestionPending)(a.worktreeId,R.k,c,{toolName:J.GF,decisionId:d.promptId,detail:O.Tm},b.receivedAt),S.info("opencode-question-recorded",{worktreeId:a.worktreeId,instanceId:c,decisionId:d.promptId,questionCount:d.questions.length,optionCounts:d.questions.map(a=>a.choices.length)})),await (0,Q.Vo)(a,c,f.message??null,b.receivedAt);return}if("stop"===b.event)return void await U(a,c);"notification"===b.event&&b.detail===O.vE&&await (0,Q.dJ)(a,c,(0,M.NZ)((0,M.Qd)(b.raw.properties)?b.raw.properties:{},["error","name"]),f.message??null,b.conversationId,b.receivedAt),S.info("opencode-event-received",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail})}catch(d){S.error("opencode-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:c,event:b.event,error:d instanceof Error?d.message:String(d)})}}var W=c(84574),X=c(85965),Y=c(33198);let Z=(0,n.h)("lib/hooks/sources/opencode/runtime");function $(a,b){return{worktreeId:a,cliToolId:"opencode",instanceId:b}}async function _(a,b){try{return await (0,W.CU)(a,b)}catch(b){return Z.warn("opencode-port-reserve-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),null}}let aa=[0,500,1e3,2e3,4e3];async function ab(a,b){for(let[c,d]of aa.entries()){d>0&&await new Promise(a=>setTimeout(a,d));let e=await (0,G.sc)(b);if("healthy"===e.kind)return c>0&&Z.info("opencode-server-reachable-after-retry",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempt:c}),e.health;if("rejected"===e.kind){Z.warn("opencode-server-refused-commandmate",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,status:e.status,consequence:"structured events are off for this session; the scraper decides"});break}}return null}async function ac(a){try{let b=(0,W.hC)(a);if(null===b)return!1;if((0,Y.wb)(a))return!0;let c=await ab(a,b);if(!c)return Z.info("opencode-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempts:aa.length}),!1;await X.cC.subscribe(a,b=>{V(a,b)});let d=await ad(a);return Z.info("opencode-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,version:c.version,activity:d}),!0}catch(b){return Z.warn("opencode-event-stream-attach-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ad(a){let b=null;try{b=await X.cC.probeActivity(a)}catch(b){Z.debug("opencode-activity-probe-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:b instanceof Error?b.message:String(b)})}return(0,Y.yn)(a,b,Date.now()),b}async function ae(a,b){try{if((0,Y.wb)(a))return!0;let c=await (0,W.jp)(a,b);if(null===c)return!1;return await ac(a)}catch(b){return Z.warn("opencode-event-stream-resume-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function af(a){let b=a.instanceId??a.cliToolId;try{let c=(0,W.hC)(a);if(null===c)return!1;let d=(0,Y.lf)(a);if("live"!==d.state)return Z.info("opencode-abort-skipped-not-live",{worktreeId:a.worktreeId,instanceId:b,port:c,liveness:d.state}),!1;let e=(0,Y.ym)(a);if(null===e)return Z.info("opencode-abort-skipped-no-session",{worktreeId:a.worktreeId,instanceId:b,port:c}),!1;let f=(0,Y.H1)(a,e,2e3);if(!await (0,G.UR)(c,e))return f.cancel(),Z.warn("opencode-abort-rejected",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!1;if(!await f.seen)return Z.warn("opencode-abort-unconfirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e,timeoutMs:2e3}),!1;return Z.info("opencode-abort-confirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!0}catch(c){return Z.warn("opencode-abort-failed",{worktreeId:a.worktreeId,instanceId:b,error:c instanceof Error?c.message:String(c)}),!1}}async function ag(a){try{await (0,Y.FN)(a),(0,W.kE)(a)}catch(b){Z.warn("opencode-event-stream-release-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)})}}var ah=c(18529),ai=c(70849),aj=c(27939),ak=c(93949),al=c(20610),am=c(78099),an=c(95759),ao=c(79748);let ap=/^timestamp=(\S+)/,aq=/no such column: ?[A-Za-z0-9_.]*/;async function ar(a,b){let c;try{c=await (0,ao.open)(a,"r");let{size:d}=await c.stat(),e=Math.min(d,b),f=d-e,g=Buffer.alloc(e);await c.read(g,0,e,f);let h=g.toString("utf8");return f>0&&(h=h.slice(h.indexOf("\n")+1)),h}catch{return null}finally{await c?.close().catch(()=>{})}}async function as(a,b=function(){let a=process.env.XDG_DATA_HOME||(0,l.join)((0,k.homedir)(),".local","share");return(0,l.join)(a,"opencode","log","opencode.log")}()){let c=await ar(b,262144);if(null===c)return null;let d=a-1e3;for(let a of c.split("\n")){let b=ap.exec(a);if(!b)continue;let c=Date.parse(b[1]);if(Number.isNaN(c)||c<d)continue;let e=aq.exec(a);if(e)return e[0]}return null}var at=c(46749),au=c(77093);let av=(0,n.h)("cli-tools/opencode"),aw=(0,D.promisify)(C.execFile),ax=[0,50,100,200];function ay(a,b){return a?`${a}
|
|
3
3
|
|
|
4
4
|
[添付画像: ${b}]`:`[添付画像: ${b}]`}class az extends d.Mj{navigationKeys(){return{keys:e.sM,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,an.$s)()).executable}async launchSession(a,b,c){let d=await (0,an.$s)(),e=d.executable;if(!e)throw(0,am.Tl)(this,(0,an.mV)(d));let g=this.getSessionName(a,c),h=$(a,c),i=(0,B.r)({warnSidebar:!0}),j=await (0,f.N)(g);if(j){if(await this.reconcileExistingSession(g,b,{windowWidth:i,windowHeight:A.xT}),await this.isToolLive(g,{confirm:!0})){await ae(h,b),av.info("opencode-session-exists");return}av.warn("opencode-session-relaunch",{sessionName:g}),await ag(h)}(0,F.Fq)(h);try{await z(b),j||await this.createLaunchPane(g,b);try{await aw("tmux",["resize-window","-t",(0,f.lA)(g),"-x",String(i),"-y",String(A.xT)])}catch{}await _(h,b);let d=(0,F.wK)({target:h,executablePath:e.path,worktreePath:b}),k=(0,aj.pr)(h,b),l=null===k?d:(0,aj.XO)(d,k);null!==k&&av.info("opencode-session-resumed",{worktreeId:a,instanceId:c??this.id,sessionId:k});let m=Date.now();if(await (0,f.V1)(g,(0,at.Y)(l),!0),await this.waitForReady(g),!await ac(h)&&null!==(0,W.hC)(h)){let b=await as(m);if(null!==b)throw av.warn("opencode-shared-data-conflict",{worktreeId:a,finding:b}),Error(`OpenCode 1.x could not open its data (opencode log: "${b}"). OpenCode 1.x and OpenCode V2 share ~/.local/share/opencode/opencode.db, and V2 has changed tables 1.x still uses. Use only OpenCode V2, or give OpenCode 1.x a data directory of its own (docs/user-guide/cli-setup-guide.md, "OpenCode (1.x) and OpenCode V2").`)}av.info("started-opencode-session")}catch(b){let a=(0,au.u1)(b);throw Error(`Failed to start OpenCode session: ${a}`)}}async waitForReady(a){for(let b=0;b<60;b++){try{let c=(0,g.aJ)(await (0,f.Xg)(a,50));if(g.vU.test(c))return av.info("opencode-composer-detected",{attempt:b}),!0;if(g.LO.test(c))return av.info("opencode-overlay-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return av.info("opencode-ready-detection-timeout"),!1}async trySendViaServer(a,b,c){let d=a.instanceId??a.cliToolId;try{let e=(0,W.hC)(a);if(null===e)return!1;let f=(0,Y.lf)(a);if("live"!==f.state)return av.info("opencode-send-skipped-not-live",{worktreeId:a.worktreeId,instanceId:d,port:e,liveness:f.state}),!1;let g=(0,Y.ym)(a);if(null===g)return av.info("opencode-send-skipped-no-session",{worktreeId:a.worktreeId,instanceId:d,port:e}),!1;let h=[{type:"text",text:b}];void 0!==c&&h.push({type:"file",mime:(0,E.$Y)((0,l.extname)(c)),filename:(0,l.basename)(c),url:(0,G.fy)(c)});let i=(0,G.CH)(),j=(0,ah.QH)((0,ah.Q1)(a));if(!await (0,G.wZ)(e,g,i,h,j))return!1;if(!await this.verifyPostedMessage(e,g,i,b))return av.warn("opencode-send-unverified",{worktreeId:a.worktreeId,instanceId:d,port:e,sessionId:g,messageId:i,hasImage:void 0!==c}),!1;return av.info("opencode-send-delivered-via-api",{worktreeId:a.worktreeId,instanceId:d,port:e,sessionId:g,messageId:i,hasImage:void 0!==c}),!0}catch(b){return av.warn("opencode-send-api-failed",{worktreeId:a.worktreeId,instanceId:d,error:(0,au.u1)(b)}),!1}}async verifyPostedMessage(a,b,c,d){for(let e of ax){e>0&&await new Promise(a=>setTimeout(a,e));let f=await (0,G.ep)(a,b,c);if("found"===f.kind)return f.texts.includes(d);if("missing"===f.kind)break}return!1}async sendMessage(a,b,c){let d=this.getSessionName(a,c);if(await this.requireSession("OpenCode",a,c,{relaunch:!0}),await this.trySendViaServer($(a,c),b))return void(0,i.gm)(d);try{await (0,h.FW)({sessionName:d,message:b,cliToolId:"opencode",composer:this.describeComposer()}),(0,i.gm)(d),av.info("sent-message-to-opencode-session")}catch(b){let a=(0,au.u1)(b);throw Error(`Failed to send message to OpenCode: ${a}`)}}supportsImage(){return!0}async sendMessageWithImage(a,b,c,d){let e=this.getSessionName(a,d);await this.requireSession("OpenCode",a,d,{relaunch:!1});let f=$(a,d);if(await this.trySendViaServer(f,b,c))return void(0,i.gm)(e);av.info("opencode-image-degraded-to-path",{worktreeId:a,instanceId:d??this.id}),await this.sendMessage(a,ay(b,c),d)}async killSession(a,b){let c=this.getSessionName(a,b),d=$(a,b),e=(0,W.hC)(d),g=await (0,ai.LQ)(d).catch(()=>null);g&&!g.captured&&av.info("opencode-session-capture-skipped",{sessionName:c,reason:g.skipped}),await ag(d);try{if(await (0,f.N)(c)){await (0,f.V1)(c,"/exit",!1),await new Promise(a=>setTimeout(a,al.pL)),await (0,f.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,al.KI));let a=await (0,ak.rY)({sessionAlive:()=>(0,f.N)(c),portAnswering:null===e?null:async()=>await (0,G.Ok)(e)!==null});a.ok||(av.warn("opencode-graceful-exit-postcondition-failed",{sessionName:c,reason:a.reason,...null!==e?{port:e}:{}}),await (0,f.fY)(c))}else await (0,f.fY)(c);(0,i.gm)(c),av.info("stopped-opencode-session")}catch(a){throw av.error("session:stop-failed",{error:(0,au.u1)(a)}),a}}async interrupt(a,b){let c=this.getSessionName(a,b);if(await af($(a,b))){(0,i.gm)(c),av.info("opencode-interrupt-aborted-via-api");return}await (0,f.ds)(c,"Escape"),await new Promise(a=>setTimeout(a,al.os)),await (0,f.ds)(c,"Escape"),(0,i.gm)(c),av.info("opencode-interrupt-sent")}constructor(...a){super(...a),this.id="opencode",this.name="OpenCode",this.command="opencode"}}},52112:(a,b,c)=>{c.d(b,{H:()=>f});var d=c(61789),e=c(70605);let f={composer:(0,e.lU)({isComposerRow:a=>d.lE.test((0,d._A)(a)),atBottom:({contentLines:a},b)=>!a.slice(b+1).some(a=>{let b=(0,d._A)(a);return d.Ly.test(b)||d.kT.test(b)})}),dialogTop:(0,e.uM)(a=>(0,d.dx)(a)?.start??-1),composerHidesDialogs:!0}},53554:(a,b,c)=>{function d(a){let b="[^\\S\\n]";return RegExp(`(?:^${b}*|\xb7${b}*|${b}{2})${a}(?:${b}\\([^()\\n]{1,32}\\))?(?:${b}*\xb7|${b}{2}|${b}*$)`,"i")}c.d(b,{h:()=>g});let e={key:"BTab",cycle:["default","plan","autopilot"],indicators:[{mode:"autopilot",pattern:d("autopilot")},{mode:"plan",pattern:d("plan(?:[^\\S\\n]mode)?")}],tailRows:2,noteId:null},f={claude:{key:"BTab",cycle:["auto","manual","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:/⏵⏵\s*accept edits on\b/},{mode:"auto",pattern:/⏵⏵\s*auto mode on\b/},{mode:"plan",pattern:/⏸\s*plan mode on\b/},{mode:"manual",pattern:/⏸\s*manual mode on\b/}],tailRows:3,noteId:null},"command-code":{key:"BTab",cycle:["default","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:/»\s*accept edits on\b/},{mode:"bypass",pattern:/»\s*permission bypass on\b/},{mode:"dont-ask",pattern:/»\s*don't-ask on\b/},{mode:"plan",pattern:/^[^\S\n]*plan mode\b/},{mode:"default",pattern:/\?\s+for\s+shortcuts\b/}],tailRows:4,noteId:null},codex:{key:"BTab",cycle:["default","plan"],indicators:[{mode:"plan",pattern:/\bPlan mode\s*\(shift\+tab to cycle\)/i}],tailRows:3,noteId:"codexModelCoupled"},copilot:e,antigravity:{key:"BTab",cycle:["default","accept-edits","plan"],indicators:[{mode:"accept-edits",pattern:d("accept-edits")},{mode:"plan",pattern:d("plan(?:[^\\S\\n]mode)?")}],tailRows:2,noteId:null},"opencode-v2":{key:"BTab",cycle:["build","plan"],indicators:[{mode:"build",pattern:/^[^\S\n]*┃[^\S\n]+Build[^\S\n]·[^\S\n]/},{mode:"plan",pattern:/^[^\S\n]*┃[^\S\n]+Plan[^\S\n]·[^\S\n]/}],tailRows:4,noteId:"opencodeAgentSwitch"}};function g(a){return f[a]??null}Object.keys(f)},58546:(a,b,c)=>{c.d(b,{R:()=>e});var d=c(47967);let e={composer:d.Z,dialogTop:(0,d.u)(/△ Permission required|┃\s*Questions\s*$/),composerHidesDialogs:!1}},58846:(a,b,c)=>{c.d(b,{j:()=>g});var d=c(94154),e=c(68652),f=c(70605);let g={composer:(0,f.W2)(a=>(0,d.p4)(a)?.openingSeparator??-1),dialogTop:(0,f.o6)({footer:e._,rule:/^─{10,}$/,maxRows:120}),composerHidesDialogs:!0}},61878:(a,b,c)=>{c.d(b,{h9:()=>p,Yc:()=>r,zJ:()=>q,j4:()=>s});var d=c(61789),e=c(68652),f=c(46423),g=c(52112),h=c(58846),i=c(85237),j=c(69130),k=c(83342),l=c(89021),m=c(58546);let n={claude:h.j,codex:i.YH,antigravity:g.H,"command-code":j.E,copilot:k.b,opencode:l.m,"opencode-v2":m.R};var o=c(70605);let p=15;function q(a,b){let c=(0,e.N)((0,d.aJ)(a)),g=c.split("\n"),h=g.length-1;for(;h>=0&&""===g[h].trim();)h--;let i=g.slice(0,h+1);return{raw:a,clean:c,lines:g,contentLines:i,liveRegion:(0,o.BA)(void 0===b?void 0:n[b],b??null,{raw:a,contentLines:i}),lastLines:i.slice(-p).join("\n"),thinkingLines:i.slice(-f.$).join("\n")}}function r(a,b){return a.liveRegion.tool===b?a.liveRegion:(0,o.BA)(n[b],b,{raw:a.raw,contentLines:a.contentLines})}function s(a,b){let c=r(a,b);return c===a.liveRegion?a:{...a,liveRegion:c}}},68652:(a,b,c)=>{c.d(b,{N:()=>h,_:()=>g});let d=/^(?:\s|\x1b\[[0-9;]*m)*Esc\s+to\s+cancel\s*[·•]\s*Tab\s+to\s+amend/i,e=/^(?:\s|\x1b\[[0-9;]*m)*Enter\s+to\s+select\b.*\bnavigate\b/i,f=/^\s*[>❯›]\s*(?:\d{1,2}[.)])?|esc\s+to\s+interrupt|[✻✽✶✢✳⦿◉●⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏]\s+.+…/i;function g(a){return d.test(a)||e.test(a)}function h(a){if(""===a)return"";let b=a.split("\n"),c=-1;for(let a=b.length-1;a>=0;a--)if(g(b[a])){c=a;break}let d=b;return c>=0&&(d=b.slice(c+1).some(a=>f.test(a))?b.slice(c+1):b.slice(0,c+1)),(function(a){let b=[],c=!1;for(let d of a){let a=""===d.trim();a&&c||(b.push(d),c=a)}for(;b.length>0&&""===b[b.length-1].trim();)b.pop();return b})(d).join("\n")}},69130:(a,b,c)=>{c.d(b,{E:()=>g});var d=c(61789),e=c(70605);let f=/^❯\s*\d{1,2}[.)]\s/,g={composer:(0,e.W2)(a=>{let b=(0,d.I$)(a);return b<0||f.test((0,d.aJ)(a[b+1]??""))?-1:b}),dialogTop:(0,e.o6)({footer:a=>/↑\/↓ navigate · enter select/.test(a),rule:/^─{10,}$/,maxRows:120}),composerHidesDialogs:!0}},70605:(a,b,c)=>{function d(a,b){return{tool:a,anchor:"none",startRow:0,composerAtBottom:!1,composerHidesDialogs:!1,lines:b}}function e(a,b,c){let{contentLines:e}=c;if(void 0===a)return d(b,e);let f=a.composer.locate(c);if(null!==f)return{tool:b,anchor:"composer",startRow:f.start,composerEndRow:f.end??f.start,composerAtBottom:f.atBottom??!0,composerHidesDialogs:a.composerHidesDialogs,lines:e.slice(f.start)};let g=a.dialogTop?.locate(c)??null;return null!==g?{tool:b,anchor:"dialog",startRow:g.start,composerAtBottom:!1,composerHidesDialogs:a.composerHidesDialogs,lines:e.slice(g.start)}:d(b,e)}function f(a,b){return b.isPrompt&&b.promptData?.type==="multiple_choice"&&a.composerAtBottom&&a.composerHidesDialogs}function g(a,b){return null!==b&&!!a.composerAtBottom&&("numbered"===b.answerMode||a.composerHidesDialogs)}function h(a){return{locate({contentLines:b}){let c=a(b);return c<0?null:{start:c,end:m(b),atBottom:!0}}}}function i(a){return{locate(b){let{contentLines:c}=b;for(let d=c.length-1;d>=0;d--)if(a.isComposerRow(c[d]))return{start:d,end:d,atBottom:a.atBottom(b,d)};return null}}}function j(a){return{locate({contentLines:b}){let c=a(b);return c<0?null:{start:c}}}}c.d(b,{$$:()=>g,BA:()=>e,Sx:()=>m,W2:()=>h,lU:()=>i,o6:()=>l,uM:()=>j,z8:()=>f});let k=/^\s*(?:[❯›>●]\s*)?1[.)]\s+\S/;function l(a){return j(b=>{let c=-1;for(let d=b.length-1;d>=0;d--)if(a.footer(b[d])){c=d;break}if(c<0)return -1;let d=Math.max(0,c-a.maxRows),e=-1;for(let a=c-1;a>=d;a--)if(k.test(b[a])){e=a;break}if(e<0)return -1;for(let c=e-1;c>=d;c--)if(a.rule.test(b[c].trimEnd()))return c;return -1})}function m(a){let b=a.length-1;for(;b>=0&&""===a[b].trim();)b--;return b}},70849:(a,b,c)=>{c.d(b,{LQ:()=>k,SW:()=>l});var d=c(72626),e=c(84574),f=c(33294),g=c(77634),h=c(27939);let i=(0,d.h)("lib/session/opencode-session-recall");async function j(a,b){let c=new Set,d=await (0,g.GP)(a,b);for(let b=0;b<3;b+=1){if(null===d)return null;if(null===d.parentId||c.has(d.parentId))break;c.add(d.parentId),i.debug("opencode-session-parent-hop",{from:d.id,to:d.parentId}),d=await (0,g.GP)(a,d.parentId)}return d}async function k(a){let b=a.instanceId??a.cliToolId,c=(0,e.hC)(a);if(null===c)return{captured:!1,skipped:"no-port"};let d=(0,f.getLastAgentEvent)(a.worktreeId,"opencode",a.instanceId)?.sessionId;if(!(0,h.jp)(d))return{captured:!1,skipped:"no-session-observed"};let g=await j(c,d);if(null===g)return{captured:!1,skipped:"session-unreadable"};if(null===g.directory)return{captured:!1,skipped:"no-directory"};let k=(0,e.U9)(a);return null!==k&&k!==g.directory?(i.warn("opencode-session-capture-directory-mismatch",{worktreeId:a.worktreeId,instanceId:b,expected:k,reported:g.directory}),{captured:!1,skipped:"directory-mismatch"}):(0,h.F_)(a,{sessionId:g.id,title:g.title,worktreePath:g.directory})?(i.info("opencode-session-captured",{worktreeId:a.worktreeId,instanceId:b,sessionId:g.id,viaParentOf:g.id===d?null:d}),{captured:!0,memory:{sessionId:g.id,title:g.title,worktreePath:g.directory,updatedAt:Date.now()}}):{captured:!1,skipped:"not-persisted"}}async function l(a){let b=(0,e.hC)(a),c=(0,f.getLastAgentEvent)(a.worktreeId,"opencode",a.instanceId)?.sessionId;if(null!==b&&(0,h.jp)(c)){let a=await j(b,c);if(null!==a)return a.id}return(0,h.KA)(a)?.sessionId??null}},72272:(a,b,c)=>{c.d(b,{t:()=>i});var d=c(72626),e=c(50474),f=c(25071),g=c(17287);let h=(0,d.h)("lib/hooks/permission-adjudication");async function i(a,b,d,j,k="event"){let l=b.instanceId??b.cliToolId,m={worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:l},{resolvePermissionRequest:n}=await Promise.all([c.e(3241),c.e(3718)]).then(c.bind(c,43241)),o=n(m,j),p="allow"===o.behavior?{kind:"allowOnce"}:{kind:"abstain"};if("abstain"===p.kind){let c=(0,e.y_)(a);c.safe||h.warn("permission-request-abstain-blocks-agent",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:l,toolName:j?.toolName??null,decisionId:d.id,reason:o.reason,consequence:c.summary,blocksForMs:c.blocksForMs})}let{delivery:q}=await (0,f.GW)(a,b,d,p),r=q?.delivered===!0,s=r&&a.capabilities.permissionReplyReleasesPrompt;return(0,g.nL)(b.worktreeId,b.cliToolId,b.instanceId,{decisionId:d.id,toolName:j?.toolName??null,behavior:"allow"===o.behavior?"allow":null,reason:o.reason,delivered:r,releasedPrompt:s,trigger:k,at:d.askedAt}),h.info("permission-decision-adjudicated",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:l,decisionId:d.id,toolName:j?.toolName??null,behavior:o.behavior,reason:o.reason,suppressedBy:o.suppressedBy,delivered:r,settled:s,trigger:k}),{decisionId:d.id,behavior:"allow"===o.behavior?"allow":null,reason:o.reason,delivered:r,settled:s}}},77634:(a,b,c)=>{c.d(b,{GP:()=>l,Hv:()=>h,eJ:()=>n,mf:()=>o,y4:()=>m,yg:()=>p});var d=c(72626),e=c(49791),f=c(27939);let g=(0,d.h)("lib/session/opencode-session-api"),h="session_new";function i(a,b){let c=a[b];return"string"==typeof c&&c.length>0?c:null}async function j(a,b){try{let c=await fetch(a,{...b,redirect:e.uS,signal:AbortSignal.timeout(e.T0)});if(!c.ok)return null;if(!function(a){let b=a.headers?.get?.("content-type");return"string"==typeof b&&b.split(";",1)[0]?.trim().toLowerCase()===e._t}(c))return g.debug("opencode-session-request-content-type",{url:a,contentType:c.headers?.get?.("content-type")??null}),null;return await c.json()}catch(b){return g.debug("opencode-session-request-failed",{url:a,error:b instanceof Error?b.message:String(b)}),null}}function k(a){if(!("object"==typeof a&&null!==a&&!Array.isArray(a)))return null;let b=i(a,"id");if(!(0,f.jp)(b))return null;let c=i(a,"title");return{id:b,title:null===c?null:c.slice(0,f.Y2),directory:i(a,"directory"),parentId:i(a,"parentID")}}async function l(a,b){return(0,f.jp)(b)?k(await j(`${(0,e.M2)(a)}/session/${encodeURIComponent(b)}`)):null}async function m(a,b){return(0,f.jp)(b)?k(await j(`${(0,e.M2)(a)}/session/${encodeURIComponent(b)}/fork`,{method:"POST",headers:{"content-type":e._t},body:"{}"})):null}async function n(a){return!0===await j(`${(0,e.M2)(a)}/tui/open-sessions`,{method:"POST",headers:{"content-type":e._t},body:"{}"})}async function o(a,b){return!0===await j(`${(0,e.M2)(a)}/tui/execute-command`,{method:"POST",headers:{"content-type":e._t},body:JSON.stringify({command:b})})}async function p(a,b){return!!(0,f.jp)(b)&&!0===await j(`${(0,e.M2)(a)}/tui/select-session`,{method:"POST",headers:{"content-type":e._t},body:JSON.stringify({sessionID:b})})}},78099:(a,b,c)=>{c.d(b,{Tl:()=>g});var d=c(56263),e=c(2669);let f={claude:"Install with: npm install -g @anthropic-ai/claude-code",codex:"Install with: npm install -g @openai/codex",gemini:"Install with: npm install -g @google/gemini-cli",opencode:"Install with: npm install -g opencode-ai",copilot:d.zt,"command-code":"Install with: npm install -g command-code","opencode-v2":"Install with: npm install -g @opencode/cli",antigravity:"Install the Antigravity CLI: https://antigravity.google/docs/cli/reference","vibe-local":"vibe-local is a local script rather than a published package: put your own `vibe-local` executable on PATH."};function g(a,b){var c,d;return new e.lU(a.name,(c=a,d=b,`${c.name} (${c.command}) is not installed or not in PATH. `+(d?`${d} `:"")+`${f[c.id]}`))}},83342:(a,b,c)=>{c.d(b,{b:()=>f});var d=c(61789),e=c(70605);let f={composer:(0,e.W2)(a=>(0,d.wv)(a)),dialogTop:(0,e.uM)(function(a){let b=(0,e.Sx)(a),c=-1;for(let d=b;d>=Math.max(0,b-2);d--)if(a[d].trimStart().startsWith("╰")){c=d;break}if(c<0)return -1;for(let b=c-1;b>=Math.max(0,c-120);b--)if(a[b].trimStart().startsWith("╭"))return b;return -1}),composerHidesDialogs:!1}},85237:(a,b,c)=>{c.d(b,{Bh:()=>j,Ut:()=>i,YH:()=>k});var d=c(61789),e=c(65912),f=c(94154),g=c(51297),h=c(70605);function i(a){for(let b=a.length-1;b>=Math.max(0,a.length-10);b--){let c=a[b];if(d.aW.test(c)||d.UO.test(c))return b}return -1}function j(a){let b=i(a),c=b>=0?b-1:a.length-1;for(;c>=0&&""===a[c].trim();)c--;return c+1}let k={composer:{locate({raw:a,contentLines:b}){let c=j(b),i=(0,e.Gs)(a,b,c),k=(0,d.RK)(b);if(k>=0)return{start:k,end:function(a,b,c,d){let e=a.split("\n"),h=(0,f.mO)(e);if(null===h||(0,g.aJ)(e[h.firstRow]).trim()!==b[c]?.trim())return c;let i=Math.min(c+(h.lastRow-h.firstRow),d-1);return Math.max(c,i)}(a,b,k,c),atBottom:i};if(!i)return null;let l=(0,h.Sx)(b.slice(0,c));return l<0?null:{start:l,end:l,atBottom:!0}}},composerHidesDialogs:!0}},89021:(a,b,c)=>{c.d(b,{m:()=>e});var d=c(47967);let e={composer:d.Z,dialogTop:(0,d.u)(/△ Permission required/),composerHidesDialogs:!1}},89731:(a,b,c)=>{c.d(b,{Mj:()=>E,Km:()=>F});var d=c(79646),e=c(28354),f=c(40964),g=c(79892),h=c(96463),i=c(56717),j=c(23365),k=c(53554),l=c(93949),m=c(91536),n=c(50945),o=c(78099);let p=new Set;var q=c(51297),r=c(87447),s=c(45567),t=c(72626),u=c(77093),v=c(8953),w=c(20610),x=c(16983),y=c(35583);let z=(0,e.promisify)(d.exec),A=(0,t.h)("cli-tools/base"),B=RegExp(`${s.ZM}=(?:'([^']*)'|"([^"]*)"|(\\S+))`,"g"),C=new Set,D=new Set;class E{async isInstalled(){try{return await z(`which ${this.command}`,{timeout:5e3}),!0}catch{return!1}}getSessionName(a,b){return(0,f.mf)(this.id,a,b)}async isRunning(a,b){let c=this.getSessionName(a,b);return await (0,g.N)(c)}async startSession(a,b,d,e){let f=(0,y.Hb)();try{await (0,y.PS)(f,()=>this.launchSession(a,b,d,e))}catch(b){var g;throw this.takeAdoptionMark(a,d),g={worktreeId:a,cliToolId:this.id,instanceId:d,toolName:this.name},Promise.all([c.e(1356),c.e(1191),c.e(3480)]).then(c.bind(c,81099)).then(({notifySessionStartFailurePush:a})=>a({...g,error:b})).catch(()=>{}),b}finally{(0,y.O5)(a,this.id,d,f)}let h=this.takeAdoptionMark(a,d);null!==h&&await this.warnIfHookUrlIsStale(a,h,d)}async reconcileExistingSession(a,b,c){await (0,h.St)(a,b),C.add(a),await (0,g.zT)(a,c)}takeAdoptionMark(a,b){try{let c=this.getSessionName(a,b);return C.delete(c)?c:null}catch{return null}}async warnIfHookUrlIsStale(a,b,d){if(!D.has(b))try{let f=await (0,g.Xg)(b,{startLine:-x.eu});D.add(b);let h=function(a){let b=null;for(let c of(0,q.aJ)(a).matchAll(B)){let a=c[1]??c[2]??c[3]??null;a&&(b=a)}return b}(f);if(null===h)return;let i=function(a){try{let b=new URL(a);if(""!==b.port)return Number(b.port);return"https:"===b.protocol?443:80}catch{return null}}(h),j=(0,r.D0)();if(null===i||i===j)return;A.warn("session:hook-url-stale",{cliToolId:this.id,sessionName:b,sessionPort:i,serverPort:j});var e={worktreeId:a,cliToolId:this.id,instanceId:d,toolName:this.name,sessionPort:i,serverPort:j};let k=[e.worktreeId,e.instanceId??e.cliToolId,e.sessionPort,e.serverPort].join(":");p.has(k)||(p.add(k),Promise.all([c.e(1356),c.e(1191),c.e(3480)]).then(c.bind(c,81099)).then(({notifyStaleHookUrlPush:a})=>a(e)).catch(()=>{}))}catch(b){A.debug("session:hook-url-probe-failed",{cliToolId:this.id,worktreeId:a,error:b instanceof Error?b.message:String(b)})}}async warnIfRunningSessionHookUrlIsStale(a,b){let c;try{c=this.getSessionName(a,b)}catch{return}await this.warnIfHookUrlIsStale(a,c,b)}async interrupt(a,b){let c=this.getSessionName(a,b);await (0,g.ds)(c,"Escape")}describeComposer(){return(0,i.gc)(this.id)}gracefulExitSequence(){return(0,l.JV)(this.id)}captureSpec(){return(0,j.y)(this.id)}livenessSpec(){return(0,m.H7)(this.id)}async isToolLive(a,b){let c=this.livenessSpec(),d=await (0,n.Q)(a,c);if(d.alive)return!0;if(!b?.confirm)return!1;await new Promise(a=>setTimeout(a,w.kZ));let e=await (0,n.Q)(a,c);return e.alive?(A.info("session:liveness-confirm-recovered",{cliToolId:this.id,firstReason:d.reason}),!0):(A.warn("session:tool-exited",{cliToolId:this.id,reason:e.reason}),!1)}async relaunchIfToolExited(a,b){let c=this.getSessionName(a,b);if(await this.isToolLive(c))return;let d=await (0,g.nS)(c);if(null===d)return void A.warn("session:relaunch-skipped-no-path",{cliToolId:this.id,worktreeId:a});A.info("session:relaunch-before-send",{cliToolId:this.id,sessionName:c}),await this.startSession(a,d,b)}async requireSession(a,b,c,d){let e=this.getSessionName(b,c);if(!await (0,g.N)(e))throw Error(`${a} session ${e} does not exist. Start the session first.`);d.relaunch&&await this.relaunchIfToolExited(b,c)}async requireInstalled(){if(!await this.isInstalled())throw(0,o.Tl)(this)}async resolveLaunchPane(a,b,c,d){let e=this.getSessionName(a,c),f=await (0,g.N)(e);if(f){if(await this.reconcileExistingSession(e,b),await this.isToolLive(e,{confirm:!0}))return d.logger.info(d.liveAction),{sessionName:e,exists:f,live:!0};d.logger.warn(d.relaunchAction,{sessionName:e})}return{sessionName:e,exists:f,live:!1}}async createLaunchPane(a,b){await (0,g.jw)({sessionName:a,workingDirectory:b}),await new Promise(a=>setTimeout(a,w.Uc))}async requestExitAndKill(a,b,c){let d=this.getSessionName(a,b);try{await (0,g.N)(d)&&await c.requestExit(d);let a=await (0,g.fY)(d);c.afterKill?.(d),a&&c.logger.info(c.stoppedAction)}catch(a){throw c.logger.error("session:stop-failed",{error:(0,u.u1)(a)}),a}}navigationKeys(){return{keys:v.qD,leaderKey:null}}agentModeSpec(){return(0,k.h)(this.id)}}function F(a,b,c){a instanceof E&&a.warnIfRunningSessionHookUrlIsStale(b,c).catch(()=>{})}},93949:(a,b,c)=>{c.d(b,{JV:()=>j,M0:()=>g,rY:()=>l});var d=c(56263),e=c(20610),f=c(86069);let g="/exit",h={keys:[(0,f.IS)("C-d")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},i={claude:h,codex:h,antigravity:h,gemini:{keys:[(0,f.IS)("C-c",e.Is),(0,f.iF)(`/quit\r`,void 0)],exitWaitMs:e.Zf,ownsLoopbackServer:!1},"vibe-local":{keys:[(0,f.IS)("C-c",e.Is),(0,f.IS)("C-c")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},copilot:{keys:[(0,f.IS)("C-c",e.Is),(0,f.iF)("/exit",d.L1),(0,f.IS)("Enter")],exitWaitMs:e.Rk,ownsLoopbackServer:!1},"command-code":{keys:[(0,f.iF)("/exit",e.pL),(0,f.IS)("Enter")],exitWaitMs:e.Zf,ownsLoopbackServer:!1},opencode:{keys:[(0,f.iF)("/exit",e.pL),(0,f.IS)("Enter")],exitWaitMs:e.KI,ownsLoopbackServer:!0},"opencode-v2":{keys:[(0,f.iF)(g,e.pL),(0,f.IS)("Enter")],exitWaitMs:e.Lw,ownsLoopbackServer:!0}};function j(a){return i[a]??h}let k=a=>new Promise(b=>setTimeout(b,a));async function l(a){let b=Math.max(1,a.attempts??1),c=a.intervalMs??0,d=a.sleep??k,e=!0;for(let f=0;f<b&&(e=await a.sessionAlive());f+=1)f<b-1&&c>0&&await d(c);if(e)return{ok:!1,reason:"graceful_exit_timeout"};let f=a.portAnswering;if(!f)return{ok:!0};let g=!0;for(let a=0;a<b&&(g=await f());a+=1)a<b-1&&c>0&&await d(c);return g?{ok:!1,reason:"port_orphaned"}:{ok:!0}}}};
|