@chorus-aidlc/chorus 0.14.2 → 0.14.3

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 (495) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +437 -430
  3. package/.next/standalone/.next/app-path-routes-manifest.json +45 -44
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +36 -36
  6. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +2 -2
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js +2 -2
  13. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +2 -2
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +3 -3
  43. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  46. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  48. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  50. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  51. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  54. package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
  55. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  56. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  57. package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
  58. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/admin.html +2 -2
  60. package/.next/standalone/.next/server/app/admin.rsc +2 -2
  61. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  62. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  69. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js +1 -0
  81. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route.js.nft.json +1 -0
  82. package/.next/standalone/.next/server/app/api/daemon/connection-heartbeat/route_client-reference-manifest.js +1 -0
  83. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  85. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  89. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/events/notifications/route.js +5 -5
  100. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  103. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  105. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  107. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -1
  110. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  112. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  117. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  119. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  121. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -1
  125. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  127. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  130. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  131. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  132. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  134. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  138. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  140. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  144. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  146. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  150. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  155. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/app/index.html +2 -2
  158. package/.next/standalone/.next/server/app/index.rsc +2 -2
  159. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  160. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  161. package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
  162. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  163. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  164. package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
  165. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  168. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
  169. package/.next/standalone/.next/server/app/login.html +2 -2
  170. package/.next/standalone/.next/server/app/login.rsc +2 -2
  171. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  172. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  175. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  176. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/projects.html +2 -2
  178. package/.next/standalone/.next/server/app/projects.rsc +3 -3
  179. package/.next/standalone/.next/server/app/settings.html +2 -2
  180. package/.next/standalone/.next/server/app/settings.rsc +4 -4
  181. package/.next/standalone/.next/server/app-paths-manifest.json +45 -44
  182. package/.next/standalone/.next/server/chunks/1114.js +1 -1
  183. package/.next/standalone/.next/server/chunks/1318.js +1 -1
  184. package/.next/standalone/.next/server/chunks/1559.js +1 -1
  185. package/.next/standalone/.next/server/chunks/2004.js +1 -0
  186. package/.next/standalone/.next/server/chunks/2112.js +1 -0
  187. package/.next/standalone/.next/server/chunks/{1286.js → 2282.js} +3 -3
  188. package/.next/standalone/.next/server/chunks/2570.js +2 -2
  189. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  190. package/.next/standalone/.next/server/chunks/{6492.js → 2789.js} +2 -2
  191. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  192. package/.next/standalone/.next/server/chunks/3219.js +1 -1
  193. package/.next/standalone/.next/server/chunks/4070.js +1 -0
  194. package/.next/standalone/.next/server/chunks/4827.js +1 -1
  195. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  196. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  197. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  198. package/.next/standalone/.next/server/chunks/6506.js +2 -2
  199. package/.next/standalone/.next/server/chunks/6515.js +2 -2
  200. package/.next/standalone/.next/server/chunks/679.js +1 -1
  201. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  202. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  203. package/.next/standalone/.next/server/chunks/8454.js +1 -1
  204. package/.next/standalone/.next/server/chunks/8540.js +1 -0
  205. package/.next/standalone/.next/server/chunks/920.js +1 -1
  206. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  207. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  208. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  209. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  210. package/.next/standalone/.next/server/pages/404.html +2 -2
  211. package/.next/standalone/.next/server/pages/500.html +1 -1
  212. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  214. package/.next/standalone/.next/static/3R5zOQKwCZOVs9-BjIVqk/_buildManifest.js +1 -0
  215. package/.next/standalone/.next/static/chunks/{11595.fbbfc784ff9ee566.js → 11595.c580c5690d176cce.js} +1 -1
  216. package/.next/standalone/.next/static/chunks/{13867-a95a4555fcb7b13b.js → 14160-7bcee6e9e8bc5233.js} +1 -1
  217. package/.next/standalone/.next/static/chunks/{32331-87ae9bc7517c7947.js → 18351-2a408c4f57ddb3a7.js} +1 -1
  218. package/.next/standalone/.next/static/chunks/24870-5b0be64361f5ef70.js +1 -0
  219. package/.next/standalone/.next/static/chunks/26232-110019cebde19691.js +1 -0
  220. package/.next/standalone/.next/static/chunks/{33456.b67f1146831e9f2b.js → 33456.c48dc366aa90b234.js} +1 -1
  221. package/.next/standalone/.next/static/chunks/{37985-e4683195e4ca2519.js → 33806-cb339e86820a87c4.js} +1 -1
  222. package/.next/standalone/.next/static/chunks/{38526-7ffc4b7351c15bc4.js → 37938-c09acf52d7f85cb4.js} +1 -1
  223. package/.next/standalone/.next/static/chunks/{4860.3491d748fdde968e.js → 4860.baf6a285246198af.js} +1 -1
  224. package/.next/standalone/.next/static/chunks/{33277-9926b461045318b3.js → 60178-d6276df1c07d7735.js} +2 -2
  225. package/.next/standalone/.next/static/chunks/68326-924445654ed47e6f.js +1 -0
  226. package/.next/standalone/.next/static/chunks/78917-1498676a1ffe5ded.js +1 -0
  227. package/.next/standalone/.next/static/chunks/94470-1076452151689267.js +1 -0
  228. package/.next/standalone/.next/static/chunks/94643-7c7f2efab0640658.js +1 -0
  229. package/.next/standalone/.next/static/chunks/{99373.827383575665ce2f.js → 99373.ad871bd0bbfc5eb7.js} +1 -1
  230. package/.next/standalone/.next/static/chunks/app/(dashboard)/{layout-12d81eedb519461c.js → layout-78259279cf6c6919.js} +1 -1
  231. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-8cf720e8efb6ac7d.js +1 -0
  232. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/{page-996b8a87b4b986f1.js → page-59dcf0ba7ce877ec.js} +1 -1
  233. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-d6c226fd56b5ebb5.js +1 -0
  234. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/{page-c231207c3674aa54.js → page-2c9d3f4c6e0ff807.js} +1 -1
  235. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-c62c7d7cf9833060.js → page-af35d50848f01875.js} +1 -1
  236. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-cb6fdf592863833c.js +1 -0
  237. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-596d97796dd55e2f.js +1 -0
  238. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/{page-7948aa8db4813091.js → page-ed9415921188b4d3.js} +1 -1
  239. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/{page-8eea1e0cea60758f.js → page-ebf4c28014025b7b.js} +1 -1
  240. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/{page-658f31ac6a28ec82.js → page-bbde7e85e3388813.js} +1 -1
  241. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-e60bc39bf2957f77.js +1 -0
  242. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  243. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-8cf720e8efb6ac7d.js +1 -0
  244. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-8cf720e8efb6ac7d.js +1 -0
  245. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-8cf720e8efb6ac7d.js +1 -0
  246. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-8cf720e8efb6ac7d.js +1 -0
  247. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  248. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-8cf720e8efb6ac7d.js +1 -0
  249. package/.next/standalone/.next/static/chunks/app/api/agents/route-8cf720e8efb6ac7d.js +1 -0
  250. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  251. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-8cf720e8efb6ac7d.js +1 -0
  252. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-8cf720e8efb6ac7d.js +1 -0
  253. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-8cf720e8efb6ac7d.js +1 -0
  254. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-8cf720e8efb6ac7d.js +1 -0
  255. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-8cf720e8efb6ac7d.js +1 -0
  256. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-8cf720e8efb6ac7d.js +1 -0
  257. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-8cf720e8efb6ac7d.js +1 -0
  258. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-8cf720e8efb6ac7d.js +1 -0
  259. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-8cf720e8efb6ac7d.js +1 -0
  260. package/.next/standalone/.next/static/chunks/app/api/comments/route-8cf720e8efb6ac7d.js +1 -0
  261. package/.next/standalone/.next/static/chunks/app/api/daemon/connection-heartbeat/route-8cf720e8efb6ac7d.js +1 -0
  262. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-8cf720e8efb6ac7d.js +1 -0
  263. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-8cf720e8efb6ac7d.js +1 -0
  264. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-8cf720e8efb6ac7d.js +1 -0
  265. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-8cf720e8efb6ac7d.js +1 -0
  266. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-8cf720e8efb6ac7d.js +1 -0
  267. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-8cf720e8efb6ac7d.js +1 -0
  268. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-8cf720e8efb6ac7d.js +1 -0
  269. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-8cf720e8efb6ac7d.js +1 -0
  270. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-8cf720e8efb6ac7d.js +1 -0
  271. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-8cf720e8efb6ac7d.js +1 -0
  272. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-8cf720e8efb6ac7d.js +1 -0
  273. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-8cf720e8efb6ac7d.js +1 -0
  274. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-8cf720e8efb6ac7d.js +1 -0
  275. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  276. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-8cf720e8efb6ac7d.js +1 -0
  277. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-8cf720e8efb6ac7d.js +1 -0
  278. package/.next/standalone/.next/static/chunks/app/api/events/route-8cf720e8efb6ac7d.js +1 -0
  279. package/.next/standalone/.next/static/chunks/app/api/health/route-8cf720e8efb6ac7d.js +1 -0
  280. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-8cf720e8efb6ac7d.js +1 -0
  281. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-8cf720e8efb6ac7d.js +1 -0
  282. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-8cf720e8efb6ac7d.js +1 -0
  283. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-8cf720e8efb6ac7d.js +1 -0
  284. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-8cf720e8efb6ac7d.js +1 -0
  285. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  286. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/wake-preview/route-8cf720e8efb6ac7d.js +1 -0
  287. package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-8cf720e8efb6ac7d.js +1 -0
  288. package/.next/standalone/.next/static/chunks/app/api/mcp/route-8cf720e8efb6ac7d.js +1 -0
  289. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-8cf720e8efb6ac7d.js +1 -0
  290. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-8cf720e8efb6ac7d.js +1 -0
  291. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-8cf720e8efb6ac7d.js +1 -0
  292. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-8cf720e8efb6ac7d.js +1 -0
  293. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-8cf720e8efb6ac7d.js +1 -0
  294. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-8cf720e8efb6ac7d.js +1 -0
  295. package/.next/standalone/.next/static/chunks/app/api/notifications/route-8cf720e8efb6ac7d.js +1 -0
  296. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-8cf720e8efb6ac7d.js +1 -0
  297. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-8cf720e8efb6ac7d.js +1 -0
  298. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  299. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-8cf720e8efb6ac7d.js +1 -0
  300. package/.next/standalone/.next/static/chunks/app/api/project-visits/pin/route-8cf720e8efb6ac7d.js +1 -0
  301. package/.next/standalone/.next/static/chunks/app/api/project-visits/route-8cf720e8efb6ac7d.js +1 -0
  302. package/.next/standalone/.next/static/chunks/app/api/project-visits/visit/route-8cf720e8efb6ac7d.js +1 -0
  303. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-8cf720e8efb6ac7d.js +1 -0
  304. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-8cf720e8efb6ac7d.js +1 -0
  305. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-8cf720e8efb6ac7d.js +1 -0
  306. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-8cf720e8efb6ac7d.js +1 -0
  307. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-8cf720e8efb6ac7d.js +1 -0
  308. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-8cf720e8efb6ac7d.js +1 -0
  309. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-8cf720e8efb6ac7d.js +1 -0
  310. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-8cf720e8efb6ac7d.js +1 -0
  311. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-8cf720e8efb6ac7d.js +1 -0
  312. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-8cf720e8efb6ac7d.js +1 -0
  313. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  314. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-8cf720e8efb6ac7d.js +1 -0
  315. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-8cf720e8efb6ac7d.js +1 -0
  316. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-8cf720e8efb6ac7d.js +1 -0
  317. package/.next/standalone/.next/static/chunks/app/api/projects/route-8cf720e8efb6ac7d.js +1 -0
  318. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-8cf720e8efb6ac7d.js +1 -0
  319. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-8cf720e8efb6ac7d.js +1 -0
  320. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-8cf720e8efb6ac7d.js +1 -0
  321. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-8cf720e8efb6ac7d.js +1 -0
  322. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  323. package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  324. package/.next/standalone/.next/static/chunks/app/api/references/route-8cf720e8efb6ac7d.js +1 -0
  325. package/.next/standalone/.next/static/chunks/app/api/search/route-8cf720e8efb6ac7d.js +1 -0
  326. package/.next/standalone/.next/static/chunks/app/api/session/route-8cf720e8efb6ac7d.js +1 -0
  327. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  328. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-8cf720e8efb6ac7d.js +1 -0
  329. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-8cf720e8efb6ac7d.js +1 -0
  330. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-8cf720e8efb6ac7d.js +1 -0
  331. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-8cf720e8efb6ac7d.js +1 -0
  332. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-8cf720e8efb6ac7d.js +1 -0
  333. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-8cf720e8efb6ac7d.js +1 -0
  334. package/.next/standalone/.next/static/chunks/app/onboarding/{page-b178eb3215360d91.js → page-006bf9e9d6a991f1.js} +1 -1
  335. package/.next/standalone/.next/static/chunks/{webpack-567d9ffe31a0a5ee.js → webpack-af2cb28ef7bbd7c2.js} +1 -1
  336. package/.next/standalone/.next/static/css/f46eab37c942ff33.css +1 -0
  337. package/.next/standalone/package.json +1 -1
  338. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  339. package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +1 -1
  340. package/.next/standalone/public/chorus-plugin/bin/verify-document-roundtrip.sh +28 -0
  341. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  342. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +1 -1
  343. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
  344. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +1 -1
  345. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +8 -4
  346. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
  347. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  348. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  349. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +1 -1
  350. package/.next/standalone/public/install-kiro.sh +1 -1
  351. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +1 -1
  352. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +1 -1
  353. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +1 -1
  354. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +8 -4
  355. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +1 -1
  356. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +1 -1
  357. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +1 -1
  358. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +1 -1
  359. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +1 -1
  360. package/.next/standalone/public/kiro-plugin/bin/verify-document-roundtrip.sh +28 -0
  361. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  362. package/.next/standalone/public/skill/chorus/SKILL.md +1 -1
  363. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
  364. package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
  365. package/.next/standalone/public/skill/idea-chorus/SKILL.md +1 -1
  366. package/.next/standalone/public/skill/package.json +1 -1
  367. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  368. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  369. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  370. package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
  371. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  372. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
  373. package/cli/claude-spawner.mjs +4 -0
  374. package/cli/codex-spawner.mjs +41 -10
  375. package/cli/codex-usage-map.mjs +115 -0
  376. package/cli/daemon-rest-client.mjs +34 -3
  377. package/cli/daemon.mjs +9 -0
  378. package/cli/sse-listener.mjs +82 -5
  379. package/cli/turn-reporter.mjs +17 -5
  380. package/cli/upload-hooks.mjs +337 -12
  381. package/cli/waker.mjs +68 -13
  382. package/package.json +1 -1
  383. package/prisma/migrations/20260723014810_add_turn_relay_error/migration.sql +2 -0
  384. package/prisma/migrations/20260724031955_add_turn_token_usage/migration.sql +6 -0
  385. package/prisma/migrations/20260724082248_add_session_cache_rollup/migration.sql +3 -0
  386. package/prisma/schema.prisma +27 -0
  387. package/.next/standalone/.next/server/chunks/1173.js +0 -1
  388. package/.next/standalone/.next/server/chunks/3407.js +0 -1
  389. package/.next/standalone/.next/server/chunks/595.js +0 -1
  390. package/.next/standalone/.next/server/chunks/7762.js +0 -1
  391. package/.next/standalone/.next/static/XTQkt8fOQEK4mZkZTFQ_E/_buildManifest.js +0 -1
  392. package/.next/standalone/.next/static/chunks/24537-7d71bf10329d1be1.js +0 -1
  393. package/.next/standalone/.next/static/chunks/27030-19cd50b9d47b3be6.js +0 -1
  394. package/.next/standalone/.next/static/chunks/28680-f9c5e04f67982cb6.js +0 -1
  395. package/.next/standalone/.next/static/chunks/73510-c338cef00ca3cfaf.js +0 -1
  396. package/.next/standalone/.next/static/chunks/78917-a297b76c6daa9f5d.js +0 -1
  397. package/.next/standalone/.next/static/chunks/84219-09970ab1b85c61f0.js +0 -1
  398. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-d1c49cfe592deeb8.js +0 -1
  399. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-77771ef395e19922.js +0 -1
  400. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-d098269dcaa06de7.js +0 -1
  401. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-7bcaa11ee24b5754.js +0 -1
  402. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-7fbf5bc58d3dd5b0.js +0 -1
  403. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  404. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-d1c49cfe592deeb8.js +0 -1
  405. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-d1c49cfe592deeb8.js +0 -1
  406. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-d1c49cfe592deeb8.js +0 -1
  407. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-d1c49cfe592deeb8.js +0 -1
  408. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  409. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-d1c49cfe592deeb8.js +0 -1
  410. package/.next/standalone/.next/static/chunks/app/api/agents/route-d1c49cfe592deeb8.js +0 -1
  411. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  412. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-d1c49cfe592deeb8.js +0 -1
  413. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-d1c49cfe592deeb8.js +0 -1
  414. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-d1c49cfe592deeb8.js +0 -1
  415. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-d1c49cfe592deeb8.js +0 -1
  416. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-d1c49cfe592deeb8.js +0 -1
  417. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-d1c49cfe592deeb8.js +0 -1
  418. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-d1c49cfe592deeb8.js +0 -1
  419. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-d1c49cfe592deeb8.js +0 -1
  420. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-d1c49cfe592deeb8.js +0 -1
  421. package/.next/standalone/.next/static/chunks/app/api/comments/route-d1c49cfe592deeb8.js +0 -1
  422. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-d1c49cfe592deeb8.js +0 -1
  423. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-d1c49cfe592deeb8.js +0 -1
  424. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-d1c49cfe592deeb8.js +0 -1
  425. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-d1c49cfe592deeb8.js +0 -1
  426. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-d1c49cfe592deeb8.js +0 -1
  427. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-d1c49cfe592deeb8.js +0 -1
  428. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-d1c49cfe592deeb8.js +0 -1
  429. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-d1c49cfe592deeb8.js +0 -1
  430. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-d1c49cfe592deeb8.js +0 -1
  431. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-d1c49cfe592deeb8.js +0 -1
  432. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-d1c49cfe592deeb8.js +0 -1
  433. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-d1c49cfe592deeb8.js +0 -1
  434. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-d1c49cfe592deeb8.js +0 -1
  435. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  436. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-d1c49cfe592deeb8.js +0 -1
  437. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-d1c49cfe592deeb8.js +0 -1
  438. package/.next/standalone/.next/static/chunks/app/api/events/route-d1c49cfe592deeb8.js +0 -1
  439. package/.next/standalone/.next/static/chunks/app/api/health/route-d1c49cfe592deeb8.js +0 -1
  440. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-d1c49cfe592deeb8.js +0 -1
  441. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-d1c49cfe592deeb8.js +0 -1
  442. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-d1c49cfe592deeb8.js +0 -1
  443. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-d1c49cfe592deeb8.js +0 -1
  444. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-d1c49cfe592deeb8.js +0 -1
  445. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  446. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/wake-preview/route-d1c49cfe592deeb8.js +0 -1
  447. package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-d1c49cfe592deeb8.js +0 -1
  448. package/.next/standalone/.next/static/chunks/app/api/mcp/route-d1c49cfe592deeb8.js +0 -1
  449. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-d1c49cfe592deeb8.js +0 -1
  450. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-d1c49cfe592deeb8.js +0 -1
  451. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-d1c49cfe592deeb8.js +0 -1
  452. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-d1c49cfe592deeb8.js +0 -1
  453. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-d1c49cfe592deeb8.js +0 -1
  454. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-d1c49cfe592deeb8.js +0 -1
  455. package/.next/standalone/.next/static/chunks/app/api/notifications/route-d1c49cfe592deeb8.js +0 -1
  456. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-d1c49cfe592deeb8.js +0 -1
  457. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-d1c49cfe592deeb8.js +0 -1
  458. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  459. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-d1c49cfe592deeb8.js +0 -1
  460. package/.next/standalone/.next/static/chunks/app/api/project-visits/pin/route-d1c49cfe592deeb8.js +0 -1
  461. package/.next/standalone/.next/static/chunks/app/api/project-visits/route-d1c49cfe592deeb8.js +0 -1
  462. package/.next/standalone/.next/static/chunks/app/api/project-visits/visit/route-d1c49cfe592deeb8.js +0 -1
  463. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-d1c49cfe592deeb8.js +0 -1
  464. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-d1c49cfe592deeb8.js +0 -1
  465. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-d1c49cfe592deeb8.js +0 -1
  466. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-d1c49cfe592deeb8.js +0 -1
  467. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-d1c49cfe592deeb8.js +0 -1
  468. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-d1c49cfe592deeb8.js +0 -1
  469. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-d1c49cfe592deeb8.js +0 -1
  470. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-d1c49cfe592deeb8.js +0 -1
  471. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-d1c49cfe592deeb8.js +0 -1
  472. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-d1c49cfe592deeb8.js +0 -1
  473. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  474. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-d1c49cfe592deeb8.js +0 -1
  475. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-d1c49cfe592deeb8.js +0 -1
  476. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-d1c49cfe592deeb8.js +0 -1
  477. package/.next/standalone/.next/static/chunks/app/api/projects/route-d1c49cfe592deeb8.js +0 -1
  478. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-d1c49cfe592deeb8.js +0 -1
  479. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-d1c49cfe592deeb8.js +0 -1
  480. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-d1c49cfe592deeb8.js +0 -1
  481. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-d1c49cfe592deeb8.js +0 -1
  482. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  483. package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  484. package/.next/standalone/.next/static/chunks/app/api/references/route-d1c49cfe592deeb8.js +0 -1
  485. package/.next/standalone/.next/static/chunks/app/api/search/route-d1c49cfe592deeb8.js +0 -1
  486. package/.next/standalone/.next/static/chunks/app/api/session/route-d1c49cfe592deeb8.js +0 -1
  487. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  488. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-d1c49cfe592deeb8.js +0 -1
  489. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-d1c49cfe592deeb8.js +0 -1
  490. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-d1c49cfe592deeb8.js +0 -1
  491. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-d1c49cfe592deeb8.js +0 -1
  492. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-d1c49cfe592deeb8.js +0 -1
  493. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-d1c49cfe592deeb8.js +0 -1
  494. package/.next/standalone/.next/static/css/617133917710c831.css +0 -1
  495. /package/.next/standalone/.next/static/{XTQkt8fOQEK4mZkZTFQ_E → 3R5zOQKwCZOVs9-BjIVqk}/_ssgManifest.js +0 -0
@@ -16,6 +16,8 @@
16
16
  // startedAt|null }] }
17
17
  // reportInterrupt → POST /api/daemon/report-interrupt
18
18
  // { connectionUuid, entityType, entityUuid, reason }
19
+ // heartbeat → POST /api/daemon/connection-heartbeat
20
+ // { connectionUuid, connectedAt }
19
21
  // readPendingTurns → GET /api/daemon/pending-turns?connectionUuid=…
20
22
  // → { turns: [{ turnUuid, sessionId, directIdeaUuid, trigger,
21
23
  // promptText }] }
@@ -72,6 +74,7 @@ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
72
74
  * transcript: (p: { sessionId: string, messages: Array<{ role: string, text: string }> }) => Promise<DaemonRestResult>,
73
75
  * executionState: (p: { executions: Array<Record<string, unknown>> }) => Promise<DaemonRestResult>,
74
76
  * reportInterrupt: (p: { entityType: string, entityUuid: string, reason: string }) => Promise<DaemonRestResult>,
77
+ * heartbeat: (p: { connectionUuid: string, connectedAt: string }) => Promise<DaemonRestResult>,
75
78
  * readPendingTurns: () => Promise<DaemonRestResult>,
76
79
  * }}
77
80
  */
@@ -136,16 +139,25 @@ export function createDaemonRestClient(opts) {
136
139
  * server resolves the turn by the session BUSINESS KEY (`sessionId`); the optional
137
140
  * `entityType`/`entityUuid` stamp the weak executionUuid link. An `interrupted`
138
141
  * status may carry `interruptedReason` (`user`/`crash`/`shutdown` — the server
139
- * rejects `offline`, which is its own reconcile verdict). Requires the
140
- * connectionUuid (the server addresses the turn against a connection the agent owns).
142
+ * rejects `offline`, which is its own reconcile verdict). A terminal edge may also
143
+ * carry `transcriptRelayError` the daemon-known reason its transcript upload
144
+ * finally failed (fix #444 follow-up), persisted as a turn annotation — and `usage`,
145
+ * the whole normalized per-turn TokenUsage object (daemon-token-usage), persisted as
146
+ * the turn's usage. Both ride the terminal edge only. Requires the connectionUuid (the
147
+ * server addresses the turn against a connection the agent owns).
141
148
  */
142
- async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason }) {
149
+ async turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason, transcriptRelayError, usage }) {
143
150
  const connectionUuid = getConnectionUuid();
144
151
  if (!connectionUuid) {
145
152
  const error = `cannot advance turn for session ${sessionId} → ${status} — no connection uuid yet`;
146
153
  logger.warn(`[Chorus] ${error}`);
147
154
  return { ok: false, status: null, error, skipped: true };
148
155
  }
156
+ // Per-turn token usage (daemon-token-usage) is meaningful only on a TERMINAL edge —
157
+ // the daemon knows it at subprocess exit, exactly like transcriptRelayError. Guard on
158
+ // the terminal status here so a stray usage on → running is never sent (the server
159
+ // ignores it there anyway; this keeps the wire honest).
160
+ const isTerminal = status === "ended" || status === "interrupted";
149
161
  const body = {
150
162
  connectionUuid,
151
163
  sessionId,
@@ -154,6 +166,11 @@ export function createDaemonRestClient(opts) {
154
166
  ...(entityType && entityUuid ? { entityType, entityUuid } : {}),
155
167
  // Only meaningful alongside status=interrupted; never sent otherwise.
156
168
  ...(status === "interrupted" && interruptedReason ? { interruptedReason } : {}),
169
+ // Transcript-relay failure annotation (fix #444 follow-up): only sent when the
170
+ // daemon actually knows the upload failed (a truthy reason on a terminal edge).
171
+ ...(transcriptRelayError ? { transcriptRelayError } : {}),
172
+ // The whole normalized TokenUsage object, nested under `usage`, only on a terminal edge.
173
+ ...(usage && isTerminal ? { usage } : {}),
157
174
  };
158
175
  return post(
159
176
  "turn-advance",
@@ -223,6 +240,20 @@ export function createDaemonRestClient(opts) {
223
240
  );
224
241
  },
225
242
 
243
+ /**
244
+ * POST /api/daemon/connection-heartbeat — acknowledge receipt of one SSE heartbeat.
245
+ * The values come directly from the active stream's registration handshake; unlike
246
+ * other connection-scoped operations this must not resolve the uuid lazily, because
247
+ * a delayed acknowledgment must retain its original generation fence.
248
+ */
249
+ async heartbeat({ connectionUuid, connectedAt }) {
250
+ return post(
251
+ "connection-heartbeat",
252
+ "/api/daemon/connection-heartbeat",
253
+ { connectionUuid, connectedAt },
254
+ );
255
+ },
256
+
226
257
  /**
227
258
  * GET /api/daemon/pending-turns?connectionUuid=… — read this connection's unstarted
228
259
  * (pending) turns from the turn table (the reconnect-backfill / deliver_turn source).
package/cli/daemon.mjs CHANGED
@@ -43,6 +43,7 @@ import {
43
43
  import { WAKE_ACTIONS } from "./prompts.mjs";
44
44
  import { createInterruptReporter } from "./interrupt-reporter.mjs";
45
45
  import { createTurnReporter } from "./turn-reporter.mjs";
46
+ import { createDaemonRestClient } from "./daemon-rest-client.mjs";
46
47
  import { createControlHandler } from "./control-handler.mjs";
47
48
  import { resolveSigintTimeoutMs, resolveDaemonCwds } from "./daemon-config.mjs";
48
49
  import {
@@ -205,6 +206,13 @@ export function buildDaemon(creds, deps = {}) {
205
206
  // doesn't matter. Per-connection so each path's wakes report against the right row.
206
207
  /** @type {{ connectionUuid: string|null }} */
207
208
  const connectionState = { connectionUuid: null };
209
+ const daemonRestClient = createDaemonRestClient({
210
+ url: creds.url,
211
+ apiKey: creds.apiKey,
212
+ getConnectionUuid: () => connectionState.connectionUuid,
213
+ logger,
214
+ fetchImpl: deps.fetchImpl,
215
+ });
208
216
 
209
217
  // Per-connection terminal-outcome bookkeeping (add-daemon-connection-conflict-skip).
210
218
  // `resolved` guards recordConnectionOutcome against double-counting a reconnect's
@@ -389,6 +397,7 @@ export function buildDaemon(creds, deps = {}) {
389
397
  recordConnectionOutcome(outcome, false);
390
398
  },
391
399
  onControl,
400
+ acknowledgeHeartbeat: (registration) => daemonRestClient.heartbeat(registration),
392
401
  onReconnect: backfill,
393
402
  logger,
394
403
  });
@@ -29,6 +29,7 @@ import { fileURLToPath } from "node:url";
29
29
 
30
30
  const INITIAL_DELAY_MS = 1_000;
31
31
  const MAX_DELAY_MS = 30_000;
32
+ const WATCHDOG_TIMEOUT_MS = 75_000;
32
33
 
33
34
  const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
34
35
 
@@ -78,6 +79,8 @@ const PROCESS_STARTED_AT = new Date();
78
79
  * The event carries `{ host, cwd }` of the conflicting identity.
79
80
  * @property {() => Promise<void>} [onReconnect] Called after a reconnect so the
80
81
  * caller can back-fill notifications missed during the gap.
82
+ * @property {(registration: {connectionUuid:string,connectedAt:string}) => Promise<unknown>} [acknowledgeHeartbeat]
83
+ * Best-effort REST acknowledgment for a parsed heartbeat comment.
81
84
  * @property {string} [cwd] The working directory THIS connection serves (T3 — 单
82
85
  * daemon 多路径). A multi-path daemon runs one SseListener per declared path, each
83
86
  * self-reporting its own cwd so the server registers them as distinct connections
@@ -88,6 +91,7 @@ const PROCESS_STARTED_AT = new Date();
88
91
  * @property {typeof fetch} [fetchImpl] Injectable for tests.
89
92
  * @property {number} [initialDelayMs]
90
93
  * @property {number} [maxDelayMs]
94
+ * @property {number} [watchdogTimeoutMs] Injectable for deterministic tests only.
91
95
  */
92
96
 
93
97
  export class SseListener {
@@ -100,12 +104,14 @@ export class SseListener {
100
104
  this.onControl = opts.onControl ?? (() => {});
101
105
  this.onConflict = opts.onConflict ?? (() => {});
102
106
  this.onReconnect = opts.onReconnect ?? (async () => {});
107
+ this.acknowledgeHeartbeat = opts.acknowledgeHeartbeat ?? (async () => {});
103
108
  /** @type {string|null} The connection this stream registered as (once reported). */
104
109
  this.connectionUuid = null;
105
110
  this.logger = opts.logger ?? NOOP_LOGGER;
106
111
  this.fetchImpl = opts.fetchImpl ?? globalThis.fetch;
107
112
  this.initialDelayMs = opts.initialDelayMs ?? INITIAL_DELAY_MS;
108
113
  this.maxDelayMs = opts.maxDelayMs ?? MAX_DELAY_MS;
114
+ this.watchdogTimeoutMs = opts.watchdogTimeoutMs ?? WATCHDOG_TIMEOUT_MS;
109
115
 
110
116
  // Build the self-reporting endpoint URL once and reuse it across every
111
117
  // (re)connect, so the reconnect path always re-sends the same params.
@@ -128,6 +134,7 @@ export class SseListener {
128
134
  host: hostname(),
129
135
  cwd: this.cwd,
130
136
  startedAt: PROCESS_STARTED_AT.toISOString(),
137
+ livenessAck: "v1",
131
138
  });
132
139
  this.endpoint = `${this.url}/api/events/notifications?${params.toString()}`;
133
140
 
@@ -136,14 +143,20 @@ export class SseListener {
136
143
  this.abortController = null;
137
144
  /** @type {ReturnType<typeof setTimeout> | null} */
138
145
  this.reconnectTimer = null;
146
+ /** @type {ReturnType<typeof setTimeout> | null} */
147
+ this.watchdogTimer = null;
148
+ /** @type {{connectionUuid:string,connectedAt:string}|null} */
149
+ this.activeRegistration = null;
139
150
  this.reconnectDelay = this.initialDelayMs;
140
151
  }
141
152
 
142
153
  /** Open the SSE connection. On failure, schedules a backoff reconnect. */
143
154
  async connect() {
144
155
  this.#clearReconnectTimer();
156
+ this.#clearWatchdog();
145
157
  const abortController = new AbortController();
146
158
  this.abortController = abortController;
159
+ this.activeRegistration = null;
147
160
 
148
161
  let response;
149
162
  try {
@@ -173,6 +186,7 @@ export class SseListener {
173
186
  this.status = "connected";
174
187
  this.reconnectDelay = this.initialDelayMs;
175
188
  this.logger.info("[Chorus] SSE connection established");
189
+ this.#refreshWatchdog(abortController);
176
190
 
177
191
  if (wasReconnect) {
178
192
  try {
@@ -182,22 +196,25 @@ export class SseListener {
182
196
  }
183
197
  }
184
198
 
185
- this.#consumeStream(response.body, abortController.signal);
199
+ this.#consumeStream(response.body, abortController);
186
200
  }
187
201
 
188
202
  /** Gracefully close the connection (no reconnect). */
189
203
  disconnect() {
190
204
  this.#clearReconnectTimer();
205
+ this.#clearWatchdog();
191
206
  if (this.abortController) {
192
207
  this.abortController.abort();
193
208
  this.abortController = null;
194
209
  }
195
210
  this.status = "disconnected";
211
+ this.activeRegistration = null;
196
212
  this.logger.info("[Chorus] SSE connection closed");
197
213
  }
198
214
 
199
- /** @param {ReadableStream<Uint8Array>} body @param {AbortSignal} signal */
200
- async #consumeStream(body, signal) {
215
+ /** @param {ReadableStream<Uint8Array>} body @param {AbortController} abortController */
216
+ async #consumeStream(body, abortController) {
217
+ const signal = abortController.signal;
201
218
  const decoder = new TextDecoder();
202
219
  const reader = body.getReader();
203
220
  let buffer = "";
@@ -205,6 +222,12 @@ export class SseListener {
205
222
  while (true) {
206
223
  const { done, value } = await reader.read();
207
224
  if (done || signal.aborted) break;
225
+ // Transport activity is byte arrival, not successful SSE parsing. Refresh before
226
+ // decode so comments, partial frames, and malformed payloads all prove the stream
227
+ // is still delivering bytes.
228
+ if (value && value.byteLength > 0) {
229
+ this.#refreshWatchdog(abortController);
230
+ }
208
231
  // Strip CR on ingest so CRLF transports (`\r\n\r\n` boundaries) parse the
209
232
  // same as LF — the `\n\n` boundary scan below would otherwise never match.
210
233
  buffer += decoder.decode(value, { stream: true }).replace(/\r/g, "");
@@ -219,6 +242,7 @@ export class SseListener {
219
242
  if (signal.aborted) return;
220
243
  this.logger.warn(`[Chorus] SSE stream error: ${err}`);
221
244
  } finally {
245
+ if (this.abortController === abortController) this.#clearWatchdog();
222
246
  try {
223
247
  reader.releaseLock();
224
248
  } catch {
@@ -235,7 +259,24 @@ export class SseListener {
235
259
  #processMessage(raw) {
236
260
  for (const line of raw.split("\n")) {
237
261
  // CR already stripped on ingest. Heartbeat / comment lines start with ":".
238
- if (line.startsWith(":")) continue;
262
+ if (line.startsWith(":")) {
263
+ if (line.slice(1).trim() === "heartbeat" && this.activeRegistration) {
264
+ const registration = this.activeRegistration;
265
+ Promise.resolve()
266
+ .then(() => this.acknowledgeHeartbeat(registration))
267
+ .then((result) => {
268
+ if (result && typeof result === "object" && result.ok === false) {
269
+ // The REST client already logged the transport cause. Keep listener
270
+ // behavior best-effort and avoid adding a retry loop here.
271
+ return;
272
+ }
273
+ })
274
+ .catch((err) => {
275
+ this.logger.warn(`[Chorus] heartbeat acknowledgment failed: ${err}`);
276
+ });
277
+ }
278
+ continue;
279
+ }
239
280
  if (line.startsWith("data: ")) {
240
281
  const jsonStr = line.slice(6);
241
282
  let event;
@@ -248,8 +289,16 @@ export class SseListener {
248
289
  // The server's first data event tells us which DaemonConnection this
249
290
  // stream registered as. Capture it (for execution-state attribution) and
250
291
  // do NOT forward it as a notification — it isn't one.
251
- if (event && event.type === "connection_registered" && typeof event.connectionUuid === "string") {
292
+ if (
293
+ event &&
294
+ event.type === "connection_registered" &&
295
+ typeof event.connectionUuid === "string"
296
+ ) {
252
297
  this.connectionUuid = event.connectionUuid;
298
+ this.activeRegistration =
299
+ typeof event.connectedAt === "string"
300
+ ? { connectionUuid: event.connectionUuid, connectedAt: event.connectedAt }
301
+ : null;
253
302
  try {
254
303
  this.onConnectionId(event.connectionUuid);
255
304
  } catch (err) {
@@ -305,4 +354,32 @@ export class SseListener {
305
354
  this.reconnectTimer = null;
306
355
  }
307
356
  }
357
+
358
+ /** @param {AbortController|null} abortController */
359
+ #refreshWatchdog(abortController) {
360
+ this.#clearWatchdog();
361
+ if (!abortController || abortController.signal.aborted || this.abortController !== abortController) return;
362
+ this.watchdogTimer = setTimeout(() => {
363
+ this.watchdogTimer = null;
364
+ if (
365
+ this.abortController !== abortController ||
366
+ abortController.signal.aborted ||
367
+ this.status !== "connected"
368
+ ) {
369
+ return;
370
+ }
371
+ this.logger.warn(
372
+ `[Chorus] SSE stream received no bytes for ${this.watchdogTimeoutMs}ms; reconnecting`
373
+ );
374
+ abortController.abort();
375
+ this.#scheduleReconnect();
376
+ }, this.watchdogTimeoutMs);
377
+ }
378
+
379
+ #clearWatchdog() {
380
+ if (this.watchdogTimer !== null) {
381
+ clearTimeout(this.watchdogTimer);
382
+ this.watchdogTimer = null;
383
+ }
384
+ }
308
385
  }
@@ -46,7 +46,7 @@ export const TURN_INTERRUPT_REASONS = new Set(["user", "crash", "shutdown"]);
46
46
  * logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
47
47
  * fetchImpl?: typeof fetch, Injectable for tests.
48
48
  * }} opts
49
- * @returns {(params: { sessionId: string, status: "running"|"ended"|"interrupted", entityType?: string|null, entityUuid?: string|null, interruptedReason?: "user"|"crash"|"shutdown"|null }) => Promise<void>}
49
+ * @returns {(params: { sessionId: string, status: "running"|"ended"|"interrupted", entityType?: string|null, entityUuid?: string|null, interruptedReason?: "user"|"crash"|"shutdown"|null, transcriptRelayError?: string|null, usage?: import("./upload-hooks.mjs").TokenUsage|null }) => Promise<void>}
50
50
  */
51
51
  export function createTurnReporter(opts) {
52
52
  const logger = opts.logger ?? NOOP_LOGGER;
@@ -67,6 +67,8 @@ export function createTurnReporter(opts) {
67
67
  entityType,
68
68
  entityUuid,
69
69
  interruptedReason,
70
+ transcriptRelayError,
71
+ usage,
70
72
  }) {
71
73
  if (typeof sessionId !== "string" || !sessionId || !TURN_STATUSES.has(status)) {
72
74
  logger.warn(
@@ -88,9 +90,19 @@ export function createTurnReporter(opts) {
88
90
  }
89
91
  // The client resolves the connectionUuid lazily, validates it (logging
90
92
  // "no connection uuid yet" when absent), POSTs the exact server payload — sending
91
- // entityType/entityUuid only when both are present and logs the failure cause on a
92
- // network error / non-2xx. We swallow the structured result so a failed report can
93
- // never crash the wake path.
94
- await client.turnAdvance({ sessionId, status, entityType, entityUuid, interruptedReason });
93
+ // entityType/entityUuid only when both are present, and transcriptRelayError only when
94
+ // truthy (fix #444 follow-up) and logs the failure cause on a network error / non-2xx.
95
+ // We swallow the structured result so a failed report can never crash the wake path.
96
+ await client.turnAdvance({
97
+ sessionId,
98
+ status,
99
+ entityType,
100
+ entityUuid,
101
+ interruptedReason,
102
+ transcriptRelayError,
103
+ // Per-turn token usage (daemon-token-usage): the client spreads it into the body
104
+ // only on a terminal edge. No validation here — usage is an opaque nested object.
105
+ usage,
106
+ });
95
107
  };
96
108
  }