commandmate 0.32.1 → 0.33.1
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 +277 -270
- package/.next/app-path-routes-manifest.json +39 -38
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +12 -12
- package/.next/required-server-files.json +1 -1
- 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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/relays/[relayId]/cancel/route_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +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_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_client-reference-manifest.js +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_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_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_client-reference-manifest.js +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_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_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_client-reference-manifest.js +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_client-reference-manifest.js +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_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_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_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_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 +39 -38
- package/.next/server/chunks/1191.js +1 -1
- package/.next/server/chunks/1886.js +2 -2
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/5354.js +1 -1
- package/.next/server/chunks/6337.js +1 -1
- package/.next/server/chunks/6401.js +1 -1
- package/.next/server/chunks/6661.js +1 -1
- package/.next/server/chunks/6838.js +1 -1
- package/.next/server/chunks/7875.js +1 -1
- package/.next/server/chunks/8807.js +163 -131
- package/.next/server/chunks/8918.js +4 -4
- package/.next/server/chunks/9584.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{4718-9d63107c612a065d.js → 4718-2bc5cdf06573bf54.js} +1 -1
- package/.next/static/chunks/app/api/agents/{versions/route-8bc5b680c5f3eae4.js → update/route-c4d2d5016c5f2a0a.js} +1 -1
- package/.next/static/chunks/app/api/{app/update-check/route-8bc5b680c5f3eae4.js → agents/versions/route-c4d2d5016c5f2a0a.js} +1 -1
- package/.next/static/chunks/app/api/{agents/update/route-8bc5b680c5f3eae4.js → app/update/route-c4d2d5016c5f2a0a.js} +1 -1
- package/.next/static/chunks/app/api/app/{update/route-8bc5b680c5f3eae4.js → update-check/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-13ca0ba551fe5cfb.js +1 -0
- package/.next/static/css/acd46e25427a2080.css +1 -0
- package/.next/trace +14 -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/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/codex/transcript.js +88 -6
- package/dist/server/src/lib/hooks/sources/turn-body.js +3 -1
- 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/session/current-output-builder.js +156 -4
- package/package.json +1 -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-3d82a9355d5612d9.js +0 -1
- package/.next/static/css/96d94a4ba771efc3.css +0 -1
- /package/.next/static/{Lno4w_zWXdGdlfXg06Vp8 → 9lgw9hA727UMyFhXryGWG}/_buildManifest.js +0 -0
- /package/.next/static/{Lno4w_zWXdGdlfXg06Vp8 → 9lgw9hA727UMyFhXryGWG}/_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 @@
|
|
|
91
91
|
* @module lib/hooks/sources/codex/transcript
|
|
92
92
|
*/
|
|
93
93
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
94
|
-
exports.CODEX_THINKING_LABEL = exports.MAX_CODEX_TOOL_DETAIL_LENGTH = exports.MAX_CODEX_TURN_ITEMS = exports.CODEX_TURN_HEAD_TRUNCATION_MARKER = exports.CODEX_TURN_TRUNCATION_MARKER = exports.MAX_CODEX_TURN_BODY_LENGTH = exports.CODEX_ROLLOUT_EXTENSION = exports.CODEX_SESSIONS_DIR_SEGMENTS = void 0;
|
|
94
|
+
exports.CODEX_COMMENTARY_PHASE = exports.CODEX_FINAL_ANSWER_PHASE = exports.CODEX_THINKING_LABEL = exports.MAX_CODEX_TOOL_DETAIL_LENGTH = exports.MAX_CODEX_TURN_ITEMS = exports.CODEX_TURN_HEAD_TRUNCATION_MARKER = exports.CODEX_TURN_TRUNCATION_MARKER = exports.MAX_CODEX_TURN_BODY_LENGTH = exports.CODEX_ROLLOUT_EXTENSION = exports.CODEX_SESSIONS_DIR_SEGMENTS = void 0;
|
|
95
95
|
exports.readCodexRolloutItem = readCodexRolloutItem;
|
|
96
96
|
exports.readCodexRolloutRecord = readCodexRolloutRecord;
|
|
97
97
|
exports.parseCodexRollout = parseCodexRollout;
|
|
@@ -130,6 +130,21 @@ exports.MAX_CODEX_TURN_ITEMS = 2048;
|
|
|
130
130
|
exports.MAX_CODEX_TOOL_DETAIL_LENGTH = 200;
|
|
131
131
|
/** The label a reasoning summary is folded behind. Same word claude uses. */
|
|
132
132
|
exports.CODEX_THINKING_LABEL = 'Thinking';
|
|
133
|
+
/**
|
|
134
|
+
* `AgentMessage.phase` for the reply codex means the operator to read.
|
|
135
|
+
*
|
|
136
|
+
* Measured 268 of 2,211 archived `AgentMessage` items
|
|
137
|
+
* (`docs/design/codex-transcript-reader.md` §2.3).
|
|
138
|
+
*/
|
|
139
|
+
exports.CODEX_FINAL_ANSWER_PHASE = 'final_answer';
|
|
140
|
+
/**
|
|
141
|
+
* `AgentMessage.phase` for the progress narration codex writes while it works.
|
|
142
|
+
*
|
|
143
|
+
* Measured 1,943 of 2,211 — the majority of what codex says in a turn is this.
|
|
144
|
+
* The one phase {@link renderCodexTurn} folds; see its docblock for why the
|
|
145
|
+
* classification is an allow-list of exactly this value and nothing else.
|
|
146
|
+
*/
|
|
147
|
+
exports.CODEX_COMMENTARY_PHASE = 'commentary';
|
|
133
148
|
/**
|
|
134
149
|
* Read one `item_completed` item.
|
|
135
150
|
*
|
|
@@ -437,14 +452,79 @@ function renderReasoningItem(text) {
|
|
|
437
452
|
.join('\n');
|
|
438
453
|
return `> **${exports.CODEX_THINKING_LABEL}**\n>\n${quoted}`;
|
|
439
454
|
}
|
|
455
|
+
/**
|
|
456
|
+
* The prose one `AgentMessage` contributes, or `''` when it contributes none.
|
|
457
|
+
*
|
|
458
|
+
* The single definition of "non-empty body" for this reader, shared by
|
|
459
|
+
* {@link hasFinalAnswerProse} and by {@link renderCodexTurn}'s loop on purpose:
|
|
460
|
+
* the fallback asks whether the turn renders an answer, and if the two spelled
|
|
461
|
+
* that test out separately they could disagree about a message that is nothing
|
|
462
|
+
* but whitespace — the exact turn the fallback exists for.
|
|
463
|
+
*/
|
|
464
|
+
function agentMessageText(item) {
|
|
465
|
+
return item.text?.trim() ?? '';
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Whether this turn renders at least one non-empty `final_answer`.
|
|
469
|
+
*
|
|
470
|
+
* The test is on the **rendered body**, not on the presence of an item: item
|
|
471
|
+
* count and drawn paragraphs are different quantities, because a message whose
|
|
472
|
+
* text is empty or whitespace is dropped before it reaches the body. A turn
|
|
473
|
+
* whose only `final_answer` is blank would, on an item-count test, fold its
|
|
474
|
+
* commentary away and leave an empty bubble.
|
|
475
|
+
*/
|
|
476
|
+
function hasFinalAnswerProse(turn) {
|
|
477
|
+
return turn.items.some((item) => item.type === 'AgentMessage' &&
|
|
478
|
+
item.phase === exports.CODEX_FINAL_ANSWER_PHASE &&
|
|
479
|
+
agentMessageText(item).length > 0);
|
|
480
|
+
}
|
|
440
481
|
/**
|
|
441
482
|
* Render one turn to Markdown.
|
|
442
483
|
*
|
|
443
484
|
* Transcript order within each kind — the same decision #2041 and #2121 took,
|
|
444
485
|
* and for the same reason: the order is the only record of what happened when,
|
|
445
|
-
* and this row is the record.
|
|
446
|
-
*
|
|
447
|
-
*
|
|
486
|
+
* and this row is the record.
|
|
487
|
+
*
|
|
488
|
+
* ## Why `commentary` is folded now (Issue #2420)
|
|
489
|
+
*
|
|
490
|
+
* #2197 kept `commentary` in the body on the argument that "the sentence that
|
|
491
|
+
* explains what the tool line underneath it is for" would otherwise be lost.
|
|
492
|
+
* **#2234 retired that argument by moving every tool line to a folded section
|
|
493
|
+
* at the end of the body** — there is no line underneath the commentary any
|
|
494
|
+
* more, so what leads the bubble is narration with nothing left to narrate.
|
|
495
|
+
* Measured on one live session (`codex-turn:01a07e37-0658`): 4 commentary
|
|
496
|
+
* blocks / 754 characters in front of a single 495-character answer, so the
|
|
497
|
+
* operator read four paragraphs of progress notes before reaching the reply.
|
|
498
|
+
*
|
|
499
|
+
* ## The classification is an allow-list
|
|
500
|
+
*
|
|
501
|
+
* Exactly `phase === 'commentary'` folds. `final_answer`, a missing `phase` and
|
|
502
|
+
* any value codex has not shipped yet all stay in the body. The deny-list
|
|
503
|
+
* spelling — "fold everything that is not `final_answer`" — is rejected on
|
|
504
|
+
* #2196's discipline: it hands codex the power to hide the body of a bubble by
|
|
505
|
+
* adding a phase name, and the failure would be silent. Every `final_answer` is
|
|
506
|
+
* kept, not just the last: the measured corpus has turns carrying more than one.
|
|
507
|
+
*
|
|
508
|
+
* ## The fallback
|
|
509
|
+
*
|
|
510
|
+
* A turn with no non-empty `final_answer` keeps its commentary in the body —
|
|
511
|
+
* see {@link hasFinalAnswerProse}. Folding is only ever an improvement when
|
|
512
|
+
* there is something better to lead with.
|
|
513
|
+
*
|
|
514
|
+
* ## Why the `Thinking` chip and not a new label
|
|
515
|
+
*
|
|
516
|
+
* The folded commentary rides `../turn-body`'s existing `reasoning` kind, so it
|
|
517
|
+
* lands under the `Thinking (N)` heading the other readers already write, and
|
|
518
|
+
* `splitChatThinking` in `components/worktree/ChatMessageBubble` draws it in
|
|
519
|
+
* the chip that is already there. A second label (`Progress`) would read more
|
|
520
|
+
* precisely, and it was rejected on cost: these labels are baked into
|
|
521
|
+
* `chat_messages.content` **at read time**, so a new one is a string every
|
|
522
|
+
* future reader of the table has to keep folding forever, for rows nothing can
|
|
523
|
+
* re-label. Against that, the chip already means the right thing — "subordinate
|
|
524
|
+
* narration the reader may want and does not want first" — and the operator who
|
|
525
|
+
* reported #2420 called this content "thinking" in their own words. Same
|
|
526
|
+
* reasoning as {@link CODEX_THINKING_LABEL}, which is `Thinking` for the same
|
|
527
|
+
* reason.
|
|
448
528
|
*
|
|
449
529
|
* The layout — prose first, the calls folded into one labelled section — is
|
|
450
530
|
* `../turn-body`'s and is shared with the other three readers (#2234).
|
|
@@ -454,12 +534,14 @@ function renderCodexTurn(turn) {
|
|
|
454
534
|
const unknown = new Set();
|
|
455
535
|
let textBlocks = 0;
|
|
456
536
|
let toolBlocks = 0;
|
|
537
|
+
const foldsCommentary = hasFinalAnswerProse(turn);
|
|
457
538
|
for (const item of turn.items) {
|
|
458
539
|
if (item.type === 'AgentMessage') {
|
|
459
|
-
const text = item
|
|
540
|
+
const text = agentMessageText(item);
|
|
460
541
|
if (text.length === 0)
|
|
461
542
|
continue;
|
|
462
|
-
|
|
543
|
+
const folds = foldsCommentary && item.phase === exports.CODEX_COMMENTARY_PHASE;
|
|
544
|
+
rendered.push({ kind: folds ? 'reasoning' : 'prose', text });
|
|
463
545
|
textBlocks += 1;
|
|
464
546
|
continue;
|
|
465
547
|
}
|
|
@@ -38,7 +38,9 @@
|
|
|
38
38
|
* The four readers that push `aside` (claude, codex, antigravity, command-code)
|
|
39
39
|
* are untouched by this Issue because none of them has been measured the way
|
|
40
40
|
* opencode has; they can move a block at a time by switching kind, with no
|
|
41
|
-
* change here.
|
|
41
|
+
* change here. Issue #2420 is the first time that happened: `./codex/transcript`
|
|
42
|
+
* now tags its `commentary` messages `reasoning` and nothing in this module
|
|
43
|
+
* moved.
|
|
42
44
|
*
|
|
43
45
|
* ## Why the order claim from #2041 / #2121 is narrowed rather than dropped
|
|
44
46
|
*
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* | verification failed | `lib/verification/gate-runner` | event |
|
|
13
13
|
* | upstream API fault | `lib/polling/response-checker` (#1839 match)| level |
|
|
14
14
|
* | session start failed| `lib/cli-tools/start-availability` (#2009/#2022)| event |
|
|
15
|
+
* | stale hook URL | `lib/cli-tools/start-availability` (#2429) | event |
|
|
15
16
|
*
|
|
16
17
|
* The shape column is the whole design. An **event** fires once by construction
|
|
17
18
|
* — a run closes once, a start attempt throws once — so its only guard is the
|
|
@@ -60,6 +61,7 @@ exports.formatWorktreeWideAgentLabel = formatWorktreeWideAgentLabel;
|
|
|
60
61
|
exports.notifyVerificationFailurePush = notifyVerificationFailurePush;
|
|
61
62
|
exports.notifyUpstreamFaultPush = notifyUpstreamFaultPush;
|
|
62
63
|
exports.notifySessionStartFailurePush = notifySessionStartFailurePush;
|
|
64
|
+
exports.notifyStaleHookUrlPush = notifyStaleHookUrlPush;
|
|
63
65
|
const db_instance_1 = require("../../lib/db/db-instance");
|
|
64
66
|
const worktree_db_1 = require("../../lib/db/worktree-db");
|
|
65
67
|
const logger_1 = require("../../lib/logger");
|
|
@@ -194,7 +196,11 @@ async function raiseFailurePush(input) {
|
|
|
194
196
|
agentName: input.agentLabel ?? input.instanceId,
|
|
195
197
|
instanceId: input.instanceId,
|
|
196
198
|
excerpt: input.excerpt,
|
|
197
|
-
failure: {
|
|
199
|
+
failure: {
|
|
200
|
+
reason: input.reason,
|
|
201
|
+
signature: input.signature,
|
|
202
|
+
...(input.body ? { body: input.body } : {}),
|
|
203
|
+
},
|
|
198
204
|
...(input.subject ? { url: input.subject.url } : {}),
|
|
199
205
|
});
|
|
200
206
|
}
|
|
@@ -444,3 +450,64 @@ async function notifySessionStartFailurePush(input) {
|
|
|
444
450
|
subject: input.subject,
|
|
445
451
|
});
|
|
446
452
|
}
|
|
453
|
+
// ===========================================================================
|
|
454
|
+
// 4. Stale hook URL on an adopted session
|
|
455
|
+
// ===========================================================================
|
|
456
|
+
/**
|
|
457
|
+
* The sentence a stale hook URL gets, per locale (Issue #2429).
|
|
458
|
+
*
|
|
459
|
+
* Written here rather than in the `locales/<lang>/notifications.json`
|
|
460
|
+
* dictionaries, for the reason `push-sender`'s
|
|
461
|
+
* {@link ProducerWordedFailureReason} gives: the body is a
|
|
462
|
+
* relation between two numbers and a remedy, not a template plus a name, and
|
|
463
|
+
* this is the layer that holds the numbers. `Record<SupportedLocale, string>`
|
|
464
|
+
* is what makes a new locale a type error here instead of an English card in a
|
|
465
|
+
* Japanese notification tray.
|
|
466
|
+
*
|
|
467
|
+
* Both wordings name the remedy — restarting the session — because the fact on
|
|
468
|
+
* its own is not actionable: an operator who is told only that two ports differ
|
|
469
|
+
* has no way to know that CommandMate will not repair it by itself, and it will
|
|
470
|
+
* not, deliberately (see `BaseCLITool.warnIfHookUrlIsStale`).
|
|
471
|
+
*/
|
|
472
|
+
function staleHookUrlBody(report) {
|
|
473
|
+
const { toolName, sessionPort, serverPort } = report;
|
|
474
|
+
return {
|
|
475
|
+
en: `${toolName} is still posting its hooks to port ${sessionPort}, but this server is on ` +
|
|
476
|
+
`${serverPort}. Restart the session to reconnect it.`,
|
|
477
|
+
ja: `${toolName} のフックが古いポート ${sessionPort} 宛のままです(このサーバーは ` +
|
|
478
|
+
`${serverPort})。セッションを再起動すると直ります。`,
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Notify that an adopted session's hooks are addressed to another server.
|
|
483
|
+
* Never throws.
|
|
484
|
+
*
|
|
485
|
+
* Called from exactly one place — `reportStaleHookUrl` in
|
|
486
|
+
* `lib/cli-tools/start-availability`, which is also where the "once" lives.
|
|
487
|
+
* This function therefore has no edge of its own, exactly like
|
|
488
|
+
* {@link notifySessionStartFailurePush}: the rate is bounded by how often a
|
|
489
|
+
* session is started, and the caller has already decided that this particular
|
|
490
|
+
* (instance, port pair) has not been reported before.
|
|
491
|
+
*
|
|
492
|
+
* `kind: 'failure'` rather than `'completion'` because the reader has to act —
|
|
493
|
+
* until they restart the session, `commandmate wait` on it cannot complete on
|
|
494
|
+
* the agent's own word and every turn pays #1975's 60 s hold before falling
|
|
495
|
+
* back to the frame.
|
|
496
|
+
*/
|
|
497
|
+
async function notifyStaleHookUrlPush(report) {
|
|
498
|
+
const instanceId = report.instanceId ?? report.cliToolId;
|
|
499
|
+
await raiseFailurePush({
|
|
500
|
+
reason: 'hook-url-stale',
|
|
501
|
+
worktreeId: report.worktreeId,
|
|
502
|
+
instanceId,
|
|
503
|
+
// The two ports, so a pane that later points at a THIRD server is a second
|
|
504
|
+
// incident rather than a repeat of this one.
|
|
505
|
+
signature: `hook-url-stale:${instanceId}:${report.sessionPort}:${report.serverPort}`,
|
|
506
|
+
body: staleHookUrlBody(report),
|
|
507
|
+
logContext: {
|
|
508
|
+
cliToolId: report.cliToolId,
|
|
509
|
+
sessionPort: report.sessionPort,
|
|
510
|
+
serverPort: report.serverPort,
|
|
511
|
+
},
|
|
512
|
+
});
|
|
513
|
+
}
|
|
@@ -135,15 +135,26 @@ const FAILURE_BODY_KEYS = {
|
|
|
135
135
|
plain: 'failureAgentSession',
|
|
136
136
|
},
|
|
137
137
|
};
|
|
138
|
-
function buildFailureBody(event, messages, excerpt) {
|
|
138
|
+
function buildFailureBody(event, messages, excerpt, locale) {
|
|
139
|
+
// Issue #2429: read first, for the same reason `modelChange` is read first in
|
|
140
|
+
// `buildPushPayload` — a producer that wrote the sentence itself has said
|
|
141
|
+
// something the dictionary cannot, and appending an excerpt to it would put
|
|
142
|
+
// half of that sentence twice.
|
|
143
|
+
const prebuilt = event.failure?.body?.[locale];
|
|
144
|
+
if (prebuilt)
|
|
145
|
+
return prebuilt;
|
|
139
146
|
// An event that claims `kind: 'failure'` without saying which failure is a
|
|
140
147
|
// producer bug. Falling back to the verification wording would misreport it,
|
|
141
|
-
// so the generic "something failed" copy is used instead.
|
|
148
|
+
// so the generic "something failed" copy is used instead. A
|
|
149
|
+
// `ProducerWordedFailureReason` that arrived without its body lands here too,
|
|
150
|
+
// and lands honestly: nothing in the dictionary describes it.
|
|
142
151
|
const reason = event.failure?.reason;
|
|
143
|
-
|
|
152
|
+
const keys = reason !== undefined
|
|
153
|
+
? FAILURE_BODY_KEYS[reason]
|
|
154
|
+
: undefined;
|
|
155
|
+
if (keys === undefined) {
|
|
144
156
|
return excerpt ? messages.failureWithExcerpt.replace('{excerpt}', excerpt) : messages.failure;
|
|
145
157
|
}
|
|
146
|
-
const keys = FAILURE_BODY_KEYS[reason];
|
|
147
158
|
return excerpt
|
|
148
159
|
? messages[keys.withExcerpt].replace('{excerpt}', excerpt)
|
|
149
160
|
: messages[keys.plain];
|
|
@@ -168,7 +179,7 @@ function buildPushPayload(event, locale = i18n_config_1.DEFAULT_LOCALE, now = Da
|
|
|
168
179
|
? messages.promptResolved
|
|
169
180
|
: buildWaitingBody(event, messages, excerpt, now)
|
|
170
181
|
: event.kind === 'failure'
|
|
171
|
-
? buildFailureBody(event, messages, excerpt)
|
|
182
|
+
? buildFailureBody(event, messages, excerpt, resolvedLocale)
|
|
172
183
|
: // Issue #2045: an update notice is a completion by *bucket*, not by
|
|
173
184
|
// content, so it is the one completion whose body is not "Done".
|
|
174
185
|
event.updateAvailable
|
|
@@ -47,6 +47,13 @@ exports.resetChatTurnProgressState = resetChatTurnProgressState;
|
|
|
47
47
|
exports.buildChatTurnProgress = buildChatTurnProgress;
|
|
48
48
|
exports.emitChatTurnProgress = emitChatTurnProgress;
|
|
49
49
|
const db_1 = require("../../lib/db");
|
|
50
|
+
// Issue #2429: the send ledger, read directly from `chat-db` rather than from
|
|
51
|
+
// the `@/lib/db` barrel because that barrel does not re-export it. It is the
|
|
52
|
+
// SAME row `commandmate wait` asks for over
|
|
53
|
+
// `GET /api/worktrees/:id/messages?limit=1&unit=pairs` (see `readNewestPromptAt`
|
|
54
|
+
// in `cli/commands/wait.ts`), so the server and the CLI cannot disagree about
|
|
55
|
+
// when this instance was last handed a prompt.
|
|
56
|
+
const chat_db_1 = require("../../lib/db/chat-db");
|
|
50
57
|
const unclassified_frame_tracker_1 = require("../../lib/detection/unclassified-frame-tracker");
|
|
51
58
|
const composer_text_1 = require("../../lib/detection/composer-text");
|
|
52
59
|
const upstream_faults_1 = require("../../lib/detection/upstream-faults");
|
|
@@ -354,7 +361,7 @@ function summarizeAskUserQuestion(episode) {
|
|
|
354
361
|
* @param turn - The published turn record for this instance, or null. Read only
|
|
355
362
|
* for {@link hookClosedTurn}; `structured` remains the status authority.
|
|
356
363
|
*/
|
|
357
|
-
function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn = null) {
|
|
364
|
+
function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn = null, lastPromptAt = null) {
|
|
358
365
|
if (scraper.status === 'waiting') {
|
|
359
366
|
return { ...scraper, structuredApplied: false };
|
|
360
367
|
}
|
|
@@ -379,6 +386,13 @@ function mergeStructuredStatus(scraper, structured, promptWaiting = null, turn =
|
|
|
379
386
|
if (structured === null || structured.status === 'waiting') {
|
|
380
387
|
return { ...scraper, structuredApplied: false };
|
|
381
388
|
}
|
|
389
|
+
// Issue #2429: the structured `ready` is about a turn older than the prompt
|
|
390
|
+
// this instance is currently answering, and the screen says so. See
|
|
391
|
+
// {@link structuredReadyPredatesPrompt} for why that combination is the only
|
|
392
|
+
// one in which the scraper wins a `running`.
|
|
393
|
+
if (structuredReadyPredatesPrompt(scraper, structured, turn, lastPromptAt)) {
|
|
394
|
+
return { ...scraper, structuredApplied: false };
|
|
395
|
+
}
|
|
382
396
|
const thinking = structured.status === 'running';
|
|
383
397
|
// Issue #2011 (対応 2): the agent's own turn close IS positive evidence.
|
|
384
398
|
//
|
|
@@ -439,6 +453,135 @@ function hookClosedTurn(turn) {
|
|
|
439
453
|
const { closedBy, closedAt, openedAt } = turn;
|
|
440
454
|
return closedBy === 'stop' && closedAt !== null && openedAt !== null && closedAt > openedAt;
|
|
441
455
|
}
|
|
456
|
+
/**
|
|
457
|
+
* Whether a structured `ready` could be about a turn that ended before the
|
|
458
|
+
* prompt now on screen (Issue #2429).
|
|
459
|
+
*
|
|
460
|
+
* The cheap half of {@link structuredReadyPredatesPrompt}, split out because
|
|
461
|
+
* `buildPayload` asks it FIRST: it is the gate on the one database read this
|
|
462
|
+
* rule needs, and a session that is not in this state must not pay for the send
|
|
463
|
+
* ledger on every poll. One expression, two callers — the alternative is the
|
|
464
|
+
* "two expressions for one fact" the merge's own docblock says is how this
|
|
465
|
+
* layer drifts.
|
|
466
|
+
*
|
|
467
|
+
* Three conjuncts, and all three are about the same instant:
|
|
468
|
+
*
|
|
469
|
+
* - **the screen is positively generating.** `ScraperVerdict.thinking` is
|
|
470
|
+
* `isGeneratingStatus`, i.e. `running` with `thinking_indicator` /
|
|
471
|
+
* `opencode_processing_indicator` behind it — a spinner, `✻ Thinking…` or
|
|
472
|
+
* `esc to interrupt` that a tool's own pattern matched. It is deliberately
|
|
473
|
+
* NOT `scraper.status === 'running'`: the `no_recent_output` and
|
|
474
|
+
* `unknown_frame` floors are also `running`, and neither is evidence of
|
|
475
|
+
* anything. A frame that merely stopped changing must never retire a `Stop`
|
|
476
|
+
* the agent actually sent.
|
|
477
|
+
* - **the structured layer says `ready`.** `running` and `waiting` already win
|
|
478
|
+
* on their own paths and are not in question here.
|
|
479
|
+
* - **that `ready` came from the agent's own `Stop`.**
|
|
480
|
+
* `getStructuredSessionState` publishes `ready / hook_stop` exactly when the
|
|
481
|
+
* turn record carries `closedBy: 'stop'` with a `closedAt`, so the record is
|
|
482
|
+
* read rather than the folded reason.
|
|
483
|
+
*
|
|
484
|
+
* `openedAt` is deliberately not required, which is what separates this from
|
|
485
|
+
* {@link hookClosedTurn}. A `Stop` that arrived with no turn open publishes
|
|
486
|
+
* `openedAt: null`, and for the tool this Issue was reported from that is the
|
|
487
|
+
* ORDINARY shape: Command Code cannot emit `UserPromptSubmit` (its loader
|
|
488
|
+
* validates the event name against a closed list) and emits no
|
|
489
|
+
* `PreToolUse` / `PostToolUse` on a turn that calls no tool, so nothing ever
|
|
490
|
+
* opens the turn. Requiring an `openedAt` here would exclude precisely the case
|
|
491
|
+
* this rule exists for.
|
|
492
|
+
*/
|
|
493
|
+
function staleReadyCandidate(scraper, structured, turn) {
|
|
494
|
+
if (!scraper.thinking)
|
|
495
|
+
return false;
|
|
496
|
+
if (structured === null || structured.status !== 'ready')
|
|
497
|
+
return false;
|
|
498
|
+
if (turn === null)
|
|
499
|
+
return false;
|
|
500
|
+
return turn.closedBy === 'stop' && turn.closedAt !== null;
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* Whether the structured layer's `ready` has been outlived by the newest prompt
|
|
504
|
+
* this instance was handed (Issue #2429).
|
|
505
|
+
*
|
|
506
|
+
* ## The defect this closes
|
|
507
|
+
*
|
|
508
|
+
* The merge above prefers the agent's own account to the screen, and until this
|
|
509
|
+
* Issue the only exception was a scraper `waiting` (#1708). That is correct for
|
|
510
|
+
* every tool that can say when a turn BEGINS — claude, codex, copilot, gemini
|
|
511
|
+
* and antigravity all post a turn-opening event, so a live turn replaces the
|
|
512
|
+
* previous turn's `stop` before the first generating frame is ever read.
|
|
513
|
+
*
|
|
514
|
+
* Command Code can post neither: no `UserPromptSubmit`, and no `PreToolUse` /
|
|
515
|
+
* `PostToolUse` on a turn that calls no tool. The previous turn's `ready /
|
|
516
|
+
* hook_stop` therefore stays the newest structured fact for the whole of the
|
|
517
|
+
* next turn, and the merge published it over a pane that was visibly generating.
|
|
518
|
+
* Measured 2026-09-08 on a 19 s turn: `sessionStatus` read `ready / hook_stop`
|
|
519
|
+
* from 4 s to 18 s while the status row said `esc to interrupt`. `commandmate
|
|
520
|
+
* wait` reads that field — not the frame — for "is at its composer", so #1975's
|
|
521
|
+
* 60 s unanswered-prompt hold was the only thing standing between a long turn
|
|
522
|
+
* and a `basis=scraper_ready` completion reported before the reply existed.
|
|
523
|
+
*
|
|
524
|
+
* ## Why a comparison rather than a timer
|
|
525
|
+
*
|
|
526
|
+
* The same comparison `wait` already makes (`outstandingPrompt`), against the
|
|
527
|
+
* same two server-stamped facts: the turn's `closedAt`, and the timestamp of
|
|
528
|
+
* the newest user row in the chat ledger. A `Stop` that POSTDATES the newest
|
|
529
|
+
* prompt is this turn's own — the agent finished, the spinner on the frame is a
|
|
530
|
+
* repaint that has not settled, and the structured `ready` keeps winning. A
|
|
531
|
+
* `Stop` that predates it has reported neither the start nor the end of the
|
|
532
|
+
* work now on screen, and about that work it says nothing at all.
|
|
533
|
+
*
|
|
534
|
+
* Shortening #1975's hold would have been the other repair, and the Issue rules
|
|
535
|
+
* it out for a reason worth restating here: the hold is what stops a false
|
|
536
|
+
* completion during a turn nobody has reported yet, so a shorter one moves the
|
|
537
|
+
* false completion earlier rather than removing it.
|
|
538
|
+
*
|
|
539
|
+
* @param lastPromptAt - Epoch ms of the newest prompt handed to this instance,
|
|
540
|
+
* or null when the ledger was not read or holds none. Null decides nothing:
|
|
541
|
+
* an unreadable ledger is not evidence that nothing was sent, so the
|
|
542
|
+
* structured verdict stands exactly as it did before this Issue.
|
|
543
|
+
*/
|
|
544
|
+
function structuredReadyPredatesPrompt(scraper, structured, turn, lastPromptAt) {
|
|
545
|
+
if (lastPromptAt === null)
|
|
546
|
+
return false;
|
|
547
|
+
if (!staleReadyCandidate(scraper, structured, turn))
|
|
548
|
+
return false;
|
|
549
|
+
const closedAt = turn?.closedAt ?? null;
|
|
550
|
+
return closedAt !== null && closedAt < lastPromptAt;
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* When this instance was last handed a prompt, or null (Issue #2429).
|
|
554
|
+
*
|
|
555
|
+
* The server's half of the comparison `commandmate wait` makes over HTTP. Both
|
|
556
|
+
* sides read the same row — the newest `role: 'user'` message scoped to this
|
|
557
|
+
* (worktree, tool, instance) — so the field this function feeds and the notice
|
|
558
|
+
* `wait` prints cannot describe different sends.
|
|
559
|
+
*
|
|
560
|
+
* Best effort, like {@link recordUnclassifiedFrame} and
|
|
561
|
+
* {@link recordStructuredPrompt}: the caller is building a payload, and a
|
|
562
|
+
* ledger that cannot be read must cost this one comparison and nothing else.
|
|
563
|
+
* Null is reported rather than a guess, and null leaves the pre-#2429
|
|
564
|
+
* precedence in place — an unreadable ledger is not evidence that nothing was
|
|
565
|
+
* sent, which is the position `wait` takes on the same read.
|
|
566
|
+
*/
|
|
567
|
+
function readNewestPromptAt(db, worktreeId, cliToolId, instanceId) {
|
|
568
|
+
try {
|
|
569
|
+
const row = (0, chat_db_1.getLastUserMessageForInstance)(db, worktreeId, cliToolId, instanceId);
|
|
570
|
+
if (!row)
|
|
571
|
+
return null;
|
|
572
|
+
const at = row.timestamp instanceof Date ? row.timestamp.getTime() : NaN;
|
|
573
|
+
return Number.isFinite(at) ? at : null;
|
|
574
|
+
}
|
|
575
|
+
catch (error) {
|
|
576
|
+
logger.debug('newest-prompt-read-failed', {
|
|
577
|
+
worktreeId,
|
|
578
|
+
cliToolId,
|
|
579
|
+
instanceId,
|
|
580
|
+
error: error instanceof Error ? error.message : String(error),
|
|
581
|
+
});
|
|
582
|
+
return null;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
442
585
|
/**
|
|
443
586
|
* Build the current-output payload for a worktree session.
|
|
444
587
|
*
|
|
@@ -766,19 +909,28 @@ async function buildPayload(db, worktreeId, cliToolId, instanceId) {
|
|
|
766
909
|
structuredEvents.promptWaitingSince = promptWaiting.at;
|
|
767
910
|
structuredEvents.promptWaitingSource = promptWaiting.source;
|
|
768
911
|
}
|
|
769
|
-
const
|
|
912
|
+
const scraperVerdict = {
|
|
770
913
|
status: statusResult.status,
|
|
771
914
|
reason: statusResult.reason,
|
|
772
915
|
thinking,
|
|
773
916
|
evidence,
|
|
774
917
|
isUnclassifiedActive,
|
|
775
|
-
}
|
|
918
|
+
};
|
|
919
|
+
// Issue #2429: the send ledger, read ONLY when it could change the verdict.
|
|
920
|
+
// `staleReadyCandidate` is the merge's own first three conjuncts, so the two
|
|
921
|
+
// cannot disagree about when this read is needed — and every other poll (an
|
|
922
|
+
// idle pane, a turn the agent has opened, a tool that reports its own start)
|
|
923
|
+
// costs exactly what it did before this Issue, which is nothing.
|
|
924
|
+
const lastPromptAt = staleReadyCandidate(scraperVerdict, structured, structuredEvents)
|
|
925
|
+
? readNewestPromptAt(db, worktreeId, cliToolId, resolvedInstanceId)
|
|
926
|
+
: null;
|
|
927
|
+
const merged = mergeStructuredStatus(scraperVerdict, structured, promptWaiting,
|
|
776
928
|
// Issue #2011: the same record `structuredEvents` publishes, read once. The
|
|
777
929
|
// merge needs `closedBy` / `closedAt` / `openedAt`, which
|
|
778
930
|
// `StructuredSessionState` folds away into `hook_stop` — and the folded form
|
|
779
931
|
// cannot tell a `Stop` that closed a watched turn from one that arrived with
|
|
780
932
|
// no turn open.
|
|
781
|
-
structuredEvents);
|
|
933
|
+
structuredEvents, lastPromptAt);
|
|
782
934
|
// The OR rule, computed once for the whole server (Issue #1737): this is the
|
|
783
935
|
// same `resolvePromptWaiting` call the `send` guard makes, so the payload and
|
|
784
936
|
// the guard cannot disagree about whether a prompt is open. What they are
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[11,66,74,219,263,341,532,543,640,836,865,890,960,1099,1123,1158,1164,1274,1295,1310,1317,1327,1337,1360,1363,1377,1421,1437,1490,1517,1523,1645,1652,1745,1796,1972,2017,2046,2117,2132,2149,2207,2260,2344,2360,2464,2548,2609,2786,2852,2893,3002,3175,3298,3350,3657,3685,3792,3797,3845,3965,3969,3990,4016,4035,4042,4199,4225,4240,4260,4275,4468,4476,4594,4614,4748,4767,4779,4907,4961,4985,5004,5286,5332,5522,5580,5657,5683,5832,6067,6140,6194,6248,6393,6451,6564,6635,6680,6734,6824,6839,7e3,7115,7238,7345,7435,7473,7509,7560,7670,7758,7760,7870,7895,7939,8043,8238,8418,8457,8460,8464,8472,8489,8509,8544,8658,8710,8914,8979,9015,9059,9114,9162,9245,9281,9282,9325,9416,9549,9602,9792,9932,9946,9968,9996],{84441:()=>{}},_=>{_.O(0,[8441,1255,7358],()=>_(_.s=84441)),_N_E=_.O()}]);
|