@chorus-aidlc/chorus 0.11.0 → 0.12.0

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 (665) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +443 -430
  3. package/.next/standalone/.next/app-path-routes-manifest.json +44 -42
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +43 -43
  6. package/.next/standalone/.next/routes-manifest.json +8 -0
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +2 -2
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  48. package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
  49. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/new.rsc +3 -3
  53. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/admin/companies.html +1 -1
  55. package/.next/standalone/.next/server/app/admin/companies.rsc +3 -3
  56. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/admin.html +1 -1
  58. package/.next/standalone/.next/server/app/admin.rsc +3 -3
  59. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  60. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js.nft.json +1 -1
  61. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
  63. package/.next/standalone/.next/server/app/api/admin/companies/route.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/admin/login/route.js +1 -1
  66. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/admin/session/route.js +1 -1
  68. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -1
  70. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
  73. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  76. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
  79. package/.next/standalone/.next/server/app/api/agents/route.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
  82. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
  85. package/.next/standalone/.next/server/app/api/api-keys/route.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
  88. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/auth/check-default/route.js +1 -1
  90. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/identify/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/auth/logout/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/auth/refresh/route.js +1 -1
  100. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/auth/session/route.js +1 -1
  102. package/.next/standalone/.next/server/app/api/auth/session/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/auth/sync-token/route.js +1 -1
  105. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
  110. package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  122. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  125. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  128. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  131. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  134. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -0
  137. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -0
  138. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -0
  139. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  140. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/events/route.js +1 -1
  158. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  162. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  163. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  168. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  171. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  174. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/keepalive/route.js +1 -0
  180. package/.next/standalone/.next/server/app/api/keepalive/route.js.nft.json +1 -0
  181. package/.next/standalone/.next/server/app/api/keepalive/route_client-reference-manifest.js +1 -0
  182. package/.next/standalone/.next/server/app/api/mcp/route.js +5 -5
  183. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  186. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  195. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  198. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  199. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  201. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  205. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  210. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  213. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  216. package/.next/standalone/.next/server/app/api/project-groups/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  222. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  223. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  228. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js.nft.json +1 -1
  229. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  230. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  231. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  232. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  234. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  235. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  236. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  237. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js.nft.json +1 -1
  238. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  240. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js.nft.json +1 -1
  241. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  243. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js.nft.json +1 -1
  244. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  245. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  246. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js.nft.json +1 -1
  247. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  249. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  252. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  253. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  255. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  258. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  259. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  260. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  261. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js.nft.json +1 -1
  262. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  263. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  264. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  267. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js.nft.json +1 -1
  268. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  269. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  270. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js.nft.json +1 -1
  271. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  272. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  273. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js.nft.json +1 -1
  274. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  275. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  276. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  277. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  278. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  279. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  280. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  281. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  282. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  283. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  284. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  285. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  286. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  287. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  288. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  289. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  290. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  291. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  292. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  293. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  294. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  295. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  296. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  297. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  298. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  299. package/.next/standalone/.next/server/app/index.html +1 -1
  300. package/.next/standalone/.next/server/app/index.rsc +3 -3
  301. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  302. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  303. package/.next/standalone/.next/server/app/login/admin.rsc +3 -3
  304. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  305. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  306. package/.next/standalone/.next/server/app/login/callback.rsc +4 -4
  307. package/.next/standalone/.next/server/app/login/page.js +1 -1
  308. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  309. package/.next/standalone/.next/server/app/login/pick-workspace/page.js +1 -1
  310. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  311. package/.next/standalone/.next/server/app/login/pick-workspace.html +1 -1
  312. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +4 -4
  313. package/.next/standalone/.next/server/app/login/silent-refresh/page.js +1 -1
  314. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
  315. package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
  316. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +4 -4
  317. package/.next/standalone/.next/server/app/login.html +1 -1
  318. package/.next/standalone/.next/server/app/login.rsc +4 -4
  319. package/.next/standalone/.next/server/app/onboarding/page.js +1 -1
  320. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  321. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  322. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  323. package/.next/standalone/.next/server/app/onboarding.rsc +4 -4
  324. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  325. package/.next/standalone/.next/server/app/projects.html +1 -1
  326. package/.next/standalone/.next/server/app/projects.rsc +5 -5
  327. package/.next/standalone/.next/server/app/settings.html +1 -1
  328. package/.next/standalone/.next/server/app/settings.rsc +5 -5
  329. package/.next/standalone/.next/server/app-paths-manifest.json +44 -42
  330. package/.next/standalone/.next/server/chunks/{5201.js → 1343.js} +2 -2
  331. package/.next/standalone/.next/server/chunks/1463.js +1 -0
  332. package/.next/standalone/.next/server/chunks/1596.js +2 -2
  333. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  334. package/.next/standalone/.next/server/chunks/2622.js +1 -0
  335. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  336. package/.next/standalone/.next/server/chunks/3219.js +1 -1
  337. package/.next/standalone/.next/server/chunks/3371.js +1 -1
  338. package/.next/standalone/.next/server/chunks/3419.js +1 -1
  339. package/.next/standalone/.next/server/chunks/345.js +1 -0
  340. package/.next/standalone/.next/server/chunks/4872.js +1 -0
  341. package/.next/standalone/.next/server/chunks/5300.js +1 -1
  342. package/.next/standalone/.next/server/chunks/5581.js +1 -0
  343. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  344. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  345. package/.next/standalone/.next/server/chunks/7063.js +2 -2
  346. package/.next/standalone/.next/server/chunks/7064.js +1 -0
  347. package/.next/standalone/.next/server/chunks/7160.js +1 -0
  348. package/.next/standalone/.next/server/chunks/7364.js +1 -0
  349. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  350. package/.next/standalone/.next/server/chunks/7427.js +1 -0
  351. package/.next/standalone/.next/server/chunks/7515.js +1 -0
  352. package/.next/standalone/.next/server/chunks/7578.js +2 -2
  353. package/.next/standalone/.next/server/chunks/7897.js +1 -1
  354. package/.next/standalone/.next/server/chunks/{4711.js → 796.js} +6 -6
  355. package/.next/standalone/.next/server/chunks/9161.js +1 -0
  356. package/.next/standalone/.next/server/chunks/920.js +1 -1
  357. package/.next/standalone/.next/server/chunks/937.js +3 -3
  358. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  359. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  360. package/.next/standalone/.next/server/pages/404.html +1 -1
  361. package/.next/standalone/.next/server/pages/500.html +1 -1
  362. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  363. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  364. package/.next/standalone/.next/server/src/middleware.js +1 -1
  365. package/.next/standalone/.next/static/chunks/16467-dd4f928e725306c1.js +1 -0
  366. package/.next/standalone/.next/static/chunks/20081-a2bf5c9f24d5d589.js +1 -0
  367. package/.next/standalone/.next/static/chunks/2280-f48bf99ea9d88ece.js +1 -0
  368. package/.next/standalone/.next/static/chunks/26394-4af487a51dd62832.js +1 -0
  369. package/.next/standalone/.next/static/chunks/27378-9328bcc96ae9872e.js +1 -0
  370. package/.next/standalone/.next/static/chunks/32497-886aa4d3d7bf4967.js +1 -0
  371. package/.next/standalone/.next/static/chunks/37784-95dee37276b1067b.js +1 -0
  372. package/.next/standalone/.next/static/chunks/40867-04cc0d00205eaf9b.js +1 -0
  373. package/.next/standalone/.next/static/chunks/42111-1935df3b0dab2095.js +1 -0
  374. package/.next/standalone/.next/static/chunks/4860.f4242c493fcf182d.js +1 -0
  375. package/.next/standalone/.next/static/chunks/54637-71d281d649ea3a17.js +1 -0
  376. package/.next/standalone/.next/static/chunks/6239-d78e6f830ce0a7f8.js +1 -0
  377. package/.next/standalone/.next/static/chunks/64187-cff8a4b5e96fa8f9.js +10 -0
  378. package/.next/standalone/.next/static/chunks/78917-2b959ab0a7f610b4.js +1 -0
  379. package/.next/standalone/.next/static/chunks/80904-973284d1fe916c38.js +1 -0
  380. package/.next/standalone/.next/static/chunks/88561-0b14e1564419f215.js +1 -0
  381. package/.next/standalone/.next/static/chunks/89035-faf398b7bbc7d2ed.js +1 -0
  382. package/.next/standalone/.next/static/chunks/89644-2fee0373b890e8e3.js +1 -0
  383. package/.next/standalone/.next/static/chunks/{93346-5489d90bc2d57190.js → 93346-b3e1ebe948fc623f.js} +1 -1
  384. package/.next/standalone/.next/static/chunks/97868-9406a4014b667c2d.js +1 -0
  385. package/.next/standalone/.next/static/chunks/99373.880b43de1fa6411f.js +1 -0
  386. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-f04d5fa070f15acd.js +1 -0
  387. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-2944c6c9bc48a7d6.js +1 -0
  388. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-f1b0daea9f947caf.js +1 -0
  389. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-c4271886ef004611.js +1 -0
  390. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-7a8b60de97bfbd29.js +1 -0
  391. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-6620b9d7a2cc766f.js +1 -0
  392. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-0a55289b2bc510c2.js +1 -0
  393. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-5d09141beb5d6aee.js +1 -0
  394. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-d5c3dde34d6291a8.js +1 -0
  395. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-0da08d8b425acb6a.js +1 -0
  396. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-583e58d4d689d38b.js → page-fec019d974ef8d4e.js} +1 -1
  397. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-44014947a679f91c.js +1 -0
  398. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-f1b0daea9f947caf.js +1 -0
  399. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-f1b0daea9f947caf.js +1 -0
  400. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-f1b0daea9f947caf.js +1 -0
  401. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-f1b0daea9f947caf.js +1 -0
  402. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-f1b0daea9f947caf.js +1 -0
  403. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-f1b0daea9f947caf.js +1 -0
  404. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-f1b0daea9f947caf.js +1 -0
  405. package/.next/standalone/.next/static/chunks/app/api/agents/route-f1b0daea9f947caf.js +1 -0
  406. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-f1b0daea9f947caf.js +1 -0
  407. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-f1b0daea9f947caf.js +1 -0
  408. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-f1b0daea9f947caf.js +1 -0
  409. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-f1b0daea9f947caf.js +1 -0
  410. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-f1b0daea9f947caf.js +1 -0
  411. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-f1b0daea9f947caf.js +1 -0
  412. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-f1b0daea9f947caf.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-f1b0daea9f947caf.js +1 -0
  414. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-f1b0daea9f947caf.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-f1b0daea9f947caf.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-f1b0daea9f947caf.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-f1b0daea9f947caf.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/api/comments/route-f1b0daea9f947caf.js +1 -0
  419. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-f1b0daea9f947caf.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-f1b0daea9f947caf.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-f1b0daea9f947caf.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-f1b0daea9f947caf.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-f1b0daea9f947caf.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-f1b0daea9f947caf.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-f1b0daea9f947caf.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-f1b0daea9f947caf.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-f1b0daea9f947caf.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-f1b0daea9f947caf.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-f1b0daea9f947caf.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-f1b0daea9f947caf.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-f1b0daea9f947caf.js +1 -0
  432. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-f1b0daea9f947caf.js +1 -0
  433. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-f1b0daea9f947caf.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-f1b0daea9f947caf.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/api/events/route-f1b0daea9f947caf.js +1 -0
  436. package/.next/standalone/.next/static/chunks/app/api/health/route-f1b0daea9f947caf.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-f1b0daea9f947caf.js +1 -0
  438. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-f1b0daea9f947caf.js +1 -0
  439. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-f1b0daea9f947caf.js +1 -0
  440. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-f1b0daea9f947caf.js +1 -0
  441. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-f1b0daea9f947caf.js +1 -0
  442. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-f1b0daea9f947caf.js +1 -0
  443. package/.next/standalone/.next/static/chunks/app/api/keepalive/route-f1b0daea9f947caf.js +1 -0
  444. package/.next/standalone/.next/static/chunks/app/api/mcp/route-f1b0daea9f947caf.js +1 -0
  445. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-f1b0daea9f947caf.js +1 -0
  446. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-f1b0daea9f947caf.js +1 -0
  447. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-f1b0daea9f947caf.js +1 -0
  448. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-f1b0daea9f947caf.js +1 -0
  449. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-f1b0daea9f947caf.js +1 -0
  450. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-f1b0daea9f947caf.js +1 -0
  451. package/.next/standalone/.next/static/chunks/app/api/notifications/route-f1b0daea9f947caf.js +1 -0
  452. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-f1b0daea9f947caf.js +1 -0
  453. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-f1b0daea9f947caf.js +1 -0
  454. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-f1b0daea9f947caf.js +1 -0
  455. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-f1b0daea9f947caf.js +1 -0
  456. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-f1b0daea9f947caf.js +1 -0
  457. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-f1b0daea9f947caf.js +1 -0
  458. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-f1b0daea9f947caf.js +1 -0
  459. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-f1b0daea9f947caf.js +1 -0
  460. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-f1b0daea9f947caf.js +1 -0
  461. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-f1b0daea9f947caf.js +1 -0
  462. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-f1b0daea9f947caf.js +1 -0
  463. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-f1b0daea9f947caf.js +1 -0
  464. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-f1b0daea9f947caf.js +1 -0
  465. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-f1b0daea9f947caf.js +1 -0
  466. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-f1b0daea9f947caf.js +1 -0
  467. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-f1b0daea9f947caf.js +1 -0
  468. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-f1b0daea9f947caf.js +1 -0
  469. package/.next/standalone/.next/static/chunks/app/api/projects/route-f1b0daea9f947caf.js +1 -0
  470. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-f1b0daea9f947caf.js +1 -0
  471. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-f1b0daea9f947caf.js +1 -0
  472. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-f1b0daea9f947caf.js +1 -0
  473. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-f1b0daea9f947caf.js +1 -0
  474. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-f1b0daea9f947caf.js +1 -0
  475. package/.next/standalone/.next/static/chunks/app/api/search/route-f1b0daea9f947caf.js +1 -0
  476. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-f1b0daea9f947caf.js +1 -0
  477. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-f1b0daea9f947caf.js +1 -0
  478. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-f1b0daea9f947caf.js +1 -0
  479. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-f1b0daea9f947caf.js +1 -0
  480. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-f1b0daea9f947caf.js +1 -0
  481. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-f1b0daea9f947caf.js +1 -0
  482. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-f1b0daea9f947caf.js +1 -0
  483. package/.next/standalone/.next/static/chunks/app/layout-e3a49e06950a057f.js +1 -0
  484. package/.next/standalone/.next/static/chunks/app/login/callback/{page-0edd93f50cb4f6ea.js → page-6cad93f5c610b047.js} +1 -1
  485. package/.next/standalone/.next/static/chunks/app/login/{page-c64b8d40a0781b4c.js → page-e7493d55573a52f1.js} +1 -1
  486. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/{page-e0444ad8b50121f5.js → page-597e0f3377f18d29.js} +1 -1
  487. package/.next/standalone/.next/static/chunks/app/login/silent-refresh/{page-a9960ea858db6752.js → page-a26d1af61578c96e.js} +1 -1
  488. package/.next/standalone/.next/static/chunks/app/onboarding/page-9a41067d4c5d29d7.js +1 -0
  489. package/.next/standalone/.next/static/chunks/{webpack-87284a4533d77eaf.js → webpack-1556cfd11f7e90d1.js} +1 -1
  490. package/.next/standalone/.next/static/css/6e8fd46b062fd4fc.css +1 -0
  491. package/.next/standalone/.next/static/v1yRpXkt1wNBkZMTE3tiz/_buildManifest.js +1 -0
  492. package/.next/standalone/package.json +1 -1
  493. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +13 -1
  494. package/.next/standalone/public/chorus-plugin/agents/code-reviewer.md +167 -0
  495. package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +97 -17
  496. package/.next/standalone/public/chorus-plugin/bin/tests/test-on-post-verify-task.sh +191 -1
  497. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  498. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +7 -4
  499. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +3 -1
  500. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
  501. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  502. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +5 -1
  503. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  504. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +12 -3
  505. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +40 -1
  506. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  507. package/.next/standalone/public/skill/chorus/SKILL.md +16 -11
  508. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +225 -0
  509. package/.next/standalone/public/skill/develop-chorus/SKILL.md +3 -1
  510. package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
  511. package/.next/standalone/public/skill/package.json +2 -0
  512. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +5 -1
  513. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  514. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  515. package/.next/standalone/public/skill/review-chorus/SKILL.md +12 -1
  516. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  517. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +35 -1
  518. package/README.md +49 -13
  519. package/README.zh.md +49 -13
  520. package/chorus.mjs +30 -14
  521. package/cli/client-args.mjs +17 -1
  522. package/cli/daemon-banner.mjs +11 -1
  523. package/cli/daemon-config.mjs +118 -0
  524. package/cli/daemon.mjs +216 -154
  525. package/cli/event-router.mjs +273 -12
  526. package/cli/server-signal-handlers.mjs +41 -0
  527. package/cli/sse-listener.mjs +27 -5
  528. package/cli/waker.mjs +36 -8
  529. package/package.json +1 -1
  530. package/prisma/migrations/20260622115159_add_daemon_connection_cwd/migration.sql +9 -0
  531. package/prisma/migrations/20260623020208_task_pinned_target_instance/migration.sql +3 -0
  532. package/prisma/migrations/20260624142248_add_agent_instance/migration.sql +31 -0
  533. package/prisma/migrations/20260624165025_drop_task_target_host_cwd/migration.sql +10 -0
  534. package/prisma/schema.prisma +69 -3
  535. package/.next/standalone/.next/server/chunks/1064.js +0 -1
  536. package/.next/standalone/.next/server/chunks/2213.js +0 -1
  537. package/.next/standalone/.next/server/chunks/369.js +0 -1
  538. package/.next/standalone/.next/server/chunks/5039.js +0 -1
  539. package/.next/standalone/.next/server/chunks/5631.js +0 -1
  540. package/.next/standalone/.next/server/chunks/6461.js +0 -1
  541. package/.next/standalone/.next/server/chunks/6712.js +0 -1
  542. package/.next/standalone/.next/server/chunks/7867.js +0 -1
  543. package/.next/standalone/.next/server/chunks/8012.js +0 -1
  544. package/.next/standalone/.next/server/chunks/9629.js +0 -1
  545. package/.next/standalone/.next/server/chunks/9725.js +0 -1
  546. package/.next/standalone/.next/static/519aK55QLHaVN7b1TVDkB/_buildManifest.js +0 -1
  547. package/.next/standalone/.next/static/chunks/1217-323cc20b73ebfde9.js +0 -1
  548. package/.next/standalone/.next/static/chunks/16984-8ab5580b8e63a200.js +0 -1
  549. package/.next/standalone/.next/static/chunks/1879-7a8b283283218df2.js +0 -1
  550. package/.next/standalone/.next/static/chunks/19276-50b367d7b93d5f34.js +0 -1
  551. package/.next/standalone/.next/static/chunks/23466-e1176a6d814f4897.js +0 -1
  552. package/.next/standalone/.next/static/chunks/38040-a8687f86dd8e9d67.js +0 -1
  553. package/.next/standalone/.next/static/chunks/4860.43f5ad8a3aaed0e8.js +0 -1
  554. package/.next/standalone/.next/static/chunks/59296-783831c43aa0162e.js +0 -1
  555. package/.next/standalone/.next/static/chunks/60648-36ccbee4ce232d52.js +0 -1
  556. package/.next/standalone/.next/static/chunks/60694-68232120903209df.js +0 -1
  557. package/.next/standalone/.next/static/chunks/64648-81f03be6f9793ab9.js +0 -1
  558. package/.next/standalone/.next/static/chunks/66205-8d7eae6a0f0a032d.js +0 -1
  559. package/.next/standalone/.next/static/chunks/66969-12f0b22c51f5a410.js +0 -1
  560. package/.next/standalone/.next/static/chunks/70536-b8bf71098ae11f07.js +0 -1
  561. package/.next/standalone/.next/static/chunks/76803-7ac4024b2ae89843.js +0 -1
  562. package/.next/standalone/.next/static/chunks/78389-b32edc6bd5c570a9.js +0 -1
  563. package/.next/standalone/.next/static/chunks/78584-eb2fa8cf2f266329.js +0 -1
  564. package/.next/standalone/.next/static/chunks/78917-150ed14a99844aab.js +0 -1
  565. package/.next/standalone/.next/static/chunks/84541-1f4c2a40f7722667.js +0 -10
  566. package/.next/standalone/.next/static/chunks/8574-b9739eb8d054c793.js +0 -1
  567. package/.next/standalone/.next/static/chunks/99373.0768feb3a08c7da3.js +0 -1
  568. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-0a28456fea4ce95a.js +0 -1
  569. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-a79969c5c9aadacd.js +0 -1
  570. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-4bc556c2fc8f3d24.js +0 -1
  571. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-e00752a72c31663f.js +0 -1
  572. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-ef82b871895245ea.js +0 -1
  573. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-2c9bcbd11ddb8661.js +0 -1
  574. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-630b168598513ce8.js +0 -1
  575. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-335f2450e44a0fba.js +0 -1
  576. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-4a191d69b2b6e880.js +0 -1
  577. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-0faebb478be4c85d.js +0 -1
  578. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2e8fcb72687100df.js +0 -1
  579. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  580. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-4bc556c2fc8f3d24.js +0 -1
  581. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-4bc556c2fc8f3d24.js +0 -1
  582. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-4bc556c2fc8f3d24.js +0 -1
  583. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-4bc556c2fc8f3d24.js +0 -1
  584. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  585. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-4bc556c2fc8f3d24.js +0 -1
  586. package/.next/standalone/.next/static/chunks/app/api/agents/route-4bc556c2fc8f3d24.js +0 -1
  587. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  588. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-4bc556c2fc8f3d24.js +0 -1
  589. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-4bc556c2fc8f3d24.js +0 -1
  590. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-4bc556c2fc8f3d24.js +0 -1
  591. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-4bc556c2fc8f3d24.js +0 -1
  592. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-4bc556c2fc8f3d24.js +0 -1
  593. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-4bc556c2fc8f3d24.js +0 -1
  594. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-4bc556c2fc8f3d24.js +0 -1
  595. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-4bc556c2fc8f3d24.js +0 -1
  596. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-4bc556c2fc8f3d24.js +0 -1
  597. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-4bc556c2fc8f3d24.js +0 -1
  598. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-4bc556c2fc8f3d24.js +0 -1
  599. package/.next/standalone/.next/static/chunks/app/api/comments/route-4bc556c2fc8f3d24.js +0 -1
  600. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-4bc556c2fc8f3d24.js +0 -1
  601. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-4bc556c2fc8f3d24.js +0 -1
  602. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-4bc556c2fc8f3d24.js +0 -1
  603. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-4bc556c2fc8f3d24.js +0 -1
  604. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-4bc556c2fc8f3d24.js +0 -1
  605. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-4bc556c2fc8f3d24.js +0 -1
  606. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-4bc556c2fc8f3d24.js +0 -1
  607. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-4bc556c2fc8f3d24.js +0 -1
  608. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-4bc556c2fc8f3d24.js +0 -1
  609. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-4bc556c2fc8f3d24.js +0 -1
  610. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-4bc556c2fc8f3d24.js +0 -1
  611. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-4bc556c2fc8f3d24.js +0 -1
  612. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  613. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-4bc556c2fc8f3d24.js +0 -1
  614. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-4bc556c2fc8f3d24.js +0 -1
  615. package/.next/standalone/.next/static/chunks/app/api/events/route-4bc556c2fc8f3d24.js +0 -1
  616. package/.next/standalone/.next/static/chunks/app/api/health/route-4bc556c2fc8f3d24.js +0 -1
  617. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-4bc556c2fc8f3d24.js +0 -1
  618. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-4bc556c2fc8f3d24.js +0 -1
  619. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-4bc556c2fc8f3d24.js +0 -1
  620. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-4bc556c2fc8f3d24.js +0 -1
  621. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-4bc556c2fc8f3d24.js +0 -1
  622. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  623. package/.next/standalone/.next/static/chunks/app/api/mcp/route-4bc556c2fc8f3d24.js +0 -1
  624. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-4bc556c2fc8f3d24.js +0 -1
  625. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-4bc556c2fc8f3d24.js +0 -1
  626. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-4bc556c2fc8f3d24.js +0 -1
  627. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-4bc556c2fc8f3d24.js +0 -1
  628. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-4bc556c2fc8f3d24.js +0 -1
  629. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-4bc556c2fc8f3d24.js +0 -1
  630. package/.next/standalone/.next/static/chunks/app/api/notifications/route-4bc556c2fc8f3d24.js +0 -1
  631. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-4bc556c2fc8f3d24.js +0 -1
  632. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-4bc556c2fc8f3d24.js +0 -1
  633. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  634. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-4bc556c2fc8f3d24.js +0 -1
  635. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-4bc556c2fc8f3d24.js +0 -1
  636. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-4bc556c2fc8f3d24.js +0 -1
  637. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-4bc556c2fc8f3d24.js +0 -1
  638. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-4bc556c2fc8f3d24.js +0 -1
  639. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-4bc556c2fc8f3d24.js +0 -1
  640. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-4bc556c2fc8f3d24.js +0 -1
  641. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-4bc556c2fc8f3d24.js +0 -1
  642. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-4bc556c2fc8f3d24.js +0 -1
  643. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-4bc556c2fc8f3d24.js +0 -1
  644. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  645. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-4bc556c2fc8f3d24.js +0 -1
  646. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-4bc556c2fc8f3d24.js +0 -1
  647. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-4bc556c2fc8f3d24.js +0 -1
  648. package/.next/standalone/.next/static/chunks/app/api/projects/route-4bc556c2fc8f3d24.js +0 -1
  649. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-4bc556c2fc8f3d24.js +0 -1
  650. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-4bc556c2fc8f3d24.js +0 -1
  651. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-4bc556c2fc8f3d24.js +0 -1
  652. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-4bc556c2fc8f3d24.js +0 -1
  653. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  654. package/.next/standalone/.next/static/chunks/app/api/search/route-4bc556c2fc8f3d24.js +0 -1
  655. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  656. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-4bc556c2fc8f3d24.js +0 -1
  657. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-4bc556c2fc8f3d24.js +0 -1
  658. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-4bc556c2fc8f3d24.js +0 -1
  659. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-4bc556c2fc8f3d24.js +0 -1
  660. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-4bc556c2fc8f3d24.js +0 -1
  661. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-4bc556c2fc8f3d24.js +0 -1
  662. package/.next/standalone/.next/static/chunks/app/layout-9963339572e2e64e.js +0 -1
  663. package/.next/standalone/.next/static/chunks/app/onboarding/page-e9a69a0c537c704f.js +0 -1
  664. package/.next/standalone/.next/static/css/e78b3c856420a09f.css +0 -1
  665. /package/.next/standalone/.next/static/{519aK55QLHaVN7b1TVDkB → v1yRpXkt1wNBkZMTE3tiz}/_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
@@ -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
+ }
@@ -8,11 +8,19 @@
8
8
  // API key; data lines are `data: <json>\n\n`, heartbeats are `: ...` comments.
9
9
  //
10
10
  // Self-report: the listener appends ?clientType=claude_code&clientVersion=…&
11
- // host=…&startedAt=… to the endpoint so the server's DaemonConnection registry
12
- // (src/services/daemon-connection.service.ts → parseSelfReport) can record which
13
- // client is on the other end. The CLI reports clientType=claude_code (it only
14
- // drives a local Claude Code subprocess — not a generic "daemon"). These params
15
- // are display-only metadata; auth remains the unchanged Bearer header.
11
+ // host=…&cwd=…&startedAt=… to the endpoint so the server's DaemonConnection
12
+ // registry (src/services/daemon-connection.service.ts → parseSelfReport) can
13
+ // record which client is on the other end. The CLI reports clientType=claude_code
14
+ // (it only drives a local Claude Code subprocess — not a generic "daemon"). These
15
+ // params are display-only metadata; auth remains the unchanged Bearer header.
16
+ //
17
+ // `cwd` is the working directory this daemon connection serves. Today the CLI
18
+ // runs single-cwd (the directory it was launched from), so it reports
19
+ // `process.cwd()`. The server keys the connection registry on
20
+ // (agentUuid, clientType, host, cwd) — so the same agent on the same host driving
21
+ // two different working directories registers as two independent connections
22
+ // instead of overwriting each other. An *older* daemon that does not send `cwd`
23
+ // registers as a `cwd=null` row (HARD-1: no error, behaves exactly as before).
16
24
 
17
25
  import { readFileSync } from "node:fs";
18
26
  import { hostname } from "node:os";
@@ -63,6 +71,12 @@ const PROCESS_STARTED_AT = new Date();
63
71
  * connection + entity and interrupts the running subprocess (see control-handler.mjs).
64
72
  * @property {() => Promise<void>} [onReconnect] Called after a reconnect so the
65
73
  * caller can back-fill notifications missed during the gap.
74
+ * @property {string} [cwd] The working directory THIS connection serves (T3 — 单
75
+ * daemon 多路径). A multi-path daemon runs one SseListener per declared path, each
76
+ * self-reporting its own cwd so the server registers them as distinct connections
77
+ * (the registry key includes cwd). Omitted ⇒ the daemon's process cwd (single-path
78
+ * / HARD-1 default — identical to today). It is JUST the served path; it carries no
79
+ * project binding (DEC-5: cwd ⟂ project).
66
80
  * @property {{info(m:string):void,warn(m:string):void,error(m:string):void}} [logger]
67
81
  * @property {typeof fetch} [fetchImpl] Injectable for tests.
68
82
  * @property {number} [initialDelayMs]
@@ -87,10 +101,18 @@ export class SseListener {
87
101
 
88
102
  // Build the self-reporting endpoint URL once and reuse it across every
89
103
  // (re)connect, so the reconnect path always re-sends the same params.
104
+ // Working directory THIS connection serves. A multi-path daemon (T3) constructs
105
+ // one SseListener per declared path, each with its own `opts.cwd`, so the server's
106
+ // (agentUuid, clientType, host, cwd) registry key lands them as distinct rows —
107
+ // same agent + same host + different cwd no longer overwrite each other. When no
108
+ // cwd is supplied the daemon is single-path: report the process cwd (the directory
109
+ // it was launched from), identical to today / an old daemon (HARD-1).
110
+ this.cwd = opts.cwd ?? process.cwd();
90
111
  const params = new URLSearchParams({
91
112
  clientType: "claude_code",
92
113
  clientVersion: CLI_VERSION,
93
114
  host: hostname(),
115
+ cwd: this.cwd,
94
116
  startedAt: PROCESS_STARTED_AT.toISOString(),
95
117
  });
96
118
  this.endpoint = `${this.url}/api/events/notifications?${params.toString()}`;
package/cli/waker.mjs CHANGED
@@ -28,7 +28,7 @@ export class Waker {
28
28
  * creds: { url: string, apiKey: string },
29
29
  * lineage: { resolve: (event: any) => Promise<{ rootIdeaUuid: string|null, directIdeaUuid: string|null }> },
30
30
  * spawner: { wake: (params: any) => Promise<{ sessionId: string, exitCode: number|null, isNew: boolean }> },
31
- * cwd?: string, Spawn working directory; used BOTH for the transcript probe and the spawn (default process.cwd()).
31
+ * cwd?: string, The connection/session-bound working directory this Waker serves; resolveCwd() is the single source the probe + spawn + resume use. `undefined` ⇒ the process default cwd (HARD-1 / single-path).
32
32
  * hooks?: import("./upload-hooks.mjs").UploadHooks,
33
33
  * logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
34
34
  * writeMcpConfigFn?: typeof writeMcpConfig,
@@ -54,10 +54,14 @@ export class Waker {
54
54
  // line per lifecycle event (arrival / spawn new-vs-resume / completion).
55
55
  // When true, additional detail is emitted alongside those lines.
56
56
  this.verbose = opts.verbose ?? false;
57
- // The daemon spawns in one fixed working directory; the transcript probe must
58
- // use the SAME cwd as the spawn, or it would decide new-vs-resume against the
59
- // wrong directory (claude scopes --resume to cwd).
60
- this.cwd = opts.cwd ?? process.cwd();
57
+ // The connection/session-bound working directory this Waker serves (T3
58
+ // daemon 多路径引擎). A daemon process may run SEVERAL Wakers, one per declared
59
+ // path, each pinned to its own cwd; the daemon process's OWN cwd never changes
60
+ // (NFR-3). `opts.cwd` is that bound path; `undefined` (unspecified / old daemon /
61
+ // single-path default) degrades to the process cwd via resolveCwd(). Stored raw
62
+ // so resolveCwd() is the SINGLE place the process-default fallback is applied
63
+ // (Module Contract 1 — one cwd source of truth, no scattered process.cwd()).
64
+ this.cwd = opts.cwd;
61
65
  this.hooks = opts.hooks;
62
66
  this.logger = opts.logger ?? NOOP_LOGGER;
63
67
  this.writeMcpConfigFn = opts.writeMcpConfigFn ?? writeMcpConfig;
@@ -105,6 +109,25 @@ export class Waker {
105
109
  this.executions = new Map();
106
110
  }
107
111
 
112
+ /**
113
+ * The SINGLE source of truth for this Waker's working directory (Module Contract
114
+ * 1 — 不变式安全 / cwd 事实源统一). transcript probing (new-vs-resume), spawn, and
115
+ * resume ALL resolve cwd through here, so they can never diverge — a divergence
116
+ * would make the on-disk transcript probe decide new-vs-resume against a different
117
+ * directory than the one we spawn in (`claude --resume` is cwd-bound).
118
+ *
119
+ * Returns the connection/session-bound cwd when one was declared, else the daemon
120
+ * process's own cwd. The process-default fallback lives ONLY here: `this.cwd` is
121
+ * stored raw (possibly `undefined`) and `process.cwd()` is read at exactly this one
122
+ * site — Module Contract 2's HARD-1 degrade path (an old daemon / unspecified cwd
123
+ * behaves exactly as today, spawning at the process default). No other code in the
124
+ * wake path reads `process.cwd()`.
125
+ * @returns {string}
126
+ */
127
+ resolveCwd() {
128
+ return this.cwd ?? process.cwd();
129
+ }
130
+
108
131
  /**
109
132
  * Mark a running entity as INTERRUPTING (子3) — called by the control handler the
110
133
  * moment an authorized interrupt is verified, BEFORE the killer signals the child.
@@ -295,7 +318,12 @@ export class Waker {
295
318
  // spawn in. The spawner re-validates the id is a lowercase UUID before
296
319
  // spawning, so a garbage id surfaces visibly rather than misanchoring.
297
320
  const sessionId = directIdeaUuid ?? notification.entityUuid ?? null;
298
- const isNew = sessionId ? this.isNewSessionFn(sessionId, this.cwd) : true;
321
+ // Resolve the connection/session-bound cwd ONCE for this wake (Module Contract
322
+ // 1). The transcript probe and the spawn below BOTH use this same value, so a
323
+ // session's repeated wakes/probes always land the same cwd (NFR-3) — and a
324
+ // multi-path daemon's other Wakers (other cwds) never bleed in.
325
+ const cwd = this.resolveCwd();
326
+ const isNew = sessionId ? this.isNewSessionFn(sessionId, cwd) : true;
299
327
 
300
328
  // Lifecycle line 2 — spawn: new vs resume, plus the (otherwise hidden)
301
329
  // `claude --resume <id>` takeover hint so an operator can attach to the
@@ -305,7 +333,7 @@ export class Waker {
305
333
  (sessionId ? ` — take over with: claude --resume ${sessionId}` : "")
306
334
  );
307
335
  if (this.verbose) {
308
- this.logger.info(`[Chorus] cwd=${this.cwd} action=${notification.action} root=${rootIdeaUuid ?? "(none)"}`);
336
+ this.logger.info(`[Chorus] cwd=${cwd} action=${notification.action} root=${rootIdeaUuid ?? "(none)"}`);
309
337
  }
310
338
 
311
339
  cfg = this.writeMcpConfigFn(this.creds);
@@ -331,7 +359,7 @@ export class Waker {
331
359
  prompt,
332
360
  sessionId,
333
361
  isNew,
334
- cwd: this.cwd,
362
+ cwd,
335
363
  mcpConfigPath: cfg.path,
336
364
  // Capture the live child into the running execution entry the instant it
337
365
  // spawns (子3) so the control handler can interrupt it mid-wake. Guarded so
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chorus-aidlc/chorus",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "The Agent Harness for AI-Human Collaboration — session lifecycle, task state, sub-agent orchestration, observability, and failure recovery",
5
5
  "homepage": "https://github.com/Chorus-AIDLC/Chorus",
6
6
  "repository": {
@@ -0,0 +1,9 @@
1
+ -- DropIndex
2
+ DROP INDEX "DaemonConnection_agentUuid_clientType_host_key";
3
+
4
+ -- AlterTable
5
+ ALTER TABLE "DaemonConnection" ADD COLUMN "cwd" TEXT;
6
+
7
+ -- CreateIndex
8
+ CREATE UNIQUE INDEX "DaemonConnection_agentUuid_clientType_host_cwd_key" ON "DaemonConnection"("agentUuid", "clientType", "host", "cwd");
9
+
@@ -0,0 +1,3 @@
1
+ -- AlterTable
2
+ ALTER TABLE "Task" ADD COLUMN "targetCwd" TEXT,
3
+ ADD COLUMN "targetHost" TEXT;
@@ -0,0 +1,31 @@
1
+ -- AlterTable
2
+ ALTER TABLE "DaemonConnection" ADD COLUMN "agentInstanceUuid" TEXT;
3
+
4
+ -- CreateTable
5
+ CREATE TABLE "AgentInstance" (
6
+ "id" SERIAL NOT NULL,
7
+ "uuid" TEXT NOT NULL,
8
+ "companyUuid" TEXT NOT NULL,
9
+ "agentUuid" TEXT NOT NULL,
10
+ "host" TEXT NOT NULL DEFAULT '',
11
+ "cwd" TEXT,
12
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
13
+ "updatedAt" TIMESTAMP(3) NOT NULL,
14
+
15
+ CONSTRAINT "AgentInstance_pkey" PRIMARY KEY ("id")
16
+ );
17
+
18
+ -- CreateIndex
19
+ CREATE UNIQUE INDEX "AgentInstance_uuid_key" ON "AgentInstance"("uuid");
20
+
21
+ -- CreateIndex
22
+ CREATE INDEX "AgentInstance_companyUuid_idx" ON "AgentInstance"("companyUuid");
23
+
24
+ -- CreateIndex
25
+ CREATE INDEX "AgentInstance_agentUuid_idx" ON "AgentInstance"("agentUuid");
26
+
27
+ -- CreateIndex
28
+ CREATE UNIQUE INDEX "AgentInstance_companyUuid_agentUuid_host_cwd_key" ON "AgentInstance"("companyUuid", "agentUuid", "host", "cwd");
29
+
30
+ -- CreateIndex
31
+ CREATE INDEX "DaemonConnection_agentInstanceUuid_idx" ON "DaemonConnection"("agentInstanceUuid");
@@ -0,0 +1,10 @@
1
+ /*
2
+ Warnings:
3
+
4
+ - You are about to drop the column `targetCwd` on the `Task` table. All the data in the column will be lost.
5
+ - You are about to drop the column `targetHost` on the `Task` table. All the data in the column will be lost.
6
+
7
+ */
8
+ -- AlterTable
9
+ ALTER TABLE "Task" DROP COLUMN "targetCwd",
10
+ DROP COLUMN "targetHost";