@chorus-aidlc/chorus 0.13.0 → 0.13.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 (641) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +410 -425
  3. package/.next/standalone/.next/app-path-routes-manifest.json +39 -41
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +33 -57
  6. package/.next/standalone/.next/routes-manifest.json +0 -6
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  47. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  51. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  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_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
  55. package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
  56. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/admin/companies.html +1 -1
  58. package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
  59. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/admin.html +1 -1
  61. package/.next/standalone/.next/server/app/admin.rsc +2 -2
  62. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -1
  67. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  71. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
  77. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
  81. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/auth/sync-token/route.js +1 -1
  86. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  88. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -1
  92. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -1
  94. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -1
  95. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  100. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  103. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  106. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  109. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -1
  110. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  112. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  115. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -1
  116. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
  118. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js.nft.json +1 -1
  119. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  121. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  124. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -1
  125. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  127. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  130. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js.nft.json +1 -1
  131. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  133. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -1
  134. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/events/notifications/route.js +4 -4
  136. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  137. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/events/route.js +6 -6
  139. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  140. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  143. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  144. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  149. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -1
  153. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  155. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  156. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  158. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  159. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -0
  161. package/.next/standalone/.next/server/app/api/{auth/refresh → ideas/conversational}/route.js.nft.json +1 -1
  162. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -0
  163. package/.next/standalone/.next/server/app/api/mcp/route.js +2 -2
  164. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  165. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  167. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  168. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  169. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  170. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  171. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  173. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  174. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  176. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  177. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  179. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  180. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  182. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  183. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  185. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  186. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  188. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  189. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  191. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js.nft.json +1 -1
  192. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  193. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  194. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js.nft.json +1 -1
  195. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  196. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  197. package/.next/standalone/.next/server/app/api/project-groups/route.js.nft.json +1 -1
  198. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  201. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  202. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js.nft.json +1 -1
  205. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  210. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  211. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  213. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  214. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  215. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  216. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js.nft.json +1 -1
  217. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  218. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  219. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js.nft.json +1 -1
  220. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  222. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js.nft.json +1 -1
  223. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  224. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
  225. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js.nft.json +1 -1
  226. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  228. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js.nft.json +1 -1
  229. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  230. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  231. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js.nft.json +1 -1
  232. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  233. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  234. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  235. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  236. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  237. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  238. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  240. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  241. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js.nft.json +1 -1
  242. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  243. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  244. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js.nft.json +1 -1
  245. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  246. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  247. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js.nft.json +1 -1
  248. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  250. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js.nft.json +1 -1
  251. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  253. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js.nft.json +1 -1
  254. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  256. package/.next/standalone/.next/server/app/api/session/route.js +1 -0
  257. package/.next/standalone/.next/server/app/api/session/route.js.nft.json +1 -0
  258. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -0
  259. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  260. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  261. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  262. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  263. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  264. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  265. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  266. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  267. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  268. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  269. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  270. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  271. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  272. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  273. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  274. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  275. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  276. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  277. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  278. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  279. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  280. package/.next/standalone/.next/server/app/index.html +1 -1
  281. package/.next/standalone/.next/server/app/index.rsc +3 -3
  282. package/.next/standalone/.next/server/app/login/admin/page.js +2 -2
  283. package/.next/standalone/.next/server/app/login/admin/page.js.nft.json +1 -1
  284. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  286. package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
  287. package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
  288. package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
  289. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  290. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  291. package/.next/standalone/.next/server/app/login/callback.rsc +3 -3
  292. package/.next/standalone/.next/server/app/login/page.js +2 -2
  293. package/.next/standalone/.next/server/app/login/page.js.nft.json +1 -1
  294. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  295. package/.next/standalone/.next/server/app/login/pick-workspace/page.js +1 -1
  296. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  297. package/.next/standalone/.next/server/app/login/pick-workspace.html +1 -1
  298. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +3 -3
  299. package/.next/standalone/.next/server/app/login.html +1 -1
  300. package/.next/standalone/.next/server/app/login.rsc +3 -3
  301. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  302. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  303. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  304. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  305. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  306. package/.next/standalone/.next/server/app/page.js +2 -2
  307. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  308. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  309. package/.next/standalone/.next/server/app/projects.html +1 -1
  310. package/.next/standalone/.next/server/app/projects.rsc +4 -4
  311. package/.next/standalone/.next/server/app/settings.html +1 -1
  312. package/.next/standalone/.next/server/app/settings.rsc +4 -4
  313. package/.next/standalone/.next/server/app-paths-manifest.json +39 -41
  314. package/.next/standalone/.next/server/chunks/1114.js +1 -0
  315. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  316. package/.next/standalone/.next/server/chunks/{7258.js → 2516.js} +1 -1
  317. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  318. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  319. package/.next/standalone/.next/server/chunks/3219.js +1 -1
  320. package/.next/standalone/.next/server/chunks/3371.js +1 -0
  321. package/.next/standalone/.next/server/chunks/3373.js +1 -1
  322. package/.next/standalone/.next/server/chunks/3419.js +1 -1
  323. package/.next/standalone/.next/server/chunks/4827.js +1 -0
  324. package/.next/standalone/.next/server/chunks/4958.js +1 -0
  325. package/.next/standalone/.next/server/chunks/{9855.js → 5095.js} +2 -2
  326. package/.next/standalone/.next/server/chunks/5300.js +1 -1
  327. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  328. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  329. package/.next/standalone/.next/server/chunks/6496.js +1 -0
  330. package/.next/standalone/.next/server/chunks/679.js +1 -1
  331. package/.next/standalone/.next/server/chunks/6817.js +1 -0
  332. package/.next/standalone/.next/server/chunks/{178.js → 704.js} +3 -3
  333. package/.next/standalone/.next/server/chunks/7160.js +1 -1
  334. package/.next/standalone/.next/server/chunks/7364.js +1 -1
  335. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  336. package/.next/standalone/.next/server/chunks/8448.js +1 -0
  337. package/.next/standalone/.next/server/chunks/{8267.js → 8481.js} +1 -1
  338. package/.next/standalone/.next/server/chunks/8497.js +1 -0
  339. package/.next/standalone/.next/server/chunks/8577.js +153 -0
  340. package/.next/standalone/.next/server/chunks/8895.js +1 -0
  341. package/.next/standalone/.next/server/chunks/920.js +1 -1
  342. package/.next/standalone/.next/server/chunks/9726.js +1 -0
  343. package/.next/standalone/.next/server/instrumentation.js +1 -1
  344. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  345. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  346. package/.next/standalone/.next/server/pages/404.html +1 -1
  347. package/.next/standalone/.next/server/pages/500.html +1 -1
  348. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  349. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  350. package/.next/standalone/.next/server/src/middleware.js +5 -5
  351. package/.next/standalone/.next/static/chunks/15653-31c406c41bf58048.js +1 -0
  352. package/.next/standalone/.next/static/chunks/1892-9c03d4d3560ff572.js +1 -0
  353. package/.next/standalone/.next/static/chunks/225-8a41a800021f3d11.js +1 -0
  354. package/.next/standalone/.next/static/chunks/24459-3bc9657d71c77b47.js +1 -0
  355. package/.next/standalone/.next/static/chunks/38296-316ba18af72385fb.js +1 -0
  356. package/.next/standalone/.next/static/chunks/46055-f786ace4b994dc40.js +1 -0
  357. package/.next/standalone/.next/static/chunks/{4860.c3c83713d1f163a5.js → 4860.7844c573cb3914f3.js} +1 -1
  358. package/.next/standalone/.next/static/chunks/{49965-fa11628d5ac8fbbe.js → 52064-74d81c8d682deb6b.js} +1 -1
  359. package/.next/standalone/.next/static/chunks/57362-9ece5cc290dab705.js +1 -0
  360. package/.next/standalone/.next/static/chunks/{14655-4f3bc7f3044c42c1.js → 58037-55d7422c6b808356.js} +1 -1
  361. package/.next/standalone/.next/static/chunks/58262-395c00e04f610a32.js +1 -0
  362. package/.next/standalone/.next/static/chunks/68255-05c42a26602c6b37.js +1 -0
  363. package/.next/standalone/.next/static/chunks/75752-cc8fafe132943baa.js +1 -0
  364. package/.next/standalone/.next/static/chunks/80350-8ac8d602965bb4df.js +1 -0
  365. package/.next/standalone/.next/static/chunks/84169-71a87d06871ec9df.js +1 -0
  366. package/.next/standalone/.next/static/chunks/94528-ed3f03485480f5e5.js +1 -0
  367. package/.next/standalone/.next/static/chunks/94743-aff8a51a7f7970a9.js +1 -0
  368. package/.next/standalone/.next/static/chunks/{36493-5326c14a7240edc8.js → 97306-8834e12cdbeed920.js} +1 -1
  369. package/.next/standalone/.next/static/chunks/{99373.2b68fce200cc323e.js → 99373.6f0ec031fb759d88.js} +1 -1
  370. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-a3747bde1ddaba52.js +1 -0
  371. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-87b79c98e46fbd04.js +1 -0
  372. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-47e1d397c5fcef9e.js +1 -0
  373. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-f72f17eb58614d2b.js +1 -0
  374. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-0467d744b84aa2c2.js +1 -0
  375. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-7ebb779f0db4c58b.js → page-7abff55f9bfebab3.js} +1 -1
  376. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-3238e0b5474c60f6.js +1 -0
  377. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-9f0ebba7e855b2f9.js +1 -0
  378. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-6dbfbe5d97855e42.js +1 -0
  379. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-b8fbcac7224342db.js +1 -0
  380. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-0a04a31e1b383094.js +1 -0
  381. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-e2a69b645ec9ae13.js +1 -0
  382. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-0bc22273214e522f.js → page-b760877bfcd12dff.js} +1 -1
  383. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-111aed4d3319d64b.js +1 -0
  384. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  385. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-47e1d397c5fcef9e.js +1 -0
  386. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-47e1d397c5fcef9e.js +1 -0
  387. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-47e1d397c5fcef9e.js +1 -0
  388. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-47e1d397c5fcef9e.js +1 -0
  389. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  390. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-47e1d397c5fcef9e.js +1 -0
  391. package/.next/standalone/.next/static/chunks/app/api/agents/route-47e1d397c5fcef9e.js +1 -0
  392. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  393. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-47e1d397c5fcef9e.js +1 -0
  394. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-47e1d397c5fcef9e.js +1 -0
  395. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-47e1d397c5fcef9e.js +1 -0
  396. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-47e1d397c5fcef9e.js +1 -0
  397. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-47e1d397c5fcef9e.js +1 -0
  398. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-47e1d397c5fcef9e.js +1 -0
  399. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-47e1d397c5fcef9e.js +1 -0
  400. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-47e1d397c5fcef9e.js +1 -0
  401. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-47e1d397c5fcef9e.js +1 -0
  402. package/.next/standalone/.next/static/chunks/app/api/comments/route-47e1d397c5fcef9e.js +1 -0
  403. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-47e1d397c5fcef9e.js +1 -0
  404. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-47e1d397c5fcef9e.js +1 -0
  405. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-47e1d397c5fcef9e.js +1 -0
  406. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-47e1d397c5fcef9e.js +1 -0
  407. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-47e1d397c5fcef9e.js +1 -0
  408. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-47e1d397c5fcef9e.js +1 -0
  409. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-47e1d397c5fcef9e.js +1 -0
  410. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-47e1d397c5fcef9e.js +1 -0
  411. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-47e1d397c5fcef9e.js +1 -0
  412. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-47e1d397c5fcef9e.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-47e1d397c5fcef9e.js +1 -0
  414. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-47e1d397c5fcef9e.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-47e1d397c5fcef9e.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-47e1d397c5fcef9e.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-47e1d397c5fcef9e.js +1 -0
  419. package/.next/standalone/.next/static/chunks/app/api/events/route-47e1d397c5fcef9e.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/api/health/route-47e1d397c5fcef9e.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-47e1d397c5fcef9e.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-47e1d397c5fcef9e.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-47e1d397c5fcef9e.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-47e1d397c5fcef9e.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-47e1d397c5fcef9e.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-47e1d397c5fcef9e.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/api/mcp/route-47e1d397c5fcef9e.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-47e1d397c5fcef9e.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-47e1d397c5fcef9e.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-47e1d397c5fcef9e.js +1 -0
  432. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-47e1d397c5fcef9e.js +1 -0
  433. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-47e1d397c5fcef9e.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-47e1d397c5fcef9e.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/api/notifications/route-47e1d397c5fcef9e.js +1 -0
  436. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-47e1d397c5fcef9e.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-47e1d397c5fcef9e.js +1 -0
  438. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  439. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-47e1d397c5fcef9e.js +1 -0
  440. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-47e1d397c5fcef9e.js +1 -0
  441. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-47e1d397c5fcef9e.js +1 -0
  442. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-47e1d397c5fcef9e.js +1 -0
  443. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-47e1d397c5fcef9e.js +1 -0
  444. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-47e1d397c5fcef9e.js +1 -0
  445. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-47e1d397c5fcef9e.js +1 -0
  446. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-47e1d397c5fcef9e.js +1 -0
  447. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-47e1d397c5fcef9e.js +1 -0
  448. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-47e1d397c5fcef9e.js +1 -0
  449. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-47e1d397c5fcef9e.js +1 -0
  450. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  451. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-47e1d397c5fcef9e.js +1 -0
  452. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-47e1d397c5fcef9e.js +1 -0
  453. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-47e1d397c5fcef9e.js +1 -0
  454. package/.next/standalone/.next/static/chunks/app/api/projects/route-47e1d397c5fcef9e.js +1 -0
  455. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-47e1d397c5fcef9e.js +1 -0
  456. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-47e1d397c5fcef9e.js +1 -0
  457. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-47e1d397c5fcef9e.js +1 -0
  458. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-47e1d397c5fcef9e.js +1 -0
  459. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  460. package/.next/standalone/.next/static/chunks/app/api/search/route-47e1d397c5fcef9e.js +1 -0
  461. package/.next/standalone/.next/static/chunks/app/api/session/route-47e1d397c5fcef9e.js +1 -0
  462. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  463. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-47e1d397c5fcef9e.js +1 -0
  464. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-47e1d397c5fcef9e.js +1 -0
  465. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-47e1d397c5fcef9e.js +1 -0
  466. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-47e1d397c5fcef9e.js +1 -0
  467. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-47e1d397c5fcef9e.js +1 -0
  468. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-47e1d397c5fcef9e.js +1 -0
  469. package/.next/standalone/.next/static/chunks/app/login/callback/page-39a43f6d0245f8ca.js +1 -0
  470. package/.next/standalone/.next/static/chunks/app/login/page-acda3a31dc6a8280.js +1 -0
  471. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-10683852baf17426.js +1 -0
  472. package/.next/standalone/.next/static/chunks/app/onboarding/{page-500aded75bf11ed6.js → page-8e20c8aa8ff90326.js} +1 -1
  473. package/.next/standalone/.next/static/chunks/app/page-000b1349c8d5b652.js +1 -0
  474. package/.next/standalone/.next/static/chunks/{webpack-7483083a976ed3d7.js → webpack-fe12dfe2e0d0e4f3.js} +1 -1
  475. package/.next/standalone/.next/static/css/3f3ae2bdc9e55259.css +1 -0
  476. package/.next/standalone/.next/static/eORNzMShbzkJbNfQT8MbW/_buildManifest.js +1 -0
  477. package/.next/standalone/package.json +1 -1
  478. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -0
  479. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +2 -0
  480. package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -0
  481. package/.next/standalone/public/skill/idea-chorus/SKILL.md +2 -0
  482. package/README.md +15 -2
  483. package/README.zh.md +15 -2
  484. package/cli/client-args.mjs +31 -9
  485. package/cli/control-handler.mjs +22 -5
  486. package/cli/daemon-lifecycle.mjs +192 -25
  487. package/cli/daemon-rest-client.mjs +6 -2
  488. package/cli/daemon-service.mjs +422 -0
  489. package/cli/daemon.mjs +181 -13
  490. package/cli/event-router.mjs +29 -10
  491. package/cli/prompts.mjs +61 -0
  492. package/cli/turn-reporter.mjs +26 -5
  493. package/cli/wake-queue.mjs +30 -0
  494. package/cli/waker.mjs +91 -22
  495. package/package.json +1 -1
  496. package/prisma/migrations/20260704023331_add_turn_interrupted_state/migration.sql +2 -0
  497. package/prisma/schema.prisma +9 -2
  498. package/.next/standalone/.next/server/app/api/auth/refresh/route.js +0 -1
  499. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +0 -1
  500. package/.next/standalone/.next/server/app/api/auth/session/route.js +0 -1
  501. package/.next/standalone/.next/server/app/api/auth/session/route.js.nft.json +0 -1
  502. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +0 -1
  503. package/.next/standalone/.next/server/app/api/keepalive/route.js +0 -1
  504. package/.next/standalone/.next/server/app/api/keepalive/route.js.nft.json +0 -1
  505. package/.next/standalone/.next/server/app/api/keepalive/route_client-reference-manifest.js +0 -1
  506. package/.next/standalone/.next/server/app/login/silent-refresh/page.js +0 -2
  507. package/.next/standalone/.next/server/app/login/silent-refresh/page.js.nft.json +0 -1
  508. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +0 -1
  509. package/.next/standalone/.next/server/app/login/silent-refresh.html +0 -1
  510. package/.next/standalone/.next/server/app/login/silent-refresh.meta +0 -7
  511. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +0 -24
  512. package/.next/standalone/.next/server/chunks/1463.js +0 -1
  513. package/.next/standalone/.next/server/chunks/298.js +0 -1
  514. package/.next/standalone/.next/server/chunks/5011.js +0 -1
  515. package/.next/standalone/.next/server/chunks/6813.js +0 -1
  516. package/.next/standalone/.next/server/chunks/7421.js +0 -1
  517. package/.next/standalone/.next/server/chunks/7515.js +0 -1
  518. package/.next/standalone/.next/server/chunks/7912.js +0 -1
  519. package/.next/standalone/.next/server/chunks/8821.js +0 -1
  520. package/.next/standalone/.next/server/chunks/9273.js +0 -1
  521. package/.next/standalone/.next/server/chunks/937.js +0 -153
  522. package/.next/standalone/.next/static/W3KEB0tOAICVtfAUfR_M9/_buildManifest.js +0 -1
  523. package/.next/standalone/.next/static/chunks/10919-7f63b2801a92b8c6.js +0 -1
  524. package/.next/standalone/.next/static/chunks/1891-d4a9e756fefba3a9.js +0 -1
  525. package/.next/standalone/.next/static/chunks/20081-a2bf5c9f24d5d589.js +0 -1
  526. package/.next/standalone/.next/static/chunks/26394-4af487a51dd62832.js +0 -1
  527. package/.next/standalone/.next/static/chunks/2987-c15f09093b821b24.js +0 -1
  528. package/.next/standalone/.next/static/chunks/37784-95dee37276b1067b.js +0 -1
  529. package/.next/standalone/.next/static/chunks/43741-aeea04ab873ac4e9.js +0 -1
  530. package/.next/standalone/.next/static/chunks/49852-5337f139a2f87c46.js +0 -1
  531. package/.next/standalone/.next/static/chunks/56812-a6fe5225adc0b2ff.js +0 -1
  532. package/.next/standalone/.next/static/chunks/64894-71b047ae8ef2f3d8.js +0 -1
  533. package/.next/standalone/.next/static/chunks/8796-69e708cb8603d8b4.js +0 -1
  534. package/.next/standalone/.next/static/chunks/91666-3fd4f3512a53ff20.js +0 -1
  535. package/.next/standalone/.next/static/chunks/97263-018d631416efa5cd.js +0 -1
  536. package/.next/standalone/.next/static/chunks/97868-55f18a05fe483d85.js +0 -1
  537. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-6061b60d52262d3c.js +0 -1
  538. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-78ab05c72bcd04fd.js +0 -1
  539. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-31ae6abada6e6a64.js +0 -1
  540. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-478cce81afbfc145.js +0 -1
  541. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-494b80e61b485870.js +0 -1
  542. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/page-bfbfc5005de2be13.js +0 -1
  543. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-fbb4dd4124525f97.js +0 -1
  544. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-164fe175720b24a1.js +0 -1
  545. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-2742c745a90f843f.js +0 -1
  546. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-f2313bf05387b39b.js +0 -1
  547. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-955e8fd8d7b0b7c8.js +0 -1
  548. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-960ab78b5055780c.js +0 -1
  549. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-31ae6abada6e6a64.js +0 -1
  550. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-31ae6abada6e6a64.js +0 -1
  551. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-31ae6abada6e6a64.js +0 -1
  552. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-31ae6abada6e6a64.js +0 -1
  553. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-31ae6abada6e6a64.js +0 -1
  554. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-31ae6abada6e6a64.js +0 -1
  555. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-31ae6abada6e6a64.js +0 -1
  556. package/.next/standalone/.next/static/chunks/app/api/agents/route-31ae6abada6e6a64.js +0 -1
  557. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-31ae6abada6e6a64.js +0 -1
  558. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-31ae6abada6e6a64.js +0 -1
  559. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-31ae6abada6e6a64.js +0 -1
  560. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-31ae6abada6e6a64.js +0 -1
  561. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-31ae6abada6e6a64.js +0 -1
  562. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-31ae6abada6e6a64.js +0 -1
  563. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-31ae6abada6e6a64.js +0 -1
  564. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-31ae6abada6e6a64.js +0 -1
  565. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-31ae6abada6e6a64.js +0 -1
  566. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-31ae6abada6e6a64.js +0 -1
  567. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-31ae6abada6e6a64.js +0 -1
  568. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-31ae6abada6e6a64.js +0 -1
  569. package/.next/standalone/.next/static/chunks/app/api/comments/route-31ae6abada6e6a64.js +0 -1
  570. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-31ae6abada6e6a64.js +0 -1
  571. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-31ae6abada6e6a64.js +0 -1
  572. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-31ae6abada6e6a64.js +0 -1
  573. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-31ae6abada6e6a64.js +0 -1
  574. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-31ae6abada6e6a64.js +0 -1
  575. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-31ae6abada6e6a64.js +0 -1
  576. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-31ae6abada6e6a64.js +0 -1
  577. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-31ae6abada6e6a64.js +0 -1
  578. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-31ae6abada6e6a64.js +0 -1
  579. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-31ae6abada6e6a64.js +0 -1
  580. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-31ae6abada6e6a64.js +0 -1
  581. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-31ae6abada6e6a64.js +0 -1
  582. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-31ae6abada6e6a64.js +0 -1
  583. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-31ae6abada6e6a64.js +0 -1
  584. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-31ae6abada6e6a64.js +0 -1
  585. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-31ae6abada6e6a64.js +0 -1
  586. package/.next/standalone/.next/static/chunks/app/api/events/route-31ae6abada6e6a64.js +0 -1
  587. package/.next/standalone/.next/static/chunks/app/api/health/route-31ae6abada6e6a64.js +0 -1
  588. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-31ae6abada6e6a64.js +0 -1
  589. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-31ae6abada6e6a64.js +0 -1
  590. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-31ae6abada6e6a64.js +0 -1
  591. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-31ae6abada6e6a64.js +0 -1
  592. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-31ae6abada6e6a64.js +0 -1
  593. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-31ae6abada6e6a64.js +0 -1
  594. package/.next/standalone/.next/static/chunks/app/api/keepalive/route-31ae6abada6e6a64.js +0 -1
  595. package/.next/standalone/.next/static/chunks/app/api/mcp/route-31ae6abada6e6a64.js +0 -1
  596. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-31ae6abada6e6a64.js +0 -1
  597. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-31ae6abada6e6a64.js +0 -1
  598. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-31ae6abada6e6a64.js +0 -1
  599. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-31ae6abada6e6a64.js +0 -1
  600. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-31ae6abada6e6a64.js +0 -1
  601. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-31ae6abada6e6a64.js +0 -1
  602. package/.next/standalone/.next/static/chunks/app/api/notifications/route-31ae6abada6e6a64.js +0 -1
  603. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-31ae6abada6e6a64.js +0 -1
  604. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-31ae6abada6e6a64.js +0 -1
  605. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-31ae6abada6e6a64.js +0 -1
  606. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-31ae6abada6e6a64.js +0 -1
  607. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-31ae6abada6e6a64.js +0 -1
  608. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-31ae6abada6e6a64.js +0 -1
  609. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-31ae6abada6e6a64.js +0 -1
  610. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-31ae6abada6e6a64.js +0 -1
  611. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-31ae6abada6e6a64.js +0 -1
  612. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-31ae6abada6e6a64.js +0 -1
  613. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-31ae6abada6e6a64.js +0 -1
  614. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-31ae6abada6e6a64.js +0 -1
  615. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-31ae6abada6e6a64.js +0 -1
  616. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-31ae6abada6e6a64.js +0 -1
  617. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-31ae6abada6e6a64.js +0 -1
  618. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-31ae6abada6e6a64.js +0 -1
  619. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-31ae6abada6e6a64.js +0 -1
  620. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-31ae6abada6e6a64.js +0 -1
  621. package/.next/standalone/.next/static/chunks/app/api/projects/route-31ae6abada6e6a64.js +0 -1
  622. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-31ae6abada6e6a64.js +0 -1
  623. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-31ae6abada6e6a64.js +0 -1
  624. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-31ae6abada6e6a64.js +0 -1
  625. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-31ae6abada6e6a64.js +0 -1
  626. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-31ae6abada6e6a64.js +0 -1
  627. package/.next/standalone/.next/static/chunks/app/api/search/route-31ae6abada6e6a64.js +0 -1
  628. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-31ae6abada6e6a64.js +0 -1
  629. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-31ae6abada6e6a64.js +0 -1
  630. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-31ae6abada6e6a64.js +0 -1
  631. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-31ae6abada6e6a64.js +0 -1
  632. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-31ae6abada6e6a64.js +0 -1
  633. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-31ae6abada6e6a64.js +0 -1
  634. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-31ae6abada6e6a64.js +0 -1
  635. package/.next/standalone/.next/static/chunks/app/login/callback/page-6cad93f5c610b047.js +0 -1
  636. package/.next/standalone/.next/static/chunks/app/login/page-d2513f477211dd6f.js +0 -1
  637. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-597e0f3377f18d29.js +0 -1
  638. package/.next/standalone/.next/static/chunks/app/login/silent-refresh/page-a26d1af61578c96e.js +0 -1
  639. package/.next/standalone/.next/static/chunks/app/page-075afd218994d377.js +0 -1
  640. package/.next/standalone/.next/static/css/ed6baccd62b81c4e.css +0 -1
  641. /package/.next/standalone/.next/static/{W3KEB0tOAICVtfAUfR_M9 → eORNzMShbzkJbNfQT8MbW}/_ssgManifest.js +0 -0
@@ -14,12 +14,14 @@ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
14
14
  // MIRROR of the server's NOTIFICATION_ACTION_TO_TURN_TRIGGER (src/services/notification-turn.ts).
15
15
  // Used ONLY to match a re-read wake notification back to a DIRECTED autonomous pending turn
16
16
  // (the deliver_turn re-dispatch rebuilds the prompt from the notification, T2). Kept narrow
17
- // to the three triggers a `deliver_turn` ping can carry for an autonomous wake; every other
18
- // action collapses to the `task_assigned` trigger exactly as the server does, so a
17
+ // to the dedicated triggers a `deliver_turn` ping can carry for an autonomous wake; every
18
+ // other action collapses to the `task_assigned` trigger exactly as the server does, so a
19
19
  // task_assigned turn matches its task_reopened/task_verified/idea_claimed/proposal_* origins.
20
20
  const ACTION_TO_TURN_TRIGGER = {
21
21
  mentioned: "mentioned",
22
22
  elaboration_verified: "elaboration_verified",
23
+ start_development: "start_development",
24
+ yolo_requested: "yolo_requested",
23
25
  elaboration_requested: "elaboration",
24
26
  elaboration_answered: "elaboration",
25
27
  human_instruction: "human_instruction",
@@ -219,7 +221,12 @@ export class EventRouter {
219
221
  * per-direct-idea serialization holds and the spawner's on-disk transcript probe
220
222
  * naturally selects `claude --resume <directIdeaUuid>` (the session already
221
223
  * exists). Synchronous + non-throwing, mirroring `dispatch`.
222
- * @param {{ entityType?: string, entityUuid?: string }} target
224
+ *
225
+ * `resumeReason` (add-crash-execution-resume) is the interrupted row's prior
226
+ * reason ("user" | "crash") threaded from the control event; it is stamped on the
227
+ * synthetic notification as `resumedFrom` so the prompt builder can state a crash
228
+ * explicitly. Absent/unknown → not stamped → the user-resume prompt.
229
+ * @param {{ entityType?: string, entityUuid?: string, resumeReason?: string }} target
223
230
  */
224
231
  dispatchResume(target) {
225
232
  const entityType = target?.entityType;
@@ -228,7 +235,16 @@ export class EventRouter {
228
235
  this.logger.warn("[Chorus] resume dispatch missing entityType/entityUuid, skipping");
229
236
  return;
230
237
  }
231
- const n = { action: "resource_resumed", entityType, entityUuid };
238
+ const resumedFrom =
239
+ target?.resumeReason === "user" || target?.resumeReason === "crash"
240
+ ? target.resumeReason
241
+ : undefined;
242
+ const n = {
243
+ action: "resource_resumed",
244
+ entityType,
245
+ entityUuid,
246
+ ...(resumedFrom ? { resumedFrom } : {}),
247
+ };
232
248
  this.#resolveAndEnqueue(n, `resume:${entityType}:${entityUuid}`).catch((err) => {
233
249
  this.logger.error(`[Chorus] failed to dispatch resume for ${entityType}:${entityUuid}: ${err}`);
234
250
  });
@@ -278,15 +294,18 @@ export class EventRouter {
278
294
  this.logger.warn(`[Chorus] pending-turn ${turnUuid} missing sessionId, skipping`);
279
295
  return;
280
296
  }
281
- // A DIRECTED autonomous turn (mentioned / task_assigned / elaboration_verified) is
282
- // delivered by the deliver_turn ping too (T2). Its prompt must be rebuilt from the
283
- // notification (promptText is null), so it takes a separate async path. resume /
284
- // elaboration are not delivered by deliver_turn (resume is synthetic; elaboration
285
- // request/answer rides the notification broadcast), so they are not re-dispatched here.
297
+ // A DIRECTED autonomous turn (mentioned / task_assigned / elaboration_verified /
298
+ // start_development / yolo_requested) is delivered by the deliver_turn ping too (T2).
299
+ // Its prompt must be rebuilt from the notification (promptText is null), so it takes a
300
+ // separate async path. resume / elaboration are not delivered by deliver_turn (resume
301
+ // is synthetic; elaboration request/answer rides the notification broadcast), so they
302
+ // are not re-dispatched here.
286
303
  if (
287
304
  pending.trigger === "mentioned" ||
288
305
  pending.trigger === "task_assigned" ||
289
- pending.trigger === "elaboration_verified"
306
+ pending.trigger === "elaboration_verified" ||
307
+ pending.trigger === "start_development" ||
308
+ pending.trigger === "yolo_requested"
290
309
  ) {
291
310
  // Shared dedup, marked BEFORE async work (mirrors the human_instruction path and
292
311
  // `dispatch`) so concurrent deliveries collapse to one wake.
package/cli/prompts.mjs CHANGED
@@ -138,6 +138,42 @@ function buildPromptBody(n) {
138
138
  `chorus_get_elaboration, then author the proposal via the existing proposal flow ` +
139
139
  `(chorus_pm_create_proposal / the proposal skill).\n${mentionGuidance(n, "idea")}`
140
140
  );
141
+ case "start_development":
142
+ // A human clicked "Start Development" (add-stage-advance-start-development). The
143
+ // idea's proposal is approved and unfinished tasks remain. The agent's job on this
144
+ // wake is the WHOLE remaining execute stage — loop over every claimable task until
145
+ // none remain (elaboration decision Q1), never stopping after a single task.
146
+ return (
147
+ `[Chorus] A human started DEVELOPMENT for idea '${n.entityTitle}' ` +
148
+ `(ideaUuid: ${n.entityUuid}, projectUuid: ${n.projectUuid}). The idea's proposal is approved and ` +
149
+ `unfinished tasks remain. Claim and execute ALL remaining tasks of that proposal in dependency ` +
150
+ `order, following the develop workflow: repeatedly find claimable tasks (chorus_get_unblocked_tasks ` +
151
+ `with projectUuid: "${n.projectUuid}"), claim one (chorus_claim_task), implement it, self-check its ` +
152
+ `acceptance criteria (chorus_report_criteria_self_check), and submit it (chorus_submit_for_verify) — ` +
153
+ `then loop until NO claimable task remains. Do NOT stop after one task. Leave tasks already in ` +
154
+ `to_verify (awaiting human verification) and tasks claimed by other sessions untouched. If nothing ` +
155
+ `is claimable, post a brief status comment on the idea and end the turn.\n${mentionGuidance(n, "idea")}`
156
+ );
157
+ case "yolo_requested":
158
+ // A human clicked "Yolo" (add-stage-advance-yolo). Unlike start_development
159
+ // (always the execute stage), this wake can land at ANY incomplete stage, so the
160
+ // prompt must NOT hard-code a stage — it points the agent at the yolo skill and lets
161
+ // it self-select the entry phase from the idea's current state (no proposal yet →
162
+ // elaborate + write proposal; approved proposal with open tasks → execute; etc.).
163
+ // Honors the "yolo never merges" rule: drive through done + completion report, but
164
+ // never merge or push a PR without explicit human approval.
165
+ return (
166
+ `[Chorus] A human requested a YOLO run for idea '${n.entityTitle}' ` +
167
+ `(ideaUuid: ${n.entityUuid}, projectUuid: ${n.projectUuid}). Drive this idea all the ` +
168
+ `way to done following the yolo skill (the full-auto AI-DLC pipeline: Idea → ` +
169
+ `Elaboration → Proposal → Execute → Verify). First read the idea's current state with ` +
170
+ `chorus_get_idea (plus chorus_get_elaboration / chorus_get_proposals as needed) and ` +
171
+ `RESUME from whatever phase it is already in — do NOT assume a fixed stage: if ` +
172
+ `elaboration isn't resolved, self-elaborate then write the proposal; if a proposal is ` +
173
+ `approved with open tasks, execute them; and so on. Complete the pipeline through the ` +
174
+ `final done state and completion report, but do NOT merge or push a pull request ` +
175
+ `without explicit human approval.\n${mentionGuidance(n, "idea")}`
176
+ );
141
177
  case "proposal_rejected":
142
178
  return (
143
179
  `[Chorus] Proposal '${n.entityTitle}' was REJECTED (proposalUuid: ${n.entityUuid}, ` +
@@ -172,6 +208,21 @@ function buildPromptBody(n) {
172
208
  // daemon's isNewSession probe selects `claude --resume <directIdeaUuid>`
173
209
  // automatically, so the woken Claude continues the SAME session where it left
174
210
  // off. It intentionally has no @mention (a self-resume has no actor to address).
211
+ //
212
+ // `resumedFrom` (add-crash-execution-resume) distinguishes the resume kind:
213
+ // "crash" gets an explicit exited-abnormally instruction — the previous run may
214
+ // have died mid-edit, so the agent must verify state before continuing.
215
+ // "user" / absent / unknown (older server) keeps the original text unchanged.
216
+ if (n.resumedFrom === "crash") {
217
+ return (
218
+ `[Chorus] The previous run on this ${n.entityType} EXITED ABNORMALLY (crashed) ` +
219
+ `(${n.entityType}Uuid: ${n.entityUuid}), and a user asked to resume it. The crash may ` +
220
+ `have left work half-finished — first re-check the current state with the appropriate ` +
221
+ `chorus_get_* tool (e.g. chorus_get_task / chorus_get_idea) plus chorus_get_comments, ` +
222
+ `and inspect any partial local work (working tree, uncommitted changes, half-written ` +
223
+ `files). Then continue the unfinished work from where the crashed run left off.`
224
+ );
225
+ }
175
226
  return (
176
227
  `[Chorus] Your work on this ${n.entityType} was RESUMED after an interrupt ` +
177
228
  `(${n.entityType}Uuid: ${n.entityUuid}). Continue where you left off — re-check the ` +
@@ -253,6 +304,16 @@ export const WAKE_ACTIONS = new Set([
253
304
  // idea-rooted like the other elaboration wakes, so the session anchor/resume contract is
254
305
  // unchanged. See buildPrompt's `elaboration_verified` case for the write-proposal prompt.
255
306
  "elaboration_verified",
307
+ // add-stage-advance-start-development: a human clicked "Start Development" — the idea's
308
+ // proposal is approved and unfinished tasks remain. Wakes the assigned daemon agent to
309
+ // CLAIM AND EXECUTE ALL remaining tasks (dedicated trigger, session-origin-pinned like
310
+ // elaboration_verified). See buildPrompt's `start_development` case.
311
+ "start_development",
312
+ // add-stage-advance-yolo: a human clicked "Yolo" — wakes the assigned daemon agent to
313
+ // drive the WHOLE idea to done via the yolo skill (dedicated trigger, session-origin-
314
+ // pinned like start_development). Unlike start_development it is stage-adaptive — see
315
+ // buildPrompt's `yolo_requested` case.
316
+ "yolo_requested",
256
317
  "proposal_rejected",
257
318
  "proposal_approved",
258
319
  "idea_claimed",
@@ -4,7 +4,7 @@
4
4
  // persistent conversation; the server creates that turn (status `pending`) at the
5
5
  // notification chokepoint, and the daemon advances it:
6
6
  // • on spawn → pending → running
7
- // • on subprocess exit → running → ended
7
+ // • on subprocess exit → running → ended (clean) | interrupted (user/crash/shutdown)
8
8
  //
9
9
  // The daemon does NOT know the server-side turn uuid. It identifies the turn the SAME
10
10
  // way the transcript ingest does — by the session BUSINESS KEY (`sessionId` = the
@@ -27,7 +27,10 @@ import { createDaemonRestClient } from "./daemon-rest-client.mjs";
27
27
  const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
28
28
 
29
29
  /** Turn lifecycle states the server's turn-advance endpoint accepts. */
30
- export const TURN_STATUSES = new Set(["pending", "running", "ended"]);
30
+ export const TURN_STATUSES = new Set(["pending", "running", "ended", "interrupted"]);
31
+
32
+ /** Interrupt reasons a DAEMON may report (`offline` is server-reconcile-only). */
33
+ export const TURN_INTERRUPT_REASONS = new Set(["user", "crash", "shutdown"]);
31
34
 
32
35
  /**
33
36
  * Build an `advanceTurn(params)` function the waker invokes on a wake's spawn (→
@@ -43,7 +46,7 @@ export const TURN_STATUSES = new Set(["pending", "running", "ended"]);
43
46
  * logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
44
47
  * fetchImpl?: typeof fetch, Injectable for tests.
45
48
  * }} opts
46
- * @returns {(params: { sessionId: string, status: "running"|"ended", entityType?: string|null, entityUuid?: string|null }) => Promise<void>}
49
+ * @returns {(params: { sessionId: string, status: "running"|"ended"|"interrupted", entityType?: string|null, entityUuid?: string|null, interruptedReason?: "user"|"crash"|"shutdown"|null }) => Promise<void>}
47
50
  */
48
51
  export function createTurnReporter(opts) {
49
52
  const logger = opts.logger ?? NOOP_LOGGER;
@@ -58,18 +61,36 @@ export function createTurnReporter(opts) {
58
61
  logger,
59
62
  });
60
63
 
61
- return async function advanceTurn({ sessionId, status, entityType, entityUuid }) {
64
+ return async function advanceTurn({
65
+ sessionId,
66
+ status,
67
+ entityType,
68
+ entityUuid,
69
+ interruptedReason,
70
+ }) {
62
71
  if (typeof sessionId !== "string" || !sessionId || !TURN_STATUSES.has(status)) {
63
72
  logger.warn(
64
73
  `[Chorus] refusing to advance turn: bad sessionId/status (${sessionId}, ${status})`,
65
74
  );
66
75
  return;
67
76
  }
77
+ // Domain guard mirroring the server's: a reason travels only with `interrupted`
78
+ // and only from the daemon-reportable vocabulary (`offline` is the server's own
79
+ // reconcile verdict). Refusing here keeps a bad caller visible in daemon logs
80
+ // instead of as a server 400.
81
+ if (interruptedReason != null) {
82
+ if (status !== "interrupted" || !TURN_INTERRUPT_REASONS.has(interruptedReason)) {
83
+ logger.warn(
84
+ `[Chorus] refusing to advance turn: bad interruptedReason (${interruptedReason}) for status ${status}`,
85
+ );
86
+ return;
87
+ }
88
+ }
68
89
  // The client resolves the connectionUuid lazily, validates it (logging
69
90
  // "no connection uuid yet" when absent), POSTs the exact server payload — sending
70
91
  // entityType/entityUuid only when both are present — and logs the failure cause on a
71
92
  // network error / non-2xx. We swallow the structured result so a failed report can
72
93
  // never crash the wake path.
73
- await client.turnAdvance({ sessionId, status, entityType, entityUuid });
94
+ await client.turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason });
74
95
  };
75
96
  }
@@ -30,6 +30,15 @@ export class WakeQueue {
30
30
  /** @type {string[]} keys waiting for a global concurrency slot. */
31
31
  this.readyKeys = [];
32
32
  this.activeCount = 0;
33
+ // Graceful-shutdown latch: once set, #pump starts NOTHING new — in-flight tasks
34
+ // finish (drain observes them) but queued work stays queued and dies with the
35
+ // process. Never cleared; a stopping queue is on its way out.
36
+ this.stopped = false;
37
+ }
38
+
39
+ /** Stop starting new tasks (graceful shutdown). In-flight tasks are unaffected. */
40
+ stop() {
41
+ this.stopped = true;
33
42
  }
34
43
 
35
44
  /**
@@ -75,8 +84,29 @@ export class WakeQueue {
75
84
  return [...this.pending.entries()].filter(([, q]) => q.length > 0).map(([k]) => k);
76
85
  }
77
86
 
87
+ /**
88
+ * Wait (bounded) for every in-flight task to finish — the graceful-shutdown drain
89
+ * (fix-daemon-exit-orphan-running-turn). Resolves `true` when the queue went idle
90
+ * (no active task) within `timeoutMs`, `false` on timeout — the caller exits
91
+ * anyway and leaves the rest to the server-side reconcile backstop. Pending
92
+ * (not-yet-started) tasks are NOT waited for: a shutting-down daemon stops
93
+ * starting new work, so only the in-flight subprocesses (and their exit reports)
94
+ * matter. Polling (50ms) keeps this zero-dep and independent of task internals.
95
+ * @param {number} timeoutMs
96
+ * @returns {Promise<boolean>}
97
+ */
98
+ async drain(timeoutMs) {
99
+ const deadline = Date.now() + Math.max(0, timeoutMs);
100
+ while (this.activeCount > 0) {
101
+ if (Date.now() >= deadline) return false;
102
+ await new Promise((r) => setTimeout(r, 50));
103
+ }
104
+ return true;
105
+ }
106
+
78
107
  /** Try to start as many ready keys as the concurrency cap allows. */
79
108
  #pump() {
109
+ if (this.stopped) return; // shutting down — start nothing new
80
110
  while (this.activeCount < this.maxConcurrency && this.readyKeys.length > 0) {
81
111
  const key = this.readyKeys.shift();
82
112
  if (this.running.has(key)) continue; // already running under another slot
package/cli/waker.mjs CHANGED
@@ -19,6 +19,7 @@
19
19
  import { buildPrompt } from "./prompts.mjs";
20
20
  import { writeMcpConfig } from "./mcp-config.mjs";
21
21
  import { isNewSession } from "./claude-spawner.mjs";
22
+ import { killProcessTree, DEFAULT_SIGINT_TIMEOUT_MS } from "./process-killer.mjs";
22
23
 
23
24
  const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
24
25
 
@@ -37,13 +38,17 @@ export class Waker {
37
38
  * Injectable interrupt reporter (子3). Called when a wake's subprocess exits in
38
39
  * an interrupted (user) or crashed (non-zero, no interrupt flag) state. Defaults
39
40
  * to a no-op that logs — the daemon wires the REST reporter (interrupt-reporter.mjs).
40
- * advanceTurn?: (params: { sessionId: string, status: "running"|"ended", entityType?: string|null, entityUuid?: string|null }) => Promise<void>,
41
+ * advanceTurn?: (params: { sessionId: string, status: "running"|"ended"|"interrupted", entityType?: string|null, entityUuid?: string|null, interruptedReason?: "user"|"crash"|"shutdown" }) => Promise<void>,
41
42
  * Injectable turn-lifecycle reporter (子1 — daemon-session-conversation). Called
42
- * on spawn (→ running) and on subprocess exit (→ ended) to advance the server-side
43
+ * on spawn (→ running) and on subprocess exit (→ ended on a clean exit, or
44
+ * → interrupted with the classified reason otherwise) to advance the server-side
43
45
  * DaemonSessionTurn the notification chokepoint created (status `pending`). The
44
46
  * server resolves the turn by the session business key (`sessionId`) and stamps
45
47
  * the weak executionUuid link from entityType/entityUuid. Defaults to a no-op that
46
48
  * logs — the daemon wires the REST reporter (turn-reporter.mjs).
49
+ * killer?: (child: any, opts: any) => Promise<any>, Injectable kill escalation for
50
+ * interruptAll(); defaults to process-killer.killProcessTree (cross-platform).
51
+ * sigintTimeoutMs?: number, Escalation window interruptAll passes the killer.
47
52
  * }} opts
48
53
  */
49
54
  constructor(opts) {
@@ -91,6 +96,17 @@ export class Waker {
91
96
  // wake's exit path reads + clears it to decide reason=user vs reason=crash.
92
97
  /** @type {Set<string>} */
93
98
  this.interrupting = new Set();
99
+ // Daemon graceful-shutdown flag (fix-daemon-exit-orphan-running-turn). Set once
100
+ // by interruptAll() and never cleared — a shutting-down Waker is on its way out.
101
+ // The wake exit path reads it to report the TURN as interrupted(shutdown), and to
102
+ // SUPPRESS the execution interrupt report (a shutdown-kill would otherwise read as
103
+ // a dirty exit → sticky interrupted(crash) execution row that reconcileOffline
104
+ // deliberately skips — stranded in the UI on every Ctrl-C).
105
+ this.shuttingDown = false;
106
+ // Injectable killer for interruptAll (defaults to the shared cross-platform
107
+ // escalation; tests inject a spy). Kill logic itself stays in process-killer.mjs.
108
+ this.killer = opts.killer ?? killProcessTree;
109
+ this.sigintTimeoutMs = opts.sigintTimeoutMs ?? DEFAULT_SIGINT_TIMEOUT_MS;
94
110
 
95
111
  // Per-resource execution registry — the source of truth for the execution
96
112
  // snapshot uploaded to the server. Keyed by `${entityType}:${entityUuid}`
@@ -140,6 +156,35 @@ export class Waker {
140
156
  this.interrupting.add(this.#execKey(entityType, entityUuid));
141
157
  }
142
158
 
159
+ /**
160
+ * Daemon graceful shutdown (fix-daemon-exit-orphan-running-turn): mark this Waker
161
+ * SHUTTING DOWN and kill every live wake subprocess via the shared graceful
162
+ * escalation (SIGINT → SIGKILL after `sigintTimeoutMs`). The in-flight wake()
163
+ * promises then run their normal exit path, which — seeing `shuttingDown` —
164
+ * reports each turn `interrupted(shutdown)` and suppresses the execution
165
+ * interrupt report. Idempotent; never throws (a failed kill is logged and left
166
+ * to the server-side offline reconcile as the backstop).
167
+ *
168
+ * Returns after the kill signals are DISPATCHED — completion of the subprocesses
169
+ * (and their turn reports) is observed by awaiting the wake promises, which the
170
+ * daemon's stop() does with a bounded cap.
171
+ */
172
+ interruptAll() {
173
+ this.shuttingDown = true;
174
+ for (const [key, entry] of this.executions) {
175
+ if (entry.status !== "running" || !entry.child) continue;
176
+ try {
177
+ Promise.resolve(
178
+ this.killer(entry.child, { sigintTimeoutMs: this.sigintTimeoutMs, logger: this.logger }),
179
+ ).catch((err) => {
180
+ this.logger.warn(`[Chorus] shutdown: killProcessTree rejected for ${key}: ${err}`);
181
+ });
182
+ } catch (err) {
183
+ this.logger.warn(`[Chorus] shutdown: kill dispatch failed for ${key}: ${err}`);
184
+ }
185
+ }
186
+ }
187
+
143
188
  /** Recognized wake-triggering resource kinds the server's DaemonExecution accepts. */
144
189
  // `daemon_session` is the ad-hoc conversation's own execution entity (子3 follow-up):
145
190
  // an ad-hoc human_instruction wake has no task/idea/proposal/document behind it, so
@@ -397,30 +442,51 @@ export class Waker {
397
442
  );
398
443
  }
399
444
 
400
- // Turn lifecycle (子1): the subprocess has exited advance the server turn
401
- // running→ended, regardless of exit code (a turn ends whether the run was clean,
402
- // crashed, or interrupted). Only when it actually reached `running` (a never-
403
- // spawned wake left the turn `pending`; a pending→ended skip is rejected server-
404
- // side as invalid_transition). Swallow-safe; never throws into the wake path.
445
+ // Outcome classification for the exit reports below. Read the flags ONCE so the
446
+ // turn report and the execution report can never disagree on the outcome:
447
+ // clean exit (code 0) turn ended (unchanged)
448
+ // interrupting flag (user) → turn interrupted(user)
449
+ // shuttingDown (daemon SIGINT/TERM) turn interrupted(shutdown)
450
+ // • dirty exit otherwise → turn interrupted(crash)
451
+ // User-interrupt outranks shutdown: the flag was set by an explicit authorized
452
+ // interrupt before the shutdown began, and its execution-row semantics (sticky,
453
+ // resumable) must be preserved.
454
+ const wasInterrupting = entity && execKey ? this.interrupting.has(execKey) : false;
455
+ const cleanExit = result && result.exitCode === 0;
456
+
457
+ // Turn lifecycle: the subprocess has exited — advance the server turn from
458
+ // `running` to its OUTCOME-AWARE terminal state (fix-daemon-exit-orphan-running-
459
+ // turn): `ended` on a clean exit, `interrupted` with the classified reason
460
+ // otherwise — mirroring what the execution row records, so the conversation
461
+ // history says WHY a turn stopped. Only when it actually reached `running` (a
462
+ // never-spawned wake left the turn `pending`; a pending→<terminal> skip is
463
+ // rejected server-side as invalid_transition). Swallow-safe; never throws.
405
464
  if (sessionId && turnAdvancedToRunning) {
406
- await this.#advanceTurn(sessionId, "ended", entity);
465
+ if (cleanExit) {
466
+ await this.#advanceTurn(sessionId, "ended", entity);
467
+ } else {
468
+ const reason = wasInterrupting ? "user" : this.shuttingDown ? "shutdown" : "crash";
469
+ await this.#advanceTurn(sessionId, "interrupted", entity, reason);
470
+ }
407
471
  }
408
472
 
409
- // Interrupt-vs-crash reporting (子3, Tech Design "Interrupt vs crash
410
- // reporting"). Decide from the per-entity "interrupting" flag the control
411
- // handler may have set while the subprocess was running:
473
+ // Interrupt-vs-crash EXECUTION reporting (子3, Tech Design "Interrupt vs crash
474
+ // reporting"). Decide from the same flags as the turn report above:
412
475
  // • interrupting flag set → interrupted(reason="user")
413
476
  // • no flag AND non-zero/null exit → interrupted(reason="crash")
414
477
  // • clean exit (code 0) → nothing (unchanged)
415
- // The interrupted state is entity-generic it lives on the DaemonExecution
416
- // row (keyed connection+entity), so the reporter records it for ANY recognized
417
- // wake resource (task/idea/proposal/document), not only tasks.
478
+ // EXCEPT during shutdown (fix-daemon-exit-orphan-running-turn, review blocker
479
+ // 2): a shutdown-killed subprocess exits dirty with no user flag, which would
480
+ // record the STICKY execution state interrupted(crash) a state the execution
481
+ // offline-reconcile deliberately SKIPS and the read gate keeps showing, so
482
+ // every Ctrl-C would strand a crash-interrupted row in the UI. During shutdown
483
+ // report NO execution interrupt (user-interrupt still reports — its sticky
484
+ // resumability is the point); the row is left for reconcileOffline to flip
485
+ // `ended` when this connection's stream drops.
418
486
  if (entity && execKey) {
419
- const wasInterrupting = this.interrupting.has(execKey);
420
- const cleanExit = result && result.exitCode === 0;
421
487
  if (wasInterrupting) {
422
488
  await this.#report(entity, "user");
423
- } else if (!cleanExit) {
489
+ } else if (!cleanExit && !this.shuttingDown) {
424
490
  // No interrupt requested but the subprocess did not exit cleanly (non-zero
425
491
  // code, or null from a spawn/transport failure) → treat as a crash.
426
492
  await this.#report(entity, "crash");
@@ -480,19 +546,22 @@ export class Waker {
480
546
  * Advance the server-side DaemonSessionTurn for this wake (子1) via the injected
481
547
  * reporter. Identified server-side by the session business key (`sessionId`); the
482
548
  * optional `entity` ({ entityType, entityUuid }) lets the server stamp the weak
483
- * executionUuid link from the live execution row. Never throws into the wake path —
484
- * a reporter failure is logged and swallowed (the REST reporter already swallows;
485
- * this is belt-and-braces, matching #report).
486
- * @param {string} sessionId @param {"running"|"ended"} status
549
+ * executionUuid link from the live execution row. An `interrupted` status carries
550
+ * its classified `interruptedReason` (user/crash/shutdown). Never throws into the
551
+ * wake path — a reporter failure is logged and swallowed (the REST reporter
552
+ * already swallows; this is belt-and-braces, matching #report).
553
+ * @param {string} sessionId @param {"running"|"ended"|"interrupted"} status
487
554
  * @param {{ entityType: string, entityUuid: string }|null} entity
555
+ * @param {"user"|"crash"|"shutdown"|null} [interruptedReason]
488
556
  */
489
- async #advanceTurn(sessionId, status, entity) {
557
+ async #advanceTurn(sessionId, status, entity, interruptedReason = null) {
490
558
  try {
491
559
  await this.advanceTurn({
492
560
  sessionId,
493
561
  status,
494
562
  entityType: entity?.entityType ?? null,
495
563
  entityUuid: entity?.entityUuid ?? null,
564
+ ...(status === "interrupted" && interruptedReason ? { interruptedReason } : {}),
496
565
  });
497
566
  } catch (err) {
498
567
  this.logger.warn(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chorus-aidlc/chorus",
3
- "version": "0.13.0",
3
+ "version": "0.13.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,2 @@
1
+ -- AlterTable
2
+ ALTER TABLE "DaemonSessionTurn" ADD COLUMN "interruptedReason" TEXT;
@@ -593,9 +593,16 @@ model DaemonSessionTurn {
593
593
  sessionUuid String
594
594
  session DaemonSession @relation(fields: [sessionUuid], references: [uuid], onDelete: Cascade)
595
595
  seq Int // monotonic per session
596
- trigger String // task_assigned | mentioned | elaboration | elaboration_verified | resume | human_instruction
596
+ trigger String // task_assigned | mentioned | elaboration | elaboration_verified | start_development | yolo_requested | resume | human_instruction
597
597
  promptText String? // free-text body for human_instruction; null otherwise (canonical source)
598
- status String @default("pending") // pending | running | ended
598
+ status String @default("pending") // pending | running | ended | interrupted
599
+ // Discriminator for the `interrupted` status: `user` = user-requested interrupt,
600
+ // `crash` = subprocess exited dirty, `shutdown` = daemon graceful shutdown killed
601
+ // the wake, `offline` = server-side reconcile of a turn whose origin connection
602
+ // went stale. Non-null iff status == interrupted. Unlike DaemonExecution's sticky
603
+ // `interrupted` (resumable), a turn's `interrupted` is TERMINAL — it is durable
604
+ // conversation history, never resumed or auto-retried.
605
+ interruptedReason String?
599
606
  // Weak ref to the live DaemonExecution row this turn corresponds to (no DB FK;
600
607
  // execution rows are reconciled/transient).
601
608
  executionUuid String?
@@ -1 +0,0 @@
1
- (()=>{var a={};a.id=1244,a.ids=[1244],a.modules={261:a=>{"use strict";a.exports=require("next/dist/shared/lib/router/utils/app-paths")},3295:a=>{"use strict";a.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},4573:a=>{"use strict";a.exports=require("node:buffer")},7046:(a,b,c)=>{"use strict";c.d(b,{kX:()=>e,od:()=>f,sO:()=>j});var d=c(70936);function e(a,b){return d.NextResponse.json({success:!0,data:a,meta:b})}function f(a,b,c,e){return d.NextResponse.json({success:!0,data:a,meta:{page:b,pageSize:c,total:e}})}let g={BAD_REQUEST:"BAD_REQUEST",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",NOT_FOUND:"NOT_FOUND",CONFLICT:"CONFLICT",VALIDATION_ERROR:"VALIDATION_ERROR",ALREADY_CLAIMED:"ALREADY_CLAIMED",NOT_CLAIMED:"NOT_CLAIMED",INVALID_STATUS_TRANSITION:"INVALID_STATUS_TRANSITION",PERMISSION_DENIED:"PERMISSION_DENIED",INTERNAL_ERROR:"INTERNAL_ERROR",DATABASE_ERROR:"DATABASE_ERROR"},h={[g.BAD_REQUEST]:400,[g.UNAUTHORIZED]:401,[g.FORBIDDEN]:403,[g.NOT_FOUND]:404,[g.CONFLICT]:409,[g.VALIDATION_ERROR]:422,[g.ALREADY_CLAIMED]:409,[g.NOT_CLAIMED]:400,[g.INVALID_STATUS_TRANSITION]:400,[g.PERMISSION_DENIED]:403,[g.INTERNAL_ERROR]:500,[g.DATABASE_ERROR]:500};function i(a,b,c){let e=h[a]||500;return d.NextResponse.json({success:!1,error:{code:a,message:b,details:c}},{status:e})}let j={badRequest:(a,b)=>i(g.BAD_REQUEST,a,b),unauthorized:(a="Authentication required")=>i(g.UNAUTHORIZED,a),forbidden:(a="Access denied")=>i(g.FORBIDDEN,a),notFound:(a="Resource")=>i(g.NOT_FOUND,`${a} not found`),conflict:a=>i(g.CONFLICT,a),validationError:a=>i(g.VALIDATION_ERROR,"Validation failed",a),alreadyClaimed:()=>i(g.ALREADY_CLAIMED,"Resource is already claimed"),notClaimed:()=>i(g.NOT_CLAIMED,"Resource is not claimed"),invalidStatusTransition:(a,b)=>i(g.INVALID_STATUS_TRANSITION,`Invalid status transition from ${a} to ${b}`),permissionDenied:a=>i(g.PERMISSION_DENIED,`Permission denied: ${a}`),internal:(a="Internal server error")=>i(g.INTERNAL_ERROR,a),database:(a="Database error")=>i(g.DATABASE_ERROR,a)}},10846:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11716:(a,b,c)=>{"use strict";c.d(b,{HW:()=>f,dc:()=>e,f1:()=>g,yo:()=>d});let d=2592e3;function e(a){return"number"==typeof a&&Number.isFinite(a)&&a>0?Math.floor(a):d}function f(a,b=3600){try{let c=a.split(".");if(3!==c.length)return b;let d=JSON.parse(Buffer.from(c[1],"base64url").toString("utf-8"));if("number"==typeof d.exp){let a=d.exp-Math.floor(Date.now()/1e3);return Math.max(a+60,0)}return b}catch{return b}}function g(a){return{httpOnly:!0,secure:"false"!==process.env.COOKIE_SECURE,sameSite:"lax",path:"/",maxAge:a}}},14360:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(90800),e=c(82145),f=c(37442);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},15264:(a,b,c)=>{"use strict";c.d(b,{$Y:()=>l,Bz:()=>o,En:()=>m,Iu:()=>p,NE:()=>j,VM:()=>n,ev:()=>k,wL:()=>q});var d=c(73365),e=c(3548),f=c(11716);let g="user_session",h="user_refresh";function i(){let a=process.env.NEXTAUTH_SECRET;if(!a)throw Error("NEXTAUTH_SECRET is not set");return new TextEncoder().encode(a)}async function j(a,b="1h"){return new d.P({...a,tokenType:"access"}).setProtectedHeader({alg:"HS256"}).setIssuedAt().setExpirationTime(b).sign(i())}async function k(a){return new d.P({userUuid:a.userUuid,companyUuid:a.companyUuid,tokenType:"refresh"}).setProtectedHeader({alg:"HS256"}).setIssuedAt().setExpirationTime("7d").sign(i())}async function l(a){try{let{payload:b}=await (0,e.V)(a,i());if("user"===b.type&&"access"===b.tokenType)return{type:"user",userUuid:b.userUuid,companyUuid:b.companyUuid,email:b.email,name:b.name,oidcSub:b.oidcSub,oidcAccessToken:b.oidcAccessToken,oidcRefreshToken:b.oidcRefreshToken,oidcExpiresAt:b.oidcExpiresAt};return null}catch{return null}}async function m(a){try{let{payload:b}=await (0,e.V)(a,i());if("refresh"===b.tokenType)return{userUuid:b.userUuid,companyUuid:b.companyUuid};return null}catch{return null}}async function n(a){let b=function(a){if(!a)return null;let b=a.match(/^Bearer\s+(.+)$/i);return b?b[1]:null}(a.headers.get("authorization"));if(b){let a=await l(b);if(a)return{type:"user",companyUuid:a.companyUuid,actorUuid:a.userUuid,email:a.email,name:a.name}}let c=a.cookies.get(g)?.value;if(!c)return null;let d=await l(c);return d?{type:"user",companyUuid:d.companyUuid,actorUuid:d.userUuid,email:d.email,name:d.name}:null}function o(a,b,c,d=3600){a.cookies.set(g,b,(0,f.f1)(d)),a.cookies.set(h,c,(0,f.f1)(604800))}function p(a){a.cookies.set(g,"",(0,f.f1)(0)),a.cookies.set(h,"",(0,f.f1)(0))}function q(a){return a.cookies.get(h)?.value||null}},19121:a=>{"use strict";a.exports=require("next/dist/server/app-render/action-async-storage.external.js")},22779:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{GE:()=>j,LY:()=>h,gH:()=>g,yx:()=>i});var e=c(52618),f=a([e]);async function g(a){let{oidcSub:b,email:c,name:d,companyUuid:f}=a,g=await e.z.user.findFirst({where:{oidcSub:b,companyUuid:f},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}});if(g)return(g.email!==c||g.name!==d)&&(g=await e.z.user.update({where:{id:g.id},data:{email:c,name:d},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}})),g;let h=await e.z.user.findFirst({where:{email:c,companyUuid:f}});return h?e.z.user.update({where:{id:h.id},data:{oidcSub:b,name:d},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}}):e.z.user.create({data:{email:c,name:d,oidcSub:b,companyUuid:f},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}})}async function h(a){let b=a.split("@")[1]?.toLowerCase();if(!b)throw Error("Invalid email: no domain");let c=await e.z.company.findFirst({where:{emailDomains:{has:b}},select:{id:!0,uuid:!0,name:!0}});c||(c=await e.z.company.create({data:{name:b,emailDomains:[b],oidcEnabled:!1},select:{id:!0,uuid:!0,name:!0}}));let d=`default_${a.toLowerCase()}`;return await e.z.user.upsert({where:{companyUuid_oidcSub:{companyUuid:c.uuid,oidcSub:d}},update:{email:a},create:{email:a,name:a.split("@")[0],oidcSub:d,companyUuid:c.uuid},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0}}}})}async function i(a){return e.z.user.findUnique({where:{uuid:a},select:{id:!0,uuid:!0,email:!0,name:!0,oidcSub:!0,companyUuid:!0,company:{select:{uuid:!0,name:!0,oidcIssuer:!0,oidcClientId:!0}}}})}async function j(a){return e.z.company.findFirst({where:{uuid:a},select:{id:!0,uuid:!0,name:!0,oidcIssuer:!0,oidcClientId:!0,oidcEnabled:!0}})}e=(f.then?(await f)():f)[0],d()}catch(a){d(a)}})},26849:a=>{"use strict";a.exports=require("@prisma/client/runtime/client")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},44865:a=>{"use strict";a.exports=import("@prisma/client/runtime/query_compiler_fast_bg.postgresql.wasm-base64.mjs")},44870:a=>{"use strict";a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},46809:(a,b,c)=>{"use strict";a.exports=c(44870)},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},64939:a=>{"use strict";a.exports=import("pg")},66371:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{POST:()=>k});var e=c(70936),f=c(7046),g=c(15264),h=c(22779),i=c(65582),j=a([h]);async function k(a){try{let b=(0,g.wL)(a);if(!b)return f.sO.unauthorized("No refresh token");let c=await (0,g.En)(b);if(!c)return f.sO.unauthorized("Invalid refresh token");let d=await (0,h.yx)(c.userUuid);if(!d)return f.sO.unauthorized("User not found");let i={type:"user",userUuid:d.uuid,companyUuid:d.companyUuid,email:d.email||"",name:d.name||void 0,oidcSub:d.oidcSub||""},[j,k]=await Promise.all([(0,g.NE)(i),(0,g.ev)(i)]),l=e.NextResponse.json((0,f.kX)({user:{uuid:d.uuid,email:d.email,name:d.name},company:{uuid:d.company.uuid,name:d.company.name},refreshed:!0}));return(0,g.Bz)(l,j,k),l}catch(a){return i.default.error({err:a},"Token refresh error"),f.sO.internal("Failed to refresh token")}}h=(j.then?(await j)():j)[0],d()}catch(a){d(a)}})},73136:a=>{"use strict";a.exports=require("node:url")},73365:(a,b,c)=>{"use strict";c.d(b,{P:()=>r});var d=c(64331),e=c(45483),f=c(81572),g=c(26084);async function h(a,b,c){let d=await (0,g.j)(a,b,"sign");return(0,f.O)(a,d),new Uint8Array(await crypto.subtle.sign((0,e.B)(a,d.algorithm),d,c))}var i=c(50600),j=c(4927),k=c(55865),l=c(32020),m=c(25546),n=c(34602);class o{#a;#b;#c;constructor(a){if(!(a instanceof Uint8Array))throw TypeError("payload must be an instance of Uint8Array");this.#a=a}setProtectedHeader(a){if(this.#b)throw TypeError("setProtectedHeader can only be called once");return this.#b=a,this}setUnprotectedHeader(a){if(this.#c)throw TypeError("setUnprotectedHeader can only be called once");return this.#c=a,this}async sign(a,b){let c,e,f,g;if(!this.#b&&!this.#c)throw new j.Ye("either setProtectedHeader or setUnprotectedHeader must be called before #sign()");if(!(0,i.f)(this.#b,this.#c))throw new j.Ye("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");let o={...this.#b,...this.#c},p=(0,m.n)(j.Ye,new Map([["b64",!0]]),b?.crit,this.#b,o),q=!0;if(p.has("b64")&&"boolean"!=typeof(q=this.#b.b64))throw new j.Ye('The "b64" (base64url-encode payload) Header Parameter must be a boolean');let{alg:r}=o;if("string"!=typeof r||!r)throw new j.Ye('JWS "alg" (Algorithm) Header Parameter missing or invalid');(0,l.y)(r,a,"sign"),q?(c=(0,d.l)(this.#a),e=(0,k.lF)(c)):(e=this.#a,c=""),this.#b?(f=(0,d.l)(JSON.stringify(this.#b)),g=(0,k.lF)(f)):(f="",g=new Uint8Array);let s=(0,k.xW)(g,(0,k.lF)("."),e),t=await (0,n.l)(a,r),u=await h(r,t,s),v={signature:(0,d.l)(u),payload:c};return this.#c&&(v.header=this.#c),this.#b&&(v.protected=f),v}}class p{#d;constructor(a){this.#d=new o(a)}setProtectedHeader(a){return this.#d.setProtectedHeader(a),this}async sign(a,b){let c=await this.#d.sign(a,b);if(void 0===c.payload)throw TypeError("use the flattened module for creating JWS with b64: false");return`${c.protected}.${c.payload}.${c.signature}`}}var q=c(40201);class r{#b;#e;constructor(a={}){this.#e=new q.cE(a)}setIssuer(a){return this.#e.iss=a,this}setSubject(a){return this.#e.sub=a,this}setAudience(a){return this.#e.aud=a,this}setJti(a){return this.#e.jti=a,this}setNotBefore(a){return this.#e.nbf=a,this}setExpirationTime(a){return this.#e.exp=a,this}setIssuedAt(a){return this.#e.iat=a,this}setProtectedHeader(a){return this.#b=a,this}async sign(a,b){let c=new p(this.#e.data());if(c.setProtectedHeader(this.#b),Array.isArray(this.#b?.crit)&&this.#b.crit.includes("b64")&&!1===this.#b.b64)throw new j.Dp("JWTs MUST NOT use unencoded payload");return c.sign(a,b)}}},74552:a=>{"use strict";a.exports=require("pino")},75811:a=>{"use strict";a.exports=import("@prisma/client/runtime/query_compiler_fast_bg.postgresql.mjs")},76760:a=>{"use strict";a.exports=require("node:path")},81180:()=>{},86439:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external")},88081:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{handler:()=>x,patchFetch:()=>w,routeModule:()=>y,serverHooks:()=>B,workAsyncStorage:()=>z,workUnitAsyncStorage:()=>A});var e=c(46809),f=c(30630),g=c(81405),h=c(8877),i=c(91959),j=c(261),k=c(80605),l=c(64339),m=c(57717),n=c(59862),o=c(14360),p=c(37442),q=c(24640),r=c(68249),s=c(86439),t=c(39959),u=c(66371),v=a([u]);u=(v.then?(await v)():v)[0];let y=new e.AppRouteRouteModule({definition:{kind:f.RouteKind.APP_ROUTE,page:"/api/auth/refresh/route",pathname:"/api/auth/refresh",filename:"route",bundlePath:"app/api/auth/refresh/route"},distDir:".next",relativeProjectDir:"",resolvedPagePath:"/home/ubuntu/dev/ai-pm/src/app/api/auth/refresh/route.ts",nextConfigOutput:"standalone",userland:u}),{workAsyncStorage:z,workUnitAsyncStorage:A,serverHooks:B}=y;function w(){return(0,g.patchFetch)({workAsyncStorage:z,workUnitAsyncStorage:A})}async function x(a,b,c){var d;let e="/api/auth/refresh/route";"/index"===e&&(e="/");let g=await y.prepare(a,b,{srcPage:e,multiZoneDraftMode:!1});if(!g)return b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve()),null;let{buildId:u,params:v,nextConfig:w,isDraftMode:x,prerenderManifest:z,routerServerContext:A,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,resolvedPathname:D}=g,E=(0,j.normalizeAppPath)(e),F=!!(z.dynamicRoutes[E]||z.routes[D]);if(F&&!x){let a=!!z.routes[D],b=z.dynamicRoutes[E];if(b&&!1===b.fallback&&!a)throw new s.NoFallbackError}let G=null;!F||y.isDev||x||(G=D,G="/index"===G?"/":G);let H=!0===y.isDev||!F,I=F&&!H,J=a.method||"GET",K=(0,i.getTracer)(),L=K.getActiveScopeSpan(),M={params:v,prerenderManifest:z,renderOpts:{experimental:{cacheComponents:!!w.experimental.cacheComponents,authInterrupts:!!w.experimental.authInterrupts},supportsDynamicResponse:H,incrementalCache:(0,h.getRequestMeta)(a,"incrementalCache"),cacheLifeProfiles:null==(d=w.experimental)?void 0:d.cacheLife,isRevalidate:I,waitUntil:c.waitUntil,onClose:a=>{b.on("close",a)},onAfterTaskError:void 0,onInstrumentationRequestError:(b,c,d)=>y.onRequestError(a,b,d,A)},sharedContext:{buildId:u}},N=new k.NodeNextRequest(a),O=new k.NodeNextResponse(b),P=l.NextRequestAdapter.fromNodeNextRequest(N,(0,l.signalFromNodeResponse)(b));try{let d=async c=>y.handle(P,M).finally(()=>{if(!c)return;c.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let d=K.getRootSpanAttributes();if(!d)return;if(d.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${d.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let e=d.get("next.route");if(e){let a=`${J} ${e}`;c.setAttributes({"next.route":e,"http.route":e,"next.span_name":a}),c.updateName(a)}else c.updateName(`${J} ${a.url}`)}),g=async g=>{var i,j;let k=async({previousCacheEntry:f})=>{try{if(!(0,h.getRequestMeta)(a,"minimalMode")&&B&&C&&!f)return b.statusCode=404,b.setHeader("x-nextjs-cache","REVALIDATED"),b.end("This page could not be found"),null;let e=await d(g);a.fetchMetrics=M.renderOpts.fetchMetrics;let i=M.renderOpts.pendingWaitUntil;i&&c.waitUntil&&(c.waitUntil(i),i=void 0);let j=M.renderOpts.collectedTags;if(!F)return await (0,o.I)(N,O,e,M.renderOpts.pendingWaitUntil),null;{let a=await e.blob(),b=(0,p.toNodeOutgoingHttpHeaders)(e.headers);j&&(b[r.NEXT_CACHE_TAGS_HEADER]=j),!b["content-type"]&&a.type&&(b["content-type"]=a.type);let c=void 0!==M.renderOpts.collectedRevalidate&&!(M.renderOpts.collectedRevalidate>=r.INFINITE_CACHE)&&M.renderOpts.collectedRevalidate,d=void 0===M.renderOpts.collectedExpire||M.renderOpts.collectedExpire>=r.INFINITE_CACHE?void 0:M.renderOpts.collectedExpire;return{value:{kind:t.CachedRouteKind.APP_ROUTE,status:e.status,body:Buffer.from(await a.arrayBuffer()),headers:b},cacheControl:{revalidate:c,expire:d}}}}catch(b){throw(null==f?void 0:f.isStale)&&await y.onRequestError(a,b,{routerKind:"App Router",routePath:e,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})},A),b}},l=await y.handleResponse({req:a,nextConfig:w,cacheKey:G,routeKind:f.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:z,isRoutePPREnabled:!1,isOnDemandRevalidate:B,revalidateOnlyGenerated:C,responseGenerator:k,waitUntil:c.waitUntil});if(!F)return null;if((null==l||null==(i=l.value)?void 0:i.kind)!==t.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==l||null==(j=l.value)?void 0:j.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});(0,h.getRequestMeta)(a,"minimalMode")||b.setHeader("x-nextjs-cache",B?"REVALIDATED":l.isMiss?"MISS":l.isStale?"STALE":"HIT"),x&&b.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let m=(0,p.fromNodeOutgoingHttpHeaders)(l.value.headers);return(0,h.getRequestMeta)(a,"minimalMode")&&F||m.delete(r.NEXT_CACHE_TAGS_HEADER),!l.cacheControl||b.getHeader("Cache-Control")||m.get("Cache-Control")||m.set("Cache-Control",(0,q.getCacheControlHeader)(l.cacheControl)),await (0,o.I)(N,O,new Response(l.value.body,{headers:m,status:l.value.status||200})),null};L?await g(L):await K.withPropagatedContext(a.headers,()=>K.trace(m.BaseServerSpan.handleRequest,{spanName:`${J} ${a.url}`,kind:i.SpanKind.SERVER,attributes:{"http.method":J,"http.target":a.url}},g))}catch(b){if(b instanceof s.NoFallbackError||await y.onRequestError(a,b,{routerKind:"App Router",routePath:E,routeType:"route",revalidateReason:(0,n.c)({isRevalidate:I,isOnDemandRevalidate:B})}),F)throw b;return await (0,o.I)(N,O,new Response(null,{status:500})),null}}d()}catch(a){d(a)}})},90908:()=>{}};var b=require("../../../../webpack-runtime.js");b.C(a);var c=b.X(0,[8843,936,9833,3548,2618],()=>b(b.s=88081));module.exports=c})();