@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
@@ -70,6 +70,47 @@ export function readYoloAck(deps = {}) {
70
70
  return file ? nonEmpty(file.yoloAckAt) ?? null : null;
71
71
  }
72
72
 
73
+ /**
74
+ * Resolve the DEFAULT url + apiKey layer (per-field, non-throwing) for the
75
+ * multi-agent config. Unlike `resolveCredentials` (which needs a COMPLETE pair
76
+ * and throws when none resolves), this resolves each field independently and
77
+ * returns `undefined` for any field no source supplies. It is the "top-level
78
+ * defaults" layer that each `agents[]` entry merges over: an agent that omits
79
+ * `url` inherits this default `url`, an agent that omits `apiKey` inherits this
80
+ * default `apiKey` (rarely useful, but symmetric with every other default).
81
+ *
82
+ * Same source order as `resolveCredentials`, applied per field:
83
+ * flag > env > login file (top-level) > plugin fallback.
84
+ *
85
+ * @param {{ url?: string, apiKey?: string }} flags
86
+ * @param {ResolveDeps} [deps]
87
+ * @returns {{ url: string | undefined, apiKey: string | undefined }}
88
+ */
89
+ export function resolveCredentialDefaults(flags = {}, deps = {}) {
90
+ const env = deps.env ?? process.env;
91
+ const readJson = deps.readJson ?? readJsonSafe;
92
+ const loginPath = deps.loginPath ?? loginFilePath();
93
+ const settingsPath = deps.settingsPath ?? claudeSettingsPath();
94
+
95
+ const file = readJson(loginPath);
96
+ const settings = readJson(settingsPath);
97
+ const pluginEnv =
98
+ settings && typeof settings.env === "object" && settings.env !== null
99
+ ? /** @type {Record<string, unknown>} */ (settings.env)
100
+ : null;
101
+
102
+ const pick = (flagVal, envKey, fileKey) =>
103
+ nonEmpty(flagVal) ??
104
+ nonEmpty(env[envKey]) ??
105
+ (file ? nonEmpty(file[fileKey]) : undefined) ??
106
+ (pluginEnv ? nonEmpty(pluginEnv[envKey]) : undefined);
107
+
108
+ return {
109
+ url: pick(flags.url, "CHORUS_URL", "url"),
110
+ apiKey: pick(flags.apiKey, "CHORUS_API_KEY", "apiKey"),
111
+ };
112
+ }
113
+
73
114
  /**
74
115
  * @typedef {Object} ResolvedCredentials
75
116
  * @property {string} url
@@ -15,11 +15,21 @@
15
15
  import { readFileSync } from "node:fs";
16
16
  import { homedir } from "node:os";
17
17
  import { isAbsolute, resolve as resolvePath } from "node:path";
18
- import { loginFilePath } from "./credentials.mjs";
18
+ import { loginFilePath, resolveCredentials, resolveCredentialDefaults } from "./credentials.mjs";
19
+ import { resolveAgentType, KNOWN_AGENTS } from "./daemon-agent.mjs";
20
+ import { resolvePermissionMode } from "./daemon-permission-mode.mjs";
19
21
 
20
22
  /** Built-in default escalation window (ms) — matches the spec's 10 seconds. */
21
23
  export const DEFAULT_SIGINT_TIMEOUT_MS = 10_000;
22
24
 
25
+ /**
26
+ * Built-in default per-agent wake concurrency. This was the process-wide
27
+ * hardcoded WakeQueue cap (`maxConcurrency ?? 4` in daemon.mjs) before it became
28
+ * a per-agent, configurable value — kept at 4 so an agent that specifies no
29
+ * `maxConcurrency` behaves exactly as the daemon did before.
30
+ */
31
+ export const DEFAULT_MAX_CONCURRENCY = 4;
32
+
23
33
  /**
24
34
  * Coerce a value to a positive finite integer of milliseconds, or undefined when it
25
35
  * is absent / not a usable number. Accepts a number or a numeric string (env vars
@@ -235,3 +245,194 @@ export function resolveBrowseRoots(flags = {}, deps = {}) {
235
245
  : [];
236
246
  return fromFile.length ? fromFile : [normalizeCwd(home, home)];
237
247
  }
248
+
249
+ // ===== Multi-agent config (daemon-multi-agent — N independent agents per daemon) =====
250
+ //
251
+ // One daemon process may serve a LIST of fully-independent agents, each with its
252
+ // own credentials + working directories + backend + permission mode + concurrency.
253
+ // `resolveAgentConfigs` returns that list as `AgentConfig[]`, every field already
254
+ // merged with its default. Two shapes are supported:
255
+ //
256
+ // 1. `~/.chorus/daemon.json` has a non-empty `agents: [ … ]` array → one
257
+ // AgentConfig per entry, each entry's fields merged OVER the top-level
258
+ // defaults (per-agent value wins; an omitted field inherits the default).
259
+ // 2. No `agents[]` (or empty) → exactly ONE AgentConfig synthesized from the
260
+ // existing flat resolution (resolveCredentials + resolveDaemonCwds +
261
+ // resolveAgentType + sigint + browseRoots). This is byte-for-byte the
262
+ // daemon's current single-agent behavior — old installs run unchanged, and
263
+ // flags / env still resolve this single agent's fields.
264
+ //
265
+ // Validation is strict and visible: a missing apiKey, an unresolvable url, an
266
+ // unknown agentType, or an invalid permissionMode THROWS an Error naming the
267
+ // offending agent. The daemon's top-level error handler turns that into a
268
+ // non-zero exit — the resolver never silently drops or falls back to a default
269
+ // agent (matching resolveCredentials' throw-on-nothing contract).
270
+
271
+ /** A non-empty trimmed string, or undefined. */
272
+ function nonEmptyStr(value) {
273
+ return typeof value === "string" && value.trim() ? value.trim() : undefined;
274
+ }
275
+
276
+ /**
277
+ * True iff `~/.chorus/daemon.json` declares a non-empty `agents[]` with at least
278
+ * one object entry — i.e. the daemon should run in multi-agent mode. Lets the
279
+ * daemon pick the multi-agent startup path (bypassing the flat single-credential
280
+ * preflight) without duplicating the file read. Never throws.
281
+ * @param {{ readJson?: (p: string) => (Record<string, unknown>|null), loginPath?: string }} [deps]
282
+ * @returns {boolean}
283
+ */
284
+ export function hasConfiguredAgents(deps = {}) {
285
+ const readJson = deps.readJson ?? readJsonSafe;
286
+ const loginPath = deps.loginPath ?? loginFilePath();
287
+ const file = readJson(loginPath);
288
+ return Boolean(
289
+ file && Array.isArray(file.agents) && file.agents.some((a) => a && typeof a === "object"),
290
+ );
291
+ }
292
+
293
+ /**
294
+ * Coerce to a positive finite integer (count), or undefined. Accepts number or
295
+ * numeric string; rejects 0, negatives, NaN, Infinity. Used for maxConcurrency.
296
+ * @param {unknown} value @returns {number | undefined}
297
+ */
298
+ function positiveInt(value) {
299
+ if (value === undefined || value === null || value === "") return undefined;
300
+ const n = typeof value === "number" ? value : Number(String(value).trim());
301
+ if (!Number.isFinite(n) || n <= 0) return undefined;
302
+ return Math.floor(n);
303
+ }
304
+
305
+ /**
306
+ * @typedef {Object} AgentConfig One fully-resolved agent runtime config.
307
+ * @property {string} url Chorus server URL for this agent.
308
+ * @property {string} apiKey This agent's `cho_` API key.
309
+ * @property {string} agentType Backend: claude-code | codex | kiro.
310
+ * @property {Array<string|undefined>} cwds Served paths (`undefined` ⇒ process cwd).
311
+ * @property {"yolo"|"chorus"} permissionMode Woken-agent permission posture.
312
+ * @property {number} maxConcurrency This agent's wake-queue cap.
313
+ * @property {number} sigintTimeoutMs Interrupt escalation window (ms).
314
+ * @property {string[]} browseRoots Directory-discovery allowlist.
315
+ * @property {string} label Diagnostic label ("agent" or "agents[i]").
316
+ */
317
+
318
+ /**
319
+ * Resolve the list of agents this daemon serves. See the block comment above.
320
+ *
321
+ * @param {{ url?: string, apiKey?: string, agent?: string, cwd?: string|string[],
322
+ * browseRoot?: string|string[], sigintTimeout?: number|string,
323
+ * chorusOnly?: boolean, yolo?: boolean }} [flags]
324
+ * @param {{
325
+ * env?: Record<string, string|undefined>,
326
+ * readJson?: (path: string) => (Record<string, unknown>|null),
327
+ * loginPath?: string,
328
+ * settingsPath?: string,
329
+ * home?: string,
330
+ * permissionMode?: "yolo"|"chorus", // pre-resolved global posture (else computed)
331
+ * }} [deps]
332
+ * @returns {AgentConfig[]} Non-empty list; throws on an invalid agent entry.
333
+ */
334
+ export function resolveAgentConfigs(flags = {}, deps = {}) {
335
+ const env = deps.env ?? process.env;
336
+ const readJson = deps.readJson ?? readJsonSafe;
337
+ const loginPath = deps.loginPath ?? loginFilePath();
338
+ const home = deps.home ?? homedir();
339
+ const file = readJson(loginPath);
340
+
341
+ // Global default permission posture; a per-agent `permissionMode` overrides it.
342
+ // needConfirm/hasAck is vestigial, so isTTY/hasAck do not affect the resolved mode.
343
+ const defaultPermissionMode =
344
+ deps.permissionMode ??
345
+ resolvePermissionMode(flags, env, { isTTY: false, hasAck: false }).mode;
346
+
347
+ const agentEntries =
348
+ file && Array.isArray(file.agents)
349
+ ? file.agents.filter((a) => a && typeof a === "object")
350
+ : [];
351
+
352
+ // ---- Back-compat: no agents[] → exactly one agent from flat resolution ----
353
+ if (agentEntries.length === 0) {
354
+ const creds = resolveCredentials(flags, deps); // throws if no complete pair (today's behavior)
355
+ const at = resolveAgentType(flags, env, deps);
356
+ if (!at.ok) throw new Error(at.error);
357
+ return [
358
+ {
359
+ url: creds.url,
360
+ apiKey: creds.apiKey,
361
+ agentType: at.agent,
362
+ cwds: resolveDaemonCwds(flags, deps),
363
+ permissionMode: defaultPermissionMode,
364
+ maxConcurrency: positiveInt(file?.maxConcurrency) ?? DEFAULT_MAX_CONCURRENCY,
365
+ sigintTimeoutMs: resolveSigintTimeoutMs(flags, deps),
366
+ browseRoots: resolveBrowseRoots(flags, deps),
367
+ label: "agent",
368
+ },
369
+ ];
370
+ }
371
+
372
+ // ---- Multi-agent: each entry merged over the top-level defaults ----
373
+ const credDefaults = resolveCredentialDefaults(flags, deps);
374
+ const defaultCwds = resolveDaemonCwds(flags, deps);
375
+ const defaultAgentType = resolveAgentType(flags, env, deps); // top-level default (may be {ok:false} if top-level `agent` is garbage)
376
+ const defaultSigint = resolveSigintTimeoutMs(flags, deps);
377
+ const defaultBrowseRoots = resolveBrowseRoots(flags, deps);
378
+ const defaultMaxConcurrency = positiveInt(file?.maxConcurrency) ?? DEFAULT_MAX_CONCURRENCY;
379
+
380
+ return agentEntries.map((entry, i) => {
381
+ const label = nonEmptyStr(entry.label) ?? nonEmptyStr(entry.name) ?? `agents[${i}]`;
382
+
383
+ const url = nonEmptyStr(entry.url) ?? credDefaults.url;
384
+ const apiKey = nonEmptyStr(entry.apiKey) ?? credDefaults.apiKey;
385
+ if (!apiKey) {
386
+ throw new Error(`Agent ${label}: missing apiKey (no per-agent apiKey and no top-level default).`);
387
+ }
388
+ if (!url) {
389
+ throw new Error(`Agent ${label}: missing/unresolvable url (no per-agent url and no top-level default).`);
390
+ }
391
+
392
+ // agentType: per-agent value, else the top-level default (which must itself be valid).
393
+ let agentType;
394
+ if (nonEmptyStr(entry.agentType)) {
395
+ agentType = nonEmptyStr(entry.agentType);
396
+ } else if (defaultAgentType.ok) {
397
+ agentType = defaultAgentType.agent;
398
+ } else {
399
+ throw new Error(
400
+ `Agent ${label}: no agentType and the top-level agent default is invalid (${defaultAgentType.error}).`,
401
+ );
402
+ }
403
+ if (!KNOWN_AGENTS.includes(agentType)) {
404
+ throw new Error(
405
+ `Agent ${label}: unknown agentType "${agentType}". Accepted: ${KNOWN_AGENTS.join(", ")}.`,
406
+ );
407
+ }
408
+
409
+ // permissionMode: per-agent override (yolo|chorus only), else global posture.
410
+ let permissionMode = defaultPermissionMode;
411
+ if (entry.permissionMode !== undefined) {
412
+ const pm = nonEmptyStr(entry.permissionMode);
413
+ if (pm !== "yolo" && pm !== "chorus") {
414
+ throw new Error(
415
+ `Agent ${label}: invalid permissionMode "${entry.permissionMode}". Accepted: yolo, chorus.`,
416
+ );
417
+ }
418
+ permissionMode = pm;
419
+ }
420
+
421
+ // cwds: per-agent list (cleaned); an empty/blank list degrades to [undefined]
422
+ // (serve the process cwd). Omitted → inherit the top-level default set.
423
+ let cwds;
424
+ if (entry.cwds !== undefined) {
425
+ const cleaned = cleanCwdList(entry.cwds, home);
426
+ cwds = cleaned.length ? cleaned : [undefined];
427
+ } else {
428
+ cwds = defaultCwds;
429
+ }
430
+
431
+ const maxConcurrency = positiveInt(entry.maxConcurrency) ?? defaultMaxConcurrency;
432
+ const sigintTimeoutMs = positiveIntMs(entry.sigintTimeoutMs) ?? defaultSigint;
433
+ const browseRoots =
434
+ entry.browseRoots !== undefined ? cleanCwdList(entry.browseRoots, home) : defaultBrowseRoots;
435
+
436
+ return { url, apiKey, agentType, cwds, permissionMode, maxConcurrency, sigintTimeoutMs, browseRoots, label };
437
+ });
438
+ }
@@ -23,7 +23,7 @@
23
23
 
24
24
  import { homedir } from "node:os";
25
25
  import { resolveCredentials, loginFilePath } from "./credentials.mjs";
26
- import { updateDaemonConfig, prompt as defaultPrompt } from "./login.mjs";
26
+ import { updateDaemonConfig, appendAgentConfig, prompt as defaultPrompt } from "./login.mjs";
27
27
  import { validateAndFetchIdentity } from "./chorus-client.mjs";
28
28
  import { normalizeCwd, cleanCwdList } from "./daemon-config.mjs";
29
29
  import { KNOWN_AGENTS, DEFAULT_AGENT } from "./daemon-agent.mjs";
@@ -132,6 +132,43 @@ export async function resolveInstallCredentials(flags = {}, env = {}, opts = {})
132
132
  // field-merge writer preserves cwds / yoloAckAt / sigintTimeoutMs.
133
133
  writeConfig({ url, apiKey, agentUuid: identity.uuid, agentName: identity.name });
134
134
  log(`[Chorus] credentials saved for ${identity.name} (${identity.uuid}).`);
135
+
136
+ // Multi-agent (daemon-multi-agent): with `--add` on a TTY, offer to add more
137
+ // agents in the same run. Each additional key is validated then APPENDED to
138
+ // agents[] (the first agent above is folded into agents[0] on the first
139
+ // append). Opt-in via --add so a plain install prompts for nothing extra;
140
+ // never runs on a non-TTY / --yes / skip run. Hand-editing daemon.json remains
141
+ // fully supported regardless.
142
+ if (isTTY && !skip && flags.add === true) {
143
+ const appendAgent = opts.appendAgent ?? appendAgentConfig;
144
+ // Bound the loop so a stuck/looping prompt can never spin forever.
145
+ for (let added = 0; added < 32; added += 1) {
146
+ const more = nonEmpty(await ask("Add another agent? [y/N]: "));
147
+ if (!more || !/^y(es)?$/i.test(more)) break;
148
+ const u = nonEmpty(await ask(" Chorus URL: "));
149
+ const k = nonEmpty(await ask(" Chorus API key (cho_...): ", { mask: true }));
150
+ if (!u || !k) {
151
+ errLog("[Chorus] both a URL and an API key are required — skipping this agent.");
152
+ continue;
153
+ }
154
+ let id;
155
+ try {
156
+ id = await validate({ url: u, apiKey: k });
157
+ } catch (err) {
158
+ errLog(
159
+ `[Chorus] validation failed: ${err instanceof Error ? err.message : String(err)} — this agent was NOT added.`,
160
+ );
161
+ continue;
162
+ }
163
+ const res = appendAgent({ url: u, apiKey: k, agentUuid: id.uuid, agentName: id.name });
164
+ if (!res.ok) {
165
+ errLog(`[Chorus] agent ${id.name} (${id.uuid}) is already configured — skipping.`);
166
+ continue;
167
+ }
168
+ log(`[Chorus] added agent ${id.name} (${id.uuid}) — this daemon now serves ${res.agents.length} agents.`);
169
+ }
170
+ }
171
+
135
172
  return { ok: true, creds: { url, apiKey }, identity };
136
173
  }
137
174
 
@@ -7,7 +7,8 @@
7
7
  // The five operations and their EXACT server payload shapes (verified against
8
8
  // src/app/api/daemon/*/route.ts — the server is NOT changed by this work):
9
9
  // turnAdvance → POST /api/daemon/turn-advance
10
- // { connectionUuid, sessionId, status, entityType?, entityUuid? }
10
+ // { connectionUuid, sessionId, status, entityType?, entityUuid?,
11
+ // coalescedCount? }
11
12
  // transcript → POST /api/daemon/transcript
12
13
  // { sessionId, messages: [{ role, text }] }
13
14
  // executionState → POST /api/daemon/execution-state
@@ -70,7 +71,7 @@ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
70
71
  * logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
71
72
  * }} opts
72
73
  * @returns {{
73
- * turnAdvance: (p: { sessionId: string, backendSessionId?: string|null, status: string, entityType?: string|null, entityUuid?: string|null }) => Promise<DaemonRestResult>,
74
+ * turnAdvance: (p: { sessionId: string, backendSessionId?: string|null, status: string, entityType?: string|null, entityUuid?: string|null, coalescedCount?: number }) => Promise<DaemonRestResult>,
74
75
  * transcript: (p: { sessionId: string, messages: Array<{ role: string, text: string }> }) => Promise<DaemonRestResult>,
75
76
  * executionState: (p: { executions: Array<Record<string, unknown>> }) => Promise<DaemonRestResult>,
76
77
  * reportInterrupt: (p: { entityType: string, entityUuid: string, reason: string }) => Promise<DaemonRestResult>,
@@ -147,7 +148,7 @@ export function createDaemonRestClient(opts) {
147
148
  * the turn's usage. Both ride the terminal edge only. Requires the connectionUuid (the
148
149
  * server addresses the turn against a connection the agent owns).
149
150
  */
150
- async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason, transcriptRelayError, usage, backendSessionId }) {
151
+ async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason, transcriptRelayError, usage, backendSessionId, coalescedCount }) {
151
152
  const connectionUuid = getConnectionUuid();
152
153
  if (!connectionUuid) {
153
154
  const error = `cannot advance turn for session ${sessionId} → ${status} — no connection uuid yet`;
@@ -173,6 +174,13 @@ export function createDaemonRestClient(opts) {
173
174
  // The whole normalized TokenUsage object, nested under `usage`, only on a terminal edge.
174
175
  ...(usage && isTerminal ? { usage } : {}),
175
176
  ...(backendSessionId && isTerminal ? { backendSessionId } : {}),
177
+ // Coalesced-wake count (add-daemon-wake-coalescing): meaningful ONLY on the → running
178
+ // edge, where the server settles the next (count − 1) same-session pending turns to
179
+ // `merged`. Sent only when a real batch coalesced (> 1); a single wake (default 1)
180
+ // omits it so the wire — and every existing turn-advance test — stays byte-identical.
181
+ ...(status === "running" && typeof coalescedCount === "number" && coalescedCount > 1
182
+ ? { coalescedCount }
183
+ : {}),
176
184
  };
177
185
  return post(
178
186
  "turn-advance",