@chorus-aidlc/chorus 0.19.0 → 0.20.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 (563) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +334 -335
  3. package/.next/standalone/.next/app-path-routes-manifest.json +30 -30
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +21 -21
  6. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +2 -2
  43. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  46. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  50. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  51. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page.js +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/admin/companies/new/page.js +1 -1
  54. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  55. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  56. package/.next/standalone/.next/server/app/admin/companies/new.rsc +3 -3
  57. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  59. package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
  60. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/admin.html +2 -2
  62. package/.next/standalone/.next/server/app/admin.rsc +2 -2
  63. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js.nft.json +1 -1
  65. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
  67. package/.next/standalone/.next/server/app/api/admin/companies/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -1
  72. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
  75. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js.nft.json +1 -1
  76. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  78. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/agents/route.js.nft.json +1 -1
  82. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
  84. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
  87. package/.next/standalone/.next/server/app/api/api-keys/route.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/auth/check-default/route_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_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  98. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
  102. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
  104. package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -1
  110. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  111. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  122. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  125. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  126. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  128. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  129. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js +1 -1
  131. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
  132. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js +1 -1
  134. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  137. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  138. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
  140. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
  141. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
  158. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/events/route.js +2 -2
  161. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  166. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  168. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  169. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  171. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  172. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  174. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  175. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  176. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  177. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  178. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  180. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  181. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  182. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js +1 -1
  183. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
  184. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
  186. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
  187. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
  189. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  190. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  192. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  193. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  194. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  195. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  196. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  198. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  199. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  201. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  205. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  210. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  213. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  216. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  222. package/.next/standalone/.next/server/app/api/project-groups/route.js.nft.json +1 -1
  223. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/project-visits/pin/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/project-visits/pin/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/api/project-visits/route.js +1 -1
  228. package/.next/standalone/.next/server/app/api/project-visits/route.js.nft.json +1 -1
  229. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
  230. package/.next/standalone/.next/server/app/api/project-visits/visit/route.js +1 -1
  231. package/.next/standalone/.next/server/app/api/project-visits/visit/route.js.nft.json +1 -1
  232. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  234. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js.nft.json +1 -1
  235. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  236. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js +1 -1
  237. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
  238. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  240. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  241. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  242. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  243. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js.nft.json +1 -1
  244. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  245. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  246. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js.nft.json +1 -1
  247. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  248. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  249. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  250. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  251. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  252. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  253. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  254. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  255. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js.nft.json +1 -1
  256. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  257. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  258. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js.nft.json +1 -1
  259. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  260. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  261. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js.nft.json +1 -1
  262. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  263. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
  264. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
  265. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  267. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js.nft.json +1 -1
  268. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  269. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  270. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js.nft.json +1 -1
  271. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  272. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  273. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  274. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  275. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  276. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  277. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  278. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js +1 -1
  279. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
  280. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
  281. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  282. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  283. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  284. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  285. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js.nft.json +1 -1
  286. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  287. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  288. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js.nft.json +1 -1
  289. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  290. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  291. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js.nft.json +1 -1
  292. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  293. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  294. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js.nft.json +1 -1
  295. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  296. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  297. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js.nft.json +1 -1
  298. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  299. package/.next/standalone/.next/server/app/api/references/[uuid]/route.js +1 -1
  300. package/.next/standalone/.next/server/app/api/references/[uuid]/route.js.nft.json +1 -1
  301. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  302. package/.next/standalone/.next/server/app/api/references/route.js +1 -1
  303. package/.next/standalone/.next/server/app/api/references/route.js.nft.json +1 -1
  304. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  305. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  306. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  307. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  308. package/.next/standalone/.next/server/app/api/session/route.js +1 -1
  309. package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
  310. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  311. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  312. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  313. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  314. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  315. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  316. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  317. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  318. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  319. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  320. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  321. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  322. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  323. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  324. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  325. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  326. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  327. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  328. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  329. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  330. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  331. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  332. package/.next/standalone/.next/server/app/index.html +2 -2
  333. package/.next/standalone/.next/server/app/index.rsc +2 -2
  334. package/.next/standalone/.next/server/app/login/admin/page.js +1 -1
  335. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  336. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  337. package/.next/standalone/.next/server/app/login/admin.rsc +3 -3
  338. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  339. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  340. package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
  341. package/.next/standalone/.next/server/app/login/page.js +1 -1
  342. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  343. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  344. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  345. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
  346. package/.next/standalone/.next/server/app/login.html +2 -2
  347. package/.next/standalone/.next/server/app/login.rsc +3 -3
  348. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  349. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  350. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  351. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  352. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  353. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  354. package/.next/standalone/.next/server/app/projects.html +2 -2
  355. package/.next/standalone/.next/server/app/projects.rsc +4 -4
  356. package/.next/standalone/.next/server/app/settings.html +2 -2
  357. package/.next/standalone/.next/server/app/settings.rsc +4 -4
  358. package/.next/standalone/.next/server/app-paths-manifest.json +30 -30
  359. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  360. package/.next/standalone/.next/server/chunks/186.js +1 -0
  361. package/.next/standalone/.next/server/chunks/2572.js +2 -2
  362. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  363. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  364. package/.next/standalone/.next/server/chunks/3371.js +1 -0
  365. package/.next/standalone/.next/server/chunks/4131.js +39 -0
  366. package/.next/standalone/.next/server/chunks/4672.js +6 -0
  367. package/.next/standalone/.next/server/chunks/4827.js +1 -1
  368. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  369. package/.next/standalone/.next/server/chunks/5577.js +1 -0
  370. package/.next/standalone/.next/server/chunks/5728.js +1 -0
  371. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  372. package/.next/standalone/.next/server/chunks/6506.js +39 -3
  373. package/.next/standalone/.next/server/chunks/6515.js +2 -2
  374. package/.next/standalone/.next/server/chunks/{5489.js → 661.js} +44 -8
  375. package/.next/standalone/.next/server/chunks/6654.js +1 -0
  376. package/.next/standalone/.next/server/chunks/6737.js +1 -1
  377. package/.next/standalone/.next/server/chunks/6753.js +4 -4
  378. package/.next/standalone/.next/server/chunks/679.js +1 -1
  379. package/.next/standalone/.next/server/chunks/{2516.js → 7258.js} +1 -1
  380. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  381. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  382. package/.next/standalone/.next/server/chunks/7578.js +1 -1
  383. package/.next/standalone/.next/server/chunks/8017.js +1 -0
  384. package/.next/standalone/.next/server/chunks/8177.js +1 -0
  385. package/.next/standalone/.next/server/chunks/8437.js +1 -0
  386. package/.next/standalone/.next/server/chunks/{6449.js → 8566.js} +1 -1
  387. package/.next/standalone/.next/server/chunks/920.js +1 -1
  388. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  389. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  390. package/.next/standalone/.next/server/chunks/951.js +88 -1
  391. package/.next/standalone/.next/server/chunks/9670.js +1 -0
  392. package/.next/standalone/.next/server/chunks/9931.js +1 -1
  393. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  394. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  395. package/.next/standalone/.next/server/pages/404.html +2 -2
  396. package/.next/standalone/.next/server/pages/500.html +1 -1
  397. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  398. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  399. package/.next/standalone/.next/static/chunks/{15183-3f43af926186f7ef.js → 10488-d518e8ce8ae45724.js} +6 -6
  400. package/.next/standalone/.next/static/chunks/11595.4cebcf7499ef6a78.js +1 -0
  401. package/.next/standalone/.next/static/chunks/2069-68d93343e4ca252e.js +1 -0
  402. package/.next/standalone/.next/static/chunks/27370-0d04028ec8a339f0.js +1 -0
  403. package/.next/standalone/.next/static/chunks/27787-3566e3dd0506e241.js +1 -0
  404. package/.next/standalone/.next/static/chunks/33456.a5a9acba61ca3665.js +1 -0
  405. package/.next/standalone/.next/static/chunks/4860.61dfcdf8c4c5c703.js +1 -0
  406. package/.next/standalone/.next/static/chunks/53504-3a0f6dee12a39d5d.js +1 -0
  407. package/.next/standalone/.next/static/chunks/56863-a2cc92f9ca49f0f8.js +1 -0
  408. package/.next/standalone/.next/static/chunks/63819-c52b5bc9ee32ca9b.js +1 -0
  409. package/.next/standalone/.next/static/chunks/69398-c2f73fe154aaee76.js +1 -0
  410. package/.next/standalone/.next/static/chunks/71890-e6c13ce1debd87c2.js +1 -0
  411. package/.next/standalone/.next/static/chunks/71921-f6754331cd35fa5a.js +1 -0
  412. package/.next/standalone/.next/static/chunks/{26020-7b4756ba0aa906cf.js → 76103-5d656aebd9cd5e7f.js} +1 -1
  413. package/.next/standalone/.next/static/chunks/7777-18527b954e3c5557.js +1 -0
  414. package/.next/standalone/.next/static/chunks/78847-9f65efbac984cf70.js +1 -0
  415. package/.next/standalone/.next/static/chunks/79919-32af2c1abfc92a30.js +1 -0
  416. package/.next/standalone/.next/static/chunks/83749-f797272bf30fc2f4.js +10 -0
  417. package/.next/standalone/.next/static/chunks/91907-a4182d1a3c870d0f.js +1 -0
  418. package/.next/standalone/.next/static/chunks/91997-3592827b5a069beb.js +1 -0
  419. package/.next/standalone/.next/static/chunks/99373.747e181e4c952509.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-6135300353d6c6ad.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-bb9f26c107a6b113.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-31dd9042ee36b8e5.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-a6bfa3b6b6893bc4.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-01e81333c9beee2d.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-795b161eb0694092.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-e20e65b5df817433.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-fc2d02d552bbdbf0.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0cfa38d2de9fa9d9.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-301f21a3ae52e318.js → page-529dec4c3bcd5ba9.js} +1 -1
  430. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-dd123990c14e9768.js → page-b211c29669eaa3e4.js} +1 -1
  431. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-069c9738e516436b.js → page-793285a6cf214896.js} +1 -1
  432. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-0606d1497512e155.js +1 -0
  433. package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/page-47e49c331996193b.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/admin/companies/new/page-c1e28205503002de.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/login/admin/page-b0d0ea2fa4102ff7.js +1 -0
  436. package/.next/standalone/.next/static/chunks/app/login/page-ee63e900cb54148c.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/onboarding/{page-5914ff3d878a3c34.js → page-1f3ab167cab58610.js} +1 -1
  438. package/.next/standalone/.next/static/chunks/{webpack-de8a36d232a91d6b.js → webpack-6151d196b2fab7e8.js} +1 -1
  439. package/.next/standalone/.next/static/css/09ac5931fe977492.css +1 -0
  440. package/.next/standalone/package.json +1 -1
  441. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  442. package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
  443. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +5 -1
  444. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +16 -1
  445. package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
  446. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
  447. package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
  448. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +13 -1
  449. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  450. package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
  451. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +9 -1
  452. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  453. package/.next/standalone/public/chorus-plugin/skills/research/SKILL.md +51 -0
  454. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  455. package/.next/standalone/public/chorus-plugin/skills/spec-lite/SKILL.md +1 -1
  456. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +5 -1
  457. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.json +1 -0
  458. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +5 -1
  459. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +1 -1
  460. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +1 -1
  461. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
  462. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +13 -1
  463. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +1 -1
  464. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +1 -1
  465. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +9 -1
  466. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
  467. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-research/SKILL.md +51 -0
  468. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
  469. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-spec-lite/SKILL.md +1 -1
  470. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +5 -1
  471. package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +16 -1
  472. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
  473. package/.next/standalone/public/kiro-plugin/manifest.txt +1 -0
  474. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +4 -0
  475. package/.next/standalone/public/skill/chorus/SKILL.md +20 -2
  476. package/.next/standalone/public/skill/idea-chorus/SKILL.md +12 -0
  477. package/.next/standalone/public/skill/package.json +1 -0
  478. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +8 -0
  479. package/.next/standalone/public/skill/research-chorus/SKILL.md +51 -0
  480. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +4 -0
  481. package/README.ja.md +5 -11
  482. package/README.ko.md +5 -11
  483. package/README.md +20 -11
  484. package/README.zh.md +20 -11
  485. package/chorus.mjs +7 -1
  486. package/cli/agent-cli-config.mjs +28 -2
  487. package/cli/claude-spawner.mjs +330 -18
  488. package/cli/codex-app-server-client.mjs +402 -0
  489. package/cli/codex-app-server-events.mjs +176 -0
  490. package/cli/codex-session-map.mjs +1 -1
  491. package/cli/codex-spawner.mjs +247 -241
  492. package/cli/control-handler.mjs +20 -0
  493. package/cli/daemon-rest-client.mjs +7 -4
  494. package/cli/event-router.mjs +65 -3
  495. package/cli/init/adapters.mjs +2 -2
  496. package/cli/init/file-template.mjs +11 -4
  497. package/cli/init/install-methods.mjs +3 -1
  498. package/cli/operation-contract.mjs +3 -0
  499. package/cli/operation-prompts.mjs +99 -0
  500. package/cli/operation.mjs +46 -0
  501. package/cli/pi-spawner.mjs +472 -78
  502. package/cli/process-killer.mjs +138 -13
  503. package/cli/process-stop-hooks.mjs +13 -0
  504. package/cli/prompts.mjs +7 -0
  505. package/cli/upgrade-plugins.mjs +202 -0
  506. package/cli/upgrade-process.mjs +159 -0
  507. package/cli/upgrade.mjs +125 -0
  508. package/cli/upload-hooks.mjs +2 -2
  509. package/cli/wake-queue.mjs +5 -1
  510. package/cli/waker.mjs +127 -4
  511. package/cli/windows-process-tree.mjs +154 -0
  512. package/package.json +1 -1
  513. package/prisma/migrations/20260927073000_add_daemon_operation_payload/migration.sql +1 -0
  514. package/prisma/schema.prisma +3 -2
  515. package/.next/standalone/.next/server/chunks/1318.js +0 -1
  516. package/.next/standalone/.next/server/chunks/1416.js +0 -88
  517. package/.next/standalone/.next/server/chunks/1683.js +0 -1
  518. package/.next/standalone/.next/server/chunks/3341.js +0 -1
  519. package/.next/standalone/.next/server/chunks/457.js +0 -1
  520. package/.next/standalone/.next/server/chunks/5300.js +0 -1
  521. package/.next/standalone/.next/server/chunks/6607.js +0 -1
  522. package/.next/standalone/.next/server/chunks/7400.js +0 -1
  523. package/.next/standalone/.next/server/chunks/8044.js +0 -1
  524. package/.next/standalone/.next/server/chunks/8185.js +0 -1
  525. package/.next/standalone/.next/server/chunks/8454.js +0 -1
  526. package/.next/standalone/.next/server/chunks/9848.js +0 -39
  527. package/.next/standalone/.next/static/chunks/11595.f080a1d100972212.js +0 -1
  528. package/.next/standalone/.next/static/chunks/17099-936da9caf4c119b8.js +0 -1
  529. package/.next/standalone/.next/static/chunks/17562-56f932146e9e6c94.js +0 -10
  530. package/.next/standalone/.next/static/chunks/18751-3616e33050e9611e.js +0 -1
  531. package/.next/standalone/.next/static/chunks/27370-c056dee2016c9124.js +0 -1
  532. package/.next/standalone/.next/static/chunks/31308-bb4a97b3f39c22dd.js +0 -1
  533. package/.next/standalone/.next/static/chunks/33456.20313bd67a5c41cc.js +0 -1
  534. package/.next/standalone/.next/static/chunks/35432-5c245212c7595169.js +0 -1
  535. package/.next/standalone/.next/static/chunks/44437-d13183f50281116f.js +0 -1
  536. package/.next/standalone/.next/static/chunks/45024-eb7c062d13d9fe08.js +0 -1
  537. package/.next/standalone/.next/static/chunks/4860.3b555a398cdffb19.js +0 -1
  538. package/.next/standalone/.next/static/chunks/59713-426f81b6576173d8.js +0 -1
  539. package/.next/standalone/.next/static/chunks/60351-bdef539874e5027e.js +0 -1
  540. package/.next/standalone/.next/static/chunks/67580-8733964ab2c7fc0e.js +0 -1
  541. package/.next/standalone/.next/static/chunks/7777-8b1b6681256e1534.js +0 -1
  542. package/.next/standalone/.next/static/chunks/78155-db70d9684a1e77a2.js +0 -1
  543. package/.next/standalone/.next/static/chunks/79919-1e7e294a06f2c4a0.js +0 -1
  544. package/.next/standalone/.next/static/chunks/94643-e54eff17e941a93b.js +0 -1
  545. package/.next/standalone/.next/static/chunks/99373.b8a95d1bec5ad4e7.js +0 -1
  546. package/.next/standalone/.next/static/chunks/99733-5a2e39f57fbda32d.js +0 -1
  547. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-072a6b8f0a48b1b6.js +0 -1
  548. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-82e90e222d6bc547.js +0 -1
  549. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-198a3ff89ae871b9.js +0 -1
  550. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-a506de82e8997714.js +0 -1
  551. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-dc54fafa22d21863.js +0 -1
  552. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-6eb5d3cb036a78e0.js +0 -1
  553. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-69c6f0190623e19b.js +0 -1
  554. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-2a52f747e6fac5a7.js +0 -1
  555. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-22cce567a85ea291.js +0 -1
  556. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-548231f8c9856489.js +0 -1
  557. package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/page-56118c51122ad639.js +0 -1
  558. package/.next/standalone/.next/static/chunks/app/admin/companies/new/page-4e20deb41357171c.js +0 -1
  559. package/.next/standalone/.next/static/chunks/app/login/admin/page-c8e40259e5d3d9e0.js +0 -1
  560. package/.next/standalone/.next/static/chunks/app/login/page-0a16a64855b771ef.js +0 -1
  561. package/.next/standalone/.next/static/css/44f13b43a3de716d.css +0 -1
  562. /package/.next/standalone/.next/static/{Pmji9kEq8T2lM6AKQkZji → kDppeym4sfPwXjGFspZG8}/_buildManifest.js +0 -0
  563. /package/.next/standalone/.next/static/{Pmji9kEq8T2lM6AKQkZji → kDppeym4sfPwXjGFspZG8}/_ssgManifest.js +0 -0
@@ -0,0 +1,125 @@
1
+ import * as fs from "node:fs";
2
+ import { dirname, posix, win32 } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { runUpgradeCommand, runUpgradeInstall, sanitizeUpgradeOutput, upgradeFailure } from "./upgrade-process.mjs";
5
+ // Eagerly load every collaborator before npm can replace this package.
6
+ import { upgradePlugins } from "./upgrade-plugins.mjs";
7
+
8
+ export const PACKAGE = "@chorus-aidlc/chorus";
9
+ const PACKAGE_ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
10
+ const STABLE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
11
+ export const upgradeHelp = `Usage: chorus upgrade [--plugins]
12
+ chorus update [--plugins]
13
+
14
+ Upgrade the active npm global Chorus installation to the latest stable release.
15
+ --plugins Also refresh Chorus plugins for configured daemon agents.
16
+ -h, --help Show help without checking or changing anything.
17
+
18
+ Exit 0: all requested work completed. Exit 1: failed or incomplete.
19
+ Source checkouts, linked installations and other package managers are unsupported.
20
+ `;
21
+
22
+ function newer(a, b) {
23
+ const aa = a.split("+")[0].split(".").map(BigInt), bb = b.split("+")[0].split(".").map(BigInt);
24
+ for (let i = 0; i < 3; i++) if (aa[i] !== bb[i]) return aa[i] > bb[i];
25
+ return false;
26
+ }
27
+
28
+ export async function upgradeCli(deps = {}) {
29
+ const io = deps.fs ?? fs;
30
+ const platform = deps.platform ?? process.platform;
31
+ const p = platform === "win32" ? win32 : posix;
32
+ const env = deps.env ?? process.env;
33
+ const run = deps.run ?? runUpgradeCommand;
34
+ const root = deps.packageRoot ?? PACKAGE_ROOT;
35
+ const same = (a, b) => platform === "win32"
36
+ ? p.normalize(a).toLowerCase() === p.normalize(b).toLowerCase()
37
+ : p.normalize(a) === p.normalize(b);
38
+ const read = (path) => JSON.parse(io.readFileSync(path, "utf8"));
39
+ const command = (args, timeoutMs = 30_000) => {
40
+ const r = run("npm", args, { env, platform, timeoutMs });
41
+ if (!r.ok) throw new Error(`npm ${args[0]} ${upgradeFailure(r, { env })}`);
42
+ return String(r.stdout).trim();
43
+ };
44
+ const explain = (error) => sanitizeUpgradeOutput(error?.message, { env });
45
+ let prefix, installed, current, latest;
46
+ try {
47
+ prefix = command(["prefix", "-g"]);
48
+ const globalRoot = command(["root", "-g"]);
49
+ const expectedRoot = platform === "win32" ? p.join(prefix, "node_modules") : p.join(prefix, "lib", "node_modules");
50
+ installed = p.join(globalRoot, "@chorus-aidlc", "chorus");
51
+ if (!p.isAbsolute(prefix) || !p.isAbsolute(globalRoot) ||
52
+ !same(io.realpathSync(globalRoot), io.realpathSync(expectedRoot)) ||
53
+ io.lstatSync(installed).isSymbolicLink() || io.existsSync(p.join(installed, ".git")) ||
54
+ !same(io.realpathSync(root), io.realpathSync(installed))) throw new Error();
55
+ const pkg = read(p.join(root, "package.json"));
56
+ const listing = JSON.parse(command(["ls", "-g", PACKAGE, "--depth=0", "--json", "--long"]));
57
+ const entry = listing.dependencies?.[PACKAGE];
58
+ if (pkg.name !== PACKAGE || !STABLE.test(pkg.version) || !entry ||
59
+ entry.name !== PACKAGE || entry.version !== pkg.version || !entry.path ||
60
+ !same(io.realpathSync(entry.path), io.realpathSync(installed)) ||
61
+ entry.link || entry.isLink || entry.invalid || entry.extraneous || entry.problems?.length) throw new Error();
62
+ // npm versions differ in which provenance fields they retain. When present,
63
+ // refuse file/git/link sources; repository metadata is NOT install provenance.
64
+ for (const meta of [pkg, entry]) {
65
+ const source = meta.resolved ?? meta._resolved;
66
+ if (source && !/^https?:\/\/[^?#]+\.tgz(?:\?.*)?$/.test(source)) throw new Error();
67
+ if (meta._from && !/^@chorus-aidlc\/chorus@[\w.*~^<>= |+-]+$/.test(meta._from)) throw new Error();
68
+ }
69
+ current = pkg.version;
70
+ } catch (error) {
71
+ return { complete: false, changed: false, detail: `Cannot verify this npm global installation. ${explain(error)}\nUse npm install -g @chorus-aidlc/chorus@latest with the intended npm prefix; source/link/other-manager installs are unsupported.` };
72
+ }
73
+ try {
74
+ latest = JSON.parse(command(["view", `${PACKAGE}@latest`, "version", "--json"]));
75
+ if (typeof latest !== "string" || !STABLE.test(latest)) throw new Error();
76
+ } catch (error) {
77
+ return { complete: false, changed: false, detail: `Latest stable version discovery failed (npm registry/network/timeout or invalid version). ${explain(error)}` };
78
+ }
79
+ if (!newer(latest, current)) {
80
+ return { complete: true, changed: false, detail: `CLI ${current} is current${current !== latest ? ` (latest stable ${latest}; no downgrade)` : ""}.` };
81
+ }
82
+ try {
83
+ deps.log?.(`Installing CLI ${current} → ${latest}; npm progress follows (no installation timeout).`);
84
+ const result = await (deps.runInstall ?? deps.run ?? runUpgradeInstall)(
85
+ "npm", ["install", "-g", `${PACKAGE}@${latest}`, "--prefix", prefix, "--no-audit", "--no-fund", "--yes"],
86
+ { env, platform, onOutput: (line) => deps.log?.(sanitizeUpgradeOutput(line, { env })) },
87
+ );
88
+ if (!result.ok) throw new Error(upgradeFailure(result, { env }));
89
+ } catch (error) {
90
+ const reason = explain(error);
91
+ const permission = /\bEACCES\b|\bEPERM\b|permission denied/i.test(reason)
92
+ ? " Permission denied: use a user-owned Node installation (for example nvm), or ask the administrator to update the system npm prefix; no automatic elevation is attempted."
93
+ : "";
94
+ return { complete: false, changed: true, detail: `CLI install failed (${current} → ${latest}): ${reason}.${permission} Inspect the npm installation before retrying.` };
95
+ }
96
+ try {
97
+ const pkg = read(p.join(installed, "package.json"));
98
+ if (pkg.name !== PACKAGE || pkg.version !== latest) throw new Error();
99
+ } catch {
100
+ return { complete: false, changed: true, detail: `CLI version verification failed; expected ${latest}.` };
101
+ }
102
+ return { complete: true, changed: true, detail: `CLI upgraded ${current} → ${latest} (installed version verified).` };
103
+ }
104
+
105
+ export async function runUpgrade(argv = [], deps = {}) {
106
+ const log = deps.log ?? console.log;
107
+ if (argv.some((a) => !["--plugins", "--help", "-h"].includes(a))) {
108
+ log("Invalid upgrade arguments. Use chorus upgrade --help.");
109
+ return 1;
110
+ }
111
+ if (argv.includes("--help") || argv.includes("-h")) { log(upgradeHelp); return 0; }
112
+ const cli = await upgradeCli({ ...deps, log });
113
+ log(cli.detail);
114
+ let complete = cli.complete, changed = cli.changed;
115
+ if (complete && argv.includes("--plugins")) {
116
+ const results = await (deps.upgradePlugins ?? upgradePlugins)(deps);
117
+ for (const r of results) {
118
+ log(`${r.target}: ${r.complete ? "OK" : "INCOMPLETE"} — ${r.detail}`);
119
+ complete &&= r.complete;
120
+ changed ||= r.changed;
121
+ }
122
+ }
123
+ if (changed) log("Start new agent sessions to load updated plugins; restart the Chorus daemon when convenient. Active sessions were not restarted.");
124
+ return complete ? 0 : 1;
125
+ }
@@ -409,7 +409,7 @@ function stripSystemReminders(s) {
409
409
  * does NOT echo the user prompt (the chat UI renders that from the turn's
410
410
  * promptText), and `reasoning` / `command_execution` / lifecycle envelopes are
411
411
  * not conversation text — all dropped.
412
- * - pi (@earendil-works/pi-coding-agent) `pi --mode json`: AgentSessionEvents whose
412
+ * - pi (@earendil-works/pi-coding-agent) `pi --mode rpc`: AgentSessionEvents (same as `--mode json`) whose
413
413
  * authoritative final text is a `message_end` carrying a full AgentMessage
414
414
  * (`{ role, content }`). We keep ONLY the assistant message: pi UNCONDITIONALLY
415
415
  * re-emits the wake prompt as a `message_end` with role "user" (agent-loop.ts),
@@ -449,7 +449,7 @@ export function extractTranscriptText(obj) {
449
449
  return { role: "assistant", text: itemText };
450
450
  }
451
451
 
452
- // ── pi `pi --mode json` dialect ──
452
+ // ── pi `pi --mode rpc` event dialect ──
453
453
  // pi's authoritative final text of each step is a `message_end` carrying a full
454
454
  // AgentMessage `{ role, content }`. Keep ONLY the assistant message: pi re-emits the
455
455
  // wake prompt as a role:"user" message_end (already stored as the turn's promptText),
@@ -144,7 +144,11 @@ export class WakeQueue {
144
144
  }
145
145
  // Coalesce: take everything pending for this key right now as one batch.
146
146
  // Items that arrive after this splice accumulate for the NEXT batch.
147
- const items = queue.splice(0);
147
+ // An isolated instruction (Research) keeps the same serial lane but cannot
148
+ // merge with lifecycle wakes before or after it.
149
+ const boundary = queue.findIndex((item) => item?.isolated === true);
150
+ const count = boundary === 0 ? 1 : boundary > 0 ? boundary : queue.length;
151
+ const items = queue.splice(0, count);
148
152
  this.running.add(key);
149
153
  this.activeCount++;
150
154
 
package/cli/waker.mjs CHANGED
@@ -19,6 +19,7 @@
19
19
  // wake. A failure is logged and swallowed — it must never crash the daemon
20
20
  // (no-silent-errors: visible log, no throw).
21
21
 
22
+ import { OPERATION_ACTIONS, isExactOperation, validateOperation } from "./operation.mjs";
22
23
  import { buildBatchPrompt } from "./prompts.mjs";
23
24
  import { writeMcpConfig } from "./mcp-config.mjs";
24
25
  import { isNewSession, SESSION_CONFLICT_FAILURE } from "./claude-spawner.mjs";
@@ -108,6 +109,9 @@ export class Waker {
108
109
  // (including daemon restart) starts with an empty guard.
109
110
  /** @type {Set<string>} */
110
111
  this.deterministicConflictGuards = new Set();
112
+ // Retry exact launch-abort reports after a network outage. These timers carry
113
+ // delivery cleanup only; the existing server turn remains the lifecycle authority.
114
+ this.operationRecoveryTimers = new Set();
111
115
  // Daemon graceful-shutdown flag (fix-daemon-exit-orphan-running-turn). Set once
112
116
  // by interruptAll() and never cleared — a shutting-down Waker is on its way out.
113
117
  // The wake exit path reads it to report the TURN as interrupted(shutdown), and to
@@ -188,6 +192,8 @@ export class Waker {
188
192
  */
189
193
  interruptAll() {
190
194
  this.shuttingDown = true;
195
+ for (const timer of this.operationRecoveryTimers) clearTimeout(timer);
196
+ this.operationRecoveryTimers.clear();
191
197
  for (const [key, entry] of this.executions) {
192
198
  if (entry.status !== "running" || !entry.child) continue;
193
199
  try {
@@ -366,9 +372,27 @@ export class Waker {
366
372
  */
367
373
  async wakeBatch(notifications, key, attribution) {
368
374
  let cfg;
375
+ let operationTurnUuid = null;
369
376
  const receivedList = Array.isArray(notifications) ? notifications : [];
377
+ // Defense in depth for callers bypassing the router: malformed operations
378
+ // never clear a conflict guard, request admission or settle a pending turn.
379
+ try {
380
+ for (const n of receivedList.filter((n) => OPERATION_ACTIONS.has(n?.action))) {
381
+ validateOperation(n.action, n.operationPayload, {
382
+ sessionId: n.sessionId, directIdeaUuid: attribution?.directIdeaUuid,
383
+ projectUuid: n.projectUuid,
384
+ });
385
+ if (n.entityUuid !== n.directIdeaUuid || n.entityType !== "idea" ||
386
+ n.directIdeaUuid !== attribution?.directIdeaUuid) {
387
+ throw new Error("Operation protocol error: execution identity mismatch");
388
+ }
389
+ }
390
+ } catch (err) {
391
+ this.logger.warn(`[Chorus] operation remains pending and retryable: ${err}`);
392
+ return;
393
+ }
370
394
  const hasFreshHumanInstruction = receivedList.some(
371
- (n) => n?.action === "human_instruction",
395
+ (n) => n?.action === "human_instruction" || OPERATION_ACTIONS.has(n?.action),
372
396
  );
373
397
  if (hasFreshHumanInstruction && this.deterministicConflictGuards.delete(key)) {
374
398
  this.logger.info(
@@ -437,6 +461,8 @@ export class Waker {
437
461
  const startMs = Date.now();
438
462
  const target = entity ? `${entity.entityType}:${entity.entityUuid}` : key;
439
463
  const sessionId = directIdeaUuid ?? first?.entityUuid ?? null;
464
+ const operations = list.filter(isExactOperation);
465
+ const operationRequestUuid = batchSize === 1 && operations.length ? first.turnUuid : null;
440
466
  const requestedRuntimeCwd =
441
467
  typeof first?.runtimeCwd === "string" && first.runtimeCwd
442
468
  ? first.runtimeCwd
@@ -447,6 +473,10 @@ export class Waker {
447
473
  const arrivalAction =
448
474
  batchSize > 1 ? `coalesced batch of ${batchSize}` : first?.action;
449
475
  try {
476
+ if (operations.length && (!operationRequestUuid || !sessionId || batchSize !== 1)) {
477
+ this.logger.warn(`[Chorus] Operation requires an isolated, exact pending turn — skipping ${key}`);
478
+ return;
479
+ }
450
480
  const prompt = buildBatchPrompt(list);
451
481
  if (!prompt) {
452
482
  this.logger.info(`[Chorus] no wake prompt for ${arrivalAction} on ${key} — skipping`);
@@ -475,6 +505,7 @@ export class Waker {
475
505
  status: "running",
476
506
  startedAt: new Date().toISOString(),
477
507
  child: null,
508
+ ...(operationRequestUuid ? { operationTurnUuid: operationRequestUuid } : {}),
478
509
  });
479
510
  this.#emitExecutionChange();
480
511
  }
@@ -523,6 +554,39 @@ export class Waker {
523
554
  this.logger.info(`[Chorus] cwd=${cwd} action=${arrivalAction} root=${rootIdeaUuid ?? "(none)"}`);
524
555
  }
525
556
 
557
+ // The server's atomic pending->running edge rechecks Research eligibility
558
+ // under the same lock as development acceptance. Await admission BEFORE any
559
+ // backend can spawn; an offline/rejected/missing reporter must fail closed.
560
+ if (operations.length) {
561
+ if (execKey && this.interrupting.has(execKey)) {
562
+ await this.#retireUnstartedOperation({
563
+ sessionId, turnUuid: operationRequestUuid, status: "interrupted",
564
+ interruptedReason: "user",
565
+ });
566
+ return;
567
+ }
568
+ const admission = await this.advanceTurn({
569
+ sessionId, turnUuid: first.turnUuid, status: "running", coalescedCount: 1,
570
+ entityType: entity?.entityType ?? null,
571
+ entityUuid: entity?.entityUuid ?? null,
572
+ });
573
+ if (!admission?.ok || admission.data?.turnUuid !== first.turnUuid) {
574
+ this.logger.warn(`[Chorus] Operation admission rejected or unavailable for ${key} — no subprocess started`);
575
+ // A conflict may belong to an already-running consumer; never abort it.
576
+ // Otherwise the response may have been lost AFTER admission committed.
577
+ // Retire this exact unstarted request whether it is pending or running.
578
+ if ((execKey && this.interrupting.has(execKey)) || ![404, 409].includes(admission?.status)) {
579
+ await this.#retireUnstartedOperation({
580
+ sessionId, turnUuid: operationRequestUuid, status: "interrupted",
581
+ interruptedReason: execKey && this.interrupting.has(execKey) ? "user" : "crash",
582
+ transcriptRelayError: "Operation launch admission unavailable; no subprocess started",
583
+ });
584
+ }
585
+ return;
586
+ }
587
+ operationTurnUuid = first.turnUuid;
588
+ }
589
+
526
590
  cfg = this.writeMcpConfigFn(this.creds);
527
591
 
528
592
  await this.hooks?.onSessionStart?.({ rootIdeaKey: key, sessionId: sessionId ?? "", isNew });
@@ -536,16 +600,29 @@ export class Waker {
536
600
  // a spawn that never started (onChild never fired) does not attempt an illegal
537
601
  // pending→ended transition. There is no separate turn registry — the turn is
538
602
  // identified server-side by `sessionId`, which the waker already has here.
539
- let turnAdvancedToRunning = false;
540
- let runningTurnUuidPromise = Promise.resolve(null);
603
+ let turnAdvancedToRunning = operationTurnUuid !== null;
604
+ let runningTurnUuidPromise = Promise.resolve(operationTurnUuid);
605
+ let childStarted = false;
541
606
 
542
607
  // Track the session id the stream reports so the transcript hook can use
543
608
  // it even before spawner.wake() returns. (Do NOT reference the awaited
544
609
  // `result` inside onMessage — it's in the temporal dead zone there.)
545
610
  let observedSessionId = sessionId ?? "";
546
611
  const onChild = (child) => {
612
+ childStarted = true;
547
613
  const entry = execKey ? this.executions.get(execKey) : null;
548
614
  if (entry && entry.status === "running") entry.child = child;
615
+ if (operationTurnUuid && (this.shuttingDown || (execKey && this.interrupting.has(execKey)))) {
616
+ // Some backends await binary discovery before onChild. A stop during
617
+ // that interval must still terminate the child as soon as it exists.
618
+ try {
619
+ Promise.resolve(this.killer(child, {
620
+ sigintTimeoutMs: this.sigintTimeoutMs, logger: this.logger,
621
+ })).catch((err) => this.logger.warn(`[Chorus] cancelled operation child kill failed: ${err}`));
622
+ } catch (err) {
623
+ this.logger.warn(`[Chorus] cancelled operation child kill failed: ${err}`);
624
+ }
625
+ }
549
626
  if (sessionId && !turnAdvancedToRunning) {
550
627
  turnAdvancedToRunning = true;
551
628
  // Fire-and-forget; #advanceTurn swallows + logs its own failures so a
@@ -589,6 +666,14 @@ export class Waker {
589
666
  onChild,
590
667
  onMessage,
591
668
  };
669
+ if (operationTurnUuid && (this.shuttingDown || (execKey && this.interrupting.has(execKey)))) {
670
+ await this.#retireUnstartedOperation({
671
+ sessionId, turnUuid: operationTurnUuid, status: "interrupted",
672
+ interruptedReason: execKey && this.interrupting.has(execKey) ? "user" : "shutdown",
673
+ transcriptRelayError: "Operation cancelled before subprocess launch",
674
+ });
675
+ return;
676
+ }
592
677
  let result = await this.spawner.wake(wakeParams);
593
678
 
594
679
  // Claude can still reject a new-session launch when its durable session exists
@@ -597,6 +682,7 @@ export class Waker {
597
682
  // child for interrupt handling; onChild's gate keeps pending→running exactly once.
598
683
  if (
599
684
  isNew &&
685
+ !(operationTurnUuid && (this.shuttingDown || (execKey && this.interrupting.has(execKey)))) &&
600
686
  result?.failureClassification === SESSION_CONFLICT_FAILURE
601
687
  ) {
602
688
  this.logger.warn(
@@ -611,6 +697,15 @@ export class Waker {
611
697
  }
612
698
  }
613
699
 
700
+ if (operationTurnUuid && !childStarted) {
701
+ await this.#retireUnstartedOperation({
702
+ sessionId, turnUuid: operationTurnUuid, status: "interrupted",
703
+ interruptedReason: execKey && this.interrupting.has(execKey) ? "user" : "crash",
704
+ transcriptRelayError: "Operation subprocess did not start",
705
+ });
706
+ return;
707
+ }
708
+
614
709
  if (result && !probeIsAuthoritative) {
615
710
  this.logger.info(
616
711
  `[Chorus] backend ${result.isNew ? "started new" : "resumed"} session ${result.sessionId ?? sessionId ?? "(none)"}`
@@ -746,7 +841,16 @@ export class Waker {
746
841
  }
747
842
  } catch (err) {
748
843
  this.logger.warn(`[Chorus] wake failed for ${key}: ${err}`);
749
- if (sessionId && requestedRuntimeCwd && typeof err?.code === "string") {
844
+ if (operationRequestUuid && sessionId) {
845
+ // Admission succeeded but setup/spawn threw: retire this exact turn so a
846
+ // failed launch cannot leave an indefinitely running operation.
847
+ await this.#retireUnstartedOperation({
848
+ sessionId, turnUuid: operationRequestUuid, status: "interrupted",
849
+ interruptedReason: execKey && this.interrupting.has(execKey) ? "user"
850
+ : requestedRuntimeCwd && typeof err?.code === "string" ? "invalid_path" : "crash",
851
+ transcriptRelayError: String(err?.message ?? err).slice(0, 500),
852
+ });
853
+ } else if (sessionId && requestedRuntimeCwd && typeof err?.code === "string") {
750
854
  const invalidPathTurnUuid = await this.#advanceTurn(sessionId, "running", entity);
751
855
  await this.#advanceTurn(
752
856
  sessionId,
@@ -785,6 +889,25 @@ export class Waker {
785
889
  }
786
890
  }
787
891
 
892
+ async #retireUnstartedOperation(report) {
893
+ try {
894
+ const result = await this.advanceTurn(report);
895
+ // Terminal retries are idempotent. A 404/409 means this exact row is gone
896
+ // or already settled differently; no other turn is selected or changed.
897
+ if (result?.ok || [404, 409].includes(result?.status)) return;
898
+ } catch (err) {
899
+ this.logger.warn(`[Chorus] Operation launch cleanup failed for ${report.turnUuid}: ${err}`);
900
+ }
901
+ if (this.shuttingDown) return; // offline reconcile / pending backfill owns restart
902
+ this.logger.warn(`[Chorus] Operation launch cleanup deferred for ${report.turnUuid}; retrying in 30s`);
903
+ const timer = setTimeout(() => {
904
+ this.operationRecoveryTimers.delete(timer);
905
+ void this.#retireUnstartedOperation(report);
906
+ }, 30_000);
907
+ timer.unref?.();
908
+ this.operationRecoveryTimers.add(timer);
909
+ }
910
+
788
911
  /**
789
912
  * Report an interrupted/crashed outcome via the injected reporter. Never throws
790
913
  * into the wake path — a reporter failure is logged and swallowed (the reporter
@@ -0,0 +1,154 @@
1
+ // Windows has no POSIX process groups. Capture PID + creation-time identities
2
+ // before closing the backend, then inspect surviving descendants after exit.
3
+ import { spawn } from "node:child_process";
4
+
5
+ const SNAPSHOT_SCRIPT = "$ErrorActionPreference='Stop'; $ChorusProcesses=@(Get-CimInstance Win32_Process | Where-Object { $_.ProcessId -gt 0 -and $_.CreationDate } | ForEach-Object { @{pid=[int]$_.ProcessId; parentPid=[int]$_.ParentProcessId; startedAt=$_.CreationDate.ToUniversalTime().ToString('o')} }); ConvertTo-Json -InputObject $ChorusProcesses -Compress";
6
+ const MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
7
+ const exited = child => child.exitCode != null || Boolean(child.signalCode);
8
+ const same = (a, b) => a && b && a.pid === b.pid && a.startedAt === b.startedAt;
9
+
10
+ /** Fixed system commands only; output, helpers and listeners share one deadline. */
11
+ async function command(command, args, { deadline, spawnImpl = spawn, capture = false }) {
12
+ if (Date.now() >= deadline) throw new Error("WINDOWS_CLEANUP_TIMEOUT");
13
+ return new Promise((resolve, reject) => {
14
+ let child, timer, settled = false, bytes = 0;
15
+ const chunks = [];
16
+ const finish = (error, code) => {
17
+ if (settled) return;
18
+ settled = true;
19
+ clearTimeout(timer);
20
+ child?.stdout?.removeListener("data", onData);
21
+ child?.removeListener("exit", onExit);
22
+ if (error) {
23
+ try { child?.kill?.("SIGKILL"); } catch {}
24
+ reject(new Error("WINDOWS_CLEANUP_COMMAND_FAILED"));
25
+ } else resolve({ code, output: Buffer.concat(chunks).toString("utf8") });
26
+ };
27
+ const onData = chunk => {
28
+ bytes += chunk.length;
29
+ if (bytes > MAX_OUTPUT_BYTES) return finish(true);
30
+ chunks.push(Buffer.from(chunk));
31
+ };
32
+ const onError = () => finish(true);
33
+ const onExit = code => {
34
+ // Queries need close to drain stdout. taskkill does not capture output.
35
+ if (!capture) finish(false, code);
36
+ };
37
+ const onClose = code => {
38
+ finish(false, code);
39
+ child?.removeListener("error", onError);
40
+ child?.stdout?.removeListener("error", onError);
41
+ };
42
+ try {
43
+ child = spawnImpl(command, args, { stdio: ["ignore", capture ? "pipe" : "ignore", "ignore"], windowsHide: true, shell: false });
44
+ child.on("error", onError);
45
+ child.once("exit", onExit);
46
+ child.once("close", onClose);
47
+ child.stdout?.on("error", onError);
48
+ if (capture) child.stdout?.on("data", onData);
49
+ timer = setTimeout(() => finish(true), Math.max(0, deadline - Date.now()));
50
+ } catch { finish(true); }
51
+ });
52
+ }
53
+
54
+ export async function readWindowsProcessSnapshot(options) {
55
+ const { code, output } = await command("powershell.exe",
56
+ ["-NoLogo", "-NoProfile", "-NonInteractive", "-Command", SNAPSHOT_SCRIPT],
57
+ { ...options, capture: true });
58
+ if (code !== 0) throw new Error("WINDOWS_PROCESS_QUERY_FAILED");
59
+ let parsed;
60
+ try { parsed = JSON.parse(output.replace(/^\uFEFF/, "")); }
61
+ catch { throw new Error("WINDOWS_PROCESS_QUERY_INVALID"); }
62
+ const records = Array.isArray(parsed) ? parsed : [parsed];
63
+ if (records.length > 100_000) throw new Error("WINDOWS_PROCESS_QUERY_INVALID");
64
+ const seen = new Set();
65
+ for (const r of records) {
66
+ if (!r || !Number.isSafeInteger(r.pid) || r.pid < 0 ||
67
+ !Number.isSafeInteger(r.parentPid) || r.parentPid < 0 ||
68
+ typeof r.startedAt !== "string" || !Number.isFinite(Date.parse(r.startedAt)) ||
69
+ seen.has(r.pid)) throw new Error("WINDOWS_PROCESS_QUERY_INVALID");
70
+ seen.add(r.pid);
71
+ }
72
+ return records;
73
+ }
74
+
75
+ export class WindowsProcessTree {
76
+ constructor(child, { deadline, spawnImpl, snapshotImpl = readWindowsProcessSnapshot } = {}) {
77
+ this.child = child;
78
+ this.options = { deadline, spawnImpl };
79
+ this.snapshot = () => snapshotImpl(this.options);
80
+ this.owned = new Map();
81
+ this.capturePromise = null;
82
+ this.captureFailed = false;
83
+ this.escalated = false;
84
+ }
85
+
86
+ capture() {
87
+ return this.capturePromise ??= (async () => {
88
+ try {
89
+ const wasRunning = !exited(this.child);
90
+ const records = await this.snapshot();
91
+ const root = records.find(r => r.pid === this.child.pid);
92
+ // A PID found after our ChildProcess has exited belongs to someone else.
93
+ if (root && !exited(this.child)) this.owned.set(root.pid, root);
94
+ else if (wasRunning) this.captureFailed = true;
95
+ else if (!root && records.some(r => r.parentPid === this.child.pid)) {
96
+ // No trustworthy root identity: do not guess ownership or kill.
97
+ this.captureFailed = true;
98
+ }
99
+ this.expand(records);
100
+ } catch { this.captureFailed = true; }
101
+ })();
102
+ }
103
+
104
+ expand(records) {
105
+ const current = new Map(records.map(r => [r.pid, r]));
106
+ let changed;
107
+ do {
108
+ changed = false;
109
+ for (const record of records) {
110
+ if (this.owned.has(record.pid)) continue;
111
+ const parent = this.owned.get(record.parentPid);
112
+ // Retain ancestry through a departed parent, but never through a reused
113
+ // PID. Creation ordering also rejects an older, unrelated process.
114
+ if (parent && (!current.has(parent.pid) || same(parent, current.get(parent.pid))) &&
115
+ Date.parse(record.startedAt) >= Date.parse(parent.startedAt)) {
116
+ this.owned.set(record.pid, record); changed = true;
117
+ }
118
+ }
119
+ } while (changed);
120
+ return records.filter(r => same(r, this.owned.get(r.pid)));
121
+ }
122
+
123
+ async cleanup() {
124
+ await this.capture();
125
+ try {
126
+ let living = this.expand(await this.snapshot());
127
+ if (this.captureFailed) throw new Error("WINDOWS_TREE_UNCERTAIN");
128
+ if (!living.length) return { cleanupFailed: false, escalated: false };
129
+ // Target each surviving identity, including children whose root exited.
130
+ // Re-read before each taskkill to avoid killing a known reused PID.
131
+ for (const candidate of living) {
132
+ const fresh = await this.snapshot();
133
+ const actual = fresh.find(r => r.pid === candidate.pid);
134
+ this.expand(fresh);
135
+ if (!same(candidate, actual)) continue;
136
+ try {
137
+ this.escalated = true;
138
+ await command("taskkill", ["/PID", String(candidate.pid), "/T", "/F"], this.options);
139
+ } catch {
140
+ // A process can disappear during taskkill. Only the final identity
141
+ // probe distinguishes that race from a genuine termination failure.
142
+ }
143
+ }
144
+ living = this.expand(await this.snapshot());
145
+ if (living.length) throw new Error("WINDOWS_TREE_REMAINS");
146
+ return { cleanupFailed: false, escalated: true };
147
+ } catch {
148
+ // Still try to stop the exact ChildProcess if it has not exited. No
149
+ // unverified numeric PID is targeted on this failure path.
150
+ if (!exited(this.child)) { try { this.child.kill?.("SIGKILL"); } catch {} }
151
+ return { cleanupFailed: true, escalated: this.escalated };
152
+ }
153
+ }
154
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chorus-aidlc/chorus",
3
- "version": "0.19.0",
3
+ "version": "0.20.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 @@
1
+ ALTER TABLE "DaemonSessionTurn" ADD COLUMN "operationPayload" JSONB;
@@ -719,8 +719,9 @@ model DaemonSessionTurn {
719
719
  // immutable first-wake compatibility anchor.
720
720
  backendSessionId String?
721
721
  seq Int // monotonic per session
722
- trigger String // task_assigned | mentioned | elaboration | elaboration_verified | start_development | yolo_requested | resume | human_instruction
723
- promptText String? // free-text body for human_instruction; null otherwise (canonical source)
722
+ trigger String // task_assigned | mentioned | elaboration | elaboration_verified | start_development | yolo_requested | resume | human_instruction | idea_creation_requested | research_requested
723
+ promptText String? // human instruction body or server-composed operation compatibility snapshot
724
+ operationPayload Json? // versioned dedicated operation; historical rows remain null
724
725
  status String @default("pending") // pending | running | ended | interrupted
725
726
  // Discriminator for the `interrupted` status: `user` = user-requested interrupt,
726
727
  // `crash` = subprocess exited dirty, `shutdown` = daemon graceful shutdown killed