commandmate 0.29.2 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +278 -271
- package/.next/app-path-routes-manifest.json +35 -34
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/required-server-files.json +1 -1
- package/.next/routes-manifest.json +8 -8
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/agents/versions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js +1 -1
- package/.next/server/app/api/assistant/conversation/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js +1 -1
- package/.next/server/app/api/assistant/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js +1 -1
- package/.next/server/app/api/assistant/messages/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route.js +1 -1
- package/.next/server/app/api/assistant/session/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route.js +18 -18
- package/.next/server/app/api/assistant/start/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route.js +19 -19
- package/.next/server/app/api/assistant/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js +1 -1
- package/.next/server/app/api/assistant/tools/route.js.nft.json +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route.js +2 -2
- package/.next/server/app/api/hooks/claude-done/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route.js.nft.json +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js +1 -1
- package/.next/server/app/api/repositories/clone/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js +1 -1
- package/.next/server/app/api/repositories/restore/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route.js +1 -1
- package/.next/server/app/api/repositories/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js +1 -1
- package/.next/server/app/api/repositories/scan/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js +1 -1
- package/.next/server/app/api/repositories/sync/route.js.nft.json +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js +1 -1
- package/.next/server/app/api/settings/default-agents/route.js.nft.json +1 -1
- package/.next/server/app/api/settings/default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/default-surface-mode/route.js +1 -0
- package/.next/server/app/api/settings/default-surface-mode/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/default-surface-mode/route_client-reference-manifest.js +1 -0
- 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_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js +1 -0
- package/.next/server/app/api/worktrees/[id]/cli-reference/route.js.nft.json +1 -0
- package/.next/server/app/api/worktrees/[id]/{start-polling → cli-reference}/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/config/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route.js +1 -1
- package/.next/server/app/api/worktrees/apply-default-agents/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page.js +2 -2
- package/.next/server/app/more/page.js.nft.json +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +12 -12
- package/.next/server/app/worktrees/[id]/page.js.nft.json +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page.js +3 -3
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +35 -34
- package/.next/server/chunks/1058.js +1 -1
- package/.next/server/chunks/1068.js +1 -1
- package/.next/server/chunks/1191.js +1 -1
- package/.next/server/chunks/1341.js +1 -1
- package/.next/server/chunks/1886.js +3 -3
- package/.next/server/chunks/2119.js +1 -1
- package/.next/server/chunks/2445.js +1 -1
- package/.next/server/chunks/261.js +1 -0
- package/.next/server/chunks/2739.js +1 -0
- package/.next/server/chunks/2816.js +1 -1
- package/.next/server/chunks/2827.js +29 -0
- package/.next/server/chunks/3123.js +1 -0
- package/.next/server/chunks/3241.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4325.js +1 -0
- package/.next/server/chunks/4390.js +1 -1
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/4443.js +6 -0
- package/.next/server/chunks/5017.js +1 -1
- package/.next/server/chunks/5120.js +1 -0
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/6337.js +1 -1
- package/.next/server/chunks/663.js +1 -1
- package/.next/server/chunks/6894.js +8 -0
- package/.next/server/chunks/7685.js +1 -1
- package/.next/server/chunks/7836.js +1 -0
- package/.next/server/chunks/8356.js +1 -1
- package/.next/server/chunks/880.js +1 -1
- package/.next/server/chunks/8807.js +1 -1
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9130.js +3 -3
- package/.next/server/chunks/9627.js +48 -26
- package/.next/server/chunks/9696.js +3 -0
- package/.next/server/chunks/9798.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/7K0XXFu_ty4wRSkl4X21E/_buildManifest.js +1 -0
- package/.next/static/chunks/{4882-388e94fe0a03c2ba.js → 3916-0e929d089282dc5d.js} +1 -1
- package/.next/static/chunks/{5229-b2a81bb8fb5c19e9.js → 5229-6c89475b61bd2c8b.js} +1 -1
- package/.next/static/chunks/6022-7a7d1760fc9814c7.js +1 -0
- package/.next/static/chunks/6381-28d0e95620aa018e.js +1 -0
- package/.next/static/chunks/app/api/agents/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/agents/versions/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/settings/default-agents/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/settings/default-surface-mode/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/skills/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/templates/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-reference/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/more/{page-75d3783da0d49a25.js → page-333bba1c8bbc9c11.js} +1 -1
- package/.next/static/chunks/app/proxy/[...path]/route-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-ee11f7b8a34cba8c.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/page-d48b95ed554bcd13.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-2631bc5c4b0a9fb8.js +1 -0
- package/.next/static/css/61e10d4b1b11b193.css +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/settings/default-surface-mode/route.ts +347 -0
- package/.next/types/app/api/worktrees/[id]/{start-polling → cli-reference}/route.ts +3 -3
- package/.next/types/routes.d.ts +3 -2
- package/.next/types/validator.ts +18 -9
- package/dist/server/server.js +58 -0
- package/dist/server/src/lib/claude-output.js +1 -0
- package/dist/server/src/lib/db/app-settings-db.js +60 -0
- package/dist/server/src/lib/db/chat-db.js +120 -7
- package/dist/server/src/lib/detection/status-detector.js +3 -2
- package/dist/server/src/lib/env.js +122 -0
- package/dist/server/src/lib/git/worktrees.js +154 -0
- package/dist/server/src/lib/history/transcript-tail.js +80 -0
- package/dist/server/src/lib/history/user-turn-recorder.js +247 -0
- package/dist/server/src/lib/hooks/permission-decision-service.js +85 -1
- package/dist/server/src/lib/hooks/sources/antigravity/history.js +519 -0
- package/dist/server/src/lib/hooks/sources/antigravity/source.js +7 -0
- package/dist/server/src/lib/hooks/sources/antigravity/transcript.js +407 -0
- package/dist/server/src/lib/hooks/sources/claude/history.js +654 -0
- package/dist/server/src/lib/hooks/sources/claude/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/claude/transcript.js +518 -0
- package/dist/server/src/lib/hooks/sources/codex/history.js +576 -0
- package/dist/server/src/lib/hooks/sources/codex/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/codex/transcript.js +448 -0
- package/dist/server/src/lib/hooks/sources/copilot/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/gemini/source.js +2 -0
- package/dist/server/src/lib/hooks/sources/legacy-relay.js +3 -0
- package/dist/server/src/lib/hooks/sources/opencode/history.js +57 -0
- package/dist/server/src/lib/hooks/sources/opencode/source.js +4 -0
- package/dist/server/src/lib/hooks/sources/opencode/transcript.js +10 -28
- package/dist/server/src/lib/hooks/sources/turn-body.js +118 -0
- package/dist/server/src/lib/polling/prompt-dedup.js +2 -4
- package/dist/server/src/lib/polling/response-checker.js +44 -3
- package/dist/server/src/lib/polling/response-dedup.js +2 -4
- package/dist/server/src/lib/polling/response-poller-core.js +191 -29
- package/dist/server/src/lib/polling/structured-history-gate.js +147 -16
- package/dist/server/src/lib/push/push-sender.js +21 -1
- package/dist/server/src/lib/push/waiting-push-notifier.js +126 -8
- package/dist/server/src/lib/realtime/publisher-registry.js +171 -0
- package/dist/server/src/lib/realtime/terminal-broadcast.js +14 -1
- package/dist/server/src/lib/realtime/types.js +96 -1
- package/dist/server/src/lib/session/current-output-builder.js +263 -4
- package/dist/server/src/lib/session/send-user-message.js +90 -2
- package/dist/server/src/lib/tui-accumulator.js +2 -8
- package/dist/server/src/lib/ws-server.js +143 -6
- package/dist/server/src/types/agent-transcript.js +241 -5
- package/dist/server/src/types/ui-state.js +24 -1
- package/package.json +1 -1
- package/public/sw.js +15 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js +0 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route.js.nft.json +0 -1
- package/.next/server/chunks/1714.js +0 -7
- package/.next/server/chunks/2198.js +0 -1
- package/.next/server/chunks/221.js +0 -25
- package/.next/server/chunks/2759.js +0 -8
- package/.next/server/chunks/3558.js +0 -1
- package/.next/server/chunks/9508.js +0 -1
- package/.next/static/0YoRrahue4Vchxg1z83IQ/_buildManifest.js +0 -1
- package/.next/static/chunks/1379-af7af9e08f47c979.js +0 -1
- package/.next/static/chunks/6381-9ba5198c0a6ff197.js +0 -1
- package/.next/static/chunks/app/api/agents/update/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/agents/versions/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/remote/pair/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/settings/default-agents/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/skills/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/templates/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/todos/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/config/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/cancel/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/apply-default-agents/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-1c30fb8d4d6fa6ef.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/page-ce6279d581d1df95.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/terminal/page-00ad5d9a62a71cab.js +0 -1
- package/.next/static/css/b326c8a734e1928e.css +0 -1
- /package/.next/static/{0YoRrahue4Vchxg1z83IQ → 7K0XXFu_ty4wRSkl4X21E}/_ssgManifest.js +0 -0
|
@@ -34,12 +34,24 @@ const cache_1 = require("./external-apps/cache");
|
|
|
34
34
|
const version_checker_1 = require("../lib/version-checker");
|
|
35
35
|
const types_2 = require("../lib/realtime/types");
|
|
36
36
|
const waiting_broadcast_1 = require("../lib/realtime/waiting-broadcast");
|
|
37
|
+
// Issue #2220: this module's `rooms` is per module instance, and a production
|
|
38
|
+
// build has two instances of it (`dist/server` + a `.next/server/chunks` copy).
|
|
39
|
+
// The registry is how a route handler's copy reaches the one holding sockets.
|
|
40
|
+
const publisher_registry_1 = require("../lib/realtime/publisher-registry");
|
|
37
41
|
const logger_1 = require("../lib/logger");
|
|
38
42
|
const logger = (0, logger_1.createLogger)('ws-server');
|
|
39
43
|
// Global state
|
|
40
44
|
let wss = null;
|
|
41
45
|
const clients = new Map();
|
|
42
46
|
const rooms = new Map();
|
|
47
|
+
/**
|
|
48
|
+
* This instance's claim on the process's rooms, or null when it never called
|
|
49
|
+
* `setupWebSocket` (every route bundle) or has already withdrawn.
|
|
50
|
+
*
|
|
51
|
+
* Issue #2220: held so `closeWebSocket` can present the token it was given. A
|
|
52
|
+
* bare "clear the registry" would let a torn-down instance silence a newer one.
|
|
53
|
+
*/
|
|
54
|
+
let publisherHandle = null;
|
|
43
55
|
const MAX_TERMINAL_INPUT_LENGTH = 4096;
|
|
44
56
|
const MAX_TERMINAL_SUBSCRIBERS_PER_SESSION = 4;
|
|
45
57
|
const TERMINAL_FALLBACK_CAPTURE_LINES = -200;
|
|
@@ -237,6 +249,13 @@ function isExpectedWebSocketError(error) {
|
|
|
237
249
|
*/
|
|
238
250
|
function setupWebSocket(server) {
|
|
239
251
|
wss = new ws_1.WebSocketServer({ noServer: true });
|
|
252
|
+
// Issue #2220: this instance now owns the sockets, so publish the capability
|
|
253
|
+
// the other module instances have to borrow. Registered before anything can
|
|
254
|
+
// subscribe, and only from here — `setupWebSocket` is the one function that
|
|
255
|
+
// makes a `rooms` map real, so it is the one function allowed to claim the
|
|
256
|
+
// registry. Everything the registry hands out is a closure over the maps
|
|
257
|
+
// below; the maps themselves never leave this module.
|
|
258
|
+
publisherHandle = (0, publisher_registry_1.registerRoomPublisher)(localRoomPublisher);
|
|
240
259
|
// Issue #1788: publish the waiting edge to the worktree room. Started here
|
|
241
260
|
// rather than at module scope so the listener's lifetime matches the server's
|
|
242
261
|
// — and so the closure it registers is the one holding *this* bundle's `rooms`
|
|
@@ -711,6 +730,66 @@ async function handleTerminalUnsubscribe(ws) {
|
|
|
711
730
|
clientInfo.terminalSubscription = null;
|
|
712
731
|
sendTerminalEvent(ws, { type: 'terminal_status', connected: false });
|
|
713
732
|
}
|
|
733
|
+
// ---------------------------------------------------------------------------
|
|
734
|
+
// Issue #2220: cross-instance routing
|
|
735
|
+
//
|
|
736
|
+
// Everything below the line reads `rooms` / `clients`; everything above the
|
|
737
|
+
// public API forwards to whichever module instance actually has them. The four
|
|
738
|
+
// exported entry points (`broadcast`, `hasRoomSubscribers`, `cleanupRooms`,
|
|
739
|
+
// `migrateWorktreeRooms`) keep their signatures, so no producer had to change:
|
|
740
|
+
// a route handler importing `broadcastMessage` from this module now lands on
|
|
741
|
+
// the custom server's sockets without knowing it crossed a bundle.
|
|
742
|
+
//
|
|
743
|
+
// (Spelling that import out as source text here would be a mistake: the cycle
|
|
744
|
+
// guard in tests/unit/guards/no-ws-server-manager-cycle-1984.test.ts parses
|
|
745
|
+
// comments too, and reads a specifier in one as a real edge.)
|
|
746
|
+
// ---------------------------------------------------------------------------
|
|
747
|
+
/** {@link hasRoomSubscribers} against *this* instance's maps. */
|
|
748
|
+
function hasLocalRoomSubscribers(worktreeId) {
|
|
749
|
+
const room = rooms.get(worktreeId);
|
|
750
|
+
return !!room && room.size > 0;
|
|
751
|
+
}
|
|
752
|
+
/**
|
|
753
|
+
* This instance's capability, as published to the registry.
|
|
754
|
+
*
|
|
755
|
+
* Identity matters, not just shape: {@link remoteRoomPublisher} compares
|
|
756
|
+
* against this exact object to tell "someone else owns the sockets" from "I do".
|
|
757
|
+
* Without that check the owner would forward to itself and recurse.
|
|
758
|
+
*/
|
|
759
|
+
const localRoomPublisher = {
|
|
760
|
+
publish: handleBroadcast,
|
|
761
|
+
hasSubscribers: hasLocalRoomSubscribers,
|
|
762
|
+
cleanupRooms: cleanupLocalRooms,
|
|
763
|
+
migrateRooms: migrateLocalWorktreeRooms,
|
|
764
|
+
};
|
|
765
|
+
/**
|
|
766
|
+
* The owning instance's publisher, when that instance is not this one.
|
|
767
|
+
*
|
|
768
|
+
* Returns null in the two cases where the local maps are already the right
|
|
769
|
+
* target: this instance is the owner, or nothing has claimed the rooms at all
|
|
770
|
+
* (a unit test that never stood a server up, or the CLI). The second case
|
|
771
|
+
* preserves the pre-#2220 behaviour exactly — an unowned publish still writes
|
|
772
|
+
* to whatever the caller's own `rooms` holds, rather than becoming a hard
|
|
773
|
+
* failure.
|
|
774
|
+
*/
|
|
775
|
+
function remoteRoomPublisher() {
|
|
776
|
+
const publisher = (0, publisher_registry_1.getRoomPublisher)();
|
|
777
|
+
return publisher && publisher !== localRoomPublisher ? publisher : null;
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Report the one state in which a frame is silently lost: nobody owns the rooms
|
|
781
|
+
* and this instance has none of its own.
|
|
782
|
+
*
|
|
783
|
+
* Deliberately not "the room was empty" — an empty room is the normal answer
|
|
784
|
+
* for a worktree nobody has open. This is narrower and always a defect: it says
|
|
785
|
+
* the process has no publisher, which is what #2220 looked like from the
|
|
786
|
+
* outside while every browser still reported its socket as `connected`.
|
|
787
|
+
*/
|
|
788
|
+
function noteIfUnroutable(operation, worktreeId) {
|
|
789
|
+
if ((0, publisher_registry_1.getRoomPublisher)() === null && rooms.size === 0) {
|
|
790
|
+
(0, publisher_registry_1.recordUnroutedPublish)(operation, worktreeId);
|
|
791
|
+
}
|
|
792
|
+
}
|
|
714
793
|
/**
|
|
715
794
|
* Broadcast message to a specific worktree room (for API use)
|
|
716
795
|
*
|
|
@@ -723,6 +802,12 @@ async function handleTerminalUnsubscribe(ws) {
|
|
|
723
802
|
* ```
|
|
724
803
|
*/
|
|
725
804
|
function broadcast(worktreeId, data) {
|
|
805
|
+
const owner = remoteRoomPublisher();
|
|
806
|
+
if (owner) {
|
|
807
|
+
owner.publish(worktreeId, data);
|
|
808
|
+
return;
|
|
809
|
+
}
|
|
810
|
+
noteIfUnroutable('broadcast', worktreeId);
|
|
726
811
|
handleBroadcast(worktreeId, data);
|
|
727
812
|
}
|
|
728
813
|
/**
|
|
@@ -731,11 +816,20 @@ function broadcast(worktreeId, data) {
|
|
|
731
816
|
* Issue #1120: lets the server-side terminal streamer skip the (relatively
|
|
732
817
|
* expensive) tmux capture + detection work when nobody is watching the room.
|
|
733
818
|
*
|
|
819
|
+
* Issue #2220: bridged as well, and not as an afterthought.
|
|
820
|
+
* `broadcastTerminalSnapshot` and `emitChatTurnProgress` call this *first* and
|
|
821
|
+
* return early on `false`, so a caller reading its own empty `rooms` never
|
|
822
|
+
* reaches the publish at all — bridging only `broadcast` would have left the
|
|
823
|
+
* terminal snapshot and `chat_turn_progress` exactly as broken as before.
|
|
824
|
+
*
|
|
734
825
|
* @param worktreeId - Worktree identifier
|
|
735
826
|
*/
|
|
736
827
|
function hasRoomSubscribers(worktreeId) {
|
|
737
|
-
const
|
|
738
|
-
|
|
828
|
+
const owner = remoteRoomPublisher();
|
|
829
|
+
if (owner)
|
|
830
|
+
return owner.hasSubscribers(worktreeId);
|
|
831
|
+
noteIfUnroutable('hasRoomSubscribers', worktreeId);
|
|
832
|
+
return hasLocalRoomSubscribers(worktreeId);
|
|
739
833
|
}
|
|
740
834
|
/**
|
|
741
835
|
* Broadcast message with type to a specific worktree room
|
|
@@ -750,7 +844,10 @@ function hasRoomSubscribers(worktreeId) {
|
|
|
750
844
|
*/
|
|
751
845
|
function broadcastMessage(type, data) {
|
|
752
846
|
if (data.worktreeId) {
|
|
753
|
-
|
|
847
|
+
// Issue #2220: through `broadcast`, not straight into `handleBroadcast` —
|
|
848
|
+
// this is the entry point every history producer uses, and it was the one
|
|
849
|
+
// reaching the caller's own empty `rooms`.
|
|
850
|
+
broadcast(data.worktreeId, { type, ...data });
|
|
754
851
|
}
|
|
755
852
|
else {
|
|
756
853
|
logger.warn('broadcast:missing-worktree-id');
|
|
@@ -789,10 +886,22 @@ exports.WORKTREE_RENAMED_EVENT_TYPE = 'worktree_renamed';
|
|
|
789
886
|
* already exists the two sets are merged rather than replaced — dropping the
|
|
790
887
|
* incumbent subscribers would silence clients that did nothing wrong.
|
|
791
888
|
*
|
|
889
|
+
* Issue #2220: bridged like the publish paths. A rename is applied from
|
|
890
|
+
* `/worktrees` and from the repository routes, i.e. from a bundle that owns no
|
|
891
|
+
* rooms; migrating only the caller's own empty map would leave the live
|
|
892
|
+
* subscribers stranded under the old key and silence them for good.
|
|
893
|
+
*
|
|
792
894
|
* @param renames - Worktree ID pairs being applied
|
|
793
895
|
* @returns The pairs that actually had room subscribers to move
|
|
794
896
|
*/
|
|
795
897
|
function migrateWorktreeRooms(renames) {
|
|
898
|
+
const owner = remoteRoomPublisher();
|
|
899
|
+
if (owner)
|
|
900
|
+
return owner.migrateRooms(renames);
|
|
901
|
+
return migrateLocalWorktreeRooms(renames);
|
|
902
|
+
}
|
|
903
|
+
/** {@link migrateWorktreeRooms} against *this* instance's maps. */
|
|
904
|
+
function migrateLocalWorktreeRooms(renames) {
|
|
796
905
|
const targets = new Map();
|
|
797
906
|
for (const { oldId, newId } of renames) {
|
|
798
907
|
if (!oldId || !newId || oldId === newId)
|
|
@@ -861,6 +970,10 @@ function migrateWorktreeRooms(renames) {
|
|
|
861
970
|
* Clean up WebSocket rooms for deleted worktrees
|
|
862
971
|
* Removes rooms from the rooms map (clients will naturally disconnect or resubscribe)
|
|
863
972
|
*
|
|
973
|
+
* Issue #2220: bridged. `/repositories` DELETE is the main caller and runs in a
|
|
974
|
+
* route bundle, so before the bridge it swept a map that was empty anyway and
|
|
975
|
+
* the owner kept the rooms of deleted worktrees for the life of the process.
|
|
976
|
+
*
|
|
864
977
|
* @param worktreeIds - Array of worktree IDs to clean up
|
|
865
978
|
*
|
|
866
979
|
* @example
|
|
@@ -869,6 +982,15 @@ function migrateWorktreeRooms(renames) {
|
|
|
869
982
|
* ```
|
|
870
983
|
*/
|
|
871
984
|
function cleanupRooms(worktreeIds) {
|
|
985
|
+
const owner = remoteRoomPublisher();
|
|
986
|
+
if (owner) {
|
|
987
|
+
owner.cleanupRooms(worktreeIds);
|
|
988
|
+
return;
|
|
989
|
+
}
|
|
990
|
+
cleanupLocalRooms(worktreeIds);
|
|
991
|
+
}
|
|
992
|
+
/** {@link cleanupRooms} against *this* instance's maps. */
|
|
993
|
+
function cleanupLocalRooms(worktreeIds) {
|
|
872
994
|
for (const worktreeId of worktreeIds) {
|
|
873
995
|
const room = rooms.get(worktreeId);
|
|
874
996
|
if (room) {
|
|
@@ -890,9 +1012,24 @@ function cleanupRooms(worktreeIds) {
|
|
|
890
1012
|
* Used for testing and graceful shutdown
|
|
891
1013
|
*/
|
|
892
1014
|
function closeWebSocket() {
|
|
893
|
-
// Issue #
|
|
894
|
-
//
|
|
895
|
-
|
|
1015
|
+
// Issue #2220: hand back the token rather than clearing the registry, and read
|
|
1016
|
+
// the answer. If a newer `setupWebSocket` has already taken over — HMR, or a
|
|
1017
|
+
// suite standing a second server up — this instance is not the owner any more,
|
|
1018
|
+
// the withdrawal is declined, and the live publisher stays in place.
|
|
1019
|
+
const wasOwner = publisherHandle !== null && publisherHandle.unregister();
|
|
1020
|
+
publisherHandle = null;
|
|
1021
|
+
// Issue #1788: drop the waiting-edge subscription before `wss` goes, or it
|
|
1022
|
+
// outlives the server and CI shares one process across the whole suite.
|
|
1023
|
+
//
|
|
1024
|
+
// Issue #2220: but only when this instance was the owner, or when nobody is.
|
|
1025
|
+
// That subscription is a single `globalThis` slot by design, so a superseded
|
|
1026
|
+
// instance closing down would otherwise take the *running* server's waiting
|
|
1027
|
+
// edge with it — the same hazard the token guard above exists for. The
|
|
1028
|
+
// "nobody owns it" arm keeps the defensive teardown that suites rely on when
|
|
1029
|
+
// they start a subscription by hand and never call `setupWebSocket`.
|
|
1030
|
+
if (wasOwner || (0, publisher_registry_1.getRoomPublisher)() === null) {
|
|
1031
|
+
(0, waiting_broadcast_1.stopWaitingStatusBroadcast)();
|
|
1032
|
+
}
|
|
896
1033
|
if (wss) {
|
|
897
1034
|
// Close all client connections
|
|
898
1035
|
clients.forEach((clientInfo) => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* How a history row says it holds the agent's own words (Issue #2041
|
|
3
|
+
* How a history row says it holds the agent's own words (Issue #2041, extended
|
|
4
|
+
* for Claude Code in Issue #2121).
|
|
4
5
|
*
|
|
5
6
|
* Every `chat_messages` row written before this Issue came off a terminal: the
|
|
6
7
|
* poller captured a pane, cleaned the box drawing out of it and saved what was
|
|
@@ -38,28 +39,149 @@
|
|
|
38
39
|
* @module types/agent-transcript
|
|
39
40
|
*/
|
|
40
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
-
exports.AGENT_MARKDOWN_REQUEST_ID_PREFIX = void 0;
|
|
42
|
+
exports.AGENT_MARKDOWN_REQUEST_ID_PREFIXES = exports.ANTIGRAVITY_PROMPT_REQUEST_ID_PREFIX = exports.ANTIGRAVITY_MARKDOWN_REQUEST_ID_PREFIX = exports.CODEX_PROMPT_REQUEST_ID_PREFIX = exports.CODEX_MARKDOWN_REQUEST_ID_PREFIX = exports.CLAUDE_PROMPT_REQUEST_ID_PREFIX = exports.CLAUDE_MARKDOWN_REQUEST_ID_PREFIX = exports.AGENT_MARKDOWN_REQUEST_ID_PREFIX = void 0;
|
|
42
43
|
exports.isAgentAuthoredMarkdown = isAgentAuthoredMarkdown;
|
|
43
44
|
exports.opencodeTurnRequestId = opencodeTurnRequestId;
|
|
45
|
+
exports.claudeTurnRequestId = claudeTurnRequestId;
|
|
46
|
+
exports.claudePromptRequestId = claudePromptRequestId;
|
|
47
|
+
exports.codexTurnRequestId = codexTurnRequestId;
|
|
48
|
+
exports.codexPromptRequestId = codexPromptRequestId;
|
|
49
|
+
exports.antigravityTurnRequestId = antigravityTurnRequestId;
|
|
50
|
+
exports.antigravityPromptRequestId = antigravityPromptRequestId;
|
|
44
51
|
/**
|
|
45
|
-
* Prefix on `chat_messages.request_id` for a row whose `content` is
|
|
52
|
+
* Prefix on `chat_messages.request_id` for a row whose `content` is opencode's
|
|
46
53
|
* own Markdown rather than a scrape of its terminal.
|
|
47
54
|
*
|
|
48
55
|
* The `:` is load-bearing — it cannot appear in a claude request id, so
|
|
49
56
|
* {@link isAgentAuthoredMarkdown} cannot answer true for a pre-existing row.
|
|
50
57
|
*/
|
|
51
58
|
exports.AGENT_MARKDOWN_REQUEST_ID_PREFIX = 'oc-turn:';
|
|
59
|
+
/**
|
|
60
|
+
* The same, for a turn read out of Claude Code's transcript JSONL (Issue #2121).
|
|
61
|
+
*
|
|
62
|
+
* A prefix of its own rather than a second use of `oc-turn:` because the marker
|
|
63
|
+
* is also the idempotency key, and the two readers name their turns with ids
|
|
64
|
+
* from different namespaces — opencode's `msg_…` and Claude's record `uuid`.
|
|
65
|
+
* Sharing the prefix would make a collision between the two a silent "already
|
|
66
|
+
* saved", which is the one failure mode a key must not have.
|
|
67
|
+
*
|
|
68
|
+
* `claude-` and not `cc-`: the string is what an operator reads in the row when
|
|
69
|
+
* they ask why History shows Markdown, and the tool id is what they will search
|
|
70
|
+
* the codebase for.
|
|
71
|
+
*/
|
|
72
|
+
exports.CLAUDE_MARKDOWN_REQUEST_ID_PREFIX = 'claude-turn:';
|
|
73
|
+
/**
|
|
74
|
+
* Prefix on `chat_messages.request_id` for a **user** row whose text was read
|
|
75
|
+
* out of Claude Code's transcript rather than written by `/send` (Issue #2196).
|
|
76
|
+
*
|
|
77
|
+
* Deliberately *not* one of {@link AGENT_MARKDOWN_REQUEST_ID_PREFIXES}. The two
|
|
78
|
+
* jobs the `request_id` column does are separable, and this constant only does
|
|
79
|
+
* the first:
|
|
80
|
+
*
|
|
81
|
+
* - **idempotency key** — the value is derived from the prompt record's `uuid`,
|
|
82
|
+
* so the poller reading the same finished turn twice writes one row. That is
|
|
83
|
+
* what this is for.
|
|
84
|
+
* - **"render me as Markdown"** — that is what the list above means, and a user
|
|
85
|
+
* row must not join it. The operator's own text has always been drawn
|
|
86
|
+
* verbatim (`whitespace-pre-wrap`), and a prompt that happens to contain
|
|
87
|
+
* `# ` or a `|` table row would change shape the moment it were rendered.
|
|
88
|
+
* `ConversationPairCard` is untouched by #2196 precisely because this prefix
|
|
89
|
+
* is absent from that list.
|
|
90
|
+
*
|
|
91
|
+
* `claude-prompt:` and not a second use of `claude-turn:`: the assistant row for
|
|
92
|
+
* the same turn is keyed on the *same* `uuid`, so sharing the prefix would make
|
|
93
|
+
* the two rows collide on `findMessageByRequestId` and the second writer would
|
|
94
|
+
* read "already saved" and stand down.
|
|
95
|
+
*/
|
|
96
|
+
exports.CLAUDE_PROMPT_REQUEST_ID_PREFIX = 'claude-prompt:';
|
|
97
|
+
/**
|
|
98
|
+
* The same, for a turn read out of codex's rollout JSONL (Issue #2197).
|
|
99
|
+
*
|
|
100
|
+
* A third namespace for the third reader, for the reason
|
|
101
|
+
* {@link CLAUDE_MARKDOWN_REQUEST_ID_PREFIX} gives: the value is an idempotency
|
|
102
|
+
* key as well as a marker, and codex names its turns with a `turn_id` of its
|
|
103
|
+
* own minting. Sharing a prefix with claude would make a collision between two
|
|
104
|
+
* tools' ids read as "already saved", which is the one failure a key must not
|
|
105
|
+
* have.
|
|
106
|
+
*/
|
|
107
|
+
exports.CODEX_MARKDOWN_REQUEST_ID_PREFIX = 'codex-turn:';
|
|
108
|
+
/**
|
|
109
|
+
* Prefix on a **user** row whose text was read out of codex's rollout JSONL
|
|
110
|
+
* (Issue #2197).
|
|
111
|
+
*
|
|
112
|
+
* Deliberately absent from {@link AGENT_MARKDOWN_REQUEST_ID_PREFIXES}, for the
|
|
113
|
+
* whole of the reason {@link CLAUDE_PROMPT_REQUEST_ID_PREFIX} states: the
|
|
114
|
+
* operator's own text is drawn verbatim and must not change shape because it
|
|
115
|
+
* happened to contain a `#` or a `|`.
|
|
116
|
+
*
|
|
117
|
+
* Unlike claude's, this one is **not** keyed on the same id as the turn's
|
|
118
|
+
* assistant row. codex folds a prompt sent while a turn is running into that
|
|
119
|
+
* same turn — measured on 23 of 326 turns in the corpus this Issue read — so a
|
|
120
|
+
* turn can carry more than one operator message, and keying the user row on the
|
|
121
|
+
* `turn_id` would collapse them into one row and then refuse the second as
|
|
122
|
+
* already recorded. The key is the **`UserMessage` item's own id** instead, so
|
|
123
|
+
* one prompt is one row however many share a turn. See {@link codexPromptRequestId}.
|
|
124
|
+
*/
|
|
125
|
+
exports.CODEX_PROMPT_REQUEST_ID_PREFIX = 'codex-prompt:';
|
|
126
|
+
/**
|
|
127
|
+
* The same, for a turn read out of antigravity's transcript JSONL (Issue #2198).
|
|
128
|
+
*
|
|
129
|
+
* A fourth namespace for the fourth reader, for the reason
|
|
130
|
+
* {@link CLAUDE_MARKDOWN_REQUEST_ID_PREFIX} gives: the value is an idempotency
|
|
131
|
+
* key as well as a marker, and antigravity names its turns with a number —
|
|
132
|
+
* `step_index` — that is only unique *inside one conversation*. Sharing a prefix
|
|
133
|
+
* with another tool would make a collision between two tools' ids read as
|
|
134
|
+
* "already saved", which is the one failure a key must not have; and the id
|
|
135
|
+
* therefore has to carry the conversation as well as the step. See
|
|
136
|
+
* {@link antigravityTurnRequestId}.
|
|
137
|
+
*/
|
|
138
|
+
exports.ANTIGRAVITY_MARKDOWN_REQUEST_ID_PREFIX = 'antigravity-turn:';
|
|
139
|
+
/**
|
|
140
|
+
* Prefix on a **user** row whose text was read out of antigravity's transcript
|
|
141
|
+
* JSONL (Issue #2198).
|
|
142
|
+
*
|
|
143
|
+
* Deliberately absent from {@link AGENT_MARKDOWN_REQUEST_ID_PREFIXES}, for the
|
|
144
|
+
* whole of the reason {@link CLAUDE_PROMPT_REQUEST_ID_PREFIX} states: the
|
|
145
|
+
* operator's own text is drawn verbatim and must not change shape because it
|
|
146
|
+
* happened to contain a `#` or a `|`.
|
|
147
|
+
*
|
|
148
|
+
* Keyed on the same `(conversationId, stepIndex)` pair as the turn's assistant
|
|
149
|
+
* row, which is claude's arrangement rather than codex's. It is the right one
|
|
150
|
+
* here because agy opens a turn with exactly one `USER_INPUT` record — 63 of 63
|
|
151
|
+
* in the corpus #2198 measured — so a turn never carries a second prompt the way
|
|
152
|
+
* a codex turn can.
|
|
153
|
+
*/
|
|
154
|
+
exports.ANTIGRAVITY_PROMPT_REQUEST_ID_PREFIX = 'antigravity-prompt:';
|
|
155
|
+
/**
|
|
156
|
+
* Every prefix that means "this row holds source, not a rendering".
|
|
157
|
+
*
|
|
158
|
+
* One list rather than a chain of `startsWith` calls, so that adding the third
|
|
159
|
+
* tool is adding a constant here and nothing at the reader. The reader
|
|
160
|
+
* (`ConversationPairCard`) has never named a prefix and still does not — which
|
|
161
|
+
* is what let Issue #2121 put Claude's rows on the Markdown path without
|
|
162
|
+
* touching the component (#2121 受入条件).
|
|
163
|
+
*/
|
|
164
|
+
exports.AGENT_MARKDOWN_REQUEST_ID_PREFIXES = [
|
|
165
|
+
exports.AGENT_MARKDOWN_REQUEST_ID_PREFIX,
|
|
166
|
+
exports.CLAUDE_MARKDOWN_REQUEST_ID_PREFIX,
|
|
167
|
+
exports.CODEX_MARKDOWN_REQUEST_ID_PREFIX,
|
|
168
|
+
exports.ANTIGRAVITY_MARKDOWN_REQUEST_ID_PREFIX,
|
|
169
|
+
];
|
|
52
170
|
/**
|
|
53
171
|
* Whether this row's `content` may be rendered as Markdown.
|
|
54
172
|
*
|
|
55
173
|
* Conservative by construction: an absent or unrecognised `requestId` answers
|
|
56
174
|
* false, which is the pre-#2041 rendering. Nothing is ever *upgraded* to
|
|
57
|
-
* Markdown by guessing at its content
|
|
175
|
+
* Markdown by guessing at its content — in particular the `requestId` the
|
|
176
|
+
* scraper has always written for Claude (`req_…`, from `parseClaudeOutput`)
|
|
177
|
+
* matches no prefix and keeps its verbatim rendering.
|
|
58
178
|
*
|
|
59
179
|
* @param requestId - `ChatMessage.requestId`, which is usually absent
|
|
60
180
|
*/
|
|
61
181
|
function isAgentAuthoredMarkdown(requestId) {
|
|
62
|
-
|
|
182
|
+
if (typeof requestId !== 'string')
|
|
183
|
+
return false;
|
|
184
|
+
return exports.AGENT_MARKDOWN_REQUEST_ID_PREFIXES.some((prefix) => requestId.startsWith(prefix));
|
|
63
185
|
}
|
|
64
186
|
/**
|
|
65
187
|
* The row id for one opencode turn.
|
|
@@ -78,3 +200,117 @@ function isAgentAuthoredMarkdown(requestId) {
|
|
|
78
200
|
function opencodeTurnRequestId(userMessageId) {
|
|
79
201
|
return `${exports.AGENT_MARKDOWN_REQUEST_ID_PREFIX}${userMessageId}`;
|
|
80
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* The row id for one Claude Code turn (Issue #2121).
|
|
205
|
+
*
|
|
206
|
+
* The turn is named by the **prompt record it answers** — the `uuid` of the
|
|
207
|
+
* `type: "user"` line the operator's own text arrived on. Deliberately not the
|
|
208
|
+
* assistant record's `uuid` and not its `requestId`, because neither is one per
|
|
209
|
+
* turn: a live transcript sampled while a single prompt was still being
|
|
210
|
+
* answered (2026-08-31) already held **55 assistant records across 23 distinct
|
|
211
|
+
* `requestId`s**, so keying on either would have split one reply into dozens of
|
|
212
|
+
* History rows. The Issue measured the finished shape: 98 assistant records
|
|
213
|
+
* against the single `chat_messages` row the poller wrote.
|
|
214
|
+
*
|
|
215
|
+
* @param promptUuid - `uuid` of the user record that opened the turn
|
|
216
|
+
*/
|
|
217
|
+
function claudeTurnRequestId(promptUuid) {
|
|
218
|
+
return `${exports.CLAUDE_MARKDOWN_REQUEST_ID_PREFIX}${promptUuid}`;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* The row id for the **prompt** that opened one Claude Code turn (Issue #2196).
|
|
222
|
+
*
|
|
223
|
+
* Same `uuid`, different prefix, and therefore a different row: the turn's
|
|
224
|
+
* assistant row is {@link claudeTurnRequestId} of this same value. One `uuid`
|
|
225
|
+
* names one turn, and a turn is a user row plus an assistant row, so keying both
|
|
226
|
+
* on the record that opened it is what makes the pair reconstructible from the
|
|
227
|
+
* transcript alone — including on a re-read, where both halves must resolve to
|
|
228
|
+
* "already there" independently.
|
|
229
|
+
*
|
|
230
|
+
* @param promptUuid - `uuid` of the user record the operator's text arrived on
|
|
231
|
+
*/
|
|
232
|
+
function claudePromptRequestId(promptUuid) {
|
|
233
|
+
return `${exports.CLAUDE_PROMPT_REQUEST_ID_PREFIX}${promptUuid}`;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* The row id for one codex turn (Issue #2197).
|
|
237
|
+
*
|
|
238
|
+
* The turn is named by codex's own **`turn_id`**, which it stamps on
|
|
239
|
+
* `task_started`, on every `item_completed`, on `turn_context` and on
|
|
240
|
+
* `task_complete` — one value for everything one prompt produced. That is a
|
|
241
|
+
* stronger key than claude's equivalent rather than an analogous one: claude
|
|
242
|
+
* has to infer the boundary from record order because nothing in its transcript
|
|
243
|
+
* links a reply to its prompt, while codex writes the boundary down.
|
|
244
|
+
*
|
|
245
|
+
* Measured on codex-cli 0.151.0 and on 326 turns of the archived corpus
|
|
246
|
+
* (`docs/design/codex-transcript-reader.md` §2): every turn carried exactly one
|
|
247
|
+
* `turn_id`, and every one of the 326 was closed by a `task_complete` bearing
|
|
248
|
+
* it.
|
|
249
|
+
*
|
|
250
|
+
* @param turnId - `turn_id`, as codex writes it
|
|
251
|
+
*/
|
|
252
|
+
function codexTurnRequestId(turnId) {
|
|
253
|
+
return `${exports.CODEX_MARKDOWN_REQUEST_ID_PREFIX}${turnId}`;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* The row id for one **prompt** inside a codex turn (Issue #2197).
|
|
257
|
+
*
|
|
258
|
+
* The `UserMessage` item's own id, not the `turn_id` — see
|
|
259
|
+
* {@link CODEX_PROMPT_REQUEST_ID_PREFIX} for the measurement that forces the
|
|
260
|
+
* distinction.
|
|
261
|
+
*
|
|
262
|
+
* @param promptItemId - `item.id` of the `UserMessage` the text arrived on
|
|
263
|
+
*/
|
|
264
|
+
function codexPromptRequestId(promptItemId) {
|
|
265
|
+
return `${exports.CODEX_PROMPT_REQUEST_ID_PREFIX}${promptItemId}`;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* The turn part of an antigravity row id (Issue #2198).
|
|
269
|
+
*
|
|
270
|
+
* `<conversationId>#<stepIndex>`, and both halves are load-bearing. antigravity
|
|
271
|
+
* has no `turn_id` of codex's kind and no per-record uuid of claude's; what it
|
|
272
|
+
* has is `step_index`, the primary key of the row in its own `steps` table. That
|
|
273
|
+
* is unique inside one conversation — measured with no duplicate across all 41
|
|
274
|
+
* transcripts and 1,024 records on the capture machine — and unique nowhere
|
|
275
|
+
* else, so a bare `12` would collide with the twelfth step of every other
|
|
276
|
+
* conversation the moment two agy instances shared a worktree.
|
|
277
|
+
*
|
|
278
|
+
* The `#` is a separator agy's own ids cannot contain: a conversation id is a
|
|
279
|
+
* uuid and a step index is a non-negative integer.
|
|
280
|
+
*
|
|
281
|
+
* @param conversationId - `conversationId`, as every agy hook payload carries it
|
|
282
|
+
* @param stepIndex - `step_index` of the `USER_INPUT` record that opened the turn
|
|
283
|
+
*/
|
|
284
|
+
function antigravityTurnKey(conversationId, stepIndex) {
|
|
285
|
+
return `${conversationId}#${stepIndex}`;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* The row id for one antigravity turn (Issue #2198).
|
|
289
|
+
*
|
|
290
|
+
* The turn is named by the **prompt record it answers** — the `step_index` of
|
|
291
|
+
* the `USER_EXPLICIT` / `USER_INPUT` line the operator's text arrived on. That
|
|
292
|
+
* is claude's arrangement (#2121) rather than codex's, because agy writes
|
|
293
|
+
* nothing that closes a turn and nothing that links a reply back to its prompt;
|
|
294
|
+
* what opens the turn is the only boundary in the file.
|
|
295
|
+
*
|
|
296
|
+
* @param conversationId - The conversation the turn was read from
|
|
297
|
+
* @param stepIndex - `step_index` of the record that opened the turn
|
|
298
|
+
*/
|
|
299
|
+
function antigravityTurnRequestId(conversationId, stepIndex) {
|
|
300
|
+
return `${exports.ANTIGRAVITY_MARKDOWN_REQUEST_ID_PREFIX}${antigravityTurnKey(conversationId, stepIndex)}`;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* The row id for the **prompt** that opened one antigravity turn (Issue #2198).
|
|
304
|
+
*
|
|
305
|
+
* Same pair, different prefix, and therefore a different row — exactly the
|
|
306
|
+
* relationship {@link claudePromptRequestId} has with {@link claudeTurnRequestId},
|
|
307
|
+
* and for the same reason: one prompt record names one turn, and a turn is a
|
|
308
|
+
* user row plus an assistant row, so keying both on the record that opened it is
|
|
309
|
+
* what makes the pair reconstructible from the transcript alone.
|
|
310
|
+
*
|
|
311
|
+
* @param conversationId - The conversation the turn was read from
|
|
312
|
+
* @param stepIndex - `step_index` of the record the operator's text arrived on
|
|
313
|
+
*/
|
|
314
|
+
function antigravityPromptRequestId(conversationId, stepIndex) {
|
|
315
|
+
return `${exports.ANTIGRAVITY_PROMPT_REQUEST_ID_PREFIX}${antigravityTurnKey(conversationId, stepIndex)}`;
|
|
316
|
+
}
|
|
@@ -6,8 +6,31 @@
|
|
|
6
6
|
* Based on Issue #13 UX Improvement design specification (Section 16)
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.initialErrorState = exports.initialLayoutState = exports.initialPromptState = void 0;
|
|
9
|
+
exports.initialErrorState = exports.initialLayoutState = exports.initialPromptState = exports.VALID_SURFACE_MODES = exports.DEFAULT_SURFACE_MODE = void 0;
|
|
10
|
+
exports.isSurfaceMode = isSurfaceMode;
|
|
10
11
|
exports.createInitialUIState = createInitialUIState;
|
|
12
|
+
/**
|
|
13
|
+
* The mode a session opens in when nothing has been persisted and no `?view=`
|
|
14
|
+
* was given, and the value every invalid input falls back to.
|
|
15
|
+
*/
|
|
16
|
+
exports.DEFAULT_SURFACE_MODE = 'terminal';
|
|
17
|
+
/** Set of valid {@link SurfaceMode} values for runtime validation. */
|
|
18
|
+
exports.VALID_SURFACE_MODES = new Set([
|
|
19
|
+
'terminal',
|
|
20
|
+
'chat',
|
|
21
|
+
]);
|
|
22
|
+
/**
|
|
23
|
+
* Runtime type guard for {@link SurfaceMode}.
|
|
24
|
+
*
|
|
25
|
+
* The boundary for BOTH untrusted sources of a mode: the `?view=` query
|
|
26
|
+
* parameter and the localStorage value (which a user, an extension or an older
|
|
27
|
+
* build may have written). Accepts `unknown` so `searchParams.get()` /
|
|
28
|
+
* `localStorage.getItem()` — both `string | null` — can be handed over
|
|
29
|
+
* unnarrowed; a non-string is simply not a SurfaceMode.
|
|
30
|
+
*/
|
|
31
|
+
function isSurfaceMode(value) {
|
|
32
|
+
return typeof value === 'string' && exports.VALID_SURFACE_MODES.has(value);
|
|
33
|
+
}
|
|
11
34
|
/**
|
|
12
35
|
* Initial prompt state
|
|
13
36
|
*/
|
package/package.json
CHANGED
package/public/sw.js
CHANGED
|
@@ -150,6 +150,11 @@ self.addEventListener('message', function (event) {
|
|
|
150
150
|
// over, and this device may still be showing it. Close the stale cards carrying
|
|
151
151
|
// that tag, then show ONE silent replacement in their place.
|
|
152
152
|
//
|
|
153
|
+
// Issue #2155 widened the caller: EVERY tagged payload comes through here now,
|
|
154
|
+
// not only resolutions. The replacement is silent only for a resolution — a
|
|
155
|
+
// waiting card is still allowed to alert — but the close-then-show sequence
|
|
156
|
+
// below is identical for both, so nothing in this function had to change.
|
|
157
|
+
//
|
|
153
158
|
// THE ORDER IS LOAD-BEARING AND MUST NOT BE INVERTED. Every subscription in
|
|
154
159
|
// this app is created with `userVisibleOnly: true` — the only value browsers
|
|
155
160
|
// accept from a web page — and each engine enforces it by looking at what is
|
|
@@ -173,6 +178,7 @@ function replaceStaleNotifications(title, options) {
|
|
|
173
178
|
closing = Promise.resolve();
|
|
174
179
|
} else {
|
|
175
180
|
closing = registration
|
|
181
|
+
// Correct either way: whether an engine hands back every card carrying the tag or only the newest one, the loop closes exactly what it was handed (iOS is still unmeasured on this point — Issue #2155).
|
|
176
182
|
.getNotifications({ tag: tag })
|
|
177
183
|
.then(function (stale) {
|
|
178
184
|
for (var i = 0; i < stale.length; i++) {
|
|
@@ -225,8 +231,16 @@ self.addEventListener('push', function (event) {
|
|
|
225
231
|
// different, louder instruction.
|
|
226
232
|
if (resolved) options.silent = true;
|
|
227
233
|
|
|
234
|
+
// --- Issue #2155 ---------------------------------------------------------
|
|
235
|
+
// Every TAGGED push takes the close-then-show path, not just resolutions.
|
|
236
|
+
// Safari/iOS does not collapse same-tag cards on a plain `showNotification`,
|
|
237
|
+
// so waiting notifications — and every escalation re-notification behind them
|
|
238
|
+
// — stacked up there while Chrome folded them into one (measured 2026-08-30,
|
|
239
|
+
// iPad iOS 18.7 / Safari 26.5.2 vs Android 10 / Chrome 151). Closing the
|
|
240
|
+
// stale cards explicitly is the part iOS does honour. An untagged push has
|
|
241
|
+
// nothing to replace and goes straight to `showNotification`.
|
|
228
242
|
event.waitUntil(
|
|
229
|
-
|
|
243
|
+
options.tag
|
|
230
244
|
? replaceStaleNotifications(title, options)
|
|
231
245
|
: self.registration.showNotification(title, options)
|
|
232
246
|
);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=9457,a.ids=[2839,5220,9457],a.modules={261:a=>{a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},3421:(a,b,c)=>{Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(71237),e=c(55088),f=c(17679);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},10846:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},12412:a=>{a.exports=require("assert")},19121:a=>{a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},19771:a=>{a.exports=require("process")},21820:a=>{a.exports=require("os")},27289:(a,b,c)=>{c.d(b,{t:()=>j,z:()=>i});var d=c(10641),e=c(88807),f=c(56791),g=c(95506),h=c(66007);function i(a){if(!a)return a;try{if(!(0,h.h6)(a))return a;let b=(0,e.getDbInstance)();return(0,g.l0)(b,a)??a}catch{return a}}function j(a){if(!(0,h.h6)(a))return d.NextResponse.json({error:"Invalid worktree ID format"},{status:400});let b=(0,e.getDbInstance)(),c=(0,f.getWorktreeById)(b,i(a));return c||d.NextResponse.json({error:"Worktree not found"},{status:404})}},27910:a=>{a.exports=require("stream")},28354:a=>{a.exports=require("util")},29021:a=>{a.exports=require("fs")},29294:a=>{a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:a=>{a.exports=require("path")},34631:a=>{a.exports=require("tls")},44870:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},48478:(a,b,c)=>{c.r(b),c.d(b,{handler:()=>I,patchFetch:()=>H,routeModule:()=>D,serverHooks:()=>G,workAsyncStorage:()=>E,workUnitAsyncStorage:()=>F});var d={};c.r(d),c.d(d,{POST:()=>C});var e=c(95736),f=c(9117),g=c(4044),h=c(39326),i=c(32324),j=c(261),k=c(54290),l=c(85328),m=c(38928),n=c(46595),o=c(3421),p=c(17679),q=c(41681),r=c(63446),s=c(86439),t=c(51356),u=c(10641),v=c(88807),w=c(56791),x=c(95220),y=c(15194),z=c(72626),A=c(27289);let B=(0,z.h)("api/start-polling");async function C(a,{params:b}){try{let{id:c}=await b,d=(0,A.z)(c),e=(0,v.getDbInstance)();if(!(0,w.getWorktreeById)(e,d))return u.NextResponse.json({error:`Worktree '${d}' not found`},{status:404});let f=await a.json();if(!f.cliToolId||!y.XH.includes(f.cliToolId))return u.NextResponse.json({error:`Invalid CLI tool ID. Must be one of: ${y.XH.join(", ")}`},{status:400});return B.info("manually-starting-polling-for"),(0,x.startPolling)(d,f.cliToolId),u.NextResponse.json({success:!0,message:`Started polling for ${f.cliToolId} session`})}catch(a){return B.error("error-starting-polling:",{error:a instanceof Error?a.message:String(a)}),u.NextResponse.json({error:"Failed to start polling"},{status:500})}}let D=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/worktrees/[id]/start-polling/route",pathname:"/api/worktrees/[id]/start-polling",filename:"route",bundlePath:"app/api/worktrees/[id]/start-polling/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"/home/runner/work/CommandMate/CommandMate/src/app/api/worktrees/[id]/start-polling/route.ts",nextConfigOutput:"",userland:d}),{workAsyncStorage:E,workUnitAsyncStorage:F,serverHooks:G}=D;function H(){return(0,g.patchFetch)({workAsyncStorage:E,workUnitAsyncStorage:F})}async function I(a,b,c){var d;let e="/api/worktrees/[id]/start-polling/route";"/index"===e&&(e="/");let g=await D.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:y,routerServerContext:z,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,resolvedPathname:C}=g,E=(0,j.normalizeAppPath)(e),F=!!(y.dynamicRoutes[E]||y.routes[C]);if(F&&!x){let a=!!y.routes[C],b=y.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||D.isDev||x||(G="/index"===(G=C)?"/":G);let H=!0===D.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:y,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>D.onRequestError(a,b,d,z)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>D.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&A&&B&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await D.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})},z),b}},l=await D.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:y,isRoutePPREnabled:!1,isOnDemandRevalidate:A,revalidateOnlyGenerated:B,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",A?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await D.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:A})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}},55511:a=>{a.exports=require("crypto")},55591:a=>{a.exports=require("https")},63033:a=>{a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},74075:a=>{a.exports=require("zlib")},79428:a=>{a.exports=require("buffer")},79551:a=>{a.exports=require("url")},79646:a=>{a.exports=require("child_process")},79748:a=>{a.exports=require("fs/promises")},81630:a=>{a.exports=require("http")},83997:a=>{a.exports=require("tty")},86439:a=>{a.exports=require("next/dist/shared/lib/no-fallback-error.external")},87550:a=>{a.exports=require("better-sqlite3")},91645:a=>{a.exports=require("net")},94735:a=>{a.exports=require("events")},95220:(a,b,c)=>{c.r(b),c.d(b,{accumulateTuiContent:()=>g.IZ,cleanClaudeResponse:()=>f.NN,cleanCopilotResponse:()=>f.LH,cleanGeminiResponse:()=>f.IS,cleanOpenCodeResponse:()=>f.aW,clearPromptHashCache:()=>h.iX,clearTuiAccumulator:()=>g.q1,extractCopilotContentLines:()=>g.o0,extractTuiContentLines:()=>g.K0,findOverlapIndex:()=>g.vQ,getAccumulatedContent:()=>g.Uz,getActivePollers:()=>d.KQ,initTuiAccumulator:()=>g.tb,isDuplicatePrompt:()=>h.gv,isOpenCodeComplete:()=>e.bE,migrateResponsePollerWorktreeIds:()=>d.sR,normalizeCopilotLine:()=>g.IW,normalizePromptForDedup:()=>h.zm,renamePromptHashCacheKey:()=>h.i2,resolveExtractionStartIndex:()=>e.QM,startPolling:()=>d.g8,stopAllPolling:()=>d.fq,stopPolling:()=>d.Et,truncateMessage:()=>f.Sj});var d=c(45146),e=c(60),f=c(82450),g=c(13033),h=c(72457)},95736:(a,b,c)=>{a.exports=c(44870)}};var b=require("../../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[1331,641,3722,1356,1503,1634,4390,9627,8807,406,5164,9798,1714,9130,8800,4299,7905,1886,1719,1191,6337,2759,7824,7472,5017,1058,221],()=>b(b.s=48478));module.exports=c})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":1,"files":["../../../../../../../data/cm.db","../../../../../../../locales/en/notifications.json","../../../../../../../locales/ja/notifications.json","../../../../../../../node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../../../../../../node_modules/better-sqlite3/lib/database.js","../../../../../../../node_modules/better-sqlite3/lib/index.js","../../../../../../../node_modules/better-sqlite3/lib/methods/aggregate.js","../../../../../../../node_modules/better-sqlite3/lib/methods/backup.js","../../../../../../../node_modules/better-sqlite3/lib/methods/function.js","../../../../../../../node_modules/better-sqlite3/lib/methods/inspect.js","../../../../../../../node_modules/better-sqlite3/lib/methods/pragma.js","../../../../../../../node_modules/better-sqlite3/lib/methods/serialize.js","../../../../../../../node_modules/better-sqlite3/lib/methods/table.js","../../../../../../../node_modules/better-sqlite3/lib/methods/transaction.js","../../../../../../../node_modules/better-sqlite3/lib/methods/wrappers.js","../../../../../../../node_modules/better-sqlite3/lib/sqlite-error.js","../../../../../../../node_modules/better-sqlite3/lib/util.js","../../../../../../../node_modules/better-sqlite3/package.json","../../../../../../../node_modules/bindings/bindings.js","../../../../../../../node_modules/bindings/package.json","../../../../../../../node_modules/file-uri-to-path/index.js","../../../../../../../node_modules/file-uri-to-path/package.json","../../../../../../../node_modules/next/dist/client/components/app-router-headers.js","../../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../../../node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../../node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../../node_modules/next/dist/lib/client-and-server-references.js","../../../../../../../node_modules/next/dist/lib/constants.js","../../../../../../../node_modules/next/dist/lib/interop-default.js","../../../../../../../node_modules/next/dist/lib/is-error.js","../../../../../../../node_modules/next/dist/lib/semver-noop.js","../../../../../../../node_modules/next/dist/server/app-render/action-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/action-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/after-task-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/after-task-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/async-local-storage.js","../../../../../../../node_modules/next/dist/server/app-render/cache-signal.js","../../../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js","../../../../../../../node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js","../../../../../../../node_modules/next/dist/server/app-render/work-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/work-async-storage.external.js","../../../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js","../../../../../../../node_modules/next/dist/server/app-render/work-unit-async-storage.external.js","../../../../../../../node_modules/next/dist/server/lib/cache-handlers/default.external.js","../../../../../../../node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js","../../../../../../../node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js","../../../../../../../node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js","../../../../../../../node_modules/next/dist/server/lib/lru-cache.js","../../../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js","../../../../../../../node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js","../../../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../../node_modules/next/dist/server/load-manifest.external.js","../../../../../../../node_modules/next/dist/server/response-cache/types.js","../../../../../../../node_modules/next/dist/shared/lib/deep-freeze.js","../../../../../../../node_modules/next/dist/shared/lib/invariant-error.js","../../../../../../../node_modules/next/dist/shared/lib/is-plain-object.js","../../../../../../../node_modules/next/dist/shared/lib/is-thenable.js","../../../../../../../node_modules/next/dist/shared/lib/no-fallback-error.external.js","../../../../../../../node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js","../../../../../../../node_modules/next/dist/shared/lib/router/utils/app-paths.js","../../../../../../../node_modules/next/dist/shared/lib/segment.js","../../../../../../../node_modules/next/dist/shared/lib/server-reference-info.js","../../../../../../../node_modules/next/package.json","../../../../../../../package.json","../../../../../../../scripts/hooks/cmate-agent-event.sh","../../../../../../package.json","../../../../../chunks/1058.js","../../../../../chunks/1191.js","../../../../../chunks/1331.js","../../../../../chunks/1356.js","../../../../../chunks/1501.js","../../../../../chunks/1503.js","../../../../../chunks/1634.js","../../../../../chunks/1714.js","../../../../../chunks/1719.js","../../../../../chunks/1886.js","../../../../../chunks/221.js","../../../../../chunks/2759.js","../../../../../chunks/2839.js","../../../../../chunks/3241.js","../../../../../chunks/3707.js","../../../../../chunks/3722.js","../../../../../chunks/406.js","../../../../../chunks/4299.js","../../../../../chunks/4390.js","../../../../../chunks/5017.js","../../../../../chunks/5164.js","../../../../../chunks/5220.js","../../../../../chunks/6065.js","../../../../../chunks/6337.js","../../../../../chunks/641.js","../../../../../chunks/6781.js","../../../../../chunks/7366.js","../../../../../chunks/7472.js","../../../../../chunks/7824.js","../../../../../chunks/7905.js","../../../../../chunks/8800.js","../../../../../chunks/8807.js","../../../../../chunks/9130.js","../../../../../chunks/9508.js","../../../../../chunks/9627.js","../../../../../chunks/9798.js","../../../../../webpack-runtime.js","route_client-reference-manifest.js"]}
|