@chorus-aidlc/chorus 0.9.4 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (695) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +481 -430
  3. package/.next/standalone/.next/app-path-routes-manifest.json +57 -44
  4. package/.next/standalone/.next/build-manifest.json +5 -5
  5. package/.next/standalone/.next/prerender-manifest.json +33 -33
  6. package/.next/standalone/.next/routes-manifest.json +33 -17
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +2 -2
  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 +2 -2
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +2 -2
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +2 -2
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +2 -2
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +3 -3
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -8
  44. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  47. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  48. package/.next/standalone/.next/server/app/_not-found.rsc +5 -5
  49. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  51. package/.next/standalone/.next/server/app/admin/companies/new.html +1 -1
  52. package/.next/standalone/.next/server/app/admin/companies/new.rsc +6 -6
  53. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/admin/companies.html +1 -1
  55. package/.next/standalone/.next/server/app/admin/companies.rsc +6 -6
  56. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/admin.html +1 -1
  58. package/.next/standalone/.next/server/app/admin.rsc +6 -6
  59. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route.js +1 -1
  60. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  61. package/.next/standalone/.next/server/app/api/admin/companies/route.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.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.js +1 -1
  66. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/agent-connections/route.js +1 -0
  68. package/.next/standalone/.next/server/app/api/agent-connections/route.js.nft.json +1 -0
  69. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -0
  70. package/.next/standalone/.next/server/app/api/agents/[uuid]/route.js +1 -1
  71. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  73. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js.nft.json +1 -1
  74. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/agents/route.js +1 -1
  76. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route.js +1 -1
  78. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/api-keys/route.js +1 -1
  80. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/auth/callback/route.js +1 -1
  82. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  83. package/.next/standalone/.next/server/app/api/auth/check-default/route.js +1 -1
  84. package/.next/standalone/.next/server/app/api/auth/check-default/route.js.nft.json +1 -1
  85. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/auth/company-oidc/route.js +1 -1
  87. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/auth/default-login/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/auth/identify/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  93. package/.next/standalone/.next/server/app/api/auth/me/route.js +1 -1
  94. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/api/auth/refresh/route.js +1 -1
  96. package/.next/standalone/.next/server/app/api/auth/refresh/route_client-reference-manifest.js +1 -1
  97. package/.next/standalone/.next/server/app/api/auth/session/route.js +1 -1
  98. package/.next/standalone/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/api/auth/sync-token/route.js +1 -1
  100. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  102. package/.next/standalone/.next/server/app/api/comments/route.js.nft.json +1 -1
  103. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/daemon/control/route.js +1 -0
  105. package/.next/standalone/.next/server/app/api/daemon/control/route.js.nft.json +1 -0
  106. package/.next/standalone/.next/server/app/api/daemon/control/route_client-reference-manifest.js +1 -0
  107. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js +1 -0
  108. package/.next/standalone/.next/server/app/api/daemon/execution-state/route.js.nft.json +1 -0
  109. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -0
  110. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -0
  111. package/.next/standalone/.next/server/app/api/daemon/executions/route.js.nft.json +1 -0
  112. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -0
  113. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -0
  114. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js.nft.json +1 -0
  115. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -0
  116. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -0
  117. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js.nft.json +1 -0
  118. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -0
  119. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -0
  120. package/.next/standalone/.next/server/app/api/daemon/resume/route.js.nft.json +1 -0
  121. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -0
  122. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -0
  123. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js.nft.json +1 -0
  124. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -0
  125. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -0
  126. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js.nft.json +1 -0
  127. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -0
  128. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -0
  129. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js.nft.json +1 -0
  130. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -0
  131. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -0
  132. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js.nft.json +1 -0
  133. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -0
  134. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -0
  135. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js.nft.json +1 -0
  136. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -0
  137. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -0
  138. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js.nft.json +1 -0
  139. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -0
  140. package/.next/standalone/.next/server/app/api/documents/[uuid]/route.js +1 -1
  141. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -0
  143. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js.nft.json +1 -0
  144. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -0
  145. package/.next/standalone/.next/server/app/api/events/notifications/route.js +6 -2
  146. package/.next/standalone/.next/server/app/api/events/notifications/route.js.nft.json +1 -1
  147. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  148. package/.next/standalone/.next/server/app/api/events/route.js +7 -3
  149. package/.next/standalone/.next/server/app/api/events/route.js.nft.json +1 -1
  150. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/health/route.js +1 -1
  152. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  154. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js.nft.json +1 -1
  155. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  156. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  157. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js.nft.json +1 -1
  158. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  159. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  160. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js.nft.json +1 -1
  161. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  162. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -0
  163. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js.nft.json +1 -0
  164. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -0
  165. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  166. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js.nft.json +1 -1
  167. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  169. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js.nft.json +1 -1
  170. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  171. package/.next/standalone/.next/server/app/api/mcp/route.js +6 -42
  172. package/.next/standalone/.next/server/app/api/mcp/route.js.nft.json +1 -1
  173. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  175. package/.next/standalone/.next/server/app/api/me/assignments/route.js.nft.json +1 -1
  176. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  178. package/.next/standalone/.next/server/app/api/mentionables/route.js.nft.json +1 -1
  179. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  180. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  181. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js.nft.json +1 -1
  182. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  184. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js.nft.json +1 -1
  185. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  187. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js.nft.json +1 -1
  188. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  190. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js.nft.json +1 -1
  191. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  193. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  194. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  196. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js.nft.json +1 -1
  197. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  198. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route.js +1 -1
  199. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  200. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route.js +1 -1
  201. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  202. package/.next/standalone/.next/server/app/api/project-groups/route.js +1 -1
  203. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  204. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route.js +1 -1
  205. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  206. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  207. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js.nft.json +1 -1
  208. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  209. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route.js +1 -1
  210. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  211. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route.js +1 -1
  212. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  214. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js.nft.json +1 -1
  215. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  217. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js.nft.json +1 -1
  218. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  219. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route.js +1 -1
  220. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  221. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route.js +1 -1
  222. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  223. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route.js +1 -1
  224. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/app/api/projects/[uuid]/route.js +1 -1
  226. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  227. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route.js +1 -1
  228. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  229. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  230. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js.nft.json +1 -1
  231. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  232. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  233. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js.nft.json +1 -1
  234. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  235. package/.next/standalone/.next/server/app/api/projects/route.js +1 -1
  236. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  237. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route.js +1 -1
  238. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  239. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route.js +1 -1
  240. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  241. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route.js +1 -1
  242. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  243. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route.js +1 -1
  244. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  245. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route.js +1 -1
  246. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  247. package/.next/standalone/.next/server/app/api/search/route.js +1 -1
  248. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  249. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  250. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js.nft.json +1 -1
  251. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  252. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  253. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js.nft.json +1 -1
  254. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  255. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  256. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js.nft.json +1 -1
  257. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  258. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  259. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js.nft.json +1 -1
  260. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  261. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  262. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js.nft.json +1 -1
  263. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  264. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  265. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js.nft.json +1 -1
  266. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  267. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  268. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js.nft.json +1 -1
  269. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  270. package/.next/standalone/.next/server/app/index.html +1 -1
  271. package/.next/standalone/.next/server/app/index.rsc +5 -5
  272. package/.next/standalone/.next/server/app/login/admin/page.js +1 -1
  273. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  274. package/.next/standalone/.next/server/app/login/admin.html +1 -1
  275. package/.next/standalone/.next/server/app/login/admin.rsc +6 -6
  276. package/.next/standalone/.next/server/app/login/callback/page.js +2 -2
  277. package/.next/standalone/.next/server/app/login/callback/page.js.nft.json +1 -1
  278. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  279. package/.next/standalone/.next/server/app/login/callback.html +1 -1
  280. package/.next/standalone/.next/server/app/login/callback.rsc +6 -6
  281. package/.next/standalone/.next/server/app/login/page.js +2 -2
  282. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  283. package/.next/standalone/.next/server/app/login/pick-workspace/page.js +1 -1
  284. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  285. package/.next/standalone/.next/server/app/login/pick-workspace.html +1 -1
  286. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +6 -6
  287. package/.next/standalone/.next/server/app/login/silent-refresh/page_client-reference-manifest.js +1 -1
  288. package/.next/standalone/.next/server/app/login/silent-refresh.html +1 -1
  289. package/.next/standalone/.next/server/app/login/silent-refresh.rsc +5 -5
  290. package/.next/standalone/.next/server/app/login.html +1 -1
  291. package/.next/standalone/.next/server/app/login.rsc +6 -6
  292. package/.next/standalone/.next/server/app/onboarding/page.js +2 -2
  293. package/.next/standalone/.next/server/app/onboarding/page.js.nft.json +1 -1
  294. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  295. package/.next/standalone/.next/server/app/onboarding.html +1 -1
  296. package/.next/standalone/.next/server/app/onboarding.rsc +6 -6
  297. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  298. package/.next/standalone/.next/server/app/projects.html +1 -1
  299. package/.next/standalone/.next/server/app/projects.rsc +7 -7
  300. package/.next/standalone/.next/server/app/settings.html +1 -1
  301. package/.next/standalone/.next/server/app/settings.rsc +7 -7
  302. package/.next/standalone/.next/server/app-paths-manifest.json +57 -44
  303. package/.next/standalone/.next/server/chunks/1064.js +1 -0
  304. package/.next/standalone/.next/server/chunks/1596.js +13 -0
  305. package/.next/standalone/.next/server/chunks/2213.js +1 -0
  306. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  307. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  308. package/.next/standalone/.next/server/chunks/3219.js +2 -0
  309. package/.next/standalone/.next/server/chunks/3371.js +1 -0
  310. package/.next/standalone/.next/server/chunks/3419.js +1 -0
  311. package/.next/standalone/.next/server/chunks/369.js +1 -0
  312. package/.next/standalone/.next/server/chunks/4638.js +1 -0
  313. package/.next/standalone/.next/server/chunks/4711.js +530 -0
  314. package/.next/standalone/.next/server/chunks/4958.js +1 -1
  315. package/.next/standalone/.next/server/chunks/5039.js +1 -0
  316. package/.next/standalone/.next/server/chunks/5300.js +1 -1
  317. package/.next/standalone/.next/server/chunks/5631.js +1 -0
  318. package/.next/standalone/.next/server/chunks/6044.js +1 -1
  319. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  320. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  321. package/.next/standalone/.next/server/chunks/6461.js +1 -0
  322. package/.next/standalone/.next/server/chunks/6712.js +1 -0
  323. package/.next/standalone/.next/server/chunks/7002.js +1 -1
  324. package/.next/standalone/.next/server/chunks/7063.js +2 -2
  325. package/.next/standalone/.next/server/chunks/7258.js +37 -0
  326. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  327. package/.next/standalone/.next/server/chunks/7578.js +2 -2
  328. package/.next/standalone/.next/server/chunks/7867.js +1 -0
  329. package/.next/standalone/.next/server/chunks/7897.js +1 -0
  330. package/.next/standalone/.next/server/chunks/8012.js +1 -0
  331. package/.next/standalone/.next/server/chunks/8245.js +31 -0
  332. package/.next/standalone/.next/server/chunks/8322.js +1 -1
  333. package/.next/standalone/.next/server/chunks/8551.js +1 -1
  334. package/.next/standalone/.next/server/chunks/9015.js +1 -1
  335. package/.next/standalone/.next/server/chunks/920.js +1 -1
  336. package/.next/standalone/.next/server/chunks/937.js +16 -2
  337. package/.next/standalone/.next/server/chunks/9629.js +1 -0
  338. package/.next/standalone/.next/server/chunks/9725.js +1 -0
  339. package/.next/standalone/.next/server/instrumentation.js +1 -1
  340. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  341. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  342. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  343. package/.next/standalone/.next/server/next-font-manifest.json +1 -1
  344. package/.next/standalone/.next/server/pages/404.html +1 -1
  345. package/.next/standalone/.next/server/pages/500.html +1 -1
  346. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  347. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  348. package/.next/standalone/.next/server/src/middleware.js +2 -2
  349. package/.next/standalone/.next/static/519aK55QLHaVN7b1TVDkB/_buildManifest.js +1 -0
  350. package/.next/standalone/.next/static/chunks/1217-323cc20b73ebfde9.js +1 -0
  351. package/.next/standalone/.next/static/chunks/{11207-8f4b154804f5a66f.js → 15183-5734d279b26e9414.js} +2 -2
  352. package/.next/standalone/.next/static/chunks/1879-7a8b283283218df2.js +1 -0
  353. package/.next/standalone/.next/static/chunks/19276-50b367d7b93d5f34.js +1 -0
  354. package/.next/standalone/.next/static/chunks/23466-e1176a6d814f4897.js +1 -0
  355. package/.next/standalone/.next/static/chunks/38040-a8687f86dd8e9d67.js +1 -0
  356. package/.next/standalone/.next/static/chunks/4860.43f5ad8a3aaed0e8.js +1 -0
  357. package/.next/standalone/.next/static/chunks/58245-b2ea112ace9624d2.js +1 -0
  358. package/.next/standalone/.next/static/chunks/59296-783831c43aa0162e.js +1 -0
  359. package/.next/standalone/.next/static/chunks/60648-36ccbee4ce232d52.js +1 -0
  360. package/.next/standalone/.next/static/chunks/60694-68232120903209df.js +1 -0
  361. package/.next/standalone/.next/static/chunks/64648-81f03be6f9793ab9.js +1 -0
  362. package/.next/standalone/.next/static/chunks/{94655-1c75e0590a66215e.js → 66969-12f0b22c51f5a410.js} +1 -1
  363. package/.next/standalone/.next/static/chunks/70536-b8bf71098ae11f07.js +1 -0
  364. package/.next/standalone/.next/static/chunks/71350-88c2649fc693c1e8.js +1 -0
  365. package/.next/standalone/.next/static/chunks/78389-b32edc6bd5c570a9.js +1 -0
  366. package/.next/standalone/.next/static/chunks/78584-eb2fa8cf2f266329.js +1 -0
  367. package/.next/standalone/.next/static/chunks/78917-150ed14a99844aab.js +1 -0
  368. package/.next/standalone/.next/static/chunks/8574-b9739eb8d054c793.js +1 -0
  369. package/.next/standalone/.next/static/chunks/93346-5489d90bc2d57190.js +1 -0
  370. package/.next/standalone/.next/static/chunks/99373.0768feb3a08c7da3.js +1 -0
  371. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-0a28456fea4ce95a.js +1 -0
  372. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/{page-63a6a5b6cf9ecf87.js → page-a79969c5c9aadacd.js} +1 -1
  373. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-4bc556c2fc8f3d24.js +1 -0
  374. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-e00752a72c31663f.js +1 -0
  375. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-ef82b871895245ea.js +1 -0
  376. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-2c9bcbd11ddb8661.js +1 -0
  377. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-630b168598513ce8.js +1 -0
  378. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-99639479cc98965f.js +1 -0
  379. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-335f2450e44a0fba.js +1 -0
  380. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-4a191d69b2b6e880.js +1 -0
  381. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-0faebb478be4c85d.js +1 -0
  382. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/{page-c36345b80cc5bf5c.js → page-583e58d4d689d38b.js} +1 -1
  383. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2e8fcb72687100df.js +1 -0
  384. package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/page-cc2fe0c5b749cd2f.js +1 -0
  385. package/.next/standalone/.next/static/chunks/app/admin/companies/new/{page-55fb2107f955c9ed.js → page-4f3b3c449c61f6d2.js} +1 -1
  386. package/.next/standalone/.next/static/chunks/app/admin/companies/page-ef720c2b0856166c.js +1 -0
  387. package/.next/standalone/.next/static/chunks/app/admin/page-0cc8cf246db43e5d.js +1 -0
  388. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  389. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-4bc556c2fc8f3d24.js +1 -0
  390. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-4bc556c2fc8f3d24.js +1 -0
  391. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-4bc556c2fc8f3d24.js +1 -0
  392. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-4bc556c2fc8f3d24.js +1 -0
  393. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  394. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
  395. package/.next/standalone/.next/static/chunks/app/api/agents/route-4bc556c2fc8f3d24.js +1 -0
  396. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  397. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-4bc556c2fc8f3d24.js +1 -0
  398. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-4bc556c2fc8f3d24.js +1 -0
  399. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-4bc556c2fc8f3d24.js +1 -0
  400. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-4bc556c2fc8f3d24.js +1 -0
  401. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-4bc556c2fc8f3d24.js +1 -0
  402. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-4bc556c2fc8f3d24.js +1 -0
  403. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-4bc556c2fc8f3d24.js +1 -0
  404. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-4bc556c2fc8f3d24.js +1 -0
  405. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-4bc556c2fc8f3d24.js +1 -0
  406. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-4bc556c2fc8f3d24.js +1 -0
  407. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-4bc556c2fc8f3d24.js +1 -0
  408. package/.next/standalone/.next/static/chunks/app/api/comments/route-4bc556c2fc8f3d24.js +1 -0
  409. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-4bc556c2fc8f3d24.js +1 -0
  410. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-4bc556c2fc8f3d24.js +1 -0
  411. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-4bc556c2fc8f3d24.js +1 -0
  412. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-4bc556c2fc8f3d24.js +1 -0
  413. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-4bc556c2fc8f3d24.js +1 -0
  414. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-4bc556c2fc8f3d24.js +1 -0
  415. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-4bc556c2fc8f3d24.js +1 -0
  416. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-4bc556c2fc8f3d24.js +1 -0
  417. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-4bc556c2fc8f3d24.js +1 -0
  418. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-4bc556c2fc8f3d24.js +1 -0
  419. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-4bc556c2fc8f3d24.js +1 -0
  420. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-4bc556c2fc8f3d24.js +1 -0
  421. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  422. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-4bc556c2fc8f3d24.js +1 -0
  423. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-4bc556c2fc8f3d24.js +1 -0
  424. package/.next/standalone/.next/static/chunks/app/api/events/route-4bc556c2fc8f3d24.js +1 -0
  425. package/.next/standalone/.next/static/chunks/app/api/health/route-4bc556c2fc8f3d24.js +1 -0
  426. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
  427. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-4bc556c2fc8f3d24.js +1 -0
  428. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-4bc556c2fc8f3d24.js +1 -0
  429. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-4bc556c2fc8f3d24.js +1 -0
  430. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
  431. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  432. package/.next/standalone/.next/static/chunks/app/api/mcp/route-4bc556c2fc8f3d24.js +1 -0
  433. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-4bc556c2fc8f3d24.js +1 -0
  434. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-4bc556c2fc8f3d24.js +1 -0
  435. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-4bc556c2fc8f3d24.js +1 -0
  436. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-4bc556c2fc8f3d24.js +1 -0
  437. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-4bc556c2fc8f3d24.js +1 -0
  438. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-4bc556c2fc8f3d24.js +1 -0
  439. package/.next/standalone/.next/static/chunks/app/api/notifications/route-4bc556c2fc8f3d24.js +1 -0
  440. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-4bc556c2fc8f3d24.js +1 -0
  441. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-4bc556c2fc8f3d24.js +1 -0
  442. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  443. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-4bc556c2fc8f3d24.js +1 -0
  444. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-4bc556c2fc8f3d24.js +1 -0
  445. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-4bc556c2fc8f3d24.js +1 -0
  446. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-4bc556c2fc8f3d24.js +1 -0
  447. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-4bc556c2fc8f3d24.js +1 -0
  448. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-4bc556c2fc8f3d24.js +1 -0
  449. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-4bc556c2fc8f3d24.js +1 -0
  450. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-4bc556c2fc8f3d24.js +1 -0
  451. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-4bc556c2fc8f3d24.js +1 -0
  452. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-4bc556c2fc8f3d24.js +1 -0
  453. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  454. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-4bc556c2fc8f3d24.js +1 -0
  455. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-4bc556c2fc8f3d24.js +1 -0
  456. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-4bc556c2fc8f3d24.js +1 -0
  457. package/.next/standalone/.next/static/chunks/app/api/projects/route-4bc556c2fc8f3d24.js +1 -0
  458. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-4bc556c2fc8f3d24.js +1 -0
  459. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-4bc556c2fc8f3d24.js +1 -0
  460. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-4bc556c2fc8f3d24.js +1 -0
  461. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-4bc556c2fc8f3d24.js +1 -0
  462. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  463. package/.next/standalone/.next/static/chunks/app/api/search/route-4bc556c2fc8f3d24.js +1 -0
  464. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  465. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-4bc556c2fc8f3d24.js +1 -0
  466. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-4bc556c2fc8f3d24.js +1 -0
  467. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-4bc556c2fc8f3d24.js +1 -0
  468. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-4bc556c2fc8f3d24.js +1 -0
  469. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-4bc556c2fc8f3d24.js +1 -0
  470. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-4bc556c2fc8f3d24.js +1 -0
  471. package/.next/standalone/.next/static/chunks/app/layout-9963339572e2e64e.js +1 -0
  472. package/.next/standalone/.next/static/chunks/app/login/admin/page-d470135f7aab6c5e.js +1 -0
  473. package/.next/standalone/.next/static/chunks/app/login/callback/{page-48a34c31a0f8e58c.js → page-0edd93f50cb4f6ea.js} +1 -1
  474. package/.next/standalone/.next/static/chunks/app/login/page-c64b8d40a0781b4c.js +1 -0
  475. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-e0444ad8b50121f5.js +1 -0
  476. package/.next/standalone/.next/static/chunks/app/onboarding/page-e9a69a0c537c704f.js +1 -0
  477. package/.next/standalone/.next/static/chunks/{webpack-4a8c75a0d40c2106.js → webpack-87284a4533d77eaf.js} +1 -1
  478. package/.next/standalone/.next/static/css/{84edd78de243cde6.css → b496025c9cd768cc.css} +1 -1
  479. package/.next/standalone/.next/static/css/e78b3c856420a09f.css +1 -0
  480. package/.next/standalone/.next/static/media/013b72fa676f92e0-s.woff2 +0 -0
  481. package/.next/standalone/.next/static/media/2b5b02fc7e511755-s.woff2 +0 -0
  482. package/.next/standalone/.next/static/media/65f03d54ccadf4a8-s.woff2 +0 -0
  483. package/.next/standalone/.next/static/media/7d4881bb7e1bf84d-s.p.woff2 +0 -0
  484. package/.next/standalone/.next/static/media/b9408752a0c24fb9-s.woff2 +0 -0
  485. package/.next/standalone/.next/static/media/e038a29029a234f2-s.woff2 +0 -0
  486. package/.next/standalone/package.json +3 -1
  487. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  488. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  489. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +2 -2
  490. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +1 -1
  491. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +19 -3
  492. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  493. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
  494. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  495. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  496. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +1 -1
  497. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  498. package/.next/standalone/public/skill/chorus/SKILL.md +2 -2
  499. package/.next/standalone/public/skill/develop-chorus/SKILL.md +1 -1
  500. package/.next/standalone/public/skill/idea-chorus/SKILL.md +19 -3
  501. package/.next/standalone/public/skill/package.json +1 -1
  502. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  503. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  504. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  505. package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
  506. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  507. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +1 -1
  508. package/README.md +29 -0
  509. package/README.zh.md +29 -0
  510. package/chorus.mjs +120 -16
  511. package/cli/backfill.mjs +190 -0
  512. package/cli/chorus-client.mjs +154 -0
  513. package/cli/claude-spawner.mjs +415 -0
  514. package/cli/client-args.mjs +146 -0
  515. package/cli/control-handler.mjs +180 -0
  516. package/cli/credentials.mjs +155 -0
  517. package/cli/daemon-agent.mjs +38 -0
  518. package/cli/daemon-banner.mjs +80 -0
  519. package/cli/daemon-config.mjs +84 -0
  520. package/cli/daemon-lifecycle.mjs +191 -0
  521. package/cli/daemon-permission-mode.mjs +68 -0
  522. package/cli/daemon-rest-client.mjs +272 -0
  523. package/cli/daemon.mjs +572 -0
  524. package/cli/event-router.mjs +248 -0
  525. package/cli/interrupt-reporter.mjs +87 -0
  526. package/cli/lineage.mjs +155 -0
  527. package/cli/login.mjs +151 -0
  528. package/cli/mcp-config.mjs +58 -0
  529. package/cli/process-killer.mjs +205 -0
  530. package/cli/prompts.mjs +273 -0
  531. package/cli/sse-listener.mjs +258 -0
  532. package/cli/turn-reporter.mjs +75 -0
  533. package/cli/upload-hooks.mjs +400 -0
  534. package/cli/wake-queue.mjs +121 -0
  535. package/cli/waker.mjs +475 -0
  536. package/package.json +3 -1
  537. package/prisma/migrations/20260611101056_add_idea_lineage/migration.sql +5 -0
  538. package/prisma/migrations/20260615082309_add_daemon_connection/migration.sql +37 -0
  539. package/prisma/migrations/20260616152622_add_daemon_task_execution/migration.sql +28 -0
  540. package/prisma/migrations/20260617013334_generalize_daemon_execution_to_any_resource/migration.sql +38 -0
  541. package/prisma/migrations/20260618022828_add_daemon_execution_interrupted/migration.sql +2 -0
  542. package/prisma/migrations/20260619055322_daemon_session_conversation/migration.sql +77 -0
  543. package/prisma/schema.prisma +368 -185
  544. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js +0 -2
  545. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page.js.nft.json +0 -1
  546. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page_client-reference-manifest.js +0 -1
  547. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js +0 -2
  548. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page.js.nft.json +0 -1
  549. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/ideas/page_client-reference-manifest.js +0 -1
  550. package/.next/standalone/.next/server/chunks/1059.js +0 -1
  551. package/.next/standalone/.next/server/chunks/1165.js +0 -1
  552. package/.next/standalone/.next/server/chunks/1615.js +0 -31
  553. package/.next/standalone/.next/server/chunks/162.js +0 -16
  554. package/.next/standalone/.next/server/chunks/1871.js +0 -1
  555. package/.next/standalone/.next/server/chunks/2909.js +0 -98
  556. package/.next/standalone/.next/server/chunks/2990.js +0 -1
  557. package/.next/standalone/.next/server/chunks/3139.js +0 -1
  558. package/.next/standalone/.next/server/chunks/324.js +0 -1
  559. package/.next/standalone/.next/server/chunks/3555.js +0 -1
  560. package/.next/standalone/.next/server/chunks/3576.js +0 -1
  561. package/.next/standalone/.next/server/chunks/3611.js +0 -158
  562. package/.next/standalone/.next/server/chunks/4090.js +0 -13
  563. package/.next/standalone/.next/server/chunks/4343.js +0 -1
  564. package/.next/standalone/.next/server/chunks/4974.js +0 -1
  565. package/.next/standalone/.next/server/chunks/5491.js +0 -1
  566. package/.next/standalone/.next/server/chunks/5541.js +0 -1
  567. package/.next/standalone/.next/server/chunks/5561.js +0 -7
  568. package/.next/standalone/.next/server/chunks/6643.js +0 -1
  569. package/.next/standalone/.next/server/chunks/6767.js +0 -1
  570. package/.next/standalone/.next/server/chunks/7228.js +0 -2
  571. package/.next/standalone/.next/server/chunks/7462.js +0 -255
  572. package/.next/standalone/.next/server/chunks/7621.js +0 -1
  573. package/.next/standalone/.next/server/chunks/8144.js +0 -1
  574. package/.next/standalone/.next/server/chunks/8637.js +0 -1
  575. package/.next/standalone/.next/server/chunks/896.js +0 -1
  576. package/.next/standalone/.next/server/chunks/9508.js +0 -2
  577. package/.next/standalone/.next/server/chunks/9615.js +0 -1
  578. package/.next/standalone/.next/static/YJZurE1onX9K-RDNIplc5/_buildManifest.js +0 -1
  579. package/.next/standalone/.next/static/chunks/19126-12ce8ade288ce1dc.js +0 -1
  580. package/.next/standalone/.next/static/chunks/19898-2a3d83a3996794cd.js +0 -1
  581. package/.next/standalone/.next/static/chunks/20051-d9233fd4578d66cc.js +0 -1
  582. package/.next/standalone/.next/static/chunks/21932-bce5ba937d1603e1.js +0 -1
  583. package/.next/standalone/.next/static/chunks/23466-842c126491b753bc.js +0 -1
  584. package/.next/standalone/.next/static/chunks/35486-592daa5c9fdf701d.js +0 -1
  585. package/.next/standalone/.next/static/chunks/37880-4395be5cee4112fa.js +0 -1
  586. package/.next/standalone/.next/static/chunks/3853-f94afe2f83089c0d.js +0 -1
  587. package/.next/standalone/.next/static/chunks/4842-95cf4b7efd540e89.js +0 -1
  588. package/.next/standalone/.next/static/chunks/4860.1bebb2a898b170f6.js +0 -1
  589. package/.next/standalone/.next/static/chunks/51841-0e4e0e63b437dcfd.js +0 -1
  590. package/.next/standalone/.next/static/chunks/52206-6048525f57a21502.js +0 -1
  591. package/.next/standalone/.next/static/chunks/55469-ed5ff019ff71ef59.js +0 -1
  592. package/.next/standalone/.next/static/chunks/59296-4fa84fe82e2c7789.js +0 -1
  593. package/.next/standalone/.next/static/chunks/60011-b602fea2afba6992.js +0 -1
  594. package/.next/standalone/.next/static/chunks/70093-0ff6fd59445b5cb9.js +0 -1
  595. package/.next/standalone/.next/static/chunks/93346-c4468893138daac7.js +0 -1
  596. package/.next/standalone/.next/static/chunks/95627-8d9f6d2d88f7a641.js +0 -1
  597. package/.next/standalone/.next/static/chunks/95750-3d0d1d48995d1088.js +0 -1
  598. package/.next/standalone/.next/static/chunks/99373.13c8ac5da1ddabe9.js +0 -1
  599. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-b55a8d6d9bd27276.js +0 -1
  600. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-99297f77cce24151.js +0 -1
  601. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-fd10bca891f0f73a.js +0 -1
  602. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-2e000a7010d1e9ea.js +0 -1
  603. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-75e42d130404ca2b.js +0 -1
  604. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/[ideaUuid]/page-6a38c21b164cdc07.js +0 -1
  605. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/ideas/page-48c840cb3011bf97.js +0 -1
  606. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-7ec535fac7bbc75d.js +0 -1
  607. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/new/page-414b398806324ad1.js +0 -1
  608. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-8f91ed174c14d5f0.js +0 -1
  609. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-f6814f25bbacdbea.js +0 -1
  610. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-92e8980da0d98d48.js +0 -1
  611. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-ab87cbb18d0ee538.js +0 -1
  612. package/.next/standalone/.next/static/chunks/app/admin/companies/[uuid]/page-81682b4aa6859615.js +0 -1
  613. package/.next/standalone/.next/static/chunks/app/admin/companies/page-bbd92a7b214ddbf5.js +0 -1
  614. package/.next/standalone/.next/static/chunks/app/admin/page-c4167418611b4a6b.js +0 -1
  615. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-99297f77cce24151.js +0 -1
  616. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-99297f77cce24151.js +0 -1
  617. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-99297f77cce24151.js +0 -1
  618. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-99297f77cce24151.js +0 -1
  619. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-99297f77cce24151.js +0 -1
  620. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-99297f77cce24151.js +0 -1
  621. package/.next/standalone/.next/static/chunks/app/api/agents/route-99297f77cce24151.js +0 -1
  622. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-99297f77cce24151.js +0 -1
  623. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-99297f77cce24151.js +0 -1
  624. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-99297f77cce24151.js +0 -1
  625. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-99297f77cce24151.js +0 -1
  626. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-99297f77cce24151.js +0 -1
  627. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-99297f77cce24151.js +0 -1
  628. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-99297f77cce24151.js +0 -1
  629. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-99297f77cce24151.js +0 -1
  630. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-99297f77cce24151.js +0 -1
  631. package/.next/standalone/.next/static/chunks/app/api/auth/refresh/route-99297f77cce24151.js +0 -1
  632. package/.next/standalone/.next/static/chunks/app/api/auth/session/route-99297f77cce24151.js +0 -1
  633. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-99297f77cce24151.js +0 -1
  634. package/.next/standalone/.next/static/chunks/app/api/comments/route-99297f77cce24151.js +0 -1
  635. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-99297f77cce24151.js +0 -1
  636. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-99297f77cce24151.js +0 -1
  637. package/.next/standalone/.next/static/chunks/app/api/events/route-99297f77cce24151.js +0 -1
  638. package/.next/standalone/.next/static/chunks/app/api/health/route-99297f77cce24151.js +0 -1
  639. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-99297f77cce24151.js +0 -1
  640. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-99297f77cce24151.js +0 -1
  641. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-99297f77cce24151.js +0 -1
  642. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-99297f77cce24151.js +0 -1
  643. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-99297f77cce24151.js +0 -1
  644. package/.next/standalone/.next/static/chunks/app/api/mcp/route-99297f77cce24151.js +0 -1
  645. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-99297f77cce24151.js +0 -1
  646. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-99297f77cce24151.js +0 -1
  647. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-99297f77cce24151.js +0 -1
  648. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-99297f77cce24151.js +0 -1
  649. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-99297f77cce24151.js +0 -1
  650. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-99297f77cce24151.js +0 -1
  651. package/.next/standalone/.next/static/chunks/app/api/notifications/route-99297f77cce24151.js +0 -1
  652. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-99297f77cce24151.js +0 -1
  653. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-99297f77cce24151.js +0 -1
  654. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-99297f77cce24151.js +0 -1
  655. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-99297f77cce24151.js +0 -1
  656. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-99297f77cce24151.js +0 -1
  657. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-99297f77cce24151.js +0 -1
  658. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-99297f77cce24151.js +0 -1
  659. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-99297f77cce24151.js +0 -1
  660. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-99297f77cce24151.js +0 -1
  661. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-99297f77cce24151.js +0 -1
  662. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-99297f77cce24151.js +0 -1
  663. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-99297f77cce24151.js +0 -1
  664. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-99297f77cce24151.js +0 -1
  665. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-99297f77cce24151.js +0 -1
  666. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-99297f77cce24151.js +0 -1
  667. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-99297f77cce24151.js +0 -1
  668. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-99297f77cce24151.js +0 -1
  669. package/.next/standalone/.next/static/chunks/app/api/projects/route-99297f77cce24151.js +0 -1
  670. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-99297f77cce24151.js +0 -1
  671. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-99297f77cce24151.js +0 -1
  672. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-99297f77cce24151.js +0 -1
  673. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-99297f77cce24151.js +0 -1
  674. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-99297f77cce24151.js +0 -1
  675. package/.next/standalone/.next/static/chunks/app/api/search/route-99297f77cce24151.js +0 -1
  676. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-99297f77cce24151.js +0 -1
  677. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-99297f77cce24151.js +0 -1
  678. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-99297f77cce24151.js +0 -1
  679. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-99297f77cce24151.js +0 -1
  680. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-99297f77cce24151.js +0 -1
  681. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-99297f77cce24151.js +0 -1
  682. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-99297f77cce24151.js +0 -1
  683. package/.next/standalone/.next/static/chunks/app/layout-482dee7dace72c88.js +0 -1
  684. package/.next/standalone/.next/static/chunks/app/login/admin/page-4e72e6e4327ee7cd.js +0 -1
  685. package/.next/standalone/.next/static/chunks/app/login/page-dcb689dfe6e69879.js +0 -1
  686. package/.next/standalone/.next/static/chunks/app/login/pick-workspace/page-ee9bda8bfc4e0697.js +0 -1
  687. package/.next/standalone/.next/static/chunks/app/onboarding/page-922a196db6eb2385.js +0 -1
  688. package/.next/standalone/.next/static/css/bfe962487ee66da7.css +0 -1
  689. package/.next/standalone/.next/static/media/0f1bdadaf30e2d5f-s.woff2 +0 -0
  690. package/.next/standalone/.next/static/media/2c34d62a75506231-s.woff2 +0 -0
  691. package/.next/standalone/.next/static/media/601f5c280d60caca-s.woff2 +0 -0
  692. package/.next/standalone/.next/static/media/a115172161b307bb-s.woff2 +0 -0
  693. package/.next/standalone/.next/static/media/d100b2a099e34044-s.woff2 +0 -0
  694. package/.next/standalone/.next/static/media/f5271587012faf78-s.p.woff2 +0 -0
  695. /package/.next/standalone/.next/static/{YJZurE1onX9K-RDNIplc5 → 519aK55QLHaVN7b1TVDkB}/_ssgManifest.js +0 -0
@@ -0,0 +1,180 @@
1
+ // cli/control-handler.mjs
2
+ // Daemon-side handler for reverse control commands (子3 — daemon-interrupt-resume,
3
+ // Tech Design "Architecture" / q1=a double-check). The SSE listener forks a
4
+ // `type:"control"` event here (NOT to the wake router) — see sse-listener.mjs.
5
+ //
6
+ // The single safety property this module enforces is the DOUBLE-CHECK (q1=a): act
7
+ // ONLY when BOTH hold —
8
+ // 1. event.targetConnectionUuid === this daemon's OWN registered connectionUuid, AND
9
+ // 2. the waker's in-memory execution registry holds a RUNNING child for the
10
+ // command's `${entityType}:${entityUuid}`.
11
+ // On either mismatch the command is IGNORED and LOGGED (memory: no-silent-errors),
12
+ // so a stale / recycled connection uuid can never make the daemon kill the wrong
13
+ // subprocess (Tech Design "Risks": mis-kill after a reconnect).
14
+ //
15
+ // On a verified match it (a) sets a per-entity "interrupting" flag on the waker so
16
+ // the waker reports the resulting exit as interrupted(reason="user") rather than a
17
+ // crash, then (b) invokes the injected killer (process-killer.killProcessTree) on
18
+ // the live child. The kill is fire-and-forget from the listener's perspective; this
19
+ // handler never throws into the SSE loop.
20
+ //
21
+ // Plain ESM, zero new deps. The killer + connectionUuid getter are injected so the
22
+ // handler is unit-testable without a real subprocess or SSE stream.
23
+
24
+ import { killProcessTree } from "./process-killer.mjs";
25
+
26
+ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
27
+
28
+ /**
29
+ * Build the `onControl(event)` callback the SseListener invokes for a
30
+ * `type:"control"` event.
31
+ *
32
+ * @param {{
33
+ * waker: {
34
+ * executions: Map<string, { entityType: string, entityUuid: string, child?: any, status: string }>,
35
+ * markInterrupting?: (entityType: string, entityUuid: string) => void,
36
+ * },
37
+ * getConnectionUuid: () => (string|null), This daemon's registered connection uuid
38
+ * (null until the SSE handshake reports it).
39
+ * killer?: (child: any, opts: any) => Promise<any>, Injectable; defaults to killProcessTree.
40
+ * sigintTimeoutMs?: number, Layered-resolved escalation window.
41
+ * redispatchResume?: (entityType: string, entityUuid: string) => void, Re-run a wake
42
+ * for a resumed entity (子3); injected by the daemon.
43
+ * deliverTurn?: (turnUuid?: string) => void, Dispatch a PRECISE pending turn by uuid
44
+ * (子2 — origin-only live delivery). On a
45
+ * `deliver_turn` control event (after the Check-1
46
+ * connection match) the handler invokes this with
47
+ * the event's `turnUuid` so ONLY that one new
48
+ * pending `human_instruction` turn runs — not a
49
+ * connection-wide sweep that would also drag every
50
+ * other still-pending turn along. Injected by the
51
+ * daemon (`backfill.pendingTurnsOnly`); the
52
+ * arg-less form (reconnect) still sweeps all.
53
+ * logger?: { info(m:string):void, warn(m:string):void, error(m:string):void },
54
+ * }} deps
55
+ * @returns {(event: any) => void} The onControl callback (synchronous, non-throwing).
56
+ */
57
+ export function createControlHandler(deps) {
58
+ const waker = deps.waker;
59
+ const getConnectionUuid = deps.getConnectionUuid;
60
+ const killer = deps.killer ?? killProcessTree;
61
+ const sigintTimeoutMs = deps.sigintTimeoutMs;
62
+ const redispatchResume = deps.redispatchResume;
63
+ const deliverTurn = deps.deliverTurn;
64
+ const logger = deps.logger ?? NOOP_LOGGER;
65
+
66
+ /** Registry key for a resource — MUST match waker.#execKey. */
67
+ const execKey = (entityType, entityUuid) => `${entityType}:${entityUuid}`;
68
+
69
+ /**
70
+ * Handle one control event. Synchronous + non-throwing: it performs the
71
+ * double-check and kicks off the (async) kill fire-and-forget, returning
72
+ * immediately so the SSE consumer never blocks. `interrupt` (kill), `resume`
73
+ * (re-dispatch wake), and `deliver_turn` (origin-only live delivery — trigger the
74
+ * pending-turns sweep) are acted on; any other/unknown command is ignored + logged
75
+ * (forward-compatible).
76
+ * @param {{ type?: string, command?: string, targetConnectionUuid?: string, entityType?: string, entityUuid?: string }} event
77
+ */
78
+ return function onControl(event) {
79
+ try {
80
+ if (!event || event.type !== "control") {
81
+ logger.warn(`[Chorus] control-handler received non-control event; ignoring`);
82
+ return;
83
+ }
84
+ if (
85
+ event.command !== "interrupt" &&
86
+ event.command !== "resume" &&
87
+ event.command !== "deliver_turn"
88
+ ) {
89
+ // Forward-compatible: the wire enum may grow.
90
+ logger.warn(`[Chorus] control command "${event.command}" not supported; ignoring`);
91
+ return;
92
+ }
93
+
94
+ const { command, targetConnectionUuid, entityType, entityUuid } = event;
95
+
96
+ // --- Check 1: connection-uuid match (applies to every command) ---
97
+ const myConnectionUuid = getConnectionUuid?.() ?? null;
98
+ if (!myConnectionUuid || targetConnectionUuid !== myConnectionUuid) {
99
+ // Not ours (stale/recycled uuid, or handshake not yet complete). Ignore.
100
+ logger.info(
101
+ `[Chorus] control: ignoring ${command} for connection ${targetConnectionUuid} ` +
102
+ `(this daemon is ${myConnectionUuid ?? "<unregistered>"})`
103
+ );
104
+ return;
105
+ }
106
+
107
+ // --- deliver_turn: origin-only live delivery (子2). The session's origin connection
108
+ // (THIS one — Check 1 passed) was pinged that a SPECIFIC new pending
109
+ // `human_instruction` turn (`event.turnUuid`) awaits. Dispatch ONLY that turn — not
110
+ // a connection-wide sweep, which would also drag every other still-pending turn of
111
+ // this connection along (the multi-wake bug). No entity is carried on the wire (the
112
+ // turn is read by uuid), and there is NO running-child requirement (mirrors
113
+ // `resume`); the read resolves the text from the persisted turn. Idempotent with
114
+ // reconnect backfill via the shared `seen` set (key turn:{uuid}). A `deliver_turn`
115
+ // missing `turnUuid` (older server) falls back to the full sweep so it still runs. ---
116
+ if (command === "deliver_turn") {
117
+ const turnUuid = typeof event.turnUuid === "string" ? event.turnUuid : undefined;
118
+ logger.info(
119
+ `[Chorus] control: deliver_turn for connection ${targetConnectionUuid} ` +
120
+ (turnUuid ? `(turn ${turnUuid})` : "(no turnUuid — full sweep fallback)"),
121
+ );
122
+ try {
123
+ deliverTurn?.(turnUuid);
124
+ } catch (err) {
125
+ logger.warn(`[Chorus] control: deliver_turn failed: ${err}`);
126
+ }
127
+ return;
128
+ }
129
+
130
+ if (typeof entityType !== "string" || typeof entityUuid !== "string") {
131
+ logger.warn(`[Chorus] control: ${command} missing entityType/entityUuid; ignoring`);
132
+ return;
133
+ }
134
+
135
+ // --- resume: re-dispatch the wake for this entity (子3). No running-child
136
+ // check — the subprocess is gone (it was interrupted); the wake path will
137
+ // re-spawn and `--resume` the existing session. ---
138
+ if (command === "resume") {
139
+ logger.info(`[Chorus] control: resuming ${entityType}:${entityUuid} (re-dispatch wake)`);
140
+ try {
141
+ redispatchResume?.(entityType, entityUuid);
142
+ } catch (err) {
143
+ logger.warn(`[Chorus] control: resume re-dispatch failed for ${entityType}:${entityUuid}: ${err}`);
144
+ }
145
+ return;
146
+ }
147
+
148
+ // --- interrupt path: Check 2 — in-memory entity ownership (running child) ---
149
+ const key = execKey(entityType, entityUuid);
150
+ const entry = waker?.executions?.get(key);
151
+ if (!entry || entry.status !== "running" || !entry.child) {
152
+ // Either we never ran this entity, it's only queued (no child yet), or the
153
+ // wake already finished (race: interrupt arrived after exit). Safe no-op.
154
+ logger.info(
155
+ `[Chorus] control: no running subprocess for ${key} on this daemon; ignoring interrupt`
156
+ );
157
+ return;
158
+ }
159
+
160
+ // --- Both checks passed: mark interrupting (so the waker reports reason=user),
161
+ // then kill the tree. ---
162
+ logger.info(`[Chorus] control: interrupting running subprocess for ${key} (pid=${entry.child.pid})`);
163
+ try {
164
+ waker.markInterrupting?.(entityType, entityUuid);
165
+ } catch (err) {
166
+ logger.warn(`[Chorus] control: markInterrupting failed for ${key}: ${err}`);
167
+ }
168
+
169
+ // Fire-and-forget the kill: the waker observes the child's exit and reports
170
+ // the interrupted state. The killer never throws, but guard the promise
171
+ // anyway so a rejection can't surface as an unhandled rejection.
172
+ Promise.resolve(killer(entry.child, { sigintTimeoutMs, logger })).catch((err) => {
173
+ logger.warn(`[Chorus] control: killProcessTree rejected for ${key}: ${err}`);
174
+ });
175
+ } catch (err) {
176
+ // Absolute backstop — a control event must never crash the SSE loop.
177
+ logger.error(`[Chorus] control-handler unexpected error: ${err}`);
178
+ }
179
+ };
180
+ }
@@ -0,0 +1,155 @@
1
+ // cli/credentials.mjs
2
+ // Layered resolution of the Chorus server URL + `cho_` API key for the daemon
3
+ // and login subcommands. Plain ESM, zero dependencies — ships verbatim in the
4
+ // npm package alongside chorus.mjs (see package.json `files`).
5
+ //
6
+ // Precedence (first complete pair wins):
7
+ // 1. explicit flags --url / --api-key
8
+ // 2. environment CHORUS_URL / CHORUS_API_KEY
9
+ // 3. login file ~/.chorus/daemon.json (written by `chorus login`)
10
+ // 4. plugin fallback ~/.claude/settings.json → .env.CHORUS_URL / .env.CHORUS_API_KEY
11
+ //
12
+ // The CC chorus plugin does NOT persist credentials to a file — it reads
13
+ // CHORUS_URL / CHORUS_API_KEY from the environment, which users configure in
14
+ // the `env` block of ~/.claude/settings.json. Tier 4 reads that block as a
15
+ // best-effort last resort (file may be absent or differently shaped — read
16
+ // defensively). Verified against the 0.10.0 plugin: bin/*.sh all read the two
17
+ // env vars; .chorus/state.json holds session state, never credentials.
18
+
19
+ import { readFileSync } from "node:fs";
20
+ import { homedir } from "node:os";
21
+ import { join } from "node:path";
22
+
23
+ /** Absolute path to the login file written by `chorus login`. */
24
+ export function loginFilePath() {
25
+ return join(homedir(), ".chorus", "daemon.json");
26
+ }
27
+
28
+ /** Absolute path to the Claude Code user settings file (plugin fallback source). */
29
+ export function claudeSettingsPath() {
30
+ return join(homedir(), ".claude", "settings.json");
31
+ }
32
+
33
+ /**
34
+ * Read a JSON file, returning `null` on any error (missing / unreadable /
35
+ * malformed). Never throws — callers treat a null as "source absent".
36
+ * @param {string} path
37
+ * @returns {Record<string, unknown> | null}
38
+ */
39
+ function readJsonSafe(path) {
40
+ try {
41
+ const raw = readFileSync(path, "utf8");
42
+ const parsed = JSON.parse(raw);
43
+ return parsed && typeof parsed === "object" ? parsed : null;
44
+ } catch {
45
+ return null;
46
+ }
47
+ }
48
+
49
+ /** A non-empty string, or undefined. Trims; empty/whitespace → undefined. */
50
+ function nonEmpty(value) {
51
+ if (typeof value !== "string") return undefined;
52
+ const trimmed = value.trim();
53
+ return trimmed.length > 0 ? trimmed : undefined;
54
+ }
55
+
56
+ /**
57
+ * Read the recorded yolo acknowledgement (`yoloAckAt`) from the login file, if
58
+ * present. Returns the ISO-8601 string, or null when the file is absent /
59
+ * unreadable / carries no ack. Never throws (a missing ack just means "not yet
60
+ * confirmed"). The ack lives in the same `~/.chorus/daemon.json` as the
61
+ * credentials — there is no separate ack file (daemon-permission-mode spec).
62
+ *
63
+ * @param {{ readJson?: (p: string) => (Record<string, unknown>|null), loginPath?: string }} [deps]
64
+ * @returns {string | null}
65
+ */
66
+ export function readYoloAck(deps = {}) {
67
+ const readJson = deps.readJson ?? readJsonSafe;
68
+ const loginPath = deps.loginPath ?? loginFilePath();
69
+ const file = readJson(loginPath);
70
+ return file ? nonEmpty(file.yoloAckAt) ?? null : null;
71
+ }
72
+
73
+ /**
74
+ * @typedef {Object} ResolvedCredentials
75
+ * @property {string} url
76
+ * @property {string} apiKey
77
+ * @property {"flag"|"env"|"login-file"|"plugin-fallback"} source
78
+ */
79
+
80
+ /**
81
+ * @typedef {Object} ResolveDeps Injectable IO for tests (no real disk/env).
82
+ * @property {Record<string, string|undefined>} [env]
83
+ * @property {(path: string) => (Record<string, unknown>|null)} [readJson]
84
+ * @property {string} [loginPath]
85
+ * @property {string} [settingsPath]
86
+ */
87
+
88
+ /**
89
+ * Resolve credentials from the four layered sources, in fixed precedence.
90
+ *
91
+ * @param {{ url?: string, apiKey?: string }} flags Explicit --url / --api-key.
92
+ * @param {ResolveDeps} [deps]
93
+ * @returns {ResolvedCredentials}
94
+ * @throws {Error} when no source yields a complete url+apiKey pair. The message
95
+ * lists every source that was tried and how to supply credentials.
96
+ */
97
+ export function resolveCredentials(flags = {}, deps = {}) {
98
+ const env = deps.env ?? process.env;
99
+ const readJson = deps.readJson ?? readJsonSafe;
100
+ const loginPath = deps.loginPath ?? loginFilePath();
101
+ const settingsPath = deps.settingsPath ?? claudeSettingsPath();
102
+
103
+ const tried = [];
104
+
105
+ // 1. Explicit flags
106
+ tried.push("--url/--api-key flags");
107
+ {
108
+ const url = nonEmpty(flags.url);
109
+ const apiKey = nonEmpty(flags.apiKey);
110
+ if (url && apiKey) return { url, apiKey, source: "flag" };
111
+ }
112
+
113
+ // 2. Environment variables
114
+ tried.push("CHORUS_URL / CHORUS_API_KEY environment variables");
115
+ {
116
+ const url = nonEmpty(env.CHORUS_URL);
117
+ const apiKey = nonEmpty(env.CHORUS_API_KEY);
118
+ if (url && apiKey) return { url, apiKey, source: "env" };
119
+ }
120
+
121
+ // 3. Login file (~/.chorus/daemon.json)
122
+ tried.push(`login file (${loginPath}, run \`chorus login\`)`);
123
+ {
124
+ const file = readJson(loginPath);
125
+ if (file) {
126
+ const url = nonEmpty(file.url);
127
+ const apiKey = nonEmpty(file.apiKey);
128
+ if (url && apiKey) return { url, apiKey, source: "login-file" };
129
+ }
130
+ }
131
+
132
+ // 4. Plugin fallback (~/.claude/settings.json → env block)
133
+ tried.push(`Claude Code plugin config (${settingsPath} → env.CHORUS_URL/CHORUS_API_KEY)`);
134
+ {
135
+ const settings = readJson(settingsPath);
136
+ const envBlock =
137
+ settings && typeof settings.env === "object" && settings.env !== null
138
+ ? /** @type {Record<string, unknown>} */ (settings.env)
139
+ : null;
140
+ if (envBlock) {
141
+ const url = nonEmpty(envBlock.CHORUS_URL);
142
+ const apiKey = nonEmpty(envBlock.CHORUS_API_KEY);
143
+ if (url && apiKey) return { url, apiKey, source: "plugin-fallback" };
144
+ }
145
+ }
146
+
147
+ throw new Error(
148
+ "Could not resolve Chorus credentials (url + cho_ API key). Tried, in order:\n" +
149
+ tried.map((t, i) => ` ${i + 1}. ${t}`).join("\n") +
150
+ "\n\nSupply credentials with one of:\n" +
151
+ " • flags: chorus daemon --url <https://...> --api-key <cho_...>\n" +
152
+ " • env: CHORUS_URL=<https://...> CHORUS_API_KEY=<cho_...> chorus daemon\n" +
153
+ " • login: chorus login (persists to ~/.chorus/daemon.json)\n"
154
+ );
155
+ }
@@ -0,0 +1,38 @@
1
+ // cli/daemon-agent.mjs
2
+ // Pure resolution + validation of the daemon's `--agent <type>` selection. The
3
+ // flag/env exist to RESERVE the extension point for future agent backends
4
+ // (e.g. codex); only `claude-code` is implemented in this change. Resolving an
5
+ // unknown value is a hard error (no silent fallback). Zero dependencies.
6
+
7
+ /** The agent backends the daemon recognizes. Only `claude-code` is implemented. */
8
+ export const KNOWN_AGENTS = ["claude-code"];
9
+
10
+ /** The default agent backend when neither --agent nor CHORUS_AGENT is set. */
11
+ export const DEFAULT_AGENT = "claude-code";
12
+
13
+ /**
14
+ * Resolve the agent type from flag → env → default, and validate it.
15
+ * Precedence: explicit `--agent` flag > CHORUS_AGENT env > DEFAULT_AGENT.
16
+ *
17
+ * @param {{ agent?: string }} flags
18
+ * @param {Record<string, string|undefined>} env
19
+ * @returns {{ ok: true, agent: string } | { ok: false, value: string, error: string }}
20
+ * `ok:false` carries the offending value and a human-actionable error naming
21
+ * the accepted types — the caller exits non-zero and prints `error`.
22
+ */
23
+ export function resolveAgentType(flags, env) {
24
+ const raw =
25
+ (typeof flags.agent === "string" && flags.agent.trim()) ||
26
+ (typeof env.CHORUS_AGENT === "string" && env.CHORUS_AGENT.trim()) ||
27
+ DEFAULT_AGENT;
28
+ if (!KNOWN_AGENTS.includes(raw)) {
29
+ return {
30
+ ok: false,
31
+ value: raw,
32
+ error:
33
+ `Unknown --agent "${raw}". Accepted: ${KNOWN_AGENTS.join(", ")}. ` +
34
+ `(Only ${DEFAULT_AGENT} is implemented; the flag reserves the slot for future agents.)`,
35
+ };
36
+ }
37
+ return { ok: true, agent: raw };
38
+ }
@@ -0,0 +1,80 @@
1
+ // cli/daemon-banner.mjs
2
+ // Pure formatter for the daemon's boxed startup banner — one screen summarizing
3
+ // the daemon's posture. No IO: `formatBanner(info)` returns a string the caller
4
+ // writes. Degrades box-drawing to plain lines when `isTTY` is false so piped /
5
+ // redirected output stays clean and never depends on terminal width.
6
+ //
7
+ // SECURITY: the banner shows the credential SOURCE, never the raw API key
8
+ // (owner decision: no masking needed because the key is simply not displayed).
9
+ // Zero dependencies — ships in the npm package alongside chorus.mjs.
10
+
11
+ /**
12
+ * @typedef {Object} BannerInfo
13
+ * @property {string} version chorus CLI version.
14
+ * @property {string} url remote server URL.
15
+ * @property {string} agentName authenticated agent name.
16
+ * @property {string} agentUuid authenticated agent uuid.
17
+ * @property {"yolo"|"chorus"} permissionMode
18
+ * @property {string} credentialSource resolved credential source (flag/env/login-file/…).
19
+ * @property {string} agentType local agent backend (e.g. claude-code).
20
+ * @property {string|null} claudePath resolved claude path, or null when not found.
21
+ * @property {string} [connection] connection state line (default "connecting…").
22
+ */
23
+
24
+ /** Right-pad to width (banner box alignment). */
25
+ function pad(s, width) {
26
+ return s.length >= width ? s : s + " ".repeat(width - s.length);
27
+ }
28
+
29
+ /**
30
+ * Build the banner's labelled rows (label, value) in display order. Pure — also
31
+ * used by tests to assert content independently of the box framing.
32
+ * @param {BannerInfo} info
33
+ * @returns {Array<[string, string]>}
34
+ */
35
+ export function bannerRows(info) {
36
+ const permission =
37
+ info.permissionMode === "yolo"
38
+ ? "YOLO ⚠ (full autonomy — Bash/write/any command)"
39
+ : "chorus-only (Chorus MCP tools only)";
40
+ const claude = info.claudePath ? `found: ${info.claudePath}` : "NOT FOUND — install `claude` or set CHORUS_CLAUDE_PATH";
41
+ return [
42
+ ["Version", `chorus v${info.version}`],
43
+ ["Server", info.url],
44
+ ["Agent", `${info.agentName} (${info.agentUuid})`],
45
+ ["Agent type", info.agentType],
46
+ ["Permission", permission],
47
+ ["Credentials", `source: ${info.credentialSource}`],
48
+ ["Connection", info.connection ?? "connecting…"],
49
+ ["claude CLI", claude],
50
+ ];
51
+ }
52
+
53
+ /**
54
+ * Format the startup banner. On a TTY, draws a Unicode box; otherwise emits
55
+ * plain `label: value` lines (no box-drawing chars, no width math) so piped
56
+ * output is clean. Never throws.
57
+ * @param {BannerInfo} info
58
+ * @param {{ isTTY?: boolean }} [opts]
59
+ * @returns {string}
60
+ */
61
+ export function formatBanner(info, opts = {}) {
62
+ const rows = bannerRows(info);
63
+ const isTTY = opts.isTTY ?? false;
64
+
65
+ if (!isTTY) {
66
+ // Plain mode: stable, greppable, no box-drawing.
67
+ const lines = ["Chorus daemon", ...rows.map(([k, v]) => ` ${k}: ${v}`)];
68
+ return lines.join("\n") + "\n";
69
+ }
70
+
71
+ const labelW = Math.max(...rows.map(([k]) => k.length));
72
+ const body = rows.map(([k, v]) => `${pad(k, labelW)} ${v}`);
73
+ const title = "Chorus daemon";
74
+ const innerW = Math.max(title.length, ...body.map((l) => l.length));
75
+ const top = "┌" + "─".repeat(innerW + 2) + "┐";
76
+ const bottom = "└" + "─".repeat(innerW + 2) + "┘";
77
+ const sep = "├" + "─".repeat(innerW + 2) + "┤";
78
+ const line = (s) => `│ ${pad(s, innerW)} │`;
79
+ return [top, line(title), sep, ...body.map(line), bottom].join("\n") + "\n";
80
+ }
@@ -0,0 +1,84 @@
1
+ // cli/daemon-config.mjs
2
+ // Layered resolution of daemon tunables that are NOT credentials (子3 —
3
+ // daemon-interrupt-resume, Tech Design "Layered config"). Mirrors the precedence
4
+ // style of cli/credentials.mjs exactly — first defined source wins:
5
+ //
6
+ // sigintTimeoutMs: --sigint-timeout flag
7
+ // > CHORUS_DAEMON_SIGINT_TIMEOUT env
8
+ // > ~/.chorus/daemon.json `sigintTimeoutMs`
9
+ // > default 10000
10
+ //
11
+ // The escalation window is how long the killer waits after SIGINT before a forceful
12
+ // tree kill. Plain ESM, zero dependencies — ships verbatim in the npm package.
13
+ // IO (env / file read) is injectable so this is unit-testable without real disk.
14
+
15
+ import { readFileSync } from "node:fs";
16
+ import { loginFilePath } from "./credentials.mjs";
17
+
18
+ /** Built-in default escalation window (ms) — matches the spec's 10 seconds. */
19
+ export const DEFAULT_SIGINT_TIMEOUT_MS = 10_000;
20
+
21
+ /**
22
+ * Coerce a value to a positive finite integer of milliseconds, or undefined when it
23
+ * is absent / not a usable number. Accepts a number or a numeric string (env vars
24
+ * and JSON both arrive as strings/numbers). Zero and negatives are rejected (a
25
+ * non-positive window would defeat the graceful stage), as are NaN/Infinity.
26
+ * @param {unknown} value
27
+ * @returns {number | undefined}
28
+ */
29
+ function positiveIntMs(value) {
30
+ if (value === undefined || value === null || value === "") return undefined;
31
+ const n = typeof value === "number" ? value : Number(String(value).trim());
32
+ if (!Number.isFinite(n) || n <= 0) return undefined;
33
+ return Math.floor(n);
34
+ }
35
+
36
+ /**
37
+ * Read a JSON file, returning `null` on any error (missing / unreadable /
38
+ * malformed). Never throws — mirrors credentials.mjs readJsonSafe.
39
+ * @param {string} path
40
+ * @returns {Record<string, unknown> | null}
41
+ */
42
+ function readJsonSafe(path) {
43
+ try {
44
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
45
+ return parsed && typeof parsed === "object" ? parsed : null;
46
+ } catch {
47
+ return null;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * Resolve the SIGINT-escalation timeout (ms) from the four layered sources.
53
+ *
54
+ * @param {{ sigintTimeout?: number|string }} [flags] Explicit --sigint-timeout.
55
+ * @param {{
56
+ * env?: Record<string, string|undefined>,
57
+ * readJson?: (path: string) => (Record<string, unknown>|null),
58
+ * loginPath?: string,
59
+ * }} [deps]
60
+ * @returns {number} Always a positive integer (the default when no source applies).
61
+ */
62
+ export function resolveSigintTimeoutMs(flags = {}, deps = {}) {
63
+ const env = deps.env ?? process.env;
64
+ const readJson = deps.readJson ?? readJsonSafe;
65
+ const loginPath = deps.loginPath ?? loginFilePath();
66
+
67
+ // 1. Explicit flag
68
+ const fromFlag = positiveIntMs(flags.sigintTimeout);
69
+ if (fromFlag !== undefined) return fromFlag;
70
+
71
+ // 2. Environment variable
72
+ const fromEnv = positiveIntMs(env.CHORUS_DAEMON_SIGINT_TIMEOUT);
73
+ if (fromEnv !== undefined) return fromEnv;
74
+
75
+ // 3. Login/config file (~/.chorus/daemon.json)
76
+ const file = readJson(loginPath);
77
+ if (file) {
78
+ const fromFile = positiveIntMs(file.sigintTimeoutMs);
79
+ if (fromFile !== undefined) return fromFile;
80
+ }
81
+
82
+ // 4. Built-in default
83
+ return DEFAULT_SIGINT_TIMEOUT_MS;
84
+ }