@chorus-aidlc/chorus 0.16.4 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +420 -420
  3. package/.next/standalone/.next/app-path-routes-manifest.json +53 -53
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +45 -45
  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 +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  41. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  45. package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  46. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  49. package/.next/standalone/.next/server/app/admin/companies/new.rsc +1 -1
  50. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  52. package/.next/standalone/.next/server/app/admin/companies.rsc +1 -1
  53. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/admin.html +2 -2
  55. package/.next/standalone/.next/server/app/admin.rsc +1 -1
  56. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  64. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  78. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  90. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  100. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
  110. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  123. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
  126. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/events/route.js +1 -1
  129. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  133. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  136. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  139. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  142. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  143. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  145. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  148. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  149. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/mcp/route.js +4 -4
  156. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  159. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  162. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  168. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  171. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  174. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  180. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  196. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  197. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  200. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  201. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  202. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
  206. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
  207. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  208. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  211. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  212. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  214. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  215. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  219. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  220. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  222. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  223. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  226. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  230. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  231. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  233. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  234. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  235. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  236. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  237. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  238. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  239. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  240. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  242. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  243. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  245. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  246. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  247. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  248. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  249. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  250. package/.next/standalone/.next/server/app/index.html +2 -2
  251. package/.next/standalone/.next/server/app/index.rsc +1 -1
  252. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  253. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  254. package/.next/standalone/.next/server/app/login/admin.rsc +1 -1
  255. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  256. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  257. package/.next/standalone/.next/server/app/login/callback.rsc +1 -1
  258. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  259. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  260. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  261. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +1 -1
  262. package/.next/standalone/.next/server/app/login.html +2 -2
  263. package/.next/standalone/.next/server/app/login.rsc +1 -1
  264. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  265. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  266. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  268. package/.next/standalone/.next/server/app/onboarding.rsc +2 -2
  269. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/projects.html +2 -2
  271. package/.next/standalone/.next/server/app/projects.rsc +2 -2
  272. package/.next/standalone/.next/server/app/settings.html +2 -2
  273. package/.next/standalone/.next/server/app/settings.rsc +3 -3
  274. package/.next/standalone/.next/server/app-paths-manifest.json +53 -53
  275. package/.next/standalone/.next/server/chunks/{5205.js → 1114.js} +1 -1
  276. package/.next/standalone/.next/server/chunks/1318.js +1 -1
  277. package/.next/standalone/.next/server/chunks/1437.js +1 -0
  278. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  279. package/.next/standalone/.next/server/chunks/2572.js +1 -1
  280. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  281. package/.next/standalone/.next/server/chunks/{9793.js → 3045.js} +1 -1
  282. package/.next/standalone/.next/server/chunks/3831.js +37 -0
  283. package/.next/standalone/.next/server/chunks/4827.js +1 -1
  284. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  285. package/.next/standalone/.next/server/chunks/{4394.js → 5706.js} +1 -1
  286. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  287. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  288. package/.next/standalone/.next/server/chunks/6515.js +2 -2
  289. package/.next/standalone/.next/server/chunks/679.js +1 -1
  290. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  291. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  292. package/.next/standalone/.next/server/chunks/8454.js +1 -1
  293. package/.next/standalone/.next/server/chunks/920.js +1 -1
  294. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  295. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  296. package/.next/standalone/.next/server/chunks/9449.js +1 -0
  297. package/.next/standalone/.next/server/chunks/9458.js +1 -0
  298. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  299. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  300. package/.next/standalone/.next/server/pages/404.html +2 -2
  301. package/.next/standalone/.next/server/pages/500.html +1 -1
  302. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  303. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  304. package/.next/standalone/.next/static/chunks/{11595.a6268c75ca8a2163.js → 11595.bbe40924d18958bf.js} +1 -1
  305. package/.next/standalone/.next/static/chunks/18139-e6ef4b5869593f8e.js +1 -0
  306. package/.next/standalone/.next/static/chunks/28856-ef2cb58fbd404ef9.js +1 -0
  307. package/.next/standalone/.next/static/chunks/{31308-fda6febfb2882a28.js → 31308-bb4a97b3f39c22dd.js} +1 -1
  308. package/.next/standalone/.next/static/chunks/{33456.16ff7edf00137539.js → 33456.5499eb8e892b110a.js} +1 -1
  309. package/.next/standalone/.next/static/chunks/{4860.9e06848eb531e667.js → 4860.be77046fb2b3a2bd.js} +1 -1
  310. package/.next/standalone/.next/static/chunks/66873-e3be53f41b3f2255.js +1 -0
  311. package/.next/standalone/.next/static/chunks/70303-aec3d52ad87602a3.js +1 -0
  312. package/.next/standalone/.next/static/chunks/76201-83b26515f85ce37c.js +1 -0
  313. package/.next/standalone/.next/static/chunks/78917-a8a8dff98857c045.js +1 -0
  314. package/.next/standalone/.next/static/chunks/97663-9c3ae4fd60b353db.js +1 -0
  315. package/.next/standalone/.next/static/chunks/{99373.81b79c91858f9099.js → 99373.111493dc260a2a04.js} +1 -1
  316. package/.next/standalone/.next/static/chunks/app/(dashboard)/{layout-b742c51c0a764daf.js → layout-40fe7d026c5a7c6d.js} +1 -1
  317. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-87d4d0fe90fca28c.js +1 -0
  318. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-1206abaee85dc915.js +1 -0
  319. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-425acbe9ade5fa83.js → page-474e494097c8945f.js} +1 -1
  320. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-e902b19328092ccf.js +1 -0
  321. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-f273288c3530aa0f.js +1 -0
  322. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-6568a7b08bf9a54b.js +1 -0
  323. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-fbd3c27b68666234.js +1 -0
  324. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-58b48aa0a11603c3.js → page-15bb6e1696668512.js} +1 -1
  325. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-286faced32c6133f.js → page-2bea97214b1595cc.js} +1 -1
  326. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2bf7ceee62b574c7.js +1 -0
  327. package/.next/standalone/.next/static/chunks/app/onboarding/{page-5c82cf3abd856301.js → page-540da64d7ba16dc7.js} +1 -1
  328. package/.next/standalone/.next/static/chunks/{webpack-4d1cc14b13e247b6.js → webpack-7cbb3ba6792f1fb3.js} +1 -1
  329. package/.next/standalone/package.json +1 -1
  330. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  331. package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +44 -1
  332. package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +4 -3
  333. package/.next/standalone/public/chorus-plugin/bin/tests/test-mcp-cli-delegation.sh +244 -0
  334. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  335. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +19 -1
  336. package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +57 -0
  337. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -2
  338. package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
  339. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
  340. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +85 -42
  341. package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
  342. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +2 -2
  343. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  344. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  345. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +3 -3
  346. package/.next/standalone/public/dsh-credentials.sh +20 -127
  347. package/.next/standalone/public/install-codex.sh +21 -406
  348. package/.next/standalone/public/install-kiro.sh +20 -344
  349. package/.next/standalone/public/install-opencode.sh +20 -275
  350. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
  351. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +57 -0
  352. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +2 -2
  353. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
  354. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
  355. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +85 -42
  356. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +1 -1
  357. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +2 -2
  358. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
  359. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
  360. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +3 -3
  361. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +44 -1
  362. package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +6 -4
  363. package/.next/standalone/public/kiro-plugin/manifest.txt +41 -0
  364. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  365. package/.next/standalone/public/skill/chorus/SKILL.md +19 -1
  366. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
  367. package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
  368. package/.next/standalone/public/skill/docs-chorus/SKILL.md +1 -1
  369. package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
  370. package/.next/standalone/public/skill/orchestrate-chorus/SKILL.md +1 -1
  371. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  372. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  373. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  374. package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
  375. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  376. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
  377. package/.next/standalone/public/test-dsh-credentials.sh +22 -38
  378. package/.next/standalone/public/test-install-codex.sh +31 -79
  379. package/README.ja.md +2 -2
  380. package/README.ko.md +2 -2
  381. package/README.md +2 -2
  382. package/README.zh.md +2 -2
  383. package/chorus.mjs +35 -1
  384. package/cli/agent-backend-prompt.mjs +3 -2
  385. package/cli/agents.mjs +329 -0
  386. package/cli/chorus-client.mjs +69 -0
  387. package/cli/claude-spawner.mjs +4 -0
  388. package/cli/codex-spawner.mjs +11 -6
  389. package/cli/credentials.mjs +185 -3
  390. package/cli/daemon-agent.mjs +26 -2
  391. package/cli/daemon-config.mjs +27 -2
  392. package/cli/daemon-service.mjs +120 -33
  393. package/cli/daemon.mjs +128 -22
  394. package/cli/dsh-spawner.mjs +7 -0
  395. package/cli/init/adapters.mjs +137 -0
  396. package/cli/init/agent-type-map.mjs +60 -0
  397. package/cli/init/chorus-plugin-consts.mjs +16 -0
  398. package/cli/init/codex-mcp-config.mjs +183 -0
  399. package/cli/init/contracts.mjs +120 -0
  400. package/cli/init/detect.mjs +97 -0
  401. package/cli/init/file-template.mjs +248 -0
  402. package/cli/init/install-methods.mjs +508 -0
  403. package/cli/init/registry.mjs +74 -0
  404. package/cli/init/run-command.mjs +30 -0
  405. package/cli/init/select.mjs +111 -0
  406. package/cli/init/steps/credential-seed.mjs +751 -0
  407. package/cli/init/steps/daemon-setup.mjs +246 -0
  408. package/cli/init/steps/plugin-install.mjs +37 -0
  409. package/cli/init-args.mjs +137 -0
  410. package/cli/init.mjs +198 -0
  411. package/cli/kiro-spawner.mjs +4 -0
  412. package/cli/mcp-args.mjs +280 -0
  413. package/cli/mcp.mjs +164 -0
  414. package/cli/spawner-select.mjs +45 -2
  415. package/package.json +1 -1
  416. package/.next/standalone/.next/server/chunks/3594.js +0 -1
  417. package/.next/standalone/.next/server/chunks/5351.js +0 -33
  418. package/.next/standalone/.next/server/chunks/6667.js +0 -1
  419. package/.next/standalone/.next/server/chunks/6995.js +0 -1
  420. package/.next/standalone/.next/static/chunks/19887-b805e1dcee8c367b.js +0 -1
  421. package/.next/standalone/.next/static/chunks/29108-5a11eea003f4cc11.js +0 -1
  422. package/.next/standalone/.next/static/chunks/53073-a7ed20af6538a178.js +0 -1
  423. package/.next/standalone/.next/static/chunks/6603-e70ddeab6ad09c50.js +0 -1
  424. package/.next/standalone/.next/static/chunks/78917-1b59cbb806b3ecfc.js +0 -1
  425. package/.next/standalone/.next/static/chunks/82751-3e161e1d8dbda3ac.js +0 -1
  426. package/.next/standalone/.next/static/chunks/99366-425e9ef22e60e3e2.js +0 -1
  427. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f636e00c28f425ea.js +0 -1
  428. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-c004f1a194af7fa5.js +0 -1
  429. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-fdd617457730a116.js +0 -1
  430. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b9eb4e0692996657.js +0 -1
  431. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-d5b222f379b2e8ca.js +0 -1
  432. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0a6c2d0e1b68e0e4.js +0 -1
  433. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-1507a761e67c2aa9.js +0 -1
  434. /package/.next/standalone/.next/static/{6sHDgeKioa0SJR1MAbcYG → 0spgxl3lP26Fl1otd1D7R}/_buildManifest.js +0 -0
  435. /package/.next/standalone/.next/static/{6sHDgeKioa0SJR1MAbcYG → 0spgxl3lP26Fl1otd1D7R}/_ssgManifest.js +0 -0
@@ -1,353 +1,29 @@
1
1
  #!/usr/bin/env bash
2
- # Chorus + Kiro CLI one-shot installer
2
+ # Chorus + Kiro CLI installer — DEPRECATED.
3
3
  #
4
- # Usage:
5
- # curl -fsSL "$CHORUS_URL/install-kiro.sh" | bash
6
- # # or non-interactive:
7
- # CHORUS_URL=https://... CHORUS_API_KEY=cho_... \
8
- # bash <(curl -fsSL https://chorus.example.com/install-kiro.sh)
9
- # # workspace-local (writes <cwd>/.kiro/ instead of ~/.kiro/):
10
- # bash <(curl -fsSL "$CHORUS_URL/install-kiro.sh") --workspace
4
+ # Chorus setup is now a global install plus a single command that configures
5
+ # every supported agent (claude / codex / opencode / kiro / openclaw / dsh):
11
6
  #
12
- # What this does (idempotent, safe to re-run):
13
- # 1. Verifies a Kiro CLI (`kiro-cli` or `kiro`) is installed.
14
- # 2. Collects CHORUS_URL + CHORUS_API_KEY (env or TTY prompt) and
15
- # normalizes the URL to end in exactly one /api/mcp.
16
- # 3. Installs the Chorus `.kiro/` template — the chorus-* skills, the
17
- # `chorus` main agent + 3 read-only reviewer subagents, and the Chorus
18
- # steering doc — into ~/.kiro/ (global, default) or <cwd>/.kiro/
19
- # (--workspace).
20
- # 4. Copies the session-automation hook scripts (+ chorus-api.sh) into
21
- # <KIRO_DIR>/chorus-bin/, chmod +x, and substitutes the __CHORUS_BIN__
22
- # placeholder in the installed agents/chorus.json hook commands with
23
- # the resolved ABSOLUTE chorus-bin path.
24
- # 5. MERGES the `chorus` MCP server into <KIRO_DIR>/settings/mcp.json,
25
- # preserving any pre-existing user servers, backing the original up to
26
- # mcp.json.chorus-bak first.
7
+ # npm install -g @chorus-aidlc/chorus@0.17.0
8
+ # chorus agents add
27
9
  #
28
- # Bash 3.2 compatible (CLAUDE.md pitfall #10): no ${VAR,,}/${VAR^^},
29
- # no `declare -A`, no `readarray`/`mapfile`, no `&>>`, no `|&`.
10
+ # This script is still fetched via curl for backward compatibility, but it no
11
+ # longer installs anything itself it just points you at `chorus agents add`.
12
+ #
13
+ # Bash 3.2 compatible (macOS /bin/bash): no case-conversion parameter expansion,
14
+ # no associative arrays.
30
15
 
31
16
  set -euo pipefail
32
17
 
33
- # ---------- cosmetics ----------
34
- BOLD=$'\033[1m'; DIM=$'\033[2m'; GREEN=$'\033[32m'; YELLOW=$'\033[33m'; RED=$'\033[31m'; RESET=$'\033[0m'
35
- ok() { printf "${GREEN}\xe2\x9c\x93${RESET} %s\n" "$*"; }
36
- warn() { printf "${YELLOW}!${RESET} %s\n" "$*" >&2; }
37
- die() { printf "${RED}\xe2\x9c\x97${RESET} %s\n" "$*" >&2; exit 1; }
38
- hdr() { printf "\n${BOLD}%s${RESET}\n" "$*"; }
39
-
40
- is_tty() { [ -t 0 ] && [ -t 1 ]; }
41
-
42
- # ---------- config: the artifact manifest (single source of truth) ----------
43
- # These lists drive BOTH the local copy and the remote download, so the two
44
- # source modes can never diverge.
45
- SKILLS="chorus-idea chorus-proposal chorus-develop chorus-yolo chorus-review chorus-quick-dev chorus-brainstorm chorus-openspec-aware chorus-docs"
46
- REVIEWER_AGENTS="chorus-code-reviewer chorus-proposal-reviewer chorus-task-reviewer"
47
- HOOK_SCRIPTS="on-agent-spawn.sh on-stop.sh on-post-submit-proposal.sh on-post-submit-for-verify.sh on-post-verify-task.sh chorus-api.sh verify-document-roundtrip.sh test-syntax.sh"
48
-
49
- CHORUS_URL_DEFAULT="${CHORUS_URL_DEFAULT:-http://localhost:8637/api/mcp}"
50
-
51
- # ---------- argument parsing ----------
52
- SCOPE="global"
53
- for arg in "$@"; do
54
- case "$arg" in
55
- --workspace) SCOPE="workspace" ;;
56
- --global) SCOPE="global" ;;
57
- -h|--help)
58
- cat <<'USAGE'
59
- install-kiro.sh — install the Chorus plugin for Kiro CLI.
60
-
61
- Options:
62
- --workspace Write to <cwd>/.kiro/ (project-local) instead of ~/.kiro/.
63
- --global Write to ~/.kiro/ (default).
64
- -h, --help Show this help.
65
-
66
- Environment:
67
- CHORUS_URL Chorus base URL (e.g. https://chorus.example.com). Normalized
68
- to end in /api/mcp. Prompted on a TTY if unset.
69
- CHORUS_API_KEY Chorus agent API key (starts with cho_). Prompted (echo off)
70
- on a TTY if unset; required — no TTY + unset is a hard error.
71
- USAGE
72
- exit 0
73
- ;;
74
- *) die "Unknown argument: $arg (try --help)" ;;
75
- esac
76
- done
77
-
78
- # If piped through `curl | bash`, stdin is the script body. Re-open from
79
- # /dev/tty so interactive prompts still work — but only when a real TTY is
80
- # available AND we actually need to prompt (the key is unset). Both CHORUS_URL
81
- # and CHORUS_API_KEY being set lets us run fully non-interactively (CI /
82
- # sandboxed / unified-exec environments).
83
- if [ -z "${CHORUS_API_KEY:-}" ] && ! is_tty; then
84
- # Probe that /dev/tty is actually openable before exec'ing onto it. In a
85
- # detached/headless environment (CI, daemon-spawned) /dev/tty can pass the
86
- # -r/-w file-mode test yet fail to open ("No such device or address"), and a
87
- # bare `exec < /dev/tty` would abort the shell with that raw error instead of
88
- # reaching the explanatory die below. The subshell open-test runs inside an
89
- # `if` so its failure never trips set -e.
90
- if ( : < /dev/tty ) >/dev/null 2>&1; then
91
- exec < /dev/tty
92
- fi
93
- fi
94
-
95
- # ---------- step 1: check Kiro CLI ----------
96
- hdr "1/5 Checking Kiro CLI"
97
- KIRO_BIN=""
98
- if command -v kiro-cli >/dev/null 2>&1; then
99
- KIRO_BIN="kiro-cli"
100
- elif command -v kiro >/dev/null 2>&1; then
101
- KIRO_BIN="kiro"
102
- fi
103
- [ -n "$KIRO_BIN" ] || die "No Kiro CLI found in PATH (looked for 'kiro-cli' and 'kiro'). Install it first: https://kiro.dev/docs/cli"
104
- ok "Found $($KIRO_BIN --version 2>/dev/null | head -1 || echo "$KIRO_BIN")"
105
-
106
- # ---------- step 2: collect Chorus URL + API key ----------
107
- hdr "2/5 Configuring the Chorus connection"
108
-
109
- # URL
110
- if [ -n "${CHORUS_URL:-}" ]; then
111
- url="$CHORUS_URL"
112
- ok "Using CHORUS_URL from env: $url"
113
- elif [ -t 0 ]; then
114
- printf " Chorus URL ${DIM}[default: $CHORUS_URL_DEFAULT]${RESET}: "
115
- read -r url
116
- url="${url:-$CHORUS_URL_DEFAULT}"
117
- else
118
- url="$CHORUS_URL_DEFAULT"
119
- warn "No TTY and CHORUS_URL unset — using default: $url"
120
- fi
121
-
122
- # API key
123
- if [ -n "${CHORUS_API_KEY:-}" ]; then
124
- apikey="$CHORUS_API_KEY"
125
- ok "Using CHORUS_API_KEY from env"
126
- elif [ -t 0 ]; then
127
- printf " Chorus API key (starts with cho_): "
128
- stty -echo 2>/dev/null || true
129
- read -r apikey
130
- stty echo 2>/dev/null || true
131
- printf "\n"
132
- [ -n "$apikey" ] || die "API key is required"
133
- else
134
- die "No TTY and CHORUS_API_KEY unset — cannot continue. Export CHORUS_API_KEY (create one under Settings -> Agents in the Chorus UI) and re-run."
135
- fi
136
-
137
- # Must be http(s).
138
- case "$url" in
139
- http://*|https://*) ;;
140
- *) die "URL must start with http:// or https:// — got: $url" ;;
141
- esac
142
-
143
- # Normalize: the Chorus MCP endpoint lives under /api/mcp. If the user gave us
144
- # just a host (or a host with trailing slash, or any path that doesn't already
145
- # end in /api/mcp), append it so the MCP handshake hits the right route.
146
- case "$url" in
147
- */api/mcp) ;;
148
- */api/mcp/) url="${url%/}" ;;
149
- */) url="${url}api/mcp" ;;
150
- *) url="${url}/api/mcp" ;;
151
- esac
152
- ok "MCP endpoint: $url"
153
-
154
- # The base for fetching static plugin assets is the same origin minus /api/mcp
155
- # (public/ is served at web root, so public/kiro-plugin/... => <base>/kiro-plugin/...).
156
- ASSET_BASE="${url%/api/mcp}"
157
-
158
- # ---------- step 3: locate the template source ----------
159
- hdr "3/5 Locating the Chorus .kiro/ template"
160
-
161
- # Resolve the directory of this script (only meaningful when run from a file,
162
- # not via `curl | bash`).
163
- SCRIPT_SRC="${BASH_SOURCE:-$0}"
164
- SCRIPT_DIR=""
165
- if [ -f "$SCRIPT_SRC" ]; then
166
- SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_SRC")" >/dev/null 2>&1 && pwd)"
167
- fi
168
-
169
- # Candidate local template roots (script lives in public/, or repo root).
170
- SRC_ROOT=""
171
- if [ -n "$SCRIPT_DIR" ]; then
172
- for cand in "$SCRIPT_DIR/kiro-plugin" "$SCRIPT_DIR/public/kiro-plugin" "$SCRIPT_DIR/../public/kiro-plugin"; do
173
- if [ -f "$cand/.kiro/settings/mcp.json" ] && [ -f "$cand/.kiro/agents/chorus.json" ]; then
174
- SRC_ROOT="$(cd "$cand" >/dev/null 2>&1 && pwd)"
175
- break
176
- fi
177
- done
178
- fi
179
-
180
- CLEANUP_SRC=""
181
- if [ -n "$SRC_ROOT" ]; then
182
- ok "Using local template: $SRC_ROOT"
183
- else
184
- # Remote mode: download the manifest from the Chorus instance's static assets.
185
- command -v curl >/dev/null 2>&1 || die "No local template found and 'curl' is unavailable — cannot download the plugin. Run this from a Chorus checkout, or install curl."
186
- SRC_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/chorus-kiro.XXXXXX")"
187
- CLEANUP_SRC="$SRC_ROOT"
188
- ok "Downloading template from ${ASSET_BASE}/kiro-plugin/"
189
-
190
- fetch() {
191
- # fetch <relpath-under-kiro-plugin> <dest-abs-path>
192
- local rel="$1" dest="$2"
193
- mkdir -p "$(dirname "$dest")"
194
- curl -fsSL "${ASSET_BASE}/kiro-plugin/${rel}" -o "$dest" \
195
- || die "Failed to download kiro-plugin/${rel} from ${ASSET_BASE}. Is CHORUS_URL correct and reachable?"
196
- }
197
-
198
- fetch ".kiro/settings/mcp.json" "$SRC_ROOT/.kiro/settings/mcp.json"
199
- fetch ".kiro/steering/chorus.md" "$SRC_ROOT/.kiro/steering/chorus.md"
200
- fetch ".kiro/agents/chorus.json" "$SRC_ROOT/.kiro/agents/chorus.json"
201
- fetch ".kiro/agents/chorus.md" "$SRC_ROOT/.kiro/agents/chorus.md"
202
- for a in $REVIEWER_AGENTS; do
203
- fetch ".kiro/agents/${a}.json" "$SRC_ROOT/.kiro/agents/${a}.json"
204
- done
205
- for s in $SKILLS; do
206
- fetch ".kiro/skills/${s}/SKILL.md" "$SRC_ROOT/.kiro/skills/${s}/SKILL.md"
207
- done
208
- for b in $HOOK_SCRIPTS; do
209
- fetch "bin/${b}" "$SRC_ROOT/bin/${b}"
210
- done
211
- fi
212
-
213
- # Clean up any downloaded temp on exit (no-op for local mode).
214
- cleanup() { [ -n "$CLEANUP_SRC" ] && rm -rf "$CLEANUP_SRC" 2>/dev/null || true; }
215
- trap cleanup EXIT
216
-
217
- # ---------- step 4: determine KIRO_DIR + write skills / agents / steering / hooks ----------
218
- if [ "$SCOPE" = "workspace" ]; then
219
- KIRO_DIR="$(pwd)/.kiro"
220
- else
221
- KIRO_DIR="$HOME/.kiro"
222
- fi
223
- CHORUS_BIN_ABS="$KIRO_DIR/chorus-bin"
224
-
225
- hdr "4/5 Installing into $KIRO_DIR (scope: $SCOPE)"
226
- mkdir -p "$KIRO_DIR/skills" "$KIRO_DIR/agents" "$KIRO_DIR/steering" "$KIRO_DIR/chorus-bin" "$KIRO_DIR/settings"
227
-
228
- # Skills (chorus-* only — never touches a user's own skills).
229
- for s in $SKILLS; do
230
- mkdir -p "$KIRO_DIR/skills/$s"
231
- cp "$SRC_ROOT/.kiro/skills/$s/SKILL.md" "$KIRO_DIR/skills/$s/SKILL.md"
232
- done
233
- ok "Installed skills: $SKILLS"
234
-
235
- # Reviewer subagents (raw copy) + the main-agent prompt sidecar.
236
- for a in $REVIEWER_AGENTS; do
237
- cp "$SRC_ROOT/.kiro/agents/$a.json" "$KIRO_DIR/agents/$a.json"
238
- done
239
- cp "$SRC_ROOT/.kiro/agents/chorus.md" "$KIRO_DIR/agents/chorus.md"
240
- ok "Installed agents: chorus (main) + $REVIEWER_AGENTS"
241
-
242
- # Steering (Chorus platform-overview / AI-DLC context).
243
- cp "$SRC_ROOT/.kiro/steering/chorus.md" "$KIRO_DIR/steering/chorus.md"
244
- ok "Installed steering: chorus.md"
245
-
246
- # Hook scripts -> chorus-bin/ (executable). Copying them INTO the Kiro dir keeps
247
- # the install self-contained and removable.
248
- for b in $HOOK_SCRIPTS; do
249
- cp "$SRC_ROOT/bin/$b" "$CHORUS_BIN_ABS/$b"
250
- chmod +x "$CHORUS_BIN_ABS/$b"
251
- done
252
- ok "Installed hook scripts -> $CHORUS_BIN_ABS/ (chmod +x)"
253
-
254
- # Main agent: substitute the __CHORUS_BIN__ placeholder in the hook `command`
255
- # strings with the resolved ABSOLUTE chorus-bin path. The repo copy keeps the
256
- # placeholder; only this installed copy is concretized. Absolute paths are
257
- # scope-independent and survive Kiro being launched from any cwd.
258
- # (Use '|' as the sed delimiter since the replacement is a filesystem path.)
259
- sed "s|__CHORUS_BIN__|$CHORUS_BIN_ABS|g" \
260
- "$SRC_ROOT/.kiro/agents/chorus.json" > "$KIRO_DIR/agents/chorus.json"
261
-
262
- # Fail loudly if the placeholder survived (it must not).
263
- if grep -q '__CHORUS_BIN__' "$KIRO_DIR/agents/chorus.json" 2>/dev/null; then
264
- die "Internal error: __CHORUS_BIN__ placeholder was not fully substituted in agents/chorus.json"
265
- fi
266
- ok "Wrote agents/chorus.json (hook commands -> $CHORUS_BIN_ABS)"
267
-
268
- # ---------- step 5: merge the chorus MCP server into settings/mcp.json ----------
269
- hdr "5/5 Wiring the Chorus MCP server into settings/mcp.json"
270
-
271
- MCP_JSON="$KIRO_DIR/settings/mcp.json"
272
- # Seed a valid empty document if the file is missing so the merge has a target.
273
- if [ ! -f "$MCP_JSON" ]; then
274
- printf '%s\n' '{"mcpServers":{}}' > "$MCP_JSON"
275
- fi
276
-
277
- # Back up ONCE (idempotent — a second run keeps the single original backup).
278
- if [ ! -f "$MCP_JSON.chorus-bak" ]; then
279
- cp "$MCP_JSON" "$MCP_JSON.chorus-bak"
280
- ok "Backed up original to ${MCP_JSON}.chorus-bak"
281
- fi
282
-
283
- # The chorus server object. BOTH the URL and the API key stay ${...} references
284
- # (not baked literals) so Kiro CLI interpolates them from the environment at
285
- # runtime — this is what makes a single daemon serving MULTIPLE agents work: each
286
- # woken Kiro child inherits that agent's own CHORUS_URL / CHORUS_API_KEY, so the
287
- # same mcp.json resolves to the right server + key per agent. The API key is never
288
- # written to disk. Single-quote both refs so the shell never expands ${...} here.
289
- URL_REF='${CHORUS_URL}/api/mcp'
290
- AUTH_REF='Bearer ${env:CHORUS_API_KEY}'
291
-
292
- merged=""
293
- if command -v jq >/dev/null 2>&1; then
294
- # Build the server object, then set only .mcpServers.chorus (in place if it
295
- # already exists — preserving position and every other user server).
296
- server_json="$(jq -n --arg url "$URL_REF" --arg auth "$AUTH_REF" \
297
- '{type:"http", url:$url, headers:{Authorization:$auth}, disabled:false}')"
298
- merged="$(jq --argjson srv "$server_json" \
299
- '(.mcpServers // {}) as $m | .mcpServers = ($m + {chorus:$srv})' "$MCP_JSON")" \
300
- || die "Failed to merge mcp.json with jq (is $MCP_JSON valid JSON?)"
301
- elif command -v node >/dev/null 2>&1; then
302
- merged="$(CHORUS_MCP_URL="$URL_REF" CHORUS_MCP_AUTH="$AUTH_REF" node - "$MCP_JSON" <<'NODE'
303
- const fs = require("fs");
304
- const file = process.argv[2];
305
- let data = {};
306
- try { data = JSON.parse(fs.readFileSync(file, "utf8")) || {}; }
307
- catch (e) { console.error("mcp.json is not valid JSON: " + e.message); process.exit(1); }
308
- if (typeof data !== "object" || Array.isArray(data)) data = {};
309
- if (typeof data.mcpServers !== "object" || data.mcpServers === null || Array.isArray(data.mcpServers)) data.mcpServers = {};
310
- data.mcpServers.chorus = {
311
- type: "http",
312
- url: process.env.CHORUS_MCP_URL,
313
- headers: { Authorization: process.env.CHORUS_MCP_AUTH },
314
- disabled: false,
315
- };
316
- process.stdout.write(JSON.stringify(data, null, 2) + "\n");
317
- NODE
318
- )" || die "Failed to merge mcp.json with node (is $MCP_JSON valid JSON?)"
319
- else
320
- die "Cannot merge mcp.json safely: neither jq nor node is available. Install one (e.g. 'brew install jq') and re-run."
321
- fi
322
-
323
- printf '%s\n' "$merged" > "$MCP_JSON"
324
- ok "Merged the 'chorus' server into $MCP_JSON (other servers preserved)"
325
-
326
- # ---------- epilogue ----------
327
- hdr "Done."
328
- if [ "$SCOPE" = "workspace" ]; then
329
- scope_note="this project ($KIRO_DIR)"
330
- else
331
- scope_note="every directory (global $KIRO_DIR)"
332
- fi
333
- cat <<NEXT
334
-
335
- The Chorus plugin is installed for ${scope_note}.
336
-
337
- Make sure CHORUS_URL and CHORUS_API_KEY stay exported in your shell (Kiro
338
- reads \${env:CHORUS_API_KEY} at runtime — add them to ~/.bashrc / ~/.zshrc):
339
-
340
- ${BOLD}export CHORUS_URL="${ASSET_BASE}"${RESET}
341
- ${BOLD}export CHORUS_API_KEY="cho_..."${RESET}
342
-
343
- Then, in ${BOLD}${KIRO_BIN}${RESET}:
344
-
345
- * Type ${BOLD}/chorus-idea${RESET} (or /chorus-proposal, /chorus-develop, /chorus-yolo,
346
- /chorus-review, /chorus-quick-dev, ...) to activate a workflow skill.
347
- * Launch the full-automation main agent with session hooks + reviewer
348
- subagents: ${BOLD}${KIRO_BIN} --agent chorus${RESET}
18
+ BOLD=$'\033[1m'; YELLOW=$'\033[33m'; RESET=$'\033[0m'
19
+ INSTALL_CMD="npm install -g @chorus-aidlc/chorus@0.17.0"
20
+ INIT_CMD="chorus agents add"
349
21
 
350
- Live in-Kiro activation is your manual verification step — see docs/CONNECT_KIRO.md.
351
- To change your API key or URL later, just re-run this installer.
22
+ printf "${YELLOW}!${RESET} install-kiro.sh is deprecated and installs nothing.\n" >&2
23
+ printf " Chorus setup is now: ${BOLD}%s${RESET} then ${BOLD}%s${RESET}\n" "$INSTALL_CMD" "$INIT_CMD" >&2
352
24
 
353
- NEXT
25
+ # This stub installs nothing. Print the exact commands and exit non-zero so
26
+ # both interactive users and automation that piped the old installer notice
27
+ # they must install the Chorus CLI globally, then run `chorus agents add`.
28
+ printf "\n Run these to set up Chorus:\n\n %s\n %s\n\n" "$INSTALL_CMD" "$INIT_CMD" >&2
29
+ exit 1
@@ -1,284 +1,29 @@
1
1
  #!/usr/bin/env bash
2
- # Chorus + OpenCode one-shot plugin installer
2
+ # Chorus + OpenCode installer DEPRECATED.
3
3
  #
4
- # Usage:
5
- # curl -fsSL https://<your-chorus>/install-opencode.sh | bash
4
+ # Chorus setup is now a global install plus a single command that configures
5
+ # every supported agent (claude / codex / opencode / kiro / openclaw / dsh):
6
6
  #
7
- # What this does (idempotent, safe to re-run):
8
- # 1. Verifies `opencode` CLI is installed.
9
- # 2. Adds "opencode-chorus" to the `plugin` array in
10
- # ~/.config/opencode/opencode.json. Creates the file if missing.
11
- # Preserves any existing plugins.
12
- # 3. Sets file permissions to 600.
7
+ # npm install -g @chorus-aidlc/chorus@0.17.0
8
+ # chorus agents add
13
9
  #
14
- # What this does NOT do:
15
- # - Write to ~/.bashrc / ~/.zshrc. You must export CHORUS_URL and
16
- # CHORUS_API_KEY yourself before launching opencode (the plugin reads
17
- # process.env on startup).
18
- # - Invoke jq / node / python. Pure POSIX awk/sed/grep only.
10
+ # This script is still fetched via curl for backward compatibility, but it no
11
+ # longer installs anything itself it just points you at `chorus agents add`.
12
+ #
13
+ # Bash 3.2 compatible (macOS /bin/bash): no case-conversion parameter expansion,
14
+ # no associative arrays.
19
15
 
20
16
  set -euo pipefail
21
17
 
22
- # ---------- cosmetics ----------
23
- BOLD=$'\033[1m'; DIM=$'\033[2m'; GREEN=$'\033[32m'; YELLOW=$'\033[33m'; RED=$'\033[31m'; RESET=$'\033[0m'
24
- ok() { printf "${GREEN}\xe2\x9c\x93${RESET} %s\n" "$*"; }
25
- warn() { printf "${YELLOW}!${RESET} %s\n" "$*" >&2; }
26
- die() { printf "${RED}\xe2\x9c\x97${RESET} %s\n" "$*" >&2; exit 1; }
27
- hdr() { printf "\n${BOLD}%s${RESET}\n" "$*"; }
28
-
29
- # ---------- config ----------
30
- PLUGIN_NAME="opencode-chorus"
31
- CONFIG_DIR="${OPENCODE_CONFIG_DIR:-$HOME/.config/opencode}"
32
- CONFIG_FILE="$CONFIG_DIR/opencode.json"
33
- BACKUP_FILE="$CONFIG_FILE.chorus-bak"
34
-
35
- # ---------- step 1: check opencode ----------
36
- hdr "1/3 Checking OpenCode CLI"
37
- if command -v opencode >/dev/null 2>&1; then
38
- ok "Found $(opencode --version 2>/dev/null | head -1)"
39
- else
40
- warn "opencode not found in PATH — install it first: https://opencode.ai/docs/"
41
- warn "Proceeding to write the config anyway. OpenCode will pick it up on install."
42
- fi
43
-
44
- # ---------- step 2: ensure config dir ----------
45
- hdr "2/3 Updating $CONFIG_FILE"
46
- mkdir -p "$CONFIG_DIR"
47
-
48
- # Helper: print the manual instructions and exit 0 (non-fatal).
49
- print_manual_hint() {
50
- warn "Could not automatically update $CONFIG_FILE."
51
- warn "Please add \"$PLUGIN_NAME\" to the \"plugin\" array manually:"
52
- cat >&2 <<HINT
53
-
54
- {
55
- "\$schema": "https://opencode.ai/config.json",
56
- "plugin": ["$PLUGIN_NAME"${EXISTING_PLUGIN_HINT:-}]
57
- ...
58
- }
59
-
60
- HINT
61
- exit 0
62
- }
63
-
64
- # ---------- Case A: file does not exist ----------
65
- if [ ! -f "$CONFIG_FILE" ]; then
66
- cat > "$CONFIG_FILE" <<JSON
67
- {
68
- "\$schema": "https://opencode.ai/config.json",
69
- "plugin": ["$PLUGIN_NAME"]
70
- }
71
- JSON
72
- chmod 600 "$CONFIG_FILE"
73
- ok "Created $CONFIG_FILE with $PLUGIN_NAME"
74
- else
75
- # File exists — back it up once.
76
- if [ ! -f "$BACKUP_FILE" ]; then
77
- cp "$CONFIG_FILE" "$BACKUP_FILE"
78
- chmod 600 "$BACKUP_FILE"
79
- ok "Backed up original config to $BACKUP_FILE"
80
- fi
81
-
82
- # Reject JSONC (comments). Presence of // or /* strongly suggests the file
83
- # is hand-edited JSONC; our line-based awk would mangle it. Bail cleanly.
84
- if grep -qE '^[[:space:]]*//|/\*' "$CONFIG_FILE"; then
85
- warn "Detected // or /* in $CONFIG_FILE — looks like JSONC with comments."
86
- print_manual_hint
87
- fi
88
-
89
- # Case C1: plugin array already contains opencode-chorus → no-op.
90
- # Scope the check to the "plugin" array itself: a top-level occurrence of
91
- # "opencode-chorus" outside that array (e.g. in a "lastInstalled" field)
92
- # must not trigger the no-op shortcut.
93
- plugin_contains_self() {
94
- awk -v plugin="$PLUGIN_NAME" '
95
- # Track whether we are currently inside the first "plugin" array.
96
- # State machine:
97
- # 0 = before the plugin key
98
- # 1 = inside the plugin array (between its [ and matching ])
99
- BEGIN { state = 0 }
100
- state == 0 {
101
- # Is the "plugin" key on this line?
102
- if (match($0, /"plugin"[[:space:]]*:[[:space:]]*\[/)) {
103
- # Consume the rest of the line starting at the [
104
- rest = substr($0, RSTART + RLENGTH - 1)
105
- state = 1
106
- # Fall through to state == 1 handling for this rest.
107
- $0 = rest
108
- } else {
109
- next
110
- }
111
- }
112
- state == 1 {
113
- # Look for the closing ] on this line (naive — good enough for
114
- # standard JSON because plugin entries are plain strings).
115
- close_pos = index($0, "]")
116
- if (close_pos > 0) {
117
- chunk = substr($0, 1, close_pos - 1)
118
- } else {
119
- chunk = $0
120
- }
121
- # Check for the quoted token inside the array chunk only.
122
- if (index(chunk, "\"" plugin "\"") > 0) {
123
- print "yes"
124
- exit 0
125
- }
126
- if (close_pos > 0) exit 0
127
- }
128
- ' "$CONFIG_FILE"
129
- }
130
-
131
- if [ "$(plugin_contains_self)" = "yes" ]; then
132
- ok "$PLUGIN_NAME already present in $CONFIG_FILE — nothing to do"
133
- else
134
- # Decide: Case B (no plugin key) vs Case C2 (plugin key exists without this plugin).
135
- if grep -qE '"plugin"[[:space:]]*:' "$CONFIG_FILE"; then
136
- # Case C2: insert into existing plugin array.
137
- # Strategy: find the first "plugin" key, locate its array bracket pair,
138
- # insert "opencode-chorus" before the closing ].
139
- #
140
- # Only handle the common cases where the array is on a single line or
141
- # a multi-line array that has one entry per line. Otherwise bail to hint.
142
- tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-opencode.XXXXXX")"
143
- if awk -v plugin="$PLUGIN_NAME" '
144
- BEGIN { done = 0 }
145
- # Single-line empty array: "plugin": []
146
- !done && /"plugin"[[:space:]]*:[[:space:]]*\[[[:space:]]*\]/ {
147
- sub(/\[[[:space:]]*\]/, "[\"" plugin "\"]")
148
- done = 1
149
- print
150
- next
151
- }
152
- # Single-line non-empty array: "plugin": [ "foo", "bar" ]
153
- !done && match($0, /"plugin"[[:space:]]*:[[:space:]]*\[[^\]]*\]/) {
154
- line = $0
155
- pre = substr(line, 1, RSTART - 1)
156
- match_text = substr(line, RSTART, RLENGTH)
157
- post = substr(line, RSTART + RLENGTH)
158
- # Insert before the closing ]
159
- sub(/\][[:space:]]*$/, ", \"" plugin "\"]", match_text)
160
- # If the match still ends in ] (no trailing whitespace stripped), fall through
161
- print pre match_text post
162
- done = 1
163
- next
164
- }
165
- # Multi-line array opener: "plugin": [ (and not on same line closer)
166
- !done && /"plugin"[[:space:]]*:[[:space:]]*\[[[:space:]]*$/ {
167
- print
168
- getline nextline
169
- # Empty multi-line array: next line is just ]
170
- if (nextline ~ /^[[:space:]]*\][[:space:]]*,?[[:space:]]*$/) {
171
- print " \"" plugin "\""
172
- print nextline
173
- done = 1
174
- next
175
- }
176
- # Non-empty multi-line: emit entries verbatim until we hit the ]
177
- buffer[++bn] = nextline
178
- while ((getline nextline) > 0) {
179
- if (nextline ~ /^[[:space:]]*\][[:space:]]*,?[[:space:]]*$/) {
180
- # Last existing entry may not have trailing comma; add one.
181
- last = buffer[bn]
182
- if (last !~ /,[[:space:]]*$/) {
183
- sub(/[[:space:]]*$/, ",", buffer[bn])
184
- }
185
- for (i = 1; i <= bn; i++) print buffer[i]
186
- # Insert new entry before the closing ]
187
- # Determine indentation from first buffered entry.
188
- match(buffer[1], /^[[:space:]]*/)
189
- indent = substr(buffer[1], 1, RLENGTH)
190
- print indent "\"" plugin "\""
191
- print nextline
192
- done = 1
193
- bn = 0
194
- break
195
- }
196
- buffer[++bn] = nextline
197
- }
198
- next
199
- }
200
- { print }
201
- END {
202
- if (!done) exit 2
203
- }
204
- ' "$CONFIG_FILE" > "$tmp"; then
205
- mv "$tmp" "$CONFIG_FILE"
206
- chmod 600 "$CONFIG_FILE"
207
- ok "Added $PLUGIN_NAME to existing \"plugin\" array"
208
- else
209
- rm -f "$tmp"
210
- warn "The \"plugin\" key exists but I could not safely determine where to insert the new entry."
211
- EXISTING_PLUGIN_HINT=", ...your existing entries..."
212
- print_manual_hint
213
- fi
214
- else
215
- # Case B: no plugin key in file → inject it.
216
- # We look for the first top-level "{" then insert `"plugin": [...]` on the next line.
217
- # Safer: look for the first line containing just "{" optionally with whitespace.
218
- tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-opencode.XXXXXX")"
219
- if awk -v plugin="$PLUGIN_NAME" '
220
- BEGIN { inserted = 0 }
221
- !inserted && /^[[:space:]]*\{[[:space:]]*$/ {
222
- print
223
- print " \"plugin\": [\"" plugin "\"],"
224
- inserted = 1
225
- next
226
- }
227
- { print }
228
- END { if (!inserted) exit 2 }
229
- ' "$CONFIG_FILE" > "$tmp"; then
230
- mv "$tmp" "$CONFIG_FILE"
231
- chmod 600 "$CONFIG_FILE"
232
- ok "Added \"plugin\" field with $PLUGIN_NAME to $CONFIG_FILE"
233
- else
234
- rm -f "$tmp"
235
- warn "Could not find a line with just \"{\" to inject the plugin array."
236
- print_manual_hint
237
- fi
238
- fi
239
- fi
240
- fi
241
-
242
- # ---------- step 3: reminders ----------
243
- hdr "3/3 Final reminders"
244
-
245
- # Environment check — read-only warning, don't export.
246
- missing_env=""
247
- if [ -z "${CHORUS_URL:-}" ]; then
248
- missing_env="$missing_env CHORUS_URL"
249
- fi
250
- if [ -z "${CHORUS_API_KEY:-}" ]; then
251
- missing_env="$missing_env CHORUS_API_KEY"
252
- fi
253
-
254
- if [ -n "$missing_env" ]; then
255
- warn "The following environment variables are not set in this shell:$missing_env"
256
- warn "The plugin reads them on OpenCode startup. Please export them in your shell rc:"
257
- cat >&2 <<'HINT'
258
-
259
- export CHORUS_URL="https://<your-chorus-instance>"
260
- export CHORUS_API_KEY="cho_..."
261
-
262
- HINT
263
- warn "Then re-source your shell rc, or launch opencode from a shell where they are exported."
264
- else
265
- ok "CHORUS_URL and CHORUS_API_KEY are set in this shell"
266
- fi
267
-
268
- hdr "Done."
269
- cat <<'NEXT'
270
- Start OpenCode — Bun will fetch opencode-chorus on first launch:
271
-
272
- opencode
273
-
274
- Then in OpenCode, ask the agent:
275
-
276
- check in to chorus
277
-
278
- If the plugin fails to load, clear the package cache and retry:
18
+ BOLD=$'\033[1m'; YELLOW=$'\033[33m'; RESET=$'\033[0m'
19
+ INSTALL_CMD="npm install -g @chorus-aidlc/chorus@0.17.0"
20
+ INIT_CMD="chorus agents add"
279
21
 
280
- rm -rf ~/.cache/opencode/packages/opencode-chorus@latest
22
+ printf "${YELLOW}!${RESET} install-opencode.sh is deprecated and installs nothing.\n" >&2
23
+ printf " Chorus setup is now: ${BOLD}%s${RESET} then ${BOLD}%s${RESET}\n" "$INSTALL_CMD" "$INIT_CMD" >&2
281
24
 
282
- To roll back this change:
283
- NEXT
284
- printf " mv %s %s\n\n" "$BACKUP_FILE" "$CONFIG_FILE"
25
+ # This stub installs nothing. Print the exact commands and exit non-zero so
26
+ # both interactive users and automation that piped the old installer notice
27
+ # they must install the Chorus CLI globally, then run `chorus agents add`.
28
+ printf "\n Run these to set up Chorus:\n\n %s\n %s\n\n" "$INSTALL_CMD" "$INIT_CMD" >&2
29
+ exit 1