@chorus-aidlc/chorus 0.14.0 → 0.14.2

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 (592) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-build-manifest.json +459 -424
  3. package/.next/standalone/.next/app-path-routes-manifest.json +49 -45
  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 +8 -0
  7. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js +1 -1
  8. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page.js.nft.json +1 -1
  9. package/.next/standalone/.next/server/app/(dashboard)/project-groups/[uuid]/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/activity/page.js +1 -1
  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 +1 -1
  14. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page.js.nft.json +1 -1
  15. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js +2 -2
  17. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/dashboard/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js +2 -2
  20. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js +1 -1
  23. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/documents/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js +2 -2
  26. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/graph/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js +2 -2
  29. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js +1 -1
  32. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/new/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js +2 -2
  35. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/proposals/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js +1 -1
  38. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page_client-reference-manifest.js +1 -1
  40. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js +1 -1
  41. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/(dashboard)/projects/[uuid]/tasks/page_client-reference-manifest.js +1 -1
  43. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js +2 -2
  44. package/.next/standalone/.next/server/app/(dashboard)/projects/page.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/(dashboard)/projects/page_client-reference-manifest.js +1 -1
  46. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js +2 -2
  47. package/.next/standalone/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  49. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  50. package/.next/standalone/.next/server/app/_not-found.html +2 -2
  51. package/.next/standalone/.next/server/app/_not-found.rsc +2 -2
  52. package/.next/standalone/.next/server/app/admin/companies/[uuid]/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/admin/companies/new/page_client-reference-manifest.js +1 -1
  54. package/.next/standalone/.next/server/app/admin/companies/new.html +2 -2
  55. package/.next/standalone/.next/server/app/admin/companies/new.rsc +2 -2
  56. package/.next/standalone/.next/server/app/admin/companies/page_client-reference-manifest.js +1 -1
  57. package/.next/standalone/.next/server/app/admin/companies.html +2 -2
  58. package/.next/standalone/.next/server/app/admin/companies.rsc +2 -2
  59. package/.next/standalone/.next/server/app/admin/page_client-reference-manifest.js +1 -1
  60. package/.next/standalone/.next/server/app/admin.html +2 -2
  61. package/.next/standalone/.next/server/app/admin.rsc +2 -2
  62. package/.next/standalone/.next/server/app/api/admin/companies/[uuid]/route_client-reference-manifest.js +1 -1
  63. package/.next/standalone/.next/server/app/api/admin/companies/route_client-reference-manifest.js +1 -1
  64. package/.next/standalone/.next/server/app/api/admin/login/route_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/api/admin/session/route_client-reference-manifest.js +1 -1
  66. package/.next/standalone/.next/server/app/api/agent-connections/route_client-reference-manifest.js +1 -1
  67. package/.next/standalone/.next/server/app/api/agents/[uuid]/route_client-reference-manifest.js +1 -1
  68. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route.js +1 -1
  69. package/.next/standalone/.next/server/app/api/agents/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  70. package/.next/standalone/.next/server/app/api/agents/route_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/api/api-keys/[uuid]/route_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/api/api-keys/route_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/api/auth/callback/route_client-reference-manifest.js +1 -1
  74. package/.next/standalone/.next/server/app/api/auth/check-default/route_client-reference-manifest.js +1 -1
  75. package/.next/standalone/.next/server/app/api/auth/company-oidc/route_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/api/auth/default-login/route_client-reference-manifest.js +1 -1
  77. package/.next/standalone/.next/server/app/api/auth/identify/route_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/api/auth/me/route_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/api/auth/sync-token/route_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/api/comments/route.js +1 -1
  82. package/.next/standalone/.next/server/app/api/comments/route_client-reference-manifest.js +1 -1
  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.js +1 -1
  85. package/.next/standalone/.next/server/app/api/daemon/execution-state/route_client-reference-manifest.js +1 -1
  86. package/.next/standalone/.next/server/app/api/daemon/executions/route.js +1 -1
  87. package/.next/standalone/.next/server/app/api/daemon/executions/route_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route.js +1 -1
  89. package/.next/standalone/.next/server/app/api/daemon/pending-turns/route_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route.js +1 -1
  91. package/.next/standalone/.next/server/app/api/daemon/report-interrupt/route_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/api/daemon/resume/route.js +1 -1
  93. package/.next/standalone/.next/server/app/api/daemon/resume/route_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/api/daemon/transcript/route.js +1 -1
  95. package/.next/standalone/.next/server/app/api/daemon/transcript/route_client-reference-manifest.js +1 -1
  96. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route.js +1 -1
  97. package/.next/standalone/.next/server/app/api/daemon/turn-advance/route_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route.js +1 -1
  99. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/instruction/route_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route.js +1 -1
  101. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/repoint/route_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route.js +1 -1
  103. package/.next/standalone/.next/server/app/api/daemon-sessions/[sessionUuid]/route_client-reference-manifest.js +1 -1
  104. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route.js +1 -1
  105. package/.next/standalone/.next/server/app/api/daemon-sessions/ad-hoc/route_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/api/daemon-sessions/route.js +1 -1
  107. package/.next/standalone/.next/server/app/api/daemon-sessions/route_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/api/documents/[uuid]/route_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route.js +1 -1
  110. package/.next/standalone/.next/server/app/api/entities/[type]/[uuid]/root-idea/route_client-reference-manifest.js +1 -1
  111. package/.next/standalone/.next/server/app/api/events/notifications/route.js +1 -1
  112. package/.next/standalone/.next/server/app/api/events/notifications/route_client-reference-manifest.js +1 -1
  113. package/.next/standalone/.next/server/app/api/events/route.js +1 -1
  114. package/.next/standalone/.next/server/app/api/events/route_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route.js +1 -1
  117. package/.next/standalone/.next/server/app/api/ideas/[uuid]/claim/route_client-reference-manifest.js +1 -1
  118. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route.js +1 -1
  119. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/preview/route_client-reference-manifest.js +1 -1
  120. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route.js +1 -1
  121. package/.next/standalone/.next/server/app/api/ideas/[uuid]/move/route_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route.js +1 -1
  123. package/.next/standalone/.next/server/app/api/ideas/[uuid]/parent/route_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route.js +1 -1
  125. package/.next/standalone/.next/server/app/api/ideas/[uuid]/release/route_client-reference-manifest.js +1 -1
  126. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route.js +1 -1
  127. package/.next/standalone/.next/server/app/api/ideas/[uuid]/route_client-reference-manifest.js +1 -1
  128. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js +1 -0
  129. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route.js.nft.json +1 -0
  130. package/.next/standalone/.next/server/app/api/ideas/[uuid]/wake-preview/route_client-reference-manifest.js +1 -0
  131. package/.next/standalone/.next/server/app/api/ideas/conversational/route.js +1 -1
  132. package/.next/standalone/.next/server/app/api/ideas/conversational/route_client-reference-manifest.js +1 -1
  133. package/.next/standalone/.next/server/app/api/mcp/route.js +4 -4
  134. package/.next/standalone/.next/server/app/api/mcp/route_client-reference-manifest.js +1 -1
  135. package/.next/standalone/.next/server/app/api/me/assignments/route.js +1 -1
  136. package/.next/standalone/.next/server/app/api/me/assignments/route_client-reference-manifest.js +1 -1
  137. package/.next/standalone/.next/server/app/api/mentionables/route.js +1 -1
  138. package/.next/standalone/.next/server/app/api/mentionables/route_client-reference-manifest.js +1 -1
  139. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route.js +1 -1
  140. package/.next/standalone/.next/server/app/api/notifications/[uuid]/archive/route_client-reference-manifest.js +1 -1
  141. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route.js +1 -1
  142. package/.next/standalone/.next/server/app/api/notifications/[uuid]/read/route_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/api/notifications/preferences/route.js +1 -1
  144. package/.next/standalone/.next/server/app/api/notifications/preferences/route_client-reference-manifest.js +1 -1
  145. package/.next/standalone/.next/server/app/api/notifications/read-all/route.js +1 -1
  146. package/.next/standalone/.next/server/app/api/notifications/read-all/route_client-reference-manifest.js +1 -1
  147. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  148. package/.next/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  149. package/.next/standalone/.next/server/app/api/notifications/unread-count/route.js +1 -1
  150. package/.next/standalone/.next/server/app/api/notifications/unread-count/route_client-reference-manifest.js +1 -1
  151. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/dashboard/route_client-reference-manifest.js +1 -1
  152. package/.next/standalone/.next/server/app/api/project-groups/[uuid]/route_client-reference-manifest.js +1 -1
  153. package/.next/standalone/.next/server/app/api/project-groups/route_client-reference-manifest.js +1 -1
  154. package/.next/standalone/.next/server/app/api/project-visits/pin/route.js +1 -0
  155. package/.next/standalone/.next/server/app/api/project-visits/pin/route.js.nft.json +1 -0
  156. package/.next/standalone/.next/server/app/api/project-visits/pin/route_client-reference-manifest.js +1 -0
  157. package/.next/standalone/.next/server/app/api/project-visits/route.js +1 -0
  158. package/.next/standalone/.next/server/app/api/project-visits/route.js.nft.json +1 -0
  159. package/.next/standalone/.next/server/app/api/project-visits/route_client-reference-manifest.js +1 -0
  160. package/.next/standalone/.next/server/app/api/project-visits/visit/route.js +1 -0
  161. package/.next/standalone/.next/server/app/api/project-visits/visit/route.js.nft.json +1 -0
  162. package/.next/standalone/.next/server/app/api/project-visits/visit/route_client-reference-manifest.js +1 -0
  163. package/.next/standalone/.next/server/app/api/projects/[uuid]/activity/route_client-reference-manifest.js +1 -1
  164. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route.js +1 -1
  165. package/.next/standalone/.next/server/app/api/projects/[uuid]/available/route_client-reference-manifest.js +1 -1
  166. package/.next/standalone/.next/server/app/api/projects/[uuid]/documents/route_client-reference-manifest.js +1 -1
  167. package/.next/standalone/.next/server/app/api/projects/[uuid]/group/route_client-reference-manifest.js +1 -1
  168. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route.js +1 -1
  169. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/route_client-reference-manifest.js +1 -1
  170. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route.js +1 -1
  171. package/.next/standalone/.next/server/app/api/projects/[uuid]/ideas/tracker/route_client-reference-manifest.js +1 -1
  172. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route_client-reference-manifest.js +1 -1
  173. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/route_client-reference-manifest.js +1 -1
  174. package/.next/standalone/.next/server/app/api/projects/[uuid]/proposals/summary/route_client-reference-manifest.js +1 -1
  175. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route.js +1 -1
  176. package/.next/standalone/.next/server/app/api/projects/[uuid]/resource-graph/route_client-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/app/api/projects/[uuid]/route_client-reference-manifest.js +1 -1
  178. package/.next/standalone/.next/server/app/api/projects/[uuid]/stats/route_client-reference-manifest.js +1 -1
  179. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route.js +1 -1
  180. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/dependencies/route_client-reference-manifest.js +1 -1
  181. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route.js +1 -1
  182. package/.next/standalone/.next/server/app/api/projects/[uuid]/tasks/route_client-reference-manifest.js +1 -1
  183. package/.next/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  184. package/.next/standalone/.next/server/app/api/proposals/[uuid]/approve/route_client-reference-manifest.js +1 -1
  185. package/.next/standalone/.next/server/app/api/proposals/[uuid]/close/route_client-reference-manifest.js +1 -1
  186. package/.next/standalone/.next/server/app/api/proposals/[uuid]/reject/route_client-reference-manifest.js +1 -1
  187. package/.next/standalone/.next/server/app/api/proposals/[uuid]/revoke/route_client-reference-manifest.js +1 -1
  188. package/.next/standalone/.next/server/app/api/proposals/[uuid]/route_client-reference-manifest.js +1 -1
  189. package/.next/standalone/.next/server/app/api/references/[uuid]/route_client-reference-manifest.js +1 -1
  190. package/.next/standalone/.next/server/app/api/references/route_client-reference-manifest.js +1 -1
  191. package/.next/standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  192. package/.next/standalone/.next/server/app/api/session/route_client-reference-manifest.js +1 -1
  193. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route.js +1 -1
  194. package/.next/standalone/.next/server/app/api/sessions/[uuid]/route_client-reference-manifest.js +1 -1
  195. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route.js +1 -1
  196. package/.next/standalone/.next/server/app/api/tasks/[uuid]/claim/route_client-reference-manifest.js +1 -1
  197. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route.js +1 -1
  198. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route_client-reference-manifest.js +1 -1
  199. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route.js +1 -1
  200. package/.next/standalone/.next/server/app/api/tasks/[uuid]/dependencies/route_client-reference-manifest.js +1 -1
  201. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route.js +1 -1
  202. package/.next/standalone/.next/server/app/api/tasks/[uuid]/release/route_client-reference-manifest.js +1 -1
  203. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route.js +1 -1
  204. package/.next/standalone/.next/server/app/api/tasks/[uuid]/route_client-reference-manifest.js +1 -1
  205. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route.js +1 -1
  206. package/.next/standalone/.next/server/app/api/tasks/[uuid]/sessions/route_client-reference-manifest.js +1 -1
  207. package/.next/standalone/.next/server/app/index.html +2 -2
  208. package/.next/standalone/.next/server/app/index.rsc +2 -2
  209. package/.next/standalone/.next/server/app/login/admin/page_client-reference-manifest.js +1 -1
  210. package/.next/standalone/.next/server/app/login/admin.html +2 -2
  211. package/.next/standalone/.next/server/app/login/admin.rsc +2 -2
  212. package/.next/standalone/.next/server/app/login/callback/page_client-reference-manifest.js +1 -1
  213. package/.next/standalone/.next/server/app/login/callback.html +2 -2
  214. package/.next/standalone/.next/server/app/login/callback.rsc +2 -2
  215. package/.next/standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  216. package/.next/standalone/.next/server/app/login/pick-workspace/page_client-reference-manifest.js +1 -1
  217. package/.next/standalone/.next/server/app/login/pick-workspace.html +2 -2
  218. package/.next/standalone/.next/server/app/login/pick-workspace.rsc +2 -2
  219. package/.next/standalone/.next/server/app/login.html +2 -2
  220. package/.next/standalone/.next/server/app/login.rsc +2 -2
  221. package/.next/standalone/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  222. package/.next/standalone/.next/server/app/onboarding.html +2 -2
  223. package/.next/standalone/.next/server/app/onboarding.rsc +3 -3
  224. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  225. package/.next/standalone/.next/server/app/projects.html +2 -2
  226. package/.next/standalone/.next/server/app/projects.rsc +4 -4
  227. package/.next/standalone/.next/server/app/settings.html +2 -2
  228. package/.next/standalone/.next/server/app/settings.rsc +4 -4
  229. package/.next/standalone/.next/server/app-paths-manifest.json +49 -45
  230. package/.next/standalone/.next/server/chunks/1114.js +1 -1
  231. package/.next/standalone/.next/server/chunks/1173.js +1 -1
  232. package/.next/standalone/.next/server/chunks/1286.js +3 -2
  233. package/.next/standalone/.next/server/chunks/1318.js +1 -0
  234. package/.next/standalone/.next/server/chunks/1559.js +2 -2
  235. package/.next/standalone/.next/server/chunks/2463.js +1 -0
  236. package/.next/standalone/.next/server/chunks/2618.js +1 -1
  237. package/.next/standalone/.next/server/chunks/2961.js +1 -1
  238. package/.next/standalone/.next/server/chunks/3219.js +1 -1
  239. package/.next/standalone/.next/server/chunks/3407.js +1 -0
  240. package/.next/standalone/.next/server/chunks/3419.js +1 -1
  241. package/.next/standalone/.next/server/chunks/457.js +1 -0
  242. package/.next/standalone/.next/server/chunks/4827.js +1 -1
  243. package/.next/standalone/.next/server/chunks/{1343.js → 5201.js} +2 -2
  244. package/.next/standalone/.next/server/chunks/5245.js +1 -1
  245. package/.next/standalone/.next/server/chunks/595.js +1 -0
  246. package/.next/standalone/.next/server/chunks/6113.js +1 -1
  247. package/.next/standalone/.next/server/chunks/6207.js +1 -1
  248. package/.next/standalone/.next/server/chunks/6449.js +1 -0
  249. package/.next/standalone/.next/server/chunks/{8577.js → 6506.js} +3 -3
  250. package/.next/standalone/.next/server/chunks/6515.js +6 -0
  251. package/.next/standalone/.next/server/chunks/7364.js +1 -1
  252. package/.next/standalone/.next/server/chunks/7368.js +1 -1
  253. package/.next/standalone/.next/server/chunks/7530.js +1 -1
  254. package/.next/standalone/.next/server/chunks/7762.js +1 -1
  255. package/.next/standalone/.next/server/chunks/8454.js +1 -1
  256. package/.next/standalone/.next/server/chunks/920.js +1 -1
  257. package/.next/standalone/.next/server/chunks/9213.js +1 -1
  258. package/.next/standalone/.next/server/chunks/9378.js +1 -1
  259. package/.next/standalone/.next/server/chunks/951.js +1 -0
  260. package/.next/standalone/.next/server/instrumentation.js +1 -1
  261. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  262. package/.next/standalone/.next/server/middleware-manifest.json +1 -1
  263. package/.next/standalone/.next/server/pages/404.html +2 -2
  264. package/.next/standalone/.next/server/pages/500.html +1 -1
  265. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  266. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  267. package/.next/standalone/.next/static/XTQkt8fOQEK4mZkZTFQ_E/_buildManifest.js +1 -0
  268. package/.next/standalone/.next/static/chunks/11595.fbbfc784ff9ee566.js +1 -0
  269. package/.next/standalone/.next/static/chunks/13867-a95a4555fcb7b13b.js +1 -0
  270. package/.next/standalone/.next/static/chunks/24537-7d71bf10329d1be1.js +1 -0
  271. package/.next/standalone/.next/static/chunks/27030-19cd50b9d47b3be6.js +1 -0
  272. package/.next/standalone/.next/static/chunks/28680-f9c5e04f67982cb6.js +1 -0
  273. package/.next/standalone/.next/static/chunks/31308-bb4a97b3f39c22dd.js +1 -0
  274. package/.next/standalone/.next/static/chunks/32331-87ae9bc7517c7947.js +1 -0
  275. package/.next/standalone/.next/static/chunks/33277-9926b461045318b3.js +10 -0
  276. package/.next/standalone/.next/static/chunks/33456.b67f1146831e9f2b.js +1 -0
  277. package/.next/standalone/.next/static/chunks/37035-514bbb31cd13bda1.js +1 -0
  278. package/.next/standalone/.next/static/chunks/38526-7ffc4b7351c15bc4.js +1 -0
  279. package/.next/standalone/.next/static/chunks/{42605-029b5426175cdee9.js → 39479-5af3460208d8cc56.js} +1 -1
  280. package/.next/standalone/.next/static/chunks/4860.3491d748fdde968e.js +1 -0
  281. package/.next/standalone/.next/static/chunks/51603-7fa00971493ae223.js +1 -0
  282. package/.next/standalone/.next/static/chunks/73510-c338cef00ca3cfaf.js +1 -0
  283. package/.next/standalone/.next/static/chunks/78917-a297b76c6daa9f5d.js +1 -0
  284. package/.next/standalone/.next/static/chunks/84219-09970ab1b85c61f0.js +1 -0
  285. package/.next/standalone/.next/static/chunks/86155-c9b7c2c08d3fa80e.js +1 -0
  286. package/.next/standalone/.next/static/chunks/99373.827383575665ce2f.js +1 -0
  287. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-12d81eedb519461c.js +1 -0
  288. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-2af5f2f159c8e32b.js +1 -0
  289. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-d1c49cfe592deeb8.js +1 -0
  290. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-996b8a87b4b986f1.js +1 -0
  291. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-77771ef395e19922.js +1 -0
  292. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-c231207c3674aa54.js +1 -0
  293. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/graph/{page-2b13a2224c3b6d6d.js → page-c62c7d7cf9833060.js} +1 -1
  294. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-d098269dcaa06de7.js +1 -0
  295. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-7948aa8db4813091.js +1 -0
  296. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-8eea1e0cea60758f.js +1 -0
  297. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-658f31ac6a28ec82.js +1 -0
  298. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-6df01fa989cca27b.js +1 -0
  299. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-7fbf5bc58d3dd5b0.js +1 -0
  300. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  301. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-d1c49cfe592deeb8.js +1 -0
  302. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-d1c49cfe592deeb8.js +1 -0
  303. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-d1c49cfe592deeb8.js +1 -0
  304. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-d1c49cfe592deeb8.js +1 -0
  305. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  306. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-d1c49cfe592deeb8.js +1 -0
  307. package/.next/standalone/.next/static/chunks/app/api/agents/route-d1c49cfe592deeb8.js +1 -0
  308. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  309. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-d1c49cfe592deeb8.js +1 -0
  310. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-d1c49cfe592deeb8.js +1 -0
  311. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-d1c49cfe592deeb8.js +1 -0
  312. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-d1c49cfe592deeb8.js +1 -0
  313. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-d1c49cfe592deeb8.js +1 -0
  314. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-d1c49cfe592deeb8.js +1 -0
  315. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-d1c49cfe592deeb8.js +1 -0
  316. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-d1c49cfe592deeb8.js +1 -0
  317. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-d1c49cfe592deeb8.js +1 -0
  318. package/.next/standalone/.next/static/chunks/app/api/comments/route-d1c49cfe592deeb8.js +1 -0
  319. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-d1c49cfe592deeb8.js +1 -0
  320. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-d1c49cfe592deeb8.js +1 -0
  321. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-d1c49cfe592deeb8.js +1 -0
  322. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-d1c49cfe592deeb8.js +1 -0
  323. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-d1c49cfe592deeb8.js +1 -0
  324. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-d1c49cfe592deeb8.js +1 -0
  325. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-d1c49cfe592deeb8.js +1 -0
  326. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-d1c49cfe592deeb8.js +1 -0
  327. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-d1c49cfe592deeb8.js +1 -0
  328. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-d1c49cfe592deeb8.js +1 -0
  329. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-d1c49cfe592deeb8.js +1 -0
  330. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-d1c49cfe592deeb8.js +1 -0
  331. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-d1c49cfe592deeb8.js +1 -0
  332. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  333. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-d1c49cfe592deeb8.js +1 -0
  334. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-d1c49cfe592deeb8.js +1 -0
  335. package/.next/standalone/.next/static/chunks/app/api/events/route-d1c49cfe592deeb8.js +1 -0
  336. package/.next/standalone/.next/static/chunks/app/api/health/route-d1c49cfe592deeb8.js +1 -0
  337. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-d1c49cfe592deeb8.js +1 -0
  338. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-d1c49cfe592deeb8.js +1 -0
  339. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-d1c49cfe592deeb8.js +1 -0
  340. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-d1c49cfe592deeb8.js +1 -0
  341. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-d1c49cfe592deeb8.js +1 -0
  342. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  343. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/wake-preview/route-d1c49cfe592deeb8.js +1 -0
  344. package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-d1c49cfe592deeb8.js +1 -0
  345. package/.next/standalone/.next/static/chunks/app/api/mcp/route-d1c49cfe592deeb8.js +1 -0
  346. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-d1c49cfe592deeb8.js +1 -0
  347. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-d1c49cfe592deeb8.js +1 -0
  348. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-d1c49cfe592deeb8.js +1 -0
  349. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-d1c49cfe592deeb8.js +1 -0
  350. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-d1c49cfe592deeb8.js +1 -0
  351. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-d1c49cfe592deeb8.js +1 -0
  352. package/.next/standalone/.next/static/chunks/app/api/notifications/route-d1c49cfe592deeb8.js +1 -0
  353. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-d1c49cfe592deeb8.js +1 -0
  354. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-d1c49cfe592deeb8.js +1 -0
  355. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  356. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-d1c49cfe592deeb8.js +1 -0
  357. package/.next/standalone/.next/static/chunks/app/api/project-visits/pin/route-d1c49cfe592deeb8.js +1 -0
  358. package/.next/standalone/.next/static/chunks/app/api/project-visits/route-d1c49cfe592deeb8.js +1 -0
  359. package/.next/standalone/.next/static/chunks/app/api/project-visits/visit/route-d1c49cfe592deeb8.js +1 -0
  360. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-d1c49cfe592deeb8.js +1 -0
  361. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-d1c49cfe592deeb8.js +1 -0
  362. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-d1c49cfe592deeb8.js +1 -0
  363. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-d1c49cfe592deeb8.js +1 -0
  364. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-d1c49cfe592deeb8.js +1 -0
  365. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-d1c49cfe592deeb8.js +1 -0
  366. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-d1c49cfe592deeb8.js +1 -0
  367. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-d1c49cfe592deeb8.js +1 -0
  368. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-d1c49cfe592deeb8.js +1 -0
  369. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-d1c49cfe592deeb8.js +1 -0
  370. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  371. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-d1c49cfe592deeb8.js +1 -0
  372. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-d1c49cfe592deeb8.js +1 -0
  373. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-d1c49cfe592deeb8.js +1 -0
  374. package/.next/standalone/.next/static/chunks/app/api/projects/route-d1c49cfe592deeb8.js +1 -0
  375. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-d1c49cfe592deeb8.js +1 -0
  376. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-d1c49cfe592deeb8.js +1 -0
  377. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-d1c49cfe592deeb8.js +1 -0
  378. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-d1c49cfe592deeb8.js +1 -0
  379. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  380. package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  381. package/.next/standalone/.next/static/chunks/app/api/references/route-d1c49cfe592deeb8.js +1 -0
  382. package/.next/standalone/.next/static/chunks/app/api/search/route-d1c49cfe592deeb8.js +1 -0
  383. package/.next/standalone/.next/static/chunks/app/api/session/route-d1c49cfe592deeb8.js +1 -0
  384. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  385. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-d1c49cfe592deeb8.js +1 -0
  386. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-d1c49cfe592deeb8.js +1 -0
  387. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-d1c49cfe592deeb8.js +1 -0
  388. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-d1c49cfe592deeb8.js +1 -0
  389. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-d1c49cfe592deeb8.js +1 -0
  390. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-d1c49cfe592deeb8.js +1 -0
  391. package/.next/standalone/.next/static/chunks/app/onboarding/page-b178eb3215360d91.js +1 -0
  392. package/.next/standalone/.next/static/chunks/{webpack-9dda6192665a5c8d.js → webpack-567d9ffe31a0a5ee.js} +1 -1
  393. package/.next/standalone/.next/static/css/617133917710c831.css +1 -0
  394. package/.next/standalone/package.json +1 -1
  395. package/.next/standalone/public/chorus-plugin/.claude-plugin/plugin.json +1 -1
  396. package/.next/standalone/public/chorus-plugin/bin/on-post-verify-task.sh +1 -1
  397. package/.next/standalone/public/chorus-plugin/bin/on-session-start.sh +29 -5
  398. package/.next/standalone/public/chorus-plugin/skills/brainstorm/SKILL.md +1 -1
  399. package/.next/standalone/public/chorus-plugin/skills/chorus/SKILL.md +23 -2
  400. package/.next/standalone/public/chorus-plugin/skills/develop/SKILL.md +2 -2
  401. package/.next/standalone/public/chorus-plugin/skills/idea/SKILL.md +32 -1
  402. package/.next/standalone/public/chorus-plugin/skills/openspec-aware/SKILL.md +1 -1
  403. package/.next/standalone/public/chorus-plugin/skills/proposal/SKILL.md +1 -1
  404. package/.next/standalone/public/chorus-plugin/skills/quick-dev/SKILL.md +1 -1
  405. package/.next/standalone/public/chorus-plugin/skills/review/SKILL.md +1 -1
  406. package/.next/standalone/public/chorus-plugin/skills/yolo/SKILL.md +2 -2
  407. package/.next/standalone/public/install-kiro.sh +350 -0
  408. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-code-reviewer.json +10 -0
  409. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-proposal-reviewer.json +10 -0
  410. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus-task-reviewer.json +10 -0
  411. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.json +50 -0
  412. package/.next/standalone/public/kiro-plugin/.kiro/agents/chorus.md +62 -0
  413. package/.next/standalone/public/kiro-plugin/.kiro/settings/mcp.json +12 -0
  414. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-brainstorm/SKILL.md +158 -0
  415. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-develop/SKILL.md +421 -0
  416. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-idea/SKILL.md +332 -0
  417. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-openspec-aware/SKILL.md +434 -0
  418. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-proposal/SKILL.md +386 -0
  419. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-quick-dev/SKILL.md +193 -0
  420. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-review/SKILL.md +360 -0
  421. package/.next/standalone/public/kiro-plugin/.kiro/skills/chorus-yolo/SKILL.md +547 -0
  422. package/.next/standalone/public/kiro-plugin/.kiro/steering/chorus.md +404 -0
  423. package/.next/standalone/public/kiro-plugin/bin/chorus-api.sh +392 -0
  424. package/.next/standalone/public/kiro-plugin/bin/on-agent-spawn.sh +81 -0
  425. package/.next/standalone/public/kiro-plugin/bin/on-post-submit-for-verify.sh +68 -0
  426. package/.next/standalone/public/kiro-plugin/bin/on-post-submit-proposal.sh +76 -0
  427. package/.next/standalone/public/kiro-plugin/bin/on-post-verify-task.sh +119 -0
  428. package/.next/standalone/public/kiro-plugin/bin/on-stop.sh +45 -0
  429. package/.next/standalone/public/kiro-plugin/bin/test-syntax.sh +108 -0
  430. package/.next/standalone/public/skill/brainstorm-chorus/SKILL.md +1 -1
  431. package/.next/standalone/public/skill/chorus/SKILL.md +8 -2
  432. package/.next/standalone/public/skill/code-reviewer-chorus/SKILL.md +1 -1
  433. package/.next/standalone/public/skill/develop-chorus/SKILL.md +2 -2
  434. package/.next/standalone/public/skill/idea-chorus/SKILL.md +32 -1
  435. package/.next/standalone/public/skill/package.json +1 -1
  436. package/.next/standalone/public/skill/proposal-chorus/SKILL.md +1 -1
  437. package/.next/standalone/public/skill/proposal-reviewer-chorus/SKILL.md +1 -1
  438. package/.next/standalone/public/skill/quick-dev-chorus/SKILL.md +1 -1
  439. package/.next/standalone/public/skill/review-chorus/SKILL.md +1 -1
  440. package/.next/standalone/public/skill/task-reviewer-chorus/SKILL.md +1 -1
  441. package/.next/standalone/public/skill/yolo-chorus/SKILL.md +3 -3
  442. package/README.ja.md +14 -11
  443. package/README.ko.md +14 -11
  444. package/README.md +14 -11
  445. package/README.zh.md +14 -11
  446. package/chorus.mjs +4 -0
  447. package/cli/client-args.mjs +19 -8
  448. package/cli/codex-session-map.mjs +9 -79
  449. package/cli/daemon-agent.mjs +12 -7
  450. package/cli/daemon-config.mjs +2 -2
  451. package/cli/daemon-install-config.mjs +213 -0
  452. package/cli/daemon-service.mjs +12 -7
  453. package/cli/daemon.mjs +68 -9
  454. package/cli/kiro-session-map.mjs +49 -0
  455. package/cli/kiro-spawner.mjs +409 -0
  456. package/cli/kiro-transcript.mjs +262 -0
  457. package/cli/lineage.mjs +20 -0
  458. package/cli/prompts.mjs +19 -2
  459. package/cli/session-map.mjs +126 -0
  460. package/cli/spawner-select.mjs +7 -1
  461. package/cli/waker.mjs +18 -3
  462. package/package.json +1 -1
  463. package/prisma/migrations/20260714091007_add_daemon_execution_direct_idea/migration.sql +2 -0
  464. package/prisma/migrations/20260718062756_add_project_visit/migration.sql +29 -0
  465. package/prisma/schema.prisma +30 -0
  466. package/.next/standalone/.next/server/chunks/1388.js +0 -1
  467. package/.next/standalone/.next/server/chunks/2382.js +0 -1
  468. package/.next/standalone/.next/server/chunks/3373.js +0 -1
  469. package/.next/standalone/.next/server/chunks/4797.js +0 -1
  470. package/.next/standalone/.next/server/chunks/5011.js +0 -1
  471. package/.next/standalone/.next/server/chunks/5891.js +0 -1
  472. package/.next/standalone/.next/server/chunks/7131.js +0 -6
  473. package/.next/standalone/.next/static/chunks/11595.c932231a36943893.js +0 -1
  474. package/.next/standalone/.next/static/chunks/20081-a2bf5c9f24d5d589.js +0 -1
  475. package/.next/standalone/.next/static/chunks/24537-7988a894f20f8dae.js +0 -1
  476. package/.next/standalone/.next/static/chunks/2709-8f25369aeb5701a4.js +0 -1
  477. package/.next/standalone/.next/static/chunks/33456.f1c7b6bd0a6a65e4.js +0 -1
  478. package/.next/standalone/.next/static/chunks/43111-7a4e08dc82bb3022.js +0 -1
  479. package/.next/standalone/.next/static/chunks/4860.9313590c6c8c8f56.js +0 -1
  480. package/.next/standalone/.next/static/chunks/4939-ff22e2b42ad57f7f.js +0 -1
  481. package/.next/standalone/.next/static/chunks/55963-b2804d30cfbbe669.js +0 -1
  482. package/.next/standalone/.next/static/chunks/56608-92ab6704b364eb17.js +0 -1
  483. package/.next/standalone/.next/static/chunks/75252-29e0e25cb5a94f7f.js +0 -10
  484. package/.next/standalone/.next/static/chunks/80350-0d34e756f4aebdfc.js +0 -1
  485. package/.next/standalone/.next/static/chunks/84169-affac07755ace386.js +0 -1
  486. package/.next/standalone/.next/static/chunks/9178-182934f9127eed4e.js +0 -1
  487. package/.next/standalone/.next/static/chunks/93346-1d4cd71b8713a8a6.js +0 -1
  488. package/.next/standalone/.next/static/chunks/96752-ad15cc38599f12e2.js +0 -1
  489. package/.next/standalone/.next/static/chunks/99373.9756d8f45fee79a7.js +0 -1
  490. package/.next/standalone/.next/static/chunks/app/(dashboard)/layout-00ff2f6753bb4603.js +0 -1
  491. package/.next/standalone/.next/static/chunks/app/(dashboard)/project-groups/[uuid]/page-5824e6affe244f83.js +0 -1
  492. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/[ideaUuid]/page-9cc7c62013897acb.js +0 -1
  493. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/dashboard/page-21571e747883b956.js +0 -1
  494. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/[documentUuid]/page-f763dec99ba41f1c.js +0 -1
  495. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/documents/page-f13281a5806b6b4b.js +0 -1
  496. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/[proposalUuid]/page-6c577e521c61f718.js +0 -1
  497. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/proposals/page-078f21255acdf752.js +0 -1
  498. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/[taskUuid]/page-d37d5adabc60a16c.js +0 -1
  499. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/[uuid]/tasks/page-8212e69e806cab35.js +0 -1
  500. package/.next/standalone/.next/static/chunks/app/(dashboard)/projects/page-85665683f67eebc7.js +0 -1
  501. package/.next/standalone/.next/static/chunks/app/(dashboard)/settings/page-2ab18a236a0c7f7b.js +0 -1
  502. package/.next/standalone/.next/static/chunks/app/api/admin/companies/[uuid]/route-9cc7c62013897acb.js +0 -1
  503. package/.next/standalone/.next/static/chunks/app/api/admin/companies/route-9cc7c62013897acb.js +0 -1
  504. package/.next/standalone/.next/static/chunks/app/api/admin/login/route-9cc7c62013897acb.js +0 -1
  505. package/.next/standalone/.next/static/chunks/app/api/admin/session/route-9cc7c62013897acb.js +0 -1
  506. package/.next/standalone/.next/static/chunks/app/api/agent-connections/route-9cc7c62013897acb.js +0 -1
  507. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/route-9cc7c62013897acb.js +0 -1
  508. package/.next/standalone/.next/static/chunks/app/api/agents/[uuid]/sessions/route-9cc7c62013897acb.js +0 -1
  509. package/.next/standalone/.next/static/chunks/app/api/agents/route-9cc7c62013897acb.js +0 -1
  510. package/.next/standalone/.next/static/chunks/app/api/api-keys/[uuid]/route-9cc7c62013897acb.js +0 -1
  511. package/.next/standalone/.next/static/chunks/app/api/api-keys/route-9cc7c62013897acb.js +0 -1
  512. package/.next/standalone/.next/static/chunks/app/api/auth/callback/route-9cc7c62013897acb.js +0 -1
  513. package/.next/standalone/.next/static/chunks/app/api/auth/check-default/route-9cc7c62013897acb.js +0 -1
  514. package/.next/standalone/.next/static/chunks/app/api/auth/company-oidc/route-9cc7c62013897acb.js +0 -1
  515. package/.next/standalone/.next/static/chunks/app/api/auth/default-login/route-9cc7c62013897acb.js +0 -1
  516. package/.next/standalone/.next/static/chunks/app/api/auth/identify/route-9cc7c62013897acb.js +0 -1
  517. package/.next/standalone/.next/static/chunks/app/api/auth/logout/route-9cc7c62013897acb.js +0 -1
  518. package/.next/standalone/.next/static/chunks/app/api/auth/me/route-9cc7c62013897acb.js +0 -1
  519. package/.next/standalone/.next/static/chunks/app/api/auth/sync-token/route-9cc7c62013897acb.js +0 -1
  520. package/.next/standalone/.next/static/chunks/app/api/comments/route-9cc7c62013897acb.js +0 -1
  521. package/.next/standalone/.next/static/chunks/app/api/daemon/control/route-9cc7c62013897acb.js +0 -1
  522. package/.next/standalone/.next/static/chunks/app/api/daemon/execution-state/route-9cc7c62013897acb.js +0 -1
  523. package/.next/standalone/.next/static/chunks/app/api/daemon/executions/route-9cc7c62013897acb.js +0 -1
  524. package/.next/standalone/.next/static/chunks/app/api/daemon/pending-turns/route-9cc7c62013897acb.js +0 -1
  525. package/.next/standalone/.next/static/chunks/app/api/daemon/report-interrupt/route-9cc7c62013897acb.js +0 -1
  526. package/.next/standalone/.next/static/chunks/app/api/daemon/resume/route-9cc7c62013897acb.js +0 -1
  527. package/.next/standalone/.next/static/chunks/app/api/daemon/transcript/route-9cc7c62013897acb.js +0 -1
  528. package/.next/standalone/.next/static/chunks/app/api/daemon/turn-advance/route-9cc7c62013897acb.js +0 -1
  529. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/instruction/route-9cc7c62013897acb.js +0 -1
  530. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/repoint/route-9cc7c62013897acb.js +0 -1
  531. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/[sessionUuid]/route-9cc7c62013897acb.js +0 -1
  532. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/ad-hoc/route-9cc7c62013897acb.js +0 -1
  533. package/.next/standalone/.next/static/chunks/app/api/daemon-sessions/route-9cc7c62013897acb.js +0 -1
  534. package/.next/standalone/.next/static/chunks/app/api/documents/[uuid]/route-9cc7c62013897acb.js +0 -1
  535. package/.next/standalone/.next/static/chunks/app/api/entities/[type]/[uuid]/root-idea/route-9cc7c62013897acb.js +0 -1
  536. package/.next/standalone/.next/static/chunks/app/api/events/notifications/route-9cc7c62013897acb.js +0 -1
  537. package/.next/standalone/.next/static/chunks/app/api/events/route-9cc7c62013897acb.js +0 -1
  538. package/.next/standalone/.next/static/chunks/app/api/health/route-9cc7c62013897acb.js +0 -1
  539. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/claim/route-9cc7c62013897acb.js +0 -1
  540. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/preview/route-9cc7c62013897acb.js +0 -1
  541. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/move/route-9cc7c62013897acb.js +0 -1
  542. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/parent/route-9cc7c62013897acb.js +0 -1
  543. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/release/route-9cc7c62013897acb.js +0 -1
  544. package/.next/standalone/.next/static/chunks/app/api/ideas/[uuid]/route-9cc7c62013897acb.js +0 -1
  545. package/.next/standalone/.next/static/chunks/app/api/ideas/conversational/route-9cc7c62013897acb.js +0 -1
  546. package/.next/standalone/.next/static/chunks/app/api/mcp/route-9cc7c62013897acb.js +0 -1
  547. package/.next/standalone/.next/static/chunks/app/api/me/assignments/route-9cc7c62013897acb.js +0 -1
  548. package/.next/standalone/.next/static/chunks/app/api/mentionables/route-9cc7c62013897acb.js +0 -1
  549. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/archive/route-9cc7c62013897acb.js +0 -1
  550. package/.next/standalone/.next/static/chunks/app/api/notifications/[uuid]/read/route-9cc7c62013897acb.js +0 -1
  551. package/.next/standalone/.next/static/chunks/app/api/notifications/preferences/route-9cc7c62013897acb.js +0 -1
  552. package/.next/standalone/.next/static/chunks/app/api/notifications/read-all/route-9cc7c62013897acb.js +0 -1
  553. package/.next/standalone/.next/static/chunks/app/api/notifications/route-9cc7c62013897acb.js +0 -1
  554. package/.next/standalone/.next/static/chunks/app/api/notifications/unread-count/route-9cc7c62013897acb.js +0 -1
  555. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/dashboard/route-9cc7c62013897acb.js +0 -1
  556. package/.next/standalone/.next/static/chunks/app/api/project-groups/[uuid]/route-9cc7c62013897acb.js +0 -1
  557. package/.next/standalone/.next/static/chunks/app/api/project-groups/route-9cc7c62013897acb.js +0 -1
  558. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/activity/route-9cc7c62013897acb.js +0 -1
  559. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/available/route-9cc7c62013897acb.js +0 -1
  560. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/documents/route-9cc7c62013897acb.js +0 -1
  561. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/group/route-9cc7c62013897acb.js +0 -1
  562. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/route-9cc7c62013897acb.js +0 -1
  563. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/ideas/tracker/route-9cc7c62013897acb.js +0 -1
  564. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/[proposalUuid]/validate/route-9cc7c62013897acb.js +0 -1
  565. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/route-9cc7c62013897acb.js +0 -1
  566. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/proposals/summary/route-9cc7c62013897acb.js +0 -1
  567. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/resource-graph/route-9cc7c62013897acb.js +0 -1
  568. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/route-9cc7c62013897acb.js +0 -1
  569. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/stats/route-9cc7c62013897acb.js +0 -1
  570. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/dependencies/route-9cc7c62013897acb.js +0 -1
  571. package/.next/standalone/.next/static/chunks/app/api/projects/[uuid]/tasks/route-9cc7c62013897acb.js +0 -1
  572. package/.next/standalone/.next/static/chunks/app/api/projects/route-9cc7c62013897acb.js +0 -1
  573. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/approve/route-9cc7c62013897acb.js +0 -1
  574. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/close/route-9cc7c62013897acb.js +0 -1
  575. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/reject/route-9cc7c62013897acb.js +0 -1
  576. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/revoke/route-9cc7c62013897acb.js +0 -1
  577. package/.next/standalone/.next/static/chunks/app/api/proposals/[uuid]/route-9cc7c62013897acb.js +0 -1
  578. package/.next/standalone/.next/static/chunks/app/api/references/[uuid]/route-9cc7c62013897acb.js +0 -1
  579. package/.next/standalone/.next/static/chunks/app/api/references/route-9cc7c62013897acb.js +0 -1
  580. package/.next/standalone/.next/static/chunks/app/api/search/route-9cc7c62013897acb.js +0 -1
  581. package/.next/standalone/.next/static/chunks/app/api/session/route-9cc7c62013897acb.js +0 -1
  582. package/.next/standalone/.next/static/chunks/app/api/sessions/[uuid]/route-9cc7c62013897acb.js +0 -1
  583. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/claim/route-9cc7c62013897acb.js +0 -1
  584. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/[dependsOnUuid]/route-9cc7c62013897acb.js +0 -1
  585. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/dependencies/route-9cc7c62013897acb.js +0 -1
  586. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/release/route-9cc7c62013897acb.js +0 -1
  587. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/route-9cc7c62013897acb.js +0 -1
  588. package/.next/standalone/.next/static/chunks/app/api/tasks/[uuid]/sessions/route-9cc7c62013897acb.js +0 -1
  589. package/.next/standalone/.next/static/chunks/app/onboarding/page-455d693daccb65df.js +0 -1
  590. package/.next/standalone/.next/static/css/5f09fa856a63632f.css +0 -1
  591. package/.next/standalone/.next/static/sOwBl2wYTfQ3B0DrB18aB/_buildManifest.js +0 -1
  592. /package/.next/standalone/.next/static/{sOwBl2wYTfQ3B0DrB18aB → XTQkt8fOQEK4mZkZTFQ_E}/_ssgManifest.js +0 -0
package/cli/lineage.mjs CHANGED
@@ -146,6 +146,26 @@ export class LineageResolver {
146
146
  `[Chorus] lineage: non-string directIdeaUuid for ${entityType}:${entityUuid}`
147
147
  );
148
148
  }
149
+ // A non-null ROOT idea with a null/absent DIRECT idea is a lineage gap: the wake will
150
+ // anchor the execution on the entity (task/proposal), never on the idea conversation,
151
+ // so its run shows no running indicator / Interrupt on the idea chat — permanently, for
152
+ // this class of wake. The overwhelmingly likely cause is a Chorus server that predates
153
+ // the `directIdeaUuid` field on the /root-idea endpoint. Surface it as a visible WARN
154
+ // rather than folding it into the generic success `info` below (where it is
155
+ // indistinguishable from the legitimate "no idea ancestor" outcome, root=direct=null).
156
+ // Diagnostic ONLY — we do NOT substitute the root for the missing direct idea: for a
157
+ // DERIVED child idea root ≠ direct, so falling back to root would light the PARENT
158
+ // conversation and leave the child (which owns the woken session) idle. The correct fix
159
+ // is server-side; this warn points the operator straight at it.
160
+ if (root !== null && direct === null) {
161
+ this.logger.warn(
162
+ `[Chorus] lineage: ${entityType}:${entityUuid} resolved a root idea (${root}) but NO ` +
163
+ `directIdeaUuid — this wake will anchor on the entity, not the idea conversation, ` +
164
+ `so its run will not show a running indicator / Interrupt on the idea chat. Most ` +
165
+ `likely the Chorus server predates the directIdeaUuid field on /root-idea; upgrade ` +
166
+ `the server to restore child-wake → idea-conversation matching.`
167
+ );
168
+ }
149
169
  this.logger.info(
150
170
  `[Chorus] lineage: ${entityType}:${entityUuid} → root ${root ?? "none"}, direct ${direct ?? "none"}` +
151
171
  (typeof data.resolvedVia === "string" ? ` (${data.resolvedVia})` : "")
package/cli/prompts.mjs CHANGED
@@ -53,6 +53,8 @@ function mentionGuidance(n, entityType) {
53
53
  * `chorus_pm_start_elaboration` / `chorus_pm_validate_elaboration` tool names, because
54
54
  * this preamble rides EVERY wake including `elaboration_verified` (write-the-proposal),
55
55
  * whose contract is that it never mentions the answer-questions tools. Keep it that way.
56
+ * The reference-attachment nudge (strengthen-reference-association) names `references[]` /
57
+ * `chorus_add_reference` only — never the elaboration tools — so it is safe on every wake.
56
58
  *
57
59
  * Kept compact: it is paid on every wake, so each line costs tokens per wake.
58
60
  */
@@ -72,6 +74,11 @@ export const HEADLESS_PREAMBLE = [
72
74
  "silently — record the reason in a Chorus comment; when a skill offers to write a report,",
73
75
  "create it directly or skip it, never prompt for it.",
74
76
  "",
77
+ "When working an idea/proposal/task, if you come across an external link that is evidence",
78
+ "(a precedent issue/PR, a reference implementation, official docs, a paper/blog), attach it",
79
+ "via references — prefer the inline references[] param at creation time over a post-hoc",
80
+ "chorus_add_reference. Make it a reflex, not an afterthought.",
81
+ "",
75
82
  "After you post something that needs a human decision, END THE TURN and leave the work",
76
83
  "pending — do not poll or wait for a synchronous reply. The human's later comment or",
77
84
  "elaboration answer wakes a fresh turn that continues the work.",
@@ -181,12 +188,22 @@ function buildPromptBody(n) {
181
188
  `fix issues with chorus_pm_update_task_draft / chorus_pm_update_document_draft, then ` +
182
189
  `chorus_pm_validate_proposal and chorus_pm_submit_proposal to resubmit.\n${mentionGuidance(n, "proposal")}`
183
190
  );
184
- case "proposal_approved":
191
+ case "proposal_approved": {
192
+ // Surface the approver's note inline, symmetric with proposal_rejected — so the
193
+ // daemon knows the reviewer's opinion without a follow-up chorus_get_proposal
194
+ // fetch. The server bakes the note into n.message as "... approved. Note: <note>"
195
+ // (buildMessage in notification-listener.ts); an approve WITHOUT a note has no
196
+ // "Note: " marker, so reviewInfo stays empty and the prompt reads cleanly. This
197
+ // mirrors the OpenClaw plugin's proposal_approved handler (event-router.ts).
198
+ const reviewInfo = n.message?.includes("Note: ")
199
+ ? ` Review note: "${n.message.split("Note: ").pop()}".`
200
+ : "";
185
201
  return (
186
202
  `[Chorus] Proposal '${n.entityTitle}' was APPROVED (proposalUuid: ${n.entityUuid}, ` +
187
- `projectUuid: ${n.projectUuid}). Its documents and tasks have been created. Use ` +
203
+ `projectUuid: ${n.projectUuid}).${reviewInfo} Its documents and tasks have been created. Use ` +
188
204
  `chorus_get_unblocked_tasks (projectUuid: "${n.projectUuid}") to find tasks ready to start.\n${mentionGuidance(n, "proposal")}`
189
205
  );
206
+ }
190
207
  case "idea_claimed":
191
208
  return (
192
209
  `[Chorus] Idea '${n.entityTitle}' was assigned to you (ideaUuid: ${n.entityUuid}, ` +
@@ -0,0 +1,126 @@
1
+ // cli/session-map.mjs
2
+ // Generic daemon-local persistence of an `anchor → session-handle` map, shared by
3
+ // the backends whose CLI GENERATES its own conversation id (Codex thread_id, Kiro
4
+ // sessionId) rather than accepting a client-supplied one. To make such a wake
5
+ // resumable across daemon restarts we record the generated handle keyed by the
6
+ // Chorus session anchor (direct idea uuid, or the entity uuid for an ad-hoc
7
+ // session) and pass it back to the CLI's resume flag on the next wake.
8
+ //
9
+ // The store is a single JSON object `{ "<anchor>": "<handle>" }` at
10
+ // ~/.chorus/<filename> (same dir family as daemon.json). The anchor is a
11
+ // globally-unique Chorus uuid, so one flat file is safe across the daemon's
12
+ // multiple path-connections.
13
+ //
14
+ // CONTRACT: this is best-effort and MUST NEVER throw into the wake path. Any
15
+ // read/parse/write/rename failure degrades to "no mapping → next wake starts
16
+ // fresh" with a visible log (no-silent-errors). IO is injectable for tests.
17
+ //
18
+ // Backends wrap this factory with their own filename + semantic export names:
19
+ // codex-session-map.mjs → codex-sessions.json, getThreadId/setThreadId
20
+ // kiro-session-map.mjs → kiro-sessions.json, getSessionId/setSessionId
21
+
22
+ import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
23
+ import { homedir } from "node:os";
24
+ import { dirname, join } from "node:path";
25
+
26
+ const NOOP_LOGGER = { info() {}, warn() {}, error() {} };
27
+
28
+ /** A non-empty trimmed string, or null. */
29
+ function nonEmpty(value) {
30
+ return typeof value === "string" && value.trim().length > 0 ? value : null;
31
+ }
32
+
33
+ /**
34
+ * Read the whole map as a plain object. Missing / unreadable / malformed file →
35
+ * `{}` (never throws). A non-object JSON value (array / scalar) is also treated
36
+ * as empty.
37
+ * @param {string} path @param {(p: string) => string} read
38
+ * @param {{warn(m:string):void}} logger @param {string} logPrefix
39
+ * @returns {Record<string, unknown>}
40
+ */
41
+ function readMap(path, read, logger, logPrefix) {
42
+ let raw;
43
+ try {
44
+ raw = read(path);
45
+ } catch (err) {
46
+ // ENOENT is the normal "no map yet" case — silent. Other read errors warn.
47
+ if (!(err && err.code === "ENOENT")) {
48
+ logger.warn(`[Chorus] ${logPrefix}: read failed (${err}) — treating as empty`);
49
+ }
50
+ return {};
51
+ }
52
+ try {
53
+ const parsed = JSON.parse(raw);
54
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) return parsed;
55
+ logger.warn(`[Chorus] ${logPrefix}: file is not a JSON object — treating as empty`);
56
+ return {};
57
+ } catch (err) {
58
+ logger.warn(`[Chorus] ${logPrefix}: corrupt JSON (${err}) — treating as empty`);
59
+ return {};
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Build a backend-specific session map bound to a `~/.chorus/<filename>` store and
65
+ * a `logPrefix` for its warnings. Returns `{ mapPath, get, set }` — the get/set
66
+ * signatures and their injectable-IO deps are identical to the original
67
+ * codex-session-map so its tests pass unchanged.
68
+ *
69
+ * @param {{ filename: string, logPrefix: string }} config
70
+ * @returns {{
71
+ * mapPath: () => string,
72
+ * get: (anchor: string, deps?: object) => string | null,
73
+ * set: (anchor: string, handle: string, deps?: object) => void,
74
+ * }}
75
+ */
76
+ export function createSessionMap({ filename, logPrefix }) {
77
+ /** Absolute path to this backend's session-id map, alongside ~/.chorus/daemon.json. */
78
+ const mapPath = () => join(homedir(), ".chorus", filename);
79
+
80
+ /**
81
+ * Look up the handle recorded for `anchor`, or null when there is none (no file,
82
+ * no entry, or a non-string entry). Never throws.
83
+ */
84
+ const get = (anchor, deps = {}) => {
85
+ const a = nonEmpty(anchor);
86
+ if (!a) return null;
87
+ const path = deps.path ?? mapPath();
88
+ const read = deps.read ?? ((p) => readFileSync(p, "utf8"));
89
+ const logger = deps.logger ?? NOOP_LOGGER;
90
+ const map = readMap(path, read, logger, logPrefix);
91
+ return nonEmpty(map[a]);
92
+ };
93
+
94
+ /**
95
+ * Record `anchor → handle`, preserving every other entry. Atomic (temp file +
96
+ * rename). Best-effort: a blank anchor/handle is ignored (no write), and any IO
97
+ * failure is logged and swallowed — it never throws into the wake path.
98
+ */
99
+ const set = (anchor, handle, deps = {}) => {
100
+ const a = nonEmpty(anchor);
101
+ const h = nonEmpty(handle);
102
+ if (!a || !h) return; // nothing meaningful to persist
103
+ const path = deps.path ?? mapPath();
104
+ const read = deps.read ?? ((p) => readFileSync(p, "utf8"));
105
+ const write = deps.write ?? writeFileSync;
106
+ const mkdir = deps.mkdir ?? mkdirSync;
107
+ const rename = deps.rename ?? renameSync;
108
+ const logger = deps.logger ?? NOOP_LOGGER;
109
+
110
+ try {
111
+ const map = readMap(path, read, logger, logPrefix);
112
+ map[a] = h;
113
+ mkdir(dirname(path), { recursive: true });
114
+ // Atomic write: temp file (0600) in the same dir, then rename over target,
115
+ // so a crash mid-write never truncates the live map.
116
+ const tmp = `${path}.tmp`;
117
+ write(tmp, JSON.stringify(map, null, 2) + "\n", { mode: 0o600 });
118
+ rename(tmp, path);
119
+ } catch (err) {
120
+ // Best-effort: a failed persist just means the next wake starts fresh.
121
+ logger.warn(`[Chorus] ${logPrefix}: failed to persist ${a}→${h} (${err}) — wake will start fresh next time`);
122
+ }
123
+ };
124
+
125
+ return { mapPath, get, set };
126
+ }
@@ -11,10 +11,11 @@
11
11
 
12
12
  import { ClaudeSpawner } from "./claude-spawner.mjs";
13
13
  import { CodexSpawner } from "./codex-spawner.mjs";
14
+ import { KiroSpawner } from "./kiro-spawner.mjs";
14
15
 
15
16
  /**
16
17
  * Construct the spawner backend for `agentType`.
17
- * @param {string} agentType "claude-code" | "codex" (already validated upstream).
18
+ * @param {string} agentType "claude-code" | "codex" | "kiro" (already validated upstream).
18
19
  * @param {{ logger?: any, permissionMode?: "chorus"|"yolo", creds?: { url: string, apiKey: string } }} [opts]
19
20
  * @returns {import("./codex-spawner.mjs").Spawner}
20
21
  */
@@ -23,6 +24,11 @@ export function selectSpawner(agentType, opts = {}) {
23
24
  if (agentType === "codex") {
24
25
  return new CodexSpawner({ logger, permissionMode, creds });
25
26
  }
27
+ if (agentType === "kiro") {
28
+ // Kiro follows the Codex model — MCP from the user's plugin config, daemon key
29
+ // via env — so it takes the same { logger, permissionMode, creds } shape.
30
+ return new KiroSpawner({ logger, permissionMode, creds });
31
+ }
26
32
  // Default / "claude-code": construction byte-identical to the prior daemon
27
33
  // (ClaudeSpawner takes only { logger, permissionMode } — creds are not used by
28
34
  // the Claude backend, which gets its key via the --mcp-config file).
package/cli/waker.mjs CHANGED
@@ -121,7 +121,12 @@ export class Waker {
121
121
  // control handler can target it for an interrupt. `child` is null while queued.
122
122
  // buildExecutionSnapshot() maps ONLY the serializable fields and NEVER emits
123
123
  // `child` — the handle stays daemon-local and never leaks onto the wire.
124
- /** @type {Map<string, { entityType: string, entityUuid: string, rootIdeaUuid: string|null, status: "running"|"queued", startedAt: string|null, child: import("node:child_process").ChildProcess|null }>} */
124
+ // The entry also carries the `directIdeaUuid` the waker ALREADY resolved (the
125
+ // entity's directly-attached idea — the same value used as the session anchor)
126
+ // so the UI can match a conversation's execution by the DIRECT idea rather than
127
+ // the root — surfacing a child idea's wake on the child conversation, not its
128
+ // parent.
129
+ /** @type {Map<string, { entityType: string, entityUuid: string, rootIdeaUuid: string|null, directIdeaUuid: string|null, status: "running"|"queued", startedAt: string|null, child: import("node:child_process").ChildProcess|null }>} */
125
130
  this.executions = new Map();
126
131
  }
127
132
 
@@ -231,13 +236,14 @@ export class Waker {
231
236
  * resource (running or queued), carrying entityType/entityUuid, the reused
232
237
  * rootIdeaUuid, and the daemon-side status/startedAt. Returns a fresh array each
233
238
  * call so the caller can't mutate internal state. Never throws.
234
- * @returns {Array<{ entityType: string, entityUuid: string, rootIdeaUuid: string|null, status: "running"|"queued", startedAt: string|null }>}
239
+ * @returns {Array<{ entityType: string, entityUuid: string, rootIdeaUuid: string|null, directIdeaUuid: string|null, status: "running"|"queued", startedAt: string|null }>}
235
240
  */
236
241
  buildExecutionSnapshot() {
237
242
  return [...this.executions.values()].map((e) => ({
238
243
  entityType: e.entityType,
239
244
  entityUuid: e.entityUuid,
240
245
  rootIdeaUuid: e.rootIdeaUuid,
246
+ directIdeaUuid: e.directIdeaUuid,
241
247
  status: e.status,
242
248
  startedAt: e.startedAt,
243
249
  }));
@@ -253,13 +259,20 @@ export class Waker {
253
259
  * task/idea/proposal/document set) is ignored. Never throws.
254
260
  * @param {{ entityType?: string, entityUuid?: string }} notification
255
261
  * @param {string} key The serialization key from keyFor (idea:<direct> | entity:…).
256
- * @param {{ rootIdeaUuid?: string|null }} [attribution] Server-resolved root idea.
262
+ * @param {{ rootIdeaUuid?: string|null, directIdeaUuid?: string|null }} [attribution]
263
+ * Server-resolved ids: `rootIdeaUuid` → execution snapshot grouping; `directIdeaUuid`
264
+ * → the session anchor the UI matches a conversation's execution by. Both threaded
265
+ * from `attribution`, NEVER sliced from `key`.
257
266
  */
258
267
  markQueued(notification, key, attribution) {
259
268
  const entity = this.#entityOf(notification);
260
269
  if (!entity) return;
261
270
  const execKey = this.#execKey(entity.entityType, entity.entityUuid);
262
271
  const rootIdeaUuid = attribution?.rootIdeaUuid ?? null;
272
+ // The DIRECT idea (session anchor) the UI matches a conversation's execution by
273
+ // — carried from the SAME server-resolved attribution as rootIdeaUuid, never
274
+ // sliced from the key.
275
+ const directIdeaUuid = attribution?.directIdeaUuid ?? null;
263
276
  const existing = this.executions.get(execKey);
264
277
  // Don't downgrade a running resource to queued if a duplicate dispatch
265
278
  // arrives while it's mid-wake; only (re)mark queued when not already running.
@@ -268,6 +281,7 @@ export class Waker {
268
281
  entityType: entity.entityType,
269
282
  entityUuid: entity.entityUuid,
270
283
  rootIdeaUuid,
284
+ directIdeaUuid,
271
285
  status: "queued",
272
286
  startedAt: existing?.startedAt ?? null,
273
287
  // Queued entries hold no live child yet — only the running entry does (子3).
@@ -346,6 +360,7 @@ export class Waker {
346
360
  entityType: entity.entityType,
347
361
  entityUuid: entity.entityUuid,
348
362
  rootIdeaUuid,
363
+ directIdeaUuid,
349
364
  status: "running",
350
365
  startedAt: new Date().toISOString(),
351
366
  child: null,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chorus-aidlc/chorus",
3
- "version": "0.14.0",
3
+ "version": "0.14.2",
4
4
  "description": "The Agent Harness for AI-Human Collaboration — session lifecycle, task state, sub-agent orchestration, observability, and failure recovery",
5
5
  "homepage": "https://github.com/Chorus-AIDLC/Chorus",
6
6
  "repository": {
@@ -0,0 +1,2 @@
1
+ -- AlterTable
2
+ ALTER TABLE "DaemonExecution" ADD COLUMN "directIdeaUuid" TEXT;
@@ -0,0 +1,29 @@
1
+ -- CreateTable
2
+ CREATE TABLE "ProjectVisit" (
3
+ "id" SERIAL NOT NULL,
4
+ "uuid" TEXT NOT NULL,
5
+ "companyUuid" TEXT NOT NULL,
6
+ "userUuid" TEXT NOT NULL,
7
+ "projectUuid" TEXT NOT NULL,
8
+ "lastVisitedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
9
+ "pinnedAt" TIMESTAMP(3),
10
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
11
+ "updatedAt" TIMESTAMP(3) NOT NULL,
12
+
13
+ CONSTRAINT "ProjectVisit_pkey" PRIMARY KEY ("id")
14
+ );
15
+
16
+ -- CreateIndex
17
+ CREATE UNIQUE INDEX "ProjectVisit_uuid_key" ON "ProjectVisit"("uuid");
18
+
19
+ -- CreateIndex
20
+ CREATE INDEX "ProjectVisit_companyUuid_idx" ON "ProjectVisit"("companyUuid");
21
+
22
+ -- CreateIndex
23
+ CREATE INDEX "ProjectVisit_userUuid_pinnedAt_idx" ON "ProjectVisit"("userUuid", "pinnedAt");
24
+
25
+ -- CreateIndex
26
+ CREATE INDEX "ProjectVisit_userUuid_lastVisitedAt_idx" ON "ProjectVisit"("userUuid", "lastVisitedAt");
27
+
28
+ -- CreateIndex
29
+ CREATE UNIQUE INDEX "ProjectVisit_userUuid_projectUuid_key" ON "ProjectVisit"("userUuid", "projectUuid");
@@ -546,6 +546,14 @@ model DaemonExecution {
546
546
  // → Idea.uuid; the root-idea lineage anchor for grouping/labeling. Null when
547
547
  // the wake has no idea ancestor (e.g. a standalone/quick task).
548
548
  rootIdeaUuid String?
549
+ // → Idea.uuid; the DIRECT idea (the entity's directly-attached idea — the same
550
+ // value the daemon anchors its Claude session on). For a top-level idea this
551
+ // equals rootIdeaUuid; for a derived (child) idea it is the child while
552
+ // rootIdeaUuid is the topmost ancestor. The chat UI matches a conversation's
553
+ // running/interruptible execution by this DIRECT idea, so a child idea's wake
554
+ // surfaces on the child conversation, not its parent. Null when the wake has
555
+ // no idea ancestor. Weak ref, no DB FK.
556
+ directIdeaUuid String?
549
557
 
550
558
  // running | queued | ended | interrupted
551
559
  // `interrupted` is a STICKY status: when a wake's subprocess is stopped (by a
@@ -722,6 +730,28 @@ model NotificationPreference {
722
730
  @@index([companyUuid])
723
731
  }
724
732
 
733
+ // Per-user project quick-access state: recency + pin. One row per (user, project).
734
+ // User-only surface (agents never render the sidebar), so keyed on userUuid rather
735
+ // than the polymorphic ownerType/ownerUuid pair NotificationPreference uses.
736
+ // Mirrors the NotificationPreference convention: scalar companyUuid only, no
737
+ // `company Company @relation` field (relationMode = "prisma", app-level scoping).
738
+ model ProjectVisit {
739
+ id Int @id @default(autoincrement())
740
+ uuid String @unique @default(uuid())
741
+ companyUuid String
742
+ userUuid String
743
+ projectUuid String
744
+ lastVisitedAt DateTime @default(now()) // updated on every project-page entry
745
+ pinnedAt DateTime? // non-null = pinned; ordering key for the pinned list
746
+ createdAt DateTime @default(now())
747
+ updatedAt DateTime @updatedAt
748
+
749
+ @@unique([userUuid, projectUuid])
750
+ @@index([companyUuid])
751
+ @@index([userUuid, pinnedAt])
752
+ @@index([userUuid, lastVisitedAt])
753
+ }
754
+
725
755
  // Mention (tracks @mentions in comments, tasks, ideas)
726
756
  model Mention {
727
757
  id Int @id @default(autoincrement())
@@ -1 +0,0 @@
1
- exports.id=1388,exports.ids=[1388],exports.modules={5514:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{y:()=>C});var e=c(10837),f=c(21968),g=c(9222),h=c(44787),i=c(22727),j=c(24383),k=c(55775),l=c(27936),m=c(68797),n=c(24879),o=c(31009),p=c(45148),q=c(35198),r=c(49599),s=c(42424),t=c(11568),u=c(36566),v=c(29227),w=c(24181),x=c(54722),y=c(86104),z=c(25493),A=c(76172),B=a([m,y]);[m,y]=B.then?(await B)():B;let D={open:"bg-[#FFF3E0] dark:bg-[#3a2a12] text-[#E65100] dark:text-[#F0A050]",assigned:"bg-[#E3F2FD] dark:bg-[#13253a] text-[#1976D2] dark:text-[#5AA9F0]",in_progress:"bg-[#E8F5E9] dark:bg-[#14281a] text-[#5A9E6F] dark:text-[#6FD19A]",to_verify:"bg-[#F3E5F5] dark:bg-[#281630] text-[#7B1FA2] dark:text-[#C98FE0]",done:"bg-[#E0F2F1] dark:bg-[#12292a] text-[#00796B] dark:text-[#4FD1C0]",closed:"bg-[#F5F5F5] dark:bg-[#1e1e20] text-[#9A9A9A]"},E={open:"open",assigned:"assigned",in_progress:"inProgress",to_verify:"toVerify",done:"done",closed:"closed"},F={in_progress:"bg-[#FFF3E0] dark:bg-[#3a2a12] text-[#E65100] dark:text-[#F0A050]",assigned:"bg-[#E8F5E9] dark:bg-[#14281a] text-[#2E7D32] dark:text-[#5FD07E]",open:"bg-[#F5F5F5] dark:bg-[#1e1e20] text-muted-foreground",to_verify:"bg-[#E3F2FD] dark:bg-[#13253a] text-[#1565C0] dark:text-[#5AA9F0]"},G=[{id:"todo",labelKey:"todo",statuses:["open","assigned"]},{id:"in_progress",labelKey:"inProgress",statuses:["in_progress"]},{id:"to_verify",labelKey:"toVerify",statuses:["to_verify"]},{id:"done",labelKey:"done",statuses:["done","closed"]}];function C({projectUuid:a,initialTasks:b,currentUserUuid:c,selectedTaskUuid:d,onTaskSelect:B,onPanelClose:C,proposalUuidFilter:H}){let I=(0,g.c)(),[J,K]=(0,f.useState)(b),[L,M]=(0,f.useState)({}),[N,O]=(0,f.useState)(!1),[P,Q]=(0,f.useState)(null),[R,S]=(0,f.useState)([]),[T,U]=(0,f.useState)(!1),[V,W]=(0,f.useState)([]),[X,Y]=(0,f.useState)(!1),[Z,$]=(0,f.useState)(!1),_=(0,f.useCallback)(async()=>{let b=await (0,u.p)(a);if(b.success){let a=H?b.data.filter(a=>a.proposalUuid&&H.has(a.proposalUuid)):b.data;K(a);let c=await (0,z.h)(a.map(a=>a.uuid));c.success&&c.data&&M(c.data)}},[a,H]);(0,A.eV)("task",_),(0,f.useRef)(H);let aa=(0,f.useMemo)(()=>d?J.find(a=>a.uuid===d)??null:null,[d,J]),ab=a=>J.filter(b=>a.includes(b.status)),ac=a=>ab(a).reduce((a,b)=>a+(b.storyPoints||0),0),ad=async b=>{let c;$(!1);let{destination:d,source:e,draggableId:f}=b;if(!d||d.droppableId===e.droppableId&&d.index===e.index)return;let g=d.droppableId;e.droppableId;let h=J.find(a=>a.uuid===f);if(!h)return;if(G.find(a=>a.id===g),"todo"===g)c="assigned"===h.status?"assigned":"open";else if("in_progress"===g)c="in_progress";else if("to_verify"===g)c="to_verify";else{if("done"!==g)return;c="to_verify"===h.status?"done":"to_verify"}K(a=>a.map(a=>a.uuid===f?{...a,status:c}:a));let i=await (0,v.y)(f,g,a);if(i.success)_();else{if("blocked"in i&&i.blocked&&"blockers"in i){K(a=>a.map(a=>a.uuid===f?{...a,status:h.status}:a)),Q(h),S(i.blockers),O(!0);return}if(K(a=>a.map(a=>a.uuid===f?{...a,status:h.status}:a)),"gateBlocked"in i&&i.gateBlocked){let a="unresolvedCriteria"in i&&Array.isArray(i.unresolvedCriteria)?i.unresolvedCriteria:[];W(a),U(!0)}}},ae=async()=>{if(P){Y(!0);try{let a=await (0,w.H)(P.uuid,"in_progress");a.success?(O(!1),Q(null),S([]),_()):x.q.error("Failed to force move task:",a.error)}finally{Y(!1)}}},af=()=>{O(!1),Q(null),S([])};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(h.JY,{onDragStart:()=>{$(!0)},onDragEnd:ad,children:(0,e.jsx)(n.o,{children:(0,e.jsx)("div",{className:"flex flex-1 gap-4 overflow-x-auto pb-4",children:G.map(a=>{let b=ab(a.statuses);return(0,e.jsxs)("div",{className:"flex w-[300px] flex-shrink-0 flex-col rounded-xl bg-secondary p-4",children:[(0,e.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("h3",{className:"font-medium text-foreground",children:I(`status.${a.labelKey}`)}),(0,e.jsx)("span",{className:"rounded-full bg-card px-2 py-0.5 text-xs font-medium text-muted-foreground",children:b.length})]}),ac(a.statuses)>0&&(0,e.jsxs)("span",{className:"flex items-center gap-1 text-xs text-[#9A9A9A]",children:[(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"h-3 w-3",children:[(0,e.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,e.jsx)("polyline",{points:"12 6 12 12 16 14"})]}),ac(a.statuses),"h"]})]}),(0,e.jsx)(h.gL,{droppableId:a.id,children:(a,c)=>(0,e.jsxs)("div",{ref:a.innerRef,...a.droppableProps,className:`flex-1 space-y-3 overflow-y-auto min-h-[100px] rounded-lg pt-3 pr-3 transition-colors ${c.isDraggingOver?"bg-border":""}`,children:[0!==b.length||c.isDraggingOver?b.map((a,b)=>{let c=!!a.dependsOn&&0!==a.dependsOn.length&&a.dependsOn.some(a=>"done"!==a.status&&"closed"!==a.status),d=(c?!a.dependsOn?[]:a.dependsOn.filter(a=>"done"!==a.status&&"closed"!==a.status):[]).map(a=>a.title).join(", ");return(0,e.jsx)(h.sx,{draggableId:a.uuid,index:b,children:(b,f)=>(0,e.jsx)("div",{ref:b.innerRef,...b.draggableProps,...b.dragHandleProps,onClick:()=>{f.isDragging||B(a.uuid)},style:b.draggableProps.style,children:(0,e.jsxs)(o.P.div,{className:"relative",layoutId:Z?void 0:`task-card-${a.uuid}`,transition:p.Yv.spring,children:[L[a.uuid]>0&&(0,e.jsx)("div",{className:"absolute -top-3 -right-3 z-10 flex h-11 w-11 items-center justify-center rounded-full border-2 border-green-400 bg-card shadow-sm",children:(0,e.jsx)("img",{src:"/typing-animation.gif",alt:"",className:"h-8 w-8"})}),(0,e.jsx)(i.D,{entityType:"task",entityUuid:a.uuid,children:(0,e.jsxs)(q.Zp,{className:`cursor-pointer p-4 transition-all ${c?"border-dashed border-[#D1D1D1] dark:border-[#3a3a40] opacity-60":"border-border hover:border-primary"} bg-card hover:shadow-sm ${f.isDragging?"shadow-lg rotate-2":""}`,children:[(0,e.jsxs)("div",{className:"mb-2 flex items-start justify-between",children:[(0,e.jsx)(r.E,{className:D[a.status]||"",children:I(`status.${E[a.status]||a.status}`)}),(0,e.jsx)("div",{className:"flex items-center gap-1.5",children:a.storyPoints&&(0,e.jsxs)("span",{className:"flex items-center gap-1 rounded bg-[#FFF3E0] dark:bg-[#3a2a12] px-2 py-0.5 text-xs font-medium text-[#E65100] dark:text-[#F0A050]",children:[(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"h-3 w-3",children:[(0,e.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,e.jsx)("polyline",{points:"12 6 12 12 16 14"})]}),a.storyPoints,"h"]})})]}),(0,e.jsx)("h4",{className:"mb-1 font-medium text-foreground",children:a.title}),a.description&&(0,e.jsx)("p",{className:"mb-2 line-clamp-2 text-sm text-muted-foreground",children:a.description}),c&&(0,e.jsxs)("div",{className:"mb-2 flex items-center gap-1.5 rounded-md bg-[#FFF3E0] dark:bg-[#3a2a12] px-2 py-1",children:[(0,e.jsx)(j.A,{className:"h-3 w-3 shrink-0 text-[#E65100] dark:text-[#F0A050]"}),(0,e.jsx)("span",{className:"text-[9px] font-medium leading-tight text-[#E65100] dark:text-[#F0A050] line-clamp-1",children:I("tasks.blockedBy",{tasks:d})})]}),(0,e.jsxs)("div",{className:"flex items-start justify-between gap-2 text-xs text-[#9A9A9A]",children:[a.assignee?(0,e.jsxs)("span",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,e.jsxs)("span",{className:"flex items-center gap-1",children:[(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"h-3 w-3 shrink-0",children:[(0,e.jsx)("path",{d:"M12 8V4H8"}),(0,e.jsx)("rect",{width:"16",height:"12",x:"4",y:"8",rx:"2"})]}),(0,e.jsx)("span",{className:"truncate",children:a.assignee.name})]}),"agent_instance"===a.assignee.type&&a.assignee.instance&&(0,e.jsx)(m.jQ,{cwd:a.assignee.instance.cwd,host:a.assignee.instance.host,showHost:!1,className:"pl-4"})]}):"open"===a.status?(0,e.jsx)("span",{className:"text-primary",children:I("common.assign")}):(0,e.jsx)("span",{children:I("common.unassigned")}),(0,e.jsxs)("span",{className:"flex items-center gap-1",children:[L[a.uuid]>0&&(0,e.jsxs)(r.E,{variant:"outline",className:"h-4 gap-1 border-green-300 dark:border-[#2a4a34] px-1.5 text-[10px] text-green-700 dark:text-[#6FD19A]",children:[(0,e.jsx)("span",{className:"inline-block h-1.5 w-1.5 rounded-full bg-green-500"}),I("sessions.workerCount",{count:L[a.uuid]})]}),a.acceptanceSummary&&a.acceptanceSummary.total>0&&(()=>{let b=a.acceptanceSummary,c="to_verify"===a.status,d=b.requiredPassed===b.required&&b.required>0,f=b.requiredFailed>0,g="bg-secondary text-muted-foreground";return c&&(g=d?"bg-green-50 text-green-700 dark:bg-[#14281a] dark:text-[#6FD19A]":f?"bg-red-50 text-[#C4574C] dark:bg-[#331619] dark:text-[#F0897E]":"bg-amber-50 text-[#D97706] dark:bg-[#332a12] dark:text-[#E0B44E]"),(0,e.jsxs)(r.E,{className:`h-4 gap-1 border-0 px-1.5 text-[9px] ${g}`,children:[(0,e.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"h-2.5 w-2.5",children:[(0,e.jsx)("path",{d:"M9 11l3 3L22 4"}),(0,e.jsx)("path",{d:"M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"})]}),b.passed,"/",b.total]})})()]})]})]})})]})})},a.uuid)}):(0,e.jsx)("div",{className:"flex h-24 items-center justify-center rounded-lg border-2 border-dashed border-border text-sm text-[#9A9A9A]",children:I("tasks.noTasks")}),a.placeholder]})})]},a.id)})})})}),aa&&(0,e.jsx)(y.v,{task:aa,projectUuid:a,currentUserUuid:c,onClose:C}),(0,e.jsx)(t.lG,{open:N,onOpenChange:a=>{a||af()},children:(0,e.jsxs)(t.Cf,{className:"max-w-md rounded-2xl",children:[(0,e.jsxs)(t.c7,{children:[(0,e.jsxs)(t.L3,{className:"flex items-center gap-2",children:[(0,e.jsx)(k.A,{className:"h-5 w-5 text-[#E65100] dark:text-[#F0A050]"}),I("tasks.dependencyBlocked")]}),(0,e.jsx)(t.rr,{children:I("tasks.dependencyBlockedDescription")})]}),(0,e.jsxs)("div",{className:"rounded-lg bg-background p-3",children:[(0,e.jsx)("p",{className:"mb-2 text-xs font-medium text-muted-foreground",children:I("tasks.blockerList")}),(0,e.jsx)("div",{className:"space-y-2",children:R.map(a=>(0,e.jsxs)("div",{className:"flex items-center justify-between rounded-lg border border-border bg-card p-3",children:[(0,e.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,e.jsx)("p",{className:"truncate text-sm font-medium text-foreground",children:a.title}),(0,e.jsxs)("div",{className:"mt-1 flex items-center gap-2",children:[a.assignee&&(0,e.jsx)("span",{className:"text-xs text-muted-foreground",children:a.assignee.name}),a.sessionCheckin&&(0,e.jsxs)("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[(0,e.jsx)(l.A,{className:"h-3 w-3"}),a.sessionCheckin.sessionName]})]})]}),(0,e.jsx)(r.E,{className:`shrink-0 ${F[a.status]||"bg-[#F5F5F5] dark:bg-[#1e1e20] text-muted-foreground"}`,children:I(`status.${E[a.status]||a.status}`)})]},a.uuid))})]}),(0,e.jsxs)(t.Es,{className:"gap-2 sm:gap-0",children:[(0,e.jsx)(s.$,{variant:"outline",onClick:af,children:I("common.cancel")}),(0,e.jsx)(s.$,{className:"bg-[#E65100] hover:bg-[#BF4400] text-white",onClick:ae,disabled:X,children:X?I("common.processing"):I("tasks.forceMove")})]})]})}),(0,e.jsx)(t.lG,{open:T,onOpenChange:U,children:(0,e.jsxs)(t.Cf,{className:"max-w-[520px] rounded-2xl p-0 gap-0",children:[(0,e.jsxs)(t.c7,{className:"px-6 pt-6 pb-4",children:[(0,e.jsxs)(t.L3,{className:"flex items-center gap-2.5",children:[(0,e.jsx)(k.A,{className:"h-5 w-5 text-[#C4574C] dark:text-[#F0897E]"}),I("acceptanceCriteria.title")]}),(0,e.jsx)(t.rr,{className:"text-[13px] leading-relaxed text-muted-foreground",children:I("acceptanceCriteria.gateBlocked",{count:V.filter(a=>a.required&&"passed"!==a.status).length})})]}),(0,e.jsxs)("div",{className:"px-6 pb-4 space-y-3",children:[(0,e.jsx)("p",{className:"text-[11px] font-semibold text-[#9A9A9A] uppercase tracking-wide",children:I("acceptanceCriteria.title")}),V.map(a=>(0,e.jsxs)("div",{className:`rounded-lg border p-3 space-y-2 ${"failed"===a.status?"border-red-200 dark:border-[#5a2a2e] bg-card":"border-border bg-card"}`,children:[(0,e.jsxs)("div",{className:"flex items-center gap-2",children:[(0,e.jsx)("div",{className:`h-2 w-2 rounded-full shrink-0 ${"failed"===a.status?"bg-[#C4574C]":"bg-[#F59E0B]"}`}),(0,e.jsx)("span",{className:"text-xs font-semibold text-foreground",children:a.description})]}),(0,e.jsxs)("div",{className:"flex items-center gap-2 pl-4",children:[(0,e.jsx)(r.E,{className:`text-[10px] border-0 ${"failed"===a.status?"bg-red-50 text-[#C4574C] dark:bg-[#331619] dark:text-[#F0897E]":"bg-amber-50 text-[#D97706] dark:bg-[#332a12] dark:text-[#E0B44E]"}`,children:I(`acceptanceCriteria.status.${a.status}`)}),(0,e.jsx)(r.E,{className:"text-[10px] border-0 bg-background text-muted-foreground",children:a.required?I("acceptanceCriteria.required"):I("acceptanceCriteria.optional")}),!a.evidence&&(0,e.jsx)("span",{className:"text-[10px] italic text-muted-foreground",children:I("acceptanceCriteria.noEvidence")})]}),a.evidence&&(0,e.jsxs)("div",{className:"rounded-md bg-red-50 dark:bg-[#331619] p-2 ml-4",children:[(0,e.jsx)("span",{className:"text-[10px] font-medium text-muted-foreground",children:I("acceptanceCriteria.verifyEvidence")}),(0,e.jsx)("p",{className:"text-[11px] text-foreground mt-0.5",children:a.evidence})]})]},a.uuid))]}),(0,e.jsx)(t.Es,{className:"border-t border-[#E5E2DC] dark:border-[#2a2a2e] px-6 py-4",children:(0,e.jsx)(s.$,{className:"rounded-lg bg-[#C4574C] hover:bg-[#A3433A] text-white",onClick:()=>U(!1),children:I("acceptanceCriteria.dismiss")})})]})})]})}d()}catch(a){d(a)}})},7046:(a,b,c)=>{"use strict";c.d(b,{O4:()=>g,kX:()=>e,od:()=>f,sO:()=>j,z3:()=>i});var d=c(70936);function e(a,b){return d.NextResponse.json({success:!0,data:a,meta:b})}function f(a,b,c,e){return d.NextResponse.json({success:!0,data:a,meta:{page:b,pageSize:c,total:e}})}let g={BAD_REQUEST:"BAD_REQUEST",UNAUTHORIZED:"UNAUTHORIZED",FORBIDDEN:"FORBIDDEN",NOT_FOUND:"NOT_FOUND",CONFLICT:"CONFLICT",VALIDATION_ERROR:"VALIDATION_ERROR",ALREADY_CLAIMED:"ALREADY_CLAIMED",NOT_CLAIMED:"NOT_CLAIMED",INVALID_STATUS_TRANSITION:"INVALID_STATUS_TRANSITION",PERMISSION_DENIED:"PERMISSION_DENIED",INTERNAL_ERROR:"INTERNAL_ERROR",DATABASE_ERROR:"DATABASE_ERROR"},h={[g.BAD_REQUEST]:400,[g.UNAUTHORIZED]:401,[g.FORBIDDEN]:403,[g.NOT_FOUND]:404,[g.CONFLICT]:409,[g.VALIDATION_ERROR]:422,[g.ALREADY_CLAIMED]:409,[g.NOT_CLAIMED]:400,[g.INVALID_STATUS_TRANSITION]:400,[g.PERMISSION_DENIED]:403,[g.INTERNAL_ERROR]:500,[g.DATABASE_ERROR]:500};function i(a,b,c){let e=h[a]||500;return d.NextResponse.json({success:!1,error:{code:a,message:b,details:c}},{status:e})}let j={badRequest:(a,b)=>i(g.BAD_REQUEST,a,b),unauthorized:(a="Authentication required")=>i(g.UNAUTHORIZED,a),forbidden:(a="Access denied")=>i(g.FORBIDDEN,a),notFound:(a="Resource")=>i(g.NOT_FOUND,`${a} not found`),conflict:a=>i(g.CONFLICT,a),validationError:a=>i(g.VALIDATION_ERROR,"Validation failed",a),alreadyClaimed:()=>i(g.ALREADY_CLAIMED,"Resource is already claimed"),notClaimed:()=>i(g.NOT_CLAIMED,"Resource is not claimed"),invalidStatusTransition:(a,b)=>i(g.INVALID_STATUS_TRANSITION,`Invalid status transition from ${a} to ${b}`),permissionDenied:a=>i(g.PERMISSION_DENIED,`Permission denied: ${a}`),internal:(a="Internal server error")=>i(g.INTERNAL_ERROR,a),database:(a="Database error")=>i(g.DATABASE_ERROR,a)}},15107:(a,b,c)=>{Promise.resolve().then(c.bind(c,29334))},19520:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{Hd:()=>n,nk:()=>p,pw:()=>o,yq:()=>m});var e=c(2613);c(50785);var f=c(5562),g=c(9259),h=c(50530),i=c(67738),j=c(97307),k=c(12217),l=a([g,h,i]);[g,h,i]=l.then?(await l)():l;let q={todo:"open",in_progress:"in_progress",to_verify:"to_verify",done:"done"};async function m(a,b,c){let d=await (0,g.d)();if(!d)return{success:!1,error:"Unauthorized"};try{let e=await (0,h.K4)(d.companyUuid,a);if(!e)return{success:!1,error:"Task not found"};let g=q[b];if(!g)return{success:!1,error:"Invalid column"};if("in_progress"===g){let b=await (0,h.IM)(a);if(!b.resolved)return{success:!1,error:"Dependencies not resolved",blocked:!0,blockers:b.blockers}}if("done"===g&&"to_verify"!==e.status)await (0,h.lC)(a,{status:"to_verify"});else if("done"===g&&"to_verify"===e.status){let b=await (0,h.Ew)(a);if(!b.allowed)return{success:!1,error:b.reason||"Not all required acceptance criteria are passed",gateBlocked:!0,unresolvedCriteria:b.unresolvedCriteria||[]};await (0,h.lC)(a,{status:"done"})}else await (0,h.lC)(a,{status:g});return(0,f.revalidatePath)(`/projects/${c}/tasks`),{success:!0}}catch(a){return j.default.error({err:a},"Failed to move task"),{success:!1,error:"Failed to move task"}}}async function n(a,b){let c=await (0,g.d)();if(!c)return{success:!1,error:"Unauthorized"};try{let d=await (0,h.K4)(c.companyUuid,a);if(!d)return{success:!1,error:"Task not found"};return await (0,h.lC)(a,{status:b}),await (0,i.createActivity)({companyUuid:c.companyUuid,projectUuid:d.projectUuid,targetType:"task",targetUuid:d.uuid,actorType:c.type,actorUuid:c.actorUuid,action:"force_status_change",value:JSON.stringify({from:d.status,to:b})}),{success:!0}}catch(a){return j.default.error({err:a},"Failed to force move task"),{success:!1,error:"Failed to force move task"}}}async function o(a){let b=await (0,g.d)();if(!b)return{success:!1,error:"Unauthorized"};try{let{tasks:c}=await (0,h.Vk)({companyUuid:b.companyUuid,projectUuid:a,skip:0,take:1e3});return{success:!0,data:c}}catch(a){return j.default.error({err:a},"Failed to fetch tasks"),{success:!1,error:"Failed to fetch tasks"}}}async function p(a){let b=await (0,g.d)();if(!b)return{nodes:[],edges:[]};try{return await (0,h.Cm)(b.companyUuid,a)}catch(a){return j.default.error({err:a},"Failed to get project dependencies"),{nodes:[],edges:[]}}}(0,k.D)([m,n,o,p]),(0,e.A)(m,"7067292139285010417cf50b0605fca147ffe494a4",null),(0,e.A)(n,"60aa8d4bae20b000bc59ffc2ab1c862084323ccbd8",null),(0,e.A)(o,"407b7e04766037fe71af88f209e76445dd4e7b65ef",null),(0,e.A)(p,"40849562ebbe7e000608c51fee043961cea91b6979",null),d()}catch(a){d(a)}})},24181:(a,b,c)=>{"use strict";c.d(b,{H:()=>e});var d=c(42377);let e=(0,d.createServerReference)("60aa8d4bae20b000bc59ffc2ab1c862084323ccbd8",d.callServer,void 0,d.findSourceMapURL,"forceMoveTaskToColumnAction")},24879:(a,b,c)=>{"use strict";c.d(b,{o:()=>k});var d=c(10837),e=c(21968),f=c(46005);let g=(0,e.createContext)(null);var h=c(46801),i=c(72443);let j=a=>!a.isLayoutDirty&&a.willUpdate(!1),k=({children:a,id:b,inherit:c=!0})=>{let k=(0,e.useContext)(f.L),l=(0,e.useContext)(g),[m,n]=function(){let a=function(){let a=(0,e.useRef)(!1);return(0,i.E)(()=>(a.current=!0,()=>{a.current=!1}),[]),a}(),[b,c]=(0,e.useState)(0),d=(0,e.useCallback)(()=>{a.current&&c(b+1)},[b]);return[(0,e.useCallback)(()=>h.Gt.postRender(d),[d]),b]}(),o=(0,e.useRef)(null),p=k.id||l;null===o.current&&((a=>!0==(!0===a)||"id"===a)(c)&&p&&(b=b?p+"-"+b:p),o.current={id:b,group:!0===c&&k.group||function(){let a=new Set,b=new WeakMap,c=()=>a.forEach(j);return{add:d=>{a.add(d),b.set(d,d.addEventListener("willUpdate",c))},remove:d=>{a.delete(d);let e=b.get(d);e&&(e(),b.delete(d)),c()},dirty:c}}()});let q=(0,e.useMemo)(()=>({...o.current,forceRender:m}),[n]);return(0,d.jsx)(f.L.Provider,{value:q,children:a})}},26761:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{"00b55ac412724660fcc2944f0732e86675d07d87e4":()=>g.vq,"40259bf65be47c0f51c8118d69cdbce667d6f92856":()=>g.Yw,"403d50db0a6210a79345aec08dcd7d0778f5afb4c9":()=>e.v5,"40437b7a932280e774aa74a05bf1adb8ccbdeeb213":()=>j.Y9,"404a62707a781921fafbd2a52756250160b5bc1806":()=>j.bv,"404be917517e841a3841dc2268f537f86751f7e542":()=>e.Dv,"404d88ba836ceedbda17e933b4b245b934df09d5a8":()=>g.iY,"407b7e04766037fe71af88f209e76445dd4e7b65ef":()=>f.pw,"40849562ebbe7e000608c51fee043961cea91b6979":()=>f.nk,"408a0b29e2af71ac59260f979c248d43b1c80addf7":()=>g.A0,"4092a0b3c286d003873de674b9aa38c6a6614dc86e":()=>g.p2,"409d5956f55ffeb4dbafef35cff17a8c49682002e0":()=>l.F,"40a3be0e8df8105be8e95ce2817f37df569258c449":()=>j.t1,"40a52493cf6eb5ad91d6a02abdaca60c7b9d8feb65":()=>m.kq,"40aa5a92f5c6504ccf6022cb405ba298b31f79e274":()=>m.xo,"40adc2ce26530fef2d53b454c50fe58d7ae4e58c4f":()=>g.G3,"40b20945b30054e0e4ce9c051749fe4eec44325a15":()=>n.J,"40be0491115f9089132b1204390dc0f49807d942c9":()=>g.hR,"40c45bb325d7a4ff92af8656e043759509d797907e":()=>k.f,"40cba7eba476ad3a06b79101da704c4c548dabd0df":()=>n.h,"601c59aec6d769bbe486f5ea1ccd3fd4270033fd73":()=>g.TV,"602b91eddcac452b0cba2b94325626135f9c8cb952":()=>e.Tg,"604ce86807d55a87dcb46df6e4fe6ad5a9a342be2c":()=>h.Nq,"606641c25b08d35b0964503b3aee10dceb401824a7":()=>h.IY,"60714d4c7afb225477da48a465b621805b27b81d9f":()=>m.wG,"607522a12b1c20d12bc0fb698e687b2cc0c8bf7baf":()=>g.y9,"60895b7198b1fe2decacbac5ea137868c30e5c3f3d":()=>m.TK,"60aa8d4bae20b000bc59ffc2ab1c862084323ccbd8":()=>f.Hd,"60c39d15d7d5e2a58ed94b8c9b19f8724d4c47c3ee":()=>h.hD,"60dd52a056e2bdad62e763211054323f494029bbc2":()=>g.bd,"60ee00e0f81186986ceb2159c1e052bd817d18cb2a":()=>j.jD,"70478b99cf48ad4cc4d144cdbdc40c521341ef04ae":()=>i.d,"705499136b14c392624997b6e1a7cda58014b837e6":()=>i.s,"7067292139285010417cf50b0605fca147ffe494a4":()=>f.yq,"70ead25f38c4f3d34218e47c0febad4caaa9b8748e":()=>g.qb});var e=c(22299),f=c(19520),g=c(73393),h=c(71353),i=c(98581),j=c(52178),k=c(64029),l=c(72189),m=c(22293),n=c(81751),o=a([e,f,g,h,i,j,k,l,m,n]);[e,f,g,h,i,j,k,l,m,n]=o.then?(await o)():o,d()}catch(a){d(a)}})},29179:(a,b,c)=>{Promise.resolve().then(c.bind(c,90436))},29227:(a,b,c)=>{"use strict";c.d(b,{y:()=>e});var d=c(42377);let e=(0,d.createServerReference)("7067292139285010417cf50b0605fca147ffe494a4",d.callServer,void 0,d.findSourceMapURL,"moveTaskToColumnAction")},29334:(a,b,c)=>{"use strict";c.d(b,{TaskViewToggle:()=>d});let d=(0,c(37143).registerClientReference)(function(){throw Error("Attempted to call TaskViewToggle() from the server but TaskViewToggle is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/ubuntu/dev/ai-pm/src/app/(dashboard)/projects/[uuid]/tasks/task-view-toggle.tsx","TaskViewToggle")},36566:(a,b,c)=>{"use strict";c.d(b,{p:()=>e});var d=c(42377);let e=(0,d.createServerReference)("407b7e04766037fe71af88f209e76445dd4e7b65ef",d.callServer,void 0,d.findSourceMapURL,"fetchTasksAction")},37066:(a,b,c)=>{"use strict";c.d(b,{A:()=>g});var d=c(77592),e=c(50117);let f=["en","zh","ko","ja"],g=(0,d.A)(async()=>{let a=await (0,e.UL)(),b=a.get("chorus-locale")?.value,d=b&&f.includes(b)?b:"en";return{locale:d,messages:(await c(76565)(`./${d}.json`)).default}})},39268:(a,b,c)=>{"use strict";c.d(b,{T:()=>r});var d=c(10837),e=c(21968),f=c(1007),g=c(68884),h=c(9222),i=c(65956),j=c(56149),k=c(9810),l=c(10694),m=c(96307),n=c(42424),o=c(49599),p=c(74113),q=c(10297);function r({projectUuid:a}){let b=(0,h.c)("tasks"),c=(0,g.r)(),r=(0,f.usePathname)(),s=(0,f.useSearchParams)(),[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)([]),[x,y]=(0,e.useState)(new Set),z=(0,e.useCallback)(a=>{let b=new URLSearchParams(s.toString());a.size>0?b.set("proposalUuids",Array.from(a).join(",")):b.delete("proposalUuids");let d=b.toString();c.replace(`${r}${d?`?${d}`:""}`,{scroll:!1})},[c,r,s]),A=(0,e.useCallback)(a=>{y(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),z(c),c})},[z]),B=(0,e.useCallback)(()=>{y(new Set),z(new Set)},[z]),C=x.size>0;return(0,d.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,d.jsxs)("div",{className:"flex items-center gap-1.5 text-sm text-muted-foreground shrink-0",children:[(0,d.jsx)(i.A,{className:"size-4"}),(0,d.jsxs)("span",{children:[b("proposalFilter.label"),":"]})]}),(0,d.jsxs)(p.AM,{open:t,onOpenChange:u,children:[(0,d.jsx)(p.Wv,{asChild:!0,children:(0,d.jsxs)(n.$,{variant:"outline",size:"sm",role:"combobox","aria-expanded":t,className:(0,m.cn)("justify-between gap-1 min-w-[120px] max-w-[200px] md:min-w-[160px] md:max-w-none",C&&"border-primary bg-[#FFF8F4] dark:bg-[#2a2016]"),children:[(0,d.jsx)("span",{className:"truncate",children:C?b("proposalFilter.filtered",{filtered:x.size,total:v.length}):b("proposalFilter.allProposals")}),(0,d.jsx)(j.A,{className:"size-4 shrink-0 opacity-50"})]})}),(0,d.jsx)(p.hl,{className:"w-[300px] p-0",align:"start",children:(0,d.jsxs)(q.uB,{children:[(0,d.jsx)(q.G7,{placeholder:b("proposalFilter.search")}),(0,d.jsxs)(q.oI,{children:[(0,d.jsx)(q.xL,{children:b("proposalFilter.noResults")}),(0,d.jsx)(q.L$,{children:v.map(a=>{let c=x.has(a.uuid);return(0,d.jsxs)(q.h_,{value:a.title,onSelect:()=>A(a.uuid),className:"flex items-center justify-between",children:[(0,d.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,d.jsx)("div",{className:(0,m.cn)("flex size-4 shrink-0 items-center justify-center rounded-sm border",c?"border-primary bg-primary text-white":"border-muted-foreground/30"),children:c&&(0,d.jsx)(k.A,{className:"size-3"})}),(0,d.jsx)("span",{className:"truncate",children:a.title})]}),(0,d.jsx)(o.E,{variant:"secondary",className:"ml-2 shrink-0",children:b("proposalFilter.taskCount",{count:a.taskCount})})]},a.uuid)})})]})]})})]}),C&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"flex flex-wrap gap-1 max-w-full",children:v.filter(a=>x.has(a.uuid)).map(a=>(0,d.jsxs)(o.E,{variant:"outline",className:"gap-1 border-primary bg-[#FFF8F4] dark:bg-[#2a2016] text-primary",children:[a.title,(0,d.jsx)("button",{type:"button",className:"ml-0.5 rounded-full hover:bg-primary/20",onClick:()=>A(a.uuid),children:(0,d.jsx)(l.A,{className:"size-3"})})]},a.uuid))}),(0,d.jsx)(n.$,{variant:"ghost",size:"xs",onClick:B,className:"text-muted-foreground",children:b("proposalFilter.clear")})]})]})}},45519:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(56556).A)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]])},63748:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{X:()=>n});var e=c(10023),f=c(66530),g=c(26555),h=c(82858),i=c(29662),j=c(71165),k=c(61413),l=c(29334),m=a([i,j,k]);async function n({projectUuid:a,initialSelectedTaskUuid:b}){let c=await (0,i.d)();c||(0,f.redirect)("/login");let d=await (0,g.A)();await (0,k.Yi)(c.companyUuid,a)||(0,f.redirect)("/projects");let{tasks:m}=await (0,j.Vk)({companyUuid:c.companyUuid,projectUuid:a,skip:0,take:1e3}),n=m.reduce((a,b)=>a+(b.storyPoints||0),0);return(0,e.jsxs)("div",{className:"flex h-full flex-col p-4 md:p-8",children:[(0,e.jsx)("div",{className:"mb-6 flex items-center justify-between",children:(0,e.jsxs)("div",{children:[(0,e.jsx)("h1",{className:"text-2xl font-semibold text-foreground",children:d("tasks.title")}),(0,e.jsxs)("div",{className:"mt-1 flex items-center gap-4",children:[(0,e.jsx)("p",{className:"text-sm text-muted-foreground",children:d("tasks.subtitle")}),n>0&&(0,e.jsxs)("div",{className:"flex items-center gap-1.5 rounded-full bg-secondary px-3 py-1",children:[(0,e.jsx)(h.A,{className:"h-3.5 w-3.5 text-primary"}),(0,e.jsxs)("span",{className:"text-xs font-medium text-muted-foreground",children:[(0,e.jsx)("span",{className:"text-foreground",children:n.toFixed(1)})," ",d("tasks.agentHours")]})]})]})]})}),(0,e.jsx)(l.TaskViewToggle,{projectUuid:a,initialTasks:m,currentUserUuid:c.actorUuid,initialSelectedTaskUuid:b})]})}[i,j,k]=m.then?(await m)():m,d()}catch(a){d(a)}})},76565:(a,b,c)=>{var d={"./en.json":[87368,7368],"./ja.json":[49378,9378],"./ko.json":[35245,5245],"./zh.json":[72961,2961]};function e(a){if(!c.o(d,a))return Promise.resolve().then(()=>{var b=Error("Cannot find module '"+a+"'");throw b.code="MODULE_NOT_FOUND",b});var b=d[a],e=b[0];return c.e(b[1]).then(()=>c.t(e,19))}e.keys=()=>Object.keys(d),e.id=76565,a.exports=e},82858:(a,b,c)=>{"use strict";c.d(b,{A:()=>d});let d=(0,c(91533).A)("clock",[["path",{d:"M12 6v6l4 2",key:"mmk7yg"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]])},86255:(a,b,c)=>{"use strict";c.d(b,{i:()=>q});var d=c(10837),e=c(21968),f=c(47797);c(63410);var g=c(9222),h=c(1007),i=c(86460),j=c(10694),k=c(42424),l=c(74798),m=c(60265),n=c(42377);let o=(0,n.createServerReference)("40849562ebbe7e000608c51fee043961cea91b6979",n.callServer,void 0,n.findSourceMapURL,"getProjectDependenciesAction");var p=c(36039);function q({projectUuid:a,onTaskSelect:b,refreshKey:c}){let n=(0,g.c)(),q=(0,l.W)(),r=(0,h.useSearchParams)(),[s,t,u]=(0,f.ck)([]),[v,w,x]=(0,f.fM)([]),[y,z]=(0,e.useState)(!0),[A,B]=(0,e.useState)(null),C=(0,e.useMemo)(()=>{let a=r.get("proposalUuids");if(!a)return null;let b=a.split(",").filter(Boolean);return b.length>0?new Set(b):null},[r]),D=(0,e.useCallback)(async()=>{z(!0);let b=await o(a),c=b.nodes,d=b.edges;if(C){let a=new Set((c=b.nodes.filter(a=>null!==a.proposalUuid&&C.has(a.proposalUuid))).map(a=>a.uuid));d=b.edges.filter(b=>a.has(b.from)&&a.has(b.to))}let e=c.map(a=>({id:a.uuid,type:"taskNode",position:{x:0,y:0},data:{title:a.title,status:a.status,priority:a.priority,proposalUuid:a.proposalUuid}})),f=d.map((a,b)=>({id:`e-${b}`,source:a.to,target:a.from,...m.qK})),{nodes:g,edges:h}=(0,m.nF)(e,f);t(g),w(h),z(!1)},[a,C,t,w]),E=(0,e.useCallback)(async a=>{if(!a.source||!a.target)return;B(null);let b=a.target,c=a.source,d=await (0,p.w)(b,c);if(!d.success)return void B(d.error||n("tasks.failedToAddDep"));await D()},[D]),F=(0,e.useCallback)((a,c)=>{b(c.id)},[b]);return y?(0,d.jsx)("div",{className:"flex flex-1 items-center justify-center",children:(0,d.jsx)(i.A,{className:"h-6 w-6 animate-spin text-muted-foreground"})}):0===s.length?(0,d.jsx)("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:n("tasks.noTasksToDisplay")}):(0,d.jsxs)("div",{className:"flex-1 rounded-xl border border-border bg-[#FAFAF8] dark:bg-[#1e1e1c] relative",children:[A&&(0,d.jsxs)("div",{className:"absolute top-3 left-1/2 -translate-x-1/2 z-10 rounded-lg bg-red-50 dark:bg-[#331619] border border-red-200 dark:border-[#5a2a2e] px-4 py-2 text-xs text-red-700 dark:text-[#F08078] shadow-sm",children:[A,(0,d.jsx)(k.$,{variant:"ghost",size:"icon",className:"ml-2 h-5 w-5 font-medium hover:text-red-900 dark:hover:text-[#F0A0A0]",onClick:()=>B(null),children:(0,d.jsx)(j.A,{className:"h-3 w-3"})})]}),(0,d.jsxs)(f.Gc,{colorMode:q?"dark":"light",nodes:s,edges:v,onNodesChange:u,onEdgesChange:x,onConnect:E,onNodeClick:F,nodeTypes:m.c_,fitView:!0,fitViewOptions:{padding:.2},minZoom:.3,maxZoom:1.5,proOptions:{hideAttribution:!0},zoomOnScroll:!0,zoomOnPinch:!0,panOnDrag:!0,children:[(0,d.jsx)(f.VS,{color:q?"#40392f":"#E5E0D8",gap:20}),(0,d.jsx)(f.H2,{className:"[&>button]:border-border [&>button]:bg-card [&>button]:text-foreground [&>button:hover]:bg-background"})]})]})}},90436:(a,b,c)=>{"use strict";c.a(a,async(a,d)=>{try{c.d(b,{TaskViewToggle:()=>x});var e=c(10837),f=c(21968),g=c(1007),h=c(9222),i=c(32552),j=c(45519),k=c(33407),l=c(92900),m=c(42424),n=c(49599),o=c(35198),p=c(96013),q=c(98625),r=c(39268),s=c(5514),t=c(86255),u=c(86104),v=c(31009),w=a([s,u]);[s,u]=w.then?(await w)():w;let y={open:"bg-[#FFF3E0] dark:bg-[#3a2a12] text-[#E65100] dark:text-[#F0A050]",assigned:"bg-[#E3F2FD] dark:bg-[#13253a] text-[#1976D2] dark:text-[#5AA9F0]",in_progress:"bg-[#E8F5E9] dark:bg-[#14281a] text-[#5A9E6F] dark:text-[#6FD19A]",to_verify:"bg-[#F3E5F5] dark:bg-[#281630] text-[#7B1FA2] dark:text-[#C98FE0]",done:"bg-[#E0F2F1] dark:bg-[#12292a] text-[#00796B] dark:text-[#4FD1C0]",closed:"bg-[#F5F5F5] dark:bg-[#1e1e20] text-[#9A9A9A]"},z={open:"open",assigned:"assigned",in_progress:"inProgress",to_verify:"toVerify",done:"done",closed:"closed"},A=[{id:"all",labelKey:"allStatuses",statuses:[]},{id:"todo",labelKey:"todo",statuses:["open","assigned"]},{id:"in_progress",labelKey:"inProgress",statuses:["in_progress"]},{id:"to_verify",labelKey:"toVerify",statuses:["to_verify"]},{id:"done",labelKey:"done",statuses:["done","closed"]}],B={high:"bg-red-100 text-red-700",medium:"bg-yellow-100 text-yellow-700",low:"bg-blue-100 text-blue-700"};function x({projectUuid:a,initialTasks:b,currentUserUuid:c,initialSelectedTaskUuid:d}){let w=(0,h.c)(),x=(0,p.a)(),C=(0,g.useSearchParams)(),[D,E]=(0,f.useState)("kanban"),F=`/projects/${a}/tasks`,{selectedId:G,openPanel:H,closePanel:I}=(0,q.T)(F,d),J=(0,f.useMemo)(()=>{let a=C.get("proposalUuids");if(!a)return null;let b=a.split(",").filter(Boolean);return b.length>0?new Set(b):null},[C]),[K,L]=(0,f.useState)(!1),[M,N]=(0,f.useState)(0),[O,P]=(0,f.useState)("all"),Q=(0,f.useMemo)(()=>G?b.find(a=>a.uuid===G)??null:null,[G,b]),R=(0,f.useCallback)(()=>{N(a=>a+1)},[]),S=(0,f.useMemo)(()=>J?b.filter(a=>a.proposalUuid&&J.has(a.proposalUuid)):b,[b,J]),T=(0,f.useMemo)(()=>{let a=A.find(a=>a.id===O);return a&&0!==a.statuses.length?S.filter(b=>a.statuses.includes(b.status)):S},[S,O]);return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"mb-4 overflow-x-auto",children:(0,e.jsx)(r.T,{projectUuid:a})}),(0,e.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,e.jsxs)("div",{className:"flex items-center gap-1 rounded-lg bg-secondary p-1 w-fit",children:[x&&(0,e.jsxs)(m.$,{variant:"ghost",size:"sm",className:`h-8 gap-1.5 rounded-md px-3 text-xs ${"list"===D?"bg-card text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,onClick:()=>E("list"),children:[(0,e.jsx)(i.A,{className:"h-3.5 w-3.5"}),w("tasks.listView")]}),!x&&(0,e.jsxs)(m.$,{variant:"ghost",size:"sm",className:`h-8 gap-1.5 rounded-md px-3 text-xs ${"kanban"===D?"bg-card text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,onClick:()=>E("kanban"),children:[(0,e.jsx)(j.A,{className:"h-3.5 w-3.5"}),w("tasks.kanbanView")]}),(0,e.jsxs)(m.$,{variant:"ghost",size:"sm",className:`h-8 gap-1.5 rounded-md px-3 text-xs ${"dag"===D?"bg-card text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,onClick:()=>E("dag"),children:[(0,e.jsx)(k.A,{className:"h-3.5 w-3.5"}),w("tasks.dagView")]})]}),(0,e.jsxs)(m.$,{className:"bg-primary hover:bg-[#B56A42] text-white",onClick:()=>{I(),L(!0)},children:[(0,e.jsx)(l.A,{className:"mr-2 h-4 w-4"}),w("tasks.newTask")]})]}),"list"===D?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)("div",{className:"mb-4 flex gap-1 overflow-x-auto border-b border-border pb-2",children:A.map(a=>{let b=0===a.statuses.length?S.length:S.filter(b=>a.statuses.includes(b.status)).length;return(0,e.jsxs)(m.$,{variant:"ghost",size:"sm",className:`h-8 shrink-0 rounded-md px-3 text-xs ${O===a.id?"bg-secondary text-foreground font-medium":"text-muted-foreground hover:text-foreground"}`,onClick:()=>P(a.id),children:["all"===a.id?w(`tasks.${a.labelKey}`):w(`status.${a.labelKey}`),(0,e.jsx)("span",{className:"ml-1.5 rounded-full bg-card px-1.5 py-0.5 text-[10px] font-medium text-muted-foreground",children:b})]},a.id)})}),(0,e.jsx)("div",{className:"flex-1 space-y-2 overflow-y-auto",children:0===T.length?(0,e.jsx)(v.P.div,{initial:{opacity:0,scale:.98},animate:{opacity:1,scale:1},transition:{duration:.2,ease:[0,0,.2,1]},className:"flex h-24 items-center justify-center rounded-lg border-2 border-dashed border-border text-sm text-[#9A9A9A]",children:w("tasks.noTasks")}):T.map(a=>(0,e.jsxs)(o.Zp,{className:"cursor-pointer border-border bg-card p-4 transition-all hover:border-primary hover:shadow-sm",onClick:()=>H(a.uuid),children:[(0,e.jsxs)("div",{className:"flex items-start justify-between gap-3",children:[(0,e.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,e.jsx)("h4",{className:"font-medium text-foreground truncate",children:a.title}),a.description&&(0,e.jsx)("p",{className:"mt-1 line-clamp-1 text-sm text-muted-foreground",children:a.description})]}),(0,e.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[null!=a.storyPoints&&a.storyPoints>0&&(0,e.jsxs)("span",{className:"rounded bg-[#FFF3E0] dark:bg-[#3a2a12] px-2 py-0.5 text-xs font-medium text-[#E65100] dark:text-[#F0A050]",children:[a.storyPoints,"h"]}),(0,e.jsx)(n.E,{className:B[a.priority]||"",children:w(`priority.${a.priority}`)}),(0,e.jsx)(n.E,{className:y[a.status]||"",children:w(`status.${z[a.status]||a.status}`)})]})]}),a.assignee&&(0,e.jsx)("div",{className:"mt-2 flex items-center gap-1.5 text-xs text-[#9A9A9A]",children:(0,e.jsx)("span",{className:"truncate",children:a.assignee.name})})]},a.uuid))}),Q&&(0,e.jsx)(u.v,{task:Q,projectUuid:a,currentUserUuid:c,onClose:I,onDependencyChange:R})]}):"kanban"===D?(0,e.jsx)(s.y,{projectUuid:a,initialTasks:S,currentUserUuid:c,selectedTaskUuid:G,onTaskSelect:H,onPanelClose:I,proposalUuidFilter:J}):(0,e.jsxs)("div",{className:"flex flex-1 flex-col",children:[(0,e.jsx)(t.i,{projectUuid:a,onTaskSelect:a=>H(a),refreshKey:M}),Q&&(0,e.jsx)(u.v,{task:Q,projectUuid:a,currentUserUuid:c,onClose:I,onDependencyChange:R})]}),K&&!Q&&(0,e.jsx)(u.v,{task:null,projectUuid:a,currentUserUuid:c,onClose:()=>L(!1),onCreated:()=>L(!1)})]})}d()}catch(a){d(a)}})},91533:(a,b,c)=>{"use strict";c.d(b,{A:()=>i});var d=c(73426);let e=(...a)=>a.filter((a,b,c)=>!!a&&""!==a.trim()&&c.indexOf(a)===b).join(" ").trim(),f=a=>{let b=a.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,b,c)=>c?c.toUpperCase():b.toLowerCase());return b.charAt(0).toUpperCase()+b.slice(1)};var g={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let h=(0,d.forwardRef)(({color:a="currentColor",size:b=24,strokeWidth:c=2,absoluteStrokeWidth:f,className:h="",children:i,iconNode:j,...k},l)=>(0,d.createElement)("svg",{ref:l,...g,width:b,height:b,stroke:a,strokeWidth:f?24*Number(c)/Number(b):c,className:e("lucide",h),...!i&&!(a=>{for(let b in a)if(b.startsWith("aria-")||"role"===b||"title"===b)return!0;return!1})(k)&&{"aria-hidden":"true"},...k},[...j.map(([a,b])=>(0,d.createElement)(a,b)),...Array.isArray(i)?i:[i]])),i=(a,b)=>{let c=(0,d.forwardRef)(({className:c,...g},i)=>(0,d.createElement)(h,{ref:i,iconNode:b,className:e(`lucide-${f(a).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${a}`,c),...g}));return c.displayName=f(a),c}},96013:(a,b,c)=>{"use strict";c.d(b,{a:()=>e});var d=c(21968);function e(){let[a,b]=(0,d.useState)(!1);return a}}};