@chorus-aidlc/chorus 0.9.4 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +481 -430
- package/.next/standalone/.next/app-path-routes-manifest.json +57 -44
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +33 -33
- package/.next/standalone/.next/routes-manifest.json +33 -17
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +2 -2
- 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]/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 +2 -2
- 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 +2 -2
- 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 -8
- 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 +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +5 -5
- 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 +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +6 -6
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +1 -1
- package/.next/standalone/.next/server/app/admin/companies.rsc +6 -6
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +1 -1
- package/.next/standalone/.next/server/app/admin.rsc +6 -6
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
- 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.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.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.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.js +1 -0
- package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route.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.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +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.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.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.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.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.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route.js.nft.json +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.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.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.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.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/refresh/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route.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.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +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/control/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route.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.js +1 -0
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/events/notifications/route.js +6 -2
- package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
- 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.js +7 -3
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +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.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.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +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.js +1 -0
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +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/mcp/route.js +6 -42
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +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.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.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.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/projects/[uuid]/activity/route.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.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +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.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.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.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +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.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.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.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]/route.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.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.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +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.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.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.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.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.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.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/search/route.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/sessions/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +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 +1 -1
- package/.next/standalone/.next/server/app/index.rsc +5 -5
- package/.next/standalone/.next/server/app/login/admin/page.js +1 -1
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +1 -1
- package/.next/standalone/.next/server/app/login/admin.rsc +6 -6
- package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
- package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +1 -1
- package/.next/standalone/.next/server/app/login/callback.rsc +6 -6
- package/.next/standalone/.next/server/app/login/page.js +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.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 +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +6 -6
- package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.rsc +5 -5
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +6 -6
- 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 +1 -1
- package/.next/standalone/.next/server/app/onboarding.rsc +6 -6
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +1 -1
- package/.next/standalone/.next/server/app/projects.rsc +7 -7
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +7 -7
- package/.next/standalone/.next/server/app-paths-manifest.json +57 -44
- package/.next/standalone/.next/server/chunks/1064.js +1 -0
- package/.next/standalone/.next/server/chunks/1596.js +13 -0
- package/.next/standalone/.next/server/chunks/2213.js +1 -0
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3219.js +2 -0
- package/.next/standalone/.next/server/chunks/3371.js +1 -0
- package/.next/standalone/.next/server/chunks/3419.js +1 -0
- package/.next/standalone/.next/server/chunks/369.js +1 -0
- package/.next/standalone/.next/server/chunks/4638.js +1 -0
- package/.next/standalone/.next/server/chunks/4711.js +530 -0
- package/.next/standalone/.next/server/chunks/4958.js +1 -1
- package/.next/standalone/.next/server/chunks/5039.js +1 -0
- package/.next/standalone/.next/server/chunks/5300.js +1 -1
- package/.next/standalone/.next/server/chunks/5631.js +1 -0
- package/.next/standalone/.next/server/chunks/6044.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/6461.js +1 -0
- package/.next/standalone/.next/server/chunks/6712.js +1 -0
- package/.next/standalone/.next/server/chunks/7002.js +1 -1
- package/.next/standalone/.next/server/chunks/7063.js +2 -2
- package/.next/standalone/.next/server/chunks/7258.js +37 -0
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7578.js +2 -2
- package/.next/standalone/.next/server/chunks/7867.js +1 -0
- package/.next/standalone/.next/server/chunks/7897.js +1 -0
- package/.next/standalone/.next/server/chunks/8012.js +1 -0
- package/.next/standalone/.next/server/chunks/8245.js +31 -0
- package/.next/standalone/.next/server/chunks/8322.js +1 -1
- package/.next/standalone/.next/server/chunks/8551.js +1 -1
- package/.next/standalone/.next/server/chunks/9015.js +1 -1
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/937.js +16 -2
- package/.next/standalone/.next/server/chunks/9629.js +1 -0
- package/.next/standalone/.next/server/chunks/9725.js +1 -0
- package/.next/standalone/.next/server/instrumentation.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/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/404.html +1 -1
- 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/server/src/middleware.js +2 -2
- package/.next/standalone/.next/static/519aK55QLHaVN7b1TVDkB/_buildManifest.js +1 -0
- package/.next/standalone/.next/static/chunks/1217-323cc20b73ebfde9.js +1 -0
- package/.next/standalone/.next/static/chunks/{11207-8f4b154804f5a66f.js → 15183-5734d279b26e9414.js} +2 -2
- package/.next/standalone/.next/static/chunks/1879-7a8b283283218df2.js +1 -0
- package/.next/standalone/.next/static/chunks/19276-50b367d7b93d5f34.js +1 -0
- package/.next/standalone/.next/static/chunks/23466-e1176a6d814f4897.js +1 -0
- package/.next/standalone/.next/static/chunks/38040-a8687f86dd8e9d67.js +1 -0
- package/.next/standalone/.next/static/chunks/4860.43f5ad8a3aaed0e8.js +1 -0
- package/.next/standalone/.next/static/chunks/58245-b2ea112ace9624d2.js +1 -0
- package/.next/standalone/.next/static/chunks/59296-783831c43aa0162e.js +1 -0
- package/.next/standalone/.next/static/chunks/60648-36ccbee4ce232d52.js +1 -0
- package/.next/standalone/.next/static/chunks/60694-68232120903209df.js +1 -0
- package/.next/standalone/.next/static/chunks/64648-81f03be6f9793ab9.js +1 -0
- package/.next/standalone/.next/static/chunks/{94655-1c75e0590a66215e.js → 66969-12f0b22c51f5a410.js} +1 -1
- package/.next/standalone/.next/static/chunks/70536-b8bf71098ae11f07.js +1 -0
- package/.next/standalone/.next/static/chunks/71350-88c2649fc693c1e8.js +1 -0
- package/.next/standalone/.next/static/chunks/78389-b32edc6bd5c570a9.js +1 -0
- package/.next/standalone/.next/static/chunks/78584-eb2fa8cf2f266329.js +1 -0
- package/.next/standalone/.next/static/chunks/78917-150ed14a99844aab.js +1 -0
- package/.next/standalone/.next/static/chunks/8574-b9739eb8d054c793.js +1 -0
- package/.next/standalone/.next/static/chunks/93346-5489d90bc2d57190.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.0768feb3a08c7da3.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-0a28456fea4ce95a.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/{page-63a6a5b6cf9ecf87.js → page-a79969c5c9aadacd.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-e00752a72c31663f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-ef82b871895245ea.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-2c9bcbd11ddb8661.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-630b168598513ce8.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-99639479cc98965f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-335f2450e44a0fba.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-4a191d69b2b6e880.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-0faebb478be4c85d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-c36345b80cc5bf5c.js → page-583e58d4d689d38b.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2e8fcb72687100df.js +1 -0
- package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/page-cc2fe0c5b749cd2f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/admin/companies/new/{page-55fb2107f955c9ed.js → page-4f3b3c449c61f6d2.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/admin/companies/page-ef720c2b0856166c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/admin/page-0cc8cf246db43e5d.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/session/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/comments/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/health/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/search/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
- package/.next/standalone/.next/static/chunks/app/layout-9963339572e2e64e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/admin/page-d470135f7aab6c5e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/callback/{page-48a34c31a0f8e58c.js → page-0edd93f50cb4f6ea.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/login/page-c64b8d40a0781b4c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-e0444ad8b50121f5.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/page-e9a69a0c537c704f.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-4a8c75a0d40c2106.js → webpack-87284a4533d77eaf.js} +1 -1
- package/.next/standalone/.next/static/css/{84edd78de243cde6.css → b496025c9cd768cc.css} +1 -1
- package/.next/standalone/.next/static/css/e78b3c856420a09f.css +1 -0
- package/.next/standalone/.next/static/media/013b72fa676f92e0-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/2b5b02fc7e511755-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/65f03d54ccadf4a8-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/7d4881bb7e1bf84d-s.p.woff2 +0 -0
- package/.next/standalone/.next/static/media/b9408752a0c24fb9-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/e038a29029a234f2-s.woff2 +0 -0
- package/.next/standalone/package.json +3 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +2 -2
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +19 -3
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
- 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/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +19 -3
- 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 +29 -0
- package/README.zh.md +29 -0
- package/chorus.mjs +120 -16
- package/cli/backfill.mjs +190 -0
- package/cli/chorus-client.mjs +154 -0
- package/cli/claude-spawner.mjs +415 -0
- package/cli/client-args.mjs +146 -0
- package/cli/control-handler.mjs +180 -0
- package/cli/credentials.mjs +155 -0
- package/cli/daemon-agent.mjs +38 -0
- package/cli/daemon-banner.mjs +80 -0
- package/cli/daemon-config.mjs +84 -0
- package/cli/daemon-lifecycle.mjs +191 -0
- package/cli/daemon-permission-mode.mjs +68 -0
- package/cli/daemon-rest-client.mjs +272 -0
- package/cli/daemon.mjs +572 -0
- package/cli/event-router.mjs +248 -0
- package/cli/interrupt-reporter.mjs +87 -0
- package/cli/lineage.mjs +155 -0
- package/cli/login.mjs +151 -0
- package/cli/mcp-config.mjs +58 -0
- package/cli/process-killer.mjs +205 -0
- package/cli/prompts.mjs +273 -0
- package/cli/sse-listener.mjs +258 -0
- package/cli/turn-reporter.mjs +75 -0
- package/cli/upload-hooks.mjs +400 -0
- package/cli/wake-queue.mjs +121 -0
- package/cli/waker.mjs +475 -0
- package/package.json +3 -1
- package/prisma/migrations/20260611101056_add_idea_lineage/migration.sql +5 -0
- package/prisma/migrations/20260615082309_add_daemon_connection/migration.sql +37 -0
- package/prisma/migrations/20260616152622_add_daemon_task_execution/migration.sql +28 -0
- package/prisma/migrations/20260617013334_generalize_daemon_execution_to_any_resource/migration.sql +38 -0
- package/prisma/migrations/20260618022828_add_daemon_execution_interrupted/migration.sql +2 -0
- package/prisma/migrations/20260619055322_daemon_session_conversation/migration.sql +77 -0
- package/prisma/schema.prisma +368 -185
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js +0 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js +0 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/chunks/1059.js +0 -1
- package/.next/standalone/.next/server/chunks/1165.js +0 -1
- package/.next/standalone/.next/server/chunks/1615.js +0 -31
- package/.next/standalone/.next/server/chunks/162.js +0 -16
- package/.next/standalone/.next/server/chunks/1871.js +0 -1
- package/.next/standalone/.next/server/chunks/2909.js +0 -98
- package/.next/standalone/.next/server/chunks/2990.js +0 -1
- package/.next/standalone/.next/server/chunks/3139.js +0 -1
- package/.next/standalone/.next/server/chunks/324.js +0 -1
- package/.next/standalone/.next/server/chunks/3555.js +0 -1
- package/.next/standalone/.next/server/chunks/3576.js +0 -1
- package/.next/standalone/.next/server/chunks/3611.js +0 -158
- package/.next/standalone/.next/server/chunks/4090.js +0 -13
- package/.next/standalone/.next/server/chunks/4343.js +0 -1
- package/.next/standalone/.next/server/chunks/4974.js +0 -1
- package/.next/standalone/.next/server/chunks/5491.js +0 -1
- package/.next/standalone/.next/server/chunks/5541.js +0 -1
- package/.next/standalone/.next/server/chunks/5561.js +0 -7
- package/.next/standalone/.next/server/chunks/6643.js +0 -1
- package/.next/standalone/.next/server/chunks/6767.js +0 -1
- package/.next/standalone/.next/server/chunks/7228.js +0 -2
- package/.next/standalone/.next/server/chunks/7462.js +0 -255
- package/.next/standalone/.next/server/chunks/7621.js +0 -1
- package/.next/standalone/.next/server/chunks/8144.js +0 -1
- package/.next/standalone/.next/server/chunks/8637.js +0 -1
- package/.next/standalone/.next/server/chunks/896.js +0 -1
- package/.next/standalone/.next/server/chunks/9508.js +0 -2
- package/.next/standalone/.next/server/chunks/9615.js +0 -1
- package/.next/standalone/.next/static/YJZurE1onX9K-RDNIplc5/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/19126-12ce8ade288ce1dc.js +0 -1
- package/.next/standalone/.next/static/chunks/19898-2a3d83a3996794cd.js +0 -1
- package/.next/standalone/.next/static/chunks/20051-d9233fd4578d66cc.js +0 -1
- package/.next/standalone/.next/static/chunks/21932-bce5ba937d1603e1.js +0 -1
- package/.next/standalone/.next/static/chunks/23466-842c126491b753bc.js +0 -1
- package/.next/standalone/.next/static/chunks/35486-592daa5c9fdf701d.js +0 -1
- package/.next/standalone/.next/static/chunks/37880-4395be5cee4112fa.js +0 -1
- package/.next/standalone/.next/static/chunks/3853-f94afe2f83089c0d.js +0 -1
- package/.next/standalone/.next/static/chunks/4842-95cf4b7efd540e89.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.1bebb2a898b170f6.js +0 -1
- package/.next/standalone/.next/static/chunks/51841-0e4e0e63b437dcfd.js +0 -1
- package/.next/standalone/.next/static/chunks/52206-6048525f57a21502.js +0 -1
- package/.next/standalone/.next/static/chunks/55469-ed5ff019ff71ef59.js +0 -1
- package/.next/standalone/.next/static/chunks/59296-4fa84fe82e2c7789.js +0 -1
- package/.next/standalone/.next/static/chunks/60011-b602fea2afba6992.js +0 -1
- package/.next/standalone/.next/static/chunks/70093-0ff6fd59445b5cb9.js +0 -1
- package/.next/standalone/.next/static/chunks/93346-c4468893138daac7.js +0 -1
- package/.next/standalone/.next/static/chunks/95627-8d9f6d2d88f7a641.js +0 -1
- package/.next/standalone/.next/static/chunks/95750-3d0d1d48995d1088.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.13c8ac5da1ddabe9.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-b55a8d6d9bd27276.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-fd10bca891f0f73a.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-2e000a7010d1e9ea.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-75e42d130404ca2b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page-6a38c21b164cdc07.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/page-48c840cb3011bf97.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-7ec535fac7bbc75d.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-414b398806324ad1.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8f91ed174c14d5f0.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-f6814f25bbacdbea.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-92e8980da0d98d48.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-ab87cbb18d0ee538.js +0 -1
- package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/page-81682b4aa6859615.js +0 -1
- package/.next/standalone/.next/static/chunks/app/admin/companies/page-bbd92a7b214ddbf5.js +0 -1
- package/.next/standalone/.next/static/chunks/app/admin/page-c4167418611b4a6b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/session/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/comments/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/health/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/search/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-99297f77cce24151.js +0 -1
- package/.next/standalone/.next/static/chunks/app/layout-482dee7dace72c88.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/admin/page-4e72e6e4327ee7cd.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/page-dcb689dfe6e69879.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-ee9bda8bfc4e0697.js +0 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/page-922a196db6eb2385.js +0 -1
- package/.next/standalone/.next/static/css/bfe962487ee66da7.css +0 -1
- package/.next/standalone/.next/static/media/0f1bdadaf30e2d5f-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/2c34d62a75506231-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/601f5c280d60caca-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/a115172161b307bb-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/d100b2a099e34044-s.woff2 +0 -0
- package/.next/standalone/.next/static/media/f5271587012faf78-s.p.woff2 +0 -0
- /package/.next/standalone/.next/static/{YJZurE1onX9K-RDNIplc5 → 519aK55QLHaVN7b1TVDkB}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// cli/daemon-lifecycle.mjs
|
|
2
|
+
// Background (`-d`) run + lifecycle subcommands (stop/status/restart/logs) for
|
|
3
|
+
// `chorus daemon`. Pure Node, cross-platform, NO native dependencies and NO
|
|
4
|
+
// `shell:true` — mirrors the platform-gated spawn approach in claude-spawner.mjs
|
|
5
|
+
// (POSIX detached process-group leader + unref + stdio→logfile; Windows
|
|
6
|
+
// windowsHide, no new console). All IO is injectable so both platform branches
|
|
7
|
+
// are unit-testable from a single host.
|
|
8
|
+
//
|
|
9
|
+
// State files live alongside the credentials in ~/.chorus:
|
|
10
|
+
// pidfile ~/.chorus/daemon.pid (the background daemon's pid)
|
|
11
|
+
// logfile ~/.chorus/daemon.log (its redirected stdout+stderr)
|
|
12
|
+
|
|
13
|
+
import { spawn } from "node:child_process";
|
|
14
|
+
import {
|
|
15
|
+
existsSync,
|
|
16
|
+
mkdirSync,
|
|
17
|
+
openSync,
|
|
18
|
+
readFileSync,
|
|
19
|
+
unlinkSync,
|
|
20
|
+
writeFileSync,
|
|
21
|
+
} from "node:fs";
|
|
22
|
+
import { homedir } from "node:os";
|
|
23
|
+
import { dirname, join } from "node:path";
|
|
24
|
+
|
|
25
|
+
/** Default IO bundle — overridable per-call for tests (no real disk/process). */
|
|
26
|
+
function defaultIO() {
|
|
27
|
+
return {
|
|
28
|
+
existsSync,
|
|
29
|
+
mkdirSync,
|
|
30
|
+
openSync,
|
|
31
|
+
readFileSync,
|
|
32
|
+
unlinkSync,
|
|
33
|
+
writeFileSync,
|
|
34
|
+
spawn,
|
|
35
|
+
// process.kill with signal 0 is the portable liveness probe (no signal sent).
|
|
36
|
+
kill: (pid, sig) => process.kill(pid, sig),
|
|
37
|
+
platform: process.platform,
|
|
38
|
+
home: homedir(),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** ~/.chorus/daemon.pid */
|
|
43
|
+
export function pidFilePath(io = defaultIO()) {
|
|
44
|
+
return join(io.home ?? homedir(), ".chorus", "daemon.pid");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** ~/.chorus/daemon.log */
|
|
48
|
+
export function logFilePath(io = defaultIO()) {
|
|
49
|
+
return join(io.home ?? homedir(), ".chorus", "daemon.log");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Read the recorded pid, or null when absent / unreadable / malformed.
|
|
54
|
+
* @param {object} [io]
|
|
55
|
+
* @returns {number|null}
|
|
56
|
+
*/
|
|
57
|
+
export function readPid(io = defaultIO()) {
|
|
58
|
+
const path = pidFilePath(io);
|
|
59
|
+
try {
|
|
60
|
+
if (!io.existsSync(path)) return null;
|
|
61
|
+
const raw = io.readFileSync(path, "utf8");
|
|
62
|
+
const pid = Number.parseInt(String(raw).trim(), 10);
|
|
63
|
+
return Number.isInteger(pid) && pid > 0 ? pid : null;
|
|
64
|
+
} catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Is `pid` a live process? Uses signal 0 (sends nothing; throws ESRCH when the
|
|
71
|
+
* pid is gone, EPERM when alive-but-not-ours → still "alive").
|
|
72
|
+
* @param {number} pid @param {object} [io]
|
|
73
|
+
*/
|
|
74
|
+
export function processAlive(pid, io = defaultIO()) {
|
|
75
|
+
if (!Number.isInteger(pid) || pid <= 0) return false;
|
|
76
|
+
try {
|
|
77
|
+
io.kill(pid, 0);
|
|
78
|
+
return true;
|
|
79
|
+
} catch (err) {
|
|
80
|
+
return err && err.code === "EPERM";
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Current daemon status from the pidfile.
|
|
86
|
+
* @param {object} [io]
|
|
87
|
+
* @returns {{ running: boolean, pid: number|null, stale: boolean }}
|
|
88
|
+
* `stale` = a pidfile exists but its pid is dead (left behind by a crash).
|
|
89
|
+
*/
|
|
90
|
+
export function isRunning(io = defaultIO()) {
|
|
91
|
+
const pid = readPid(io);
|
|
92
|
+
if (pid == null) return { running: false, pid: null, stale: false };
|
|
93
|
+
const alive = processAlive(pid, io);
|
|
94
|
+
return { running: alive, pid, stale: !alive };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Ensure ~/.chorus exists for the pid/log files. */
|
|
98
|
+
function ensureDir(path, io) {
|
|
99
|
+
io.mkdirSync(dirname(path), { recursive: true });
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Spawn the daemon DETACHED in the background. The caller has already completed
|
|
104
|
+
* any interactive preflight (credential completion + yolo confirm) in the
|
|
105
|
+
* foreground, so the child starts non-interactively. stdout+stderr are
|
|
106
|
+
* redirected to the logfile; the child pid is written to the pidfile; the child
|
|
107
|
+
* is unref'd so the parent can exit.
|
|
108
|
+
*
|
|
109
|
+
* Refuses to start a second daemon when a live pid is already recorded (returns
|
|
110
|
+
* `{ started:false, alreadyRunning:true, pid }`). A stale pidfile (dead pid) is
|
|
111
|
+
* overwritten.
|
|
112
|
+
*
|
|
113
|
+
* @param {{ nodePath: string, args: string[], env?: Record<string,string|undefined>, cwd?: string }} spec
|
|
114
|
+
* `nodePath` (e.g. process.execPath) runs `args` (e.g. ["/path/chorus.mjs","daemon",...]
|
|
115
|
+
* WITHOUT `-d`). The env should carry the detached marker so the child skips preflight.
|
|
116
|
+
* @param {object} [io]
|
|
117
|
+
* @returns {{ started: boolean, pid?: number, alreadyRunning?: boolean, logFile: string, pidFile: string }}
|
|
118
|
+
*/
|
|
119
|
+
export function startBackground(spec, io = defaultIO()) {
|
|
120
|
+
const pidFile = pidFilePath(io);
|
|
121
|
+
const logFile = logFilePath(io);
|
|
122
|
+
|
|
123
|
+
const status = isRunning(io);
|
|
124
|
+
if (status.running) {
|
|
125
|
+
return { started: false, alreadyRunning: true, pid: status.pid, logFile, pidFile };
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
ensureDir(logFile, io);
|
|
129
|
+
// Append so restarts keep history; the child owns the fd after spawn.
|
|
130
|
+
const out = io.openSync(logFile, "a");
|
|
131
|
+
|
|
132
|
+
const child = io.spawn(spec.nodePath, spec.args, {
|
|
133
|
+
cwd: spec.cwd ?? process.cwd(),
|
|
134
|
+
env: { ...(spec.env ?? {}) },
|
|
135
|
+
// POSIX: detached:true makes the child a process-group leader so it survives
|
|
136
|
+
// the parent and the controlling terminal closing. Windows: detached spawns
|
|
137
|
+
// its own process group too; windowsHide prevents a new console window.
|
|
138
|
+
detached: true,
|
|
139
|
+
windowsHide: true,
|
|
140
|
+
// No stdin; stdout+stderr → the logfile fd. shell:false (default) — no shell
|
|
141
|
+
// word-splitting / injection surface (args is an array).
|
|
142
|
+
stdio: ["ignore", out, out],
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Let the parent exit without waiting on the child (POSIX + Windows).
|
|
146
|
+
child.unref?.();
|
|
147
|
+
|
|
148
|
+
ensureDir(pidFile, io);
|
|
149
|
+
io.writeFileSync(pidFile, `${child.pid}\n`, { mode: 0o600 });
|
|
150
|
+
return { started: true, pid: child.pid, logFile, pidFile };
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Stop the recorded background daemon: signal it, then remove the pidfile.
|
|
155
|
+
* @param {object} [io]
|
|
156
|
+
* @returns {{ stopped: boolean, pid: number|null, reason: "stopped"|"not-running"|"stale-cleared"|"error", message: string }}
|
|
157
|
+
*/
|
|
158
|
+
export function stopDaemon(io = defaultIO()) {
|
|
159
|
+
const pidFile = pidFilePath(io);
|
|
160
|
+
const status = isRunning(io);
|
|
161
|
+
if (status.pid == null) {
|
|
162
|
+
return { stopped: false, pid: null, reason: "not-running", message: "no daemon is running (no pidfile)" };
|
|
163
|
+
}
|
|
164
|
+
if (!status.running) {
|
|
165
|
+
// Stale pidfile — clean it up, report clearly (no silent failure).
|
|
166
|
+
try { io.unlinkSync(pidFile); } catch { /* best-effort */ }
|
|
167
|
+
return { stopped: false, pid: status.pid, reason: "stale-cleared", message: `no live daemon (cleared stale pidfile for pid ${status.pid})` };
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
io.kill(status.pid, "SIGTERM");
|
|
171
|
+
} catch (err) {
|
|
172
|
+
return { stopped: false, pid: status.pid, reason: "error", message: `failed to signal pid ${status.pid}: ${err instanceof Error ? err.message : String(err)}` };
|
|
173
|
+
}
|
|
174
|
+
try { io.unlinkSync(pidFile); } catch { /* best-effort */ }
|
|
175
|
+
return { stopped: true, pid: status.pid, reason: "stopped", message: `stopped daemon (pid ${status.pid})` };
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Read the daemon logfile contents (for `chorus daemon logs`).
|
|
180
|
+
* @param {object} [io]
|
|
181
|
+
* @returns {{ ok: boolean, content?: string, message?: string }}
|
|
182
|
+
*/
|
|
183
|
+
export function readLog(io = defaultIO()) {
|
|
184
|
+
const logFile = logFilePath(io);
|
|
185
|
+
try {
|
|
186
|
+
if (!io.existsSync(logFile)) return { ok: false, message: `no log file at ${logFile}` };
|
|
187
|
+
return { ok: true, content: io.readFileSync(logFile, "utf8") };
|
|
188
|
+
} catch (err) {
|
|
189
|
+
return { ok: false, message: `could not read ${logFile}: ${err instanceof Error ? err.message : String(err)}` };
|
|
190
|
+
}
|
|
191
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// cli/daemon-permission-mode.mjs
|
|
2
|
+
// Pure resolution of the daemon's permission posture for the woken agent.
|
|
3
|
+
// The DEFAULT is now `yolo` (full autonomy) — reversing the prior `chorus`-only
|
|
4
|
+
// default. No confirmation needed; the startup banner prominently warns users
|
|
5
|
+
// and shows how to opt out with --chorus-only.
|
|
6
|
+
//
|
|
7
|
+
// This module is PURE: `resolvePermissionMode` does no IO and returns a
|
|
8
|
+
// decision object. Zero dependencies — ships in the npm package alongside chorus.mjs.
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @typedef {"yolo"|"chorus"} PermissionMode
|
|
12
|
+
* "yolo" → woken agent gets full autonomy (--dangerously-skip-permissions).
|
|
13
|
+
* "chorus" → restricted: only mcp__chorus__* tools (no Bash / file edits).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {Object} PermissionDecision
|
|
18
|
+
* @property {PermissionMode} mode The resolved posture.
|
|
19
|
+
* @property {boolean} needConfirm True iff the caller must obtain an
|
|
20
|
+
* interactive TTY y/N confirmation AND persist an ack before starting yolo.
|
|
21
|
+
* @property {boolean} warnUnattended True iff yolo is starting on a non-TTY
|
|
22
|
+
* (unattended) — the caller must emit exactly one prominent ⚠ warning line.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the permission posture from the layered inputs. Precedence:
|
|
27
|
+
* 1. Explicit restricted request (`--chorus-only` / CHORUS_CHORUS_ONLY=1) wins
|
|
28
|
+
* outright → `chorus`, never needs confirmation.
|
|
29
|
+
* 2. Otherwise the posture is `yolo` (the default; `--yolo` /
|
|
30
|
+
* CHORUS_YOLO=1 select it too, but it is also the no-flag default).
|
|
31
|
+
* Yolo starts immediately with NO confirmation prompt — the warning banner
|
|
32
|
+
* tells users how to opt out.
|
|
33
|
+
*
|
|
34
|
+
* `CHORUS_YOLO=0`/`"false"` is treated as an explicit opt-OUT of yolo (→
|
|
35
|
+
* `chorus`), symmetric with the `=1`/`"true"` opt-in, so the existing env knob
|
|
36
|
+
* keeps working after the default flip.
|
|
37
|
+
*
|
|
38
|
+
* @param {{ yolo?: boolean, chorusOnly?: boolean }} flags
|
|
39
|
+
* @param {Record<string, string|undefined>} env
|
|
40
|
+
* @param {{ isTTY: boolean, hasAck: boolean }} ctx
|
|
41
|
+
* @returns {PermissionDecision}
|
|
42
|
+
*/
|
|
43
|
+
export function resolvePermissionMode(flags, env, ctx) {
|
|
44
|
+
const envChorusOnly = env.CHORUS_CHORUS_ONLY === "1" || env.CHORUS_CHORUS_ONLY === "true";
|
|
45
|
+
const envYoloOff = env.CHORUS_YOLO === "0" || env.CHORUS_YOLO === "false";
|
|
46
|
+
|
|
47
|
+
// 1. Explicit restricted request wins — flag, env, or an explicit CHORUS_YOLO opt-out.
|
|
48
|
+
if (flags.chorusOnly || envChorusOnly || envYoloOff) {
|
|
49
|
+
return { mode: "chorus", needConfirm: false, warnUnattended: false };
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// 2. Default + explicit yolo both resolve to yolo with NO confirmation needed.
|
|
53
|
+
// Always warn (both TTY and non-TTY) so users know how to restrict.
|
|
54
|
+
return { mode: "yolo", needConfirm: false, warnUnattended: true };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The prominent warning shown whenever yolo is active. Names `--chorus-only` as
|
|
59
|
+
* the opt-out switch. Shown in the startup banner for both TTY and non-TTY.
|
|
60
|
+
* @returns {string}
|
|
61
|
+
*/
|
|
62
|
+
export function yoloWarningLine() {
|
|
63
|
+
return (
|
|
64
|
+
"⚠ PERMISSION MODE: YOLO — the woken agent has FULL autonomy (Bash, file writes, " +
|
|
65
|
+
"any command) under this daemon's API key. Run only in a trusted/sandboxed " +
|
|
66
|
+
"environment. To restrict permissions, use --chorus-only (or CHORUS_CHORUS_ONLY=1)."
|
|
67
|
+
);
|
|
68
|
+
}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// cli/daemon-rest-client.mjs
|
|
2
|
+
// Shared, host-agnostic pure-REST client for the Chorus daemon → server reporting
|
|
3
|
+
// surface (`/api/daemon/*`). It is the SINGLE SOURCE OF TRUTH for the payload shapes
|
|
4
|
+
// the existing server endpoints accept, so the two daemon hosts — the chorus CLI daemon
|
|
5
|
+
// (`cli/daemon.mjs`) and the OpenClaw plugin — cannot drift in the wire contract.
|
|
6
|
+
//
|
|
7
|
+
// The five operations and their EXACT server payload shapes (verified against
|
|
8
|
+
// src/app/api/daemon/*/route.ts — the server is NOT changed by this work):
|
|
9
|
+
// turnAdvance → POST /api/daemon/turn-advance
|
|
10
|
+
// { connectionUuid, sessionId, status, entityType?, entityUuid? }
|
|
11
|
+
// transcript → POST /api/daemon/transcript
|
|
12
|
+
// { sessionId, messages: [{ role, text }] }
|
|
13
|
+
// executionState → POST /api/daemon/execution-state
|
|
14
|
+
// { connectionUuid, executions: [{ entityType, entityUuid,
|
|
15
|
+
// rootIdeaUuid|null, status,
|
|
16
|
+
// startedAt|null }] }
|
|
17
|
+
// reportInterrupt → POST /api/daemon/report-interrupt
|
|
18
|
+
// { connectionUuid, entityType, entityUuid, reason }
|
|
19
|
+
// readPendingTurns → GET /api/daemon/pending-turns?connectionUuid=…
|
|
20
|
+
// → { turns: [{ turnUuid, sessionId, directIdeaUuid, trigger,
|
|
21
|
+
// promptText }] }
|
|
22
|
+
//
|
|
23
|
+
// HARD CONSTRAINTS (this module is consumed verbatim by the OpenClaw plugin too):
|
|
24
|
+
// • ZERO daemon-host coupling — no child_process, no `claude` spawn, no stream-json
|
|
25
|
+
// parsing, no OpenClaw SDK import. Its only outbound effect is HTTP via the
|
|
26
|
+
// injected `fetchImpl` (global fetch on Node 18+). Adds NO new npm dependency
|
|
27
|
+
// (CLAUDE.md pitfall #9).
|
|
28
|
+
// • Bearer-only auth: every request carries `Authorization: Bearer <apiKey>`.
|
|
29
|
+
// • NO SILENT ERRORS (project policy): a network error, a non-2xx response, or an
|
|
30
|
+
// empty/bad body where a result is expected is LOGGED WITH ITS CAUSE and SURFACED to
|
|
31
|
+
// the caller via a structured result object — never swallowed into a silent success.
|
|
32
|
+
// • A failed report MUST NOT crash the run: every method RESOLVES (never rejects) with
|
|
33
|
+
// a `{ ok: false, ... }` result so a fire-and-forget caller can `await` it safely.
|
|
34
|
+
// The callers decide whether to react; the failure is already visible in the log.
|
|
35
|
+
|
|
36
|
+
const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @typedef {Object} DaemonRestResult
|
|
40
|
+
* @property {boolean} ok True only on a 2xx response (and, for reads, a
|
|
41
|
+
* well-formed body). False on network error, non-2xx,
|
|
42
|
+
* or a malformed/empty body.
|
|
43
|
+
* @property {number|null} status HTTP status when a response was received; null on a
|
|
44
|
+
* pre-flight skip or a network-level error.
|
|
45
|
+
* @property {string} [error] Human-readable failure cause (also logged). Absent on
|
|
46
|
+
* success.
|
|
47
|
+
* @property {boolean} [skipped] True when the call was intentionally not issued (e.g.
|
|
48
|
+
* an empty transcript batch); not an error.
|
|
49
|
+
* @property {*} [data] Parsed response payload for read operations
|
|
50
|
+
* (`readPendingTurns` → `{ turns: [...] }`).
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Build the shared daemon REST client. The inputs are entirely host-agnostic, which is
|
|
55
|
+
* exactly why the same module serves both daemon hosts.
|
|
56
|
+
*
|
|
57
|
+
* @param {{
|
|
58
|
+
* url: string, Chorus base URL (a trailing slash is normalized
|
|
59
|
+
* away so callers may pass either form).
|
|
60
|
+
* apiKey: string, `cho_` agent API key for Bearer auth.
|
|
61
|
+
* getConnectionUuid?: () => (string|null), The daemon's registered connection uuid,
|
|
62
|
+
* learned from the SSE handshake. Read LAZILY on
|
|
63
|
+
* every call so construction order does not matter.
|
|
64
|
+
* The connection-scoped operations (turnAdvance,
|
|
65
|
+
* executionState, reportInterrupt, readPendingTurns)
|
|
66
|
+
* require it; a null value skips the call (logged).
|
|
67
|
+
* fetchImpl?: typeof fetch, Injectable for tests (defaults to global fetch).
|
|
68
|
+
* logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
|
|
69
|
+
* }} opts
|
|
70
|
+
* @returns {{
|
|
71
|
+
* turnAdvance: (p: { sessionId: string, status: string, entityType?: string|null, entityUuid?: string|null }) => Promise<DaemonRestResult>,
|
|
72
|
+
* transcript: (p: { sessionId: string, messages: Array<{ role: string, text: string }> }) => Promise<DaemonRestResult>,
|
|
73
|
+
* executionState: (p: { executions: Array<Record<string, unknown>> }) => Promise<DaemonRestResult>,
|
|
74
|
+
* reportInterrupt: (p: { entityType: string, entityUuid: string, reason: string }) => Promise<DaemonRestResult>,
|
|
75
|
+
* readPendingTurns: () => Promise<DaemonRestResult>,
|
|
76
|
+
* }}
|
|
77
|
+
*/
|
|
78
|
+
export function createDaemonRestClient(opts) {
|
|
79
|
+
const url = opts.url.replace(/\/$/, "");
|
|
80
|
+
const apiKey = opts.apiKey;
|
|
81
|
+
const getConnectionUuid = opts.getConnectionUuid ?? (() => null);
|
|
82
|
+
const fetchImpl = opts.fetchImpl ?? globalThis.fetch;
|
|
83
|
+
const logger = opts.logger ?? NOOP_LOGGER;
|
|
84
|
+
|
|
85
|
+
const jsonHeaders = {
|
|
86
|
+
Authorization: `Bearer ${apiKey}`,
|
|
87
|
+
"Content-Type": "application/json",
|
|
88
|
+
Accept: "application/json",
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Issue one daemon report. Owns the transport + the no-silent-errors contract that is
|
|
93
|
+
* IDENTICAL across all four POST endpoints; only the `op` label (used in the log line)
|
|
94
|
+
* and the path differ. Never throws — returns a structured {@link DaemonRestResult}.
|
|
95
|
+
*
|
|
96
|
+
* @param {string} op Operation label for the log line (matches each endpoint's
|
|
97
|
+
* established wording, e.g. "turn-advance",
|
|
98
|
+
* "execution-state upload", "transcript upload",
|
|
99
|
+
* "report-interrupt").
|
|
100
|
+
* @param {string} path Endpoint path, e.g. "/api/daemon/turn-advance".
|
|
101
|
+
* @param {unknown} body JSON-serializable request body.
|
|
102
|
+
* @param {string} [successLog] Optional info line on success.
|
|
103
|
+
* @param {string} [context] Optional " for <entity>"-style suffix appended AFTER the
|
|
104
|
+
* `<op> request failed` / `<op> returned <status>` core, so the
|
|
105
|
+
* failing entity stays visible in the log without disturbing the
|
|
106
|
+
* established op-prefixed message.
|
|
107
|
+
* @returns {Promise<DaemonRestResult>}
|
|
108
|
+
*/
|
|
109
|
+
async function post(op, path, body, successLog, context = "") {
|
|
110
|
+
let response;
|
|
111
|
+
try {
|
|
112
|
+
response = await fetchImpl(`${url}${path}`, {
|
|
113
|
+
method: "POST",
|
|
114
|
+
headers: jsonHeaders,
|
|
115
|
+
body: JSON.stringify(body),
|
|
116
|
+
});
|
|
117
|
+
} catch (err) {
|
|
118
|
+
// Network-level failure (DNS, connection refused, abort, …). Surface WITH cause.
|
|
119
|
+
const error = `${op} request failed${context}: ${err}`;
|
|
120
|
+
logger.warn(`[Chorus] ${error}`);
|
|
121
|
+
return { ok: false, status: null, error };
|
|
122
|
+
}
|
|
123
|
+
if (!response.ok) {
|
|
124
|
+
// Non-2xx. Surface WITH the status so a 4xx/5xx is debuggable.
|
|
125
|
+
const error = `${op} returned ${response.status}${context}`;
|
|
126
|
+
logger.warn(`[Chorus] ${error}`);
|
|
127
|
+
return { ok: false, status: response.status, error };
|
|
128
|
+
}
|
|
129
|
+
if (successLog) logger.info(`[Chorus] ${successLog}`);
|
|
130
|
+
return { ok: true, status: response.status };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return {
|
|
134
|
+
/**
|
|
135
|
+
* POST /api/daemon/turn-advance — advance a wake's DaemonSessionTurn lifecycle. The
|
|
136
|
+
* server resolves the turn by the session BUSINESS KEY (`sessionId`); the optional
|
|
137
|
+
* `entityType`/`entityUuid` stamp the weak executionUuid link. Requires the
|
|
138
|
+
* connectionUuid (the server addresses the turn against a connection the agent owns).
|
|
139
|
+
*/
|
|
140
|
+
async turnAdvance({ sessionId, status, entityType, entityUuid }) {
|
|
141
|
+
const connectionUuid = getConnectionUuid();
|
|
142
|
+
if (!connectionUuid) {
|
|
143
|
+
const error = `cannot advance turn for session ${sessionId} → ${status} — no connection uuid yet`;
|
|
144
|
+
logger.warn(`[Chorus] ${error}`);
|
|
145
|
+
return { ok: false, status: null, error, skipped: true };
|
|
146
|
+
}
|
|
147
|
+
const body = {
|
|
148
|
+
connectionUuid,
|
|
149
|
+
sessionId,
|
|
150
|
+
status,
|
|
151
|
+
// Only sent when BOTH are present, so the server never gets a partial linkage.
|
|
152
|
+
...(entityType && entityUuid ? { entityType, entityUuid } : {}),
|
|
153
|
+
};
|
|
154
|
+
return post(
|
|
155
|
+
"turn-advance",
|
|
156
|
+
"/api/daemon/turn-advance",
|
|
157
|
+
body,
|
|
158
|
+
`advanced turn for session ${sessionId} → ${status}`,
|
|
159
|
+
);
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* POST /api/daemon/transcript — append finalized user/assistant text to the current
|
|
164
|
+
* turn, targeted by the session BUSINESS KEY (`sessionId`). The caller is responsible
|
|
165
|
+
* for the content filter (only `{ role, text }` for user/assistant) and any batching.
|
|
166
|
+
* No connectionUuid needed (the agent key + sessionId resolve the turn server-side).
|
|
167
|
+
*/
|
|
168
|
+
async transcript({ sessionId, messages }) {
|
|
169
|
+
return post(
|
|
170
|
+
"transcript upload",
|
|
171
|
+
"/api/daemon/transcript",
|
|
172
|
+
{ sessionId, messages },
|
|
173
|
+
`transcript uploaded (${messages.length} msg) for session ${sessionId}`,
|
|
174
|
+
);
|
|
175
|
+
},
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* POST /api/daemon/execution-state — publish the connection's running/queued
|
|
179
|
+
* execution snapshot. The caller supplies the already-built `executions` array (in
|
|
180
|
+
* the server's `{ entityType, entityUuid, rootIdeaUuid|null, status, startedAt|null }`
|
|
181
|
+
* shape). Requires the connectionUuid to attribute the snapshot.
|
|
182
|
+
*/
|
|
183
|
+
async executionState({ executions }) {
|
|
184
|
+
const connectionUuid = getConnectionUuid();
|
|
185
|
+
if (!connectionUuid) {
|
|
186
|
+
// No connectionUuid yet (SSE handshake hasn't reported it): nothing to attribute
|
|
187
|
+
// the snapshot to. A normal early/edge state — surfaced as a skip, NOT an error.
|
|
188
|
+
return { ok: false, status: null, skipped: true };
|
|
189
|
+
}
|
|
190
|
+
return post(
|
|
191
|
+
"execution-state upload",
|
|
192
|
+
"/api/daemon/execution-state",
|
|
193
|
+
{ connectionUuid, executions },
|
|
194
|
+
`execution-state uploaded (${executions.length} active)`,
|
|
195
|
+
);
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* POST /api/daemon/report-interrupt — record a wake's `interrupted` outcome
|
|
200
|
+
* (reason = "user" | "crash") on the server execution row keyed by connection +
|
|
201
|
+
* entity. Requires the connectionUuid to target the right execution row.
|
|
202
|
+
*/
|
|
203
|
+
async reportInterrupt({ entityType, entityUuid, reason }) {
|
|
204
|
+
const connectionUuid = getConnectionUuid();
|
|
205
|
+
if (!connectionUuid) {
|
|
206
|
+
const error = `cannot report interrupt for ${entityType}:${entityUuid} — no connection uuid yet`;
|
|
207
|
+
logger.warn(`[Chorus] ${error}`);
|
|
208
|
+
return { ok: false, status: null, error, skipped: true };
|
|
209
|
+
}
|
|
210
|
+
return post(
|
|
211
|
+
"report-interrupt",
|
|
212
|
+
"/api/daemon/report-interrupt",
|
|
213
|
+
{ connectionUuid, entityType, entityUuid, reason },
|
|
214
|
+
`reported ${entityType}:${entityUuid} interrupted (reason=${reason})`,
|
|
215
|
+
// Keep the failing entity visible in the failure log (restores the suffix the
|
|
216
|
+
// standalone interrupt reporter used to emit) without altering the asserted
|
|
217
|
+
// `report-interrupt request failed` / `report-interrupt returned <status>` prefix.
|
|
218
|
+
` for ${entityType}:${entityUuid}`,
|
|
219
|
+
);
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* GET /api/daemon/pending-turns?connectionUuid=… — read this connection's unstarted
|
|
224
|
+
* (pending) turns from the turn table (the reconnect-backfill / deliver_turn source).
|
|
225
|
+
* Returns the parsed `{ turns: [...] }` data on success; a network error, a non-2xx,
|
|
226
|
+
* a bad JSON body, or a missing `turns` array is LOGGED with cause and surfaced as a
|
|
227
|
+
* failure result — never a silent empty success.
|
|
228
|
+
*
|
|
229
|
+
* @returns {Promise<DaemonRestResult & { data?: { turns: Array<{ turnUuid: string, sessionId: string, directIdeaUuid: string|null, trigger: string, promptText: string|null }> } }>}
|
|
230
|
+
*/
|
|
231
|
+
async readPendingTurns() {
|
|
232
|
+
const connectionUuid = getConnectionUuid();
|
|
233
|
+
if (!connectionUuid) {
|
|
234
|
+
// No connectionUuid yet: nothing to read against. A normal early state — skip.
|
|
235
|
+
return { ok: false, status: null, skipped: true };
|
|
236
|
+
}
|
|
237
|
+
const endpoint = `${url}/api/daemon/pending-turns?connectionUuid=${encodeURIComponent(connectionUuid)}`;
|
|
238
|
+
let response;
|
|
239
|
+
try {
|
|
240
|
+
response = await fetchImpl(endpoint, {
|
|
241
|
+
headers: { Authorization: `Bearer ${apiKey}`, Accept: "application/json" },
|
|
242
|
+
});
|
|
243
|
+
} catch (err) {
|
|
244
|
+
const error = `pending-turns backfill request failed: ${err}`;
|
|
245
|
+
logger.warn(`[Chorus] ${error}`);
|
|
246
|
+
return { ok: false, status: null, error };
|
|
247
|
+
}
|
|
248
|
+
if (!response.ok) {
|
|
249
|
+
const error = `pending-turns backfill returned ${response.status}`;
|
|
250
|
+
logger.warn(`[Chorus] ${error}`);
|
|
251
|
+
return { ok: false, status: response.status, error };
|
|
252
|
+
}
|
|
253
|
+
let parsed;
|
|
254
|
+
try {
|
|
255
|
+
parsed = await response.json();
|
|
256
|
+
} catch (err) {
|
|
257
|
+
const error = `pending-turns backfill: bad JSON: ${err}`;
|
|
258
|
+
logger.warn(`[Chorus] ${error}`);
|
|
259
|
+
return { ok: false, status: response.status, error };
|
|
260
|
+
}
|
|
261
|
+
// API envelope: { success: true, data: { turns: [...] } }.
|
|
262
|
+
const data = parsed && typeof parsed === "object" ? parsed.data : undefined;
|
|
263
|
+
const turns = data && typeof data === "object" ? data.turns : undefined;
|
|
264
|
+
if (!Array.isArray(turns)) {
|
|
265
|
+
const error = "pending-turns backfill: no turns array in response";
|
|
266
|
+
logger.warn(`[Chorus] ${error}`);
|
|
267
|
+
return { ok: false, status: response.status, error };
|
|
268
|
+
}
|
|
269
|
+
return { ok: true, status: response.status, data: { turns } };
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|