commandmate 0.33.0 → 0.33.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +432 -425
- package/.next/app-path-routes-manifest.json +24 -23
- package/.next/build-manifest.json +5 -5
- package/.next/diagnostics/framework.json +1 -1
- package/.next/next-server.js.nft.json +1 -1
- package/.next/prerender-manifest.json +9 -9
- package/.next/required-server-files.json +1 -2
- package/.next/routes-manifest.json +8 -0
- 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_client-reference-manifest.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.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 +32 -1
- 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 +33 -2
- 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.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_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 +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.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.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/[id]/todos/[todoId]/route.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.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.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route.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.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/notes/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/instances/notes/route_client-reference-manifest.js +1 -0
- 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.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.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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +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.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +103 -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.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/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_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_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 +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page.js +1 -1
- package/.next/server/app/sessions/page_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 +12 -12
- 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 +24 -23
- package/.next/server/chunks/1068.js +1 -0
- package/.next/server/chunks/1191.js +1 -1
- package/.next/server/chunks/1210.js +1 -1
- package/.next/server/chunks/1331.js +2 -2
- package/.next/server/chunks/1366.js +5 -3
- package/.next/server/chunks/1886.js +3 -3
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/2839.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3323.js +1 -0
- package/.next/server/chunks/3707.js +1 -1
- package/.next/server/chunks/3708.js +1 -1
- package/.next/server/chunks/4443.js +1 -1
- package/.next/server/chunks/5220.js +1 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/595.js +2 -2
- package/.next/server/chunks/6337.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/650.js +1 -0
- package/.next/server/chunks/6661.js +1 -1
- package/.next/server/chunks/6781.js +1 -0
- package/.next/server/chunks/6808.js +1 -0
- package/.next/server/chunks/6838.js +1 -1
- package/.next/server/chunks/7875.js +3 -3
- package/.next/server/chunks/8807.js +163 -131
- package/.next/server/chunks/8918.js +107 -5
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/middleware-build-manifest.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/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/1255-7e5873f06b25e129.js +1 -0
- package/.next/static/chunks/{4718-d97f52cd932dc1ee.js → 4718-441a2af91f0374e9.js} +1 -1
- package/.next/static/chunks/app/api/agents/update/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
- package/.next/static/chunks/app/api/agents/versions/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
- package/.next/static/chunks/app/api/app/update/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
- package/.next/static/chunks/app/api/app/update-check/{route-8bc5b680c5f3eae4.js → route-c4d2d5016c5f2a0a.js} +1 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/relays/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/skills/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/templates/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/todos/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/notes/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/{page-6871cca022b24807.js → page-022090bf6f932818.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/repositories/{page-788ded1b72963d94.js → page-2576158c8420fda0.js} +1 -1
- package/.next/static/chunks/app/sessions/page-584adf11ae51df10.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-c4d2d5016c5f2a0a.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-38edcd53e51f53b0.js +1 -0
- package/.next/static/chunks/{main-6092074a0dc78280.js → main-ac91ed6e71380841.js} +1 -1
- package/.next/static/css/acd46e25427a2080.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/worktrees/[id]/instances/notes/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/dist/server/locales/en/worktree.json +8 -0
- package/dist/server/locales/ja/worktree.json +8 -0
- package/dist/server/src/lib/assistant-response-saver.js +168 -12
- package/dist/server/src/lib/cli-tools/base.js +311 -1
- package/dist/server/src/lib/cli-tools/start-availability.js +52 -0
- package/dist/server/src/lib/db/agent-instances-db.js +213 -1
- package/dist/server/src/lib/db/migrations/index.js +2 -0
- package/dist/server/src/lib/db/migrations/runner.js +1 -1
- package/dist/server/src/lib/db/migrations/v61-session-notes.js +85 -0
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +204 -9
- package/dist/server/src/lib/hooks/sources/claude/history.js +29 -3
- package/dist/server/src/lib/hooks/sources/codex/history.js +29 -3
- package/dist/server/src/lib/hooks/sources/command-code/history.js +29 -3
- package/dist/server/src/lib/hooks/stop-history-capture.js +30 -4
- package/dist/server/src/lib/polling/response-checker.js +258 -9
- package/dist/server/src/lib/polling/response-poller-core.js +20 -0
- package/dist/server/src/lib/polling/structured-history-gate.js +26 -6
- package/dist/server/src/lib/push/failure-push-notifier.js +68 -1
- package/dist/server/src/lib/push/push-sender.js +16 -5
- package/dist/server/src/lib/response-cleaner.js +84 -0
- package/dist/server/src/lib/session/current-output-builder.js +156 -4
- package/package.json +2 -2
- package/.next/server/chunks/21.js +0 -1
- package/.next/server/chunks/3086.js +0 -1
- package/.next/server/chunks/3270.js +0 -1
- package/.next/server/chunks/3925.js +0 -1
- package/.next/server/chunks/5043.js +0 -1
- package/.next/server/chunks/6306.js +0 -1
- package/.next/server/chunks/6363.js +0 -1
- package/.next/server/chunks/6491.js +0 -103
- package/.next/server/chunks/7890.js +0 -1
- package/.next/server/chunks/8063.js +0 -32
- package/.next/server/chunks/8687.js +0 -1
- package/.next/static/chunks/1255-8cb587d9170b45ed.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/relays/[relayId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/relays/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/skills/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/templates/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/todos/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/sessions/page-fa2d62f3e8436c69.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-8bc5b680c5f3eae4.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-18a7d9374bd8c218.js +0 -1
- package/.next/static/css/fb455b4e308adbaa.css +0 -1
- /package/.next/static/{eVkZd6vpcQwyJIlbymCUg → 0a4qrU8WdUwQrlO4mfLMu}/_buildManifest.js +0 -0
- /package/.next/static/{eVkZd6vpcQwyJIlbymCUg → 0a4qrU8WdUwQrlO4mfLMu}/_ssgManifest.js +0 -0
|
@@ -17,7 +17,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
17
17
|
* Current schema version
|
|
18
18
|
* Increment this when adding new migrations
|
|
19
19
|
*/
|
|
20
|
-
exports.CURRENT_SCHEMA_VERSION =
|
|
20
|
+
exports.CURRENT_SCHEMA_VERSION = 61;
|
|
21
21
|
/**
|
|
22
22
|
* Get current schema version from database
|
|
23
23
|
*/
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Migration v61: the one-line note an operator keeps beside a session (#2427).
|
|
4
|
+
*
|
|
5
|
+
* ## What a row is, and what it is emphatically not
|
|
6
|
+
*
|
|
7
|
+
* One row is a free-text reminder of what THIS session was last asked to do —
|
|
8
|
+
* "#2427 の DB 層", "レビュー待ち" — rewritten every time the operator hands the
|
|
9
|
+
* session a new instruction. It exists because a four-way split shows four
|
|
10
|
+
* terminals whose headers all read `claude`, and the pane that is three
|
|
11
|
+
* scrollbacks deep gives no answer to "which one was doing the migration".
|
|
12
|
+
*
|
|
13
|
+
* It is **not** an alias. `agent_instances.alias` is a *resolution key*: since
|
|
14
|
+
* Issue #2376 `--instance レビュー担当` finds the roster row whose alias matches,
|
|
15
|
+
* so an alias is a name the routing layer reads. A note is read by human eyes
|
|
16
|
+
* only, and nothing in `resolveInstanceSelector` (the `/resolve-target` route)
|
|
17
|
+
* or in `resolveInstanceCliTool` looks at this table. That separation is the
|
|
18
|
+
* point of storing it apart from the roster rather than widening the alias: a
|
|
19
|
+
* memo the operator rewrites hourly must never be able to change where the next
|
|
20
|
+
* `send` lands.
|
|
21
|
+
*
|
|
22
|
+
* ## Why a table of its own rather than a column on `agent_instances`
|
|
23
|
+
*
|
|
24
|
+
* The reason v59 gives, unchanged: `setAgentInstances` is a full REPLACE —
|
|
25
|
+
* `PATCH /api/worktrees/[id]` posts the whole roster and the write deletes every
|
|
26
|
+
* row for the worktree and re-inserts from the payload, which is
|
|
27
|
+
* `AgentInstance[]` (id, tool, alias, order) and nothing else. A `note` column
|
|
28
|
+
* there would be silently emptied every time somebody renamed an instance or
|
|
29
|
+
* dragged one up the list — i.e. by the two operations most likely to happen
|
|
30
|
+
* while a note is worth keeping. A separate table survives the replace, and
|
|
31
|
+
* `pruneSessionNotes` removes the rows whose instance genuinely went away.
|
|
32
|
+
*
|
|
33
|
+
* It also keeps `AgentInstance` — which is the roster PATCH's *input* shape, not
|
|
34
|
+
* merely its output — free of a field the writer would have to echo back to
|
|
35
|
+
* avoid erasing it.
|
|
36
|
+
*
|
|
37
|
+
* ## Column notes
|
|
38
|
+
*
|
|
39
|
+
* - **`note` is NOT NULL and a row means a note exists.** Clearing the text
|
|
40
|
+
* deletes the row (see `setSessionNote`) rather than storing `''`: an empty
|
|
41
|
+
* note and no note are indistinguishable to every reader, and the delete keeps
|
|
42
|
+
* the table to the sessions somebody actually annotated. That is also what
|
|
43
|
+
* makes "the note is empty" renderable as *absence* in the split header, which
|
|
44
|
+
* the Issue asks for.
|
|
45
|
+
* - **`updated_at` is displayed, not just bookkeeping.** The Issue's acceptance
|
|
46
|
+
* condition is that the note carries the time it was written, so the column is
|
|
47
|
+
* part of the payload rather than an audit field. Epoch milliseconds, matching
|
|
48
|
+
* v44 onward.
|
|
49
|
+
* - **`worktree_id` is spelled conventionally** so `getWorktreeChildTables()`
|
|
50
|
+
* finds it by introspection: the row then follows a worktree id rename
|
|
51
|
+
* (v54/v55) and is swept when the worktree is deleted, which is exactly as
|
|
52
|
+
* long as a note about one of that worktree's sessions can mean anything.
|
|
53
|
+
*
|
|
54
|
+
* The primary key is `(worktree_id, instance_id)` — the identity
|
|
55
|
+
* `agent_instances` uses and the identity a note is about. `cli_tool_id` is
|
|
56
|
+
* deliberately absent for v59's reason: an instance id belongs to one tool by
|
|
57
|
+
* construction (`resolveInstanceCliTool`), so a composite including it would let
|
|
58
|
+
* one session hold two contradictory notes.
|
|
59
|
+
*
|
|
60
|
+
* The rollback drops the table, which is the whole of what this migration adds.
|
|
61
|
+
*/
|
|
62
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
63
|
+
exports.v61_migrations = void 0;
|
|
64
|
+
exports.v61_migrations = [
|
|
65
|
+
{
|
|
66
|
+
version: 61,
|
|
67
|
+
name: 'session-notes',
|
|
68
|
+
up: (db) => {
|
|
69
|
+
db.exec(`
|
|
70
|
+
CREATE TABLE IF NOT EXISTS session_notes (
|
|
71
|
+
worktree_id TEXT NOT NULL,
|
|
72
|
+
instance_id TEXT NOT NULL,
|
|
73
|
+
note TEXT NOT NULL,
|
|
74
|
+
updated_at INTEGER NOT NULL,
|
|
75
|
+
|
|
76
|
+
PRIMARY KEY (worktree_id, instance_id),
|
|
77
|
+
FOREIGN KEY (worktree_id) REFERENCES worktrees(id) ON DELETE CASCADE
|
|
78
|
+
);
|
|
79
|
+
`);
|
|
80
|
+
},
|
|
81
|
+
down: (db) => {
|
|
82
|
+
db.exec('DROP TABLE IF EXISTS session_notes;');
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
];
|
|
@@ -91,7 +91,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
91
91
|
};
|
|
92
92
|
})();
|
|
93
93
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
94
|
-
exports.ANTIGRAVITY_CLI_HOME_SEGMENTS = exports.ANTIGRAVITY_TRANSCRIPT_TAIL_BYTES = void 0;
|
|
94
|
+
exports.ANTIGRAVITY_TURN_RECHECK_LIMIT = exports.ANTIGRAVITY_CLI_HOME_SEGMENTS = exports.ANTIGRAVITY_TRANSCRIPT_TAIL_BYTES = void 0;
|
|
95
95
|
exports.resetAntigravityTranscriptConversations = resetAntigravityTranscriptConversations;
|
|
96
96
|
exports.resolveAntigravityConversationId = resolveAntigravityConversationId;
|
|
97
97
|
exports.resolveAntigravityHome = resolveAntigravityHome;
|
|
@@ -106,6 +106,7 @@ const path_1 = require("path");
|
|
|
106
106
|
const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
|
|
107
107
|
const transcript_tail_1 = require("../../../../lib/history/transcript-tail");
|
|
108
108
|
const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder");
|
|
109
|
+
const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
|
|
109
110
|
const logger_1 = require("../../../../lib/logger");
|
|
110
111
|
const agent_transcript_1 = require("../../../../types/agent-transcript");
|
|
111
112
|
const transcript_1 = require("./transcript");
|
|
@@ -288,11 +289,29 @@ function acceptAntigravityTranscriptPath(agyHome, candidate) {
|
|
|
288
289
|
*
|
|
289
290
|
* Never throws.
|
|
290
291
|
*
|
|
292
|
+
* **A row this reader wrote is not final (Issue #2438).** Before anything is
|
|
293
|
+
* written, the newest already-written turns — at most
|
|
294
|
+
* {@link ANTIGRAVITY_TURN_RECHECK_LIMIT} of them — are re-rendered and compared
|
|
295
|
+
* against the rows they produced, and a row whose turn now renders *strictly
|
|
296
|
+
* longer* is replaced in place. agy has no record that closes a turn, so an
|
|
297
|
+
* interim report reads as a finished answer (`isAntigravityTurnClosingRecord`)
|
|
298
|
+
* and used to freeze a half-written reply into History forever. That is a
|
|
299
|
+
* repair and not a second verdict: growing an older row changes neither the
|
|
300
|
+
* return value nor `report`, both of which are about the **newest** turn.
|
|
301
|
+
*
|
|
302
|
+
* Since Issue #2436 the false can explain itself: pass a
|
|
303
|
+
* `StructuredHistoryCaptureReport` and `outcome` is set to `'not_yet_closed'`
|
|
304
|
+
* when the newest turn is one the agent has not finished writing — the case the
|
|
305
|
+
* `-turn-open` line below reports, and the one where the caller's scraped copy
|
|
306
|
+
* is worth holding rather than saving. Every other false leaves it unset, which
|
|
307
|
+
* the gate reads as `'unavailable'`.
|
|
308
|
+
*
|
|
291
309
|
* @param target - The instance whose turn just ended
|
|
292
310
|
* @param capture - See {@link AntigravityTranscriptCapture}
|
|
311
|
+
* @param report - Optional out-parameter; see `StructuredHistoryCaptureReport`
|
|
293
312
|
* @returns Whether History now holds this turn as the agent's own Markdown
|
|
294
313
|
*/
|
|
295
|
-
async function captureAntigravityTranscriptTurn(target, capture = {}) {
|
|
314
|
+
async function captureAntigravityTranscriptTurn(target, capture = {}, report) {
|
|
296
315
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
297
316
|
try {
|
|
298
317
|
const agyHome = capture.antigravityHome ?? resolveAntigravityHome();
|
|
@@ -348,12 +367,26 @@ async function captureAntigravityTranscriptTurn(target, capture = {}) {
|
|
|
348
367
|
});
|
|
349
368
|
}
|
|
350
369
|
const pending = await selectUnwrittenAntigravityTurns(target, built.turns);
|
|
370
|
+
// Before anything is written: the rows that are already there (#2438). This
|
|
371
|
+
// is deliberately ahead of the early return below, because "the newest turn
|
|
372
|
+
// is already a row" is exactly the state the frozen row the Issue measured
|
|
373
|
+
// was stuck in — agy said "waiting for the worker", the writer saved that,
|
|
374
|
+
// and every later read answered true and did nothing while the conclusion
|
|
375
|
+
// sat in the transcript beside it. Written turns are re-checked whether or
|
|
376
|
+
// not anything is pending, so an old turn can be repaired in the same pass
|
|
377
|
+
// that writes a new one.
|
|
378
|
+
await refreshAntigravityTurnRows(target, built.turns
|
|
379
|
+
.slice(0, built.turns.length - pending.turns.length)
|
|
380
|
+
.slice(-exports.ANTIGRAVITY_TURN_RECHECK_LIMIT), path);
|
|
351
381
|
if (pending.turns.length === 0) {
|
|
352
382
|
logger.debug('antigravity-transcript-turns-already-saved', {
|
|
353
383
|
worktreeId: target.worktreeId,
|
|
354
384
|
instanceId,
|
|
355
385
|
turnsInWindow: built.turns.length,
|
|
356
386
|
});
|
|
387
|
+
// Issue #2437: this turn is already History's Markdown, so the pane rows
|
|
388
|
+
// behind it must stop being "unsaved output" the pre-send flush can pick up.
|
|
389
|
+
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
357
390
|
return true;
|
|
358
391
|
}
|
|
359
392
|
if (pending.turns.length > 1) {
|
|
@@ -380,7 +413,14 @@ async function captureAntigravityTranscriptTurn(target, capture = {}) {
|
|
|
380
413
|
let captured = false;
|
|
381
414
|
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
382
415
|
const turn = pending.turns[index];
|
|
383
|
-
captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastAntigravityRecordAt(turn), nextTurnOpensAt(pending.turns, userRows, index)), path);
|
|
416
|
+
captured = await writeAntigravityTurn(target, turn, (0, transcript_1.renderAntigravityTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastAntigravityRecordAt(turn), nextTurnOpensAt(pending.turns, userRows, index)), path, report);
|
|
417
|
+
}
|
|
418
|
+
if (captured) {
|
|
419
|
+
// Issue #2437: History now holds this turn as the agent's own Markdown.
|
|
420
|
+
// Park the pre-send flush's cursor past the pane rows it covers, or a
|
|
421
|
+
// `/send` arriving before the next poll tick saves the whole finished turn
|
|
422
|
+
// a second time.
|
|
423
|
+
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
384
424
|
}
|
|
385
425
|
return captured;
|
|
386
426
|
}
|
|
@@ -577,6 +617,137 @@ function nextTurnOpensAt(turns, userRows, index) {
|
|
|
577
617
|
return null;
|
|
578
618
|
return userRows[index + 1]?.timestampMs ?? next.startedAt;
|
|
579
619
|
}
|
|
620
|
+
/**
|
|
621
|
+
* How many already-written turns are re-rendered and compared (Issue #2438).
|
|
622
|
+
*
|
|
623
|
+
* The repair half of #2438 has to look at rows this reader has **already**
|
|
624
|
+
* written, which is the one thing the anchor rule of
|
|
625
|
+
* {@link selectUnwrittenAntigravityTurns} deliberately does not do — so it is
|
|
626
|
+
* bounded here rather than by the read window. Three, the number claude and
|
|
627
|
+
* command-code settled on in #2264 and for the same arithmetic: the poller runs
|
|
628
|
+
* every couple of seconds, re-rendering the whole window on every tick would
|
|
629
|
+
* make a repair the most expensive thing the poll does, and a turn that is going
|
|
630
|
+
* to grow grows within seconds of being written.
|
|
631
|
+
*
|
|
632
|
+
* The cost of the bound is paid by rows a session has already moved three turns
|
|
633
|
+
* past: those keep whatever they were written with. The measured case — one
|
|
634
|
+
* conversation whose only turn was `#0` — is inside it by a wide margin.
|
|
635
|
+
*/
|
|
636
|
+
exports.ANTIGRAVITY_TURN_RECHECK_LIMIT = 3;
|
|
637
|
+
/**
|
|
638
|
+
* Replace a saved row whose body has since grown (Issue #2438).
|
|
639
|
+
*
|
|
640
|
+
* The defect this exists for is not that the wrong body was written; it is that
|
|
641
|
+
* the row was written **early**. `isAntigravityTurnClosingRecord` reads prose
|
|
642
|
+
* with no `tool_calls` as agy finishing, and an interim report — "waiting for
|
|
643
|
+
* the worker" — has exactly that shape. The row is keyed
|
|
644
|
+
* `antigravity-turn:<conversationId>#<stepIndex>`, so once it exists every later
|
|
645
|
+
* read finds it, answers "already saved", and the gate suppresses the scrape
|
|
646
|
+
* that could have carried the conclusion instead. Nothing else in the system
|
|
647
|
+
* ever revisits that row.
|
|
648
|
+
*
|
|
649
|
+
* **Strictly longer, never merely different.** Equality is the ordinary case and
|
|
650
|
+
* must cost nothing, and a body that got *shorter* between two reads is not a
|
|
651
|
+
* turn that grew — it is a window that slid, or a truncation marker, and
|
|
652
|
+
* overwriting a full reply with a shorter one is the one outcome worse than the
|
|
653
|
+
* bug. Longer implies different, so one comparison covers both.
|
|
654
|
+
*
|
|
655
|
+
* Only `content` moves. The row's `id`, `request_id`, `timestamp`, worktree,
|
|
656
|
+
* tool and instance are what History sorts and pairs on, and a repair that
|
|
657
|
+
* disturbed any of them would move an old answer to the bottom of the
|
|
658
|
+
* conversation.
|
|
659
|
+
*
|
|
660
|
+
* `message_updated`, never `message`: the row already existed and was already
|
|
661
|
+
* delivered when it was created, so a client that appended instead of replacing
|
|
662
|
+
* would show the reply twice.
|
|
663
|
+
*
|
|
664
|
+
* @param existing - The row `findMessageByRequestId` answered with
|
|
665
|
+
* @returns Whether the row was replaced
|
|
666
|
+
*/
|
|
667
|
+
async function growAntigravityTurnRow(target, existing, rendered, path) {
|
|
668
|
+
const instanceId = target.instanceId ?? target.cliToolId;
|
|
669
|
+
// The stored body is the only evidence of what History holds, so a row that
|
|
670
|
+
// carries none is not evidence that anything grew. Same answer as "not
|
|
671
|
+
// longer": leave it alone. This runs inside the poller's save path, where the
|
|
672
|
+
// module contract is that nothing throws.
|
|
673
|
+
const previous = existing.content;
|
|
674
|
+
if (typeof previous !== 'string')
|
|
675
|
+
return false;
|
|
676
|
+
const previousLength = previous.length;
|
|
677
|
+
if (rendered.body.length <= previousLength)
|
|
678
|
+
return false;
|
|
679
|
+
const [{ getDbInstance }, { updateMessageContent }, { broadcastMessage }] = await Promise.all([
|
|
680
|
+
Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
|
|
681
|
+
Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
|
|
682
|
+
Promise.resolve().then(() => __importStar(require('../../../../lib/ws-server'))),
|
|
683
|
+
]);
|
|
684
|
+
updateMessageContent(getDbInstance(), existing.id, rendered.body);
|
|
685
|
+
broadcastMessage('message_updated', {
|
|
686
|
+
worktreeId: target.worktreeId,
|
|
687
|
+
message: { ...existing, content: rendered.body },
|
|
688
|
+
});
|
|
689
|
+
logger.info('antigravity-transcript-turn-updated', {
|
|
690
|
+
worktreeId: target.worktreeId,
|
|
691
|
+
instanceId,
|
|
692
|
+
conversationId: rendered.conversationId,
|
|
693
|
+
stepIndex: rendered.stepIndex,
|
|
694
|
+
requestId: existing.requestId,
|
|
695
|
+
path,
|
|
696
|
+
previousLength,
|
|
697
|
+
bodyLength: rendered.body.length,
|
|
698
|
+
textBlocks: rendered.textBlocks,
|
|
699
|
+
toolBlocks: rendered.toolBlocks,
|
|
700
|
+
});
|
|
701
|
+
return true;
|
|
702
|
+
}
|
|
703
|
+
/**
|
|
704
|
+
* Re-read the newest already-written turns and grow the short ones (#2438).
|
|
705
|
+
*
|
|
706
|
+
* Runs before the pending turns are written and independently of whether there
|
|
707
|
+
* are any — the case it exists for is precisely the one
|
|
708
|
+
* {@link captureAntigravityTranscriptTurn} used to return `true` from without
|
|
709
|
+
* doing anything: the newest turn already has a row, and that row stopped at
|
|
710
|
+
* agy's interim report.
|
|
711
|
+
*
|
|
712
|
+
* Turns that are open again are skipped rather than compared. A turn whose last
|
|
713
|
+
* record is a `tool_calls` is one agy is still working through, its body is by
|
|
714
|
+
* definition not the final one, and a repair that raced the agent would rewrite
|
|
715
|
+
* the row on every poll of a long turn. **This is not a second chance to write
|
|
716
|
+
* a turn**: a candidate with no row is left alone, because the anchor rule
|
|
717
|
+
* already decided it is not this pass's to create.
|
|
718
|
+
*
|
|
719
|
+
* The database is asked before the turn is rendered, so a candidate with no row
|
|
720
|
+
* — every candidate, in a session this reader has never written to — costs one
|
|
721
|
+
* indexed lookup and no Markdown.
|
|
722
|
+
*
|
|
723
|
+
* Serialisation is the gate's, per instance: this adds no loop and no timer of
|
|
724
|
+
* its own, it is one more thing the poll's existing pass does.
|
|
725
|
+
*
|
|
726
|
+
* @param candidates - Already-written turns, oldest first, at most
|
|
727
|
+
* {@link ANTIGRAVITY_TURN_RECHECK_LIMIT}
|
|
728
|
+
* @returns How many rows were replaced
|
|
729
|
+
*/
|
|
730
|
+
async function refreshAntigravityTurnRows(target, candidates, path) {
|
|
731
|
+
if (candidates.length === 0)
|
|
732
|
+
return 0;
|
|
733
|
+
const [{ getDbInstance }, { findMessageByRequestId }] = await Promise.all([
|
|
734
|
+
Promise.resolve().then(() => __importStar(require('../../../../lib/db/db-instance'))),
|
|
735
|
+
Promise.resolve().then(() => __importStar(require('../../../../lib/db'))),
|
|
736
|
+
]);
|
|
737
|
+
const db = getDbInstance();
|
|
738
|
+
let updated = 0;
|
|
739
|
+
for (const turn of candidates) {
|
|
740
|
+
if (!(0, transcript_1.isAntigravityTurnWritable)(turn))
|
|
741
|
+
continue;
|
|
742
|
+
const existing = findMessageByRequestId(db, target.worktreeId, (0, agent_transcript_1.antigravityTurnRequestId)(turn.conversationId, turn.stepIndex));
|
|
743
|
+
if (!existing)
|
|
744
|
+
continue;
|
|
745
|
+
if (await growAntigravityTurnRow(target, existing, (0, transcript_1.renderAntigravityTurn)(turn), path)) {
|
|
746
|
+
updated += 1;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
return updated;
|
|
750
|
+
}
|
|
580
751
|
/**
|
|
581
752
|
* Write one rendered turn, unless it is already there.
|
|
582
753
|
*
|
|
@@ -587,20 +758,36 @@ function nextTurnOpensAt(turns, userRows, index) {
|
|
|
587
758
|
* Answering **true** for a turn that was already saved is deliberate. It means
|
|
588
759
|
* "History holds this turn as Markdown", which is what the poller needs to know
|
|
589
760
|
* — a second poll of the same finished turn must not save the pane's copy on top
|
|
590
|
-
* of the row this path wrote.
|
|
761
|
+
* of the row this path wrote. Since #2438 that row is no longer left as it was
|
|
762
|
+
* found: it is the same comparison {@link growAntigravityTurnRow} makes for the
|
|
763
|
+
* turns the recheck window covers, made here where both the row and the turn
|
|
764
|
+
* are already in hand.
|
|
591
765
|
*
|
|
592
766
|
* @returns Whether History holds this turn as the agent's own Markdown
|
|
593
767
|
*/
|
|
594
|
-
async function writeAntigravityTurn(target, turn, rendered, timestampMs, path) {
|
|
768
|
+
async function writeAntigravityTurn(target, turn, rendered, timestampMs, path, report) {
|
|
595
769
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
770
|
+
// Issue #2436: the caller's report is about the turn THIS call is deciding.
|
|
771
|
+
// The loop above walks oldest-first, so a verdict left by an earlier turn has
|
|
772
|
+
// to be cleared before this one's is written.
|
|
773
|
+
if (report)
|
|
774
|
+
report.outcome = undefined;
|
|
596
775
|
if (!(0, transcript_1.isAntigravityTurnWritable)(turn)) {
|
|
597
776
|
// agy has not finished this answer and no later prompt has taken over, so
|
|
598
777
|
// what is in the file is a turn in progress. Writing it would put a reply
|
|
599
|
-
// with its last paragraph missing into History
|
|
600
|
-
//
|
|
601
|
-
//
|
|
778
|
+
// with its last paragraph missing into History — the row is keyed on
|
|
779
|
+
// `(conversationId, step_index)`, so every later read finds it and answers
|
|
780
|
+
// "already saved". That is Issue #2264, reported against claude and
|
|
602
781
|
// structurally identical here: a turn cut off after its `tool_calls` renders
|
|
603
782
|
// a *non-empty* body, so the emptiness guard below cannot see it.
|
|
783
|
+
//
|
|
784
|
+
// #2438 made such a row repairable rather than making it acceptable: a
|
|
785
|
+
// short row only grows while its turn is still among the newest
|
|
786
|
+
// {@link ANTIGRAVITY_TURN_RECHECK_LIMIT}, and nothing at all rewinds what a
|
|
787
|
+
// relay already delivered from it. Not writing it in the first place is
|
|
788
|
+
// still the fix; the repair is the second line.
|
|
789
|
+
if (report)
|
|
790
|
+
report.outcome = 'not_yet_closed';
|
|
604
791
|
logger.info('antigravity-transcript-turn-open', {
|
|
605
792
|
worktreeId: target.worktreeId,
|
|
606
793
|
instanceId,
|
|
@@ -654,12 +841,20 @@ async function writeAntigravityTurn(target, turn, rendered, timestampMs, path) {
|
|
|
654
841
|
Promise.resolve().then(() => __importStar(require('../../../../lib/ws-server'))),
|
|
655
842
|
]);
|
|
656
843
|
const db = getDbInstance();
|
|
657
|
-
|
|
844
|
+
const existing = findMessageByRequestId(db, target.worktreeId, requestId);
|
|
845
|
+
if (existing) {
|
|
658
846
|
logger.debug('antigravity-transcript-turn-already-saved', {
|
|
659
847
|
worktreeId: target.worktreeId,
|
|
660
848
|
instanceId,
|
|
661
849
|
requestId,
|
|
662
850
|
});
|
|
851
|
+
// The row may be one of the ones #2438 was reported for — saved at agy's
|
|
852
|
+
// interim report — and this is the one place that holds both the row and
|
|
853
|
+
// the turn. The comparison and the notification are not repeated here; see
|
|
854
|
+
// {@link growAntigravityTurnRow}. The verdict is unchanged: History holds
|
|
855
|
+
// this turn either way, and `report.outcome` is about this turn's
|
|
856
|
+
// completeness rather than about an edit.
|
|
857
|
+
await growAntigravityTurnRow(target, existing, rendered, path);
|
|
663
858
|
return true;
|
|
664
859
|
}
|
|
665
860
|
const message = createMessage(db, {
|
|
@@ -104,6 +104,7 @@ const os_1 = require("os");
|
|
|
104
104
|
const path_1 = require("path");
|
|
105
105
|
const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
|
|
106
106
|
const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder");
|
|
107
|
+
const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
|
|
107
108
|
const logger_1 = require("../../../../lib/logger");
|
|
108
109
|
const agent_transcript_1 = require("../../../../types/agent-transcript");
|
|
109
110
|
const transcript_1 = require("./transcript");
|
|
@@ -266,10 +267,18 @@ function acceptClaudeTranscriptHint(homeDir, hint) {
|
|
|
266
267
|
*
|
|
267
268
|
* Never throws.
|
|
268
269
|
*
|
|
270
|
+
* Since Issue #2436 the false can explain itself: pass a
|
|
271
|
+
* `StructuredHistoryCaptureReport` and `outcome` is set to `'not_yet_closed'`
|
|
272
|
+
* when the newest turn is one the agent has not finished writing — the case the
|
|
273
|
+
* `-turn-open` line below reports, and the one where the caller's scraped copy
|
|
274
|
+
* is worth holding rather than saving. Every other false leaves it unset, which
|
|
275
|
+
* the gate reads as `'unavailable'`.
|
|
276
|
+
*
|
|
269
277
|
* @param target - The instance whose turn just ended
|
|
278
|
+
* @param report - Optional out-parameter; see `StructuredHistoryCaptureReport`
|
|
270
279
|
* @returns Whether History now holds this instance's newest turn as Markdown
|
|
271
280
|
*/
|
|
272
|
-
async function captureClaudeTranscriptTurn(target, capture) {
|
|
281
|
+
async function captureClaudeTranscriptTurn(target, capture, report) {
|
|
273
282
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
274
283
|
try {
|
|
275
284
|
const homeDir = capture.homeDir ?? (0, os_1.homedir)();
|
|
@@ -340,6 +349,9 @@ async function captureClaudeTranscriptTurn(target, capture) {
|
|
|
340
349
|
instanceId,
|
|
341
350
|
turnsInWindow: built.turns.length,
|
|
342
351
|
});
|
|
352
|
+
// Issue #2437: this turn is already History's Markdown, so the pane rows
|
|
353
|
+
// behind it must stop being "unsaved output" the pre-send flush can pick up.
|
|
354
|
+
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
343
355
|
return true;
|
|
344
356
|
}
|
|
345
357
|
if (pending.turns.length > 1) {
|
|
@@ -374,7 +386,14 @@ async function captureClaudeTranscriptTurn(target, capture) {
|
|
|
374
386
|
let captured = false;
|
|
375
387
|
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
376
388
|
const turn = pending.turns[index];
|
|
377
|
-
captured = await writeClaudeTurn(target, turn, (0, transcript_1.renderClaudeTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.promptUuid) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), path);
|
|
389
|
+
captured = await writeClaudeTurn(target, turn, (0, transcript_1.renderClaudeTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.promptUuid) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), path, report);
|
|
390
|
+
}
|
|
391
|
+
if (captured) {
|
|
392
|
+
// Issue #2437: History now holds this turn as the agent's own Markdown.
|
|
393
|
+
// Park the pre-send flush's cursor past the pane rows it covers, or a
|
|
394
|
+
// `/send` arriving before the next poll tick saves the whole finished turn
|
|
395
|
+
// a second time.
|
|
396
|
+
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
378
397
|
}
|
|
379
398
|
return captured;
|
|
380
399
|
}
|
|
@@ -925,8 +944,13 @@ async function refreshClaudeTurnRows(target, candidates, path) {
|
|
|
925
944
|
*
|
|
926
945
|
* @returns Whether History holds this turn as the agent's own Markdown
|
|
927
946
|
*/
|
|
928
|
-
async function writeClaudeTurn(target, turn, rendered, timestampMs, path) {
|
|
947
|
+
async function writeClaudeTurn(target, turn, rendered, timestampMs, path, report) {
|
|
929
948
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
949
|
+
// Issue #2436: the caller's report is about the turn THIS call is deciding.
|
|
950
|
+
// The loop above walks oldest-first, so a verdict left by an earlier turn has
|
|
951
|
+
// to be cleared before this one's is written.
|
|
952
|
+
if (report)
|
|
953
|
+
report.outcome = undefined;
|
|
930
954
|
if (!(0, transcript_1.isClaudeTurnWritable)(turn)) {
|
|
931
955
|
// The agent has not said `end_turn` for this prompt and no later prompt has
|
|
932
956
|
// taken over, so what is in the file is a turn in progress. Writing it would
|
|
@@ -941,6 +965,8 @@ async function writeClaudeTurn(target, turn, rendered, timestampMs, path) {
|
|
|
941
965
|
// Handing it back to the scraper costs the Markdown rendering for this turn
|
|
942
966
|
// and nothing else: the Stop receiver asks again after a short delay, and
|
|
943
967
|
// the poller asks again when the pane returns to the composer.
|
|
968
|
+
if (report)
|
|
969
|
+
report.outcome = 'not_yet_closed';
|
|
944
970
|
logger.info('claude-transcript-turn-open', {
|
|
945
971
|
worktreeId: target.worktreeId,
|
|
946
972
|
instanceId,
|
|
@@ -101,6 +101,7 @@ const path_1 = require("path");
|
|
|
101
101
|
const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
|
|
102
102
|
const transcript_tail_1 = require("../../../../lib/history/transcript-tail");
|
|
103
103
|
const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder");
|
|
104
|
+
const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
|
|
104
105
|
const logger_1 = require("../../../../lib/logger");
|
|
105
106
|
const agent_transcript_1 = require("../../../../types/agent-transcript");
|
|
106
107
|
const transcript_1 = require("./transcript");
|
|
@@ -332,11 +333,19 @@ async function scanForRollout(dir, sessionId, depth) {
|
|
|
332
333
|
*
|
|
333
334
|
* Never throws.
|
|
334
335
|
*
|
|
336
|
+
* Since Issue #2436 the false can explain itself: pass a
|
|
337
|
+
* `StructuredHistoryCaptureReport` and `outcome` is set to `'not_yet_closed'`
|
|
338
|
+
* when the newest turn is one the agent has not finished writing — the case the
|
|
339
|
+
* `-turn-open` line below reports, and the one where the caller's scraped copy
|
|
340
|
+
* is worth holding rather than saving. Every other false leaves it unset, which
|
|
341
|
+
* the gate reads as `'unavailable'`.
|
|
342
|
+
*
|
|
335
343
|
* @param target - The instance whose turn just ended
|
|
336
344
|
* @param capture - See {@link CodexTranscriptCapture}
|
|
345
|
+
* @param report - Optional out-parameter; see `StructuredHistoryCaptureReport`
|
|
337
346
|
* @returns Whether History now holds this turn as the agent's own Markdown
|
|
338
347
|
*/
|
|
339
|
-
async function captureCodexTranscriptTurn(target, capture = {}) {
|
|
348
|
+
async function captureCodexTranscriptTurn(target, capture = {}, report) {
|
|
340
349
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
341
350
|
try {
|
|
342
351
|
const codexHome = capture.codexHome ?? resolveCodexHome();
|
|
@@ -395,6 +404,9 @@ async function captureCodexTranscriptTurn(target, capture = {}) {
|
|
|
395
404
|
instanceId,
|
|
396
405
|
turnsInWindow: built.turns.length,
|
|
397
406
|
});
|
|
407
|
+
// Issue #2437: this turn is already History's Markdown, so the pane rows
|
|
408
|
+
// behind it must stop being "unsaved output" the pre-send flush can pick up.
|
|
409
|
+
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
398
410
|
return true;
|
|
399
411
|
}
|
|
400
412
|
if (pending.turns.length > 1) {
|
|
@@ -428,7 +440,14 @@ async function captureCodexTranscriptTurn(target, capture = {}) {
|
|
|
428
440
|
let captured = false;
|
|
429
441
|
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
430
442
|
const turn = pending.turns[index];
|
|
431
|
-
captured = await writeCodexTurn(target, turn, (0, transcript_1.renderCodexTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.turnId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), windowFacts);
|
|
443
|
+
captured = await writeCodexTurn(target, turn, (0, transcript_1.renderCodexTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.turnId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), windowFacts, report);
|
|
444
|
+
}
|
|
445
|
+
if (captured) {
|
|
446
|
+
// Issue #2437: History now holds this turn as the agent's own Markdown.
|
|
447
|
+
// Park the pre-send flush's cursor past the pane rows it covers, or a
|
|
448
|
+
// `/send` arriving before the next poll tick saves the whole finished turn
|
|
449
|
+
// a second time.
|
|
450
|
+
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
432
451
|
}
|
|
433
452
|
return captured;
|
|
434
453
|
}
|
|
@@ -670,14 +689,21 @@ function nextTurnOpensAt(turns, userRows, index) {
|
|
|
670
689
|
*
|
|
671
690
|
* @returns Whether History holds this turn as the agent's own Markdown
|
|
672
691
|
*/
|
|
673
|
-
async function writeCodexTurn(target, turn, rendered, timestampMs, windowFacts) {
|
|
692
|
+
async function writeCodexTurn(target, turn, rendered, timestampMs, windowFacts, report) {
|
|
674
693
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
694
|
+
// Issue #2436: the caller's report is about the turn THIS call is deciding.
|
|
695
|
+
// The loop above walks oldest-first, so a verdict left by an earlier turn has
|
|
696
|
+
// to be cleared before this one's is written.
|
|
697
|
+
if (report)
|
|
698
|
+
report.outcome = undefined;
|
|
675
699
|
if (!turn.closed) {
|
|
676
700
|
// codex has not written the `task_complete` for this `turn_id` yet, so what
|
|
677
701
|
// is in the file is a turn in progress. Writing it would put a truncated
|
|
678
702
|
// reply in History permanently — and unlike an empty one, a truncated one
|
|
679
703
|
// looks finished. Handing it back to the scraper costs the Markdown
|
|
680
704
|
// rendering for this turn and nothing else.
|
|
705
|
+
if (report)
|
|
706
|
+
report.outcome = 'not_yet_closed';
|
|
681
707
|
logger.info('codex-transcript-turn-open', {
|
|
682
708
|
worktreeId: target.worktreeId,
|
|
683
709
|
instanceId,
|
|
@@ -135,6 +135,7 @@ const path_1 = require("path");
|
|
|
135
135
|
const auto_yes_state_1 = require("../../../../lib/auto-yes-state");
|
|
136
136
|
const transcript_tail_1 = require("../../../../lib/history/transcript-tail");
|
|
137
137
|
const user_turn_recorder_1 = require("../../../../lib/history/user-turn-recorder");
|
|
138
|
+
const assistant_response_saver_1 = require("../../../../lib/assistant-response-saver");
|
|
138
139
|
const logger_1 = require("../../../../lib/logger");
|
|
139
140
|
const agent_transcript_1 = require("../../../../types/agent-transcript");
|
|
140
141
|
const transcript_1 = require("./transcript");
|
|
@@ -325,10 +326,18 @@ async function findCommandCodeTranscriptPath(homeDir, sessionId) {
|
|
|
325
326
|
*
|
|
326
327
|
* Never throws.
|
|
327
328
|
*
|
|
329
|
+
* Since Issue #2436 the false can explain itself: pass a
|
|
330
|
+
* `StructuredHistoryCaptureReport` and `outcome` is set to `'not_yet_closed'`
|
|
331
|
+
* when the newest turn is one the agent has not finished writing — the case the
|
|
332
|
+
* `-turn-open` line below reports, and the one where the caller's scraped copy
|
|
333
|
+
* is worth holding rather than saving. Every other false leaves it unset, which
|
|
334
|
+
* the gate reads as `'unavailable'`.
|
|
335
|
+
*
|
|
328
336
|
* @param target - The instance whose turn just ended
|
|
337
|
+
* @param report - Optional out-parameter; see `StructuredHistoryCaptureReport`
|
|
329
338
|
* @returns Whether History now holds this instance's newest turn as Markdown
|
|
330
339
|
*/
|
|
331
|
-
async function captureCommandCodeTranscriptTurn(target, capture) {
|
|
340
|
+
async function captureCommandCodeTranscriptTurn(target, capture, report) {
|
|
332
341
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
333
342
|
try {
|
|
334
343
|
const homeDir = capture.commandCodeHome ?? (0, os_1.homedir)();
|
|
@@ -394,6 +403,9 @@ async function captureCommandCodeTranscriptTurn(target, capture) {
|
|
|
394
403
|
instanceId,
|
|
395
404
|
turnsInWindow: built.turns.length,
|
|
396
405
|
});
|
|
406
|
+
// Issue #2437: this turn is already History's Markdown, so the pane rows
|
|
407
|
+
// behind it must stop being "unsaved output" the pre-send flush can pick up.
|
|
408
|
+
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
397
409
|
return true;
|
|
398
410
|
}
|
|
399
411
|
if (pending.turns.length > 1) {
|
|
@@ -426,7 +438,14 @@ async function captureCommandCodeTranscriptTurn(target, capture) {
|
|
|
426
438
|
let captured = false;
|
|
427
439
|
for (let index = 0; index < pending.turns.length; index += 1) {
|
|
428
440
|
const turn = pending.turns[index];
|
|
429
|
-
captured = await writeCommandCodeTurn(target, turn, (0, transcript_1.renderCommandCodeTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.promptId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), path);
|
|
441
|
+
captured = await writeCommandCodeTurn(target, turn, (0, transcript_1.renderCommandCodeTurn)(turn), resolveAssistantTimestampMs(turn, userRows[index], lastRecordAt.get(turn.promptId) ?? 0, nextTurnOpensAt(pending.turns, userRows, index)), path, report);
|
|
442
|
+
}
|
|
443
|
+
if (captured) {
|
|
444
|
+
// Issue #2437: History now holds this turn as the agent's own Markdown.
|
|
445
|
+
// Park the pre-send flush's cursor past the pane rows it covers, or a
|
|
446
|
+
// `/send` arriving before the next poll tick saves the whole finished turn
|
|
447
|
+
// a second time.
|
|
448
|
+
await (0, assistant_response_saver_1.advanceCapturedLineForTranscriptTurn)(target);
|
|
430
449
|
}
|
|
431
450
|
return captured;
|
|
432
451
|
}
|
|
@@ -773,8 +792,13 @@ async function refreshCommandCodeTurnRows(target, candidates, path) {
|
|
|
773
792
|
*
|
|
774
793
|
* @returns Whether History holds this turn as the agent's own Markdown
|
|
775
794
|
*/
|
|
776
|
-
async function writeCommandCodeTurn(target, turn, rendered, timestampMs, path) {
|
|
795
|
+
async function writeCommandCodeTurn(target, turn, rendered, timestampMs, path, report) {
|
|
777
796
|
const instanceId = target.instanceId ?? target.cliToolId;
|
|
797
|
+
// Issue #2436: the caller's report is about the turn THIS call is deciding.
|
|
798
|
+
// The loop above walks oldest-first, so a verdict left by an earlier turn has
|
|
799
|
+
// to be cleared before this one's is written.
|
|
800
|
+
if (report)
|
|
801
|
+
report.outcome = undefined;
|
|
778
802
|
if (!(0, transcript_1.isCommandCodeTurnWritable)(turn)) {
|
|
779
803
|
// The agent's last word in this turn reached for a tool and no later prompt
|
|
780
804
|
// has taken over, so what is in the file is a turn in progress. Writing it
|
|
@@ -789,6 +813,8 @@ async function writeCommandCodeTurn(target, turn, rendered, timestampMs, path) {
|
|
|
789
813
|
// Handing it back to the scraper costs the Markdown rendering for this turn
|
|
790
814
|
// and nothing else: the Stop receiver asks again after a short delay, and
|
|
791
815
|
// the poller asks again when the pane returns to the composer.
|
|
816
|
+
if (report)
|
|
817
|
+
report.outcome = 'not_yet_closed';
|
|
792
818
|
logger.info('command-code-transcript-turn-open', {
|
|
793
819
|
worktreeId: target.worktreeId,
|
|
794
820
|
instanceId,
|