@chorus-aidlc/chorus 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (665) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +457 -340
  3. package/.next/standalone/.next/app-path-routes-manifest.json +39 -25
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +30 -30
  6. package/.next/standalone/.next/routes-manifest.json +25 -0
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +2 -2
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -3
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +2 -2
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +2 -2
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +3 -3
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -8
  44. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  48. package/.next/standalone/.next/server/app/_not-found.rsc +5 -5
  49. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/new.rsc +5 -5
  53. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/admin/companies.html +1 -1
  55. package/.next/standalone/.next/server/app/admin/companies.rsc +5 -5
  56. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/admin.html +1 -1
  58. package/.next/standalone/.next/server/app/admin.rsc +5 -5
  59. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  60. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
  62. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/admin/login/route.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/admin/session/route.js +1 -1
  66. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -0
  68. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -0
  69. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -0
  70. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
  71. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  73. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
  76. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
  78. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
  80. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
  82. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/auth/check-default/route.js +1 -1
  84. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/auth/company-oidc/route.js +1 -1
  86. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
  88. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/auth/identify/route.js +1 -1
  90. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/auth/me/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/refresh/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/auth/session/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/auth/sync-token/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -0
  104. package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -0
  105. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -0
  106. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -0
  107. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -0
  108. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -0
  109. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -0
  110. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -0
  111. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -0
  112. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -0
  113. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -0
  114. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -0
  115. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -0
  116. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -0
  117. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -0
  118. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -0
  119. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -0
  120. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -0
  121. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -0
  122. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -0
  123. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -0
  124. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -0
  125. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -0
  126. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -0
  127. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -0
  128. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -0
  129. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -0
  130. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -0
  131. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -0
  132. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -0
  133. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -0
  134. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -0
  135. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -0
  136. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -0
  137. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -0
  138. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -0
  139. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  140. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -0
  142. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -0
  143. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -0
  144. package/.next/standalone/.next/server/app/api/events/notifications/route.js +6 -2
  145. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  146. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/events/route.js +7 -3
  148. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  149. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  151. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  156. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  159. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  162. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  168. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/mcp/route.js +5 -41
  171. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  174. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  180. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  183. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  186. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  195. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  198. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  200. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  202. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  206. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  207. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  208. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  209. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  211. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  213. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  216. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  220. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  221. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  222. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  223. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  226. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  227. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  229. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  232. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  233. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  235. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  236. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  237. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  238. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  239. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  241. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  243. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  245. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  246. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  247. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  249. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  252. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  253. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  255. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  258. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  259. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  260. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  261. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  262. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  263. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  264. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  267. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  268. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  269. package/.next/standalone/.next/server/app/index.html +1 -1
  270. package/.next/standalone/.next/server/app/index.rsc +5 -5
  271. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  272. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  273. package/.next/standalone/.next/server/app/login/admin.rsc +5 -5
  274. package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
  275. package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
  276. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  277. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  278. package/.next/standalone/.next/server/app/login/callback.rsc +5 -5
  279. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  280. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  281. package/.next/standalone/.next/server/app/login/pick-workspace.html +1 -1
  282. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +5 -5
  283. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
  284. package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
  285. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +5 -5
  286. package/.next/standalone/.next/server/app/login.html +1 -1
  287. package/.next/standalone/.next/server/app/login.rsc +5 -5
  288. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  289. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  290. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  291. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  292. package/.next/standalone/.next/server/app/onboarding.rsc +6 -6
  293. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  294. package/.next/standalone/.next/server/app/projects.html +1 -1
  295. package/.next/standalone/.next/server/app/projects.rsc +7 -7
  296. package/.next/standalone/.next/server/app/settings.html +1 -1
  297. package/.next/standalone/.next/server/app/settings.rsc +7 -7
  298. package/.next/standalone/.next/server/app-paths-manifest.json +39 -25
  299. package/.next/standalone/.next/server/chunks/1064.js +1 -0
  300. package/.next/standalone/.next/server/chunks/1596.js +13 -0
  301. package/.next/standalone/.next/server/chunks/2213.js +1 -0
  302. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  303. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  304. package/.next/standalone/.next/server/chunks/3219.js +2 -0
  305. package/.next/standalone/.next/server/chunks/3371.js +1 -0
  306. package/.next/standalone/.next/server/chunks/3419.js +1 -0
  307. package/.next/standalone/.next/server/chunks/369.js +1 -0
  308. package/.next/standalone/.next/server/chunks/4638.js +1 -0
  309. package/.next/standalone/.next/server/chunks/4711.js +530 -0
  310. package/.next/standalone/.next/server/chunks/5039.js +1 -0
  311. package/.next/standalone/.next/server/chunks/5300.js +1 -1
  312. package/.next/standalone/.next/server/chunks/{4913.js → 5631.js} +1 -1
  313. package/.next/standalone/.next/server/chunks/6044.js +1 -1
  314. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  315. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  316. package/.next/standalone/.next/server/chunks/6461.js +1 -0
  317. package/.next/standalone/.next/server/chunks/6712.js +1 -0
  318. package/.next/standalone/.next/server/chunks/7002.js +1 -1
  319. package/.next/standalone/.next/server/chunks/7063.js +1 -1
  320. package/.next/standalone/.next/server/chunks/7258.js +37 -0
  321. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  322. package/.next/standalone/.next/server/chunks/7578.js +2 -2
  323. package/.next/standalone/.next/server/chunks/7867.js +1 -0
  324. package/.next/standalone/.next/server/chunks/7897.js +1 -0
  325. package/.next/standalone/.next/server/chunks/8012.js +1 -0
  326. package/.next/standalone/.next/server/chunks/8245.js +31 -0
  327. package/.next/standalone/.next/server/chunks/8322.js +1 -1
  328. package/.next/standalone/.next/server/chunks/9015.js +1 -1
  329. package/.next/standalone/.next/server/chunks/920.js +1 -1
  330. package/.next/standalone/.next/server/chunks/937.js +16 -2
  331. package/.next/standalone/.next/server/chunks/9629.js +1 -0
  332. package/.next/standalone/.next/server/chunks/9725.js +1 -0
  333. package/.next/standalone/.next/server/instrumentation.js +1 -1
  334. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  335. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  336. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  337. package/.next/standalone/.next/server/next-font-manifest.json +1 -1
  338. package/.next/standalone/.next/server/pages/404.html +1 -1
  339. package/.next/standalone/.next/server/pages/500.html +1 -1
  340. package/.next/standalone/.next/server/pages-manifest.json +1 -1
  341. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  342. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  343. package/.next/standalone/.next/server/src/middleware.js +1 -1
  344. package/.next/standalone/.next/static/GQvpOux3M9CaxkMjL9GAI/_buildManifest.js +1 -0
  345. package/.next/standalone/.next/static/chunks/1217-323cc20b73ebfde9.js +1 -0
  346. package/.next/standalone/.next/static/chunks/{11207-8f4b154804f5a66f.js → 15183-5734d279b26e9414.js} +2 -2
  347. package/.next/standalone/.next/static/chunks/1879-7a8b283283218df2.js +1 -0
  348. package/.next/standalone/.next/static/chunks/19276-50b367d7b93d5f34.js +1 -0
  349. package/.next/standalone/.next/static/chunks/23466-e1176a6d814f4897.js +1 -0
  350. package/.next/standalone/.next/static/chunks/38040-a8687f86dd8e9d67.js +1 -0
  351. package/.next/standalone/.next/static/chunks/4860.8bdb37c964f92e48.js +1 -0
  352. package/.next/standalone/.next/static/chunks/58245-b2ea112ace9624d2.js +1 -0
  353. package/.next/standalone/.next/static/chunks/59296-783831c43aa0162e.js +1 -0
  354. package/.next/standalone/.next/static/chunks/60648-36ccbee4ce232d52.js +1 -0
  355. package/.next/standalone/.next/static/chunks/60694-68232120903209df.js +1 -0
  356. package/.next/standalone/.next/static/chunks/64648-ece4e2a59672cf63.js +1 -0
  357. package/.next/standalone/.next/static/chunks/{94655-1c75e0590a66215e.js → 66969-12f0b22c51f5a410.js} +1 -1
  358. package/.next/standalone/.next/static/chunks/70536-b8bf71098ae11f07.js +1 -0
  359. package/.next/standalone/.next/static/chunks/71350-88c2649fc693c1e8.js +1 -0
  360. package/.next/standalone/.next/static/chunks/78389-b32edc6bd5c570a9.js +1 -0
  361. package/.next/standalone/.next/static/chunks/78584-eb2fa8cf2f266329.js +1 -0
  362. package/.next/standalone/.next/static/chunks/78917-150ed14a99844aab.js +1 -0
  363. package/.next/standalone/.next/static/chunks/8574-b9739eb8d054c793.js +1 -0
  364. package/.next/standalone/.next/static/chunks/99373.12370329b9ab6beb.js +1 -0
  365. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-0a28456fea4ce95a.js +1 -0
  366. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-a79969c5c9aadacd.js +1 -0
  367. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-4bc556c2fc8f3d24.js +1 -0
  368. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-a28f0eaa6f4ac94a.js +1 -0
  369. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-ef82b871895245ea.js +1 -0
  370. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-2c9bcbd11ddb8661.js +1 -0
  371. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-630b168598513ce8.js +1 -0
  372. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-99639479cc98965f.js +1 -0
  373. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-335f2450e44a0fba.js +1 -0
  374. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-4a191d69b2b6e880.js +1 -0
  375. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-0faebb478be4c85d.js +1 -0
  376. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-f198303c176c6e02.js → page-583e58d4d689d38b.js} +1 -1
  377. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2e8fcb72687100df.js +1 -0
  378. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  379. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-4bc556c2fc8f3d24.js +1 -0
  380. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-4bc556c2fc8f3d24.js +1 -0
  381. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-4bc556c2fc8f3d24.js +1 -0
  382. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-4bc556c2fc8f3d24.js +1 -0
  383. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  384. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
  385. package/.next/standalone/.next/static/chunks/app/api/agents/route-4bc556c2fc8f3d24.js +1 -0
  386. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  387. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-4bc556c2fc8f3d24.js +1 -0
  388. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-4bc556c2fc8f3d24.js +1 -0
  389. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-4bc556c2fc8f3d24.js +1 -0
  390. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-4bc556c2fc8f3d24.js +1 -0
  391. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-4bc556c2fc8f3d24.js +1 -0
  392. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-4bc556c2fc8f3d24.js +1 -0
  393. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-4bc556c2fc8f3d24.js +1 -0
  394. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-4bc556c2fc8f3d24.js +1 -0
  395. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-4bc556c2fc8f3d24.js +1 -0
  396. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-4bc556c2fc8f3d24.js +1 -0
  397. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-4bc556c2fc8f3d24.js +1 -0
  398. package/.next/standalone/.next/static/chunks/app/api/comments/route-4bc556c2fc8f3d24.js +1 -0
  399. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-4bc556c2fc8f3d24.js +1 -0
  400. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-4bc556c2fc8f3d24.js +1 -0
  401. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-4bc556c2fc8f3d24.js +1 -0
  402. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-4bc556c2fc8f3d24.js +1 -0
  403. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-4bc556c2fc8f3d24.js +1 -0
  404. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-4bc556c2fc8f3d24.js +1 -0
  405. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-4bc556c2fc8f3d24.js +1 -0
  406. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-4bc556c2fc8f3d24.js +1 -0
  407. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-4bc556c2fc8f3d24.js +1 -0
  408. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-4bc556c2fc8f3d24.js +1 -0
  409. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-4bc556c2fc8f3d24.js +1 -0
  410. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-4bc556c2fc8f3d24.js +1 -0
  411. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  412. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-4bc556c2fc8f3d24.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-4bc556c2fc8f3d24.js +1 -0
  414. package/.next/standalone/.next/static/chunks/app/api/events/route-4bc556c2fc8f3d24.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/api/health/route-4bc556c2fc8f3d24.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-4bc556c2fc8f3d24.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-4bc556c2fc8f3d24.js +1 -0
  419. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-4bc556c2fc8f3d24.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/api/mcp/route-4bc556c2fc8f3d24.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-4bc556c2fc8f3d24.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-4bc556c2fc8f3d24.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-4bc556c2fc8f3d24.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-4bc556c2fc8f3d24.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-4bc556c2fc8f3d24.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-4bc556c2fc8f3d24.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/api/notifications/route-4bc556c2fc8f3d24.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-4bc556c2fc8f3d24.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-4bc556c2fc8f3d24.js +1 -0
  432. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  433. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-4bc556c2fc8f3d24.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-4bc556c2fc8f3d24.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-4bc556c2fc8f3d24.js +1 -0
  436. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-4bc556c2fc8f3d24.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-4bc556c2fc8f3d24.js +1 -0
  438. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-4bc556c2fc8f3d24.js +1 -0
  439. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-4bc556c2fc8f3d24.js +1 -0
  440. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-4bc556c2fc8f3d24.js +1 -0
  441. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-4bc556c2fc8f3d24.js +1 -0
  442. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-4bc556c2fc8f3d24.js +1 -0
  443. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  444. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-4bc556c2fc8f3d24.js +1 -0
  445. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-4bc556c2fc8f3d24.js +1 -0
  446. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-4bc556c2fc8f3d24.js +1 -0
  447. package/.next/standalone/.next/static/chunks/app/api/projects/route-4bc556c2fc8f3d24.js +1 -0
  448. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-4bc556c2fc8f3d24.js +1 -0
  449. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-4bc556c2fc8f3d24.js +1 -0
  450. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-4bc556c2fc8f3d24.js +1 -0
  451. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-4bc556c2fc8f3d24.js +1 -0
  452. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  453. package/.next/standalone/.next/static/chunks/app/api/search/route-4bc556c2fc8f3d24.js +1 -0
  454. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  455. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
  456. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-4bc556c2fc8f3d24.js +1 -0
  457. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-4bc556c2fc8f3d24.js +1 -0
  458. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
  459. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  460. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
  461. package/.next/standalone/.next/static/chunks/app/layout-9963339572e2e64e.js +1 -0
  462. package/.next/standalone/.next/static/chunks/app/onboarding/page-e9a69a0c537c704f.js +1 -0
  463. package/.next/standalone/.next/static/chunks/{webpack-5bb5740df10ed622.js → webpack-039590181c63871d.js} +1 -1
  464. package/.next/standalone/.next/static/css/1d9aaac01758b297.css +1 -0
  465. package/.next/standalone/.next/static/css/{84edd78de243cde6.css → b496025c9cd768cc.css} +1 -1
  466. package/.next/standalone/.next/static/media/013b72fa676f92e0-s.woff2 +0 -0
  467. package/.next/standalone/.next/static/media/2b5b02fc7e511755-s.woff2 +0 -0
  468. package/.next/standalone/.next/static/media/65f03d54ccadf4a8-s.woff2 +0 -0
  469. package/.next/standalone/.next/static/media/7d4881bb7e1bf84d-s.p.woff2 +0 -0
  470. package/.next/standalone/.next/static/media/b9408752a0c24fb9-s.woff2 +0 -0
  471. package/.next/standalone/.next/static/media/e038a29029a234f2-s.woff2 +0 -0
  472. package/.next/standalone/package.json +3 -1
  473. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +13 -1
  474. package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +167 -0
  475. package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +97 -17
  476. package/.next/standalone/public/chorus-plugin/bin/tests/test-on-post-verify-task.sh +191 -1
  477. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  478. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +7 -4
  479. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +3 -1
  480. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -1
  481. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  482. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
  483. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  484. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +12 -3
  485. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +40 -1
  486. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  487. package/.next/standalone/public/skill/chorus/SKILL.md +16 -11
  488. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +225 -0
  489. package/.next/standalone/public/skill/develop-chorus/SKILL.md +3 -1
  490. package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -1
  491. package/.next/standalone/public/skill/package.json +3 -1
  492. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  493. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  494. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  495. package/.next/standalone/public/skill/review-chorus/SKILL.md +12 -1
  496. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  497. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +35 -1
  498. package/README.md +29 -0
  499. package/README.zh.md +29 -0
  500. package/chorus.mjs +120 -16
  501. package/cli/backfill.mjs +190 -0
  502. package/cli/chorus-client.mjs +154 -0
  503. package/cli/claude-spawner.mjs +415 -0
  504. package/cli/client-args.mjs +146 -0
  505. package/cli/control-handler.mjs +180 -0
  506. package/cli/credentials.mjs +155 -0
  507. package/cli/daemon-agent.mjs +38 -0
  508. package/cli/daemon-banner.mjs +80 -0
  509. package/cli/daemon-config.mjs +84 -0
  510. package/cli/daemon-lifecycle.mjs +191 -0
  511. package/cli/daemon-permission-mode.mjs +68 -0
  512. package/cli/daemon-rest-client.mjs +272 -0
  513. package/cli/daemon.mjs +572 -0
  514. package/cli/event-router.mjs +248 -0
  515. package/cli/interrupt-reporter.mjs +87 -0
  516. package/cli/lineage.mjs +155 -0
  517. package/cli/login.mjs +151 -0
  518. package/cli/mcp-config.mjs +58 -0
  519. package/cli/process-killer.mjs +205 -0
  520. package/cli/prompts.mjs +273 -0
  521. package/cli/sse-listener.mjs +258 -0
  522. package/cli/turn-reporter.mjs +75 -0
  523. package/cli/upload-hooks.mjs +400 -0
  524. package/cli/wake-queue.mjs +121 -0
  525. package/cli/waker.mjs +475 -0
  526. package/package.json +3 -1
  527. package/prisma/migrations/20260615082309_add_daemon_connection/migration.sql +37 -0
  528. package/prisma/migrations/20260616152622_add_daemon_task_execution/migration.sql +28 -0
  529. package/prisma/migrations/20260617013334_generalize_daemon_execution_to_any_resource/migration.sql +38 -0
  530. package/prisma/migrations/20260618022828_add_daemon_execution_interrupted/migration.sql +2 -0
  531. package/prisma/migrations/20260619055322_daemon_session_conversation/migration.sql +77 -0
  532. package/prisma/schema.prisma +366 -188
  533. package/.next/standalone/.next/server/chunks/1059.js +0 -1
  534. package/.next/standalone/.next/server/chunks/1165.js +0 -1
  535. package/.next/standalone/.next/server/chunks/1615.js +0 -31
  536. package/.next/standalone/.next/server/chunks/162.js +0 -16
  537. package/.next/standalone/.next/server/chunks/179.js +0 -158
  538. package/.next/standalone/.next/server/chunks/1871.js +0 -1
  539. package/.next/standalone/.next/server/chunks/2909.js +0 -98
  540. package/.next/standalone/.next/server/chunks/324.js +0 -1
  541. package/.next/standalone/.next/server/chunks/3555.js +0 -1
  542. package/.next/standalone/.next/server/chunks/4090.js +0 -13
  543. package/.next/standalone/.next/server/chunks/4343.js +0 -1
  544. package/.next/standalone/.next/server/chunks/4879.js +0 -1
  545. package/.next/standalone/.next/server/chunks/5541.js +0 -1
  546. package/.next/standalone/.next/server/chunks/5561.js +0 -7
  547. package/.next/standalone/.next/server/chunks/6643.js +0 -1
  548. package/.next/standalone/.next/server/chunks/6767.js +0 -1
  549. package/.next/standalone/.next/server/chunks/7228.js +0 -2
  550. package/.next/standalone/.next/server/chunks/7462.js +0 -255
  551. package/.next/standalone/.next/server/chunks/7859.js +0 -1
  552. package/.next/standalone/.next/server/chunks/8277.js +0 -1
  553. package/.next/standalone/.next/server/chunks/8637.js +0 -1
  554. package/.next/standalone/.next/server/chunks/896.js +0 -1
  555. package/.next/standalone/.next/server/chunks/9269.js +0 -1
  556. package/.next/standalone/.next/server/chunks/9615.js +0 -1
  557. package/.next/standalone/.next/static/AKJHlhCKd44_-khht8nN0/_buildManifest.js +0 -1
  558. package/.next/standalone/.next/static/chunks/20051-c242544dafd3a690.js +0 -1
  559. package/.next/standalone/.next/static/chunks/21932-bce5ba937d1603e1.js +0 -1
  560. package/.next/standalone/.next/static/chunks/23095-5bf481236249fdd8.js +0 -1
  561. package/.next/standalone/.next/static/chunks/23466-842c126491b753bc.js +0 -1
  562. package/.next/standalone/.next/static/chunks/45436-c5427023f3f386a1.js +0 -1
  563. package/.next/standalone/.next/static/chunks/4860.e071c0b9e32bd75f.js +0 -1
  564. package/.next/standalone/.next/static/chunks/49852-5337f139a2f87c46.js +0 -1
  565. package/.next/standalone/.next/static/chunks/52206-7c1b0c695c8035eb.js +0 -1
  566. package/.next/standalone/.next/static/chunks/55469-ed5ff019ff71ef59.js +0 -1
  567. package/.next/standalone/.next/static/chunks/59296-50e66102d44d9677.js +0 -1
  568. package/.next/standalone/.next/static/chunks/60524-9811b38c62fed16e.js +0 -1
  569. package/.next/standalone/.next/static/chunks/68855-5c15991e7cf8dc8a.js +0 -1
  570. package/.next/standalone/.next/static/chunks/70093-0ff6fd59445b5cb9.js +0 -1
  571. package/.next/standalone/.next/static/chunks/74030-3a6a6b75e47f5b96.js +0 -1
  572. package/.next/standalone/.next/static/chunks/78917-ff0fda86a96cfa60.js +0 -1
  573. package/.next/standalone/.next/static/chunks/95627-8d9f6d2d88f7a641.js +0 -1
  574. package/.next/standalone/.next/static/chunks/99373.4c336ea9ad07311e.js +0 -1
  575. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-5915ccd1a77ebcf8.js +0 -1
  576. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-94d102d945410b55.js +0 -1
  577. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-cd9411c54c8f5b35.js +0 -1
  578. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-56c45b910f914895.js +0 -1
  579. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-2e000a7010d1e9ea.js +0 -1
  580. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-75e42d130404ca2b.js +0 -1
  581. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-d7747749ae6192d8.js +0 -1
  582. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-26488809d26e1daa.js +0 -1
  583. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8f91ed174c14d5f0.js +0 -1
  584. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-fcc9baa42e6de4d4.js +0 -1
  585. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-5233748464280e9d.js +0 -1
  586. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-ab87cbb18d0ee538.js +0 -1
  587. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  588. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-cd9411c54c8f5b35.js +0 -1
  589. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-cd9411c54c8f5b35.js +0 -1
  590. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-cd9411c54c8f5b35.js +0 -1
  591. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  592. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-cd9411c54c8f5b35.js +0 -1
  593. package/.next/standalone/.next/static/chunks/app/api/agents/route-cd9411c54c8f5b35.js +0 -1
  594. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  595. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-cd9411c54c8f5b35.js +0 -1
  596. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-cd9411c54c8f5b35.js +0 -1
  597. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-cd9411c54c8f5b35.js +0 -1
  598. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-cd9411c54c8f5b35.js +0 -1
  599. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-cd9411c54c8f5b35.js +0 -1
  600. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-cd9411c54c8f5b35.js +0 -1
  601. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-cd9411c54c8f5b35.js +0 -1
  602. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-cd9411c54c8f5b35.js +0 -1
  603. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-cd9411c54c8f5b35.js +0 -1
  604. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-cd9411c54c8f5b35.js +0 -1
  605. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-cd9411c54c8f5b35.js +0 -1
  606. package/.next/standalone/.next/static/chunks/app/api/comments/route-cd9411c54c8f5b35.js +0 -1
  607. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  608. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-cd9411c54c8f5b35.js +0 -1
  609. package/.next/standalone/.next/static/chunks/app/api/events/route-cd9411c54c8f5b35.js +0 -1
  610. package/.next/standalone/.next/static/chunks/app/api/health/route-cd9411c54c8f5b35.js +0 -1
  611. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-cd9411c54c8f5b35.js +0 -1
  612. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-cd9411c54c8f5b35.js +0 -1
  613. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-cd9411c54c8f5b35.js +0 -1
  614. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-cd9411c54c8f5b35.js +0 -1
  615. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-cd9411c54c8f5b35.js +0 -1
  616. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  617. package/.next/standalone/.next/static/chunks/app/api/mcp/route-cd9411c54c8f5b35.js +0 -1
  618. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-cd9411c54c8f5b35.js +0 -1
  619. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-cd9411c54c8f5b35.js +0 -1
  620. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-cd9411c54c8f5b35.js +0 -1
  621. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-cd9411c54c8f5b35.js +0 -1
  622. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-cd9411c54c8f5b35.js +0 -1
  623. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-cd9411c54c8f5b35.js +0 -1
  624. package/.next/standalone/.next/static/chunks/app/api/notifications/route-cd9411c54c8f5b35.js +0 -1
  625. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-cd9411c54c8f5b35.js +0 -1
  626. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-cd9411c54c8f5b35.js +0 -1
  627. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  628. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-cd9411c54c8f5b35.js +0 -1
  629. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-cd9411c54c8f5b35.js +0 -1
  630. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-cd9411c54c8f5b35.js +0 -1
  631. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-cd9411c54c8f5b35.js +0 -1
  632. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-cd9411c54c8f5b35.js +0 -1
  633. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-cd9411c54c8f5b35.js +0 -1
  634. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-cd9411c54c8f5b35.js +0 -1
  635. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-cd9411c54c8f5b35.js +0 -1
  636. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-cd9411c54c8f5b35.js +0 -1
  637. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-cd9411c54c8f5b35.js +0 -1
  638. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  639. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-cd9411c54c8f5b35.js +0 -1
  640. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-cd9411c54c8f5b35.js +0 -1
  641. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-cd9411c54c8f5b35.js +0 -1
  642. package/.next/standalone/.next/static/chunks/app/api/projects/route-cd9411c54c8f5b35.js +0 -1
  643. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-cd9411c54c8f5b35.js +0 -1
  644. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-cd9411c54c8f5b35.js +0 -1
  645. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-cd9411c54c8f5b35.js +0 -1
  646. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-cd9411c54c8f5b35.js +0 -1
  647. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  648. package/.next/standalone/.next/static/chunks/app/api/search/route-cd9411c54c8f5b35.js +0 -1
  649. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  650. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-cd9411c54c8f5b35.js +0 -1
  651. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-cd9411c54c8f5b35.js +0 -1
  652. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-cd9411c54c8f5b35.js +0 -1
  653. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-cd9411c54c8f5b35.js +0 -1
  654. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-cd9411c54c8f5b35.js +0 -1
  655. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-cd9411c54c8f5b35.js +0 -1
  656. package/.next/standalone/.next/static/chunks/app/layout-482dee7dace72c88.js +0 -1
  657. package/.next/standalone/.next/static/chunks/app/onboarding/page-d9dbd817391b462b.js +0 -1
  658. package/.next/standalone/.next/static/css/4279f38594ac772a.css +0 -1
  659. package/.next/standalone/.next/static/media/0f1bdadaf30e2d5f-s.woff2 +0 -0
  660. package/.next/standalone/.next/static/media/2c34d62a75506231-s.woff2 +0 -0
  661. package/.next/standalone/.next/static/media/601f5c280d60caca-s.woff2 +0 -0
  662. package/.next/standalone/.next/static/media/a115172161b307bb-s.woff2 +0 -0
  663. package/.next/standalone/.next/static/media/d100b2a099e34044-s.woff2 +0 -0
  664. package/.next/standalone/.next/static/media/f5271587012faf78-s.p.woff2 +0 -0
  665. /package/.next/standalone/.next/static/{AKJHlhCKd44_-khht8nN0 → GQvpOux3M9CaxkMjL9GAI}/_ssgManifest.js +0 -0
@@ -4,7 +4,7 @@ description: Full-auto AI-DLC pipeline — drive a single prompt from Idea throu
4
4
  license: AGPL-3.0
5
5
  metadata:
6
6
  author: chorus
7
- version: "0.10.0"
7
+ version: "0.11.1"
8
8
  category: project-management
9
9
  mcp_server: chorus
10
10
  ---
@@ -25,6 +25,7 @@ You take a natural-language description of what to build, and you handle everyth
25
25
  2. **Proposal Review** — adversarial review loop against the `proposal-reviewer-chorus` skill.
26
26
  3. **Execution** — dependency-ordered, wave-based task dispatch.
27
27
  4. **Verification** — adversarial review loop against the `task-reviewer-chorus` skill + admin verify.
28
+ 4.5. **Code-Review Gateway** — adversarial review loop against the `code-reviewer-chorus` skill over the Idea's aggregate change, before ship (FAIL → add fix tasks → re-run).
28
29
  5. **Report** — completion summary + a mandatory Idea Completion Report.
29
30
 
30
31
  ```
@@ -47,6 +48,9 @@ Verification loop (up to maxTaskReviewRounds, default 3)
47
48
  | PASS / PASS WITH NOTES -> mark AC + verify ; FAIL -> reopen
48
49
  | verify unblocks dependents -> loop back to Execution
49
50
  v
51
+ Code-Review Gateway (all tasks done; up to maxCodeReviewRounds, default 3)
52
+ | PASS / PASS WITH NOTES -> ship ; FAIL -> add fix tasks -> Execution -> re-run
53
+ v
50
54
  Done --> Report summary + mandatory Idea Completion Report
51
55
  ```
52
56
 
@@ -453,6 +457,33 @@ After verifying every task in the wave, return to **Phase 3** and re-run `chorus
453
457
 
454
458
  ---
455
459
 
460
+ ### Phase 4.5: Code-Review Gateway (mandatory pre-ship)
461
+
462
+ Once **every** task of the idea's proposal is verified (`done`) — Phase 3 finds no more unblocked tasks and none remain non-terminal — run the final ship-time code-review gateway **before** the Phase 5b completion report. This is the same **Independent Review pattern** as Phases 2 and 4, pointed at the `code-reviewer-chorus` skill — but it reviews the **whole Idea's aggregate code change** (across all tasks), not a single task, and posts its verdict on the **Idea**.
463
+
464
+ > **Independent Review pattern (framework-neutral).** Spawn a **read-only** sub-agent and have it load the `code-reviewer-chorus` skill (`<BASE_URL>/skill/code-reviewer-chorus/SKILL.md`), pass it the `ideaUuid` and the current review round number, and instruct it to post exactly one `VERDICT` comment on the **idea**. It reviews cross-task integration, architecture/convention consistency, security, regression/performance, and feature-level test coverage — dimensions a single-task review cannot see — and may run read-only tests/build/lint, but never writes. After it returns, read the verdict via `chorus_get_comments({ targetType: "idea", targetUuid: "<idea-uuid>" })`.
465
+ >
466
+ > - Claude Code: dispatch a read-only sub-agent with the Task/Agent tool, mounting the `code-reviewer-chorus` skill.
467
+ > - Codex: `spawn_agent` with the `code-reviewer-chorus` skill and the `ideaUuid`.
468
+
469
+ > **Inline self-review fallback (no sub-agents available).** Perform the review inline as the main agent: read `code-reviewer-chorus`, follow its procedure (fetch the idea, its approved proposals + documents + tasks; infer the aggregate diff from task reports + `git log/diff`; review the six whole-feature dimensions; run the project's build/test), and post your own `VERDICT` comment on the idea.
470
+
471
+ Act on the verdict:
472
+
473
+ - **`VERDICT: PASS` / `PASS WITH NOTES`** — the feature is cleared to ship. Proceed to Phase 5 / 5b.
474
+ - **`VERDICT: FAIL`** — do NOT ship. Read the BLOCKERs, then fix them via the **quick-dev** workflow (`<BASE_URL>/skill/quick-dev-chorus/SKILL.md`): call `chorus_create_tasks` with `proposalUuid` set to the **current approved proposal** so the fix tasks attach to it (not standalone) — do **not** reopen the already-verified tasks. Drive the fix tasks through Phase 3 → Phase 4, then re-spawn the code-reviewer for the next round. Loop bounded by `maxCodeReviewRounds` (default **3**; 0 = unlimited).
475
+
476
+ ```
477
+ ESCALATE: "Idea '<title>' failed code review after 3 rounds. Last BLOCKERs: <list>.
478
+ Manual intervention needed. Idea UUID: <idea-uuid>."
479
+ ```
480
+
481
+ **No VERDICT comment after the code-reviewer returns?** It exhausted its turn budget (it carries a larger budget than the task-reviewer because it reviews the whole feature). Respawn it once with a concise-budget hint; if still none, treat as **PASS WITH NOTES** and proceed — do not loop forever.
482
+
483
+ > The gateway is **behavioral**, consistent with the other two reviewers: its verdict is advisory and does not change the Idea's stored status; the orchestrator honors it. It runs **before** the completion report so the report is never written while a FAIL is outstanding.
484
+
485
+ ---
486
+
456
487
  ### Phase 5: Report
457
488
 
458
489
  When all waves complete, output a markdown summary:
@@ -485,6 +516,8 @@ When all waves complete, output a markdown summary:
485
516
 
486
517
  A successful yolo run always finishes the Idea. Call `chorus_create_report` **exactly once**, with `proposalUuid` set to the **last verified proposal**. The tool's own description carries the section template — follow it. Surface the returned `documentUuid` in the Phase 5 summary table. Skipping this is a protocol violation.
487
518
 
519
+ > **Order:** write the completion report only **after** the Phase 4.5 code-review gateway returns PASS / PASS WITH NOTES. Never write it while a code-review FAIL is outstanding — the report is a ship-time summary, and the gateway is what clears the feature to ship.
520
+
488
521
  ```
489
522
  result = chorus_create_report({
490
523
  proposalUuid: "<last-verified-proposal-uuid>",
@@ -503,6 +536,7 @@ result = chorus_create_report({
503
536
  | Project creation fails | Report the error; suggest the user create the project manually and rerun with an existing-project hint. |
504
537
  | Proposal review FAILs after `maxProposalReviewRounds` (3) | Stop the pipeline; report the persisting BLOCKERs; recommend manual review of the proposal. |
505
538
  | Task review FAILs after `maxTaskReviewRounds` (3) | Flag the task as escalation-needed; continue with the other tasks. |
539
+ | Code-review gateway FAILs after `maxCodeReviewRounds` (3) | Stop before ship; escalate the persisting feature-level BLOCKERs to a human (Idea UUID); do not write the completion report. |
506
540
  | Reviewer returns no VERDICT | Respawn the reviewer once with a concise-budget hint; if still none, treat as PASS WITH NOTES and proceed. |
507
541
  | Worker crashes / never submits | Log it, leave the task non-`to_verify`; re-pick it in a later wave or escalate if it stays stuck. |
508
542
  | No unblocked tasks but some not done | Stuck DAG (failed reviews or bad dependencies). Break with an escalation report; do not loop. |
package/README.md CHANGED
@@ -36,6 +36,10 @@ The labels under each stage are the **permissions** an actor needs at that stage
36
36
 
37
37
  ## What's New
38
38
 
39
+ **[v0.11.0](https://chorus-ai.dev/blog/chorus-v0.11.0-release/)** — The Chorus Daemon: `chorus daemon` turns your machine into a resident agent runtime that wakes a local Claude Code on each dispatch. An Agent Connections surface gives live observability and control — streaming transcripts, instruction injection, and interrupt / resume — and a "Verify Elaborate" button wakes the assigned agent to write the proposal.
40
+
41
+ **[v0.10.0](https://chorus-ai.dev/blog/chorus-v0.10.0-release/)** — Single-parent idea lineage: an idea may derive a child or be attached under another, forming a forest. The relation is intentionally weak — a parent surfaces a read-only "+N derived" rollup and does not constrain any child's elaboration, proposal, or task flow. Idea browsing consolidates onto the Dashboard (a three-way Ideas / Lineage / Stats view switch with an adaptive default); the standalone Idea List page is retired and its URLs 308-redirect to the Dashboard.
42
+
39
43
  **[v0.9.4](https://chorus-ai.dev/blog/chorus-v0.9.4-release/)** — OpenClaw plugin rewritten on the OpenClaw 2026.4.27 Plugin SDK (native MCP registration, `runEmbeddedAgent` for SSE wake, reviewers as native skills); Codex plugin hooks now ship inside the package, with an installer that cleans up legacy hook copies in the user directory.
40
44
 
41
45
  **[v0.9.0](https://chorus-ai.dev/blog/chorus-v0.9.0-release/)** — Brainstorm skill for fuzzy ideas (open-ended chat before structured Q&A) and idea-completion reports (every shipped idea gets a Summary / Decisions / Follow-ups writeup, surfaced on the idea overview).
@@ -98,6 +102,31 @@ DATABASE_URL=postgresql://user:pass@host:5432/chorus chorus
98
102
  | **Docker (full stack)** | [`docker compose up`](#quick-start-with-docker-recommended) (PostgreSQL + Redis + Chorus) |
99
103
  | **AWS CDK** | [Deploy to AWS](#deploy-to-aws) |
100
104
 
105
+ ### `chorus daemon` — Connect as Agent Runtime
106
+
107
+ The `chorus daemon` connects your local machine to a remote Chorus server as an agent runtime and executes tasks assigned by Chorus.
108
+
109
+ > **Current version:** Only **Claude Code** is supported. Support for other agent CLIs (Codex, Copilot, etc.) is planned for future releases.
110
+
111
+ ```bash
112
+ chorus login # Authenticate (opens browser)
113
+ chorus daemon # Start daemon in foreground
114
+ chorus daemon -d # Start daemon in background (detached)
115
+ chorus daemon stop # Stop background daemon
116
+ chorus daemon status # Check daemon status
117
+ chorus daemon restart # Restart background daemon
118
+ chorus daemon logs # View daemon logs
119
+ ```
120
+
121
+ **Key features:**
122
+
123
+ - **Claude Code integration** — Auto-detects `claude` CLI on your PATH
124
+ - **Background mode** — Run with `-d` flag; manage with `stop/restart/logs`
125
+ - **Permission modes** — Default is full access (yolo); use `--chorus-only` to restrict to Chorus MCP tools only
126
+ - **Interactive setup** — Prompts for credentials on first start if not already configured
127
+
128
+ The daemon requires authentication. Run `chorus login` first, or it will prompt for credentials interactively on first start (if running in a terminal).
129
+
101
130
  ---
102
131
 
103
132
  ## Screenshots
package/README.zh.md CHANGED
@@ -27,6 +27,10 @@ Idea ──> Proposal ──> [Document + Task DAG] ──> Execute ──> Veri
27
27
 
28
28
  ## 最近更新
29
29
 
30
+ **[v0.11.0](https://chorus-ai.dev/zh/blog/chorus-v0.11.0-release/)** — Chorus Daemon:`chorus daemon` 将本机变为常驻 Agent 运行时,在每次派发时唤起本地 Claude Code。Agent Connections 界面提供实时可观测与控制:流式 transcript、指令注入、打断 / 恢复;新增"完成细化"按钮,唤起被指派的 Agent 撰写提案。
31
+
32
+ **[v0.10.0](https://chorus-ai.dev/zh/blog/chorus-v0.10.0-release/)** — 单父想法血缘:一条想法可派生子想法或挂靠至另一条之下,构成森林结构。该关联为弱关联,父想法仅呈现只读的 "+N derived" 汇总,不约束子想法的细化、提案与任务流程。想法浏览统一收敛至 Dashboard(Ideas / Lineage / Stats 三档视图切换,支持自适应默认);独立的 Idea List 页面下线,原 URL 经 308 重定向至 Dashboard。
33
+
30
34
  **[v0.9.4](https://chorus-ai.dev/zh/blog/chorus-v0.9.4-release/)** — OpenClaw 插件基于 OpenClaw 2026.4.27 Plugin SDK 全面重写(原生 MCP 注册、`runEmbeddedAgent` 处理 SSE 唤醒、reviewer 改为原生 skill);Codex 插件 hook 改为随插件包分发,安装器同时清理用户目录中的历史 hook 拷贝。
31
35
 
32
36
  **[v0.9.0](https://chorus-ai.dev/zh/blog/chorus-v0.9.0-release/)** — 头脑风暴 skill 帮你把模糊的想法聊出形状(在结构化多选题前先开放式对话),想法落地后自动生成总结报告(Summary / Decisions / Follow-ups 三段式,挂在想法概览页)。
@@ -89,6 +93,31 @@ DATABASE_URL=postgresql://user:pass@host:5432/chorus chorus
89
93
  | **Docker(完整版)** | [`docker compose up`](#docker-一键启动推荐)(PostgreSQL + Redis + Chorus) |
90
94
  | **AWS CDK** | [部署到 AWS](#部署到-aws) |
91
95
 
96
+ ### `chorus daemon` — 作为 Agent 运行时连接
97
+
98
+ `chorus daemon` 将你的本地机器作为 Agent 运行时连接到远程 Chorus 服务器并执行 Chorus 分配的任务。
99
+
100
+ > **当前版本:** 仅支持 **Claude Code**。对其他 Agent CLI(Codex、Copilot 等)的支持计划在未来版本中实现。
101
+
102
+ ```bash
103
+ chorus login # 认证(打开浏览器)
104
+ chorus daemon # 前台启动 daemon
105
+ chorus daemon -d # 后台启动 daemon(分离模式)
106
+ chorus daemon stop # 停止后台 daemon
107
+ chorus daemon status # 查看 daemon 状态
108
+ chorus daemon restart # 重启后台 daemon
109
+ chorus daemon logs # 查看 daemon 日志
110
+ ```
111
+
112
+ **主要特性:**
113
+
114
+ - **Claude Code 集成** — 自动检测 PATH 中的 `claude` CLI
115
+ - **后台模式** — 使用 `-d` 标志后台运行;用 `stop/restart/logs` 管理
116
+ - **权限模式** — 默认完全访问(yolo);使用 `--chorus-only` 限制为仅 Chorus MCP 工具
117
+ - **交互式设置** — 首次启动时如未配置凭证会提示输入
118
+
119
+ daemon 需要先认证。首次使用请先运行 `chorus login`,或者 daemon 会在首次启动时交互式提示输入凭证(如果在终端中运行)。
120
+
92
121
  ---
93
122
 
94
123
  ## 界面预览
package/chorus.mjs CHANGED
@@ -16,6 +16,73 @@ import { fileURLToPath, pathToFileURL } from "node:url";
16
16
 
17
17
  const __dirname = dirname(fileURLToPath(import.meta.url));
18
18
 
19
+ // ---------------------------------------------------------------------------
20
+ // Subcommand router (client-mode commands)
21
+ // ---------------------------------------------------------------------------
22
+ // `chorus` with no subcommand (or the existing server flags) launches the
23
+ // Next.js server exactly as before. `chorus daemon` and `chorus login` are
24
+ // client commands that connect OUT to a remote Chorus server. Their modules are
25
+ // lazy-imported so the server-launch path pays no startup cost.
26
+
27
+ const SUBCOMMANDS = new Set(["daemon", "login"]);
28
+
29
+ // Client-subcommand arg parsing + help text live in cli/client-args.mjs so they
30
+ // are pure and unit-testable (this entry module runs side effects at import).
31
+ import {
32
+ parseClientFlags,
33
+ parseDaemonAction,
34
+ daemonHelpText,
35
+ loginHelpText,
36
+ } from "./cli/client-args.mjs";
37
+
38
+ /** Read the package version once for help/version output. */
39
+ function pkgVersion() {
40
+ return JSON.parse(readFileSync(join(__dirname, "package.json"), "utf8")).version;
41
+ }
42
+
43
+ async function runSubcommand(name, rest) {
44
+ const flags = parseClientFlags(rest);
45
+
46
+ // Per-subcommand --help / -h fast-path: print subcommand-specific help and
47
+ // exit WITHOUT starting the daemon/login. (The server --help fast-path below
48
+ // is skipped for subcommands, so this is the only place client help is shown.)
49
+ if (flags.help) {
50
+ process.stdout.write(name === "login" ? loginHelpText(pkgVersion()) : daemonHelpText(pkgVersion()));
51
+ return 0;
52
+ }
53
+
54
+ if (name === "login") {
55
+ const { runLogin } = await import("./cli/login.mjs");
56
+ return runLogin(flags);
57
+ }
58
+ if (name === "daemon") {
59
+ const action = parseDaemonAction(rest);
60
+ const { runDaemon } = await import("./cli/daemon.mjs");
61
+ // Lifecycle sub-actions (stop/status/restart/logs) are handled by the
62
+ // background-lifecycle module the daemon wires in; `run` is the normal
63
+ // long-lived daemon. We pass the resolved action through so a later task
64
+ // can dispatch it without re-parsing.
65
+ return runDaemon({ ...flags, action });
66
+ }
67
+ return 1;
68
+ }
69
+
70
+ {
71
+ const sub = process.argv[2];
72
+ if (sub && SUBCOMMANDS.has(sub)) {
73
+ runSubcommand(sub, process.argv.slice(3))
74
+ .then((code) => process.exit(typeof code === "number" ? code : 0))
75
+ .catch((err) => {
76
+ console.error(`Fatal error in 'chorus ${sub}':`, err);
77
+ process.exit(1);
78
+ });
79
+ // Stop the server-launch module body from executing in this process tick.
80
+ // The promise above owns process lifetime from here.
81
+ }
82
+ }
83
+
84
+ const isSubcommand = SUBCOMMANDS.has(process.argv[2]);
85
+
19
86
  // ---------------------------------------------------------------------------
20
87
  // Dependency resolution (hoist-safe — see issue #214)
21
88
  // ---------------------------------------------------------------------------
@@ -57,16 +124,21 @@ function hasFlag(long, short) {
57
124
  return args.includes(long) || args.includes(short);
58
125
  }
59
126
 
60
- // --help / --version fast paths
61
- if (hasFlag("--help", "-h")) {
127
+ // --help / --version fast paths (skipped when a client subcommand was dispatched —
128
+ // e.g. `chorus login --help` belongs to the subcommand, not the server)
129
+ if (!isSubcommand && hasFlag("--help", "-h")) {
62
130
  const pkg = JSON.parse(readFileSync(join(__dirname, "package.json"), "utf8"));
63
131
  process.stdout.write(`
64
132
  Chorus v${pkg.version} — AI Agent & Human collaboration platform
65
133
 
66
134
  USAGE
67
- chorus [options]
135
+ chorus [options] Start the Chorus server (default)
136
+ chorus login [--url --api-key] Authenticate as an agent; saves ~/.chorus/daemon.json
137
+ chorus daemon [--url --api-key] Connect to a remote Chorus server, subscribe to the
138
+ agent notification stream, and wake a local headless
139
+ Claude Code on task dispatch
68
140
 
69
- OPTIONS
141
+ SERVER OPTIONS
70
142
  -p, --port <port> HTTP server port (default: 8637, env: PORT)
71
143
  -d, --data-dir <path> Data directory for PGlite (default: ~/.chorus-data, env: CHORUS_DATA_DIR)
72
144
  --hostname <host> Bind address (default: 0.0.0.0)
@@ -84,16 +156,38 @@ ENVIRONMENT VARIABLES
84
156
  NEXTAUTH_SECRET Session signing secret (auto-generated if unset)
85
157
  COOKIE_SECURE Set to "true" for HTTPS deployments
86
158
 
159
+ DAEMON / LOGIN (client mode)
160
+ --url <url> Remote Chorus server URL (env: CHORUS_URL)
161
+ --api-key <cho_...> Agent API key (env: CHORUS_API_KEY)
162
+ --yolo Give the woken Claude FULL permissions (env: CHORUS_YOLO=1)
163
+ (--dangerously-skip-permissions: Bash, file writes,
164
+ any command). Default is Chorus-MCP-tools-only.
165
+ --sigint-timeout <ms> Grace window after SIGINT before a forceful kill (env: CHORUS_DAEMON_SIGINT_TIMEOUT)
166
+ when an interrupt is received (default: 10000).
167
+ Also configurable via ~/.chorus/daemon.json sigintTimeoutMs.
168
+
169
+ Credential resolution order: flags > CHORUS_URL/CHORUS_API_KEY env >
170
+ ~/.chorus/daemon.json (from 'chorus login') > Claude Code plugin config.
171
+
172
+ The daemon spawns the local 'claude' CLI headlessly per task dispatch; it must
173
+ be on PATH. Override with CHORUS_CLAUDE_PATH. By default the woken Claude may
174
+ use only Chorus MCP tools (comment/claim/report/status) — pass --yolo for full
175
+ autonomy (real code-writing AI-DLC), which is dangerous: run it sandboxed.
176
+
87
177
  EXAMPLES
88
178
  chorus # Embedded PGlite (default)
89
179
  chorus --port 3000 # Custom port
90
180
  chorus --data-dir /var/lib/chorus # Custom data directory
91
181
  DATABASE_URL=postgres://... chorus --use-pglite=false # External PostgreSQL
182
+ chorus login # Interactive: validate key, save credentials
183
+ chorus daemon # Connect & wake local Claude Code (Chorus tools only)
184
+ chorus daemon --yolo # Full autonomy: woken Claude can run Bash / edit files
185
+ CHORUS_URL=https://... CHORUS_API_KEY=cho_... chorus daemon
92
186
  `);
93
187
  process.exit(0);
94
188
  }
95
189
 
96
- if (hasFlag("--version", "-v")) {
190
+ if (!isSubcommand && hasFlag("--version", "-v")) {
97
191
  const pkg = JSON.parse(readFileSync(join(__dirname, "package.json"), "utf8"));
98
192
  process.stdout.write(`${pkg.version}\n`);
99
193
  process.exit(0);
@@ -103,12 +197,19 @@ if (hasFlag("--version", "-v")) {
103
197
  // Configuration
104
198
  // ---------------------------------------------------------------------------
105
199
 
106
- const port = Number(getArg("--port", "-p") ?? process.env.PORT ?? 8637);
107
- const dataDir = resolve(
108
- getArg("--data-dir", "-d") ?? process.env.CHORUS_DATA_DIR ?? join(homedir(), ".chorus-data")
109
- );
110
- const hostname = getArg("--hostname") ?? "0.0.0.0";
111
- const PGLITE_PORT = Number(getArg("--pglite-port") ?? process.env.CHORUS_PGLITE_PORT ?? 5433);
200
+ // Server-only configuration. Guarded by `!isSubcommand` because these parse
201
+ // SERVER flags — notably `-d` is the server's `--data-dir` short alias, which
202
+ // collides with the daemon's `-d`/--detach. For `chorus daemon -d`, the
203
+ // subcommand dispatch above owns the process; computing `resolve(getArg("--data-dir","-d"))`
204
+ // here would see `-d` as a bare boolean `true` and throw `resolve(true)` on the
205
+ // same tick, crashing before the daemon detaches. Skipping for subcommands keeps
206
+ // the server-flag surface entirely out of the client-command path.
207
+ const port = isSubcommand ? 0 : Number(getArg("--port", "-p") ?? process.env.PORT ?? 8637);
208
+ const dataDir = isSubcommand
209
+ ? ""
210
+ : resolve(getArg("--data-dir", "-d") ?? process.env.CHORUS_DATA_DIR ?? join(homedir(), ".chorus-data"));
211
+ const hostname = isSubcommand ? "" : getArg("--hostname") ?? "0.0.0.0";
212
+ const PGLITE_PORT = isSubcommand ? 0 : Number(getArg("--pglite-port") ?? process.env.CHORUS_PGLITE_PORT ?? 5433);
112
213
 
113
214
  // ---------------------------------------------------------------------------
114
215
  // Utilities
@@ -362,8 +463,11 @@ process.on("exit", () => {
362
463
  // Run
363
464
  // ---------------------------------------------------------------------------
364
465
 
365
- main().catch((err) => {
366
- console.error("Fatal error:", err);
367
- if (pgliteProcess && !pgliteProcess.killed) pgliteProcess.kill("SIGTERM");
368
- process.exit(1);
369
- });
466
+ // Only launch the server when no client subcommand was dispatched above.
467
+ if (!isSubcommand) {
468
+ main().catch((err) => {
469
+ console.error("Fatal error:", err);
470
+ if (pgliteProcess && !pgliteProcess.killed) pgliteProcess.kill("SIGTERM");
471
+ process.exit(1);
472
+ });
473
+ }
@@ -0,0 +1,190 @@
1
+ // cli/backfill.mjs
2
+ // Reconnect backfill: after the SSE stream reconnects, recover anything that
3
+ // arrived during the gap so a dispatch made while the daemon was briefly
4
+ // disconnected is not lost (cli-daemon spec "Reconnect with backfill"). Two
5
+ // sources, both re-driven through the SAME router/queue + shared `seen` set:
6
+ //
7
+ // 1. NOTIFICATIONS — pull unread notifications via MCP and re-emit each as a
8
+ // synthetic `new_notification` event (the original OpenClaw onReconnect logic).
9
+ // This recovers autonomous wakes (task_assigned / mentioned / elaboration / …),
10
+ // whose actionable payload lives on the re-fetchable notification.
11
+ //
12
+ // 2. PENDING TURNS — re-derive UNSTARTED (status `pending`) DaemonSessionTurns for
13
+ // this connection's origin-pinned sessions from the TURN TABLE (子1 —
14
+ // daemon-session-conversation), NOT from notifications. The turn is persisted at
15
+ // the notification chokepoint before/at notification creation, so it survives a
16
+ // lost delivery ping; a `human_instruction`'s free-text body lives ONLY on the
17
+ // turn, making the turn table its sole reliable backfill source. Read via
18
+ // `GET /api/daemon/pending-turns?connectionUuid=…` (Bearer agent key, global
19
+ // fetch — zero new deps), each re-dispatched through `router.dispatchPendingTurn`.
20
+ //
21
+ // The pending-turns READ goes through the SHARED daemon REST client
22
+ // (`cli/daemon-rest-client.mjs`), which owns the `GET /api/daemon/pending-turns` request,
23
+ // Bearer auth, the connectionUuid guard, and the no-silent-errors handling (network error
24
+ // / non-2xx / bad JSON / missing turns array are all logged with cause and surfaced).
25
+ // This module keeps only the backfill-domain concerns: the notification source, the
26
+ // `onlyTurnUuid` precision filter, the `seen` dedup, and re-dispatch.
27
+ //
28
+ // De-dupes against the shared `seen` set so a reconnect storm doesn't double-wake.
29
+ //
30
+ // The returned `backfill` function also exposes `backfill.pendingTurnsOnly` — the
31
+ // connection-scoped pending-turns sweep ALONE — so the LIVE `deliver_turn` control ping
32
+ // (子2 — origin-only live delivery) can reuse the EXACT same sweep without re-running the
33
+ // notification source. Live ping and reconnect backfill therefore converge on one sweep +
34
+ // one `seen` set, so a turn runs at most once regardless of which path observes it first.
35
+
36
+ import { createDaemonRestClient } from "./daemon-rest-client.mjs";
37
+
38
+ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
39
+
40
+ /**
41
+ * Build an onReconnect handler that (1) re-emits missed unread notifications into
42
+ * `dispatch`, and (2) — when a connectionUuid + pending-turn dispatcher are wired —
43
+ * re-derives this connection's unstarted (pending) turns from the turn table and
44
+ * re-dispatches each. Both paths share the `seen` set so already-handled work is not
45
+ * re-run.
46
+ *
47
+ * @param {{
48
+ * mcpClient: { callTool: (name: string, args?: Record<string, unknown>) => Promise<unknown> },
49
+ * dispatch: (event: { type: string, notificationUuid: string }) => void,
50
+ * seen?: Set<string>,
51
+ * logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
52
+ * limit?: number,
53
+ * // 子1 — pending-turn backfill (all optional; when absent, only the notification
54
+ * // backfill runs, preserving the original behavior/wiring):
55
+ * url?: string, Chorus base URL (for the pending-turns read).
56
+ * apiKey?: string, `cho_` agent API key.
57
+ * getConnectionUuid?: () => (string|null), The daemon's registered connection uuid
58
+ * (learned from the SSE handshake). Null until
59
+ * then — the pending-turns read is skipped while null.
60
+ * dispatchPendingTurn?: (turn: { turnUuid: string, sessionId: string, directIdeaUuid: string|null, trigger: string, promptText: string|null }) => void,
61
+ * fetchImpl?: typeof fetch, Injectable for tests.
62
+ * }} opts
63
+ * @returns {() => Promise<void>}
64
+ */
65
+ export function createBackfill(opts) {
66
+ const { mcpClient, dispatch } = opts;
67
+ const seen = opts.seen ?? new Set();
68
+ const logger = opts.logger ?? NOOP_LOGGER;
69
+ const limit = opts.limit ?? 50;
70
+ // 子1 pending-turn backfill wiring (optional).
71
+ const url = opts.url ?? null;
72
+ const apiKey = opts.apiKey ?? null;
73
+ const getConnectionUuid = opts.getConnectionUuid ?? null;
74
+ const dispatchPendingTurn = opts.dispatchPendingTurn ?? null;
75
+ // The pending-turns READ is delegated to the shared client. Built only when the
76
+ // pending-turn backfill is wired (url + apiKey + getConnectionUuid present); otherwise
77
+ // backfillPendingTurns is an early no-op (notification-only callers / older tests).
78
+ const pendingTurnsClient =
79
+ url && apiKey && getConnectionUuid
80
+ ? createDaemonRestClient({ url, apiKey, getConnectionUuid, fetchImpl: opts.fetchImpl, logger })
81
+ : null;
82
+
83
+ /** Re-emit unread notifications missed during the gap (autonomous wakes). */
84
+ async function backfillNotifications() {
85
+ let result;
86
+ try {
87
+ result = /** @type {{ notifications?: Array<{ uuid: string }> }} */ (
88
+ await mcpClient.callTool("chorus_get_notifications", {
89
+ status: "unread",
90
+ limit,
91
+ autoMarkRead: false,
92
+ })
93
+ );
94
+ } catch (err) {
95
+ logger.warn(`[Chorus] backfill fetch failed: ${err}`);
96
+ return;
97
+ }
98
+
99
+ const notifications = result?.notifications;
100
+ if (!Array.isArray(notifications)) {
101
+ logger.warn("[Chorus] backfill: no notifications array in response");
102
+ return;
103
+ }
104
+
105
+ let redispatched = 0;
106
+ for (const n of notifications) {
107
+ if (!n || typeof n.uuid !== "string") continue;
108
+ // Pre-check only — do NOT mark seen here. The router (dispatch) is the
109
+ // single owner of marking-at-dispatch; if backfill marked first, the
110
+ // router's own `seen.has(...)` early-return would fire and the wake would
111
+ // never enqueue (every backfilled dispatch silently dropped). This
112
+ // pre-check is just a cheap early-out for notifications already handled.
113
+ if (seen.has(n.uuid)) continue;
114
+ redispatched++;
115
+ dispatch({ type: "new_notification", notificationUuid: n.uuid });
116
+ }
117
+ if (redispatched > 0) {
118
+ logger.info(`[Chorus] backfill re-dispatched ${redispatched} missed notification(s)`);
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Re-derive this connection's UNSTARTED (pending) turns from the turn table (子1)
124
+ * and re-dispatch them through the router. No-op (silently skipped) when the
125
+ * pending-turn wiring is absent or the connectionUuid is not known yet. Never throws
126
+ * into the reconnect path — a failure is logged and swallowed.
127
+ *
128
+ * `onlyTurnUuid` (子2 — origin-only live delivery): when set, dispatch ONLY the turn
129
+ * with that uuid out of the fetched set, so a live `deliver_turn` ping runs PRECISELY
130
+ * the turn it announced and never drags the connection's other still-pending turns
131
+ * along. When omitted (the reconnect path), dispatch ALL pending turns — the lost-ping
132
+ * safety net that recovers everything missed during a gap.
133
+ *
134
+ * @param {string} [onlyTurnUuid]
135
+ */
136
+ async function backfillPendingTurns(onlyTurnUuid) {
137
+ if (!pendingTurnsClient || !dispatchPendingTurn) {
138
+ // Pending-turn backfill not wired (e.g. notification-only callers / older tests).
139
+ return;
140
+ }
141
+ // The shared client reads `GET /api/daemon/pending-turns?connectionUuid=…`, skipping
142
+ // (no log) while the connectionUuid is not known yet — a normal early state — and
143
+ // surfacing a network error / non-2xx / bad JSON / missing turns array with its cause
144
+ // (logged) as `result.ok === false`. We just consume the parsed turns; never throw.
145
+ const result = await pendingTurnsClient.readPendingTurns();
146
+ if (!result.ok || !result.data) {
147
+ // Either nothing to read yet (skipped) or a logged failure — nothing to dispatch.
148
+ return;
149
+ }
150
+ const turns = result.data.turns;
151
+
152
+ let redispatched = 0;
153
+ for (const t of turns) {
154
+ if (!t || typeof t.turnUuid !== "string") continue;
155
+ // Live `deliver_turn` precision: when a specific turnUuid was announced, dispatch
156
+ // ONLY it — skip every other pending turn of the connection (they are recovered by
157
+ // the arg-less reconnect sweep, not by a single-turn live ping).
158
+ if (onlyTurnUuid && t.turnUuid !== onlyTurnUuid) continue;
159
+ // The router (dispatchPendingTurn) is the single owner of marking-seen (keyed
160
+ // `turn:<uuid>`), exactly like the notification path — so do NOT mark here.
161
+ if (seen.has(`turn:${t.turnUuid}`)) continue;
162
+ redispatched++;
163
+ dispatchPendingTurn(t);
164
+ }
165
+ if (redispatched > 0) {
166
+ const scope = onlyTurnUuid ? `turn ${onlyTurnUuid}` : `${redispatched} pending turn(s)`;
167
+ logger.info(`[Chorus] backfill re-derived ${scope} from the turn table`);
168
+ }
169
+ }
170
+
171
+ async function backfill() {
172
+ // Run both sources. Each swallows its own errors so one failing source never
173
+ // aborts the other (a notification-fetch failure must not lose pending turns, and
174
+ // vice versa).
175
+ await backfillNotifications();
176
+ await backfillPendingTurns();
177
+ }
178
+
179
+ // Expose the CONNECTION-SCOPED pending-turns sweep on its own so the LIVE
180
+ // `deliver_turn` control ping (子2 — origin-only live delivery) reuses the EXACT same
181
+ // sweep the reconnect path runs — no second sweep, no second code path. The control
182
+ // handler triggers `backfill.pendingTurnsOnly()`; it shares the same `seen` set +
183
+ // `dispatchPendingTurn`, so a turn delivered live and also re-derived on reconnect runs
184
+ // at most once. Non-throwing (the inner sweep swallows + logs its own errors). The live
185
+ // `deliver_turn` ping passes the precise `turnUuid` so ONLY that turn runs; an arg-less
186
+ // call (reconnect) sweeps all pending.
187
+ /** @type {(onlyTurnUuid?: string) => Promise<void>} */
188
+ backfill.pendingTurnsOnly = backfillPendingTurns;
189
+ return backfill;
190
+ }