@chorus-aidlc/chorus 0.14.2 → 0.14.4
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 +438 -431
- package/.next/standalone/.next/app-path-routes-manifest.json +49 -48
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +33 -33
- 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 +49 -48
- 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/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/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/WVmgQzimrMNvGtHx6Cqm1/_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/README.md +2 -0
- package/cli/claude-spawner.mjs +4 -0
- package/cli/client-args.mjs +15 -8
- package/cli/codex-spawner.mjs +41 -10
- package/cli/codex-usage-map.mjs +115 -0
- package/cli/daemon-agent.mjs +56 -6
- package/cli/daemon-install-config.mjs +129 -0
- package/cli/daemon-rest-client.mjs +34 -3
- package/cli/daemon.mjs +32 -1
- 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 → WVmgQzimrMNvGtHx6Cqm1}/_ssgManifest.js +0 -0
|
@@ -4,7 +4,7 @@ description: Opt-in OpenSpec-mode authoring for Chorus PM workflows in Claude Co
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.14.
|
|
7
|
+
version: "0.14.3"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -90,7 +90,7 @@ chorus-api.sh mcp-tool <tool_name> "$PAYLOAD"
|
|
|
90
90
|
with `$PAYLOAD` built using `json_encode_file` (defined in §3.4). Calling these tools directly from the agent's MCP harness with a hand-typed `content` field is a **protocol violation** for OpenSpec mode and will fail review. Reasons:
|
|
91
91
|
|
|
92
92
|
1. **Token cost.** Re-typing a multi-thousand-line markdown body through the LLM burns input + output tokens for every draft. The wrapper streams bytes through `jq -Rs '.'` — content never enters LLM context. A typical 3-doc proposal mirror via the script costs roughly zero content-tokens; via direct MCP it routinely costs 20k+.
|
|
93
|
-
2. **Byte-equality.** `jq -Rs '.'` is a byte-faithful encoder: backslashes, quotes, newlines, code-fence content, zero-width chars all survive. LLM re-emission has a non-zero failure rate on long markdown — table alignment drifts, fence escapes get "fixed", long URLs wrap. The byte-equality guarantee
|
|
93
|
+
2. **Byte-equality.** `jq -Rs '.'` is a byte-faithful encoder: backslashes, quotes, newlines, code-fence content, zero-width chars all survive. LLM re-emission has a non-zero failure rate on long markdown — table alignment drifts, fence escapes get "fixed", long URLs wrap. The exact byte-equality guarantee holds **only** on the wrapper path.
|
|
94
94
|
3. **Single source of truth.** With the wrapper, the local `openspec/changes/<slug>/*.md` is authoritative and Chorus is a mirror. With agent re-typing, authority splits between local file and whatever the LLM happened to output — a future diff cannot tell which one is correct.
|
|
95
95
|
|
|
96
96
|
### Rule 2 — Halt on error via `chorus_check_response`
|
|
@@ -226,7 +226,7 @@ json_encode_file() {
|
|
|
226
226
|
}
|
|
227
227
|
```
|
|
228
228
|
|
|
229
|
-
Round-trip
|
|
229
|
+
Round-trip verification is exact: a trailing newline difference is real drift and MUST NOT be normalized or ignored.
|
|
230
230
|
|
|
231
231
|
### 3.5 Create the proposal container with the slug provenance line
|
|
232
232
|
|
|
@@ -329,7 +329,11 @@ The hook is read-only; you (the agent) perform the archive:
|
|
|
329
329
|
|
|
330
330
|
3. **Halt on any error** from `openspec archive` or `chorus_pm_update_document`. Print stderr verbatim, post a comment on the proposal recording the failure (`chorus_add_comment` with `targetType: "proposal"`, `targetUuid: <proposalUuid>`), then stop. No retry. Matches §6 "no silent errors." (Comment on the proposal, not the idea: the failure is in archiving proposal-derived specs, and proposals can be `inputType: "document"` with no idea attached.)
|
|
331
331
|
|
|
332
|
-
4. **Confirm success.**
|
|
332
|
+
4. **Confirm success.** Resolve each matching Document UUID and run
|
|
333
|
+
`verify-document-roundtrip.sh <local-spec-path> <document-uuid>`. This
|
|
334
|
+
performs exact-byte comparison and metadata-only mismatch diagnostics. Do
|
|
335
|
+
not replace it with recursive `jq`, `head`, command substitution, or newline
|
|
336
|
+
normalization.
|
|
333
337
|
|
|
334
338
|
**Strict opt-in:** if the verified task is not the last of its idea, OR the proposal description carries no `OpenSpec change slug: <slug>` line, OR the local shell has no `openspec` CLI, the hook exits 0 silently and no archive reminder is injected. Existing free-form behavior is preserved.
|
|
335
339
|
|
|
@@ -44,7 +44,7 @@ is_tty() { [ -t 0 ] && [ -t 1 ]; }
|
|
|
44
44
|
# source modes can never diverge.
|
|
45
45
|
SKILLS="chorus-idea chorus-proposal chorus-develop chorus-yolo chorus-review chorus-quick-dev chorus-brainstorm chorus-openspec-aware"
|
|
46
46
|
REVIEWER_AGENTS="chorus-code-reviewer chorus-proposal-reviewer chorus-task-reviewer"
|
|
47
|
-
HOOK_SCRIPTS="on-agent-spawn.sh on-stop.sh on-post-submit-proposal.sh on-post-submit-for-verify.sh on-post-verify-task.sh chorus-api.sh test-syntax.sh"
|
|
47
|
+
HOOK_SCRIPTS="on-agent-spawn.sh on-stop.sh on-post-submit-proposal.sh on-post-submit-for-verify.sh on-post-verify-task.sh chorus-api.sh verify-document-roundtrip.sh test-syntax.sh"
|
|
48
48
|
|
|
49
49
|
CHORUS_URL_DEFAULT="${CHORUS_URL_DEFAULT:-http://localhost:8637/api/mcp}"
|
|
50
50
|
|
|
@@ -4,7 +4,7 @@ description: Opt-in OpenSpec-mode authoring for Chorus PM workflows in Kiro CLI.
|
|
|
4
4
|
license: AGPL-3.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: chorus
|
|
7
|
-
version: "0.14.
|
|
7
|
+
version: "0.14.3"
|
|
8
8
|
category: project-management
|
|
9
9
|
mcp_server: chorus
|
|
10
10
|
---
|
|
@@ -88,7 +88,7 @@ chorus-api.sh mcp-tool <tool_name> "$PAYLOAD"
|
|
|
88
88
|
with `$PAYLOAD` built using `json_encode_file` (defined in §3.4). Calling these tools directly from the agent's MCP harness with a hand-typed `content` field is a **protocol violation** for OpenSpec mode and will fail review. Reasons:
|
|
89
89
|
|
|
90
90
|
1. **Token cost.** Re-typing a multi-thousand-line markdown body through the LLM burns input + output tokens for every draft. The wrapper streams bytes through `jq -Rs '.'` — content never enters LLM context. A typical 3-doc proposal mirror via the script costs roughly zero content-tokens; via direct MCP it routinely costs 20k+.
|
|
91
|
-
2. **Byte-equality.** `jq -Rs '.'` is a byte-faithful encoder: backslashes, quotes, newlines, code-fence content, zero-width chars all survive. LLM re-emission has a non-zero failure rate on long markdown — table alignment drifts, fence escapes get "fixed", long URLs wrap. The byte-equality guarantee
|
|
91
|
+
2. **Byte-equality.** `jq -Rs '.'` is a byte-faithful encoder: backslashes, quotes, newlines, code-fence content, zero-width chars all survive. LLM re-emission has a non-zero failure rate on long markdown — table alignment drifts, fence escapes get "fixed", long URLs wrap. The exact byte-equality guarantee holds **only** on the wrapper path.
|
|
92
92
|
3. **Single source of truth.** With the wrapper, the local `openspec/changes/<slug>/*.md` is authoritative and Chorus is a mirror. With agent re-typing, authority splits between local file and whatever the LLM happened to output — a future diff cannot tell which one is correct.
|
|
93
93
|
|
|
94
94
|
### Rule 2 — Halt on error via `chorus_check_response`
|
|
@@ -224,7 +224,7 @@ json_encode_file() {
|
|
|
224
224
|
}
|
|
225
225
|
```
|
|
226
226
|
|
|
227
|
-
Round-trip
|
|
227
|
+
Round-trip verification is exact: a trailing newline difference is real drift and MUST NOT be normalized or ignored.
|
|
228
228
|
|
|
229
229
|
### 3.5 Create the proposal container with the slug provenance line
|
|
230
230
|
|
|
@@ -327,7 +327,11 @@ The hook is read-only; you (the agent) perform the archive:
|
|
|
327
327
|
|
|
328
328
|
3. **Halt on any error** from `openspec archive` or `chorus_pm_update_document`. Print stderr verbatim, post a comment on the proposal recording the failure (`chorus_add_comment` with `targetType: "proposal"`, `targetUuid: <proposalUuid>`), then stop. No retry. Matches §6 "no silent errors." (Comment on the proposal, not the idea: the failure is in archiving proposal-derived specs, and proposals can be `inputType: "document"` with no idea attached.)
|
|
329
329
|
|
|
330
|
-
4. **Confirm success.**
|
|
330
|
+
4. **Confirm success.** Resolve each matching Document UUID and run
|
|
331
|
+
`verify-document-roundtrip.sh <local-spec-path> <document-uuid>`. This
|
|
332
|
+
performs exact-byte comparison and metadata-only mismatch diagnostics. Do
|
|
333
|
+
not replace it with recursive `jq`, `head`, command substitution, or newline
|
|
334
|
+
normalization.
|
|
331
335
|
|
|
332
336
|
**Strict opt-in:** if the verified task is not the last of its idea, OR the proposal description carries no `OpenSpec change slug: <slug>` line, OR the local shell has no `openspec` CLI, the hook exits 0 silently and no archive reminder is injected. Existing free-form behavior is preserved.
|
|
333
337
|
|
|
@@ -240,7 +240,7 @@ cmd_mcp_tool() {
|
|
|
240
240
|
# Step 1: Initialize MCP session
|
|
241
241
|
local init_payload
|
|
242
242
|
init_payload=$(cat <<JSONEOF
|
|
243
|
-
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"chorus-hook","version":"0.14.
|
|
243
|
+
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"chorus-hook","version":"0.14.3"}}}
|
|
244
244
|
JSONEOF
|
|
245
245
|
)
|
|
246
246
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
LOCAL_FILE="${1:?local file required}"
|
|
5
|
+
DOCUMENT_UUID="${2:?document UUID required}"
|
|
6
|
+
[ -f "$LOCAL_FILE" ] || { echo "round-trip verification: local file not found" >&2; exit 2; }
|
|
7
|
+
command -v jq >/dev/null 2>&1 || { echo "round-trip verification: jq is required" >&2; exit 2; }
|
|
8
|
+
|
|
9
|
+
RESPONSE_FILE=$(mktemp)
|
|
10
|
+
REMOTE_FILE=$(mktemp)
|
|
11
|
+
trap 'rm -f "$RESPONSE_FILE" "$REMOTE_FILE"' EXIT
|
|
12
|
+
PAYLOAD=$(jq -cn --arg documentUuid "$DOCUMENT_UUID" '{documentUuid: $documentUuid}')
|
|
13
|
+
|
|
14
|
+
if [ -n "${CHORUS_MCP_CALL_BIN:-}" ]; then
|
|
15
|
+
"$CHORUS_MCP_CALL_BIN" chorus_get_document "$PAYLOAD" >"$RESPONSE_FILE"
|
|
16
|
+
else
|
|
17
|
+
chorus-api.sh mcp-tool chorus_get_document "$PAYLOAD" >"$RESPONSE_FILE"
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
jq -je 'if (.content | type) == "string" then .content else error("top-level .content must be a string") end' \
|
|
21
|
+
"$RESPONSE_FILE" >"$REMOTE_FILE" || { echo "round-trip verification: invalid chorus_get_document response" >&2; exit 3; }
|
|
22
|
+
cmp -s "$LOCAL_FILE" "$REMOTE_FILE" && exit 0
|
|
23
|
+
|
|
24
|
+
hash_file() { command -v sha256sum >/dev/null 2>&1 && sha256sum "$1" | awk '{print $1}' || shasum -a 256 "$1" | awk '{print $1}'; }
|
|
25
|
+
echo "round-trip mismatch:" >&2
|
|
26
|
+
echo " local bytes=$(wc -c <"$LOCAL_FILE" | tr -d '[:space:]') sha256=$(hash_file "$LOCAL_FILE")" >&2
|
|
27
|
+
echo " remote bytes=$(wc -c <"$REMOTE_FILE" | tr -d '[:space:]') sha256=$(hash_file "$REMOTE_FILE")" >&2
|
|
28
|
+
exit 4
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chorus-skill",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.3",
|
|
4
4
|
"description": "Chorus AI Agent collaboration platform skill. Supports PM, Developer, and Admin roles via MCP tools for the Idea-Proposal-Task workflow.",
|
|
5
5
|
"author": "chorus",
|
|
6
6
|
"license": "AGPL-3.0",
|
package/README.md
CHANGED
|
@@ -159,6 +159,7 @@ With no `--cwd`, the daemon serves the single directory it was launched from.
|
|
|
159
159
|
"agentUuid": "00000000-0000-0000-0000-000000000000",
|
|
160
160
|
"agentName": "My Daemon Agent",
|
|
161
161
|
"cwds": ["~/work/repo-a", "~/work/repo-b"],
|
|
162
|
+
"agent": "codex",
|
|
162
163
|
"sigintTimeoutMs": 10000
|
|
163
164
|
}
|
|
164
165
|
```
|
|
@@ -169,6 +170,7 @@ With no `--cwd`, the daemon serves the single directory it was launched from.
|
|
|
169
170
|
| `apiKey` | string | Agent API key (`cho_…`) | `--api-key` flag → `CHORUS_API_KEY` → file |
|
|
170
171
|
| `agentUuid` / `agentName` | string | Authenticated identity (recorded at login) | written by `chorus login` |
|
|
171
172
|
| `cwds` | string[] | Working directories the daemon serves (multi-path) | `--cwd` flag(s) → `CHORUS_DAEMON_CWDS` → file → launch dir |
|
|
173
|
+
| `agent` | string | Local agent backend to wake (`claude-code` / `codex` / `kiro`) | `--agent` flag → `CHORUS_AGENT` → file → `claude-code` |
|
|
172
174
|
| `sigintTimeoutMs` | number | Grace window (ms) after SIGINT before a forceful kill (default `10000`) | `--sigint-timeout` flag → `CHORUS_DAEMON_SIGINT_TIMEOUT` → file → `10000` |
|
|
173
175
|
| `yoloAckAt` | string | Internal — timestamp of a TTY yolo confirmation (managed automatically) | — |
|
|
174
176
|
|
package/cli/claude-spawner.mjs
CHANGED
|
@@ -247,6 +247,10 @@ export function parseNdjsonChunk(buffer, chunk, onObject, onWarn = () => {}) {
|
|
|
247
247
|
export class ClaudeSpawner {
|
|
248
248
|
/** @param {ClaudeSpawnerOptions} [opts] */
|
|
249
249
|
constructor(opts = {}) {
|
|
250
|
+
this.sessionDecision = {
|
|
251
|
+
probeIsAuthoritative: true,
|
|
252
|
+
takeoverCommand: "claude --resume",
|
|
253
|
+
};
|
|
250
254
|
this.claudePath = opts.claudePath ?? null;
|
|
251
255
|
this.spawnImpl = opts.spawnImpl ?? spawn;
|
|
252
256
|
this.logger = opts.logger ?? NOOP_LOGGER;
|
package/cli/client-args.mjs
CHANGED
|
@@ -120,6 +120,8 @@ OPTIONS
|
|
|
120
120
|
--api-key <cho_...> Agent API key (env: CHORUS_API_KEY)
|
|
121
121
|
--agent <type> Local agent backend to wake (env: CHORUS_AGENT)
|
|
122
122
|
(claude-code | codex | kiro; default: claude-code)
|
|
123
|
+
(Also configurable as "agent":"…" in ~/.chorus/daemon.json;
|
|
124
|
+
'chorus daemon install' prompts for it interactively.)
|
|
123
125
|
--yolo Full autonomy for the woken agent (env: CHORUS_YOLO=1)
|
|
124
126
|
(--dangerously-skip-permissions: Bash, file writes, any
|
|
125
127
|
command). This is the DEFAULT permission mode.
|
|
@@ -133,9 +135,12 @@ OPTIONS
|
|
|
133
135
|
from. (Also configurable as "cwds":[…] in ~/.chorus/daemon.json.)
|
|
134
136
|
-d, --detach Run detached in the background (pidfile + logfile)
|
|
135
137
|
-y, --yes Non-interactive install: skip all 'chorus daemon
|
|
136
|
-
install' prompts (credentials
|
|
137
|
-
|
|
138
|
-
install
|
|
138
|
+
install' prompts (credentials, served cwds, and agent
|
|
139
|
+
backend). Credentials are still resolved, persisted, and
|
|
140
|
+
validated; install aborts if none resolve. The agent
|
|
141
|
+
backend defaults to claude-code unless --agent/CHORUS_AGENT
|
|
142
|
+
is set or one is already stored. A non-TTY install behaves
|
|
143
|
+
as if --yes were passed.
|
|
139
144
|
--verbose More detailed per-wake logging
|
|
140
145
|
--sigint-timeout <ms> Grace window after SIGINT before a forceful kill
|
|
141
146
|
(env: CHORUS_DAEMON_SIGINT_TIMEOUT; default 10000)
|
|
@@ -155,11 +160,13 @@ SERVICE (install)
|
|
|
155
160
|
-d' — the daemon self-daemonizes, which systemd cannot track and which loops
|
|
156
161
|
on restart. Before writing the unit, install resolves + persists + validates
|
|
157
162
|
your credentials into ~/.chorus/daemon.json (so the clean boot environment can
|
|
158
|
-
authenticate)
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
+
authenticate), configures the served working directories there too, and prompts
|
|
164
|
+
for the agent backend to wake (claude-code | codex | kiro — Enter accepts the
|
|
165
|
+
claude-code default), then checks that backend's CLI is on PATH. Pass -y/--yes or
|
|
166
|
+
run non-TTY to skip all prompts (credentials are still validated). The served
|
|
167
|
+
cwds AND the chosen agent live in daemon.json — the unit captures only
|
|
168
|
+
--chorus-only, NOT --cwd or --agent. On macOS/Windows install prints a correct
|
|
169
|
+
template you install manually.
|
|
163
170
|
|
|
164
171
|
EXAMPLES
|
|
165
172
|
chorus daemon # Foreground, default yolo (TTY confirms once)
|
package/cli/codex-spawner.mjs
CHANGED
|
@@ -26,6 +26,11 @@ import { statSync } from "node:fs";
|
|
|
26
26
|
import { win32 as pathWin32, posix as pathPosix } from "node:path";
|
|
27
27
|
import { parseNdjsonChunk } from "./claude-spawner.mjs";
|
|
28
28
|
import { getThreadId as defaultGetThreadId, setThreadId as defaultSetThreadId } from "./codex-session-map.mjs";
|
|
29
|
+
import {
|
|
30
|
+
getCodexUsageSnapshot as defaultGetUsageSnapshot,
|
|
31
|
+
normalizeCodexUsageEvent,
|
|
32
|
+
setCodexUsageSnapshot as defaultSetUsageSnapshot,
|
|
33
|
+
} from "./codex-usage-map.mjs";
|
|
29
34
|
|
|
30
35
|
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
31
36
|
|
|
@@ -88,9 +93,11 @@ export function buildCodexArgs({ isNew, threadId, permissionMode }) {
|
|
|
88
93
|
*/
|
|
89
94
|
export function extractThreadId(obj) {
|
|
90
95
|
if (!obj || typeof obj !== "object") return null;
|
|
91
|
-
if (obj.type === "thread.started" && typeof obj.thread_id === "string")
|
|
96
|
+
if (obj.type === "thread.started" && typeof obj.thread_id === "string") {
|
|
97
|
+
return obj.thread_id.trim() || null;
|
|
98
|
+
}
|
|
92
99
|
if (obj.type === "session_meta" && obj.payload && typeof obj.payload.id === "string") {
|
|
93
|
-
return obj.payload.id;
|
|
100
|
+
return obj.payload.id.trim() || null;
|
|
94
101
|
}
|
|
95
102
|
return null;
|
|
96
103
|
}
|
|
@@ -163,11 +170,14 @@ export function resolveSpawnCommand(codexPath, args, platform = process.platform
|
|
|
163
170
|
* @property {NodeJS.Platform} [platform] Injectable for tests; gates POSIX `detached`.
|
|
164
171
|
* @property {(anchor: string) => string|null} [getThreadIdFn] Injectable session-map read.
|
|
165
172
|
* @property {(anchor: string, threadId: string) => void} [setThreadIdFn] Injectable session-map write.
|
|
173
|
+
* @property {(anchor: string, threadId: string) => object|null} [getUsageSnapshotFn]
|
|
174
|
+
* @property {(anchor: string, threadId: string, usage: object) => void} [setUsageSnapshotFn]
|
|
166
175
|
*/
|
|
167
176
|
|
|
168
177
|
export class CodexSpawner {
|
|
169
178
|
/** @param {CodexSpawnerOptions} [opts] */
|
|
170
179
|
constructor(opts = {}) {
|
|
180
|
+
this.sessionDecision = { probeIsAuthoritative: false };
|
|
171
181
|
this.codexPath = opts.codexPath ?? null;
|
|
172
182
|
this.spawnImpl = opts.spawnImpl ?? spawn;
|
|
173
183
|
this.logger = opts.logger ?? NOOP_LOGGER;
|
|
@@ -176,6 +186,8 @@ export class CodexSpawner {
|
|
|
176
186
|
this.platform = opts.platform ?? process.platform;
|
|
177
187
|
this.getThreadIdFn = opts.getThreadIdFn ?? defaultGetThreadId;
|
|
178
188
|
this.setThreadIdFn = opts.setThreadIdFn ?? defaultSetThreadId;
|
|
189
|
+
this.getUsageSnapshotFn = opts.getUsageSnapshotFn ?? defaultGetUsageSnapshot;
|
|
190
|
+
this.setUsageSnapshotFn = opts.setUsageSnapshotFn ?? defaultSetUsageSnapshot;
|
|
179
191
|
this.resolveCodexPathFn = opts.resolveCodexPathFn ?? resolveCodexPath;
|
|
180
192
|
}
|
|
181
193
|
|
|
@@ -198,6 +210,13 @@ export class CodexSpawner {
|
|
|
198
210
|
// waker's Claude transcript probe: a recorded thread id means resume.
|
|
199
211
|
const knownThreadId = anchor ? this.getThreadIdFn(anchor) : null;
|
|
200
212
|
const isNew = !knownThreadId;
|
|
213
|
+
let previousUsage = knownThreadId
|
|
214
|
+
? this.getUsageSnapshotFn(anchor, knownThreadId)
|
|
215
|
+
: null;
|
|
216
|
+
// Existing threads created before this baseline store was introduced cannot
|
|
217
|
+
// yield a trustworthy first delta. Seed once and omit that turn's usage
|
|
218
|
+
// instead of publishing the entire historical cumulative total.
|
|
219
|
+
let needsUsageSeed = Boolean(knownThreadId && !previousUsage);
|
|
201
220
|
|
|
202
221
|
const codexPath = this.codexPath ?? this.resolveCodexPathFn();
|
|
203
222
|
if (!codexPath) {
|
|
@@ -249,6 +268,7 @@ export class CodexSpawner {
|
|
|
249
268
|
|
|
250
269
|
let stdoutBuf = "";
|
|
251
270
|
let observedThreadId = knownThreadId || null;
|
|
271
|
+
let threadIdPersisted = false;
|
|
252
272
|
|
|
253
273
|
child.stdout?.setEncoding?.("utf8");
|
|
254
274
|
child.stdout?.on("data", (chunk) => {
|
|
@@ -257,10 +277,27 @@ export class CodexSpawner {
|
|
|
257
277
|
String(chunk),
|
|
258
278
|
(obj) => {
|
|
259
279
|
const tid = extractThreadId(obj);
|
|
260
|
-
if (tid)
|
|
280
|
+
if (tid) {
|
|
281
|
+
observedThreadId = tid;
|
|
282
|
+
if (isNew && anchor && !threadIdPersisted) {
|
|
283
|
+
threadIdPersisted = true;
|
|
284
|
+
this.setThreadIdFn(anchor, tid);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
let delivered = obj;
|
|
288
|
+
if (obj?.type === "turn.completed" && obj.usage) {
|
|
289
|
+
delivered = needsUsageSeed
|
|
290
|
+
? { ...obj, usage: null }
|
|
291
|
+
: normalizeCodexUsageEvent(obj, previousUsage);
|
|
292
|
+
if (anchor && observedThreadId) {
|
|
293
|
+
this.setUsageSnapshotFn(anchor, observedThreadId, obj.usage);
|
|
294
|
+
}
|
|
295
|
+
previousUsage = obj.usage;
|
|
296
|
+
needsUsageSeed = false;
|
|
297
|
+
}
|
|
261
298
|
if (onMessage) {
|
|
262
299
|
try {
|
|
263
|
-
onMessage(
|
|
300
|
+
onMessage(delivered);
|
|
264
301
|
} catch (err) {
|
|
265
302
|
this.logger.warn(`[Chorus] onMessage handler threw: ${err}`);
|
|
266
303
|
}
|
|
@@ -285,12 +322,6 @@ export class CodexSpawner {
|
|
|
285
322
|
if (code !== 0) {
|
|
286
323
|
this.logger.warn(`[Chorus] codex exited with code ${code}`);
|
|
287
324
|
}
|
|
288
|
-
// Persist anchor→thread_id only on a fresh, successful run that produced a
|
|
289
|
-
// new id — so a later wake for this anchor resumes it. Best-effort; the
|
|
290
|
-
// session map swallows its own IO errors.
|
|
291
|
-
if (code === 0 && isNew && anchor && observedThreadId) {
|
|
292
|
-
this.setThreadIdFn(anchor, observedThreadId);
|
|
293
|
-
}
|
|
294
325
|
resolve({ sessionId: observedThreadId || anchor, exitCode: code, isNew });
|
|
295
326
|
});
|
|
296
327
|
|