commandmate 0.30.1 → 0.31.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 +164 -164
- package/.next/app-path-routes-manifest.json +28 -28
- 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/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/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +3 -3
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +4 -4
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +1 -1
- 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/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/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/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/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route.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/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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +4 -3
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +4 -3
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +2 -2
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page.js +2 -2
- package/.next/server/app/chat/page.js.nft.json +1 -1
- package/.next/server/app/chat/page_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.js +2 -2
- package/.next/server/app/more/page.js.nft.json +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.js +1 -1
- package/.next/server/app/page.js.nft.json +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.js +2 -2
- package/.next/server/app/repositories/page.js.nft.json +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page.js +1 -1
- package/.next/server/app/review/page.js.nft.json +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page.js.nft.json +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page.js +2 -2
- package/.next/server/app/skills/[skillId]/page.js.nft.json +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page.js +2 -2
- package/.next/server/app/skills/installed/page.js.nft.json +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page.js +1 -1
- package/.next/server/app/skills/page.js.nft.json +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 +10 -10
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +28 -28
- package/.next/server/chunks/1058.js +1 -1
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1262.js +1 -1
- package/.next/server/chunks/1886.js +3 -3
- package/.next/server/chunks/1990.js +103 -0
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2328.js +1 -1
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/261.js +1 -1
- package/.next/server/chunks/3123.js +1 -1
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3480.js +5 -4
- package/.next/server/chunks/4299.js +1 -1
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4443.js +1 -5
- package/.next/server/chunks/5017.js +1 -1
- package/.next/server/chunks/5043.js +1 -1
- package/.next/server/chunks/5164.js +1 -1
- package/.next/server/chunks/552.js +2 -2
- package/.next/server/chunks/6072.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/663.js +4 -3
- package/.next/server/chunks/6894.js +2 -2
- package/.next/server/chunks/7187.js +1 -0
- package/.next/server/chunks/7472.js +1 -1
- package/.next/server/chunks/{880.js → 7859.js} +6 -6
- package/.next/server/chunks/7905.js +1 -1
- package/.next/server/chunks/8800.js +2 -2
- package/.next/server/chunks/8918.js +7 -0
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9130.js +4 -4
- package/.next/server/chunks/9627.js +1 -1
- package/.next/server/chunks/9696.js +2 -2
- package/.next/server/chunks/9798.js +1 -1
- 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/1783-11c9b4d8a52ebd91.js +1 -0
- package/.next/static/chunks/4718-de1224c9e8a6e7fc.js +1 -0
- package/.next/static/chunks/6022-2fa0b5a82d4ce7b6.js +1 -0
- package/.next/static/chunks/{5229-6c89475b61bd2c8b.js → 6170-951b9f5fe6b4b3b5.js} +1 -1
- package/.next/static/chunks/app/chat/{page-9aa2011410895b0d.js → page-37d7615d17d7e2a0.js} +1 -1
- package/.next/static/chunks/app/layout-4c2f21e3f653ee4c.js +1 -0
- package/.next/static/chunks/app/more/{page-333bba1c8bbc9c11.js → page-353a3924e6d7968e.js} +1 -1
- package/.next/static/chunks/app/{page-214f7ffa13a0cf10.js → page-c2bf871d953a1d6f.js} +1 -1
- package/.next/static/chunks/app/repositories/{page-4951cac905e50224.js → page-7d0f26df0537254c.js} +1 -1
- package/.next/static/chunks/app/review/{page-a0899b2d285318c3.js → page-e3f141b2829973e9.js} +1 -1
- package/.next/static/chunks/app/sessions/{page-fb36145ec732092a.js → page-53f188ed9ca49e5f.js} +1 -1
- package/.next/static/chunks/app/skills/[skillId]/{page-9099e26b60442873.js → page-80569b720aea59cc.js} +1 -1
- package/.next/static/chunks/app/skills/installed/{page-182e32368696d824.js → page-dbd2690ad72da95b.js} +1 -1
- package/.next/static/chunks/app/skills/{page-d3fdc88239ebe0ab.js → page-dacd36f9c11aa7da.js} +1 -1
- package/.next/static/chunks/app/worktrees/[id]/page-97205088520255a5.js +1 -0
- package/.next/static/css/5c13ea243dfdcb66.css +1 -0
- package/.next/trace +13 -13
- package/README.md +37 -11
- package/dist/cli/commands/attach.d.ts +50 -0
- package/dist/cli/commands/attach.d.ts.map +1 -0
- package/dist/cli/commands/attach.js +204 -0
- package/dist/cli/commands/capture.d.ts.map +1 -1
- package/dist/cli/commands/capture.js +114 -0
- package/dist/cli/commands/instances.d.ts.map +1 -1
- package/dist/cli/commands/instances.js +23 -2
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +41 -1
- package/dist/cli/config/cli-dependencies.d.ts.map +1 -1
- package/dist/cli/config/cli-dependencies.js +34 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +5 -0
- package/dist/cli/types/index.d.ts +36 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/config/tmux-pane-config.d.ts +153 -0
- package/dist/config/tmux-pane-config.d.ts.map +1 -0
- package/dist/config/tmux-pane-config.js +172 -0
- package/dist/lib/cli-tools/session-name.d.ts +44 -0
- package/dist/lib/cli-tools/session-name.d.ts.map +1 -0
- package/dist/lib/cli-tools/session-name.js +57 -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 +6 -1
- package/dist/lib/cli-tools/validation.d.ts +34 -0
- package/dist/lib/cli-tools/validation.d.ts.map +1 -0
- package/dist/lib/cli-tools/validation.js +41 -0
- package/dist/lib/detection/status-reason.d.ts +18 -0
- package/dist/lib/detection/status-reason.d.ts.map +1 -1
- package/dist/lib/detection/status-reason.js +18 -0
- package/dist/lib/detection/tools/verified-against.d.ts +57 -7
- package/dist/lib/detection/tools/verified-against.d.ts.map +1 -1
- package/dist/lib/detection/tools/verified-against.js +59 -8
- package/dist/lib/detection/version-probes.d.ts +26 -5
- package/dist/lib/detection/version-probes.d.ts.map +1 -1
- package/dist/lib/detection/version-probes.js +28 -6
- package/dist/lib/session/tmux-session-surface.d.ts +369 -0
- package/dist/lib/session/tmux-session-surface.d.ts.map +1 -0
- package/dist/lib/session/tmux-session-surface.js +525 -0
- package/dist/server/src/config/cli-tool-timing-config.js +12 -1
- package/dist/server/src/config/detection-evidence-config.js +5 -0
- package/dist/server/src/config/schedule-config.js +28 -1
- package/dist/server/src/lib/cli-tools/antigravity.js +2 -2
- package/dist/server/src/lib/cli-tools/base.js +13 -8
- package/dist/server/src/lib/cli-tools/claude.js +20 -0
- package/dist/server/src/lib/cli-tools/codex.js +205 -61
- package/dist/server/src/lib/cli-tools/command-code.js +349 -0
- package/dist/server/src/lib/cli-tools/composer-spec.js +6 -0
- package/dist/server/src/lib/cli-tools/copilot.js +2 -2
- package/dist/server/src/lib/cli-tools/gemini.js +2 -2
- package/dist/server/src/lib/cli-tools/graceful-exit.js +16 -1
- package/dist/server/src/lib/cli-tools/index.js +4 -1
- package/dist/server/src/lib/cli-tools/install-hints.js +131 -0
- package/dist/server/src/lib/cli-tools/liveness-spec.js +18 -0
- package/dist/server/src/lib/cli-tools/manager.js +2 -0
- package/dist/server/src/lib/cli-tools/opencode.js +2 -2
- package/dist/server/src/lib/cli-tools/start-availability.js +18 -11
- package/dist/server/src/lib/cli-tools/types.js +6 -1
- package/dist/server/src/lib/cli-tools/vibe-local.js +2 -2
- package/dist/server/src/lib/cmate-parser.js +6 -0
- package/dist/server/src/lib/detection/cli-patterns.js +441 -8
- package/dist/server/src/lib/detection/opencode-modal-overlay.js +66 -100
- package/dist/server/src/lib/detection/selection-shape.js +341 -0
- package/dist/server/src/lib/detection/sgr-background.js +210 -0
- package/dist/server/src/lib/detection/status-detector.js +6 -0
- package/dist/server/src/lib/detection/status-reason.js +18 -0
- package/dist/server/src/lib/detection/tools/antigravity/detect.js +38 -15
- package/dist/server/src/lib/detection/tools/codex/cli-patterns.js +392 -0
- package/dist/server/src/lib/detection/tools/codex/detect.js +83 -2
- package/dist/server/src/lib/detection/tools/command-code/detect.js +159 -0
- package/dist/server/src/lib/detection/tools/registry.js +6 -4
- package/dist/server/src/lib/detection/tools/verified-against.js +59 -8
- package/dist/server/src/lib/detection/version-probes.js +28 -6
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +101 -21
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +39 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +245 -21
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +175 -13
- package/dist/server/src/lib/hooks/sources/codex/history.js +84 -15
- package/dist/server/src/lib/hooks/sources/codex/hooks-config.js +130 -17
- package/dist/server/src/lib/hooks/sources/codex/relay-install.js +145 -0
- package/dist/server/src/lib/hooks/sources/command-code/history.js +865 -0
- package/dist/server/src/lib/hooks/sources/command-code/hooks-config.js +390 -0
- package/dist/server/src/lib/hooks/sources/command-code/source.js +290 -0
- package/dist/server/src/lib/hooks/sources/command-code/tool-id.js +18 -0
- package/dist/server/src/lib/hooks/sources/command-code/transcript.js +604 -0
- package/dist/server/src/lib/hooks/sources/index.js +3 -1
- package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -3
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +24 -28
- package/dist/server/src/lib/hooks/sources/registry.js +4 -0
- package/dist/server/src/lib/hooks/sources/turn-body.js +77 -19
- package/dist/server/src/lib/hooks/stop-history-capture.js +58 -25
- package/dist/server/src/lib/job-executor.js +12 -0
- package/dist/server/src/lib/polling/auto-yes-dialog-gate.js +6 -0
- package/dist/server/src/lib/polling/response-checker.js +112 -7
- package/dist/server/src/lib/polling/structured-history-gate.js +15 -8
- package/dist/server/src/lib/realtime/types.js +15 -5
- package/dist/server/src/lib/response-cleaner.js +24 -1
- package/dist/server/src/lib/response-extractor.js +11 -0
- package/dist/server/src/lib/session/claude-executor.js +223 -4
- package/dist/server/src/lib/session/cli-session.js +52 -0
- package/dist/server/src/lib/session/tmux-session-surface.js +525 -0
- package/dist/server/src/lib/skills/compatibility-matrix.js +117 -1
- package/dist/server/src/lib/tmux/geometry-delegation.js +143 -0
- package/dist/server/src/lib/tmux/read-mode-pager.js +76 -10
- package/dist/server/src/lib/tmux/read-mode.js +44 -2
- package/dist/server/src/lib/tmux/session-hook-scripts.js +249 -0
- package/dist/server/src/lib/tmux/session-hooks.js +122 -0
- package/dist/server/src/lib/tmux/session-status-options.js +213 -0
- package/dist/server/src/lib/tmux/tmux.js +79 -2
- package/dist/server/src/lib/version-checker.js +110 -0
- package/dist/server/src/lib/ws-server.js +16 -10
- package/dist/server/src/types/agent-transcript.js +73 -1
- package/dist/server/src/types/terminal-keys.js +131 -3
- package/dist/types/terminal-keys.d.ts +100 -3
- package/dist/types/terminal-keys.d.ts.map +1 -1
- package/dist/types/terminal-keys.js +131 -3
- package/package.json +1 -1
- package/.next/server/chunks/3099.js +0 -5
- package/.next/server/chunks/7824.js +0 -1
- package/.next/static/chunks/3916-0e929d089282dc5d.js +0 -1
- package/.next/static/chunks/6022-7a7d1760fc9814c7.js +0 -1
- package/.next/static/chunks/6381-dbf04a99647f6018.js +0 -1
- package/.next/static/chunks/app/layout-6a26ea22d5cf03dc.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-aac399392ec8c273.js +0 -1
- package/.next/static/css/23f9c40ecc458c77.css +0 -1
- /package/.next/static/{pcpB4K6KreMzu2qbhvuRY → nXW4dPkpE_9xUf_9ySRff}/_buildManifest.js +0 -0
- /package/.next/static/{pcpB4K6KreMzu2qbhvuRY → nXW4dPkpE_9xUf_9ySRff}/_ssgManifest.js +0 -0
|
@@ -15,8 +15,9 @@ exports.getToolStatusDetector = getToolStatusDetector;
|
|
|
15
15
|
const detect_1 = require("./antigravity/detect");
|
|
16
16
|
const detect_2 = require("./claude/detect");
|
|
17
17
|
const detect_3 = require("./codex/detect");
|
|
18
|
-
const detect_4 = require("./
|
|
19
|
-
const detect_5 = require("./
|
|
18
|
+
const detect_4 = require("./command-code/detect");
|
|
19
|
+
const detect_5 = require("./copilot/detect");
|
|
20
|
+
const detect_6 = require("./opencode/detect");
|
|
20
21
|
const run_detection_1 = require("./run-detection");
|
|
21
22
|
const verified_against_1 = require("./verified-against");
|
|
22
23
|
/**
|
|
@@ -38,9 +39,10 @@ const vibeLocalStatusDetector = createGenericStatusDetector('vibe-local');
|
|
|
38
39
|
const DETECTORS = {
|
|
39
40
|
claude: detect_2.claudeStatusDetector,
|
|
40
41
|
codex: detect_3.codexStatusDetector,
|
|
41
|
-
copilot:
|
|
42
|
-
opencode:
|
|
42
|
+
copilot: detect_5.copilotStatusDetector,
|
|
43
|
+
opencode: detect_6.opencodeStatusDetector,
|
|
43
44
|
antigravity: detect_1.antigravityStatusDetector,
|
|
45
|
+
'command-code': detect_4.commandCodeStatusDetector,
|
|
44
46
|
gemini: geminiStatusDetector,
|
|
45
47
|
'vibe-local': vibeLocalStatusDetector,
|
|
46
48
|
};
|
|
@@ -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.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.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',
|
|
@@ -39,10 +39,21 @@ exports.CODEX_VERIFIED_AGAINST = {
|
|
|
39
39
|
capturedAt: '2026-08-15',
|
|
40
40
|
paneGeometry: '200x1000',
|
|
41
41
|
};
|
|
42
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* copilot-cli these rules were read off (#1885 / #1895 / #2269 fixtures).
|
|
44
|
+
*
|
|
45
|
+
* Bumped from 1.0.80 because the frames were RE-CAPTURED and the rules CHANGED:
|
|
46
|
+
* 1.0.82 redrew the composer's fence (`─` rules became a `╻▄` / `╹▀` half-block
|
|
47
|
+
* frame), dropped the `❯` from the composer in favour of the frame's own `┃`
|
|
48
|
+
* edge, boxed the transcript's echoed prompt between two more half-block
|
|
49
|
+
* dividers, and put a file-type badge in front of most tool rows' verbs. The
|
|
50
|
+
* frames are `tests/unit/lib/detection/fixtures/copilot-live-2269/`, captured on
|
|
51
|
+
* a private tmux socket at the production geometry; the 1.0.80 frames stay where
|
|
52
|
+
* they are and the rules still answer for both builds.
|
|
53
|
+
*/
|
|
43
54
|
exports.COPILOT_VERIFIED_AGAINST = {
|
|
44
|
-
version: '1.0.
|
|
45
|
-
capturedAt: '2026-
|
|
55
|
+
version: '1.0.82',
|
|
56
|
+
capturedAt: '2026-09-04',
|
|
46
57
|
paneGeometry: '200x1000',
|
|
47
58
|
};
|
|
48
59
|
/**
|
|
@@ -62,11 +73,50 @@ exports.OPENCODE_VERIFIED_AGAINST = {
|
|
|
62
73
|
capturedAt: '2026-08-26',
|
|
63
74
|
paneGeometry: '80x200',
|
|
64
75
|
};
|
|
65
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* agy these rules were read off (#988 / #995 footer + selection rules, re-read
|
|
78
|
+
* against the #2270 live panes).
|
|
79
|
+
*
|
|
80
|
+
* Bumped from `0.4.x` / `2026-07-30` / `inline` because the frames were
|
|
81
|
+
* RE-CAPTURED, not because the binary moved: #2270 drove agy 1.1.25 on a private
|
|
82
|
+
* tmux socket at the production geometry and kept both panes inline in
|
|
83
|
+
* `tests/unit/status-detector-selection.test.ts`
|
|
84
|
+
* (`AGY_1125_PERMISSION_PANE`, `AGY_1125_SWITCH_MODEL_PANE`) under the banner
|
|
85
|
+
* `Antigravity CLI 1.1.25`, trailing pane padding included. The
|
|
86
|
+
* `Do you want to proceed?` + `N. label` rules were measured off those frames,
|
|
87
|
+
* and `ANTIGRAVITY_SELECTION_LIST_PATTERN` (#995 / #997) was re-checked against
|
|
88
|
+
* them and left unchanged.
|
|
89
|
+
*
|
|
90
|
+
* `paneGeometry` leaves `inline` because the 1.1.25 permission dialog draws no
|
|
91
|
+
* composer row at all — it reproduces only at the 200x1000 pane the server
|
|
92
|
+
* captures, and a fixture without the ~970 blank padding rows exercises a
|
|
93
|
+
* different `lastLines` slice than production does. That is a statement about
|
|
94
|
+
* the capture condition, not about agy: the scrollback-retained rendering the
|
|
95
|
+
* `afterThinking` footer rules rest on (#988) is unchanged, and the 1.1.25
|
|
96
|
+
* dialog still ends on `esc to cancel`.
|
|
97
|
+
*
|
|
98
|
+
* What this stamp does NOT claim: #2270 captured `waiting` frames only, so the
|
|
99
|
+
* idle (`? for shortcuts`) and generating (spinner) branches are carried over
|
|
100
|
+
* from the 0.4 captures rather than re-measured. A live IDLE 1.1.25 frame is
|
|
101
|
+
* still uncaptured — see the `readIdleEvidence` note in `antigravity/detect.ts`.
|
|
102
|
+
*/
|
|
66
103
|
exports.ANTIGRAVITY_VERIFIED_AGAINST = {
|
|
67
|
-
version: '
|
|
68
|
-
capturedAt: '2026-
|
|
69
|
-
paneGeometry: '
|
|
104
|
+
version: '1.1.25',
|
|
105
|
+
capturedAt: '2026-09-04',
|
|
106
|
+
paneGeometry: '200x1000',
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Command Code these rules were read off (#2250 fixtures).
|
|
110
|
+
*
|
|
111
|
+
* The frames are `tests/fixtures/command-code-live-2250/`, captured on a private
|
|
112
|
+
* tmux socket at the production geometry — the default pane size does not
|
|
113
|
+
* reproduce the 200-column rules that fence the composer, and the status row
|
|
114
|
+
* drops its `esc to interrupt` tail below 72 columns.
|
|
115
|
+
*/
|
|
116
|
+
exports.COMMAND_CODE_VERIFIED_AGAINST = {
|
|
117
|
+
version: '1.40.1',
|
|
118
|
+
capturedAt: '2026-09-03',
|
|
119
|
+
paneGeometry: '200x1000',
|
|
70
120
|
};
|
|
71
121
|
/**
|
|
72
122
|
* The stamp for a tool whose frames nobody has captured yet.
|
|
@@ -94,6 +144,7 @@ exports.DETECTOR_VERIFIED_AGAINST = {
|
|
|
94
144
|
copilot: exports.COPILOT_VERIFIED_AGAINST,
|
|
95
145
|
opencode: exports.OPENCODE_VERIFIED_AGAINST,
|
|
96
146
|
antigravity: exports.ANTIGRAVITY_VERIFIED_AGAINST,
|
|
147
|
+
'command-code': exports.COMMAND_CODE_VERIFIED_AGAINST,
|
|
97
148
|
gemini: exports.UNMEASURED_VERIFIED_AGAINST,
|
|
98
149
|
'vibe-local': exports.UNMEASURED_VERIFIED_AGAINST,
|
|
99
150
|
};
|
|
@@ -124,7 +124,7 @@ function parseCliVersion(output) {
|
|
|
124
124
|
return match ? `${match[1]}.${match[2]}.${match[3]}` : null;
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
|
-
* A `verifiedAgainst` stamp written as a minor-series wildcard: `0.
|
|
127
|
+
* A `verifiedAgainst` stamp written as a minor-series wildcard: `2.0.x`.
|
|
128
128
|
*
|
|
129
129
|
* Only ever applied to the stamp, never to a probe's own output — one side of
|
|
130
130
|
* this comparison is a string a human typed into a tool module, the other is
|
|
@@ -135,11 +135,32 @@ const VERIFIED_AGAINST_WILDCARD_REGEX = /^(\d+)\.(\d+)\.(?:x|\*)$/i;
|
|
|
135
135
|
* The comparable form of a `verifiedAgainst` stamp, or null when there is none.
|
|
136
136
|
*
|
|
137
137
|
* `'unmeasured'` is null — a tool nobody has captured frames for cannot be
|
|
138
|
-
* fresh or stale. `'0.
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
138
|
+
* fresh or stale. A minor-series stamp such as `'2.0.x'` becomes `2.0.0`;
|
|
139
|
+
* widening to `.0` is the safe direction, because it can only ever call a newer
|
|
140
|
+
* install stale, never call a stale one current.
|
|
141
|
+
*
|
|
142
|
+
* ## The wildcard branch has no caller in the table today, and stays anyway
|
|
143
|
+
*
|
|
144
|
+
* antigravity's `0.4.x` (Issue #995 measured a range rather than a build) was
|
|
145
|
+
* the only wildcard stamp ever written, and Issue #2292 replaced it with the
|
|
146
|
+
* build #2270 actually read the rules off (`1.1.25`). Re-run the grep that
|
|
147
|
+
* settled it and the branch has zero users:
|
|
148
|
+
*
|
|
149
|
+
* ```
|
|
150
|
+
* $ grep -rnE "version: '[0-9]+\.[0-9]+\.(x|\*)'" src/
|
|
151
|
+
* (no matches)
|
|
152
|
+
* ```
|
|
153
|
+
*
|
|
154
|
+
* It is kept, because deleting it would not delete the FORMAT.
|
|
155
|
+
* `verifiedAgainst` is a hand-written string, and the next person who measures a
|
|
156
|
+
* series rather than a build can still type `2.0.x`. With this branch that
|
|
157
|
+
* stamp compares. Without it {@link parseCliVersion} reads it as null and the
|
|
158
|
+
* tool is filed alongside `'unmeasured'` — never stale, no warning, nothing an
|
|
159
|
+
* operator can act on — which is the same failure #2292 was raised to fix, one
|
|
160
|
+
* level further down. A parser for an input the table still permits is not dead
|
|
161
|
+
* code; the unit exercises it on the format directly rather than through
|
|
162
|
+
* whichever stamp the table happens to hold, so it does not go vacuous now that
|
|
163
|
+
* no tool uses it.
|
|
143
164
|
*/
|
|
144
165
|
function parseVerifiedAgainstVersion(stamp) {
|
|
145
166
|
const wildcard = VERIFIED_AGAINST_WILDCARD_REGEX.exec(stamp);
|
|
@@ -180,6 +201,7 @@ exports.DETECTOR_VERSION_PROBES = {
|
|
|
180
201
|
claude: { kind: 'execFile', command: 'claude', args: ['--version'] },
|
|
181
202
|
codex: { kind: 'execFile', command: 'codex', args: ['--version'] },
|
|
182
203
|
antigravity: { kind: 'execFile', command: 'agy', args: ['--version'] },
|
|
204
|
+
'command-code': { kind: 'execFile', command: 'commandcode', args: ['--version'] },
|
|
183
205
|
opencode: { kind: 'execFile', command: 'opencode', args: ['--version'] },
|
|
184
206
|
gemini: { kind: 'execFile', command: 'gemini', args: ['--version'] },
|
|
185
207
|
copilot: {
|
|
@@ -366,12 +366,21 @@ async function captureAntigravityTranscriptTurn(target, capture = {}) {
|
|
|
366
366
|
anchored: pending.anchored,
|
|
367
367
|
});
|
|
368
368
|
}
|
|
369
|
+
// Every prompt row first, then every reply (Issue #2273). The two passes are
|
|
370
|
+
// what let a reply be dated at its turn's END without overtaking the NEXT
|
|
371
|
+
// turn's prompt: a queued `/send` row is written while this turn is still
|
|
372
|
+
// running, so its instant is only knowable once that row has been recorded.
|
|
373
|
+
// With one turn pending — the ordinary case — this is the single call it
|
|
374
|
+
// always was.
|
|
375
|
+
const userRows = [];
|
|
376
|
+
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
377
|
+
const previousStartedAt = index === 0 ? pending.previousStartedAt : pending.turns[index - 1].startedAt;
|
|
378
|
+
userRows.push(await recordAntigravityUserTurn(target, pending.turns[index], previousStartedAt));
|
|
379
|
+
}
|
|
369
380
|
let captured = false;
|
|
370
381
|
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
371
382
|
const turn = pending.turns[index];
|
|
372
|
-
|
|
373
|
-
const userRow = await recordAntigravityUserTurn(target, turn, previousStartedAt);
|
|
374
|
-
captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), resolveAssistantTimestampMs(turn, userRow), path);
|
|
383
|
+
captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastAntigravityRecordAt(turn), nextTurnOpensAt(pending.turns, userRows, index)), path);
|
|
375
384
|
}
|
|
376
385
|
return captured;
|
|
377
386
|
}
|
|
@@ -500,21 +509,73 @@ async function recordAntigravityUserTurn(target, turn, previousStartedAt = 0) {
|
|
|
500
509
|
/**
|
|
501
510
|
* When the assistant row for this turn is dated.
|
|
502
511
|
*
|
|
503
|
-
* The turn's
|
|
504
|
-
*
|
|
512
|
+
* **The turn's LAST record, not its first (Issue #2273).** #2196 dated the reply
|
|
513
|
+
* one millisecond after the prompt so that `groupMessagesIntoPairs` — which
|
|
514
|
+
* orders by timestamp and nothing else — could never put the answer above the
|
|
515
|
+
* question. That is still guaranteed, by `earliest` below, and it is still
|
|
516
|
+
* necessary: agy stamps the prompt and the first reply of a fast turn with the
|
|
517
|
+
* *same second* (measured — `created_at` is second-resolution, and turn 1 of the
|
|
518
|
+
* captured session has `02:12:41Z` on both).
|
|
519
|
+
*
|
|
520
|
+
* What #2196 did not account for is the row that lands BETWEEN the two. A tool
|
|
521
|
+
* approval is written when the dialog appears, seconds into the turn, and the
|
|
522
|
+
* chat surface orders its rows by timestamp: a reply dated at the turn's start
|
|
523
|
+
* therefore draws above an approval that really happened before it. The measured
|
|
524
|
+
* case is in the Issue — prompt `04:49:50.989Z`, reply `04:49:54.000Z`, approval
|
|
525
|
+
* `04:49:57.513Z` — and the reply's own last record is later than all three. So
|
|
526
|
+
* the last record's instant is what the row is dated by: it is the moment the
|
|
527
|
+
* turn actually ended, and everything the turn produced sorts before it.
|
|
528
|
+
*
|
|
529
|
+
* Two bounds keep the move honest:
|
|
530
|
+
*
|
|
531
|
+
* - `earliest` is a floor, never overridden. A turn with no timestamped
|
|
532
|
+
* record (`lastRecordAt === 0`) is dated exactly where #2196 put it.
|
|
533
|
+
* - `nextTurnOpensAt` is a ceiling. The next turn's prompt row may be a `/send`
|
|
534
|
+
* row written while THIS turn was still running — a queued prompt — and a
|
|
535
|
+
* reply that overtook it would be paired with the wrong question.
|
|
536
|
+
*
|
|
537
|
+
* @param lastRecordAt - Epoch ms of the turn's last record, or 0 when unknown
|
|
538
|
+
* @param nextTurnOpensAt - Epoch ms of the next turn's user row, or null when
|
|
539
|
+
* this is the newest turn in the window
|
|
540
|
+
*/
|
|
541
|
+
function resolveAssistantTimestampMs(turn, userRow, lastRecordAt = 0, nextTurnOpensAt = null) {
|
|
542
|
+
const earliest = userRow.timestampMs === null
|
|
543
|
+
? turn.startedAt
|
|
544
|
+
: Math.max(turn.startedAt, userRow.timestampMs + 1);
|
|
545
|
+
const latest = nextTurnOpensAt === null ? Number.POSITIVE_INFINITY : nextTurnOpensAt - 1;
|
|
546
|
+
return Math.max(earliest, Math.min(lastRecordAt, latest));
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* When the last record agy wrote for this turn was made (Issue #2273).
|
|
550
|
+
*
|
|
551
|
+
* The maximum rather than `records.at(-1)`: `created_at` is agy's own field and
|
|
552
|
+
* a record that carries none reads as null, so the last record in file order is
|
|
553
|
+
* not always the last one with a clock on it.
|
|
554
|
+
*
|
|
555
|
+
* @returns Epoch ms, or 0 when the turn has no timestamped record
|
|
556
|
+
*/
|
|
557
|
+
function lastAntigravityRecordAt(turn) {
|
|
558
|
+
let at = 0;
|
|
559
|
+
for (const record of turn.records) {
|
|
560
|
+
if (record.timestampMs !== null && record.timestampMs > at)
|
|
561
|
+
at = record.timestampMs;
|
|
562
|
+
}
|
|
563
|
+
return at;
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* The instant the next pending turn's prompt row carries, or null (Issue #2273).
|
|
505
567
|
*
|
|
506
|
-
*
|
|
507
|
-
*
|
|
508
|
-
*
|
|
509
|
-
*
|
|
510
|
-
*
|
|
511
|
-
* database returned first, and the losing arrangement — assistant, then user —
|
|
512
|
-
* is exactly the `orphan` pair #2196 exists to remove.
|
|
568
|
+
* The user row's own timestamp when there is one, because that is what History
|
|
569
|
+
* sorts on and it can be EARLIER than the turn's start — an adopted `/send` row
|
|
570
|
+
* was written when CommandMate handed the text to the pane, which for a queued
|
|
571
|
+
* prompt is while the previous turn was still running. The turn's start is the
|
|
572
|
+
* fallback for a turn that produced no row at all.
|
|
513
573
|
*/
|
|
514
|
-
function
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
574
|
+
function nextTurnOpensAt(turns, userRows, index) {
|
|
575
|
+
const next = turns[index + 1];
|
|
576
|
+
if (!next)
|
|
577
|
+
return null;
|
|
578
|
+
return userRows[index + 1]?.timestampMs ?? next.startedAt;
|
|
518
579
|
}
|
|
519
580
|
/**
|
|
520
581
|
* Write one rendered turn, unless it is already there.
|
|
@@ -532,12 +593,31 @@ function resolveAssistantTimestampMs(turn, userRow) {
|
|
|
532
593
|
*/
|
|
533
594
|
async function writeAntigravityTurn(target, turn, rendered, timestampMs, path) {
|
|
534
595
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
596
|
+
if (!(0, transcript_1.isAntigravityTurnWritable)(turn)) {
|
|
597
|
+
// agy has not finished this answer and no later prompt has taken over, so
|
|
598
|
+
// what is in the file is a turn in progress. Writing it would put a reply
|
|
599
|
+
// with its last paragraph missing into History permanently — the row is
|
|
600
|
+
// keyed on `(conversationId, step_index)`, so every later read finds it and
|
|
601
|
+
// answers "already saved". That is Issue #2264, reported against claude and
|
|
602
|
+
// structurally identical here: a turn cut off after its `tool_calls` renders
|
|
603
|
+
// a *non-empty* body, so the emptiness guard below cannot see it.
|
|
604
|
+
logger.info('antigravity-transcript-turn-open', {
|
|
605
|
+
worktreeId: target.worktreeId,
|
|
606
|
+
instanceId,
|
|
607
|
+
conversationId: rendered.conversationId,
|
|
608
|
+
stepIndex: rendered.stepIndex,
|
|
609
|
+
records: turn.records.length,
|
|
610
|
+
textBlocks: rendered.textBlocks,
|
|
611
|
+
toolBlocks: rendered.toolBlocks,
|
|
612
|
+
});
|
|
613
|
+
return false;
|
|
614
|
+
}
|
|
535
615
|
if (rendered.body.length === 0) {
|
|
536
|
-
// A turn that said nothing
|
|
537
|
-
//
|
|
538
|
-
//
|
|
539
|
-
//
|
|
540
|
-
//
|
|
616
|
+
// A turn that said nothing. agy has no `task_complete`, so a closed turn
|
|
617
|
+
// that rendered to nothing and an interrupted one look alike here — and
|
|
618
|
+
// answering false is right for both readings: the scraper keeps the reply if
|
|
619
|
+
// there was one, and an empty row that would show as a blank answer forever
|
|
620
|
+
// is never written.
|
|
541
621
|
logger.info('antigravity-transcript-turn-empty', {
|
|
542
622
|
worktreeId: target.worktreeId,
|
|
543
623
|
instanceId,
|
|
@@ -72,6 +72,8 @@ exports.readAntigravityTranscriptRecord = readAntigravityTranscriptRecord;
|
|
|
72
72
|
exports.parseAntigravityTranscript = parseAntigravityTranscript;
|
|
73
73
|
exports.extractAntigravityUserRequest = extractAntigravityUserRequest;
|
|
74
74
|
exports.buildAntigravityTurns = buildAntigravityTurns;
|
|
75
|
+
exports.isAntigravityTurnClosingRecord = isAntigravityTurnClosingRecord;
|
|
76
|
+
exports.isAntigravityTurnWritable = isAntigravityTurnWritable;
|
|
75
77
|
exports.isAntigravityPromptRecord = isAntigravityPromptRecord;
|
|
76
78
|
exports.renderAntigravityTurn = renderAntigravityTurn;
|
|
77
79
|
const event_mapper_1 = require("../event-mapper");
|
|
@@ -298,6 +300,8 @@ function buildAntigravityTurns(records, conversationId) {
|
|
|
298
300
|
? { stepIndex: record.stepIndex, text, timestampMs: record.timestampMs ?? startedAt }
|
|
299
301
|
: null,
|
|
300
302
|
records: [],
|
|
303
|
+
closed: false,
|
|
304
|
+
superseded: false,
|
|
301
305
|
overflowed: false,
|
|
302
306
|
});
|
|
303
307
|
continue;
|
|
@@ -307,14 +311,49 @@ function buildAntigravityTurns(records, conversationId) {
|
|
|
307
311
|
preludeRecords += 1;
|
|
308
312
|
continue;
|
|
309
313
|
}
|
|
314
|
+
// Assigned rather than or-ed, so what survives is the last `MODEL` record's
|
|
315
|
+
// answer. `SYSTEM` records are ignored here for the same reason they render
|
|
316
|
+
// to nothing: agy injected them, they are not agy speaking.
|
|
317
|
+
if (record.source === exports.ANTIGRAVITY_MODEL_SOURCE) {
|
|
318
|
+
turn.closed = isAntigravityTurnClosingRecord(record);
|
|
319
|
+
}
|
|
310
320
|
if (turn.records.length >= exports.MAX_ANTIGRAVITY_TURN_RECORDS) {
|
|
311
321
|
turn.overflowed = true;
|
|
312
322
|
continue;
|
|
313
323
|
}
|
|
314
324
|
turn.records.push(record);
|
|
315
325
|
}
|
|
326
|
+
// Every turn but the last has a later prompt behind it, and a prompt is proof
|
|
327
|
+
// agy moved on. See {@link AntigravityTurnAccumulator.superseded}.
|
|
328
|
+
for (let index = 0; index < turns.length - 1; index += 1) {
|
|
329
|
+
turns[index].superseded = true;
|
|
330
|
+
}
|
|
316
331
|
return { turns, preludeRecords };
|
|
317
332
|
}
|
|
333
|
+
/**
|
|
334
|
+
* Whether this `MODEL` record is agy finishing its answer (Issue #2264).
|
|
335
|
+
*
|
|
336
|
+
* See {@link AntigravityTurnAccumulator.closed} for the argument; the emptiness
|
|
337
|
+
* test is the one {@link renderAntigravityTurn} applies to `content`, so a
|
|
338
|
+
* record that renders to nothing cannot be what makes a turn look finished.
|
|
339
|
+
*/
|
|
340
|
+
function isAntigravityTurnClosingRecord(record) {
|
|
341
|
+
if (record.source !== exports.ANTIGRAVITY_MODEL_SOURCE)
|
|
342
|
+
return false;
|
|
343
|
+
if (record.type !== exports.ANTIGRAVITY_PLANNER_TYPE)
|
|
344
|
+
return false;
|
|
345
|
+
if (record.toolCalls.length > 0)
|
|
346
|
+
return false;
|
|
347
|
+
return (record.content ?? '').trim().length > 0;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Whether a writer may record this turn (Issue #2264).
|
|
351
|
+
*
|
|
352
|
+
* Either proof that nothing more is coming — agy answered, or it moved on.
|
|
353
|
+
*/
|
|
354
|
+
function isAntigravityTurnWritable(turn) {
|
|
355
|
+
return turn.closed || turn.superseded;
|
|
356
|
+
}
|
|
318
357
|
/** Whether this record is the one the operator's own text arrived on. */
|
|
319
358
|
function isAntigravityPromptRecord(record) {
|
|
320
359
|
return record.source === exports.ANTIGRAVITY_USER_SOURCE && record.type === exports.ANTIGRAVITY_USER_TYPE;
|