@chorus-aidlc/chorus 0.16.4 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (568) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +511 -511
  3. package/.next/standalone/.next/app-path-routes-manifest.json +47 -47
  4. package/.next/standalone/.next/build-manifest.json +6 -6
  5. package/.next/standalone/.next/prerender-manifest.json +42 -42
  6. package/.next/standalone/.next/react-loadable-manifest.json +1 -1
  7. package/.next/standalone/.next/required-server-files.json +4 -4
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +2 -2
  9. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +2 -2
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +2 -2
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +3 -3
  45. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  48. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  51. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  53. package/.next/standalone/.next/server/app/_not-found.rsc +5 -5
  54. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page.js +2 -2
  55. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/admin/companies/new/page.js +2 -2
  58. package/.next/standalone/.next/server/app/admin/companies/new/page.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  61. package/.next/standalone/.next/server/app/admin/companies/new.rsc +7 -7
  62. package/.next/standalone/.next/server/app/admin/companies/page.js +2 -2
  63. package/.next/standalone/.next/server/app/admin/companies/page.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  66. package/.next/standalone/.next/server/app/admin/companies.rsc +7 -7
  67. package/.next/standalone/.next/server/app/admin/page.js +2 -2
  68. package/.next/standalone/.next/server/app/admin/page.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/admin.html +2 -2
  71. package/.next/standalone/.next/server/app/admin.rsc +7 -7
  72. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  73. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
  75. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/admin/login/route.js +1 -1
  77. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/admin/session/route.js +1 -1
  79. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
  84. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  86. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/auth/check-default/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/auth/company-oidc/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/auth/identify/route.js +1 -1
  103. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/auth/logout/route.js +1 -1
  105. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/auth/me/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/auth/sync-token/route.js +1 -1
  109. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  111. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -1
  122. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
  125. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  128. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  131. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  134. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  137. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  140. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  158. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  161. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  164. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  166. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
  169. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/events/route.js +9 -3
  172. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  175. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  180. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  183. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  186. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js +1 -1
  195. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
  198. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
  199. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/api/mcp/route.js +5 -5
  201. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  205. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  210. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  213. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  216. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  222. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  223. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  228. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  230. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  232. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/api/project-visits/pin/route.js +1 -1
  234. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
  235. package/.next/standalone/.next/server/app/api/project-visits/route.js +1 -1
  236. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
  237. package/.next/standalone/.next/server/app/api/project-visits/visit/route.js +1 -1
  238. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  240. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js +1 -1
  242. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
  243. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  245. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  246. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  247. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  248. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  250. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  252. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  253. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  255. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  258. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  259. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  260. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  262. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  263. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
  264. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  267. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  269. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  271. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  272. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  274. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  275. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js +1 -1
  277. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
  278. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  280. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  281. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  282. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  283. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  284. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  285. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  286. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  287. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  289. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  290. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  291. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  292. package/.next/standalone/.next/server/app/api/references/[uuid]/route.js +1 -1
  293. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  294. package/.next/standalone/.next/server/app/api/references/route.js +1 -1
  295. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  296. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  297. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/app/api/session/route.js +1 -1
  299. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  300. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  301. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  302. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  303. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  304. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  305. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  306. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  307. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  308. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  309. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  310. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  311. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  312. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  313. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  314. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  315. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  316. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  317. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  318. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  319. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  320. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  321. package/.next/standalone/.next/server/app/favicon.ico/route.js +1 -1
  322. package/.next/standalone/.next/server/app/index.html +2 -2
  323. package/.next/standalone/.next/server/app/index.rsc +6 -6
  324. package/.next/standalone/.next/server/app/login/admin/page.js +2 -2
  325. package/.next/standalone/.next/server/app/login/admin/page.js.nft.json +1 -1
  326. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  327. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  328. package/.next/standalone/.next/server/app/login/admin.rsc +6 -6
  329. package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
  330. package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
  331. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  332. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  333. package/.next/standalone/.next/server/app/login/callback.rsc +6 -6
  334. package/.next/standalone/.next/server/app/login/page.js +2 -2
  335. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  336. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  337. package/.next/standalone/.next/server/app/login/pick-workspace/page.js +2 -2
  338. package/.next/standalone/.next/server/app/login/pick-workspace/page.js.nft.json +1 -1
  339. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  340. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  341. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +6 -6
  342. package/.next/standalone/.next/server/app/login.html +2 -2
  343. package/.next/standalone/.next/server/app/login.rsc +6 -6
  344. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  345. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  346. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  347. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  348. package/.next/standalone/.next/server/app/onboarding.rsc +6 -6
  349. package/.next/standalone/.next/server/app/page.js +2 -2
  350. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  351. package/.next/standalone/.next/server/app/projects.html +2 -2
  352. package/.next/standalone/.next/server/app/projects.rsc +7 -7
  353. package/.next/standalone/.next/server/app/settings.html +2 -2
  354. package/.next/standalone/.next/server/app/settings.rsc +7 -7
  355. package/.next/standalone/.next/server/app-paths-manifest.json +47 -47
  356. package/.next/standalone/.next/server/chunks/1073.js +1 -0
  357. package/.next/standalone/.next/server/chunks/1114.js +1 -0
  358. package/.next/standalone/.next/server/chunks/1267.js +1 -0
  359. package/.next/standalone/.next/server/chunks/1318.js +1 -1
  360. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  361. package/.next/standalone/.next/server/chunks/2570.js +2 -2
  362. package/.next/standalone/.next/server/chunks/2572.js +1 -1
  363. package/.next/standalone/.next/server/chunks/2940.js +1 -1
  364. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  365. package/.next/standalone/.next/server/chunks/3197.js +1 -1
  366. package/.next/standalone/.next/server/chunks/378.js +4 -4
  367. package/.next/standalone/.next/server/chunks/4827.js +1 -1
  368. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  369. package/.next/standalone/.next/server/chunks/{5351.js → 5737.js} +13 -9
  370. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  371. package/.next/standalone/.next/server/chunks/6145.js +1 -0
  372. package/.next/standalone/.next/server/chunks/6487.js +1 -0
  373. package/.next/standalone/.next/server/chunks/6506.js +1 -1
  374. package/.next/standalone/.next/server/chunks/6515.js +2 -2
  375. package/.next/standalone/.next/server/chunks/6753.js +3 -3
  376. package/.next/standalone/.next/server/chunks/679.js +1 -1
  377. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  378. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  379. package/.next/standalone/.next/server/chunks/7770.js +1 -0
  380. package/.next/standalone/.next/server/chunks/{4394.js → 7822.js} +1 -1
  381. package/.next/standalone/.next/server/chunks/8454.js +1 -1
  382. package/.next/standalone/.next/server/chunks/8586.js +1 -0
  383. package/.next/standalone/.next/server/chunks/920.js +1 -1
  384. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  385. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  386. package/.next/standalone/.next/server/chunks/9931.js +1 -0
  387. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  388. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  389. package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  390. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  391. package/.next/standalone/.next/server/next-font-manifest.json +1 -1
  392. package/.next/standalone/.next/server/pages/404.html +2 -2
  393. package/.next/standalone/.next/server/pages/500.html +1 -1
  394. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  395. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  396. package/.next/standalone/.next/server/src/middleware.js +2 -2
  397. package/.next/standalone/.next/static/chunks/{11595.a6268c75ca8a2163.js → 11595.32f7dedc4fd7e3e1.js} +1 -1
  398. package/.next/standalone/.next/static/chunks/11998-27dcf858173fc015.js +1 -0
  399. package/.next/standalone/.next/static/chunks/12070-426bb88f5179812b.js +1 -0
  400. package/.next/standalone/.next/static/chunks/17409-67dbc0a3f4cbc207.js +1 -0
  401. package/.next/standalone/.next/static/chunks/26494-5a04e150431b0233.js +1 -0
  402. package/.next/standalone/.next/static/chunks/{31308-fda6febfb2882a28.js → 31308-bb4a97b3f39c22dd.js} +1 -1
  403. package/.next/standalone/.next/static/chunks/{33456.16ff7edf00137539.js → 33456.87f86ce6041405e0.js} +1 -1
  404. package/.next/standalone/.next/static/chunks/38366.fb931fab9c756890.js +1 -0
  405. package/.next/standalone/.next/static/chunks/4166-85352630c29e2c2b.js +1 -0
  406. package/.next/standalone/.next/static/chunks/{4860.9e06848eb531e667.js → 4860.9457e021394e9399.js} +1 -1
  407. package/.next/standalone/.next/static/chunks/{65096-f756aac39efad7a3.js → 65096-8295f53f97c40d47.js} +1 -1
  408. package/.next/standalone/.next/static/chunks/65807-086d83649f593a5a.js +1 -0
  409. package/.next/standalone/.next/static/chunks/79919-56796c262f51fa82.js +1 -0
  410. package/.next/standalone/.next/static/chunks/94643-87ee1ede6d955937.js +1 -0
  411. package/.next/standalone/.next/static/chunks/{99373.81b79c91858f9099.js → 99373.aed267aa48c5bdd0.js} +1 -1
  412. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-9219c4de1012f0fb.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/{page-974781e4886529f8.js → page-82e90e222d6bc547.js} +1 -1
  414. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/activity/page-f1eccb50d38d8982.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f4810f1b9f39d1ae.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-721d2152f1a28c88.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-9bcff40805f39b25.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-fdd617457730a116.js → page-f31ad2eebe257628.js} +1 -1
  419. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-a4fb04068539c4ce.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-b1d2af10e9bc7e09.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-2cb245b0602a3c85.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-58b48aa0a11603c3.js → page-53ce4468844cc84f.js} +1 -1
  423. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-286faced32c6133f.js → page-1c374d19e8046d9a.js} +1 -1
  424. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-31d6f8e82c7f5366.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-32bff791b19a0a58.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/_not-found/{page-166b410da84336d4.js → page-b9d672df79b35e87.js} +1 -1
  427. package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/{page-b2458ed001dc8177.js → page-56118c51122ad639.js} +1 -1
  428. package/.next/standalone/.next/static/chunks/app/admin/companies/new/page-4e20deb41357171c.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/admin/companies/page-0632f245bf9c1c27.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/admin/layout-725ab2331c642f36.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/admin/{page-0cc8cf246db43e5d.js → page-5a0271dd2b8b36fd.js} +1 -1
  432. package/.next/standalone/.next/static/chunks/app/{layout-985054e973f66999.js → layout-098288cec4490c5d.js} +1 -1
  433. package/.next/standalone/.next/static/chunks/app/login/admin/page-c8e40259e5d3d9e0.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/login/callback/page-527652f6c1a39274.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/login/{page-9b34375d1b5579d7.js → page-0a16a64855b771ef.js} +1 -1
  436. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-47375a86e2375202.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/onboarding/{page-5c82cf3abd856301.js → page-d082f9b60ad03057.js} +1 -1
  438. package/.next/standalone/.next/static/chunks/app/{page-79e2d32e69788bd2.js → page-91dbf7dfd85f805f.js} +1 -1
  439. package/.next/standalone/.next/static/chunks/main-app-1a7cacecc8900a4d.js +1 -0
  440. package/.next/standalone/.next/static/chunks/{webpack-4d1cc14b13e247b6.js → webpack-e2e0ef50652d5791.js} +1 -1
  441. package/.next/standalone/.next/static/css/1d9cf83f50b6db00.css +1 -0
  442. package/.next/standalone/package.json +2 -1
  443. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  444. package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +44 -1
  445. package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +4 -3
  446. package/.next/standalone/public/chorus-plugin/bin/tests/test-mcp-cli-delegation.sh +244 -0
  447. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  448. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +19 -1
  449. package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +57 -0
  450. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -2
  451. package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
  452. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -2
  453. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +85 -42
  454. package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
  455. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +2 -2
  456. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  457. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  458. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +3 -3
  459. package/.next/standalone/public/dsh-credentials.sh +20 -127
  460. package/.next/standalone/public/install-codex.sh +21 -406
  461. package/.next/standalone/public/install-kiro.sh +20 -344
  462. package/.next/standalone/public/install-opencode.sh +20 -275
  463. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
  464. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +57 -0
  465. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +2 -2
  466. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
  467. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +2 -2
  468. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +85 -42
  469. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +1 -1
  470. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +2 -2
  471. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
  472. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
  473. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +3 -3
  474. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +44 -1
  475. package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +6 -4
  476. package/.next/standalone/public/kiro-plugin/manifest.txt +42 -0
  477. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  478. package/.next/standalone/public/skill/chorus/SKILL.md +19 -1
  479. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
  480. package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
  481. package/.next/standalone/public/skill/docs-chorus/SKILL.md +1 -1
  482. package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -2
  483. package/.next/standalone/public/skill/orchestrate-chorus/SKILL.md +1 -1
  484. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  485. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  486. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  487. package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
  488. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  489. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
  490. package/.next/standalone/public/test-dsh-credentials.sh +22 -38
  491. package/.next/standalone/public/test-install-codex.sh +31 -79
  492. package/.next/standalone/server.js +1 -1
  493. package/README.ja.md +4 -2
  494. package/README.ko.md +4 -2
  495. package/README.md +4 -2
  496. package/README.zh.md +4 -2
  497. package/chorus.mjs +35 -1
  498. package/cli/agent-backend-prompt.mjs +3 -2
  499. package/cli/agents.mjs +329 -0
  500. package/cli/chorus-client.mjs +69 -0
  501. package/cli/claude-spawner.mjs +56 -15
  502. package/cli/codex-spawner.mjs +11 -6
  503. package/cli/credentials.mjs +190 -4
  504. package/cli/daemon-agent.mjs +26 -2
  505. package/cli/daemon-config.mjs +27 -2
  506. package/cli/daemon-service.mjs +120 -33
  507. package/cli/daemon.mjs +128 -22
  508. package/cli/dsh-spawner.mjs +7 -0
  509. package/cli/init/adapters.mjs +137 -0
  510. package/cli/init/agent-type-map.mjs +60 -0
  511. package/cli/init/chorus-plugin-consts.mjs +16 -0
  512. package/cli/init/codex-mcp-config.mjs +183 -0
  513. package/cli/init/contracts.mjs +122 -0
  514. package/cli/init/detect.mjs +97 -0
  515. package/cli/init/file-template.mjs +248 -0
  516. package/cli/init/install-methods.mjs +569 -0
  517. package/cli/init/registry.mjs +74 -0
  518. package/cli/init/run-command.mjs +30 -0
  519. package/cli/init/select.mjs +111 -0
  520. package/cli/init/steps/credential-seed.mjs +751 -0
  521. package/cli/init/steps/daemon-setup.mjs +246 -0
  522. package/cli/init/steps/plugin-install.mjs +37 -0
  523. package/cli/init-args.mjs +140 -0
  524. package/cli/init.mjs +243 -0
  525. package/cli/kiro-spawner.mjs +5 -0
  526. package/cli/mcp-args.mjs +280 -0
  527. package/cli/mcp.mjs +164 -0
  528. package/cli/spawner-select.mjs +45 -2
  529. package/cli/waker.mjs +89 -38
  530. package/package.json +2 -1
  531. package/.next/standalone/.env +0 -18
  532. package/.next/standalone/.next/server/chunks/3594.js +0 -1
  533. package/.next/standalone/.next/server/chunks/4545.js +0 -1
  534. package/.next/standalone/.next/server/chunks/5205.js +0 -1
  535. package/.next/standalone/.next/server/chunks/6207.js +0 -1
  536. package/.next/standalone/.next/server/chunks/6667.js +0 -1
  537. package/.next/standalone/.next/server/chunks/6995.js +0 -1
  538. package/.next/standalone/.next/server/chunks/7091.js +0 -1
  539. package/.next/standalone/.next/server/chunks/9793.js +0 -1
  540. package/.next/standalone/.next/static/chunks/19887-b805e1dcee8c367b.js +0 -1
  541. package/.next/standalone/.next/static/chunks/29108-5a11eea003f4cc11.js +0 -1
  542. package/.next/standalone/.next/static/chunks/38366.e6e0132b8ba873d6.js +0 -1
  543. package/.next/standalone/.next/static/chunks/53073-a7ed20af6538a178.js +0 -1
  544. package/.next/standalone/.next/static/chunks/6603-e70ddeab6ad09c50.js +0 -1
  545. package/.next/standalone/.next/static/chunks/78917-1b59cbb806b3ecfc.js +0 -1
  546. package/.next/standalone/.next/static/chunks/82751-3e161e1d8dbda3ac.js +0 -1
  547. package/.next/standalone/.next/static/chunks/94643-ffa140f765c73daf.js +0 -1
  548. package/.next/standalone/.next/static/chunks/99366-425e9ef22e60e3e2.js +0 -1
  549. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-b742c51c0a764daf.js +0 -1
  550. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/activity/page-20632dbec5a6dbc0.js +0 -1
  551. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f636e00c28f425ea.js +0 -1
  552. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-c004f1a194af7fa5.js +0 -1
  553. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-425acbe9ade5fa83.js +0 -1
  554. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b9eb4e0692996657.js +0 -1
  555. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-d5b222f379b2e8ca.js +0 -1
  556. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0a6c2d0e1b68e0e4.js +0 -1
  557. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-9d79e285b6fd2f8d.js +0 -1
  558. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-1507a761e67c2aa9.js +0 -1
  559. package/.next/standalone/.next/static/chunks/app/admin/companies/new/page-e35dce890d6dfd8d.js +0 -1
  560. package/.next/standalone/.next/static/chunks/app/admin/companies/page-ef720c2b0856166c.js +0 -1
  561. package/.next/standalone/.next/static/chunks/app/admin/layout-c66ce38cbd88982a.js +0 -1
  562. package/.next/standalone/.next/static/chunks/app/login/admin/page-f032b6db3bd20a2c.js +0 -1
  563. package/.next/standalone/.next/static/chunks/app/login/callback/page-ec23211506e688ee.js +0 -1
  564. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-7e4664af2c787d08.js +0 -1
  565. package/.next/standalone/.next/static/chunks/main-app-ec87f2c9ef083ff1.js +0 -1
  566. package/.next/standalone/.next/static/css/5f52bd39b284ccdf.css +0 -1
  567. /package/.next/standalone/.next/static/{6sHDgeKioa0SJR1MAbcYG → _s4RZW3efB1g0lrKgLiZ7}/_buildManifest.js +0 -0
  568. /package/.next/standalone/.next/static/{6sHDgeKioa0SJR1MAbcYG → _s4RZW3efB1g0lrKgLiZ7}/_ssgManifest.js +0 -0
@@ -0,0 +1,246 @@
1
+ // cli/init/steps/daemon-setup.mjs
2
+ // The `once`-scoped daemon-setup step for `chorus init` (idea a7c2a3e8). It is the
3
+ // reserved sibling slot in the step registry (see registry.mjs / contracts.mjs):
4
+ // after credentials are seeded (order 10) and each agent's plugin is installed
5
+ // (order 20), this step (order 30) configures the local Chorus daemon and, opt-in,
6
+ // installs it as a boot-autostart service.
7
+ //
8
+ // Owner decisions (elaboration Round 1):
9
+ // - full_preflight : reuse `daemon install`'s cwds + backend preflight so the
10
+ // installed service is usable out of the box.
11
+ // - connection_only : the credential model is Chorus URL + API key only — this
12
+ // step collects NO provider secrets (AWS_/ANTHROPIC_/…).
13
+ // - default_off : the interactive prompt defaults to No (opt-in).
14
+ // - explicit_flag : a non-interactive run (non-TTY OR --yes) installs the
15
+ // boot service ONLY when --daemon-autostart is passed.
16
+ // - linux_and_mac : auto-start is real on Linux (systemd) and macOS (launchd);
17
+ // unsupported platforms write daemon.json + print manual steps.
18
+ // - boot_and_now : accepting installs AND enables the service (start now +
19
+ // at every boot) via the shared installService.
20
+ // - report_skip_repair : a re-run where the service is already installed reports
21
+ // "already configured" and does not rewrite.
22
+ //
23
+ // All collaborators are injected (matching credential-seed.mjs) so the step
24
+ // unit-tests with fakes; production uses the real daemon-service / install-config
25
+ // modules, and an integration test can drive REAL installService against a fake io.
26
+
27
+ import { readFileSync } from "node:fs";
28
+ import { STEP_SCOPES, OUTCOME_ACTIONS } from "../contracts.mjs";
29
+ import { loginFilePath } from "../../credentials.mjs";
30
+ import {
31
+ autostartCapability as defaultAutostartCapability,
32
+ detectSupervisor as defaultDetectSupervisor,
33
+ installService as defaultInstallService,
34
+ resolveServicePaths as defaultResolveServicePaths,
35
+ } from "../../daemon-service.mjs";
36
+ import {
37
+ resolveInstallCredentials as defaultResolveInstallCredentials,
38
+ resolveInstallCwds as defaultResolveInstallCwds,
39
+ resolveInstallAgent as defaultResolveInstallAgent,
40
+ } from "../../daemon-install-config.mjs";
41
+ import { isWakeableAgentType } from "../agent-type-map.mjs";
42
+
43
+ const STEP_ID = "daemon-setup";
44
+ const { INSTALLED, SKIPPED, FAILED } = OUTCOME_ACTIONS;
45
+ const out = (action, detail) => ({ stepId: STEP_ID, action, detail });
46
+
47
+
48
+ /**
49
+ * The daemon-setup step body.
50
+ * @param {import("../contracts.mjs").StepContext & {
51
+ * autostartCapability?: Function, detectSupervisor?: Function,
52
+ * installService?: Function, resolveServicePaths?: Function, serviceIo?: object,
53
+ * resolveInstallCredentials?: Function, resolveInstallCwds?: Function,
54
+ * resolveInstallAgent?: Function,
55
+ * writeConfig?: Function, readJson?: Function, loginPath?: string,
56
+ * resolve?: Function, validate?: Function, processCwd?: string,
57
+ * }} ctx
58
+ * @returns {Promise<import("../contracts.mjs").StepOutcome>}
59
+ */
60
+ export async function setupDaemon(ctx) {
61
+ const env = ctx.env ?? process.env;
62
+ const io = ctx.io ?? {};
63
+ const isTTY = !!io.isTTY;
64
+ const flags = ctx.flags ?? {};
65
+ const log = typeof io.log === "function" ? io.log : () => {};
66
+
67
+ // Injectable collaborators (real defaults in production).
68
+ const capabilityOf = ctx.autostartCapability ?? defaultAutostartCapability;
69
+ const detect = ctx.detectSupervisor ?? defaultDetectSupervisor;
70
+ const install = ctx.installService ?? defaultInstallService;
71
+ const servicePaths = ctx.resolveServicePaths ?? defaultResolveServicePaths;
72
+ const serviceIo = ctx.serviceIo; // undefined ⇒ daemon-service uses its real defaultIO
73
+ const resolveCreds = ctx.resolveInstallCredentials ?? defaultResolveInstallCredentials;
74
+ const resolveCwds = ctx.resolveInstallCwds ?? defaultResolveInstallCwds;
75
+ const resolveAgent = ctx.resolveInstallAgent ?? defaultResolveInstallAgent;
76
+
77
+ // "Non-interactive" for the auto-start decision = non-TTY OR --yes (a --yes run in
78
+ // a TTY must never block on the prompt), matching `daemon install --yes`.
79
+ const nonInteractive = !isTTY || flags.yes === true;
80
+ const skip = nonInteractive; // suppress the resolvers' prompts in non-interactive mode
81
+
82
+ // Shared opts threaded into the reused preflight resolvers. undefined deps fall
83
+ // through to the resolvers' real defaults (updateDaemonConfig / readJsonSafe / …).
84
+ const preflightOpts = {
85
+ isTTY,
86
+ skip,
87
+ writeConfig: ctx.writeConfig,
88
+ readJson: ctx.readJson,
89
+ loginPath: ctx.loginPath,
90
+ prompt: io.ask,
91
+ log,
92
+ };
93
+
94
+ // Reuse the init step-1 selection (idea broaden-init-plugin-install): map each
95
+ // selected adapter id to its daemon agentType and record whether ANY is a
96
+ // daemon-wakeable backend. Each selected agent's own agents[] entry (with its
97
+ // agentType) was already written by the credential-seed step; here we only need
98
+ // the daemon-level default backend + the wakeability gate below. With NO
99
+ // selection (e.g. this step reused outside `chorus init`), the original
100
+ // prompt-driven behavior is preserved.
101
+ const selection = Array.isArray(ctx.selection)
102
+ ? ctx.selection.filter((id) => typeof id === "string" && id.trim())
103
+ : [];
104
+ const hasSelection = selection.length > 0;
105
+
106
+ // Will the daemon actually wake anything? credential-seed (order 10) just wrote each
107
+ // selected agent's `daemonWake` into daemon.json `agents[]` (a TTY opt-in lives there,
108
+ // NOT in flags), so read that file rather than re-derive from the selection/flags. An
109
+ // agent will be woken iff its backend is wakeable AND daemonWake is not false. offline
110
+ // OR daemonWake:false ⇒ not woken.
111
+ const readJson =
112
+ ctx.readJson ??
113
+ ((p) => {
114
+ try {
115
+ return JSON.parse(readFileSync(p, "utf8"));
116
+ } catch {
117
+ return null;
118
+ }
119
+ });
120
+ const cfgFile = readJson(ctx.loginPath ?? loginFilePath());
121
+ const configuredAgents =
122
+ cfgFile && Array.isArray(cfgFile.agents) ? cfgFile.agents.filter((a) => a && typeof a === "object") : [];
123
+ const willWake = configuredAgents.some(
124
+ (a) => isWakeableAgentType(a.agentType) && a.daemonWake !== false,
125
+ );
126
+
127
+ // 1. Preflight. With an init SELECTION, credential-seed (order 10) already wrote
128
+ // each selected agent into daemon.json `agents[]` with its OWN cwds + agentType
129
+ // — the authoritative per-agent config. The flat top-level `cwds`/`agent` are a
130
+ // DEPRECATED single-agent leftover (persisting them here leaked a duplicate agent
131
+ // config OUTSIDE the array), so we do NOT write them for a selection. Without a
132
+ // selection (this step reused outside `chorus init`) we keep the original
133
+ // single-agent preflight: persist top-level cwds + the resolved/prompted backend.
134
+ // Connection-only either way: no provider secrets.
135
+ try {
136
+ if (!hasSelection) {
137
+ await resolveCwds(flags, preflightOpts);
138
+ await resolveAgent(flags, env, { ...preflightOpts, errLog: log });
139
+ }
140
+ } catch (err) {
141
+ return out(FAILED, `daemon preflight failed: ${err?.message ?? String(err)}`);
142
+ }
143
+
144
+ // 1b. Capability gate: if NO configured agent will be woken (every one is offline, or
145
+ // a wakeable backend the operator left opted-out with daemonWake:false), the daemon
146
+ // has nothing to wake. Their agents[] entries are already persisted (credential-seed)
147
+ // for the `chorus mcp` proxy; skip the auto-start prompt AND the service install.
148
+ if (hasSelection && !willWake) {
149
+ log("[chorus agents add] no agent is enabled for daemon waking — the daemon would wake no local backend.");
150
+ log("[chorus agents add] agents' keys are configured in ~/.chorus/daemon.json for `chorus mcp`.");
151
+ return out(SKIPPED, "no agent enabled for daemon waking — agents[] persisted; boot service not installed");
152
+ }
153
+
154
+ const manual = () => {
155
+ log("[chorus agents add] daemon config written to ~/.chorus/daemon.json.");
156
+ log("[chorus agents add] start the daemon yourself: `chorus daemon` (foreground) or `chorus daemon -d` (background).");
157
+ };
158
+
159
+ // 2. Capability gate (decision: linux_and_mac). Only offer auto-start where a real
160
+ // boot service exists; unsupported platforms write the config + print manual steps.
161
+ const capability = capabilityOf(serviceIo);
162
+ if (capability === "unsupported") {
163
+ const platformLabel = serviceIo?.platform ?? process.platform;
164
+ manual();
165
+ return out(SKIPPED, `daemon.json written; auto-start unsupported on ${platformLabel} — start with 'chorus daemon'`);
166
+ }
167
+
168
+ // 3. Decide whether to install (decision: default_off / explicit_flag).
169
+ if (nonInteractive) {
170
+ if (flags.daemonAutostart !== true) {
171
+ manual();
172
+ return out(SKIPPED, "daemon.json written; pass --daemon-autostart to install the boot service");
173
+ }
174
+ } else {
175
+ const answer = typeof io.ask === "function"
176
+ ? String((await io.ask("Install & enable the Chorus daemon to auto-start on boot? [y/N]: ")) ?? "").trim()
177
+ : "";
178
+ if (!/^y(es)?$/i.test(answer)) {
179
+ manual();
180
+ return out(SKIPPED, "declined auto-start; daemon.json written — start with 'chorus daemon'");
181
+ }
182
+ }
183
+
184
+ // 4. Idempotency short-circuit (decision: report_skip_repair) — BEFORE the
185
+ // credential gate, so an already-installed healthy re-run neither re-validates
186
+ // (which could fail on a transient server outage) nor rewrites the unit. A
187
+ // missing/absent service falls through to install (which repairs the drift).
188
+ const sup = detect(serviceIo);
189
+ if ((sup.kind === "systemd" || sup.kind === "launchd") && sup.installed) {
190
+ return out(SKIPPED, `daemon already configured for auto-start (${sup.kind}) — left unchanged`);
191
+ }
192
+
193
+ // 5. Credential validate-or-abort gate — reached only when actually installing.
194
+ // Reuse the SAME guarantee as `daemon install`: resolve → server-validate the
195
+ // key → (for the legacy single-agent path) persist url+key+identity; abort
196
+ // (install nothing) on failure. With an init SELECTION the per-agent creds are
197
+ // already in agents[] (credential-seed) and resolveCredentials falls back to
198
+ // agents[0], so we VALIDATE ONLY (no-op writeConfig) — persisting the flat
199
+ // top-level url/apiKey/identity here would re-introduce the deprecated
200
+ // outside-the-array agent config. This does NOT lean on credential-seed, whose
201
+ // SKIPPED path performs no server validation and whose FAILED outcome does not
202
+ // stop runInit.
203
+ let cred;
204
+ try {
205
+ cred = await resolveCreds(flags, env, {
206
+ isTTY,
207
+ skip,
208
+ resolve: ctx.resolve,
209
+ validate: ctx.validate,
210
+ writeConfig: hasSelection ? () => {} : ctx.writeConfig,
211
+ prompt: io.ask,
212
+ log,
213
+ errLog: log,
214
+ });
215
+ } catch (err) {
216
+ return out(FAILED, `credential preflight failed: ${err?.message ?? String(err)}`);
217
+ }
218
+ if (!cred || !cred.ok) {
219
+ return out(FAILED, "credentials could not be resolved/validated — no boot service installed");
220
+ }
221
+
222
+ // 6. Install & enable the boot service (decision: boot_and_now).
223
+ const cwdList = Array.isArray(flags.cwd) ? flags.cwd : typeof flags.cwd === "string" ? [flags.cwd] : [];
224
+ const spec = {
225
+ ...servicePaths(env),
226
+ // cwds/agent live in daemon.json (persisted above); the unit carries neither.
227
+ cwds: cwdList,
228
+ chorusOnly: flags.chorusOnly === true,
229
+ workingDir: ctx.processCwd ?? process.cwd(),
230
+ };
231
+ const r = install(spec, serviceIo);
232
+ if (r && r.installed) {
233
+ log("[chorus agents add] daemon installed & enabled — it will auto-start on boot.");
234
+ for (const s of r.steps ?? []) log(`[chorus agents add] ${s}`);
235
+ return out(INSTALLED, `boot service installed (${r.platform}); manage with 'chorus daemon status|stop|restart|logs'`);
236
+ }
237
+ return out(FAILED, `service install failed: ${r?.error ?? "unknown error"}`);
238
+ }
239
+
240
+ /** @type {import("../contracts.mjs").InitStep} */
241
+ export const daemonSetupStep = {
242
+ id: STEP_ID,
243
+ order: 30, // after credential-seed (10) and plugin-install (20)
244
+ scope: STEP_SCOPES.ONCE,
245
+ run: setupDaemon,
246
+ };
@@ -0,0 +1,37 @@
1
+ // cli/init/steps/plugin-install.mjs
2
+ // The per-agent plugin-install step `chorus init` ships (idea c055e285, A1).
3
+ // The orchestrator invokes run(ctx) once per selected agent with ctx.agentId +
4
+ // ctx.adapter set; the step delegates to the agent's own installPlugin (whose
5
+ // per-agent mechanics live in cli/init/install-methods.mjs). Per-agent failures
6
+ // are isolated by returning a `failed` outcome — never throwing — so one agent
7
+ // cannot abort the others.
8
+
9
+ import { STEP_SCOPES, OUTCOME_ACTIONS } from "../contracts.mjs";
10
+
11
+ /** @type {import("../contracts.mjs").InitStep} */
12
+ export const pluginInstallStep = {
13
+ id: "plugin-install",
14
+ order: 20, // after credential-seed (order 10)
15
+ scope: STEP_SCOPES.PER_AGENT,
16
+ run(ctx) {
17
+ const adapter = ctx.adapter;
18
+ if (!adapter || typeof adapter.installPlugin !== "function") {
19
+ return {
20
+ stepId: "plugin-install",
21
+ agentId: ctx.agentId,
22
+ action: OUTCOME_ACTIONS.FAILED,
23
+ detail: "no adapter resolved for this agent",
24
+ };
25
+ }
26
+ try {
27
+ return adapter.installPlugin(ctx);
28
+ } catch (err) {
29
+ return {
30
+ stepId: "plugin-install",
31
+ agentId: adapter.id,
32
+ action: OUTCOME_ACTIONS.FAILED,
33
+ detail: `install threw: ${err?.message ?? String(err)}`,
34
+ };
35
+ }
36
+ },
37
+ };
@@ -0,0 +1,140 @@
1
+ // cli/init-args.mjs
2
+ // Argument parsing + help text for `chorus init` (idea c055e285, A1). Pure and
3
+ // side-effect-free so it is unit-testable — chorus.mjs (which runs side effects
4
+ // at import) imports these helpers, mirroring cli/client-args.mjs.
5
+ //
6
+ // Zero dependencies — ships verbatim in the npm package alongside chorus.mjs.
7
+
8
+ /**
9
+ * Parse `chorus init` flags out of an arg list. Recognizes:
10
+ * --agents <csv> comma-separated agent ids (space + `=` forms), repeatable
11
+ * (values accumulate); e.g. `--agents claude,codex`
12
+ * --all configure every supported agent
13
+ * --yes / -y skip confirmations (implied when non-TTY)
14
+ * --url <url> Chorus URL (space + `=`) — for the credential-seed step
15
+ * --api-key <k> Chorus API key (space + `=`)
16
+ * --help / -h
17
+ *
18
+ * Only keys that appear are set, so callers can distinguish "unset" from a
19
+ * falsy value. `agents` is normalized to a de-duped, order-preserving array of
20
+ * lowercased ids (empty tokens dropped); absent ⇒ `agents` is unset.
21
+ *
22
+ * @param {string[]} argv
23
+ * @returns {{ agents?: string[], all?: boolean, yes?: boolean, url?: string,
24
+ * apiKey?: string, dshProfile?: string, daemonAutostart?: boolean,
25
+ * daemonWake?: string[], daemonWakeAll?: boolean, help?: boolean }}
26
+ */
27
+ export function parseInitFlags(argv) {
28
+ const out = {};
29
+ /** @type {string[]} */
30
+ const agentTokens = [];
31
+ /** @type {string[]} */
32
+ const daemonWakeTokens = [];
33
+ for (let i = 0; i < argv.length; i++) {
34
+ const a = argv[i];
35
+ if (a === "--agents") agentTokens.push(argv[i + 1] ?? "");
36
+ else if (a.startsWith("--agents=")) agentTokens.push(a.slice("--agents=".length));
37
+ else if (a === "--all") out.all = true;
38
+ else if (a === "--yes" || a === "-y") out.yes = true;
39
+ else if (a === "--daemon-autostart") out.daemonAutostart = true;
40
+ else if (a === "--daemon-wake-all") out.daemonWakeAll = true;
41
+ else if (a === "--daemon-wake") daemonWakeTokens.push(argv[i + 1] ?? "");
42
+ else if (a.startsWith("--daemon-wake=")) daemonWakeTokens.push(a.slice("--daemon-wake=".length));
43
+ else if (a === "--url") out.url = argv[i + 1];
44
+ else if (a.startsWith("--url=")) out.url = a.slice("--url=".length);
45
+ else if (a === "--api-key") out.apiKey = argv[i + 1];
46
+ else if (a.startsWith("--api-key=")) out.apiKey = a.slice("--api-key=".length);
47
+ else if (a === "--dsh-profile") out.dshProfile = argv[i + 1];
48
+ else if (a.startsWith("--dsh-profile=")) out.dshProfile = a.slice("--dsh-profile=".length);
49
+ else if (a === "--help" || a === "-h") out.help = true;
50
+ }
51
+ // Normalize a comma-separated, repeatable token list into a de-duped lowercased id
52
+ // array (shared shape for --agents and --daemon-wake).
53
+ const normalizeIds = (tokens) => {
54
+ const seen = new Set();
55
+ /** @type {string[]} */
56
+ const ids = [];
57
+ for (const tok of tokens) {
58
+ for (const raw of String(tok).split(",")) {
59
+ const id = raw.trim().toLowerCase();
60
+ if (id && !seen.has(id)) {
61
+ seen.add(id);
62
+ ids.push(id);
63
+ }
64
+ }
65
+ }
66
+ return ids;
67
+ };
68
+ if (agentTokens.length) {
69
+ // Even a `--agents ""`/`--agents ,` that yields nothing still marks intent to
70
+ // pass agents explicitly; expose the (possibly empty) array so the selector
71
+ // can tell "user tried to specify agents" from "user gave no --agents at all".
72
+ out.agents = normalizeIds(agentTokens);
73
+ }
74
+ if (daemonWakeTokens.length) out.daemonWake = normalizeIds(daemonWakeTokens);
75
+ return out;
76
+ }
77
+
78
+ /**
79
+ * Help text for `chorus agents add [--help]` (formerly `chorus init`). Pure —
80
+ * takes the version so the caller (which already read package.json) does no IO here.
81
+ * @param {string} version
82
+ * @returns {string}
83
+ */
84
+ export function initHelpText(version) {
85
+ return `
86
+ Chorus agents add v${version} — one command to configure this machine's coding agents
87
+ for Chorus. Detects installed agents, lets you pick which to configure, installs
88
+ each one's Chorus plugin via that agent's own marketplace, and captures your
89
+ Chorus credentials once into ~/.chorus/daemon.json. (Formerly \`chorus init\`.)
90
+
91
+ USAGE
92
+ chorus agents add Interactive: detect, select, configure
93
+ chorus agents add --all Configure every supported agent
94
+ chorus agents add --agents claude,codex Configure only the named agents
95
+
96
+ OPTIONS
97
+ --agents <a,b> Comma-separated agent ids to configure (repeatable).
98
+ Valid ids come from the adapter registry; an unknown
99
+ id is rejected with the list of valid ids.
100
+ --all Configure every supported agent.
101
+ --url <url> Chorus server URL (env: CHORUS_URL) — seeded once.
102
+ --api-key <cho_...> Agent API key (env: CHORUS_API_KEY) — seeded once.
103
+ --dsh-profile <name> dsh profile to install the Chorus bundle into
104
+ (env: CHORUS_DSH_PROFILE). Required for dsh in a
105
+ non-interactive run; prompted on a TTY.
106
+ --daemon-wake <a,b> Enable daemon auto-waking for these selected agents
107
+ (repeatable). Wakeable agents (claude/codex/kiro) default
108
+ to NOT woken; this opts specific ones in. On a TTY you are
109
+ prompted per agent instead.
110
+ --daemon-wake-all Enable daemon auto-waking for every selected wakeable agent.
111
+ --daemon-autostart Install & enable the daemon boot service (Linux systemd /
112
+ macOS launchd) in a non-interactive run. Ignored where
113
+ auto-start is unsupported (e.g. Windows). In an
114
+ interactive TTY run the daemon-setup step prompts instead
115
+ (default: No).
116
+ -y, --yes Accept confirmation prompts, including refreshing
117
+ installed plugins to latest (implied when non-TTY).
118
+ -h, --help Show this help message.
119
+
120
+ NON-INTERACTIVE
121
+ When stdin/stdout is not a TTY, you MUST pass --agents or --all — the command
122
+ will not guess which agents to configure and aborts otherwise. The daemon boot service is
123
+ installed non-interactively ONLY when you pass --daemon-autostart; otherwise the
124
+ daemon config is written and you start it yourself with 'chorus daemon'.
125
+ With an explicit selection, --yes and non-TTY runs refresh selected installed
126
+ plugins to their latest available versions without prompting.
127
+
128
+ SCOPE
129
+ This installs the plugin SURFACE, seeds credentials into the daemon config, and
130
+ optionally configures + auto-starts the local daemon. Live MCP tools for each
131
+ agent arrive with a sibling feature (the 'chorus mcp' proxy). The legacy
132
+ install-*.sh scripts are left untouched.
133
+
134
+ EXAMPLES
135
+ chorus agents add
136
+ chorus agents add --all --yes
137
+ chorus agents add --agents claude,codex --url https://chorus.example.com --api-key cho_xxx --yes
138
+ chorus agents add --all --yes --daemon-autostart
139
+ `;
140
+ }
package/cli/init.mjs ADDED
@@ -0,0 +1,243 @@
1
+ // cli/init.mjs
2
+ // `chorus init` orchestrator (idea c055e285, A1). Dependency-injected so it
3
+ // unit-tests without real detection / prompts / filesystem, mirroring the pure
4
+ // entry-point style of cli/embedded-db.mjs and cli/client-args.mjs.
5
+ //
6
+ // Flow: parse flags → detect agents → resolve selection → run ordered steps →
7
+ // print per-agent summary → exit code. The ORCHESTRATOR owns per-agent
8
+ // iteration: `once` steps run a single time; `per-agent` steps run once per
9
+ // selected agent with ctx.agentId + ctx.adapter set (contracts.mjs).
10
+
11
+ import { createInterface } from "node:readline";
12
+ import { copyFileSync, existsSync } from "node:fs";
13
+ import { parseInitFlags, initHelpText } from "./init-args.mjs";
14
+ import { resolveSelection as defaultResolveSelection } from "./init/select.mjs";
15
+ import { STEP_SCOPES, OUTCOME_ACTIONS, isFailureOutcome } from "./init/contracts.mjs";
16
+
17
+ /** Build the default runtime IO (real terminal). Only called at run time. */
18
+ function defaultIo() {
19
+ const isTTY = !!(process.stdin.isTTY && process.stdout.isTTY);
20
+ return {
21
+ log: (m) => console.log(m),
22
+ isTTY,
23
+ ask: isTTY
24
+ ? (query) =>
25
+ new Promise((resolve) => {
26
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
27
+ rl.question(query, (answer) => {
28
+ rl.close();
29
+ resolve(answer);
30
+ });
31
+ })
32
+ : undefined,
33
+ };
34
+ }
35
+
36
+ /** Copy a file to `<path>.chorus-bak` once before overwrite (idempotent). */
37
+ function backupFile(path) {
38
+ try {
39
+ if (!existsSync(path)) return null;
40
+ const bak = `${path}.chorus-bak`;
41
+ if (!existsSync(bak)) copyFileSync(path, bak);
42
+ return bak;
43
+ } catch {
44
+ return null;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Run `chorus init`.
50
+ * @param {string[]} argv args after the `init` subcommand token
51
+ * @param {{
52
+ * env?: NodeJS.ProcessEnv,
53
+ * version?: string,
54
+ * io?: { log: Function, ask?: Function, isTTY?: boolean },
55
+ * parse?: (argv: string[]) => object,
56
+ * resolveSelection?: Function,
57
+ * detectAgents?: (env: NodeJS.ProcessEnv) => object[],
58
+ * orderedSteps?: () => object[],
59
+ * getAdapter?: (id: string) => (object | undefined),
60
+ * backup?: (path: string) => (string | null),
61
+ * }} [deps]
62
+ * @returns {Promise<number>} process exit code
63
+ */
64
+ export async function runInit(argv = [], deps = {}) {
65
+ const env = deps.env ?? process.env;
66
+ const io = deps.io ?? defaultIo();
67
+ const parse = deps.parse ?? parseInitFlags;
68
+ const resolveSelection = deps.resolveSelection ?? defaultResolveSelection;
69
+ const backup = deps.backup ?? backupFile;
70
+
71
+ const flags = parse(argv);
72
+
73
+ if (flags.help) {
74
+ io.log(initHelpText(deps.version ?? ""));
75
+ return 0;
76
+ }
77
+
78
+ // Lazy defaults so importing this module never requires the registry to be
79
+ // fully populated (the registry is filled incrementally by sibling tasks).
80
+ const detectAgents =
81
+ deps.detectAgents ?? ((e) => import("./init/registry.mjs").then((m) => m.detectAgents(e)));
82
+ const orderedSteps =
83
+ deps.orderedSteps ?? (() => import("./init/registry.mjs").then((m) => m.orderedSteps()));
84
+ const getAdapter =
85
+ deps.getAdapter ?? ((id) => import("./init/registry.mjs").then((m) => m.getAdapter(id)));
86
+
87
+ const detections = await detectAgents(env);
88
+ const { selectedIds, error } = await resolveSelection({ flags, detections, io });
89
+ if (error) {
90
+ io.log(`[chorus agents add] ${error}`);
91
+ return 1;
92
+ }
93
+ if (!selectedIds || selectedIds.length === 0) {
94
+ io.log("[chorus agents add] Nothing to configure.");
95
+ return 0;
96
+ }
97
+
98
+ io.log(`[chorus agents add] Configuring: ${selectedIds.join(", ")}`);
99
+
100
+ // Resolve adapters once: update-intent detection and per-agent steps must see
101
+ // the same adapter instances/state readers.
102
+ const adapters = new Map();
103
+ for (const agentId of selectedIds) {
104
+ adapters.set(agentId, await getAdapter(agentId));
105
+ }
106
+ const updateInstalled = await resolveUpdateInstalled({
107
+ selectedIds,
108
+ adapters,
109
+ flags,
110
+ env,
111
+ io,
112
+ });
113
+ const resolvedFlags = { ...flags, updateInstalled };
114
+
115
+ const steps = await orderedSteps();
116
+ // `ctxExtras` lets a caller/test inject step-context collaborators (e.g. a
117
+ // fake credential validator or command runner) so an end-to-end run is
118
+ // hermetic; production passes none and steps use their real defaults.
119
+ const baseCtx = { selection: selectedIds, flags: resolvedFlags, io, env, backup, ...(deps.ctxExtras ?? {}) };
120
+ /** @type {import("./init/contracts.mjs").StepOutcome[]} */
121
+ const outcomes = [];
122
+
123
+ for (const step of steps) {
124
+ try {
125
+ if (step.scope === STEP_SCOPES.PER_AGENT) {
126
+ for (const agentId of selectedIds) {
127
+ const adapter = adapters.get(agentId);
128
+ outcomes.push(await step.run({ ...baseCtx, agentId, adapter }));
129
+ }
130
+ } else {
131
+ outcomes.push(await step.run(baseCtx));
132
+ }
133
+ } catch (err) {
134
+ // A crashing step becomes a visible failed outcome, never a silent abort.
135
+ outcomes.push({
136
+ stepId: step.id,
137
+ action: OUTCOME_ACTIONS.FAILED,
138
+ detail: `step threw: ${err?.message ?? String(err)}`,
139
+ });
140
+ }
141
+ }
142
+
143
+ summarize(outcomes.flat(), io, selectedIds);
144
+ return outcomes.flat().some(isFailureOutcome) ? 1 : 0;
145
+ }
146
+
147
+ /**
148
+ * Resolve one installed-plugin update decision for the whole invocation.
149
+ * Unsupported/guided adapters and selected adapters without an installed
150
+ * Chorus payload do not trigger the question. `--yes` and non-TTY runs accept
151
+ * automatically; an interactive answer defaults to no.
152
+ */
153
+ export async function resolveUpdateInstalled({ selectedIds, adapters, flags, env, io }) {
154
+ let anyInstalled = false;
155
+ for (const agentId of selectedIds) {
156
+ const adapter = adapters.get(agentId);
157
+ if (!adapter || typeof adapter.readInstallState !== "function") continue;
158
+ try {
159
+ const profile = flags.dshProfile ?? env.CHORUS_DSH_PROFILE;
160
+ const state = await adapter.readInstallState({ env, profile });
161
+ if (state?.supported === true && state?.pluginInstalled === true) {
162
+ anyInstalled = true;
163
+ break;
164
+ }
165
+ } catch {
166
+ // State probes are advisory and read-only. A broken probe must not block
167
+ // normal repair/install work; the installer will report its own outcome.
168
+ }
169
+ }
170
+ if (!anyInstalled) return false;
171
+ if (flags.yes || !io.isTTY) return true;
172
+ if (typeof io.ask !== "function") return false;
173
+ const answer = String(await io.ask("Update installed Chorus plugins to the latest available versions? [y/N] ")).trim();
174
+ return /^(?:y|yes)$/i.test(answer);
175
+ }
176
+
177
+ /** Print the per-outcome summary table. */
178
+ export function summarize(outcomes, io, selectedIds = []) {
179
+ io.log("");
180
+ io.log("[chorus agents add] Summary:");
181
+ if (outcomes.length === 0) {
182
+ io.log(" (no steps registered yet)");
183
+ }
184
+ for (const o of outcomes) {
185
+ const who = o.agentId ? `${o.agentId}` : o.stepId;
186
+ io.log(` - ${who}: ${o.action}${o.detail ? ` — ${o.detail}` : ""}`);
187
+ }
188
+ const failed = outcomes.filter(isFailureOutcome);
189
+ if (failed.length) {
190
+ io.log(`[chorus agents add] ${failed.length} step(s) failed — see above.`);
191
+ } else if (selectedIds.length) {
192
+ io.log("[chorus agents add] Done. Next: run the daemon / connect MCP to activate tools.");
193
+ }
194
+
195
+ profileExportHint(outcomes, io);
196
+ }
197
+
198
+ /**
199
+ * Print an optional `export CHORUS_AGENT_PROFILE=…` hint for every agent whose
200
+ * identity credential-seed captured. Setting it in an interactive shell lets that
201
+ * shell's Chorus hooks/skills act as a specific agent — the CLI resolves the key
202
+ * from ~/.chorus/daemon.json by profile, so the API key need not be exported for
203
+ * the wrapper/doc-mirror MCP path. It is OPTIONAL and ADDITIVE (Claude Code's
204
+ * built-in MCP client still reads CHORUS_URL/CHORUS_API_KEY from the env);
205
+ * daemon-woken sessions receive CHORUS_AGENT_PROFILE from the spawner automatically.
206
+ *
207
+ * EXCEPTIONS — dsh, Claude Code, and Codex: when credential-seed persisted the profile
208
+ * into `$DSH_HOME/.env` (outcome `profileInEnv: true`) dsh loads it into the session env
209
+ * on its own; when it wrote the full CHORUS_* env into `~/.claude/settings.json`
210
+ * (outcome `settingsEnvWritten: true`) Claude Code injects it at session start; and when
211
+ * it wrote the CHORUS_* env into `~/.codex/.env` (outcome `codexEnvWritten: true`) Codex
212
+ * loads it into its process env at startup, reaching both its plugin hooks and shell tool.
213
+ * Either way a manual export is redundant — that agent is omitted from the hint. Every other
214
+ * agent (Kiro, …) has no such file channel and still gets the hint.
215
+ * @param {import("./init/contracts.mjs").StepOutcome[]} outcomes
216
+ * @param {{ log: Function }} io
217
+ */
218
+ export function profileExportHint(outcomes, io) {
219
+ const seen = new Set();
220
+ const profiles = [];
221
+ for (const o of outcomes) {
222
+ // dsh persists CHORUS_AGENT_PROFILE in $DSH_HOME/.env and loads it into the
223
+ // session env itself — no manual export needed, so skip it here. Claude Code
224
+ // likewise has its full CHORUS_* env written into ~/.claude/settings.json
225
+ // (settingsEnvWritten), and Codex into ~/.codex/.env (codexEnvWritten) — those sessions
226
+ // are fully wired, so skip them too.
227
+ if (o && (o.profileInEnv === true || o.settingsEnvWritten === true || o.codexEnvWritten === true)) continue;
228
+ if (o && typeof o.agentUuid === "string" && o.agentUuid && !seen.has(o.agentUuid)) {
229
+ seen.add(o.agentUuid);
230
+ profiles.push({ agentUuid: o.agentUuid, agentName: typeof o.agentName === "string" ? o.agentName : "" });
231
+ }
232
+ }
233
+ if (profiles.length === 0) return;
234
+
235
+ io.log("");
236
+ io.log("[chorus agents add] Optional — act as an agent in THIS shell without exporting its API key");
237
+ io.log(" (Chorus hooks/skills resolve the key from ~/.chorus/daemon.json by profile):");
238
+ for (const p of profiles) {
239
+ io.log(` export CHORUS_AGENT_PROFILE="${p.agentUuid}"${p.agentName ? ` # ${p.agentName}` : ""}`);
240
+ }
241
+ io.log(" One per shell — pick the identity it should act as; add it to ~/.bashrc / ~/.zshrc");
242
+ io.log(" to persist. Daemon-woken sessions set CHORUS_AGENT_PROFILE automatically.");
243
+ }