@chorus-aidlc/chorus 0.16.4 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (568) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +511 -511
  3. package/.next/standalone/.next/app-path-routes-manifest.json +47 -47
  4. package/.next/standalone/.next/build-manifest.json +6 -6
  5. package/.next/standalone/.next/prerender-manifest.json +42 -42
  6. package/.next/standalone/.next/react-loadable-manifest.json +1 -1
  7. package/.next/standalone/.next/required-server-files.json +4 -4
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +2 -2
  9. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +2 -2
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +2 -2
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +3 -3
  45. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  48. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/_not-found/page.js +2 -2
  51. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  53. package/.next/standalone/.next/server/app/_not-found.rsc +5 -5
  54. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page.js +2 -2
  55. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/admin/companies/new/page.js +2 -2
  58. package/.next/standalone/.next/server/app/admin/companies/new/page.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  61. package/.next/standalone/.next/server/app/admin/companies/new.rsc +7 -7
  62. package/.next/standalone/.next/server/app/admin/companies/page.js +2 -2
  63. package/.next/standalone/.next/server/app/admin/companies/page.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  66. package/.next/standalone/.next/server/app/admin/companies.rsc +7 -7
  67. package/.next/standalone/.next/server/app/admin/page.js +2 -2
  68. package/.next/standalone/.next/server/app/admin/page.js.nft.json +1 -1
  69. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/admin.html +2 -2
  71. package/.next/standalone/.next/server/app/admin.rsc +7 -7
  72. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  73. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
  75. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/admin/login/route.js +1 -1
  77. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/admin/session/route.js +1 -1
  79. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
  84. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  86. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/auth/check-default/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/auth/company-oidc/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/auth/identify/route.js +1 -1
  103. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/auth/logout/route.js +1 -1
  105. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/auth/me/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/auth/sync-token/route.js +1 -1
  109. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  111. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -1
  122. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
  125. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  128. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  131. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  134. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  137. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  140. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  158. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  161. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  164. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  166. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
  169. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/events/route.js +9 -3
  172. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  175. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  180. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  183. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  186. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js +1 -1
  195. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
  198. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
  199. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/api/mcp/route.js +5 -5
  201. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  205. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  210. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  213. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  216. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  222. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  223. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  228. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  230. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  232. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/api/project-visits/pin/route.js +1 -1
  234. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
  235. package/.next/standalone/.next/server/app/api/project-visits/route.js +1 -1
  236. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
  237. package/.next/standalone/.next/server/app/api/project-visits/visit/route.js +1 -1
  238. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  240. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js +1 -1
  242. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
  243. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
  244. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  245. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  246. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  247. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  248. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  250. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  252. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  253. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  255. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  258. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  259. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  260. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  262. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  263. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
  264. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  267. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  269. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  271. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  272. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  274. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  275. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js +1 -1
  277. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
  278. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  280. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  281. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  282. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  283. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  284. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  285. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  286. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  287. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  289. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  290. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  291. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  292. package/.next/standalone/.next/server/app/api/references/[uuid]/route.js +1 -1
  293. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  294. package/.next/standalone/.next/server/app/api/references/route.js +1 -1
  295. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  296. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  297. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/app/api/session/route.js +1 -1
  299. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  300. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  301. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  302. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  303. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  304. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  305. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  306. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  307. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  308. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  309. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  310. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  311. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  312. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  313. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  314. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  315. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  316. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  317. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  318. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  319. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  320. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  321. package/.next/standalone/.next/server/app/favicon.ico/route.js +1 -1
  322. package/.next/standalone/.next/server/app/index.html +2 -2
  323. package/.next/standalone/.next/server/app/index.rsc +6 -6
  324. package/.next/standalone/.next/server/app/login/admin/page.js +2 -2
  325. package/.next/standalone/.next/server/app/login/admin/page.js.nft.json +1 -1
  326. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  327. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  328. package/.next/standalone/.next/server/app/login/admin.rsc +6 -6
  329. package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
  330. package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
  331. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  332. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  333. package/.next/standalone/.next/server/app/login/callback.rsc +6 -6
  334. package/.next/standalone/.next/server/app/login/page.js +2 -2
  335. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  336. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  337. package/.next/standalone/.next/server/app/login/pick-workspace/page.js +2 -2
  338. package/.next/standalone/.next/server/app/login/pick-workspace/page.js.nft.json +1 -1
  339. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  340. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  341. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +6 -6
  342. package/.next/standalone/.next/server/app/login.html +2 -2
  343. package/.next/standalone/.next/server/app/login.rsc +6 -6
  344. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  345. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  346. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  347. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  348. package/.next/standalone/.next/server/app/onboarding.rsc +6 -6
  349. package/.next/standalone/.next/server/app/page.js +2 -2
  350. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  351. package/.next/standalone/.next/server/app/projects.html +2 -2
  352. package/.next/standalone/.next/server/app/projects.rsc +7 -7
  353. package/.next/standalone/.next/server/app/settings.html +2 -2
  354. package/.next/standalone/.next/server/app/settings.rsc +7 -7
  355. package/.next/standalone/.next/server/app-paths-manifest.json +47 -47
  356. package/.next/standalone/.next/server/chunks/1073.js +1 -0
  357. package/.next/standalone/.next/server/chunks/1114.js +1 -0
  358. package/.next/standalone/.next/server/chunks/1267.js +1 -0
  359. package/.next/standalone/.next/server/chunks/1318.js +1 -1
  360. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  361. package/.next/standalone/.next/server/chunks/2570.js +2 -2
  362. package/.next/standalone/.next/server/chunks/2572.js +1 -1
  363. package/.next/standalone/.next/server/chunks/2940.js +1 -1
  364. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  365. package/.next/standalone/.next/server/chunks/3197.js +1 -1
  366. package/.next/standalone/.next/server/chunks/378.js +4 -4
  367. package/.next/standalone/.next/server/chunks/4827.js +1 -1
  368. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  369. package/.next/standalone/.next/server/chunks/{5351.js → 5737.js} +13 -9
  370. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  371. package/.next/standalone/.next/server/chunks/6145.js +1 -0
  372. package/.next/standalone/.next/server/chunks/6487.js +1 -0
  373. package/.next/standalone/.next/server/chunks/6506.js +1 -1
  374. package/.next/standalone/.next/server/chunks/6515.js +2 -2
  375. package/.next/standalone/.next/server/chunks/6753.js +3 -3
  376. package/.next/standalone/.next/server/chunks/679.js +1 -1
  377. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  378. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  379. package/.next/standalone/.next/server/chunks/7770.js +1 -0
  380. package/.next/standalone/.next/server/chunks/{4394.js → 7822.js} +1 -1
  381. package/.next/standalone/.next/server/chunks/8454.js +1 -1
  382. package/.next/standalone/.next/server/chunks/8586.js +1 -0
  383. package/.next/standalone/.next/server/chunks/920.js +1 -1
  384. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  385. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  386. package/.next/standalone/.next/server/chunks/9931.js +1 -0
  387. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  388. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  389. package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  390. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  391. package/.next/standalone/.next/server/next-font-manifest.json +1 -1
  392. package/.next/standalone/.next/server/pages/404.html +2 -2
  393. package/.next/standalone/.next/server/pages/500.html +1 -1
  394. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  395. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  396. package/.next/standalone/.next/server/src/middleware.js +2 -2
  397. package/.next/standalone/.next/static/chunks/{11595.a6268c75ca8a2163.js → 11595.32f7dedc4fd7e3e1.js} +1 -1
  398. package/.next/standalone/.next/static/chunks/11998-27dcf858173fc015.js +1 -0
  399. package/.next/standalone/.next/static/chunks/12070-426bb88f5179812b.js +1 -0
  400. package/.next/standalone/.next/static/chunks/17409-67dbc0a3f4cbc207.js +1 -0
  401. package/.next/standalone/.next/static/chunks/26494-5a04e150431b0233.js +1 -0
  402. package/.next/standalone/.next/static/chunks/{31308-fda6febfb2882a28.js → 31308-bb4a97b3f39c22dd.js} +1 -1
  403. package/.next/standalone/.next/static/chunks/{33456.16ff7edf00137539.js → 33456.87f86ce6041405e0.js} +1 -1
  404. package/.next/standalone/.next/static/chunks/38366.fb931fab9c756890.js +1 -0
  405. package/.next/standalone/.next/static/chunks/4166-85352630c29e2c2b.js +1 -0
  406. package/.next/standalone/.next/static/chunks/{4860.9e06848eb531e667.js → 4860.9457e021394e9399.js} +1 -1
  407. package/.next/standalone/.next/static/chunks/{65096-f756aac39efad7a3.js → 65096-8295f53f97c40d47.js} +1 -1
  408. package/.next/standalone/.next/static/chunks/65807-086d83649f593a5a.js +1 -0
  409. package/.next/standalone/.next/static/chunks/79919-56796c262f51fa82.js +1 -0
  410. package/.next/standalone/.next/static/chunks/94643-87ee1ede6d955937.js +1 -0
  411. package/.next/standalone/.next/static/chunks/{99373.81b79c91858f9099.js → 99373.aed267aa48c5bdd0.js} +1 -1
  412. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-9219c4de1012f0fb.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/{page-974781e4886529f8.js → page-82e90e222d6bc547.js} +1 -1
  414. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/activity/page-f1eccb50d38d8982.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f4810f1b9f39d1ae.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-721d2152f1a28c88.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-9bcff40805f39b25.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-fdd617457730a116.js → page-f31ad2eebe257628.js} +1 -1
  419. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-a4fb04068539c4ce.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-b1d2af10e9bc7e09.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-2cb245b0602a3c85.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-58b48aa0a11603c3.js → page-53ce4468844cc84f.js} +1 -1
  423. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-286faced32c6133f.js → page-1c374d19e8046d9a.js} +1 -1
  424. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-31d6f8e82c7f5366.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-32bff791b19a0a58.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/_not-found/{page-166b410da84336d4.js → page-b9d672df79b35e87.js} +1 -1
  427. package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/{page-b2458ed001dc8177.js → page-56118c51122ad639.js} +1 -1
  428. package/.next/standalone/.next/static/chunks/app/admin/companies/new/page-4e20deb41357171c.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/admin/companies/page-0632f245bf9c1c27.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/admin/layout-725ab2331c642f36.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/admin/{page-0cc8cf246db43e5d.js → page-5a0271dd2b8b36fd.js} +1 -1
  432. package/.next/standalone/.next/static/chunks/app/{layout-985054e973f66999.js → layout-098288cec4490c5d.js} +1 -1
  433. package/.next/standalone/.next/static/chunks/app/login/admin/page-c8e40259e5d3d9e0.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/login/callback/page-527652f6c1a39274.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/login/{page-9b34375d1b5579d7.js → page-0a16a64855b771ef.js} +1 -1
  436. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-47375a86e2375202.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/onboarding/{page-5c82cf3abd856301.js → page-d082f9b60ad03057.js} +1 -1
  438. package/.next/standalone/.next/static/chunks/app/{page-79e2d32e69788bd2.js → page-91dbf7dfd85f805f.js} +1 -1
  439. package/.next/standalone/.next/static/chunks/main-app-1a7cacecc8900a4d.js +1 -0
  440. package/.next/standalone/.next/static/chunks/{webpack-4d1cc14b13e247b6.js → webpack-e2e0ef50652d5791.js} +1 -1
  441. package/.next/standalone/.next/static/css/1d9cf83f50b6db00.css +1 -0
  442. package/.next/standalone/package.json +2 -1
  443. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  444. package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +44 -1
  445. package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +4 -3
  446. package/.next/standalone/public/chorus-plugin/bin/tests/test-mcp-cli-delegation.sh +244 -0
  447. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  448. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +19 -1
  449. package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +57 -0
  450. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -2
  451. package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
  452. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -2
  453. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +85 -42
  454. package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
  455. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +2 -2
  456. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  457. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  458. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +3 -3
  459. package/.next/standalone/public/dsh-credentials.sh +20 -127
  460. package/.next/standalone/public/install-codex.sh +21 -406
  461. package/.next/standalone/public/install-kiro.sh +20 -344
  462. package/.next/standalone/public/install-opencode.sh +20 -275
  463. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
  464. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +57 -0
  465. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +2 -2
  466. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
  467. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +2 -2
  468. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +85 -42
  469. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +1 -1
  470. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +2 -2
  471. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
  472. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
  473. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +3 -3
  474. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +44 -1
  475. package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +6 -4
  476. package/.next/standalone/public/kiro-plugin/manifest.txt +42 -0
  477. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  478. package/.next/standalone/public/skill/chorus/SKILL.md +19 -1
  479. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
  480. package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
  481. package/.next/standalone/public/skill/docs-chorus/SKILL.md +1 -1
  482. package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -2
  483. package/.next/standalone/public/skill/orchestrate-chorus/SKILL.md +1 -1
  484. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  485. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  486. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  487. package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
  488. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  489. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
  490. package/.next/standalone/public/test-dsh-credentials.sh +22 -38
  491. package/.next/standalone/public/test-install-codex.sh +31 -79
  492. package/.next/standalone/server.js +1 -1
  493. package/README.ja.md +4 -2
  494. package/README.ko.md +4 -2
  495. package/README.md +4 -2
  496. package/README.zh.md +4 -2
  497. package/chorus.mjs +35 -1
  498. package/cli/agent-backend-prompt.mjs +3 -2
  499. package/cli/agents.mjs +329 -0
  500. package/cli/chorus-client.mjs +69 -0
  501. package/cli/claude-spawner.mjs +56 -15
  502. package/cli/codex-spawner.mjs +11 -6
  503. package/cli/credentials.mjs +190 -4
  504. package/cli/daemon-agent.mjs +26 -2
  505. package/cli/daemon-config.mjs +27 -2
  506. package/cli/daemon-service.mjs +120 -33
  507. package/cli/daemon.mjs +128 -22
  508. package/cli/dsh-spawner.mjs +7 -0
  509. package/cli/init/adapters.mjs +137 -0
  510. package/cli/init/agent-type-map.mjs +60 -0
  511. package/cli/init/chorus-plugin-consts.mjs +16 -0
  512. package/cli/init/codex-mcp-config.mjs +183 -0
  513. package/cli/init/contracts.mjs +122 -0
  514. package/cli/init/detect.mjs +97 -0
  515. package/cli/init/file-template.mjs +248 -0
  516. package/cli/init/install-methods.mjs +569 -0
  517. package/cli/init/registry.mjs +74 -0
  518. package/cli/init/run-command.mjs +30 -0
  519. package/cli/init/select.mjs +111 -0
  520. package/cli/init/steps/credential-seed.mjs +751 -0
  521. package/cli/init/steps/daemon-setup.mjs +246 -0
  522. package/cli/init/steps/plugin-install.mjs +37 -0
  523. package/cli/init-args.mjs +140 -0
  524. package/cli/init.mjs +243 -0
  525. package/cli/kiro-spawner.mjs +5 -0
  526. package/cli/mcp-args.mjs +280 -0
  527. package/cli/mcp.mjs +164 -0
  528. package/cli/spawner-select.mjs +45 -2
  529. package/cli/waker.mjs +89 -38
  530. package/package.json +2 -1
  531. package/.next/standalone/.env +0 -18
  532. package/.next/standalone/.next/server/chunks/3594.js +0 -1
  533. package/.next/standalone/.next/server/chunks/4545.js +0 -1
  534. package/.next/standalone/.next/server/chunks/5205.js +0 -1
  535. package/.next/standalone/.next/server/chunks/6207.js +0 -1
  536. package/.next/standalone/.next/server/chunks/6667.js +0 -1
  537. package/.next/standalone/.next/server/chunks/6995.js +0 -1
  538. package/.next/standalone/.next/server/chunks/7091.js +0 -1
  539. package/.next/standalone/.next/server/chunks/9793.js +0 -1
  540. package/.next/standalone/.next/static/chunks/19887-b805e1dcee8c367b.js +0 -1
  541. package/.next/standalone/.next/static/chunks/29108-5a11eea003f4cc11.js +0 -1
  542. package/.next/standalone/.next/static/chunks/38366.e6e0132b8ba873d6.js +0 -1
  543. package/.next/standalone/.next/static/chunks/53073-a7ed20af6538a178.js +0 -1
  544. package/.next/standalone/.next/static/chunks/6603-e70ddeab6ad09c50.js +0 -1
  545. package/.next/standalone/.next/static/chunks/78917-1b59cbb806b3ecfc.js +0 -1
  546. package/.next/standalone/.next/static/chunks/82751-3e161e1d8dbda3ac.js +0 -1
  547. package/.next/standalone/.next/static/chunks/94643-ffa140f765c73daf.js +0 -1
  548. package/.next/standalone/.next/static/chunks/99366-425e9ef22e60e3e2.js +0 -1
  549. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-b742c51c0a764daf.js +0 -1
  550. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/activity/page-20632dbec5a6dbc0.js +0 -1
  551. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f636e00c28f425ea.js +0 -1
  552. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-c004f1a194af7fa5.js +0 -1
  553. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-425acbe9ade5fa83.js +0 -1
  554. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b9eb4e0692996657.js +0 -1
  555. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-d5b222f379b2e8ca.js +0 -1
  556. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0a6c2d0e1b68e0e4.js +0 -1
  557. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-9d79e285b6fd2f8d.js +0 -1
  558. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-1507a761e67c2aa9.js +0 -1
  559. package/.next/standalone/.next/static/chunks/app/admin/companies/new/page-e35dce890d6dfd8d.js +0 -1
  560. package/.next/standalone/.next/static/chunks/app/admin/companies/page-ef720c2b0856166c.js +0 -1
  561. package/.next/standalone/.next/static/chunks/app/admin/layout-c66ce38cbd88982a.js +0 -1
  562. package/.next/standalone/.next/static/chunks/app/login/admin/page-f032b6db3bd20a2c.js +0 -1
  563. package/.next/standalone/.next/static/chunks/app/login/callback/page-ec23211506e688ee.js +0 -1
  564. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-7e4664af2c787d08.js +0 -1
  565. package/.next/standalone/.next/static/chunks/main-app-ec87f2c9ef083ff1.js +0 -1
  566. package/.next/standalone/.next/static/css/5f52bd39b284ccdf.css +0 -1
  567. /package/.next/standalone/.next/static/{6sHDgeKioa0SJR1MAbcYG → _s4RZW3efB1g0lrKgLiZ7}/_buildManifest.js +0 -0
  568. /package/.next/standalone/.next/static/{6sHDgeKioa0SJR1MAbcYG → _s4RZW3efB1g0lrKgLiZ7}/_ssgManifest.js +0 -0
@@ -18,15 +18,19 @@
18
18
 
19
19
  import { readFileSync } from "node:fs";
20
20
  import { homedir } from "node:os";
21
- import { join } from "node:path";
21
+ import { join, resolve } from "node:path";
22
22
 
23
23
  /** Absolute path to the login file written by `chorus login`. */
24
24
  export function loginFilePath() {
25
+ const override = process.env.CHORUS_DAEMON_CONFIG_PATH?.trim();
26
+ if (override) return resolve(override);
25
27
  return join(homedir(), ".chorus", "daemon.json");
26
28
  }
27
29
 
28
30
  /** Absolute path to the Claude Code user settings file (plugin fallback source). */
29
31
  export function claudeSettingsPath() {
32
+ const override = process.env.CHORUS_CLAUDE_SETTINGS_PATH?.trim();
33
+ if (override) return resolve(override);
30
34
  return join(homedir(), ".claude", "settings.json");
31
35
  }
32
36
 
@@ -159,13 +163,26 @@ export function resolveCredentials(flags = {}, deps = {}) {
159
163
  if (url && apiKey) return { url, apiKey, source: "env" };
160
164
  }
161
165
 
162
- // 3. Login file (~/.chorus/daemon.json)
166
+ // 3. Login file (~/.chorus/daemon.json): the flat top-level url/apiKey, else the
167
+ // first agents[] entry. The flat top-level agent config is DEPRECATED — `chorus
168
+ // init` now writes credentials only into agents[] — so fall back to agents[0]
169
+ // so this single-credential resolver (install/daemon-setup gate, legacy flat
170
+ // daemon) still resolves from an agents[]-only daemon.json.
163
171
  tried.push(`login file (${loginPath}, run \`chorus login\`)`);
164
172
  {
165
173
  const file = readJson(loginPath);
166
174
  if (file) {
167
- const url = nonEmpty(file.url);
168
- const apiKey = nonEmpty(file.apiKey);
175
+ let url = nonEmpty(file.url);
176
+ let apiKey = nonEmpty(file.apiKey);
177
+ if (!(url && apiKey) && Array.isArray(file.agents)) {
178
+ const a0 = file.agents.find(
179
+ (a) => a && typeof a === "object" && nonEmpty(a.url) && nonEmpty(a.apiKey),
180
+ );
181
+ if (a0) {
182
+ url = nonEmpty(a0.url);
183
+ apiKey = nonEmpty(a0.apiKey);
184
+ }
185
+ }
169
186
  if (url && apiKey) return { url, apiKey, source: "login-file" };
170
187
  }
171
188
  }
@@ -194,3 +211,172 @@ export function resolveCredentials(flags = {}, deps = {}) {
194
211
  " • login: chorus login (persists to ~/.chorus/daemon.json)\n"
195
212
  );
196
213
  }
214
+
215
+ /**
216
+ * @typedef {Object} McpCredentials
217
+ * @property {string} url
218
+ * @property {string} apiKey
219
+ * @property {string} label Diagnostic label for the acting identity ("flag" /
220
+ * "env" / a `~/.chorus/daemon.json` agent name/label / the flat-resolution source).
221
+ */
222
+
223
+ /**
224
+ * Resolve the url + `cho_` API key AND the acting agent identity for the
225
+ * `chorus mcp` command group. Unlike `resolveCredentials`, this understands the
226
+ * multi-agent `agents[]` model and refuses to guess which agent to act as.
227
+ *
228
+ * PROFILE identity (AWS-CLI style): a caller can name WHICH agent to act as by
229
+ * `--agent <name|uuid>` (explicit flag) or the `CHORUS_AGENT_PROFILE` env var,
230
+ * and this resolves that agent's key from `~/.chorus/daemon.json` — the secret
231
+ * never has to be threaded through the caller's environment. A profile matches
232
+ * an `agents[]` entry by its `agentUuid`, `agentName`, or the back-compat
233
+ * `label`/`name` aliases (exact). Ambiguous (matches >1 entry) → hard error.
234
+ *
235
+ * Precedence (owner decision: PREFER profile, fall back to url+key mode when no
236
+ * profile resolves — the key stays written in daemon.json, url+key is the
237
+ * fallback so the CLI-absent curl path still works):
238
+ * 1. Explicit `--agent <name|uuid>` flag → deliberate profile selection from
239
+ * `agents[]`, PREFERRED over an explicit url+key pair (no match → hard error
240
+ * listing agents). With NO `agents[]` it rides along an explicit `--url/--api-key`
241
+ * pair (else the env pair) as the label, else it is a usage error.
242
+ * 2. Explicit `--url` + `--api-key` flags (no `--agent`) → used directly
243
+ * (identity is explicit); a `CHORUS_AGENT_PROFILE` name rides along as the label.
244
+ * 3. `CHORUS_AGENT_PROFILE` env → ambient profile selection from `agents[]`.
245
+ * A match wins over the url+key env pair; NO match falls through (the
246
+ * profile "doesn't exist" → url-mode fallback), an ambiguous match throws.
247
+ * 4. `CHORUS_URL` + `CHORUS_API_KEY` env pair → used directly (url-mode
248
+ * fallback / legacy plugin-hook path); a profile name rides as the label.
249
+ * 5. Exactly one agent in `agents[]` + nothing specified → that agent.
250
+ * 6. More than one agent + nothing specified → hard error (never pick
251
+ * silently), listing the available agents.
252
+ * 7. No `agents[]` → flat resolution via `resolveCredentials`.
253
+ *
254
+ * Each selected agent's `url`/`apiKey` merges over the top-level per-field
255
+ * defaults (`resolveCredentialDefaults`), so an agent that omits a field
256
+ * inherits it.
257
+ *
258
+ * This never imports `cli/daemon-config.mjs` (which imports THIS module) — it
259
+ * reads `agents[]` directly to stay cycle-free; only url/apiKey/label matter for
260
+ * MCP, so per-agent agentType/permissionMode validation is intentionally skipped.
261
+ *
262
+ * @param {{ url?: string, apiKey?: string, agent?: string }} flags
263
+ * @param {ResolveDeps} [deps]
264
+ * @returns {McpCredentials}
265
+ * @throws {Error} on ambiguity, a missing `--agent` label, or nothing resolvable.
266
+ */
267
+ export function resolveMcpCredentials(flags = {}, deps = {}) {
268
+ const env = deps.env ?? process.env;
269
+ const readJson = deps.readJson ?? readJsonSafe;
270
+ const loginPath = deps.loginPath ?? loginFilePath();
271
+ const flagAgent = nonEmpty(flags.agent);
272
+ const envProfile = nonEmpty(env.CHORUS_AGENT_PROFILE);
273
+ // The profile name a caller asked for, whatever its source — used as the
274
+ // diagnostic label when creds ultimately come from explicit flags / the env pair.
275
+ const wanted = flagAgent ?? envProfile;
276
+
277
+ const envPair = () => {
278
+ const url = nonEmpty(env.CHORUS_URL);
279
+ const apiKey = nonEmpty(env.CHORUS_API_KEY);
280
+ return url && apiKey ? { url, apiKey } : null;
281
+ };
282
+ const flagPair = () => {
283
+ const url = nonEmpty(flags.url);
284
+ const apiKey = nonEmpty(flags.apiKey);
285
+ return url && apiKey ? { url, apiKey } : null;
286
+ };
287
+
288
+ // Read agents[] once and pre-resolve every entry (label, its match keys, and
289
+ // its effective url/apiKey merged over the top-level per-field defaults).
290
+ const file = readJson(loginPath);
291
+ const agentEntries =
292
+ file && Array.isArray(file.agents)
293
+ ? file.agents.filter((a) => a && typeof a === "object")
294
+ : [];
295
+ const hasAgents = agentEntries.length > 0;
296
+ const defaults = hasAgents ? resolveCredentialDefaults(flags, deps) : { url: undefined, apiKey: undefined };
297
+ const labelOf = (entry, i) =>
298
+ nonEmpty(entry.agentName) ?? nonEmpty(entry.label) ?? nonEmpty(entry.name) ?? `agents[${i}]`;
299
+ const resolved = agentEntries.map((entry, i) => ({
300
+ label: labelOf(entry, i),
301
+ // A profile may name an entry by its uuid, its display name, or the
302
+ // back-compat label/name aliases.
303
+ keys: [entry.agentUuid, entry.agentName, entry.label, entry.name]
304
+ .map((k) => nonEmpty(k))
305
+ .filter((k) => k !== undefined),
306
+ url: nonEmpty(entry.url) ?? defaults.url,
307
+ apiKey: nonEmpty(entry.apiKey) ?? defaults.apiKey,
308
+ }));
309
+ const labels = resolved.map((a) => a.label).join(", ");
310
+ const pick = (a) => {
311
+ if (!a.url || !a.apiKey) {
312
+ throw new Error(
313
+ `Agent "${a.label}" in ${loginPath} is missing a url or apiKey (and no top-level default supplies it).`,
314
+ );
315
+ }
316
+ return { url: a.url, apiKey: a.apiKey, label: a.label };
317
+ };
318
+ const matchesFor = (name) => resolved.filter((a) => a.keys.includes(name));
319
+ const selectOrThrow = (name, source) => {
320
+ const matches = matchesFor(name);
321
+ if (matches.length === 1) return pick(matches[0]);
322
+ if (matches.length > 1) {
323
+ throw new Error(
324
+ `${source} "${name}" is ambiguous in ${loginPath} — it matches ${matches.length} agents ` +
325
+ `(${matches.map((m) => m.label).join(", ")}). Use the agent UUID to disambiguate.`,
326
+ );
327
+ }
328
+ return null; // no match
329
+ };
330
+
331
+ // 1. Explicit --agent flag: a deliberate profile selection — PREFERRED over an
332
+ // explicit url+key flag pair (owner: "prefer profile"). With NO agents[] to
333
+ // match, it rides an explicit flag pair (else the env pair), using the name
334
+ // as the diagnostic label; with neither it is a usage error.
335
+ if (flagAgent) {
336
+ if (hasAgents) {
337
+ const hit = selectOrThrow(flagAgent, "--agent");
338
+ if (hit) return hit;
339
+ throw new Error(`--agent "${flagAgent}" not found in ${loginPath} agents[]. Available: ${labels}.`);
340
+ }
341
+ const pair = flagPair() ?? envPair();
342
+ if (pair) return { url: pair.url, apiKey: pair.apiKey, label: flagAgent };
343
+ throw new Error(
344
+ `--agent "${flagAgent}" was given but ${loginPath} declares no agents[]. ` +
345
+ `Remove --agent, or configure an agents[] list.`,
346
+ );
347
+ }
348
+
349
+ // 2. Explicit url+key flag pair (no --agent) — identity is explicit.
350
+ {
351
+ const pair = flagPair();
352
+ if (pair) return { url: pair.url, apiKey: pair.apiKey, label: wanted ?? "flag" };
353
+ }
354
+
355
+ // 3. CHORUS_AGENT_PROFILE env: ambient profile selection. A match wins over the
356
+ // url+key env pair; a no-match falls through to url-mode (profile "doesn't
357
+ // exist"); an ambiguous match throws.
358
+ if (envProfile && hasAgents) {
359
+ const hit = selectOrThrow(envProfile, "CHORUS_AGENT_PROFILE");
360
+ if (hit) return hit;
361
+ // no match → fall through to the url-mode fallback below
362
+ }
363
+
364
+ // 4. Env pair (url-mode fallback). Carry the profile name as the label if set.
365
+ {
366
+ const pair = envPair();
367
+ if (pair) return { url: pair.url, apiKey: pair.apiKey, label: wanted ?? "env" };
368
+ }
369
+
370
+ // 5/6. agents[] with nothing specified: auto-single, else hard error.
371
+ if (hasAgents) {
372
+ if (resolved.length === 1) return pick(resolved[0]);
373
+ throw new Error(
374
+ `Multiple agents are configured in ${loginPath} (${labels}). ` +
375
+ `Specify which one to act as with --agent <name|uuid> or CHORUS_AGENT_PROFILE.`,
376
+ );
377
+ }
378
+
379
+ // 7. No agents[] → flat resolution (throws the detailed "could not resolve" error).
380
+ const flat = resolveCredentials(flags, deps);
381
+ return { url: flat.url, apiKey: flat.apiKey, label: flat.source };
382
+ }
@@ -17,8 +17,18 @@ import { readFileSync } from "node:fs";
17
17
  import { loginFilePath } from "./credentials.mjs";
18
18
 
19
19
  /** The agent backends the daemon recognizes. Existing spawners cover claude-code,
20
- * codex, and kiro; dsh registration is the base contract for its bridge. */
21
- export const KNOWN_AGENTS = ["claude-code", "codex", "kiro", "dsh"];
20
+ * codex, and kiro; dsh registration is the base contract for its bridge.
21
+ *
22
+ * `offline` is a NON-wakeable classification, not a real backend: an agent whose
23
+ * key is parked in daemon.json purely so `chorus mcp` can proxy through it, while
24
+ * the daemon builds NO spawner and dispatches NO wake for it. It is accepted here
25
+ * (and by-name in agent-backend-prompt via this list) so an agents[] entry may set
26
+ * `agentType: "offline"` and pass resolveAgentConfigs' KNOWN_AGENTS validation. The
27
+ * fail-closed no-wake handling lives in spawner-select.mjs (selectSpawner returns
28
+ * an OfflineSpawner that refuses to spawn) — an offline value MUST NOT fall through
29
+ * to the claude-code default and wake it. `chorus agents add` maps every non-wakeable
30
+ * selected agent (opencode/openclaw/pi/dsh) to this classification. */
31
+ export const KNOWN_AGENTS = ["claude-code", "codex", "kiro", "dsh", "offline"];
22
32
 
23
33
  /** The default agent backend when neither --agent nor CHORUS_AGENT is set. */
24
34
  export const DEFAULT_AGENT = "claude-code";
@@ -35,6 +45,11 @@ export function backendCli(agentType) {
35
45
  if (agentType === "codex") return { name: "codex", envVar: "CHORUS_CODEX_PATH" };
36
46
  if (agentType === "kiro") return { name: "kiro-cli", envVar: "CHORUS_KIRO_PATH" };
37
47
  if (agentType === "dsh") return { name: "dsh-jsonrpc-agent", envVar: "CHORUS_DSH_PATH" };
48
+ // `offline` has no CLI to resolve — it is never woken (see backendClientType).
49
+ // The daemon does not probe a binary for it; this explicit descriptor keeps the
50
+ // return sensible if some banner path ever reads it (CHORUS_AGENT selects the
51
+ // backend), instead of mislabeling it as `claude`.
52
+ if (agentType === "offline") return { name: "offline", envVar: "CHORUS_AGENT" };
38
53
  return { name: "claude", envVar: "CHORUS_CLAUDE_PATH" };
39
54
  }
40
55
 
@@ -50,6 +65,15 @@ export function backendClientType(agentType) {
50
65
  if (agentType === "codex") return "codex";
51
66
  if (agentType === "kiro") return "kiro";
52
67
  if (agentType === "dsh") return "dsh";
68
+ // `offline` is a non-wakeable classification — the daemon SHALL NOT register it
69
+ // as a wakeable connection (daemon-multi-agent spec). It must therefore NOT
70
+ // fall through to the `claude_code` default (which would make an offline agent
71
+ // present as a wakeable claude_code connection). Return the distinct `offline`
72
+ // string: the runtime fan-out skips registering it at all, and this value is
73
+ // intentionally OUTSIDE the server's DAEMON_CLIENT_TYPES allowlist, so any
74
+ // future path that DID try to register it fails closed (server rejects) rather
75
+ // than silently registering it as claude_code.
76
+ if (agentType === "offline") return "offline";
53
77
  return "claude_code";
54
78
  }
55
79
 
@@ -306,13 +306,19 @@ function positiveInt(value) {
306
306
  * @typedef {Object} AgentConfig One fully-resolved agent runtime config.
307
307
  * @property {string} url Chorus server URL for this agent.
308
308
  * @property {string} apiKey This agent's `cho_` API key.
309
- * @property {string} agentType Backend: claude-code | codex | kiro | dsh.
309
+ * @property {string} agentType Backend: claude-code | codex | kiro | dsh | offline.
310
+ * @property {boolean} [daemonWake] Wake opt-in for a wakeable backend; only
311
+ * `false` disables (absent/true ⇒ woken).
310
312
  * @property {Array<string|undefined>} cwds Served paths (`undefined` ⇒ process cwd).
311
313
  * @property {"yolo"|"chorus"} permissionMode Woken-agent permission posture.
312
314
  * @property {number} maxConcurrency This agent's wake-queue cap.
313
315
  * @property {number} sigintTimeoutMs Interrupt escalation window (ms).
314
316
  * @property {string[]} browseRoots Directory-discovery allowlist.
315
317
  * @property {string} label Diagnostic label ("agent" or "agents[i]").
318
+ * @property {string} [agentUuid] This agent's Chorus UUID — exported to a
319
+ * woken session as CHORUS_AGENT_PROFILE so its
320
+ * hooks/skills resolve the key from daemon.json.
321
+ * @property {string} [agentName] This agent's Chorus display name (profile alias).
316
322
  */
317
323
 
318
324
  /**
@@ -365,6 +371,8 @@ export function resolveAgentConfigs(flags = {}, deps = {}) {
365
371
  sigintTimeoutMs: resolveSigintTimeoutMs(flags, deps),
366
372
  browseRoots: resolveBrowseRoots(flags, deps),
367
373
  label: "agent",
374
+ agentUuid: nonEmptyStr(file?.agentUuid),
375
+ agentName: nonEmptyStr(file?.agentName),
368
376
  },
369
377
  ];
370
378
  }
@@ -433,6 +441,23 @@ export function resolveAgentConfigs(flags = {}, deps = {}) {
433
441
  const browseRoots =
434
442
  entry.browseRoots !== undefined ? cleanCwdList(entry.browseRoots, home) : defaultBrowseRoots;
435
443
 
436
- return { url, apiKey, agentType, cwds, permissionMode, maxConcurrency, sigintTimeoutMs, browseRoots, label };
444
+ // daemonWake: per-agent opt-in for daemon waking (pass-through boolean). Only
445
+ // `=== false` disables waking; absent (undefined) or true ⇒ woken, so agent
446
+ // entries written before this field existed keep being woken. Orthogonal to
447
+ // agentType (offline is never woken regardless).
448
+ return {
449
+ url,
450
+ apiKey,
451
+ agentType,
452
+ cwds,
453
+ permissionMode,
454
+ maxConcurrency,
455
+ sigintTimeoutMs,
456
+ browseRoots,
457
+ daemonWake: entry.daemonWake,
458
+ label,
459
+ agentUuid: nonEmptyStr(entry.agentUuid),
460
+ agentName: nonEmptyStr(entry.agentName),
461
+ };
437
462
  });
438
463
  }
@@ -35,6 +35,9 @@ import { fileURLToPath } from "node:url";
35
35
  /** The systemd --user unit name (also the launchd label stem). */
36
36
  export const SERVICE_NAME = "chorus-daemon";
37
37
 
38
+ /** The macOS launchd LaunchAgent label. */
39
+ export const LAUNCHD_LABEL = "com.chorus.daemon";
40
+
38
41
  /** Default IO bundle — overridable per-call for tests (no real disk/process). */
39
42
  function defaultIO() {
40
43
  return {
@@ -232,25 +235,39 @@ function systemdQuoteArg(token) {
232
235
 
233
236
  /**
234
237
  * Detect whether a supervisor already manages the chorus daemon on this host.
235
- * Linux only (systemd --user); everything else reports `{ kind: "none" }`.
236
- * - kind: "systemd" with installed (unit file present, `is-enabled` not
237
- * "not-found") and active (`is-active` == "active").
238
- * - kind: "none" otherwise (or when systemctl is unavailable).
238
+ * - Linux kind: "systemd" (unit file present and/or `is-active` == "active").
239
+ * - macOS → kind: "launchd" (LaunchAgent plist present and/or `launchctl list
240
+ * <label>` reports it loaded).
241
+ * - kind: "none" otherwise (or when the service manager is unavailable).
239
242
  * Used by the lifecycle subcommands to decide whether to delegate.
240
243
  * @param {object} [io]
241
- * @returns {{ kind: "systemd", installed: boolean, active: boolean, unitPath: string } | { kind: "none" }}
244
+ * @returns {{ kind: "systemd", installed: boolean, active: boolean, unitPath: string }
245
+ * | { kind: "launchd", installed: boolean, active: boolean, label: string, plistPath: string }
246
+ * | { kind: "none" }}
242
247
  */
243
248
  export function detectSupervisor(io = defaultIO()) {
244
- if (io.platform !== "linux") return { kind: "none" };
245
- const unitPath = systemdUnitPath(io);
246
- const installed = safeExists(unitPath, io);
247
- // `is-active` is authoritative for "running under systemd right now". Query it
248
- // even when the unit file is absent: a transient/unit-less path still returns
249
- // non-active, and we never want to throw here.
250
- const activeRes = systemctlUser(["is-active", `${SERVICE_NAME}.service`], io);
251
- const active = (activeRes.stdout ?? "").trim() === "active";
252
- if (!installed && !active) return { kind: "none" };
253
- return { kind: "systemd", installed, active, unitPath };
249
+ if (io.platform === "linux") {
250
+ const unitPath = systemdUnitPath(io);
251
+ const installed = safeExists(unitPath, io);
252
+ // `is-active` is authoritative for "running under systemd right now". Query it
253
+ // even when the unit file is absent: a transient/unit-less path still returns
254
+ // non-active, and we never want to throw here.
255
+ const activeRes = systemctlUser(["is-active", `${SERVICE_NAME}.service`], io);
256
+ const active = (activeRes.stdout ?? "").trim() === "active";
257
+ if (!installed && !active) return { kind: "none" };
258
+ return { kind: "systemd", installed, active, unitPath };
259
+ }
260
+ if (io.platform === "darwin") {
261
+ const plistPath = launchdPlistPath(io);
262
+ const installed = safeExists(plistPath, io);
263
+ // `launchctl list <label>` exits 0 when the agent is loaded (prints its dict),
264
+ // non-zero otherwise. This is authoritative for "loaded right now".
265
+ const listRes = launchctl(["list", LAUNCHD_LABEL], io);
266
+ const active = listRes.status === 0;
267
+ if (!installed && !active) return { kind: "none" };
268
+ return { kind: "launchd", installed, active, label: LAUNCHD_LABEL, plistPath };
269
+ }
270
+ return { kind: "none" };
254
271
  }
255
272
 
256
273
  function safeExists(path, io) {
@@ -281,6 +298,44 @@ export function journalctlUser(args, io = defaultIO()) {
281
298
  }
282
299
  }
283
300
 
301
+ /** Run `launchctl <args>`, capturing output. Never throws. macOS only. */
302
+ export function launchctl(args, io = defaultIO()) {
303
+ try {
304
+ const r = io.spawnSync("launchctl", args, { encoding: "utf8" });
305
+ // spawnSync sets .error (and status null) when the binary is missing (ENOENT);
306
+ // surface that as a null status + the error message rather than throwing.
307
+ if (r?.error) {
308
+ return { status: null, stdout: r?.stdout ?? "", stderr: String(r.error.message ?? r.error) };
309
+ }
310
+ return { status: r?.status ?? null, stdout: r?.stdout ?? "", stderr: r?.stderr ?? "" };
311
+ } catch (err) {
312
+ return { status: null, stdout: "", stderr: err instanceof Error ? err.message : String(err) };
313
+ }
314
+ }
315
+
316
+ /**
317
+ * Classify whether THIS host supports installing a real boot-autostart daemon
318
+ * service, and via which supervisor. The single source of truth both
319
+ * `chorus daemon install` and the `chorus agents add` daemon-setup step consult so they
320
+ * cannot disagree about what "supported" means (add-chorus-init-daemon-setup).
321
+ * - "systemd" — Linux where `systemctl --user` is usable.
322
+ * - "launchd" — macOS (launchctl is always present).
323
+ * - "unsupported" — Linux without a usable systemctl, Windows, or anything else.
324
+ * Pure-ish: only probes `systemctl --user --version` on Linux (injected IO).
325
+ * @param {object} [io]
326
+ * @returns {"systemd" | "launchd" | "unsupported"}
327
+ */
328
+ export function autostartCapability(io = defaultIO()) {
329
+ if (io.platform === "darwin") return "launchd";
330
+ if (io.platform === "linux") {
331
+ // `systemctl --user` must be reachable — a container/minimal host may lack it,
332
+ // in which case there is no real boot service we can install.
333
+ const probe = systemctlUser(["--version"], io);
334
+ return probe.status === 0 ? "systemd" : "unsupported";
335
+ }
336
+ return "unsupported";
337
+ }
338
+
284
339
  /**
285
340
  * Install the systemd --user unit (Linux) or return the template to print
286
341
  * (macOS/Windows). On Linux: write the unit, `daemon-reload`, `enable --now`.
@@ -331,19 +386,39 @@ export function installService(spec, io = defaultIO()) {
331
386
  }
332
387
  }
333
388
  if (io.platform === "darwin") {
389
+ // Real launchd install (add-chorus-init-daemon-setup): write the LaunchAgent
390
+ // plist and `launchctl load -w` it so it starts now and at every login —
391
+ // no longer a printed-template-only posture.
334
392
  const plistPath = launchdPlistPath(io);
335
393
  const unitText = renderLaunchdPlist({ ...spec, home, logPath: join(home, ".chorus", "daemon.log") });
336
- return {
337
- platform: "darwin",
338
- installed: false,
339
- unitPath: plistPath,
340
- unitText,
341
- steps: [
342
- `Save the plist below to ${plistPath}`,
343
- `launchctl load -w ${plistPath}`,
344
- `Check: launchctl list | grep com.chorus.daemon`,
345
- ],
346
- };
394
+ const steps = [];
395
+ try {
396
+ io.mkdirSync(dirname(plistPath), { recursive: true });
397
+ // Back up an existing plist before overwrite (backup-before-overwrite
398
+ // convention, mirrors the init plugin-install step); best-effort.
399
+ if (safeExists(plistPath, io) && typeof io.readFileSync === "function") {
400
+ try {
401
+ io.writeFileSync(`${plistPath}.chorus-bak`, io.readFileSync(plistPath));
402
+ steps.push(`backed up existing plist ${plistPath}.chorus-bak`);
403
+ } catch {
404
+ // a failed backup must not block the (idempotent) re-install
405
+ }
406
+ }
407
+ // Unload any currently-loaded copy first so a re-install applies the new
408
+ // plist rather than leaving the old agent running (parallels the systemd
409
+ // restart). Best-effort — a not-loaded agent returns non-zero here.
410
+ launchctl(["unload", plistPath], io);
411
+ io.writeFileSync(plistPath, unitText, { mode: 0o644 });
412
+ steps.push(`wrote ${plistPath}`);
413
+ const load = launchctl(["load", "-w", plistPath], io);
414
+ if (load.status !== 0) {
415
+ return { platform: "darwin", installed: false, unitPath: plistPath, unitText, steps, error: `launchctl load -w failed: ${load.stderr.trim() || `exit ${load.status}`}` };
416
+ }
417
+ steps.push(`launchctl load -w ${plistPath}`);
418
+ return { platform: "darwin", installed: true, unitPath: plistPath, unitText, steps };
419
+ } catch (err) {
420
+ return { platform: "darwin", installed: false, unitPath: plistPath, unitText, steps, error: err instanceof Error ? err.message : String(err) };
421
+ }
347
422
  }
348
423
  // Windows / other: no first-class service model without native deps. Print the
349
424
  // foreground command an operator can wrap in their supervisor of choice.
@@ -398,18 +473,30 @@ export function uninstallService(io = defaultIO()) {
398
473
  return { platform: "linux", removed: existed || disable.status === 0, unitPath, steps };
399
474
  }
400
475
  if (io.platform === "darwin") {
476
+ // Real launchd uninstall (add-chorus-init-daemon-setup): unload the agent and
477
+ // remove the plist. Idempotent: tolerate an already-absent plist / not-loaded
478
+ // agent.
401
479
  const plistPath = launchdPlistPath(io);
402
- return {
403
- platform: "darwin",
404
- removed: false,
405
- unitPath: plistPath,
406
- steps: [`launchctl unload -w ${plistPath}`, `rm ${plistPath}`],
407
- };
480
+ const steps = [];
481
+ const existed = safeExists(plistPath, io);
482
+ // unload -w stops the agent and clears its "enabled" override; a not-loaded
483
+ // agent returns non-zero, which we tolerate.
484
+ const unload = launchctl(["unload", "-w", plistPath], io);
485
+ if (unload.status === 0) steps.push(`launchctl unload -w ${plistPath}`);
486
+ try {
487
+ if (existed) {
488
+ io.unlinkSync(plistPath);
489
+ steps.push(`removed ${plistPath}`);
490
+ }
491
+ } catch (err) {
492
+ return { platform: "darwin", removed: false, unitPath: plistPath, steps, error: err instanceof Error ? err.message : String(err) };
493
+ }
494
+ return { platform: "darwin", removed: existed, unitPath: plistPath, steps };
408
495
  }
409
496
  return {
410
497
  platform: "other",
411
498
  removed: false,
412
- steps: ["Automatic service uninstall is only supported on Linux (systemd). Remove the daemon from your supervisor manually."],
499
+ steps: ["Automatic service uninstall is only supported on Linux (systemd) and macOS (launchd). Remove the daemon from your supervisor manually."],
413
500
  };
414
501
  }
415
502