@chorus-aidlc/chorus 0.14.2 → 0.14.3
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/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +437 -430
- package/.next/standalone/.next/app-path-routes-manifest.json +45 -44
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +36 -36
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +3 -3
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js +5 -5
- package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +3 -3
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +45 -44
- package/.next/standalone/.next/server/chunks/1114.js +1 -1
- package/.next/standalone/.next/server/chunks/1318.js +1 -1
- package/.next/standalone/.next/server/chunks/1559.js +1 -1
- package/.next/standalone/.next/server/chunks/2004.js +1 -0
- package/.next/standalone/.next/server/chunks/2112.js +1 -0
- package/.next/standalone/.next/server/chunks/{1286.js → 2282.js} +3 -3
- package/.next/standalone/.next/server/chunks/2570.js +2 -2
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/{6492.js → 2789.js} +2 -2
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3219.js +1 -1
- package/.next/standalone/.next/server/chunks/4070.js +1 -0
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/6207.js +1 -1
- package/.next/standalone/.next/server/chunks/6506.js +2 -2
- package/.next/standalone/.next/server/chunks/6515.js +2 -2
- package/.next/standalone/.next/server/chunks/679.js +1 -1
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/8454.js +1 -1
- package/.next/standalone/.next/server/chunks/8540.js +1 -0
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/3R5zOQKwCZOVs9-BjIVqk/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/{11595.fbbfc784ff9ee566.js → 11595.c580c5690d176cce.js} +1 -1
- package/.next/standalone/.next/static/chunks/{13867-a95a4555fcb7b13b.js → 14160-7bcee6e9e8bc5233.js} +1 -1
- package/.next/standalone/.next/static/chunks/{32331-87ae9bc7517c7947.js → 18351-2a408c4f57ddb3a7.js} +1 -1
- package/.next/standalone/.next/static/chunks/24870-5b0be64361f5ef70.js +1 -0
- package/.next/standalone/.next/static/chunks/26232-110019cebde19691.js +1 -0
- package/.next/standalone/.next/static/chunks/{33456.b67f1146831e9f2b.js → 33456.c48dc366aa90b234.js} +1 -1
- package/.next/standalone/.next/static/chunks/{37985-e4683195e4ca2519.js → 33806-cb339e86820a87c4.js} +1 -1
- package/.next/standalone/.next/static/chunks/{38526-7ffc4b7351c15bc4.js → 37938-c09acf52d7f85cb4.js} +1 -1
- package/.next/standalone/.next/static/chunks/{4860.3491d748fdde968e.js → 4860.baf6a285246198af.js} +1 -1
- package/.next/standalone/.next/static/chunks/{33277-9926b461045318b3.js → 60178-d6276df1c07d7735.js} +2 -2
- package/.next/standalone/.next/static/chunks/68326-924445654ed47e6f.js +1 -0
- package/.next/standalone/.next/static/chunks/78917-1498676a1ffe5ded.js +1 -0
- package/.next/standalone/.next/static/chunks/94470-1076452151689267.js +1 -0
- package/.next/standalone/.next/static/chunks/94643-7c7f2efab0640658.js +1 -0
- package/.next/standalone/.next/static/chunks/{99373.827383575665ce2f.js → 99373.ad871bd0bbfc5eb7.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/{layout-12d81eedb519461c.js → layout-78259279cf6c6919.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-996b8a87b4b986f1.js → page-59dcf0ba7ce877ec.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-d6c226fd56b5ebb5.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-c231207c3674aa54.js → page-2c9d3f4c6e0ff807.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-c62c7d7cf9833060.js → page-af35d50848f01875.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-cb6fdf592863833c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-596d97796dd55e2f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/{page-7948aa8db4813091.js → page-ed9415921188b4d3.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-8eea1e0cea60758f.js → page-ebf4c28014025b7b.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-658f31ac6a28ec82.js → page-bbde7e85e3388813.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-e60bc39bf2957f77.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/comments/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/connection-heartbeat/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/health/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/wake-preview/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/pin/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-visits/visit/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/references/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/search/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/session/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-8cf720e8efb6ac7d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-b178eb3215360d91.js → page-006bf9e9d6a991f1.js} +1 -1
- package/.next/standalone/.next/static/chunks/{webpack-567d9ffe31a0a5ee.js → webpack-af2cb28ef7bbd7c2.js} +1 -1
- package/.next/standalone/.next/static/css/f46eab37c942ff33.css +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +1 -1
- package/.next/standalone/public/chorus-plugin/bin/verify-document-roundtrip.sh +28 -0
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +8 -4
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +1 -1
- package/.next/standalone/public/install-kiro.sh +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +8 -4
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/kiro-plugin/bin/verify-document-roundtrip.sh +28 -0
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/package.json +1 -1
- package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
- package/cli/claude-spawner.mjs +4 -0
- package/cli/codex-spawner.mjs +41 -10
- package/cli/codex-usage-map.mjs +115 -0
- package/cli/daemon-rest-client.mjs +34 -3
- package/cli/daemon.mjs +9 -0
- package/cli/sse-listener.mjs +82 -5
- package/cli/turn-reporter.mjs +17 -5
- package/cli/upload-hooks.mjs +337 -12
- package/cli/waker.mjs +68 -13
- package/package.json +1 -1
- package/prisma/migrations/20260723014810_add_turn_relay_error/migration.sql +2 -0
- package/prisma/migrations/20260724031955_add_turn_token_usage/migration.sql +6 -0
- package/prisma/migrations/20260724082248_add_session_cache_rollup/migration.sql +3 -0
- package/prisma/schema.prisma +27 -0
- package/.next/standalone/.next/server/chunks/1173.js +0 -1
- package/.next/standalone/.next/server/chunks/3407.js +0 -1
- package/.next/standalone/.next/server/chunks/595.js +0 -1
- package/.next/standalone/.next/server/chunks/7762.js +0 -1
- package/.next/standalone/.next/static/XTQkt8fOQEK4mZkZTFQ_E/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/24537-7d71bf10329d1be1.js +0 -1
- package/.next/standalone/.next/static/chunks/27030-19cd50b9d47b3be6.js +0 -1
- package/.next/standalone/.next/static/chunks/28680-f9c5e04f67982cb6.js +0 -1
- package/.next/standalone/.next/static/chunks/73510-c338cef00ca3cfaf.js +0 -1
- package/.next/standalone/.next/static/chunks/78917-a297b76c6daa9f5d.js +0 -1
- package/.next/standalone/.next/static/chunks/84219-09970ab1b85c61f0.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-77771ef395e19922.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-d098269dcaa06de7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-7bcaa11ee24b5754.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-7fbf5bc58d3dd5b0.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/comments/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/health/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/wake-preview/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-visits/pin/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-visits/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-visits/visit/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/references/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/search/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/session/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-d1c49cfe592deeb8.js +0 -1
- package/.next/standalone/.next/static/css/617133917710c831.css +0 -1
- /package/.next/standalone/.next/static/{XTQkt8fOQEK4mZkZTFQ_E → 3R5zOQKwCZOVs9-BjIVqk}/_ssgManifest.js +0 -0
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
// startedAt|null }] }
|
|
17
17
|
// reportInterrupt → POST /api/daemon/report-interrupt
|
|
18
18
|
// { connectionUuid, entityType, entityUuid, reason }
|
|
19
|
+
// heartbeat → POST /api/daemon/connection-heartbeat
|
|
20
|
+
// { connectionUuid, connectedAt }
|
|
19
21
|
// readPendingTurns → GET /api/daemon/pending-turns?connectionUuid=…
|
|
20
22
|
// → { turns: [{ turnUuid, sessionId, directIdeaUuid, trigger,
|
|
21
23
|
// promptText }] }
|
|
@@ -72,6 +74,7 @@ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
|
72
74
|
* transcript: (p: { sessionId: string, messages: Array<{ role: string, text: string }> }) => Promise<DaemonRestResult>,
|
|
73
75
|
* executionState: (p: { executions: Array<Record<string, unknown>> }) => Promise<DaemonRestResult>,
|
|
74
76
|
* reportInterrupt: (p: { entityType: string, entityUuid: string, reason: string }) => Promise<DaemonRestResult>,
|
|
77
|
+
* heartbeat: (p: { connectionUuid: string, connectedAt: string }) => Promise<DaemonRestResult>,
|
|
75
78
|
* readPendingTurns: () => Promise<DaemonRestResult>,
|
|
76
79
|
* }}
|
|
77
80
|
*/
|
|
@@ -136,16 +139,25 @@ export function createDaemonRestClient(opts) {
|
|
|
136
139
|
* server resolves the turn by the session BUSINESS KEY (`sessionId`); the optional
|
|
137
140
|
* `entityType`/`entityUuid` stamp the weak executionUuid link. An `interrupted`
|
|
138
141
|
* status may carry `interruptedReason` (`user`/`crash`/`shutdown` — the server
|
|
139
|
-
* rejects `offline`, which is its own reconcile verdict).
|
|
140
|
-
*
|
|
142
|
+
* rejects `offline`, which is its own reconcile verdict). A terminal edge may also
|
|
143
|
+
* carry `transcriptRelayError` — the daemon-known reason its transcript upload
|
|
144
|
+
* finally failed (fix #444 follow-up), persisted as a turn annotation — and `usage`,
|
|
145
|
+
* the whole normalized per-turn TokenUsage object (daemon-token-usage), persisted as
|
|
146
|
+
* the turn's usage. Both ride the terminal edge only. Requires the connectionUuid (the
|
|
147
|
+
* server addresses the turn against a connection the agent owns).
|
|
141
148
|
*/
|
|
142
|
-
async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason }) {
|
|
149
|
+
async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason, transcriptRelayError, usage }) {
|
|
143
150
|
const connectionUuid = getConnectionUuid();
|
|
144
151
|
if (!connectionUuid) {
|
|
145
152
|
const error = `cannot advance turn for session ${sessionId} → ${status} — no connection uuid yet`;
|
|
146
153
|
logger.warn(`[Chorus] ${error}`);
|
|
147
154
|
return { ok: false, status: null, error, skipped: true };
|
|
148
155
|
}
|
|
156
|
+
// Per-turn token usage (daemon-token-usage) is meaningful only on a TERMINAL edge —
|
|
157
|
+
// the daemon knows it at subprocess exit, exactly like transcriptRelayError. Guard on
|
|
158
|
+
// the terminal status here so a stray usage on → running is never sent (the server
|
|
159
|
+
// ignores it there anyway; this keeps the wire honest).
|
|
160
|
+
const isTerminal = status === "ended" || status === "interrupted";
|
|
149
161
|
const body = {
|
|
150
162
|
connectionUuid,
|
|
151
163
|
sessionId,
|
|
@@ -154,6 +166,11 @@ export function createDaemonRestClient(opts) {
|
|
|
154
166
|
...(entityType && entityUuid ? { entityType, entityUuid } : {}),
|
|
155
167
|
// Only meaningful alongside status=interrupted; never sent otherwise.
|
|
156
168
|
...(status === "interrupted" && interruptedReason ? { interruptedReason } : {}),
|
|
169
|
+
// Transcript-relay failure annotation (fix #444 follow-up): only sent when the
|
|
170
|
+
// daemon actually knows the upload failed (a truthy reason on a terminal edge).
|
|
171
|
+
...(transcriptRelayError ? { transcriptRelayError } : {}),
|
|
172
|
+
// The whole normalized TokenUsage object, nested under `usage`, only on a terminal edge.
|
|
173
|
+
...(usage && isTerminal ? { usage } : {}),
|
|
157
174
|
};
|
|
158
175
|
return post(
|
|
159
176
|
"turn-advance",
|
|
@@ -223,6 +240,20 @@ export function createDaemonRestClient(opts) {
|
|
|
223
240
|
);
|
|
224
241
|
},
|
|
225
242
|
|
|
243
|
+
/**
|
|
244
|
+
* POST /api/daemon/connection-heartbeat — acknowledge receipt of one SSE heartbeat.
|
|
245
|
+
* The values come directly from the active stream's registration handshake; unlike
|
|
246
|
+
* other connection-scoped operations this must not resolve the uuid lazily, because
|
|
247
|
+
* a delayed acknowledgment must retain its original generation fence.
|
|
248
|
+
*/
|
|
249
|
+
async heartbeat({ connectionUuid, connectedAt }) {
|
|
250
|
+
return post(
|
|
251
|
+
"connection-heartbeat",
|
|
252
|
+
"/api/daemon/connection-heartbeat",
|
|
253
|
+
{ connectionUuid, connectedAt },
|
|
254
|
+
);
|
|
255
|
+
},
|
|
256
|
+
|
|
226
257
|
/**
|
|
227
258
|
* GET /api/daemon/pending-turns?connectionUuid=… — read this connection's unstarted
|
|
228
259
|
* (pending) turns from the turn table (the reconnect-backfill / deliver_turn source).
|
package/cli/daemon.mjs
CHANGED
|
@@ -43,6 +43,7 @@ import {
|
|
|
43
43
|
import { WAKE_ACTIONS } from "./prompts.mjs";
|
|
44
44
|
import { createInterruptReporter } from "./interrupt-reporter.mjs";
|
|
45
45
|
import { createTurnReporter } from "./turn-reporter.mjs";
|
|
46
|
+
import { createDaemonRestClient } from "./daemon-rest-client.mjs";
|
|
46
47
|
import { createControlHandler } from "./control-handler.mjs";
|
|
47
48
|
import { resolveSigintTimeoutMs, resolveDaemonCwds } from "./daemon-config.mjs";
|
|
48
49
|
import {
|
|
@@ -205,6 +206,13 @@ export function buildDaemon(creds, deps = {}) {
|
|
|
205
206
|
// doesn't matter. Per-connection so each path's wakes report against the right row.
|
|
206
207
|
/** @type {{ connectionUuid: string|null }} */
|
|
207
208
|
const connectionState = { connectionUuid: null };
|
|
209
|
+
const daemonRestClient = createDaemonRestClient({
|
|
210
|
+
url: creds.url,
|
|
211
|
+
apiKey: creds.apiKey,
|
|
212
|
+
getConnectionUuid: () => connectionState.connectionUuid,
|
|
213
|
+
logger,
|
|
214
|
+
fetchImpl: deps.fetchImpl,
|
|
215
|
+
});
|
|
208
216
|
|
|
209
217
|
// Per-connection terminal-outcome bookkeeping (add-daemon-connection-conflict-skip).
|
|
210
218
|
// `resolved` guards recordConnectionOutcome against double-counting a reconnect's
|
|
@@ -389,6 +397,7 @@ export function buildDaemon(creds, deps = {}) {
|
|
|
389
397
|
recordConnectionOutcome(outcome, false);
|
|
390
398
|
},
|
|
391
399
|
onControl,
|
|
400
|
+
acknowledgeHeartbeat: (registration) => daemonRestClient.heartbeat(registration),
|
|
392
401
|
onReconnect: backfill,
|
|
393
402
|
logger,
|
|
394
403
|
});
|
package/cli/sse-listener.mjs
CHANGED
|
@@ -29,6 +29,7 @@ import { fileURLToPath } from "node:url";
|
|
|
29
29
|
|
|
30
30
|
const INITIAL_DELAY_MS = 1_000;
|
|
31
31
|
const MAX_DELAY_MS = 30_000;
|
|
32
|
+
const WATCHDOG_TIMEOUT_MS = 75_000;
|
|
32
33
|
|
|
33
34
|
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
34
35
|
|
|
@@ -78,6 +79,8 @@ const PROCESS_STARTED_AT = new Date();
|
|
|
78
79
|
* The event carries `{ host, cwd }` of the conflicting identity.
|
|
79
80
|
* @property {() => Promise<void>} [onReconnect] Called after a reconnect so the
|
|
80
81
|
* caller can back-fill notifications missed during the gap.
|
|
82
|
+
* @property {(registration: {connectionUuid:string,connectedAt:string}) => Promise<unknown>} [acknowledgeHeartbeat]
|
|
83
|
+
* Best-effort REST acknowledgment for a parsed heartbeat comment.
|
|
81
84
|
* @property {string} [cwd] The working directory THIS connection serves (T3 — 单
|
|
82
85
|
* daemon 多路径). A multi-path daemon runs one SseListener per declared path, each
|
|
83
86
|
* self-reporting its own cwd so the server registers them as distinct connections
|
|
@@ -88,6 +91,7 @@ const PROCESS_STARTED_AT = new Date();
|
|
|
88
91
|
* @property {typeof fetch} [fetchImpl] Injectable for tests.
|
|
89
92
|
* @property {number} [initialDelayMs]
|
|
90
93
|
* @property {number} [maxDelayMs]
|
|
94
|
+
* @property {number} [watchdogTimeoutMs] Injectable for deterministic tests only.
|
|
91
95
|
*/
|
|
92
96
|
|
|
93
97
|
export class SseListener {
|
|
@@ -100,12 +104,14 @@ export class SseListener {
|
|
|
100
104
|
this.onControl = opts.onControl ?? (() => {});
|
|
101
105
|
this.onConflict = opts.onConflict ?? (() => {});
|
|
102
106
|
this.onReconnect = opts.onReconnect ?? (async () => {});
|
|
107
|
+
this.acknowledgeHeartbeat = opts.acknowledgeHeartbeat ?? (async () => {});
|
|
103
108
|
/** @type {string|null} The connection this stream registered as (once reported). */
|
|
104
109
|
this.connectionUuid = null;
|
|
105
110
|
this.logger = opts.logger ?? NOOP_LOGGER;
|
|
106
111
|
this.fetchImpl = opts.fetchImpl ?? globalThis.fetch;
|
|
107
112
|
this.initialDelayMs = opts.initialDelayMs ?? INITIAL_DELAY_MS;
|
|
108
113
|
this.maxDelayMs = opts.maxDelayMs ?? MAX_DELAY_MS;
|
|
114
|
+
this.watchdogTimeoutMs = opts.watchdogTimeoutMs ?? WATCHDOG_TIMEOUT_MS;
|
|
109
115
|
|
|
110
116
|
// Build the self-reporting endpoint URL once and reuse it across every
|
|
111
117
|
// (re)connect, so the reconnect path always re-sends the same params.
|
|
@@ -128,6 +134,7 @@ export class SseListener {
|
|
|
128
134
|
host: hostname(),
|
|
129
135
|
cwd: this.cwd,
|
|
130
136
|
startedAt: PROCESS_STARTED_AT.toISOString(),
|
|
137
|
+
livenessAck: "v1",
|
|
131
138
|
});
|
|
132
139
|
this.endpoint = `${this.url}/api/events/notifications?${params.toString()}`;
|
|
133
140
|
|
|
@@ -136,14 +143,20 @@ export class SseListener {
|
|
|
136
143
|
this.abortController = null;
|
|
137
144
|
/** @type {ReturnType<typeof setTimeout> | null} */
|
|
138
145
|
this.reconnectTimer = null;
|
|
146
|
+
/** @type {ReturnType<typeof setTimeout> | null} */
|
|
147
|
+
this.watchdogTimer = null;
|
|
148
|
+
/** @type {{connectionUuid:string,connectedAt:string}|null} */
|
|
149
|
+
this.activeRegistration = null;
|
|
139
150
|
this.reconnectDelay = this.initialDelayMs;
|
|
140
151
|
}
|
|
141
152
|
|
|
142
153
|
/** Open the SSE connection. On failure, schedules a backoff reconnect. */
|
|
143
154
|
async connect() {
|
|
144
155
|
this.#clearReconnectTimer();
|
|
156
|
+
this.#clearWatchdog();
|
|
145
157
|
const abortController = new AbortController();
|
|
146
158
|
this.abortController = abortController;
|
|
159
|
+
this.activeRegistration = null;
|
|
147
160
|
|
|
148
161
|
let response;
|
|
149
162
|
try {
|
|
@@ -173,6 +186,7 @@ export class SseListener {
|
|
|
173
186
|
this.status = "connected";
|
|
174
187
|
this.reconnectDelay = this.initialDelayMs;
|
|
175
188
|
this.logger.info("[Chorus] SSE connection established");
|
|
189
|
+
this.#refreshWatchdog(abortController);
|
|
176
190
|
|
|
177
191
|
if (wasReconnect) {
|
|
178
192
|
try {
|
|
@@ -182,22 +196,25 @@ export class SseListener {
|
|
|
182
196
|
}
|
|
183
197
|
}
|
|
184
198
|
|
|
185
|
-
this.#consumeStream(response.body, abortController
|
|
199
|
+
this.#consumeStream(response.body, abortController);
|
|
186
200
|
}
|
|
187
201
|
|
|
188
202
|
/** Gracefully close the connection (no reconnect). */
|
|
189
203
|
disconnect() {
|
|
190
204
|
this.#clearReconnectTimer();
|
|
205
|
+
this.#clearWatchdog();
|
|
191
206
|
if (this.abortController) {
|
|
192
207
|
this.abortController.abort();
|
|
193
208
|
this.abortController = null;
|
|
194
209
|
}
|
|
195
210
|
this.status = "disconnected";
|
|
211
|
+
this.activeRegistration = null;
|
|
196
212
|
this.logger.info("[Chorus] SSE connection closed");
|
|
197
213
|
}
|
|
198
214
|
|
|
199
|
-
/** @param {ReadableStream<Uint8Array>} body @param {
|
|
200
|
-
async #consumeStream(body,
|
|
215
|
+
/** @param {ReadableStream<Uint8Array>} body @param {AbortController} abortController */
|
|
216
|
+
async #consumeStream(body, abortController) {
|
|
217
|
+
const signal = abortController.signal;
|
|
201
218
|
const decoder = new TextDecoder();
|
|
202
219
|
const reader = body.getReader();
|
|
203
220
|
let buffer = "";
|
|
@@ -205,6 +222,12 @@ export class SseListener {
|
|
|
205
222
|
while (true) {
|
|
206
223
|
const { done, value } = await reader.read();
|
|
207
224
|
if (done || signal.aborted) break;
|
|
225
|
+
// Transport activity is byte arrival, not successful SSE parsing. Refresh before
|
|
226
|
+
// decode so comments, partial frames, and malformed payloads all prove the stream
|
|
227
|
+
// is still delivering bytes.
|
|
228
|
+
if (value && value.byteLength > 0) {
|
|
229
|
+
this.#refreshWatchdog(abortController);
|
|
230
|
+
}
|
|
208
231
|
// Strip CR on ingest so CRLF transports (`\r\n\r\n` boundaries) parse the
|
|
209
232
|
// same as LF — the `\n\n` boundary scan below would otherwise never match.
|
|
210
233
|
buffer += decoder.decode(value, { stream: true }).replace(/\r/g, "");
|
|
@@ -219,6 +242,7 @@ export class SseListener {
|
|
|
219
242
|
if (signal.aborted) return;
|
|
220
243
|
this.logger.warn(`[Chorus] SSE stream error: ${err}`);
|
|
221
244
|
} finally {
|
|
245
|
+
if (this.abortController === abortController) this.#clearWatchdog();
|
|
222
246
|
try {
|
|
223
247
|
reader.releaseLock();
|
|
224
248
|
} catch {
|
|
@@ -235,7 +259,24 @@ export class SseListener {
|
|
|
235
259
|
#processMessage(raw) {
|
|
236
260
|
for (const line of raw.split("\n")) {
|
|
237
261
|
// CR already stripped on ingest. Heartbeat / comment lines start with ":".
|
|
238
|
-
if (line.startsWith(":"))
|
|
262
|
+
if (line.startsWith(":")) {
|
|
263
|
+
if (line.slice(1).trim() === "heartbeat" && this.activeRegistration) {
|
|
264
|
+
const registration = this.activeRegistration;
|
|
265
|
+
Promise.resolve()
|
|
266
|
+
.then(() => this.acknowledgeHeartbeat(registration))
|
|
267
|
+
.then((result) => {
|
|
268
|
+
if (result && typeof result === "object" && result.ok === false) {
|
|
269
|
+
// The REST client already logged the transport cause. Keep listener
|
|
270
|
+
// behavior best-effort and avoid adding a retry loop here.
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
})
|
|
274
|
+
.catch((err) => {
|
|
275
|
+
this.logger.warn(`[Chorus] heartbeat acknowledgment failed: ${err}`);
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
239
280
|
if (line.startsWith("data: ")) {
|
|
240
281
|
const jsonStr = line.slice(6);
|
|
241
282
|
let event;
|
|
@@ -248,8 +289,16 @@ export class SseListener {
|
|
|
248
289
|
// The server's first data event tells us which DaemonConnection this
|
|
249
290
|
// stream registered as. Capture it (for execution-state attribution) and
|
|
250
291
|
// do NOT forward it as a notification — it isn't one.
|
|
251
|
-
if (
|
|
292
|
+
if (
|
|
293
|
+
event &&
|
|
294
|
+
event.type === "connection_registered" &&
|
|
295
|
+
typeof event.connectionUuid === "string"
|
|
296
|
+
) {
|
|
252
297
|
this.connectionUuid = event.connectionUuid;
|
|
298
|
+
this.activeRegistration =
|
|
299
|
+
typeof event.connectedAt === "string"
|
|
300
|
+
? { connectionUuid: event.connectionUuid, connectedAt: event.connectedAt }
|
|
301
|
+
: null;
|
|
253
302
|
try {
|
|
254
303
|
this.onConnectionId(event.connectionUuid);
|
|
255
304
|
} catch (err) {
|
|
@@ -305,4 +354,32 @@ export class SseListener {
|
|
|
305
354
|
this.reconnectTimer = null;
|
|
306
355
|
}
|
|
307
356
|
}
|
|
357
|
+
|
|
358
|
+
/** @param {AbortController|null} abortController */
|
|
359
|
+
#refreshWatchdog(abortController) {
|
|
360
|
+
this.#clearWatchdog();
|
|
361
|
+
if (!abortController || abortController.signal.aborted || this.abortController !== abortController) return;
|
|
362
|
+
this.watchdogTimer = setTimeout(() => {
|
|
363
|
+
this.watchdogTimer = null;
|
|
364
|
+
if (
|
|
365
|
+
this.abortController !== abortController ||
|
|
366
|
+
abortController.signal.aborted ||
|
|
367
|
+
this.status !== "connected"
|
|
368
|
+
) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
this.logger.warn(
|
|
372
|
+
`[Chorus] SSE stream received no bytes for ${this.watchdogTimeoutMs}ms; reconnecting`
|
|
373
|
+
);
|
|
374
|
+
abortController.abort();
|
|
375
|
+
this.#scheduleReconnect();
|
|
376
|
+
}, this.watchdogTimeoutMs);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
#clearWatchdog() {
|
|
380
|
+
if (this.watchdogTimer !== null) {
|
|
381
|
+
clearTimeout(this.watchdogTimer);
|
|
382
|
+
this.watchdogTimer = null;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
308
385
|
}
|
package/cli/turn-reporter.mjs
CHANGED
|
@@ -46,7 +46,7 @@ export const TURN_INTERRUPT_REASONS = new Set(["user", "crash", "shutdown"]);
|
|
|
46
46
|
* logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
|
|
47
47
|
* fetchImpl?: typeof fetch, Injectable for tests.
|
|
48
48
|
* }} opts
|
|
49
|
-
* @returns {(params: { sessionId: string, status: "running"|"ended"|"interrupted", entityType?: string|null, entityUuid?: string|null, interruptedReason?: "user"|"crash"|"shutdown"|null }) => Promise<void>}
|
|
49
|
+
* @returns {(params: { sessionId: string, status: "running"|"ended"|"interrupted", entityType?: string|null, entityUuid?: string|null, interruptedReason?: "user"|"crash"|"shutdown"|null, transcriptRelayError?: string|null, usage?: import("./upload-hooks.mjs").TokenUsage|null }) => Promise<void>}
|
|
50
50
|
*/
|
|
51
51
|
export function createTurnReporter(opts) {
|
|
52
52
|
const logger = opts.logger ?? NOOP_LOGGER;
|
|
@@ -67,6 +67,8 @@ export function createTurnReporter(opts) {
|
|
|
67
67
|
entityType,
|
|
68
68
|
entityUuid,
|
|
69
69
|
interruptedReason,
|
|
70
|
+
transcriptRelayError,
|
|
71
|
+
usage,
|
|
70
72
|
}) {
|
|
71
73
|
if (typeof sessionId !== "string" || !sessionId || !TURN_STATUSES.has(status)) {
|
|
72
74
|
logger.warn(
|
|
@@ -88,9 +90,19 @@ export function createTurnReporter(opts) {
|
|
|
88
90
|
}
|
|
89
91
|
// The client resolves the connectionUuid lazily, validates it (logging
|
|
90
92
|
// "no connection uuid yet" when absent), POSTs the exact server payload — sending
|
|
91
|
-
// entityType/entityUuid only when both are present
|
|
92
|
-
//
|
|
93
|
-
// never crash the wake path.
|
|
94
|
-
await client.turnAdvance({
|
|
93
|
+
// entityType/entityUuid only when both are present, and transcriptRelayError only when
|
|
94
|
+
// truthy (fix #444 follow-up) — and logs the failure cause on a network error / non-2xx.
|
|
95
|
+
// We swallow the structured result so a failed report can never crash the wake path.
|
|
96
|
+
await client.turnAdvance({
|
|
97
|
+
sessionId,
|
|
98
|
+
status,
|
|
99
|
+
entityType,
|
|
100
|
+
entityUuid,
|
|
101
|
+
interruptedReason,
|
|
102
|
+
transcriptRelayError,
|
|
103
|
+
// Per-turn token usage (daemon-token-usage): the client spreads it into the body
|
|
104
|
+
// only on a terminal edge. No validation here — usage is an opaque nested object.
|
|
105
|
+
usage,
|
|
106
|
+
});
|
|
95
107
|
};
|
|
96
108
|
}
|