commandmate 0.42.2 → 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 +148 -148
- package/.next/app-path-routes-manifest.json +25 -25
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_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 +25 -25
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1501.js +3 -3
- 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/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/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 +3 -3
- 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-6b9e12c099fa598c.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-5b95e1236dcd9ef6.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/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/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/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 +87 -5
- 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.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-59f5337e031518c6.js +0 -1
- /package/.next/static/{MXZXkcFAnpELZnxxHB4iJ → BVkBYdceLRvMROqQIqeBx}/_buildManifest.js +0 -0
- /package/.next/static/{MXZXkcFAnpELZnxxHB4iJ → BVkBYdceLRvMROqQIqeBx}/_ssgManifest.js +0 -0
|
@@ -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
|
};
|
|
@@ -46,6 +46,14 @@ const excerpt_1 = require("./excerpt");
|
|
|
46
46
|
exports.UPSTREAM_FAULTS = [
|
|
47
47
|
{ id: 'overloaded', pattern: /\b5\d{2}\s+Overloaded\b/i, selfRetrying: true },
|
|
48
48
|
{ id: 'retrying', pattern: /Retrying in \d+s\s*[·•]\s*attempt \d+\/\d+/i, selfRetrying: true },
|
|
49
|
+
{
|
|
50
|
+
// The conversation outgrew the model's window (Issue #3011). Command Code
|
|
51
|
+
// prints `400 This model's maximum context length is N tokens. However, you
|
|
52
|
+
// requested M tokens`; retrying the same session cannot succeed.
|
|
53
|
+
id: 'context-limit',
|
|
54
|
+
pattern: /\bmaximum context length is \d+ tokens\b/i,
|
|
55
|
+
selfRetrying: false,
|
|
56
|
+
},
|
|
49
57
|
{ id: 'limit-reached', pattern: /\blimit reached\b/i, selfRetrying: false },
|
|
50
58
|
{ id: 'api-error', pattern: /\bAPI Error(?::|\s+\d{3})/i, selfRetrying: false },
|
|
51
59
|
];
|
|
@@ -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',
|
|
@@ -61,6 +61,17 @@
|
|
|
61
61
|
* its own — see {@link AgentSessionContextUsage} and
|
|
62
62
|
* `docs/design/opencode-server-live-verification.md` §14.
|
|
63
63
|
*
|
|
64
|
+
* ## OpenCode V2 (Issue #2981)
|
|
65
|
+
*
|
|
66
|
+
* `opencode-v2` fills both records too, with the same meanings — measured on
|
|
67
|
+
* 2.0.18 (`tests/fixtures/opencode-v2-usage-2981`): `GET /api/session/{id}`
|
|
68
|
+
* carries the session's cumulative `cost` / `tokens` (the running total
|
|
69
|
+
* `session.usage.updated` announces), while the TUI's `6.3K (1%)` is the last
|
|
70
|
+
* assistant message's footprint. The writer is
|
|
71
|
+
* `./sources/opencode-v2/usage`, which asks its own server with its own port
|
|
72
|
+
* and password; {@link ensureAgentSessionContextUsage} leaves those instances
|
|
73
|
+
* alone.
|
|
74
|
+
*
|
|
64
75
|
* @module lib/hooks/agent-session-telemetry
|
|
65
76
|
*/
|
|
66
77
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -70,6 +81,7 @@ exports.getAgentSessionTelemetry = getAgentSessionTelemetry;
|
|
|
70
81
|
exports.forgetAgentSessionTelemetry = forgetAgentSessionTelemetry;
|
|
71
82
|
exports.resetAgentSessionTelemetry = resetAgentSessionTelemetry;
|
|
72
83
|
exports.readOpencodeSessionFrame = readOpencodeSessionFrame;
|
|
84
|
+
exports.readOpencodeSessionInfo = readOpencodeSessionInfo;
|
|
73
85
|
exports.agentSessionContextPercent = agentSessionContextPercent;
|
|
74
86
|
exports.getAgentSessionContextUsage = getAgentSessionContextUsage;
|
|
75
87
|
exports.recordAgentSessionContextUsage = recordAgentSessionContextUsage;
|
|
@@ -190,7 +202,25 @@ function readOpencodeSessionFrame(frame, at) {
|
|
|
190
202
|
const properties = isPlainObject(frame.properties) ? frame.properties : null;
|
|
191
203
|
if (!properties)
|
|
192
204
|
return null;
|
|
193
|
-
|
|
205
|
+
return readOpencodeSessionInfo(properties.info, at);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Read one `Session` object, or answer null (Issue #2981).
|
|
209
|
+
*
|
|
210
|
+
* Split out of {@link readOpencodeSessionFrame} because OpenCode V2 serves the
|
|
211
|
+
* same fields — `Session.Info` in 2.0.18's `GET /openapi.json` declares `id`,
|
|
212
|
+
* `parentID`, `title`, `agent`, `model: { id, providerID, variant? }`, `cost`
|
|
213
|
+
* and `tokens: { input, output, reasoning, cache: { read, write } }` — from
|
|
214
|
+
* `GET /api/session/{id}` instead of on a frame. One reader keeps the two
|
|
215
|
+
* versions from disagreeing about what "verbatim" means, and the sub-agent
|
|
216
|
+
* refusal above applies to both.
|
|
217
|
+
*
|
|
218
|
+
* @param value - The `Session` object, unvalidated
|
|
219
|
+
* @param at - Epoch ms it was received
|
|
220
|
+
* @returns The record to store, or null when this is not one to store
|
|
221
|
+
*/
|
|
222
|
+
function readOpencodeSessionInfo(value, at) {
|
|
223
|
+
const info = isPlainObject(value) ? value : null;
|
|
194
224
|
if (!info)
|
|
195
225
|
return null;
|
|
196
226
|
if (typeof info.parentID === 'string' && info.parentID.length > 0)
|
|
@@ -276,6 +306,11 @@ function ensureAgentSessionContextUsage(target, record) {
|
|
|
276
306
|
// close is what retires it, the same lifetime the record itself has.
|
|
277
307
|
if (!record || !record.id)
|
|
278
308
|
return cached;
|
|
309
|
+
// Issue #2981: OpenCode V2 measures its own context in the same refresh that
|
|
310
|
+
// writes the record (`./sources/opencode-v2/usage`), with its own port and
|
|
311
|
+
// password. The v1 fetch below would dial v1's port map for a v2 instance.
|
|
312
|
+
if (target.cliToolId === 'opencode-v2')
|
|
313
|
+
return cached;
|
|
279
314
|
if (cached && cached.sessionAt === record.at)
|
|
280
315
|
return cached;
|
|
281
316
|
if (contextRefreshes.has(key))
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Why an OpenCode 1.x launch never started its server, when opencode's own log
|
|
4
|
+
* says (Issue #2939, D2).
|
|
5
|
+
*
|
|
6
|
+
* OpenCode 1.x and OpenCode V2 share `~/.local/share/opencode/opencode.db`. V2
|
|
7
|
+
* rebuilt the `workspace` table without the `project_id` column 1.x still
|
|
8
|
+
* writes, and a 1.x launch that reached that code died with
|
|
9
|
+
* `SQLiteError: no such column: project_id` (measured 2026-09-28, 17 lines in
|
|
10
|
+
* opencode's log). CommandMate only saw `opencode-server-not-reachable`, and
|
|
11
|
+
* the operator was left with a pane that never came up and no reason.
|
|
12
|
+
*
|
|
13
|
+
* This reads the log opencode writes — `<XDG_DATA_HOME or ~/.local/share>/
|
|
14
|
+
* opencode/log/opencode.log`, one `timestamp=<ISO> level=… ` record per line —
|
|
15
|
+
* and reports a `no such column` error from a line stamped at or after the
|
|
16
|
+
* launch. Read-only, bounded to the last {@link OPENCODE_LOG_TAIL_BYTES} of the
|
|
17
|
+
* file, and every failure (no file, unreadable, nothing matching) is null,
|
|
18
|
+
* which leaves the launch reported exactly as before.
|
|
19
|
+
*
|
|
20
|
+
* CommandMate cannot repair the database: two incompatible opencode releases
|
|
21
|
+
* sharing one data directory is opencode's problem. What it can do is name it.
|
|
22
|
+
*
|
|
23
|
+
* @module lib/hooks/sources/opencode/log-diagnosis
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.OPENCODE_LOG_TAIL_BYTES = void 0;
|
|
27
|
+
exports.resolveOpencodeLogPath = resolveOpencodeLogPath;
|
|
28
|
+
exports.findOpencodeSharedDataConflict = findOpencodeSharedDataConflict;
|
|
29
|
+
exports.buildOpencodeSharedDataConflictMessage = buildOpencodeSharedDataConflictMessage;
|
|
30
|
+
const promises_1 = require("fs/promises");
|
|
31
|
+
const os_1 = require("os");
|
|
32
|
+
const path_1 = require("path");
|
|
33
|
+
/** How much of the end of the log is read. The file is multi-megabyte. */
|
|
34
|
+
exports.OPENCODE_LOG_TAIL_BYTES = 256 * 1024;
|
|
35
|
+
/**
|
|
36
|
+
* Lines stamped this long before the launch still count. The TUI writes its
|
|
37
|
+
* first line within milliseconds of the keystroke; the slack only absorbs the
|
|
38
|
+
* gap between `Date.now()` here and the pane's process starting.
|
|
39
|
+
*/
|
|
40
|
+
const LAUNCH_CLOCK_SLACK_MS = 1000;
|
|
41
|
+
const TIMESTAMP_FIELD = /^timestamp=(\S+)/;
|
|
42
|
+
const NO_SUCH_COLUMN = /no such column: ?[A-Za-z0-9_.]*/;
|
|
43
|
+
/** Where opencode writes its log, honouring `XDG_DATA_HOME` as opencode does. */
|
|
44
|
+
function resolveOpencodeLogPath() {
|
|
45
|
+
const dataHome = process.env.XDG_DATA_HOME || (0, path_1.join)((0, os_1.homedir)(), '.local', 'share');
|
|
46
|
+
return (0, path_1.join)(dataHome, 'opencode', 'log', 'opencode.log');
|
|
47
|
+
}
|
|
48
|
+
/** The last `maxBytes` of `path`, or null when it cannot be read. */
|
|
49
|
+
async function readTail(path, maxBytes) {
|
|
50
|
+
let handle;
|
|
51
|
+
try {
|
|
52
|
+
handle = await (0, promises_1.open)(path, 'r');
|
|
53
|
+
const { size } = await handle.stat();
|
|
54
|
+
const length = Math.min(size, maxBytes);
|
|
55
|
+
const start = size - length;
|
|
56
|
+
const buffer = Buffer.alloc(length);
|
|
57
|
+
await handle.read(buffer, 0, length, start);
|
|
58
|
+
let text = buffer.toString('utf8');
|
|
59
|
+
// A read that starts mid-file starts mid-line; that fragment has no stamp.
|
|
60
|
+
if (start > 0)
|
|
61
|
+
text = text.slice(text.indexOf('\n') + 1);
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
await handle?.close().catch(() => { });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The `no such column` error opencode logged since `since`, or null.
|
|
73
|
+
*
|
|
74
|
+
* @param since - Epoch ms the launch keystroke was sent
|
|
75
|
+
* @param logPath - Defaults to {@link resolveOpencodeLogPath}
|
|
76
|
+
* @returns The matched fragment, e.g. `no such column: project_id`
|
|
77
|
+
*/
|
|
78
|
+
async function findOpencodeSharedDataConflict(since, logPath = resolveOpencodeLogPath()) {
|
|
79
|
+
const text = await readTail(logPath, exports.OPENCODE_LOG_TAIL_BYTES);
|
|
80
|
+
if (text === null)
|
|
81
|
+
return null;
|
|
82
|
+
const threshold = since - LAUNCH_CLOCK_SLACK_MS;
|
|
83
|
+
for (const line of text.split('\n')) {
|
|
84
|
+
const stamp = TIMESTAMP_FIELD.exec(line);
|
|
85
|
+
if (!stamp)
|
|
86
|
+
continue;
|
|
87
|
+
const at = Date.parse(stamp[1]);
|
|
88
|
+
if (Number.isNaN(at) || at < threshold)
|
|
89
|
+
continue;
|
|
90
|
+
const match = NO_SUCH_COLUMN.exec(line);
|
|
91
|
+
if (match)
|
|
92
|
+
return match[0];
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The start error an operator sees for {@link findOpencodeSharedDataConflict}'s
|
|
98
|
+
* finding.
|
|
99
|
+
*/
|
|
100
|
+
function buildOpencodeSharedDataConflictMessage(finding) {
|
|
101
|
+
return (`OpenCode 1.x could not open its data (opencode log: "${finding}"). ` +
|
|
102
|
+
'OpenCode 1.x and OpenCode V2 share ~/.local/share/opencode/opencode.db, and V2 ' +
|
|
103
|
+
'has changed tables 1.x still uses. Use only OpenCode V2, or give OpenCode 1.x a ' +
|
|
104
|
+
'data directory of its own (docs/user-guide/cli-setup-guide.md, "OpenCode (1.x) and OpenCode V2").');
|
|
105
|
+
}
|
|
@@ -266,7 +266,13 @@ function prepareOpencodeLaunch({ target, executablePath, }) {
|
|
|
266
266
|
// `env` is empty for every branch: opencode is the one source that needs no
|
|
267
267
|
// correlation variable at all, because CommandMate holds the connection and
|
|
268
268
|
// therefore already knows which instance the frames belong to (#1846).
|
|
269
|
-
|
|
269
|
+
// Issue #2939: `executablePath` is now the absolute path that answered as
|
|
270
|
+
// OpenCode 1.x, so it is quoted when it needs to be. A plain word keeps the
|
|
271
|
+
// pre-#2939 bytes.
|
|
272
|
+
const bareCommand = /^[A-Za-z0-9_./-]+$/.test(executablePath)
|
|
273
|
+
? executablePath
|
|
274
|
+
: (0, hook_settings_generator_1.shellQuote)(executablePath);
|
|
275
|
+
const bare = { command: bareCommand, settingsPath: null, env: {} };
|
|
270
276
|
if (!(0, hook_settings_generator_1.isHookInjectionEnabled)())
|
|
271
277
|
return bare;
|
|
272
278
|
const port = (0, ports_1.getAssignedOpencodePort)(target);
|