commandmate 0.42.1 → 0.43.0
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 +144 -144
- package/.next/app-path-routes-manifest.json +23 -23
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +9 -9
- 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.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.js +1 -1
- package/.next/server/app/api/daily-summary/route.js.nft.json +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.js +1 -1
- package/.next/server/app/api/daily-summary/status/route.js.nft.json +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 +103 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/route.js +1 -1
- package/.next/server/app/api/relays/route.js.nft.json +1 -1
- package/.next/server/app/api/relays/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route.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.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +3 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/direct-input/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.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 +3 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.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]/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 -103
- 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 +3 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js.nft.json +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 +3 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js.nft.json +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 +3 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -103
- 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 +104 -2
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js.nft.json +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 +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +9 -9
- 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 +23 -23
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1501.js +4 -4
- package/.next/server/chunks/1990.js +1 -1
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/22.js +1 -1
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2404.js +4 -3
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/252.js +1 -1
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3730.js +1 -1
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4207.js +3 -3
- package/.next/server/chunks/434.js +1 -1
- package/.next/server/chunks/5064.js +1 -1
- package/.next/server/chunks/5571.js +1 -1
- package/.next/server/chunks/5742.js +1 -1
- package/.next/server/chunks/5775.js +1 -1
- package/.next/server/chunks/611.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6285.js +1 -1
- package/.next/server/chunks/6491.js +103 -0
- package/.next/server/chunks/6661.js +1 -1
- package/.next/server/chunks/6781.js +1 -1
- package/.next/server/chunks/6793.js +1 -1
- package/.next/server/chunks/7491.js +3 -0
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8581.js +2 -2
- package/.next/server/chunks/8583.js +1 -1
- package/.next/server/chunks/8673.js +6 -6
- package/.next/server/chunks/8728.js +2 -2
- package/.next/server/chunks/8791.js +1 -1
- package/.next/server/chunks/8800.js +4 -3
- package/.next/server/chunks/8918.js +5 -5
- package/.next/server/chunks/9130.js +3 -3
- package/.next/server/chunks/{8052.js → 9353.js} +4 -2
- package/.next/server/chunks/9390.js +3 -0
- package/.next/server/chunks/9627.js +4 -4
- package/.next/server/chunks/964.js +1 -1
- package/.next/server/chunks/967.js +1 -0
- package/.next/server/chunks/9731.js +3 -3
- package/.next/server/chunks/9882.js +3 -3
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{1642-fb2e176aaadbd137.js → 1642-767aed8e7c61ef7f.js} +1 -1
- package/.next/static/chunks/{2407-21fbf12d753b8d4d.js → 2407-940df9b11fadafc6.js} +1 -1
- package/.next/static/chunks/{2619-04bc32f026a0d946.js → 2619-a305ad4810f1393a.js} +1 -1
- package/.next/static/chunks/5449-6cb80bab2bd06b79.js +1 -0
- package/.next/static/chunks/7705-1f58d4c03d991fcf.js +1 -0
- package/.next/static/chunks/8165-3525fb42f1b4976e.js +1 -0
- package/.next/static/chunks/app/{layout-8ff4c7c08ef1f621.js → layout-057c850cd0df978e.js} +1 -1
- package/.next/static/chunks/app/review/page-ff9efae3f86eb840.js +1 -0
- package/.next/static/chunks/app/skills/[skillId]/page-74aac15286504ef4.js +1 -0
- package/.next/static/chunks/app/skills/page-182e16168b2fc098.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-eab0bf7564d3f9e2.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/{page-373ea37b16d930c7.js → page-c601f3b3ece6557e.js} +1 -1
- package/.next/trace +13 -13
- package/README.md +3 -3
- package/dist/cli/commands/ask.d.ts.map +1 -1
- package/dist/cli/commands/ask.js +23 -149
- package/dist/cli/commands/reply.d.ts +40 -0
- package/dist/cli/commands/reply.d.ts.map +1 -0
- package/dist/cli/commands/reply.js +133 -0
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +9 -0
- package/dist/cli/commands/wait.d.ts +5 -0
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +10 -1
- package/dist/cli/docs/agent-operations.d.ts +2 -2
- package/dist/cli/docs/agent-operations.d.ts.map +1 -1
- package/dist/cli/docs/agent-operations.js +13 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +4 -0
- package/dist/cli/types/index.d.ts +2 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/reply-ledger.d.ts +95 -0
- package/dist/cli/utils/reply-ledger.d.ts.map +1 -0
- package/dist/cli/utils/reply-ledger.js +187 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts +9 -0
- package/dist/lib/cli-tools/copilot-executable.d.ts.map +1 -1
- package/dist/lib/cli-tools/copilot-executable.js +21 -5
- package/dist/lib/cli-tools/opencode-executable.d.ts +103 -0
- package/dist/lib/cli-tools/opencode-executable.d.ts.map +1 -0
- package/dist/lib/cli-tools/opencode-executable.js +179 -0
- package/dist/lib/cli-tools/types.d.ts +1 -1
- package/dist/lib/cli-tools/types.d.ts.map +1 -1
- package/dist/lib/cli-tools/types.js +5 -1
- package/dist/lib/detection/tools/verified-against.d.ts +15 -0
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +17 -1
- package/dist/lib/detection/version-probes.d.ts.map +1 -1
- package/dist/lib/detection/version-probes.js +14 -1
- package/dist/lib/session/tmux-session-surface.d.ts.map +1 -1
- package/dist/lib/session/tmux-session-surface.js +1 -1
- package/dist/server/locales/en/worktree.json +44 -14
- package/dist/server/locales/ja/worktree.json +44 -14
- package/dist/server/server.js +23 -0
- package/dist/server/src/config/cli-tool-timing-config.js +19 -1
- package/dist/server/src/config/detection-evidence-config.js +3 -0
- package/dist/server/src/config/schedule-config.js +55 -1
- package/dist/server/src/lib/auto-yes-poller.js +47 -4
- package/dist/server/src/lib/cli-tools/agent-mode-spec.js +54 -2
- package/dist/server/src/lib/cli-tools/base.js +6 -2
- package/dist/server/src/lib/cli-tools/command-code.js +55 -1
- package/dist/server/src/lib/cli-tools/composer-spec.js +10 -0
- package/dist/server/src/lib/cli-tools/copilot-executable.js +21 -5
- package/dist/server/src/lib/cli-tools/graceful-exit.js +15 -1
- package/dist/server/src/lib/cli-tools/index.js +3 -1
- package/dist/server/src/lib/cli-tools/install-hints.js +9 -3
- package/dist/server/src/lib/cli-tools/liveness-spec.js +19 -0
- package/dist/server/src/lib/cli-tools/manager.js +2 -0
- package/dist/server/src/lib/cli-tools/opencode-executable.js +179 -0
- package/dist/server/src/lib/cli-tools/opencode-v2.js +369 -0
- package/dist/server/src/lib/cli-tools/opencode.js +29 -5
- package/dist/server/src/lib/cli-tools/types.js +5 -1
- package/dist/server/src/lib/cmate-cli-tool-parser.js +65 -7
- package/dist/server/src/lib/cmate-parser.js +12 -0
- package/dist/server/src/lib/cmate-validator.js +13 -1
- package/dist/server/src/lib/db/worktree-db.js +1 -1
- package/dist/server/src/lib/detection/cli-patterns.js +78 -2
- package/dist/server/src/lib/detection/model-info-extractor.js +79 -7
- package/dist/server/src/lib/detection/status-detector.js +10 -1
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +2 -1
- package/dist/server/src/lib/detection/tools/opencode-v2/detect.js +253 -0
- package/dist/server/src/lib/detection/tools/opencode-v2/dialog-title.js +48 -0
- package/dist/server/src/lib/detection/tools/registry.js +2 -0
- package/dist/server/src/lib/detection/tools/run-detection.js +9 -0
- package/dist/server/src/lib/detection/tools/verified-against.js +17 -1
- package/dist/server/src/lib/detection/upstream-faults.js +8 -0
- package/dist/server/src/lib/detection/version-probes.js +14 -1
- package/dist/server/src/lib/hooks/agent-session-telemetry.js +36 -1
- package/dist/server/src/lib/hooks/sources/opencode/log-diagnosis.js +105 -0
- package/dist/server/src/lib/hooks/sources/opencode/source.js +7 -1
- package/dist/server/src/lib/hooks/sources/opencode-v2/client.js +422 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/decision-labels.js +24 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/history.js +421 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/ingest.js +271 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/mappers.js +165 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/payloads.js +351 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/ports.js +230 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/reattach.js +149 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/runtime.js +180 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/secrets.js +182 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/source.js +295 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/subscription.js +455 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/tool-id.js +18 -0
- package/dist/server/src/lib/hooks/sources/opencode-v2/usage.js +214 -0
- package/dist/server/src/lib/hooks/sources/registry.js +2 -0
- package/dist/server/src/lib/hooks/structured-decision-response.js +14 -5
- package/dist/server/src/lib/job-executor.js +2 -1
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +15 -1
- package/dist/server/src/lib/polling/structured-history-gate.js +19 -5
- package/dist/server/src/lib/relay/relay-delivery.js +4 -1
- package/dist/server/src/lib/session/agent-event-state.js +24 -0
- package/dist/server/src/lib/session/claude-executor.js +184 -10
- package/dist/server/src/lib/session/current-output-builder.js +27 -3
- package/dist/server/src/lib/session/send-user-message.js +4 -0
- package/dist/server/src/lib/session/structured-prompt.js +54 -0
- package/dist/server/src/lib/session/tmux-session-surface.js +1 -1
- package/dist/server/src/lib/skills/compatibility-matrix.js +65 -0
- package/dist/server/src/lib/tmux/tmux.js +48 -2
- package/dist/server/src/lib/verification/env-clean-gate.js +228 -9
- package/dist/server/src/lib/verification/env-snapshot.js +65 -1
- package/dist/server/src/types/cli-tool-contracts.js +10 -2
- package/dist/types/cli-tool-contracts.d.ts +16 -5
- package/dist/types/cli-tool-contracts.d.ts.map +1 -1
- package/dist/types/cli-tool-contracts.js +10 -2
- package/package.json +2 -1
- package/release-notes/0.42.2.json +20 -0
- package/release-notes/0.43.0.json +130 -0
- package/scripts/hooks/cmate-agent-event.sh +14 -0
- package/scripts/opencode-v2/launch.sh +226 -0
- package/.next/server/chunks/4443.js +0 -3
- package/.next/server/chunks/5164.js +0 -1
- package/.next/server/chunks/650.js +0 -1
- package/.next/static/chunks/5449-550bd273dccc3ae4.js +0 -1
- package/.next/static/chunks/7705-2a2936551b0cf9a3.js +0 -1
- package/.next/static/chunks/8165-934ee7ff3b4ddfd4.js +0 -1
- package/.next/static/chunks/app/review/page-30616daa1dc595c2.js +0 -1
- package/.next/static/chunks/app/skills/[skillId]/page-ab7e432b69fccb3b.js +0 -1
- package/.next/static/chunks/app/skills/page-56b4fa11223e0cbd.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-3c946bd2875391fd.js +0 -1
- /package/.next/static/{3M_S0B7dhEDdVE2XSJz1Y → BVkBYdceLRvMROqQIqeBx}/_buildManifest.js +0 -0
- /package/.next/static/{3M_S0B7dhEDdVE2XSJz1Y → BVkBYdceLRvMROqQIqeBx}/_ssgManifest.js +0 -0
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
40
|
exports.COPILOT_VERSION_PROBE_TIMEOUT_MS = void 0;
|
|
41
41
|
exports.findExecutableOnPath = findExecutableOnPath;
|
|
42
|
+
exports.findExecutablesOnPath = findExecutablesOnPath;
|
|
42
43
|
exports.resolveCopilotExecutable = resolveCopilotExecutable;
|
|
43
44
|
const child_process_1 = require("child_process");
|
|
44
45
|
const fs_1 = require("fs");
|
|
@@ -83,17 +84,32 @@ function isExecutableFile(candidate) {
|
|
|
83
84
|
* is; what is copilot-specific is the caller below.
|
|
84
85
|
*/
|
|
85
86
|
function findExecutableOnPath(name) {
|
|
87
|
+
return findExecutablesOnPath(name, 1)[0] ?? null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Every executable named `name` on `PATH`, in `PATH` order, up to `limit`.
|
|
91
|
+
*
|
|
92
|
+
* Issue #2939: `opencode` can name two different programs on one machine
|
|
93
|
+
* (OpenCode 1.x's installer and `@opencode/cli`, which registers `opencode`
|
|
94
|
+
* next to `opencode2`), so "the first one" is not always the one a tool wants.
|
|
95
|
+
* The same walk as {@link findExecutableOnPath}, not a second copy of it.
|
|
96
|
+
*/
|
|
97
|
+
function findExecutablesOnPath(name, limit = Infinity) {
|
|
86
98
|
const rawPath = process.env.PATH;
|
|
87
|
-
if (!rawPath)
|
|
88
|
-
return
|
|
99
|
+
if (!rawPath || limit <= 0)
|
|
100
|
+
return [];
|
|
101
|
+
const found = [];
|
|
89
102
|
for (const directory of rawPath.split(path_1.delimiter)) {
|
|
90
103
|
if (!directory)
|
|
91
104
|
continue;
|
|
92
105
|
const candidate = (0, path_1.join)(directory, name);
|
|
93
|
-
if (isExecutableFile(candidate))
|
|
94
|
-
|
|
106
|
+
if (found.includes(candidate) || !isExecutableFile(candidate))
|
|
107
|
+
continue;
|
|
108
|
+
found.push(candidate);
|
|
109
|
+
if (found.length >= limit)
|
|
110
|
+
break;
|
|
95
111
|
}
|
|
96
|
-
return
|
|
112
|
+
return found;
|
|
97
113
|
}
|
|
98
114
|
/**
|
|
99
115
|
* Where `gh copilot` puts the copy it downloads.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which `opencode` is OpenCode 1.x and which is OpenCode V2 (Issue #2939).
|
|
3
|
+
*
|
|
4
|
+
* ## Why the name is not enough
|
|
5
|
+
*
|
|
6
|
+
* OpenCode V2's npm package `@opencode/cli` (2.0.18) registers **both**
|
|
7
|
+
* `opencode` and `opencode2` in its `bin`. So on a machine that has it,
|
|
8
|
+
* `opencode` may be OpenCode 1.x (its own installer, `~/.opencode/bin`) or
|
|
9
|
+
* OpenCode V2 (`/opt/homebrew/bin/opencode`), decided by nothing but the order
|
|
10
|
+
* of `PATH`. Asking `which opencode` then answers "OpenCode is installed" for a
|
|
11
|
+
* V2 binary, and the v1 launch line (`opencode --port N --hostname …`) reaches
|
|
12
|
+
* a program that has neither flag.
|
|
13
|
+
*
|
|
14
|
+
* The answer here is the version each candidate prints about itself:
|
|
15
|
+
*
|
|
16
|
+
* - OpenCode 1.x prints a bare `1.18.33`;
|
|
17
|
+
* - OpenCode V2 prints `opencode v2.0.18`.
|
|
18
|
+
*
|
|
19
|
+
* Every `opencode` / `opencode2` on `PATH` is a candidate, not just the first,
|
|
20
|
+
* so a V2 `opencode` earlier on `PATH` no longer hides a 1.x one behind it.
|
|
21
|
+
*
|
|
22
|
+
* ## Probe and launch are one measurement
|
|
23
|
+
*
|
|
24
|
+
* The path that answered is the path the launch line runs — the rule
|
|
25
|
+
* `./copilot-executable` set for copilot (#1907). The server resolves names on
|
|
26
|
+
* its own `PATH`, the pane on its login shell's; typing a bare `opencode` would
|
|
27
|
+
* let the two disagree.
|
|
28
|
+
*
|
|
29
|
+
* ## Cost
|
|
30
|
+
*
|
|
31
|
+
* `opencode --version` takes ~0.4 s and both tools probe `opencode`, so one
|
|
32
|
+
* probe per path is shared for {@link OPENCODE_EXECUTABLE_CACHE_TTL_MS}, and a
|
|
33
|
+
* concurrent caller gets the probe already in flight.
|
|
34
|
+
*
|
|
35
|
+
* @module lib/cli-tools/opencode-executable
|
|
36
|
+
*/
|
|
37
|
+
/** OpenCode 1.x's executable name (tool id `opencode`). */
|
|
38
|
+
export declare const OPENCODE_V1_BINARY_NAME = "opencode";
|
|
39
|
+
/** OpenCode V2's own executable name (tool id `opencode-v2`). */
|
|
40
|
+
export declare const OPENCODE_V2_BINARY_NAME = "opencode2";
|
|
41
|
+
/** Budget for one `--version`. */
|
|
42
|
+
export declare const OPENCODE_VERSION_PROBE_TIMEOUT_MS = 5000;
|
|
43
|
+
/** How long one probe result is reused (same TTL as the installed-agents cache). */
|
|
44
|
+
export declare const OPENCODE_EXECUTABLE_CACHE_TTL_MS = 30000;
|
|
45
|
+
/** Which OpenCode a binary is. */
|
|
46
|
+
export type OpencodeGeneration = 'v1' | 'v2';
|
|
47
|
+
/** What `--version` said, when it said something recognisable. */
|
|
48
|
+
export interface OpencodeVersionInfo {
|
|
49
|
+
readonly generation: OpencodeGeneration;
|
|
50
|
+
/** `major.minor.patch` (plus any pre-release suffix). */
|
|
51
|
+
readonly version: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Classify `opencode --version` / `opencode2 --version` output.
|
|
55
|
+
*
|
|
56
|
+
* A line has to be a version in one of the two forms and nothing else, so a
|
|
57
|
+
* different program that happens to print a number is not taken for either.
|
|
58
|
+
* The major version decides: 1 is OpenCode 1.x, 2 or later is OpenCode V2.
|
|
59
|
+
* `0.x` (the pre-1.0 `opencode`) and anything unreadable are null.
|
|
60
|
+
*
|
|
61
|
+
* @returns The generation and version, or null when the output is not OpenCode's
|
|
62
|
+
*/
|
|
63
|
+
export declare function parseOpencodeVersionOutput(output: string): OpencodeVersionInfo | null;
|
|
64
|
+
/** One candidate and what it answered (null: no recognisable answer). */
|
|
65
|
+
export interface OpencodeProbe {
|
|
66
|
+
readonly path: string;
|
|
67
|
+
readonly info: OpencodeVersionInfo | null;
|
|
68
|
+
}
|
|
69
|
+
/** The binary a tool will run. */
|
|
70
|
+
export interface OpencodeExecutable {
|
|
71
|
+
/** Absolute path, as found on `PATH` — the launch line runs exactly this. */
|
|
72
|
+
readonly path: string;
|
|
73
|
+
readonly version: string;
|
|
74
|
+
readonly generation: OpencodeGeneration;
|
|
75
|
+
}
|
|
76
|
+
/** A resolution: what was chosen, and every candidate asked on the way. */
|
|
77
|
+
export interface OpencodeResolution {
|
|
78
|
+
readonly executable: OpencodeExecutable | null;
|
|
79
|
+
readonly probed: readonly OpencodeProbe[];
|
|
80
|
+
}
|
|
81
|
+
/** Forget every cached probe (tests, and a caller that knows the install changed). */
|
|
82
|
+
export declare function clearOpencodeExecutableCache(): void;
|
|
83
|
+
/** `<path> --version`, classified; cached per path. Never rejects. */
|
|
84
|
+
export declare function probeOpencodeExecutable(path: string): Promise<OpencodeVersionInfo | null>;
|
|
85
|
+
/**
|
|
86
|
+
* OpenCode 1.x: the first `opencode` on `PATH` that prints a 1.x version.
|
|
87
|
+
* An `opencode` that answers `opencode v2.x` is skipped, never launched.
|
|
88
|
+
*/
|
|
89
|
+
export declare function resolveOpencodeV1Executable(): Promise<OpencodeResolution>;
|
|
90
|
+
/**
|
|
91
|
+
* OpenCode V2: `opencode2` first, then an `opencode` that prints
|
|
92
|
+
* `opencode v2.x` — for an operator who has V2 only under the `opencode` name.
|
|
93
|
+
*/
|
|
94
|
+
export declare function resolveOpencodeV2Executable(): Promise<OpencodeResolution>;
|
|
95
|
+
/**
|
|
96
|
+
* Why OpenCode 1.x counts as not installed, when there is more to say than
|
|
97
|
+
* "no `opencode` on PATH".
|
|
98
|
+
*
|
|
99
|
+
* @returns A sentence naming the `opencode` that is there and what it is, or
|
|
100
|
+
* null when nothing called `opencode` was found at all
|
|
101
|
+
*/
|
|
102
|
+
export declare function describeOpencodeV1Unavailable(resolution: OpencodeResolution): string | null;
|
|
103
|
+
//# sourceMappingURL=opencode-executable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-executable.d.ts","sourceRoot":"","sources":["../../../src/lib/cli-tools/opencode-executable.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,2DAA2D;AAC3D,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,iEAAiE;AACjE,eAAO,MAAM,uBAAuB,cAAc,CAAC;AAEnD,kCAAkC;AAClC,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAKtD,oFAAoF;AACpF,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAKvD,kCAAkC;AAClC,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAQD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAarF;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAC3C;AAED,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;CACzC;AAED,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AASD,sFAAsF;AACtF,wBAAgB,4BAA4B,IAAI,IAAI,CAEnD;AA2BD,sEAAsE;AACtE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAOzF;AAqBD;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAEzE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAEzE;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAe3F"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Which `opencode` is OpenCode 1.x and which is OpenCode V2 (Issue #2939).
|
|
4
|
+
*
|
|
5
|
+
* ## Why the name is not enough
|
|
6
|
+
*
|
|
7
|
+
* OpenCode V2's npm package `@opencode/cli` (2.0.18) registers **both**
|
|
8
|
+
* `opencode` and `opencode2` in its `bin`. So on a machine that has it,
|
|
9
|
+
* `opencode` may be OpenCode 1.x (its own installer, `~/.opencode/bin`) or
|
|
10
|
+
* OpenCode V2 (`/opt/homebrew/bin/opencode`), decided by nothing but the order
|
|
11
|
+
* of `PATH`. Asking `which opencode` then answers "OpenCode is installed" for a
|
|
12
|
+
* V2 binary, and the v1 launch line (`opencode --port N --hostname …`) reaches
|
|
13
|
+
* a program that has neither flag.
|
|
14
|
+
*
|
|
15
|
+
* The answer here is the version each candidate prints about itself:
|
|
16
|
+
*
|
|
17
|
+
* - OpenCode 1.x prints a bare `1.18.33`;
|
|
18
|
+
* - OpenCode V2 prints `opencode v2.0.18`.
|
|
19
|
+
*
|
|
20
|
+
* Every `opencode` / `opencode2` on `PATH` is a candidate, not just the first,
|
|
21
|
+
* so a V2 `opencode` earlier on `PATH` no longer hides a 1.x one behind it.
|
|
22
|
+
*
|
|
23
|
+
* ## Probe and launch are one measurement
|
|
24
|
+
*
|
|
25
|
+
* The path that answered is the path the launch line runs — the rule
|
|
26
|
+
* `./copilot-executable` set for copilot (#1907). The server resolves names on
|
|
27
|
+
* its own `PATH`, the pane on its login shell's; typing a bare `opencode` would
|
|
28
|
+
* let the two disagree.
|
|
29
|
+
*
|
|
30
|
+
* ## Cost
|
|
31
|
+
*
|
|
32
|
+
* `opencode --version` takes ~0.4 s and both tools probe `opencode`, so one
|
|
33
|
+
* probe per path is shared for {@link OPENCODE_EXECUTABLE_CACHE_TTL_MS}, and a
|
|
34
|
+
* concurrent caller gets the probe already in flight.
|
|
35
|
+
*
|
|
36
|
+
* @module lib/cli-tools/opencode-executable
|
|
37
|
+
*/
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.OPENCODE_EXECUTABLE_CACHE_TTL_MS = exports.OPENCODE_VERSION_PROBE_TIMEOUT_MS = exports.OPENCODE_V2_BINARY_NAME = exports.OPENCODE_V1_BINARY_NAME = void 0;
|
|
40
|
+
exports.parseOpencodeVersionOutput = parseOpencodeVersionOutput;
|
|
41
|
+
exports.clearOpencodeExecutableCache = clearOpencodeExecutableCache;
|
|
42
|
+
exports.probeOpencodeExecutable = probeOpencodeExecutable;
|
|
43
|
+
exports.resolveOpencodeV1Executable = resolveOpencodeV1Executable;
|
|
44
|
+
exports.resolveOpencodeV2Executable = resolveOpencodeV2Executable;
|
|
45
|
+
exports.describeOpencodeV1Unavailable = describeOpencodeV1Unavailable;
|
|
46
|
+
const child_process_1 = require("child_process");
|
|
47
|
+
const copilot_executable_1 = require("./copilot-executable");
|
|
48
|
+
const env_sanitizer_1 = require("../security/env-sanitizer");
|
|
49
|
+
/** OpenCode 1.x's executable name (tool id `opencode`). */
|
|
50
|
+
exports.OPENCODE_V1_BINARY_NAME = 'opencode';
|
|
51
|
+
/** OpenCode V2's own executable name (tool id `opencode-v2`). */
|
|
52
|
+
exports.OPENCODE_V2_BINARY_NAME = 'opencode2';
|
|
53
|
+
/** Budget for one `--version`. */
|
|
54
|
+
exports.OPENCODE_VERSION_PROBE_TIMEOUT_MS = 5000;
|
|
55
|
+
/** `--version` prints one short line; anything bigger is not an answer. */
|
|
56
|
+
const OPENCODE_VERSION_PROBE_MAX_BUFFER = 64 * 1024;
|
|
57
|
+
/** How long one probe result is reused (same TTL as the installed-agents cache). */
|
|
58
|
+
exports.OPENCODE_EXECUTABLE_CACHE_TTL_MS = 30_000;
|
|
59
|
+
/** Candidates probed per name. A PATH with more copies than this is not a setup to guess about. */
|
|
60
|
+
const MAX_CANDIDATES_PER_NAME = 4;
|
|
61
|
+
/** `opencode v2.0.18` — OpenCode V2's form. */
|
|
62
|
+
const PREFIXED_VERSION_LINE = /^opencode v(\d+)\.(\d+)\.(\d+)((?:[-+][0-9A-Za-z.-]+)?)$/;
|
|
63
|
+
/** `1.18.33` — OpenCode 1.x's form: the version and nothing else. */
|
|
64
|
+
const BARE_VERSION_LINE = /^v?(\d+)\.(\d+)\.(\d+)((?:[-+][0-9A-Za-z.-]+)?)$/;
|
|
65
|
+
/**
|
|
66
|
+
* Classify `opencode --version` / `opencode2 --version` output.
|
|
67
|
+
*
|
|
68
|
+
* A line has to be a version in one of the two forms and nothing else, so a
|
|
69
|
+
* different program that happens to print a number is not taken for either.
|
|
70
|
+
* The major version decides: 1 is OpenCode 1.x, 2 or later is OpenCode V2.
|
|
71
|
+
* `0.x` (the pre-1.0 `opencode`) and anything unreadable are null.
|
|
72
|
+
*
|
|
73
|
+
* @returns The generation and version, or null when the output is not OpenCode's
|
|
74
|
+
*/
|
|
75
|
+
function parseOpencodeVersionOutput(output) {
|
|
76
|
+
for (const rawLine of output.split(/\r?\n/)) {
|
|
77
|
+
const line = rawLine.trim();
|
|
78
|
+
if (!line)
|
|
79
|
+
continue;
|
|
80
|
+
const match = PREFIXED_VERSION_LINE.exec(line) ?? BARE_VERSION_LINE.exec(line);
|
|
81
|
+
if (!match)
|
|
82
|
+
continue;
|
|
83
|
+
const major = Number(match[1]);
|
|
84
|
+
const version = `${match[1]}.${match[2]}.${match[3]}${match[4] ?? ''}`;
|
|
85
|
+
if (major === 1)
|
|
86
|
+
return { generation: 'v1', version };
|
|
87
|
+
if (major >= 2)
|
|
88
|
+
return { generation: 'v2', version };
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
const probeCache = new Map();
|
|
94
|
+
/** Forget every cached probe (tests, and a caller that knows the install changed). */
|
|
95
|
+
function clearOpencodeExecutableCache() {
|
|
96
|
+
probeCache.clear();
|
|
97
|
+
}
|
|
98
|
+
function runVersionProbe(executable) {
|
|
99
|
+
return new Promise((resolve) => {
|
|
100
|
+
try {
|
|
101
|
+
(0, child_process_1.execFile)(executable, ['--version'], {
|
|
102
|
+
timeout: exports.OPENCODE_VERSION_PROBE_TIMEOUT_MS,
|
|
103
|
+
maxBuffer: OPENCODE_VERSION_PROBE_MAX_BUFFER,
|
|
104
|
+
env: (0, env_sanitizer_1.sanitizeEnvForChildProcess)(),
|
|
105
|
+
}, (error, stdout, stderr) => {
|
|
106
|
+
if (error) {
|
|
107
|
+
resolve(null);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
resolve(parseOpencodeVersionOutput(`${stdout ?? ''}\n${stderr ?? ''}`));
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
resolve(null);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/** `<path> --version`, classified; cached per path. Never rejects. */
|
|
119
|
+
function probeOpencodeExecutable(path) {
|
|
120
|
+
const now = Date.now();
|
|
121
|
+
const cached = probeCache.get(path);
|
|
122
|
+
if (cached && cached.expiresAt > now)
|
|
123
|
+
return cached.info;
|
|
124
|
+
const info = runVersionProbe(path);
|
|
125
|
+
probeCache.set(path, { expiresAt: now + exports.OPENCODE_EXECUTABLE_CACHE_TTL_MS, info });
|
|
126
|
+
return info;
|
|
127
|
+
}
|
|
128
|
+
/** Probe `names` in order and return the first candidate of `generation`. */
|
|
129
|
+
async function resolveGeneration(names, generation) {
|
|
130
|
+
const probed = [];
|
|
131
|
+
for (const name of names) {
|
|
132
|
+
for (const path of (0, copilot_executable_1.findExecutablesOnPath)(name, MAX_CANDIDATES_PER_NAME)) {
|
|
133
|
+
if (probed.some((p) => p.path === path))
|
|
134
|
+
continue;
|
|
135
|
+
const info = await probeOpencodeExecutable(path);
|
|
136
|
+
probed.push({ path, info });
|
|
137
|
+
if (info?.generation === generation) {
|
|
138
|
+
return { executable: { path, version: info.version, generation }, probed };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return { executable: null, probed };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* OpenCode 1.x: the first `opencode` on `PATH` that prints a 1.x version.
|
|
146
|
+
* An `opencode` that answers `opencode v2.x` is skipped, never launched.
|
|
147
|
+
*/
|
|
148
|
+
function resolveOpencodeV1Executable() {
|
|
149
|
+
return resolveGeneration([exports.OPENCODE_V1_BINARY_NAME], 'v1');
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* OpenCode V2: `opencode2` first, then an `opencode` that prints
|
|
153
|
+
* `opencode v2.x` — for an operator who has V2 only under the `opencode` name.
|
|
154
|
+
*/
|
|
155
|
+
function resolveOpencodeV2Executable() {
|
|
156
|
+
return resolveGeneration([exports.OPENCODE_V2_BINARY_NAME, exports.OPENCODE_V1_BINARY_NAME], 'v2');
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Why OpenCode 1.x counts as not installed, when there is more to say than
|
|
160
|
+
* "no `opencode` on PATH".
|
|
161
|
+
*
|
|
162
|
+
* @returns A sentence naming the `opencode` that is there and what it is, or
|
|
163
|
+
* null when nothing called `opencode` was found at all
|
|
164
|
+
*/
|
|
165
|
+
function describeOpencodeV1Unavailable(resolution) {
|
|
166
|
+
if (resolution.executable)
|
|
167
|
+
return null;
|
|
168
|
+
const v2 = resolution.probed.find((p) => p.info?.generation === 'v2');
|
|
169
|
+
if (v2?.info) {
|
|
170
|
+
return (`\`opencode\` at ${v2.path} is OpenCode V2 ${v2.info.version}, not OpenCode 1.x ` +
|
|
171
|
+
'(npm `@opencode/cli` registers both `opencode` and `opencode2`). ' +
|
|
172
|
+
'Use the OpenCode V2 agent, or put an OpenCode 1.x `opencode` on PATH.');
|
|
173
|
+
}
|
|
174
|
+
const other = resolution.probed[0];
|
|
175
|
+
if (other) {
|
|
176
|
+
return `\`opencode\` at ${other.path} did not report an OpenCode 1.x version (\`opencode --version\`).`;
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
@@ -7,7 +7,7 @@ import type { AgentModeSpec, CaptureSpec, ComposerSpec, GracefulExitSpec, Naviga
|
|
|
7
7
|
* T2.1: Single source of truth for CLI tool IDs
|
|
8
8
|
* CLIToolType is derived from this constant (DRY principle)
|
|
9
9
|
*/
|
|
10
|
-
export declare const CLI_TOOL_IDS: readonly ["claude", "codex", "gemini", "vibe-local", "opencode", "copilot", "antigravity", "command-code"];
|
|
10
|
+
export declare const CLI_TOOL_IDS: readonly ["claude", "codex", "gemini", "vibe-local", "opencode", "copilot", "antigravity", "command-code", "opencode-v2"];
|
|
11
11
|
/**
|
|
12
12
|
* CLIツールタイプ
|
|
13
13
|
* Derived from CLI_TOOL_IDS for type safety and sync
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/cli-tools/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AAExC;;;;GAIG;AACH,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/cli-tools/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ exports.isImageCapableCLITool = isImageCapableCLITool;
|
|
|
24
24
|
* T2.1: Single source of truth for CLI tool IDs
|
|
25
25
|
* CLIToolType is derived from this constant (DRY principle)
|
|
26
26
|
*/
|
|
27
|
-
exports.CLI_TOOL_IDS = ['claude', 'codex', 'gemini', 'vibe-local', 'opencode', 'copilot', 'antigravity', 'command-code'];
|
|
27
|
+
exports.CLI_TOOL_IDS = ['claude', 'codex', 'gemini', 'vibe-local', 'opencode', 'copilot', 'antigravity', 'command-code', 'opencode-v2'];
|
|
28
28
|
/**
|
|
29
29
|
* CLI tools that render inside the terminal's alternate screen (Issue #1268).
|
|
30
30
|
*
|
|
@@ -48,6 +48,9 @@ const ALTERNATE_SCREEN_CLI_TOOLS = new Set([
|
|
|
48
48
|
// INLINE -- measured on 1.40.1, `#{alternate_on}` is 0 and the pane keeps its
|
|
49
49
|
// scrollback -- so its captured line count really is a monotonic cursor, the
|
|
50
50
|
// way codex's and agy's are.
|
|
51
|
+
// Issue #2934: OpenCode V2's TUI is the same full-screen toolkit as v1's
|
|
52
|
+
// (`#{alternate_on}` 1 on 2.0.18, measured 2026-09-28).
|
|
53
|
+
'opencode-v2',
|
|
51
54
|
]);
|
|
52
55
|
/**
|
|
53
56
|
* Whether a CLI tool renders in the terminal's alternate screen, making the
|
|
@@ -195,6 +198,7 @@ exports.CLI_TOOL_DISPLAY_NAMES = {
|
|
|
195
198
|
copilot: 'Copilot',
|
|
196
199
|
antigravity: 'Antigravity',
|
|
197
200
|
'command-code': 'Command Code',
|
|
201
|
+
'opencode-v2': 'OpenCode V2',
|
|
198
202
|
};
|
|
199
203
|
/**
|
|
200
204
|
* Check if a string is a valid CLIToolType
|
|
@@ -221,6 +221,21 @@ export declare const COMMAND_CODE_VERIFIED_AGAINST: {
|
|
|
221
221
|
readonly capturedAt: "2026-09-20";
|
|
222
222
|
readonly paneGeometry: "200x1000";
|
|
223
223
|
};
|
|
224
|
+
/**
|
|
225
|
+
* OpenCode V2 (`opencode2`, npm `@opencode/cli`) — Issue #2934, Epic #2370
|
|
226
|
+
* Phase 1.
|
|
227
|
+
*
|
|
228
|
+
* 2.0.18 is the build Phase 0 and Phase 1 were measured on (2026-09-28, pane
|
|
229
|
+
* 80x200): the SSE vocabulary the state is read from, and the composer / footer
|
|
230
|
+
* rows the send path and the fallback reader match. OpenCode V2 shipped 18
|
|
231
|
+
* releases in its first two weeks, so this stamp is expected to go `stale`
|
|
232
|
+
* quickly — which is the freshness probe doing its job, not a defect.
|
|
233
|
+
*/
|
|
234
|
+
export declare const OPENCODE_V2_VERIFIED_AGAINST: {
|
|
235
|
+
readonly version: "2.0.18";
|
|
236
|
+
readonly capturedAt: "2026-09-28";
|
|
237
|
+
readonly paneGeometry: "80x200";
|
|
238
|
+
};
|
|
224
239
|
/**
|
|
225
240
|
* The stamp for a tool whose frames nobody has captured yet.
|
|
226
241
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verified-against.d.ts","sourceRoot":"","sources":["../../../../src/lib/detection/tools/verified-against.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,6BAA6B;;;;CAIhC,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;CAI9B,CAAC;AAEX,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"verified-against.d.ts","sourceRoot":"","sources":["../../../../src/lib/detection/tools/verified-against.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,iEAAiE;AACjE,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB;;;;CAI5B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,6BAA6B;;;;CAIhC,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B;;;;CAI/B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;CAI9B,CAAC;AAEX,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAUpF,CAAC"}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* instead of importing it.
|
|
27
27
|
*/
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.DETECTOR_VERIFIED_AGAINST = exports.UNMEASURED_VERIFIED_AGAINST = exports.COMMAND_CODE_VERIFIED_AGAINST = exports.ANTIGRAVITY_VERIFIED_AGAINST = exports.OPENCODE_VERIFIED_AGAINST = exports.COPILOT_VERIFIED_AGAINST = exports.CODEX_VERIFIED_AGAINST = exports.CLAUDE_VERIFIED_AGAINST = void 0;
|
|
29
|
+
exports.DETECTOR_VERIFIED_AGAINST = exports.UNMEASURED_VERIFIED_AGAINST = exports.OPENCODE_V2_VERIFIED_AGAINST = exports.COMMAND_CODE_VERIFIED_AGAINST = exports.ANTIGRAVITY_VERIFIED_AGAINST = exports.OPENCODE_VERIFIED_AGAINST = exports.COPILOT_VERIFIED_AGAINST = exports.CODEX_VERIFIED_AGAINST = exports.CLAUDE_VERIFIED_AGAINST = void 0;
|
|
30
30
|
/** claude these rules were read off (#1708 / #1927 fixtures). */
|
|
31
31
|
exports.CLAUDE_VERIFIED_AGAINST = {
|
|
32
32
|
version: '2.1.240',
|
|
@@ -224,6 +224,21 @@ exports.COMMAND_CODE_VERIFIED_AGAINST = {
|
|
|
224
224
|
capturedAt: '2026-09-20',
|
|
225
225
|
paneGeometry: '200x1000',
|
|
226
226
|
};
|
|
227
|
+
/**
|
|
228
|
+
* OpenCode V2 (`opencode2`, npm `@opencode/cli`) — Issue #2934, Epic #2370
|
|
229
|
+
* Phase 1.
|
|
230
|
+
*
|
|
231
|
+
* 2.0.18 is the build Phase 0 and Phase 1 were measured on (2026-09-28, pane
|
|
232
|
+
* 80x200): the SSE vocabulary the state is read from, and the composer / footer
|
|
233
|
+
* rows the send path and the fallback reader match. OpenCode V2 shipped 18
|
|
234
|
+
* releases in its first two weeks, so this stamp is expected to go `stale`
|
|
235
|
+
* quickly — which is the freshness probe doing its job, not a defect.
|
|
236
|
+
*/
|
|
237
|
+
exports.OPENCODE_V2_VERIFIED_AGAINST = {
|
|
238
|
+
version: '2.0.18',
|
|
239
|
+
capturedAt: '2026-09-28',
|
|
240
|
+
paneGeometry: '80x200',
|
|
241
|
+
};
|
|
227
242
|
/**
|
|
228
243
|
* The stamp for a tool whose frames nobody has captured yet.
|
|
229
244
|
*
|
|
@@ -251,6 +266,7 @@ exports.DETECTOR_VERIFIED_AGAINST = {
|
|
|
251
266
|
opencode: exports.OPENCODE_VERIFIED_AGAINST,
|
|
252
267
|
antigravity: exports.ANTIGRAVITY_VERIFIED_AGAINST,
|
|
253
268
|
'command-code': exports.COMMAND_CODE_VERIFIED_AGAINST,
|
|
269
|
+
'opencode-v2': exports.OPENCODE_V2_VERIFIED_AGAINST,
|
|
254
270
|
gemini: exports.UNMEASURED_VERIFIED_AGAINST,
|
|
255
271
|
'vibe-local': exports.UNMEASURED_VERIFIED_AGAINST,
|
|
256
272
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-probes.d.ts","sourceRoot":"","sources":["../../../src/lib/detection/version-probes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;
|
|
1
|
+
{"version":3,"file":"version-probes.d.ts","sourceRoot":"","sources":["../../../src/lib/detection/version-probes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AAWH,0FAA0F;AAC1F,eAAO,MAAM,iCAAiC,OAAO,CAAC;AActD,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7D;AAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAAE,CAAC;AAEjF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAuBlF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;AAKjF;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4B3F;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAWrF;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,oBAAoB,EAAE,GAAG,iBAAiB,CAO5F;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,IAAI,iBAAiB,GAAG,SAAS,CAS5E;AAED,wFAAwF;AACxF,wBAAgB,8BAA8B,IAAI,IAAI,CAGrD"}
|
|
@@ -104,6 +104,7 @@ exports.getDetectorStalenessSnapshot = getDetectorStalenessSnapshot;
|
|
|
104
104
|
exports.clearDetectorVersionProbeCache = clearDetectorVersionProbeCache;
|
|
105
105
|
const child_process_1 = require("child_process");
|
|
106
106
|
const copilot_executable_1 = require("../cli-tools/copilot-executable");
|
|
107
|
+
const opencode_executable_1 = require("../cli-tools/opencode-executable");
|
|
107
108
|
const env_sanitizer_1 = require("../security/env-sanitizer");
|
|
108
109
|
const verified_against_1 = require("./tools/verified-against");
|
|
109
110
|
/** Budget for one `<cli> --version`. Matches the catalog probe and copilot-executable. */
|
|
@@ -202,7 +203,19 @@ exports.DETECTOR_VERSION_PROBES = {
|
|
|
202
203
|
codex: { kind: 'execFile', command: 'codex', args: ['--version'] },
|
|
203
204
|
antigravity: { kind: 'execFile', command: 'agy', args: ['--version'] },
|
|
204
205
|
'command-code': { kind: 'execFile', command: 'commandcode', args: ['--version'] },
|
|
205
|
-
|
|
206
|
+
// Issue #2939: both OpenCodes are delegated, like copilot. `opencode` may be
|
|
207
|
+
// OpenCode V2 (npm `@opencode/cli` registers it next to `opencode2`), so the
|
|
208
|
+
// row reads the version of the binary each tool would launch — the same
|
|
209
|
+
// resolution `isInstalled()` and the launch line use, never `opencode v2.x`
|
|
210
|
+
// filed as OpenCode 1.x's version.
|
|
211
|
+
opencode: {
|
|
212
|
+
kind: 'delegated',
|
|
213
|
+
probe: async () => (await (0, opencode_executable_1.resolveOpencodeV1Executable)()).executable?.version ?? null,
|
|
214
|
+
},
|
|
215
|
+
'opencode-v2': {
|
|
216
|
+
kind: 'delegated',
|
|
217
|
+
probe: async () => (await (0, opencode_executable_1.resolveOpencodeV2Executable)()).executable?.version ?? null,
|
|
218
|
+
},
|
|
206
219
|
gemini: { kind: 'execFile', command: 'gemini', args: ['--version'] },
|
|
207
220
|
copilot: {
|
|
208
221
|
kind: 'delegated',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux-session-surface.d.ts","sourceRoot":"","sources":["../../../src/lib/session/tmux-session-surface.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tmux-session-surface.d.ts","sourceRoot":"","sources":["../../../src/lib/session/tmux-session-surface.ts"],"names":[],"mappings":"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"}
|
|
@@ -343,7 +343,7 @@ function isLiveAttachEligibleSession(sessionName) {
|
|
|
343
343
|
* `tests/unit/tmux/session-surface-2317.test.ts`, so a tool moving in or out of
|
|
344
344
|
* the alternate screen breaks a test rather than silently dropping the hint.
|
|
345
345
|
*/
|
|
346
|
-
exports.ALT_SCREEN_TOOLS = ['claude', 'opencode', 'copilot'];
|
|
346
|
+
exports.ALT_SCREEN_TOOLS = ['claude', 'opencode', 'copilot', 'opencode-v2'];
|
|
347
347
|
/** Whether `attach` should warn that a bare attach shows no transcript. */
|
|
348
348
|
function usesAltScreen(cliToolId) {
|
|
349
349
|
return exports.ALT_SCREEN_TOOLS.includes(cliToolId);
|