@chorus-aidlc/chorus 0.12.1 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +431 -399
- package/.next/standalone/.next/app-path-routes-manifest.json +43 -43
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +21 -45
- package/.next/standalone/.next/react-loadable-manifest.json +36 -30
- package/.next/standalone/.next/routes-manifest.json +16 -6
- 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 -0
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -0
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +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.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_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.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.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.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 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -1
- 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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +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.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js.nft.json +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 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +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 +4 -4
- 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 +6 -6
- 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_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 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +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.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/ideas/conversational/route.js +1 -0
- package/.next/standalone/.next/server/app/api/{auth/refresh → ideas/conversational}/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/mcp/route.js +2 -2
- 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.js.nft.json +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.js.nft.json +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.js.nft.json +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_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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js +1 -0
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -0
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js.nft.json +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.js.nft.json +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_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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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.js.nft.json +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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route.js +1 -0
- package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -0
- 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 +3 -3
- package/.next/standalone/.next/server/app/login/admin/page.js +2 -2
- package/.next/standalone/.next/server/app/login/admin/page.js.nft.json +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 +2 -2
- 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 +3 -3
- package/.next/standalone/.next/server/app/login/page.js +2 -2
- package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
- 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 +3 -3
- package/.next/standalone/.next/server/app/login.html +1 -1
- package/.next/standalone/.next/server/app/login.rsc +3 -3
- 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 +3 -3
- package/.next/standalone/.next/server/app/page.js +2 -2
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- 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 +4 -4
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +43 -43
- package/.next/standalone/.next/server/chunks/1113.js +2 -2
- package/.next/standalone/.next/server/chunks/1114.js +1 -0
- package/.next/standalone/.next/server/chunks/1337.js +1 -1
- package/.next/standalone/.next/server/chunks/1559.js +13 -0
- package/.next/standalone/.next/server/chunks/2315.js +1 -1
- package/.next/standalone/.next/server/chunks/2364.js +2 -2
- package/.next/standalone/.next/server/chunks/{7258.js → 2516.js} +1 -1
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/2631.js +2 -2
- package/.next/standalone/.next/server/chunks/282.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3197.js +3 -0
- package/.next/standalone/.next/server/chunks/3217.js +1 -1
- package/.next/standalone/.next/server/chunks/3219.js +1 -1
- package/.next/standalone/.next/server/chunks/3371.js +1 -0
- package/.next/standalone/.next/server/chunks/3373.js +1 -0
- package/.next/standalone/.next/server/chunks/3419.js +1 -1
- package/.next/standalone/.next/server/chunks/3680.js +1 -1
- package/.next/standalone/.next/server/chunks/4157.js +1 -1
- package/.next/standalone/.next/server/chunks/4193.js +1 -1
- package/.next/standalone/.next/server/chunks/4375.js +2 -2
- package/.next/standalone/.next/server/chunks/4615.js +1 -1
- package/.next/standalone/.next/server/chunks/4827.js +1 -0
- package/.next/standalone/.next/server/chunks/4958.js +1 -0
- package/.next/standalone/.next/server/chunks/5090.js +1 -1
- package/.next/standalone/.next/server/chunks/5095.js +6 -0
- package/.next/standalone/.next/server/chunks/5217.js +1 -1
- package/.next/standalone/.next/server/chunks/5300.js +1 -1
- package/.next/standalone/.next/server/chunks/5319.js +1 -1
- package/.next/standalone/.next/server/chunks/5453.js +1 -1
- package/.next/standalone/.next/server/chunks/5511.js +1 -1
- package/.next/standalone/.next/server/chunks/5957.js +1 -0
- 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/6496.js +1 -0
- package/.next/standalone/.next/server/chunks/679.js +1 -0
- package/.next/standalone/.next/server/chunks/6817.js +1 -0
- package/.next/standalone/.next/server/chunks/704.js +31 -0
- package/.next/standalone/.next/server/chunks/7160.js +1 -1
- package/.next/standalone/.next/server/chunks/7217.js +1 -1
- package/.next/standalone/.next/server/chunks/7364.js +1 -1
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/796.js +6 -6
- package/.next/standalone/.next/server/chunks/8431.js +1 -1
- package/.next/standalone/.next/server/chunks/8448.js +1 -0
- package/.next/standalone/.next/server/chunks/{8267.js → 8481.js} +1 -1
- package/.next/standalone/.next/server/chunks/8497.js +1 -0
- package/.next/standalone/.next/server/chunks/8577.js +153 -0
- package/.next/standalone/.next/server/chunks/8812.js +1 -1
- package/.next/standalone/.next/server/chunks/8895.js +1 -0
- package/.next/standalone/.next/server/chunks/903.js +1 -1
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9726.js +1 -0
- package/.next/standalone/.next/server/chunks/9849.js +2 -2
- 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/middleware-react-loadable-manifest.js +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 +5 -5
- package/.next/standalone/.next/static/chunks/15653-31c406c41bf58048.js +1 -0
- package/.next/standalone/.next/static/chunks/{16551-68896c0ca7966ebf.js → 16551-d129ae0de4a04d69.js} +5 -5
- package/.next/standalone/.next/static/chunks/1892-9c03d4d3560ff572.js +1 -0
- package/.next/standalone/.next/static/chunks/22190.149dd0799cbcba06.js +1 -0
- package/.next/standalone/.next/static/chunks/225-8a41a800021f3d11.js +1 -0
- package/.next/standalone/.next/static/chunks/{2351.35085ef2663aaa44.js → 2351.a2908f154b03857c.js} +1 -1
- package/.next/standalone/.next/static/chunks/24459-3bc9657d71c77b47.js +1 -0
- package/.next/standalone/.next/static/chunks/{29047.664290ff8a84b205.js → 29047.65b677c7f3e6459f.js} +1 -1
- package/.next/standalone/.next/static/chunks/{30682.c8fc49d63bf75772.js → 30682.b12a9bef588e7b03.js} +1 -1
- package/.next/standalone/.next/static/chunks/31467.9f8adfa602f97fcf.js +115 -0
- package/.next/standalone/.next/static/chunks/{33187.1328c15b9dab78a8.js → 33187.13c12f5c0821ac57.js} +1 -1
- package/.next/standalone/.next/static/chunks/{33665.20ed9144405f8b21.js → 33665.804ece4d6c6e4eca.js} +3 -3
- package/.next/standalone/.next/static/chunks/34520.1a6c6a7c421b0ff3.js +1 -0
- package/.next/standalone/.next/static/chunks/38296-316ba18af72385fb.js +1 -0
- package/.next/standalone/.next/static/chunks/46055-f786ace4b994dc40.js +1 -0
- package/.next/standalone/.next/static/chunks/{47066.7848777fc81f5714.js → 47066.214cf62dd898ea16.js} +1 -1
- package/.next/standalone/.next/static/chunks/4860.7844c573cb3914f3.js +1 -0
- package/.next/standalone/.next/static/chunks/48782.4ca261e8e23a8983.js +24 -0
- package/.next/standalone/.next/static/chunks/52064-74d81c8d682deb6b.js +1 -0
- package/.next/standalone/.next/static/chunks/57362-9ece5cc290dab705.js +1 -0
- package/.next/standalone/.next/static/chunks/{14655-4f3bc7f3044c42c1.js → 58037-55d7422c6b808356.js} +1 -1
- package/.next/standalone/.next/static/chunks/58262-395c00e04f610a32.js +1 -0
- package/.next/standalone/.next/static/chunks/58699.364d357d33fcb52f.js +80 -0
- package/.next/standalone/.next/static/chunks/61963.fd130ba09dd25e2e.js +23 -0
- package/.next/standalone/.next/static/chunks/65317.ab0c5ecb4164b291.js +148 -0
- package/.next/standalone/.next/static/chunks/68255-05c42a26602c6b37.js +1 -0
- package/.next/standalone/.next/static/chunks/{69477.4b854e377a3860cc.js → 69477.5b79cd575f93298f.js} +1 -1
- package/.next/standalone/.next/static/chunks/{69763.37d07a3035805bc7.js → 69763.003df47b4ee38644.js} +1 -1
- package/.next/standalone/.next/static/chunks/7317.8e3ce1ce083425d8.js +5 -0
- package/.next/standalone/.next/static/chunks/73506.b9c053e2335b6084.js +1 -0
- package/.next/standalone/.next/static/chunks/75752-cc8fafe132943baa.js +1 -0
- package/.next/standalone/.next/static/chunks/78966.075119c3a72135ed.js +1 -0
- package/.next/standalone/.next/static/chunks/79806.21f1d23ca273000d.js +4 -0
- package/.next/standalone/.next/static/chunks/80350-8ac8d602965bb4df.js +1 -0
- package/.next/standalone/.next/static/chunks/84169-71a87d06871ec9df.js +1 -0
- package/.next/standalone/.next/static/chunks/85947.c813bf8bc6e1d675.js +90 -0
- package/.next/standalone/.next/static/chunks/91709.ed3bfd285c518df1.js +287 -0
- package/.next/standalone/.next/static/chunks/94400.0d371a4d306a614b.js +1 -0
- package/.next/standalone/.next/static/chunks/94528-ed3f03485480f5e5.js +1 -0
- package/.next/standalone/.next/static/chunks/94743-aff8a51a7f7970a9.js +1 -0
- package/.next/standalone/.next/static/chunks/96028.cdbf36dca753e70f.js +215 -0
- package/.next/standalone/.next/static/chunks/{96132.3bac072bb2743fb5.js → 96132.ab9b9433c7b2fa1c.js} +1 -1
- package/.next/standalone/.next/static/chunks/97306-8834e12cdbeed920.js +1 -0
- package/.next/standalone/.next/static/chunks/{97784-42081b75f8cc6da8.js → 97784-7b90a17294840e32.js} +1 -1
- package/.next/standalone/.next/static/chunks/99373.6f0ec031fb759d88.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-a3747bde1ddaba52.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-87b79c98e46fbd04.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f72f17eb58614d2b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-0467d744b84aa2c2.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-e0935445535c28cb.js → page-7abff55f9bfebab3.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-3238e0b5474c60f6.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-9f0ebba7e855b2f9.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-6dbfbe5d97855e42.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-b8fbcac7224342db.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-0a04a31e1b383094.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-e2a69b645ec9ae13.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-fec019d974ef8d4e.js → page-b760877bfcd12dff.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-111aed4d3319d64b.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/agents/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/comments/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/events/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/health/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/projects/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/search/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/session/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-47e1d397c5fcef9e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/callback/page-39a43f6d0245f8ca.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/page-acda3a31dc6a8280.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-10683852baf17426.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-2936274fb252329e.js → page-8e20c8aa8ff90326.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/page-000b1349c8d5b652.js +1 -0
- package/.next/standalone/.next/static/chunks/{f57f1d5e.71d2022a2e2d95ba.js → f57f1d5e.c345ce68aa5052a7.js} +1 -1
- package/.next/standalone/.next/static/chunks/{fcc64ffe-de8d357e657bd162.js → fcc64ffe-2c36a6b45f81782c.js} +3 -3
- package/.next/standalone/.next/static/chunks/webpack-fe12dfe2e0d0e4f3.js +1 -0
- package/.next/standalone/.next/static/css/3f3ae2bdc9e55259.css +1 -0
- package/.next/standalone/.next/static/eORNzMShbzkJbNfQT8MbW/_buildManifest.js +1 -0
- package/.next/standalone/package.json +3 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -0
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -0
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -0
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -0
- package/README.md +23 -2
- package/README.zh.md +23 -2
- package/chorus.mjs +118 -34
- package/cli/client-args.mjs +31 -9
- package/cli/control-handler.mjs +22 -5
- package/cli/daemon-lifecycle.mjs +192 -25
- package/cli/daemon-rest-client.mjs +6 -2
- package/cli/daemon-service.mjs +422 -0
- package/cli/daemon.mjs +181 -13
- package/cli/embedded-db.mjs +234 -0
- package/cli/event-router.mjs +29 -10
- package/cli/prompts.mjs +61 -0
- package/cli/turn-reporter.mjs +26 -5
- package/cli/wake-queue.mjs +30 -0
- package/cli/waker.mjs +91 -22
- package/package.json +3 -1
- package/prisma/migrations/20260704023331_add_turn_interrupted_state/migration.sql +2 -0
- package/prisma/schema.prisma +9 -2
- package/.next/standalone/.next/server/app/api/auth/refresh/route.js +0 -1
- package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/api/auth/session/route.js +0 -1
- package/.next/standalone/.next/server/app/api/auth/session/route.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/api/keepalive/route.js +0 -1
- package/.next/standalone/.next/server/app/api/keepalive/route.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/api/keepalive/route_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/login/silent-refresh/page.js +0 -2
- package/.next/standalone/.next/server/app/login/silent-refresh/page.js.nft.json +0 -1
- package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +0 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.html +0 -1
- package/.next/standalone/.next/server/app/login/silent-refresh.meta +0 -7
- package/.next/standalone/.next/server/app/login/silent-refresh.rsc +0 -24
- package/.next/standalone/.next/server/chunks/1463.js +0 -1
- package/.next/standalone/.next/server/chunks/1596.js +0 -13
- package/.next/standalone/.next/server/chunks/2622.js +0 -1
- package/.next/standalone/.next/server/chunks/2779.js +0 -31
- package/.next/standalone/.next/server/chunks/4292.js +0 -1
- package/.next/standalone/.next/server/chunks/4872.js +0 -1
- package/.next/standalone/.next/server/chunks/5538.js +0 -1
- package/.next/standalone/.next/server/chunks/6096.js +0 -3
- package/.next/standalone/.next/server/chunks/7063.js +0 -6
- package/.next/standalone/.next/server/chunks/7427.js +0 -1
- package/.next/standalone/.next/server/chunks/7515.js +0 -1
- package/.next/standalone/.next/server/chunks/8732.js +0 -1
- package/.next/standalone/.next/server/chunks/9161.js +0 -1
- package/.next/standalone/.next/server/chunks/9273.js +0 -1
- package/.next/standalone/.next/server/chunks/937.js +0 -153
- package/.next/standalone/.next/static/GmBblfxcDziUENBiEap4B/_buildManifest.js +0 -1
- package/.next/standalone/.next/static/chunks/10344-2e9a9d767e2e8ed1.js +0 -1
- package/.next/standalone/.next/static/chunks/20081-a2bf5c9f24d5d589.js +0 -1
- package/.next/standalone/.next/static/chunks/22190.ee4e8f3ac0189d87.js +0 -1
- package/.next/standalone/.next/static/chunks/2280-f48bf99ea9d88ece.js +0 -1
- package/.next/standalone/.next/static/chunks/26394-4af487a51dd62832.js +0 -1
- package/.next/standalone/.next/static/chunks/31467.2013df596c751e6e.js +0 -115
- package/.next/standalone/.next/static/chunks/34520.34ba1239c9b5a275.js +0 -1
- package/.next/standalone/.next/static/chunks/37784-95dee37276b1067b.js +0 -1
- package/.next/standalone/.next/static/chunks/46983-8bf90f1ffeb55957.js +0 -1
- package/.next/standalone/.next/static/chunks/46999-f53da8f53fe1b8a9.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.e3d0dd79a4d37626.js +0 -1
- package/.next/standalone/.next/static/chunks/48782.5b60e8a0f22f6da1.js +0 -24
- package/.next/standalone/.next/static/chunks/54637-71d281d649ea3a17.js +0 -1
- package/.next/standalone/.next/static/chunks/58245-b2ea112ace9624d2.js +0 -1
- package/.next/standalone/.next/static/chunks/58699.fa3b8ce67889f23b.js +0 -80
- package/.next/standalone/.next/static/chunks/61963.18e80afc0dac41e3.js +0 -23
- package/.next/standalone/.next/static/chunks/65317.7179d4bc41c8075a.js +0 -148
- package/.next/standalone/.next/static/chunks/7317.1a06bc56028637f6.js +0 -5
- package/.next/standalone/.next/static/chunks/73506.7423a313220e1769.js +0 -1
- package/.next/standalone/.next/static/chunks/78917-aa5bbff9248799a4.js +0 -1
- package/.next/standalone/.next/static/chunks/79806.d210b93e41d4d7ff.js +0 -4
- package/.next/standalone/.next/static/chunks/85573-fb4d2cbd67612d47.js +0 -1
- package/.next/standalone/.next/static/chunks/85947.cf4ac5dd618283ee.js +0 -90
- package/.next/standalone/.next/static/chunks/88561-0b14e1564419f215.js +0 -1
- package/.next/standalone/.next/static/chunks/89035-faf398b7bbc7d2ed.js +0 -1
- package/.next/standalone/.next/static/chunks/91709.f7c8eff0c3692bd6.js +0 -287
- package/.next/standalone/.next/static/chunks/94400.30696ed643217da2.js +0 -1
- package/.next/standalone/.next/static/chunks/96028.427c0bd44fa35314.js +0 -215
- package/.next/standalone/.next/static/chunks/97868-55f18a05fe483d85.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.cc6319fa4cf36081.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-b3a497ba5eb08036.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-2944c6c9bc48a7d6.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-d786f0c18a9c4f06.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-c68f1eda3779b448.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-f824632ff61a9fa7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-dbcb6e50fc4816c6.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-1295bc505e727383.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-ceeec49af0396432.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-1286afe43c086d6a.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-0fb1d51016f6bd56.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/login/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/admin/session/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/agents/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/api-keys/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/me/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/session/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/comments/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/events/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/health/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/keepalive/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mcp/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/mentionables/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/project-groups/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/projects/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/search/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-f1b0daea9f947caf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/callback/page-6cad93f5c610b047.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/page-d2513f477211dd6f.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-597e0f3377f18d29.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/silent-refresh/page-a26d1af61578c96e.js +0 -1
- package/.next/standalone/.next/static/chunks/app/page-075afd218994d377.js +0 -1
- package/.next/standalone/.next/static/chunks/webpack-ed3555ea61243391.js +0 -1
- package/.next/standalone/.next/static/css/6e8fd46b062fd4fc.css +0 -1
- /package/.next/standalone/.next/static/{GmBblfxcDziUENBiEap4B → eORNzMShbzkJbNfQT8MbW}/_ssgManifest.js +0 -0
package/chorus.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { fork, spawn } from "node:child_process";
|
|
4
4
|
import { randomBytes, createHash } from "node:crypto";
|
|
5
5
|
import {
|
|
6
6
|
existsSync,
|
|
@@ -38,6 +38,15 @@ import {
|
|
|
38
38
|
// (`chorus daemon` / `chorus login`) never registers the server's handlers.
|
|
39
39
|
// Pure module → unit-testable without this entry's import-time side effects.
|
|
40
40
|
import { installServerSignalHandlers } from "./cli/server-signal-handlers.mjs";
|
|
41
|
+
// Embedded-PGlite launch (child-exit capture + port-conflict fail-fast). Extracted
|
|
42
|
+
// into a pure, dependency-injected module so it is unit-testable with fakes — see
|
|
43
|
+
// cli/embedded-db.mjs and its __tests__ (GitHub #379).
|
|
44
|
+
import {
|
|
45
|
+
launchEmbeddedPglite,
|
|
46
|
+
isPrismaAuthFailure,
|
|
47
|
+
formatMigrationAuthDiagnostic,
|
|
48
|
+
maskDbUrl,
|
|
49
|
+
} from "./cli/embedded-db.mjs";
|
|
41
50
|
|
|
42
51
|
/** Read the package version once for help/version output. */
|
|
43
52
|
function pkgVersion() {
|
|
@@ -247,6 +256,27 @@ function waitForTcp(host, tcpPort, maxRetries = 30, intervalMs = 500) {
|
|
|
247
256
|
});
|
|
248
257
|
}
|
|
249
258
|
|
|
259
|
+
// Quick one-shot probe: is something ALREADY listening on host:port right now?
|
|
260
|
+
// Used as a pre-flight before forking embedded PGlite so we never fork onto a port
|
|
261
|
+
// held by a foreign process (e.g. a real Postgres) and then mistake it for our own
|
|
262
|
+
// PGlite. Resolves true if a TCP connection succeeds, false otherwise. (GitHub #379)
|
|
263
|
+
function isPortOccupied(host, tcpPort, timeoutMs = 1000) {
|
|
264
|
+
return new Promise((resolve) => {
|
|
265
|
+
const socket = createConnection({ host, port: tcpPort });
|
|
266
|
+
let settled = false;
|
|
267
|
+
const done = (occupied) => {
|
|
268
|
+
if (settled) return;
|
|
269
|
+
settled = true;
|
|
270
|
+
socket.destroy();
|
|
271
|
+
resolve(occupied);
|
|
272
|
+
};
|
|
273
|
+
socket.setTimeout(timeoutMs);
|
|
274
|
+
socket.once("connect", () => done(true));
|
|
275
|
+
socket.once("timeout", () => done(false));
|
|
276
|
+
socket.once("error", () => done(false));
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
|
|
250
280
|
function ensureSecret() {
|
|
251
281
|
const secretPath = join(dataDir, ".secret");
|
|
252
282
|
if (process.env.NEXTAUTH_SECRET) return;
|
|
@@ -311,34 +341,52 @@ async function main() {
|
|
|
311
341
|
const pgliteSocketEntry = resolveOrDie("@electric-sql/pglite-socket");
|
|
312
342
|
const serverScript = resolve(dirname(pgliteSocketEntry), "scripts", "server.js");
|
|
313
343
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
344
|
+
// Launch via the pure, dependency-injected module so a foreign listener on
|
|
345
|
+
// PGLITE_PORT can never be mistaken for our PGlite (GitHub #379): it pre-flights
|
|
346
|
+
// the port, then treats the child exiting before ready as fatal (any exit code,
|
|
347
|
+
// incl. the reproduced EADDRINUSE -> exit 0), instead of trusting "someone is
|
|
348
|
+
// listening". `waitForTcp`/`isPortOccupied` are injected so the logic unit-tests
|
|
349
|
+
// with fakes (see cli/embedded-db.mjs + __tests__).
|
|
350
|
+
const launch = await launchEmbeddedPglite({
|
|
351
|
+
host: "localhost",
|
|
352
|
+
port: PGLITE_PORT,
|
|
353
|
+
fork: () =>
|
|
354
|
+
fork(serverScript, [
|
|
355
|
+
`--db=${join(dataDir, "pglite")}`,
|
|
356
|
+
`--port=${PGLITE_PORT}`,
|
|
357
|
+
"--max-connections=10",
|
|
358
|
+
], { stdio: "ignore", detached: false }),
|
|
359
|
+
waitForTcp,
|
|
360
|
+
preflightCheck: isPortOccupied,
|
|
361
|
+
logger: console,
|
|
329
362
|
});
|
|
330
363
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
364
|
+
if (!launch.ok) {
|
|
365
|
+
if (launch.reason === "child-exited") {
|
|
366
|
+
// The child (our PGlite) exited before the port was confirmed ready. The most
|
|
367
|
+
// common cause is the port being occupied by another process the child could
|
|
368
|
+
// not bind (EADDRINUSE), which PGlite catches and exits 0 — so key the message
|
|
369
|
+
// off the failure, not the exit code.
|
|
370
|
+
console.error(
|
|
371
|
+
`\nERROR: Embedded PostgreSQL (PGlite) exited before it was ready ` +
|
|
372
|
+
`(exit code ${launch.exitInfo?.code ?? "unknown"}).`
|
|
373
|
+
);
|
|
374
|
+
console.error(`\nMost likely port ${PGLITE_PORT} is already in use by another process`);
|
|
375
|
+
console.error(`(e.g. a real PostgreSQL). Free the port, or run on a different one:`);
|
|
376
|
+
console.error(` chorus --pglite-port <port>`);
|
|
377
|
+
} else if (launch.reason === "not-ready") {
|
|
378
|
+
console.error(`\nERROR: ${launch.error?.message ?? "PGlite failed to start."}`);
|
|
379
|
+
console.error(`\nPossible causes:`);
|
|
380
|
+
console.error(` - Port ${PGLITE_PORT} is already in use`);
|
|
381
|
+
console.error(` - Corrupt data in ${join(dataDir, "pglite")}/`);
|
|
382
|
+
} else if (launch.reason === "child-error") {
|
|
383
|
+
console.error("PGlite process error:", launch.error?.message ?? String(launch.error));
|
|
384
|
+
}
|
|
385
|
+
// reason === "port-occupied" already logged the actionable message in the module.
|
|
338
386
|
process.exit(1);
|
|
339
387
|
}
|
|
340
388
|
|
|
341
|
-
|
|
389
|
+
pgliteProcess = launch.child;
|
|
342
390
|
process.env.DATABASE_URL = `postgresql://postgres:postgres@localhost:${PGLITE_PORT}/postgres?sslmode=disable`;
|
|
343
391
|
}
|
|
344
392
|
|
|
@@ -350,14 +398,49 @@ async function main() {
|
|
|
350
398
|
// 3. Run database migrations
|
|
351
399
|
console.log("Running database migrations...");
|
|
352
400
|
const prismaBin = resolveOrDie("prisma/build/index.js");
|
|
353
|
-
|
|
354
|
-
|
|
401
|
+
// Tee the migrate output: stream each chunk to the parent's stdout/stderr LIVE (so
|
|
402
|
+
// "Applying migration …" progress appears as it happens, not batched at the end) AND
|
|
403
|
+
// buffer it so an authentication failure can be classified and rewritten into an
|
|
404
|
+
// actionable Chorus diagnostic (GitHub #379).
|
|
405
|
+
const migrateResult = await new Promise((resolveMigrate) => {
|
|
406
|
+
const child = spawn(process.execPath, [prismaBin, "migrate", "deploy"], {
|
|
355
407
|
cwd: __dirname,
|
|
356
|
-
stdio: "inherit",
|
|
357
408
|
env: { ...process.env },
|
|
409
|
+
stdio: ["inherit", "pipe", "pipe"],
|
|
358
410
|
});
|
|
359
|
-
|
|
360
|
-
|
|
411
|
+
let out = "";
|
|
412
|
+
let err = "";
|
|
413
|
+
child.stdout.on("data", (chunk) => {
|
|
414
|
+
out += chunk;
|
|
415
|
+
process.stdout.write(chunk); // live echo
|
|
416
|
+
});
|
|
417
|
+
child.stderr.on("data", (chunk) => {
|
|
418
|
+
err += chunk;
|
|
419
|
+
process.stderr.write(chunk); // live echo
|
|
420
|
+
});
|
|
421
|
+
child.on("error", (e) => resolveMigrate({ status: 1, stdout: out, stderr: `${err}\n${e.message}` }));
|
|
422
|
+
child.on("close", (code, signal) => {
|
|
423
|
+
// A null exit code means the migrate process was killed by a signal — treat that
|
|
424
|
+
// as a failure (status 1), never as success, so we don't start the server against
|
|
425
|
+
// a half-migrated database.
|
|
426
|
+
resolveMigrate({ status: code === null ? 1 : code, stdout: out, stderr: err });
|
|
427
|
+
});
|
|
428
|
+
});
|
|
429
|
+
if (migrateResult.status !== 0) {
|
|
430
|
+
const combined = `${migrateResult.stdout ?? ""}\n${migrateResult.stderr ?? ""}`;
|
|
431
|
+
if (isPrismaAuthFailure(combined)) {
|
|
432
|
+
// Replace the bare Prisma P1000 (the last thing the user would otherwise see)
|
|
433
|
+
// with a self-explaining, path-appropriate diagnostic.
|
|
434
|
+
console.error(
|
|
435
|
+
formatMigrationAuthDiagnostic({
|
|
436
|
+
effectiveUrl: process.env.DATABASE_URL,
|
|
437
|
+
startedEmbedded: startEmbeddedPglite,
|
|
438
|
+
pglitePort: PGLITE_PORT,
|
|
439
|
+
})
|
|
440
|
+
);
|
|
441
|
+
} else {
|
|
442
|
+
console.error("ERROR: Database migration failed.");
|
|
443
|
+
}
|
|
361
444
|
process.exit(1);
|
|
362
445
|
}
|
|
363
446
|
console.log("Migrations completed.");
|
|
@@ -389,11 +472,12 @@ async function main() {
|
|
|
389
472
|
console.log("");
|
|
390
473
|
console.log(` URL: http://${hostname === "0.0.0.0" ? "localhost" : hostname}:${port}`);
|
|
391
474
|
console.log(` Data: ${dataDir}`);
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
475
|
+
// When embedded PGlite was skipped, DATABASE_URL is what we actually connected to —
|
|
476
|
+
// name its host:port (credentials masked) so a residual/unintended export is visible
|
|
477
|
+
// rather than silent (GitHub #379, D4). Precedence semantics are unchanged.
|
|
478
|
+
const dbLabel = startEmbeddedPglite
|
|
479
|
+
? "PGlite (embedded, pg.Pool max=1)"
|
|
480
|
+
: `${usePglite ? "PGlite (external, pg.Pool max=1)" : "external PostgreSQL"} (from DATABASE_URL: ${maskDbUrl(process.env.DATABASE_URL)})`;
|
|
397
481
|
console.log(` Database: ${dbLabel}`);
|
|
398
482
|
console.log(` Redis: ${process.env.REDIS_URL ? "connected" : "disabled (in-memory EventBus)"}`);
|
|
399
483
|
const maskedPassword = process.env.DEFAULT_PASSWORD === "chorus"
|
package/cli/client-args.mjs
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* default long-lived daemon) is intentionally NOT in this set — it is the
|
|
12
12
|
* absence of a recognized sub-action token.
|
|
13
13
|
*/
|
|
14
|
-
export const DAEMON_ACTIONS = new Set(["stop", "status", "restart", "logs"]);
|
|
14
|
+
export const DAEMON_ACTIONS = new Set(["stop", "status", "restart", "logs", "install", "uninstall"]);
|
|
15
15
|
|
|
16
16
|
/** Known agent backends. Only `claude-code` is implemented; the rest reserve
|
|
17
17
|
* the extension point (see daemon-agent-selection). Exported for the resolver
|
|
@@ -22,7 +22,8 @@ export const KNOWN_AGENTS = new Set(["claude-code"]);
|
|
|
22
22
|
* Parse the client-subcommand flags out of an arg list. Recognizes the
|
|
23
23
|
* pre-existing `--url` / `--api-key` / `--sigint-timeout` (space and `=` forms)
|
|
24
24
|
* and boolean `--yolo`, plus the new `--agent <type>` (space + `=`), boolean
|
|
25
|
-
* `--chorus-only`, `--verbose`, `-d`/`--detach`,
|
|
25
|
+
* `--chorus-only`, `--verbose`, `-d`/`--detach`, `--force` (stop's forced
|
|
26
|
+
* pidfile cleanup), and `--help`/`-h`.
|
|
26
27
|
*
|
|
27
28
|
* Only keys that appear are set, so callers can distinguish "unset" from
|
|
28
29
|
* "false" (important for layered env/flag precedence downstream).
|
|
@@ -37,7 +38,7 @@ export const KNOWN_AGENTS = new Set(["claude-code"]);
|
|
|
37
38
|
* @returns {{
|
|
38
39
|
* url?: string, apiKey?: string, yolo?: boolean, sigintTimeout?: string,
|
|
39
40
|
* agent?: string, chorusOnly?: boolean, verbose?: boolean, detach?: boolean,
|
|
40
|
-
* cwd?: string[], help?: boolean,
|
|
41
|
+
* cwd?: string[], force?: boolean, help?: boolean,
|
|
41
42
|
* }}
|
|
42
43
|
*/
|
|
43
44
|
export function parseClientFlags(argv) {
|
|
@@ -61,6 +62,7 @@ export function parseClientFlags(argv) {
|
|
|
61
62
|
else if (a === "--chorus-only") out.chorusOnly = true;
|
|
62
63
|
else if (a === "--verbose") out.verbose = true;
|
|
63
64
|
else if (a === "-d" || a === "--detach") out.detach = true;
|
|
65
|
+
else if (a === "--force") out.force = true;
|
|
64
66
|
else if (a === "--help" || a === "-h") out.help = true;
|
|
65
67
|
}
|
|
66
68
|
return out;
|
|
@@ -76,7 +78,7 @@ export function parseClientFlags(argv) {
|
|
|
76
78
|
* or an unknown leading token) is the normal long-lived daemon (`run`).
|
|
77
79
|
*
|
|
78
80
|
* @param {string[]} rest argv after the `daemon` subcommand token
|
|
79
|
-
* @returns {"run"|"stop"|"status"|"restart"|"logs"}
|
|
81
|
+
* @returns {"run"|"stop"|"status"|"restart"|"logs"|"install"|"uninstall"}
|
|
80
82
|
*/
|
|
81
83
|
export function parseDaemonAction(rest) {
|
|
82
84
|
const first = rest[0];
|
|
@@ -98,10 +100,18 @@ agent notification stream, and wake a local headless agent on task dispatch.
|
|
|
98
100
|
USAGE
|
|
99
101
|
chorus daemon [options] Run the daemon (foreground)
|
|
100
102
|
chorus daemon -d [options] Run the daemon in the background (detached)
|
|
101
|
-
chorus daemon
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
chorus daemon
|
|
103
|
+
chorus daemon install [options] Install as a boot-autostart service and
|
|
104
|
+
start it now (Linux systemd --user;
|
|
105
|
+
macOS/Windows print a template + steps)
|
|
106
|
+
chorus daemon uninstall Remove the installed service (Linux) /
|
|
107
|
+
print removal steps (macOS/Windows)
|
|
108
|
+
chorus daemon stop Stop the daemon (delegates to the service
|
|
109
|
+
manager when installed, else the pidfile)
|
|
110
|
+
chorus daemon stop --force Force-clean the pidfile when a stuck or
|
|
111
|
+
unverifiable pid blocks a normal stop
|
|
112
|
+
chorus daemon status Show whether the daemon is running
|
|
113
|
+
chorus daemon restart Restart the daemon
|
|
114
|
+
chorus daemon logs Show the daemon log (journal when installed)
|
|
105
115
|
|
|
106
116
|
OPTIONS
|
|
107
117
|
--url <url> Remote Chorus server URL (env: CHORUS_URL)
|
|
@@ -130,11 +140,23 @@ CREDENTIALS
|
|
|
130
140
|
~/.chorus/daemon.json (from 'chorus login') > Claude Code plugin config.
|
|
131
141
|
On a TTY with no resolvable credentials, the daemon prompts to complete them.
|
|
132
142
|
|
|
143
|
+
SERVICE (install)
|
|
144
|
+
'chorus daemon install' is the recommended way to run the daemon permanently.
|
|
145
|
+
On Linux it generates a systemd --user unit that runs the daemon in the
|
|
146
|
+
FOREGROUND (Type=simple, no -d) so systemd owns the process directly: it
|
|
147
|
+
starts at login, restarts on failure, and 'systemctl --user stop' shuts it
|
|
148
|
+
down gracefully. Do NOT hand-write a Type=forking unit around 'chorus daemon
|
|
149
|
+
-d' — the daemon self-daemonizes, which systemd cannot track and which loops
|
|
150
|
+
on restart. The install captures the --cwd / --agent / --chorus-only flags you
|
|
151
|
+
pass. On macOS/Windows install prints a correct template you install manually.
|
|
152
|
+
|
|
133
153
|
EXAMPLES
|
|
134
154
|
chorus daemon # Foreground, default yolo (TTY confirms once)
|
|
135
155
|
chorus daemon --chorus-only # Restrict the woken agent to Chorus tools
|
|
136
156
|
chorus daemon -d # Background; see 'chorus daemon logs'
|
|
137
|
-
chorus daemon
|
|
157
|
+
chorus daemon install --cwd ~/proj # Install + start as a boot service (Linux)
|
|
158
|
+
chorus daemon uninstall # Remove the installed service
|
|
159
|
+
chorus daemon stop # Stop the daemon
|
|
138
160
|
`;
|
|
139
161
|
}
|
|
140
162
|
|
package/cli/control-handler.mjs
CHANGED
|
@@ -38,8 +38,13 @@ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
|
38
38
|
* (null until the SSE handshake reports it).
|
|
39
39
|
* killer?: (child: any, opts: any) => Promise<any>, Injectable; defaults to killProcessTree.
|
|
40
40
|
* sigintTimeoutMs?: number, Layered-resolved escalation window.
|
|
41
|
-
* redispatchResume?: (entityType: string, entityUuid: string) => void,
|
|
42
|
-
* for a resumed entity (子3); injected
|
|
41
|
+
* redispatchResume?: (entityType: string, entityUuid: string, resumeReason?: string) => void,
|
|
42
|
+
* Re-run a wake for a resumed entity (子3); injected
|
|
43
|
+
* by the daemon. `resumeReason` ("user" | "crash",
|
|
44
|
+
* add-crash-execution-resume) is the row's prior
|
|
45
|
+
* interruptedReason from the control event — it
|
|
46
|
+
* selects the continue-instruction variant; absent
|
|
47
|
+
* or unknown degrades to the user-resume prompt.
|
|
43
48
|
* deliverTurn?: (turnUuid?: string) => void, Dispatch a PRECISE pending turn by uuid
|
|
44
49
|
* (子2 — origin-only live delivery). On a
|
|
45
50
|
* `deliver_turn` control event (after the Check-1
|
|
@@ -134,11 +139,23 @@ export function createControlHandler(deps) {
|
|
|
134
139
|
|
|
135
140
|
// --- resume: re-dispatch the wake for this entity (子3). No running-child
|
|
136
141
|
// check — the subprocess is gone (it was interrupted); the wake path will
|
|
137
|
-
// re-spawn and `--resume` the existing session.
|
|
142
|
+
// re-spawn and `--resume` the existing session. `resumeReason` (the row's
|
|
143
|
+
// prior interruptedReason, add-crash-execution-resume) is threaded through
|
|
144
|
+
// so the wake prompt can state a crash explicitly; anything but the two
|
|
145
|
+
// known values (or an older server sending none) degrades to undefined →
|
|
146
|
+
// the existing user-resume prompt. ---
|
|
138
147
|
if (command === "resume") {
|
|
139
|
-
|
|
148
|
+
const resumeReason =
|
|
149
|
+
event.resumeReason === "user" || event.resumeReason === "crash"
|
|
150
|
+
? event.resumeReason
|
|
151
|
+
: undefined;
|
|
152
|
+
logger.info(
|
|
153
|
+
`[Chorus] control: resuming ${entityType}:${entityUuid} (re-dispatch wake` +
|
|
154
|
+
(resumeReason ? `, reason=${resumeReason}` : "") +
|
|
155
|
+
`)`
|
|
156
|
+
);
|
|
140
157
|
try {
|
|
141
|
-
redispatchResume?.(entityType, entityUuid);
|
|
158
|
+
redispatchResume?.(entityType, entityUuid, resumeReason);
|
|
142
159
|
} catch (err) {
|
|
143
160
|
logger.warn(`[Chorus] control: resume re-dispatch failed for ${entityType}:${entityUuid}: ${err}`);
|
|
144
161
|
}
|
package/cli/daemon-lifecycle.mjs
CHANGED
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
// are unit-testable from a single host.
|
|
8
8
|
//
|
|
9
9
|
// State files live alongside the credentials in ~/.chorus:
|
|
10
|
-
// pidfile ~/.chorus/daemon.pid (
|
|
10
|
+
// pidfile ~/.chorus/daemon.pid (JSON {pid, startedAt?, argsHint?}; legacy
|
|
11
|
+
// bare-number files from older CLIs still read)
|
|
11
12
|
// logfile ~/.chorus/daemon.log (its redirected stdout+stderr)
|
|
12
13
|
|
|
13
|
-
import { spawn } from "node:child_process";
|
|
14
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
14
15
|
import {
|
|
15
16
|
existsSync,
|
|
16
17
|
mkdirSync,
|
|
@@ -32,6 +33,7 @@ function defaultIO() {
|
|
|
32
33
|
unlinkSync,
|
|
33
34
|
writeFileSync,
|
|
34
35
|
spawn,
|
|
36
|
+
spawnSync,
|
|
35
37
|
// process.kill with signal 0 is the portable liveness probe (no signal sent).
|
|
36
38
|
kill: (pid, sig) => process.kill(pid, sig),
|
|
37
39
|
platform: process.platform,
|
|
@@ -50,48 +52,183 @@ export function logFilePath(io = defaultIO()) {
|
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
/**
|
|
53
|
-
*
|
|
55
|
+
* The cmdline marker every legacy (pre-identity) chorus daemon carries — the
|
|
56
|
+
* fallback identity check when the pidfile recorded no argsHint.
|
|
57
|
+
*/
|
|
58
|
+
const DAEMON_CMD_MARKER = "daemon";
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Read the recorded pidfile as a structured record, or null when absent /
|
|
62
|
+
* unreadable / malformed. Two on-disk formats:
|
|
63
|
+
* - JSON `{pid, startedAt?, argsHint?}` (current — written by startBackground)
|
|
64
|
+
* - bare pid number (legacy — pre-identity CLIs) → `{ pid, legacy: true }`
|
|
54
65
|
* @param {object} [io]
|
|
55
|
-
* @returns {number|null}
|
|
66
|
+
* @returns {{ pid: number, startedAt?: string, argsHint?: string, legacy?: boolean }|null}
|
|
56
67
|
*/
|
|
57
|
-
export function
|
|
68
|
+
export function readPidRecord(io = defaultIO()) {
|
|
58
69
|
const path = pidFilePath(io);
|
|
59
70
|
try {
|
|
60
71
|
if (!io.existsSync(path)) return null;
|
|
61
|
-
const raw = io.readFileSync(path, "utf8");
|
|
62
|
-
|
|
63
|
-
|
|
72
|
+
const raw = String(io.readFileSync(path, "utf8")).trim();
|
|
73
|
+
if (raw.startsWith("{")) {
|
|
74
|
+
const parsed = JSON.parse(raw);
|
|
75
|
+
const pid = Number.parseInt(String(parsed.pid), 10);
|
|
76
|
+
if (!Number.isInteger(pid) || pid <= 0) return null;
|
|
77
|
+
const record = { pid };
|
|
78
|
+
if (typeof parsed.startedAt === "string" && parsed.startedAt) record.startedAt = parsed.startedAt;
|
|
79
|
+
if (typeof parsed.argsHint === "string" && parsed.argsHint) record.argsHint = parsed.argsHint;
|
|
80
|
+
return record;
|
|
81
|
+
}
|
|
82
|
+
const pid = Number.parseInt(raw, 10);
|
|
83
|
+
return Number.isInteger(pid) && pid > 0 ? { pid, legacy: true } : null;
|
|
64
84
|
} catch {
|
|
65
85
|
return null;
|
|
66
86
|
}
|
|
67
87
|
}
|
|
68
88
|
|
|
69
89
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
90
|
+
* Read the recorded pid, or null when absent / unreadable / malformed.
|
|
91
|
+
* Thin compatibility wrapper over readPidRecord.
|
|
92
|
+
* @param {object} [io]
|
|
93
|
+
* @returns {number|null}
|
|
94
|
+
*/
|
|
95
|
+
export function readPid(io = defaultIO()) {
|
|
96
|
+
return readPidRecord(io)?.pid ?? null;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Query the identity (command line + start time) of the process currently
|
|
101
|
+
* occupying `pid`. One subprocess invocation, argument arrays only (no
|
|
102
|
+
* `shell:true`), pure JS:
|
|
103
|
+
* - POSIX: `ps -p <pid> -o lstart=,args=` (lstart is second-resolution and
|
|
104
|
+
* stable across probes of the same process). busybox `ps` rejects `-p` and
|
|
105
|
+
* `-o lstart` → retry `ps -o pid=,args=` (full-table) and filter by the
|
|
106
|
+
* pid column for cmdline-only verification.
|
|
107
|
+
* - Windows: PowerShell `Get-CimInstance Win32_Process` (wmic is deprecated).
|
|
72
108
|
* @param {number} pid @param {object} [io]
|
|
109
|
+
* @returns {{ cmdline: string, startedAt: string|null }|null} null = query failed
|
|
73
110
|
*/
|
|
74
|
-
export function
|
|
75
|
-
if (!Number.isInteger(pid) || pid <= 0) return
|
|
111
|
+
export function queryProcessIdentity(pid, io = defaultIO()) {
|
|
112
|
+
if (!Number.isInteger(pid) || pid <= 0) return null;
|
|
76
113
|
try {
|
|
77
|
-
io.
|
|
78
|
-
|
|
114
|
+
if (io.platform === "win32") {
|
|
115
|
+
const r = io.spawnSync(
|
|
116
|
+
"powershell",
|
|
117
|
+
[
|
|
118
|
+
"-NoProfile",
|
|
119
|
+
"-Command",
|
|
120
|
+
`Get-CimInstance Win32_Process -Filter 'ProcessId=${pid}' | Select-Object CommandLine,CreationDate | ConvertTo-Json`,
|
|
121
|
+
],
|
|
122
|
+
{ encoding: "utf8", windowsHide: true }
|
|
123
|
+
);
|
|
124
|
+
if (!r || r.status !== 0 || !r.stdout) return null;
|
|
125
|
+
const parsed = JSON.parse(r.stdout);
|
|
126
|
+
if (!parsed || typeof parsed.CommandLine !== "string") return null;
|
|
127
|
+
return { cmdline: parsed.CommandLine, startedAt: parsed.CreationDate ? String(parsed.CreationDate) : null };
|
|
128
|
+
}
|
|
129
|
+
// POSIX: lstart= + args= in one call. Output shape (no headers):
|
|
130
|
+
// "Thu Jul 2 21:22:55 2026 /usr/bin/node /x/chorus.mjs daemon"
|
|
131
|
+
// lstart is a fixed 5-field prefix (dow mon dd hh:mm:ss yyyy).
|
|
132
|
+
const full = io.spawnSync("ps", ["-p", String(pid), "-o", "lstart=,args="], { encoding: "utf8" });
|
|
133
|
+
if (full && full.status === 0 && full.stdout && full.stdout.trim()) {
|
|
134
|
+
const line = full.stdout.trim();
|
|
135
|
+
const fields = line.split(/\s+/);
|
|
136
|
+
if (fields.length >= 6) {
|
|
137
|
+
const startedAt = fields.slice(0, 5).join(" ");
|
|
138
|
+
const cmdline = fields.slice(5).join(" ");
|
|
139
|
+
if (cmdline) return { cmdline, startedAt };
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// busybox fallback: busybox ps rejects -p AND -o lstart (it only knows -o
|
|
143
|
+
// and -T), so list every process as "pid args" and filter by the pid
|
|
144
|
+
// column ourselves. Cmdline verification still possible; no start time.
|
|
145
|
+
const argsOnly = io.spawnSync("ps", ["-o", "pid=,args="], { encoding: "utf8" });
|
|
146
|
+
if (argsOnly && argsOnly.status === 0 && argsOnly.stdout) {
|
|
147
|
+
for (const line of argsOnly.stdout.split("\n")) {
|
|
148
|
+
const m = line.trim().match(/^(\d+)\s+(.+)$/);
|
|
149
|
+
if (m && Number.parseInt(m[1], 10) === pid) {
|
|
150
|
+
return { cmdline: m[2].trim(), startedAt: null };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
} catch {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Is the process recorded by `record` still OUR live daemon? Identity-verified
|
|
162
|
+
* probe (fix-daemon-stale-pid-identity): pid existence alone is not enough —
|
|
163
|
+
* after a reboot the OS recycles pids, and a foreign owner surfaces as EPERM,
|
|
164
|
+
* which the old probe misread as "daemon alive". Decision table (tech design):
|
|
165
|
+
* - ESRCH / invalid pid → false (stale)
|
|
166
|
+
* - pid exists (OK or EPERM):
|
|
167
|
+
* identity recorded → argsHint (when recorded) decides ALONE: cmdline
|
|
168
|
+
* contains it → true, else false. startedAt only
|
|
169
|
+
* decides when no argsHint was recorded; query
|
|
170
|
+
* failed → true (never auto-clean an identity we
|
|
171
|
+
* could not verify)
|
|
172
|
+
* legacy record → cmdline contains the daemon marker → true;
|
|
173
|
+
* foreign cmdline → false; query failed → EPERM
|
|
174
|
+
* proves it is not ours (same-user daemon) → false,
|
|
175
|
+
* while a signalable pid stays conservatively true
|
|
176
|
+
* Accepts a bare pid (number) for backward compatibility → treated as legacy.
|
|
177
|
+
* @param {number|{pid:number,startedAt?:string,argsHint?:string,legacy?:boolean}} record
|
|
178
|
+
* @param {object} [io]
|
|
179
|
+
*/
|
|
180
|
+
export function processAlive(record, io = defaultIO()) {
|
|
181
|
+
const rec = typeof record === "number" ? { pid: record, legacy: true } : record;
|
|
182
|
+
if (!rec || !Number.isInteger(rec.pid) || rec.pid <= 0) return false;
|
|
183
|
+
let eperm = false;
|
|
184
|
+
try {
|
|
185
|
+
io.kill(rec.pid, 0);
|
|
79
186
|
} catch (err) {
|
|
80
|
-
|
|
187
|
+
if (!err || err.code !== "EPERM") return false;
|
|
188
|
+
eperm = true;
|
|
81
189
|
}
|
|
190
|
+
// The pid exists. Verify the occupant is still our daemon.
|
|
191
|
+
const identity = queryProcessIdentity(rec.pid, io);
|
|
192
|
+
const hasRecordedIdentity = Boolean(rec.startedAt || rec.argsHint);
|
|
193
|
+
if (hasRecordedIdentity) {
|
|
194
|
+
if (identity === null) return true; // unverifiable → conservative: running
|
|
195
|
+
// Collapse whitespace on both sides: the ps parse re-joins fields with
|
|
196
|
+
// single spaces, so an argsHint containing consecutive spaces must not
|
|
197
|
+
// read as a mismatch (false-stale is the dangerous direction).
|
|
198
|
+
const liveCmd = identity.cmdline.replace(/\s+/g, " ");
|
|
199
|
+
const hint = rec.argsHint ? rec.argsHint.replace(/\s+/g, " ") : null;
|
|
200
|
+
// argsHint decides ALONE when recorded (fix-daemon-stop-ntp-false-stale):
|
|
201
|
+
// startedAt strings are clock-derived (POSIX lstart is recomputed from
|
|
202
|
+
// btime + start ticks at query time), so an NTP step after spawn shifts
|
|
203
|
+
// them for the SAME process — it must never veto a matching argsHint, or
|
|
204
|
+
// a boot-autostarted daemon becomes unstoppable once chrony corrects the
|
|
205
|
+
// clock. startedAt still decides for records without an argsHint.
|
|
206
|
+
if (hint) return liveCmd.includes(hint);
|
|
207
|
+
if (rec.startedAt && identity.startedAt !== null && identity.startedAt !== rec.startedAt) return false;
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
// Legacy record (no identity metadata): cmdline-marker fallback.
|
|
211
|
+
if (identity === null) {
|
|
212
|
+
// EPERM on a legacy record already proves the process belongs to another
|
|
213
|
+
// user — the CLI and daemon always run as the same user (q3=a self-heal,
|
|
214
|
+
// covers busybox systems where ps cannot report identity).
|
|
215
|
+
return !eperm;
|
|
216
|
+
}
|
|
217
|
+
return identity.cmdline.includes(DAEMON_CMD_MARKER);
|
|
82
218
|
}
|
|
83
219
|
|
|
84
220
|
/**
|
|
85
221
|
* Current daemon status from the pidfile.
|
|
86
222
|
* @param {object} [io]
|
|
87
223
|
* @returns {{ running: boolean, pid: number|null, stale: boolean }}
|
|
88
|
-
* `stale` = a pidfile exists but its pid is dead
|
|
224
|
+
* `stale` = a pidfile exists but its pid is dead OR its identity no longer
|
|
225
|
+
* matches (pid recycled after a reboot / crash).
|
|
89
226
|
*/
|
|
90
227
|
export function isRunning(io = defaultIO()) {
|
|
91
|
-
const
|
|
92
|
-
if (
|
|
93
|
-
const alive = processAlive(
|
|
94
|
-
return { running: alive, pid, stale: !alive };
|
|
228
|
+
const record = readPidRecord(io);
|
|
229
|
+
if (record == null) return { running: false, pid: null, stale: false };
|
|
230
|
+
const alive = processAlive(record, io);
|
|
231
|
+
return { running: alive, pid: record.pid, stale: !alive };
|
|
95
232
|
}
|
|
96
233
|
|
|
97
234
|
/** Ensure ~/.chorus exists for the pid/log files. */
|
|
@@ -145,22 +282,43 @@ export function startBackground(spec, io = defaultIO()) {
|
|
|
145
282
|
// Let the parent exit without waiting on the child (POSIX + Windows).
|
|
146
283
|
child.unref?.();
|
|
147
284
|
|
|
285
|
+
// Record the child's IDENTITY alongside its pid so later probes can tell
|
|
286
|
+
// "our daemon" from "a reboot-recycled pid" (fix-daemon-stale-pid-identity).
|
|
287
|
+
// argsHint: a distinguishing substring of the spawned command line. startedAt:
|
|
288
|
+
// the same query the probe uses (string-equality comparison, no clock math);
|
|
289
|
+
// a failed post-spawn query degrades to a record without startedAt.
|
|
290
|
+
const record = { pid: child.pid };
|
|
291
|
+
const argsHint = (spec.args ?? []).join(" ").trim();
|
|
292
|
+
if (argsHint) record.argsHint = argsHint;
|
|
293
|
+
const identity = queryProcessIdentity(child.pid, io);
|
|
294
|
+
if (identity?.startedAt) record.startedAt = identity.startedAt;
|
|
295
|
+
|
|
148
296
|
ensureDir(pidFile, io);
|
|
149
|
-
io.writeFileSync(pidFile, `${
|
|
297
|
+
io.writeFileSync(pidFile, `${JSON.stringify(record)}\n`, { mode: 0o600 });
|
|
150
298
|
return { started: true, pid: child.pid, logFile, pidFile };
|
|
151
299
|
}
|
|
152
300
|
|
|
153
301
|
/**
|
|
154
302
|
* Stop the recorded background daemon: signal it, then remove the pidfile.
|
|
155
|
-
*
|
|
156
|
-
*
|
|
303
|
+
*
|
|
304
|
+
* `opts.force` (the `chorus daemon stop --force` escape hatch): best-effort
|
|
305
|
+
* SIGTERM (failure ignored), then unlink the pidfile UNCONDITIONALLY — for
|
|
306
|
+
* stuck states the identity probe cannot resolve (e.g. an unverifiable pid the
|
|
307
|
+
* operator knows is not the daemon).
|
|
308
|
+
* @param {object} [io] @param {{ force?: boolean }} [opts]
|
|
309
|
+
* @returns {{ stopped: boolean, pid: number|null, reason: "stopped"|"not-running"|"stale-cleared"|"forced"|"error", message: string }}
|
|
157
310
|
*/
|
|
158
|
-
export function stopDaemon(io = defaultIO()) {
|
|
311
|
+
export function stopDaemon(io = defaultIO(), opts = {}) {
|
|
159
312
|
const pidFile = pidFilePath(io);
|
|
160
313
|
const status = isRunning(io);
|
|
161
314
|
if (status.pid == null) {
|
|
162
315
|
return { stopped: false, pid: null, reason: "not-running", message: "no daemon is running (no pidfile)" };
|
|
163
316
|
}
|
|
317
|
+
if (opts.force) {
|
|
318
|
+
try { io.kill(status.pid, "SIGTERM"); } catch { /* best-effort by design */ }
|
|
319
|
+
try { io.unlinkSync(pidFile); } catch { /* best-effort */ }
|
|
320
|
+
return { stopped: true, pid: status.pid, reason: "forced", message: `forced cleanup: signalled pid ${status.pid} (best-effort) and removed the pidfile` };
|
|
321
|
+
}
|
|
164
322
|
if (!status.running) {
|
|
165
323
|
// Stale pidfile — clean it up, report clearly (no silent failure).
|
|
166
324
|
try { io.unlinkSync(pidFile); } catch { /* best-effort */ }
|
|
@@ -169,7 +327,16 @@ export function stopDaemon(io = defaultIO()) {
|
|
|
169
327
|
try {
|
|
170
328
|
io.kill(status.pid, "SIGTERM");
|
|
171
329
|
} catch (err) {
|
|
172
|
-
|
|
330
|
+
// Keep the pidfile: deleting a record we could not act on risks orphaning a
|
|
331
|
+
// genuinely live daemon. The message names the recovery path instead.
|
|
332
|
+
return {
|
|
333
|
+
stopped: false,
|
|
334
|
+
pid: status.pid,
|
|
335
|
+
reason: "error",
|
|
336
|
+
message:
|
|
337
|
+
`failed to signal pid ${status.pid}: ${err instanceof Error ? err.message : String(err)}` +
|
|
338
|
+
` — the pid may have been recycled by the OS; if you are sure no daemon is running: chorus daemon stop --force`,
|
|
339
|
+
};
|
|
173
340
|
}
|
|
174
341
|
try { io.unlinkSync(pidFile); } catch { /* best-effort */ }
|
|
175
342
|
return { stopped: true, pid: status.pid, reason: "stopped", message: `stopped daemon (pid ${status.pid})` };
|
|
@@ -134,10 +134,12 @@ export function createDaemonRestClient(opts) {
|
|
|
134
134
|
/**
|
|
135
135
|
* POST /api/daemon/turn-advance — advance a wake's DaemonSessionTurn lifecycle. The
|
|
136
136
|
* server resolves the turn by the session BUSINESS KEY (`sessionId`); the optional
|
|
137
|
-
* `entityType`/`entityUuid` stamp the weak executionUuid link.
|
|
137
|
+
* `entityType`/`entityUuid` stamp the weak executionUuid link. An `interrupted`
|
|
138
|
+
* status may carry `interruptedReason` (`user`/`crash`/`shutdown` — the server
|
|
139
|
+
* rejects `offline`, which is its own reconcile verdict). Requires the
|
|
138
140
|
* connectionUuid (the server addresses the turn against a connection the agent owns).
|
|
139
141
|
*/
|
|
140
|
-
async turnAdvance({ sessionId, status, entityType, entityUuid }) {
|
|
142
|
+
async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason }) {
|
|
141
143
|
const connectionUuid = getConnectionUuid();
|
|
142
144
|
if (!connectionUuid) {
|
|
143
145
|
const error = `cannot advance turn for session ${sessionId} → ${status} — no connection uuid yet`;
|
|
@@ -150,6 +152,8 @@ export function createDaemonRestClient(opts) {
|
|
|
150
152
|
status,
|
|
151
153
|
// Only sent when BOTH are present, so the server never gets a partial linkage.
|
|
152
154
|
...(entityType && entityUuid ? { entityType, entityUuid } : {}),
|
|
155
|
+
// Only meaningful alongside status=interrupted; never sent otherwise.
|
|
156
|
+
...(status === "interrupted" && interruptedReason ? { interruptedReason } : {}),
|
|
153
157
|
};
|
|
154
158
|
return post(
|
|
155
159
|
"turn-advance",
|