@chorus-aidlc/chorus 0.9.2 → 0.9.4

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 (299) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +321 -302
  3. package/.next/standalone/.next/app-path-routes-manifest.json +31 -31
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +24 -24
  6. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +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 +3 -3
  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 +1 -1
  45. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  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 +1 -1
  49. package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
  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 +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
  53. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/admin.html +1 -1
  55. package/.next/standalone/.next/server/app/admin.rsc +2 -2
  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/agents/[uuid]/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  62. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/auth/session/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_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  83. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  86. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  92. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  96. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/mcp/route.js +3 -3
  98. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  115. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  120. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  123. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  126. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  128. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  130. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  134. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  137. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  145. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  147. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  158. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  161. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  164. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  165. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  167. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  170. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  171. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/index.html +1 -1
  173. package/.next/standalone/.next/server/app/index.rsc +2 -2
  174. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  176. package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
  177. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  179. package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
  180. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/login/pick-workspace.html +1 -1
  183. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
  184. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
  186. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +2 -2
  187. package/.next/standalone/.next/server/app/login.html +1 -1
  188. package/.next/standalone/.next/server/app/login.rsc +2 -2
  189. package/.next/standalone/.next/server/app/onboarding/page.js +2 -32
  190. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  191. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  193. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  194. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/projects.html +1 -1
  196. package/.next/standalone/.next/server/app/projects.rsc +3 -3
  197. package/.next/standalone/.next/server/app/settings.html +1 -1
  198. package/.next/standalone/.next/server/app/settings.rsc +4 -4
  199. package/.next/standalone/.next/server/app-paths-manifest.json +31 -31
  200. package/.next/standalone/.next/server/chunks/1165.js +1 -1
  201. package/.next/standalone/.next/server/chunks/1615.js +31 -0
  202. package/.next/standalone/.next/server/chunks/1871.js +1 -1
  203. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  204. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  205. package/.next/standalone/.next/server/chunks/2990.js +1 -1
  206. package/.next/standalone/.next/server/chunks/5491.js +1 -1
  207. package/.next/standalone/.next/server/chunks/5561.js +7 -0
  208. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  209. package/.next/standalone/.next/server/chunks/{6320.js → 7063.js} +1 -1
  210. package/.next/standalone/.next/server/chunks/7228.js +2 -2
  211. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  212. package/.next/standalone/.next/server/chunks/7578.js +2 -2
  213. package/.next/standalone/.next/server/chunks/896.js +1 -0
  214. package/.next/standalone/.next/server/chunks/920.js +1 -1
  215. package/.next/standalone/.next/server/chunks/937.js +1 -1
  216. package/.next/standalone/.next/server/chunks/9508.js +2 -2
  217. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  218. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  219. package/.next/standalone/.next/server/pages/404.html +1 -1
  220. package/.next/standalone/.next/server/pages/500.html +1 -1
  221. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  222. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  223. package/.next/standalone/.next/static/chunks/16984-8ab5580b8e63a200.js +1 -0
  224. package/.next/standalone/.next/static/chunks/19898-2a3d83a3996794cd.js +1 -0
  225. package/.next/standalone/.next/static/chunks/20051-d9233fd4578d66cc.js +1 -0
  226. package/.next/standalone/.next/static/chunks/35486-592daa5c9fdf701d.js +1 -0
  227. package/.next/standalone/.next/static/chunks/{4860.60152a625f2a714f.js → 4860.1bebb2a898b170f6.js} +1 -1
  228. package/.next/standalone/.next/static/chunks/52206-6048525f57a21502.js +1 -0
  229. package/.next/standalone/.next/static/chunks/55469-ed5ff019ff71ef59.js +1 -0
  230. package/.next/standalone/.next/static/chunks/59296-4fa84fe82e2c7789.js +1 -0
  231. package/.next/standalone/.next/static/chunks/66205-8d7eae6a0f0a032d.js +1 -0
  232. package/.next/standalone/.next/static/chunks/{86944-95f8c67fb7a51911.js → 70093-0ff6fd59445b5cb9.js} +1 -1
  233. package/.next/standalone/.next/static/chunks/94655-1c75e0590a66215e.js +1 -0
  234. package/.next/standalone/.next/static/chunks/95627-8d9f6d2d88f7a641.js +1 -0
  235. package/.next/standalone/.next/static/chunks/{99373.4d93aaaf56fe7819.js → 99373.13c8ac5da1ddabe9.js} +1 -1
  236. package/.next/standalone/.next/static/chunks/app/(dashboard)/{layout-dd7eb66bb4ffd252.js → layout-b55a8d6d9bd27276.js} +1 -1
  237. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-6d92b9867caf0fe1.js → page-fd10bca891f0f73a.js} +1 -1
  238. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/{page-f8f17f58cf779d37.js → page-2e000a7010d1e9ea.js} +1 -1
  239. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-75e42d130404ca2b.js +1 -0
  240. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page-6a38c21b164cdc07.js +1 -0
  241. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/page-48c840cb3011bf97.js +1 -0
  242. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-7ec535fac7bbc75d.js +1 -0
  243. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8f91ed174c14d5f0.js +1 -0
  244. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-f6814f25bbacdbea.js +1 -0
  245. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-92e8980da0d98d48.js +1 -0
  246. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/{page-db79d84fa8ca8cbf.js → page-ab87cbb18d0ee538.js} +1 -1
  247. package/.next/standalone/.next/static/chunks/app/onboarding/page-922a196db6eb2385.js +1 -0
  248. package/.next/standalone/.next/static/chunks/{webpack-8e0df5e10bc6b98f.js → webpack-4a8c75a0d40c2106.js} +1 -1
  249. package/.next/standalone/.next/static/css/bfe962487ee66da7.css +1 -0
  250. package/.next/standalone/package.json +1 -1
  251. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  252. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +7 -7
  253. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +1 -1
  254. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
  255. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +32 -33
  256. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  257. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +13 -4
  258. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +9 -4
  259. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  260. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +9 -6
  261. package/.next/standalone/public/install-codex.sh +200 -90
  262. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +7 -7
  263. package/.next/standalone/public/skill/chorus/SKILL.md +55 -3
  264. package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -2
  265. package/.next/standalone/public/skill/idea-chorus/SKILL.md +32 -33
  266. package/.next/standalone/public/skill/package.json +21 -5
  267. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +13 -4
  268. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +198 -0
  269. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +9 -4
  270. package/.next/standalone/public/skill/review-chorus/SKILL.md +13 -3
  271. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +219 -0
  272. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +531 -0
  273. package/.next/standalone/public/test-install-codex.sh +4 -0
  274. package/package.json +1 -1
  275. package/prisma/migrations/20260604130604_add_elaboration_round_is_appended/migration.sql +2 -0
  276. package/prisma/schema.prisma +2 -1
  277. package/.next/standalone/.next/server/chunks/1002.js +0 -1
  278. package/.next/standalone/.next/server/chunks/1854.js +0 -7
  279. package/.next/standalone/.next/server/chunks/6878.js +0 -1
  280. package/.next/standalone/.next/static/chunks/19898-7e07c69b635e3662.js +0 -1
  281. package/.next/standalone/.next/static/chunks/29660-edf78f7a4c65f416.js +0 -1
  282. package/.next/standalone/.next/static/chunks/34775-387b9a9967a35ccb.js +0 -1
  283. package/.next/standalone/.next/static/chunks/35486-1978488574385a45.js +0 -1
  284. package/.next/standalone/.next/static/chunks/4457-b86052b2e954e357.js +0 -1
  285. package/.next/standalone/.next/static/chunks/52206-51a89715ca643e44.js +0 -1
  286. package/.next/standalone/.next/static/chunks/53298-82b9c818cd70686d.js +0 -1
  287. package/.next/standalone/.next/static/chunks/65642-e75efce9967747bc.js +0 -1
  288. package/.next/standalone/.next/static/chunks/75444-976ac95fd66e7988.js +0 -1
  289. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-83e2e42b27132b41.js +0 -1
  290. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page-55148db4b28ee5f5.js +0 -1
  291. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/page-556c181809c9e4f6.js +0 -1
  292. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-656797940b35b23c.js +0 -1
  293. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-af88aeaedc3f4ae5.js +0 -1
  294. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-6524ab00e6cdf59a.js +0 -1
  295. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-7b0bb5f037cd320b.js +0 -1
  296. package/.next/standalone/.next/static/chunks/app/onboarding/page-7a00689ba561c111.js +0 -1
  297. package/.next/standalone/.next/static/css/ea3f196c7951f8d6.css +0 -1
  298. /package/.next/standalone/.next/static/{-kClYg0a7zvFcgkw_LnG7 → YJZurE1onX9K-RDNIplc5}/_buildManifest.js +0 -0
  299. /package/.next/standalone/.next/static/{-kClYg0a7zvFcgkw_LnG7 → YJZurE1onX9K-RDNIplc5}/_ssgManifest.js +0 -0
@@ -4,7 +4,7 @@ description: Full-auto AI-DLC pipeline — from prompt to done. Automates the en
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.9.1"
7
+ version: "0.9.4"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -138,6 +138,8 @@ chorus_claim_idea({ ideaUuid: "<idea-uuid>" })
138
138
 
139
139
  In /yolo mode, the agent generates elaboration questions and answers them itself -- no `AskUserQuestion` calls. This preserves an audit trail without interrupting the user.
140
140
 
141
+ > **Self-elaboration is still a loop.** If answering your own questions surfaces a **new question, contradiction, or gap**, loop back to `chorus_pm_start_elaboration` for another self-answered round before resolving — don't force a resolve over unresolved ambiguity. There is no human gate in YOLO, so the loop exits on **your** judgment that nothing material is left open (round cap 10). Steps 1–2 are one round; repeat them as needed, then resolve once in Step 3.
142
+
141
143
  1. **Generate and submit questions:**
142
144
  ```
143
145
  chorus_pm_start_elaboration({
@@ -170,15 +172,16 @@ In /yolo mode, the agent generates elaboration questions and answers them itself
170
172
  })
171
173
  ```
172
174
 
173
- 3. **Validate** (no issues in self-mode):
175
+ 3. **Resolve** — in YOLO mode the agent resolves elaboration **autonomously, with no human-confirmation gate** (the human-confirmation requirement that applies to the interactive `/idea` flow is explicitly waived under `/yolo` automation):
176
+
174
177
  ```
175
178
  chorus_pm_validate_elaboration({
176
- ideaUuid: "<idea-uuid>",
177
- roundUuid: "<round-uuid>",
178
- issues: []
179
+ ideaUuid: "<idea-uuid>"
179
180
  })
180
181
  ```
181
182
 
183
+ > `chorus_pm_validate_elaboration` requires `idea:admin`. `/yolo` already mandates an Admin-preset key in Prerequisites, so this is satisfied. To open another self-elaboration round instead of resolving, just call `chorus_pm_start_elaboration` again.
184
+
182
185
  #### Step 1.4: Create Proposal
183
186
 
184
187
  1. **Detect OpenSpec mode.** Load the `openspec-aware` skill at `.claude/skills/openspec-aware/SKILL.md` and run its §1 detection contract. The result determines how the rest of this step authors documents:
@@ -224,7 +227,7 @@ In /yolo mode, the agent generates elaboration questions and answers them itself
224
227
  })
225
228
  ```
226
229
 
227
- 3. **Add task drafts incrementally** (use returned `draftUuid` for dependency chaining):
230
+ 3. **Add task drafts incrementally** (use returned `draftUuid` for dependency chaining). `acceptanceCriteriaItems` is **required** on every draft — at least one non-blank criterion, or the call is rejected:
228
231
  ```
229
232
  # First task
230
233
  result1 = chorus_pm_add_task_draft({
@@ -14,8 +14,8 @@
14
14
  # [plugins."chorus@chorus-plugins"] enabled = true into ~/.codex/config.toml,
15
15
  # so Codex auto-enables the plugin on first launch (falls back to one-click
16
16
  # `/plugins → Install` if auto-install does not fire).
17
- # 4. Installs a lazy hook wrapper under ~/.codex/hooks/chorus/ so Chorus hooks
18
- # work even before the plugin cache is materialized.
17
+ # 4. Enables Codex lifecycle hooks. Chorus hook scripts are bundled in the
18
+ # plugin manifest and loaded by Codex after the plugin is installed/enabled.
19
19
 
20
20
  set -euo pipefail
21
21
 
@@ -35,6 +35,158 @@ CONFIG_TOML="$CODEX_HOME/config.toml"
35
35
 
36
36
  is_tty() { [ -t 0 ] && [ -t 1 ]; }
37
37
 
38
+ clean_legacy_chorus_hooks_json() {
39
+ local hooks_json="$1"
40
+ local tmp backup removed
41
+
42
+ tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-hooks.XXXXXX")"
43
+ backup="${hooks_json}.chorus-legacy-bak"
44
+ cp "$hooks_json" "$backup"
45
+
46
+ if command -v node >/dev/null 2>&1; then
47
+ removed="$(node - "$hooks_json" "$tmp" <<'NODE'
48
+ const fs = require("fs");
49
+ const input = process.argv[2];
50
+ const output = process.argv[3];
51
+ let removed = 0;
52
+
53
+ function isLegacyCommand(value) {
54
+ return typeof value === "string" && value.indexOf("hooks/chorus/run-hook.sh") !== -1;
55
+ }
56
+
57
+ function clean(value, parentKey) {
58
+ if (Array.isArray(value)) {
59
+ return value
60
+ .map((item) => clean(item, parentKey))
61
+ .filter((item) => item !== undefined);
62
+ }
63
+
64
+ if (value && typeof value === "object") {
65
+ if (isLegacyCommand(value.command)) {
66
+ removed += 1;
67
+ return undefined;
68
+ }
69
+
70
+ const hadHooksArray = Array.isArray(value.hooks);
71
+ const out = {};
72
+ for (const [key, child] of Object.entries(value)) {
73
+ const cleaned = clean(child, key);
74
+ if (cleaned === undefined) continue;
75
+ if (Array.isArray(cleaned) && cleaned.length === 0 && (key === "hooks" || parentKey === "hooks")) continue;
76
+ out[key] = cleaned;
77
+ }
78
+
79
+ if (hadHooksArray && (!Array.isArray(out.hooks) || out.hooks.length === 0)) {
80
+ return undefined;
81
+ }
82
+ return out;
83
+ }
84
+
85
+ return value;
86
+ }
87
+
88
+ let data = JSON.parse(fs.readFileSync(input, "utf8"));
89
+ data = clean(data, "") || {};
90
+ if (data.hooks && typeof data.hooks === "object" && !Array.isArray(data.hooks)) {
91
+ for (const key of Object.keys(data.hooks)) {
92
+ if (Array.isArray(data.hooks[key]) && data.hooks[key].length === 0) {
93
+ delete data.hooks[key];
94
+ }
95
+ }
96
+ if (Object.keys(data.hooks).length === 0) {
97
+ delete data.hooks;
98
+ }
99
+ }
100
+ fs.writeFileSync(output, JSON.stringify(data, null, 2) + "\n");
101
+ process.stdout.write(String(removed));
102
+ NODE
103
+ )" || {
104
+ rm -f "$tmp"
105
+ warn "Could not parse $hooks_json with node; leaving legacy hooks unchanged."
106
+ warn "Backup created at $backup"
107
+ return 1
108
+ }
109
+ elif command -v python3 >/dev/null 2>&1; then
110
+ removed="$(python3 - "$hooks_json" "$tmp" <<'PY'
111
+ import json
112
+ import sys
113
+
114
+ input_path = sys.argv[1]
115
+ output_path = sys.argv[2]
116
+ removed = 0
117
+
118
+ def is_legacy_command(value):
119
+ return isinstance(value, str) and "hooks/chorus/run-hook.sh" in value
120
+
121
+ def clean(value, parent_key=""):
122
+ global removed
123
+ if isinstance(value, list):
124
+ return [item for item in (clean(child, parent_key) for child in value) if item is not None]
125
+ if isinstance(value, dict):
126
+ if is_legacy_command(value.get("command")):
127
+ removed += 1
128
+ return None
129
+ had_hooks_array = isinstance(value.get("hooks"), list)
130
+ out = {}
131
+ for key, child in value.items():
132
+ cleaned = clean(child, key)
133
+ if cleaned is None:
134
+ continue
135
+ if isinstance(cleaned, list) and not cleaned and (key == "hooks" or parent_key == "hooks"):
136
+ continue
137
+ out[key] = cleaned
138
+ if had_hooks_array and (not isinstance(out.get("hooks"), list) or not out["hooks"]):
139
+ return None
140
+ return out
141
+ return value
142
+
143
+ with open(input_path, "r", encoding="utf-8") as f:
144
+ data = json.load(f)
145
+
146
+ data = clean(data) or {}
147
+ if isinstance(data.get("hooks"), dict):
148
+ for key in list(data["hooks"].keys()):
149
+ if isinstance(data["hooks"][key], list) and not data["hooks"][key]:
150
+ del data["hooks"][key]
151
+ if not data["hooks"]:
152
+ del data["hooks"]
153
+
154
+ with open(output_path, "w", encoding="utf-8") as f:
155
+ json.dump(data, f, indent=2)
156
+ f.write("\n")
157
+
158
+ print(removed, end="")
159
+ PY
160
+ )" || {
161
+ rm -f "$tmp"
162
+ warn "Could not parse $hooks_json with python3; leaving legacy hooks unchanged."
163
+ warn "Backup created at $backup"
164
+ return 1
165
+ }
166
+ else
167
+ rm -f "$tmp"
168
+ warn "Cannot auto-clean $hooks_json because neither node nor python3 is available."
169
+ warn "Backup created at $backup"
170
+ return 1
171
+ fi
172
+
173
+ if [ "${removed:-0}" = "0" ]; then
174
+ rm -f "$tmp"
175
+ warn "No legacy Chorus hook entries were removed from $hooks_json."
176
+ warn "Backup created at $backup"
177
+ return 1
178
+ fi
179
+
180
+ if grep -q '[^[:space:]{}]' "$tmp" 2>/dev/null; then
181
+ mv "$tmp" "$hooks_json"
182
+ ok "Removed $removed legacy Chorus hook entr$( [ "$removed" = "1" ] && printf 'y' || printf 'ies' ) from $hooks_json"
183
+ else
184
+ rm -f "$tmp" "$hooks_json"
185
+ ok "Removed $removed legacy Chorus hook entr$( [ "$removed" = "1" ] && printf 'y' || printf 'ies' ) and deleted now-empty $hooks_json"
186
+ fi
187
+ ok "Backup saved at $backup"
188
+ }
189
+
38
190
  # If piped through `curl | bash`, stdin is the script body. Re-open from /dev/tty
39
191
  # so interactive prompts still work — but only if a real TTY is available AND we
40
192
  # actually need to prompt for input. Both CHORUS_URL and CHORUS_API_KEY being set
@@ -181,104 +333,61 @@ TOML
181
333
 
182
334
  ok "Wrote [mcp_servers.chorus] and [plugins.\"chorus@chorus-plugins\"] → ${CONFIG_TOML}"
183
335
 
184
- # ---------- step 5: install hooks ----------
185
- hdr "5/5 Installing Chorus hooks"
336
+ # ---------- step 5: enable hooks ----------
337
+ hdr "5/5 Enabling Codex lifecycle hooks"
186
338
 
187
- # Install a tiny wrapper that lazily resolves the newest plugin cache at
188
- # hook-run time. This lets us write hooks.json BEFORE `/plugins → Install`
189
- # has materialized the plugin cache first-run UX becomes truly one-shot.
190
- WRAPPER_DIR="$CODEX_HOME/hooks/chorus"
191
- WRAPPER="$WRAPPER_DIR/run-hook.sh"
192
- mkdir -p "$WRAPPER_DIR"
193
- cat > "$WRAPPER" <<'WRAP'
194
- #!/usr/bin/env bash
195
- # Chorus hook wrapper (installed by public/install-codex.sh).
196
- # Resolves the newest installed Chorus plugin version at runtime and execs
197
- # the named hook script from its hooks/ directory. Exits 0 (no-op) if the
198
- # plugin has not been installed yet, so Codex sessions still start cleanly.
199
- set -eu
200
- HOOK_NAME="${1:-}"
201
- if [ -z "$HOOK_NAME" ]; then
202
- echo '{}' ; exit 0
203
- fi
204
- shift
205
- CODEX_HOME_RESOLVED="${CODEX_HOME:-$HOME/.codex}"
206
- PLUGIN_ROOT="$CODEX_HOME_RESOLVED/plugins/cache/chorus-plugins/chorus"
207
- if [ ! -d "$PLUGIN_ROOT" ]; then
208
- echo '{}' ; exit 0
209
- fi
210
- VER="$(ls -1 "$PLUGIN_ROOT" 2>/dev/null | sort -V | tail -1)"
211
- if [ -z "$VER" ]; then
212
- echo '{}' ; exit 0
213
- fi
214
- SCRIPT="$PLUGIN_ROOT/$VER/hooks/$HOOK_NAME"
215
- if [ ! -x "$SCRIPT" ]; then
216
- if [ -f "$SCRIPT" ]; then
217
- chmod +x "$SCRIPT" 2>/dev/null || true
339
+ HOOKS_JSON="$CODEX_HOME/hooks.json"
340
+ if [ -f "$HOOKS_JSON" ] && grep -q "hooks/chorus/run-hook.sh" "$HOOKS_JSON" 2>/dev/null; then
341
+ warn "Found legacy copied Chorus hook entries in $HOOKS_JSON."
342
+ warn "These can duplicate the plugin-bundled Chorus hooks now loaded by Codex."
343
+ warn "Legacy entries:"
344
+ grep -n "hooks/chorus/run-hook.sh" "$HOOKS_JSON" 2>/dev/null | sed 's/^/ /' >&2 || true
345
+
346
+ if [ -r /dev/tty ] && [ -w /dev/tty ]; then
347
+ printf " Clean legacy Chorus entries from %s now? [y/N]: " "$HOOKS_JSON" > /dev/tty
348
+ read -r clean_legacy_hooks_answer < /dev/tty
349
+ case "$clean_legacy_hooks_answer" in
350
+ y|Y|yes|YES|Yes)
351
+ clean_legacy_chorus_hooks_json "$HOOKS_JSON" || true
352
+ ;;
353
+ *)
354
+ warn "Keeping legacy hooks unchanged. Use /hooks to disable them or remove matching entries manually to avoid duplicates."
355
+ ;;
356
+ esac
218
357
  else
219
- echo '{}' ; exit 0
358
+ warn "No interactive TTY available; keeping legacy hooks unchanged."
359
+ warn "Re-run this installer in a terminal to auto-clean them, or remove matching entries manually."
220
360
  fi
221
361
  fi
222
- exec "$SCRIPT" "$@"
223
- WRAP
224
- chmod +x "$WRAPPER"
225
- ok "Installed hook wrapper → $WRAPPER"
226
362
 
227
- HOOKS_JSON="$CODEX_HOME/hooks.json"
228
- if [ -f "$HOOKS_JSON" ] && ! grep -q "hooks/chorus/run-hook.sh\|chorus-plugins/chorus" "$HOOKS_JSON" 2>/dev/null; then
229
- warn "Found a non-Chorus $HOOKS_JSON not overwriting."
230
- warn " Add Chorus hook entries manually (command = $WRAPPER on-session-start.sh | on-post-submit-proposal.sh | on-post-submit-for-verify.sh)."
231
- else
232
- cat > "$HOOKS_JSON" <<HJSON
233
- {
234
- "hooks": {
235
- "SessionStart": [
236
- {
237
- "matcher": "startup|resume|clear",
238
- "hooks": [
239
- { "type": "command", "command": "$WRAPPER on-session-start.sh", "timeout": 20, "statusMessage": "Chorus: checkin" }
240
- ]
241
- }
242
- ],
243
- "PostToolUse": [
244
- {
245
- "matcher": ".*chorus_pm_submit_proposal",
246
- "hooks": [
247
- { "type": "command", "command": "$WRAPPER on-post-submit-proposal.sh", "timeout": 10 }
248
- ]
249
- },
250
- {
251
- "matcher": ".*chorus_submit_for_verify",
252
- "hooks": [
253
- { "type": "command", "command": "$WRAPPER on-post-submit-for-verify.sh", "timeout": 10 }
254
- ]
255
- }
256
- ]
257
- }
258
- }
259
- HJSON
260
- ok "Wrote $HOOKS_JSON (routing through $WRAPPER)"
261
- fi
262
-
263
- # Enable the codex_hooks feature flag in config.toml (idempotent).
363
+ # Keep the current canonical feature key. `codex_hooks` is a deprecated alias;
364
+ # remove any old hook feature setting from [features] before writing `hooks = true`
365
+ # so reruns do not create duplicate TOML keys.
264
366
  if grep -qE "^\[features\]" "$CONFIG_TOML"; then
265
- if ! grep -qE "^codex_hooks\s*=\s*true" "$CONFIG_TOML"; then
266
- tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-features.XXXXXX")"
267
- awk '
268
- /^\[features\][[:space:]]*$/ { print; print "codex_hooks = true"; inserted=1; next }
269
- { print }
270
- ' "$CONFIG_TOML" > "$tmp" && mv "$tmp" "$CONFIG_TOML"
271
- ok "Added codex_hooks = true under existing [features]"
272
- else
273
- ok "codex_hooks feature flag already enabled"
274
- fi
367
+ tmp="$(mktemp "${TMPDIR:-/tmp}/chorus-features.XXXXXX")"
368
+ awk '
369
+ /^\[features\][[:space:]]*$/ {
370
+ in_features = 1
371
+ print
372
+ print "hooks = true"
373
+ next
374
+ }
375
+ /^\[/ {
376
+ in_features = 0
377
+ }
378
+ in_features && /^[[:space:]]*(hooks|codex_hooks)[[:space:]]*=/ {
379
+ next
380
+ }
381
+ { print }
382
+ ' "$CONFIG_TOML" > "$tmp" && mv "$tmp" "$CONFIG_TOML"
383
+ ok "Set [features] hooks = true"
275
384
  else
276
385
  cat >> "$CONFIG_TOML" <<'TFEAT'
277
386
 
278
387
  [features]
279
- codex_hooks = true
388
+ hooks = true
280
389
  TFEAT
281
- ok "Appended [features] codex_hooks = true"
390
+ ok "Appended [features] hooks = true"
282
391
  fi
283
392
 
284
393
  # ---------- epilogue ----------
@@ -296,7 +405,8 @@ so one manual click is the fallback path).
296
405
 
297
406
  Verify anytime:
298
407
  ${BOLD}codex mcp list${RESET} # 'chorus' row, Auth = 'Bearer token'
299
- ${BOLD}codex features list${RESET} # codex_hooks + plugins both true
408
+ ${BOLD}codex features list${RESET} # hooks + plugins both true
409
+ ${BOLD}/hooks${RESET} # review/trust bundled Chorus hooks after launch
300
410
 
301
411
  Then in Codex type ${BOLD}\$chorus${RESET} (or \$develop, \$review, \$proposal, …) to
302
412
  activate a skill. To change your API key later, just re-run this installer.
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: brainstorm-chorus
3
- description: Optional divergent-then-convergent dialogue for fuzzy ideas. Invoked from the idea skill as a prelude to structured elaboration; produces one ElaborationRound of decision-point Q&A and returns control. Never writes files, never posts comments, never validates elaboration.
3
+ description: Optional divergent-then-convergent dialogue for fuzzy ideas. Invoked from the idea skill as a prelude to structured elaboration; produces one ElaborationRound of decision-point Q&A and returns control. Never writes files, never posts comments, never resolves elaboration.
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.3.1"
7
+ version: "0.9.4"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -13,7 +13,7 @@ metadata:
13
13
 
14
14
  A divergent-then-convergent dialogue cadence for ideas whose direction is still being formed. Compresses the conversation into one `ElaborationRound` of decision-point Q&A — same shape as a structured elaboration round, but the questions, options and answers are synthesized at the end of the conversation rather than asked up front.
15
15
 
16
- This skill is a **producer** of one elaboration round; the **scheduler** decision (validate vs. follow-up) belongs to the calling idea skill.
16
+ This skill is a **producer** of one elaboration round; the **scheduler** decision (resolve vs. follow-up) belongs to the calling idea skill.
17
17
 
18
18
  ---
19
19
 
@@ -32,7 +32,7 @@ Only as a sub-step of the idea skill, only after the user has explicitly opted i
32
32
  5. **No files written.** Do NOT write any markdown, design doc, scratch file, or any other file to disk. The conversation produces an `ElaborationRound` and nothing else on disk.
33
33
  6. **No comments posted.** Do NOT call `chorus_add_comment` from this skill. Comments belong to the idea skill or the user, not to the brainstorm step.
34
34
  7. **No design-doc handoff.** Do NOT invoke `writing-plans`, `writing-skills`, or any skill whose purpose is to produce a design document. The brainstorm output is the synthesized round — there is no separate doc.
35
- 8. **No `validate_elaboration` call.** Do NOT call `chorus_pm_validate_elaboration` from this skill. Whether to validate (resolve elaboration) or follow up (issues + followUpQuestions) is the calling idea skill's decision, not this skill's.
35
+ 8. **No `validate_elaboration` call.** Do NOT call `chorus_pm_validate_elaboration` from this skill. Whether to resolve the elaboration or open a follow-up round (`chorus_pm_start_elaboration` again) is the calling idea skill's decision, not this skill's.
36
36
 
37
37
  ---
38
38
 
@@ -126,8 +126,8 @@ chorus_answer_elaboration({
126
126
 
127
127
  Stop here. Do **NOT** call `chorus_pm_validate_elaboration`. The idea skill's caller now decides:
128
128
 
129
- - If the synthesized round answers cover everything → caller validates with `issues: []`.
130
- - If gaps remain → caller validates with `issues + followUpQuestions` to start a structured Round 2.
129
+ - If the synthesized round answers cover everything → caller obtains human confirmation, then resolves with `chorus_pm_validate_elaboration`.
130
+ - If gaps remain → caller opens a structured Round 2 by calling `chorus_pm_start_elaboration` again.
131
131
 
132
132
  The depth of any follow-up round is the caller's call, not yours.
133
133
 
@@ -160,7 +160,7 @@ Do not do any of the following. Each has a specific failure mode that this skill
160
160
  - **Single-summary `customText` blob.** Compressing the entire conversation into one ElaborationQuestion with a long markdown summary in `customText`. The schema is multi-question for a reason — preserve the decision granularity.
161
161
  - **Transcript-as-comment.** Posting the raw conversation log as a comment on the idea (or anywhere). The synthesized round IS the artifact. Raw transcripts pollute the audit trail with noise.
162
162
  - **File writes.** Writing any markdown, design doc, plan, or scratch file to disk. There is no design doc in this flow. This is a deliberate divergence from the upstream `superpowers/brainstorming` cadence — read the design.md if confused.
163
- - **`validate_elaboration` calls.** Closing the elaboration phase from this skill. The lifecycle decision belongs to the idea skill. Calling validate here strips the caller of its scheduler role.
163
+ - **`validate_elaboration` calls.** Closing the elaboration phase from this skill. The lifecycle decision belongs to the idea skill. Calling it here strips the caller of its scheduler role.
164
164
  - **`writing-plans` / design-doc handoff.** Invoking any skill that produces an implementation plan or design document. The Chorus pipeline already has Proposal → Document Drafts → Task Drafts for that — the brainstorm output feeds them through ElaborationRound, not through external doc skills.
165
165
  - **Length-2 binary "yes / no" framings.** Reducing every decision to "do this thing — yes / no". Almost always the genuine alternatives are 3+ approaches with meaningfully different tradeoffs. Length-2 framings often mean the divergent phase ended too early.
166
166
  - **Asking multiple questions in one `AskUserQuestion`.** The cadence is one question per turn during divergence, then one final convergence question with 2-3 options. Combining unrelated questions is a sign you are rushing.
@@ -4,7 +4,7 @@ description: Chorus AI Agent collaboration platform — overview, common tools,
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.3.1"
7
+ version: "0.9.3"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -30,18 +30,28 @@ Skill files are hosted under the `<BASE_URL>/skill/` path.
30
30
  | **proposal-chorus** | Proposal creation, drafts, DAG, submission | `/skill/proposal-chorus/SKILL.md` |
31
31
  | **develop-chorus** | Task execution workflow | `/skill/develop-chorus/SKILL.md` |
32
32
  | **review-chorus** | Proposal approval, task verification, governance | `/skill/review-chorus/SKILL.md` |
33
+ | **quick-dev-chorus** | Lightweight direct-to-task workflow (skips Idea→Proposal) | `/skill/quick-dev-chorus/SKILL.md` |
34
+ | **brainstorm-chorus** | Optional divergent→convergent dialogue, prelude to elaboration | `/skill/brainstorm-chorus/SKILL.md` |
35
+ | **proposal-reviewer-chorus** | Read-only adversarial proposal reviewer (posts VERDICT) | `/skill/proposal-reviewer-chorus/SKILL.md` |
36
+ | **task-reviewer-chorus** | Read-only adversarial task reviewer (posts VERDICT) | `/skill/task-reviewer-chorus/SKILL.md` |
37
+ | **yolo-chorus** | Full-auto AI-DLC pipeline — prompt to done | `/skill/yolo-chorus/SKILL.md` |
33
38
  | **package.json** | Version & download metadata | `/skill/package.json` |
34
39
 
35
40
  ### Install (Claude Code, project-level)
36
41
 
37
42
  ```bash
38
43
  BASE_URL="<BASE_URL>"
39
- mkdir -p .claude/skills/chorus .claude/skills/idea-chorus .claude/skills/proposal-chorus .claude/skills/develop-chorus .claude/skills/review-chorus
44
+ mkdir -p .claude/skills/chorus .claude/skills/idea-chorus .claude/skills/proposal-chorus .claude/skills/develop-chorus .claude/skills/review-chorus .claude/skills/quick-dev-chorus .claude/skills/brainstorm-chorus .claude/skills/proposal-reviewer-chorus .claude/skills/task-reviewer-chorus .claude/skills/yolo-chorus
40
45
  curl -s $BASE_URL/skill/chorus/SKILL.md > .claude/skills/chorus/SKILL.md
41
46
  curl -s $BASE_URL/skill/idea-chorus/SKILL.md > .claude/skills/idea-chorus/SKILL.md
42
47
  curl -s $BASE_URL/skill/proposal-chorus/SKILL.md > .claude/skills/proposal-chorus/SKILL.md
43
48
  curl -s $BASE_URL/skill/develop-chorus/SKILL.md > .claude/skills/develop-chorus/SKILL.md
44
49
  curl -s $BASE_URL/skill/review-chorus/SKILL.md > .claude/skills/review-chorus/SKILL.md
50
+ curl -s $BASE_URL/skill/quick-dev-chorus/SKILL.md > .claude/skills/quick-dev-chorus/SKILL.md
51
+ curl -s $BASE_URL/skill/brainstorm-chorus/SKILL.md > .claude/skills/brainstorm-chorus/SKILL.md
52
+ curl -s $BASE_URL/skill/proposal-reviewer-chorus/SKILL.md > .claude/skills/proposal-reviewer-chorus/SKILL.md
53
+ curl -s $BASE_URL/skill/task-reviewer-chorus/SKILL.md > .claude/skills/task-reviewer-chorus/SKILL.md
54
+ curl -s $BASE_URL/skill/yolo-chorus/SKILL.md > .claude/skills/yolo-chorus/SKILL.md
45
55
  curl -s $BASE_URL/skill/package.json > .claude/skills/chorus/package.json
46
56
  ```
47
57
 
@@ -49,12 +59,17 @@ curl -s $BASE_URL/skill/package.json > .claude/skills/chorus/package.json
49
59
 
50
60
  ```bash
51
61
  BASE_URL="<BASE_URL>"
52
- mkdir -p ~/.moltbot/skills/chorus ~/.moltbot/skills/idea-chorus ~/.moltbot/skills/proposal-chorus ~/.moltbot/skills/develop-chorus ~/.moltbot/skills/review-chorus
62
+ mkdir -p ~/.moltbot/skills/chorus ~/.moltbot/skills/idea-chorus ~/.moltbot/skills/proposal-chorus ~/.moltbot/skills/develop-chorus ~/.moltbot/skills/review-chorus ~/.moltbot/skills/quick-dev-chorus ~/.moltbot/skills/brainstorm-chorus ~/.moltbot/skills/proposal-reviewer-chorus ~/.moltbot/skills/task-reviewer-chorus ~/.moltbot/skills/yolo-chorus
53
63
  curl -s $BASE_URL/skill/chorus/SKILL.md > ~/.moltbot/skills/chorus/SKILL.md
54
64
  curl -s $BASE_URL/skill/idea-chorus/SKILL.md > ~/.moltbot/skills/idea-chorus/SKILL.md
55
65
  curl -s $BASE_URL/skill/proposal-chorus/SKILL.md > ~/.moltbot/skills/proposal-chorus/SKILL.md
56
66
  curl -s $BASE_URL/skill/develop-chorus/SKILL.md > ~/.moltbot/skills/develop-chorus/SKILL.md
57
67
  curl -s $BASE_URL/skill/review-chorus/SKILL.md > ~/.moltbot/skills/review-chorus/SKILL.md
68
+ curl -s $BASE_URL/skill/quick-dev-chorus/SKILL.md > ~/.moltbot/skills/quick-dev-chorus/SKILL.md
69
+ curl -s $BASE_URL/skill/brainstorm-chorus/SKILL.md > ~/.moltbot/skills/brainstorm-chorus/SKILL.md
70
+ curl -s $BASE_URL/skill/proposal-reviewer-chorus/SKILL.md > ~/.moltbot/skills/proposal-reviewer-chorus/SKILL.md
71
+ curl -s $BASE_URL/skill/task-reviewer-chorus/SKILL.md > ~/.moltbot/skills/task-reviewer-chorus/SKILL.md
72
+ curl -s $BASE_URL/skill/yolo-chorus/SKILL.md > ~/.moltbot/skills/yolo-chorus/SKILL.md
58
73
  curl -s $BASE_URL/skill/package.json > ~/.moltbot/skills/chorus/package.json
59
74
  ```
60
75
 
@@ -385,17 +400,54 @@ approved --> draft (via revoke — cascade-closes tasks, deletes documents)
385
400
 
386
401
  ---
387
402
 
403
+ ## Independent Review
404
+
405
+ Chorus uses **independent, read-only adversarial reviewers** at two gates: before a proposal is approved, and before a task is verified. The reviewer's job is to find what is wrong — not to rubber-stamp. Its output is **advisory**: it informs the admin's decision but does not by itself approve, reject, verify, or reopen anything.
406
+
407
+ This is the **single canonical description** of the reviewer pattern. The `develop-chorus`, `review-chorus`, and `yolo-chorus` skills all point back here rather than redefining it.
408
+
409
+ ### The Pattern
410
+
411
+ 1. **Spawn a read-only sub-agent** that loads one of the two reviewer skills:
412
+ - `proposal-reviewer-chorus` (`<BASE_URL>/skill/proposal-reviewer-chorus/SKILL.md`) — for reviewing a **proposal** before approval. Pass it the `proposalUuid`.
413
+ - `task-reviewer-chorus` (`<BASE_URL>/skill/task-reviewer-chorus/SKILL.md`) — for reviewing a **task** before verification. Pass it the `taskUuid`.
414
+ 2. **The reviewer audits independently** and posts exactly **one** structured `VERDICT` comment on the proposal/task via `chorus_add_comment`. The comment ends with one literal verdict string: `VERDICT: PASS`, `VERDICT: PASS WITH NOTES`, or `VERDICT: FAIL`.
415
+ 3. **Read the verdict and act.** Fetch the comment with `chorus_get_comments({ targetType, targetUuid })`, read the BLOCKER / NOTE findings, then make the call:
416
+ - `PASS` / `PASS WITH NOTES` → proceed (approve the proposal / verify the task), addressing NOTEs at your discretion.
417
+ - `FAIL` → do **not** proceed; route the BLOCKERs back for a fix (reject/revise the proposal, or reopen/rework the task), then re-review.
418
+
419
+ > The verdict is advisory: even a `FAIL` does not block the admin, and a `PASS` does not auto-approve. A human/admin makes the final decision.
420
+
421
+ ### Spawn Mechanism Is Harness-Specific
422
+
423
+ How you spawn the read-only sub-agent depends on your agent harness — give it the reviewer skill plus the target UUID and instruct it to post a single VERDICT comment. Concrete examples:
424
+
425
+ - **Claude Code** — use the Task / Agent tool to launch a sub-agent that loads `task-reviewer-chorus` (or `proposal-reviewer-chorus`) and pass the `taskUuid` / `proposalUuid`.
426
+ - **Codex** — use `spawn_agent` with the reviewer skill and the target UUID.
427
+ - Other harnesses: use whatever sub-agent / sub-task primitive they expose.
428
+
429
+ ### Inline Self-Review Fallback
430
+
431
+ When sub-agents are **not** available in your harness, run the review inline yourself: load the relevant reviewer skill's procedure (`proposal-reviewer-chorus` or `task-reviewer-chorus`), audit the proposal/task against its checklist with the same adversarial posture, and post the single `VERDICT` comment yourself before acting on it. A same-agent self-review is weaker than a fresh independent reviewer, but it is far better than skipping the gate.
432
+
433
+ ---
434
+
388
435
  ## Skill Routing
389
436
 
390
437
  This is the core overview skill. For stage-specific workflows, download and read the appropriate skill:
391
438
 
392
439
  | Stage | Skill | Path |
393
440
  |-------|-------|------|
441
+ | **Overview** (this file) | `chorus` | `<BASE_URL>/skill/chorus/SKILL.md` |
394
442
  | **Quick Dev** | `quick-dev-chorus` | `<BASE_URL>/skill/quick-dev-chorus/SKILL.md` |
443
+ | **Brainstorm** | `brainstorm-chorus` | `<BASE_URL>/skill/brainstorm-chorus/SKILL.md` |
395
444
  | **Ideation** | `idea-chorus` | `<BASE_URL>/skill/idea-chorus/SKILL.md` |
396
445
  | **Planning** | `proposal-chorus` | `<BASE_URL>/skill/proposal-chorus/SKILL.md` |
397
446
  | **Development** | `develop-chorus` | `<BASE_URL>/skill/develop-chorus/SKILL.md` |
398
447
  | **Review** | `review-chorus` | `<BASE_URL>/skill/review-chorus/SKILL.md` |
448
+ | **Proposal Review** | `proposal-reviewer-chorus` | `<BASE_URL>/skill/proposal-reviewer-chorus/SKILL.md` |
449
+ | **Task Review** | `task-reviewer-chorus` | `<BASE_URL>/skill/task-reviewer-chorus/SKILL.md` |
450
+ | **Full-Auto** | `yolo-chorus` | `<BASE_URL>/skill/yolo-chorus/SKILL.md` |
399
451
 
400
452
  ### Getting Started
401
453
 
@@ -4,7 +4,7 @@ description: Chorus Development workflow — claim tasks, report work, self-chec
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.3.1"
7
+ version: "0.9.3"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -182,7 +182,7 @@ chorus_submit_for_verify({
182
182
 
183
183
  > `to_verify` does NOT unblock downstream tasks — only `done` (after admin verification) does.
184
184
 
185
- > **Review Agent:** After `chorus_submit_for_verify`, consider spawning `chorus:task-reviewer` an independent, read-only review agent that adversarially checks the implementation against AC and proposal documents. It posts a VERDICT comment on the task. Its result is advisory (does not block verification).
185
+ > **Independent Review:** After `chorus_submit_for_verify`, run an independent review of the task before it is verified. Spawn a read-only sub-agent that loads the `task-reviewer-chorus` skill (`<BASE_URL>/skill/task-reviewer-chorus/SKILL.md`), pass it the `taskUuid`, and let it post a single `VERDICT` comment (PASS / PASS WITH NOTES / FAIL) on the task; then read it with `chorus_get_comments` and act. The verdict is **advisory** (it does not block verification). The spawn mechanism is harness-specific, and an inline self-review fallback exists when sub-agents are unavailable — see the canonical **Independent Review** section in the `chorus` skill (`<BASE_URL>/skill/chorus/SKILL.md`) for the full pattern.
186
186
 
187
187
  ### Step 9: Handle Review Feedback
188
188