@chorus-aidlc/chorus 0.11.1 → 0.12.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 (669) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +405 -391
  3. package/.next/standalone/.next/app-path-routes-manifest.json +33 -31
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +27 -27
  6. package/.next/standalone/.next/react-loadable-manifest.json +3 -3
  7. package/.next/standalone/.next/routes-manifest.json +8 -0
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
  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]/proposals/[proposalUuid]/page.js +2 -2
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +2 -2
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  45. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  49. package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
  50. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
  53. package/.next/standalone/.next/server/app/admin/companies/new.rsc +3 -3
  54. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/admin/companies.html +1 -1
  56. package/.next/standalone/.next/server/app/admin/companies.rsc +3 -3
  57. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/admin.html +1 -1
  59. package/.next/standalone/.next/server/app/admin.rsc +3 -3
  60. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  61. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js.nft.json +1 -1
  62. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/companies/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/admin/login/route.js +1 -1
  67. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/admin/session/route.js +1 -1
  69. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -1
  71. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
  74. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  77. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
  80. package/.next/standalone/.next/server/app/api/agents/route.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
  83. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
  86. package/.next/standalone/.next/server/app/api/api-keys/route.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/auth/check-default/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/auth/identify/route.js +1 -1
  96. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/auth/logout/route.js +1 -1
  98. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/auth/refresh/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/auth/session/route.js +1 -1
  103. package/.next/standalone/.next/server/app/api/auth/session/route.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/auth/sync-token/route.js +1 -1
  106. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  108. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
  111. package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  123. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  126. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  129. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  132. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  133. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  135. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -0
  138. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -0
  139. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -0
  140. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  144. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  147. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  150. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/events/notifications/route.js +6 -4
  156. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/events/route.js +7 -5
  159. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  163. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  166. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  169. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  172. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  175. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  178. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/keepalive/route.js +1 -0
  181. package/.next/standalone/.next/server/app/api/keepalive/route.js.nft.json +1 -0
  182. package/.next/standalone/.next/server/app/api/keepalive/route_client-reference-manifest.js +1 -0
  183. package/.next/standalone/.next/server/app/api/mcp/route.js +5 -5
  184. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  185. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  187. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  190. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  191. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  193. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  194. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  196. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  197. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  198. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  199. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  200. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  202. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  203. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  205. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  207. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  208. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  209. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  211. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js.nft.json +1 -1
  212. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  214. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js.nft.json +1 -1
  215. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  217. package/.next/standalone/.next/server/app/api/project-groups/route.js.nft.json +1 -1
  218. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  219. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  220. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js.nft.json +1 -1
  221. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  222. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  223. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  224. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  226. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js.nft.json +1 -1
  227. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  229. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  232. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  233. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  235. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  236. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  237. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  238. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js.nft.json +1 -1
  239. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  241. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js.nft.json +1 -1
  242. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  243. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  244. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js.nft.json +1 -1
  245. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  246. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  247. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js.nft.json +1 -1
  248. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  250. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js.nft.json +1 -1
  251. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  253. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  254. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  256. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  257. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  258. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  259. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  260. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  262. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js.nft.json +1 -1
  263. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  264. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  265. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js.nft.json +1 -1
  266. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  268. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js.nft.json +1 -1
  269. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  271. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js.nft.json +1 -1
  272. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  274. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js.nft.json +1 -1
  275. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  277. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  278. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  280. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  281. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  282. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  283. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  284. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  286. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  287. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  289. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  290. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  291. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  292. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  293. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  294. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  295. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  296. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  297. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  298. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  299. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  300. package/.next/standalone/.next/server/app/index.html +1 -1
  301. package/.next/standalone/.next/server/app/index.rsc +4 -4
  302. package/.next/standalone/.next/server/app/login/admin/page.js +2 -2
  303. package/.next/standalone/.next/server/app/login/admin/page.js.nft.json +1 -1
  304. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  305. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  306. package/.next/standalone/.next/server/app/login/admin.rsc +3 -3
  307. package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
  308. package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
  309. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  310. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  311. package/.next/standalone/.next/server/app/login/callback.rsc +4 -4
  312. package/.next/standalone/.next/server/app/login/page.js +2 -2
  313. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  314. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  315. package/.next/standalone/.next/server/app/login/pick-workspace/page.js +1 -1
  316. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  317. package/.next/standalone/.next/server/app/login/pick-workspace.html +1 -1
  318. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +4 -4
  319. package/.next/standalone/.next/server/app/login/silent-refresh/page.js +1 -1
  320. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
  321. package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
  322. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +4 -4
  323. package/.next/standalone/.next/server/app/login.html +1 -1
  324. package/.next/standalone/.next/server/app/login.rsc +4 -4
  325. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  326. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  327. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  328. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  329. package/.next/standalone/.next/server/app/onboarding.rsc +4 -4
  330. package/.next/standalone/.next/server/app/page.js +2 -2
  331. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  332. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  333. package/.next/standalone/.next/server/app/projects.html +1 -1
  334. package/.next/standalone/.next/server/app/projects.rsc +5 -5
  335. package/.next/standalone/.next/server/app/settings.html +1 -1
  336. package/.next/standalone/.next/server/app/settings.rsc +5 -5
  337. package/.next/standalone/.next/server/app-paths-manifest.json +33 -31
  338. package/.next/standalone/.next/server/chunks/{5201.js → 1343.js} +2 -2
  339. package/.next/standalone/.next/server/chunks/1463.js +1 -0
  340. package/.next/standalone/.next/server/chunks/1596.js +2 -2
  341. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  342. package/.next/standalone/.next/server/chunks/2622.js +1 -0
  343. package/.next/standalone/.next/server/chunks/2779.js +31 -0
  344. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  345. package/.next/standalone/.next/server/chunks/3219.js +1 -1
  346. package/.next/standalone/.next/server/chunks/3419.js +1 -1
  347. package/.next/standalone/.next/server/chunks/4292.js +1 -0
  348. package/.next/standalone/.next/server/chunks/4872.js +1 -0
  349. package/.next/standalone/.next/server/chunks/5300.js +1 -1
  350. package/.next/standalone/.next/server/chunks/5538.js +1 -0
  351. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  352. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  353. package/.next/standalone/.next/server/chunks/7063.js +2 -2
  354. package/.next/standalone/.next/server/chunks/7064.js +1 -0
  355. package/.next/standalone/.next/server/chunks/7160.js +1 -0
  356. package/.next/standalone/.next/server/chunks/7364.js +1 -0
  357. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  358. package/.next/standalone/.next/server/chunks/7427.js +1 -0
  359. package/.next/standalone/.next/server/chunks/7515.js +1 -0
  360. package/.next/standalone/.next/server/chunks/7578.js +2 -2
  361. package/.next/standalone/.next/server/chunks/{4711.js → 796.js} +6 -6
  362. package/.next/standalone/.next/server/chunks/8732.js +1 -0
  363. package/.next/standalone/.next/server/chunks/9161.js +1 -0
  364. package/.next/standalone/.next/server/chunks/920.js +1 -1
  365. package/.next/standalone/.next/server/chunks/9273.js +1 -0
  366. package/.next/standalone/.next/server/chunks/937.js +3 -3
  367. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  368. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  369. package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  370. package/.next/standalone/.next/server/pages/404.html +1 -1
  371. package/.next/standalone/.next/server/pages/500.html +1 -1
  372. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  373. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  374. package/.next/standalone/.next/server/src/middleware.js +1 -1
  375. package/.next/standalone/.next/static/GmBblfxcDziUENBiEap4B/_buildManifest.js +1 -0
  376. package/.next/standalone/.next/static/chunks/10344-2e9a9d767e2e8ed1.js +1 -0
  377. package/.next/standalone/.next/static/chunks/16467-dd4f928e725306c1.js +1 -0
  378. package/.next/standalone/.next/static/chunks/20081-a2bf5c9f24d5d589.js +1 -0
  379. package/.next/standalone/.next/static/chunks/2280-f48bf99ea9d88ece.js +1 -0
  380. package/.next/standalone/.next/static/chunks/26394-4af487a51dd62832.js +1 -0
  381. package/.next/standalone/.next/static/chunks/27378-9328bcc96ae9872e.js +1 -0
  382. package/.next/standalone/.next/static/chunks/{33187.13c12f5c0821ac57.js → 33187.1328c15b9dab78a8.js} +1 -1
  383. package/.next/standalone/.next/static/chunks/37784-95dee37276b1067b.js +1 -0
  384. package/.next/standalone/.next/static/chunks/46983-8bf90f1ffeb55957.js +1 -0
  385. package/.next/standalone/.next/static/chunks/46999-f53da8f53fe1b8a9.js +1 -0
  386. package/.next/standalone/.next/static/chunks/4860.e3d0dd79a4d37626.js +1 -0
  387. package/.next/standalone/.next/static/chunks/54637-71d281d649ea3a17.js +1 -0
  388. package/.next/standalone/.next/static/chunks/64187-cff8a4b5e96fa8f9.js +10 -0
  389. package/.next/standalone/.next/static/chunks/78917-aa5bbff9248799a4.js +1 -0
  390. package/.next/standalone/.next/static/chunks/80904-973284d1fe916c38.js +1 -0
  391. package/.next/standalone/.next/static/chunks/85573-fb4d2cbd67612d47.js +1 -0
  392. package/.next/standalone/.next/static/chunks/88561-0b14e1564419f215.js +1 -0
  393. package/.next/standalone/.next/static/chunks/89035-faf398b7bbc7d2ed.js +1 -0
  394. package/.next/standalone/.next/static/chunks/89644-2fee0373b890e8e3.js +1 -0
  395. package/.next/standalone/.next/static/chunks/{93346-5489d90bc2d57190.js → 93346-b3e1ebe948fc623f.js} +1 -1
  396. package/.next/standalone/.next/static/chunks/{97784-7b90a17294840e32.js → 97784-42081b75f8cc6da8.js} +1 -1
  397. package/.next/standalone/.next/static/chunks/97868-55f18a05fe483d85.js +1 -0
  398. package/.next/standalone/.next/static/chunks/99373.cc6319fa4cf36081.js +1 -0
  399. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-b3a497ba5eb08036.js +1 -0
  400. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-2944c6c9bc48a7d6.js +1 -0
  401. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-f1b0daea9f947caf.js +1 -0
  402. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-d786f0c18a9c4f06.js +1 -0
  403. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-c68f1eda3779b448.js +1 -0
  404. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-e0935445535c28cb.js +1 -0
  405. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-f824632ff61a9fa7.js +1 -0
  406. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-dbcb6e50fc4816c6.js +1 -0
  407. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-1295bc505e727383.js +1 -0
  408. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-ceeec49af0396432.js +1 -0
  409. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-1286afe43c086d6a.js +1 -0
  410. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-583e58d4d689d38b.js → page-fec019d974ef8d4e.js} +1 -1
  411. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-0fb1d51016f6bd56.js +1 -0
  412. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-f1b0daea9f947caf.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-f1b0daea9f947caf.js +1 -0
  414. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-f1b0daea9f947caf.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-f1b0daea9f947caf.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-f1b0daea9f947caf.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-f1b0daea9f947caf.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-f1b0daea9f947caf.js +1 -0
  419. package/.next/standalone/.next/static/chunks/app/api/agents/route-f1b0daea9f947caf.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-f1b0daea9f947caf.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-f1b0daea9f947caf.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-f1b0daea9f947caf.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-f1b0daea9f947caf.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-f1b0daea9f947caf.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-f1b0daea9f947caf.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-f1b0daea9f947caf.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-f1b0daea9f947caf.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-f1b0daea9f947caf.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-f1b0daea9f947caf.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-f1b0daea9f947caf.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-f1b0daea9f947caf.js +1 -0
  432. package/.next/standalone/.next/static/chunks/app/api/comments/route-f1b0daea9f947caf.js +1 -0
  433. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-f1b0daea9f947caf.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-f1b0daea9f947caf.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-f1b0daea9f947caf.js +1 -0
  436. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-f1b0daea9f947caf.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-f1b0daea9f947caf.js +1 -0
  438. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-f1b0daea9f947caf.js +1 -0
  439. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-f1b0daea9f947caf.js +1 -0
  440. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-f1b0daea9f947caf.js +1 -0
  441. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-f1b0daea9f947caf.js +1 -0
  442. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-f1b0daea9f947caf.js +1 -0
  443. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-f1b0daea9f947caf.js +1 -0
  444. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-f1b0daea9f947caf.js +1 -0
  445. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-f1b0daea9f947caf.js +1 -0
  446. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-f1b0daea9f947caf.js +1 -0
  447. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-f1b0daea9f947caf.js +1 -0
  448. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-f1b0daea9f947caf.js +1 -0
  449. package/.next/standalone/.next/static/chunks/app/api/events/route-f1b0daea9f947caf.js +1 -0
  450. package/.next/standalone/.next/static/chunks/app/api/health/route-f1b0daea9f947caf.js +1 -0
  451. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-f1b0daea9f947caf.js +1 -0
  452. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-f1b0daea9f947caf.js +1 -0
  453. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-f1b0daea9f947caf.js +1 -0
  454. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-f1b0daea9f947caf.js +1 -0
  455. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-f1b0daea9f947caf.js +1 -0
  456. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-f1b0daea9f947caf.js +1 -0
  457. package/.next/standalone/.next/static/chunks/app/api/keepalive/route-f1b0daea9f947caf.js +1 -0
  458. package/.next/standalone/.next/static/chunks/app/api/mcp/route-f1b0daea9f947caf.js +1 -0
  459. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-f1b0daea9f947caf.js +1 -0
  460. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-f1b0daea9f947caf.js +1 -0
  461. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-f1b0daea9f947caf.js +1 -0
  462. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-f1b0daea9f947caf.js +1 -0
  463. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-f1b0daea9f947caf.js +1 -0
  464. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-f1b0daea9f947caf.js +1 -0
  465. package/.next/standalone/.next/static/chunks/app/api/notifications/route-f1b0daea9f947caf.js +1 -0
  466. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-f1b0daea9f947caf.js +1 -0
  467. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-f1b0daea9f947caf.js +1 -0
  468. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-f1b0daea9f947caf.js +1 -0
  469. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-f1b0daea9f947caf.js +1 -0
  470. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-f1b0daea9f947caf.js +1 -0
  471. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-f1b0daea9f947caf.js +1 -0
  472. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-f1b0daea9f947caf.js +1 -0
  473. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-f1b0daea9f947caf.js +1 -0
  474. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-f1b0daea9f947caf.js +1 -0
  475. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-f1b0daea9f947caf.js +1 -0
  476. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-f1b0daea9f947caf.js +1 -0
  477. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-f1b0daea9f947caf.js +1 -0
  478. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-f1b0daea9f947caf.js +1 -0
  479. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-f1b0daea9f947caf.js +1 -0
  480. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-f1b0daea9f947caf.js +1 -0
  481. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-f1b0daea9f947caf.js +1 -0
  482. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-f1b0daea9f947caf.js +1 -0
  483. package/.next/standalone/.next/static/chunks/app/api/projects/route-f1b0daea9f947caf.js +1 -0
  484. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-f1b0daea9f947caf.js +1 -0
  485. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-f1b0daea9f947caf.js +1 -0
  486. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-f1b0daea9f947caf.js +1 -0
  487. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-f1b0daea9f947caf.js +1 -0
  488. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-f1b0daea9f947caf.js +1 -0
  489. package/.next/standalone/.next/static/chunks/app/api/search/route-f1b0daea9f947caf.js +1 -0
  490. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-f1b0daea9f947caf.js +1 -0
  491. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-f1b0daea9f947caf.js +1 -0
  492. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-f1b0daea9f947caf.js +1 -0
  493. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-f1b0daea9f947caf.js +1 -0
  494. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-f1b0daea9f947caf.js +1 -0
  495. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-f1b0daea9f947caf.js +1 -0
  496. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-f1b0daea9f947caf.js +1 -0
  497. package/.next/standalone/.next/static/chunks/app/layout-e3a49e06950a057f.js +1 -0
  498. package/.next/standalone/.next/static/chunks/app/login/callback/{page-0edd93f50cb4f6ea.js → page-6cad93f5c610b047.js} +1 -1
  499. package/.next/standalone/.next/static/chunks/app/login/page-d2513f477211dd6f.js +1 -0
  500. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/{page-e0444ad8b50121f5.js → page-597e0f3377f18d29.js} +1 -1
  501. package/.next/standalone/.next/static/chunks/app/login/silent-refresh/{page-a9960ea858db6752.js → page-a26d1af61578c96e.js} +1 -1
  502. package/.next/standalone/.next/static/chunks/app/onboarding/page-2936274fb252329e.js +1 -0
  503. package/.next/standalone/.next/static/chunks/app/page-075afd218994d377.js +1 -0
  504. package/.next/standalone/.next/static/chunks/{webpack-039590181c63871d.js → webpack-ed3555ea61243391.js} +1 -1
  505. package/.next/standalone/.next/static/css/6e8fd46b062fd4fc.css +1 -0
  506. package/.next/standalone/package.json +1 -1
  507. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +4 -0
  508. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +4 -0
  509. package/README.md +49 -15
  510. package/README.zh.md +49 -15
  511. package/chorus.mjs +30 -14
  512. package/cli/client-args.mjs +18 -2
  513. package/cli/codex-session-map.mjs +117 -0
  514. package/cli/codex-spawner.mjs +312 -0
  515. package/cli/daemon-agent.mjs +32 -6
  516. package/cli/daemon-banner.mjs +54 -6
  517. package/cli/daemon-config.mjs +118 -0
  518. package/cli/daemon.mjs +348 -167
  519. package/cli/event-router.mjs +273 -12
  520. package/cli/login.mjs +77 -34
  521. package/cli/server-signal-handlers.mjs +41 -0
  522. package/cli/spawner-select.mjs +30 -0
  523. package/cli/sse-listener.mjs +56 -6
  524. package/cli/upload-hooks.mjs +73 -8
  525. package/cli/waker.mjs +36 -8
  526. package/package.json +1 -1
  527. package/prisma/migrations/20260622115159_add_daemon_connection_cwd/migration.sql +9 -0
  528. package/prisma/migrations/20260623020208_task_pinned_target_instance/migration.sql +3 -0
  529. package/prisma/migrations/20260624142248_add_agent_instance/migration.sql +31 -0
  530. package/prisma/migrations/20260624165025_drop_task_target_host_cwd/migration.sql +10 -0
  531. package/prisma/schema.prisma +69 -3
  532. package/.next/standalone/.next/server/chunks/1064.js +0 -1
  533. package/.next/standalone/.next/server/chunks/2213.js +0 -1
  534. package/.next/standalone/.next/server/chunks/3371.js +0 -1
  535. package/.next/standalone/.next/server/chunks/369.js +0 -1
  536. package/.next/standalone/.next/server/chunks/4958.js +0 -1
  537. package/.next/standalone/.next/server/chunks/5039.js +0 -1
  538. package/.next/standalone/.next/server/chunks/5631.js +0 -1
  539. package/.next/standalone/.next/server/chunks/6461.js +0 -1
  540. package/.next/standalone/.next/server/chunks/6712.js +0 -1
  541. package/.next/standalone/.next/server/chunks/7867.js +0 -1
  542. package/.next/standalone/.next/server/chunks/7897.js +0 -1
  543. package/.next/standalone/.next/server/chunks/8012.js +0 -1
  544. package/.next/standalone/.next/server/chunks/8245.js +0 -31
  545. package/.next/standalone/.next/server/chunks/9629.js +0 -1
  546. package/.next/standalone/.next/server/chunks/9725.js +0 -1
  547. package/.next/standalone/.next/static/GQvpOux3M9CaxkMjL9GAI/_buildManifest.js +0 -1
  548. package/.next/standalone/.next/static/chunks/1217-323cc20b73ebfde9.js +0 -1
  549. package/.next/standalone/.next/static/chunks/16984-8ab5580b8e63a200.js +0 -1
  550. package/.next/standalone/.next/static/chunks/1879-7a8b283283218df2.js +0 -1
  551. package/.next/standalone/.next/static/chunks/19276-50b367d7b93d5f34.js +0 -1
  552. package/.next/standalone/.next/static/chunks/23466-e1176a6d814f4897.js +0 -1
  553. package/.next/standalone/.next/static/chunks/38040-a8687f86dd8e9d67.js +0 -1
  554. package/.next/standalone/.next/static/chunks/4860.8bdb37c964f92e48.js +0 -1
  555. package/.next/standalone/.next/static/chunks/59296-783831c43aa0162e.js +0 -1
  556. package/.next/standalone/.next/static/chunks/60648-36ccbee4ce232d52.js +0 -1
  557. package/.next/standalone/.next/static/chunks/60694-68232120903209df.js +0 -1
  558. package/.next/standalone/.next/static/chunks/64648-ece4e2a59672cf63.js +0 -1
  559. package/.next/standalone/.next/static/chunks/66205-8d7eae6a0f0a032d.js +0 -1
  560. package/.next/standalone/.next/static/chunks/66969-12f0b22c51f5a410.js +0 -1
  561. package/.next/standalone/.next/static/chunks/70536-b8bf71098ae11f07.js +0 -1
  562. package/.next/standalone/.next/static/chunks/76803-7ac4024b2ae89843.js +0 -1
  563. package/.next/standalone/.next/static/chunks/78389-b32edc6bd5c570a9.js +0 -1
  564. package/.next/standalone/.next/static/chunks/78584-eb2fa8cf2f266329.js +0 -1
  565. package/.next/standalone/.next/static/chunks/78917-150ed14a99844aab.js +0 -1
  566. package/.next/standalone/.next/static/chunks/84541-1f4c2a40f7722667.js +0 -10
  567. package/.next/standalone/.next/static/chunks/8574-b9739eb8d054c793.js +0 -1
  568. package/.next/standalone/.next/static/chunks/99373.12370329b9ab6beb.js +0 -1
  569. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-0a28456fea4ce95a.js +0 -1
  570. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-a79969c5c9aadacd.js +0 -1
  571. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-4bc556c2fc8f3d24.js +0 -1
  572. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-a28f0eaa6f4ac94a.js +0 -1
  573. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-ef82b871895245ea.js +0 -1
  574. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-2c9bcbd11ddb8661.js +0 -1
  575. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-630b168598513ce8.js +0 -1
  576. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-99639479cc98965f.js +0 -1
  577. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-335f2450e44a0fba.js +0 -1
  578. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-4a191d69b2b6e880.js +0 -1
  579. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-0faebb478be4c85d.js +0 -1
  580. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2e8fcb72687100df.js +0 -1
  581. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  582. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-4bc556c2fc8f3d24.js +0 -1
  583. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-4bc556c2fc8f3d24.js +0 -1
  584. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-4bc556c2fc8f3d24.js +0 -1
  585. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-4bc556c2fc8f3d24.js +0 -1
  586. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  587. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-4bc556c2fc8f3d24.js +0 -1
  588. package/.next/standalone/.next/static/chunks/app/api/agents/route-4bc556c2fc8f3d24.js +0 -1
  589. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  590. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-4bc556c2fc8f3d24.js +0 -1
  591. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-4bc556c2fc8f3d24.js +0 -1
  592. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-4bc556c2fc8f3d24.js +0 -1
  593. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-4bc556c2fc8f3d24.js +0 -1
  594. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-4bc556c2fc8f3d24.js +0 -1
  595. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-4bc556c2fc8f3d24.js +0 -1
  596. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-4bc556c2fc8f3d24.js +0 -1
  597. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-4bc556c2fc8f3d24.js +0 -1
  598. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-4bc556c2fc8f3d24.js +0 -1
  599. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-4bc556c2fc8f3d24.js +0 -1
  600. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-4bc556c2fc8f3d24.js +0 -1
  601. package/.next/standalone/.next/static/chunks/app/api/comments/route-4bc556c2fc8f3d24.js +0 -1
  602. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-4bc556c2fc8f3d24.js +0 -1
  603. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-4bc556c2fc8f3d24.js +0 -1
  604. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-4bc556c2fc8f3d24.js +0 -1
  605. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-4bc556c2fc8f3d24.js +0 -1
  606. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-4bc556c2fc8f3d24.js +0 -1
  607. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-4bc556c2fc8f3d24.js +0 -1
  608. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-4bc556c2fc8f3d24.js +0 -1
  609. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-4bc556c2fc8f3d24.js +0 -1
  610. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-4bc556c2fc8f3d24.js +0 -1
  611. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-4bc556c2fc8f3d24.js +0 -1
  612. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-4bc556c2fc8f3d24.js +0 -1
  613. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-4bc556c2fc8f3d24.js +0 -1
  614. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  615. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-4bc556c2fc8f3d24.js +0 -1
  616. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-4bc556c2fc8f3d24.js +0 -1
  617. package/.next/standalone/.next/static/chunks/app/api/events/route-4bc556c2fc8f3d24.js +0 -1
  618. package/.next/standalone/.next/static/chunks/app/api/health/route-4bc556c2fc8f3d24.js +0 -1
  619. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-4bc556c2fc8f3d24.js +0 -1
  620. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-4bc556c2fc8f3d24.js +0 -1
  621. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-4bc556c2fc8f3d24.js +0 -1
  622. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-4bc556c2fc8f3d24.js +0 -1
  623. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-4bc556c2fc8f3d24.js +0 -1
  624. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  625. package/.next/standalone/.next/static/chunks/app/api/mcp/route-4bc556c2fc8f3d24.js +0 -1
  626. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-4bc556c2fc8f3d24.js +0 -1
  627. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-4bc556c2fc8f3d24.js +0 -1
  628. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-4bc556c2fc8f3d24.js +0 -1
  629. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-4bc556c2fc8f3d24.js +0 -1
  630. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-4bc556c2fc8f3d24.js +0 -1
  631. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-4bc556c2fc8f3d24.js +0 -1
  632. package/.next/standalone/.next/static/chunks/app/api/notifications/route-4bc556c2fc8f3d24.js +0 -1
  633. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-4bc556c2fc8f3d24.js +0 -1
  634. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-4bc556c2fc8f3d24.js +0 -1
  635. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  636. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-4bc556c2fc8f3d24.js +0 -1
  637. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-4bc556c2fc8f3d24.js +0 -1
  638. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-4bc556c2fc8f3d24.js +0 -1
  639. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-4bc556c2fc8f3d24.js +0 -1
  640. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-4bc556c2fc8f3d24.js +0 -1
  641. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-4bc556c2fc8f3d24.js +0 -1
  642. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-4bc556c2fc8f3d24.js +0 -1
  643. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-4bc556c2fc8f3d24.js +0 -1
  644. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-4bc556c2fc8f3d24.js +0 -1
  645. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-4bc556c2fc8f3d24.js +0 -1
  646. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  647. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-4bc556c2fc8f3d24.js +0 -1
  648. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-4bc556c2fc8f3d24.js +0 -1
  649. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-4bc556c2fc8f3d24.js +0 -1
  650. package/.next/standalone/.next/static/chunks/app/api/projects/route-4bc556c2fc8f3d24.js +0 -1
  651. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-4bc556c2fc8f3d24.js +0 -1
  652. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-4bc556c2fc8f3d24.js +0 -1
  653. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-4bc556c2fc8f3d24.js +0 -1
  654. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-4bc556c2fc8f3d24.js +0 -1
  655. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  656. package/.next/standalone/.next/static/chunks/app/api/search/route-4bc556c2fc8f3d24.js +0 -1
  657. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  658. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-4bc556c2fc8f3d24.js +0 -1
  659. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-4bc556c2fc8f3d24.js +0 -1
  660. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-4bc556c2fc8f3d24.js +0 -1
  661. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-4bc556c2fc8f3d24.js +0 -1
  662. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  663. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-4bc556c2fc8f3d24.js +0 -1
  664. package/.next/standalone/.next/static/chunks/app/layout-9963339572e2e64e.js +0 -1
  665. package/.next/standalone/.next/static/chunks/app/login/page-c64b8d40a0781b4c.js +0 -1
  666. package/.next/standalone/.next/static/chunks/app/onboarding/page-e9a69a0c537c704f.js +0 -1
  667. package/.next/standalone/.next/static/chunks/app/page-8b4baa950c78ffe7.js +0 -1
  668. package/.next/standalone/.next/static/css/1d9aaac01758b297.css +0 -1
  669. /package/.next/standalone/.next/static/{GQvpOux3M9CaxkMjL9GAI → GmBblfxcDziUENBiEap4B}/_ssgManifest.js +0 -0
package/cli/daemon.mjs CHANGED
@@ -12,14 +12,14 @@
12
12
  // NOT done here — the no-op UploadHooks reserve those seams for the derived
13
13
  // observability idea.
14
14
 
15
- import { resolveCredentials } from "./credentials.mjs";
15
+ import { resolveCredentials, loginFilePath } from "./credentials.mjs";
16
16
  import { prompt, writeLoginFile } from "./login.mjs";
17
17
  import {
18
18
  resolvePermissionMode,
19
19
  yoloWarningLine,
20
20
  } from "./daemon-permission-mode.mjs";
21
- import { resolveAgentType } from "./daemon-agent.mjs";
22
- import { formatBanner } from "./daemon-banner.mjs";
21
+ import { resolveAgentType, backendClientType } from "./daemon-agent.mjs";
22
+ import { formatBanner, agentNotFoundWarningLine } from "./daemon-banner.mjs";
23
23
  import { ChorusClient, validateAndFetchIdentity } from "./chorus-client.mjs";
24
24
  import { SseListener } from "./sse-listener.mjs";
25
25
  import { createBackfill } from "./backfill.mjs";
@@ -27,7 +27,9 @@ import { EventRouter } from "./event-router.mjs";
27
27
  import { WakeQueue } from "./wake-queue.mjs";
28
28
  import { Waker } from "./waker.mjs";
29
29
  import { LineageResolver } from "./lineage.mjs";
30
- import { ClaudeSpawner, resolveClaudePath } from "./claude-spawner.mjs";
30
+ import { resolveClaudePath } from "./claude-spawner.mjs";
31
+ import { resolveCodexPath } from "./codex-spawner.mjs";
32
+ import { selectSpawner } from "./spawner-select.mjs";
31
33
  import {
32
34
  createExecutionUploadHooks,
33
35
  createTranscriptUploadHooks,
@@ -37,14 +39,14 @@ import { WAKE_ACTIONS } from "./prompts.mjs";
37
39
  import { createInterruptReporter } from "./interrupt-reporter.mjs";
38
40
  import { createTurnReporter } from "./turn-reporter.mjs";
39
41
  import { createControlHandler } from "./control-handler.mjs";
40
- import { resolveSigintTimeoutMs } from "./daemon-config.mjs";
42
+ import { resolveSigintTimeoutMs, resolveDaemonCwds } from "./daemon-config.mjs";
41
43
  import {
42
44
  startBackground,
43
45
  stopDaemon,
44
46
  isRunning,
45
47
  readLog,
46
48
  } from "./daemon-lifecycle.mjs";
47
- import { readFileSync } from "node:fs";
49
+ import { readFileSync, existsSync } from "node:fs";
48
50
  import { dirname, join } from "node:path";
49
51
  import { fileURLToPath } from "node:url";
50
52
 
@@ -81,7 +83,8 @@ function defaultLogger() {
81
83
  * fetchImpl?: typeof fetch,
82
84
  * sseListener?: any,
83
85
  * spawner?: any,
84
- * cwd?: string,
86
+ * cwd?: string, Single served path (back-compat); maps to a one-element cwd set.
87
+ * cwds?: Array<string|undefined>, The SET of paths this daemon serves (T3 多路径). Each entry registers one independent connection bound to that cwd; `undefined` ⇒ process cwd. Takes precedence over `cwd`.
85
88
  * hooks?: any,
86
89
  * makeSseListener?: (opts: any) => any,
87
90
  * maxConcurrency?: number,
@@ -94,45 +97,19 @@ function defaultLogger() {
94
97
  export function buildDaemon(creds, deps = {}) {
95
98
  const logger = deps.logger ?? defaultLogger();
96
99
  const permissionMode = deps.permissionMode ?? "chorus";
100
+ // The resolved agent backend selects which spawner the daemon injects
101
+ // (add-daemon-codex-backend). Defaults to claude-code, matching the prior
102
+ // hard-wired ClaudeSpawner. The spawn path below is backend-agnostic — it only
103
+ // ever calls the shared wake(...) contract.
104
+ const agentType = deps.agentType ?? "claude-code";
97
105
  // Per-wake verbose logging (daemon-startup-output), threaded into the Waker.
98
- // agentType is currently display-only (banner/logs) — the spawn path is
99
- // claude-code regardless (daemon-agent-selection reserves the slot only).
100
106
  const verbose = deps.verbose ?? false;
101
107
  // Escalation window for the interrupt killer (子3). Pre-resolved by runDaemon via
102
108
  // the layered resolver; falls back to the resolver's default here when not given,
103
109
  // so a daemon built directly (integration tests) still gets a sane value.
104
110
  const sigintTimeoutMs = deps.sigintTimeoutMs ?? resolveSigintTimeoutMs();
105
- // Interrupt reporter (子3): REST POST with the daemon's Bearer key (zero new deps),
106
- // injectable for tests. The waker calls it on an interrupted/crashed exit.
107
- // connectionState holds the connection uuid learned from the SSE handshake;
108
- // declared here so the reporter (which needs it to address the execution row)
109
- // can read it lazily. It is assigned by onConnectionId below.
110
- /** @type {{ connectionUuid: string|null }} */
111
- const connectionState = { connectionUuid: null };
112
- const reportInterrupt =
113
- deps.reportInterrupt ??
114
- createInterruptReporter({
115
- url: creds.url,
116
- apiKey: creds.apiKey,
117
- getConnectionUuid: () => connectionState.connectionUuid,
118
- logger,
119
- fetchImpl: deps.fetchImpl,
120
- });
121
- // Turn-lifecycle reporter (子1 — daemon-session-conversation): REST POST with the
122
- // daemon's Bearer key (zero new deps), injectable for tests. The waker calls it on a
123
- // wake's spawn (→ running) and exit (→ ended) to advance the server-side
124
- // DaemonSessionTurn the notification chokepoint created. Reads the connectionUuid
125
- // lazily from the same box the SSE handshake fills.
126
- const advanceTurn =
127
- deps.advanceTurn ??
128
- createTurnReporter({
129
- url: creds.url,
130
- apiKey: creds.apiKey,
131
- getConnectionUuid: () => connectionState.connectionUuid,
132
- logger,
133
- fetchImpl: deps.fetchImpl,
134
- });
135
-
111
+ // ===== Shared deps (one set per daemon process) =====
112
+ // These are process-wide independent of how many paths (cwds) the daemon serves.
136
113
  const mcpClient =
137
114
  deps.mcpClient ?? new ChorusClient({ url: creds.url, apiKey: creds.apiKey, logger });
138
115
  // Lineage resolution is a plain REST call (Bearer agent key) per notification —
@@ -140,151 +117,292 @@ export function buildDaemon(creds, deps = {}) {
140
117
  const lineage =
141
118
  deps.lineage ??
142
119
  new LineageResolver({ url: creds.url, apiKey: creds.apiKey, logger, fetchImpl: deps.fetchImpl });
143
- const spawner = deps.spawner ?? new ClaudeSpawner({ logger, permissionMode });
120
+ // Inject the spawner for the resolved backend. claude-code → ClaudeSpawner
121
+ // (construction byte-identical to before); codex → CodexSpawner. `creds` are
122
+ // passed through so the Codex backend can export the daemon key into the woken
123
+ // process env (the Claude backend ignores creds — it gets its key via --mcp-config).
124
+ const spawner = deps.spawner ?? selectSpawner(agentType, { logger, permissionMode, creds });
125
+ // The WakeQueue serializes per DIRECT idea (keyFor's key). It is shared across all
126
+ // path-connections: serialization-per-idea still holds, and maxConcurrency caps the
127
+ // whole process's in-flight wakes rather than per-cwd — the right global budget.
144
128
  const queue = new WakeQueue({ maxConcurrency: deps.maxConcurrency ?? 4, logger });
145
129
 
146
- // `connectionState` (declared above, next to the reporter) is the mutable box the
147
- // SSE handshake fills with this daemon's `connection_registered` uuid; the upload
148
- // hooks, the reporter, and the control handler all read it lazily so construction
149
- // order doesn't matter. `waker` is assigned just below; the snapshot closure reads
150
- // it lazily so the hooks can predate it.
151
- /** @type {Waker|undefined} */
152
- let waker;
153
-
154
- // Execution-state upload hooks: POST the WakeQueue/waker-derived snapshot to
155
- // the server on each lifecycle transition. `getSnapshot` reads the waker's
156
- // per-task registry (which reuses the already-resolved root-idea lineage).
157
- // Fire-and-forget; failures logged + non-fatal (see upload-hooks.mjs). The
158
- // hooks share the daemon's existing creds + zero new deps (global fetch).
159
- // Transcript upload hooks (子1 — daemon-session-conversation): the waker's
160
- // stream-json consumer (onMessage) and pre-spawn (onSessionStart) feed these,
161
- // which keep only user/assistant text and batch-POST it to /api/daemon/transcript
162
- // for the current turn (resolved server-side by the session business key the waker
163
- // already anchors on). Same zero-dep, fire-and-forget, warn-not-throw contract as
164
- // the execution hooks; no connectionUuid needed (the agent key + sessionId suffice).
165
- // The two hook sets are MERGED into the single object the waker takes:
166
- // onSessionStart/onTranscriptMessage fan out to the transcript hooks,
167
- // onExecutionChange to the execution hooks.
168
- const hooks =
169
- deps.hooks ??
170
- mergeUploadHooks(
171
- createExecutionUploadHooks({
130
+ // ===== Multi-path: the SET of cwds this daemon serves (T3 FR-5) =====
131
+ // Each declared path becomes one INDEPENDENT connection (own SSE self-report + own
132
+ // Waker bound to that cwd + own router/backfill/control). The daemon process's OWN
133
+ // cwd never changes (NFR-3). `undefined` "serve the process default cwd" (single-
134
+ // path / HARD-1 default). `deps.cwds` (a list) takes precedence; `deps.cwd` (a single
135
+ // value, still injected by integration tests) maps to a one-element set; otherwise a
136
+ // single `[undefined]` connection at the process cwd — exactly today's behavior. This
137
+ // is JUST a list of paths; it carries NO path↔project binding (DEC-5: cwd ⟂ project).
138
+ const cwdSet =
139
+ Array.isArray(deps.cwds) && deps.cwds.length > 0
140
+ ? deps.cwds
141
+ : [deps.cwd];
142
+
143
+ // ===== All-conflict exit latch (add-daemon-connection-conflict-skip, Q3) =====
144
+ // Each declared connection resolves to exactly one terminal outcome: REGISTERED
145
+ // (saw connection_registered onConnectionId) or CONFLICTED (saw
146
+ // connection_conflict onConflict). When EVERY declared connection has resolved
147
+ // AND none registered (≥1 conflicted, 0 survived), the daemon has nothing to serve,
148
+ // so we settle `allConflict` runDaemon races this against waitForever and returns
149
+ // a non-zero exit. The latch is evaluated only after all connections resolve (R5):
150
+ // a path still mid-handshake leaves `resolved < total`, so a partial conflict never
151
+ // triggers the exit. A connection that registers (even after some conflicted) flips
152
+ // `anyRegistered`, so the exit never fires while at least one path serves.
153
+ const totalConnections = cwdSet.length;
154
+ let resolvedConnections = 0;
155
+ let anyRegistered = false;
156
+ let settleAllConflict; // resolver, wired into the promise below
157
+ // A promise that settles ONLY in the all-paths-conflicted case. It never rejects and
158
+ // never settles otherwise (a serving daemon simply keeps waiting on waitForever).
159
+ const allConflict = new Promise((resolve) => {
160
+ settleAllConflict = resolve;
161
+ });
162
+ // Record one connection's terminal outcome and, once all have resolved, decide whether
163
+ // the whole daemon should exit. Idempotent per connection BY CONSTRUCTION: the guard
164
+ // lives here (flips the connection's own `outcome.resolved`) so a reconnect's repeated
165
+ // connection_registered — or any future caller — can never double-count, no matter the
166
+ // call site. The first terminal signal for a connection wins; later ones are no-ops.
167
+ function recordConnectionOutcome(outcome, registered) {
168
+ if (outcome.resolved) return;
169
+ outcome.resolved = true;
170
+ resolvedConnections += 1;
171
+ if (registered) anyRegistered = true;
172
+ if (resolvedConnections === totalConnections && !anyRegistered) {
173
+ settleAllConflict();
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Build ONE independent path-connection bound to `cwd` (one SSE stream → one
179
+ * DaemonConnection row, keyed by that cwd server-side). All per-connection state —
180
+ * its connectionUuid box, reporters, hooks, Waker(cwd), router, backfill, control
181
+ * handler, and SseListener(cwd) — lives in this closure so two connections never
182
+ * share a connectionUuid or a dedup set. `index` selects the per-connection injected
183
+ * test dep (sseListener/makeSseListener) when an array was supplied (a single value
184
+ * is reused for connection 0, mirroring the historical single-connection injection).
185
+ * @param {string|undefined} cwd
186
+ * @param {number} index
187
+ */
188
+ function buildConnection(cwd, index) {
189
+ // connectionState holds the connectionUuid learned from THIS stream's SSE handshake;
190
+ // the reporters, hooks, and control handler read it lazily so construction order
191
+ // doesn't matter. Per-connection so each path's wakes report against the right row.
192
+ /** @type {{ connectionUuid: string|null }} */
193
+ const connectionState = { connectionUuid: null };
194
+
195
+ // Per-connection terminal-outcome bookkeeping (add-daemon-connection-conflict-skip).
196
+ // `resolved` guards recordConnectionOutcome against double-counting a reconnect's
197
+ // repeated connection_registered. `skipped` marks a cwd surrendered to a live
198
+ // different-process daemon — purely informational (the listener is torn down, so it
199
+ // simply never reconnects), kept on the returned object for inspection/tests.
200
+ const outcome = { resolved: false, skipped: false };
201
+
202
+ // Interrupt reporter (子3): REST POST with the daemon's Bearer key. Injectable for
203
+ // tests (shared across connections when injected — tests use a single connection).
204
+ const reportInterrupt =
205
+ deps.reportInterrupt ??
206
+ createInterruptReporter({
172
207
  url: creds.url,
173
208
  apiKey: creds.apiKey,
174
209
  getConnectionUuid: () => connectionState.connectionUuid,
175
- getSnapshot: () => waker?.buildExecutionSnapshot() ?? [],
176
210
  logger,
177
211
  fetchImpl: deps.fetchImpl,
178
- }),
179
- createTranscriptUploadHooks({
212
+ });
213
+ // Turn-lifecycle reporter (子1): advances the server-side DaemonSessionTurn on
214
+ // spawn (→ running) and exit (→ ended), reading the connectionUuid lazily.
215
+ const advanceTurn =
216
+ deps.advanceTurn ??
217
+ createTurnReporter({
180
218
  url: creds.url,
181
219
  apiKey: creds.apiKey,
220
+ getConnectionUuid: () => connectionState.connectionUuid,
182
221
  logger,
183
222
  fetchImpl: deps.fetchImpl,
184
- }),
185
- { logger }
186
- );
187
-
188
- // One dedup set shared by the router (live SSE path) and the reconnect
189
- // backfill, so a notification handled live is never re-woken on reconnect.
190
- const seen = new Set();
191
- // cwd: the daemon spawns all wakes in one working directory; the waker uses it
192
- // BOTH to probe the transcript (new-vs-resume) and to spawn, so they never diverge.
193
- waker = new Waker({ creds, lineage, spawner, cwd: deps.cwd ?? process.cwd(), hooks, logger, reportInterrupt, advanceTurn, verbose });
194
- const router = new EventRouter({ mcpClient, waker, queue, wakeActions: WAKE_ACTIONS, seen, logger });
195
-
196
- // Reverse control channel (子3): the control handler verifies a control event
197
- // against this daemon's own connectionUuid + the running child for the target
198
- // entity (q1=a double-check), then interrupts the subprocess. It reads the
199
- // connectionUuid lazily from the same mutable box the SSE handshake fills, so it
200
- // works regardless of construction order.
201
- // Resume re-dispatch (子3): a `command:"resume"` control event re-runs the wake
202
- // for the target entity. It reuses the SAME router/queue path as a normal wake,
203
- // so serialization-per-direct-idea holds and the spawner's on-disk transcript
204
- // probe naturally selects `claude --resume` (the session already exists). The
205
- // synthetic event mirrors the `new_notification` shape the router expects; we
206
- // fetch the real notification detail lazily inside the router via MCP, so a
207
- // minimal `{ action: "resource_resumed", entityType, entityUuid }` is enough to
208
- // re-key and re-spawn. Because resume rides the control channel (not a persisted
209
- // notification), there is no notificationUuid — the router tolerates a synthetic
210
- // resume dispatch via the dedicated entrypoint below.
211
- const redispatchResume = (entityType, entityUuid) => {
212
- router.dispatchResume?.({ entityType, entityUuid });
213
- };
214
- // Origin-only live delivery (子2 daemon-instruction-injection): a `deliver_turn`
215
- // control event means the server pinged THIS connection that a SPECIFIC new pending
216
- // `human_instruction` turn (`turnUuid`) awaits. The control handler forwards that uuid
217
- // to the connection-scoped pending-turns sweep (exposed as `backfill.pendingTurnsOnly`)
218
- // so ONLY that one turn is dispatched never a connection-wide sweep that would also
219
- // run every other still-pending turn. It shares the same `seen` set as reconnect
220
- // backfill (a turn runs at most once). Read lazily so it tolerates the construction
221
- // order (backfill is assigned just after).
222
- const deliverTurn = (turnUuid) => backfill?.pendingTurnsOnly?.(turnUuid);
223
- const onControl = createControlHandler({
224
- waker,
225
- getConnectionUuid: () => connectionState.connectionUuid,
226
- sigintTimeoutMs,
227
- redispatchResume,
228
- deliverTurn,
229
- logger,
230
- });
223
+ });
224
+
225
+ /** @type {Waker|undefined} */
226
+ let waker;
227
+
228
+ // Execution + transcript upload hooks (子1), merged. Bound to THIS connection's
229
+ // connectionState + waker so snapshots attribute to the right connection row.
230
+ const hooks =
231
+ deps.hooks ??
232
+ mergeUploadHooks(
233
+ createExecutionUploadHooks({
234
+ url: creds.url,
235
+ apiKey: creds.apiKey,
236
+ getConnectionUuid: () => connectionState.connectionUuid,
237
+ getSnapshot: () => waker?.buildExecutionSnapshot() ?? [],
238
+ logger,
239
+ fetchImpl: deps.fetchImpl,
240
+ }),
241
+ createTranscriptUploadHooks({
242
+ url: creds.url,
243
+ apiKey: creds.apiKey,
244
+ logger,
245
+ fetchImpl: deps.fetchImpl,
246
+ }),
247
+ { logger }
248
+ );
249
+
250
+ // One dedup set per connection, shared by its router (live SSE) and its reconnect
251
+ // backfill, so a notification handled live is never re-woken on reconnect.
252
+ const seen = new Set();
253
+ // The Waker is bound to THIS connection's cwd: it uses cwd BOTH to probe the
254
+ // transcript (new-vs-resume) and to spawn, so they never diverge (Module Contract
255
+ // 1 — resolveCwd is the single source). `cwd` is `undefined` for the single-path /
256
+ // old-daemon default, which the Waker degrades to process.cwd() (HARD-1).
257
+ waker = new Waker({ creds, lineage, spawner, cwd, hooks, logger, reportInterrupt, advanceTurn, verbose });
258
+ // The router reads THIS connection's own uuid lazily (same source the control handler
259
+ // uses) to suppress a DIRECTED (pinned) wake stamped for a different connection
260
+ // (fix-pinned-wake-directed-delivery, T2). Null until the SSE handshake assigns it — a
261
+ // targeted wake arriving in that window is treated as "not mine" → suppressed (delivery
262
+ // covered by the deliver_turn ping to the actual target + the reconnect pending backfill).
263
+ const router = new EventRouter({
264
+ mcpClient,
265
+ waker,
266
+ queue,
267
+ wakeActions: WAKE_ACTIONS,
268
+ seen,
269
+ getConnectionUuid: () => connectionState.connectionUuid,
270
+ logger,
271
+ });
231
272
 
232
- // Reconnect backfill re-dispatches notifications missed during a gap, through
233
- // the SAME router/queue (so serialization holds) and the SAME seen set (so
234
- // already-handled notifications are skipped). The router marks seen at
235
- // dispatch; backfill's own pre-check is a cheap early-out.
236
- // `deliverTurn` (defined above) closes over `backfill` but only invokes it lazily,
237
- // so a `const` initialized here is safe despite the earlier lexical reference.
238
- const backfill = createBackfill({
239
- mcpClient,
240
- dispatch: (event) => router.dispatch(event),
241
- seen,
242
- logger,
243
- // 子1 — pending-turn backfill: re-derive unstarted turns from the turn table (NOT
244
- // notifications) for this connection's origin-pinned sessions, so a lost delivery
245
- // ping never loses an instruction. Shares the same router (dispatchPendingTurn) +
246
- // seen set so a turn handled live (or by an earlier backfill) is not re-run. Reads
247
- // the connectionUuid lazily from the SSE-handshake box.
248
- url: creds.url,
249
- apiKey: creds.apiKey,
250
- getConnectionUuid: () => connectionState.connectionUuid,
251
- dispatchPendingTurn: (turn) => router.dispatchPendingTurn?.(turn),
252
- fetchImpl: deps.fetchImpl,
253
- });
273
+ // Reverse control channel (子3) + resume re-dispatch + origin-only deliver_turn
274
+ // all scoped to THIS connection's uuid/router/backfill (see the original wiring
275
+ // comments retained on the shared helpers). The control handler verifies a control
276
+ // event against this connection's own connectionUuid before acting.
277
+ const redispatchResume = (entityType, entityUuid) => {
278
+ router.dispatchResume?.({ entityType, entityUuid });
279
+ };
280
+ const deliverTurn = (turnUuid) => backfill?.pendingTurnsOnly?.(turnUuid);
281
+ const onControl = createControlHandler({
282
+ waker,
283
+ getConnectionUuid: () => connectionState.connectionUuid,
284
+ sigintTimeoutMs,
285
+ redispatchResume,
286
+ deliverTurn,
287
+ logger,
288
+ });
254
289
 
255
- const sseListener =
256
- deps.sseListener ??
257
- (deps.makeSseListener ?? ((o) => new SseListener(o)))({
290
+ // Reconnect + pending-turn backfill, pinned to THIS connection's sessions (the
291
+ // server scopes getPendingTurnsForConnection by originConnectionUuid — i.e. the
292
+ // cwd this connection serves — so a multi-path daemon's backfill never re-runs
293
+ // another cwd's turns).
294
+ const backfill = createBackfill({
295
+ mcpClient,
296
+ dispatch: (event) => router.dispatch(event),
297
+ seen,
298
+ logger,
258
299
  url: creds.url,
259
300
  apiKey: creds.apiKey,
260
- onEvent: (event) => router.dispatch(event),
261
- // Capture the connectionUuid the server reports for this stream so the
262
- // execution-state upload hooks can attribute snapshots to it.
263
- onConnectionId: (connectionUuid) => {
264
- connectionState.connectionUuid = connectionUuid;
265
- logger.info(`[Chorus] registered as connection ${connectionUuid}`);
266
- },
267
- // Reverse control channel: a `type:"control"` event is forked here, NEVER to
268
- // onEvent/router/queue — so it can never spawn a wake (子3).
269
- onControl,
270
- onReconnect: backfill,
271
- logger,
301
+ getConnectionUuid: () => connectionState.connectionUuid,
302
+ dispatchPendingTurn: (turn) => router.dispatchPendingTurn?.(turn),
303
+ fetchImpl: deps.fetchImpl,
272
304
  });
273
305
 
306
+ // Per-connection SSE listener, self-reporting THIS connection's cwd so the server
307
+ // registers it as a distinct (agent, clientType, host, cwd) row. Test injection:
308
+ // - `deps.sseListener` is a CONCRETE instance — there is only one, so it stands in
309
+ // for connection 0 only (a single-path daemon, the historical injection shape).
310
+ // - `deps.makeSseListener` is a FACTORY — it is invoked PER connection (so a
311
+ // multi-path test gets one mock listener per cwd). An array form also works:
312
+ // one factory/instance per connection by index.
313
+ const injectedListener = Array.isArray(deps.sseListener)
314
+ ? deps.sseListener[index]
315
+ : index === 0
316
+ ? deps.sseListener
317
+ : undefined;
318
+ const makeSse =
319
+ (Array.isArray(deps.makeSseListener) ? deps.makeSseListener[index] : deps.makeSseListener) ??
320
+ ((o) => new SseListener(o));
321
+ const sseListener =
322
+ injectedListener ??
323
+ makeSse({
324
+ url: creds.url,
325
+ apiKey: creds.apiKey,
326
+ // Self-report the SELECTED backend so the connection registry + presence UI
327
+ // label a codex daemon as `codex` (not the hardcoded `claude_code`).
328
+ clientType: backendClientType(agentType),
329
+ // The working directory THIS connection serves (T3). `undefined` ⇒ the listener
330
+ // reports its process cwd (single-path / HARD-1). It is just the served path.
331
+ cwd,
332
+ onEvent: (event) => router.dispatch(event),
333
+ onConnectionId: (connectionUuid) => {
334
+ connectionState.connectionUuid = connectionUuid;
335
+ logger.info(
336
+ `[Chorus] registered as connection ${connectionUuid}` +
337
+ (cwd ? ` (cwd=${cwd})` : "")
338
+ );
339
+ // Terminal outcome: this path registered. recordConnectionOutcome is idempotent
340
+ // per connection, so a reconnect's repeated connection_registered counts once.
341
+ recordConnectionOutcome(outcome, true);
342
+ },
343
+ // Connection conflict (add-daemon-connection-conflict-skip, Q3/Q4): the server
344
+ // refused to register THIS cwd because a live different-process daemon already
345
+ // holds the same (agent, host, cwd). Warn prominently, tear the listener down
346
+ // (disconnect clears the reconnect timer + aborts), and mark the path skipped —
347
+ // it is never reconnected/re-probed for the process lifetime. Takeover happens
348
+ // only on the NEXT daemon start/restart. Independent closures mean skipping this
349
+ // path never disturbs another connection's dispatch/control.
350
+ onConflict: (event) => {
351
+ const conflictCwd = (event && event.cwd) ?? cwd ?? process.cwd();
352
+ const conflictHost = (event && event.host) || "this host";
353
+ logger.warn(
354
+ `[Chorus] ⚠ connection conflict: a live daemon already serves ` +
355
+ `(host=${conflictHost}, cwd=${conflictCwd}) — skipping this path. ` +
356
+ `Stop the other daemon (or wait for it to go offline) and restart to take it over.`
357
+ );
358
+ outcome.skipped = true;
359
+ // Tear down THIS path's listener: no reconnect, no re-probe (Q4).
360
+ sseListener.disconnect?.();
361
+ // Terminal outcome: this path conflicted (idempotent — counts once).
362
+ recordConnectionOutcome(outcome, false);
363
+ },
364
+ onControl,
365
+ onReconnect: backfill,
366
+ logger,
367
+ });
368
+
369
+ return { cwd, connectionState, waker, router, backfill, sseListener, hooks, outcome };
370
+ }
371
+
372
+ // Build one connection per declared cwd. The order is the declaration order; the
373
+ // FIRST connection's pieces are aliased onto the returned object for backward
374
+ // compatibility (existing tests/inspection read daemon.waker / .router / .sseListener).
375
+ const connections = cwdSet.map((cwd, i) => buildConnection(cwd, i));
376
+ const primary = connections[0];
377
+
274
378
  return {
275
379
  mcpClient,
276
380
  lineage,
277
381
  spawner,
278
382
  queue,
279
- waker,
280
- router,
281
- sseListener,
383
+ // Back-compat single-connection aliases (the common single-path case). The full
384
+ // set is exposed as `connections` for multi-path inspection/tests.
385
+ waker: primary.waker,
386
+ router: primary.router,
387
+ sseListener: primary.sseListener,
388
+ connections,
389
+ // Settles ONLY when every declared connection resolved and none registered
390
+ // (all paths already served by a live daemon — Q3). runDaemon races this against
391
+ // waitForever to exit non-zero. Never settles for a serving daemon.
392
+ allConflict,
282
393
  async start() {
283
- await hooks.onConnect?.({ host: creds.url });
284
- await sseListener.connect();
394
+ // Connect every path-connection. Each fires its own onConnect hook + SSE connect;
395
+ // the daemon process cwd is untouched (NFR-3).
396
+ for (const c of connections) {
397
+ await c.hooks.onConnect?.({ host: creds.url });
398
+ await c.sseListener.connect();
399
+ }
285
400
  },
286
401
  async stop() {
287
- sseListener.disconnect?.();
402
+ for (const c of connections) {
403
+ c.sseListener.disconnect?.();
404
+ }
405
+ // The MCP client is process-wide (shared) — disconnect it once.
288
406
  await mcpClient.disconnect?.();
289
407
  },
290
408
  };
@@ -319,7 +437,11 @@ export async function runDaemon(flags = {}, deps = {}) {
319
437
  const askPrompt = deps.prompt ?? prompt;
320
438
  const writeCreds = deps.writeLoginFile ?? writeLoginFile;
321
439
  const version = deps.version ?? readVersion();
440
+ // Backend executable resolvers — injectable for tests. The SELECTED backend's
441
+ // resolver runs below (claude-code → findClaude, codex → findCodex), so the
442
+ // banner shows the right binary instead of always probing for `claude`.
322
443
  const findClaude = deps.resolveClaudePath ?? resolveClaudePath;
444
+ const findCodex = deps.resolveCodexPath ?? resolveCodexPath;
323
445
  const verbose = flags.verbose === true || env.CHORUS_VERBOSE === "1";
324
446
 
325
447
  // Resolve the agent backend (default claude-code). An unknown --agent /
@@ -358,6 +480,13 @@ export async function runDaemon(flags = {}, deps = {}) {
358
480
  // --sigint-timeout flag > CHORUS_DAEMON_SIGINT_TIMEOUT env > ~/.chorus/daemon.json > 10000.
359
481
  const sigintTimeoutMs = resolveSigintTimeoutMs({ sigintTimeout: flags.sigintTimeout }, { env });
360
482
 
483
+ // The SET of working directories this daemon serves (T3 — 单 daemon 多路径引擎).
484
+ // Layered: --cwd flag(s) > CHORUS_DAEMON_CWDS env > ~/.chorus/daemon.json `cwds`
485
+ // > [undefined] (single connection at the process cwd). A single `[undefined]`
486
+ // is exactly today's single-path behavior. JUST a list of paths — no project
487
+ // binding (DEC-5: cwd ⟂ project). The daemon process's own cwd never changes.
488
+ const cwds = resolveDaemonCwds({ cwd: flags.cwd }, { env });
489
+
361
490
  // Foreground preflight: resolve/complete credentials + resolve the permission
362
491
  // posture (confirming yolo on a TTY). Reuses the same pfDeps bundle the detach
363
492
  // path uses. Returns a numeric exit code on failure, or
@@ -366,10 +495,18 @@ export async function runDaemon(flags = {}, deps = {}) {
366
495
  if (typeof pf === "number") return pf;
367
496
  const { creds, identity, permissionMode } = pf;
368
497
 
369
- // Detect the claude executable (non-fatal): the daemon still subscribes when
370
- // it's missing; a wake surfaces the error visibly when one arrives. The
371
- // resolved path (or absence) is shown in the banner below.
372
- const claudePath = findClaude();
498
+ // Detect the SELECTED backend's executable (non-fatal): the daemon still
499
+ // subscribes when it's missing; a wake surfaces the error visibly when one
500
+ // arrives. The resolved path (or absence) is shown in the banner below. codex
501
+ // resolveCodexPath, otherwise resolveClaudePath — so a `--agent codex` run
502
+ // probes (and the banner reports) `codex`, not `claude`.
503
+ const cliPath = agentType === "codex" ? findCodex() : findClaude();
504
+
505
+ // The daemon.json the layered config readers (credentials, sigint timeout, cwds)
506
+ // consult. Surfacing its absolute path + presence in the banner makes it obvious
507
+ // which file to edit for `cwds` / `sigintTimeoutMs` and whether one exists at all.
508
+ const configPath = loginFilePath();
509
+ const configExists = existsSync(configPath);
373
510
 
374
511
  // Boxed startup banner — one screen replacing the scattered [Chorus] lines.
375
512
  log(
@@ -382,8 +519,10 @@ export async function runDaemon(flags = {}, deps = {}) {
382
519
  permissionMode,
383
520
  credentialSource: creds.source,
384
521
  agentType,
385
- claudePath,
522
+ cliPath,
386
523
  connection: "connecting…",
524
+ configPath,
525
+ configExists,
387
526
  },
388
527
  { isTTY: isTTY && Boolean(process.stdout.isTTY) }
389
528
  )
@@ -393,6 +532,23 @@ export async function runDaemon(flags = {}, deps = {}) {
393
532
  if (permissionMode === "yolo") {
394
533
  errLog(`[Chorus] ${yoloWarningLine()}`);
395
534
  }
535
+ // A missing backend binary is non-fatal (the daemon still subscribes), but the
536
+ // banner row alone is easy to miss in a systemd journal — emit one loud ⚠ line
537
+ // on stderr so the operator sees it at startup, not only when a wake fails. The
538
+ // warning names the SELECTED backend (claude / CHORUS_CLAUDE_PATH or codex /
539
+ // CHORUS_CODEX_PATH).
540
+ if (cliPath === null) {
541
+ errLog(`[Chorus] ${agentNotFoundWarningLine(agentType)}`);
542
+ }
543
+
544
+ // Surface the served paths so an operator sees a multi-path daemon at a glance.
545
+ // A single `[undefined]` (the default) prints the process cwd it falls back to.
546
+ const servedPaths = cwds.map((c) => c ?? process.cwd());
547
+ if (servedPaths.length > 1) {
548
+ log(`[Chorus] serving ${servedPaths.length} paths: ${servedPaths.join(", ")}`);
549
+ } else {
550
+ log(`[Chorus] serving path: ${servedPaths[0]}`);
551
+ }
396
552
 
397
553
  const daemon = build(creds, {
398
554
  logger: { info: log, warn: errLog, error: errLog },
@@ -400,6 +556,7 @@ export async function runDaemon(flags = {}, deps = {}) {
400
556
  agentType,
401
557
  verbose,
402
558
  sigintTimeoutMs,
559
+ cwds,
403
560
  });
404
561
 
405
562
  // Graceful shutdown on signals.
@@ -414,8 +571,32 @@ export async function runDaemon(flags = {}, deps = {}) {
414
571
  await daemon.start();
415
572
  log("[Chorus] daemon running. Waiting for task dispatches (Ctrl+C to stop).");
416
573
 
417
- // Keep the process alive for the long-lived SSE subscription.
418
- await (deps.waitForever ?? (() => new Promise(() => {})))();
574
+ // Keep the process alive for the long-lived SSE subscription, but exit non-zero if
575
+ // EVERY declared path turns out to be already served by a live daemon
576
+ // (add-daemon-connection-conflict-skip, Q3). `daemon.allConflict` settles only in
577
+ // that all-paths-conflicted case; otherwise we wait forever on the subscription. A
578
+ // sentinel distinguishes the two so a waitForever that never settles can't be mistaken
579
+ // for the conflict exit.
580
+ const ALL_CONFLICT = Symbol("all-conflict");
581
+ const waitForever = deps.waitForever ?? (() => new Promise(() => {}));
582
+ // `daemon.allConflict` is present on the real buildDaemon output; guard for injected
583
+ // test fakes that don't provide it (those never settle the conflict branch). A
584
+ // never-settling fallback keeps the race purely waitForever-driven in that case.
585
+ const allConflictSignal =
586
+ daemon.allConflict ?? new Promise(() => {});
587
+ const outcome = await Promise.race([
588
+ waitForever().then(() => 0),
589
+ allConflictSignal.then(() => ALL_CONFLICT),
590
+ ]);
591
+ if (outcome === ALL_CONFLICT) {
592
+ const n = servedPaths.length;
593
+ errLog(
594
+ `[Chorus] all ${n} declared ${n === 1 ? "path is" : "paths are"} already served by a live daemon — nothing to do. ` +
595
+ `Stop the other daemon(s) or remove the conflicting path(s), then restart.`
596
+ );
597
+ await daemon.stop();
598
+ return 1;
599
+ }
419
600
  return 0;
420
601
  }
421
602