@chorus-aidlc/chorus 0.15.1 → 0.16.2
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 +394 -393
- package/.next/standalone/.next/app-path-routes-manifest.json +46 -46
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +21 -21
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +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 +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.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/connection-heartbeat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.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.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-directory-requests/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/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_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 +1 -1
- 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 +1 -1
- 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/[uuid]/wake-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.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/agent-cwd-options/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.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 +2 -2
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +3 -3
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +46 -46
- package/.next/standalone/.next/server/chunks/1318.js +1 -1
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/2570.js +2 -2
- package/.next/standalone/.next/server/chunks/2572.js +1 -1
- package/.next/standalone/.next/server/chunks/2618.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3594.js +1 -0
- package/.next/standalone/.next/server/chunks/{2547.js → 4011.js} +3 -3
- package/.next/standalone/.next/server/chunks/4394.js +1 -0
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/5205.js +1 -0
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/{2282.js → 5351.js} +3 -3
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/6207.js +1 -1
- package/.next/standalone/.next/server/chunks/6506.js +3 -3
- package/.next/standalone/.next/server/chunks/6667.js +1 -0
- package/.next/standalone/.next/server/chunks/679.js +1 -1
- package/.next/standalone/.next/server/chunks/6995.js +1 -0
- 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/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/chunks/9793.js +1 -0
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/pages-manifest.json +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/11595.b6f8ad33572b32fe.js +1 -0
- package/.next/standalone/.next/static/chunks/19887-9f459ee9e8d0855f.js +1 -0
- package/.next/standalone/.next/static/chunks/29108-b9b232255811ffa8.js +1 -0
- package/.next/standalone/.next/static/chunks/{31308-bb4a97b3f39c22dd.js → 31308-fda6febfb2882a28.js} +1 -1
- package/.next/standalone/.next/static/chunks/33456.e8550ad410031e29.js +1 -0
- package/.next/standalone/.next/static/chunks/35432-ee83da56c49ef6f8.js +1 -0
- package/.next/standalone/.next/static/chunks/4860.b405fc235b36271b.js +1 -0
- package/.next/standalone/.next/static/chunks/53073-5fd399cb25a11740.js +1 -0
- package/.next/standalone/.next/static/chunks/6603-07faab08560f7ecd.js +1 -0
- package/.next/standalone/.next/static/chunks/66980-652990fcf3212c94.js +10 -0
- package/.next/standalone/.next/static/chunks/78155-db70d9684a1e77a2.js +1 -0
- package/.next/standalone/.next/static/chunks/78917-7354d3b6908da7d1.js +1 -0
- package/.next/standalone/.next/static/chunks/82751-de255af4418d53e4.js +1 -0
- package/.next/standalone/.next/static/chunks/94643-6d31df78aa3074b5.js +1 -0
- package/.next/standalone/.next/static/chunks/96170-75da13decdb6f73f.js +1 -0
- package/.next/standalone/.next/static/chunks/99366-425e9ef22e60e3e2.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.9dce8f30802824fc.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-cea0bb3e3a295bea.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-007278623926490f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-b6ecaf52f6b81ec7.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-2c9d3f4c6e0ff807.js → page-82404154708e48a9.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-f5a351c544ed23d7.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-3cd46bec9383b191.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-d5b222f379b2e8ca.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/{page-ed9415921188b4d3.js → page-6abc7d1785e2b999.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-c70af8cac7bdc483.js → page-7f87113e5d8bcf6e.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-715b000c156a080c.js → page-30ab1573c4bd466f.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-b21d4184d9ca0b25.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/page-3b6c54f887108635.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-e181cbbb1e041891.js → webpack-b54e0c78eded76be.js} +1 -1
- package/.next/standalone/.next/static/css/893d99a21153c9b0.css +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +1 -1
- package/.next/standalone/public/chorus-plugin/agents/proposal-reviewer.md +1 -0
- package/.next/standalone/public/chorus-plugin/agents/task-reviewer.md +2 -0
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +4 -3
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +68 -0
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +1 -1
- package/.next/standalone/public/install-kiro.sh +10 -7
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.json +1 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +68 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +3 -2
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +4 -3
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/docs-chorus/SKILL.md +70 -0
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/package.json +9 -5
- package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +2 -1
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +2 -1
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
- package/README.ja.md +31 -359
- package/README.ko.md +33 -360
- package/README.md +39 -367
- package/README.zh.md +36 -341
- package/cli/claude-spawner.mjs +15 -6
- package/cli/client-args.mjs +8 -0
- package/cli/codex-spawner.mjs +7 -3
- package/cli/control-handler.mjs +13 -3
- package/cli/credentials.mjs +41 -0
- package/cli/daemon-config.mjs +202 -1
- package/cli/daemon-install-config.mjs +38 -1
- package/cli/daemon-rest-client.mjs +11 -3
- package/cli/daemon.mjs +274 -11
- package/cli/event-router.mjs +17 -5
- package/cli/login.mjs +90 -2
- package/cli/prompts.mjs +116 -1
- package/cli/turn-reporter.mjs +5 -1
- package/cli/wake-queue.mjs +57 -35
- package/cli/waker.mjs +125 -36
- package/package.json +1 -1
- package/prisma/migrations/20260814101500_add_typed_assignment_provenance/migration.sql +2 -0
- package/prisma/schema.prisma +4 -2
- package/.next/standalone/.next/server/chunks/1114.js +0 -1
- package/.next/standalone/.next/server/chunks/1524.js +0 -1
- package/.next/standalone/.next/server/chunks/330.js +0 -1
- package/.next/standalone/.next/server/chunks/3525.js +0 -1
- package/.next/standalone/.next/server/chunks/4070.js +0 -1
- package/.next/standalone/.next/server/chunks/8540.js +0 -1
- package/.next/standalone/.next/static/chunks/11595.69e774e65ffda45f.js +0 -1
- package/.next/standalone/.next/static/chunks/18351-12dc856208d79e10.js +0 -1
- package/.next/standalone/.next/static/chunks/33456.48112aa459fd9c68.js +0 -1
- package/.next/standalone/.next/static/chunks/37938-0b9a2b891c04b166.js +0 -1
- package/.next/standalone/.next/static/chunks/4340-a33120fb742af57e.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.496d21fc6db9e153.js +0 -1
- package/.next/standalone/.next/static/chunks/68326-61feeb2f6cddd338.js +0 -1
- package/.next/standalone/.next/static/chunks/72974-7e63b565a9ef443b.js +0 -1
- package/.next/standalone/.next/static/chunks/78917-f91904c6c2d12dab.js +0 -1
- package/.next/standalone/.next/static/chunks/80748-e971c5a5d6ef967d.js +0 -1
- package/.next/standalone/.next/static/chunks/80904-973284d1fe916c38.js +0 -1
- package/.next/standalone/.next/static/chunks/94426-39b6da238425f9b7.js +0 -10
- package/.next/standalone/.next/static/chunks/94470-cae3b3ad4e51d2ff.js +0 -1
- package/.next/standalone/.next/static/chunks/94643-ba1ebff5769d2b50.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.5ac319a55a8f99a1.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-177a3fa88be94b4a.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-ae7c9d32fa1c2532.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-4a8ac49308a4e23b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-03408be00dc4822b.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-dd5a0d1e50226c78.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-596d97796dd55e2f.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-e786a59c24eb5bda.js +0 -1
- package/.next/standalone/.next/static/chunks/app/onboarding/page-df7c97cefb508201.js +0 -1
- package/.next/standalone/.next/static/css/ef995b001437e3ef.css +0 -1
- /package/.next/standalone/.next/static/{8kqUZqMF8xgdDXm_I4XdF → YTZwWTfE0BsJnjCDYCEHi}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{8kqUZqMF8xgdDXm_I4XdF → YTZwWTfE0BsJnjCDYCEHi}/_ssgManifest.js +0 -0
package/cli/credentials.mjs
CHANGED
|
@@ -70,6 +70,47 @@ export function readYoloAck(deps = {}) {
|
|
|
70
70
|
return file ? nonEmpty(file.yoloAckAt) ?? null : null;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Resolve the DEFAULT url + apiKey layer (per-field, non-throwing) for the
|
|
75
|
+
* multi-agent config. Unlike `resolveCredentials` (which needs a COMPLETE pair
|
|
76
|
+
* and throws when none resolves), this resolves each field independently and
|
|
77
|
+
* returns `undefined` for any field no source supplies. It is the "top-level
|
|
78
|
+
* defaults" layer that each `agents[]` entry merges over: an agent that omits
|
|
79
|
+
* `url` inherits this default `url`, an agent that omits `apiKey` inherits this
|
|
80
|
+
* default `apiKey` (rarely useful, but symmetric with every other default).
|
|
81
|
+
*
|
|
82
|
+
* Same source order as `resolveCredentials`, applied per field:
|
|
83
|
+
* flag > env > login file (top-level) > plugin fallback.
|
|
84
|
+
*
|
|
85
|
+
* @param {{ url?: string, apiKey?: string }} flags
|
|
86
|
+
* @param {ResolveDeps} [deps]
|
|
87
|
+
* @returns {{ url: string | undefined, apiKey: string | undefined }}
|
|
88
|
+
*/
|
|
89
|
+
export function resolveCredentialDefaults(flags = {}, deps = {}) {
|
|
90
|
+
const env = deps.env ?? process.env;
|
|
91
|
+
const readJson = deps.readJson ?? readJsonSafe;
|
|
92
|
+
const loginPath = deps.loginPath ?? loginFilePath();
|
|
93
|
+
const settingsPath = deps.settingsPath ?? claudeSettingsPath();
|
|
94
|
+
|
|
95
|
+
const file = readJson(loginPath);
|
|
96
|
+
const settings = readJson(settingsPath);
|
|
97
|
+
const pluginEnv =
|
|
98
|
+
settings && typeof settings.env === "object" && settings.env !== null
|
|
99
|
+
? /** @type {Record<string, unknown>} */ (settings.env)
|
|
100
|
+
: null;
|
|
101
|
+
|
|
102
|
+
const pick = (flagVal, envKey, fileKey) =>
|
|
103
|
+
nonEmpty(flagVal) ??
|
|
104
|
+
nonEmpty(env[envKey]) ??
|
|
105
|
+
(file ? nonEmpty(file[fileKey]) : undefined) ??
|
|
106
|
+
(pluginEnv ? nonEmpty(pluginEnv[envKey]) : undefined);
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
url: pick(flags.url, "CHORUS_URL", "url"),
|
|
110
|
+
apiKey: pick(flags.apiKey, "CHORUS_API_KEY", "apiKey"),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
73
114
|
/**
|
|
74
115
|
* @typedef {Object} ResolvedCredentials
|
|
75
116
|
* @property {string} url
|
package/cli/daemon-config.mjs
CHANGED
|
@@ -15,11 +15,21 @@
|
|
|
15
15
|
import { readFileSync } from "node:fs";
|
|
16
16
|
import { homedir } from "node:os";
|
|
17
17
|
import { isAbsolute, resolve as resolvePath } from "node:path";
|
|
18
|
-
import { loginFilePath } from "./credentials.mjs";
|
|
18
|
+
import { loginFilePath, resolveCredentials, resolveCredentialDefaults } from "./credentials.mjs";
|
|
19
|
+
import { resolveAgentType, KNOWN_AGENTS } from "./daemon-agent.mjs";
|
|
20
|
+
import { resolvePermissionMode } from "./daemon-permission-mode.mjs";
|
|
19
21
|
|
|
20
22
|
/** Built-in default escalation window (ms) — matches the spec's 10 seconds. */
|
|
21
23
|
export const DEFAULT_SIGINT_TIMEOUT_MS = 10_000;
|
|
22
24
|
|
|
25
|
+
/**
|
|
26
|
+
* Built-in default per-agent wake concurrency. This was the process-wide
|
|
27
|
+
* hardcoded WakeQueue cap (`maxConcurrency ?? 4` in daemon.mjs) before it became
|
|
28
|
+
* a per-agent, configurable value — kept at 4 so an agent that specifies no
|
|
29
|
+
* `maxConcurrency` behaves exactly as the daemon did before.
|
|
30
|
+
*/
|
|
31
|
+
export const DEFAULT_MAX_CONCURRENCY = 4;
|
|
32
|
+
|
|
23
33
|
/**
|
|
24
34
|
* Coerce a value to a positive finite integer of milliseconds, or undefined when it
|
|
25
35
|
* is absent / not a usable number. Accepts a number or a numeric string (env vars
|
|
@@ -235,3 +245,194 @@ export function resolveBrowseRoots(flags = {}, deps = {}) {
|
|
|
235
245
|
: [];
|
|
236
246
|
return fromFile.length ? fromFile : [normalizeCwd(home, home)];
|
|
237
247
|
}
|
|
248
|
+
|
|
249
|
+
// ===== Multi-agent config (daemon-multi-agent — N independent agents per daemon) =====
|
|
250
|
+
//
|
|
251
|
+
// One daemon process may serve a LIST of fully-independent agents, each with its
|
|
252
|
+
// own credentials + working directories + backend + permission mode + concurrency.
|
|
253
|
+
// `resolveAgentConfigs` returns that list as `AgentConfig[]`, every field already
|
|
254
|
+
// merged with its default. Two shapes are supported:
|
|
255
|
+
//
|
|
256
|
+
// 1. `~/.chorus/daemon.json` has a non-empty `agents: [ … ]` array → one
|
|
257
|
+
// AgentConfig per entry, each entry's fields merged OVER the top-level
|
|
258
|
+
// defaults (per-agent value wins; an omitted field inherits the default).
|
|
259
|
+
// 2. No `agents[]` (or empty) → exactly ONE AgentConfig synthesized from the
|
|
260
|
+
// existing flat resolution (resolveCredentials + resolveDaemonCwds +
|
|
261
|
+
// resolveAgentType + sigint + browseRoots). This is byte-for-byte the
|
|
262
|
+
// daemon's current single-agent behavior — old installs run unchanged, and
|
|
263
|
+
// flags / env still resolve this single agent's fields.
|
|
264
|
+
//
|
|
265
|
+
// Validation is strict and visible: a missing apiKey, an unresolvable url, an
|
|
266
|
+
// unknown agentType, or an invalid permissionMode THROWS an Error naming the
|
|
267
|
+
// offending agent. The daemon's top-level error handler turns that into a
|
|
268
|
+
// non-zero exit — the resolver never silently drops or falls back to a default
|
|
269
|
+
// agent (matching resolveCredentials' throw-on-nothing contract).
|
|
270
|
+
|
|
271
|
+
/** A non-empty trimmed string, or undefined. */
|
|
272
|
+
function nonEmptyStr(value) {
|
|
273
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* True iff `~/.chorus/daemon.json` declares a non-empty `agents[]` with at least
|
|
278
|
+
* one object entry — i.e. the daemon should run in multi-agent mode. Lets the
|
|
279
|
+
* daemon pick the multi-agent startup path (bypassing the flat single-credential
|
|
280
|
+
* preflight) without duplicating the file read. Never throws.
|
|
281
|
+
* @param {{ readJson?: (p: string) => (Record<string, unknown>|null), loginPath?: string }} [deps]
|
|
282
|
+
* @returns {boolean}
|
|
283
|
+
*/
|
|
284
|
+
export function hasConfiguredAgents(deps = {}) {
|
|
285
|
+
const readJson = deps.readJson ?? readJsonSafe;
|
|
286
|
+
const loginPath = deps.loginPath ?? loginFilePath();
|
|
287
|
+
const file = readJson(loginPath);
|
|
288
|
+
return Boolean(
|
|
289
|
+
file && Array.isArray(file.agents) && file.agents.some((a) => a && typeof a === "object"),
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Coerce to a positive finite integer (count), or undefined. Accepts number or
|
|
295
|
+
* numeric string; rejects 0, negatives, NaN, Infinity. Used for maxConcurrency.
|
|
296
|
+
* @param {unknown} value @returns {number | undefined}
|
|
297
|
+
*/
|
|
298
|
+
function positiveInt(value) {
|
|
299
|
+
if (value === undefined || value === null || value === "") return undefined;
|
|
300
|
+
const n = typeof value === "number" ? value : Number(String(value).trim());
|
|
301
|
+
if (!Number.isFinite(n) || n <= 0) return undefined;
|
|
302
|
+
return Math.floor(n);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* @typedef {Object} AgentConfig One fully-resolved agent runtime config.
|
|
307
|
+
* @property {string} url Chorus server URL for this agent.
|
|
308
|
+
* @property {string} apiKey This agent's `cho_` API key.
|
|
309
|
+
* @property {string} agentType Backend: claude-code | codex | kiro.
|
|
310
|
+
* @property {Array<string|undefined>} cwds Served paths (`undefined` ⇒ process cwd).
|
|
311
|
+
* @property {"yolo"|"chorus"} permissionMode Woken-agent permission posture.
|
|
312
|
+
* @property {number} maxConcurrency This agent's wake-queue cap.
|
|
313
|
+
* @property {number} sigintTimeoutMs Interrupt escalation window (ms).
|
|
314
|
+
* @property {string[]} browseRoots Directory-discovery allowlist.
|
|
315
|
+
* @property {string} label Diagnostic label ("agent" or "agents[i]").
|
|
316
|
+
*/
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Resolve the list of agents this daemon serves. See the block comment above.
|
|
320
|
+
*
|
|
321
|
+
* @param {{ url?: string, apiKey?: string, agent?: string, cwd?: string|string[],
|
|
322
|
+
* browseRoot?: string|string[], sigintTimeout?: number|string,
|
|
323
|
+
* chorusOnly?: boolean, yolo?: boolean }} [flags]
|
|
324
|
+
* @param {{
|
|
325
|
+
* env?: Record<string, string|undefined>,
|
|
326
|
+
* readJson?: (path: string) => (Record<string, unknown>|null),
|
|
327
|
+
* loginPath?: string,
|
|
328
|
+
* settingsPath?: string,
|
|
329
|
+
* home?: string,
|
|
330
|
+
* permissionMode?: "yolo"|"chorus", // pre-resolved global posture (else computed)
|
|
331
|
+
* }} [deps]
|
|
332
|
+
* @returns {AgentConfig[]} Non-empty list; throws on an invalid agent entry.
|
|
333
|
+
*/
|
|
334
|
+
export function resolveAgentConfigs(flags = {}, deps = {}) {
|
|
335
|
+
const env = deps.env ?? process.env;
|
|
336
|
+
const readJson = deps.readJson ?? readJsonSafe;
|
|
337
|
+
const loginPath = deps.loginPath ?? loginFilePath();
|
|
338
|
+
const home = deps.home ?? homedir();
|
|
339
|
+
const file = readJson(loginPath);
|
|
340
|
+
|
|
341
|
+
// Global default permission posture; a per-agent `permissionMode` overrides it.
|
|
342
|
+
// needConfirm/hasAck is vestigial, so isTTY/hasAck do not affect the resolved mode.
|
|
343
|
+
const defaultPermissionMode =
|
|
344
|
+
deps.permissionMode ??
|
|
345
|
+
resolvePermissionMode(flags, env, { isTTY: false, hasAck: false }).mode;
|
|
346
|
+
|
|
347
|
+
const agentEntries =
|
|
348
|
+
file && Array.isArray(file.agents)
|
|
349
|
+
? file.agents.filter((a) => a && typeof a === "object")
|
|
350
|
+
: [];
|
|
351
|
+
|
|
352
|
+
// ---- Back-compat: no agents[] → exactly one agent from flat resolution ----
|
|
353
|
+
if (agentEntries.length === 0) {
|
|
354
|
+
const creds = resolveCredentials(flags, deps); // throws if no complete pair (today's behavior)
|
|
355
|
+
const at = resolveAgentType(flags, env, deps);
|
|
356
|
+
if (!at.ok) throw new Error(at.error);
|
|
357
|
+
return [
|
|
358
|
+
{
|
|
359
|
+
url: creds.url,
|
|
360
|
+
apiKey: creds.apiKey,
|
|
361
|
+
agentType: at.agent,
|
|
362
|
+
cwds: resolveDaemonCwds(flags, deps),
|
|
363
|
+
permissionMode: defaultPermissionMode,
|
|
364
|
+
maxConcurrency: positiveInt(file?.maxConcurrency) ?? DEFAULT_MAX_CONCURRENCY,
|
|
365
|
+
sigintTimeoutMs: resolveSigintTimeoutMs(flags, deps),
|
|
366
|
+
browseRoots: resolveBrowseRoots(flags, deps),
|
|
367
|
+
label: "agent",
|
|
368
|
+
},
|
|
369
|
+
];
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// ---- Multi-agent: each entry merged over the top-level defaults ----
|
|
373
|
+
const credDefaults = resolveCredentialDefaults(flags, deps);
|
|
374
|
+
const defaultCwds = resolveDaemonCwds(flags, deps);
|
|
375
|
+
const defaultAgentType = resolveAgentType(flags, env, deps); // top-level default (may be {ok:false} if top-level `agent` is garbage)
|
|
376
|
+
const defaultSigint = resolveSigintTimeoutMs(flags, deps);
|
|
377
|
+
const defaultBrowseRoots = resolveBrowseRoots(flags, deps);
|
|
378
|
+
const defaultMaxConcurrency = positiveInt(file?.maxConcurrency) ?? DEFAULT_MAX_CONCURRENCY;
|
|
379
|
+
|
|
380
|
+
return agentEntries.map((entry, i) => {
|
|
381
|
+
const label = nonEmptyStr(entry.label) ?? nonEmptyStr(entry.name) ?? `agents[${i}]`;
|
|
382
|
+
|
|
383
|
+
const url = nonEmptyStr(entry.url) ?? credDefaults.url;
|
|
384
|
+
const apiKey = nonEmptyStr(entry.apiKey) ?? credDefaults.apiKey;
|
|
385
|
+
if (!apiKey) {
|
|
386
|
+
throw new Error(`Agent ${label}: missing apiKey (no per-agent apiKey and no top-level default).`);
|
|
387
|
+
}
|
|
388
|
+
if (!url) {
|
|
389
|
+
throw new Error(`Agent ${label}: missing/unresolvable url (no per-agent url and no top-level default).`);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// agentType: per-agent value, else the top-level default (which must itself be valid).
|
|
393
|
+
let agentType;
|
|
394
|
+
if (nonEmptyStr(entry.agentType)) {
|
|
395
|
+
agentType = nonEmptyStr(entry.agentType);
|
|
396
|
+
} else if (defaultAgentType.ok) {
|
|
397
|
+
agentType = defaultAgentType.agent;
|
|
398
|
+
} else {
|
|
399
|
+
throw new Error(
|
|
400
|
+
`Agent ${label}: no agentType and the top-level agent default is invalid (${defaultAgentType.error}).`,
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
if (!KNOWN_AGENTS.includes(agentType)) {
|
|
404
|
+
throw new Error(
|
|
405
|
+
`Agent ${label}: unknown agentType "${agentType}". Accepted: ${KNOWN_AGENTS.join(", ")}.`,
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// permissionMode: per-agent override (yolo|chorus only), else global posture.
|
|
410
|
+
let permissionMode = defaultPermissionMode;
|
|
411
|
+
if (entry.permissionMode !== undefined) {
|
|
412
|
+
const pm = nonEmptyStr(entry.permissionMode);
|
|
413
|
+
if (pm !== "yolo" && pm !== "chorus") {
|
|
414
|
+
throw new Error(
|
|
415
|
+
`Agent ${label}: invalid permissionMode "${entry.permissionMode}". Accepted: yolo, chorus.`,
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
permissionMode = pm;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
// cwds: per-agent list (cleaned); an empty/blank list degrades to [undefined]
|
|
422
|
+
// (serve the process cwd). Omitted → inherit the top-level default set.
|
|
423
|
+
let cwds;
|
|
424
|
+
if (entry.cwds !== undefined) {
|
|
425
|
+
const cleaned = cleanCwdList(entry.cwds, home);
|
|
426
|
+
cwds = cleaned.length ? cleaned : [undefined];
|
|
427
|
+
} else {
|
|
428
|
+
cwds = defaultCwds;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
const maxConcurrency = positiveInt(entry.maxConcurrency) ?? defaultMaxConcurrency;
|
|
432
|
+
const sigintTimeoutMs = positiveIntMs(entry.sigintTimeoutMs) ?? defaultSigint;
|
|
433
|
+
const browseRoots =
|
|
434
|
+
entry.browseRoots !== undefined ? cleanCwdList(entry.browseRoots, home) : defaultBrowseRoots;
|
|
435
|
+
|
|
436
|
+
return { url, apiKey, agentType, cwds, permissionMode, maxConcurrency, sigintTimeoutMs, browseRoots, label };
|
|
437
|
+
});
|
|
438
|
+
}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
import { homedir } from "node:os";
|
|
25
25
|
import { resolveCredentials, loginFilePath } from "./credentials.mjs";
|
|
26
|
-
import { updateDaemonConfig, prompt as defaultPrompt } from "./login.mjs";
|
|
26
|
+
import { updateDaemonConfig, appendAgentConfig, prompt as defaultPrompt } from "./login.mjs";
|
|
27
27
|
import { validateAndFetchIdentity } from "./chorus-client.mjs";
|
|
28
28
|
import { normalizeCwd, cleanCwdList } from "./daemon-config.mjs";
|
|
29
29
|
import { KNOWN_AGENTS, DEFAULT_AGENT } from "./daemon-agent.mjs";
|
|
@@ -132,6 +132,43 @@ export async function resolveInstallCredentials(flags = {}, env = {}, opts = {})
|
|
|
132
132
|
// field-merge writer preserves cwds / yoloAckAt / sigintTimeoutMs.
|
|
133
133
|
writeConfig({ url, apiKey, agentUuid: identity.uuid, agentName: identity.name });
|
|
134
134
|
log(`[Chorus] credentials saved for ${identity.name} (${identity.uuid}).`);
|
|
135
|
+
|
|
136
|
+
// Multi-agent (daemon-multi-agent): with `--add` on a TTY, offer to add more
|
|
137
|
+
// agents in the same run. Each additional key is validated then APPENDED to
|
|
138
|
+
// agents[] (the first agent above is folded into agents[0] on the first
|
|
139
|
+
// append). Opt-in via --add so a plain install prompts for nothing extra;
|
|
140
|
+
// never runs on a non-TTY / --yes / skip run. Hand-editing daemon.json remains
|
|
141
|
+
// fully supported regardless.
|
|
142
|
+
if (isTTY && !skip && flags.add === true) {
|
|
143
|
+
const appendAgent = opts.appendAgent ?? appendAgentConfig;
|
|
144
|
+
// Bound the loop so a stuck/looping prompt can never spin forever.
|
|
145
|
+
for (let added = 0; added < 32; added += 1) {
|
|
146
|
+
const more = nonEmpty(await ask("Add another agent? [y/N]: "));
|
|
147
|
+
if (!more || !/^y(es)?$/i.test(more)) break;
|
|
148
|
+
const u = nonEmpty(await ask(" Chorus URL: "));
|
|
149
|
+
const k = nonEmpty(await ask(" Chorus API key (cho_...): ", { mask: true }));
|
|
150
|
+
if (!u || !k) {
|
|
151
|
+
errLog("[Chorus] both a URL and an API key are required — skipping this agent.");
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
let id;
|
|
155
|
+
try {
|
|
156
|
+
id = await validate({ url: u, apiKey: k });
|
|
157
|
+
} catch (err) {
|
|
158
|
+
errLog(
|
|
159
|
+
`[Chorus] validation failed: ${err instanceof Error ? err.message : String(err)} — this agent was NOT added.`,
|
|
160
|
+
);
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
const res = appendAgent({ url: u, apiKey: k, agentUuid: id.uuid, agentName: id.name });
|
|
164
|
+
if (!res.ok) {
|
|
165
|
+
errLog(`[Chorus] agent ${id.name} (${id.uuid}) is already configured — skipping.`);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
log(`[Chorus] added agent ${id.name} (${id.uuid}) — this daemon now serves ${res.agents.length} agents.`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
135
172
|
return { ok: true, creds: { url, apiKey }, identity };
|
|
136
173
|
}
|
|
137
174
|
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
// The five operations and their EXACT server payload shapes (verified against
|
|
8
8
|
// src/app/api/daemon/*/route.ts — the server is NOT changed by this work):
|
|
9
9
|
// turnAdvance → POST /api/daemon/turn-advance
|
|
10
|
-
// { connectionUuid, sessionId, status, entityType?, entityUuid
|
|
10
|
+
// { connectionUuid, sessionId, status, entityType?, entityUuid?,
|
|
11
|
+
// coalescedCount? }
|
|
11
12
|
// transcript → POST /api/daemon/transcript
|
|
12
13
|
// { sessionId, messages: [{ role, text }] }
|
|
13
14
|
// executionState → POST /api/daemon/execution-state
|
|
@@ -70,7 +71,7 @@ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
|
|
|
70
71
|
* logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
|
|
71
72
|
* }} opts
|
|
72
73
|
* @returns {{
|
|
73
|
-
* turnAdvance: (p: { sessionId: string, backendSessionId?: string|null, status: string, entityType?: string|null, entityUuid?: string|null }) => Promise<DaemonRestResult>,
|
|
74
|
+
* turnAdvance: (p: { sessionId: string, backendSessionId?: string|null, status: string, entityType?: string|null, entityUuid?: string|null, coalescedCount?: number }) => Promise<DaemonRestResult>,
|
|
74
75
|
* transcript: (p: { sessionId: string, messages: Array<{ role: string, text: string }> }) => Promise<DaemonRestResult>,
|
|
75
76
|
* executionState: (p: { executions: Array<Record<string, unknown>> }) => Promise<DaemonRestResult>,
|
|
76
77
|
* reportInterrupt: (p: { entityType: string, entityUuid: string, reason: string }) => Promise<DaemonRestResult>,
|
|
@@ -147,7 +148,7 @@ export function createDaemonRestClient(opts) {
|
|
|
147
148
|
* the turn's usage. Both ride the terminal edge only. Requires the connectionUuid (the
|
|
148
149
|
* server addresses the turn against a connection the agent owns).
|
|
149
150
|
*/
|
|
150
|
-
async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason, transcriptRelayError, usage, backendSessionId }) {
|
|
151
|
+
async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason, transcriptRelayError, usage, backendSessionId, coalescedCount }) {
|
|
151
152
|
const connectionUuid = getConnectionUuid();
|
|
152
153
|
if (!connectionUuid) {
|
|
153
154
|
const error = `cannot advance turn for session ${sessionId} → ${status} — no connection uuid yet`;
|
|
@@ -173,6 +174,13 @@ export function createDaemonRestClient(opts) {
|
|
|
173
174
|
// The whole normalized TokenUsage object, nested under `usage`, only on a terminal edge.
|
|
174
175
|
...(usage && isTerminal ? { usage } : {}),
|
|
175
176
|
...(backendSessionId && isTerminal ? { backendSessionId } : {}),
|
|
177
|
+
// Coalesced-wake count (add-daemon-wake-coalescing): meaningful ONLY on the → running
|
|
178
|
+
// edge, where the server settles the next (count − 1) same-session pending turns to
|
|
179
|
+
// `merged`. Sent only when a real batch coalesced (> 1); a single wake (default 1)
|
|
180
|
+
// omits it so the wire — and every existing turn-advance test — stays byte-identical.
|
|
181
|
+
...(status === "running" && typeof coalescedCount === "number" && coalescedCount > 1
|
|
182
|
+
? { coalescedCount }
|
|
183
|
+
: {}),
|
|
176
184
|
};
|
|
177
185
|
return post(
|
|
178
186
|
"turn-advance",
|