@chorus-aidlc/chorus 0.19.0 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +382 -383
  3. package/.next/standalone/.next/app-path-routes-manifest.json +37 -37
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +30 -30
  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 +2 -2
  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_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  54. package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
  55. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  57. package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
  58. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/admin.html +2 -2
  60. package/.next/standalone/.next/server/app/admin.rsc +2 -2
  61. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  62. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js.nft.json +1 -1
  63. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/companies/route.js +1 -1
  65. package/.next/standalone/.next/server/app/api/admin/companies/route.js.nft.json +1 -1
  66. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/admin/session/route_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_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  91. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  96. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
  102. package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js +1 -1
  105. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route.js.nft.json +1 -1
  106. package/.next/standalone/.next/server/app/api/daemon/directory-request/report/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -1
  108. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  109. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
  111. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  112. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  123. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  124. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  126. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  127. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js +1 -1
  129. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route.js.nft.json +1 -1
  130. package/.next/standalone/.next/server/app/api/daemon-directory-requests/[uuid]/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js +1 -1
  132. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route.js.nft.json +1 -1
  133. package/.next/standalone/.next/server/app/api/daemon-directory-requests/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  135. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  136. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
  138. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
  139. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  144. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  145. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  147. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  148. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  150. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js.nft.json +1 -1
  151. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  153. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  154. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
  156. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  157. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  158. package/.next/standalone/.next/server/app/api/events/route.js +2 -2
  159. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  160. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  161. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  163. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  164. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  165. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  166. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  169. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  172. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  175. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  178. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js +1 -1
  181. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
  184. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js.nft.json +1 -1
  185. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/mcp/route.js +1 -1
  187. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  190. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  191. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  193. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  194. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  196. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  197. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  198. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  199. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  200. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  202. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  203. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  205. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  206. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  207. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  208. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  209. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  211. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  212. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  214. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js.nft.json +1 -1
  215. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  217. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js.nft.json +1 -1
  218. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  219. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  220. package/.next/standalone/.next/server/app/api/project-groups/route.js.nft.json +1 -1
  221. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  222. package/.next/standalone/.next/server/app/api/project-visits/pin/route.js +1 -1
  223. package/.next/standalone/.next/server/app/api/project-visits/pin/route.js.nft.json +1 -1
  224. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/app/api/project-visits/route.js +1 -1
  226. package/.next/standalone/.next/server/app/api/project-visits/route.js.nft.json +1 -1
  227. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
  228. package/.next/standalone/.next/server/app/api/project-visits/visit/route.js +1 -1
  229. package/.next/standalone/.next/server/app/api/project-visits/visit/route.js.nft.json +1 -1
  230. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
  231. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  232. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js.nft.json +1 -1
  233. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  234. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js +1 -1
  235. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route.js.nft.json +1 -1
  236. package/.next/standalone/.next/server/app/api/projects/[uuid]/agent-cwds/route_client-reference-manifest.js +1 -1
  237. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  238. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  239. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  241. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js.nft.json +1 -1
  242. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  243. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  244. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js.nft.json +1 -1
  245. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  246. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  247. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  248. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  250. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  251. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  253. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js.nft.json +1 -1
  254. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  256. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js.nft.json +1 -1
  257. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  258. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  259. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js.nft.json +1 -1
  260. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
  262. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
  263. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  264. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  265. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js.nft.json +1 -1
  266. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  268. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js.nft.json +1 -1
  269. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  271. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  272. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  273. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  274. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  275. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  276. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js +1 -1
  277. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route.js.nft.json +1 -1
  278. package/.next/standalone/.next/server/app/api/projects/agent-cwd-options/route_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  280. package/.next/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  281. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  282. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  283. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js.nft.json +1 -1
  284. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  286. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js.nft.json +1 -1
  287. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  289. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js.nft.json +1 -1
  290. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  291. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  292. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js.nft.json +1 -1
  293. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  294. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  295. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js.nft.json +1 -1
  296. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  297. package/.next/standalone/.next/server/app/api/references/[uuid]/route.js +1 -1
  298. package/.next/standalone/.next/server/app/api/references/[uuid]/route.js.nft.json +1 -1
  299. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  300. package/.next/standalone/.next/server/app/api/references/route.js +1 -1
  301. package/.next/standalone/.next/server/app/api/references/route.js.nft.json +1 -1
  302. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  303. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  304. package/.next/standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  305. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  306. package/.next/standalone/.next/server/app/api/session/route.js +1 -1
  307. package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
  308. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  309. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  310. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  311. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  312. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  313. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  314. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  315. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  316. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  317. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  318. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  319. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  320. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  321. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  322. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  323. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  324. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  325. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  326. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  327. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  328. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  329. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  330. package/.next/standalone/.next/server/app/index.html +2 -2
  331. package/.next/standalone/.next/server/app/index.rsc +2 -2
  332. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  333. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  334. package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
  335. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  336. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  337. package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
  338. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  339. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  340. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  341. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
  342. package/.next/standalone/.next/server/app/login.html +2 -2
  343. package/.next/standalone/.next/server/app/login.rsc +2 -2
  344. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  345. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  346. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  347. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  348. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  349. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  350. package/.next/standalone/.next/server/app/projects.html +2 -2
  351. package/.next/standalone/.next/server/app/projects.rsc +4 -4
  352. package/.next/standalone/.next/server/app/settings.html +2 -2
  353. package/.next/standalone/.next/server/app/settings.rsc +4 -4
  354. package/.next/standalone/.next/server/app-paths-manifest.json +37 -37
  355. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  356. package/.next/standalone/.next/server/chunks/2572.js +2 -2
  357. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  358. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  359. package/.next/standalone/.next/server/chunks/{7400.js → 3420.js} +1 -1
  360. package/.next/standalone/.next/server/chunks/{9848.js → 38.js} +3 -3
  361. package/.next/standalone/.next/server/chunks/4672.js +6 -0
  362. package/.next/standalone/.next/server/chunks/4827.js +1 -1
  363. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  364. package/.next/standalone/.next/server/chunks/5576.js +1 -0
  365. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  366. package/.next/standalone/.next/server/chunks/{6607.js → 6125.js} +1 -1
  367. package/.next/standalone/.next/server/chunks/6506.js +39 -3
  368. package/.next/standalone/.next/server/chunks/6509.js +1 -0
  369. package/.next/standalone/.next/server/chunks/6515.js +2 -2
  370. package/.next/standalone/.next/server/chunks/657.js +1 -0
  371. package/.next/standalone/.next/server/chunks/{5489.js → 661.js} +44 -8
  372. package/.next/standalone/.next/server/chunks/6654.js +1 -0
  373. package/.next/standalone/.next/server/chunks/6737.js +1 -1
  374. package/.next/standalone/.next/server/chunks/679.js +1 -1
  375. package/.next/standalone/.next/server/chunks/{2516.js → 7258.js} +1 -1
  376. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  377. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  378. package/.next/standalone/.next/server/chunks/7578.js +1 -1
  379. package/.next/standalone/.next/server/chunks/8017.js +1 -0
  380. package/.next/standalone/.next/server/chunks/8437.js +1 -0
  381. package/.next/standalone/.next/server/chunks/{6449.js → 8566.js} +1 -1
  382. package/.next/standalone/.next/server/chunks/920.js +1 -1
  383. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  384. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  385. package/.next/standalone/.next/server/chunks/951.js +88 -1
  386. package/.next/standalone/.next/server/chunks/9670.js +1 -0
  387. package/.next/standalone/.next/server/chunks/9931.js +1 -1
  388. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  389. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  390. package/.next/standalone/.next/server/pages/404.html +2 -2
  391. package/.next/standalone/.next/server/pages/500.html +1 -1
  392. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  393. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  394. package/.next/standalone/.next/static/chunks/{15183-3f43af926186f7ef.js → 10488-d518e8ce8ae45724.js} +6 -6
  395. package/.next/standalone/.next/static/chunks/11595.b2b74d1d1d0ae9d9.js +1 -0
  396. package/.next/standalone/.next/static/chunks/17081-63e2cad8c15da2fb.js +1 -0
  397. package/.next/standalone/.next/static/chunks/2069-68d93343e4ca252e.js +1 -0
  398. package/.next/standalone/.next/static/chunks/27370-f998ed24dd4fa975.js +1 -0
  399. package/.next/standalone/.next/static/chunks/33456.978e5f47d1c8eb93.js +1 -0
  400. package/.next/standalone/.next/static/chunks/46437-88abf056c31c7e4e.js +1 -0
  401. package/.next/standalone/.next/static/chunks/48365-13b8e43016ba16a4.js +1 -0
  402. package/.next/standalone/.next/static/chunks/4860.79d6eefc2861716f.js +1 -0
  403. package/.next/standalone/.next/static/chunks/56863-a2cc92f9ca49f0f8.js +1 -0
  404. package/.next/standalone/.next/static/chunks/69398-c2f73fe154aaee76.js +1 -0
  405. package/.next/standalone/.next/static/chunks/{26020-7b4756ba0aa906cf.js → 71522-de2b2a9d8e5059e1.js} +1 -1
  406. package/.next/standalone/.next/static/chunks/71890-e6c13ce1debd87c2.js +1 -0
  407. package/.next/standalone/.next/static/chunks/71921-f6754331cd35fa5a.js +1 -0
  408. package/.next/standalone/.next/static/chunks/7777-18527b954e3c5557.js +1 -0
  409. package/.next/standalone/.next/static/chunks/79919-d423af700ae83862.js +1 -0
  410. package/.next/standalone/.next/static/chunks/83749-f797272bf30fc2f4.js +10 -0
  411. package/.next/standalone/.next/static/chunks/91796-d235607f577fbaeb.js +1 -0
  412. package/.next/standalone/.next/static/chunks/91907-a4182d1a3c870d0f.js +1 -0
  413. package/.next/standalone/.next/static/chunks/99373.e659954ff5148796.js +1 -0
  414. package/.next/standalone/.next/static/chunks/99540-99af558190f96511.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-adf9dbdf339e9038.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/{page-82e90e222d6bc547.js → page-cf8ff072a8bc7409.js} +1 -1
  417. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-00d18e26961cee2f.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-9ed4d7d4f5897de0.js +1 -0
  419. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-9d6d86299f2fadd9.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-487d071317ae5e6d.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-b18a2aba2c4f4f1c.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-32149a823e7abf42.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-0ac33f9146fc53c5.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-301f21a3ae52e318.js → page-7cb8a91f6ca34ba8.js} +1 -1
  425. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-dd123990c14e9768.js → page-6466141ca355d9a4.js} +1 -1
  426. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-069c9738e516436b.js → page-793285a6cf214896.js} +1 -1
  427. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-ba19aec7fde5086c.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/onboarding/{page-5914ff3d878a3c34.js → page-323e1d93218758c5.js} +1 -1
  429. package/.next/standalone/.next/static/chunks/{webpack-de8a36d232a91d6b.js → webpack-ec441a05567c82b0.js} +1 -1
  430. package/.next/standalone/.next/static/css/652fcc1f1ab231c8.css +1 -0
  431. package/.next/standalone/package.json +1 -1
  432. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  433. package/.next/standalone/public/chorus-plugin/bin/chorus-api.sh +1 -1
  434. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +5 -1
  435. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +16 -1
  436. package/.next/standalone/public/chorus-plugin/skills/chorus-cli/SKILL.md +1 -1
  437. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
  438. package/.next/standalone/public/chorus-plugin/skills/docs/SKILL.md +1 -1
  439. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +13 -1
  440. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  441. package/.next/standalone/public/chorus-plugin/skills/orchestrate/SKILL.md +1 -1
  442. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +9 -1
  443. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  444. package/.next/standalone/public/chorus-plugin/skills/research/SKILL.md +51 -0
  445. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  446. package/.next/standalone/public/chorus-plugin/skills/spec-lite/SKILL.md +1 -1
  447. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +5 -1
  448. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.json +1 -0
  449. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +5 -1
  450. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-cli/SKILL.md +1 -1
  451. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +1 -1
  452. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-docs/SKILL.md +1 -1
  453. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +13 -1
  454. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +1 -1
  455. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-orchestrate/SKILL.md +1 -1
  456. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +9 -1
  457. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
  458. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-research/SKILL.md +51 -0
  459. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
  460. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-spec-lite/SKILL.md +1 -1
  461. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +5 -1
  462. package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +16 -1
  463. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
  464. package/.next/standalone/public/kiro-plugin/manifest.txt +1 -0
  465. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +4 -0
  466. package/.next/standalone/public/skill/chorus/SKILL.md +20 -2
  467. package/.next/standalone/public/skill/idea-chorus/SKILL.md +12 -0
  468. package/.next/standalone/public/skill/package.json +1 -0
  469. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +8 -0
  470. package/.next/standalone/public/skill/research-chorus/SKILL.md +51 -0
  471. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +4 -0
  472. package/README.ja.md +3 -11
  473. package/README.ko.md +3 -11
  474. package/README.md +3 -11
  475. package/README.zh.md +3 -11
  476. package/cli/control-handler.mjs +20 -0
  477. package/cli/daemon-rest-client.mjs +7 -4
  478. package/cli/event-router.mjs +65 -3
  479. package/cli/operation-contract.mjs +3 -0
  480. package/cli/operation-prompts.mjs +99 -0
  481. package/cli/operation.mjs +46 -0
  482. package/cli/prompts.mjs +7 -0
  483. package/cli/wake-queue.mjs +5 -1
  484. package/cli/waker.mjs +127 -4
  485. package/package.json +1 -1
  486. package/prisma/migrations/20260927073000_add_daemon_operation_payload/migration.sql +1 -0
  487. package/prisma/schema.prisma +3 -2
  488. package/.next/standalone/.next/server/chunks/1318.js +0 -1
  489. package/.next/standalone/.next/server/chunks/1416.js +0 -88
  490. package/.next/standalone/.next/server/chunks/1683.js +0 -1
  491. package/.next/standalone/.next/server/chunks/3341.js +0 -1
  492. package/.next/standalone/.next/server/chunks/457.js +0 -1
  493. package/.next/standalone/.next/server/chunks/5300.js +0 -1
  494. package/.next/standalone/.next/server/chunks/8044.js +0 -1
  495. package/.next/standalone/.next/server/chunks/8185.js +0 -1
  496. package/.next/standalone/.next/server/chunks/8454.js +0 -1
  497. package/.next/standalone/.next/static/chunks/11595.f080a1d100972212.js +0 -1
  498. package/.next/standalone/.next/static/chunks/17099-936da9caf4c119b8.js +0 -1
  499. package/.next/standalone/.next/static/chunks/17562-56f932146e9e6c94.js +0 -10
  500. package/.next/standalone/.next/static/chunks/18751-3616e33050e9611e.js +0 -1
  501. package/.next/standalone/.next/static/chunks/27370-c056dee2016c9124.js +0 -1
  502. package/.next/standalone/.next/static/chunks/31308-bb4a97b3f39c22dd.js +0 -1
  503. package/.next/standalone/.next/static/chunks/33456.20313bd67a5c41cc.js +0 -1
  504. package/.next/standalone/.next/static/chunks/35432-5c245212c7595169.js +0 -1
  505. package/.next/standalone/.next/static/chunks/44437-d13183f50281116f.js +0 -1
  506. package/.next/standalone/.next/static/chunks/45024-eb7c062d13d9fe08.js +0 -1
  507. package/.next/standalone/.next/static/chunks/4860.3b555a398cdffb19.js +0 -1
  508. package/.next/standalone/.next/static/chunks/59713-426f81b6576173d8.js +0 -1
  509. package/.next/standalone/.next/static/chunks/60351-bdef539874e5027e.js +0 -1
  510. package/.next/standalone/.next/static/chunks/67580-8733964ab2c7fc0e.js +0 -1
  511. package/.next/standalone/.next/static/chunks/7777-8b1b6681256e1534.js +0 -1
  512. package/.next/standalone/.next/static/chunks/78155-db70d9684a1e77a2.js +0 -1
  513. package/.next/standalone/.next/static/chunks/79919-1e7e294a06f2c4a0.js +0 -1
  514. package/.next/standalone/.next/static/chunks/94643-e54eff17e941a93b.js +0 -1
  515. package/.next/standalone/.next/static/chunks/99373.b8a95d1bec5ad4e7.js +0 -1
  516. package/.next/standalone/.next/static/chunks/99733-5a2e39f57fbda32d.js +0 -1
  517. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-072a6b8f0a48b1b6.js +0 -1
  518. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-198a3ff89ae871b9.js +0 -1
  519. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-a506de82e8997714.js +0 -1
  520. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-dc54fafa22d21863.js +0 -1
  521. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-6eb5d3cb036a78e0.js +0 -1
  522. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-69c6f0190623e19b.js +0 -1
  523. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-2a52f747e6fac5a7.js +0 -1
  524. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-22cce567a85ea291.js +0 -1
  525. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-548231f8c9856489.js +0 -1
  526. package/.next/standalone/.next/static/css/44f13b43a3de716d.css +0 -1
  527. /package/.next/standalone/.next/static/{Pmji9kEq8T2lM6AKQkZji → AWk31w7ryFKaxOnUlIeo2}/_buildManifest.js +0 -0
  528. /package/.next/standalone/.next/static/{Pmji9kEq8T2lM6AKQkZji → AWk31w7ryFKaxOnUlIeo2}/_ssgManifest.js +0 -0
@@ -0,0 +1,99 @@
1
+ // Shared by the server compatibility snapshot and payload-driven CLI execution.
2
+ // Keep historical entry prefixes: older clients use the Research prefix for isolation.
3
+ import { RESEARCH_INSTRUCTION_PREFIX } from "./operation-contract.mjs";
4
+
5
+ const PROJECT_INSTRUCTION_LABEL_MAX_CHARS = 200;
6
+
7
+ /**
8
+ * Compose the conversational-idea wake instruction (template v2 — the REVIEWED CONTRACT
9
+ * between the conversational create-idea entry and the woken daemon agent, superseding
10
+ * the client-side create→claim template of add-conversational-idea-entry).
11
+ *
12
+ * The idea is PRE-CREATED and already instance-assigned + elaborating, so both templates
13
+ * direct EDIT (never create, never claim — a claim would fail on the existing assignee).
14
+ * - `elaborate` (default): edit → optional research → elaboration → panel guidance → end turn.
15
+ * - `decompose`: edit the CONTAINER → keep isContainer → one lightweight scope-clarifying
16
+ * elaboration → propose candidate CHILDREN as a structured elaboration round (one
17
+ * single-select question per child, ≤15/round, never a multi-select) → end turn → on the
18
+ * confirm re-wake create each accepted child via chorus_pm_create_idea with
19
+ * parentUuid=<container>, children starting `open`, no auto-elaboration; the container's
20
+ * own status stays `elaborated`. The confirm re-wake rides the EXISTING
21
+ * `elaboration_answered` wake — no new wake/notification action is introduced.
22
+ *
23
+ * English (agent-facing, matching cli/prompts.mjs precedent); the user's description
24
+ * passes through VERBATIM under the delimiter. Exported for unit tests: the template's
25
+ * wording is code, and any change is a review-visible diff.
26
+ * @param {{ideaUuid: string, projectUuid: string, projectName?: string|null,
27
+ * descriptionText: string, mode?: 'elaborate'|'decompose', researchFirst?: boolean}} params
28
+ */
29
+ export function composeConversationalIdeaInstruction(params) {
30
+ // Name is display sugar; bound this user-controlled metadata independently of
31
+ // the description. The complete UUID remains the authoritative machine anchor.
32
+ const projectName = params.projectName?.trim();
33
+ const displayName = projectName && projectName.length > PROJECT_INSTRUCTION_LABEL_MAX_CHARS
34
+ ? `${projectName.slice(0, PROJECT_INSTRUCTION_LABEL_MAX_CHARS - 1)}…`
35
+ : projectName;
36
+ const projectLabel = displayName
37
+ ? `"${displayName}" (projectUuid: ${params.projectUuid})`
38
+ : `projectUuid: ${params.projectUuid}`;
39
+
40
+ const researchInstruction = [
41
+ params.researchFirst
42
+ ? "The user explicitly requested lightweight research before clarification."
43
+ : "Research is optional: use automatic judgment for a concrete, externally verifiable factual gap.",
44
+ "An explicit request to skip research in the user's instructions takes precedence.",
45
+ "Follow the shared research skill before the first formal elaboration: one bounded pass, approximately 2–5 minutes, at most 5 deeply read relevant sources; reuse existing evidence.",
46
+ "Save useful findings in the existing Idea content, preserving the user's meaning, and attach evidence with real ref:UUID citations. Do not create or claim this already-created Idea.",
47
+ "If tools are unavailable, results are empty, or the budget is exhausted, record the limitation and continue the normal steps in this turn. Do not research user preferences; ask through the elaboration panel when needed.",
48
+ "This initialization request applies once, not on every later wake or stage re-entry.",
49
+ ].join(" ");
50
+
51
+ if (params.mode === "decompose") {
52
+ return [
53
+ `[Chorus container-decompose entry] A new CONTAINER idea has been PRE-CREATED for project ${projectLabel} from the user's description below, and it is already assigned to you (status: elaborating, isContainer: true).`,
54
+ ` ideaUuid: ${params.ideaUuid}`,
55
+ ``,
56
+ `This conversation IS that container idea's root session. The user wants help DECOMPOSING it into child ideas. Do the following, in order:`,
57
+ `1. Edit the container via chorus_edit_idea: derive a concise title from the description and polish the content (keep the user's meaning). The current title is a placeholder.`,
58
+ `2. Ensure it stays a container: it was pre-created with isContainer=true — do NOT clear that flag (a container groups its child ideas and MUST NOT get a proposal of its own).`,
59
+ `Before step 3: ${researchInstruction}`,
60
+ `3. Run ONE lightweight elaboration round (chorus_pm_start_elaboration) to clarify the decomposition scope/dimension — how to slice the work into children. Keep it short; you may self-answer in headless or ask the user, then continue.`,
61
+ `4. Propose the candidate child ideas AS A STRUCTURED ELABORATION ROUND (chorus_pm_start_elaboration) for the user to review/edit/confirm — use ONE elaboration question PER proposed child (the child's title as the question text, a short rationale as its description), single-select. Elaboration questions are single-select and a round is capped at 15 questions, so propose at most 15 candidates per round and NEVER a single multi-select question; if you need more children, propose them across additional rounds. Do NOT create any child ideas yet — this round is the preview the user accepts/edits/declines per child.`,
62
+ `5. End the turn. The user's answers in the idea's elaboration panel will wake this same conversation (the existing elaboration-answered wake).`,
63
+ `6. On that re-wake, create each ACCEPTED child via chorus_pm_create_idea with parentUuid=${params.ideaUuid}. Each child starts in the "open" state — do NOT auto-elaborate them. The container's OWN status stays "elaborated"; creating children does not advance or alter it.`,
64
+ ``,
65
+ `Reference reflex: whenever an external link is evidence for this work (a precedent issue/PR, a reference implementation, official docs, a paper/blog), attach it via references — prefer the inline references[] param at creation time over a post-hoc chorus_add_reference.`,
66
+ ``,
67
+ `--- User's idea description ---`,
68
+ params.descriptionText,
69
+ ].join("\n");
70
+ }
71
+
72
+ return [
73
+ `[Chorus conversational idea entry] A new idea has been PRE-CREATED for project ${projectLabel} from the user's description below, and it is already assigned to you (status: elaborating).`,
74
+ ` ideaUuid: ${params.ideaUuid}`,
75
+ ``,
76
+ `This conversation IS that idea's root session — its elaboration and lifecycle wakes will continue here. Do the following, in order:`,
77
+ `1. Edit the idea via chorus_edit_idea: derive a concise title from the description and polish the content (keep the user's meaning; you may restructure). The current title is a placeholder.`,
78
+ `2. ${researchInstruction}`,
79
+ `3. After that optional step, start elaboration on the idea (chorus_pm_start_elaboration), following the idea skill — do NOT wait for another wake. Post a short summary of your questions in this conversation and direct the user to answer in the idea's elaboration panel.`,
80
+ `4. End the turn. The user's panel answers will wake this same conversation.`,
81
+ ``,
82
+ `Reference reflex: whenever an external link is evidence for this idea (a precedent issue/PR, a reference implementation, official docs, a paper/blog), attach it via references — prefer the inline references[] param at creation time over a post-hoc chorus_add_reference.`,
83
+ ``,
84
+ `--- User's idea description ---`,
85
+ params.descriptionText,
86
+ ].join("\n");
87
+ }
88
+
89
+ /** @param {string} ideaUuid */
90
+ export function composeResearchInstruction(ideaUuid) {
91
+ return [
92
+ `${RESEARCH_INSTRUCTION_PREFIX} Explicit, one-time research request for ideaUuid: ${ideaUuid}.`,
93
+ "This is the existing Idea's root conversation. Before research and again before saving, re-read the Idea, ALL related proposals/tasks and execution history including theme descendants. If development has begun, report that the stage changed and STOP without research or edits.",
94
+ "Invoke the shared research skill for ONE bounded pass (approximately 2–5 minutes, at most 5 deeply read sources). Reuse existing evidence. An explicit user instruction to skip research takes precedence. Tools unavailable, empty results, or exhausted budget: record the limitation and stop.",
95
+ "Attach useful sources through existing references and obtain real UUIDs. Read the latest Idea content immediately before saving and MERGE concise findings, source citations using ref:UUID, implications, unknowns, and the stopping reason; preserve user text and existing evidence.",
96
+ "Preserve all elaboration rounds, questions, answers and resolved state. Do not create or claim an Idea, start elaboration, submit or modify a Proposal, change task status, or start development. If findings affect an approved proposal, only record the impact and revision needs in the Idea.",
97
+ "Report the findings and END this turn. This menu invocation does not resume the Idea or Proposal workflow. A later explicit Research request may run another bounded pass.",
98
+ ].join("\n");
99
+ }
@@ -0,0 +1,46 @@
1
+ import { CONVERSATIONAL_IDEA_DESCRIPTION_MAX_CHARS, RESEARCH_INSTRUCTION_PREFIX } from "./operation-contract.mjs";
2
+ import { composeConversationalIdeaInstruction, composeResearchInstruction } from "./operation-prompts.mjs";
3
+
4
+ // Canonical operations are identified by their trigger, never by prompt text.
5
+ export const OPERATION_ACTIONS = new Set(["idea_creation_requested", "research_requested"]);
6
+
7
+ const identity = (value) => typeof value === "string" && value.length > 0 && value.length <= 100;
8
+
9
+ /** Validate before dedup/admission. Routing authority always comes from the session. */
10
+ export function validateOperation(trigger, payload, { sessionId, directIdeaUuid, projectUuid }) {
11
+ const creation = trigger === "idea_creation_requested";
12
+ const fields = creation
13
+ ? ["version", "kind", "ideaUuid", "projectUuid", "mode", "researchFirst", "descriptionText"]
14
+ : ["version", "kind", "ideaUuid"];
15
+ if (!OPERATION_ACTIONS.has(trigger) ||
16
+ !payload || typeof payload !== "object" || Array.isArray(payload) ||
17
+ Object.keys(payload).length !== fields.length ||
18
+ fields.some((field) => !Object.hasOwn(payload, field)) ||
19
+ payload.version !== 1 || payload.kind !== (creation ? "idea_creation" : "research") ||
20
+ !identity(payload.ideaUuid) || payload.ideaUuid !== directIdeaUuid ||
21
+ sessionId !== directIdeaUuid ||
22
+ (creation && (!identity(payload.projectUuid) ||
23
+ (projectUuid !== undefined && payload.projectUuid !== projectUuid) ||
24
+ !["elaborate", "decompose"].includes(payload.mode) ||
25
+ typeof payload.researchFirst !== "boolean" ||
26
+ typeof payload.descriptionText !== "string" || !payload.descriptionText.trim() ||
27
+ payload.descriptionText.length > CONVERSATIONAL_IDEA_DESCRIPTION_MAX_CHARS))) {
28
+ throw new Error("Operation protocol error: invalid payload or session/Idea identity mismatch");
29
+ }
30
+ return payload;
31
+ }
32
+
33
+ export function isExactOperation(n) {
34
+ return OPERATION_ACTIONS.has(n?.action) ||
35
+ (n?.action === "human_instruction" &&
36
+ n.instructionText?.startsWith(RESEARCH_INSTRUCTION_PREFIX));
37
+ }
38
+
39
+ export function buildOperationPrompt(n) {
40
+ const p = validateOperation(n.action, n.operationPayload, {
41
+ sessionId: n.sessionId, directIdeaUuid: n.directIdeaUuid, projectUuid: n.projectUuid,
42
+ });
43
+ return p.kind === "research"
44
+ ? composeResearchInstruction(p.ideaUuid)
45
+ : composeConversationalIdeaInstruction(p);
46
+ }
package/cli/prompts.mjs CHANGED
@@ -13,6 +13,8 @@
13
13
  // is deliberately no --append-system-prompt; see claude-spawner.mjs). The preamble
14
14
  // also names the CHORUS_DAEMON_HEADLESS=1 env signal the spawner sets.
15
15
 
16
+ import { buildOperationPrompt } from "./operation.mjs";
17
+
16
18
  /**
17
19
  * @typedef {Object} NotificationDetail
18
20
  * @property {string} uuid
@@ -463,6 +465,9 @@ function buildPromptBody(n) {
463
465
  `chorus_get_idea / chorus_get_comments) if you need context.${actorHint}`
464
466
  );
465
467
  }
468
+ case "idea_creation_requested":
469
+ case "research_requested":
470
+ return buildOperationPrompt(n);
466
471
  default:
467
472
  return null;
468
473
  }
@@ -523,4 +528,6 @@ export const WAKE_ACTIONS = new Set([
523
528
  // when the body is empty/missing (nothing to act on) — so this action is a wake
524
529
  // action only when it actually carries instruction text.
525
530
  "human_instruction",
531
+ "idea_creation_requested",
532
+ "research_requested",
526
533
  ]);
@@ -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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chorus-aidlc/chorus",
3
- "version": "0.19.0",
3
+ "version": "0.19.1",
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