@chorus-aidlc/chorus 0.17.2 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-build-manifest.json +357 -355
- package/.next/standalone/.next/app-path-routes-manifest.json +44 -44
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +18 -18
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +1 -1
- 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 +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
- package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin/companies.html +2 -2
- package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
- package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/admin.html +2 -2
- package/.next/standalone/.next/server/app/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js +1 -1
- package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/admin.html +2 -2
- package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
- package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/callback.html +2 -2
- package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
- package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
- package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
- package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/onboarding.html +2 -2
- package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects.html +2 -2
- package/.next/standalone/.next/server/app/projects.rsc +3 -3
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +4 -4
- package/.next/standalone/.next/server/app-paths-manifest.json +44 -44
- package/.next/standalone/.next/server/chunks/109.js +1 -0
- package/.next/standalone/.next/server/chunks/1318.js +1 -1
- package/.next/standalone/.next/server/chunks/1496.js +1 -0
- package/.next/standalone/.next/server/chunks/1559.js +2 -2
- package/.next/standalone/.next/server/chunks/2572.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/3112.js +1 -1
- package/.next/standalone/.next/server/chunks/{2536.js → 3619.js} +3 -3
- package/.next/standalone/.next/server/chunks/{6080.js → 4810.js} +1 -1
- 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/6113.js +1 -1
- package/.next/standalone/.next/server/chunks/6506.js +2 -2
- package/.next/standalone/.next/server/chunks/6515.js +2 -2
- package/.next/standalone/.next/server/chunks/6737.js +1 -0
- 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/731.js +1 -0
- 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/7857.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 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/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/static/chunks/11595.0afa1a540f681fb4.js +1 -0
- package/.next/standalone/.next/static/chunks/22705-324a191727ae45b7.js +1 -0
- package/.next/standalone/.next/static/chunks/{31308-32614efb88305738.js → 31308-bb4a97b3f39c22dd.js} +1 -1
- package/.next/standalone/.next/static/chunks/33456.4a5f4712a7e78d8f.js +1 -0
- package/.next/standalone/.next/static/chunks/44216-3876e84f5b02d355.js +1 -0
- package/.next/standalone/.next/static/chunks/4860.5719e32b95be2d93.js +1 -0
- package/.next/standalone/.next/static/chunks/6528-a8a562ef7d26bb43.js +1 -0
- package/.next/standalone/.next/static/chunks/67439-7b339b28ed0ecfc6.js +1 -0
- package/.next/standalone/.next/static/chunks/79919-ae8bd8d8ec1e38ce.js +1 -0
- package/.next/standalone/.next/static/chunks/82203-4ce5926624df7ed0.js +1 -0
- package/.next/standalone/.next/static/chunks/94643-37ac7b8ef8ea5e75.js +1 -0
- package/.next/standalone/.next/static/chunks/99373.6c1509bfaf599741.js +1 -0
- package/.next/standalone/.next/static/chunks/99775-697e82ee04eac6b1.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-2fda722cdace8147.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-eecb38fa4b8eb4e8.js → page-b45c42c536eff64b.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-792aba7fd6b6daa3.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-cd7ec77596304a07.js → page-800a979f12b73f27.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-97a9e6f949002004.js → page-34de35f75aa71f6d.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-a16002aa2a911619.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/{page-cec15f4b835d34fc.js → page-e8030824994edf35.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-4f7f1ddbaf79be8f.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-4ee117e690fda56f.js → page-349b0977f3c6209a.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-7fbc46dfb7b22bd3.js → page-be43cb06112fce12.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-6916e1abab42a6e6.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-4fce966dc96d4ff1.js → page-c0090caae202eae5.js} +1 -1
- package/.next/standalone/.next/static/chunks/{webpack-1bfc783412a06fc5.js → webpack-cfb63dd1b416c92e.js} +1 -1
- package/.next/standalone/.next/static/css/75c761a5428611fa.css +1 -0
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +2 -2
- package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +1 -0
- package/.next/standalone/public/chorus-plugin/agents/proposal-reviewer.md +12 -3
- package/.next/standalone/public/chorus-plugin/agents/task-reviewer.md +4 -0
- package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/chorus-plugin/bin/on-post-submit-for-verify.sh +3 -3
- package/.next/standalone/public/chorus-plugin/bin/on-post-submit-proposal.sh +3 -3
- package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +2 -2
- package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +39 -64
- package/.next/standalone/public/chorus-plugin/bin/resolve-spec-mode.sh +107 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-resolver-drift.sh +46 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity-negative.sh +328 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-skill-harness-fidelity.sh +372 -0
- package/.next/standalone/public/chorus-plugin/bin/tests/test-spec-mode-resolution.sh +83 -0
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +11 -6
- package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +14 -9
- package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +27 -31
- package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +11 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +14 -7
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +6 -4
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +10 -8
- package/.next/standalone/public/chorus-plugin/skills/spec-lite/SKILL.md +147 -0
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +49 -34
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +2 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.md +1 -1
- 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 +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +9 -7
- 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 +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +35 -27
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +9 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +14 -7
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +2 -2
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +8 -8
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-spec-lite/SKILL.md +147 -0
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +39 -25
- package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +11 -6
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +41 -0
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-for-verify.sh +3 -3
- package/.next/standalone/public/kiro-plugin/bin/on-post-submit-proposal.sh +3 -3
- package/.next/standalone/public/kiro-plugin/bin/on-post-verify-task.sh +2 -2
- package/.next/standalone/public/kiro-plugin/bin/resolve-spec-mode.sh +107 -0
- package/.next/standalone/public/kiro-plugin/manifest.txt +2 -0
- package/.next/standalone/public/skill/chorus/SKILL.md +11 -1
- package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -0
- package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/orchestrate-chorus/SKILL.md +11 -1
- package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +5 -2
- package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
- package/.next/standalone/public/skill/review-chorus/SKILL.md +5 -3
- package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +4 -0
- package/.next/standalone/public/skill/yolo-chorus/SKILL.md +23 -7
- package/README.ja.md +3 -3
- package/README.ko.md +3 -3
- package/README.md +3 -3
- package/README.zh.md +3 -3
- package/cli/agent-cli-config.mjs +323 -0
- package/cli/agent-launcher.mjs +45 -17
- package/cli/claude-spawner.mjs +22 -13
- package/cli/codex-spawner.mjs +23 -15
- package/cli/credentials.mjs +7 -0
- package/cli/daemon-agent.mjs +1 -1
- package/cli/daemon-config.mjs +14 -0
- package/cli/daemon.mjs +34 -9
- package/cli/dsh-managed-config.mjs +219 -293
- package/cli/dsh-spawner.mjs +53 -27
- package/cli/init/steps/credential-seed.mjs +1 -1
- package/cli/kiro-spawner.mjs +22 -15
- package/cli/launch-diagnostics.mjs +67 -0
- package/cli/login.mjs +17 -1
- package/cli/pi-spawner.mjs +19 -12
- package/cli/prompts.mjs +52 -2
- package/cli/spawner-select.mjs +6 -11
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/1114.js +0 -1
- package/.next/standalone/.next/server/chunks/2953.js +0 -1
- package/.next/standalone/.next/server/chunks/5162.js +0 -1
- package/.next/standalone/.next/server/chunks/6689.js +0 -1
- package/.next/standalone/.next/server/chunks/9667.js +0 -1
- package/.next/standalone/.next/static/chunks/11595.b81c0bf7732c3b62.js +0 -1
- package/.next/standalone/.next/static/chunks/24808-e3d95efc7ec039c5.js +0 -1
- package/.next/standalone/.next/static/chunks/33456.cfc9aa607a62e879.js +0 -1
- package/.next/standalone/.next/static/chunks/4860.41351a823cf400e4.js +0 -1
- package/.next/standalone/.next/static/chunks/51468-194d894e563580dd.js +0 -1
- package/.next/standalone/.next/static/chunks/61570-527701d072d00a24.js +0 -1
- package/.next/standalone/.next/static/chunks/65066-6da35d5cb080c7f5.js +0 -1
- package/.next/standalone/.next/static/chunks/72875-0987d09cd8406614.js +0 -1
- package/.next/standalone/.next/static/chunks/75936-79860953212592fd.js +0 -1
- package/.next/standalone/.next/static/chunks/79919-e02963faee5cb563.js +0 -1
- package/.next/standalone/.next/static/chunks/94643-e8f5fa25e2340cc8.js +0 -1
- package/.next/standalone/.next/static/chunks/99373.633f7c25e64bcdac.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-bb5ef11586301c72.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-725373108da1b08c.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-7d2f4713697eb0a7.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0225f87552b977d9.js +0 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-8b30678a58e7b2ee.js +0 -1
- package/.next/standalone/.next/static/css/1d9cf83f50b6db00.css +0 -1
- /package/.next/standalone/.next/static/{WSN4XeA1kUCI6CeEHcaT_ → IxKVu5zkFPTjSKAUR99yH}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{WSN4XeA1kUCI6CeEHcaT_ → IxKVu5zkFPTjSKAUR99yH}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,27 @@
|
|
|
1
|
+
// Managed dsh profile composition for the daemon's `dsh --profile sdk` backend.
|
|
2
|
+
//
|
|
3
|
+
// dsh 0.1.2-rc.1 replaced the standalone `dsh-jsonrpc-agent` bin + hand-authored
|
|
4
|
+
// `cordis.yml` (DSH_CORDIS_CONFIG) model with a profile launcher: `dsh --profile
|
|
5
|
+
// sdk` boots the `sdk` profile under `$DSH_HOME/profiles/sdk` — an ordered stack
|
|
6
|
+
// of plugin-bundle patch layers (dsh-base + dsh-sdk-app, the latter mounting the
|
|
7
|
+
// `@deepseek-ai/dsh-sdk-jsonrpc-server` runtime that owns stdout). Chorus is a
|
|
8
|
+
// native dsh bundle: `dsh plugin --profile sdk add @chorus-aidlc/chorus-dsh -w`
|
|
9
|
+
// appends it to the profile's `dsh.profile.bundles` list, so its own
|
|
10
|
+
// `cordis.patch.yml` (the chorus-dsh-lifecycle, chorus-mcp, chorus-skill-filesystem
|
|
11
|
+
// and chorus-persona rows) auto-applies as a bundle layer — no `--patch` needed for
|
|
12
|
+
// the Chorus rows, and pnpm auto-installs chorus-dsh's peers (mcp-client, persona,
|
|
13
|
+
// skill-filesystem, tool-skill).
|
|
14
|
+
//
|
|
15
|
+
// The owner chose external_runtime: the `dsh` CLI itself comes from PATH /
|
|
16
|
+
// CHORUS_DSH_PATH and is NEVER installed into the managed home. We only COMPOSE a
|
|
17
|
+
// managed profile home under ~/.chorus/dsh/releases/<fingerprint>-<uuid>/ and hand
|
|
18
|
+
// its path back as the child's DSH_HOME. Credentials reach the chorus-mcp row via
|
|
19
|
+
// the CHORUS_URL / CHORUS_API_KEY the spawner injects into the child env (the
|
|
20
|
+
// chorus-dsh-lifecycle plugin's documented fallback also reads $DSH_HOME/.env).
|
|
21
|
+
|
|
1
22
|
import { spawnSync } from "node:child_process";
|
|
23
|
+
import { safeSpawnError, redactedSetupError } from "./launch-diagnostics.mjs";
|
|
24
|
+
import { getAgentEnv, overlayAgentEnv } from "./agent-cli-config.mjs";
|
|
2
25
|
import { createHash, randomUUID } from "node:crypto";
|
|
3
26
|
import {
|
|
4
27
|
existsSync,
|
|
@@ -9,172 +32,24 @@ import {
|
|
|
9
32
|
writeFileSync,
|
|
10
33
|
} from "node:fs";
|
|
11
34
|
import { homedir } from "node:os";
|
|
12
|
-
import {
|
|
13
|
-
import { createRequire } from "node:module";
|
|
14
|
-
import { pathToFileURL } from "node:url";
|
|
35
|
+
import { join } from "node:path";
|
|
15
36
|
|
|
16
37
|
export const DSH_BUNDLE = "@chorus-aidlc/chorus-dsh";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
"@deepseek-ai/dsh-sdk-jsonrpc-demo": DSH_RC_VERSION,
|
|
33
|
-
"@deepseek-ai/dsh-invariants": DSH_RC_VERSION,
|
|
34
|
-
"@deepseek-ai/cordis": "4.0.1",
|
|
35
|
-
});
|
|
36
|
-
const REQUIRED_IMPORTS = Object.freeze([DSH_BUNDLE, ...DSH_PEERS]);
|
|
37
|
-
const STATE_VERSION = 1;
|
|
38
|
-
|
|
39
|
-
const CONFIG_HEAD = `# Generated by Chorus. Secrets are read from the child environment.
|
|
40
|
-
# This file is managed; use CHORUS_DSH_CONFIG or DSH_CORDIS_CONFIG to override it.
|
|
41
|
-
|
|
42
|
-
- id: sdk-jsonrpc-server
|
|
43
|
-
name: '@deepseek-ai/dsh-sdk-jsonrpc-server'
|
|
44
|
-
config:
|
|
45
|
-
maxTokensAsSuccess: true
|
|
46
|
-
|
|
47
|
-
- id: llm-deepseek
|
|
48
|
-
name: '@deepseek-ai/dsh-llm-deepseek'
|
|
49
|
-
config:
|
|
50
|
-
thinking: enabled
|
|
51
|
-
reasoningEffort: max
|
|
52
|
-
|
|
53
|
-
- id: subprocess
|
|
54
|
-
name: '@deepseek-ai/dsh-subprocess-local'
|
|
55
|
-
|
|
56
|
-
- id: bash
|
|
57
|
-
name: '@deepseek-ai/dsh-bash-local'
|
|
58
|
-
config:
|
|
59
|
-
cwd: !!js process.env.DSH_CWD ?? process.cwd()
|
|
60
|
-
timeoutMs: 60000
|
|
61
|
-
|
|
62
|
-
- id: agent-spine
|
|
63
|
-
name: '@deepseek-ai/dsh-agent-spine-demo'
|
|
64
|
-
config:
|
|
65
|
-
persona: !!js process.env.DSH_SYSTEM_PROMPT ?? 'You are a coding agent.'
|
|
66
|
-
workspaceContext: false
|
|
67
|
-
skills:
|
|
68
|
-
enabled: false
|
|
69
|
-
toolBash:
|
|
70
|
-
enableRunInBackground: false
|
|
71
|
-
toolJobs: false
|
|
72
|
-
|
|
73
|
-
- id: sessions
|
|
74
|
-
name: '@deepseek-ai/dsh-session-persistence-jsonl'
|
|
75
|
-
config:
|
|
76
|
-
root: !!js process.env.DSH_SESSION_ROOT ?? './.sessions'
|
|
77
|
-
compression: zstd
|
|
78
|
-
|
|
79
|
-
- id: session-checkpoints
|
|
80
|
-
name: '@deepseek-ai/dsh-session-checkpoint-policy'
|
|
81
|
-
|
|
82
|
-
- id: subagent
|
|
83
|
-
name: '@deepseek-ai/dsh-subagent'
|
|
84
|
-
|
|
85
|
-
- id: subagent-spawn-in-process
|
|
86
|
-
name: '@deepseek-ai/dsh-subagent-spawn-in-process'
|
|
87
|
-
config:
|
|
88
|
-
providerName: spawn
|
|
89
|
-
|
|
90
|
-
- id: tool-subagent
|
|
91
|
-
name: '@deepseek-ai/dsh-tool-subagent'
|
|
92
|
-
config:
|
|
93
|
-
provider: spawn
|
|
94
|
-
toolName: subagent
|
|
95
|
-
enableRunInBackground: false
|
|
96
|
-
|
|
97
|
-
- id: tool-todo
|
|
98
|
-
name: '@deepseek-ai/dsh-tool-todo'
|
|
99
|
-
config:
|
|
100
|
-
allowParallelInProgress: true
|
|
101
|
-
|
|
102
|
-
- id: fs-local
|
|
103
|
-
name: '@deepseek-ai/dsh-fs-local'
|
|
104
|
-
config:
|
|
105
|
-
cwd: !!js process.env.DSH_CWD ?? process.cwd()
|
|
106
|
-
|
|
107
|
-
- id: fs-observation-policy
|
|
108
|
-
name: '@deepseek-ai/dsh-fs-observation-policy'
|
|
109
|
-
|
|
110
|
-
- id: tool-fs
|
|
111
|
-
name: '@deepseek-ai/dsh-tool-fs'
|
|
112
|
-
|
|
113
|
-
- id: token-meter
|
|
114
|
-
name: '@deepseek-ai/dsh-token-meter'
|
|
115
|
-
|
|
116
|
-
- id: compaction-basic
|
|
117
|
-
name: '@deepseek-ai/dsh-compaction-basic'
|
|
118
|
-
config:
|
|
119
|
-
thresholdRatio: 0.8
|
|
120
|
-
retainRatio: 0.16
|
|
121
|
-
maxTokens: 8192
|
|
122
|
-
compactionRetries: 1
|
|
123
|
-
|
|
124
|
-
- id: chorus-dsh-lifecycle
|
|
125
|
-
name: __CHORUS_BUNDLE__
|
|
126
|
-
|
|
127
|
-
- id: chorus-mcp
|
|
128
|
-
name: '@deepseek-ai/dsh-mcp-client'
|
|
129
|
-
inject: [chorusDshConfig]
|
|
130
|
-
config:
|
|
131
|
-
serverName: chorus
|
|
132
|
-
transport: streamable-http
|
|
133
|
-
url: !!js '\`\${chorusDshConfig.url}/api/mcp\`'
|
|
134
|
-
headers:
|
|
135
|
-
Authorization: !!js '\`Bearer \${chorusDshConfig.apiKey}\`'
|
|
136
|
-
failOnStartupError: false
|
|
137
|
-
reconnect:
|
|
138
|
-
enabled: true
|
|
139
|
-
|
|
140
|
-
- id: skill
|
|
141
|
-
name: '@deepseek-ai/dsh-skill'
|
|
142
|
-
|
|
143
|
-
- id: chorus-skill-filesystem
|
|
144
|
-
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
145
|
-
config:
|
|
146
|
-
providerName: chorus
|
|
147
|
-
includeDefaultRoots: false
|
|
148
|
-
customSkillDirs:
|
|
149
|
-
- !!js "process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('@chorus-aidlc/chorus-dsh/package.json')), 'skills')"
|
|
150
|
-
|
|
151
|
-
- id: chorus-persona
|
|
152
|
-
name: __CHORUS_PERSONA__
|
|
153
|
-
config:
|
|
154
|
-
plugin: '@deepseek-ai/dsh-persona'
|
|
155
|
-
text: |-
|
|
156
|
-
You are a Chorus PM and developer agent powered by {{model}}. Work from {{cwd}}.
|
|
157
|
-
Use the Chorus AI-DLC lifecycle and load the relevant Chorus skill before operating
|
|
158
|
-
a Chorus resource. Keep decisions, progress, acceptance evidence, and review verdicts
|
|
159
|
-
on the assigned resource. In a headless daemon turn, never wait for terminal input:
|
|
160
|
-
persist human decisions through Chorus, mention the requester, and end the turn.
|
|
161
|
-
Do not push, merge, publish, approve, verify, or cross a human-owned gate unless the
|
|
162
|
-
wake explicitly grants that authority.
|
|
163
|
-
|
|
164
|
-
- id: tool-skill
|
|
165
|
-
name: '@deepseek-ai/dsh-tool-skill'
|
|
166
|
-
`;
|
|
167
|
-
|
|
168
|
-
function errorText(error) {
|
|
169
|
-
return error instanceof Error ? error.message : String(error);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function redactedErrorText(error, values = []) {
|
|
173
|
-
let text = errorText(error);
|
|
174
|
-
for (const value of values) {
|
|
175
|
-
if (typeof value === "string" && value) text = text.replaceAll(value, "[REDACTED]");
|
|
176
|
-
}
|
|
177
|
-
return text;
|
|
38
|
+
/** The shipped profile template the daemon boots: dsh-base + dsh-sdk-app. */
|
|
39
|
+
export const DSH_PROFILE = "sdk";
|
|
40
|
+
export const DSH_RC_VERSION = "0.1.2-rc.1";
|
|
41
|
+
/** The JSON-RPC runtime identity the SDK profile reports on `initialize`. */
|
|
42
|
+
export const RUNTIME_IDENTITY = "deepseek-harness-sdk-runtime";
|
|
43
|
+
/** The provider served out-of-the-box by the base profile (no overlay needed). */
|
|
44
|
+
export const DEFAULT_DSH_PROVIDER = "deepseek-official";
|
|
45
|
+
|
|
46
|
+
// Bumped from 1: active.json now records a managed DSH_HOME (+ optional --patch
|
|
47
|
+
// path) instead of a configPath/runtimePath pair. An old marker fails the shape
|
|
48
|
+
// check in activeState() and is transparently re-prepared.
|
|
49
|
+
const STATE_VERSION = 2;
|
|
50
|
+
|
|
51
|
+
function nonEmpty(value) {
|
|
52
|
+
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
178
53
|
}
|
|
179
54
|
|
|
180
55
|
function readJson(path) {
|
|
@@ -185,86 +60,40 @@ function readJson(path) {
|
|
|
185
60
|
}
|
|
186
61
|
}
|
|
187
62
|
|
|
188
|
-
function
|
|
189
|
-
|
|
190
|
-
[DSH_BUNDLE]: bundleSpec ?? bundleVersion,
|
|
191
|
-
...Object.fromEntries(DSH_PEERS.map((name) => [name, DSH_RC_VERSION])),
|
|
192
|
-
...RUNTIME_PACKAGES,
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export function managedDshRoot(env = process.env) {
|
|
197
|
-
const home = env.HOME || env.USERPROFILE || homedir();
|
|
63
|
+
export function managedDshRoot(env = process.env, platform = process.platform) {
|
|
64
|
+
const home = getAgentEnv(env, "HOME", platform) || getAgentEnv(env, "USERPROFILE", platform) || homedir();
|
|
198
65
|
return join(home, ".chorus", "dsh");
|
|
199
66
|
}
|
|
200
67
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
return typeof exported === "string" ? resolve(dirname(pkgPath), exported) : null;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
export async function validateManagedDshImports(projectDir, opts = {}) {
|
|
227
|
-
const requireFromConfig = createRequire(join(projectDir, MANAGED_CONFIG_FILE));
|
|
228
|
-
const resolveImport = opts.resolveImport ?? ((name) => requireFromConfig.resolve(name));
|
|
229
|
-
const importModule = opts.importModule ?? ((entry) => import(pathToFileURL(entry).href));
|
|
230
|
-
const resolved = {};
|
|
231
|
-
let usedBundleFallback = false;
|
|
232
|
-
|
|
233
|
-
for (const name of REQUIRED_IMPORTS) {
|
|
234
|
-
try {
|
|
235
|
-
resolved[name] = resolveImport(name);
|
|
236
|
-
} catch (error) {
|
|
237
|
-
if (name !== DSH_BUNDLE) {
|
|
238
|
-
throw new Error(`dsh managed import resolution failed for ${name}: ${errorText(error)}`);
|
|
239
|
-
}
|
|
240
|
-
const fallback =
|
|
241
|
-
opts.resolveBundleEntry?.(projectDir) ?? resolveInstalledBundleEntry(projectDir);
|
|
242
|
-
if (!fallback || !existsSync(fallback)) {
|
|
243
|
-
throw new Error(`dsh managed bundle resolution failed: ${errorText(error)}`);
|
|
244
|
-
}
|
|
245
|
-
resolved[name] = fallback;
|
|
246
|
-
usedBundleFallback = true;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
for (const [name, entry] of Object.entries(resolved)) {
|
|
251
|
-
try {
|
|
252
|
-
await importModule(entry);
|
|
253
|
-
} catch (error) {
|
|
254
|
-
throw new Error(`dsh managed import load failed for ${name}: ${errorText(error)}`);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
return {
|
|
258
|
-
resolved,
|
|
259
|
-
bundleEntry: resolved[DSH_BUNDLE],
|
|
260
|
-
usedBundleFallback,
|
|
261
|
-
};
|
|
68
|
+
/**
|
|
69
|
+
* Build the optional `--patch` overlay for a non-default provider. The base
|
|
70
|
+
* profile serves `deepseek-official` unchanged, so that (and an empty value)
|
|
71
|
+
* yields `null` — no overlay, no `--patch`. For any other provider we emit a
|
|
72
|
+
* minimal overlay selecting it as the profile's default-model provider by
|
|
73
|
+
* targeting the base `agent-default-model` row (always present, so the tree
|
|
74
|
+
* still composes and the structural `initialize` probe still passes). Provider
|
|
75
|
+
* routing + credentials are exercised only on a live turn — a guarded extension
|
|
76
|
+
* point, not a verified path. Keep this small.
|
|
77
|
+
* @param {string} provider
|
|
78
|
+
* @returns {{ fileName: string, yaml: string } | null}
|
|
79
|
+
*/
|
|
80
|
+
export function buildProviderPatch(provider) {
|
|
81
|
+
const value = typeof provider === "string" ? provider.trim() : "";
|
|
82
|
+
if (!value || value === DEFAULT_DSH_PROVIDER) return null;
|
|
83
|
+
const yaml =
|
|
84
|
+
`# Chorus-generated provider overlay (CHORUS_DSH_PROVIDER=${value}).\n` +
|
|
85
|
+
`# Applied after the profile layer via \`dsh --profile ${DSH_PROFILE} --patch\`.\n` +
|
|
86
|
+
`- id: agent-default-model\n` +
|
|
87
|
+
` config:\n` +
|
|
88
|
+
` provider: ${JSON.stringify(value)}\n`;
|
|
89
|
+
return { fileName: "chorus-provider.patch.yml", yaml };
|
|
262
90
|
}
|
|
263
91
|
|
|
92
|
+
/** Windows npm/cmd shims need cmd.exe while retaining argv isolation. */
|
|
264
93
|
function runCommand(command, argv, opts) {
|
|
265
94
|
const platform = opts.platform ?? process.platform;
|
|
266
95
|
const isCmd = platform === "win32" && /\.(cmd|bat)$/i.test(command);
|
|
267
|
-
const executable = isCmd ? opts.env
|
|
96
|
+
const executable = isCmd ? getAgentEnv(opts.env ?? process.env, "COMSPEC", platform) || "cmd.exe" : command;
|
|
268
97
|
const commandArgs = isCmd ? ["/d", "/s", "/c", command, ...argv] : argv;
|
|
269
98
|
const result = spawnSync(executable, commandArgs, {
|
|
270
99
|
cwd: opts.cwd,
|
|
@@ -276,63 +105,163 @@ function runCommand(command, argv, opts) {
|
|
|
276
105
|
windowsHide: true,
|
|
277
106
|
});
|
|
278
107
|
if (result.error || result.status !== 0) {
|
|
279
|
-
const detail = result.error
|
|
108
|
+
const detail = result.error ? safeSpawnError(result.error) : result.stderr?.trim() || `exit ${result.status}`;
|
|
280
109
|
throw new Error(detail);
|
|
281
110
|
}
|
|
282
111
|
return result;
|
|
283
112
|
}
|
|
284
113
|
|
|
285
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Probe the external dsh runtime version (`dsh --version`) so the managed-profile
|
|
116
|
+
* fingerprint invalidates when the operator upgrades the dsh CLI — a stale profile
|
|
117
|
+
* composed against an older runtime must not be silently reused (reuse alone never
|
|
118
|
+
* re-runs compose). Fail-soft: an unreadable version yields "unknown" (stable per
|
|
119
|
+
* install) and never blocks preparation. Injectable via opts.runtimeVersion.
|
|
120
|
+
* @returns {string}
|
|
121
|
+
*/
|
|
122
|
+
function resolveRuntimeVersion(dshPath, opts = {}) {
|
|
123
|
+
if (typeof opts.runtimeVersion === "string") return opts.runtimeVersion;
|
|
124
|
+
try {
|
|
125
|
+
const runner = opts.runCommand ?? runCommand;
|
|
126
|
+
const r = runner(dshPath, ["--version"], {
|
|
127
|
+
env: opts.env ?? process.env,
|
|
128
|
+
timeout: opts.versionTimeoutMs ?? 10_000,
|
|
129
|
+
platform: opts.platform,
|
|
130
|
+
});
|
|
131
|
+
return String(r.stdout ?? "").trim() || "unknown";
|
|
132
|
+
} catch {
|
|
133
|
+
return "unknown";
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Cheap structural check that a prepared home actually carries the composed
|
|
139
|
+
* profile: its manifest lists the Chorus bundle and the package is installed.
|
|
140
|
+
* Runs on both a fresh prepare and every reuse (fast — no dsh spawn).
|
|
141
|
+
* @param {string} home managed DSH_HOME
|
|
142
|
+
*/
|
|
143
|
+
export function validateManagedDshProfile(home, opts = {}) {
|
|
144
|
+
const pathExists = opts.profileExists ?? existsSync;
|
|
145
|
+
const readManifest = opts.readJson ?? readJson;
|
|
146
|
+
const profileDir = join(home, "profiles", DSH_PROFILE);
|
|
147
|
+
const manifest = readManifest(join(profileDir, "package.json"));
|
|
148
|
+
const bundles = manifest?.dsh?.profile?.bundles;
|
|
149
|
+
if (!Array.isArray(bundles) || !bundles.includes(DSH_BUNDLE)) {
|
|
150
|
+
throw new Error(`dsh managed profile is missing the ${DSH_BUNDLE} bundle layer`);
|
|
151
|
+
}
|
|
152
|
+
const bundlePkg = join(profileDir, "node_modules", ...DSH_BUNDLE.split("/"), "package.json");
|
|
153
|
+
if (!pathExists(bundlePkg)) {
|
|
154
|
+
throw new Error(`dsh managed profile did not install ${DSH_BUNDLE}`);
|
|
155
|
+
}
|
|
156
|
+
return { profileDir, bundles };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Drive one JSON-RPC `initialize` over stdin against `dsh --profile sdk` (with
|
|
161
|
+
* any provider `--patch`) and assert the SDK runtime answers with the expected
|
|
162
|
+
* identity. `initialize` makes no LLM/network call, so this needs no real
|
|
163
|
+
* credentials or provider routing — it structurally confirms the composed tree
|
|
164
|
+
* loads and the JSON-RPC server owns stdout. Probes with the CONFIGURED provider
|
|
165
|
+
* (+ its `--patch`) so a non-default provider whose LLM adapter is not mounted
|
|
166
|
+
* fails HERE at prepare (fail-fast) instead of silently at the first real wake.
|
|
167
|
+
* @param {string} home managed DSH_HOME
|
|
168
|
+
*/
|
|
169
|
+
export function validateManagedDshComposition(home, opts = {}) {
|
|
286
170
|
const dshPath = opts.dshPath;
|
|
287
|
-
if (!dshPath) throw new Error("cannot validate dsh composition: dsh
|
|
288
|
-
const env = {
|
|
289
|
-
...(opts.env ?? process.env),
|
|
171
|
+
if (!dshPath) throw new Error("cannot validate dsh composition: the dsh CLI was not found");
|
|
172
|
+
const env = overlayAgentEnv(opts.env ?? process.env, {
|
|
290
173
|
CHORUS_DAEMON_HEADLESS: "1",
|
|
291
174
|
CHORUS_URL: opts.creds?.url ?? "http://127.0.0.1",
|
|
292
175
|
CHORUS_API_KEY: opts.creds?.apiKey ?? "cho_validation",
|
|
293
|
-
|
|
294
|
-
DSH_CWD:
|
|
295
|
-
};
|
|
296
|
-
const
|
|
297
|
-
|
|
176
|
+
DSH_HOME: home,
|
|
177
|
+
DSH_CWD: home,
|
|
178
|
+
}, opts.platform);
|
|
179
|
+
const argv = ["--profile", DSH_PROFILE, ...(opts.patchPath ? ["--patch", opts.patchPath] : [])];
|
|
180
|
+
const request = `${JSON.stringify({
|
|
181
|
+
jsonrpc: "2.0",
|
|
182
|
+
id: 1,
|
|
183
|
+
method: "initialize",
|
|
184
|
+
params: { cwd: home, provider: opts.provider ?? DEFAULT_DSH_PROVIDER, model: "deepseek-v4-flash" },
|
|
185
|
+
})}\n`;
|
|
298
186
|
const runner = opts.runCommand ?? runCommand;
|
|
299
|
-
const result = runner(dshPath,
|
|
300
|
-
cwd:
|
|
187
|
+
const result = runner(dshPath, argv, {
|
|
188
|
+
cwd: home,
|
|
301
189
|
env,
|
|
302
190
|
input: request,
|
|
303
|
-
timeout: opts.timeoutMs ??
|
|
191
|
+
timeout: opts.timeoutMs ?? 30_000,
|
|
304
192
|
platform: opts.platform,
|
|
305
193
|
});
|
|
306
|
-
|
|
194
|
+
const stdout = String(result.stdout ?? "");
|
|
195
|
+
if (!stdout.includes('"id":1')) {
|
|
307
196
|
throw new Error("dsh composition validation did not complete JSON-RPC initialization");
|
|
308
197
|
}
|
|
198
|
+
if (!stdout.includes(RUNTIME_IDENTITY)) {
|
|
199
|
+
throw new Error("dsh composition validation returned an unexpected server identity");
|
|
200
|
+
}
|
|
309
201
|
}
|
|
310
202
|
|
|
311
203
|
function activeState(root, pathExists = existsSync) {
|
|
312
204
|
const state = readJson(join(root, "active.json"));
|
|
313
|
-
if (
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
typeof state.runtimePath !== "string"
|
|
318
|
-
) return null;
|
|
319
|
-
return pathExists(state.configPath) && pathExists(state.runtimePath) ? state : null;
|
|
205
|
+
if (!state || state.version !== STATE_VERSION || typeof state.home !== "string") return null;
|
|
206
|
+
if (!pathExists(state.home)) return null;
|
|
207
|
+
if (state.patchPath && !pathExists(state.patchPath)) return null;
|
|
208
|
+
return state;
|
|
320
209
|
}
|
|
321
210
|
|
|
211
|
+
/**
|
|
212
|
+
* Ensure a validated managed dsh profile home exists and return where it lives.
|
|
213
|
+
* Reuses the last-known-good release when the fingerprint (profile + Chorus
|
|
214
|
+
* bundle spec + dsh RC + external dsh runtime version + provider) is unchanged;
|
|
215
|
+
* otherwise composes a fresh
|
|
216
|
+
* release in an isolated dir, validates it, and atomically flips active.json.
|
|
217
|
+
* A failed fresh prepare rolls back and leaves the prior marker intact.
|
|
218
|
+
*
|
|
219
|
+
* @returns {Promise<{ version:number, fingerprint:string, home:string,
|
|
220
|
+
* patchPath:(string|null), validatedAt:string, reused:boolean }>}
|
|
221
|
+
*/
|
|
322
222
|
export async function prepareManagedDshConfig(opts = {}) {
|
|
223
|
+
try {
|
|
224
|
+
return await prepareManagedDshConfigInternal(opts);
|
|
225
|
+
} catch (error) {
|
|
226
|
+
// Cover every failure path, including reuse validation and filesystem errors.
|
|
227
|
+
// Only fixed classifications/hints cross this boundary, never raw stderr.
|
|
228
|
+
throw new Error(redactedSetupError(error));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
async function prepareManagedDshConfigInternal(opts) {
|
|
323
233
|
const env = opts.env ?? process.env;
|
|
324
|
-
const
|
|
234
|
+
const platform = opts.platform ?? process.platform;
|
|
235
|
+
const root = opts.root ?? managedDshRoot(env, platform);
|
|
325
236
|
const bundleVersion = opts.bundleVersion;
|
|
326
237
|
if (!bundleVersion) throw new Error("dsh managed preparation requires a Chorus bundle version");
|
|
327
|
-
const
|
|
238
|
+
const dshPath = opts.dshPath;
|
|
239
|
+
if (!dshPath) {
|
|
240
|
+
throw new Error("dsh managed preparation requires the dsh CLI (install dsh or set CHORUS_DSH_PATH)");
|
|
241
|
+
}
|
|
242
|
+
// Bundle spec passed to `dsh plugin --profile sdk add`. Defaults to the
|
|
243
|
+
// published `@chorus-aidlc/chorus-dsh@<appVersion>`. `CHORUS_DSH_BUNDLE_SPEC`
|
|
244
|
+
// overrides it with any pnpm-installable spec — a local package dir, a packed
|
|
245
|
+
// tarball, or a pinned version — so a pre-publish local build can be composed
|
|
246
|
+
// and tested end-to-end against a real dsh runtime without publishing first.
|
|
247
|
+
// Unset in production. `opts.bundleSpec` (tests) still wins over the env.
|
|
248
|
+
const bundleSpec =
|
|
249
|
+
opts.bundleSpec ?? nonEmpty(getAgentEnv(env, "CHORUS_DSH_BUNDLE_SPEC", platform)) ?? `${DSH_BUNDLE}@${bundleVersion}`;
|
|
250
|
+
const provider = nonEmpty(getAgentEnv(env, "CHORUS_DSH_PROVIDER", platform)) ?? nonEmpty(getAgentEnv(env, "DSH_PROVIDER", platform)) ?? DEFAULT_DSH_PROVIDER;
|
|
251
|
+
const providerPatch = buildProviderPatch(provider);
|
|
252
|
+
// Bind the fingerprint to the ACTUAL external dsh runtime version: peers are a
|
|
253
|
+
// lenient range now, so a managed profile composed against an older `dsh` must
|
|
254
|
+
// be rebuilt when the operator upgrades the CLI — the reuse path never re-runs
|
|
255
|
+
// compose, so without this a runtime upgrade would silently reuse a stale tree.
|
|
256
|
+
const runtimeVersion = resolveRuntimeVersion(dshPath, opts);
|
|
328
257
|
const fingerprint = createHash("sha256")
|
|
329
|
-
.update(JSON.stringify({ version: STATE_VERSION,
|
|
258
|
+
.update(JSON.stringify({ version: STATE_VERSION, profile: DSH_PROFILE, bundleSpec, dshRc: DSH_RC_VERSION, runtimeVersion, provider }))
|
|
330
259
|
.digest("hex")
|
|
331
260
|
.slice(0, 16);
|
|
332
261
|
const current = activeState(root, opts.statePathExists ?? existsSync);
|
|
333
262
|
|
|
334
263
|
if (current?.fingerprint === fingerprint) {
|
|
335
|
-
await (opts.
|
|
264
|
+
await (opts.validateProfile ?? validateManagedDshProfile)(current.home, opts);
|
|
336
265
|
return { ...current, reused: true };
|
|
337
266
|
}
|
|
338
267
|
|
|
@@ -340,59 +269,56 @@ export async function prepareManagedDshConfig(opts = {}) {
|
|
|
340
269
|
const markerTmp = join(root, `.active-${randomUUID()}.json`);
|
|
341
270
|
mkdirSync(releaseDir, { recursive: true });
|
|
342
271
|
try {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
{ cwd, env, timeout: opts.installTimeoutMs ?? 120_000, platform: opts.platform },
|
|
272
|
+
// Compose the managed profile with the EXTERNAL dsh CLI: `dsh plugin
|
|
273
|
+
// --profile sdk add <bundle> -w`. `-w` is required — the profile dir is a
|
|
274
|
+
// pnpm workspace root, so pnpm refuses a bare `add` (ERR_PNPM_ADDING_TO_ROOT).
|
|
275
|
+
// This initializes profiles/sdk (base + sdk-app), appends the Chorus bundle
|
|
276
|
+
// to its bundle list, and installs it plus its peers.
|
|
277
|
+
const runner = opts.runCommand ?? runCommand;
|
|
278
|
+
const install = opts.install ?? ((home) => runner(
|
|
279
|
+
dshPath,
|
|
280
|
+
["plugin", "--profile", DSH_PROFILE, "add", bundleSpec, "-w"],
|
|
281
|
+
{ cwd: home, env: overlayAgentEnv(env, { DSH_HOME: home }, platform), timeout: opts.installTimeoutMs ?? 300_000, platform: opts.platform },
|
|
354
282
|
));
|
|
355
283
|
try {
|
|
356
284
|
install(releaseDir);
|
|
357
285
|
} catch (error) {
|
|
358
286
|
throw new Error(
|
|
359
|
-
`dsh managed
|
|
360
|
-
redactedErrorText(error, [env.CHORUS_API_KEY, opts.creds?.apiKey]),
|
|
287
|
+
`dsh managed profile installation failed: ` + redactedSetupError(error),
|
|
361
288
|
);
|
|
362
289
|
}
|
|
363
290
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
releaseDir,
|
|
369
|
-
|
|
370
|
-
".bin",
|
|
371
|
-
opts.platform === "win32" ? "dsh-jsonrpc-agent.cmd" : "dsh-jsonrpc-agent",
|
|
372
|
-
);
|
|
373
|
-
if (!(opts.runtimeExists ?? existsSync)(runtimePath)) {
|
|
374
|
-
throw new Error(`dsh managed runtime was not installed at ${runtimePath}`);
|
|
291
|
+
await (opts.validateProfile ?? validateManagedDshProfile)(releaseDir, opts);
|
|
292
|
+
|
|
293
|
+
let patchPath = null;
|
|
294
|
+
if (providerPatch) {
|
|
295
|
+
patchPath = join(releaseDir, providerPatch.fileName);
|
|
296
|
+
writeFileSync(patchPath, providerPatch.yaml, { mode: 0o600 });
|
|
375
297
|
}
|
|
376
|
-
writeFileSync(configPath, renderManagedDshConfig(bundleEntry), { mode: 0o600 });
|
|
377
298
|
|
|
378
299
|
try {
|
|
379
|
-
(opts.validateComposition ?? validateManagedDshComposition)(
|
|
300
|
+
(opts.validateComposition ?? validateManagedDshComposition)(releaseDir, {
|
|
380
301
|
...opts,
|
|
381
|
-
dshPath
|
|
302
|
+
dshPath,
|
|
303
|
+
provider,
|
|
304
|
+
patchPath,
|
|
382
305
|
});
|
|
383
306
|
} catch (error) {
|
|
307
|
+
const hint =
|
|
308
|
+
provider !== DEFAULT_DSH_PROVIDER
|
|
309
|
+
? ` (a non-default provider is configured — the managed sdk profile mounts only the ${DEFAULT_DSH_PROVIDER} adapter; a custom provider needs its adapter pre-composed, e.g. point CHORUS_DSH_HOME at your own sdk profile)`
|
|
310
|
+
: "";
|
|
384
311
|
throw new Error(
|
|
385
|
-
`dsh managed composition validation failed: ` +
|
|
386
|
-
redactedErrorText(error, [env.CHORUS_API_KEY, opts.creds?.apiKey]),
|
|
312
|
+
`dsh managed composition validation failed${hint}: ` + redactedSetupError(error),
|
|
387
313
|
);
|
|
388
314
|
}
|
|
389
315
|
|
|
390
316
|
const state = {
|
|
391
317
|
version: STATE_VERSION,
|
|
392
318
|
fingerprint,
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
319
|
+
home: releaseDir,
|
|
320
|
+
patchPath,
|
|
321
|
+
runtimeVersion,
|
|
396
322
|
validatedAt: new Date().toISOString(),
|
|
397
323
|
};
|
|
398
324
|
mkdirSync(root, { recursive: true });
|