@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/daemon.mjs
CHANGED
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
yoloWarningLine,
|
|
32
32
|
} from "./daemon-permission-mode.mjs";
|
|
33
33
|
import { resolveAgentType, backendClientType } from "./daemon-agent.mjs";
|
|
34
|
+
import { isWakeableAgentType } from "./init/agent-type-map.mjs";
|
|
34
35
|
import { formatBanner, agentNotFoundWarningLine } from "./daemon-banner.mjs";
|
|
35
36
|
import { ChorusClient, validateAndFetchIdentity } from "./chorus-client.mjs";
|
|
36
37
|
import { SseListener } from "./sse-listener.mjs";
|
|
@@ -75,6 +76,7 @@ import {
|
|
|
75
76
|
uninstallService,
|
|
76
77
|
systemctlUser,
|
|
77
78
|
journalctlUser,
|
|
79
|
+
launchctl,
|
|
78
80
|
resolveServicePaths,
|
|
79
81
|
SERVICE_NAME,
|
|
80
82
|
} from "./daemon-service.mjs";
|
|
@@ -633,6 +635,27 @@ export function buildMultiAgentDaemon(agentConfigs, deps = {}) {
|
|
|
633
635
|
|
|
634
636
|
const agents = agentConfigs
|
|
635
637
|
.map((cfg, i) => {
|
|
638
|
+
// Offline agents are proxy-only: their key is parked in daemon.json solely so
|
|
639
|
+
// `chorus mcp` can act under that identity (it reads the file directly, not via
|
|
640
|
+
// this runtime). The daemon-multi-agent spec says the daemon SHALL NOT construct
|
|
641
|
+
// a spawner, dispatch wakes, OR register it as a wakeable connection. Building a
|
|
642
|
+
// runtime here would open an SSE stream that self-reports a connection — so we
|
|
643
|
+
// SKIP the offline agent entirely (no runtime, no connection, no self-report),
|
|
644
|
+
// which is what closes the T4-review registration gap. Returning null (kept in
|
|
645
|
+
// step with a build failure) preserves the original index `i` for the per-agent
|
|
646
|
+
// injected-dep alignment below (map keeps the index; the filter drops the null).
|
|
647
|
+
// Skip = not woken: an offline backend (can't be woken) OR a wakeable backend
|
|
648
|
+
// the operator opted out of (`daemonWake: false`). Both get the same proxy-only
|
|
649
|
+
// treatment (no runtime/SSE/connection); the key stays in daemon.json for
|
|
650
|
+
// `chorus mcp`. `daemonWake` absent/true ⇒ woken (back-compat with entries that
|
|
651
|
+
// predate the field).
|
|
652
|
+
if (cfg.agentType === "offline" || cfg.daemonWake === false) {
|
|
653
|
+
const why = cfg.agentType === "offline" ? "offline backend" : "daemon waking disabled (daemonWake:false)";
|
|
654
|
+
logger.info?.(
|
|
655
|
+
`[Chorus] agent ${cfg.label}: ${why} — proxy-only key, no wakeable connection registered`,
|
|
656
|
+
);
|
|
657
|
+
return null;
|
|
658
|
+
}
|
|
636
659
|
// Per-agent deps: cfg fields drive the per-agent runtime; injectable fakes are
|
|
637
660
|
// indexed per agent. `cwd` (singular) is cleared so a caller's single value can
|
|
638
661
|
// never leak across agents — each agent's `cwds` is authoritative.
|
|
@@ -655,7 +678,13 @@ export function buildMultiAgentDaemon(agentConfigs, deps = {}) {
|
|
|
655
678
|
: deps.makeSseListener,
|
|
656
679
|
};
|
|
657
680
|
try {
|
|
658
|
-
return {
|
|
681
|
+
return {
|
|
682
|
+
cfg,
|
|
683
|
+
daemon: build(
|
|
684
|
+
{ url: cfg.url, apiKey: cfg.apiKey, agentUuid: cfg.agentUuid, agentName: cfg.agentName },
|
|
685
|
+
agentDeps,
|
|
686
|
+
),
|
|
687
|
+
};
|
|
659
688
|
} catch (err) {
|
|
660
689
|
logger.error?.(
|
|
661
690
|
`[Chorus] agent ${cfg.label}: failed to build runtime — skipping ` +
|
|
@@ -667,6 +696,33 @@ export function buildMultiAgentDaemon(agentConfigs, deps = {}) {
|
|
|
667
696
|
.filter(Boolean);
|
|
668
697
|
|
|
669
698
|
if (agents.length === 0) {
|
|
699
|
+
// Distinguish "all offline" (nothing wakeable to serve — not an error) from
|
|
700
|
+
// "every wakeable runtime threw" (a real build failure). An all-offline config
|
|
701
|
+
// is a legitimate proxy-only setup: return an idle no-op daemon so the process
|
|
702
|
+
// stays up (its offline keys remain available to `chorus mcp`) rather than
|
|
703
|
+
// crashing with a misleading "all runtimes failed" error.
|
|
704
|
+
const anyWakeable = agentConfigs.some(
|
|
705
|
+
(cfg) => isWakeableAgentType(cfg.agentType) && cfg.daemonWake !== false,
|
|
706
|
+
);
|
|
707
|
+
if (!anyWakeable) {
|
|
708
|
+
logger.warn?.(
|
|
709
|
+
"[Chorus] all configured agents are offline — no daemon-wakeable backend to serve. " +
|
|
710
|
+
"Offline keys remain in daemon.json for `chorus mcp`; the daemon has nothing to wake.",
|
|
711
|
+
);
|
|
712
|
+
return {
|
|
713
|
+
agents: [],
|
|
714
|
+
connections: [],
|
|
715
|
+
// No wakeable connection was registered, so there are no back-compat aliases.
|
|
716
|
+
waker: undefined,
|
|
717
|
+
router: undefined,
|
|
718
|
+
sseListener: undefined,
|
|
719
|
+
// Never settles: an idle daemon simply waits (it registered no connection, so
|
|
720
|
+
// it can never be "all-conflicted"). runDaemon keeps it alive on waitForever.
|
|
721
|
+
allConflict: new Promise(() => {}),
|
|
722
|
+
async start() {},
|
|
723
|
+
async stop() {},
|
|
724
|
+
};
|
|
725
|
+
}
|
|
670
726
|
throw new Error("buildMultiAgentDaemon: all agent runtimes failed to build");
|
|
671
727
|
}
|
|
672
728
|
|
|
@@ -783,6 +839,7 @@ export async function runDaemon(flags = {}, deps = {}) {
|
|
|
783
839
|
uninstallService,
|
|
784
840
|
systemctlUser,
|
|
785
841
|
journalctlUser,
|
|
842
|
+
launchctl,
|
|
786
843
|
resolveServicePaths: () => resolveServicePaths(env),
|
|
787
844
|
};
|
|
788
845
|
// The preflight dep bundle — built from the same seams runDaemon resolved, so
|
|
@@ -860,6 +917,11 @@ export async function runDaemon(flags = {}, deps = {}) {
|
|
|
860
917
|
for (const cfg of agentConfigs) {
|
|
861
918
|
try {
|
|
862
919
|
const id = await validate({ url: cfg.url, apiKey: cfg.apiKey });
|
|
920
|
+
// The validated identity is authoritative for the CHORUS_AGENT_PROFILE the
|
|
921
|
+
// spawner exports — fill from it when daemon.json omitted the field
|
|
922
|
+
// (resolveAgentConfigs already normalized these to a trimmed string | undefined).
|
|
923
|
+
cfg.agentUuid = cfg.agentUuid ?? id.uuid;
|
|
924
|
+
cfg.agentName = cfg.agentName ?? id.name;
|
|
863
925
|
okConfigs.push(cfg);
|
|
864
926
|
log(
|
|
865
927
|
`[Chorus] agent ${cfg.label}: ${id.name} (${id.uuid}) — ${cfg.agentType}, ` +
|
|
@@ -998,7 +1060,11 @@ export async function runDaemon(flags = {}, deps = {}) {
|
|
|
998
1060
|
}
|
|
999
1061
|
log(`[Chorus] browse roots: ${browseRoots.join(", ")} (discovery only; no connections created)`);
|
|
1000
1062
|
|
|
1001
|
-
const daemon = build(
|
|
1063
|
+
const daemon = build(
|
|
1064
|
+
// Export this agent's identity as CHORUS_AGENT_PROFILE in the woken session
|
|
1065
|
+
// (the validated identity is authoritative; creds may already carry it).
|
|
1066
|
+
{ ...creds, agentUuid: creds.agentUuid ?? identity.uuid, agentName: creds.agentName ?? identity.name },
|
|
1067
|
+
{
|
|
1002
1068
|
logger: { info: log, warn: errLog, error: errLog },
|
|
1003
1069
|
permissionMode,
|
|
1004
1070
|
agentType,
|
|
@@ -1118,11 +1184,13 @@ export async function preflight(ctx) {
|
|
|
1118
1184
|
/**
|
|
1119
1185
|
* Dispatch a daemon lifecycle subcommand. Two families:
|
|
1120
1186
|
* - install / uninstall — manage the boot-autostart supervisor service
|
|
1121
|
-
* (systemd --user on Linux; a printed template
|
|
1187
|
+
* (systemd --user on Linux; launchd LaunchAgent on macOS; a printed template
|
|
1188
|
+
* on Windows/other).
|
|
1122
1189
|
* - status / stop / restart / logs — when a supervisor unit is installed and
|
|
1123
|
-
* active, DELEGATE to it (systemctl / journalctl
|
|
1124
|
-
* never misreported as "not running";
|
|
1125
|
-
* pidfile/logfile-managed `-d` background daemon
|
|
1190
|
+
* active, DELEGATE to it (systemctl / journalctl on Linux, launchctl on
|
|
1191
|
+
* macOS) so a supervised daemon is never misreported as "not running";
|
|
1192
|
+
* otherwise operate on the pidfile/logfile-managed `-d` background daemon
|
|
1193
|
+
* exactly as before.
|
|
1126
1194
|
* Each reports clearly (no silent failure). `restart` performs
|
|
1127
1195
|
* stop-then-detached-start on the pidfile path.
|
|
1128
1196
|
* @returns {Promise<number>} exit code
|
|
@@ -1239,21 +1307,26 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1239
1307
|
for (const s of r.steps) log(`[Chorus] ${s}`);
|
|
1240
1308
|
log(`[Chorus] it will now start automatically at login. Manage it with:`);
|
|
1241
1309
|
log(`[Chorus] chorus daemon status | stop | restart | logs`);
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1310
|
+
if (r.platform === "linux") {
|
|
1311
|
+
// A --user service only survives logout with lingering enabled; and a
|
|
1312
|
+
// separately-started `chorus daemon -d` would hold the same paths and make
|
|
1313
|
+
// this service exit-and-retry. Surface both so neither is a silent gotcha.
|
|
1314
|
+
log(`[Chorus] to keep it running after you log out: loginctl enable-linger "$USER"`);
|
|
1315
|
+
log(`[Chorus] if you previously ran 'chorus daemon -d', stop it first ('chorus daemon stop') so it doesn't hold the same paths.`);
|
|
1316
|
+
} else if (r.platform === "darwin") {
|
|
1317
|
+
log(`[Chorus] if you previously ran 'chorus daemon -d', stop it first ('chorus daemon stop') so it doesn't hold the same paths.`);
|
|
1318
|
+
}
|
|
1247
1319
|
return 0;
|
|
1248
1320
|
}
|
|
1249
|
-
if (r.platform === "linux") {
|
|
1250
|
-
//
|
|
1321
|
+
if (r.platform === "linux" || r.platform === "darwin") {
|
|
1322
|
+
// A real install (systemd/launchd) actually failed — surface it, never a
|
|
1323
|
+
// silent success or a misleading "not supported" message.
|
|
1251
1324
|
errLog(`[Chorus] service install failed: ${r.error}`);
|
|
1252
1325
|
for (const s of r.steps) errLog(`[Chorus] (did: ${s})`);
|
|
1253
1326
|
return 1;
|
|
1254
1327
|
}
|
|
1255
|
-
//
|
|
1256
|
-
log(`[Chorus] automatic install is
|
|
1328
|
+
// Windows / other: no first-class auto-install — print the template + steps.
|
|
1329
|
+
log(`[Chorus] automatic install is not supported on this platform. To run the daemon as a service:`);
|
|
1257
1330
|
for (const s of r.steps) log(`[Chorus] ${s}`);
|
|
1258
1331
|
log("");
|
|
1259
1332
|
log(r.unitText);
|
|
@@ -1261,7 +1334,7 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1261
1334
|
}
|
|
1262
1335
|
if (action === "uninstall") {
|
|
1263
1336
|
const r = svc.uninstallService();
|
|
1264
|
-
if (r.platform === "linux") {
|
|
1337
|
+
if (r.platform === "linux" || r.platform === "darwin") {
|
|
1265
1338
|
if (r.error) {
|
|
1266
1339
|
errLog(`[Chorus] service uninstall failed: ${r.error}`);
|
|
1267
1340
|
return 1;
|
|
@@ -1274,22 +1347,32 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1274
1347
|
}
|
|
1275
1348
|
return 0;
|
|
1276
1349
|
}
|
|
1277
|
-
log(`[Chorus] automatic uninstall is
|
|
1350
|
+
log(`[Chorus] automatic uninstall is not supported on this platform. To remove the service:`);
|
|
1278
1351
|
for (const s of r.steps) log(`[Chorus] ${s}`);
|
|
1279
1352
|
return 0;
|
|
1280
1353
|
}
|
|
1281
1354
|
|
|
1282
1355
|
// For the control verbs, prefer a live supervisor unit over the pidfile.
|
|
1356
|
+
// A supervisor is systemd (Linux) or launchd (macOS); both delegate the verbs
|
|
1357
|
+
// to their service manager so a supervised daemon is never misreported as "not
|
|
1358
|
+
// running" via the pidfile.
|
|
1283
1359
|
const sup = svc.detectSupervisor();
|
|
1284
|
-
const
|
|
1360
|
+
const systemd = sup.kind === "systemd" && sup.installed;
|
|
1361
|
+
const launchd = sup.kind === "launchd" && sup.installed;
|
|
1285
1362
|
|
|
1286
1363
|
if (action === "status") {
|
|
1287
|
-
if (
|
|
1364
|
+
if (systemd) {
|
|
1288
1365
|
log(`[Chorus] daemon is managed by systemd (${SERVICE_NAME}.service) — ${sup.active ? "active" : "installed but NOT active"}.`);
|
|
1289
1366
|
const r = svc.systemctlUser(["status", "--no-pager", `${SERVICE_NAME}.service`]);
|
|
1290
1367
|
if (r.stdout) log(r.stdout.trimEnd());
|
|
1291
1368
|
return sup.active ? 0 : 1;
|
|
1292
1369
|
}
|
|
1370
|
+
if (launchd) {
|
|
1371
|
+
log(`[Chorus] daemon is managed by launchd (${sup.label}) — ${sup.active ? "loaded" : "installed but NOT loaded"}.`);
|
|
1372
|
+
const r = svc.launchctl(["list", sup.label]);
|
|
1373
|
+
if (r.stdout) log(r.stdout.trimEnd());
|
|
1374
|
+
return sup.active ? 0 : 1;
|
|
1375
|
+
}
|
|
1293
1376
|
const s = lifecycle.isRunning();
|
|
1294
1377
|
if (s.running) log(`[Chorus] daemon is running (pid ${s.pid}).`);
|
|
1295
1378
|
else if (s.stale) log(`[Chorus] daemon is NOT running (stale pidfile for pid ${s.pid}).`);
|
|
@@ -1297,7 +1380,7 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1297
1380
|
return 0;
|
|
1298
1381
|
}
|
|
1299
1382
|
if (action === "logs") {
|
|
1300
|
-
if (
|
|
1383
|
+
if (systemd) {
|
|
1301
1384
|
const r = svc.journalctlUser(["-u", `${SERVICE_NAME}.service`, "--no-pager", "-n", "200"]);
|
|
1302
1385
|
if (r.status !== 0 && !r.stdout) {
|
|
1303
1386
|
errLog(`[Chorus] could not read the service journal: ${r.stderr.trim() || `exit ${r.status}`}`);
|
|
@@ -1306,6 +1389,8 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1306
1389
|
log(r.stdout.trimEnd());
|
|
1307
1390
|
return 0;
|
|
1308
1391
|
}
|
|
1392
|
+
// launchd (and the pidfile path) both log to ~/.chorus/daemon.log — the plist
|
|
1393
|
+
// routes stdout/stderr there — so the pidfile logfile reader serves both.
|
|
1309
1394
|
const r = lifecycle.readLog();
|
|
1310
1395
|
if (!r.ok) {
|
|
1311
1396
|
errLog(`[Chorus] ${r.message}`);
|
|
@@ -1315,7 +1400,7 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1315
1400
|
return 0;
|
|
1316
1401
|
}
|
|
1317
1402
|
if (action === "stop") {
|
|
1318
|
-
if (
|
|
1403
|
+
if (systemd) {
|
|
1319
1404
|
const r = svc.systemctlUser(["stop", `${SERVICE_NAME}.service`]);
|
|
1320
1405
|
if (r.status === 0) {
|
|
1321
1406
|
log(`[Chorus] stopped the daemon service (systemctl --user stop ${SERVICE_NAME}.service).`);
|
|
@@ -1325,6 +1410,16 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1325
1410
|
errLog(`[Chorus] failed to stop the service: ${r.stderr.trim() || `exit ${r.status}`}`);
|
|
1326
1411
|
return 1;
|
|
1327
1412
|
}
|
|
1413
|
+
if (launchd) {
|
|
1414
|
+
const r = svc.launchctl(["unload", sup.plistPath]);
|
|
1415
|
+
if (r.status === 0) {
|
|
1416
|
+
log(`[Chorus] stopped the daemon service (launchctl unload ${sup.plistPath}).`);
|
|
1417
|
+
log(`[Chorus] note: it will load again at next login. To disable: chorus daemon uninstall`);
|
|
1418
|
+
return 0;
|
|
1419
|
+
}
|
|
1420
|
+
errLog(`[Chorus] failed to stop the service: ${r.stderr.trim() || `exit ${r.status}`}`);
|
|
1421
|
+
return 1;
|
|
1422
|
+
}
|
|
1328
1423
|
// --force: unconditional pidfile cleanup for stuck states the identity
|
|
1329
1424
|
// probe cannot resolve. Threaded from the parsed client flags.
|
|
1330
1425
|
const r = lifecycle.stopDaemon({ force: pfDeps?.flags?.force === true });
|
|
@@ -1336,7 +1431,7 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1336
1431
|
return ok ? 0 : 1;
|
|
1337
1432
|
}
|
|
1338
1433
|
if (action === "restart") {
|
|
1339
|
-
if (
|
|
1434
|
+
if (systemd) {
|
|
1340
1435
|
const r = svc.systemctlUser(["restart", `${SERVICE_NAME}.service`]);
|
|
1341
1436
|
if (r.status === 0) {
|
|
1342
1437
|
log(`[Chorus] restarted the daemon service (systemctl --user restart ${SERVICE_NAME}.service).`);
|
|
@@ -1345,6 +1440,17 @@ export async function handleLifecycleAction(action, { log, errLog, lifecycle, se
|
|
|
1345
1440
|
errLog(`[Chorus] failed to restart the service: ${r.stderr.trim() || `exit ${r.status}`}`);
|
|
1346
1441
|
return 1;
|
|
1347
1442
|
}
|
|
1443
|
+
if (launchd) {
|
|
1444
|
+
// launchd has no atomic restart — unload then load the same plist.
|
|
1445
|
+
svc.launchctl(["unload", sup.plistPath]);
|
|
1446
|
+
const r = svc.launchctl(["load", sup.plistPath]);
|
|
1447
|
+
if (r.status === 0) {
|
|
1448
|
+
log(`[Chorus] restarted the daemon service (launchctl unload+load ${sup.plistPath}).`);
|
|
1449
|
+
return 0;
|
|
1450
|
+
}
|
|
1451
|
+
errLog(`[Chorus] failed to restart the service: ${r.stderr.trim() || `exit ${r.status}`}`);
|
|
1452
|
+
return 1;
|
|
1453
|
+
}
|
|
1348
1454
|
const r = lifecycle.stopDaemon();
|
|
1349
1455
|
log(`[Chorus] ${r.message}`);
|
|
1350
1456
|
// Start a fresh detached instance regardless of whether one was running.
|
package/cli/dsh-spawner.mjs
CHANGED
|
@@ -187,6 +187,13 @@ export class DshSpawner {
|
|
|
187
187
|
};
|
|
188
188
|
if (this.creds?.url) childEnv.CHORUS_URL = this.creds.url;
|
|
189
189
|
if (this.creds?.apiKey) childEnv.CHORUS_API_KEY = this.creds.apiKey;
|
|
190
|
+
// Identity profile — the dsh doc-mirror wrapper passes this to `chorus mcp
|
|
191
|
+
// --agent` (resolving the key from ~/.chorus/daemon.json). dsh scrubs
|
|
192
|
+
// credential-shaped env from tool subprocesses; the profile is not a secret,
|
|
193
|
+
// and the wrapper also reads it from $DSH_HOME/.env, so url/apiKey remain the
|
|
194
|
+
// reliable fallback when it doesn't survive.
|
|
195
|
+
if (this.creds?.agentUuid || this.creds?.agentName)
|
|
196
|
+
childEnv.CHORUS_AGENT_PROFILE = this.creds.agentUuid || this.creds.agentName;
|
|
190
197
|
|
|
191
198
|
const { command, argv } = resolveDshSpawnCommand(dshPath, this.platform, childEnv);
|
|
192
199
|
let child;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
// cli/init/adapters.mjs
|
|
2
|
+
// The per-agent adapters `chorus init` configures. One descriptor per supported
|
|
3
|
+
// coding-agent harness; buildAdapter() turns each into an AgentAdapter
|
|
4
|
+
// (contracts.mjs). Detection is shared (cli/init/detect.mjs); the plugin-install
|
|
5
|
+
// mechanism (descriptor.install) is added by the plugin-install task — until
|
|
6
|
+
// then installPlugin reports "unsupported" rather than guessing a command.
|
|
7
|
+
//
|
|
8
|
+
// LAYOUT PROVENANCE (binary + config dir), so future edits don't drift into
|
|
9
|
+
// LLM-guessed paths (verified against each agent's real CLI / install-*.sh):
|
|
10
|
+
// - claude : bin `claude`; dir ~/.claude (this machine + docs/CONNECT_CLAUDE_CODE.md)
|
|
11
|
+
// - codex : bin `codex`; dir ~/.codex (public/install-codex.sh: CODEX_HOME=$HOME/.codex)
|
|
12
|
+
// - kiro : bin `kiro`; dir ~/.kiro (public/install-kiro.sh: ~/.kiro global)
|
|
13
|
+
// - opencode : bin `opencode`; dir ~/.config/opencode (public/install-opencode.sh: OPENCODE_CONFIG_DIR)
|
|
14
|
+
// - openclaw : bin `openclaw`; dir ~/.openclaw|~/.config/openclaw (NOT independently verified — probe both; see NOTE)
|
|
15
|
+
// - pi : bin `pi`; dir ~/.pi|~/.config/pi (NOT independently verified — probe both; see NOTE)
|
|
16
|
+
// - dsh : bin `dsh`; dir $DSH_HOME|~/.dsh ($DSH_HOME per dsh integration; see NOTE)
|
|
17
|
+
//
|
|
18
|
+
// NOTE: openclaw / pi / dsh config-dir specifics were not verifiable on this
|
|
19
|
+
// build host (their CLIs/config were not all present); the descriptors probe the
|
|
20
|
+
// most likely locations. A wrong config-dir guess only weakens the *config-dir*
|
|
21
|
+
// half of the dual signal (the binary-on-PATH half still detects them) and never
|
|
22
|
+
// blocks selection — undetected agents remain selectable. The plugin-install
|
|
23
|
+
// task must still verify each install command against the real CLI.
|
|
24
|
+
|
|
25
|
+
import { readFileSync } from "node:fs";
|
|
26
|
+
import { homedir } from "node:os";
|
|
27
|
+
import { join } from "node:path";
|
|
28
|
+
import { detectSignals } from "./detect.mjs";
|
|
29
|
+
import { OUTCOME_ACTIONS } from "./contracts.mjs";
|
|
30
|
+
import { CHORUS_PLUGIN_ID, CHORUS_MARKETPLACE_NAME, CHORUS_MARKETPLACE_SOURCE } from "./chorus-plugin-consts.mjs";
|
|
31
|
+
import {
|
|
32
|
+
installClaude,
|
|
33
|
+
installCodex,
|
|
34
|
+
installOpencode,
|
|
35
|
+
installDsh,
|
|
36
|
+
installOpenclaw,
|
|
37
|
+
installKiro,
|
|
38
|
+
readCodexInstallState,
|
|
39
|
+
readOpencodeInstallState,
|
|
40
|
+
readDshInstallState,
|
|
41
|
+
readOpenclawInstallState,
|
|
42
|
+
readKiroInstallState,
|
|
43
|
+
guided,
|
|
44
|
+
GUIDED_MESSAGES,
|
|
45
|
+
} from "./install-methods.mjs";
|
|
46
|
+
|
|
47
|
+
// Re-export the shared marketplace identifiers from their canonical home so
|
|
48
|
+
// existing importers of these names from adapters.mjs keep working.
|
|
49
|
+
export { CHORUS_PLUGIN_ID, CHORUS_MARKETPLACE_NAME, CHORUS_MARKETPLACE_SOURCE };
|
|
50
|
+
|
|
51
|
+
/** Read + JSON-parse a file, or null on any error. Never throws. */
|
|
52
|
+
function readJsonSafe(path) {
|
|
53
|
+
try {
|
|
54
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
55
|
+
} catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Claude Code install-state reader (verified against CC 2.1.235 on-disk layout):
|
|
62
|
+
* `~/.claude/plugins/installed_plugins.json` (v2 keyed by `<plugin>@<marketplace>`)
|
|
63
|
+
* and `known_marketplaces.json`. Read-only — never hand-writes these files.
|
|
64
|
+
* @param {{ home?: string, readJson?: (p: string) => any }} [deps]
|
|
65
|
+
* @returns {{ marketplaceRegistered: boolean, pluginInstalled: boolean, version?: string }}
|
|
66
|
+
*/
|
|
67
|
+
export function readClaudeInstallState({ home = homedir(), readJson = readJsonSafe } = {}) {
|
|
68
|
+
const pluginsDir = join(home, ".claude", "plugins");
|
|
69
|
+
const installed = readJson(join(pluginsDir, "installed_plugins.json"));
|
|
70
|
+
const markets = readJson(join(pluginsDir, "known_marketplaces.json"));
|
|
71
|
+
|
|
72
|
+
const marketplaceRegistered = !!(markets && typeof markets === "object" && markets[CHORUS_MARKETPLACE_NAME]);
|
|
73
|
+
|
|
74
|
+
let pluginInstalled = false;
|
|
75
|
+
let version;
|
|
76
|
+
const entries = installed && typeof installed === "object" ? installed.plugins?.[CHORUS_PLUGIN_ID] : null;
|
|
77
|
+
if (Array.isArray(entries) && entries.length > 0) {
|
|
78
|
+
pluginInstalled = true;
|
|
79
|
+
version = entries[0]?.version;
|
|
80
|
+
}
|
|
81
|
+
return { marketplaceRegistered, pluginInstalled, version };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The supported-agent descriptors. `install` / `readState` are optional hooks the
|
|
86
|
+
* plugin-install task fills in per agent; absent ⇒ generic behavior.
|
|
87
|
+
* @type {Array<{
|
|
88
|
+
* id: string, displayName: string, binaries: string[], configDirs: string[],
|
|
89
|
+
* readState?: (deps: object) => object, install?: (ctx: object) => object,
|
|
90
|
+
* }>}
|
|
91
|
+
*/
|
|
92
|
+
export const AGENT_DESCRIPTORS = [
|
|
93
|
+
{ id: "claude", displayName: "Claude Code", binaries: ["claude"], configDirs: ["~/.claude"], readState: readClaudeInstallState, install: installClaude },
|
|
94
|
+
{ id: "codex", displayName: "Codex CLI", binaries: ["codex"], configDirs: ["~/.codex"], readState: readCodexInstallState, install: installCodex },
|
|
95
|
+
{ id: "kiro", displayName: "Kiro CLI", binaries: ["kiro"], configDirs: ["~/.kiro"], readState: readKiroInstallState, install: installKiro },
|
|
96
|
+
{ id: "opencode", displayName: "opencode", binaries: ["opencode"], configDirs: ["~/.config/opencode", "~/.opencode"], readState: readOpencodeInstallState, install: installOpencode },
|
|
97
|
+
{ id: "openclaw", displayName: "OpenClaw", binaries: ["openclaw"], configDirs: ["~/.openclaw", "~/.config/openclaw"], readState: readOpenclawInstallState, install: installOpenclaw },
|
|
98
|
+
{ id: "pi", displayName: "Pi", binaries: ["pi"], configDirs: ["~/.pi", "~/.config/pi"], install: guided("pi", GUIDED_MESSAGES.pi) },
|
|
99
|
+
{ id: "dsh", displayName: "DeepSeek Harness (dsh)", binaries: ["dsh"], configDirs: ["$DSH_HOME", "~/.dsh"], readState: readDshInstallState, install: installDsh },
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Build an AgentAdapter from a descriptor.
|
|
104
|
+
* @param {typeof AGENT_DESCRIPTORS[number]} d
|
|
105
|
+
* @returns {import("./contracts.mjs").AgentAdapter}
|
|
106
|
+
*/
|
|
107
|
+
export function buildAdapter(d) {
|
|
108
|
+
return {
|
|
109
|
+
id: d.id,
|
|
110
|
+
displayName: d.displayName,
|
|
111
|
+
detect: (env = process.env) => detectSignals(d, { env }),
|
|
112
|
+
readInstallState: (deps = {}) => {
|
|
113
|
+
const base = typeof d.readState === "function"
|
|
114
|
+
? d.readState(deps)
|
|
115
|
+
: { marketplaceRegistered: false, pluginInstalled: false };
|
|
116
|
+
// `supported` = a REAL automated install path exists for this agent. A
|
|
117
|
+
// `guided()` fallback also returns a function (so `typeof d.install ===
|
|
118
|
+
// "function"` alone would report every fallback agent as supported — the
|
|
119
|
+
// pre-existing latent bug); guided installers are tagged `.guided === true`,
|
|
120
|
+
// so exclude them here. Real installers (claude/codex/opencode + dsh/openclaw/
|
|
121
|
+
// kiro) → true; guided (pi) → false.
|
|
122
|
+
return { supported: typeof d.install === "function" && d.install.guided !== true, ...base };
|
|
123
|
+
},
|
|
124
|
+
installPlugin: (ctx = {}) =>
|
|
125
|
+
typeof d.install === "function"
|
|
126
|
+
? d.install(ctx)
|
|
127
|
+
: {
|
|
128
|
+
stepId: "plugin-install",
|
|
129
|
+
agentId: d.id,
|
|
130
|
+
action: OUTCOME_ACTIONS.UNSUPPORTED,
|
|
131
|
+
detail: `no automated plugin install for ${d.displayName} yet — configure manually`,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** All supported adapters, built from the descriptors. */
|
|
137
|
+
export const ADAPTERS = AGENT_DESCRIPTORS.map(buildAdapter);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// cli/init/agent-type-map.mjs
|
|
2
|
+
// The single translation between a `chorus init` adapter selection id (see
|
|
3
|
+
// cli/init/adapters.mjs — "claude" | "codex" | "kiro" | "opencode" | "openclaw" |
|
|
4
|
+
// "pi" | "dsh") and the daemon's agentType vocabulary (cli/daemon-agent.mjs
|
|
5
|
+
// KNOWN_AGENTS). It lives in ONE place so the credential-seed step (which writes
|
|
6
|
+
// each selected agent's daemon.json agents[] entry) and the daemon-setup step
|
|
7
|
+
// (which gates auto-start on whether any selected agent is wakeable) can never
|
|
8
|
+
// disagree about how a selection maps to a backend.
|
|
9
|
+
//
|
|
10
|
+
// Two rules the callers rely on:
|
|
11
|
+
// 1. The init id "claude" is NOT the daemon agentType — it renames to
|
|
12
|
+
// "claude-code" EXPLICITLY here. No caller ever passes the raw init id
|
|
13
|
+
// through to daemon.json; every write goes through agentTypeForSelection.
|
|
14
|
+
// 2. Any selection the daemon cannot wake as a first-class backend
|
|
15
|
+
// (opencode / openclaw / pi, and dsh while its harness is dormant/offline)
|
|
16
|
+
// maps to the non-wakeable "offline" classification. Its key is still parked
|
|
17
|
+
// in agents[] for the `chorus mcp` proxy, but the daemon builds no spawner
|
|
18
|
+
// and dispatches no wake (spawner-select.mjs fail-closes on "offline").
|
|
19
|
+
//
|
|
20
|
+
// Fail-closed by default: an unknown / unmapped id maps to "offline" rather than a
|
|
21
|
+
// wakeable backend, so a future adapter added without a mapping is never silently
|
|
22
|
+
// woken as claude-code.
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Selection id → daemon agentType. Only claude/codex/kiro are wakeable backends;
|
|
26
|
+
* everything else is classified offline. `dsh` maps to offline because the dsh
|
|
27
|
+
* harness is de-advertised (offline) — re-map it here to bring it back online.
|
|
28
|
+
* @type {Readonly<Record<string, string>>}
|
|
29
|
+
*/
|
|
30
|
+
export const SELECTION_TO_AGENT_TYPE = Object.freeze({
|
|
31
|
+
claude: "claude-code", // explicit rename — never pass the init id "claude" through verbatim
|
|
32
|
+
codex: "codex",
|
|
33
|
+
kiro: "kiro",
|
|
34
|
+
opencode: "offline",
|
|
35
|
+
openclaw: "offline",
|
|
36
|
+
pi: "offline",
|
|
37
|
+
dsh: "offline",
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Map a `chorus init` selection id to the daemon agentType written into
|
|
42
|
+
* daemon.json `agents[]`. Unknown ids fail closed to "offline" (never a wakeable
|
|
43
|
+
* default), so an agent is only ever woken when its backend is explicitly known.
|
|
44
|
+
* @param {string} selectionId
|
|
45
|
+
* @returns {string} a KNOWN_AGENTS agentType ("claude-code" | "codex" | "kiro" | "offline")
|
|
46
|
+
*/
|
|
47
|
+
export function agentTypeForSelection(selectionId) {
|
|
48
|
+
return SELECTION_TO_AGENT_TYPE[selectionId] ?? "offline";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Whether a daemon agentType is one the daemon can actually wake. "offline" is the
|
|
53
|
+
* one non-wakeable classification; every other value the init mapping produces
|
|
54
|
+
* (claude-code / codex / kiro) is wakeable.
|
|
55
|
+
* @param {string} agentType
|
|
56
|
+
* @returns {boolean}
|
|
57
|
+
*/
|
|
58
|
+
export function isWakeableAgentType(agentType) {
|
|
59
|
+
return agentType !== "offline";
|
|
60
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// cli/init/chorus-plugin-consts.mjs
|
|
2
|
+
// Canonical Chorus plugin/marketplace identifiers, shared by the adapters and the
|
|
3
|
+
// per-agent install methods. Kept in its own module so adapters.mjs and
|
|
4
|
+
// install-methods.mjs can both import them without a circular dependency.
|
|
5
|
+
|
|
6
|
+
/** Plugin selector used by marketplace-based agents (Claude Code, Codex). */
|
|
7
|
+
export const CHORUS_PLUGIN_ID = "chorus@chorus-plugins";
|
|
8
|
+
/** Marketplace name as it appears in agents' on-disk state. */
|
|
9
|
+
export const CHORUS_MARKETPLACE_NAME = "chorus-plugins";
|
|
10
|
+
/**
|
|
11
|
+
* Remote marketplace source (owner decision: each agent's NATIVE REMOTE
|
|
12
|
+
* marketplace, not a local bundle). Overridable per invocation via
|
|
13
|
+
* CHORUS_MARKETPLACE_SOURCE. Accepted by `claude plugin marketplace add`
|
|
14
|
+
* (URL/path/repo). Codex prefers the `owner/repo` slug — see installCodex.
|
|
15
|
+
*/
|
|
16
|
+
export const CHORUS_MARKETPLACE_SOURCE = "https://github.com/Chorus-AIDLC/Chorus";
|