@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
@@ -0,0 +1,312 @@
1
+ // cli/codex-spawner.mjs
2
+ // Cross-platform headless Codex spawner — the `codex` counterpart to
3
+ // ClaudeSpawner, satisfying the SAME backend-agnostic Spawner.wake(...) contract
4
+ // so the daemon's wake pipeline (queue, waker, directed delivery, headless guard,
5
+ // reporters) stays backend-neutral.
6
+ //
7
+ // Codex diverges structurally from Claude (verified against codex-cli 0.142.3 +
8
+ // the ../codex source + a live `codex exec --json` run):
9
+ // • `codex exec --json` emits JSONL (one event per line); the prompt is read
10
+ // from STDIN (never argv). `codex exec resume <id> --json` continues a run.
11
+ // • The FIRST event is `{"type":"thread.started","thread_id":"<uuid>"}` — Codex
12
+ // GENERATES its own id (it does NOT accept a client `--session-id`). We capture
13
+ // it and persist anchor→thread_id (codex-session-map.mjs) so a later wake can
14
+ // `resume <thread_id>`. (serde: ThreadEvent tag="type", rename="thread.started";
15
+ // ThreadStartedEvent.thread_id: String — codex-rs/exec/src/exec_events.rs.)
16
+ // • No `--mcp-config`: MCP comes from the user's ~/.codex/config.toml; the daemon
17
+ // key reaches it via the configured bearer_token_env_var (default
18
+ // CHORUS_API_KEY) exported into the child ENV — never argv.
19
+ // • Permission is a SANDBOX mode, not a tool allowlist.
20
+ //
21
+ // Reuses claude-spawner's platform-neutral helpers: parseNdjsonChunk (NDJSON
22
+ // stream parse) and the PATH-walk shape of resolveClaudePath.
23
+
24
+ import { spawn } from "node:child_process";
25
+ import { statSync } from "node:fs";
26
+ import { win32 as pathWin32, posix as pathPosix } from "node:path";
27
+ import { parseNdjsonChunk } from "./claude-spawner.mjs";
28
+ import { getThreadId as defaultGetThreadId, setThreadId as defaultSetThreadId } from "./codex-session-map.mjs";
29
+
30
+ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
31
+
32
+ /**
33
+ * @typedef {Object} Spawner
34
+ * @property {(params: {
35
+ * prompt: string, sessionId: string|null, isNew: boolean,
36
+ * mcpConfigPath?: string, cwd?: string,
37
+ * onMessage?: (obj: any) => void,
38
+ * onChild?: (child: import("node:child_process").ChildProcess) => void
39
+ * }) => Promise<{ sessionId: string, exitCode: number|null, isNew: boolean }>} wake
40
+ * The backend-agnostic wake contract. ClaudeSpawner and CodexSpawner both
41
+ * implement it; the daemon injects one based on the resolved agent type.
42
+ */
43
+
44
+ /**
45
+ * Map the daemon's backend-agnostic permission mode to a Codex sandbox posture.
46
+ * The expression is SUBCOMMAND-AWARE because the two surfaces differ (verified
47
+ * against codex 0.142.3): the top-level `codex exec` accepts `--sandbox <mode>`,
48
+ * but `codex exec resume` does NOT — passing `--sandbox` there errors with exit 2.
49
+ * yolo → --dangerously-bypass-approvals-and-sandbox (valid on BOTH exec and
50
+ * resume; full autonomy)
51
+ * chorus → exec: --sandbox read-only
52
+ * resume: -c sandbox_mode="read-only" (the `-c` config override is how
53
+ * `codex exec resume` accepts a sandbox mode; `sandbox_mode` is a real
54
+ * config key, value spelled `read-only` per protocol/src/config_types.rs,
55
+ * confirmed via `--strict-config`).
56
+ * Anything other than yolo falls back to the restricted read-only posture.
57
+ * @param {"yolo"|"chorus"|undefined} permissionMode
58
+ * @param {{ resume?: boolean }} [opts] resume:true selects the `codex exec resume` surface.
59
+ * @returns {string[]}
60
+ */
61
+ export function sandboxFlags(permissionMode, opts = {}) {
62
+ if (permissionMode === "yolo") return ["--dangerously-bypass-approvals-and-sandbox"];
63
+ // restricted read-only posture, expressed per subcommand:
64
+ return opts.resume ? ["-c", 'sandbox_mode="read-only"'] : ["--sandbox", "read-only"];
65
+ }
66
+
67
+ /**
68
+ * Build the argv for a headless codex run. Prompt is NEVER here — it goes over
69
+ * stdin. `--skip-git-repo-check` lets a non-repo cwd still run.
70
+ * @param {{ isNew: boolean, threadId?: string|null, permissionMode?: "yolo"|"chorus" }} o
71
+ * @returns {string[]}
72
+ */
73
+ export function buildCodexArgs({ isNew, threadId, permissionMode }) {
74
+ if (!isNew && threadId) {
75
+ const sandbox = sandboxFlags(permissionMode, { resume: true });
76
+ return ["exec", "resume", threadId, "--json", ...sandbox, "--skip-git-repo-check"];
77
+ }
78
+ const sandbox = sandboxFlags(permissionMode);
79
+ return ["exec", "--json", ...sandbox, "--skip-git-repo-check"];
80
+ }
81
+
82
+ /**
83
+ * Extract the Codex thread id from a stream event, or null. Accepts the live
84
+ * `thread.started` shape (authoritative) and the on-disk rollout `session_meta`
85
+ * shape as a defensive fallback.
86
+ * @param {any} obj
87
+ * @returns {string|null}
88
+ */
89
+ export function extractThreadId(obj) {
90
+ if (!obj || typeof obj !== "object") return null;
91
+ if (obj.type === "thread.started" && typeof obj.thread_id === "string") return obj.thread_id;
92
+ if (obj.type === "session_meta" && obj.payload && typeof obj.payload.id === "string") {
93
+ return obj.payload.id;
94
+ }
95
+ return null;
96
+ }
97
+
98
+ /**
99
+ * Resolve the real `codex` executable WITHOUT a shell — same approach as
100
+ * resolveClaudePath. On Windows the bin may be `codex.cmd` (npm shim), which
101
+ * `spawn` can't exec directly without shell:true; we walk PATH for the platform
102
+ * candidates. `CHORUS_CODEX_PATH` overrides.
103
+ * @param {{ env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, isFile?: (p: string) => boolean }} [deps]
104
+ * @returns {string | null}
105
+ */
106
+ export function resolveCodexPath(deps = {}) {
107
+ const env = deps.env ?? process.env;
108
+ const platform = deps.platform ?? process.platform;
109
+ const isFile =
110
+ deps.isFile ??
111
+ ((p) => {
112
+ try {
113
+ return statSync(p).isFile();
114
+ } catch {
115
+ return false;
116
+ }
117
+ });
118
+
119
+ if (env.CHORUS_CODEX_PATH && isFile(env.CHORUS_CODEX_PATH)) {
120
+ return env.CHORUS_CODEX_PATH;
121
+ }
122
+
123
+ const isWin = platform === "win32";
124
+ const p = isWin ? pathWin32 : pathPosix;
125
+ const names = isWin ? ["codex.cmd", "codex.exe", "codex"] : ["codex"];
126
+ const pathVar = env.PATH || env.Path || "";
127
+ const dirs = pathVar.split(p.delimiter).filter(Boolean);
128
+ for (const dir of dirs) {
129
+ for (const name of names) {
130
+ const candidate = p.join(dir, name);
131
+ if (isFile(candidate)) return candidate;
132
+ }
133
+ }
134
+ return null;
135
+ }
136
+
137
+ /**
138
+ * Resolve the actual command + argv to spawn. On Windows a `.cmd`/`.bat` shim is
139
+ * not a PE executable, so it must run via `cmd.exe /d /s /c <path> ...args`; we
140
+ * keep shell:false and pass argv as an array (no shell word-splitting/injection).
141
+ * @param {string} codexPath @param {string[]} args
142
+ * @param {NodeJS.Platform} [platform] @param {NodeJS.ProcessEnv} [env]
143
+ * @returns {{ command: string, argv: string[] }}
144
+ */
145
+ export function resolveSpawnCommand(codexPath, args, platform = process.platform, env = process.env) {
146
+ const isWin = platform === "win32";
147
+ const lower = codexPath.toLowerCase();
148
+ if (isWin && (lower.endsWith(".cmd") || lower.endsWith(".bat"))) {
149
+ const comspec = env.ComSpec || env.COMSPEC || "cmd.exe";
150
+ return { command: comspec, argv: ["/d", "/s", "/c", codexPath, ...args] };
151
+ }
152
+ return { command: codexPath, argv: args };
153
+ }
154
+
155
+ /**
156
+ * @typedef {Object} CodexSpawnerOptions
157
+ * @property {string} [codexPath] Resolved codex path (resolved lazily if omitted).
158
+ * @property {(o: object) => any} [spawnImpl] Injectable spawn (tests).
159
+ * @property {{info(m:string):void,warn(m:string):void,error(m:string):void}} [logger]
160
+ * @property {"chorus"|"yolo"} [permissionMode] Maps to a Codex sandbox posture.
161
+ * @property {{ url: string, apiKey: string }} [creds] Daemon creds — apiKey is exported
162
+ * into the child env under the user config's bearer_token_env_var (default CHORUS_API_KEY).
163
+ * @property {NodeJS.Platform} [platform] Injectable for tests; gates POSIX `detached`.
164
+ * @property {(anchor: string) => string|null} [getThreadIdFn] Injectable session-map read.
165
+ * @property {(anchor: string, threadId: string) => void} [setThreadIdFn] Injectable session-map write.
166
+ */
167
+
168
+ export class CodexSpawner {
169
+ /** @param {CodexSpawnerOptions} [opts] */
170
+ constructor(opts = {}) {
171
+ this.codexPath = opts.codexPath ?? null;
172
+ this.spawnImpl = opts.spawnImpl ?? spawn;
173
+ this.logger = opts.logger ?? NOOP_LOGGER;
174
+ this.permissionMode = opts.permissionMode ?? "chorus";
175
+ this.creds = opts.creds ?? null;
176
+ this.platform = opts.platform ?? process.platform;
177
+ this.getThreadIdFn = opts.getThreadIdFn ?? defaultGetThreadId;
178
+ this.setThreadIdFn = opts.setThreadIdFn ?? defaultSetThreadId;
179
+ this.resolveCodexPathFn = opts.resolveCodexPathFn ?? resolveCodexPath;
180
+ }
181
+
182
+ /**
183
+ * Spawn a headless Codex run. Resolves when the subprocess exits. The prompt is
184
+ * written to stdin (never argv). `sessionId` is the Chorus anchor (direct idea
185
+ * uuid, or entity uuid). Codex owns its session id, so we IGNORE the passed
186
+ * `isNew`/`mcpConfigPath` and decide new-vs-resume from the persisted
187
+ * anchor→thread_id map: a recorded thread id → `resume`, otherwise a fresh run.
188
+ *
189
+ * @param {{ prompt: string, sessionId: string|null, isNew?: boolean, mcpConfigPath?: string,
190
+ * cwd?: string, onMessage?: (obj: any) => void,
191
+ * onChild?: (child: import("node:child_process").ChildProcess) => void }} params
192
+ * @returns {Promise<{ sessionId: string, exitCode: number|null, isNew: boolean }>}
193
+ */
194
+ async wake({ prompt, sessionId, cwd, onMessage, onChild }) {
195
+ const anchor = typeof sessionId === "string" ? sessionId : "";
196
+
197
+ // new-vs-resume is OWNED by this backend (Codex session model), not the
198
+ // waker's Claude transcript probe: a recorded thread id means resume.
199
+ const knownThreadId = anchor ? this.getThreadIdFn(anchor) : null;
200
+ const isNew = !knownThreadId;
201
+
202
+ const codexPath = this.codexPath ?? this.resolveCodexPathFn();
203
+ if (!codexPath) {
204
+ // No crash — surface visibly and resolve with a failure result.
205
+ this.logger.error("[Chorus] cannot locate the `codex` executable on PATH; skipping wake");
206
+ return { sessionId: anchor, exitCode: null, isNew };
207
+ }
208
+
209
+ const args = buildCodexArgs({ isNew, threadId: knownThreadId, permissionMode: this.permissionMode });
210
+ const { command, argv } = resolveSpawnCommand(codexPath, args, this.platform);
211
+
212
+ // POSIX: detached process group so the interrupt path can group-kill the tree
213
+ // (codex exec forks child shells for tools). Windows uses taskkill /T. stdio
214
+ // stays piped — prompt over stdin + NDJSON stdout parse are unaffected.
215
+ const detached = this.platform !== "win32";
216
+
217
+ // Daemon key via ENV under the var the user's [mcp_servers.chorus] references
218
+ // (bearer_token_env_var, default CHORUS_API_KEY) — NEVER argv. Merged over the
219
+ // inherited env so PATH / model auth (Bedrock profile) / CODEX_HOME survive.
220
+ const childEnv = { ...process.env, CHORUS_DAEMON_HEADLESS: "1" };
221
+ if (this.creds && this.creds.apiKey) childEnv.CHORUS_API_KEY = this.creds.apiKey;
222
+
223
+ return new Promise((resolve) => {
224
+ let child;
225
+ try {
226
+ child = this.spawnImpl(command, argv, {
227
+ cwd: cwd ?? process.cwd(),
228
+ stdio: ["pipe", "pipe", "pipe"],
229
+ env: childEnv,
230
+ shell: false,
231
+ detached,
232
+ windowsHide: true,
233
+ });
234
+ } catch (err) {
235
+ this.logger.error(`[Chorus] failed to spawn codex: ${err}`);
236
+ resolve({ sessionId: anchor, exitCode: null, isNew });
237
+ return;
238
+ }
239
+
240
+ // Hand the live child to the caller (interrupt registry) before resolving.
241
+ // Never let a throwing callback escape into the spawn path.
242
+ if (onChild) {
243
+ try {
244
+ onChild(child);
245
+ } catch (err) {
246
+ this.logger.warn(`[Chorus] onChild handler threw: ${err}`);
247
+ }
248
+ }
249
+
250
+ let stdoutBuf = "";
251
+ let observedThreadId = knownThreadId || null;
252
+
253
+ child.stdout?.setEncoding?.("utf8");
254
+ child.stdout?.on("data", (chunk) => {
255
+ stdoutBuf = parseNdjsonChunk(
256
+ stdoutBuf,
257
+ String(chunk),
258
+ (obj) => {
259
+ const tid = extractThreadId(obj);
260
+ if (tid) observedThreadId = tid;
261
+ if (onMessage) {
262
+ try {
263
+ onMessage(obj);
264
+ } catch (err) {
265
+ this.logger.warn(`[Chorus] onMessage handler threw: ${err}`);
266
+ }
267
+ }
268
+ },
269
+ (msg) => this.logger.warn(`[Chorus] ${msg}`)
270
+ );
271
+ });
272
+
273
+ child.stderr?.setEncoding?.("utf8");
274
+ child.stderr?.on("data", (chunk) => {
275
+ const text = String(chunk).trim();
276
+ if (text) this.logger.warn(`[Chorus] codex stderr: ${text}`);
277
+ });
278
+
279
+ child.on("error", (err) => {
280
+ this.logger.error(`[Chorus] codex process error: ${err}`);
281
+ resolve({ sessionId: observedThreadId || anchor, exitCode: null, isNew });
282
+ });
283
+
284
+ child.on("close", (code) => {
285
+ if (code !== 0) {
286
+ this.logger.warn(`[Chorus] codex exited with code ${code}`);
287
+ }
288
+ // Persist anchor→thread_id only on a fresh, successful run that produced a
289
+ // new id — so a later wake for this anchor resumes it. Best-effort; the
290
+ // session map swallows its own IO errors.
291
+ if (code === 0 && isNew && anchor && observedThreadId) {
292
+ this.setThreadIdFn(anchor, observedThreadId);
293
+ }
294
+ resolve({ sessionId: observedThreadId || anchor, exitCode: code, isNew });
295
+ });
296
+
297
+ // Guard against an ASYNC stdin error (EPIPE) so it never becomes an
298
+ // uncaughtException that kills the daemon.
299
+ child.stdin?.on?.("error", (err) => {
300
+ this.logger.warn(`[Chorus] codex stdin error (ignored): ${err}`);
301
+ });
302
+
303
+ // Feed the prompt over stdin, then close it so the model runs.
304
+ try {
305
+ child.stdin?.write(prompt);
306
+ child.stdin?.end();
307
+ } catch (err) {
308
+ this.logger.warn(`[Chorus] failed writing prompt to codex stdin: ${err}`);
309
+ }
310
+ });
311
+ }
312
+ }
@@ -1,15 +1,41 @@
1
1
  // cli/daemon-agent.mjs
2
- // Pure resolution + validation of the daemon's `--agent <type>` selection. The
3
- // flag/env exist to RESERVE the extension point for future agent backends
4
- // (e.g. codex); only `claude-code` is implemented in this change. Resolving an
2
+ // Pure resolution + validation of the daemon's `--agent <type>` selection.
3
+ // `claude-code` (the default) and `codex` are both implemented backends
4
+ // (add-daemon-codex-backend cashed in the reserved `codex` slot). Resolving an
5
5
  // unknown value is a hard error (no silent fallback). Zero dependencies.
6
6
 
7
- /** The agent backends the daemon recognizes. Only `claude-code` is implemented. */
8
- export const KNOWN_AGENTS = ["claude-code"];
7
+ /** The agent backends the daemon recognizes. Both are implemented (claude-code
8
+ * via ClaudeSpawner, codex via CodexSpawner — see spawner-select.mjs). */
9
+ export const KNOWN_AGENTS = ["claude-code", "codex"];
9
10
 
10
11
  /** The default agent backend when neither --agent nor CHORUS_AGENT is set. */
11
12
  export const DEFAULT_AGENT = "claude-code";
12
13
 
14
+ /**
15
+ * Per-backend CLI descriptor: the executable name the daemon resolves/spawns and
16
+ * the env var that overrides its path. Drives the startup banner's "CLI" row and
17
+ * the not-found warning so they name the SELECTED backend (not always `claude`).
18
+ * Unknown / undefined falls back to the default (claude-code) descriptor.
19
+ * @param {string} agentType
20
+ * @returns {{ name: string, envVar: string }}
21
+ */
22
+ export function backendCli(agentType) {
23
+ if (agentType === "codex") return { name: "codex", envVar: "CHORUS_CODEX_PATH" };
24
+ return { name: "claude", envVar: "CHORUS_CLAUDE_PATH" };
25
+ }
26
+
27
+ /**
28
+ * Map the resolved agent backend to the `clientType` the daemon self-reports to
29
+ * the server (and that the connection registry + presence UI display). The server
30
+ * gates this against DAEMON_CLIENT_TYPES, so the values MUST match: `codex` →
31
+ * `codex`, `claude-code` → `claude_code`. Anything else falls back to claude_code.
32
+ * @param {string} agentType
33
+ * @returns {string}
34
+ */
35
+ export function backendClientType(agentType) {
36
+ return agentType === "codex" ? "codex" : "claude_code";
37
+ }
38
+
13
39
  /**
14
40
  * Resolve the agent type from flag → env → default, and validate it.
15
41
  * Precedence: explicit `--agent` flag > CHORUS_AGENT env > DEFAULT_AGENT.
@@ -31,7 +57,7 @@ export function resolveAgentType(flags, env) {
31
57
  value: raw,
32
58
  error:
33
59
  `Unknown --agent "${raw}". Accepted: ${KNOWN_AGENTS.join(", ")}. ` +
34
- `(Only ${DEFAULT_AGENT} is implemented; the flag reserves the slot for future agents.)`,
60
+ `(Default is ${DEFAULT_AGENT}.)`,
35
61
  };
36
62
  }
37
63
  return { ok: true, agent: raw };
@@ -6,7 +6,10 @@
6
6
  //
7
7
  // SECURITY: the banner shows the credential SOURCE, never the raw API key
8
8
  // (owner decision: no masking needed because the key is simply not displayed).
9
- // Zero dependencies — ships in the npm package alongside chorus.mjs.
9
+ // Zero dependencies (beyond the pure backendCli descriptor) — ships in the npm
10
+ // package alongside chorus.mjs.
11
+
12
+ import { backendCli } from "./daemon-agent.mjs";
10
13
 
11
14
  /**
12
15
  * @typedef {Object} BannerInfo
@@ -16,9 +19,11 @@
16
19
  * @property {string} agentUuid authenticated agent uuid.
17
20
  * @property {"yolo"|"chorus"} permissionMode
18
21
  * @property {string} credentialSource resolved credential source (flag/env/login-file/…).
19
- * @property {string} agentType local agent backend (e.g. claude-code).
20
- * @property {string|null} claudePath resolved claude path, or null when not found.
22
+ * @property {string} agentType local agent backend (claude-code | codex) — drives the CLI row label.
23
+ * @property {string|null} cliPath resolved path of the SELECTED backend's CLI, or null when not found.
21
24
  * @property {string} [connection] connection state line (default "connecting…").
25
+ * @property {string} [configPath] absolute path to the daemon.json the CLI reads.
26
+ * @property {boolean} [configExists] whether that daemon.json exists on disk.
22
27
  */
23
28
 
24
29
  /** Right-pad to width (banner box alignment). */
@@ -37,8 +42,13 @@ export function bannerRows(info) {
37
42
  info.permissionMode === "yolo"
38
43
  ? "YOLO ⚠ (full autonomy — Bash/write/any command)"
39
44
  : "chorus-only (Chorus MCP tools only)";
40
- const claude = info.claudePath ? `found: ${info.claudePath}` : "NOT FOUND — install `claude` or set CHORUS_CLAUDE_PATH";
41
- return [
45
+ // The CLI row names the SELECTED backend (claude-code "claude", codex
46
+ // "codex") so a `--agent codex` run never mislabels itself as claude.
47
+ const cli = backendCli(info.agentType);
48
+ const cliValue = info.cliPath
49
+ ? `found: ${info.cliPath}`
50
+ : `NOT FOUND — install \`${cli.name}\` or set ${cli.envVar}`;
51
+ const rows = [
42
52
  ["Version", `chorus v${info.version}`],
43
53
  ["Server", info.url],
44
54
  ["Agent", `${info.agentName} (${info.agentUuid})`],
@@ -46,8 +56,46 @@ export function bannerRows(info) {
46
56
  ["Permission", permission],
47
57
  ["Credentials", `source: ${info.credentialSource}`],
48
58
  ["Connection", info.connection ?? "connecting…"],
49
- ["claude CLI", claude],
59
+ [`${cli.name} CLI`, cliValue],
50
60
  ];
61
+ // Config file row — shown only when the path is known. Tells the operator
62
+ // exactly which daemon.json the CLI read (and whether it exists), so a
63
+ // mis-located or absent config is obvious at a glance.
64
+ if (info.configPath) {
65
+ const exists = info.configExists ? "" : " (not found — using flags/env/defaults)";
66
+ rows.push(["Config", `${info.configPath}${exists}`]);
67
+ }
68
+ return rows;
69
+ }
70
+
71
+ /**
72
+ * The prominent warning shown at startup when the SELECTED backend's executable
73
+ * cannot be resolved. Mirrors `yoloWarningLine()`'s loud single-line style so a
74
+ * missing binary is visible in an unattended / systemd journal immediately,
75
+ * rather than only when a wake later fails. The daemon stays non-fatal — it still
76
+ * subscribes. Names the backend's own binary + override env var (claude /
77
+ * CHORUS_CLAUDE_PATH, or codex / CHORUS_CODEX_PATH).
78
+ * @param {string} agentType
79
+ * @returns {string}
80
+ */
81
+ export function agentNotFoundWarningLine(agentType) {
82
+ const { name, envVar } = backendCli(agentType);
83
+ return (
84
+ `⚠ ${name} CLI NOT FOUND on PATH — wakes will FAIL until you install \`${name}\` ` +
85
+ `or set ${envVar}. For a systemd/boot service, ensure the unit's PATH ` +
86
+ "includes the directory holding the binary (e.g. ~/.local/bin). The daemon will " +
87
+ "still subscribe, but every task dispatch errors until this is fixed."
88
+ );
89
+ }
90
+
91
+ /**
92
+ * Back-compat alias — the original claude-only warning. Delegates to
93
+ * {@link agentNotFoundWarningLine} for the default claude-code backend so older
94
+ * imports keep working.
95
+ * @returns {string}
96
+ */
97
+ export function claudeNotFoundWarningLine() {
98
+ return agentNotFoundWarningLine("claude-code");
51
99
  }
52
100
 
53
101
  /**
@@ -13,6 +13,8 @@
13
13
  // IO (env / file read) is injectable so this is unit-testable without real disk.
14
14
 
15
15
  import { readFileSync } from "node:fs";
16
+ import { homedir } from "node:os";
17
+ import { isAbsolute, resolve as resolvePath } from "node:path";
16
18
  import { loginFilePath } from "./credentials.mjs";
17
19
 
18
20
  /** Built-in default escalation window (ms) — matches the spec's 10 seconds. */
@@ -82,3 +84,119 @@ export function resolveSigintTimeoutMs(flags = {}, deps = {}) {
82
84
  // 4. Built-in default
83
85
  return DEFAULT_SIGINT_TIMEOUT_MS;
84
86
  }
87
+
88
+ // ===== Multi-path cwd set (T3 — 单 daemon 多路径引擎, FR-5/FR-8, DEC-2) =====
89
+ //
90
+ // A daemon may declare a SET of local working directories (a cwd LIST) it serves.
91
+ // Each declared path becomes one INDEPENDENT connection (own SSE self-report +
92
+ // own Waker bound to that cwd), so the same agent on the same host driving several
93
+ // paths registers as several distinct rows instead of one. This is JUST a set of
94
+ // paths: per the human's cwd⟂project correction (DEC-5) it carries NO path↔project
95
+ // binding and there is NO project→cwd routing — the daemon only declares which
96
+ // directories it serves.
97
+ //
98
+ // Layered resolution, mirroring resolveSigintTimeoutMs's precedence — first defined
99
+ // source wins (the WHOLE set comes from the first source that yields any path):
100
+ //
101
+ // --cwd flag(s) > CHORUS_DAEMON_CWDS env (comma/`os.delimiter`-separated)
102
+ // > ~/.chorus/daemon.json `cwds: [...]`
103
+ // > [undefined] (single connection at the daemon's process cwd)
104
+ //
105
+ // The `[undefined]` fallback is the HARD-1 / single-path default: an unspecified
106
+ // cwd set means "serve one path, the process default" — exactly today's behavior.
107
+ // The Waker/SseListener treat an `undefined` entry as "use process.cwd()".
108
+
109
+ /** Expand a leading `~` to the home dir and resolve to an absolute path. */
110
+ function normalizeCwd(value, home) {
111
+ if (typeof value !== "string") return undefined;
112
+ const trimmed = value.trim();
113
+ if (!trimmed) return undefined;
114
+ let expanded = trimmed;
115
+ if (expanded === "~") expanded = home;
116
+ else if (expanded.startsWith("~/")) expanded = resolvePath(home, expanded.slice(2));
117
+ // Resolve relative paths against the daemon's process cwd so the declared path is
118
+ // always absolute (claude --resume scopes transcripts to the ABSOLUTE cwd).
119
+ return isAbsolute(expanded) ? expanded : resolvePath(expanded);
120
+ }
121
+
122
+ /**
123
+ * De-duplicate a list of normalized paths preserving first-seen order, dropping
124
+ * blanks/undefined. Returns the cleaned array (possibly empty).
125
+ * @param {Array<unknown>} list @param {string} home
126
+ * @returns {string[]}
127
+ */
128
+ function cleanCwdList(list, home) {
129
+ const seen = new Set();
130
+ const out = [];
131
+ for (const raw of Array.isArray(list) ? list : []) {
132
+ const norm = normalizeCwd(raw, home);
133
+ if (norm === undefined || seen.has(norm)) continue;
134
+ seen.add(norm);
135
+ out.push(norm);
136
+ }
137
+ return out;
138
+ }
139
+
140
+ /**
141
+ * Resolve the SET of working directories this daemon serves (FR-5). One entry per
142
+ * connection the daemon will register. Each entry is an absolute path, EXCEPT the
143
+ * single-element `[undefined]` fallback which means "serve the process default cwd"
144
+ * (the unspecified / single-path / HARD-1 default — identical to today's behavior).
145
+ *
146
+ * Layered precedence (first source that yields ANY path wins for the whole set):
147
+ * 1. flags.cwd — a string or string[] from repeatable `--cwd` flags.
148
+ * 2. env — CHORUS_DAEMON_CWDS, split on the platform path delimiter or
149
+ * a comma (whichever the user used; both are accepted).
150
+ * 3. login/config — ~/.chorus/daemon.json `cwds` (array of strings).
151
+ * 4. default — `[undefined]` (one connection at the process cwd).
152
+ *
153
+ * The declaration is purely a list of paths — it does NOT carry, store, or upload
154
+ * any path↔project binding (DEC-5: cwd ⟂ project).
155
+ *
156
+ * @param {{ cwd?: string|string[] }} [flags] Explicit `--cwd` value(s).
157
+ * @param {{
158
+ * env?: Record<string, string|undefined>,
159
+ * readJson?: (path: string) => (Record<string, unknown>|null),
160
+ * loginPath?: string,
161
+ * home?: string,
162
+ * delimiter?: string,
163
+ * }} [deps]
164
+ * @returns {Array<string|undefined>} A non-empty list; `[undefined]` ⇒ process cwd.
165
+ */
166
+ export function resolveDaemonCwds(flags = {}, deps = {}) {
167
+ const env = deps.env ?? process.env;
168
+ const readJson = deps.readJson ?? readJsonSafe;
169
+ const loginPath = deps.loginPath ?? loginFilePath();
170
+ const home = deps.home ?? homedir();
171
+ // Accept both the OS path delimiter (":" on POSIX, ";" on Windows) and a comma, so
172
+ // CHORUS_DAEMON_CWDS=/a:/b and CHORUS_DAEMON_CWDS=/a,/b both work cross-platform.
173
+ const delimiters = new RegExp(`[${deps.delimiter ?? ""},]|${process.platform === "win32" ? ";" : ":"}`);
174
+
175
+ // 1. Explicit --cwd flag(s) — a string or an array (repeatable flag).
176
+ const flagList = Array.isArray(flags.cwd)
177
+ ? flags.cwd
178
+ : typeof flags.cwd === "string"
179
+ ? [flags.cwd]
180
+ : [];
181
+ const fromFlags = cleanCwdList(flagList, home);
182
+ if (fromFlags.length > 0) return fromFlags;
183
+
184
+ // 2. Environment variable (delimiter- or comma-separated).
185
+ const envRaw = env.CHORUS_DAEMON_CWDS;
186
+ if (typeof envRaw === "string" && envRaw.trim()) {
187
+ const fromEnv = cleanCwdList(envRaw.split(delimiters), home);
188
+ if (fromEnv.length > 0) return fromEnv;
189
+ }
190
+
191
+ // 3. Login/config file (~/.chorus/daemon.json `cwds`).
192
+ const file = readJson(loginPath);
193
+ if (file && Array.isArray(file.cwds)) {
194
+ const fromFile = cleanCwdList(file.cwds, home);
195
+ if (fromFile.length > 0) return fromFile;
196
+ }
197
+
198
+ // 4. Built-in default: a single connection at the daemon's process cwd. `undefined`
199
+ // is the "unspecified" sentinel the Waker/SseListener degrade to process.cwd()
200
+ // for (HARD-1 / single-path — exactly today's behavior).
201
+ return [undefined];
202
+ }