@chorus-aidlc/chorus 0.16.4 → 0.17.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 +511 -511
- package/.next/standalone/.next/app-path-routes-manifest.json +47 -47
- package/.next/standalone/.next/build-manifest.json +6 -6
- package/.next/standalone/.next/prerender-manifest.json +42 -42
- package/.next/standalone/.next/react-loadable-manifest.json +1 -1
- package/.next/standalone/.next/required-server-files.json +4 -4
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/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 +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +3 -3
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -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.js +2 -2
- 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 +5 -5
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page.js.nft.json +1 -1
- 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.js +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new/page.js.nft.json +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 +7 -7
- package/.next/standalone/.next/server/app/admin/companies/page.js +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page.js.nft.json +1 -1
- 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 +7 -7
- package/.next/standalone/.next/server/app/admin/page.js +2 -2
- package/.next/standalone/.next/server/app/admin/page.js.nft.json +1 -1
- 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 +7 -7
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -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.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/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/connection-heartbeat/route.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 +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 +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-directory-requests/[uuid]/route.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 +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.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 +9 -3
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -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 +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 +5 -5
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route.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.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.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.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 +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.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/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.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.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 +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.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route.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.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.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 -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/favicon.ico/route.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +6 -6
- 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 +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +6 -6
- package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
- package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +6 -6
- package/.next/standalone/.next/server/app/login/page.js +2 -2
- package/.next/standalone/.next/server/app/login/page.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 +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace/page.js.nft.json +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 +6 -6
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +6 -6
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +6 -6
- package/.next/standalone/.next/server/app/page.js +2 -2
- 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 +7 -7
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +7 -7
- package/.next/standalone/.next/server/app-paths-manifest.json +47 -47
- package/.next/standalone/.next/server/chunks/1073.js +1 -0
- package/.next/standalone/.next/server/chunks/1114.js +1 -0
- package/.next/standalone/.next/server/chunks/1267.js +1 -0
- 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/2940.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3197.js +1 -1
- package/.next/standalone/.next/server/chunks/378.js +4 -4
- package/.next/standalone/.next/server/chunks/4827.js +1 -1
- package/.next/standalone/.next/server/chunks/5245.js +1 -1
- package/.next/standalone/.next/server/chunks/{5351.js → 5737.js} +13 -9
- package/.next/standalone/.next/server/chunks/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/6145.js +1 -0
- package/.next/standalone/.next/server/chunks/6487.js +1 -0
- package/.next/standalone/.next/server/chunks/6506.js +1 -1
- package/.next/standalone/.next/server/chunks/6515.js +2 -2
- package/.next/standalone/.next/server/chunks/6753.js +3 -3
- package/.next/standalone/.next/server/chunks/679.js +1 -1
- package/.next/standalone/.next/server/chunks/7368.js +1 -1
- package/.next/standalone/.next/server/chunks/7530.js +1 -1
- package/.next/standalone/.next/server/chunks/7770.js +1 -0
- package/.next/standalone/.next/server/chunks/{4394.js → 7822.js} +1 -1
- package/.next/standalone/.next/server/chunks/8454.js +1 -1
- package/.next/standalone/.next/server/chunks/8586.js +1 -0
- package/.next/standalone/.next/server/chunks/920.js +1 -1
- package/.next/standalone/.next/server/chunks/9213.js +1 -1
- package/.next/standalone/.next/server/chunks/9378.js +1 -1
- package/.next/standalone/.next/server/chunks/9931.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/middleware-react-loadable-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +1 -1
- package/.next/standalone/.next/server/pages/404.html +2 -2
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/src/middleware.js +2 -2
- package/.next/standalone/.next/static/chunks/{11595.a6268c75ca8a2163.js → 11595.32f7dedc4fd7e3e1.js} +1 -1
- package/.next/standalone/.next/static/chunks/11998-27dcf858173fc015.js +1 -0
- package/.next/standalone/.next/static/chunks/12070-426bb88f5179812b.js +1 -0
- package/.next/standalone/.next/static/chunks/17409-67dbc0a3f4cbc207.js +1 -0
- package/.next/standalone/.next/static/chunks/26494-5a04e150431b0233.js +1 -0
- package/.next/standalone/.next/static/chunks/{31308-fda6febfb2882a28.js → 31308-bb4a97b3f39c22dd.js} +1 -1
- package/.next/standalone/.next/static/chunks/{33456.16ff7edf00137539.js → 33456.87f86ce6041405e0.js} +1 -1
- package/.next/standalone/.next/static/chunks/38366.fb931fab9c756890.js +1 -0
- package/.next/standalone/.next/static/chunks/4166-85352630c29e2c2b.js +1 -0
- package/.next/standalone/.next/static/chunks/{4860.9e06848eb531e667.js → 4860.9457e021394e9399.js} +1 -1
- package/.next/standalone/.next/static/chunks/{65096-f756aac39efad7a3.js → 65096-8295f53f97c40d47.js} +1 -1
- package/.next/standalone/.next/static/chunks/65807-086d83649f593a5a.js +1 -0
- package/.next/standalone/.next/static/chunks/79919-56796c262f51fa82.js +1 -0
- package/.next/standalone/.next/static/chunks/94643-87ee1ede6d955937.js +1 -0
- package/.next/standalone/.next/static/chunks/{99373.81b79c91858f9099.js → 99373.aed267aa48c5bdd0.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-9219c4de1012f0fb.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/{page-974781e4886529f8.js → page-82e90e222d6bc547.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/activity/page-f1eccb50d38d8982.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f4810f1b9f39d1ae.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-721d2152f1a28c88.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-9bcff40805f39b25.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-fdd617457730a116.js → page-f31ad2eebe257628.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-a4fb04068539c4ce.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-b1d2af10e9bc7e09.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-2cb245b0602a3c85.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-58b48aa0a11603c3.js → page-53ce4468844cc84f.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-286faced32c6133f.js → page-1c374d19e8046d9a.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-31d6f8e82c7f5366.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-32bff791b19a0a58.js +1 -0
- package/.next/standalone/.next/static/chunks/app/_not-found/{page-166b410da84336d4.js → page-b9d672df79b35e87.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/{page-b2458ed001dc8177.js → page-56118c51122ad639.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/admin/companies/new/page-4e20deb41357171c.js +1 -0
- package/.next/standalone/.next/static/chunks/app/admin/companies/page-0632f245bf9c1c27.js +1 -0
- package/.next/standalone/.next/static/chunks/app/admin/layout-725ab2331c642f36.js +1 -0
- package/.next/standalone/.next/static/chunks/app/admin/{page-0cc8cf246db43e5d.js → page-5a0271dd2b8b36fd.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/{layout-985054e973f66999.js → layout-098288cec4490c5d.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/login/admin/page-c8e40259e5d3d9e0.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/callback/page-527652f6c1a39274.js +1 -0
- package/.next/standalone/.next/static/chunks/app/login/{page-9b34375d1b5579d7.js → page-0a16a64855b771ef.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-47375a86e2375202.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-5c82cf3abd856301.js → page-d082f9b60ad03057.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/{page-79e2d32e69788bd2.js → page-91dbf7dfd85f805f.js} +1 -1
- package/.next/standalone/.next/static/chunks/main-app-1a7cacecc8900a4d.js +1 -0
- package/.next/standalone/.next/static/chunks/{webpack-4d1cc14b13e247b6.js → webpack-e2e0ef50652d5791.js} +1 -1
- package/.next/standalone/.next/static/css/1d9cf83f50b6db00.css +1 -0
- package/.next/standalone/package.json +2 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +44 -1
- package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +4 -3
- package/.next/standalone/public/chorus-plugin/bin/tests/test-mcp-cli-delegation.sh +244 -0
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +19 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +57 -0
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -2
- package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -2
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +85 -42
- package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +2 -2
- 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 +3 -3
- package/.next/standalone/public/dsh-credentials.sh +20 -127
- package/.next/standalone/public/install-codex.sh +21 -406
- package/.next/standalone/public/install-kiro.sh +20 -344
- package/.next/standalone/public/install-opencode.sh +20 -275
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +57 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +85 -42
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +2 -2
- 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 +3 -3
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +44 -1
- package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +6 -4
- package/.next/standalone/public/kiro-plugin/manifest.txt +42 -0
- package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/chorus/SKILL.md +19 -1
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/docs-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -2
- package/.next/standalone/public/skill/orchestrate-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
- package/.next/standalone/public/test-dsh-credentials.sh +22 -38
- package/.next/standalone/public/test-install-codex.sh +31 -79
- package/.next/standalone/server.js +1 -1
- package/README.ja.md +4 -2
- package/README.ko.md +4 -2
- package/README.md +4 -2
- package/README.zh.md +4 -2
- package/chorus.mjs +35 -1
- package/cli/agent-backend-prompt.mjs +3 -2
- package/cli/agents.mjs +329 -0
- package/cli/chorus-client.mjs +69 -0
- package/cli/claude-spawner.mjs +56 -15
- package/cli/codex-spawner.mjs +11 -6
- package/cli/credentials.mjs +190 -4
- package/cli/daemon-agent.mjs +26 -2
- package/cli/daemon-config.mjs +27 -2
- package/cli/daemon-service.mjs +120 -33
- package/cli/daemon.mjs +128 -22
- package/cli/dsh-spawner.mjs +7 -0
- package/cli/init/adapters.mjs +137 -0
- package/cli/init/agent-type-map.mjs +60 -0
- package/cli/init/chorus-plugin-consts.mjs +16 -0
- package/cli/init/codex-mcp-config.mjs +183 -0
- package/cli/init/contracts.mjs +122 -0
- package/cli/init/detect.mjs +97 -0
- package/cli/init/file-template.mjs +248 -0
- package/cli/init/install-methods.mjs +569 -0
- package/cli/init/registry.mjs +74 -0
- package/cli/init/run-command.mjs +30 -0
- package/cli/init/select.mjs +111 -0
- package/cli/init/steps/credential-seed.mjs +751 -0
- package/cli/init/steps/daemon-setup.mjs +246 -0
- package/cli/init/steps/plugin-install.mjs +37 -0
- package/cli/init-args.mjs +140 -0
- package/cli/init.mjs +243 -0
- package/cli/kiro-spawner.mjs +5 -0
- package/cli/mcp-args.mjs +280 -0
- package/cli/mcp.mjs +164 -0
- package/cli/spawner-select.mjs +45 -2
- package/cli/waker.mjs +89 -38
- package/package.json +2 -1
- package/.next/standalone/.env +0 -18
- package/.next/standalone/.next/server/chunks/3594.js +0 -1
- package/.next/standalone/.next/server/chunks/4545.js +0 -1
- package/.next/standalone/.next/server/chunks/5205.js +0 -1
- package/.next/standalone/.next/server/chunks/6207.js +0 -1
- package/.next/standalone/.next/server/chunks/6667.js +0 -1
- package/.next/standalone/.next/server/chunks/6995.js +0 -1
- package/.next/standalone/.next/server/chunks/7091.js +0 -1
- package/.next/standalone/.next/server/chunks/9793.js +0 -1
- package/.next/standalone/.next/static/chunks/19887-b805e1dcee8c367b.js +0 -1
- package/.next/standalone/.next/static/chunks/29108-5a11eea003f4cc11.js +0 -1
- package/.next/standalone/.next/static/chunks/38366.e6e0132b8ba873d6.js +0 -1
- package/.next/standalone/.next/static/chunks/53073-a7ed20af6538a178.js +0 -1
- package/.next/standalone/.next/static/chunks/6603-e70ddeab6ad09c50.js +0 -1
- package/.next/standalone/.next/static/chunks/78917-1b59cbb806b3ecfc.js +0 -1
- package/.next/standalone/.next/static/chunks/82751-3e161e1d8dbda3ac.js +0 -1
- package/.next/standalone/.next/static/chunks/94643-ffa140f765c73daf.js +0 -1
- package/.next/standalone/.next/static/chunks/99366-425e9ef22e60e3e2.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-b742c51c0a764daf.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/activity/page-20632dbec5a6dbc0.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f636e00c28f425ea.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-c004f1a194af7fa5.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-425acbe9ade5fa83.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b9eb4e0692996657.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-d5b222f379b2e8ca.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0a6c2d0e1b68e0e4.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-9d79e285b6fd2f8d.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-1507a761e67c2aa9.js +0 -1
- package/.next/standalone/.next/static/chunks/app/admin/companies/new/page-e35dce890d6dfd8d.js +0 -1
- package/.next/standalone/.next/static/chunks/app/admin/companies/page-ef720c2b0856166c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/admin/layout-c66ce38cbd88982a.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/admin/page-f032b6db3bd20a2c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/callback/page-ec23211506e688ee.js +0 -1
- package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-7e4664af2c787d08.js +0 -1
- package/.next/standalone/.next/static/chunks/main-app-ec87f2c9ef083ff1.js +0 -1
- package/.next/standalone/.next/static/css/5f52bd39b284ccdf.css +0 -1
- /package/.next/standalone/.next/static/{6sHDgeKioa0SJR1MAbcYG → _s4RZW3efB1g0lrKgLiZ7}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{6sHDgeKioa0SJR1MAbcYG → _s4RZW3efB1g0lrKgLiZ7}/_ssgManifest.js +0 -0
package/cli/credentials.mjs
CHANGED
|
@@ -18,15 +18,19 @@
|
|
|
18
18
|
|
|
19
19
|
import { readFileSync } from "node:fs";
|
|
20
20
|
import { homedir } from "node:os";
|
|
21
|
-
import { join } from "node:path";
|
|
21
|
+
import { join, resolve } from "node:path";
|
|
22
22
|
|
|
23
23
|
/** Absolute path to the login file written by `chorus login`. */
|
|
24
24
|
export function loginFilePath() {
|
|
25
|
+
const override = process.env.CHORUS_DAEMON_CONFIG_PATH?.trim();
|
|
26
|
+
if (override) return resolve(override);
|
|
25
27
|
return join(homedir(), ".chorus", "daemon.json");
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
/** Absolute path to the Claude Code user settings file (plugin fallback source). */
|
|
29
31
|
export function claudeSettingsPath() {
|
|
32
|
+
const override = process.env.CHORUS_CLAUDE_SETTINGS_PATH?.trim();
|
|
33
|
+
if (override) return resolve(override);
|
|
30
34
|
return join(homedir(), ".claude", "settings.json");
|
|
31
35
|
}
|
|
32
36
|
|
|
@@ -159,13 +163,26 @@ export function resolveCredentials(flags = {}, deps = {}) {
|
|
|
159
163
|
if (url && apiKey) return { url, apiKey, source: "env" };
|
|
160
164
|
}
|
|
161
165
|
|
|
162
|
-
// 3. Login file (~/.chorus/daemon.json)
|
|
166
|
+
// 3. Login file (~/.chorus/daemon.json): the flat top-level url/apiKey, else the
|
|
167
|
+
// first agents[] entry. The flat top-level agent config is DEPRECATED — `chorus
|
|
168
|
+
// init` now writes credentials only into agents[] — so fall back to agents[0]
|
|
169
|
+
// so this single-credential resolver (install/daemon-setup gate, legacy flat
|
|
170
|
+
// daemon) still resolves from an agents[]-only daemon.json.
|
|
163
171
|
tried.push(`login file (${loginPath}, run \`chorus login\`)`);
|
|
164
172
|
{
|
|
165
173
|
const file = readJson(loginPath);
|
|
166
174
|
if (file) {
|
|
167
|
-
|
|
168
|
-
|
|
175
|
+
let url = nonEmpty(file.url);
|
|
176
|
+
let apiKey = nonEmpty(file.apiKey);
|
|
177
|
+
if (!(url && apiKey) && Array.isArray(file.agents)) {
|
|
178
|
+
const a0 = file.agents.find(
|
|
179
|
+
(a) => a && typeof a === "object" && nonEmpty(a.url) && nonEmpty(a.apiKey),
|
|
180
|
+
);
|
|
181
|
+
if (a0) {
|
|
182
|
+
url = nonEmpty(a0.url);
|
|
183
|
+
apiKey = nonEmpty(a0.apiKey);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
169
186
|
if (url && apiKey) return { url, apiKey, source: "login-file" };
|
|
170
187
|
}
|
|
171
188
|
}
|
|
@@ -194,3 +211,172 @@ export function resolveCredentials(flags = {}, deps = {}) {
|
|
|
194
211
|
" • login: chorus login (persists to ~/.chorus/daemon.json)\n"
|
|
195
212
|
);
|
|
196
213
|
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* @typedef {Object} McpCredentials
|
|
217
|
+
* @property {string} url
|
|
218
|
+
* @property {string} apiKey
|
|
219
|
+
* @property {string} label Diagnostic label for the acting identity ("flag" /
|
|
220
|
+
* "env" / a `~/.chorus/daemon.json` agent name/label / the flat-resolution source).
|
|
221
|
+
*/
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Resolve the url + `cho_` API key AND the acting agent identity for the
|
|
225
|
+
* `chorus mcp` command group. Unlike `resolveCredentials`, this understands the
|
|
226
|
+
* multi-agent `agents[]` model and refuses to guess which agent to act as.
|
|
227
|
+
*
|
|
228
|
+
* PROFILE identity (AWS-CLI style): a caller can name WHICH agent to act as by
|
|
229
|
+
* `--agent <name|uuid>` (explicit flag) or the `CHORUS_AGENT_PROFILE` env var,
|
|
230
|
+
* and this resolves that agent's key from `~/.chorus/daemon.json` — the secret
|
|
231
|
+
* never has to be threaded through the caller's environment. A profile matches
|
|
232
|
+
* an `agents[]` entry by its `agentUuid`, `agentName`, or the back-compat
|
|
233
|
+
* `label`/`name` aliases (exact). Ambiguous (matches >1 entry) → hard error.
|
|
234
|
+
*
|
|
235
|
+
* Precedence (owner decision: PREFER profile, fall back to url+key mode when no
|
|
236
|
+
* profile resolves — the key stays written in daemon.json, url+key is the
|
|
237
|
+
* fallback so the CLI-absent curl path still works):
|
|
238
|
+
* 1. Explicit `--agent <name|uuid>` flag → deliberate profile selection from
|
|
239
|
+
* `agents[]`, PREFERRED over an explicit url+key pair (no match → hard error
|
|
240
|
+
* listing agents). With NO `agents[]` it rides along an explicit `--url/--api-key`
|
|
241
|
+
* pair (else the env pair) as the label, else it is a usage error.
|
|
242
|
+
* 2. Explicit `--url` + `--api-key` flags (no `--agent`) → used directly
|
|
243
|
+
* (identity is explicit); a `CHORUS_AGENT_PROFILE` name rides along as the label.
|
|
244
|
+
* 3. `CHORUS_AGENT_PROFILE` env → ambient profile selection from `agents[]`.
|
|
245
|
+
* A match wins over the url+key env pair; NO match falls through (the
|
|
246
|
+
* profile "doesn't exist" → url-mode fallback), an ambiguous match throws.
|
|
247
|
+
* 4. `CHORUS_URL` + `CHORUS_API_KEY` env pair → used directly (url-mode
|
|
248
|
+
* fallback / legacy plugin-hook path); a profile name rides as the label.
|
|
249
|
+
* 5. Exactly one agent in `agents[]` + nothing specified → that agent.
|
|
250
|
+
* 6. More than one agent + nothing specified → hard error (never pick
|
|
251
|
+
* silently), listing the available agents.
|
|
252
|
+
* 7. No `agents[]` → flat resolution via `resolveCredentials`.
|
|
253
|
+
*
|
|
254
|
+
* Each selected agent's `url`/`apiKey` merges over the top-level per-field
|
|
255
|
+
* defaults (`resolveCredentialDefaults`), so an agent that omits a field
|
|
256
|
+
* inherits it.
|
|
257
|
+
*
|
|
258
|
+
* This never imports `cli/daemon-config.mjs` (which imports THIS module) — it
|
|
259
|
+
* reads `agents[]` directly to stay cycle-free; only url/apiKey/label matter for
|
|
260
|
+
* MCP, so per-agent agentType/permissionMode validation is intentionally skipped.
|
|
261
|
+
*
|
|
262
|
+
* @param {{ url?: string, apiKey?: string, agent?: string }} flags
|
|
263
|
+
* @param {ResolveDeps} [deps]
|
|
264
|
+
* @returns {McpCredentials}
|
|
265
|
+
* @throws {Error} on ambiguity, a missing `--agent` label, or nothing resolvable.
|
|
266
|
+
*/
|
|
267
|
+
export function resolveMcpCredentials(flags = {}, deps = {}) {
|
|
268
|
+
const env = deps.env ?? process.env;
|
|
269
|
+
const readJson = deps.readJson ?? readJsonSafe;
|
|
270
|
+
const loginPath = deps.loginPath ?? loginFilePath();
|
|
271
|
+
const flagAgent = nonEmpty(flags.agent);
|
|
272
|
+
const envProfile = nonEmpty(env.CHORUS_AGENT_PROFILE);
|
|
273
|
+
// The profile name a caller asked for, whatever its source — used as the
|
|
274
|
+
// diagnostic label when creds ultimately come from explicit flags / the env pair.
|
|
275
|
+
const wanted = flagAgent ?? envProfile;
|
|
276
|
+
|
|
277
|
+
const envPair = () => {
|
|
278
|
+
const url = nonEmpty(env.CHORUS_URL);
|
|
279
|
+
const apiKey = nonEmpty(env.CHORUS_API_KEY);
|
|
280
|
+
return url && apiKey ? { url, apiKey } : null;
|
|
281
|
+
};
|
|
282
|
+
const flagPair = () => {
|
|
283
|
+
const url = nonEmpty(flags.url);
|
|
284
|
+
const apiKey = nonEmpty(flags.apiKey);
|
|
285
|
+
return url && apiKey ? { url, apiKey } : null;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
// Read agents[] once and pre-resolve every entry (label, its match keys, and
|
|
289
|
+
// its effective url/apiKey merged over the top-level per-field defaults).
|
|
290
|
+
const file = readJson(loginPath);
|
|
291
|
+
const agentEntries =
|
|
292
|
+
file && Array.isArray(file.agents)
|
|
293
|
+
? file.agents.filter((a) => a && typeof a === "object")
|
|
294
|
+
: [];
|
|
295
|
+
const hasAgents = agentEntries.length > 0;
|
|
296
|
+
const defaults = hasAgents ? resolveCredentialDefaults(flags, deps) : { url: undefined, apiKey: undefined };
|
|
297
|
+
const labelOf = (entry, i) =>
|
|
298
|
+
nonEmpty(entry.agentName) ?? nonEmpty(entry.label) ?? nonEmpty(entry.name) ?? `agents[${i}]`;
|
|
299
|
+
const resolved = agentEntries.map((entry, i) => ({
|
|
300
|
+
label: labelOf(entry, i),
|
|
301
|
+
// A profile may name an entry by its uuid, its display name, or the
|
|
302
|
+
// back-compat label/name aliases.
|
|
303
|
+
keys: [entry.agentUuid, entry.agentName, entry.label, entry.name]
|
|
304
|
+
.map((k) => nonEmpty(k))
|
|
305
|
+
.filter((k) => k !== undefined),
|
|
306
|
+
url: nonEmpty(entry.url) ?? defaults.url,
|
|
307
|
+
apiKey: nonEmpty(entry.apiKey) ?? defaults.apiKey,
|
|
308
|
+
}));
|
|
309
|
+
const labels = resolved.map((a) => a.label).join(", ");
|
|
310
|
+
const pick = (a) => {
|
|
311
|
+
if (!a.url || !a.apiKey) {
|
|
312
|
+
throw new Error(
|
|
313
|
+
`Agent "${a.label}" in ${loginPath} is missing a url or apiKey (and no top-level default supplies it).`,
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
return { url: a.url, apiKey: a.apiKey, label: a.label };
|
|
317
|
+
};
|
|
318
|
+
const matchesFor = (name) => resolved.filter((a) => a.keys.includes(name));
|
|
319
|
+
const selectOrThrow = (name, source) => {
|
|
320
|
+
const matches = matchesFor(name);
|
|
321
|
+
if (matches.length === 1) return pick(matches[0]);
|
|
322
|
+
if (matches.length > 1) {
|
|
323
|
+
throw new Error(
|
|
324
|
+
`${source} "${name}" is ambiguous in ${loginPath} — it matches ${matches.length} agents ` +
|
|
325
|
+
`(${matches.map((m) => m.label).join(", ")}). Use the agent UUID to disambiguate.`,
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
return null; // no match
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
// 1. Explicit --agent flag: a deliberate profile selection — PREFERRED over an
|
|
332
|
+
// explicit url+key flag pair (owner: "prefer profile"). With NO agents[] to
|
|
333
|
+
// match, it rides an explicit flag pair (else the env pair), using the name
|
|
334
|
+
// as the diagnostic label; with neither it is a usage error.
|
|
335
|
+
if (flagAgent) {
|
|
336
|
+
if (hasAgents) {
|
|
337
|
+
const hit = selectOrThrow(flagAgent, "--agent");
|
|
338
|
+
if (hit) return hit;
|
|
339
|
+
throw new Error(`--agent "${flagAgent}" not found in ${loginPath} agents[]. Available: ${labels}.`);
|
|
340
|
+
}
|
|
341
|
+
const pair = flagPair() ?? envPair();
|
|
342
|
+
if (pair) return { url: pair.url, apiKey: pair.apiKey, label: flagAgent };
|
|
343
|
+
throw new Error(
|
|
344
|
+
`--agent "${flagAgent}" was given but ${loginPath} declares no agents[]. ` +
|
|
345
|
+
`Remove --agent, or configure an agents[] list.`,
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// 2. Explicit url+key flag pair (no --agent) — identity is explicit.
|
|
350
|
+
{
|
|
351
|
+
const pair = flagPair();
|
|
352
|
+
if (pair) return { url: pair.url, apiKey: pair.apiKey, label: wanted ?? "flag" };
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// 3. CHORUS_AGENT_PROFILE env: ambient profile selection. A match wins over the
|
|
356
|
+
// url+key env pair; a no-match falls through to url-mode (profile "doesn't
|
|
357
|
+
// exist"); an ambiguous match throws.
|
|
358
|
+
if (envProfile && hasAgents) {
|
|
359
|
+
const hit = selectOrThrow(envProfile, "CHORUS_AGENT_PROFILE");
|
|
360
|
+
if (hit) return hit;
|
|
361
|
+
// no match → fall through to the url-mode fallback below
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// 4. Env pair (url-mode fallback). Carry the profile name as the label if set.
|
|
365
|
+
{
|
|
366
|
+
const pair = envPair();
|
|
367
|
+
if (pair) return { url: pair.url, apiKey: pair.apiKey, label: wanted ?? "env" };
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// 5/6. agents[] with nothing specified: auto-single, else hard error.
|
|
371
|
+
if (hasAgents) {
|
|
372
|
+
if (resolved.length === 1) return pick(resolved[0]);
|
|
373
|
+
throw new Error(
|
|
374
|
+
`Multiple agents are configured in ${loginPath} (${labels}). ` +
|
|
375
|
+
`Specify which one to act as with --agent <name|uuid> or CHORUS_AGENT_PROFILE.`,
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// 7. No agents[] → flat resolution (throws the detailed "could not resolve" error).
|
|
380
|
+
const flat = resolveCredentials(flags, deps);
|
|
381
|
+
return { url: flat.url, apiKey: flat.apiKey, label: flat.source };
|
|
382
|
+
}
|
package/cli/daemon-agent.mjs
CHANGED
|
@@ -17,8 +17,18 @@ import { readFileSync } from "node:fs";
|
|
|
17
17
|
import { loginFilePath } from "./credentials.mjs";
|
|
18
18
|
|
|
19
19
|
/** The agent backends the daemon recognizes. Existing spawners cover claude-code,
|
|
20
|
-
* codex, and kiro; dsh registration is the base contract for its bridge.
|
|
21
|
-
|
|
20
|
+
* codex, and kiro; dsh registration is the base contract for its bridge.
|
|
21
|
+
*
|
|
22
|
+
* `offline` is a NON-wakeable classification, not a real backend: an agent whose
|
|
23
|
+
* key is parked in daemon.json purely so `chorus mcp` can proxy through it, while
|
|
24
|
+
* the daemon builds NO spawner and dispatches NO wake for it. It is accepted here
|
|
25
|
+
* (and by-name in agent-backend-prompt via this list) so an agents[] entry may set
|
|
26
|
+
* `agentType: "offline"` and pass resolveAgentConfigs' KNOWN_AGENTS validation. The
|
|
27
|
+
* fail-closed no-wake handling lives in spawner-select.mjs (selectSpawner returns
|
|
28
|
+
* an OfflineSpawner that refuses to spawn) — an offline value MUST NOT fall through
|
|
29
|
+
* to the claude-code default and wake it. `chorus agents add` maps every non-wakeable
|
|
30
|
+
* selected agent (opencode/openclaw/pi/dsh) to this classification. */
|
|
31
|
+
export const KNOWN_AGENTS = ["claude-code", "codex", "kiro", "dsh", "offline"];
|
|
22
32
|
|
|
23
33
|
/** The default agent backend when neither --agent nor CHORUS_AGENT is set. */
|
|
24
34
|
export const DEFAULT_AGENT = "claude-code";
|
|
@@ -35,6 +45,11 @@ export function backendCli(agentType) {
|
|
|
35
45
|
if (agentType === "codex") return { name: "codex", envVar: "CHORUS_CODEX_PATH" };
|
|
36
46
|
if (agentType === "kiro") return { name: "kiro-cli", envVar: "CHORUS_KIRO_PATH" };
|
|
37
47
|
if (agentType === "dsh") return { name: "dsh-jsonrpc-agent", envVar: "CHORUS_DSH_PATH" };
|
|
48
|
+
// `offline` has no CLI to resolve — it is never woken (see backendClientType).
|
|
49
|
+
// The daemon does not probe a binary for it; this explicit descriptor keeps the
|
|
50
|
+
// return sensible if some banner path ever reads it (CHORUS_AGENT selects the
|
|
51
|
+
// backend), instead of mislabeling it as `claude`.
|
|
52
|
+
if (agentType === "offline") return { name: "offline", envVar: "CHORUS_AGENT" };
|
|
38
53
|
return { name: "claude", envVar: "CHORUS_CLAUDE_PATH" };
|
|
39
54
|
}
|
|
40
55
|
|
|
@@ -50,6 +65,15 @@ export function backendClientType(agentType) {
|
|
|
50
65
|
if (agentType === "codex") return "codex";
|
|
51
66
|
if (agentType === "kiro") return "kiro";
|
|
52
67
|
if (agentType === "dsh") return "dsh";
|
|
68
|
+
// `offline` is a non-wakeable classification — the daemon SHALL NOT register it
|
|
69
|
+
// as a wakeable connection (daemon-multi-agent spec). It must therefore NOT
|
|
70
|
+
// fall through to the `claude_code` default (which would make an offline agent
|
|
71
|
+
// present as a wakeable claude_code connection). Return the distinct `offline`
|
|
72
|
+
// string: the runtime fan-out skips registering it at all, and this value is
|
|
73
|
+
// intentionally OUTSIDE the server's DAEMON_CLIENT_TYPES allowlist, so any
|
|
74
|
+
// future path that DID try to register it fails closed (server rejects) rather
|
|
75
|
+
// than silently registering it as claude_code.
|
|
76
|
+
if (agentType === "offline") return "offline";
|
|
53
77
|
return "claude_code";
|
|
54
78
|
}
|
|
55
79
|
|
package/cli/daemon-config.mjs
CHANGED
|
@@ -306,13 +306,19 @@ function positiveInt(value) {
|
|
|
306
306
|
* @typedef {Object} AgentConfig One fully-resolved agent runtime config.
|
|
307
307
|
* @property {string} url Chorus server URL for this agent.
|
|
308
308
|
* @property {string} apiKey This agent's `cho_` API key.
|
|
309
|
-
* @property {string} agentType Backend: claude-code | codex | kiro | dsh.
|
|
309
|
+
* @property {string} agentType Backend: claude-code | codex | kiro | dsh | offline.
|
|
310
|
+
* @property {boolean} [daemonWake] Wake opt-in for a wakeable backend; only
|
|
311
|
+
* `false` disables (absent/true ⇒ woken).
|
|
310
312
|
* @property {Array<string|undefined>} cwds Served paths (`undefined` ⇒ process cwd).
|
|
311
313
|
* @property {"yolo"|"chorus"} permissionMode Woken-agent permission posture.
|
|
312
314
|
* @property {number} maxConcurrency This agent's wake-queue cap.
|
|
313
315
|
* @property {number} sigintTimeoutMs Interrupt escalation window (ms).
|
|
314
316
|
* @property {string[]} browseRoots Directory-discovery allowlist.
|
|
315
317
|
* @property {string} label Diagnostic label ("agent" or "agents[i]").
|
|
318
|
+
* @property {string} [agentUuid] This agent's Chorus UUID — exported to a
|
|
319
|
+
* woken session as CHORUS_AGENT_PROFILE so its
|
|
320
|
+
* hooks/skills resolve the key from daemon.json.
|
|
321
|
+
* @property {string} [agentName] This agent's Chorus display name (profile alias).
|
|
316
322
|
*/
|
|
317
323
|
|
|
318
324
|
/**
|
|
@@ -365,6 +371,8 @@ export function resolveAgentConfigs(flags = {}, deps = {}) {
|
|
|
365
371
|
sigintTimeoutMs: resolveSigintTimeoutMs(flags, deps),
|
|
366
372
|
browseRoots: resolveBrowseRoots(flags, deps),
|
|
367
373
|
label: "agent",
|
|
374
|
+
agentUuid: nonEmptyStr(file?.agentUuid),
|
|
375
|
+
agentName: nonEmptyStr(file?.agentName),
|
|
368
376
|
},
|
|
369
377
|
];
|
|
370
378
|
}
|
|
@@ -433,6 +441,23 @@ export function resolveAgentConfigs(flags = {}, deps = {}) {
|
|
|
433
441
|
const browseRoots =
|
|
434
442
|
entry.browseRoots !== undefined ? cleanCwdList(entry.browseRoots, home) : defaultBrowseRoots;
|
|
435
443
|
|
|
436
|
-
|
|
444
|
+
// daemonWake: per-agent opt-in for daemon waking (pass-through boolean). Only
|
|
445
|
+
// `=== false` disables waking; absent (undefined) or true ⇒ woken, so agent
|
|
446
|
+
// entries written before this field existed keep being woken. Orthogonal to
|
|
447
|
+
// agentType (offline is never woken regardless).
|
|
448
|
+
return {
|
|
449
|
+
url,
|
|
450
|
+
apiKey,
|
|
451
|
+
agentType,
|
|
452
|
+
cwds,
|
|
453
|
+
permissionMode,
|
|
454
|
+
maxConcurrency,
|
|
455
|
+
sigintTimeoutMs,
|
|
456
|
+
browseRoots,
|
|
457
|
+
daemonWake: entry.daemonWake,
|
|
458
|
+
label,
|
|
459
|
+
agentUuid: nonEmptyStr(entry.agentUuid),
|
|
460
|
+
agentName: nonEmptyStr(entry.agentName),
|
|
461
|
+
};
|
|
437
462
|
});
|
|
438
463
|
}
|
package/cli/daemon-service.mjs
CHANGED
|
@@ -35,6 +35,9 @@ import { fileURLToPath } from "node:url";
|
|
|
35
35
|
/** The systemd --user unit name (also the launchd label stem). */
|
|
36
36
|
export const SERVICE_NAME = "chorus-daemon";
|
|
37
37
|
|
|
38
|
+
/** The macOS launchd LaunchAgent label. */
|
|
39
|
+
export const LAUNCHD_LABEL = "com.chorus.daemon";
|
|
40
|
+
|
|
38
41
|
/** Default IO bundle — overridable per-call for tests (no real disk/process). */
|
|
39
42
|
function defaultIO() {
|
|
40
43
|
return {
|
|
@@ -232,25 +235,39 @@ function systemdQuoteArg(token) {
|
|
|
232
235
|
|
|
233
236
|
/**
|
|
234
237
|
* Detect whether a supervisor already manages the chorus daemon on this host.
|
|
235
|
-
* Linux
|
|
236
|
-
* - kind: "
|
|
237
|
-
*
|
|
238
|
-
* - kind: "none" otherwise (or when
|
|
238
|
+
* - Linux → kind: "systemd" (unit file present and/or `is-active` == "active").
|
|
239
|
+
* - macOS → kind: "launchd" (LaunchAgent plist present and/or `launchctl list
|
|
240
|
+
* <label>` reports it loaded).
|
|
241
|
+
* - kind: "none" otherwise (or when the service manager is unavailable).
|
|
239
242
|
* Used by the lifecycle subcommands to decide whether to delegate.
|
|
240
243
|
* @param {object} [io]
|
|
241
|
-
* @returns {{ kind: "systemd", installed: boolean, active: boolean, unitPath: string }
|
|
244
|
+
* @returns {{ kind: "systemd", installed: boolean, active: boolean, unitPath: string }
|
|
245
|
+
* | { kind: "launchd", installed: boolean, active: boolean, label: string, plistPath: string }
|
|
246
|
+
* | { kind: "none" }}
|
|
242
247
|
*/
|
|
243
248
|
export function detectSupervisor(io = defaultIO()) {
|
|
244
|
-
if (io.platform
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
249
|
+
if (io.platform === "linux") {
|
|
250
|
+
const unitPath = systemdUnitPath(io);
|
|
251
|
+
const installed = safeExists(unitPath, io);
|
|
252
|
+
// `is-active` is authoritative for "running under systemd right now". Query it
|
|
253
|
+
// even when the unit file is absent: a transient/unit-less path still returns
|
|
254
|
+
// non-active, and we never want to throw here.
|
|
255
|
+
const activeRes = systemctlUser(["is-active", `${SERVICE_NAME}.service`], io);
|
|
256
|
+
const active = (activeRes.stdout ?? "").trim() === "active";
|
|
257
|
+
if (!installed && !active) return { kind: "none" };
|
|
258
|
+
return { kind: "systemd", installed, active, unitPath };
|
|
259
|
+
}
|
|
260
|
+
if (io.platform === "darwin") {
|
|
261
|
+
const plistPath = launchdPlistPath(io);
|
|
262
|
+
const installed = safeExists(plistPath, io);
|
|
263
|
+
// `launchctl list <label>` exits 0 when the agent is loaded (prints its dict),
|
|
264
|
+
// non-zero otherwise. This is authoritative for "loaded right now".
|
|
265
|
+
const listRes = launchctl(["list", LAUNCHD_LABEL], io);
|
|
266
|
+
const active = listRes.status === 0;
|
|
267
|
+
if (!installed && !active) return { kind: "none" };
|
|
268
|
+
return { kind: "launchd", installed, active, label: LAUNCHD_LABEL, plistPath };
|
|
269
|
+
}
|
|
270
|
+
return { kind: "none" };
|
|
254
271
|
}
|
|
255
272
|
|
|
256
273
|
function safeExists(path, io) {
|
|
@@ -281,6 +298,44 @@ export function journalctlUser(args, io = defaultIO()) {
|
|
|
281
298
|
}
|
|
282
299
|
}
|
|
283
300
|
|
|
301
|
+
/** Run `launchctl <args>`, capturing output. Never throws. macOS only. */
|
|
302
|
+
export function launchctl(args, io = defaultIO()) {
|
|
303
|
+
try {
|
|
304
|
+
const r = io.spawnSync("launchctl", args, { encoding: "utf8" });
|
|
305
|
+
// spawnSync sets .error (and status null) when the binary is missing (ENOENT);
|
|
306
|
+
// surface that as a null status + the error message rather than throwing.
|
|
307
|
+
if (r?.error) {
|
|
308
|
+
return { status: null, stdout: r?.stdout ?? "", stderr: String(r.error.message ?? r.error) };
|
|
309
|
+
}
|
|
310
|
+
return { status: r?.status ?? null, stdout: r?.stdout ?? "", stderr: r?.stderr ?? "" };
|
|
311
|
+
} catch (err) {
|
|
312
|
+
return { status: null, stdout: "", stderr: err instanceof Error ? err.message : String(err) };
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Classify whether THIS host supports installing a real boot-autostart daemon
|
|
318
|
+
* service, and via which supervisor. The single source of truth both
|
|
319
|
+
* `chorus daemon install` and the `chorus agents add` daemon-setup step consult so they
|
|
320
|
+
* cannot disagree about what "supported" means (add-chorus-init-daemon-setup).
|
|
321
|
+
* - "systemd" — Linux where `systemctl --user` is usable.
|
|
322
|
+
* - "launchd" — macOS (launchctl is always present).
|
|
323
|
+
* - "unsupported" — Linux without a usable systemctl, Windows, or anything else.
|
|
324
|
+
* Pure-ish: only probes `systemctl --user --version` on Linux (injected IO).
|
|
325
|
+
* @param {object} [io]
|
|
326
|
+
* @returns {"systemd" | "launchd" | "unsupported"}
|
|
327
|
+
*/
|
|
328
|
+
export function autostartCapability(io = defaultIO()) {
|
|
329
|
+
if (io.platform === "darwin") return "launchd";
|
|
330
|
+
if (io.platform === "linux") {
|
|
331
|
+
// `systemctl --user` must be reachable — a container/minimal host may lack it,
|
|
332
|
+
// in which case there is no real boot service we can install.
|
|
333
|
+
const probe = systemctlUser(["--version"], io);
|
|
334
|
+
return probe.status === 0 ? "systemd" : "unsupported";
|
|
335
|
+
}
|
|
336
|
+
return "unsupported";
|
|
337
|
+
}
|
|
338
|
+
|
|
284
339
|
/**
|
|
285
340
|
* Install the systemd --user unit (Linux) or return the template to print
|
|
286
341
|
* (macOS/Windows). On Linux: write the unit, `daemon-reload`, `enable --now`.
|
|
@@ -331,19 +386,39 @@ export function installService(spec, io = defaultIO()) {
|
|
|
331
386
|
}
|
|
332
387
|
}
|
|
333
388
|
if (io.platform === "darwin") {
|
|
389
|
+
// Real launchd install (add-chorus-init-daemon-setup): write the LaunchAgent
|
|
390
|
+
// plist and `launchctl load -w` it so it starts now and at every login —
|
|
391
|
+
// no longer a printed-template-only posture.
|
|
334
392
|
const plistPath = launchdPlistPath(io);
|
|
335
393
|
const unitText = renderLaunchdPlist({ ...spec, home, logPath: join(home, ".chorus", "daemon.log") });
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
394
|
+
const steps = [];
|
|
395
|
+
try {
|
|
396
|
+
io.mkdirSync(dirname(plistPath), { recursive: true });
|
|
397
|
+
// Back up an existing plist before overwrite (backup-before-overwrite
|
|
398
|
+
// convention, mirrors the init plugin-install step); best-effort.
|
|
399
|
+
if (safeExists(plistPath, io) && typeof io.readFileSync === "function") {
|
|
400
|
+
try {
|
|
401
|
+
io.writeFileSync(`${plistPath}.chorus-bak`, io.readFileSync(plistPath));
|
|
402
|
+
steps.push(`backed up existing plist → ${plistPath}.chorus-bak`);
|
|
403
|
+
} catch {
|
|
404
|
+
// a failed backup must not block the (idempotent) re-install
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// Unload any currently-loaded copy first so a re-install applies the new
|
|
408
|
+
// plist rather than leaving the old agent running (parallels the systemd
|
|
409
|
+
// restart). Best-effort — a not-loaded agent returns non-zero here.
|
|
410
|
+
launchctl(["unload", plistPath], io);
|
|
411
|
+
io.writeFileSync(plistPath, unitText, { mode: 0o644 });
|
|
412
|
+
steps.push(`wrote ${plistPath}`);
|
|
413
|
+
const load = launchctl(["load", "-w", plistPath], io);
|
|
414
|
+
if (load.status !== 0) {
|
|
415
|
+
return { platform: "darwin", installed: false, unitPath: plistPath, unitText, steps, error: `launchctl load -w failed: ${load.stderr.trim() || `exit ${load.status}`}` };
|
|
416
|
+
}
|
|
417
|
+
steps.push(`launchctl load -w ${plistPath}`);
|
|
418
|
+
return { platform: "darwin", installed: true, unitPath: plistPath, unitText, steps };
|
|
419
|
+
} catch (err) {
|
|
420
|
+
return { platform: "darwin", installed: false, unitPath: plistPath, unitText, steps, error: err instanceof Error ? err.message : String(err) };
|
|
421
|
+
}
|
|
347
422
|
}
|
|
348
423
|
// Windows / other: no first-class service model without native deps. Print the
|
|
349
424
|
// foreground command an operator can wrap in their supervisor of choice.
|
|
@@ -398,18 +473,30 @@ export function uninstallService(io = defaultIO()) {
|
|
|
398
473
|
return { platform: "linux", removed: existed || disable.status === 0, unitPath, steps };
|
|
399
474
|
}
|
|
400
475
|
if (io.platform === "darwin") {
|
|
476
|
+
// Real launchd uninstall (add-chorus-init-daemon-setup): unload the agent and
|
|
477
|
+
// remove the plist. Idempotent: tolerate an already-absent plist / not-loaded
|
|
478
|
+
// agent.
|
|
401
479
|
const plistPath = launchdPlistPath(io);
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
};
|
|
480
|
+
const steps = [];
|
|
481
|
+
const existed = safeExists(plistPath, io);
|
|
482
|
+
// unload -w stops the agent and clears its "enabled" override; a not-loaded
|
|
483
|
+
// agent returns non-zero, which we tolerate.
|
|
484
|
+
const unload = launchctl(["unload", "-w", plistPath], io);
|
|
485
|
+
if (unload.status === 0) steps.push(`launchctl unload -w ${plistPath}`);
|
|
486
|
+
try {
|
|
487
|
+
if (existed) {
|
|
488
|
+
io.unlinkSync(plistPath);
|
|
489
|
+
steps.push(`removed ${plistPath}`);
|
|
490
|
+
}
|
|
491
|
+
} catch (err) {
|
|
492
|
+
return { platform: "darwin", removed: false, unitPath: plistPath, steps, error: err instanceof Error ? err.message : String(err) };
|
|
493
|
+
}
|
|
494
|
+
return { platform: "darwin", removed: existed, unitPath: plistPath, steps };
|
|
408
495
|
}
|
|
409
496
|
return {
|
|
410
497
|
platform: "other",
|
|
411
498
|
removed: false,
|
|
412
|
-
steps: ["Automatic service uninstall is only supported on Linux (systemd). Remove the daemon from your supervisor manually."],
|
|
499
|
+
steps: ["Automatic service uninstall is only supported on Linux (systemd) and macOS (launchd). Remove the daemon from your supervisor manually."],
|
|
413
500
|
};
|
|
414
501
|
}
|
|
415
502
|
|