@chorus-aidlc/chorus 0.15.1 → 0.16.2

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 (444) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +394 -393
  3. package/.next/standalone/.next/app-path-routes-manifest.json +46 -46
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +21 -21
  6. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  46. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  50. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  51. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  54. package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
  55. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  57. package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
  58. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/admin.html +2 -2
  60. package/.next/standalone/.next/server/app/admin.rsc +2 -2
  61. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  69. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  83. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
  88. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
  90. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  96. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  102. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  105. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  108. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  121. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  124. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  127. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  131. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
  134. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/events/route.js +1 -1
  137. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  144. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  147. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  150. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  156. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
  161. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/mcp/route.js +2 -2
  164. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  165. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  167. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  170. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  171. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  173. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  176. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  177. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  179. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  182. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  183. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  185. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  186. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  188. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  189. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  193. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
  196. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  200. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  201. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  202. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  205. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  207. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  208. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  209. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  211. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
  214. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
  215. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  217. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  222. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  223. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
  225. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
  226. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  227. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  230. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  235. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  236. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  237. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  238. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  239. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  241. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  242. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  243. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  244. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  245. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  246. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  247. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  248. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  250. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  251. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  253. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  254. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  256. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  257. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  258. package/.next/standalone/.next/server/app/index.html +2 -2
  259. package/.next/standalone/.next/server/app/index.rsc +2 -2
  260. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  262. package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
  263. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  264. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  265. package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
  266. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  269. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
  270. package/.next/standalone/.next/server/app/login.html +2 -2
  271. package/.next/standalone/.next/server/app/login.rsc +2 -2
  272. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  273. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  274. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  275. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  276. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  277. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  278. package/.next/standalone/.next/server/app/projects.html +2 -2
  279. package/.next/standalone/.next/server/app/projects.rsc +3 -3
  280. package/.next/standalone/.next/server/app/settings.html +2 -2
  281. package/.next/standalone/.next/server/app/settings.rsc +4 -4
  282. package/.next/standalone/.next/server/app-paths-manifest.json +46 -46
  283. package/.next/standalone/.next/server/chunks/1318.js +1 -1
  284. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  285. package/.next/standalone/.next/server/chunks/2570.js +2 -2
  286. package/.next/standalone/.next/server/chunks/2572.js +1 -1
  287. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  288. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  289. package/.next/standalone/.next/server/chunks/3594.js +1 -0
  290. package/.next/standalone/.next/server/chunks/{2547.js → 4011.js} +3 -3
  291. package/.next/standalone/.next/server/chunks/4394.js +1 -0
  292. package/.next/standalone/.next/server/chunks/4827.js +1 -1
  293. package/.next/standalone/.next/server/chunks/5205.js +1 -0
  294. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  295. package/.next/standalone/.next/server/chunks/{2282.js → 5351.js} +3 -3
  296. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  297. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  298. package/.next/standalone/.next/server/chunks/6506.js +3 -3
  299. package/.next/standalone/.next/server/chunks/6667.js +1 -0
  300. package/.next/standalone/.next/server/chunks/679.js +1 -1
  301. package/.next/standalone/.next/server/chunks/6995.js +1 -0
  302. package/.next/standalone/.next/server/chunks/7364.js +1 -1
  303. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  304. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  305. package/.next/standalone/.next/server/chunks/920.js +1 -1
  306. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  307. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  308. package/.next/standalone/.next/server/chunks/9793.js +1 -0
  309. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  310. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  311. package/.next/standalone/.next/server/pages/404.html +2 -2
  312. package/.next/standalone/.next/server/pages/500.html +1 -1
  313. package/.next/standalone/.next/server/pages-manifest.json +1 -1
  314. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  315. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  316. package/.next/standalone/.next/static/chunks/11595.b6f8ad33572b32fe.js +1 -0
  317. package/.next/standalone/.next/static/chunks/19887-9f459ee9e8d0855f.js +1 -0
  318. package/.next/standalone/.next/static/chunks/29108-b9b232255811ffa8.js +1 -0
  319. package/.next/standalone/.next/static/chunks/{31308-bb4a97b3f39c22dd.js → 31308-fda6febfb2882a28.js} +1 -1
  320. package/.next/standalone/.next/static/chunks/33456.e8550ad410031e29.js +1 -0
  321. package/.next/standalone/.next/static/chunks/35432-ee83da56c49ef6f8.js +1 -0
  322. package/.next/standalone/.next/static/chunks/4860.b405fc235b36271b.js +1 -0
  323. package/.next/standalone/.next/static/chunks/53073-5fd399cb25a11740.js +1 -0
  324. package/.next/standalone/.next/static/chunks/6603-07faab08560f7ecd.js +1 -0
  325. package/.next/standalone/.next/static/chunks/66980-652990fcf3212c94.js +10 -0
  326. package/.next/standalone/.next/static/chunks/78155-db70d9684a1e77a2.js +1 -0
  327. package/.next/standalone/.next/static/chunks/78917-7354d3b6908da7d1.js +1 -0
  328. package/.next/standalone/.next/static/chunks/82751-de255af4418d53e4.js +1 -0
  329. package/.next/standalone/.next/static/chunks/94643-6d31df78aa3074b5.js +1 -0
  330. package/.next/standalone/.next/static/chunks/96170-75da13decdb6f73f.js +1 -0
  331. package/.next/standalone/.next/static/chunks/99366-425e9ef22e60e3e2.js +1 -0
  332. package/.next/standalone/.next/static/chunks/99373.9dce8f30802824fc.js +1 -0
  333. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-cea0bb3e3a295bea.js +1 -0
  334. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-007278623926490f.js +1 -0
  335. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-b6ecaf52f6b81ec7.js +1 -0
  336. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-2c9d3f4c6e0ff807.js → page-82404154708e48a9.js} +1 -1
  337. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-f5a351c544ed23d7.js +1 -0
  338. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-3cd46bec9383b191.js +1 -0
  339. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-d5b222f379b2e8ca.js +1 -0
  340. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/{page-ed9415921188b4d3.js → page-6abc7d1785e2b999.js} +1 -1
  341. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-c70af8cac7bdc483.js → page-7f87113e5d8bcf6e.js} +1 -1
  342. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-715b000c156a080c.js → page-30ab1573c4bd466f.js} +1 -1
  343. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-b21d4184d9ca0b25.js +1 -0
  344. package/.next/standalone/.next/static/chunks/app/onboarding/page-3b6c54f887108635.js +1 -0
  345. package/.next/standalone/.next/static/chunks/{webpack-e181cbbb1e041891.js → webpack-b54e0c78eded76be.js} +1 -1
  346. package/.next/standalone/.next/static/css/893d99a21153c9b0.css +1 -0
  347. package/.next/standalone/package.json +1 -1
  348. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  349. package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +1 -1
  350. package/.next/standalone/public/chorus-plugin/agents/proposal-reviewer.md +1 -0
  351. package/.next/standalone/public/chorus-plugin/agents/task-reviewer.md +2 -0
  352. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  353. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +4 -3
  354. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
  355. package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +68 -0
  356. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
  357. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  358. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
  359. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  360. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  361. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +1 -1
  362. package/.next/standalone/public/install-kiro.sh +10 -7
  363. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +1 -1
  364. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +1 -1
  365. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +1 -1
  366. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.json +1 -0
  367. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
  368. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +1 -1
  369. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +68 -0
  370. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
  371. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +1 -1
  372. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +1 -1
  373. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
  374. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
  375. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +1 -1
  376. package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +3 -2
  377. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
  378. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  379. package/.next/standalone/public/skill/chorus/SKILL.md +4 -3
  380. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +2 -2
  381. package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
  382. package/.next/standalone/public/skill/docs-chorus/SKILL.md +70 -0
  383. package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
  384. package/.next/standalone/public/skill/package.json +9 -5
  385. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  386. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +2 -1
  387. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  388. package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
  389. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +2 -1
  390. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
  391. package/README.ja.md +31 -359
  392. package/README.ko.md +33 -360
  393. package/README.md +39 -367
  394. package/README.zh.md +36 -341
  395. package/cli/claude-spawner.mjs +15 -6
  396. package/cli/client-args.mjs +8 -0
  397. package/cli/codex-spawner.mjs +7 -3
  398. package/cli/control-handler.mjs +13 -3
  399. package/cli/credentials.mjs +41 -0
  400. package/cli/daemon-config.mjs +202 -1
  401. package/cli/daemon-install-config.mjs +38 -1
  402. package/cli/daemon-rest-client.mjs +11 -3
  403. package/cli/daemon.mjs +274 -11
  404. package/cli/event-router.mjs +17 -5
  405. package/cli/login.mjs +90 -2
  406. package/cli/prompts.mjs +116 -1
  407. package/cli/turn-reporter.mjs +5 -1
  408. package/cli/wake-queue.mjs +57 -35
  409. package/cli/waker.mjs +125 -36
  410. package/package.json +1 -1
  411. package/prisma/migrations/20260814101500_add_typed_assignment_provenance/migration.sql +2 -0
  412. package/prisma/schema.prisma +4 -2
  413. package/.next/standalone/.next/server/chunks/1114.js +0 -1
  414. package/.next/standalone/.next/server/chunks/1524.js +0 -1
  415. package/.next/standalone/.next/server/chunks/330.js +0 -1
  416. package/.next/standalone/.next/server/chunks/3525.js +0 -1
  417. package/.next/standalone/.next/server/chunks/4070.js +0 -1
  418. package/.next/standalone/.next/server/chunks/8540.js +0 -1
  419. package/.next/standalone/.next/static/chunks/11595.69e774e65ffda45f.js +0 -1
  420. package/.next/standalone/.next/static/chunks/18351-12dc856208d79e10.js +0 -1
  421. package/.next/standalone/.next/static/chunks/33456.48112aa459fd9c68.js +0 -1
  422. package/.next/standalone/.next/static/chunks/37938-0b9a2b891c04b166.js +0 -1
  423. package/.next/standalone/.next/static/chunks/4340-a33120fb742af57e.js +0 -1
  424. package/.next/standalone/.next/static/chunks/4860.496d21fc6db9e153.js +0 -1
  425. package/.next/standalone/.next/static/chunks/68326-61feeb2f6cddd338.js +0 -1
  426. package/.next/standalone/.next/static/chunks/72974-7e63b565a9ef443b.js +0 -1
  427. package/.next/standalone/.next/static/chunks/78917-f91904c6c2d12dab.js +0 -1
  428. package/.next/standalone/.next/static/chunks/80748-e971c5a5d6ef967d.js +0 -1
  429. package/.next/standalone/.next/static/chunks/80904-973284d1fe916c38.js +0 -1
  430. package/.next/standalone/.next/static/chunks/94426-39b6da238425f9b7.js +0 -10
  431. package/.next/standalone/.next/static/chunks/94470-cae3b3ad4e51d2ff.js +0 -1
  432. package/.next/standalone/.next/static/chunks/94643-ba1ebff5769d2b50.js +0 -1
  433. package/.next/standalone/.next/static/chunks/99373.5ac319a55a8f99a1.js +0 -1
  434. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-177a3fa88be94b4a.js +0 -1
  435. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-ae7c9d32fa1c2532.js +0 -1
  436. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-4a8ac49308a4e23b.js +0 -1
  437. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-03408be00dc4822b.js +0 -1
  438. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-dd5a0d1e50226c78.js +0 -1
  439. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-596d97796dd55e2f.js +0 -1
  440. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-e786a59c24eb5bda.js +0 -1
  441. package/.next/standalone/.next/static/chunks/app/onboarding/page-df7c97cefb508201.js +0 -1
  442. package/.next/standalone/.next/static/css/ef995b001437e3ef.css +0 -1
  443. /package/.next/standalone/.next/static/{8kqUZqMF8xgdDXm_I4XdF → YTZwWTfE0BsJnjCDYCEHi}/_buildManifest.js +0 -0
  444. /package/.next/standalone/.next/static/{8kqUZqMF8xgdDXm_I4XdF → YTZwWTfE0BsJnjCDYCEHi}/_ssgManifest.js +0 -0
package/README.zh.md CHANGED
@@ -2,13 +2,15 @@
2
2
  <img src="packages/landing/public/images/chorus-slug.png" alt="Chorus" width="240" />
3
3
  </p>
4
4
 
5
- <p align="center"><strong>面向 AI 与人类协作的 Agent Harness</strong></p>
5
+ <p align="center"><strong>你的编程 Agent 之上的 Harness:Agent 提议,人类把关,软件交付。</strong></p>
6
6
 
7
7
  <p align="center"><a href="README.md">English</a> · <strong>中文</strong> · <a href="README.ko.md">한국어</a> · <a href="README.ja.md">日本語</a></p>
8
8
 
9
- Chorus 是一个 Agent Harness——包裹在 LLM 外面的基础设施层,负责管理会话生命周期、任务状态、子 Agent 编排、可观测性和故障恢复。它让多个具备细粒度权限配置的 AI Agent 和人类在同一平台上协作,完成从需求到交付的全流程。
9
+ <p align="center"><a href="https://doc.chorus-ai.dev/zh/"><strong>📖 文档</strong></a></p>
10
10
 
11
- **[AI-DLC(AI-Driven Development Lifecycle)](https://aws.amazon.com/blogs/devops/ai-driven-development-life-cycle/)** 方法论启发。核心理念:**Reversed Conversation**——AI 提议,人类验证。
11
+ Chorus 是你的编程 Agent 之上的 Harness。编程 Agent 是把模型 harness 起来写代码的那层;Chorus 高它们一层,把多个这样的 Agent 和你收进同一条流水线:Agent 提议,你来验收,想法最终交付成软件,而不只是写代码。在底层,它把这套多 Agent、真人把关的协作稳稳跑起来所需的一切都处理好:会话生命周期、任务状态、子 Agent 编排、可观测性和故障恢复。每个 AI Agent 都有细粒度、可配置的权限。
12
+
13
+ 受 **[AI-DLC(AI-Driven Development Lifecycle)](https://aws.amazon.com/blogs/devops/ai-driven-development-life-cycle/)** 方法论启发。核心理念:**Reversed Conversation**:AI 提议,人类验证。
12
14
 
13
15
  ---
14
16
 
@@ -21,280 +23,80 @@ Idea ──> Proposal ──> [Document + Task DAG] ──> Execute ──> Veri
21
23
  提出 + 需求澄清 + 起草 PRD/任务 + 报告进度 + 验收 + 关闭
22
24
  ```
23
25
 
24
- 每个阶段下方标的是「执行该阶段所需的权限」,可以由人类、Agent(预设或 Custom)或两者持有。没有固定角色,5 × 3 权限矩阵的任意组合都合法,详见 [`docs/PERMISSIONS.md`](docs/PERMISSIONS.md)(英文)。
26
+ 每个阶段下方标的是「执行该阶段所需的权限」,可以授予人类、Agent 或两者。没有固定角色,5 × 3 权限矩阵的任意组合都合法。→ [Agent 权限](https://doc.chorus-ai.dev/zh/guides/manage-agents/)
25
27
 
26
28
  ---
27
29
 
28
30
  ## 最近更新
29
31
 
32
+ **[v0.16.1](https://chorus-ai.dev/zh/blog/chorus-v0.16.1-release/)** — 一个 `chorus daemon` 现在可以同时服务多个互相独立的 agent,每个都有自己的密钥、工作目录、后端和权限(通过 `agents[]` 配置);agent 之间还能通过 @ 把活递给对方,每次唤醒都落在该 agent 自己的项目目录里。
33
+
34
+ **[v0.16.0](https://chorus-ai.dev/zh/blog/chorus-v0.16.0-release/)** — 新增 `docs` skill,引导 Agent 查阅文档站点([doc.chorus-ai.dev](https://doc.chorus-ai.dev)),基于当前文档作答,而不是凭记忆复述。
35
+
30
36
  **[v0.15.0](https://chorus-ai.dev/zh/blog/chorus-v0.15.0-release/)** — 项目级 Agent 工作目录:每位用户可以为项目中的每个 Agent 绑定主机和 cwd,只浏览 daemon 允许的目录,并让任务分配、唤醒、恢复和后续对话使用同一个执行位置,且不迁移进行中的会话。Codex 现在会单独保存可恢复的后端 thread ID,并移除不再需要的 Chorus session 管理步骤。
31
37
 
32
38
  **[v0.14.1](https://chorus-ai.dev/zh/blog/chorus-v0.14.1-release/)** — Amazon Kiro CLI 成为第四种接入方式(Kiro CLI v2):一条命令的 `install-kiro.sh` 插件,以及 `--agent kiro` 的 daemon 后端,另有若干 daemon 修复。
33
39
 
34
40
  **[v0.14.0](https://chorus-ai.dev/zh/blog/chorus-v0.14.0-release/)** — 全应用深色模式(浅色 / 深色 / 跟随系统)。参考资料可挂到任意想法、提案或任务上,行内可读,也能通过 MCP 读写。新增韩语和日语(韩语由社区贡献)。用于归类的**主题**想法,以及 daemon 的「开始开发」/「Yolo」按钮、对话式建想法、崩溃恢复与 `chorus daemon install`。
35
41
 
36
- **[v0.13.0](https://chorus-ai.dev/zh/blog/chorus-v0.13.0-release/)** — 项目资源思维导图:新增 Graph 视图,把每个项目的想法、提案、文档、任务连成一棵可折叠的树,从项目自身结构自动生成。每张卡片都标着当前状态(想法用想法列表那套派生状态),标题搜索会自动展开命中节点的上游并高亮/调暗、配上下切换定位,同一张可缩放可拖动的图在桌面与手机上通用(捏合 + 双击缩放)。
37
-
38
- **[v0.12.0](https://chorus-ai.dev/zh/blog/chorus-v0.12.0-release/)** — 可寻址的 daemon 实例:一个 `chorus daemon` 可同时守多个工作目录(`--cwd`),每一个 `(agent, 主机, 目录)` 都成为一个能单独看见、单独点名的实例,贯穿 presence、@-mention 与任务指派。在想法上钉一次实例,其下的提案、任务与唤醒都会继承;带钉的唤醒被精确投递到那个实例,而非全员广播。评论区的 Agent @-mention 渲染为实时在线状态徽章,评论列表改为游标式无限滚动。
39
-
40
- **[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 撰写提案。
41
-
42
- **[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。
43
-
44
- **[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 拷贝。
45
-
46
- **[v0.9.0](https://chorus-ai.dev/zh/blog/chorus-v0.9.0-release/)** — 头脑风暴 skill 帮你把模糊的想法聊出形状(在结构化多选题前先开放式对话),想法落地后自动生成总结报告(Summary / Decisions / Follow-ups 三段式,挂在想法概览页)。
47
-
48
- **[v0.8.0](https://chorus-ai.dev/zh/blog/chorus-v0.8.0-release/)** — OpenSpec-aware 模式(仅 Claude Code):当仓库下同时存在 `openspec/` 目录和 `openspec` CLI 时自动启用,新增 `/opsx/{explore,propose,apply,archive}` 与 task verify 后的 archive-trigger 钩子。
49
-
50
42
  > 完整更新日志:[CHANGELOG.md](CHANGELOG.md)
51
43
 
52
44
  ---
53
45
 
54
46
  ## 快速开始
55
47
 
56
- 两条命令在本地运行 Chorus——无需数据库、无需 Docker、无需配置文件。
48
+ 两条命令即可,无需数据库、无需 Docker、无需配置文件。
57
49
 
58
50
  ```bash
59
51
  npm install -g @chorus-aidlc/chorus
60
52
  chorus
61
53
  ```
62
54
 
63
- Chorus 会自动启动内嵌 PostgreSQL (PGlite)、执行数据库迁移,然后在 **http://localhost:8637** 提供服务。
64
-
65
- > **提示:** PGlite 是嵌入式单进程 PostgreSQL,本地单人使用完全没问题,但并发能力有限。如果需要多人或多 Agent 同时使用,建议通过 `DATABASE_URL=postgresql://...` 连接外部 PostgreSQL,或使用完整的 [Docker Compose](#docker-一键启动推荐) 部署。
66
-
67
- 默认登录账号:`admin@chorus.local` / `chorus`
68
-
69
- ### 参数选项
70
-
71
- ```bash
72
- # 自定义端口
73
- chorus --port 3000
74
-
75
- # 自定义数据目录(默认:~/.chorus-data)
76
- chorus --data-dir /path/to/data
77
-
78
- # 自定义登录账号
79
- DEFAULT_USER=me@example.com DEFAULT_PASSWORD=secret chorus
80
-
81
- # 使用外部 PostgreSQL(跳过内嵌 PGlite)
82
- DATABASE_URL=postgresql://user:pass@host:5432/chorus chorus
83
- ```
84
-
85
- ### 其他部署方式
86
-
87
- | 方式 | 命令 |
88
- |------|------|
89
- | **npm**(最简单) | `npm i -g @chorus-aidlc/chorus && chorus` |
90
- | **Docker(单镜像)** | [`docker compose -f docker-compose.local.yml up`](#docker-一键启动推荐) |
91
- | **Docker(完整版)** | [`docker compose up`](#docker-一键启动推荐)(PostgreSQL + Redis + Chorus) |
92
- | **AWS CDK** | [部署到 AWS](#部署到-aws) |
93
-
94
- ### `chorus daemon` — 作为 Agent 运行时连接
95
-
96
- `chorus daemon` 将你的本地机器作为 Agent 运行时连接到远程 Chorus 服务器并执行 Chorus 分配的任务。
97
-
98
- > **Agent 后端:** 支持 **Claude Code**(默认)和 **Codex**,用 `--agent codex`(或 `CHORUS_AGENT=codex`)切换。对其他 Agent CLI(Copilot 等)的支持计划在未来版本中实现。
99
-
100
- ```bash
101
- chorus login # 认证(打开浏览器)
102
- chorus daemon # 前台启动 daemon
103
- chorus daemon -d # 后台启动 daemon(分离模式)
104
- chorus daemon install # 安装为开机自启服务(Linux)—— 推荐
105
- chorus daemon uninstall # 卸载已安装的服务
106
- chorus daemon stop # 停止 daemon(已安装服务时委派给 systemd)
107
- chorus daemon stop --force # pid 卡死时强制清理 pidfile
108
- chorus daemon status # 查看 daemon 状态
109
- chorus daemon restart # 重启 daemon
110
- chorus daemon logs # 查看 daemon 日志
111
- ```
112
-
113
- **主要特性:**
114
-
115
- - **Claude Code 与 Codex 后端** — 自动检测 PATH 中的 `claude`(或 `codex`)CLI;用 `--agent codex` 选择
116
- - **后台模式** — 使用 `-d` 标志后台运行;用 `stop/restart/logs` 管理
117
- - **开机自启服务** — `chorus daemon install` 生成正确的 `systemd --user` unit 并启动(见下文);此后 `status/stop/restart/logs` 会自动委派给 systemd
118
- - **权限模式** — 默认完全访问(yolo);使用 `--chorus-only` 限制为仅 Chorus MCP 工具
119
- - **多路径** — 用可重复的 `--cwd` 让单个 daemon 同时服务多个工作目录(见下文)
120
- - **交互式设置** — 首次启动时如未配置凭证会提示输入
55
+ Chorus 会自动启动内嵌 PostgreSQL (PGlite)、执行数据库迁移,然后在 **http://localhost:8637** 提供服务。默认登录账号:`admin@chorus.local` / `chorus`。
121
56
 
122
- daemon 需要先认证。首次使用请先运行 `chorus login`,或者 daemon 会在首次启动时交互式提示输入凭证(如果在终端中运行)。
57
+ > 需要运行多个 agent,或部署到生产环境?可使用外部 PostgreSQL、Docker AWS → **[部署与自托管](https://doc.chorus-ai.dev/zh/guides/deployment-overview/)**。
123
58
 
124
- #### 开机 / 登录时自启 —— `chorus daemon install`
125
-
126
- ```bash
127
- chorus daemon install --cwd ~/work/repo-a --cwd ~/work/repo-b # 立即安装并启动,登录时自启
128
- chorus daemon uninstall # 停用并移除该服务
129
- ```
130
-
131
- 在 Linux 上,`install` 会生成一个 `systemd --user` unit,让 daemon 以**前台**方式运行(`Type=simple`,不带 `-d`),从而由 systemd 直接接管进程,然后 `daemon-reload` + `enable --now`。它会捕获你传入的 `--cwd`/`--agent`/`--chorus-only` 参数。**不要**手写 `Type=forking` + `chorus daemon -d` 的 unit —— daemon 会自我 daemon 化,systemd 追踪不到,重启时会陷入死循环;交给 `install` 写正确的 unit。在 macOS/Windows 上,`install` 会打印一份可手动安装的正确模板。请先运行 `chorus login`,让 unit 能读到凭证。详见 [docs/DAEMON.md](docs/DAEMON.md)。
132
-
133
- #### 服务多个工作目录
134
-
135
- 一个 daemon 可以同时服务多个本地工作目录——每个声明的路径会注册为一条独立连接(各自拥有会话与唤起循环),归属同一个 Agent。路径**仅仅**是 daemon 服务的目录,不携带任何项目绑定。
136
-
137
- ```bash
138
- chorus daemon --cwd ~/work/repo-a --cwd ~/work/repo-b # 可重复传入
139
- CHORUS_DAEMON_CWDS="~/work/repo-a:~/work/repo-b" chorus daemon # 或用环境变量(`:` 或 `,` 分隔)
140
- ```
141
-
142
- 不传 `--cwd` 时,daemon 只服务它的启动目录这一个路径。
143
-
144
- #### 配置文件 —— `~/.chorus/daemon.json`
145
-
146
- `chorus login` 会把凭证写入此文件(权限 `0600`)。你也可以把 daemon 的调优项写进**同一个**文件。所有字段都是可选的;命令行参数和环境变量的优先级始终高于文件。
147
-
148
- ```json
149
- {
150
- "url": "https://chorus.example.com",
151
- "apiKey": "cho_xxxxxxxxxxxxxxxxxxxxxxxx",
152
- "agentUuid": "00000000-0000-0000-0000-000000000000",
153
- "agentName": "My Daemon Agent",
154
- "cwds": ["~/work/repo-a", "~/work/repo-b"],
155
- "sigintTimeoutMs": 10000
156
- }
157
- ```
158
-
159
- | 字段 | 类型 | 写入方 / 用途 | 优先级(从高到低) |
160
- |------|------|---------------|--------------------|
161
- | `url` | string | 远程 Chorus 服务器 URL | `--url` 参数 → `CHORUS_URL` → 文件 |
162
- | `apiKey` | string | Agent API Key(`cho_…`) | `--api-key` 参数 → `CHORUS_API_KEY` → 文件 |
163
- | `agentUuid` / `agentName` | string | 认证身份(登录时记录) | 由 `chorus login` 写入 |
164
- | `cwds` | string[] | daemon 服务的工作目录(多路径) | `--cwd` 参数 → `CHORUS_DAEMON_CWDS` → 文件 → 启动目录 |
165
- | `sigintTimeoutMs` | number | SIGINT 后强制结束前的宽限窗口(毫秒,默认 `10000`) | `--sigint-timeout` 参数 → `CHORUS_DAEMON_SIGINT_TIMEOUT` → 文件 → `10000` |
166
- | `yoloAckAt` | string | 内部字段——TTY 下 yolo 确认的时间戳(自动管理) | — |
167
-
168
- daemon 启动时的横幅会打印它**实际读取的 `daemon.json` 路径**(以及该文件是否存在),让你随时清楚该编辑哪个文件。
59
+ 想把本地机器变成领取任务的 agent 运行时,运行 `chorus daemon` → **[Daemon 运维](https://doc.chorus-ai.dev/zh/guides/daemon-operations/)** · **[远程控制](https://doc.chorus-ai.dev/zh/guides/remote-control/)**。
169
60
 
170
61
  ---
171
62
 
172
63
  ## 界面预览
173
64
 
174
- ### 远程唤醒 Agent——派活到指定目录,实时看它跑
65
+ ### 远程唤醒 Agent:派活到指定目录,实时看它跑
175
66
 
176
67
  ![远程唤醒 Agent](packages/landing/public/images/agent-daemon-wake.gif)
177
68
 
178
69
  把一条想法派给远程 Agent 的某个目录,打开对话窗口,就能实时看到本地的 Claude Code 接活、开跑,全程不用碰终端,也不用手动 resume。
179
70
 
180
- ### 项目资源图谱——整个项目一张实时思维导图
71
+ ### 项目资源图谱:整个项目一张实时思维导图
181
72
 
182
73
  ![项目资源图谱](packages/landing/public/images/mind-map.png)
183
74
 
184
- Chorus 自动把整个项目整理成一张思维导图——想法、提案、文档、任务连成一棵树,还能实时反映 Agent 的动作,每张卡片的状态随着工作推进自动更新。
75
+ 想法、提案、文档、任务连成一棵树,每张卡片的状态随着 Agent 工作实时更新。
185
76
 
186
- ### Proposal——AI Agent 实时生成计划
77
+ ### ProposalAI Agent 实时生成计划
187
78
 
188
79
  ![Proposal Presence](packages/landing/public/images/proposal-presence.gif)
189
80
 
190
81
  PM Agent 分析需求并实时生成包含 PRD 和任务 DAG 的提案,Presence 指示器实时显示 Agent 活动状态。
191
82
 
192
- ### Pixel Workspace——Agent 实时工作状态
193
-
194
- ![Pixel Workspace](docs/images/pixcel-workspace-new.gif)
195
-
196
- 左侧为像素工作室,用像素小人代表每个 Agent 的实时工作状态;右侧为 Agent 终端实时输出。
197
-
198
- ### Kanban——任务状态实时流转
83
+ ### Kanban:任务状态实时流转
199
84
 
200
85
  ![Kanban Presence](packages/landing/public/images/kanban-presence.gif)
201
86
 
202
87
  Kanban 看板随 Agent 工作进度自动更新,任务卡片在 To Do → In Progress → To Verify 之间实时流转。Presence 指示器高亮显示正在被操作的资源。
203
88
 
204
- ### 看板 & 任务 DAG
205
-
206
- ![Kanban & Task DAG](packages/landing/public/images/kanban-dag.png)
207
-
208
- 看板追踪任务状态,DAG 展示依赖关系和并行路径,一目了然。
209
-
210
- ### Idea & 需求细化
211
-
212
- ![Idea & Elaboration](packages/landing/public/images/idea-elaborate.png)
213
-
214
- PM Agent 在创建 Proposal 前,通过结构化问答轮次澄清需求。面板展示 Idea 详情及已完成的细化轮次。
215
-
216
- ### 提案审阅
217
-
218
- ![Proposal Review](packages/landing/public/images/proposal.png)
219
-
220
- PM Agent 生成的 Proposal 包含文档草稿和任务 DAG 草稿,Admin 在此面板审阅并决定批准或驳回。
221
-
222
- ### 验收标准——双路验证
223
-
224
- ![Acceptance Criteria](packages/landing/public/images/task-ac.png)
225
-
226
- Dev Agent 自检 + Admin 独立审核,每条验收标准都有结构化的通过/失败证据。
227
-
228
- ### Universal Search——Cmd+K 全局搜索
229
-
230
- ![Universal Search](packages/landing/public/images/universal-search.png)
231
-
232
- Cmd+K 命令面板,支持跨 6 种实体类型搜索。支持范围筛选(全局/项目组/单项目)、按类型切换 Tab、键盘导航。Web UI 和 AI Agent(通过 `chorus_search` MCP 工具)共享同一搜索后端。
233
-
234
89
  ---
235
90
 
236
- ## 功能特性
237
-
238
- - **会话生命周期** — 持久化 Session,心跳检测,自动过期与故障恢复
239
- - **任务 DAG** — 依赖建模、环检测、交互式可视化
240
- - **Kanban** — 实时任务流转,Worker 徽标与 Agent Presence
241
- - **Multi-Agent 协作** — Claude Code Agent Teams (Swarm Mode) 并行执行
242
- - **细粒度 Agent 权限** — 5 类资源 × 3 个动作组成的权限网格,支持预设 + 自定义组合([详细说明](docs/PERMISSIONS.md) · 英文)
243
- - **Chorus Plugin** — 生命周期钩子自动管理 Session 创建/关闭、心跳、上下文注入
244
- - **需求澄清** — Proposal 创建前的结构化问答轮次
245
- - **Proposal 审批流** — PM 起草,Admin 审批,草稿物化为正式实体
246
- - **通知系统** — 应用内 + SSE 推送 + Redis Pub/Sub,支持个人偏好设置([设计文档](src/app/api/notifications/README.md))
247
- - **@Mention** — Tiptap 自动补全、权限隔离搜索、mention 通知([设计文档](src/app/api/mentionables/README.md))
248
- - **活动流** — 全操作审计 + Session 归因
249
- - **全局搜索** — Cmd+K 跨 6 种实体类型、3 级范围筛选、片段生成([设计文档](docs/SEARCH.md))
250
- ---
91
+ ## 连接 Agent
251
92
 
252
- ## 架构
93
+ 最快的方式是应用内的 setup 向导:打开 **Settings → Setup Guide**。它会创建 API Key,并给出适配你所用客户端的完整命令,无论是 Claude Code、Codex、Kiro、OpenCode、OpenClaw、Pi,还是任何兼容 MCP 的 agent。
253
94
 
254
- ```
255
- ┌──────────────────────────────────────────────────────────────────┐
256
- │ Chorus — Agent Harness (:8637) │
257
- │ │
258
- │ ┌── Harness Capabilities ───────────────────────────────────┐ │
259
- │ │ Session Lifecycle │ Task State Machine │ Context Inject │ │
260
- │ │ Sub-Agent Orchestration │ Observability │ Failure Recovery│ │
261
- │ └───────────────────────────────────────────────────────────┘ │
262
- │ │
263
- │ ┌── Chorus Plugin (lifecycle hooks) ────────────────────────┐ │
264
- │ │ SubagentStart/Stop │ Heartbeat │ Skill & Context Inject │ │
265
- │ └───────────────────────────────────────────────────────────┘ │
266
- │ │
267
- │ ┌── API Layer ──────────────────────────────────────────────┐ │
268
- │ │ /api/mcp — MCP Streaming (50+ tools, permission-gated) │ │
269
- │ │ /api/* — REST API (Web UI + SSE push) │ │
270
- │ └───────────────────────────────────────────────────────────┘ │
271
- │ │
272
- │ ┌── Service Layer ──────────────────────────────────────────┐ │
273
- │ │ AI-DLC Workflow │ UUID-first │ Multi-tenant │ │
274
- │ └───────────────────────────────────────────────────────────┘ │
275
- │ │
276
- │ ┌── Web UI (React 19 + Tailwind + shadcn/ui) ──────────────┐ │
277
- │ │ Kanban │ Task DAG │ Proposals │ Activity │ Sessions │ │
278
- │ └───────────────────────────────────────────────────────────┘ │
279
- └──────────────────────────────────────────────────────────────────┘
280
- ↑ ↑ ↑ ↑
281
- Agent w/ Agent w/ Agent w/ 人类
282
- idea+proposal task:write *:admin perms (浏览器)
283
- :write perms perms (代理人类审批)
284
- (LLM) (LLM) (LLM)
285
-
286
- ┌──────────▼──────────┐ ┌─────────────────────┐
287
- │ PostgreSQL + Prisma │ │ Redis(可选) │
288
- └─────────────────────┘ │ Pub/Sub 事件分发 │
289
- └─────────────────────┘
290
- ```
95
+ 按客户端分的完整接入指南 → **[Agent 接入平台](https://doc.chorus-ai.dev/zh/reference/agents/)**。
291
96
 
292
- ### 子包
97
+ **Settings → Agents → Create API Key** 创建 API Key。Key 以 `cho_` 开头,仅在创建时显示一次。
293
98
 
294
- | 包 | 说明 |
295
- |---|------|
296
- | [`packages/openclaw-plugin`](packages/openclaw-plugin) | **OpenClaw 插件** — 通过 SSE 长连接 + MCP 工具桥接 [OpenClaw](https://openclaw.ai) 与 Chorus。 |
297
- | [`packages/chorus-cdk`](packages/chorus-cdk) | **AWS CDK** — Chorus 的 AWS 基础设施即代码。 |
99
+ ---
298
100
 
299
101
  ## 技术栈
300
102
 
@@ -302,132 +104,25 @@ Cmd+K 命令面板,支持跨 6 种实体类型搜索。支持范围筛选(
302
104
  |------|------|
303
105
  | 框架 | Next.js 15 (App Router, Turbopack) |
304
106
  | 语言 | TypeScript 5 (strict mode) |
305
- | 前端 | React 19, Tailwind CSS 4, shadcn/ui (Radix UI) |
306
- | ORM | Prisma 7 |
307
- | 数据库 | PostgreSQL 16 |
308
- | 缓存/消息 | Redis 7 (ioredis) — 可选 |
309
- | Agent 集成 | MCP SDK 1.26 (HTTP Streamable Transport) |
107
+ | 前端 | React 19, Tailwind CSS 4, shadcn/ui |
108
+ | 数据 | PostgreSQL 16 + Prisma 7, Redis 7(可选) |
109
+ | Agent 集成 | MCP SDK (HTTP Streamable Transport) |
310
110
  | 认证 | OIDC + PKCE / API Key / SuperAdmin |
311
111
  | i18n | next-intl (en, zh, ko, ja) |
312
- | 部署 | [Docker Hub](https://hub.docker.com/r/chorusaidlc/chorus-app) / Docker Compose / AWS CDK |
313
-
314
- ---
315
-
316
- ## 快速开始
317
-
318
- ### Docker 一键启动(推荐)
319
-
320
- 无需构建工具或外部数据库。镜像内置 [PGlite](https://pglite.dev)(嵌入式 PostgreSQL):
321
-
322
- ```bash
323
- git clone https://github.com/Chorus-AIDLC/chorus.git
324
- cd chorus
325
-
326
- DEFAULT_USER=admin@example.com DEFAULT_PASSWORD=changeme \
327
- docker compose -f docker-compose.local.yml up -d
328
- ```
329
-
330
- 访问 [http://localhost:8637](http://localhost:8637),用上面设置的账号登录。
331
-
332
- > 数据持久化在 Docker 卷中。嵌入模式仅支持单实例(无 Redis)。
333
-
334
- #### 生产部署(PostgreSQL + Redis)
335
-
336
- 多副本生产环境:
337
-
338
- ```bash
339
- DEFAULT_USER=admin@example.com DEFAULT_PASSWORD=changeme \
340
- docker compose up -d
341
- ```
342
-
343
- > 完整环境变量和配置选项见 [Docker 文档](docs/DOCKER.md)。
344
-
345
- ---
346
-
347
- ### 本地开发
348
-
349
- 前置条件:Node.js 22+、pnpm 9+、Docker(用于 PostgreSQL/Redis)
350
-
351
- ```bash
352
- cp .env.example .env
353
- pnpm docker:db
354
- pnpm install
355
- pnpm db:migrate:dev
356
- pnpm dev
357
- # 访问 http://localhost:8637
358
- ```
359
-
360
- ### 本地开发(无需 Docker)
361
-
362
- 前置条件:Node.js 22+、pnpm 9+
363
-
364
- ```bash
365
- cp .env.example .env
366
- pnpm install
367
- pnpm dev:local # 开发服务器 http://localhost:8637
368
- ```
369
-
370
- PGlite 在端口 5433 运行嵌入式 PostgreSQL。数据存储在 `.pglite/`,删除即可重置。
371
-
372
- ### 部署到 AWS
373
-
374
- ```bash
375
- ./install.sh
376
- ```
377
-
378
- 交互式安装器自动创建 VPC、Aurora Serverless v2、ElastiCache Serverless、ECS Fargate 和 ALB(HTTPS)。配置保存到 `default_deploy.sh` 供后续重新部署。
379
-
380
- ### 连接 AI Agent
381
-
382
- 最快的方式是用应用内的 setup 向导:打开 Web UI,进入 **Settings → Setup Guide → 打开设置向导**,按照向导给出的分步指引接入自己的客户端(Claude Code、Codex、Kiro、OpenCode、OpenClaw 或其他 agent)。向导会帮你创建 API Key、展示完整命令,并引导你验证连接。
383
-
384
- 如果偏好文档:
385
-
386
- | 客户端 | 接入文档 |
387
- |--------|---------|
388
- | Claude Code | [CONNECT_CLAUDE_CODE.zh.md](docs/CONNECT_CLAUDE_CODE.zh.md) |
389
- | Codex CLI | [CONNECT_CODEX.zh.md](docs/CONNECT_CODEX.zh.md) |
390
- | Pi coding agent | [CONNECT_PI.md](docs/CONNECT_PI.md) |
391
- | Kiro CLI | [CONNECT_KIRO.md](docs/CONNECT_KIRO.md) |
392
- | OpenCode † | [CONNECT_OPENCODE.zh.md](docs/CONNECT_OPENCODE.zh.md) |
393
- | 其他 MCP agent(Cursor / Continue / 自研等) | [CONNECT_OTHER_AGENTS.zh.md](docs/CONNECT_OTHER_AGENTS.zh.md) |
394
-
395
- † OpenCode 的接入由社区维护的 [`opencode-chorus`](https://github.com/etnperlong/opencode-chorus) 插件提供(npm: [`opencode-chorus`](https://www.npmjs.com/package/opencode-chorus)),作者 [@etnperlong](https://github.com/etnperlong),特此感谢!
396
-
397
- 在 Web UI 的 **Settings → Agents → Create API Key** 创建 API Key。Key 以 `cho_` 开头,仅在创建时显示一次。
398
-
399
- ![Create API Key](packages/landing/public/images/create-key.png)
400
-
401
- ---
402
-
403
- ## Skill 文档
404
-
405
- | 方式 | 位置 | 适用场景 |
406
- |------|------|---------|
407
- | **Plugin 内嵌(Claude Code)** | `public/chorus-plugin/skills/` | Claude Code + Chorus 插件,Session 自动化与生命周期 hook |
408
- | **Plugin 内嵌(Codex CLI)** | `plugins/chorus/skills/` | Codex CLI + Chorus 插件,移植版技能(`$` 前缀斜杠命令)|
409
- | **Package 内嵌(Pi)** | `packages/chorus-pi/skills/` | Pi + Chorus package,Session 自动化与生命周期 hook |
410
- | **独立分发** | `public/skill/`(`/skill/` 路径静态托管)| 其他 MCP 客户端(Cursor / Continue / 自研),手动 Session 管理 |
112
+ | 部署 | npm / Docker / AWS CDK |
411
113
 
412
114
  ---
413
115
 
414
116
  ## 文档
415
117
 
416
- | 文档 | 说明 |
417
- |------|------|
418
- | [PRD](docs/PRD_Chorus.md) | 产品需求文档 |
419
- | [Architecture](docs/ARCHITECTURE.md) | 技术架构文档 |
420
- | [MCP Tools](docs/MCP_TOOLS.md) | MCP 工具参考 |
421
- | [Permissions](docs/PERMISSIONS.md) | Agent 权限模型(5 × 3 矩阵 + 预设 + Custom) |
422
- | [Chorus Plugin](docs/chorus-plugin.md) | 插件设计与 Hook 说明 |
423
- | [OpenSpec Mode](docs/OPENSPEC_MODE.md) | OpenSpec 模式(Plugin 0.8.1+,opt-in) |
424
- | [Search](docs/SEARCH.md) | 全局搜索技术设计 |
425
- | [AI-DLC Gap Analysis](docs/AIDLC_GAP_ANALYSIS.md) | AI-DLC 方法论差距分析 |
426
- | [AIG Implementation Plan](docs/CHORUS_AIG_PLAN.md) | Agent 透明度路线图 |
427
- | [Presence Design](docs/PRESENCE_DESIGN.md) | 实时 Agent Presence 系统 |
428
- | [Docker](docs/DOCKER.md) | Docker 镜像使用与部署 |
429
- | [Logging](docs/LOGGING.md) | 结构化日志架构 |
430
- | [CLAUDE.md](CLAUDE.md) | 项目开发规范 |
118
+ **📖 完整文档:[doc.chorus-ai.dev](https://doc.chorus-ai.dev/zh/)**
119
+
120
+ - [快速上手](https://doc.chorus-ai.dev/zh/guides/getting-started/)
121
+ - [连接 agent](https://doc.chorus-ai.dev/zh/reference/agents/)
122
+ - [AI-DLC 工作流](https://doc.chorus-ai.dev/zh/guides/ai-dlc-workflow/)
123
+ - [插件与命令](https://doc.chorus-ai.dev/zh/guides/plugin-commands/)
124
+ - [MCP 工具参考](https://doc.chorus-ai.dev/zh/reference/mcp-tools/)
125
+ - [部署与自托管](https://doc.chorus-ai.dev/zh/guides/deployment-overview/)
431
126
 
432
127
  ---
433
128
 
@@ -284,7 +284,11 @@ export class ClaudeSpawner {
284
284
  * so the waker can store the handle in its execution registry for the interrupt
285
285
  * path BEFORE this promise resolves. It is invoked once, synchronously, only on a
286
286
  * successful spawn; a spawn failure never calls it.
287
- * @returns {Promise<{ sessionId: string, exitCode: number|null, isNew: boolean }>}
287
+ * @returns {Promise<{ sessionId: string, backendSessionId: string|null, exitCode: number|null, isNew: boolean }>}
288
+ * `backendSessionId` is the Claude `--resume` anchor (the input `sessionId`) on a
289
+ * terminal resolution after a spawn, so the conversation UI can offer a resumable
290
+ * id — mirrors codex-spawner's shape. `null` on the pre-spawn failure paths (no
291
+ * turn ran, nothing to resume).
288
292
  */
289
293
  async wake({ prompt, sessionId, isNew, mcpConfigPath, cwd, onMessage, onChild }) {
290
294
  const id = sessionId;
@@ -295,14 +299,14 @@ export class ClaudeSpawner {
295
299
  this.logger.error(
296
300
  `[Chorus] refusing to spawn: session id is not a valid lowercase UUID: ${id}`
297
301
  );
298
- return { sessionId: typeof id === "string" ? id : "", exitCode: null, isNew: Boolean(isNew) };
302
+ return { sessionId: typeof id === "string" ? id : "", backendSessionId: null, exitCode: null, isNew: Boolean(isNew) };
299
303
  }
300
304
 
301
305
  const claudePath = this.claudePath ?? resolveClaudePath();
302
306
  if (!claudePath) {
303
307
  // No crash — surface visibly and resolve with a failure result.
304
308
  this.logger.error("[Chorus] cannot locate the `claude` executable on PATH; skipping wake");
305
- return { sessionId: id, exitCode: null, isNew };
309
+ return { sessionId: id, backendSessionId: null, exitCode: null, isNew };
306
310
  }
307
311
 
308
312
  const args = buildArgs({ sessionId: id, isNew, mcpConfigPath, permissionMode: this.permissionMode });
@@ -345,7 +349,7 @@ export class ClaudeSpawner {
345
349
  });
346
350
  } catch (err) {
347
351
  this.logger.error(`[Chorus] failed to spawn claude: ${err}`);
348
- resolve({ sessionId: id, exitCode: null, isNew });
352
+ resolve({ sessionId: id, backendSessionId: null, exitCode: null, isNew });
349
353
  return;
350
354
  }
351
355
 
@@ -391,14 +395,19 @@ export class ClaudeSpawner {
391
395
  child.on("error", (err) => {
392
396
  // e.g. ENOENT if the resolved path vanished — log, don't throw.
393
397
  this.logger.error(`[Chorus] claude process error: ${err}`);
394
- resolve({ sessionId: observedSessionId, exitCode: null, isNew });
398
+ // backendSessionId is the `--resume` anchor (`id`), NOT observedSessionId:
399
+ // a fork-on-resume claude can emit a new stream session_id, but the daemon
400
+ // resumes and files the transcript under `id`, so `id` is the resumable value.
401
+ resolve({ sessionId: observedSessionId, backendSessionId: id, exitCode: null, isNew });
395
402
  });
396
403
 
397
404
  child.on("close", (code) => {
398
405
  if (code !== 0) {
399
406
  this.logger.warn(`[Chorus] claude exited with code ${code}`);
400
407
  }
401
- resolve({ sessionId: observedSessionId, exitCode: code, isNew });
408
+ // backendSessionId is the `--resume` anchor (`id`), NOT observedSessionId (see
409
+ // the process-error handler above for why the anchor is the resumable value).
410
+ resolve({ sessionId: observedSessionId, backendSessionId: id, exitCode: code, isNew });
402
411
  });
403
412
 
404
413
  // Guard against an ASYNC stdin error (EPIPE): if claude exits/closes
@@ -69,6 +69,7 @@ export function parseClientFlags(argv) {
69
69
  else if (a === "-d" || a === "--detach") out.detach = true;
70
70
  else if (a === "--force") out.force = true;
71
71
  else if (a === "--yes" || a === "-y") out.yes = true;
72
+ else if (a === "--add") out.add = true;
72
73
  else if (a === "--help" || a === "-h") out.help = true;
73
74
  }
74
75
  return out;
@@ -202,9 +203,16 @@ USAGE
202
203
  OPTIONS
203
204
  --url <url> Remote Chorus server URL (env: CHORUS_URL)
204
205
  --api-key <cho_...> Agent API key (env: CHORUS_API_KEY)
206
+ --add Add this key as an ADDITIONAL agent (multi-agent daemon)
207
+ instead of overwriting the single credential
205
208
  -h, --help Show this help message
206
209
 
207
210
  With no flags, login prompts interactively for the URL and a masked API key,
208
211
  validates them against the server, and on success saves the credentials.
212
+
213
+ With --add, the validated key is appended to the daemon.json 'agents[]' array
214
+ so one daemon can serve several independent agents (see docs/DAEMON.md). The
215
+ first --add migrates an existing flat credential into agents[0]; a duplicate
216
+ key is refused and existing agents are never overwritten.
209
217
  `;
210
218
  }
@@ -13,9 +13,13 @@
13
13
  // it and persist anchor→thread_id (codex-session-map.mjs) so a later wake can
14
14
  // `resume <thread_id>`. (serde: ThreadEvent tag="type", rename="thread.started";
15
15
  // ThreadStartedEvent.thread_id: String — codex-rs/exec/src/exec_events.rs.)
16
- // • No `--mcp-config`: MCP comes from the user's ~/.codex/config.toml. The daemon
17
- // exports its resolved URL for SessionStart hooks and its key for the configured
18
- // bearer_token_env_var (default CHORUS_API_KEY) never argv.
16
+ // • No `--mcp-config`: Codex reads MCP servers from the user's ~/.codex/config.toml.
17
+ // The Chorus MCP key there is USER-MANAGED: the installer writes a LITERAL Bearer
18
+ // header and Codex does NOT expand ${VAR} inside http_headers, so the CHORUS_API_KEY
19
+ // the daemon exports does NOT reach Codex's MCP auth. The daemon still exports
20
+ // CHORUS_URL / CHORUS_API_KEY into the child env — but only for the plugin's shell
21
+ // tooling (chorus-api.sh / SessionStart hooks), never argv and never Codex MCP.
22
+ // (Multi-agent: two Codex agents with different keys each need their own CODEX_HOME.)
19
23
  // • Permission is a SANDBOX mode, not a tool allowlist.
20
24
  //
21
25
  // Reuses claude-spawner's platform-neutral helpers: parseNdjsonChunk (NDJSON
@@ -38,7 +38,8 @@ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
38
38
  * (null until the SSE handshake reports it).
39
39
  * killer?: (child: any, opts: any) => Promise<any>, Injectable; defaults to killProcessTree.
40
40
  * sigintTimeoutMs?: number, Layered-resolved escalation window.
41
- * redispatchResume?: (entityType: string, entityUuid: string, resumeReason?: string) => void,
41
+ * redispatchResume?: (entityType: string, entityUuid: string, resumeReason?: string,
42
+ * runtimeCwd?: string, orchestrator?: object|null) => void,
42
43
  * Re-run a wake for a resumed entity (子3); injected
43
44
  * by the daemon. `resumeReason` ("user" | "crash",
44
45
  * add-crash-execution-resume) is the row's prior
@@ -180,8 +181,17 @@ export function createControlHandler(deps) {
180
181
  `)`
181
182
  );
182
183
  try {
183
- if (typeof event.runtimeCwd === "string" && event.runtimeCwd) {
184
- redispatchResume?.(entityType, entityUuid, resumeReason, event.runtimeCwd);
184
+ if (
185
+ (typeof event.runtimeCwd === "string" && event.runtimeCwd) ||
186
+ event.orchestrator != null
187
+ ) {
188
+ redispatchResume?.(
189
+ entityType,
190
+ entityUuid,
191
+ resumeReason,
192
+ typeof event.runtimeCwd === "string" ? event.runtimeCwd : undefined,
193
+ event.orchestrator ?? null,
194
+ );
185
195
  } else {
186
196
  redispatchResume?.(entityType, entityUuid, resumeReason);
187
197
  }