@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.
Files changed (280) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +372 -372
  3. package/.next/standalone/.next/app-path-routes-manifest.json +41 -41
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +27 -27
  6. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  40. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  44. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  45. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  48. package/.next/standalone/.next/server/app/admin/companies/new.rsc +1 -1
  49. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  51. package/.next/standalone/.next/server/app/admin/companies.rsc +1 -1
  52. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/admin.html +2 -2
  54. package/.next/standalone/.next/server/app/admin.rsc +1 -1
  55. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/index.html +2 -2
  154. package/.next/standalone/.next/server/app/index.rsc +1 -1
  155. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  157. package/.next/standalone/.next/server/app/login/admin.rsc +1 -1
  158. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  160. package/.next/standalone/.next/server/app/login/callback.rsc +1 -1
  161. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  164. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +1 -1
  165. package/.next/standalone/.next/server/app/login.html +2 -2
  166. package/.next/standalone/.next/server/app/login.rsc +1 -1
  167. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  168. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  171. package/.next/standalone/.next/server/app/onboarding.rsc +2 -2
  172. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/projects.html +2 -2
  174. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  175. package/.next/standalone/.next/server/app/settings.html +2 -2
  176. package/.next/standalone/.next/server/app/settings.rsc +3 -3
  177. package/.next/standalone/.next/server/app-paths-manifest.json +41 -41
  178. package/.next/standalone/.next/server/chunks/1114.js +1 -1
  179. package/.next/standalone/.next/server/chunks/{5162.js → 1155.js} +1 -1
  180. package/.next/standalone/.next/server/chunks/{2536.js → 1201.js} +3 -3
  181. package/.next/standalone/.next/server/chunks/1318.js +1 -1
  182. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  183. package/.next/standalone/.next/server/chunks/2572.js +1 -1
  184. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  185. package/.next/standalone/.next/server/chunks/{6080.js → 3630.js} +1 -1
  186. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  187. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  188. package/.next/standalone/.next/server/chunks/6465.js +1 -0
  189. package/.next/standalone/.next/server/chunks/6506.js +1 -1
  190. package/.next/standalone/.next/server/chunks/6515.js +2 -2
  191. package/.next/standalone/.next/server/chunks/679.js +1 -1
  192. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  193. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  194. package/.next/standalone/.next/server/chunks/8105.js +1 -0
  195. package/.next/standalone/.next/server/chunks/8232.js +1 -0
  196. package/.next/standalone/.next/server/chunks/920.js +1 -1
  197. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  198. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  199. package/.next/standalone/.next/server/chunks/9931.js +1 -1
  200. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  201. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  202. package/.next/standalone/.next/server/pages/404.html +2 -2
  203. package/.next/standalone/.next/server/pages/500.html +1 -1
  204. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  206. package/.next/standalone/.next/static/chunks/{11595.b81c0bf7732c3b62.js → 11595.f7c3ef5cd7fc8feb.js} +1 -1
  207. package/.next/standalone/.next/static/chunks/{31308-32614efb88305738.js → 31308-bb4a97b3f39c22dd.js} +1 -1
  208. package/.next/standalone/.next/static/chunks/{33456.cfc9aa607a62e879.js → 33456.c81079032acc2966.js} +1 -1
  209. package/.next/standalone/.next/static/chunks/45262-38b332523f00a223.js +1 -0
  210. package/.next/standalone/.next/static/chunks/46021-f5d072b0cbcb7fac.js +1 -0
  211. package/.next/standalone/.next/static/chunks/{4860.41351a823cf400e4.js → 4860.f0cfb1201191ae88.js} +1 -1
  212. package/.next/standalone/.next/static/chunks/66609-64a01d5cb415465b.js +1 -0
  213. package/.next/standalone/.next/static/chunks/{79919-e02963faee5cb563.js → 79919-c5a2a3fd8f5f9204.js} +1 -1
  214. package/.next/standalone/.next/static/chunks/94394-38194b81b489275c.js +1 -0
  215. package/.next/standalone/.next/static/chunks/{94643-e8f5fa25e2340cc8.js → 94643-f1bdf37fb3bb6adb.js} +1 -1
  216. package/.next/standalone/.next/static/chunks/95225-96b44da3ebd6ddad.js +1 -0
  217. package/.next/standalone/.next/static/chunks/96482-2b3bdb2544d72e5a.js +1 -0
  218. package/.next/standalone/.next/static/chunks/{99373.633f7c25e64bcdac.js → 99373.3c23ac2efbd4db02.js} +1 -1
  219. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-66328332f62c7371.js +1 -0
  220. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-eecb38fa4b8eb4e8.js → page-77b175e52a85f3cb.js} +1 -1
  221. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-87ceae13c4950fc9.js +1 -0
  222. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-45e95154e546460e.js +1 -0
  223. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-97a9e6f949002004.js → page-69d3162667f85677.js} +1 -1
  224. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b7b2017e5be69564.js +1 -0
  225. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/{page-cec15f4b835d34fc.js → page-a3f83031dfbafc81.js} +1 -1
  226. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/{page-0225f87552b977d9.js → page-8b06834ca0f663bb.js} +1 -1
  227. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-4ee117e690fda56f.js → page-3c7ff3a40a4615ac.js} +1 -1
  228. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-7fbc46dfb7b22bd3.js → page-7b8e11fdc5b596d0.js} +1 -1
  229. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-efe5326c47aca9ca.js +1 -0
  230. package/.next/standalone/.next/static/chunks/app/onboarding/{page-4fce966dc96d4ff1.js → page-0ce33b9327fe3d8c.js} +1 -1
  231. package/.next/standalone/.next/static/chunks/{webpack-1bfc783412a06fc5.js → webpack-dffb97a4feb8faba.js} +1 -1
  232. package/.next/standalone/package.json +1 -1
  233. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  234. package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
  235. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  236. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +1 -1
  237. package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
  238. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
  239. package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
  240. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
  241. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  242. package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
  243. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
  244. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  245. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  246. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +1 -1
  247. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
  248. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +1 -1
  249. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +1 -1
  250. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
  251. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
  252. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +1 -1
  253. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +1 -1
  254. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +1 -1
  255. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
  256. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
  257. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +1 -1
  258. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
  259. package/cli/agent-launcher.mjs +1 -1
  260. package/cli/daemon-agent.mjs +1 -1
  261. package/cli/daemon.mjs +2 -3
  262. package/cli/dsh-managed-config.mjs +200 -272
  263. package/cli/dsh-spawner.mjs +34 -16
  264. package/package.json +1 -1
  265. package/.next/standalone/.next/server/chunks/2953.js +0 -1
  266. package/.next/standalone/.next/server/chunks/6689.js +0 -1
  267. package/.next/standalone/.next/server/chunks/9667.js +0 -1
  268. package/.next/standalone/.next/static/chunks/24808-e3d95efc7ec039c5.js +0 -1
  269. package/.next/standalone/.next/static/chunks/51468-194d894e563580dd.js +0 -1
  270. package/.next/standalone/.next/static/chunks/61570-527701d072d00a24.js +0 -1
  271. package/.next/standalone/.next/static/chunks/65066-6da35d5cb080c7f5.js +0 -1
  272. package/.next/standalone/.next/static/chunks/72875-0987d09cd8406614.js +0 -1
  273. package/.next/standalone/.next/static/chunks/75936-79860953212592fd.js +0 -1
  274. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-bb5ef11586301c72.js +0 -1
  275. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-725373108da1b08c.js +0 -1
  276. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-cd7ec77596304a07.js +0 -1
  277. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-7d2f4713697eb0a7.js +0 -1
  278. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-8b30678a58e7b2ee.js +0 -1
  279. /package/.next/standalone/.next/static/{WSN4XeA1kUCI6CeEHcaT_ → wuqYN129vOIGymh_NEdZe}/_buildManifest.js +0 -0
  280. /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 { dirname, join, resolve } from "node:path";
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
- export const DSH_PEERS = Object.freeze([
18
- "@deepseek-ai/dsh-mcp-client",
19
- "@deepseek-ai/dsh-skill-filesystem",
20
- "@deepseek-ai/dsh-tool-skill",
21
- "@deepseek-ai/dsh-persona",
22
- ]);
23
- export const DSH_RC_VERSION = "0.1.0-rc.7";
24
- export const MANAGED_CONFIG_FILE = "cordis.yml";
25
-
26
- // dsh-base supplies the core plugins used by the external JSON-RPC composition.
27
- // Hoisted linking makes those transitive plugins visible from the config anchor.
28
- const RUNTIME_PACKAGES = Object.freeze({
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
- export function renderManagedDshConfig(bundleEntry = DSH_BUNDLE) {
202
- const quote = (value) => `'${String(value).replaceAll("'", "''")}'`;
203
- const personaEntry =
204
- bundleEntry === DSH_BUNDLE ? `${DSH_BUNDLE}/persona` : join(dirname(bundleEntry), "persona.mjs");
205
- const skillDir =
206
- bundleEntry === DSH_BUNDLE
207
- ? `"process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('@chorus-aidlc/chorus-dsh/package.json')), 'skills')"`
208
- : quote(resolve(dirname(bundleEntry), "..", "skills"));
209
- return CONFIG_HEAD
210
- .replace("__CHORUS_BUNDLE__", quote(bundleEntry))
211
- .replace("__CHORUS_PERSONA__", quote(personaEntry))
212
- .replace(
213
- `"process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('@chorus-aidlc/chorus-dsh/package.json')), 'skills')"`,
214
- skillDir,
215
- );
216
- }
217
-
218
- function resolveInstalledBundleEntry(projectDir) {
219
- const pkgPath = join(projectDir, "node_modules", "@chorus-aidlc", "chorus-dsh", "package.json");
220
- const pkg = readJson(pkgPath);
221
- if (!pkg) return null;
222
- const exported = pkg.exports?.["."]?.default ?? pkg.main;
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
- export function validateManagedDshComposition(configPath, opts = {}) {
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-jsonrpc-agent was not found");
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
- DSH_CORDIS_CONFIG: configPath,
294
- DSH_CWD: dirname(configPath),
187
+ DSH_HOME: home,
188
+ DSH_CWD: home,
295
189
  };
296
- const request =
297
- `${JSON.stringify({ jsonrpc: "2.0", id: 1, method: "initialize", params: { cwd: dirname(configPath), provider: "deepseek-official", model: "deepseek-v4-flash" } })}\n`;
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: dirname(configPath),
198
+ const result = runner(dshPath, argv, {
199
+ cwd: home,
301
200
  env,
302
201
  input: request,
303
- timeout: opts.timeoutMs ?? 20_000,
202
+ timeout: opts.timeoutMs ?? 30_000,
304
203
  platform: opts.platform,
305
204
  });
306
- if (!String(result.stdout ?? "").includes('"id":1')) {
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
- !state ||
315
- state.version !== STATE_VERSION ||
316
- typeof state.configPath !== "string" ||
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 specs = packageSpecs({ bundleVersion, bundleSpec: opts.bundleSpec });
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, specs }))
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.validateImports ?? validateManagedDshImports)(dirname(current.configPath), 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
- writeFileSync(
344
- join(releaseDir, "package.json"),
345
- `${JSON.stringify({ private: true, type: "module", dependencies: specs }, null, 2)}\n`,
346
- { mode: 0o600 },
347
- );
348
- writeFileSync(join(releaseDir, ".npmrc"), "node-linker=hoisted\n", { mode: 0o600 });
349
-
350
- const install = opts.install ?? ((cwd) => runCommand(
351
- opts.packageManager ?? (opts.platform === "win32" ? "pnpm.cmd" : "pnpm"),
352
- ["install", "--prod", "--ignore-scripts", "--frozen-lockfile=false"],
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 package installation failed: ` +
287
+ `dsh managed profile installation failed: ` +
360
288
  redactedErrorText(error, [env.CHORUS_API_KEY, opts.creds?.apiKey]),
361
289
  );
362
290
  }
363
291
 
364
- const importResult = await (opts.validateImports ?? validateManagedDshImports)(releaseDir, opts);
365
- const bundleEntry = importResult.usedBundleFallback ? importResult.bundleEntry : DSH_BUNDLE;
366
- const configPath = join(releaseDir, MANAGED_CONFIG_FILE);
367
- const runtimePath = join(
368
- releaseDir,
369
- "node_modules",
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)(configPath, {
301
+ (opts.validateComposition ?? validateManagedDshComposition)(releaseDir, {
380
302
  ...opts,
381
- dshPath: runtimePath,
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
- configPath,
394
- bundleEntry,
395
- runtimePath,
321
+ home: releaseDir,
322
+ patchPath,
323
+ runtimeVersion,
396
324
  validatedAt: new Date().toISOString(),
397
325
  };
398
326
  mkdirSync(root, { recursive: true });