@chorus-aidlc/chorus 0.17.2 → 0.17.3
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 +372 -372
- package/.next/standalone/.next/app-path-routes-manifest.json +41 -41
- package/.next/standalone/.next/build-manifest.json +5 -5
- package/.next/standalone/.next/prerender-manifest.json +27 -27
- 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_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_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_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_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_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_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 +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_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 +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 +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 +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_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_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_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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_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_client-reference-manifest.js +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_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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_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_client-reference-manifest.js +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_client-reference-manifest.js +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_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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +2 -2
- package/.next/standalone/.next/server/app/index.rsc +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 +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 +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_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 +1 -1
- package/.next/standalone/.next/server/app/login.html +2 -2
- package/.next/standalone/.next/server/app/login.rsc +1 -1
- 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 +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 +2 -2
- package/.next/standalone/.next/server/app/settings.html +2 -2
- package/.next/standalone/.next/server/app/settings.rsc +3 -3
- package/.next/standalone/.next/server/app-paths-manifest.json +41 -41
- package/.next/standalone/.next/server/chunks/1114.js +1 -1
- package/.next/standalone/.next/server/chunks/{5162.js → 1155.js} +1 -1
- package/.next/standalone/.next/server/chunks/{2536.js → 1201.js} +3 -3
- 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/2572.js +1 -1
- package/.next/standalone/.next/server/chunks/2961.js +1 -1
- package/.next/standalone/.next/server/chunks/{6080.js → 3630.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/6465.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/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/8105.js +1 -0
- package/.next/standalone/.next/server/chunks/8232.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.b81c0bf7732c3b62.js → 11595.f7c3ef5cd7fc8feb.js} +1 -1
- package/.next/standalone/.next/static/chunks/{31308-32614efb88305738.js → 31308-bb4a97b3f39c22dd.js} +1 -1
- package/.next/standalone/.next/static/chunks/{33456.cfc9aa607a62e879.js → 33456.c81079032acc2966.js} +1 -1
- package/.next/standalone/.next/static/chunks/45262-38b332523f00a223.js +1 -0
- package/.next/standalone/.next/static/chunks/46021-f5d072b0cbcb7fac.js +1 -0
- package/.next/standalone/.next/static/chunks/{4860.41351a823cf400e4.js → 4860.f0cfb1201191ae88.js} +1 -1
- package/.next/standalone/.next/static/chunks/66609-64a01d5cb415465b.js +1 -0
- package/.next/standalone/.next/static/chunks/{79919-e02963faee5cb563.js → 79919-c5a2a3fd8f5f9204.js} +1 -1
- package/.next/standalone/.next/static/chunks/94394-38194b81b489275c.js +1 -0
- package/.next/standalone/.next/static/chunks/{94643-e8f5fa25e2340cc8.js → 94643-f1bdf37fb3bb6adb.js} +1 -1
- package/.next/standalone/.next/static/chunks/95225-96b44da3ebd6ddad.js +1 -0
- package/.next/standalone/.next/static/chunks/96482-2b3bdb2544d72e5a.js +1 -0
- package/.next/standalone/.next/static/chunks/{99373.633f7c25e64bcdac.js → 99373.3c23ac2efbd4db02.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-66328332f62c7371.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-eecb38fa4b8eb4e8.js → page-77b175e52a85f3cb.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-87ceae13c4950fc9.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-45e95154e546460e.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-97a9e6f949002004.js → page-69d3162667f85677.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b7b2017e5be69564.js +1 -0
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/{page-cec15f4b835d34fc.js → page-a3f83031dfbafc81.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/{page-0225f87552b977d9.js → page-8b06834ca0f663bb.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-4ee117e690fda56f.js → page-3c7ff3a40a4615ac.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-7fbc46dfb7b22bd3.js → page-7b8e11fdc5b596d0.js} +1 -1
- package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-efe5326c47aca9ca.js +1 -0
- package/.next/standalone/.next/static/chunks/app/onboarding/{page-4fce966dc96d4ff1.js → page-0ce33b9327fe3d8c.js} +1 -1
- package/.next/standalone/.next/static/chunks/{webpack-1bfc783412a06fc5.js → webpack-dffb97a4feb8faba.js} +1 -1
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
- package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
- package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
- 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 +1 -1
- package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
- package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +1 -1
- package/.next/standalone/public/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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +1 -1
- package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
- package/cli/agent-launcher.mjs +1 -1
- package/cli/daemon-agent.mjs +1 -1
- package/cli/daemon.mjs +2 -3
- package/cli/dsh-managed-config.mjs +200 -272
- package/cli/dsh-spawner.mjs +34 -16
- package/package.json +1 -1
- package/.next/standalone/.next/server/chunks/2953.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/24808-e3d95efc7ec039c5.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/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]/documents/page-cd7ec77596304a07.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)/settings/page-8b30678a58e7b2ee.js +0 -1
- /package/.next/standalone/.next/static/{WSN4XeA1kUCI6CeEHcaT_ → wuqYN129vOIGymh_NEdZe}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{WSN4XeA1kUCI6CeEHcaT_ → wuqYN129vOIGymh_NEdZe}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,24 @@
|
|
|
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";
|
|
2
23
|
import { createHash, randomUUID } from "node:crypto";
|
|
3
24
|
import {
|
|
@@ -9,166 +30,30 @@ import {
|
|
|
9
30
|
writeFileSync,
|
|
10
31
|
} from "node:fs";
|
|
11
32
|
import { homedir } from "node:os";
|
|
12
|
-
import {
|
|
13
|
-
import { createRequire } from "node:module";
|
|
14
|
-
import { pathToFileURL } from "node:url";
|
|
33
|
+
import { join } from "node:path";
|
|
15
34
|
|
|
16
35
|
export const DSH_BUNDLE = "@chorus-aidlc/chorus-dsh";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
export const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
const
|
|
29
|
-
"@deepseek-ai/dsh-base": DSH_RC_VERSION,
|
|
30
|
-
"@deepseek-ai/dsh-agent-spine-demo": DSH_RC_VERSION,
|
|
31
|
-
"@deepseek-ai/dsh-sdk-jsonrpc-server": DSH_RC_VERSION,
|
|
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
|
-
`;
|
|
36
|
+
/** The shipped profile template the daemon boots: dsh-base + dsh-sdk-app. */
|
|
37
|
+
export const DSH_PROFILE = "sdk";
|
|
38
|
+
export const DSH_RC_VERSION = "0.1.2-rc.1";
|
|
39
|
+
/** The JSON-RPC runtime identity the SDK profile reports on `initialize`. */
|
|
40
|
+
export const RUNTIME_IDENTITY = "deepseek-harness-sdk-runtime";
|
|
41
|
+
/** The provider served out-of-the-box by the base profile (no overlay needed). */
|
|
42
|
+
export const DEFAULT_DSH_PROVIDER = "deepseek-official";
|
|
43
|
+
|
|
44
|
+
// Bumped from 1: active.json now records a managed DSH_HOME (+ optional --patch
|
|
45
|
+
// path) instead of a configPath/runtimePath pair. An old marker fails the shape
|
|
46
|
+
// check in activeState() and is transparently re-prepared.
|
|
47
|
+
const STATE_VERSION = 2;
|
|
167
48
|
|
|
168
49
|
function errorText(error) {
|
|
169
50
|
return error instanceof Error ? error.message : String(error);
|
|
170
51
|
}
|
|
171
52
|
|
|
53
|
+
function nonEmpty(value) {
|
|
54
|
+
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
55
|
+
}
|
|
56
|
+
|
|
172
57
|
function redactedErrorText(error, values = []) {
|
|
173
58
|
let text = errorText(error);
|
|
174
59
|
for (const value of values) {
|
|
@@ -185,82 +70,36 @@ function readJson(path) {
|
|
|
185
70
|
}
|
|
186
71
|
}
|
|
187
72
|
|
|
188
|
-
function packageSpecs({ bundleVersion, bundleSpec }) {
|
|
189
|
-
return {
|
|
190
|
-
[DSH_BUNDLE]: bundleSpec ?? bundleVersion,
|
|
191
|
-
...Object.fromEntries(DSH_PEERS.map((name) => [name, DSH_RC_VERSION])),
|
|
192
|
-
...RUNTIME_PACKAGES,
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
|
|
196
73
|
export function managedDshRoot(env = process.env) {
|
|
197
74
|
const home = env.HOME || env.USERPROFILE || homedir();
|
|
198
75
|
return join(home, ".chorus", "dsh");
|
|
199
76
|
}
|
|
200
77
|
|
|
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
|
-
};
|
|
78
|
+
/**
|
|
79
|
+
* Build the optional `--patch` overlay for a non-default provider. The base
|
|
80
|
+
* profile serves `deepseek-official` unchanged, so that (and an empty value)
|
|
81
|
+
* yields `null` — no overlay, no `--patch`. For any other provider we emit a
|
|
82
|
+
* minimal overlay selecting it as the profile's default-model provider by
|
|
83
|
+
* targeting the base `agent-default-model` row (always present, so the tree
|
|
84
|
+
* still composes and the structural `initialize` probe still passes). Provider
|
|
85
|
+
* routing + credentials are exercised only on a live turn — a guarded extension
|
|
86
|
+
* point, not a verified path. Keep this small.
|
|
87
|
+
* @param {string} provider
|
|
88
|
+
* @returns {{ fileName: string, yaml: string } | null}
|
|
89
|
+
*/
|
|
90
|
+
export function buildProviderPatch(provider) {
|
|
91
|
+
const value = typeof provider === "string" ? provider.trim() : "";
|
|
92
|
+
if (!value || value === DEFAULT_DSH_PROVIDER) return null;
|
|
93
|
+
const yaml =
|
|
94
|
+
`# Chorus-generated provider overlay (CHORUS_DSH_PROVIDER=${value}).\n` +
|
|
95
|
+
`# Applied after the profile layer via \`dsh --profile ${DSH_PROFILE} --patch\`.\n` +
|
|
96
|
+
`- id: agent-default-model\n` +
|
|
97
|
+
` config:\n` +
|
|
98
|
+
` provider: ${JSON.stringify(value)}\n`;
|
|
99
|
+
return { fileName: "chorus-provider.patch.yml", yaml };
|
|
262
100
|
}
|
|
263
101
|
|
|
102
|
+
/** Windows npm/cmd shims need cmd.exe while retaining argv isolation. */
|
|
264
103
|
function runCommand(command, argv, opts) {
|
|
265
104
|
const platform = opts.platform ?? process.platform;
|
|
266
105
|
const isCmd = platform === "win32" && /\.(cmd|bat)$/i.test(command);
|
|
@@ -282,57 +121,147 @@ function runCommand(command, argv, opts) {
|
|
|
282
121
|
return result;
|
|
283
122
|
}
|
|
284
123
|
|
|
285
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Probe the external dsh runtime version (`dsh --version`) so the managed-profile
|
|
126
|
+
* fingerprint invalidates when the operator upgrades the dsh CLI — a stale profile
|
|
127
|
+
* composed against an older runtime must not be silently reused (reuse alone never
|
|
128
|
+
* re-runs compose). Fail-soft: an unreadable version yields "unknown" (stable per
|
|
129
|
+
* install) and never blocks preparation. Injectable via opts.runtimeVersion.
|
|
130
|
+
* @returns {string}
|
|
131
|
+
*/
|
|
132
|
+
function resolveRuntimeVersion(dshPath, opts = {}) {
|
|
133
|
+
if (typeof opts.runtimeVersion === "string") return opts.runtimeVersion;
|
|
134
|
+
try {
|
|
135
|
+
const runner = opts.runCommand ?? runCommand;
|
|
136
|
+
const r = runner(dshPath, ["--version"], {
|
|
137
|
+
env: opts.env ?? process.env,
|
|
138
|
+
timeout: opts.versionTimeoutMs ?? 10_000,
|
|
139
|
+
platform: opts.platform,
|
|
140
|
+
});
|
|
141
|
+
return String(r.stdout ?? "").trim() || "unknown";
|
|
142
|
+
} catch {
|
|
143
|
+
return "unknown";
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Cheap structural check that a prepared home actually carries the composed
|
|
149
|
+
* profile: its manifest lists the Chorus bundle and the package is installed.
|
|
150
|
+
* Runs on both a fresh prepare and every reuse (fast — no dsh spawn).
|
|
151
|
+
* @param {string} home managed DSH_HOME
|
|
152
|
+
*/
|
|
153
|
+
export function validateManagedDshProfile(home, opts = {}) {
|
|
154
|
+
const pathExists = opts.profileExists ?? existsSync;
|
|
155
|
+
const readManifest = opts.readJson ?? readJson;
|
|
156
|
+
const profileDir = join(home, "profiles", DSH_PROFILE);
|
|
157
|
+
const manifest = readManifest(join(profileDir, "package.json"));
|
|
158
|
+
const bundles = manifest?.dsh?.profile?.bundles;
|
|
159
|
+
if (!Array.isArray(bundles) || !bundles.includes(DSH_BUNDLE)) {
|
|
160
|
+
throw new Error(`dsh managed profile is missing the ${DSH_BUNDLE} bundle layer`);
|
|
161
|
+
}
|
|
162
|
+
const bundlePkg = join(profileDir, "node_modules", ...DSH_BUNDLE.split("/"), "package.json");
|
|
163
|
+
if (!pathExists(bundlePkg)) {
|
|
164
|
+
throw new Error(`dsh managed profile did not install ${DSH_BUNDLE}`);
|
|
165
|
+
}
|
|
166
|
+
return { profileDir, bundles };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Drive one JSON-RPC `initialize` over stdin against `dsh --profile sdk` (with
|
|
171
|
+
* any provider `--patch`) and assert the SDK runtime answers with the expected
|
|
172
|
+
* identity. `initialize` makes no LLM/network call, so this needs no real
|
|
173
|
+
* credentials or provider routing — it structurally confirms the composed tree
|
|
174
|
+
* loads and the JSON-RPC server owns stdout. Probes with the CONFIGURED provider
|
|
175
|
+
* (+ its `--patch`) so a non-default provider whose LLM adapter is not mounted
|
|
176
|
+
* fails HERE at prepare (fail-fast) instead of silently at the first real wake.
|
|
177
|
+
* @param {string} home managed DSH_HOME
|
|
178
|
+
*/
|
|
179
|
+
export function validateManagedDshComposition(home, opts = {}) {
|
|
286
180
|
const dshPath = opts.dshPath;
|
|
287
|
-
if (!dshPath) throw new Error("cannot validate dsh composition: dsh
|
|
181
|
+
if (!dshPath) throw new Error("cannot validate dsh composition: the dsh CLI was not found");
|
|
288
182
|
const env = {
|
|
289
183
|
...(opts.env ?? process.env),
|
|
290
184
|
CHORUS_DAEMON_HEADLESS: "1",
|
|
291
185
|
CHORUS_URL: opts.creds?.url ?? "http://127.0.0.1",
|
|
292
186
|
CHORUS_API_KEY: opts.creds?.apiKey ?? "cho_validation",
|
|
293
|
-
|
|
294
|
-
DSH_CWD:
|
|
187
|
+
DSH_HOME: home,
|
|
188
|
+
DSH_CWD: home,
|
|
295
189
|
};
|
|
296
|
-
const
|
|
297
|
-
|
|
190
|
+
const argv = ["--profile", DSH_PROFILE, ...(opts.patchPath ? ["--patch", opts.patchPath] : [])];
|
|
191
|
+
const request = `${JSON.stringify({
|
|
192
|
+
jsonrpc: "2.0",
|
|
193
|
+
id: 1,
|
|
194
|
+
method: "initialize",
|
|
195
|
+
params: { cwd: home, provider: opts.provider ?? DEFAULT_DSH_PROVIDER, model: "deepseek-v4-flash" },
|
|
196
|
+
})}\n`;
|
|
298
197
|
const runner = opts.runCommand ?? runCommand;
|
|
299
|
-
const result = runner(dshPath,
|
|
300
|
-
cwd:
|
|
198
|
+
const result = runner(dshPath, argv, {
|
|
199
|
+
cwd: home,
|
|
301
200
|
env,
|
|
302
201
|
input: request,
|
|
303
|
-
timeout: opts.timeoutMs ??
|
|
202
|
+
timeout: opts.timeoutMs ?? 30_000,
|
|
304
203
|
platform: opts.platform,
|
|
305
204
|
});
|
|
306
|
-
|
|
205
|
+
const stdout = String(result.stdout ?? "");
|
|
206
|
+
if (!stdout.includes('"id":1')) {
|
|
307
207
|
throw new Error("dsh composition validation did not complete JSON-RPC initialization");
|
|
308
208
|
}
|
|
209
|
+
if (!stdout.includes(RUNTIME_IDENTITY)) {
|
|
210
|
+
throw new Error("dsh composition validation returned an unexpected server identity");
|
|
211
|
+
}
|
|
309
212
|
}
|
|
310
213
|
|
|
311
214
|
function activeState(root, pathExists = existsSync) {
|
|
312
215
|
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;
|
|
216
|
+
if (!state || state.version !== STATE_VERSION || typeof state.home !== "string") return null;
|
|
217
|
+
if (!pathExists(state.home)) return null;
|
|
218
|
+
if (state.patchPath && !pathExists(state.patchPath)) return null;
|
|
219
|
+
return state;
|
|
320
220
|
}
|
|
321
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Ensure a validated managed dsh profile home exists and return where it lives.
|
|
224
|
+
* Reuses the last-known-good release when the fingerprint (profile + Chorus
|
|
225
|
+
* bundle spec + dsh RC + external dsh runtime version + provider) is unchanged;
|
|
226
|
+
* otherwise composes a fresh
|
|
227
|
+
* release in an isolated dir, validates it, and atomically flips active.json.
|
|
228
|
+
* A failed fresh prepare rolls back and leaves the prior marker intact.
|
|
229
|
+
*
|
|
230
|
+
* @returns {Promise<{ version:number, fingerprint:string, home:string,
|
|
231
|
+
* patchPath:(string|null), validatedAt:string, reused:boolean }>}
|
|
232
|
+
*/
|
|
322
233
|
export async function prepareManagedDshConfig(opts = {}) {
|
|
323
234
|
const env = opts.env ?? process.env;
|
|
324
235
|
const root = opts.root ?? managedDshRoot(env);
|
|
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(env.CHORUS_DSH_BUNDLE_SPEC) ?? `${DSH_BUNDLE}@${bundleVersion}`;
|
|
250
|
+
const provider = nonEmpty(env.CHORUS_DSH_PROVIDER) ?? nonEmpty(env.DSH_PROVIDER) ?? 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,49 +269,48 @@ 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: { ...env, DSH_HOME: home }, 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
|
|
287
|
+
`dsh managed profile installation failed: ` +
|
|
360
288
|
redactedErrorText(error, [env.CHORUS_API_KEY, opts.creds?.apiKey]),
|
|
361
289
|
);
|
|
362
290
|
}
|
|
363
291
|
|
|
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}`);
|
|
292
|
+
await (opts.validateProfile ?? validateManagedDshProfile)(releaseDir, opts);
|
|
293
|
+
|
|
294
|
+
let patchPath = null;
|
|
295
|
+
if (providerPatch) {
|
|
296
|
+
patchPath = join(releaseDir, providerPatch.fileName);
|
|
297
|
+
writeFileSync(patchPath, providerPatch.yaml, { mode: 0o600 });
|
|
375
298
|
}
|
|
376
|
-
writeFileSync(configPath, renderManagedDshConfig(bundleEntry), { mode: 0o600 });
|
|
377
299
|
|
|
378
300
|
try {
|
|
379
|
-
(opts.validateComposition ?? validateManagedDshComposition)(
|
|
301
|
+
(opts.validateComposition ?? validateManagedDshComposition)(releaseDir, {
|
|
380
302
|
...opts,
|
|
381
|
-
dshPath
|
|
303
|
+
dshPath,
|
|
304
|
+
provider,
|
|
305
|
+
patchPath,
|
|
382
306
|
});
|
|
383
307
|
} catch (error) {
|
|
308
|
+
const hint =
|
|
309
|
+
provider !== DEFAULT_DSH_PROVIDER
|
|
310
|
+
? ` (provider "${provider}" is non-default — 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)`
|
|
311
|
+
: "";
|
|
384
312
|
throw new Error(
|
|
385
|
-
`dsh managed composition validation failed: ` +
|
|
313
|
+
`dsh managed composition validation failed${hint}: ` +
|
|
386
314
|
redactedErrorText(error, [env.CHORUS_API_KEY, opts.creds?.apiKey]),
|
|
387
315
|
);
|
|
388
316
|
}
|
|
@@ -390,9 +318,9 @@ export async function prepareManagedDshConfig(opts = {}) {
|
|
|
390
318
|
const state = {
|
|
391
319
|
version: STATE_VERSION,
|
|
392
320
|
fingerprint,
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
321
|
+
home: releaseDir,
|
|
322
|
+
patchPath,
|
|
323
|
+
runtimeVersion,
|
|
396
324
|
validatedAt: new Date().toISOString(),
|
|
397
325
|
};
|
|
398
326
|
mkdirSync(root, { recursive: true });
|