commandmate 0.49.1 → 0.49.2
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 +128 -132
- package/.next/app-path-routes-manifest.json +22 -22
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- 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.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/route_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.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +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 +2 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/strict/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +3 -3
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +2 -2
- 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 +22 -22
- package/.next/server/chunks/1062.js +1 -0
- package/.next/server/chunks/110.js +1 -0
- package/.next/server/chunks/1501.js +5 -4
- package/.next/server/chunks/1656.js +2 -2
- package/.next/server/chunks/1957.js +2 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2897.js +1 -0
- package/.next/server/chunks/3417.js +1 -0
- package/.next/server/chunks/3505.js +1 -1
- package/.next/server/chunks/3756.js +1 -0
- package/.next/server/chunks/3801.js +3 -3
- package/.next/server/chunks/4911.js +1 -0
- package/.next/server/chunks/4936.js +1 -0
- package/.next/server/chunks/5209.js +2 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/7023.js +2 -2
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +15 -15
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8782.js +1 -1
- package/.next/server/chunks/9390.js +1 -1
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/chunks/9731.js +2 -2
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{2407-675ba6b21844dc3b.js → 2407-07a237575e1ceb9e.js} +1 -1
- package/.next/static/chunks/3931-61ad1a4fc0208d0e.js +1 -0
- package/.next/static/chunks/5794-7975b8e51e731b19.js +1 -0
- package/.next/static/chunks/6966-d8dc6032410ffaba.js +1 -0
- package/.next/static/chunks/7197-ed3b3d99ac3bd450.js +1 -0
- package/.next/static/chunks/7636-a48cf0f7110250c5.js +1 -0
- package/.next/static/chunks/app/layout-4f64316957b0a8e5.js +1 -0
- package/.next/static/chunks/app/more/page-ff5af5ca48774c89.js +1 -0
- package/.next/static/chunks/app/page-b4863bfe0452e09d.js +1 -0
- package/.next/static/chunks/app/review/page-ff3efb96fdf9bb4b.js +1 -0
- package/.next/static/chunks/app/sessions/{page-890fd50ec9739973.js → page-c6eb7c02db2f4c80.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/{page-f6d3ab8185d93aae.js → page-33afc6aa96289fb0.js} +1 -1
- package/.next/trace +13 -13
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +56 -5
- package/dist/cli/commands/attach.d.ts +4 -1
- package/dist/cli/commands/attach.d.ts.map +1 -1
- package/dist/cli/commands/attach.js +19 -7
- package/dist/cli/commands/command-target.d.ts +7 -0
- package/dist/cli/commands/command-target.d.ts.map +1 -1
- package/dist/cli/commands/command-target.js +10 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +38 -2
- package/dist/cli/commands/message-dispatch.d.ts +17 -3
- package/dist/cli/commands/message-dispatch.d.ts.map +1 -1
- package/dist/cli/commands/message-dispatch.js +14 -8
- package/dist/cli/commands/relays.d.ts +2 -1
- package/dist/cli/commands/relays.d.ts.map +1 -1
- package/dist/cli/commands/relays.js +4 -3
- package/dist/cli/commands/respond-strict.d.ts.map +1 -1
- package/dist/cli/commands/respond-strict.js +22 -5
- package/dist/cli/commands/respond.d.ts +2 -2
- package/dist/cli/commands/respond.d.ts.map +1 -1
- package/dist/cli/commands/respond.js +40 -37
- package/dist/cli/commands/send.d.ts.map +1 -1
- package/dist/cli/commands/send.js +8 -4
- package/dist/cli/commands/wait-instance.d.ts +9 -1
- package/dist/cli/commands/wait-instance.d.ts.map +1 -1
- package/dist/cli/commands/wait-instance.js +15 -0
- package/dist/cli/commands/wait-poll-state.d.ts +18 -0
- package/dist/cli/commands/wait-poll-state.d.ts.map +1 -1
- package/dist/cli/commands/wait-verify.d.ts +2 -1
- package/dist/cli/commands/wait-verify.d.ts.map +1 -1
- package/dist/cli/commands/wait-verify.js +5 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +37 -13
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +3 -1
- package/dist/cli/docs/agent-operations.d.ts +1 -1
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +1 -0
- package/dist/cli/types/api-responses.d.ts +3 -1
- package/dist/cli/types/api-responses.d.ts.map +1 -1
- package/dist/cli/utils/api-client.d.ts +55 -1
- package/dist/cli/utils/api-client.d.ts.map +1 -1
- package/dist/cli/utils/api-client.js +220 -18
- package/dist/cli/utils/follow-up-command.d.ts +38 -0
- package/dist/cli/utils/follow-up-command.d.ts.map +1 -0
- package/dist/cli/utils/follow-up-command.js +57 -0
- package/dist/cli/utils/reply-ledger.d.ts +1 -1
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.js +7 -2
- package/dist/cli/utils/server-capabilities.d.ts +18 -0
- package/dist/cli/utils/server-capabilities.d.ts.map +1 -1
- package/dist/cli/utils/server-capabilities.js +36 -3
- package/dist/cli/utils/session-target.d.ts +1 -1
- package/dist/cli/utils/session-target.d.ts.map +1 -1
- package/dist/cli/utils/session-target.js +3 -0
- package/dist/cli/utils/verify-runner.d.ts +7 -0
- package/dist/cli/utils/verify-runner.d.ts.map +1 -1
- package/dist/cli/utils/verify-runner.js +51 -15
- package/dist/lib/cli-tools/session-name.d.ts.map +1 -1
- package/dist/lib/cli-tools/session-name.js +11 -3
- package/dist/lib/session/send-attempt-types.d.ts +25 -0
- package/dist/lib/session/send-attempt-types.d.ts.map +1 -1
- package/dist/lib/session/send-attempt-types.js +10 -1
- package/dist/lib/verification/session-kill-ledger.d.ts +110 -0
- package/dist/lib/verification/session-kill-ledger.d.ts.map +1 -0
- package/dist/lib/verification/session-kill-ledger.js +174 -0
- package/dist/server/locales/en/worktree.json +2 -0
- package/dist/server/locales/ja/worktree.json +2 -0
- package/dist/server/src/config/cli-tool-timing-config.js +1 -7
- package/dist/server/src/lib/auto-yes-poller.js +5 -1
- package/dist/server/src/lib/cli-tools/antigravity.js +5 -2
- package/dist/server/src/lib/cli-tools/base.js +39 -0
- package/dist/server/src/lib/cli-tools/codex.js +7 -4
- package/dist/server/src/lib/cli-tools/command-code.js +7 -3
- package/dist/server/src/lib/cli-tools/copilot.js +5 -3
- package/dist/server/src/lib/cli-tools/gemini.js +10 -2
- package/dist/server/src/lib/cli-tools/launch-keys.js +39 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +6 -2
- package/dist/server/src/lib/cli-tools/opencode.js +5 -2
- package/dist/server/src/lib/cli-tools/session-name.js +11 -3
- package/dist/server/src/lib/cli-tools/submit-composer-read.js +16 -6
- package/dist/server/src/lib/cli-tools/submit-verified-sender.js +164 -7
- package/dist/server/src/lib/cli-tools/vibe-local.js +4 -2
- package/dist/server/src/lib/db/db-migration-path.js +63 -2
- package/dist/server/src/lib/detection/prompt-detect-multiple-choice.js +5 -4
- package/dist/server/src/lib/hooks/sources/copilot/hook-settings.js +2 -3
- package/dist/server/src/lib/prompt-answer-errors.js +76 -2
- package/dist/server/src/lib/session/agent-event-state.js +4 -0
- package/dist/server/src/lib/session/agent-session-lifecycle.js +6 -1
- package/dist/server/src/lib/session/claude-session.js +22 -6
- package/dist/server/src/lib/session/current-output-builder.js +5 -3
- package/dist/server/src/lib/session/current-output-history-writers.js +1 -1
- package/dist/server/src/lib/session/prompt-submit-receipt.js +155 -0
- package/dist/server/src/lib/session/prompt-waiting-guard.js +10 -3
- package/dist/server/src/lib/session/send-attempt-state.js +48 -0
- package/dist/server/src/lib/session/send-attempt-types.js +10 -1
- package/dist/server/src/lib/session/send-user-message.js +5 -4
- package/dist/server/src/lib/session/session-launch-flight.js +243 -0
- package/dist/server/src/lib/session/session-starting-state.js +40 -4
- package/dist/server/src/lib/session/structured-prompt.js +12 -9
- package/dist/server/src/lib/session/waiting-episode-binding.js +4 -2
- package/dist/server/src/lib/session-cleanup.js +32 -0
- package/dist/server/src/lib/session-key-sender.js +0 -27
- package/dist/server/src/lib/verification/env-clean-gate.js +129 -0
- package/dist/server/src/lib/verification/env-snapshot.js +11 -2
- package/dist/server/src/lib/verification/session-kill-ledger.js +174 -0
- package/package.json +5 -1
- package/release-notes/0.49.2.json +49 -0
- package/.next/server/chunks/3773.js +0 -1
- package/.next/server/chunks/5775.js +0 -1
- package/.next/server/chunks/7604.js +0 -2
- package/.next/static/chunks/3931-1a1abab16248f14d.js +0 -1
- package/.next/static/chunks/4768-ad6f82f034f21eae.js +0 -1
- package/.next/static/chunks/5794-80ac3f06f098ea29.js +0 -1
- package/.next/static/chunks/6654-f3534f35f16644bc.js +0 -1
- package/.next/static/chunks/7665-e9ef6e0a85b9fa49.js +0 -1
- package/.next/static/chunks/8606-ce17ffa77f39608e.js +0 -1
- package/.next/static/chunks/app/layout-8bfac4724277b47f.js +0 -1
- package/.next/static/chunks/app/more/page-87c84987b2765213.js +0 -1
- package/.next/static/chunks/app/page-1b820c421db48c2c.js +0 -1
- package/.next/static/chunks/app/review/page-e2fd4a590646a2d8.js +0 -1
- /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → yGatWDsS532awSs51kXyd}/_buildManifest.js +0 -0
- /package/.next/static/{fqfSDqQMweROeHUzOt_m1 → yGatWDsS532awSs51kXyd}/_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:()=>a6});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(381),j=c(93997),k=c(42422),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(69130),w=c(77093),x=c(49973);let y=(0,q.h)("cli-tools/codex"),z="codex";function A(){return{screen:null,attempts:0}}class B 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:y,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)}),y.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=A(),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=(0,x.TO)(),t=await (0,h.Xg)(a,50),v=(0,k.aJ)(t),w=(0,k.E6)(v);if(("hooks-review"===w||"hooks-list"===w||"hooks-detail"===w)&&await this.answerCodexHooksScreen(a,w,f,c,s)){await new Promise(a=>setTimeout(a,u.CV));continue}if((0,k.zZ)(v))return void y.info("codex-prompt-detected");if(j&&!m&&b?.relaunch&&null!==(0,l.GE)(v,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)(z),y.info("codex-update-lock-released",{sessionName:a})),y.info("codex-relaunched-after-update",{sessionName:a,policy:g}),await b.relaunch();continue}let A=(0,k.Qh)(v);if("update"===A){if(j=!0,null===i){await new Promise(a=>setTimeout(a,1e3));continue}if(!d){let b=i;b!==n.update||(0,p.mf)(z)?b===n.update&&(q=!0):(b=n["skip-until-next-version"],y.warn("codex-update-dialog-yielded-to-running-update",{sessionName:a,policy:g,requestedKey:i,key:b}));let c=b,e=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"update"),()=>(0,h.V1)(a,c,!1));if(!e.answered){q&&(q=!1,(0,p.lM)(z)),y.info("codex-update-dialog-answer-skipped",{sessionName:a,reason:e.reason});continue}d=!0,b===n.update&&(r=Math.max(r,o+1+120)),y.info("codex-update-dialog-answered",{sessionName:a,policy:g,key:b}),await new Promise(a=>setTimeout(a,u.CV));continue}}if("press-enter"===A){let b=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"press-enter"),()=>(0,h.ds)(a,"Enter"));if(!b.answered){y.info("codex-notification-answer-skipped",{sessionName:a,reason:b.reason});continue}y.info("dismissed-codex-notification"),await new Promise(a=>setTimeout(a,u.CV));continue}if("trust"===A&&!e){let b=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"trust"),()=>(0,h.V1)(a,"1",!1));if(!b.answered){y.info("codex-trust-dialog-answer-skipped",{sessionName:a,reason:b.reason});continue}e=!0,y.info("auto-trusted-folder-for-codex"),await new Promise(a=>setTimeout(a,u.CV));continue}}catch{}await new Promise(a=>setTimeout(a,1e3))}y.info("codex-prompt-detection")}finally{q&&(q=!1,(0,p.lM)(z),y.warn("codex-update-lock-released-unfinished",{sessionName:a}))}}async isActiveDialogStill(a,b){return(0,k.Qh)((0,k.aJ)(await (0,h.Xg)(a,50)))===b}async answerCodexHooksScreen(a,b,c,d,e){if(c.screen!==b&&(c.screen=b,c.attempts=0),c.attempts>=3)return y.warn("codex-hooks-screen-unresponsive",{sessionName:a,screen:b,trust:d}),!1;let f=c.attempts+1,g=await (0,x.x7)(a,e,async()=>(0,k.E6)((0,k.aJ)(await (0,h.Xg)(a,50)))===b,()=>this.sendCodexHooksScreenKey(a,b,f,d));return g.answered?c.attempts=f:y.info("codex-hooks-screen-answer-skipped",{sessionName:a,screen:b,reason:g.reason}),!0}async sendCodexHooksScreenKey(a,b,c,d){if("hooks-review"===b){let b=1===c?d?"2":"3":"1";await (0,h.V1)(a,b,!1),y.info("codex-hooks-review-answered",{sessionName:a,key:b,attempt:c,trust:d});return}if(d){await (0,h.V1)(a,"t",!1,{literal:!0}),y.info("codex-hooks-screen-trusted",{sessionName:a,screen:b,attempt:c});return}await (0,h.ds)(a,"Escape"),y.info("codex-hooks-screen-escaped",{sessionName:a,screen:b,attempt:c})}async waitForPrompt(a){let b=Date.now(),c=A(),d=null;for(;Date.now()-b<15e3;){try{let b=(0,x.TO)(),e=await (0,h.Xg)(a,50),f=(0,k.aJ)(e),g=(0,k.E6)(f);if("hooks-review"===g||"hooks-list"===g||"hooks-detail"===g){if(null===d){let b=await (0,h.nS)(a);d=null!==b&&(0,s.dO)(b)}await this.answerCodexHooksScreen(a,g,c,d,b)}else if((0,k.zZ)(f))return}catch{}await new Promise(a=>setTimeout(a,500))}throw y.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),y.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:y,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 C=c(23365),D=c(76877),E=c(48217);let F=(0,q.h)("cli-tools/gemini");class G 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:F,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});(0,E.du)(d);try{await (0,x.hC)(d,()=>(0,h.V1)(d,(0,v.Y)(f),!0)),await new Promise(a=>setTimeout(a,6e3)),await this.waitForReady(d)}finally{(0,E.FG)(d)}F.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,c=null,d=new Set;for(let e=0;e<30;e++){try{let e=(0,x.KC)(),f=await (0,h.Xg)(a,C.H),g=(0,k.aJ)(f);if(k.wN.test(g))return void F.info("gemini-prompt-detected");if(!b){let f=(0,D.CZ)(D.g1,g);if("press"===f.action){let d=await (0,x.x7)(a,e,async()=>{let b=(0,D.CZ)(D.g1,(0,k.aJ)(await (0,h.Xg)(a,C.H)));return"press"===b.action&&b.key===f.key},()=>(0,h.ds)(a,f.key),{mode:"exclusive"});d.answered?(b=!0,c=Date.now(),(0,E._F)(a,c),F.info("auto-trusted-folder-for-gemini")):F.info("gemini-trust-answer-skipped",{sessionName:a,reason:d.reason})}else{let b=(0,D.oy)(D.g1,f);b&&"absent"!==f.action&&!d.has(f.reason)&&(d.add(f.reason),F.warn(b.event,{sessionName:a,...b.fields}))}}}catch(b){F.debug("gemini-ready-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}await new Promise(a=>setTimeout(a,1e3))}if(null!==c){let a=5e3-(Date.now()-c);a>0&&await new Promise(b=>setTimeout(b,a))}F.info("gemini-prompt-detection")}async waitForPrompt(a){let b=Date.now();for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,C.H),c=(0,k.aJ)(b);if(k.wN.test(c))return}catch(b){F.debug("gemini-prompt-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}await new Promise(a=>setTimeout(a,500))}F.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),F.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:F,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 H=c(15194),I=c(88807),J=c(56791);let K=(0,q.h)("cli-tools/vibe-local");class L 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:K,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,I.getDbInstance)(),d=(0,J.getWorktreeById)(b,a);d?.vibeLocalModel&&H.QP.test(d.vibeLocalModel)&&(c+=` -m ${d.vibeLocalModel}`);let e=d?.vibeLocalContextWindow;(0,H.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)),K.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),K.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:K,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 M=c(49319),N=c(87673),O=c(81776),P=c(56263),Q=c(21758),R=c(54633),S=c(78099);let T=(0,q.h)("cli-tools/copilot"),U=new Set(["model","agent","theme","permissions","skills","mcp","settings","statusline","subagents","resume","session"]),V=/^[>❯](?:\s|$)/,W=/^\s*\S\s+Loading:/;function X(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 Y(a,b){if(!a.isCurrent())throw Error(`Session ${a.sessionName} was handed to another writer before ${b}; input lock lost, nothing was typed (Issue #3945).`)}async function Z(a,b,c){try{await (0,h.V1)(a,b,!0)}catch(a){throw a?.delivery!=="not-started"&&(0,x.kJ)(c),a}}function $(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 _ extends d.Mj{async isInstalled(){return await (0,O.B0)()!==null}launchExecutable(a){return"path"===a.source?this.command:Q.nL}async launchSession(a,b,c){let d=await (0,O.B0)();if(!d)throw(0,S.Tl)(this);let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:T,liveAction:"copilot-session-exists",relaunchAction:"copilot-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:R.V,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:R.V,instanceId:c},executablePath:this.launchExecutable(d),worktreePath:b});f||await this.createLaunchPane(e,b),(0,E.du)(e);try{await (0,h.V1)(e,(0,v.Y)(g),!0),await this.waitForReady(e)}finally{(0,E.FG)(e)}T.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,c){if(!(0,k.Rx)(b))return!1;let d=await (0,x.x7)(a,c,async()=>(0,k.Rx)((0,k.aJ)(await (0,h.Xg)(a,50))),()=>(0,h.V1)(a,k.oD,!1));return d.answered?((0,E._F)(a),(0,j.gm)(a),T.info("copilot-folder-trust-answered"),!0):(T.info("copilot-folder-trust-answer-skipped",{reason:d.reason}),!1)}isComposerDrawn(a){let b=a.split("\n");for(let a=1;a<b.length-1;a++)if(V.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=(0,x.TO)(),d=await (0,h.Xg)(a,50),e=(0,k.aJ)(d);if(this.isComposerDrawn(e))return void T.info("copilot-prompt-detected");!b&&await this.answerFolderTrustDialog(a,e,c)&&(b=!0)}catch{}await new Promise(a=>setTimeout(a,1e3))}T.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=(0,x.TO)(),d=await (0,h.Xg)(a,50);if(f=(0,k.aJ)(d),this.isReadyFor(c,f))return{ready:!0,output:f};!e&&await this.answerFolderTrustDialog(a,f,b)&&(e=!0)}catch{}await new Promise(a=>setTimeout(a,500))}return T.info("copilot-prompt-not-detected",{until:c,bottomRow:$(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 W.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 T.info("copilot-selection-list-detected"),!0}catch{}}return T.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{let a=this.extractSlashCommand(b);if(a&&U.has(a)){await (0,x.hC)(d,async c=>{await (0,x.KA)(c);let e=await this.waitForPrompt(d);if(await (0,N.H0)(d,"copilot"),!e.ready)throw T.warn("copilot-selection-list-not-sent:prompt-not-ready",{command:a,bottomRow:$(e.output)}),Error("copilot prompt not ready within 15000ms, so the selection-list command was not sent; nothing was typed");Y(c,"the selection-list command"),(0,x.dy)(),await Z(d,b,c),await this.waitForSelectionList(d)}),(0,j.gm)(d),T.info("sent-selection-list-command-to-copilot",{command:a});return}await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"copilot",composer:this.describeComposer(),textInputWaitMs:P.L1,verifyDelayMs:P.wp}),(0,j.gm)(d),T.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{await (0,x.hC)(d,a=>this.switchModelUnderInputLock(d,b,a))}catch(d){let a=(0,w.u1)(d),c=d?.code;throw Object.assign(Error(`Failed to switch Copilot model to ${b}: ${a}`),"string"==typeof c?{code:c}:{})}}async switchModelUnderInputLock(a,b,c){await (0,x.KA)(c);let d=await this.waitForPrompt(a,P.pL,"idle");if(!d.ready)throw T.warn("copilot-model-switch-not-idle",{model:b,bottomRow:$(d.output)}),Error(`copilot did not become idle within ${P.pL}ms, so /model was not sent`);let e=X(d.output,b);await (0,N.H0)(a,"copilot"),Y(c,"/model"),await Z(a,`/model ${b}`,c);let f=await this.waitForModelSwitchOutcome(a,b,e);if((0,j.gm)(a),"rejected"===f.kind)throw T.warn("copilot-model-rejected",{model:b,reason:f.reason}),Error(`copilot refused it: ${f.reason}`);if("pending"===f.kind)throw T.warn("copilot-model-switch-unconfirmed",{model:b,bottomRow:f.bottomRow}),Error(`copilot printed no answer to /model within ${P.pL}ms; the switch may still take effect, and nothing further was typed`);T.info("copilot-model-switched",{model:b})}async waitForModelSwitchOutcome(a,b,c){let d=Date.now(),e="";for(;Date.now()-d<P.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=X(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:$(e)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:T,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,P.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 aa=c(61878),ab=c(69082),ac=c(83406);let ad=(0,q.h)("cli-tools/antigravity"),ae=/\?\s+for\s+shortcuts/;function af(a){if(null===a)return{screen:"no-capture",screenTail:[]};let b=(0,k.aJ)(a).split("\n").map(a=>a.trimEnd()).filter(a=>""!==a.trim()),c=(0,aa.zJ)(a,"antigravity").lastLines;return{screen:0===b.length?"blank":(0,ab.VI)(c)?"trust-dialog":ah(a)?"ready":"other",screenTail:b.slice(-5).map(a=>a.slice(0,160))}}function ag(a,b,c){let d=(0,D.oy)(D.z0,b);!d||"absent"===b.action||"press"===b.action||c.has(b.reason)||(c.add(b.reason),ad.warn(d.event,{sessionName:a,...d.fields}))}function ah(a){let b=(0,aa.zJ)(a,"antigravity");if(k.kT.test(b.lastLines)||ab.wf.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&&(!!ae.test(c)||!(0,k.ut)("antigravity",b.lastLines))}class ai 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:ad,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),(0,ac.zu)(e);try{await (0,h.V1)(e,(0,v.Y)(i),!0),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(e)}finally{(0,ac.F1)(e)}ad.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;(0,ac.R6)(a);let c=!1,d=new Set,e=null,f=0;for(let g=0;g<30;g++){try{let b=(0,x.TO)(),f=await (0,h.Xg)(a,50),g=(0,k.aJ)(f);if(e=f,ah(g))return void ad.info("antigravity-prompt-detected");if(!c){let e=(0,D.CZ)(D.z0,g);if("press"===e.action&&!(0,ac.jI)(a)){let d=e.key,f=await (0,x.x7)(a,b,()=>this.isTrustPressStill(a,d),()=>(0,h.ds)(a,d));if(f.answered){c=!0,ad.info("auto-trusted-folder-for-antigravity"),await new Promise(a=>setTimeout(a,500));continue}ad.info("antigravity-trust-answer-skipped",{sessionName:a,reason:f.reason})}ag(a,e,d)}}catch(a){f++,b=(0,w.u1)(a)}await new Promise(a=>setTimeout(a,1e3))}c||(0,ac.Qn)(a),ad.info("antigravity-prompt-detection-timeout",{sessionName:a,attempts:30,trustDialogHandled:c,...c?{}:{reason:"startup-trust-unhandled"},...af(e),captureErrors:f,...void 0!==b?{lastCaptureError:b}:{}})}async isTrustPressStill(a,b){let c=(0,k.aJ)(await (0,h.Xg)(a,50)),d=(0,D.CZ)(D.z0,c);return"press"===d.action&&d.key===b}async waitForPrompt(a){let b,c=Date.now(),d=c+((0,ac.Dc)(a)?6e4:15e3),e=new Set,f=null,g=0;for(;Date.now()<d;){try{let b=(0,x.TO)(),c=await (0,h.Xg)(a,50),g=(0,k.aJ)(c);if(f=c,ah(g))return void(0,ac.R6)(a);let i=(0,ab.VI)((0,aa.zJ)(g,"antigravity").lastLines)?(0,D.CZ)(D.z0,g):null;null!==i&&"press"!==i.action&&(0,ac.Dc)(a)&&ag(a,i,e);let j=i?.action==="press"?i.key:null,l=null!==j&&(0,ac.Dc)(a)?await (0,x.x7)(a,b,()=>this.isTrustPressStill(a,j),async()=>!!(0,ac.qT)(a)&&(await (0,h.ds)(a,j),!0)):null;if(null===l||l.answered||ad.info("antigravity-trust-answer-skipped",{sessionName:a,reason:l.reason,afterLaunchWindow:!0}),l?.answered===!0&&l.value){ad.info("auto-trusted-folder-for-antigravity",{sessionName:a,afterLaunchWindow:!0}),d=Math.max(d,Date.now()+15e3),await new Promise(a=>setTimeout(a,500));continue}}catch(a){g++,b=(0,w.u1)(a)}await new Promise(a=>setTimeout(a,500))}let i=(0,ac.Dc)(a),j=af(f);ad.info("antigravity-prompt-not-ready",{sessionName:a,waitedMs:Date.now()-c,...i?{reason:"startup-trust-unhandled"}:{},...j,captureErrors:g,...void 0!==b?{lastCaptureError:b}:{}});let l="trust-dialog"===j.screen?' (the folder-trust confirmation "Do you trust the contents of this project?" is on screen and needs an answer)':i?" (startup-trust-unhandled: agy had not shown its folder-trust confirmation when the launch window ended, and it has not appeared since)":"";throw Error(`Antigravity prompt not ready: timed out waiting for the input prompt before sending${l}`)}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),ad.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:ad,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),(0,ac.R6)(a)}})}constructor(...a){super(...a),this.id="antigravity",this.name="Antigravity CLI",this.command="agy"}}var aj=c(7321),ak=c(28862),al=c(35566),am=c(2669);let an=(0,q.h)("cli-tools/command-code"),ao=["--trust","--skip-onboarding","--no-auto-update"];function ap(a){let b=a.split("\n");return!(0>(0,k.I$)(b))&&!k.k0.test((0,k.aJ)(a))}class aq 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:an,liveAction:"command-code-session-exists",relaunchAction:"command-code-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:ak.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:ak.k,instanceId:c},executablePath:this.command,worktreePath:b},[(0,t.wK)(g),...ao].join(" "))),!0),await new Promise(a=>setTimeout(a,u.yO)),await this.waitForReady(d),an.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(ap(b)){this.composerPendingSince.delete(a),an.info("command-code-prompt-detected");return}}catch{}await new Promise(a=>setTimeout(a,1e3))}an.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,al.V)(c))&&ap(c))return void this.composerPendingSince.delete(a)}catch{}if((c=b?c+1:0)>=2)throw an.info("command-code-plan-review-blocks-send",{sessionName:a}),Object.assign(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).'),{code:aj.Le});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 an.info("command-code-session-still-starting",{sessionName:a,sinceLaunchMs:b}),new am.Sr(this.name,a,b);this.composerPendingSince.delete(a)}throw an.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),an.info("sent-message-to-command-code-session")}catch(b){if((0,am.wQ)(b))throw b;let a=Error(`Failed to send message to Command Code: ${(0,w.u1)(b)}`);if(b?.code===aj.Le)throw Object.assign(a,{code:aj.Le});throw a}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:an,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 ar=c(79646),as=c(28354),at=c(16983),au=c(46684),av=c(34114),aw=c(62887),ax=c(72272),ay=c(49154),az=c(40255),aA=c(95375),aB=c(27870),aC=c(57510),aD=c(90488),aE=c(51719),aF=c(83738),aG=c(26945),aH=c(38892),aI=c(16100),aJ=c(71193);let aK=(0,q.h)("lib/hooks/sources/opencode-v2/ingest");async function aL(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(6486),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void aK.info("opencode-v2-stop-unresolved-target",{worktreeId:a.worktreeId});await f(g,h,aJ.B,b)}async function aM(a,b,c){let d=(0,aG.bH)(a),e=(0,aH.X3)(a);if(null===d||null===e)return null;let f=await (0,av.$F)(d,e,b),g=f?.find(a=>(0,aC.Qd)(a)&&a.id===c);return(0,aC.Qd)(g)?g:null}async function aN(a,b,c){let d=(0,aF.hl)(b.raw,b.receivedAt);if(!d)return aK.info("opencode-v2-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let e=await (0,ax.t)(aI.Wp,a,d,aI.Wp.parsePermissionRequest(b.raw));return aK.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 aO(a,b,c){let d=(0,aF.rk)(b.raw);if(d)return d;let e=(0,aE.DH)(b.raw),f=(0,aE.lx)(b.raw);if(null===e||null===f)return null;let g=await c(a,f,e);return g?(0,aF.rk)(g):null}async function aP(a,b,c=aL,d=aM){let e=a.instanceId??aJ.B;try{let f=(0,aA.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:aJ.B,instanceId:e,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:aI.Wp.eventIdentityOf(b.raw),identityKind:aI.Wp.capabilities.eventIdentity});if(f.duplicate)return void aK.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,aw.h9)??null,sessionId:b.conversationId,message:null,model:b.model},h={sessionStartMayArriveLate:!1};if("notification"===b.event&&b.detail===aE.xz){g.decisionId=(0,aE.DH)(b.raw);let c=(0,aF.vF)(b.raw);g.toolName=c?.toolName??(0,aE.Dg)(b.raw),g.decisionPatterns=c?.patterns??null,g.message=(0,aF.s8)(b.raw)?.slice(0,aB.lY)??null,g.promptSettled=await aN(a,b,e),(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h)}else if("notification"===b.event&&b.detail===aE.er)g.decisionId=(0,aE.DH)(b.raw),g.promptSettled=!0,(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),g.decisionId&&(0,az.L0)({worktreeId:a.worktreeId,cliToolId:aJ.B,instanceId:e},g.decisionId);else if("notification"===b.event&&b.detail===aE.Ai){let c=await aO(a,b,d);g.message=c?.questions[0]?.question.slice(0,aB.lY)??null,(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),c&&(0,aA.recordAskUserQuestion)(a.worktreeId,aJ.B,e,c,b.receivedAt),(0,aA.reportQuestionPending)(a.worktreeId,aJ.B,e,{toolName:ay.GF,decisionId:(0,aE.DH)(b.raw),detail:aE.Ai},b.receivedAt),aK.info("opencode-v2-question-recorded",{worktreeId:a.worktreeId,instanceId:e,decisionId:(0,aE.DH)(b.raw),parsed:null!==c,questionCount:c?.questions.length??0}),await (0,aD.Vo)(a,e,g.message,b.receivedAt)}else"stop"===b.event?(b.detail===aE.dA&&(g.message=(0,aE.ZL)(b.raw)?.slice(0,aB.lY)??null,aK.error("opencode-v2-turn-failed",{worktreeId:a.worktreeId,instanceId:e,sessionId:b.conversationId,message:g.message})),(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),await c(a,e)):(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h);aK.info("opencode-v2-event-received",{worktreeId:a.worktreeId,instanceId:e,type:(0,aE.Cr)(b.raw),event:b.event,detail:b.detail})}catch(c){aK.error("opencode-v2-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:e,event:b.event,error:c instanceof Error?c.message:String(c)})}}var aQ=c(32301);let aR=(0,q.h)("lib/hooks/sources/opencode-v2/runtime"),aS=[0,500,1e3,2e3];function aT(a,b){return{worktreeId:a,cliToolId:aJ.B,instanceId:b}}function aU(a){return a instanceof Error?a.message:String(a)}async function aV(a,b){try{let c=await (0,aG.ui)(a,b);if(null===c)return null;return(0,aH.OC)(a),c}catch(b){return aR.warn("opencode-v2-server-reserve-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),null}}async function aW(a,b){let c=(0,aH.X3)(a);return null!==c&&"healthy"===(await (0,av.tJ)(b,c)).kind}async function aX(a){try{let b=(0,aG.bH)(a);if(null===b)return!1;if((0,aQ.yw)(a))return!0;let c=!1;for(let d of aS)if(d>0&&await new Promise(a=>setTimeout(a,d)),await aW(a,b)){c=!0;break}if(!c)return aR.info("opencode-v2-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!1;return await aI.Wp.subscribe(a,b=>{aP(a,b)}),aR.info("opencode-v2-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!0}catch(b){return aR.warn("opencode-v2-event-stream-attach-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),!1}}async function aY(a,b){try{if((0,aQ.yw)(a))return!0;let c=await (0,aG.Lv)(a,b,b=>aW(a,b));if(null===c)return!1;return await aX(a)}catch(b){return aR.warn("opencode-v2-event-stream-resume-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),!1}}async function aZ(a){try{await (0,aQ.VV)(a)}catch(b){aR.warn("opencode-v2-subscription-close-failed",{worktreeId:a.worktreeId,error:aU(b)})}try{(0,aG.OZ)(a)}catch(b){aR.warn("opencode-v2-port-forget-failed",{worktreeId:a.worktreeId,error:aU(b)})}try{(0,aH.Nc)(a)}catch(b){aR.warn("opencode-v2-password-remove-failed",{worktreeId:a.worktreeId,error:aU(b)})}}var a$=c(93949),a_=c(18140);let a0=(0,q.h)("cli-tools/opencode-v2"),a1=(0,as.promisify)(ar.execFile),a2=at.xT,a3=/^\/\S+$/,a4=[...e.qD,e.Mx,...e.TM,"a","l","m"];class a5 extends d.Mj{navigationKeys(){return{keys:a4,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,a_.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=aT(a,c);if((0,aQ.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 aY(d,a)}catch(a){a0.debug("opencode-v2-lazy-resume-failed",{error:(0,w.u1)(a)})}})())}async launchSession(a,b,c){let d=(await (0,a_.Qq)()).executable;if(!d)throw(0,S.Tl)(this);let e=this.getSessionName(a,c),f=aT(a,c),g={windowWidth:(0,au.r)({warnSidebar:!1}),windowHeight:at.xT},i=await (0,h.N)(e);if(i){if(await this.reconcileExistingSession(e,b,g),await this.isToolLive(e,{confirm:!0})){await aY(f,b),a0.info("opencode-v2-session-exists");return}a0.warn("opencode-v2-session-relaunch",{sessionName:e}),await aZ(f)}(0,t.Fq)(f);try{i||await this.createLaunchPane(e,b);try{await a1("tmux",["resize-window","-t",(0,h.lA)(e),"-x",String(g.windowWidth),"-y",String(g.windowHeight)])}catch{}let j=await aV(f,b);null===j&&a0.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 aX(f),a0.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,a2));if((0,k.Ok)(c))return a0.info("opencode-v2-composer-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return a0.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,a2));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:a3.test(b)?`${b} `:b,cliToolId:aJ.B,composer:this.describeComposer()}),(0,j.gm)(d),a0.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=aT(a,b),e=(0,aG.bH)(d);try{if(await (0,h.N)(c)){await (0,h.V1)(c,a$.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,a$.rY)({sessionAlive:()=>(0,h.N)(c),portAnswering:null===e?null:async()=>"unreachable"!==(await (0,av.tJ)(e,"")).kind});a.ok||(a0.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),a0.info("stopped-opencode-v2-session")}catch(a){throw a0.error("session:stop-failed",{error:(0,w.u1)(a)}),a}finally{await aZ(d)}}constructor(...a){super(...a),this.id=aJ.B,this.name="OpenCode V2",this.command=aJ.V,this.resumeAttemptedAt=new Map}}class a6{constructor(){this.tools=new Map,this.tools.set("claude",new g),this.tools.set("codex",new B),this.tools.set("gemini",new G),this.tools.set("vibe-local",new L),this.tools.set("opencode",new M.Ui),this.tools.set("copilot",new _),this.tools.set("antigravity",new ai),this.tools.set("command-code",new aq),this.tools.set("opencode-v2",new a5)}static getInstance(){return a6.instance||(a6.instance=new a6),a6.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(1601),c.e(8918),c.e(610),c.e(1656),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)}}},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(91478);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}},48217:(a,b,c)=>{c.d(b,{FG:()=>h,_F:()=>j,du:()=>g,mN:()=>i,to:()=>k});var d=c(36925);let e=(0,d.v)("__launchWindows",()=>new Map),f=(0,d.v)("__launchDialogPresses",()=>new Map);function g(a){e.set(a,(e.get(a)??0)+1),f.delete(a)}function h(a){let b=e.get(a)??0;b<=1?e.delete(a):e.set(a,b-1)}function i(a){return e.has(a)}function j(a,b=Date.now()){f.set(a,b)}function k(a,b=Date.now()){let c=f.get(a);return void 0!==c&&b-c<3e4}},49319:(a,b,c)=>{c.d(b,{Ui:()=>aB,TZ:()=>aA});var d=c(89731),e=c(8953),f=c(79892),g=c(42422),h=c(381),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(40255),L=c(95375),M=c(27870),N=c(57510),O=c(70096),P=c(75356),Q=c(98211),R=c(90488),S=c(85322);let T=(0,n.h)("lib/hooks/sources/opencode/ingest");async function U(a,b,c){let d=(0,O.VM)(S.k),e=(0,Q.Lu)(b.raw,b.receivedAt);if(!e)return T.info("opencode-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let f=await (0,I.t)(d,a,e,d.parsePermissionRequest(b.raw));return T.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 V(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(6486),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void T.info("opencode-stop-unresolved-target",{worktreeId:a.worktreeId});let i=await f(g,h,S.k,b);T.info("opencode-stop-applied",{worktreeId:a.worktreeId,instanceId:b,taskId:i.taskId,taskEventApplied:i.taskEventApplied,verificationRunId:i.verificationRunId})}async function W(a,b){let c=a.instanceId??S.k;try{let d=(0,O.VM)(S.k),e=(0,L.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:S.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 T.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,N.Qd)(a.raw.properties)?a.raw.properties:{};if(a.detail===P.aF)return(0,N.NZ)(b,["metadata","command"])??(0,N.O2)(b,"permission");if(a.detail===P.Tm){let a=b.questions;return Array.isArray(a)&&(0,N.Qd)(a[0])?(0,N.O2)(a[0],"question"):null}return a.detail===P.vE?(0,N.NZ)(b,["error","data","message"])??(0,N.NZ)(b,["error","name"]):null})(b)?.slice(0,M.lY)??null,model:b.model},g={sessionStartMayArriveLate:d.capabilities.sessionStartMayArriveLate};if("notification"===b.event&&b.detail===P.aF){f.decisionId=(0,N.O2)((0,N.Qd)(b.raw.properties)?b.raw.properties:{},"id");let d=(0,Q.LF)(b.raw,b.receivedAt);f.toolName=d?.toolName??null,f.decisionPatterns=d?.patterns??null,f.promptSettled=await U(a,b,c),(0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g);return}if("notification"===b.event&&b.detail===P.C8){f.decisionId=(0,P.Mn)(b.raw),f.promptSettled=!!(0,O.VM)(S.k).capabilities.permissionReplyReleasesPrompt||(T.info("opencode-permission-reply-not-releasing",{worktreeId:a.worktreeId,instanceId:c,reason:"capability-permissionReplyReleasesPrompt-false"}),!1),(0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g),f.decisionId&&(0,K.L0)({worktreeId:a.worktreeId,cliToolId:S.k,instanceId:c},f.decisionId),T.info("opencode-permission-reply-observed",{worktreeId:a.worktreeId,instanceId:c,decisionId:f.decisionId,released:f.promptSettled});return}if((0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g),"notification"===b.event&&b.detail===P.Tm){let d=(0,O.VM)(S.k).parseQuestion(b.raw);d&&((0,L.recordAskUserQuestion)(a.worktreeId,S.k,c,d,b.receivedAt),(0,L.reportQuestionPending)(a.worktreeId,S.k,c,{toolName:J.GF,decisionId:d.promptId,detail:P.Tm},b.receivedAt),T.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,R.Vo)(a,c,f.message??null,b.receivedAt);return}if("stop"===b.event)return void await V(a,c);"notification"===b.event&&b.detail===P.vE&&await (0,R.dJ)(a,c,(0,N.NZ)((0,N.Qd)(b.raw.properties)?b.raw.properties:{},["error","name"]),f.message??null,b.conversationId,b.receivedAt),T.info("opencode-event-received",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail})}catch(d){T.error("opencode-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:c,event:b.event,error:d instanceof Error?d.message:String(d)})}}var X=c(84574),Y=c(85965),Z=c(33198);let $=(0,n.h)("lib/hooks/sources/opencode/runtime");function _(a,b){return{worktreeId:a,cliToolId:"opencode",instanceId:b}}async function aa(a,b){try{return await (0,X.CU)(a,b)}catch(b){return $.warn("opencode-port-reserve-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),null}}let ab=[0,500,1e3,2e3,4e3];async function ac(a,b){for(let[c,d]of ab.entries()){d>0&&await new Promise(a=>setTimeout(a,d));let e=await (0,G.sc)(b);if("healthy"===e.kind)return c>0&&$.info("opencode-server-reachable-after-retry",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempt:c}),e.health;if("rejected"===e.kind){$.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 ad(a){try{let b=(0,X.hC)(a);if(null===b)return!1;if((0,Z.wb)(a))return!0;let c=await ac(a,b);if(!c)return $.info("opencode-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempts:ab.length}),!1;await Y.cC.subscribe(a,b=>{W(a,b)});let d=await ae(a);return $.info("opencode-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,version:c.version,activity:d}),!0}catch(b){return $.warn("opencode-event-stream-attach-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ae(a){let b=null;try{b=await Y.cC.probeActivity(a)}catch(b){$.debug("opencode-activity-probe-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:b instanceof Error?b.message:String(b)})}return(0,Z.yn)(a,b,Date.now()),b}async function af(a,b){try{if((0,Z.wb)(a))return!0;let c=await (0,X.jp)(a,b);if(null===c)return!1;return await ad(a)}catch(b){return $.warn("opencode-event-stream-resume-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ag(a){let b=a.instanceId??a.cliToolId;try{let c=(0,X.hC)(a);if(null===c)return!1;let d=(0,Z.lf)(a);if("live"!==d.state)return $.info("opencode-abort-skipped-not-live",{worktreeId:a.worktreeId,instanceId:b,port:c,liveness:d.state}),!1;let e=(0,Z.ym)(a);if(null===e)return $.info("opencode-abort-skipped-no-session",{worktreeId:a.worktreeId,instanceId:b,port:c}),!1;let f=(0,Z.H1)(a,e,2e3);if(!await (0,G.UR)(c,e))return f.cancel(),$.warn("opencode-abort-rejected",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!1;if(!await f.seen)return $.warn("opencode-abort-unconfirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e,timeoutMs:2e3}),!1;return $.info("opencode-abort-confirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!0}catch(c){return $.warn("opencode-abort-failed",{worktreeId:a.worktreeId,instanceId:b,error:c instanceof Error?c.message:String(c)}),!1}}async function ah(a){try{await (0,Z.FN)(a),(0,X.kE)(a)}catch(b){$.warn("opencode-event-stream-release-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)})}}var ai=c(18529),aj=c(70849),ak=c(27939),al=c(93949),am=c(20610),an=c(78099),ao=c(18140),ap=c(79748);let aq=/^timestamp=(\S+)/,ar=/no such column: ?[A-Za-z0-9_.]*/;async function as(a,b){let c;try{c=await (0,ap.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 at(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 as(b,262144);if(null===c)return null;let d=a-1e3;for(let a of c.split("\n")){let b=aq.exec(a);if(!b)continue;let c=Date.parse(b[1]);if(Number.isNaN(c)||c<d)continue;let e=ar.exec(a);if(e)return e[0]}return null}var au=c(69130),av=c(77093),aw=c(49973);let ax=(0,n.h)("cli-tools/opencode"),ay=(0,D.promisify)(C.execFile),az=[0,50,100,200];function aA(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(381),j=c(93997),k=c(42422),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(69130),w=c(77093),x=c(49973);let y=(0,q.h)("cli-tools/codex"),z="codex";function A(){return{screen:null,attempts:0}}class B 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:y,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 this.typeLaunchLines(d,[(0,v.Y)(f)]),await new Promise(a=>setTimeout(a,3e3))};await this.typeLaunchLines(d,[(0,v.Y)(f)]),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(d,{relaunch:g,trustHooks:(0,s.dO)(b)}),y.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=A(),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=(0,x.TO)(),t=await (0,h.Xg)(a,50),v=(0,k.aJ)(t),w=(0,k.E6)(v);if(("hooks-review"===w||"hooks-list"===w||"hooks-detail"===w)&&await this.answerCodexHooksScreen(a,w,f,c,s)){await new Promise(a=>setTimeout(a,u.CV));continue}if((0,k.zZ)(v))return void y.info("codex-prompt-detected");if(j&&!m&&b?.relaunch&&null!==(0,l.GE)(v,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)(z),y.info("codex-update-lock-released",{sessionName:a})),y.info("codex-relaunched-after-update",{sessionName:a,policy:g}),await b.relaunch();continue}let A=(0,k.Qh)(v);if("update"===A){if(j=!0,null===i){await new Promise(a=>setTimeout(a,1e3));continue}if(!d){let b=i;b!==n.update||(0,p.mf)(z)?b===n.update&&(q=!0):(b=n["skip-until-next-version"],y.warn("codex-update-dialog-yielded-to-running-update",{sessionName:a,policy:g,requestedKey:i,key:b}));let c=b,e=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"update"),()=>(0,h.V1)(a,c,!1));if(!e.answered){q&&(q=!1,(0,p.lM)(z)),y.info("codex-update-dialog-answer-skipped",{sessionName:a,reason:e.reason});continue}d=!0,b===n.update&&(r=Math.max(r,o+1+120)),y.info("codex-update-dialog-answered",{sessionName:a,policy:g,key:b}),await new Promise(a=>setTimeout(a,u.CV));continue}}if("press-enter"===A){let b=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"press-enter"),()=>(0,h.ds)(a,"Enter"));if(!b.answered){y.info("codex-notification-answer-skipped",{sessionName:a,reason:b.reason});continue}y.info("dismissed-codex-notification"),await new Promise(a=>setTimeout(a,u.CV));continue}if("trust"===A&&!e){let b=await (0,x.x7)(a,s,()=>this.isActiveDialogStill(a,"trust"),()=>(0,h.V1)(a,"1",!1));if(!b.answered){y.info("codex-trust-dialog-answer-skipped",{sessionName:a,reason:b.reason});continue}e=!0,y.info("auto-trusted-folder-for-codex"),await new Promise(a=>setTimeout(a,u.CV));continue}}catch{}await new Promise(a=>setTimeout(a,1e3))}y.info("codex-prompt-detection")}finally{q&&(q=!1,(0,p.lM)(z),y.warn("codex-update-lock-released-unfinished",{sessionName:a}))}}async isActiveDialogStill(a,b){return(0,k.Qh)((0,k.aJ)(await (0,h.Xg)(a,50)))===b}async answerCodexHooksScreen(a,b,c,d,e){if(c.screen!==b&&(c.screen=b,c.attempts=0),c.attempts>=3)return y.warn("codex-hooks-screen-unresponsive",{sessionName:a,screen:b,trust:d}),!1;let f=c.attempts+1,g=await (0,x.x7)(a,e,async()=>(0,k.E6)((0,k.aJ)(await (0,h.Xg)(a,50)))===b,()=>this.sendCodexHooksScreenKey(a,b,f,d));return g.answered?c.attempts=f:y.info("codex-hooks-screen-answer-skipped",{sessionName:a,screen:b,reason:g.reason}),!0}async sendCodexHooksScreenKey(a,b,c,d){if("hooks-review"===b){let b=1===c?d?"2":"3":"1";await (0,h.V1)(a,b,!1),y.info("codex-hooks-review-answered",{sessionName:a,key:b,attempt:c,trust:d});return}if(d){await (0,h.V1)(a,"t",!1,{literal:!0}),y.info("codex-hooks-screen-trusted",{sessionName:a,screen:b,attempt:c});return}await (0,h.ds)(a,"Escape"),y.info("codex-hooks-screen-escaped",{sessionName:a,screen:b,attempt:c})}async waitForPrompt(a){let b=Date.now(),c=A(),d=null;for(;Date.now()-b<15e3;){try{let b=(0,x.TO)(),e=await (0,h.Xg)(a,50),f=(0,k.aJ)(e),g=(0,k.E6)(f);if("hooks-review"===g||"hooks-list"===g||"hooks-detail"===g){if(null===d){let b=await (0,h.nS)(a);d=null!==b&&(0,s.dO)(b)}await this.answerCodexHooksScreen(a,g,c,d,b)}else if((0,k.zZ)(f))return}catch{}await new Promise(a=>setTimeout(a,500))}throw y.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),y.info("sent-message-to-codex-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Codex: ${a}`,{cause:b})}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:y,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 C=c(23365),D=c(76877),E=c(48217);let F=(0,q.h)("cli-tools/gemini");class G 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:F,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});(0,E.du)(d);try{await this.typeLaunchLines(d,[(0,v.Y)(f)]),await new Promise(a=>setTimeout(a,6e3)),await this.waitForReady(d)}finally{(0,E.FG)(d)}F.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,c=null,d=new Set;for(let e=0;e<30;e++){try{let e=(0,x.KC)(),f=await (0,h.Xg)(a,C.H),g=(0,k.aJ)(f);if(k.wN.test(g))return void F.info("gemini-prompt-detected");if(!b){let f=(0,D.CZ)(D.g1,g);if("press"===f.action){let d=await (0,x.x7)(a,e,async()=>{let b=(0,D.CZ)(D.g1,(0,k.aJ)(await (0,h.Xg)(a,C.H)));return"press"===b.action&&b.key===f.key},()=>(0,h.ds)(a,f.key),{mode:"exclusive"});d.answered?(b=!0,c=Date.now(),(0,E._F)(a,c),F.info("auto-trusted-folder-for-gemini")):F.info("gemini-trust-answer-skipped",{sessionName:a,reason:d.reason})}else{let b=(0,D.oy)(D.g1,f);b&&"absent"!==f.action&&!d.has(f.reason)&&(d.add(f.reason),F.warn(b.event,{sessionName:a,...b.fields}))}}}catch(b){F.debug("gemini-ready-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}await new Promise(a=>setTimeout(a,1e3))}if(null!==c){let a=5e3-(Date.now()-c);a>0&&await new Promise(b=>setTimeout(b,a))}F.info("gemini-prompt-detection")}async waitForPrompt(a){let b=Date.now();for(;Date.now()-b<15e3;){try{let b=await (0,h.Xg)(a,C.H),c=(0,k.aJ)(b);if(k.wN.test(c))return}catch(b){F.debug("gemini-prompt-capture-failed",{sessionName:a,error:(0,w.u1)(b)})}await new Promise(a=>setTimeout(a,500))}throw F.info("gemini-prompt-not-detected"),Error("Gemini 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("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),F.info("sent-message-to-gemini-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Gemini: ${a}`,{cause:b})}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:F,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 H=c(15194),I=c(88807),J=c(56791);let K=(0,q.h)("cli-tools/vibe-local");class L 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:K,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,I.getDbInstance)(),d=(0,J.getWorktreeById)(b,a);d?.vibeLocalModel&&H.QP.test(d.vibeLocalModel)&&(c+=` -m ${d.vibeLocalModel}`);let e=d?.vibeLocalContextWindow;(0,H.FV)(e)&&(c+=` --context-window ${Number(e)}`)}catch{}await this.typeLaunchLines(d,[(0,v.Y)(c)]),await new Promise(a=>setTimeout(a,5e3)),K.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),K.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}`,{cause:b})}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:K,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 M=c(49319),N=c(87673),O=c(81776),P=c(56263),Q=c(21758),R=c(54633),S=c(78099);let T=(0,q.h)("cli-tools/copilot"),U=new Set(["model","agent","theme","permissions","skills","mcp","settings","statusline","subagents","resume","session"]),V=/^[>❯](?:\s|$)/,W=/^\s*\S\s+Loading:/;function X(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 Y(a,b){if(!a.isCurrent())throw Error(`Session ${a.sessionName} was handed to another writer before ${b}; input lock lost, nothing was typed (Issue #3945).`)}async function Z(a,b,c){try{await (0,h.V1)(a,b,!0)}catch(a){throw a?.delivery!=="not-started"&&(0,x.kJ)(c),a}}function $(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 _ extends d.Mj{async isInstalled(){return await (0,O.B0)()!==null}launchExecutable(a){return"path"===a.source?this.command:Q.nL}async launchSession(a,b,c){let d=await (0,O.B0)();if(!d)throw(0,S.Tl)(this);let{sessionName:e,exists:f,live:g}=await this.resolveLaunchPane(a,b,c,{logger:T,liveAction:"copilot-session-exists",relaunchAction:"copilot-session-relaunch"});if(!g){(0,t.Fq)({worktreeId:a,cliToolId:R.V,instanceId:c});try{let g=(0,t.wK)({target:{worktreeId:a,cliToolId:R.V,instanceId:c},executablePath:this.launchExecutable(d),worktreePath:b});f||await this.createLaunchPane(e,b),(0,E.du)(e);try{await this.typeLaunchLines(e,[(0,v.Y)(g)]),await this.waitForReady(e)}finally{(0,E.FG)(e)}T.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,c){if(!(0,k.Rx)(b))return!1;let d=await (0,x.x7)(a,c,async()=>(0,k.Rx)((0,k.aJ)(await (0,h.Xg)(a,50))),()=>(0,h.V1)(a,k.oD,!1));return d.answered?((0,E._F)(a),(0,j.gm)(a),T.info("copilot-folder-trust-answered"),!0):(T.info("copilot-folder-trust-answer-skipped",{reason:d.reason}),!1)}isComposerDrawn(a){let b=a.split("\n");for(let a=1;a<b.length-1;a++)if(V.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=(0,x.TO)(),d=await (0,h.Xg)(a,50),e=(0,k.aJ)(d);if(this.isComposerDrawn(e))return void T.info("copilot-prompt-detected");!b&&await this.answerFolderTrustDialog(a,e,c)&&(b=!0)}catch{}await new Promise(a=>setTimeout(a,1e3))}T.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=(0,x.TO)(),d=await (0,h.Xg)(a,50);if(f=(0,k.aJ)(d),this.isReadyFor(c,f))return{ready:!0,output:f};!e&&await this.answerFolderTrustDialog(a,f,b)&&(e=!0)}catch{}await new Promise(a=>setTimeout(a,500))}return T.info("copilot-prompt-not-detected",{until:c,bottomRow:$(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 W.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 T.info("copilot-selection-list-detected"),!0}catch{}}return T.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{let a=this.extractSlashCommand(b);if(a&&U.has(a)){await (0,x.hC)(d,async c=>{await (0,x.KA)(c);let e=await this.waitForPrompt(d);if(await (0,N.H0)(d,"copilot"),!e.ready)throw T.warn("copilot-selection-list-not-sent:prompt-not-ready",{command:a,bottomRow:$(e.output)}),Error("copilot prompt not ready within 15000ms, so the selection-list command was not sent; nothing was typed");Y(c,"the selection-list command"),(0,x.dy)(),await Z(d,b,c),await this.waitForSelectionList(d)}),(0,j.gm)(d),T.info("sent-selection-list-command-to-copilot",{command:a});return}await this.waitForPrompt(d),await (0,i.FW)({sessionName:d,message:b,cliToolId:"copilot",composer:this.describeComposer(),textInputWaitMs:P.L1,verifyDelayMs:P.wp}),(0,j.gm)(d),T.info("sent-message-to-copilot-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Copilot: ${a}`,{cause:b})}}async sendModelCommand(a,b,c){let d=this.getSessionName(a,c);await this.requireSession("Copilot",a,c,{relaunch:!1});try{await (0,x.hC)(d,a=>this.switchModelUnderInputLock(d,b,a))}catch(d){let a=(0,w.u1)(d),c=d?.code;throw Object.assign(Error(`Failed to switch Copilot model to ${b}: ${a}`),"string"==typeof c?{code:c}:{})}}async switchModelUnderInputLock(a,b,c){await (0,x.KA)(c);let d=await this.waitForPrompt(a,P.pL,"idle");if(!d.ready)throw T.warn("copilot-model-switch-not-idle",{model:b,bottomRow:$(d.output)}),Error(`copilot did not become idle within ${P.pL}ms, so /model was not sent`);let e=X(d.output,b);await (0,N.H0)(a,"copilot"),Y(c,"/model"),await Z(a,`/model ${b}`,c);let f=await this.waitForModelSwitchOutcome(a,b,e);if((0,j.gm)(a),"rejected"===f.kind)throw T.warn("copilot-model-rejected",{model:b,reason:f.reason}),Error(`copilot refused it: ${f.reason}`);if("pending"===f.kind)throw T.warn("copilot-model-switch-unconfirmed",{model:b,bottomRow:f.bottomRow}),Error(`copilot printed no answer to /model within ${P.pL}ms; the switch may still take effect, and nothing further was typed`);T.info("copilot-model-switched",{model:b})}async waitForModelSwitchOutcome(a,b,c){let d=Date.now(),e="";for(;Date.now()-d<P.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=X(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:$(e)}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:T,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,P.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 aa=c(61878),ab=c(69082),ac=c(83406);let ad=(0,q.h)("cli-tools/antigravity"),ae=/\?\s+for\s+shortcuts/;function af(a){if(null===a)return{screen:"no-capture",screenTail:[]};let b=(0,k.aJ)(a).split("\n").map(a=>a.trimEnd()).filter(a=>""!==a.trim()),c=(0,aa.zJ)(a,"antigravity").lastLines;return{screen:0===b.length?"blank":(0,ab.VI)(c)?"trust-dialog":ah(a)?"ready":"other",screenTail:b.slice(-5).map(a=>a.slice(0,160))}}function ag(a,b,c){let d=(0,D.oy)(D.z0,b);!d||"absent"===b.action||"press"===b.action||c.has(b.reason)||(c.add(b.reason),ad.warn(d.event,{sessionName:a,...d.fields}))}function ah(a){let b=(0,aa.zJ)(a,"antigravity");if(k.kT.test(b.lastLines)||ab.wf.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&&(!!ae.test(c)||!(0,k.ut)("antigravity",b.lastLines))}class ai 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:ad,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}),h=d?`${g} --model '${d.replace(/'/g,"'\\''")}'`:g;f||await this.createLaunchPane(e,b),(0,ac.zu)(e);try{await this.typeLaunchLines(e,[(0,v.Y)(h)]),await new Promise(a=>setTimeout(a,3e3)),await this.waitForReady(e)}finally{(0,ac.F1)(e)}ad.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;(0,ac.R6)(a);let c=!1,d=new Set,e=null,f=0;for(let g=0;g<30;g++){try{let b=(0,x.TO)(),f=await (0,h.Xg)(a,50),g=(0,k.aJ)(f);if(e=f,ah(g))return void ad.info("antigravity-prompt-detected");if(!c){let e=(0,D.CZ)(D.z0,g);if("press"===e.action&&!(0,ac.jI)(a)){let d=e.key,f=await (0,x.x7)(a,b,()=>this.isTrustPressStill(a,d),()=>(0,h.ds)(a,d));if(f.answered){c=!0,ad.info("auto-trusted-folder-for-antigravity"),await new Promise(a=>setTimeout(a,500));continue}ad.info("antigravity-trust-answer-skipped",{sessionName:a,reason:f.reason})}ag(a,e,d)}}catch(a){f++,b=(0,w.u1)(a)}await new Promise(a=>setTimeout(a,1e3))}c||(0,ac.Qn)(a),ad.info("antigravity-prompt-detection-timeout",{sessionName:a,attempts:30,trustDialogHandled:c,...c?{}:{reason:"startup-trust-unhandled"},...af(e),captureErrors:f,...void 0!==b?{lastCaptureError:b}:{}})}async isTrustPressStill(a,b){let c=(0,k.aJ)(await (0,h.Xg)(a,50)),d=(0,D.CZ)(D.z0,c);return"press"===d.action&&d.key===b}async waitForPrompt(a){let b,c=Date.now(),d=c+((0,ac.Dc)(a)?6e4:15e3),e=new Set,f=null,g=0;for(;Date.now()<d;){try{let b=(0,x.TO)(),c=await (0,h.Xg)(a,50),g=(0,k.aJ)(c);if(f=c,ah(g))return void(0,ac.R6)(a);let i=(0,ab.VI)((0,aa.zJ)(g,"antigravity").lastLines)?(0,D.CZ)(D.z0,g):null;null!==i&&"press"!==i.action&&(0,ac.Dc)(a)&&ag(a,i,e);let j=i?.action==="press"?i.key:null,l=null!==j&&(0,ac.Dc)(a)?await (0,x.x7)(a,b,()=>this.isTrustPressStill(a,j),async()=>!!(0,ac.qT)(a)&&(await (0,h.ds)(a,j),!0)):null;if(null===l||l.answered||ad.info("antigravity-trust-answer-skipped",{sessionName:a,reason:l.reason,afterLaunchWindow:!0}),l?.answered===!0&&l.value){ad.info("auto-trusted-folder-for-antigravity",{sessionName:a,afterLaunchWindow:!0}),d=Math.max(d,Date.now()+15e3),await new Promise(a=>setTimeout(a,500));continue}}catch(a){g++,b=(0,w.u1)(a)}await new Promise(a=>setTimeout(a,500))}let i=(0,ac.Dc)(a),j=af(f);ad.info("antigravity-prompt-not-ready",{sessionName:a,waitedMs:Date.now()-c,...i?{reason:"startup-trust-unhandled"}:{},...j,captureErrors:g,...void 0!==b?{lastCaptureError:b}:{}});let l="trust-dialog"===j.screen?' (the folder-trust confirmation "Do you trust the contents of this project?" is on screen and needs an answer)':i?" (startup-trust-unhandled: agy had not shown its folder-trust confirmation when the launch window ended, and it has not appeared since)":"";throw Error(`Antigravity prompt not ready: timed out waiting for the input prompt before sending${l}`)}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),ad.info("sent-message-to-antigravity-session")}catch(b){let a=(0,w.u1)(b);throw Error(`Failed to send message to Antigravity: ${a}`,{cause:b})}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:ad,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),(0,ac.R6)(a)}})}constructor(...a){super(...a),this.id="antigravity",this.name="Antigravity CLI",this.command="agy"}}var aj=c(7321),ak=c(28862),al=c(35566),am=c(2669);let an=(0,q.h)("cli-tools/command-code"),ao=["--trust","--skip-onboarding","--no-auto-update"];function ap(a){let b=a.split("\n");return!(0>(0,k.I$)(b))&&!k.k0.test((0,k.aJ)(a))}class aq 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:an,liveAction:"command-code-session-exists",relaunchAction:"command-code-session-relaunch"});if(!f){(0,t.Fq)({worktreeId:a,cliToolId:ak.k,instanceId:c}),this.composerPendingSince.set(d,Date.now());try{var g;e||await this.createLaunchPane(d,b);let f=(g={target:{worktreeId:a,cliToolId:ak.k,instanceId:c},executablePath:this.command,worktreePath:b},[(0,t.wK)(g),...ao].join(" "));await this.typeLaunchLines(d,[(0,v.Y)(f)]),await new Promise(a=>setTimeout(a,u.yO)),await this.waitForReady(d),an.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(ap(b)){this.composerPendingSince.delete(a),an.info("command-code-prompt-detected");return}}catch{}await new Promise(a=>setTimeout(a,1e3))}an.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,al.V)(c))&&ap(c))return void this.composerPendingSince.delete(a)}catch{}if((c=b?c+1:0)>=2)throw an.info("command-code-plan-review-blocks-send",{sessionName:a}),Object.assign(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).'),{code:aj.Le});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 an.info("command-code-session-still-starting",{sessionName:a,sinceLaunchMs:b}),new am.Sr(this.name,a,b);this.composerPendingSince.delete(a)}throw an.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),an.info("sent-message-to-command-code-session")}catch(b){if((0,am.wQ)(b))throw b;let a=Error(`Failed to send message to Command Code: ${(0,w.u1)(b)}`,{cause:b});if(b?.code===aj.Le)throw Object.assign(a,{code:aj.Le});throw a}}async killSession(a,b){await this.requestExitAndKill(a,b,{logger:an,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 ar=c(79646),as=c(28354),at=c(16983),au=c(46684),av=c(34114),aw=c(62887),ax=c(72272),ay=c(49154),az=c(40255),aA=c(95375),aB=c(27870),aC=c(57510),aD=c(90488),aE=c(51719),aF=c(83738),aG=c(26945),aH=c(38892),aI=c(16100),aJ=c(71193);let aK=(0,q.h)("lib/hooks/sources/opencode-v2/ingest");async function aL(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(6486),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void aK.info("opencode-v2-stop-unresolved-target",{worktreeId:a.worktreeId});await f(g,h,aJ.B,b)}async function aM(a,b,c){let d=(0,aG.bH)(a),e=(0,aH.X3)(a);if(null===d||null===e)return null;let f=await (0,av.$F)(d,e,b),g=f?.find(a=>(0,aC.Qd)(a)&&a.id===c);return(0,aC.Qd)(g)?g:null}async function aN(a,b,c){let d=(0,aF.hl)(b.raw,b.receivedAt);if(!d)return aK.info("opencode-v2-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let e=await (0,ax.t)(aI.Wp,a,d,aI.Wp.parsePermissionRequest(b.raw));return aK.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 aO(a,b,c){let d=(0,aF.rk)(b.raw);if(d)return d;let e=(0,aE.DH)(b.raw),f=(0,aE.lx)(b.raw);if(null===e||null===f)return null;let g=await c(a,f,e);return g?(0,aF.rk)(g):null}async function aP(a,b,c=aL,d=aM){let e=a.instanceId??aJ.B;try{let f=(0,aA.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:aJ.B,instanceId:e,event:b.event,detail:b.detail,sessionId:b.conversationId,at:b.receivedAt,identity:aI.Wp.eventIdentityOf(b.raw),identityKind:aI.Wp.capabilities.eventIdentity});if(f.duplicate)return void aK.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,aw.h9)??null,sessionId:b.conversationId,message:null,model:b.model},h={sessionStartMayArriveLate:!1};if("notification"===b.event&&b.detail===aE.xz){g.decisionId=(0,aE.DH)(b.raw);let c=(0,aF.vF)(b.raw);g.toolName=c?.toolName??(0,aE.Dg)(b.raw),g.decisionPatterns=c?.patterns??null,g.message=(0,aF.s8)(b.raw)?.slice(0,aB.lY)??null,g.promptSettled=await aN(a,b,e),(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h)}else if("notification"===b.event&&b.detail===aE.er)g.decisionId=(0,aE.DH)(b.raw),g.promptSettled=!0,(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),g.decisionId&&(0,az.L0)({worktreeId:a.worktreeId,cliToolId:aJ.B,instanceId:e},g.decisionId);else if("notification"===b.event&&b.detail===aE.Ai){let c=await aO(a,b,d);g.message=c?.questions[0]?.question.slice(0,aB.lY)??null,(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),c&&(0,aA.recordAskUserQuestion)(a.worktreeId,aJ.B,e,c,b.receivedAt),(0,aA.reportQuestionPending)(a.worktreeId,aJ.B,e,{toolName:ay.GF,decisionId:(0,aE.DH)(b.raw),detail:aE.Ai},b.receivedAt),aK.info("opencode-v2-question-recorded",{worktreeId:a.worktreeId,instanceId:e,decisionId:(0,aE.DH)(b.raw),parsed:null!==c,questionCount:c?.questions.length??0}),await (0,aD.Vo)(a,e,g.message,b.receivedAt)}else"stop"===b.event?(b.detail===aE.dA&&(g.message=(0,aE.ZL)(b.raw)?.slice(0,aB.lY)??null,aK.error("opencode-v2-turn-failed",{worktreeId:a.worktreeId,instanceId:e,sessionId:b.conversationId,message:g.message})),(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h),await c(a,e)):(0,aA.recordAgentEvent)(a.worktreeId,aJ.B,e,g,h);aK.info("opencode-v2-event-received",{worktreeId:a.worktreeId,instanceId:e,type:(0,aE.Cr)(b.raw),event:b.event,detail:b.detail})}catch(c){aK.error("opencode-v2-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:e,event:b.event,error:c instanceof Error?c.message:String(c)})}}var aQ=c(32301);let aR=(0,q.h)("lib/hooks/sources/opencode-v2/runtime"),aS=[0,500,1e3,2e3];function aT(a,b){return{worktreeId:a,cliToolId:aJ.B,instanceId:b}}function aU(a){return a instanceof Error?a.message:String(a)}async function aV(a,b){try{let c=await (0,aG.ui)(a,b);if(null===c)return null;return(0,aH.OC)(a),c}catch(b){return aR.warn("opencode-v2-server-reserve-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),null}}async function aW(a,b){let c=(0,aH.X3)(a);return null!==c&&"healthy"===(await (0,av.tJ)(b,c)).kind}async function aX(a){try{let b=(0,aG.bH)(a);if(null===b)return!1;if((0,aQ.yw)(a))return!0;let c=!1;for(let d of aS)if(d>0&&await new Promise(a=>setTimeout(a,d)),await aW(a,b)){c=!0;break}if(!c)return aR.info("opencode-v2-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!1;return await aI.Wp.subscribe(a,b=>{aP(a,b)}),aR.info("opencode-v2-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b}),!0}catch(b){return aR.warn("opencode-v2-event-stream-attach-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),!1}}async function aY(a,b){try{if((0,aQ.yw)(a))return!0;let c=await (0,aG.Lv)(a,b,b=>aW(a,b));if(null===c)return!1;return await aX(a)}catch(b){return aR.warn("opencode-v2-event-stream-resume-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:aU(b)}),!1}}async function aZ(a){try{await (0,aQ.VV)(a)}catch(b){aR.warn("opencode-v2-subscription-close-failed",{worktreeId:a.worktreeId,error:aU(b)})}try{(0,aG.OZ)(a)}catch(b){aR.warn("opencode-v2-port-forget-failed",{worktreeId:a.worktreeId,error:aU(b)})}try{(0,aH.Nc)(a)}catch(b){aR.warn("opencode-v2-password-remove-failed",{worktreeId:a.worktreeId,error:aU(b)})}}var a$=c(93949),a_=c(18140);let a0=(0,q.h)("cli-tools/opencode-v2"),a1=(0,as.promisify)(ar.execFile),a2=at.xT,a3=/^\/\S+$/,a4=[...e.qD,e.Mx,...e.TM,"a","l","m"];class a5 extends d.Mj{navigationKeys(){return{keys:a4,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,a_.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=aT(a,c);if((0,aQ.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 aY(d,a)}catch(a){a0.debug("opencode-v2-lazy-resume-failed",{error:(0,w.u1)(a)})}})())}async launchSession(a,b,c){let d=(await (0,a_.Qq)()).executable;if(!d)throw(0,S.Tl)(this);let e=this.getSessionName(a,c),f=aT(a,c),g={windowWidth:(0,au.r)({warnSidebar:!1}),windowHeight:at.xT},i=await (0,h.N)(e);if(i){if(await this.reconcileExistingSession(e,b,g),await this.isToolLive(e,{confirm:!0})){await aY(f,b),a0.info("opencode-v2-session-exists");return}a0.warn("opencode-v2-session-relaunch",{sessionName:e}),await aZ(f)}(0,t.Fq)(f);try{i||await this.createLaunchPane(e,b);try{await a1("tmux",["resize-window","-t",(0,h.lA)(e),"-x",String(g.windowWidth),"-y",String(g.windowHeight)])}catch{}let j=await aV(f,b);null===j&&a0.warn("opencode-v2-launch-without-server",{worktreeId:a,instanceId:c});let k=(0,t.wK)({target:f,executablePath:d.path,worktreePath:b});await this.typeLaunchLines(e,[(0,v.Y)(k)]),await this.waitForReady(e),await aX(f),a0.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,a2));if((0,k.Ok)(c))return a0.info("opencode-v2-composer-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return a0.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,a2));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:a3.test(b)?`${b} `:b,cliToolId:aJ.B,composer:this.describeComposer()}),(0,j.gm)(d),a0.info("sent-message-to-opencode-v2-session")}catch(a){throw Error(`Failed to send message to OpenCode V2: ${(0,w.u1)(a)}`,{cause:a})}}async killSession(a,b){let c=this.getSessionName(a,b),d=aT(a,b),e=(0,aG.bH)(d);try{if(await (0,h.N)(c)){await (0,h.V1)(c,a$.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,a$.rY)({sessionAlive:()=>(0,h.N)(c),portAnswering:null===e?null:async()=>"unreachable"!==(await (0,av.tJ)(e,"")).kind});a.ok||(a0.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),a0.info("stopped-opencode-v2-session")}catch(a){throw a0.error("session:stop-failed",{error:(0,w.u1)(a)}),a}finally{await aZ(d)}}constructor(...a){super(...a),this.id=aJ.B,this.name="OpenCode V2",this.command=aJ.V,this.resumeAttemptedAt=new Map}}class a6{constructor(){this.tools=new Map,this.tools.set("claude",new g),this.tools.set("codex",new B),this.tools.set("gemini",new G),this.tools.set("vibe-local",new L),this.tools.set("opencode",new M.Ui),this.tools.set("copilot",new _),this.tools.set("antigravity",new ai),this.tools.set("command-code",new aq),this.tools.set("opencode-v2",new a5)}static getInstance(){return a6.instance||(a6.instance=new a6),a6.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(1601),c.e(8918),c.e(610),c.e(1656),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)}}},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(91478);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}},48217:(a,b,c)=>{c.d(b,{FG:()=>h,_F:()=>j,du:()=>g,mN:()=>i,to:()=>k});var d=c(36925);let e=(0,d.v)("__launchWindows",()=>new Map),f=(0,d.v)("__launchDialogPresses",()=>new Map);function g(a){e.set(a,(e.get(a)??0)+1),f.delete(a)}function h(a){let b=e.get(a)??0;b<=1?e.delete(a):e.set(a,b-1)}function i(a){return e.has(a)}function j(a,b=Date.now()){f.set(a,b)}function k(a,b=Date.now()){let c=f.get(a);return void 0!==c&&b-c<3e4}},49319:(a,b,c)=>{c.d(b,{Ui:()=>aB,TZ:()=>aA});var d=c(89731),e=c(8953),f=c(79892),g=c(42422),h=c(381),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(40255),L=c(95375),M=c(27870),N=c(57510),O=c(70096),P=c(75356),Q=c(98211),R=c(90488),S=c(85322);let T=(0,n.h)("lib/hooks/sources/opencode/ingest");async function U(a,b,c){let d=(0,O.VM)(S.k),e=(0,Q.Lu)(b.raw,b.receivedAt);if(!e)return T.info("opencode-permission-unparsed",{worktreeId:a.worktreeId,instanceId:c}),!1;let f=await (0,I.t)(d,a,e,d.parsePermissionRequest(b.raw));return T.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 V(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(6486),c.e(6781)]).then(c.bind(c,16781))]),g=d(),h=e(g,a.worktreeId)??null;if(!h)return void T.info("opencode-stop-unresolved-target",{worktreeId:a.worktreeId});let i=await f(g,h,S.k,b);T.info("opencode-stop-applied",{worktreeId:a.worktreeId,instanceId:b,taskId:i.taskId,taskEventApplied:i.taskEventApplied,verificationRunId:i.verificationRunId})}async function W(a,b){let c=a.instanceId??S.k;try{let d=(0,O.VM)(S.k),e=(0,L.classifyAgentEventDelivery)({worktreeId:a.worktreeId,cliToolId:S.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 T.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,N.Qd)(a.raw.properties)?a.raw.properties:{};if(a.detail===P.aF)return(0,N.NZ)(b,["metadata","command"])??(0,N.O2)(b,"permission");if(a.detail===P.Tm){let a=b.questions;return Array.isArray(a)&&(0,N.Qd)(a[0])?(0,N.O2)(a[0],"question"):null}return a.detail===P.vE?(0,N.NZ)(b,["error","data","message"])??(0,N.NZ)(b,["error","name"]):null})(b)?.slice(0,M.lY)??null,model:b.model},g={sessionStartMayArriveLate:d.capabilities.sessionStartMayArriveLate};if("notification"===b.event&&b.detail===P.aF){f.decisionId=(0,N.O2)((0,N.Qd)(b.raw.properties)?b.raw.properties:{},"id");let d=(0,Q.LF)(b.raw,b.receivedAt);f.toolName=d?.toolName??null,f.decisionPatterns=d?.patterns??null,f.promptSettled=await U(a,b,c),(0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g);return}if("notification"===b.event&&b.detail===P.C8){f.decisionId=(0,P.Mn)(b.raw),f.promptSettled=!!(0,O.VM)(S.k).capabilities.permissionReplyReleasesPrompt||(T.info("opencode-permission-reply-not-releasing",{worktreeId:a.worktreeId,instanceId:c,reason:"capability-permissionReplyReleasesPrompt-false"}),!1),(0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g),f.decisionId&&(0,K.L0)({worktreeId:a.worktreeId,cliToolId:S.k,instanceId:c},f.decisionId),T.info("opencode-permission-reply-observed",{worktreeId:a.worktreeId,instanceId:c,decisionId:f.decisionId,released:f.promptSettled});return}if((0,L.recordAgentEvent)(a.worktreeId,S.k,c,f,g),"notification"===b.event&&b.detail===P.Tm){let d=(0,O.VM)(S.k).parseQuestion(b.raw);d&&((0,L.recordAskUserQuestion)(a.worktreeId,S.k,c,d,b.receivedAt),(0,L.reportQuestionPending)(a.worktreeId,S.k,c,{toolName:J.GF,decisionId:d.promptId,detail:P.Tm},b.receivedAt),T.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,R.Vo)(a,c,f.message??null,b.receivedAt);return}if("stop"===b.event)return void await V(a,c);"notification"===b.event&&b.detail===P.vE&&await (0,R.dJ)(a,c,(0,N.NZ)((0,N.Qd)(b.raw.properties)?b.raw.properties:{},["error","name"]),f.message??null,b.conversationId,b.receivedAt),T.info("opencode-event-received",{worktreeId:a.worktreeId,instanceId:c,event:b.event,detail:b.detail})}catch(d){T.error("opencode-event-ingest-failed",{worktreeId:a.worktreeId,instanceId:c,event:b.event,error:d instanceof Error?d.message:String(d)})}}var X=c(84574),Y=c(85965),Z=c(33198);let $=(0,n.h)("lib/hooks/sources/opencode/runtime");function _(a,b){return{worktreeId:a,cliToolId:"opencode",instanceId:b}}async function aa(a,b){try{return await (0,X.CU)(a,b)}catch(b){return $.warn("opencode-port-reserve-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),null}}let ab=[0,500,1e3,2e3,4e3];async function ac(a,b){for(let[c,d]of ab.entries()){d>0&&await new Promise(a=>setTimeout(a,d));let e=await (0,G.sc)(b);if("healthy"===e.kind)return c>0&&$.info("opencode-server-reachable-after-retry",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempt:c}),e.health;if("rejected"===e.kind){$.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 ad(a){try{let b=(0,X.hC)(a);if(null===b)return!1;if((0,Z.wb)(a))return!0;let c=await ac(a,b);if(!c)return $.info("opencode-server-not-reachable",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,attempts:ab.length}),!1;await Y.cC.subscribe(a,b=>{W(a,b)});let d=await ae(a);return $.info("opencode-event-stream-attached",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,port:b,version:c.version,activity:d}),!0}catch(b){return $.warn("opencode-event-stream-attach-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ae(a){let b=null;try{b=await Y.cC.probeActivity(a)}catch(b){$.debug("opencode-activity-probe-failed",{worktreeId:a.worktreeId,instanceId:a.instanceId??a.cliToolId,error:b instanceof Error?b.message:String(b)})}return(0,Z.yn)(a,b,Date.now()),b}async function af(a,b){try{if((0,Z.wb)(a))return!0;let c=await (0,X.jp)(a,b);if(null===c)return!1;return await ad(a)}catch(b){return $.warn("opencode-event-stream-resume-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)}),!1}}async function ag(a){let b=a.instanceId??a.cliToolId;try{let c=(0,X.hC)(a);if(null===c)return!1;let d=(0,Z.lf)(a);if("live"!==d.state)return $.info("opencode-abort-skipped-not-live",{worktreeId:a.worktreeId,instanceId:b,port:c,liveness:d.state}),!1;let e=(0,Z.ym)(a);if(null===e)return $.info("opencode-abort-skipped-no-session",{worktreeId:a.worktreeId,instanceId:b,port:c}),!1;let f=(0,Z.H1)(a,e,2e3);if(!await (0,G.UR)(c,e))return f.cancel(),$.warn("opencode-abort-rejected",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!1;if(!await f.seen)return $.warn("opencode-abort-unconfirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e,timeoutMs:2e3}),!1;return $.info("opencode-abort-confirmed",{worktreeId:a.worktreeId,instanceId:b,port:c,sessionId:e}),!0}catch(c){return $.warn("opencode-abort-failed",{worktreeId:a.worktreeId,instanceId:b,error:c instanceof Error?c.message:String(c)}),!1}}async function ah(a){try{await (0,Z.FN)(a),(0,X.kE)(a)}catch(b){$.warn("opencode-event-stream-release-failed",{worktreeId:a.worktreeId,error:b instanceof Error?b.message:String(b)})}}var ai=c(18529),aj=c(70849),ak=c(27939),al=c(93949),am=c(20610),an=c(78099),ao=c(18140),ap=c(79748);let aq=/^timestamp=(\S+)/,ar=/no such column: ?[A-Za-z0-9_.]*/;async function as(a,b){let c;try{c=await (0,ap.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 at(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 as(b,262144);if(null===c)return null;let d=a-1e3;for(let a of c.split("\n")){let b=aq.exec(a);if(!b)continue;let c=Date.parse(b[1]);if(Number.isNaN(c)||c<d)continue;let e=ar.exec(a);if(e)return e[0]}return null}var au=c(69130),av=c(77093),aw=c(49973);let ax=(0,n.h)("cli-tools/opencode"),ay=(0,D.promisify)(C.execFile),az=[0,50,100,200];function aA(a,b){return a?`${a}
|
|
3
3
|
|
|
4
|
-
[添付画像: ${b}]`:`[添付画像: ${b}]`}class aB extends d.Mj{navigationKeys(){return{keys:e.sM,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,ao.$s)()).executable}async launchSession(a,b,c){let d=await (0,ao.$s)(),e=d.executable;if(!e)throw(0,an.Tl)(this,(0,ao.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 af(h,b),ax.info("opencode-session-exists");return}ax.warn("opencode-session-relaunch",{sessionName:g}),await ah(h)}(0,F.Fq)(h);try{await z(b),j||await this.createLaunchPane(g,b);try{await ay("tmux",["resize-window","-t",(0,f.lA)(g),"-x",String(i),"-y",String(A.xT)])}catch{}await aa(h,b);let d=(0,F.wK)({target:h,executablePath:e.path,worktreePath:b}),k=(0,ak.pr)(h,b),l=null===k?d:(0,ak.XO)(d,k);null!==k&&ax.info("opencode-session-resumed",{worktreeId:a,instanceId:c??this.id,sessionId:k});let m=Date.now();if(await (0,f.V1)(g,(0,au.Y)(l),!0),await this.waitForReady(g),!await ad(h)&&null!==(0,X.hC)(h)){let b=await at(m);if(null!==b)throw ax.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").`)}ax.info("started-opencode-session")}catch(b){let a=(0,av.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 ax.info("opencode-composer-detected",{attempt:b}),!0;if(g.LO.test(c))return ax.info("opencode-overlay-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return ax.info("opencode-ready-detection-timeout"),!1}async trySendViaServer(a,b,c){let d=await this.dispatchViaServer(a,b,c);return"delivered"===d||("skipped"!==d&&(0,aw.sK)(d),!1)}async dispatchViaServer(a,b,c){let d=a.instanceId??a.cliToolId,e=!1;try{let f=(0,X.hC)(a);if(null===f)return"skipped";let g=(0,Z.lf)(a);if("live"!==g.state)return ax.info("opencode-send-skipped-not-live",{worktreeId:a.worktreeId,instanceId:d,port:f,liveness:g.state}),"skipped";let h=(0,Z.ym)(a);if(null===h)return ax.info("opencode-send-skipped-no-session",{worktreeId:a.worktreeId,instanceId:d,port:f}),"skipped";let i=[{type:"text",text:b}];void 0!==c&&i.push({type:"file",mime:(0,E.$Y)((0,l.extname)(c)),filename:(0,l.basename)(c),url:(0,G.fy)(c)});let j=(0,G.CH)(),k=(0,ai.QH)((0,ai.Q1)(a));(0,aw.FU)(),e=!0;let m=await (0,G.wZ)(f,h,j,i,k);if("rejected"===m)return"not_sent";if("unknown"===m)return"unknown";let n=await this.verifyPostedMessage(f,h,j,b);if("found"!==n)return ax.warn("opencode-send-unverified",{worktreeId:a.worktreeId,instanceId:d,port:f,sessionId:h,messageId:j,hasImage:void 0!==c}),"missing"===n?"not_sent":"unknown";return ax.info("opencode-send-delivered-via-api",{worktreeId:a.worktreeId,instanceId:d,port:f,sessionId:h,messageId:j,hasImage:void 0!==c}),"delivered"}catch(b){if((0,aw.fi)(b))throw b;return ax.warn("opencode-send-api-failed",{worktreeId:a.worktreeId,instanceId:d,error:(0,av.u1)(b)}),e?"unknown":"skipped"}}async verifyPostedMessage(a,b,c,d){for(let e of az){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)?"found":"mismatch";if("missing"===f.kind)return"missing"}return"unknown"}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),ax.info("sent-message-to-opencode-session")}catch(b){let a=(0,av.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);ax.info("opencode-image-degraded-to-path",{worktreeId:a,instanceId:d??this.id}),await this.sendMessage(a,aA(b,c),d)}async killSession(a,b){let c=this.getSessionName(a,b),d=_(a,b),e=(0,X.hC)(d),g=await (0,aj.LQ)(d).catch(()=>null);g&&!g.captured&&ax.info("opencode-session-capture-skipped",{sessionName:c,reason:g.skipped}),await ah(d);try{if(await (0,f.N)(c)){await (0,f.V1)(c,"/exit",!1),await new Promise(a=>setTimeout(a,am.pL)),await (0,f.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,am.KI));let a=await (0,al.rY)({sessionAlive:()=>(0,f.N)(c),portAnswering:null===e?null:async()=>await (0,G.Ok)(e)!==null});a.ok||(ax.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),ax.info("stopped-opencode-session")}catch(a){throw ax.error("session:stop-failed",{error:(0,av.u1)(a)}),a}}async interrupt(a,b){let c=this.getSessionName(a,b);if(await ag(_(a,b))){(0,i.gm)(c),ax.info("opencode-interrupt-aborted-via-api");return}await (0,f.ds)(c,"Escape"),await new Promise(a=>setTimeout(a,am.os)),await (0,f.ds)(c,"Escape"),(0,i.gm)(c),ax.info("opencode-interrupt-sent")}constructor(...a){super(...a),this.id="opencode",this.name="OpenCode",this.command="opencode"}}},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)},70849:(a,b,c)=>{c.d(b,{LQ:()=>k,SW:()=>l});var d=c(72626),e=c(84574),f=c(95375),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:()=>j});var d=c(72626),e=c(40255),f=c(50474),g=c(25071),h=c(17287);let i=(0,d.h)("lib/hooks/permission-adjudication");async function j(a,b,d,k,l="event"){let m=b.instanceId??b.cliToolId,n={worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m},{resolvePermissionRequest:o}=await Promise.all([c.e(3241),c.e(6119)]).then(c.bind(c,43241)),p=o(n,k),q="allow"===p.behavior?{kind:"allowOnce"}:{kind:"abstain"};if("abstain"===q.kind){let c=(0,f.y_)(a);c.safe||i.warn("permission-request-abstain-blocks-agent",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m,toolName:k?.toolName??null,decisionId:d.id,reason:p.reason,consequence:c.summary,blocksForMs:c.blocksForMs})}let r=(0,e.qu)(n,d.id,{outcome:"allow"===p.behavior?"allow":"abstained",..."policy-suppressed"===p.reason&&p.suppressedBy?{withholdReason:p.suppressedBy}:{},promptType:"multiple_choice"}),{delivery:s}=await (0,g.GW)(a,b,d,q),t=s?.delivered===!0,u=t&&a.capabilities.permissionReplyReleasesPrompt;return(0,h.nL)(b.worktreeId,b.cliToolId,b.instanceId,{decisionId:d.id,toolName:k?.toolName??null,behavior:"allow"===p.behavior?"allow":null,reason:p.reason,delivered:t,releasedPrompt:u,trigger:l,at:d.askedAt}),(0,e.YF)(r,{delivered:t,settled:u}),i.info("permission-decision-adjudicated",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m,decisionId:d.id,toolName:k?.toolName??null,behavior:p.behavior,reason:p.reason,suppressedBy:p.suppressedBy,delivered:t,settled:u,trigger:l}),{decisionId:d.id,behavior:"allow"===p.behavior?"allow":null,reason:p.reason,delivered:t,settled:u}}},76877:(a,b,c)=>{c.d(b,{CZ:()=>k,O5:()=>m,g1:()=>f,oy:()=>n,yN:()=>l,z0:()=>g});var d=c(42422),e=c(69082);let f={id:"gemini-folder-trust",question:/Do you trust (?:the files in )?this folder\?/,signature:/\bTrust folder\b|\bDon't trust\b/,cursorRow:/^[\s│]*●\s*(\S.*?)[\s│]*$/,optionRow:/^[\s│]*(?:\S\s+)?\d\.\s+(?:Trust folder|Trust parent folder|Don't trust)\b/,minOptionRows:2,optionsWithin:8,dismissedRow:/restarting to apply the trust changes/,safeRow:/^1\.\s+Trust folder\b/,key:"Enter",liveRows:30,declaredIn:"src/lib/cli-tools/launch-dialog.ts (GEMINI_TRUST_LAUNCH_DIALOG)"},g={id:"antigravity-folder-trust",question:e.wf,signature:/\bYes, I trust this folder\b/,optionRow:/^\s*(?:\S\s+)?(?:Yes, I trust this folder|No, exit)\s*$/,minOptionRows:2,optionsWithin:4,cursorRow:/^\s*>\s+(\S.*?)\s*$/,safeRow:/^Yes, I trust this folder$/,key:"Enter",liveRows:12,declaredIn:"src/lib/cli-tools/launch-dialog.ts (ANTIGRAVITY_TRUST_LAUNCH_DIALOG)"};function h(a,b){return(0,d.aJ)(a).split("\n").map(a=>a.trimEnd()).filter(a=>""!==a.trim()).slice(-b)}function i(a,b){if(!a.dismissedRow)return b;for(let c=b.length-1;c>=0;c--)if(a.dismissedRow.test(b[c]))return b.slice(c+1);return b}function j(a,b){for(let c=b.length-1;c>=0;c--){if(!a.question.test(b[c]))continue;let d=function(a,b,c){let d=Math.min(b.length-1,c+a.optionsWithin);for(let e=c+1;e<=d;e++){if(!a.optionRow.test(b[e]))continue;let c=[];for(let d=e;d<b.length&&a.optionRow.test(b[d]);d++)c.push(b[d]);return c.length>=a.minOptionRows?c:null}return null}(a,b,c);if(d)return d}return null}function k(a,b){let c=i(a,h(b,a.liveRows)),d=j(a,c);if(!d)return c.some(b=>a.signature.test(b))?{action:"unrecognized",reason:"question-not-found"}:{action:"absent"};let e=[];for(let b of d){let c=a.cursorRow.exec(b);c&&e.push(c[1])}if(0===e.length)return{action:"unrecognized",reason:"cursor-not-found"};if(e.length>1)return{action:"unrecognized",reason:"multiple-cursors"};let f=e[0];return a.safeRow.test(f)?{action:"press",key:a.key}:{action:"hold",reason:"cursor-off-safe-row",cursorLabel:f.slice(0,80)}}function l(a,b){return null!==j(a,i(a,h(b,a.liveRows)))}function m(a,b){return null!==j(a,h(b,a.liveRows))}function n(a,b){return"absent"===b.action||"press"===b.action?null:"hold"===b.action?{event:"launch-dialog-held",fields:{dialog:a.id,...b}}:{event:"launch-dialog-unrecognized",fields:{dialog:a.id,...b,hint:`the dialog's wording or cursor drawing may have changed; compare the screen with ${a.declaredIn}`}}}},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]}`))}},83406:(a,b,c)=>{c.d(b,{Dc:()=>m,F1:()=>j,Qn:()=>l,R6:()=>r,Ug:()=>k,bO:()=>p,jI:()=>o,qT:()=>n,vj:()=>q,zu:()=>i});var d=c(36925);let e=(0,d.v)("__antigravityStartupTrustPending",()=>new Map),f=(0,d.v)("__antigravityStartupWindows",()=>new Map),g=(0,d.v)("__antigravityStartupTrustHolds",()=>new Set),h=(0,d.v)("__antigravityStartupTrustClaims",()=>new Map);function i(a){f.set(a,(f.get(a)??0)+1)}function j(a){let b=f.get(a)??0;b<=1?f.delete(a):f.set(a,b-1)}function k(a){return f.has(a)}function l(a,b=Date.now()){e.set(a,b)}function m(a){return e.has(a)}function n(a,b=Date.now()){if(g.has(a))return!1;let c=e.delete(a);return c&&h.set(a,b),c}function o(a){return g.has(a)}function p(a,b,c=Date.now()){let d=h.get(a);return void 0!==d&&c-d<b}function q(a){return g.add(a),()=>{g.delete(a)}}function r(a){e.delete(a)}},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}}}};
|
|
4
|
+
[添付画像: ${b}]`:`[添付画像: ${b}]`}class aB extends d.Mj{navigationKeys(){return{keys:e.sM,leaderKey:e.Mx}}async isInstalled(){return null!==(await (0,ao.$s)()).executable}async launchSession(a,b,c){let d=await (0,ao.$s)(),e=d.executable;if(!e)throw(0,an.Tl)(this,(0,ao.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 af(h,b),ax.info("opencode-session-exists");return}ax.warn("opencode-session-relaunch",{sessionName:g}),await ah(h)}(0,F.Fq)(h);try{await z(b),j||await this.createLaunchPane(g,b);try{await ay("tmux",["resize-window","-t",(0,f.lA)(g),"-x",String(i),"-y",String(A.xT)])}catch{}await aa(h,b);let d=(0,F.wK)({target:h,executablePath:e.path,worktreePath:b}),k=(0,ak.pr)(h,b),l=null===k?d:(0,ak.XO)(d,k);null!==k&&ax.info("opencode-session-resumed",{worktreeId:a,instanceId:c??this.id,sessionId:k});let m=Date.now();if(await this.typeLaunchLines(g,[(0,au.Y)(l)]),await this.waitForReady(g),!await ad(h)&&null!==(0,X.hC)(h)){let b=await at(m);if(null!==b)throw ax.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").`)}ax.info("started-opencode-session")}catch(b){let a=(0,av.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 ax.info("opencode-composer-detected",{attempt:b}),!0;if(g.LO.test(c))return ax.info("opencode-overlay-detected",{attempt:b}),!0}catch{}await new Promise(a=>setTimeout(a,500))}return ax.info("opencode-ready-detection-timeout"),!1}async trySendViaServer(a,b,c){let d=await this.dispatchViaServer(a,b,c);return"delivered"===d||("skipped"!==d&&(0,aw.sK)(d),!1)}async dispatchViaServer(a,b,c){let d=a.instanceId??a.cliToolId,e=!1;try{let f=(0,X.hC)(a);if(null===f)return"skipped";let g=(0,Z.lf)(a);if("live"!==g.state)return ax.info("opencode-send-skipped-not-live",{worktreeId:a.worktreeId,instanceId:d,port:f,liveness:g.state}),"skipped";let h=(0,Z.ym)(a);if(null===h)return ax.info("opencode-send-skipped-no-session",{worktreeId:a.worktreeId,instanceId:d,port:f}),"skipped";let i=[{type:"text",text:b}];void 0!==c&&i.push({type:"file",mime:(0,E.$Y)((0,l.extname)(c)),filename:(0,l.basename)(c),url:(0,G.fy)(c)});let j=(0,G.CH)(),k=(0,ai.QH)((0,ai.Q1)(a));(0,aw.FU)(),e=!0;let m=await (0,G.wZ)(f,h,j,i,k);if("rejected"===m)return"not_sent";if("unknown"===m)return"unknown";let n=await this.verifyPostedMessage(f,h,j,b);if("found"!==n)return ax.warn("opencode-send-unverified",{worktreeId:a.worktreeId,instanceId:d,port:f,sessionId:h,messageId:j,hasImage:void 0!==c}),"missing"===n?"not_sent":"unknown";return ax.info("opencode-send-delivered-via-api",{worktreeId:a.worktreeId,instanceId:d,port:f,sessionId:h,messageId:j,hasImage:void 0!==c}),"delivered"}catch(b){if((0,aw.fi)(b))throw b;return ax.warn("opencode-send-api-failed",{worktreeId:a.worktreeId,instanceId:d,error:(0,av.u1)(b)}),e?"unknown":"skipped"}}async verifyPostedMessage(a,b,c,d){for(let e of az){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)?"found":"mismatch";if("missing"===f.kind)return"missing"}return"unknown"}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),ax.info("sent-message-to-opencode-session")}catch(b){let a=(0,av.u1)(b);throw Error(`Failed to send message to OpenCode: ${a}`,{cause:b})}}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);ax.info("opencode-image-degraded-to-path",{worktreeId:a,instanceId:d??this.id}),await this.sendMessage(a,aA(b,c),d)}async killSession(a,b){let c=this.getSessionName(a,b),d=_(a,b),e=(0,X.hC)(d),g=await (0,aj.LQ)(d).catch(()=>null);g&&!g.captured&&ax.info("opencode-session-capture-skipped",{sessionName:c,reason:g.skipped}),await ah(d);try{if(await (0,f.N)(c)){await (0,f.V1)(c,"/exit",!1),await new Promise(a=>setTimeout(a,am.pL)),await (0,f.KB)(c,["Enter"]),await new Promise(a=>setTimeout(a,am.KI));let a=await (0,al.rY)({sessionAlive:()=>(0,f.N)(c),portAnswering:null===e?null:async()=>await (0,G.Ok)(e)!==null});a.ok||(ax.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),ax.info("stopped-opencode-session")}catch(a){throw ax.error("session:stop-failed",{error:(0,av.u1)(a)}),a}}async interrupt(a,b){let c=this.getSessionName(a,b);if(await ag(_(a,b))){(0,i.gm)(c),ax.info("opencode-interrupt-aborted-via-api");return}await (0,f.ds)(c,"Escape"),await new Promise(a=>setTimeout(a,am.os)),await (0,f.ds)(c,"Escape"),(0,i.gm)(c),ax.info("opencode-interrupt-sent")}constructor(...a){super(...a),this.id="opencode",this.name="OpenCode",this.command="opencode"}}},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)},70849:(a,b,c)=>{c.d(b,{LQ:()=>k,SW:()=>l});var d=c(72626),e=c(84574),f=c(95375),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:()=>j});var d=c(72626),e=c(40255),f=c(50474),g=c(25071),h=c(17287);let i=(0,d.h)("lib/hooks/permission-adjudication");async function j(a,b,d,k,l="event"){let m=b.instanceId??b.cliToolId,n={worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m},{resolvePermissionRequest:o}=await Promise.all([c.e(3241),c.e(6119)]).then(c.bind(c,43241)),p=o(n,k),q="allow"===p.behavior?{kind:"allowOnce"}:{kind:"abstain"};if("abstain"===q.kind){let c=(0,f.y_)(a);c.safe||i.warn("permission-request-abstain-blocks-agent",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m,toolName:k?.toolName??null,decisionId:d.id,reason:p.reason,consequence:c.summary,blocksForMs:c.blocksForMs})}let r=(0,e.qu)(n,d.id,{outcome:"allow"===p.behavior?"allow":"abstained",..."policy-suppressed"===p.reason&&p.suppressedBy?{withholdReason:p.suppressedBy}:{},promptType:"multiple_choice"}),{delivery:s}=await (0,g.GW)(a,b,d,q),t=s?.delivered===!0,u=t&&a.capabilities.permissionReplyReleasesPrompt;return(0,h.nL)(b.worktreeId,b.cliToolId,b.instanceId,{decisionId:d.id,toolName:k?.toolName??null,behavior:"allow"===p.behavior?"allow":null,reason:p.reason,delivered:t,releasedPrompt:u,trigger:l,at:d.askedAt}),(0,e.YF)(r,{delivered:t,settled:u}),i.info("permission-decision-adjudicated",{worktreeId:b.worktreeId,cliToolId:b.cliToolId,instanceId:m,decisionId:d.id,toolName:k?.toolName??null,behavior:p.behavior,reason:p.reason,suppressedBy:p.suppressedBy,delivered:t,settled:u,trigger:l}),{decisionId:d.id,behavior:"allow"===p.behavior?"allow":null,reason:p.reason,delivered:t,settled:u}}},76877:(a,b,c)=>{c.d(b,{CZ:()=>k,O5:()=>m,g1:()=>f,oy:()=>n,yN:()=>l,z0:()=>g});var d=c(42422),e=c(69082);let f={id:"gemini-folder-trust",question:/Do you trust (?:the files in )?this folder\?/,signature:/\bTrust folder\b|\bDon't trust\b/,cursorRow:/^[\s│]*●\s*(\S.*?)[\s│]*$/,optionRow:/^[\s│]*(?:\S\s+)?\d\.\s+(?:Trust folder|Trust parent folder|Don't trust)\b/,minOptionRows:2,optionsWithin:8,dismissedRow:/restarting to apply the trust changes/,safeRow:/^1\.\s+Trust folder\b/,key:"Enter",liveRows:30,declaredIn:"src/lib/cli-tools/launch-dialog.ts (GEMINI_TRUST_LAUNCH_DIALOG)"},g={id:"antigravity-folder-trust",question:e.wf,signature:/\bYes, I trust this folder\b/,optionRow:/^\s*(?:\S\s+)?(?:Yes, I trust this folder|No, exit)\s*$/,minOptionRows:2,optionsWithin:4,cursorRow:/^\s*>\s+(\S.*?)\s*$/,safeRow:/^Yes, I trust this folder$/,key:"Enter",liveRows:12,declaredIn:"src/lib/cli-tools/launch-dialog.ts (ANTIGRAVITY_TRUST_LAUNCH_DIALOG)"};function h(a,b){return(0,d.aJ)(a).split("\n").map(a=>a.trimEnd()).filter(a=>""!==a.trim()).slice(-b)}function i(a,b){if(!a.dismissedRow)return b;for(let c=b.length-1;c>=0;c--)if(a.dismissedRow.test(b[c]))return b.slice(c+1);return b}function j(a,b){for(let c=b.length-1;c>=0;c--){if(!a.question.test(b[c]))continue;let d=function(a,b,c){let d=Math.min(b.length-1,c+a.optionsWithin);for(let e=c+1;e<=d;e++){if(!a.optionRow.test(b[e]))continue;let c=[];for(let d=e;d<b.length&&a.optionRow.test(b[d]);d++)c.push(b[d]);return c.length>=a.minOptionRows?c:null}return null}(a,b,c);if(d)return d}return null}function k(a,b){let c=i(a,h(b,a.liveRows)),d=j(a,c);if(!d)return c.some(b=>a.signature.test(b))?{action:"unrecognized",reason:"question-not-found"}:{action:"absent"};let e=[];for(let b of d){let c=a.cursorRow.exec(b);c&&e.push(c[1])}if(0===e.length)return{action:"unrecognized",reason:"cursor-not-found"};if(e.length>1)return{action:"unrecognized",reason:"multiple-cursors"};let f=e[0];return a.safeRow.test(f)?{action:"press",key:a.key}:{action:"hold",reason:"cursor-off-safe-row",cursorLabel:f.slice(0,80)}}function l(a,b){return null!==j(a,i(a,h(b,a.liveRows)))}function m(a,b){return null!==j(a,h(b,a.liveRows))}function n(a,b){return"absent"===b.action||"press"===b.action?null:"hold"===b.action?{event:"launch-dialog-held",fields:{dialog:a.id,...b}}:{event:"launch-dialog-unrecognized",fields:{dialog:a.id,...b,hint:`the dialog's wording or cursor drawing may have changed; compare the screen with ${a.declaredIn}`}}}},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]}`))}},83406:(a,b,c)=>{c.d(b,{Dc:()=>m,F1:()=>j,Qn:()=>l,R6:()=>r,Ug:()=>k,bO:()=>p,jI:()=>o,qT:()=>n,vj:()=>q,zu:()=>i});var d=c(36925);let e=(0,d.v)("__antigravityStartupTrustPending",()=>new Map),f=(0,d.v)("__antigravityStartupWindows",()=>new Map),g=(0,d.v)("__antigravityStartupTrustHolds",()=>new Set),h=(0,d.v)("__antigravityStartupTrustClaims",()=>new Map);function i(a){f.set(a,(f.get(a)??0)+1)}function j(a){let b=f.get(a)??0;b<=1?f.delete(a):f.set(a,b-1)}function k(a){return f.has(a)}function l(a,b=Date.now()){e.set(a,b)}function m(a){return e.has(a)}function n(a,b=Date.now()){if(g.has(a))return!1;let c=e.delete(a);return c&&h.set(a,b),c}function o(a){return g.has(a)}function p(a,b,c=Date.now()){let d=h.get(a);return void 0!==d&&c-d<b}function q(a){return g.add(a),()=>{g.delete(a)}}function r(a){e.delete(a)}},89731:(a,b,c)=>{c.d(b,{Mj:()=>G,Km:()=>H});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(56588),z=c(77662),A=c(46689);let B=(0,e.promisify)(d.exec),C=(0,t.h)("cli-tools/base"),D=RegExp(`${s.ZM}=(?:'([^']*)'|"([^"]*)"|(\\S+))`,"g"),E=new Set,F=new Set;class G{async isInstalled(){try{return await B(`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,c,d){let e=null;try{e=this.getSessionName(a,c)}catch{}let f=()=>this.startSessionOnce(a,b,c,d);return null===e?f():(0,z.fb)(e,this.name,f,{cliToolId:this.id,model:d})}async startSessionOnce(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),E.add(a),await (0,g.zT)(a,c)}takeAdoptionMark(a,b){try{let c=this.getSessionName(a,b);return E.delete(c)?c:null}catch{return null}}async warnIfHookUrlIsStale(a,b,d){if(!F.has(b))try{let f=await (0,g.Xg)(b,{startLine:-x.eu});F.add(b);let h=function(a){let b=null;for(let c of(0,q.aJ)(a).matchAll(D)){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;C.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){C.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?(C.info("session:liveness-confirm-recovered",{cliToolId:this.id,firstReason:d.reason}),!0):(C.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 C.warn("session:relaunch-skipped-no-path",{cliToolId:this.id,worktreeId:a});C.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,z.Vk)(e,this.name),!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 typeLaunchLines(a,b){await (0,A.$)(a,b)}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 H(a,b,c){a instanceof G&&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}}}};
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
"wasm": [],
|
|
18
18
|
"assets": [],
|
|
19
19
|
"env": {
|
|
20
|
-
"__NEXT_BUILD_ID": "
|
|
21
|
-
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "
|
|
22
|
-
"__NEXT_PREVIEW_MODE_ID": "
|
|
23
|
-
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "
|
|
24
|
-
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "
|
|
20
|
+
"__NEXT_BUILD_ID": "yGatWDsS532awSs51kXyd",
|
|
21
|
+
"NEXT_SERVER_ACTIONS_ENCRYPTION_KEY": "WRTlP2dwDKqNDICt9nC9CnGHzjbSWbyJsjH6TXBHRfs=",
|
|
22
|
+
"__NEXT_PREVIEW_MODE_ID": "d6be2ad9e38e39c1bd47c5f0a643c904",
|
|
23
|
+
"__NEXT_PREVIEW_MODE_SIGNING_KEY": "e2f40e63f4fdf63d442e301269b7202f7b80a1cb8a09e5b8f9d6b24598986ea8",
|
|
24
|
+
"__NEXT_PREVIEW_MODE_ENCRYPTION_KEY": "099181b42bbcc6223b40884ab3b1ed3a90c9708b0eb11821acb14edb5b5e6466"
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-838df0273b03af19.js" defer=""></script><script src="/_next/static/chunks/framework-eaf13c96191cb608.js" defer=""></script><script src="/_next/static/chunks/main-37ca13e38030fe8b.js" defer=""></script><script src="/_next/static/chunks/pages/_app-4b3fb5e477a0267f.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c970d8b55ace1b48.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-838df0273b03af19.js" defer=""></script><script src="/_next/static/chunks/framework-eaf13c96191cb608.js" defer=""></script><script src="/_next/static/chunks/main-37ca13e38030fe8b.js" defer=""></script><script src="/_next/static/chunks/pages/_app-4b3fb5e477a0267f.js" defer=""></script><script src="/_next/static/chunks/pages/_error-c970d8b55ace1b48.js" defer=""></script><script src="/_next/static/yGatWDsS532awSs51kXyd/_buildManifest.js" defer=""></script><script src="/_next/static/yGatWDsS532awSs51kXyd/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"yGatWDsS532awSs51kXyd","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"node":{},"edge":{},"encryptionKey":"
|
|
1
|
+
{"node":{},"edge":{},"encryptionKey":"WRTlP2dwDKqNDICt9nC9CnGHzjbSWbyJsjH6TXBHRfs="}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2407],{52407:(e,t,n)=>{n.d(t,{Fx:()=>h,Rh:()=>b,_X:()=>c,fl:()=>s,nG:()=>d,sV:()=>o});var r=n(12115),u=n(60199);let l="/api/capabilities";function c(e){return!1!==e.browserOnline&&("connected"===e.realtimeStatus||!0===e.serverReachable)}function o(e){return!1===e.browserOnline||!1===e.serverReachable}let i=new Map;async function a(e,t){let n="function"==typeof AbortController?new AbortController:void 0,r=n?setTimeout(()=>n.abort(),t):void 0;try{return await fetch(e,{method:"GET",cache:"no-store",credentials:"same-origin",signal:null==n?void 0:n.signal}),!0}catch(e){return!1}finally{void 0!==r&&clearTimeout(r)}}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5e3;if("function"!=typeof fetch)return Promise.resolve(!1);let n=i.get(e);if(n)return n;let r=a(e,t).finally(()=>{i.delete(e)});return i.set(e,r),r}let f=new Set;function d(e){f.forEach(t=>{try{t(e)}catch(e){}})}function b(e){return f.add(e),()=>{f.delete(e)}}function h(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{probeUrl:t=l,probeDelayMs:n=1e3,probeIntervalMs:c=15e3,probeTimeoutMs:o=5e3,surfaceDelayMs:i=1500,probe:a=!0}=e,{status:f}=(0,u.xM)(),[d,h]=(0,r.useState)(!0),[v,y]=(0,r.useState)(null),[w,m]=(0,r.useState)(null),p=(0,r.useCallback)(e=>{y(t=>t===e?t:e),e&&m(Date.now())},[]);(0,r.useEffect)(()=>{if("undefined"==typeof navigator)return;h(!1!==navigator.onLine);let e=()=>{y(null),h(!0)},t=()=>{y(null),h(!1)};return window.addEventListener("online",e),window.addEventListener("offline",t),()=>{window.removeEventListener("online",e),window.removeEventListener("offline",t)}},[]),(0,r.useEffect)(()=>{"connected"===f&&p(!0)},[f,p]),(0,r.useEffect)(()=>b(p),[p]);let g=(0,r.useMemo)(()=>({browserOnline:d,realtimeStatus:f,serverReachable:v}),[d,f,v]),S=g.browserOnline?"connected"===g.realtimeStatus?"online":!1===g.serverReachable?"offline":!0===g.serverReachable||"connecting"===g.realtimeStatus?"reconnecting":"offline":"offline",E="online"!==S,k=(0,r.useRef)({url:t,timeoutMs:o});k.current={url:t,timeoutMs:o};let C=a&&E&&d;(0,r.useEffect)(()=>{let e;if(!C||"function"!=typeof fetch)return;let t=!1,r=async()=>{let{url:n,timeoutMs:u}=k.current,l=await s(n,u);t||(p(l),e=setTimeout(r,c))};return e=setTimeout(r,n),()=>{t=!0,void 0!==e&&clearTimeout(e)}},[C,n,c,p]);let[R,T]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(!E)return void T(!1);if(i<=0)return void T(!0);let e=setTimeout(()=>T(!0),i);return()=>clearTimeout(e)},[E,i]);let M=(0,r.useCallback)(()=>{if("function"!=typeof fetch)return;let{url:e,timeoutMs:t}=k.current;s(e,t).then(p)},[p]);return(0,r.useMemo)(()=>({status:S,isOnline:"online"===S,isReconnecting:"reconnecting"===S,isOffline:"offline"===S,shouldSurface:E&&R,signals:g,lastReachableAt:w,recheck:M}),[S,E,R,g,w,M])}},52703:(e,t,n)=>{n.d(t,{Oo:()=>u,ST:()=>r,T4:()=>o,dz:()=>c,rz:()=>l,zS:()=>i});let r="client_version",u="version_mismatch",l="chat_turn_progress",c="messages_invalidated",o="model_changed";function i(e){let t;try{t=JSON.parse(e)}catch(e){return null}if(!t||"object"!=typeof t)return null;let n=t;if("broadcast"===n.type){let e=n.data;return e&&"object"==typeof e?"string"!=typeof e.type?null:(void 0===e.worktreeId&&"string"==typeof n.worktreeId&&(e.worktreeId=n.worktreeId),e):null}return"string"==typeof n.type?n:null}},60199:(e,t,n)=>{n.d(t,{tS:()=>s,xM:()=>f,T3:()=>d});var r=n(95155),u=n(12115),l=n(52703);function c(){return"undefined"!=typeof globalThis&&"function"==typeof globalThis.WebSocket?globalThis.WebSocket:null}let o=()=>{},i={status:"disconnected",connected:!1,subscribe:o,unsubscribe:o,addListener:()=>o},a=(0,u.createContext)(null);function s(e){let{children:t,enabled:n=!0}=e,o=(0,u.useRef)(new Set),i=(0,u.useRef)(new Map),{status:s,subscribe:f,unsubscribe:d}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{onEvent:t,onStatusChange:n,autoReconnect:r=!0,reconnectBaseDelay:o=1e3,reconnectMaxDelay:i=3e4,livenessTimeout:a=75e3,livenessCheckInterval:s=5e3,enabled:f=!0}=e,[d,b]=(0,u.useState)("disconnected"),h=(0,u.useRef)(null),v=(0,u.useRef)(null),y=(0,u.useRef)(0),w=(0,u.useRef)(new Set),m=(0,u.useRef)(!1),p=(0,u.useRef)(0),g=(0,u.useRef)(()=>{}),S=(0,u.useRef)(t);S.current=t;let E=(0,u.useRef)(n);E.current=n;let k=(0,u.useCallback)(e=>{var t;b(e),null==(t=E.current)||t.call(E,e)},[]),C=(0,u.useCallback)(()=>{null!==v.current&&(clearTimeout(v.current),v.current=null)},[]),R=(0,u.useCallback)(()=>{if(m.current||!r||"undefined"!=typeof document&&"hidden"===document.visibilityState)return;C();let e=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Math.random;return Math.max(0,Math.round(Math.min(t*2**Math.max(0,e),n)*(1+(2*r()-1)*.2)))}(y.current,o,i);y.current+=1,v.current=setTimeout(()=>{v.current=null,g.current()},e)},[r,o,i,C]),T=(0,u.useCallback)(()=>{if(!f)return;let e=c();if(!e||h.current&&(h.current.readyState===e.OPEN||h.current.readyState===e.CONNECTING))return;C(),m.current=!1,p.current=Date.now(),k("connecting");let t="https:"===window.location.protocol?"wss:":"ws:",n=new e("".concat(t,"//").concat(window.location.host));h.current=n,n.onopen=()=>{y.current=0,p.current=Date.now(),k("connected");try{n.send(JSON.stringify({type:l.ST,version:"0.49.
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2407],{52407:(e,t,n)=>{n.d(t,{Fx:()=>h,Rh:()=>b,_X:()=>c,fl:()=>s,nG:()=>d,sV:()=>o});var r=n(12115),u=n(60199);let l="/api/capabilities";function c(e){return!1!==e.browserOnline&&("connected"===e.realtimeStatus||!0===e.serverReachable)}function o(e){return!1===e.browserOnline||!1===e.serverReachable}let i=new Map;async function a(e,t){let n="function"==typeof AbortController?new AbortController:void 0,r=n?setTimeout(()=>n.abort(),t):void 0;try{return await fetch(e,{method:"GET",cache:"no-store",credentials:"same-origin",signal:null==n?void 0:n.signal}),!0}catch(e){return!1}finally{void 0!==r&&clearTimeout(r)}}function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5e3;if("function"!=typeof fetch)return Promise.resolve(!1);let n=i.get(e);if(n)return n;let r=a(e,t).finally(()=>{i.delete(e)});return i.set(e,r),r}let f=new Set;function d(e){f.forEach(t=>{try{t(e)}catch(e){}})}function b(e){return f.add(e),()=>{f.delete(e)}}function h(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{probeUrl:t=l,probeDelayMs:n=1e3,probeIntervalMs:c=15e3,probeTimeoutMs:o=5e3,surfaceDelayMs:i=1500,probe:a=!0}=e,{status:f}=(0,u.xM)(),[d,h]=(0,r.useState)(!0),[v,y]=(0,r.useState)(null),[w,m]=(0,r.useState)(null),p=(0,r.useCallback)(e=>{y(t=>t===e?t:e),e&&m(Date.now())},[]);(0,r.useEffect)(()=>{if("undefined"==typeof navigator)return;h(!1!==navigator.onLine);let e=()=>{y(null),h(!0)},t=()=>{y(null),h(!1)};return window.addEventListener("online",e),window.addEventListener("offline",t),()=>{window.removeEventListener("online",e),window.removeEventListener("offline",t)}},[]),(0,r.useEffect)(()=>{"connected"===f&&p(!0)},[f,p]),(0,r.useEffect)(()=>b(p),[p]);let g=(0,r.useMemo)(()=>({browserOnline:d,realtimeStatus:f,serverReachable:v}),[d,f,v]),S=g.browserOnline?"connected"===g.realtimeStatus?"online":!1===g.serverReachable?"offline":!0===g.serverReachable||"connecting"===g.realtimeStatus?"reconnecting":"offline":"offline",E="online"!==S,k=(0,r.useRef)({url:t,timeoutMs:o});k.current={url:t,timeoutMs:o};let C=a&&E&&d;(0,r.useEffect)(()=>{let e;if(!C||"function"!=typeof fetch)return;let t=!1,r=async()=>{let{url:n,timeoutMs:u}=k.current,l=await s(n,u);t||(p(l),e=setTimeout(r,c))};return e=setTimeout(r,n),()=>{t=!0,void 0!==e&&clearTimeout(e)}},[C,n,c,p]);let[R,T]=(0,r.useState)(!1);(0,r.useEffect)(()=>{if(!E)return void T(!1);if(i<=0)return void T(!0);let e=setTimeout(()=>T(!0),i);return()=>clearTimeout(e)},[E,i]);let M=(0,r.useCallback)(()=>{if("function"!=typeof fetch)return;let{url:e,timeoutMs:t}=k.current;s(e,t).then(p)},[p]);return(0,r.useMemo)(()=>({status:S,isOnline:"online"===S,isReconnecting:"reconnecting"===S,isOffline:"offline"===S,shouldSurface:E&&R,signals:g,lastReachableAt:w,recheck:M}),[S,E,R,g,w,M])}},52703:(e,t,n)=>{n.d(t,{Oo:()=>u,ST:()=>r,T4:()=>o,dz:()=>c,rz:()=>l,zS:()=>i});let r="client_version",u="version_mismatch",l="chat_turn_progress",c="messages_invalidated",o="model_changed";function i(e){let t;try{t=JSON.parse(e)}catch(e){return null}if(!t||"object"!=typeof t)return null;let n=t;if("broadcast"===n.type){let e=n.data;return e&&"object"==typeof e?"string"!=typeof e.type?null:(void 0===e.worktreeId&&"string"==typeof n.worktreeId&&(e.worktreeId=n.worktreeId),e):null}return"string"==typeof n.type?n:null}},60199:(e,t,n)=>{n.d(t,{tS:()=>s,xM:()=>f,T3:()=>d});var r=n(95155),u=n(12115),l=n(52703);function c(){return"undefined"!=typeof globalThis&&"function"==typeof globalThis.WebSocket?globalThis.WebSocket:null}let o=()=>{},i={status:"disconnected",connected:!1,subscribe:o,unsubscribe:o,addListener:()=>o},a=(0,u.createContext)(null);function s(e){let{children:t,enabled:n=!0}=e,o=(0,u.useRef)(new Set),i=(0,u.useRef)(new Map),{status:s,subscribe:f,unsubscribe:d}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{onEvent:t,onStatusChange:n,autoReconnect:r=!0,reconnectBaseDelay:o=1e3,reconnectMaxDelay:i=3e4,livenessTimeout:a=75e3,livenessCheckInterval:s=5e3,enabled:f=!0}=e,[d,b]=(0,u.useState)("disconnected"),h=(0,u.useRef)(null),v=(0,u.useRef)(null),y=(0,u.useRef)(0),w=(0,u.useRef)(new Set),m=(0,u.useRef)(!1),p=(0,u.useRef)(0),g=(0,u.useRef)(()=>{}),S=(0,u.useRef)(t);S.current=t;let E=(0,u.useRef)(n);E.current=n;let k=(0,u.useCallback)(e=>{var t;b(e),null==(t=E.current)||t.call(E,e)},[]),C=(0,u.useCallback)(()=>{null!==v.current&&(clearTimeout(v.current),v.current=null)},[]),R=(0,u.useCallback)(()=>{if(m.current||!r||"undefined"!=typeof document&&"hidden"===document.visibilityState)return;C();let e=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Math.random;return Math.max(0,Math.round(Math.min(t*2**Math.max(0,e),n)*(1+(2*r()-1)*.2)))}(y.current,o,i);y.current+=1,v.current=setTimeout(()=>{v.current=null,g.current()},e)},[r,o,i,C]),T=(0,u.useCallback)(()=>{if(!f)return;let e=c();if(!e||h.current&&(h.current.readyState===e.OPEN||h.current.readyState===e.CONNECTING))return;C(),m.current=!1,p.current=Date.now(),k("connecting");let t="https:"===window.location.protocol?"wss:":"ws:",n=new e("".concat(t,"//").concat(window.location.host));h.current=n,n.onopen=()=>{y.current=0,p.current=Date.now(),k("connected");try{n.send(JSON.stringify({type:l.ST,version:"0.49.2"}))}catch(e){}w.current.forEach(e=>{try{n.send(JSON.stringify({type:"subscribe",worktreeId:e}))}catch(e){}})},n.onmessage=e=>{var t;p.current=Date.now();let n="string"==typeof e.data?e.data:String(e.data),r=(0,l.zS)(n);r&&"heartbeat"!==r.type&&(null==(t=S.current)||t.call(S,r))},n.onerror=()=>{k("error")},n.onclose=()=>{h.current=null,k("disconnected"),R()}},[f,k,C,R]);g.current=T;let M=(0,u.useCallback)(()=>{let e=h.current;if(e){e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,h.current=null;try{e.close(4001,"half-open")}catch(e){}k("disconnected"),R()}},[k,R]),O=(0,u.useCallback)(()=>{if(C(),m.current=!0,h.current){try{h.current.close(1e3,"Client disconnect")}catch(e){}h.current=null}},[C]),N=(0,u.useCallback)(e=>{let t=h.current,n=c();if(t&&n&&t.readyState===n.OPEN)try{t.send(JSON.stringify(e))}catch(e){}},[]),_=(0,u.useCallback)(e=>{w.current.has(e)||(w.current.add(e),N({type:"subscribe",worktreeId:e}))},[N]),L=(0,u.useCallback)(e=>{w.current.has(e)&&(w.current.delete(e),N({type:"unsubscribe",worktreeId:e}))},[N]);return(0,u.useEffect)(()=>{if(f)return T(),()=>{O()}},[f,T,O]),(0,u.useEffect)(()=>{if(!f)return;let e=setInterval(()=>{let e=h.current,t=c();e&&t&&e.readyState===t.OPEN&&(Date.now()-p.current<a||M())},s);return()=>clearInterval(e)},[f,a,s,M]),(0,u.useEffect)(()=>{if(!f||"undefined"==typeof document)return;let e=()=>{"visible"===document.visibilityState&&(h.current||(y.current=0,T()))};return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[f,T]),(0,u.useEffect)(()=>{if(!f)return;let e=()=>{h.current||(y.current=0,T())};return window.addEventListener("online",e),()=>window.removeEventListener("online",e)},[f,T]),{status:d,subscribe:_,unsubscribe:L,send:N}}({enabled:n,onEvent:(0,u.useCallback)(e=>{o.current.forEach(t=>{try{t(e)}catch(e){}})},[])}),b=(0,u.useCallback)(e=>{var t;let n=i.current,r=null!=(t=n.get(e))?t:0;n.set(e,r+1),0===r&&f(e)},[f]),h=(0,u.useCallback)(e=>{var t;let n=i.current,r=null!=(t=n.get(e))?t:0;r<=1?(n.delete(e),d(e)):n.set(e,r-1)},[d]),v=(0,u.useCallback)(e=>(o.current.add(e),()=>{o.current.delete(e)}),[]),y=(0,u.useMemo)(()=>({status:s,connected:"connected"===s,subscribe:b,unsubscribe:h,addListener:v}),[s,b,h,v]);return(0,r.jsx)(a.Provider,{value:y,children:t})}function f(){var e;return null!=(e=(0,u.useContext)(a))?e:i}function d(e){let{addListener:t}=f(),n=(0,u.useRef)(e);n.current=e,(0,u.useEffect)(()=>t(e=>n.current(e)),[t])}}}]);
|