@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
@@ -10,6 +10,27 @@
10
10
 
11
11
  const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
12
12
 
13
+ // Map a Notification.action to its DaemonSessionTurn trigger category — the daemon-side
14
+ // MIRROR of the server's NOTIFICATION_ACTION_TO_TURN_TRIGGER (src/services/notification-turn.ts).
15
+ // Used ONLY to match a re-read wake notification back to a DIRECTED autonomous pending turn
16
+ // (the deliver_turn re-dispatch rebuilds the prompt from the notification, T2). Kept narrow
17
+ // to the three triggers a `deliver_turn` ping can carry for an autonomous wake; every other
18
+ // action collapses to the `task_assigned` trigger exactly as the server does, so a
19
+ // task_assigned turn matches its task_reopened/task_verified/idea_claimed/proposal_* origins.
20
+ const ACTION_TO_TURN_TRIGGER = {
21
+ mentioned: "mentioned",
22
+ elaboration_verified: "elaboration_verified",
23
+ elaboration_requested: "elaboration",
24
+ elaboration_answered: "elaboration",
25
+ human_instruction: "human_instruction",
26
+ task_assigned: "task_assigned",
27
+ task_reopened: "task_assigned",
28
+ task_verified: "task_assigned",
29
+ idea_claimed: "task_assigned",
30
+ proposal_approved: "task_assigned",
31
+ proposal_rejected: "task_assigned",
32
+ };
33
+
13
34
  export class EventRouter {
14
35
  /**
15
36
  * @param {{
@@ -17,6 +38,15 @@ export class EventRouter {
17
38
  * waker: { keyFor: (n: any) => Promise<{ key: string, rootIdeaUuid: string|null, directIdeaUuid: string|null }>, wake: (n: any, key: string, attribution?: any) => Promise<void>, markQueued?: (n: any, key: string, attribution?: any) => void },
18
39
  * queue: { enqueue: (key: string, task: () => Promise<void>) => void },
19
40
  * wakeActions: Set<string>,
41
+ * getConnectionUuid?: () => (string|null), This daemon's registered connection uuid
42
+ * (null until the SSE handshake reports it).
43
+ * Same self-identity source the control handler
44
+ * uses — wired in cli/daemon.mjs. Used to suppress
45
+ * a DIRECTED (pinned) wake whose stamped target is
46
+ * NOT this connection (fix-pinned-wake-directed-
47
+ * delivery). Absent ⇒ no targeting (no suppression
48
+ * ever) — preserves the pre-change behavior for any
49
+ * caller that does not wire it.
20
50
  * logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
21
51
  * }} opts
22
52
  */
@@ -25,6 +55,12 @@ export class EventRouter {
25
55
  this.waker = opts.waker;
26
56
  this.queue = opts.queue;
27
57
  this.wakeActions = opts.wakeActions;
58
+ // This daemon's own connection uuid (lazy — read at routing time, not construction,
59
+ // since the SSE handshake assigns it after the router is built). Defaults to a getter
60
+ // returning null so an un-wired router behaves as before (a stamped target is then
61
+ // never "mine", but only `human_instruction`/directed paths stamp one — un-pinned wakes
62
+ // carry no target and are unaffected).
63
+ this.getConnectionUuid = opts.getConnectionUuid ?? (() => null);
28
64
  this.logger = opts.logger ?? NOOP_LOGGER;
29
65
  // Shared dedup set: the daemon passes the SAME Set to the reconnect backfill
30
66
  // so a notification handled live is never re-woken on reconnect, and a
@@ -37,7 +73,18 @@ export class EventRouter {
37
73
  /**
38
74
  * Handle one SSE event. Synchronous + non-throwing: it kicks off async
39
75
  * fetch/route work and returns immediately so the SSE consumer never blocks.
40
- * @param {{ type?: string, notificationUuid?: string }} event
76
+ *
77
+ * DIRECTED-DELIVERY TRANSPORT FIELDS (fix-pinned-wake-directed-delivery): a live
78
+ * `new_notification` event for a PINNED autonomous wake carries two TRANSPORT-ONLY fields
79
+ * stamped by the server (NOT persisted, NOT on `chorus_get_notifications`):
80
+ * - `targetConnectionUuid` — the resolved ONLINE target connection for a directed wake;
81
+ * null for un-pinned / notify-only wakes.
82
+ * - `suppressWake` — true ONLY for an offline-pin wake (a pin matched NO online
83
+ * connection) so EVERY daemon suppresses (Q2 notify-only); false otherwise.
84
+ * They are threaded to `#fetchAndRoute` so the broadcast-suppression decision can be made
85
+ * there. A reconnect-backfill synthetic event omits both (so a backfilled wake behaves as
86
+ * un-pinned → online-first; the directed target is covered by its own `deliver_turn` ping).
87
+ * @param {{ type?: string, notificationUuid?: string, targetConnectionUuid?: string|null, suppressWake?: boolean }} event
41
88
  */
42
89
  dispatch(event) {
43
90
  if (event?.type !== "new_notification") {
@@ -51,13 +98,25 @@ export class EventRouter {
51
98
  return; // already handled (e.g. live delivery then reconnect backfill)
52
99
  }
53
100
  this.seen.add(event.notificationUuid);
54
- this.#fetchAndRoute(event.notificationUuid).catch((err) => {
55
- this.logger.error(`[Chorus] failed to route notification ${event.notificationUuid}: ${err}`);
56
- });
101
+ // Snapshot the transport-only directed-delivery fields off the EVENT (NOT the fetched
102
+ // notification the server stamps them on the SSE envelope only).
103
+ const targetConnectionUuid =
104
+ typeof event.targetConnectionUuid === "string" ? event.targetConnectionUuid : null;
105
+ const suppressWake = event.suppressWake === true;
106
+ this.#fetchAndRoute(event.notificationUuid, { targetConnectionUuid, suppressWake }).catch(
107
+ (err) => {
108
+ this.logger.error(`[Chorus] failed to route notification ${event.notificationUuid}: ${err}`);
109
+ }
110
+ );
57
111
  }
58
112
 
59
- /** @param {string} notificationUuid */
60
- async #fetchAndRoute(notificationUuid) {
113
+ /**
114
+ * @param {string} notificationUuid
115
+ * @param {{ targetConnectionUuid?: string|null, suppressWake?: boolean }} [transport]
116
+ * Transport-only directed-delivery fields snapshotted off the SSE event (see `dispatch`).
117
+ * Omitted/empty (e.g. reconnect backfill) ⇒ un-pinned behavior (no suppression).
118
+ */
119
+ async #fetchAndRoute(notificationUuid, transport = {}) {
61
120
  const result = await this.mcp.callTool("chorus_get_notifications", {
62
121
  status: "unread",
63
122
  limit: 50,
@@ -95,6 +154,59 @@ export class EventRouter {
95
154
  return;
96
155
  }
97
156
 
157
+ // DIRECTED-DELIVERY BROADCAST SUPPRESSION (fix-pinned-wake-directed-delivery, T2). The
158
+ // notification SSE stream is per-AGENT, so EVERY online (host, cwd) connection of the
159
+ // agent receives the same `new_notification`. A pinned autonomous wake (mention /
160
+ // task_assigned / elaboration_verified resolved to a specific online instance) must wake
161
+ // ONLY that instance — the others must ignore their broadcast copy. The decision uses the
162
+ // transport-only fields the server stamped on THIS event (read in `dispatch`):
163
+ //
164
+ // 1. suppressWake === true → OFFLINE-PIN (Q2): a real pin matched NO online connection.
165
+ // Wake NO instance, agent-wide, even though this connection may be online and would
166
+ // otherwise broadcast→online-first. This is the ONE place that realizes the design's
167
+ // "no online target → every connection suppresses → notify-only" intent. Without this
168
+ // explicit flag an offline-pin is indistinguishable from an un-pinned wake (both carry
169
+ // targetConnectionUuid:null) and would be silently re-woken — the bug this guards.
170
+ //
171
+ // 2. targetConnectionUuid set AND !== my connection uuid → a DIRECTED wake for a
172
+ // DIFFERENT instance. Suppress: the resolved target wakes from its own copy (and via
173
+ // the precise deliver_turn ping); this connection must not also wake (the agent-wide
174
+ // fan-out is the headline bug). Pre-handshake (my uuid still null) counts as "not mine"
175
+ // → suppress, since this daemon cannot prove it is the target; delivery to the actual
176
+ // target is covered by the deliver_turn ping + reconnect pending-turn backfill.
177
+ //
178
+ // 3. targetConnectionUuid set AND === my connection uuid → I am the resolved target →
179
+ // wake (acting on this broadcast copy, which carries the full prompt context). The
180
+ // target's own deliver_turn→pending-turn delivery is deduped against this via the
181
+ // shared `seen` set (the pending re-dispatch keys turn:{uuid}; whichever runs first
182
+ // marks the other seen) so the target wakes exactly ONCE.
183
+ //
184
+ // 4. no target AND not suppressed → UN-PINNED (or a fully-offline `none` agent): wake
185
+ // exactly as before this change (broadcast → online-first). BYTE-IDENTICAL — the path
186
+ // below is untouched for this case.
187
+ if (transport.suppressWake === true) {
188
+ this.logger.info(
189
+ `[Chorus] wake ${notificationUuid} (${n.action}) is an OFFLINE-PIN (pin matched no online instance) — notify-only, suppressing wake on every connection`
190
+ );
191
+ return;
192
+ }
193
+ const target =
194
+ typeof transport.targetConnectionUuid === "string" ? transport.targetConnectionUuid : null;
195
+ if (target) {
196
+ const me = this.getConnectionUuid();
197
+ if (target !== me) {
198
+ this.logger.info(
199
+ `[Chorus] wake ${notificationUuid} (${n.action}) is directed to connection ${target}` +
200
+ ` — not this daemon (${me ?? "<unregistered>"}); suppressing broadcast wake`
201
+ );
202
+ return;
203
+ }
204
+ // target === me: I am the resolved target — fall through and wake (deduped below).
205
+ this.logger.info(
206
+ `[Chorus] wake ${notificationUuid} (${n.action}) is directed to THIS connection (${me}) — waking`
207
+ );
208
+ }
209
+
98
210
  await this.#resolveAndEnqueue(n, notificationUuid);
99
211
  }
100
212
 
@@ -136,11 +248,21 @@ export class EventRouter {
136
248
  * pending turn already handled live (or by an earlier backfill) is not re-run.
137
249
  * Synchronous + non-throwing, mirroring `dispatch`/`dispatchResume`.
138
250
  *
139
- * Only `human_instruction` pending turns are re-dispatched here: autonomous turns
140
- * (task_assigned / mentioned / elaboration / resume) are re-driven by the
141
- * notification backfill (their notifications are re-fetched), whereas a
142
- * human_instruction's actionable payload lives ONLY on the turn — so the turn table
143
- * is its sole reliable backfill source.
251
+ * DELIVERY SCOPE (fix-pinned-wake-directed-delivery, T2 widened): a `deliver_turn` ping
252
+ * now also fires for a DIRECTED autonomous wake (`mentioned` / `task_assigned` /
253
+ * `elaboration_verified`), so this entrypoint re-dispatches those too — not only
254
+ * `human_instruction`. Unlike `human_instruction`, an autonomous turn has
255
+ * `promptText = null` (only human_instruction carries canonical free text), so its wake
256
+ * prompt CANNOT be rebuilt from the turn — it is rebuilt from the wake NOTIFICATION
257
+ * (re-read via `chorus_get_notifications`) for the turn's session. See the
258
+ * `#redispatchAutonomousTurn` helper.
259
+ *
260
+ * DEDUP (the two delivery routes for a DIRECTED target collapse to ONE wake): the
261
+ * target's BROADCAST copy (handled in `#fetchAndRoute`, keyed `notificationUuid` in the
262
+ * shared `seen` set when `target === me`) and THIS `deliver_turn`→pending delivery (keyed
263
+ * `turn:{uuid}`) both reach the target. They share the same `seen` set; the autonomous
264
+ * re-dispatch additionally marks the MATCHED notification's `notificationUuid` so whichever
265
+ * route runs first claims the other's key, and the second is dropped — exactly once.
144
266
  *
145
267
  * @param {{ turnUuid?: string, sessionId?: string, directIdeaUuid?: string|null,
146
268
  * trigger?: string, promptText?: string|null }} pending
@@ -156,7 +278,36 @@ export class EventRouter {
156
278
  this.logger.warn(`[Chorus] pending-turn ${turnUuid} missing sessionId, skipping`);
157
279
  return;
158
280
  }
159
- // Only human_instruction is re-derived from the turn table (see doc above).
281
+ // A DIRECTED autonomous turn (mentioned / task_assigned / elaboration_verified) is
282
+ // delivered by the deliver_turn ping too (T2). Its prompt must be rebuilt from the
283
+ // notification (promptText is null), so it takes a separate async path. resume /
284
+ // elaboration are not delivered by deliver_turn (resume is synthetic; elaboration
285
+ // request/answer rides the notification broadcast), so they are not re-dispatched here.
286
+ if (
287
+ pending.trigger === "mentioned" ||
288
+ pending.trigger === "task_assigned" ||
289
+ pending.trigger === "elaboration_verified"
290
+ ) {
291
+ // Shared dedup, marked BEFORE async work (mirrors the human_instruction path and
292
+ // `dispatch`) so concurrent deliveries collapse to one wake.
293
+ const seenKey = `turn:${turnUuid}`;
294
+ if (this.seen.has(seenKey)) return;
295
+ this.seen.add(seenKey);
296
+ const directIdeaUuid =
297
+ typeof pending.directIdeaUuid === "string" ? pending.directIdeaUuid : null;
298
+ this.#redispatchAutonomousTurn({
299
+ turnUuid,
300
+ sessionId,
301
+ directIdeaUuid,
302
+ trigger: pending.trigger,
303
+ }).catch((err) => {
304
+ this.logger.error(
305
+ `[Chorus] failed to re-dispatch autonomous pending turn ${turnUuid}: ${err}`
306
+ );
307
+ });
308
+ return;
309
+ }
310
+ // Only human_instruction is re-derived from the turn table directly (see doc above).
160
311
  if (pending.trigger !== "human_instruction") {
161
312
  return;
162
313
  }
@@ -211,6 +362,116 @@ export class EventRouter {
211
362
  this.queue.enqueue(key, () => this.waker.wake(n, key, attribution));
212
363
  }
213
364
 
365
+ /**
366
+ * Re-dispatch a DIRECTED autonomous pending turn (mentioned / task_assigned /
367
+ * elaboration_verified) delivered by the `deliver_turn` ping (T2 — fix-pinned-wake-
368
+ * directed-delivery). Unlike `human_instruction`, the turn carries `promptText = null`,
369
+ * so the wake prompt must be rebuilt from the wake NOTIFICATION — `buildPrompt` (run
370
+ * inside `waker.wake`) needs `entityType` / `entityUuid` / `entityTitle` / `actorName` /
371
+ * `message`, none of which live on the turn. We re-read the unread notifications (the
372
+ * same `chorus_get_notifications` the router already uses) and pick the wake notification
373
+ * for THIS turn's session + trigger.
374
+ *
375
+ * PROMPT-CONTEXT CONSTRAINT (Tech Design): in the normal live case the target is online,
376
+ * so it ALSO received the broadcast — which `#fetchAndRoute` already woke (and marked the
377
+ * notification `seen`). This path then finds that notification already `seen` and dedups
378
+ * away → exactly one wake. In the rare missed-broadcast case (the ping arrived but the
379
+ * broadcast copy did not), this path is the one that wakes, with the prompt rebuilt from
380
+ * the re-read notification. If no matching unread notification exists at all (e.g. it was
381
+ * already read), there is no autonomous context to rebuild — log and skip (the durable
382
+ * net is the reconnect notification backfill, which re-derives autonomous wakes).
383
+ *
384
+ * DEDUP across the two routes: this matched notification's `uuid` is the SAME key the
385
+ * broadcast path marks in the shared `seen` set, so whichever route runs first claims it
386
+ * and the other is dropped. The `turn:{uuid}` key was already marked by the caller.
387
+ *
388
+ * @param {{ turnUuid: string, sessionId: string, directIdeaUuid: string|null, trigger: string }} pending
389
+ */
390
+ async #redispatchAutonomousTurn(pending) {
391
+ const { turnUuid, sessionId, directIdeaUuid, trigger } = pending;
392
+ let result;
393
+ try {
394
+ result = await this.mcp.callTool("chorus_get_notifications", {
395
+ status: "unread",
396
+ limit: 50,
397
+ autoMarkRead: false,
398
+ });
399
+ } catch (err) {
400
+ this.logger.warn(
401
+ `[Chorus] autonomous pending turn ${turnUuid}: notification re-read failed: ${err}`
402
+ );
403
+ return;
404
+ }
405
+ const notifications = result?.notifications;
406
+ if (!Array.isArray(notifications)) {
407
+ this.logger.warn(
408
+ `[Chorus] autonomous pending turn ${turnUuid}: no notifications array to rebuild prompt from`
409
+ );
410
+ return;
411
+ }
412
+
413
+ // Candidate wake notifications: unread, wake-action, mapping to THIS turn's trigger.
414
+ // ACTION_TO_TURN_TRIGGER mirrors the server's action→trigger collapse, so e.g. a
415
+ // task_assigned turn matches task_reopened/task_verified/idea_claimed/proposal_* origins.
416
+ const candidates = notifications.filter(
417
+ (x) => x && typeof x.uuid === "string" && ACTION_TO_TURN_TRIGGER[x.action] === trigger
418
+ );
419
+
420
+ // Match the wake notification for THIS turn by its session ANCHOR. The anchor is the
421
+ // turn's direct idea (idea-anchored session) or, lacking one, its session id; a CROSS-CWD
422
+ // mention keys the per-instance session `${directIdeaUuid}::${connectionUuid}` with
423
+ // directIdeaUuid=null, so the idea prefix before "::" is also a valid anchor. We never run
424
+ // lineage on the daemon — these are the anchors the server itself keyed the session on.
425
+ const ideaPrefix =
426
+ directIdeaUuid == null && sessionId.includes("::") ? sessionId.split("::")[0] : null;
427
+ const anchors = new Set(
428
+ [directIdeaUuid, sessionId, ideaPrefix].filter((a) => typeof a === "string" && a)
429
+ );
430
+ let match = candidates.find((x) => anchors.has(x.entityUuid));
431
+
432
+ // MISSED-BROADCAST RECOVERY (the rare path this re-dispatch exists for): when the wake's
433
+ // notification entity is NOT the session anchor (a lineage-anchored task_assigned, a
434
+ // comment-on-task mention, or a cross-cwd mention whose entity is a child of the idea),
435
+ // the anchor equality above can't match without a lineage round-trip. If there is exactly
436
+ // ONE unread candidate for this trigger, it is unambiguously this turn's wake — recover it.
437
+ // With 2+ candidates we cannot disambiguate safely, so we defer to the reconnect
438
+ // notification backfill rather than risk waking the wrong one.
439
+ if (!match && candidates.length === 1) {
440
+ match = candidates[0];
441
+ this.logger.info(
442
+ `[Chorus] autonomous pending turn ${turnUuid} (${trigger}): no anchor match, recovering the ` +
443
+ `single unread ${trigger} notification ${match.uuid} (missed-broadcast recovery)`
444
+ );
445
+ }
446
+ if (!match || typeof match.uuid !== "string") {
447
+ this.logger.info(
448
+ `[Chorus] autonomous pending turn ${turnUuid} (${trigger}): no unambiguous unread wake ` +
449
+ `notification for session ${sessionId} (${candidates.length} candidate(s)) — skipping ` +
450
+ `(covered by reconnect notification backfill)`
451
+ );
452
+ return;
453
+ }
454
+
455
+ // Cross-route dedup: claim the broadcast's key. If the broadcast already woke it (target
456
+ // === me path), it is already seen → drop this delivery (exactly one wake). Otherwise we
457
+ // claim it so a later broadcast copy is dropped by `dispatch`'s seen check.
458
+ if (this.seen.has(match.uuid)) {
459
+ this.logger.info(
460
+ `[Chorus] autonomous pending turn ${turnUuid}: broadcast copy ${match.uuid} already handled — deduped`
461
+ );
462
+ return;
463
+ }
464
+ this.seen.add(match.uuid);
465
+
466
+ // Rebuild + enqueue through the SAME resolve→markQueued→enqueue path as a live broadcast
467
+ // wake, so the prompt (buildPrompt inside waker.wake), session anchor, and serialization
468
+ // are byte-identical to the broadcast route. `match` is a full NotificationDetail.
469
+ this.logger.info(
470
+ `[Chorus] autonomous pending turn ${turnUuid} (${trigger}): waking from re-read notification ${match.uuid}`
471
+ );
472
+ await this.#resolveAndEnqueue(match, match.uuid);
473
+ }
474
+
214
475
  /**
215
476
  * Resolve a wake's serialization key + idea attribution, mark it queued, and
216
477
  * enqueue it on the per-direct-idea queue. Shared by the notification path
package/cli/login.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  // ~/.chorus/daemon.json (0600). On validation failure, nothing is written.
4
4
  // Plain ESM; the only dependency is the in-repo MCP SDK (via chorus-client).
5
5
 
6
- import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
6
+ import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
7
7
  import { dirname } from "node:path";
8
8
  import { createInterface } from "node:readline";
9
9
 
@@ -49,56 +49,99 @@ export function prompt(query, opts = {}) {
49
49
  }
50
50
 
51
51
  /**
52
- * Persist credentials + identity to the login file with owner-only perms.
52
+ * Field-level merge update of the login file (`~/.chorus/daemon.json`) the
53
+ * single read → merge → write(0600) helper every config writer routes through.
54
+ *
55
+ * Reads any existing file, shallow-merges `partial` over it (partial keys win,
56
+ * every other pre-existing field is preserved), and writes the result back with
57
+ * owner-only permissions. A shallow merge is correct because every field is a
58
+ * scalar or a flat array (`cwds`) — there are no nested objects to deep-merge.
53
59
  *
54
- * Writing the file with a fresh credential object intentionally OMITS any
55
- * `yoloAckAt` that a previous file carried a credential change (re-login)
56
- * clears the yolo acknowledgement, so the next yolo TTY start re-confirms once
57
- * (daemon-permission-mode spec). To preserve an existing ack across an
58
- * unrelated rewrite, the caller must read it first and pass it in `data`.
60
+ * The write is atomic: the JSON is written to a sibling `<path>.tmp` at 0600 and
61
+ * then `rename()`d over the target, so a crash mid-write never truncates the
62
+ * live file. A missing / unreadable / malformed existing file is treated as an
63
+ * empty object (defensive parse), so a re-login still produces a valid file
64
+ * rather than aborting on a corrupt one.
59
65
  *
60
- * @param {{ url: string, apiKey: string, agentUuid: string, agentName: string, yoloAckAt?: string }} data
61
- * @param {{ path?: string, write?: (p: string, c: string, o: object) => void, mkdir?: (p: string, o: object) => void }} [deps]
66
+ * Because writes now merge, NO field is ever silently dropped in particular a
67
+ * `chorus login` preserves any pre-existing `cwds` / `yoloAckAt` /
68
+ * `sigintTimeoutMs` (daemon-config-field-merge change; supersedes the prior
69
+ * "credential change clears the yolo acknowledgement" behavior).
70
+ *
71
+ * @param {Record<string, unknown>} partial The fields to set/overwrite.
72
+ * @param {{
73
+ * path?: string,
74
+ * read?: (p: string) => string,
75
+ * write?: (p: string, c: string, o: object) => void,
76
+ * mkdir?: (p: string, o: object) => void,
77
+ * rename?: (from: string, to: string) => void,
78
+ * }} [deps]
79
+ * @returns {string} the file path written
62
80
  */
63
- export function writeLoginFile(data, deps = {}) {
81
+ export function updateDaemonConfig(partial, deps = {}) {
64
82
  const path = deps.path ?? loginFilePath();
83
+ const read = deps.read ?? ((p) => readFileSync(p, "utf8"));
65
84
  const write = deps.write ?? writeFileSync;
66
85
  const mkdir = deps.mkdir ?? mkdirSync;
86
+ const rename = deps.rename ?? renameSync;
87
+
88
+ // Defensive read: missing / unreadable / malformed → start from empty so a
89
+ // re-login over a corrupt file still writes a valid one (no silent abort).
90
+ let current = {};
91
+ try {
92
+ const parsed = JSON.parse(read(path));
93
+ // Only a plain object is a valid config; arrays / scalars → start fresh.
94
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) current = parsed;
95
+ } catch {
96
+ // treat as empty
97
+ }
98
+
99
+ const merged = { ...current, ...partial };
67
100
  mkdir(dirname(path), { recursive: true });
68
- write(path, JSON.stringify(data, null, 2) + "\n", { mode: 0o600 });
101
+ // Atomic write: temp file (0600) in the same dir, then rename over target.
102
+ const tmp = `${path}.tmp`;
103
+ write(tmp, JSON.stringify(merged, null, 2) + "\n", { mode: 0o600 });
104
+ rename(tmp, path);
69
105
  return path;
70
106
  }
71
107
 
72
108
  /**
73
- * Record (or refresh) the yolo acknowledgement in the existing login file,
74
- * preserving the credentials already on disk. Reads the current file, merges
75
- * `yoloAckAt`, and rewrites with 0600. Used by the daemon after an interactive
76
- * TTY yolo confirmation it does NOT touch url/apiKey/identity.
109
+ * Persist credentials + identity to the login file with owner-only perms.
110
+ *
111
+ * Thin wrapper over {@link updateDaemonConfig}: it field-merges the given
112
+ * credential/identity fields over any existing file, so every OTHER pre-existing
113
+ * field (`cwds`, `yoloAckAt`, `sigintTimeoutMs`, …) is preserved across a
114
+ * `chorus login` or a daemon-start credential completion. It no longer omits
115
+ * `yoloAckAt` — a credential write never discards the recorded yolo ack.
116
+ *
117
+ * The `deps` seams (`path`, `write`, `mkdir`) are kept for callers/tests that
118
+ * inject IO; `write` is the low-level `(path, content, opts)` writer.
119
+ *
120
+ * @param {{ url: string, apiKey: string, agentUuid: string, agentName: string }} data
121
+ * @param {{ path?: string, write?: (p: string, c: string, o: object) => void, mkdir?: (p: string, o: object) => void, read?: (p: string) => string, rename?: (from: string, to: string) => void }} [deps]
122
+ */
123
+ export function writeLoginFile(data, deps = {}) {
124
+ return updateDaemonConfig(data, deps);
125
+ }
126
+
127
+ /**
128
+ * Record (or refresh) the yolo acknowledgement in the login file, preserving
129
+ * everything already on disk. Delegates to {@link updateDaemonConfig}, which
130
+ * reads the current file, merges `yoloAckAt`, and rewrites with 0600. Used by
131
+ * the daemon after an interactive TTY yolo confirmation — it does NOT touch
132
+ * url/apiKey/identity.
77
133
  *
78
- * No-silent-errors: a read/parse failure is surfaced to the caller (throws), so
79
- * the daemon can log it rather than silently losing the ack.
134
+ * A TTY user whose credentials come from env / flags has no login file yet, but
135
+ * the ack must still persist (else they'd re-confirm yolo on every start). A
136
+ * file carrying only `yoloAckAt` is harmless — resolveCredentials simply falls
137
+ * through it.
80
138
  *
81
139
  * @param {string} yoloAckAt ISO-8601 timestamp of the confirmation.
82
- * @param {{ path?: string, read?: (p: string) => string, write?: typeof writeLoginFile }} [deps]
140
+ * @param {{ path?: string, read?: (p: string) => string, write?: (p: string, c: string, o: object) => void, mkdir?: (p: string, o: object) => void, rename?: (from: string, to: string) => void }} [deps]
83
141
  * @returns {string} the file path written
84
142
  */
85
143
  export function recordYoloAck(yoloAckAt, deps = {}) {
86
- const path = deps.path ?? loginFilePath();
87
- const read = deps.read ?? ((p) => readFileSync(p, "utf8"));
88
- const write = deps.write ?? writeLoginFile;
89
- // Start from the existing file when present, else an empty object: a TTY user
90
- // whose credentials come from env / flags has no login file yet, but the ack
91
- // must still persist (else they'd re-confirm yolo on every start). A file
92
- // carrying only `yoloAckAt` is harmless — resolveCredentials simply falls
93
- // through it, and a later `chorus login` overwrites (clearing the ack).
94
- let current = {};
95
- try {
96
- const parsed = JSON.parse(read(path));
97
- if (parsed && typeof parsed === "object") current = parsed;
98
- } catch {
99
- // missing / unreadable / malformed → treat as empty (start fresh)
100
- }
101
- return write({ ...current, yoloAckAt }, { path });
144
+ return updateDaemonConfig({ yoloAckAt }, deps);
102
145
  }
103
146
 
104
147
  /**
@@ -0,0 +1,41 @@
1
+ // cli/server-signal-handlers.mjs
2
+ // The Chorus CLI entry (`chorus.mjs`) is dual-purpose: with no subcommand it
3
+ // launches the embedded Next.js server (with a PGlite child); with `daemon` /
4
+ // `login` it dispatches a client subcommand that connects OUT to a remote
5
+ // server. The server-launch path installs three process-signal handlers — a
6
+ // SIGINT/SIGTERM graceful-shutdown handler and an `exit` handler that
7
+ // force-kills the PGlite child — but those are MEANINGLESS (and actively
8
+ // harmful) on a client-subcommand process: a `chorus daemon` never starts
9
+ // PGlite, and the server's SIGINT/SIGTERM handler would otherwise pre-empt the
10
+ // daemon's OWN graceful shutdown (it runs first, in registration order, and
11
+ // calls `process.exit(0)` synchronously). See the idea / design docs.
12
+ //
13
+ // This module is intentionally PURE — it runs no side effects at import — so a
14
+ // unit test can import the function in isolation and drive it with a fake
15
+ // `process`-like object, without executing `chorus.mjs`'s import-time side
16
+ // effects (subcommand dispatch, server-config parsing) and without delivering a
17
+ // real fatal signal to the test runner.
18
+
19
+ /**
20
+ * Install the server-only process-signal handlers, but ONLY for the server
21
+ * launch path (no client subcommand). When invoked as a client subcommand
22
+ * (`chorus daemon` / `chorus login`), this registers NOTHING and returns false,
23
+ * so the process terminates exclusively through the subcommand's own handler
24
+ * (e.g. the daemon's graceful `daemon.stop()`).
25
+ *
26
+ * @param {object} params
27
+ * @param {boolean} params.isSubcommand true when a client subcommand is running.
28
+ * @param {{ on(event: string, listener: (...args: any[]) => void): unknown }} params.processRef
29
+ * the process to attach listeners to (real `process`, or a fake in tests).
30
+ * @param {(...args: any[]) => void} params.shutdown SIGINT/SIGTERM handler.
31
+ * @param {(...args: any[]) => void} params.cleanupExit `exit` handler (PGlite SIGKILL).
32
+ * @returns {boolean} true if the server handlers were installed, false if skipped.
33
+ */
34
+ export function installServerSignalHandlers({ isSubcommand, processRef, shutdown, cleanupExit }) {
35
+ // Client subcommand → install none of the server's signal handlers.
36
+ if (isSubcommand) return false;
37
+ processRef.on("SIGINT", shutdown);
38
+ processRef.on("SIGTERM", shutdown);
39
+ processRef.on("exit", cleanupExit);
40
+ return true;
41
+ }
@@ -0,0 +1,30 @@
1
+ // cli/spawner-select.mjs
2
+ // Backend selection seam: maps the resolved agent type (daemon-agent.mjs) to a
3
+ // concrete Spawner instance. This is the ONLY place the daemon branches on the
4
+ // backend — the wake pipeline above it (queue, waker, directed delivery, headless
5
+ // guard, reporters) stays backend-agnostic and drives whichever spawner is
6
+ // injected purely through the shared wake(...) contract.
7
+ //
8
+ // The function is TOTAL: resolveAgentType has already rejected unknown values
9
+ // before this runs, so an unrecognized type here is not a user error path — we
10
+ // fall back to the safe default (claude-code) rather than throw.
11
+
12
+ import { ClaudeSpawner } from "./claude-spawner.mjs";
13
+ import { CodexSpawner } from "./codex-spawner.mjs";
14
+
15
+ /**
16
+ * Construct the spawner backend for `agentType`.
17
+ * @param {string} agentType "claude-code" | "codex" (already validated upstream).
18
+ * @param {{ logger?: any, permissionMode?: "chorus"|"yolo", creds?: { url: string, apiKey: string } }} [opts]
19
+ * @returns {import("./codex-spawner.mjs").Spawner}
20
+ */
21
+ export function selectSpawner(agentType, opts = {}) {
22
+ const { logger, permissionMode, creds } = opts;
23
+ if (agentType === "codex") {
24
+ return new CodexSpawner({ logger, permissionMode, creds });
25
+ }
26
+ // Default / "claude-code": construction byte-identical to the prior daemon
27
+ // (ClaudeSpawner takes only { logger, permissionMode } — creds are not used by
28
+ // the Claude backend, which gets its key via the --mcp-config file).
29
+ return new ClaudeSpawner({ logger, permissionMode });
30
+ }