vibedoc 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +9 -0
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +42 -14
  5. package/.next/routes-manifest.json +54 -0
  6. package/.next/server/app/(app)/activity/page.js.nft.json +1 -1
  7. package/.next/server/app/(app)/activity/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/(app)/board/page.js.nft.json +1 -1
  9. package/.next/server/app/(app)/board/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(app)/chat/page.js.nft.json +1 -1
  11. package/.next/server/app/(app)/chat/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(app)/docs/page.js.nft.json +1 -1
  13. package/.next/server/app/(app)/docs/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/(app)/explorer/page.js.nft.json +1 -1
  15. package/.next/server/app/(app)/explorer/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(app)/manual-tests/page/app-paths-manifest.json +3 -0
  17. package/.next/server/app/(app)/manual-tests/page/build-manifest.json +20 -0
  18. package/.next/server/app/(app)/manual-tests/page/next-font-manifest.json +11 -0
  19. package/.next/server/app/(app)/manual-tests/page/react-loadable-manifest.json +1 -0
  20. package/.next/server/app/(app)/manual-tests/page/server-reference-manifest.json +4 -0
  21. package/.next/server/app/(app)/manual-tests/page.js +15 -0
  22. package/.next/server/app/(app)/manual-tests/page.js.map +5 -0
  23. package/.next/server/app/(app)/manual-tests/page.js.nft.json +1 -0
  24. package/.next/server/app/(app)/manual-tests/page_client-reference-manifest.js +3 -0
  25. package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
  26. package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  30. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
  32. package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/_global-error.html +1 -1
  34. package/.next/server/app/_global-error.rsc +1 -1
  35. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  36. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  37. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  39. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/_not-found.html +1 -1
  41. package/.next/server/app/_not-found.rsc +3 -2
  42. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -2
  43. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -2
  44. package/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -2
  45. package/.next/server/app/activity.html +1 -1
  46. package/.next/server/app/activity.rsc +20 -18
  47. package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +7 -6
  48. package/.next/server/app/activity.segments/_full.segment.rsc +20 -18
  49. package/.next/server/app/activity.segments/_tree.segment.rsc +3 -2
  50. package/.next/server/app/api/activity/route.js +2 -2
  51. package/.next/server/app/api/activity/route.js.nft.json +1 -1
  52. package/.next/server/app/api/backlinks/route.js +2 -2
  53. package/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  54. package/.next/server/app/api/chat/route.js +1 -1
  55. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  56. package/.next/server/app/api/context/route.js +2 -2
  57. package/.next/server/app/api/context/route.js.nft.json +1 -1
  58. package/.next/server/app/api/conversations/route.js +2 -2
  59. package/.next/server/app/api/conversations/route.js.nft.json +1 -1
  60. package/.next/server/app/api/decisions/route.js +2 -2
  61. package/.next/server/app/api/decisions/route.js.nft.json +1 -1
  62. package/.next/server/app/api/docs/route.js +1 -1
  63. package/.next/server/app/api/docs/route.js.nft.json +1 -1
  64. package/.next/server/app/api/explorer/route.js +2 -2
  65. package/.next/server/app/api/explorer/route.js.nft.json +1 -1
  66. package/.next/server/app/api/mcp/route.js +1 -1
  67. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  68. package/.next/server/app/api/memory/route.js +2 -2
  69. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  70. package/.next/server/app/api/plan/apply/route.js +3 -3
  71. package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
  72. package/.next/server/app/api/projects/route.js +2 -2
  73. package/.next/server/app/api/projects/route.js.nft.json +1 -1
  74. package/.next/server/app/api/registry/route.js +2 -2
  75. package/.next/server/app/api/registry/route.js.nft.json +1 -1
  76. package/.next/server/app/api/roadmap/create/route.js +3 -3
  77. package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
  78. package/.next/server/app/api/roadmap/delete/route.js +3 -3
  79. package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
  80. package/.next/server/app/api/roadmap/generate/route.js +3 -3
  81. package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
  82. package/.next/server/app/api/roadmap/layout/route.js +3 -3
  83. package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
  84. package/.next/server/app/api/roadmap/restore/route/app-paths-manifest.json +3 -0
  85. package/.next/server/app/api/roadmap/restore/route/build-manifest.json +12 -0
  86. package/.next/server/app/api/roadmap/restore/route/server-reference-manifest.json +4 -0
  87. package/.next/server/app/api/roadmap/restore/route.js +9 -0
  88. package/.next/server/app/api/roadmap/restore/route.js.map +5 -0
  89. package/.next/server/app/api/roadmap/restore/route.js.nft.json +1 -0
  90. package/.next/server/app/api/roadmap/restore/route_client-reference-manifest.js +3 -0
  91. package/.next/server/app/api/roadmap/route.js +3 -3
  92. package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
  93. package/.next/server/app/api/roadmap/update/route.js +3 -3
  94. package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
  95. package/.next/server/app/api/sessions/route.js +2 -2
  96. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  97. package/.next/server/app/api/settings/route.js +3 -3
  98. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  99. package/.next/server/app/api/setup/generate/route.js +1 -1
  100. package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
  101. package/.next/server/app/api/setup/write/route.js +2 -2
  102. package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
  103. package/.next/server/app/api/summary/route.js +2 -2
  104. package/.next/server/app/api/summary/route.js.nft.json +1 -1
  105. package/.next/server/app/api/tasks/bulk/route/app-paths-manifest.json +3 -0
  106. package/.next/server/app/api/tasks/bulk/route/build-manifest.json +12 -0
  107. package/.next/server/app/api/tasks/bulk/route/server-reference-manifest.json +4 -0
  108. package/.next/server/app/api/tasks/bulk/route.js +9 -0
  109. package/.next/server/app/api/tasks/bulk/route.js.map +5 -0
  110. package/.next/server/app/api/tasks/bulk/route.js.nft.json +1 -0
  111. package/.next/server/app/api/tasks/bulk/route_client-reference-manifest.js +3 -0
  112. package/.next/server/app/api/tasks/create/route.js +2 -2
  113. package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
  114. package/.next/server/app/api/tasks/delete/route/app-paths-manifest.json +3 -0
  115. package/.next/server/app/api/tasks/delete/route/build-manifest.json +12 -0
  116. package/.next/server/app/api/tasks/delete/route/server-reference-manifest.json +4 -0
  117. package/.next/server/app/api/tasks/delete/route.js +9 -0
  118. package/.next/server/app/api/tasks/delete/route.js.map +5 -0
  119. package/.next/server/app/api/tasks/delete/route.js.nft.json +1 -0
  120. package/.next/server/app/api/tasks/delete/route_client-reference-manifest.js +3 -0
  121. package/.next/server/app/api/tasks/manual-tests/route/app-paths-manifest.json +3 -0
  122. package/.next/server/app/api/tasks/manual-tests/route/build-manifest.json +12 -0
  123. package/.next/server/app/api/tasks/manual-tests/route/server-reference-manifest.json +4 -0
  124. package/.next/server/app/api/tasks/manual-tests/route.js +8 -0
  125. package/.next/server/app/api/tasks/manual-tests/route.js.map +5 -0
  126. package/.next/server/app/api/tasks/manual-tests/route.js.nft.json +1 -0
  127. package/.next/server/app/api/tasks/manual-tests/route_client-reference-manifest.js +3 -0
  128. package/.next/server/app/api/tasks/restore/route/app-paths-manifest.json +3 -0
  129. package/.next/server/app/api/tasks/restore/route/build-manifest.json +12 -0
  130. package/.next/server/app/api/tasks/restore/route/server-reference-manifest.json +4 -0
  131. package/.next/server/app/api/tasks/restore/route.js +9 -0
  132. package/.next/server/app/api/tasks/restore/route.js.map +5 -0
  133. package/.next/server/app/api/tasks/restore/route.js.nft.json +1 -0
  134. package/.next/server/app/api/tasks/restore/route_client-reference-manifest.js +3 -0
  135. package/.next/server/app/api/tasks/review/route/app-paths-manifest.json +3 -0
  136. package/.next/server/app/api/tasks/review/route/build-manifest.json +12 -0
  137. package/.next/server/app/api/tasks/review/route/server-reference-manifest.json +4 -0
  138. package/.next/server/app/api/tasks/review/route.js +9 -0
  139. package/.next/server/app/api/tasks/review/route.js.map +5 -0
  140. package/.next/server/app/api/tasks/review/route.js.nft.json +1 -0
  141. package/.next/server/app/api/tasks/review/route_client-reference-manifest.js +3 -0
  142. package/.next/server/app/api/tasks/route.js +2 -2
  143. package/.next/server/app/api/tasks/route.js.nft.json +1 -1
  144. package/.next/server/app/api/tasks/update/route/app-paths-manifest.json +3 -0
  145. package/.next/server/app/api/tasks/update/route/build-manifest.json +12 -0
  146. package/.next/server/app/api/tasks/update/route/server-reference-manifest.json +4 -0
  147. package/.next/server/app/api/tasks/update/route.js +9 -0
  148. package/.next/server/app/api/tasks/update/route.js.map +5 -0
  149. package/.next/server/app/api/tasks/update/route.js.nft.json +1 -0
  150. package/.next/server/app/api/tasks/update/route_client-reference-manifest.js +3 -0
  151. package/.next/server/app/api/views/route/app-paths-manifest.json +3 -0
  152. package/.next/server/app/api/views/route/build-manifest.json +12 -0
  153. package/.next/server/app/api/views/route/server-reference-manifest.json +4 -0
  154. package/.next/server/app/api/views/route.js +9 -0
  155. package/.next/server/app/api/views/route.js.map +5 -0
  156. package/.next/server/app/api/views/route.js.nft.json +1 -0
  157. package/.next/server/app/api/views/route_client-reference-manifest.js +3 -0
  158. package/.next/server/app/board.html +1 -1
  159. package/.next/server/app/board.rsc +20 -18
  160. package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +7 -6
  161. package/.next/server/app/board.segments/_full.segment.rsc +20 -18
  162. package/.next/server/app/board.segments/_tree.segment.rsc +3 -2
  163. package/.next/server/app/chat.html +1 -1
  164. package/.next/server/app/chat.rsc +20 -18
  165. package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +12 -9
  166. package/.next/server/app/chat.segments/_full.segment.rsc +20 -18
  167. package/.next/server/app/chat.segments/_tree.segment.rsc +3 -2
  168. package/.next/server/app/docs.html +1 -1
  169. package/.next/server/app/docs.rsc +20 -18
  170. package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +6 -5
  171. package/.next/server/app/docs.segments/_full.segment.rsc +20 -18
  172. package/.next/server/app/docs.segments/_tree.segment.rsc +3 -2
  173. package/.next/server/app/explorer.html +1 -1
  174. package/.next/server/app/explorer.rsc +20 -18
  175. package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +11 -9
  176. package/.next/server/app/explorer.segments/_full.segment.rsc +20 -18
  177. package/.next/server/app/explorer.segments/_tree.segment.rsc +3 -2
  178. package/.next/server/app/index.html +1 -1
  179. package/.next/server/app/index.rsc +3 -2
  180. package/.next/server/app/index.segments/__PAGE__.segment.rsc +3 -2
  181. package/.next/server/app/index.segments/_full.segment.rsc +3 -2
  182. package/.next/server/app/index.segments/_tree.segment.rsc +3 -2
  183. package/.next/server/app/manual-tests.html +1 -0
  184. package/.next/server/app/manual-tests.meta +31 -0
  185. package/.next/server/app/manual-tests.rsc +31 -0
  186. package/.next/server/app/manual-tests.segments/!KGFwcCk/manual-tests/__PAGE__.segment.rsc +33 -0
  187. package/.next/server/app/manual-tests.segments/_full.segment.rsc +31 -0
  188. package/.next/server/app/manual-tests.segments/_tree.segment.rsc +5 -0
  189. package/.next/server/app/memory.html +1 -1
  190. package/.next/server/app/memory.rsc +20 -18
  191. package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +11 -9
  192. package/.next/server/app/memory.segments/_full.segment.rsc +20 -18
  193. package/.next/server/app/memory.segments/_tree.segment.rsc +3 -2
  194. package/.next/server/app/page.js.nft.json +1 -1
  195. package/.next/server/app/page_client-reference-manifest.js +1 -1
  196. package/.next/server/app/roadmap.html +1 -1
  197. package/.next/server/app/roadmap.rsc +20 -18
  198. package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +6 -5
  199. package/.next/server/app/roadmap.segments/_full.segment.rsc +20 -18
  200. package/.next/server/app/roadmap.segments/_tree.segment.rsc +3 -2
  201. package/.next/server/app/settings.html +1 -1
  202. package/.next/server/app/settings.rsc +20 -18
  203. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +7 -6
  204. package/.next/server/app/settings.segments/_full.segment.rsc +20 -18
  205. package/.next/server/app/settings.segments/_tree.segment.rsc +3 -2
  206. package/.next/server/app/setup.html +1 -1
  207. package/.next/server/app/setup.rsc +20 -18
  208. package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +11 -9
  209. package/.next/server/app/setup.segments/_full.segment.rsc +20 -18
  210. package/.next/server/app/setup.segments/_tree.segment.rsc +3 -2
  211. package/.next/server/app-paths-manifest.json +9 -0
  212. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-5bkpj._.js → 11mp_@anthropic-ai_sdk_00p3fu1._.js} +1 -1
  213. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01l5h3i._.js → 11mp_@anthropic-ai_sdk_01amtux._.js} +1 -1
  214. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00psb_y._.js → 11mp_@anthropic-ai_sdk_01jjl08._.js} +1 -1
  215. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_072r2bd._.js → 11mp_@anthropic-ai_sdk_071zfm8._.js} +1 -1
  216. package/.next/server/chunks/11mp_@anthropic-ai_sdk_07v3boe._.js +3 -0
  217. package/.next/server/chunks/11mp_@anthropic-ai_sdk_09iva72._.js +3 -0
  218. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0bom1b1._.js +3 -0
  219. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0dvji7p._.js +3 -0
  220. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0dzo8jn._.js +3 -0
  221. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hvqsqq._.js +3 -0
  222. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i7i-jw._.js +3 -0
  223. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0k0iop5._.js +3 -0
  224. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l3-6aq._.js +3 -0
  225. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0oegm3y._.js +3 -0
  226. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0p5cyes._.js +3 -0
  227. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qw8i6_._.js +3 -0
  228. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0yk-a7v._.js +3 -0
  229. package/.next/server/chunks/11mp_@anthropic-ai_sdk_11fsqvb._.js +3 -0
  230. package/.next/server/chunks/11mp_@anthropic-ai_sdk_143_7ez._.js +3 -0
  231. package/.next/server/chunks/11mp_@anthropic-ai_sdk_14a4-64._.js +3 -0
  232. package/.next/server/chunks/11mp_@anthropic-ai_sdk_17d_oma._.js +3 -0
  233. package/.next/server/chunks/11mp_@anthropic-ai_sdk_18qwuyb._.js +3 -0
  234. package/.next/server/chunks/11mp_@anthropic-ai_sdk_19au8y6._.js +3 -0
  235. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ak_hy5._.js +3 -0
  236. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1cqa0nq._.js +3 -0
  237. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1i-x_q0._.js +3 -0
  238. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jmtliz._.js +3 -0
  239. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jmtliz._.js.map +1 -0
  240. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jouwlj._.js +3 -0
  241. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1jouwlj._.js.map +1 -0
  242. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1r_q5um._.js +3 -0
  243. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1r_q5um._.js.map +1 -0
  244. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t959xd._.js +3 -0
  245. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t959xd._.js.map +1 -0
  246. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vkprw9._.js +3 -0
  247. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vkprw9._.js.map +1 -0
  248. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y95ax9._.js +3 -0
  249. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y95ax9._.js.map +1 -0
  250. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y9misr._.js +3 -0
  251. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y9misr._.js.map +1 -0
  252. package/.next/server/chunks/11mp_@anthropic-ai_sdk_21b8wwy._.js +3 -0
  253. package/.next/server/chunks/11mp_@anthropic-ai_sdk_21b8wwy._.js.map +1 -0
  254. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_08ecfgc._.js +3 -0
  255. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_09--sd6._.js +3 -0
  256. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0e3mwc6._.js +3 -0
  257. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0go4301._.js +3 -0
  258. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0iq9dmt._.js +3 -0
  259. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0n9ijke._.js +3 -0
  260. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0szcyrx._.js +3 -0
  261. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0xy2s3x._.js +3 -0
  262. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0yaujn7._.js +3 -0
  263. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0z9ly74._.js +3 -0
  264. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hmq3al._.js +3 -0
  265. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1tqk4bp._.js +3 -0
  266. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x-hr6f._.js +3 -0
  267. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1zsdhg0._.js +3 -0
  268. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_20t__fe._.js +3 -0
  269. package/.next/server/chunks/{[root-of-the-server]__1u_q61h._.js → [root-of-the-server]__0-pmfg2._.js} +2 -2
  270. package/.next/server/chunks/[root-of-the-server]__02co2yq._.js +3 -0
  271. package/.next/server/chunks/[root-of-the-server]__02co2yq._.js.map +1 -0
  272. package/.next/server/chunks/{[root-of-the-server]__1y3u5ud._.js → [root-of-the-server]__04tibmn._.js} +2 -2
  273. package/.next/server/chunks/{[root-of-the-server]__17xb02p._.js → [root-of-the-server]__05g5cgo._.js} +2 -2
  274. package/.next/server/chunks/{[root-of-the-server]__0aynzrb._.js → [root-of-the-server]__0b5pwze._.js} +2 -2
  275. package/.next/server/chunks/{[root-of-the-server]__142icjb._.js → [root-of-the-server]__0druay_._.js} +2 -2
  276. package/.next/server/chunks/{[root-of-the-server]__106gpvh._.js → [root-of-the-server]__0p6ja6l._.js} +2 -2
  277. package/.next/server/chunks/[root-of-the-server]__0q3-t8a._.js +3 -0
  278. package/.next/server/chunks/[root-of-the-server]__0q3-t8a._.js.map +1 -0
  279. package/.next/server/chunks/[root-of-the-server]__0vcsqzd._.js +3 -0
  280. package/.next/server/chunks/[root-of-the-server]__0vcsqzd._.js.map +1 -0
  281. package/.next/server/chunks/{[root-of-the-server]__0nfvvy9._.js → [root-of-the-server]__1-e3i_5._.js} +2 -2
  282. package/.next/server/chunks/[root-of-the-server]__1-ic3af._.js +3 -0
  283. package/.next/server/chunks/[root-of-the-server]__1-ic3af._.js.map +1 -0
  284. package/.next/server/chunks/[root-of-the-server]__11a4ptn._.js +3 -0
  285. package/.next/server/chunks/[root-of-the-server]__11a4ptn._.js.map +1 -0
  286. package/.next/server/chunks/{[root-of-the-server]__0e59y5j._.js → [root-of-the-server]__11c8641._.js} +2 -2
  287. package/.next/server/chunks/[root-of-the-server]__12nzy_6._.js +3 -0
  288. package/.next/server/chunks/[root-of-the-server]__12nzy_6._.js.map +1 -0
  289. package/.next/server/chunks/[root-of-the-server]__15ck1wv._.js +3 -0
  290. package/.next/server/chunks/[root-of-the-server]__15ck1wv._.js.map +1 -0
  291. package/.next/server/chunks/[root-of-the-server]__1613hjb._.js +30 -19
  292. package/.next/server/chunks/[root-of-the-server]__1613hjb._.js.map +1 -1
  293. package/.next/server/chunks/{[root-of-the-server]__06zf_sh._.js → [root-of-the-server]__197vw9g._.js} +2 -2
  294. package/.next/server/chunks/{[root-of-the-server]__1j0rrps._.js → [root-of-the-server]__19k8t87._.js} +2 -2
  295. package/.next/server/chunks/{[root-of-the-server]__0eqd-tw._.js → [root-of-the-server]__1ezzeji._.js} +2 -2
  296. package/.next/server/chunks/[root-of-the-server]__1mrmaf9._.js +3 -0
  297. package/.next/server/chunks/{[root-of-the-server]__17p0rkn._.js → [root-of-the-server]__1n68akx._.js} +2 -2
  298. package/.next/server/chunks/[root-of-the-server]__1n68akx._.js.map +1 -0
  299. package/.next/server/chunks/{[root-of-the-server]__11s76m8._.js → [root-of-the-server]__1npya5q._.js} +2 -2
  300. package/.next/server/chunks/[root-of-the-server]__1npya5q._.js.map +1 -0
  301. package/.next/server/chunks/[root-of-the-server]__1qusy4g._.js +3 -0
  302. package/.next/server/chunks/[root-of-the-server]__1qusy4g._.js.map +1 -0
  303. package/.next/server/chunks/{[root-of-the-server]__1q4ahvz._.js → [root-of-the-server]__1umrorf._.js} +2 -2
  304. package/.next/server/chunks/{[root-of-the-server]__093hlkh._.js → [root-of-the-server]__1vh9g2o._.js} +2 -2
  305. package/.next/server/chunks/{[root-of-the-server]__1y-tt29._.js → [root-of-the-server]__1vq38ov._.js} +2 -2
  306. package/.next/server/chunks/[root-of-the-server]__1xb0fmp._.js +1 -1
  307. package/.next/server/chunks/[root-of-the-server]__1xb0fmp._.js.map +1 -1
  308. package/.next/server/chunks/_04byth9._.js +24 -19
  309. package/.next/server/chunks/_04byth9._.js.map +1 -1
  310. package/.next/server/chunks/_1au4syj._.js +1 -1
  311. package/.next/server/chunks/_1au4syj._.js.map +1 -1
  312. package/.next/server/chunks/_1b5fqxy._.js.map +1 -1
  313. package/.next/server/chunks/_1ivswa9._.js +3 -0
  314. package/.next/server/chunks/_1ivswa9._.js.map +1 -0
  315. package/.next/server/chunks/_next-internal_server_app_api_roadmap_restore_route_actions_0skshp1.js +3 -0
  316. package/.next/server/chunks/_next-internal_server_app_api_roadmap_restore_route_actions_0skshp1.js.map +1 -0
  317. package/.next/server/chunks/_next-internal_server_app_api_tasks_bulk_route_actions_1k75mlb.js +3 -0
  318. package/.next/server/chunks/_next-internal_server_app_api_tasks_bulk_route_actions_1k75mlb.js.map +1 -0
  319. package/.next/server/chunks/_next-internal_server_app_api_tasks_delete_route_actions_1k1g6mw.js +3 -0
  320. package/.next/server/chunks/_next-internal_server_app_api_tasks_delete_route_actions_1k1g6mw.js.map +1 -0
  321. package/.next/server/chunks/_next-internal_server_app_api_tasks_manual-tests_route_actions_1rpog0y.js +3 -0
  322. package/.next/server/chunks/_next-internal_server_app_api_tasks_manual-tests_route_actions_1rpog0y.js.map +1 -0
  323. package/.next/server/chunks/_next-internal_server_app_api_tasks_restore_route_actions_1ecsti8.js +3 -0
  324. package/.next/server/chunks/_next-internal_server_app_api_tasks_restore_route_actions_1ecsti8.js.map +1 -0
  325. package/.next/server/chunks/_next-internal_server_app_api_tasks_review_route_actions_1dly07f.js +3 -0
  326. package/.next/server/chunks/_next-internal_server_app_api_tasks_review_route_actions_1dly07f.js.map +1 -0
  327. package/.next/server/chunks/_next-internal_server_app_api_tasks_update_route_actions_0z-ho6g.js +3 -0
  328. package/.next/server/chunks/_next-internal_server_app_api_tasks_update_route_actions_0z-ho6g.js.map +1 -0
  329. package/.next/server/chunks/_next-internal_server_app_api_views_route_actions_10-2c0e.js +3 -0
  330. package/.next/server/chunks/_next-internal_server_app_api_views_route_actions_10-2c0e.js.map +1 -0
  331. package/.next/server/chunks/ssr/0_g__next_dist_000c5_m._.js +3 -0
  332. package/.next/server/chunks/ssr/0_g__next_dist_000c5_m._.js.map +1 -0
  333. package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_0vv_0i3._.js → 0_nd_mermaid_dist_mermaid_core_mjs_027n2yl._.js} +2 -2
  334. package/.next/server/chunks/ssr/0_nd_mermaid_dist_mermaid_core_mjs_027n2yl._.js.map +1 -0
  335. package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_1z0p1bs._.js → 1u84_katex_dist_katex_mjs_1kb5xea._.js} +1 -1
  336. package/.next/server/chunks/ssr/1u84_katex_dist_katex_mjs_1kb5xea._.js.map +1 -0
  337. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_05ggp3i._.js +1 -1
  338. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_05ggp3i._.js.map +1 -1
  339. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0wurouw._.js +3 -0
  340. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0wurouw._.js.map +1 -0
  341. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_14hl50o._.js +3 -0
  342. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_14hl50o._.js.map +1 -0
  343. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_folder-open_mjs_117ipzw._.js +3 -0
  344. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_folder-open_mjs_117ipzw._.js.map +1 -0
  345. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js +3 -0
  346. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js.map +1 -0
  347. package/.next/server/chunks/ssr/[root-of-the-server]__0hcextx._.js +3 -0
  348. package/.next/server/chunks/ssr/[root-of-the-server]__0hcextx._.js.map +1 -0
  349. package/.next/server/chunks/ssr/[root-of-the-server]__0xt_0w2._.js.map +1 -1
  350. package/.next/server/chunks/ssr/_04xff_2._.js +1 -1
  351. package/.next/server/chunks/ssr/_04xff_2._.js.map +1 -1
  352. package/.next/server/chunks/ssr/_071j6mr._.js +4 -0
  353. package/.next/server/chunks/ssr/_071j6mr._.js.map +1 -0
  354. package/.next/server/chunks/ssr/_09b02z-._.js +3 -0
  355. package/.next/server/chunks/ssr/_09b02z-._.js.map +1 -0
  356. package/.next/server/chunks/ssr/_0d0f1s1._.js +3 -0
  357. package/.next/server/chunks/ssr/_0d0f1s1._.js.map +1 -0
  358. package/.next/server/chunks/ssr/_0idb-vo._.js +151 -0
  359. package/.next/server/chunks/ssr/_0idb-vo._.js.map +1 -0
  360. package/.next/server/chunks/ssr/_0lnt_va._.js +4 -0
  361. package/.next/server/chunks/ssr/_0lnt_va._.js.map +1 -0
  362. package/.next/server/chunks/ssr/_0qlymco._.js +3 -0
  363. package/.next/server/chunks/ssr/_0qlymco._.js.map +1 -0
  364. package/.next/server/chunks/ssr/_0qp3gu7._.js +3 -0
  365. package/.next/server/chunks/ssr/_0qp3gu7._.js.map +1 -0
  366. package/.next/server/chunks/ssr/_0sg1oeq._.js +3 -0
  367. package/.next/server/chunks/ssr/_0sg1oeq._.js.map +1 -0
  368. package/.next/server/chunks/ssr/_14emfpq._.js +3 -0
  369. package/.next/server/chunks/ssr/_14emfpq._.js.map +1 -0
  370. package/.next/server/chunks/ssr/_1ftruw6._.js +4 -0
  371. package/.next/server/chunks/ssr/_1ftruw6._.js.map +1 -0
  372. package/.next/server/chunks/ssr/_1gxjjvh._.js +1 -1
  373. package/.next/server/chunks/ssr/_1gxjjvh._.js.map +1 -1
  374. package/.next/server/chunks/ssr/_1ncdakv._.js +4 -0
  375. package/.next/server/chunks/ssr/_1ncdakv._.js.map +1 -0
  376. package/.next/server/chunks/ssr/_1t76zdx._.js +3 -0
  377. package/.next/server/chunks/ssr/_1t76zdx._.js.map +1 -0
  378. package/.next/server/chunks/ssr/_1x7ggg5._.js +4 -0
  379. package/.next/server/chunks/ssr/_1x7ggg5._.js.map +1 -0
  380. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_manual-tests_page_actions_1g5zjb7.js +3 -0
  381. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_manual-tests_page_actions_1g5zjb7.js.map +1 -0
  382. package/.next/server/chunks/ssr/{node_modules__pnpm_04khl_s._.js → node_modules__pnpm_01bjcv9._.js} +1 -1
  383. package/.next/server/chunks/ssr/{node_modules__pnpm_08sqeu2._.js → node_modules__pnpm_03qrzdb._.js} +1 -1
  384. package/.next/server/chunks/ssr/{node_modules__pnpm_104pzhc._.js → node_modules__pnpm_06d-fdo._.js} +2 -2
  385. package/.next/server/chunks/ssr/{node_modules__pnpm_1xzf8g_._.js → node_modules__pnpm_0ctisl0._.js} +1 -1
  386. package/.next/server/chunks/ssr/{node_modules__pnpm_0og06fy._.js → node_modules__pnpm_0fwp8jm._.js} +1 -1
  387. package/.next/server/chunks/ssr/{node_modules__pnpm_0a9b2ei._.js → node_modules__pnpm_0kpu0-2._.js} +1 -1
  388. package/.next/server/chunks/ssr/{node_modules__pnpm_0jpv2b6._.js → node_modules__pnpm_0vry74x._.js} +2 -2
  389. package/.next/server/chunks/ssr/{node_modules__pnpm_0fd3pr1._.js → node_modules__pnpm_0ycbjbd._.js} +2 -2
  390. package/.next/server/chunks/ssr/{node_modules__pnpm_1l8k8w1._.js → node_modules__pnpm_1-76qxg._.js} +1 -1
  391. package/.next/server/chunks/ssr/{node_modules__pnpm_0ah02mu._.js → node_modules__pnpm_1-r94f7._.js} +1 -1
  392. package/.next/server/chunks/ssr/{node_modules__pnpm_1yq90z7._.js → node_modules__pnpm_14piqi4._.js} +1 -1
  393. package/.next/server/chunks/ssr/node_modules__pnpm_14piqi4._.js.map +1 -0
  394. package/.next/server/chunks/ssr/{node_modules__pnpm_0dwi7mu._.js → node_modules__pnpm_16u1vfb._.js} +2 -2
  395. package/.next/server/chunks/ssr/node_modules__pnpm_16u1vfb._.js.map +1 -0
  396. package/.next/server/chunks/ssr/{node_modules__pnpm_0f77_ng._.js → node_modules__pnpm_17i6z2d._.js} +1 -1
  397. package/.next/server/chunks/ssr/{node_modules__pnpm_09_i2jk._.js → node_modules__pnpm_189m48n._.js} +1 -1
  398. package/.next/server/chunks/ssr/node_modules__pnpm_189m48n._.js.map +1 -0
  399. package/.next/server/chunks/ssr/{node_modules__pnpm_0ttvopp._.js → node_modules__pnpm_192f222._.js} +1 -1
  400. package/.next/server/chunks/ssr/{node_modules__pnpm_07t_e8c._.js → node_modules__pnpm_1a48_nl._.js} +1 -1
  401. package/.next/server/chunks/ssr/{node_modules__pnpm_195j8p_._.js → node_modules__pnpm_1aa37e1._.js} +1 -1
  402. package/.next/server/chunks/ssr/{node_modules__pnpm_0cj8ryj._.js → node_modules__pnpm_1f440kx._.js} +1 -1
  403. package/.next/server/chunks/ssr/{node_modules__pnpm_0u3u82f._.js → node_modules__pnpm_1fn3ejy._.js} +1 -1
  404. package/.next/server/chunks/ssr/{node_modules__pnpm_0ts89ne._.js → node_modules__pnpm_1min2jl._.js} +1 -1
  405. package/.next/server/chunks/ssr/node_modules__pnpm_1q89l7p._.js +3 -0
  406. package/.next/server/chunks/ssr/node_modules__pnpm_1q89l7p._.js.map +1 -0
  407. package/.next/server/chunks/ssr/{node_modules__pnpm_1woddr6._.js → node_modules__pnpm_1q_hhr3._.js} +2 -2
  408. package/.next/server/chunks/ssr/{node_modules__pnpm_1x0t5_z._.js → node_modules__pnpm_1qmkxyo._.js} +1 -1
  409. package/.next/server/chunks/ssr/{node_modules__pnpm_0gifu-u._.js → node_modules__pnpm_1qp_jvj._.js} +2 -2
  410. package/.next/server/chunks/ssr/{node_modules__pnpm_0y35hs4._.js → node_modules__pnpm_1ssjj4u._.js} +1 -1
  411. package/.next/server/chunks/ssr/{node_modules__pnpm_0qc3gsk._.js → node_modules__pnpm_1txccoj._.js} +1 -1
  412. package/.next/server/chunks/ssr/{node_modules__pnpm_1w0f1m5._.js → node_modules__pnpm_1uwkcin._.js} +1 -1
  413. package/.next/server/chunks/ssr/node_modules__pnpm_1xeothw._.js +3 -0
  414. package/.next/server/chunks/ssr/node_modules__pnpm_1xeothw._.js.map +1 -0
  415. package/.next/server/chunks/ssr/{node_modules__pnpm_0286-tg._.js → node_modules__pnpm_1ygal0c._.js} +1 -1
  416. package/.next/server/chunks/ssr/src_app_(app)_activity_page_tsx_13jd6bn._.js +1 -1
  417. package/.next/server/chunks/ssr/src_app_(app)_activity_page_tsx_13jd6bn._.js.map +1 -1
  418. package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js +3 -0
  419. package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js.map +1 -0
  420. package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js +1 -1
  421. package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js.map +1 -1
  422. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js +1 -1
  423. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js.map +1 -1
  424. package/.next/server/chunks/ssr/src_app_(app)_manual-tests_page_tsx_01tnunf._.js +3 -0
  425. package/.next/server/chunks/ssr/src_app_(app)_manual-tests_page_tsx_01tnunf._.js.map +1 -0
  426. package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js +2 -2
  427. package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js.map +1 -1
  428. package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js +2 -2
  429. package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js.map +1 -1
  430. package/.next/server/chunks/ssr/src_app_(app)_setup_page_tsx_1yids_n._.js +1 -1
  431. package/.next/server/chunks/ssr/src_app_(app)_setup_page_tsx_1yids_n._.js.map +1 -1
  432. package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js +3 -0
  433. package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js.map +1 -0
  434. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js +2 -2
  435. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js.map +1 -1
  436. package/.next/server/middleware-build-manifest.js +3 -3
  437. package/.next/server/next-font-manifest.js +1 -1
  438. package/.next/server/next-font-manifest.json +4 -0
  439. package/.next/server/pages/404.html +1 -1
  440. package/.next/server/pages/500.html +1 -1
  441. package/.next/server/prefetch-hints.json +19 -0
  442. package/.next/server/server-reference-manifest.js +1 -1
  443. package/.next/server/server-reference-manifest.json +1 -1
  444. package/.next/static/chunks/02cj5_i9np4sg.js +3 -0
  445. package/.next/static/chunks/02i5hsdat1nuq.css +9 -0
  446. package/.next/static/chunks/0mgifb98wbesa.js +1 -0
  447. package/.next/static/chunks/0p1-hkgnm2ll2.js +1 -0
  448. package/.next/static/chunks/0pgu5q5vodev6.js +1 -0
  449. package/.next/static/chunks/0rqzvayflendx.js +2 -0
  450. package/.next/static/chunks/0vcfs7dii85tw.js +21 -0
  451. package/.next/static/chunks/13l4l-boqg8fx.js +1 -0
  452. package/.next/static/chunks/14hxe1qiaram9.js +1 -0
  453. package/.next/static/chunks/150y5rwg6gwvx.css +1 -0
  454. package/.next/static/chunks/16k196zyl-n9q.js +1 -0
  455. package/.next/static/chunks/18b5l8p0vd9f8.js +1 -0
  456. package/.next/static/chunks/1c_8t2kecjnua.js +1 -0
  457. package/.next/static/chunks/1fd43t9y42wd3.js +1 -0
  458. package/.next/static/chunks/1q50zh5z-fq2k.js +2 -0
  459. package/.next/static/chunks/1tu8lforstp1o.js +1 -0
  460. package/.next/static/chunks/23-xknrz6o748.js +1 -0
  461. package/.next/static/chunks/2_xpm7qhr69n8.js +2 -0
  462. package/.next/static/chunks/2ls_yp4-qgb42.js +1 -0
  463. package/.next/static/chunks/2zz0ip2l_29c3.js +3 -0
  464. package/.next/static/chunks/3ly7b47esdb7j.js +1 -0
  465. package/.next/static/chunks/3ruw8lu2_re-h.js +1 -0
  466. package/.next/static/chunks/3vf5nnd4xjo5_.js +1 -0
  467. package/.next/static/chunks/40jaenrnspnlh.js +68 -0
  468. package/.next/static/chunks/41oxcdcw-pcwt.js +1 -0
  469. package/README.md +2 -1
  470. package/package.json +1 -1
  471. package/skills/work-epic/SKILL.md +22 -3
  472. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0am8bw2._.js +0 -3
  473. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0enefn6._.js +0 -3
  474. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0k3n_5f._.js +0 -3
  475. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0lcfjm4._.js +0 -3
  476. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0lfx9av._.js +0 -3
  477. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qau3qw._.js +0 -3
  478. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0r1pmvm._.js +0 -3
  479. package/.next/server/chunks/11mp_@anthropic-ai_sdk_11t-z2t._.js +0 -3
  480. package/.next/server/chunks/11mp_@anthropic-ai_sdk_15hyn79._.js +0 -3
  481. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_qk07x._.js +0 -3
  482. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1b2929e._.js +0 -3
  483. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1e72c89._.js +0 -3
  484. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1eq7asn._.js +0 -3
  485. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fhdojs._.js +0 -3
  486. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1htgzmb._.js +0 -3
  487. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lh_vwq._.js +0 -3
  488. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ludf-o._.js +0 -3
  489. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1m3luz3._.js +0 -3
  490. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1x1iz3d._.js +0 -3
  491. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1xsmwlh._.js +0 -3
  492. package/.next/server/chunks/11mp_@anthropic-ai_sdk_202spah._.js +0 -3
  493. package/.next/server/chunks/11mp_@anthropic-ai_sdk_215hw9u._.js +0 -3
  494. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0d2_lq6._.js +0 -3
  495. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0n-i0pd._.js +0 -3
  496. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13pos4j._.js +0 -3
  497. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_17b4pqr._.js +0 -3
  498. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1bkcmom._.js +0 -3
  499. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1hlj_3l._.js +0 -3
  500. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ip-sor._.js +0 -3
  501. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1pex5o1._.js +0 -3
  502. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1s8lc8_._.js +0 -3
  503. package/.next/server/chunks/[root-of-the-server]__1o4a-4j._.js +0 -3
  504. package/.next/server/chunks/[root-of-the-server]__1o4a-4j._.js.map +0 -1
  505. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0cvmffy._.js +0 -3
  506. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0cvmffy._.js.map +0 -1
  507. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0u3jxas._.js +0 -3
  508. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0u3jxas._.js.map +0 -1
  509. package/.next/server/chunks/ssr/_059qmur._.js +0 -3
  510. package/.next/server/chunks/ssr/_059qmur._.js.map +0 -1
  511. package/.next/server/chunks/ssr/_081irea._.js +0 -3
  512. package/.next/server/chunks/ssr/_081irea._.js.map +0 -1
  513. package/.next/server/chunks/ssr/_0d8t8l4._.js +0 -3
  514. package/.next/server/chunks/ssr/_0d8t8l4._.js.map +0 -1
  515. package/.next/server/chunks/ssr/_0dyvcdg._.js +0 -3
  516. package/.next/server/chunks/ssr/_0dyvcdg._.js.map +0 -1
  517. package/.next/server/chunks/ssr/_1-ghqy4._.js +0 -3
  518. package/.next/server/chunks/ssr/_1-ghqy4._.js.map +0 -1
  519. package/.next/server/chunks/ssr/_17jy5db._.js +0 -3
  520. package/.next/server/chunks/ssr/_17jy5db._.js.map +0 -1
  521. package/.next/server/chunks/ssr/_1c95ems._.js +0 -151
  522. package/.next/server/chunks/ssr/_1c95ems._.js.map +0 -1
  523. package/.next/server/chunks/ssr/_1dllfz5._.js +0 -4
  524. package/.next/server/chunks/ssr/_1dllfz5._.js.map +0 -1
  525. package/.next/server/chunks/ssr/node_modules__pnpm_006_c8z._.js +0 -3
  526. package/.next/server/chunks/ssr/node_modules__pnpm_006_c8z._.js.map +0 -1
  527. package/.next/server/chunks/ssr/node_modules__pnpm_1imm4ut._.js +0 -3
  528. package/.next/server/chunks/ssr/node_modules__pnpm_1imm4ut._.js.map +0 -1
  529. package/.next/server/chunks/ssr/node_modules__pnpm_1kcnkjs._.js +0 -3
  530. package/.next/server/chunks/ssr/node_modules__pnpm_1kcnkjs._.js.map +0 -1
  531. package/.next/server/chunks/ssr/src_components_14pwej-._.js +0 -3
  532. package/.next/server/chunks/ssr/src_components_14pwej-._.js.map +0 -1
  533. package/.next/server/chunks/ssr/src_components_ui_scroll-area_tsx_0i-n_27._.js +0 -3
  534. package/.next/server/chunks/ssr/src_components_ui_scroll-area_tsx_0i-n_27._.js.map +0 -1
  535. package/.next/static/chunks/0-z7kyblalrea.js +0 -1
  536. package/.next/static/chunks/050mq8l4e1ubn.js +0 -1
  537. package/.next/static/chunks/098le48845_fg.js +0 -3
  538. package/.next/static/chunks/0cw4-ebkoufdc.js +0 -1
  539. package/.next/static/chunks/0feo-go1w5nct.js +0 -1
  540. package/.next/static/chunks/0k2qhx29amdgs.js +0 -1
  541. package/.next/static/chunks/14sefb904pl64.js +0 -21
  542. package/.next/static/chunks/1fer-wulyrjrs.js +0 -3
  543. package/.next/static/chunks/1o7b1x4umy8a6.js +0 -1
  544. package/.next/static/chunks/1q_io1j58aukw.js +0 -1
  545. package/.next/static/chunks/1r7z33e9jk3vp.js +0 -1
  546. package/.next/static/chunks/1t-cgh4477hfo.js +0 -1
  547. package/.next/static/chunks/1u-1po1qesc9f.js +0 -1
  548. package/.next/static/chunks/1u5kegkgm0xoz.js +0 -1
  549. package/.next/static/chunks/24ygzsgd-moqy.js +0 -1
  550. package/.next/static/chunks/26folxgplfa9t.js +0 -68
  551. package/.next/static/chunks/2ocixvjhv34_3.js +0 -1
  552. package/.next/static/chunks/3_lsdgxa-h7ma.css +0 -10
  553. package/.next/static/chunks/3rmv-sb9w9i3e.js +0 -1
  554. package/.next/static/chunks/3smp1lj103j-l.js +0 -1
  555. package/.next/static/chunks/3ttzomivj48jh.js +0 -2
  556. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-5bkpj._.js.map → 11mp_@anthropic-ai_sdk_00p3fu1._.js.map} +0 -0
  557. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00psb_y._.js.map → 11mp_@anthropic-ai_sdk_01amtux._.js.map} +0 -0
  558. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01l5h3i._.js.map → 11mp_@anthropic-ai_sdk_01jjl08._.js.map} +0 -0
  559. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_072r2bd._.js.map → 11mp_@anthropic-ai_sdk_071zfm8._.js.map} +0 -0
  560. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0am8bw2._.js.map → 11mp_@anthropic-ai_sdk_07v3boe._.js.map} +0 -0
  561. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0enefn6._.js.map → 11mp_@anthropic-ai_sdk_09iva72._.js.map} +0 -0
  562. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0k3n_5f._.js.map → 11mp_@anthropic-ai_sdk_0bom1b1._.js.map} +0 -0
  563. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0lcfjm4._.js.map → 11mp_@anthropic-ai_sdk_0dvji7p._.js.map} +0 -0
  564. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0lfx9av._.js.map → 11mp_@anthropic-ai_sdk_0dzo8jn._.js.map} +0 -0
  565. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0qau3qw._.js.map → 11mp_@anthropic-ai_sdk_0hvqsqq._.js.map} +0 -0
  566. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0r1pmvm._.js.map → 11mp_@anthropic-ai_sdk_0i7i-jw._.js.map} +0 -0
  567. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_11t-z2t._.js.map → 11mp_@anthropic-ai_sdk_0k0iop5._.js.map} +0 -0
  568. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_15hyn79._.js.map → 11mp_@anthropic-ai_sdk_0l3-6aq._.js.map} +0 -0
  569. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1_qk07x._.js.map → 11mp_@anthropic-ai_sdk_0oegm3y._.js.map} +0 -0
  570. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1b2929e._.js.map → 11mp_@anthropic-ai_sdk_0p5cyes._.js.map} +0 -0
  571. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1e72c89._.js.map → 11mp_@anthropic-ai_sdk_0qw8i6_._.js.map} +0 -0
  572. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1eq7asn._.js.map → 11mp_@anthropic-ai_sdk_0yk-a7v._.js.map} +0 -0
  573. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1fhdojs._.js.map → 11mp_@anthropic-ai_sdk_11fsqvb._.js.map} +0 -0
  574. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1htgzmb._.js.map → 11mp_@anthropic-ai_sdk_143_7ez._.js.map} +0 -0
  575. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1lh_vwq._.js.map → 11mp_@anthropic-ai_sdk_14a4-64._.js.map} +0 -0
  576. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ludf-o._.js.map → 11mp_@anthropic-ai_sdk_17d_oma._.js.map} +0 -0
  577. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1m3luz3._.js.map → 11mp_@anthropic-ai_sdk_18qwuyb._.js.map} +0 -0
  578. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1x1iz3d._.js.map → 11mp_@anthropic-ai_sdk_19au8y6._.js.map} +0 -0
  579. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1xsmwlh._.js.map → 11mp_@anthropic-ai_sdk_1ak_hy5._.js.map} +0 -0
  580. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_202spah._.js.map → 11mp_@anthropic-ai_sdk_1cqa0nq._.js.map} +0 -0
  581. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_215hw9u._.js.map → 11mp_@anthropic-ai_sdk_1i-x_q0._.js.map} +0 -0
  582. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0d2_lq6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_08ecfgc._.js.map} +0 -0
  583. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0n-i0pd._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_09--sd6._.js.map} +0 -0
  584. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_13pos4j._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0e3mwc6._.js.map} +0 -0
  585. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_17b4pqr._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0go4301._.js.map} +0 -0
  586. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1bkcmom._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0iq9dmt._.js.map} +0 -0
  587. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1hlj_3l._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0n9ijke._.js.map} +0 -0
  588. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1ip-sor._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0szcyrx._.js.map} +0 -0
  589. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1pex5o1._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0xy2s3x._.js.map} +0 -0
  590. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1s8lc8_._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0yaujn7._.js.map} +0 -0
  591. /package/.next/server/chunks/{[root-of-the-server]__0e59y5j._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0z9ly74._.js.map} +0 -0
  592. /package/.next/server/chunks/{[root-of-the-server]__11s76m8._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1hmq3al._.js.map} +0 -0
  593. /package/.next/server/chunks/{ssr/0_nd_mermaid_dist_mermaid_core_mjs_0vv_0i3._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1tqk4bp._.js.map} +0 -0
  594. /package/.next/server/chunks/{ssr/1u84_katex_dist_katex_mjs_1z0p1bs._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1x-hr6f._.js.map} +0 -0
  595. /package/.next/server/chunks/{ssr/node_modules__pnpm_09_i2jk._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1zsdhg0._.js.map} +0 -0
  596. /package/.next/server/chunks/{ssr/node_modules__pnpm_0dwi7mu._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_20t__fe._.js.map} +0 -0
  597. /package/.next/server/chunks/{[root-of-the-server]__1u_q61h._.js.map → [root-of-the-server]__0-pmfg2._.js.map} +0 -0
  598. /package/.next/server/chunks/{[root-of-the-server]__1y3u5ud._.js.map → [root-of-the-server]__04tibmn._.js.map} +0 -0
  599. /package/.next/server/chunks/{[root-of-the-server]__17xb02p._.js.map → [root-of-the-server]__05g5cgo._.js.map} +0 -0
  600. /package/.next/server/chunks/{[root-of-the-server]__0aynzrb._.js.map → [root-of-the-server]__0b5pwze._.js.map} +0 -0
  601. /package/.next/server/chunks/{[root-of-the-server]__142icjb._.js.map → [root-of-the-server]__0druay_._.js.map} +0 -0
  602. /package/.next/server/chunks/{[root-of-the-server]__106gpvh._.js.map → [root-of-the-server]__0p6ja6l._.js.map} +0 -0
  603. /package/.next/server/chunks/{[root-of-the-server]__0nfvvy9._.js.map → [root-of-the-server]__1-e3i_5._.js.map} +0 -0
  604. /package/.next/server/chunks/{ssr/node_modules__pnpm_1yq90z7._.js.map → [root-of-the-server]__11c8641._.js.map} +0 -0
  605. /package/.next/server/chunks/{[root-of-the-server]__06zf_sh._.js.map → [root-of-the-server]__197vw9g._.js.map} +0 -0
  606. /package/.next/server/chunks/{[root-of-the-server]__1j0rrps._.js.map → [root-of-the-server]__19k8t87._.js.map} +0 -0
  607. /package/.next/server/chunks/{[root-of-the-server]__0eqd-tw._.js.map → [root-of-the-server]__1ezzeji._.js.map} +0 -0
  608. /package/.next/server/chunks/{[root-of-the-server]__17p0rkn._.js.map → [root-of-the-server]__1mrmaf9._.js.map} +0 -0
  609. /package/.next/server/chunks/{[root-of-the-server]__1q4ahvz._.js.map → [root-of-the-server]__1umrorf._.js.map} +0 -0
  610. /package/.next/server/chunks/{[root-of-the-server]__093hlkh._.js.map → [root-of-the-server]__1vh9g2o._.js.map} +0 -0
  611. /package/.next/server/chunks/{[root-of-the-server]__1y-tt29._.js.map → [root-of-the-server]__1vq38ov._.js.map} +0 -0
  612. /package/.next/server/chunks/ssr/{node_modules__pnpm_04khl_s._.js.map → node_modules__pnpm_01bjcv9._.js.map} +0 -0
  613. /package/.next/server/chunks/ssr/{node_modules__pnpm_08sqeu2._.js.map → node_modules__pnpm_03qrzdb._.js.map} +0 -0
  614. /package/.next/server/chunks/ssr/{node_modules__pnpm_104pzhc._.js.map → node_modules__pnpm_06d-fdo._.js.map} +0 -0
  615. /package/.next/server/chunks/ssr/{node_modules__pnpm_1xzf8g_._.js.map → node_modules__pnpm_0ctisl0._.js.map} +0 -0
  616. /package/.next/server/chunks/ssr/{node_modules__pnpm_0og06fy._.js.map → node_modules__pnpm_0fwp8jm._.js.map} +0 -0
  617. /package/.next/server/chunks/ssr/{node_modules__pnpm_0a9b2ei._.js.map → node_modules__pnpm_0kpu0-2._.js.map} +0 -0
  618. /package/.next/server/chunks/ssr/{node_modules__pnpm_0jpv2b6._.js.map → node_modules__pnpm_0vry74x._.js.map} +0 -0
  619. /package/.next/server/chunks/ssr/{node_modules__pnpm_0fd3pr1._.js.map → node_modules__pnpm_0ycbjbd._.js.map} +0 -0
  620. /package/.next/server/chunks/ssr/{node_modules__pnpm_1l8k8w1._.js.map → node_modules__pnpm_1-76qxg._.js.map} +0 -0
  621. /package/.next/server/chunks/ssr/{node_modules__pnpm_0ah02mu._.js.map → node_modules__pnpm_1-r94f7._.js.map} +0 -0
  622. /package/.next/server/chunks/ssr/{node_modules__pnpm_0f77_ng._.js.map → node_modules__pnpm_17i6z2d._.js.map} +0 -0
  623. /package/.next/server/chunks/ssr/{node_modules__pnpm_0ttvopp._.js.map → node_modules__pnpm_192f222._.js.map} +0 -0
  624. /package/.next/server/chunks/ssr/{node_modules__pnpm_07t_e8c._.js.map → node_modules__pnpm_1a48_nl._.js.map} +0 -0
  625. /package/.next/server/chunks/ssr/{node_modules__pnpm_195j8p_._.js.map → node_modules__pnpm_1aa37e1._.js.map} +0 -0
  626. /package/.next/server/chunks/ssr/{node_modules__pnpm_0cj8ryj._.js.map → node_modules__pnpm_1f440kx._.js.map} +0 -0
  627. /package/.next/server/chunks/ssr/{node_modules__pnpm_0u3u82f._.js.map → node_modules__pnpm_1fn3ejy._.js.map} +0 -0
  628. /package/.next/server/chunks/ssr/{node_modules__pnpm_0ts89ne._.js.map → node_modules__pnpm_1min2jl._.js.map} +0 -0
  629. /package/.next/server/chunks/ssr/{node_modules__pnpm_1woddr6._.js.map → node_modules__pnpm_1q_hhr3._.js.map} +0 -0
  630. /package/.next/server/chunks/ssr/{node_modules__pnpm_1x0t5_z._.js.map → node_modules__pnpm_1qmkxyo._.js.map} +0 -0
  631. /package/.next/server/chunks/ssr/{node_modules__pnpm_0gifu-u._.js.map → node_modules__pnpm_1qp_jvj._.js.map} +0 -0
  632. /package/.next/server/chunks/ssr/{node_modules__pnpm_0y35hs4._.js.map → node_modules__pnpm_1ssjj4u._.js.map} +0 -0
  633. /package/.next/server/chunks/ssr/{node_modules__pnpm_0qc3gsk._.js.map → node_modules__pnpm_1txccoj._.js.map} +0 -0
  634. /package/.next/server/chunks/ssr/{node_modules__pnpm_1w0f1m5._.js.map → node_modules__pnpm_1uwkcin._.js.map} +0 -0
  635. /package/.next/server/chunks/ssr/{node_modules__pnpm_0286-tg._.js.map → node_modules__pnpm_1ygal0c._.js.map} +0 -0
  636. /package/.next/static/{uJ5RYxgFnE5svAvnuLDXN → fGPda81_8-K4GmaNUE6KA}/_buildManifest.js +0 -0
  637. /package/.next/static/{uJ5RYxgFnE5svAvnuLDXN → fGPda81_8-K4GmaNUE6KA}/_clientMiddlewareManifest.js +0 -0
  638. /package/.next/static/{uJ5RYxgFnE5svAvnuLDXN → fGPda81_8-K4GmaNUE6KA}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ module.exports=[712125,544428,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(498053),f=a.i(256857);let g={name:"arrow-up-right",size:24,node:[["path",{d:"M7 7h10v10",key:"1tivn9"}],["path",{d:"M7 17 17 7",key:"1vkiza"}]]};g.node;let h=(0,f.default)(g);a.s(["ArrowUpRight",0,h],544428);let i={name:"maximize-2",size:24,node:[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]};i.node;let j=(0,f.default)(i),k={name:"square",size:24,node:[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]};k.node;let l=(0,f.default)(k);var m=a.i(28386),n=a.i(544394),o=a.i(685698),p=a.i(149350),q=a.i(368114),r=a.i(107742);function s({proposal:a,onResolve:d}){let{rootParam:e,openDoc:f}=(0,n.useApp)(),[g,h]=(0,c.useState)(null),[i,j]=(0,c.useState)(null),[k,l]=(0,c.useState)(!1);(0,c.useEffect)(()=>{fetch(`/api/docs${e}&read=${encodeURIComponent(a.path)}`).then(a=>a.ok?a.json():null).then(b=>h(b?.path===a.path.replace(/^\.\//,"")&&"string"==typeof b.content?b.content:"")).catch(()=>h(""))},[a.path,e]);let m=(0,c.useMemo)(()=>null===g?null:function(a,b){let c=a;for(let[a,d]of b.entries()){if("string"!=typeof d?.old_string||"string"!=typeof d?.new_string)return{error:`Edit ${a+1}: old_string and new_string must be strings`};if(""===d.old_string){if(""!==c)return{error:`Edit ${a+1}: empty old_string is only allowed for a new, empty doc`};c=d.new_string;continue}let b=c.indexOf(d.old_string);if(-1===b)return{error:`Edit ${a+1}: old_string not found in the doc`};if(-1!==c.indexOf(d.old_string,b+1))return{error:`Edit ${a+1}: old_string matches more than once; include more surrounding text`};c=c.slice(0,b)+d.new_string+c.slice(b+d.old_string.length)}return{content:c}}(g,a.edits),[g,a.edits]),o=null!==m&&"error"in m?m.error:null,p=(0,c.useMemo)(()=>{var a;let b,c;return null===g||!m||"error"in m?[]:(b=(a=function(a,b){let c=a.split("\n"),d=b.split("\n"),e=0;for(;e<c.length&&e<d.length&&c[e]===d[e];)e++;let f=c.length,g=d.length;for(;f>e&&g>e&&c[f-1]===d[g-1];)f--,g--;let h=c.slice(e,f),i=d.slice(e,g),j=Array.from({length:h.length+1},()=>Array(i.length+1).fill(0));for(let a=h.length-1;a>=0;a--)for(let b=i.length-1;b>=0;b--)j[a][b]=h[a]===i[b]?j[a+1][b+1]+1:Math.max(j[a+1][b],j[a][b+1]);let k=[],l=0,m=0;for(;l<h.length||m<i.length;)l<h.length&&m<i.length&&h[l]===i[m]?(k.push({op:" ",text:h[l]}),l++,m++):l<h.length&&(m===i.length||j[l+1][m]>=j[l][m+1])?(k.push({op:"-",text:h[l]}),l++):(k.push({op:"+",text:i[m]}),m++);return[...c.slice(0,e).map(a=>({op:" ",text:a})),...k,...c.slice(f).map(a=>({op:" ",text:a}))]}(g,m.content)).map(()=>!1),a.forEach((c,d)=>{if(" "!==c.op)for(let c=Math.max(0,d-2);c<=Math.min(a.length-1,d+2);c++)b[c]=!0}),c=[],a.forEach((a,d)=>{b[d]?c.push(a):"number"==typeof c[c.length-1]?c[c.length-1]=c[c.length-1]+1:c.push(1)}),c)},[g,m]),r=p.filter(a=>"number"!=typeof a&&"+"===a.op).length,t=p.filter(a=>"number"!=typeof a&&"-"===a.op).length;async function u(){l(!0),j(null);try{let b=await fetch(`/api/docs${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:a.path,edits:a.edits,actor:"ai"})});if(!b.ok)throw Error((await b.json().catch(()=>null))?.error??"Save failed");d("accepted")}catch(a){j(a.message)}finally{l(!1)}}return(0,b.jsxs)("div",{className:"my-2 rounded-md border border-border overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 bg-surface2 border-b border-border",children:[(0,b.jsx)("button",{onClick:()=>f(a.path),className:"text-xs font-mono text-accent truncate hover:underline",title:a.path,children:a.path}),(0,b.jsxs)("span",{className:"text-[10px] font-mono text-teal-400",children:["+",r]}),(0,b.jsxs)("span",{className:"text-[10px] font-mono text-red-400",children:["-",t]})]}),a.summary&&(0,b.jsx)("div",{className:"px-2 py-1 text-xs text-muted border-b border-border",children:a.summary}),(0,b.jsxs)("div",{className:"max-h-72 overflow-auto text-[11px] font-mono leading-5",children:[null===g&&(0,b.jsx)("div",{className:"px-2 py-1 text-muted",children:"Loading diff…"}),o&&(0,b.jsxs)("div",{className:"px-2 py-1 text-red-400",children:["Doc changed since this proposal (",o,"). Ask the agent to propose again."]}),null!==g&&!o&&0===p.length&&(0,b.jsx)("div",{className:"px-2 py-1 text-muted",children:"No changes"}),p.map((a,c)=>"number"==typeof a?(0,b.jsxs)("div",{className:"px-2 text-muted bg-surface2/50",children:["⋯ ",a," unchanged line",a>1?"s":""]},c):(0,b.jsxs)("div",{className:(0,q.cn)("px-2 whitespace-pre-wrap break-words","+"===a.op&&"bg-teal-500/10 text-teal-300","-"===a.op&&"bg-red-500/10 text-red-300 line-through decoration-red-400/40"),children:[a.op," ",a.text||" "]},c))]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 border-t border-border",children:["pending"===a.status?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("button",{onClick:u,disabled:k||null===g||!!o,className:"text-xs px-2 py-0.5 rounded-sm bg-accent/20 text-accent hover:bg-accent/30 disabled:opacity-50",children:k?"Applying…":"Accept"}),(0,b.jsx)("button",{onClick:()=>d("rejected"),disabled:k,className:"text-xs px-2 py-0.5 rounded-sm text-muted hover:text-txt",children:"Reject"})]}):(0,b.jsx)("span",{className:(0,q.cn)("text-xs","accepted"===a.status?"text-teal-400":"text-muted"),children:"accepted"===a.status?"✓ Applied":"Rejected"}),i&&(0,b.jsx)("span",{className:"text-xs text-red-400 truncate",children:i})]})]})}function t({proposal:a,onResolve:d}){let{rootParam:e,openDoc:f}=(0,n.useApp)(),g=a.plan,h="breakdown"===g.kind?g.tasks:[],i="roadmap"===g.kind?g.horizons??[]:[],j="roadmap"===g.kind?g.epics??[]:[],k="breakdown"===g.kind?(g.epic??"").trim().toUpperCase():"",l="breakdown"===g.kind?g.newEpic:void 0,[m,o]=(0,c.useState)(new Map),[p,q]=(0,c.useState)(new Set),[r,s]=(0,c.useState)(null),[v,w]=(0,c.useState)(null),[x,y]=(0,c.useState)(!1);(0,c.useEffect)(()=>{fetch(`/api/roadmap${e}`).then(a=>a.ok?a.json():null).then(a=>o(new Map((a?.items??[]).map(a=>[a.id,a.title])))).catch(()=>o(new Map))},[e]);let z=("breakdown"===g.kind?h.map(a=>a.key):[...i,...j].map(a=>a.key)).filter(a=>!p.has(a)),A="pending"===a.status,B=new Set(i.map(a=>a.key)),C=(a,c,d,e,f=!1)=>(0,b.jsx)(u,{rowKey:a,title:c,meta:d,body:e,indent:f,checked:!p.has(a),disabled:!A||x,onToggle:()=>{w(null),q(b=>{let c=new Set(b),d=c.has(a);for(let b of B.has(a)?[a,...j.filter(b=>b.parent.trim()===a).map(a=>a.key)]:[a])d?c.delete(b):c.add(b);let e=j.find(b=>b.key===a)?.parent.trim();return d&&e&&B.has(e)&&c.delete(e),c})},open:r===a,onOpen:()=>s(r===a?null:a)},a),D=a=>a.trim().split("\n")[0]??"",E=[...new Set(j.map(a=>a.parent.trim()).filter(a=>!B.has(a)))];async function F(){y(!0),w(null);try{let a=await fetch(`/api/plan/apply${e}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({plan:g,selected:z})}),b=await a.json().catch(()=>null);if(!a.ok)throw Error(b?.error??`Apply failed (${a.status})`);d("accepted",b?.created??[],[...p])}catch(a){w(a.message)}finally{y(!1)}}return(0,b.jsxs)("div",{className:"my-2 rounded-md border border-border overflow-hidden",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 bg-surface2 border-b border-border",children:[(0,b.jsx)("span",{className:"text-[10px] font-mono uppercase tracking-widest text-muted",children:"Plan"}),"breakdown"===g.kind?(0,b.jsxs)(b.Fragment,{children:[k?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-xs font-mono text-accent",children:k}),(0,b.jsx)("span",{className:"text-xs text-txt truncate",children:m.get(k)??""})]}):l?(0,b.jsxs)("span",{className:"text-xs text-txt truncate",children:["New epic: ",l.title,(0,b.jsxs)("span",{className:"text-muted",children:[" (under ",l.parent.trim().toUpperCase()," ",m.get(l.parent.trim().toUpperCase())??"",")"]})]}):(0,b.jsx)("span",{className:"text-xs text-muted",children:"No epic"}),(0,b.jsxs)("span",{className:"ml-auto text-[10px] font-mono text-muted",children:[h.length," tasks"]})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-xs text-txt",children:"Roadmap"}),(0,b.jsxs)("span",{className:"ml-auto text-[10px] font-mono text-muted",children:[i.length?`${i.length} horizons \xb7 `:"",j.length," epics"]})]})]}),(0,b.jsxs)("ul",{className:"max-h-80 overflow-auto",children:[h.map(a=>C(a.key,a.title,[a.size,a.dependsOn?.length?`after ${a.dependsOn.join(", ")}`:null,a.due?`due ${a.due}`:null].filter(Boolean).join(" · "),a.body)),i.map(a=>[C(a.key,a.title,"new horizon",a.body),...j.filter(b=>b.parent.trim()===a.key).map(a=>C(a.key,a.title,D(a.body),a.body,!0))]),E.map(a=>[(0,b.jsxs)("li",{className:"px-2 py-1.5 border-b border-border text-xs text-muted",children:[(0,b.jsx)("span",{className:"font-mono text-accent mr-1",children:a.toUpperCase()}),m.get(a.toUpperCase())??""]},`parent-${a}`),...j.filter(b=>b.parent.trim()===a).map(a=>C(a.key,a.title,D(a.body),a.body,!0))])]}),v&&(0,b.jsx)("div",{className:"px-2 py-1 text-xs text-red-400 whitespace-pre-wrap border-t border-border",children:v}),(0,b.jsx)("div",{className:"flex items-center gap-2 px-2 py-1.5 border-t border-border",children:A?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("button",{onClick:F,disabled:x||0===z.length,className:"text-xs px-2 py-0.5 rounded-sm bg-accent/20 text-accent hover:bg-accent/30 disabled:opacity-50",children:x?"Creating…":`Accept (${z.length})`}),(0,b.jsx)("button",{onClick:()=>d("rejected",[],[]),disabled:x,className:"text-xs px-2 py-0.5 rounded-sm text-muted hover:text-txt",children:"Reject"})]}):"accepted"===a.status?(0,b.jsxs)("span",{className:"text-xs text-teal-400",children:["✓ Created"," ",(a.created??[]).map((a,c)=>(0,b.jsxs)("span",{children:[c>0&&", ",(0,b.jsx)("button",{onClick:()=>f(a.file),className:"font-mono hover:underline",children:a.id})]},a.id))]}):(0,b.jsx)("span",{className:"text-xs text-muted",children:"Rejected"})})]})}function u({rowKey:a,title:c,meta:d,body:e,indent:f,checked:g,disabled:h,onToggle:i,open:j,onOpen:k}){return(0,b.jsxs)("li",{"data-plan-row":a,className:"border-b border-border last:border-b-0",children:[(0,b.jsxs)("div",{className:(0,q.cn)("flex items-start gap-2 px-2 py-1.5",f&&"pl-6"),children:[(0,b.jsx)("input",{type:"checkbox","aria-label":`Include ${c}`,checked:g,disabled:h,onChange:i,className:"mt-0.5 accent-accent"}),(0,b.jsxs)("button",{onClick:k,className:"flex-1 min-w-0 text-left",children:[(0,b.jsxs)("div",{className:(0,q.cn)("text-xs text-txt",!g&&"line-through text-muted"),children:[(0,b.jsx)("span",{className:"font-mono text-muted mr-1",children:a}),c]}),d&&(0,b.jsx)("div",{className:"text-[10px] font-mono text-muted truncate",children:d})]})]}),j&&e&&(0,b.jsx)("div",{className:"px-3 pb-2 border-t border-border bg-surface2/40",children:(0,b.jsx)(p.MarkdownRenderer,{content:e,className:"text-xs"})})]})}var v=a.i(429672),w=a.i(598984);let x="grid size-8 shrink-0 place-items-center rounded-md text-muted transition-colors duration-(--duration-fast) hover:bg-surface2 hover:text-txt";function y({chat:a,hidden:d,wide:e}){let{send:f,resolveProposal:g,resolvePlan:h,answerQuestions:i}=(0,o.useChats)(),j=(0,c.useRef)(null),k=a.messages;return(0,c.useEffect)(()=>{let a=j.current;a&&!d&&(a.scrollTop=a.scrollHeight)},[k,d]),(0,b.jsx)("div",{ref:j,hidden:d,role:"log","aria-live":"polite",className:"min-h-0 flex-1 overflow-y-auto",children:(0,b.jsxs)("div",{className:(0,q.cn)("mx-auto flex flex-col gap-5 px-5 py-6 text-sm",e?"max-w-3xl":"max-w-none"),children:[0===k.length&&(0,b.jsx)(B,{chat:a,onPick:b=>f(a.id,b)}),k.map((c,d)=>(0,b.jsx)(z,{m:c,thinking:a.busy&&d===k.length-1,busy:a.busy,onProposal:(b,c,d)=>g(a.id,b,c,d),onPlan:(b,c,d,e)=>h(a.id,b,c,d,e),onAnswers:(b,c)=>i(a.id,b,c)},d))]})})}function z({m:a,thinking:c,busy:d,onProposal:e,onPlan:f,onAnswers:g}){return"user"===a.role?(0,b.jsx)("div",{className:"flex justify-end animate-fade-in",children:(0,b.jsx)("div",{className:"max-w-[85%] whitespace-pre-wrap rounded-2xl rounded-br-md border border-accent/20 bg-accent/10 px-3.5 py-2 text-txt",children:a.text})}):(0,b.jsxs)("div",{className:"flex gap-3 animate-fade-in",children:[(0,b.jsx)("div",{className:"mt-0.5 grid size-6 shrink-0 place-items-center rounded-md bg-linear-to-br from-accent to-teal text-[10px] text-white","aria-hidden":!0,children:"⬡"}),(0,b.jsxs)("div",{className:"min-w-0 flex-1 space-y-2",children:[a.tools.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1",children:a.tools.map((a,c)=>(0,b.jsx)("span",{className:"rounded-sm border border-border bg-surface2 px-1.5 py-0.5 font-mono text-[10px] text-muted animate-slide-in",children:a},c))}),a.proposals.map(a=>(0,b.jsx)(s,{proposal:a,onResolve:b=>e(a.id,a.path,b)},a.id)),a.plans.map(a=>(0,b.jsx)(t,{proposal:a,onResolve:(b,c,d)=>f(a,b,c,d)},a.id)),a.questions.map(a=>(0,b.jsx)(v.QuestionCard,{set:a,disabled:d,onSubmit:b=>g(a,b)},a.id)),a.text&&(0,b.jsx)(p.MarkdownRenderer,{content:a.text,className:"text-sm"}),c&&!a.text&&!a.error&&(0,b.jsx)(A,{}),a.error&&(0,b.jsx)("p",{className:"whitespace-pre-wrap text-xs text-danger",children:a.error})]})]})}function A(){return(0,b.jsxs)("span",{className:"inline-flex items-center gap-2 text-xs text-muted",children:[(0,b.jsx)("span",{className:"inline-flex gap-1","aria-hidden":!0,children:[0,150,300].map(a=>(0,b.jsx)("span",{className:"size-1.5 rounded-full bg-accent animate-pulse-dot",style:{animationDelay:`${a}ms`}},a))}),"Thinking…"]})}function B({chat:a,onPick:c}){let d=a.attach;return(0,b.jsxs)("div",{className:"flex flex-col items-start gap-4 py-6 animate-fade-in",children:[(0,b.jsx)("div",{className:"grid size-9 place-items-center rounded-lg bg-linear-to-br from-accent to-teal text-sm text-white","aria-hidden":!0,children:"⬡"}),(0,b.jsxs)("div",{children:[(0,b.jsx)("h3",{className:"text-lg font-semibold text-txt",children:d?`Ask about ${d.id}`:"Ask the agent"}),(0,b.jsx)("p",{className:"mt-1 max-w-md text-sm text-muted",children:d?`The agent reads ${"epic"===d.kind?"the epic and its tasks":"the task"} first. It proposes changes; nothing is written until you accept.`:"It reads your docs, tasks and roadmap and proposes edits you review. Runs on your local Claude Code login."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:(0,r.suggestions)(d).map((a,d)=>(0,b.jsxs)("button",{type:"button",onClick:()=>c(a),style:{animationDelay:`${60*d}ms`},className:"group flex items-center gap-2 rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors duration-(--duration-fast) animate-slide-in [animation-fill-mode:both] hover:border-accent/50 hover:bg-accent/5",children:[(0,b.jsx)(h,{className:"size-3.5 text-muted transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px group-hover:text-accent"}),a]},a))})]})}function C({chat:a,wide:f}){let{send:g,stop:h,queue:i}=(0,o.useChats)(),{selectedDoc:j}=(0,n.useApp)(),k=(0,d.usePathname)(),[m,p]=(0,c.useState)(""),r="/docs"===k?j?.path:void 0,s=a.messages[a.messages.length-1],t=!!s?.questions.some(a=>!a.answers),u=Math.min(8,Math.max(1,m.split("\n").length));function v(){m.trim()&&!a.busy&&(g(a.id,m),p(""))}return(0,b.jsx)("div",{className:"shrink-0 px-5 pb-4 pt-1",children:(0,b.jsxs)("div",{className:(0,q.cn)("mx-auto rounded-xl border border-border bg-surface2 transition-[border-color,box-shadow] duration-(--duration-base) focus-within:border-accent/60 focus-within:shadow-[0_0_0_3px_rgb(var(--rgb-accent)/0.12)]",f?"max-w-3xl":"max-w-none"),children:[(0,b.jsx)("textarea",{autoFocus:!i.some(b=>b.id===a.id),value:m,onChange:a=>p(a.target.value),onKeyDown:a=>{"Enter"!==a.key||a.shiftKey||a.nativeEvent.isComposing||(a.preventDefault(),v())},rows:u,placeholder:a.busy?"Agent is working…":t?"Answer the questions above…":"Ask the agent… (Enter to send)",className:"block w-full resize-none bg-transparent px-3.5 pt-3 text-sm text-txt placeholder:text-muted focus:outline-hidden"}),(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2.5 pb-2 pt-1",children:[(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate font-mono text-[10px] text-muted",children:r?`@ ${r}`:"Shift+Enter for a new line"}),a.busy?(0,b.jsxs)("button",{type:"button",onClick:()=>h(a.id),title:"Stop the agent",className:"grid size-7 place-items-center rounded-full border border-border text-muted transition-colors hover:text-txt",children:[(0,b.jsx)(l,{className:"size-3 fill-current"}),(0,b.jsx)("span",{className:"sr-only",children:"Stop"})]}):(0,b.jsxs)("button",{type:"button",onClick:v,disabled:!m.trim(),title:"Send (Enter)",className:"grid size-7 place-items-center rounded-full bg-accent text-accent-fg transition-[opacity,transform] duration-(--duration-fast) enabled:hover:scale-105 disabled:opacity-30",children:[(0,b.jsx)(e.ArrowUp,{className:"size-3.5"}),(0,b.jsx)("span",{className:"sr-only",children:"Send"})]})]})]})})}a.s(["ChatView",0,function({chatId:a,variant:e,onExpand:f,onNavigate:g}){let{chats:h,stop:i,remove:k,notice:n,dismissNotice:p}=(0,o.useChats)(),s=(0,d.useRouter)(),t=h.find(b=>b.id===a),[u,v]=(0,c.useState)([a]);if(u.includes(a)||v([...u,a]),!t)return(0,b.jsx)("div",{className:"grid h-full place-items-center p-8 text-sm text-muted",children:"This chat was closed."});let z=(0,r.chatStatus)(t);return(0,b.jsxs)("section",{"aria-label":`Chat: ${t.title}`,className:"flex h-full min-h-0 flex-col",children:[(0,b.jsxs)("header",{className:(0,q.cn)("flex h-14 shrink-0 items-center gap-3 border-b border-border px-5","modal"===e&&"pr-14"),children:[(0,b.jsx)(w.StatusMarker,{status:z,showIdle:!0}),(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("h2",{className:"truncate text-sm font-medium text-txt",children:t.title}),(0,b.jsx)("p",{className:"font-mono text-[10px] text-muted",children:r.STATUS_LABEL[z]})]}),t.attach&&(0,b.jsx)("button",{type:"button",onClick:()=>{var a;return t.attach&&(a=(0,w.attachHref)(t.attach),void(g?.(),s.push(a)))},title:`Open ${t.attach.id} in the ${"epic"===t.attach.kind?"roadmap":"board"}`,className:"rounded-full border border-border px-2 py-1 text-muted transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent",children:(0,b.jsx)(w.AttachLabel,{attach:t.attach})}),t.busy&&(0,b.jsxs)("button",{type:"button",onClick:()=>i(t.id),title:"Stop the agent",className:x,children:[(0,b.jsx)(l,{className:"size-3.5 fill-current"}),(0,b.jsx)("span",{className:"sr-only",children:"Stop"})]}),"modal"===e&&f&&(0,b.jsxs)("button",{type:"button",onClick:f,title:"Open as page",className:x,children:[(0,b.jsx)(j,{className:"size-3.5"}),(0,b.jsx)("span",{className:"sr-only",children:"Open as page"})]}),"page"===e&&(0,b.jsx)("button",{type:"button",onClick:()=>k(t.id),"aria-label":`Delete ${t.title}`,title:"Delete chat",className:(0,q.cn)(x,"hover:text-danger"),children:(0,b.jsx)(m.Trash2,{className:"size-3.5"})})]}),u.map(c=>{let d=h.find(a=>a.id===c);return d?(0,b.jsx)(y,{chat:d,hidden:c!==a,wide:"page"===e},c):null}),n&&(0,b.jsxs)("div",{role:"status",className:"mx-5 mb-2 flex items-start gap-2 rounded-md border border-amber/30 bg-amber/10 px-3 py-2 text-xs text-amber animate-fade-in",children:[(0,b.jsx)("span",{className:"flex-1",children:n}),(0,b.jsx)("button",{onClick:p,"aria-label":"Dismiss",className:"leading-none text-muted hover:text-txt",children:"×"})]}),(0,b.jsx)(C,{chat:t,wide:"page"===e},t.id)]})}],712125)}];
2
+
3
+ //# sourceMappingURL=src_components_chat_ChatView_tsx_0h5j-e2._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/chat/ChatView.tsx","../../../../src/components/chat/ProposalCard.tsx","../../../../src/components/chat/PlanCard.tsx","../../../../src/lib/diff.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/square.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/maximize-2.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/arrow-up-right.ts"],"sourcesContent":["\"use client\"\n\nimport { useEffect, useRef, useState } from \"react\"\nimport { usePathname, useRouter } from \"next/navigation\"\nimport { ArrowUp, ArrowUpRight, Maximize2, Square, Trash2 } from \"lucide-react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { useChats, type ChatMessage, type ChatTab } from \"@/context/ChatContext\"\nimport { MarkdownRenderer } from \"@/components/docs/MarkdownRenderer\"\nimport { cn } from \"@/lib/utils\"\nimport { STATUS_LABEL, chatStatus, suggestions } from \"@/lib/chats\"\nimport { ProposalCard, type ProposalStatus } from \"./ProposalCard\"\nimport { PlanCard, type PlanCreated, type PlanProposal, type PlanStatus } from \"./PlanCard\"\nimport { QuestionCard, type QuestionSet } from \"./QuestionCard\"\nimport { AttachLabel, StatusMarker, attachHref } from \"./StatusMarker\"\n\n/**\n * One conversation. The chat modal and the /chat page both render this, so they are the same chat UI.\n * Chats shown here before stay mounted (hidden) so card state, e.g. unchecked plan rows, survives switching.\n */\nexport function ChatView({ chatId, variant, onExpand, onNavigate }: {\n chatId: string\n variant: \"modal\" | \"page\"\n /** Modal: open this chat as a page */\n onExpand?: () => void\n /** Called before following a link out of the chat (the modal closes itself) */\n onNavigate?: () => void\n}) {\n const { chats, stop, remove, notice, dismissNotice } = useChats()\n const router = useRouter()\n const chat = chats.find((c) => c.id === chatId)\n // Adjust-state-during-render: remember every chat this view has shown\n const [mounted, setMounted] = useState<string[]>([chatId])\n if (!mounted.includes(chatId)) setMounted([...mounted, chatId])\n\n if (!chat) {\n return <div className=\"grid h-full place-items-center p-8 text-sm text-muted\">This chat was closed.</div>\n }\n\n const status = chatStatus(chat)\n const go = (href: string) => { onNavigate?.(); router.push(href) }\n\n return (\n <section aria-label={`Chat: ${chat.title}`} className=\"flex h-full min-h-0 flex-col\">\n <header className={cn(\"flex h-14 shrink-0 items-center gap-3 border-b border-border px-5\", variant === \"modal\" && \"pr-14\")}>\n <StatusMarker status={status} showIdle />\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-sm font-medium text-txt\">{chat.title}</h2>\n <p className=\"font-mono text-[10px] text-muted\">{STATUS_LABEL[status]}</p>\n </div>\n {chat.attach && (\n <button\n type=\"button\"\n onClick={() => chat.attach && go(attachHref(chat.attach))}\n title={`Open ${chat.attach.id} in the ${chat.attach.kind === \"epic\" ? \"roadmap\" : \"board\"}`}\n className=\"rounded-full border border-border px-2 py-1 text-muted transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent\"\n >\n <AttachLabel attach={chat.attach} />\n </button>\n )}\n {chat.busy && (\n <button type=\"button\" onClick={() => stop(chat.id)} title=\"Stop the agent\" className={ICON_BTN}>\n <Square className=\"size-3.5 fill-current\" />\n <span className=\"sr-only\">Stop</span>\n </button>\n )}\n {variant === \"modal\" && onExpand && (\n <button type=\"button\" onClick={onExpand} title=\"Open as page\" className={ICON_BTN}>\n <Maximize2 className=\"size-3.5\" />\n <span className=\"sr-only\">Open as page</span>\n </button>\n )}\n {variant === \"page\" && (\n <button type=\"button\" onClick={() => remove(chat.id)} aria-label={`Delete ${chat.title}`} title=\"Delete chat\" className={cn(ICON_BTN, \"hover:text-danger\")}>\n <Trash2 className=\"size-3.5\" />\n </button>\n )}\n </header>\n\n {mounted.map((id) => {\n const c = chats.find((x) => x.id === id)\n return c ? <Conversation key={id} chat={c} hidden={id !== chatId} wide={variant === \"page\"} /> : null\n })}\n\n {notice && (\n <div role=\"status\" className=\"mx-5 mb-2 flex items-start gap-2 rounded-md border border-amber/30 bg-amber/10 px-3 py-2 text-xs text-amber animate-fade-in\">\n <span className=\"flex-1\">{notice}</span>\n <button onClick={dismissNotice} aria-label=\"Dismiss\" className=\"leading-none text-muted hover:text-txt\">×</button>\n </div>\n )}\n <Composer key={chat.id} chat={chat} wide={variant === \"page\"} />\n </section>\n )\n}\n\nconst ICON_BTN = \"grid size-8 shrink-0 place-items-center rounded-md text-muted transition-colors duration-(--duration-fast) hover:bg-surface2 hover:text-txt\"\n\nfunction Conversation({ chat, hidden, wide }: { chat: ChatTab; hidden: boolean; wide: boolean }) {\n const { send, resolveProposal, resolvePlan, answerQuestions } = useChats()\n const scrollRef = useRef<HTMLDivElement>(null)\n const messages = chat.messages\n\n // Follow the stream while visible\n useEffect(() => {\n const el = scrollRef.current\n if (el && !hidden) el.scrollTop = el.scrollHeight\n }, [messages, hidden])\n\n return (\n <div ref={scrollRef} hidden={hidden} role=\"log\" aria-live=\"polite\" className=\"min-h-0 flex-1 overflow-y-auto\">\n <div className={cn(\"mx-auto flex flex-col gap-5 px-5 py-6 text-sm\", wide ? \"max-w-3xl\" : \"max-w-none\")}>\n {messages.length === 0 && <EmptyChat chat={chat} onPick={(s) => send(chat.id, s)} />}\n {messages.map((m, i) => (\n <Message\n key={i}\n m={m}\n thinking={chat.busy && i === messages.length - 1}\n busy={chat.busy}\n onProposal={(id, path, status) => resolveProposal(chat.id, id, path, status)}\n onPlan={(p, status, created, unchecked) => resolvePlan(chat.id, p, status, created, unchecked)}\n onAnswers={(set, answers) => answerQuestions(chat.id, set, answers)}\n />\n ))}\n </div>\n </div>\n )\n}\n\nfunction Message({ m, thinking, busy, onProposal, onPlan, onAnswers }: {\n m: ChatMessage\n thinking: boolean\n busy: boolean\n onProposal: (id: string, path: string, status: ProposalStatus) => void\n onPlan: (p: PlanProposal, status: PlanStatus, created: PlanCreated[], unchecked: string[]) => void\n onAnswers: (set: QuestionSet, answers: string[]) => void\n}) {\n if (m.role === \"user\") {\n return (\n <div className=\"flex justify-end animate-fade-in\">\n <div className=\"max-w-[85%] whitespace-pre-wrap rounded-2xl rounded-br-md border border-accent/20 bg-accent/10 px-3.5 py-2 text-txt\">\n {m.text}\n </div>\n </div>\n )\n }\n return (\n <div className=\"flex gap-3 animate-fade-in\">\n <div className=\"mt-0.5 grid size-6 shrink-0 place-items-center rounded-md bg-linear-to-br from-accent to-teal text-[10px] text-white\" aria-hidden>⬡</div>\n <div className=\"min-w-0 flex-1 space-y-2\">\n {m.tools.length > 0 && (\n <div className=\"flex flex-wrap gap-1\">\n {m.tools.map((t, j) => (\n <span key={j} className=\"rounded-sm border border-border bg-surface2 px-1.5 py-0.5 font-mono text-[10px] text-muted animate-slide-in\">{t}</span>\n ))}\n </div>\n )}\n {m.proposals.map((p) => (\n <ProposalCard key={p.id} proposal={p} onResolve={(status) => onProposal(p.id, p.path, status)} />\n ))}\n {m.plans.map((p) => (\n <PlanCard key={p.id} proposal={p} onResolve={(status, created, unchecked) => onPlan(p, status, created, unchecked)} />\n ))}\n {m.questions.map((q) => (\n <QuestionCard key={q.id} set={q} disabled={busy} onSubmit={(answers) => onAnswers(q, answers)} />\n ))}\n {m.text && <MarkdownRenderer content={m.text} className=\"text-sm\" />}\n {thinking && !m.text && !m.error && <Thinking />}\n {m.error && <p className=\"whitespace-pre-wrap text-xs text-danger\">{m.error}</p>}\n </div>\n </div>\n )\n}\n\nfunction Thinking() {\n return (\n <span className=\"inline-flex items-center gap-2 text-xs text-muted\">\n <span className=\"inline-flex gap-1\" aria-hidden>\n {[0, 150, 300].map((d) => (\n <span key={d} className=\"size-1.5 rounded-full bg-accent animate-pulse-dot\" style={{ animationDelay: `${d}ms` }} />\n ))}\n </span>\n Thinking…\n </span>\n )\n}\n\nfunction EmptyChat({ chat, onPick }: { chat: ChatTab; onPick: (s: string) => void }) {\n const a = chat.attach\n return (\n <div className=\"flex flex-col items-start gap-4 py-6 animate-fade-in\">\n <div className=\"grid size-9 place-items-center rounded-lg bg-linear-to-br from-accent to-teal text-sm text-white\" aria-hidden>⬡</div>\n <div>\n <h3 className=\"text-lg font-semibold text-txt\">{a ? `Ask about ${a.id}` : \"Ask the agent\"}</h3>\n <p className=\"mt-1 max-w-md text-sm text-muted\">\n {a\n ? `The agent reads ${a.kind === \"epic\" ? \"the epic and its tasks\" : \"the task\"} first. It proposes changes; nothing is written until you accept.`\n : \"It reads your docs, tasks and roadmap and proposes edits you review. Runs on your local Claude Code login.\"}\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n {suggestions(a).map((s, i) => (\n <button\n key={s}\n type=\"button\"\n onClick={() => onPick(s)}\n style={{ animationDelay: `${60 * i}ms` }}\n className=\"group flex items-center gap-2 rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors duration-(--duration-fast) animate-slide-in [animation-fill-mode:both] hover:border-accent/50 hover:bg-accent/5\"\n >\n <ArrowUpRight className=\"size-3.5 text-muted transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px group-hover:text-accent\" />\n {s}\n </button>\n ))}\n </div>\n </div>\n )\n}\n\nfunction Composer({ chat, wide }: { chat: ChatTab; wide: boolean }) {\n const { send, stop, queue } = useChats()\n const { selectedDoc } = useApp()\n const pathname = usePathname()\n const [input, setInput] = useState(\"\")\n const docPath = pathname === \"/docs\" ? selectedDoc?.path : undefined\n const last = chat.messages[chat.messages.length - 1]\n const questionsPending = !!last?.questions.some((q) => !q.answers)\n const rows = Math.min(8, Math.max(1, input.split(\"\\n\").length))\n\n function submit() {\n if (!input.trim() || chat.busy) return\n send(chat.id, input)\n setInput(\"\")\n }\n\n return (\n <div className=\"shrink-0 px-5 pb-4 pt-1\">\n <div className={cn(\"mx-auto rounded-xl border border-border bg-surface2 transition-[border-color,box-shadow] duration-(--duration-base) focus-within:border-accent/60 focus-within:shadow-[0_0_0_3px_rgb(var(--rgb-accent)/0.12)]\", wide ? \"max-w-3xl\" : \"max-w-none\")}>\n <textarea\n // Not for a queued chat, so a second `c` walks the queue instead of typing into the composer\n autoFocus={!queue.some((q) => q.id === chat.id)}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !e.shiftKey && !e.nativeEvent.isComposing) {\n e.preventDefault()\n submit()\n }\n }}\n rows={rows}\n placeholder={chat.busy ? \"Agent is working…\" : questionsPending ? \"Answer the questions above…\" : \"Ask the agent… (Enter to send)\"}\n className=\"block w-full resize-none bg-transparent px-3.5 pt-3 text-sm text-txt placeholder:text-muted focus:outline-hidden\"\n />\n <div className=\"flex items-center gap-2 px-2.5 pb-2 pt-1\">\n <span className=\"min-w-0 flex-1 truncate font-mono text-[10px] text-muted\">\n {docPath ? `@ ${docPath}` : \"Shift+Enter for a new line\"}\n </span>\n {chat.busy ? (\n <button type=\"button\" onClick={() => stop(chat.id)} title=\"Stop the agent\" className=\"grid size-7 place-items-center rounded-full border border-border text-muted transition-colors hover:text-txt\">\n <Square className=\"size-3 fill-current\" />\n <span className=\"sr-only\">Stop</span>\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={submit}\n disabled={!input.trim()}\n title=\"Send (Enter)\"\n className=\"grid size-7 place-items-center rounded-full bg-accent text-accent-fg transition-[opacity,transform] duration-(--duration-fast) enabled:hover:scale-105 disabled:opacity-30\"\n >\n <ArrowUp className=\"size-3.5\" />\n <span className=\"sr-only\">Send</span>\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { useEffect, useMemo, useState } from \"react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { applyEdits, lineDiff, type DiffLine, type TextEdit } from \"@/lib/diff\"\nimport { cn } from \"@/lib/utils\"\n\nexport type ProposalStatus = \"pending\" | \"accepted\" | \"rejected\"\n\nexport interface Proposal {\n id: string\n path: string\n edits: TextEdit[]\n summary?: string\n status: ProposalStatus\n}\n\nconst CONTEXT = 2\n\n// Keep changed lines plus CONTEXT lines around them; collapse the rest into a count.\nfunction visibleHunks(lines: DiffLine[]): (DiffLine | number)[] {\n const keep = lines.map(() => false)\n lines.forEach((l, i) => {\n if (l.op === \" \") return\n for (let k = Math.max(0, i - CONTEXT); k <= Math.min(lines.length - 1, i + CONTEXT); k++) keep[k] = true\n })\n const out: (DiffLine | number)[] = []\n lines.forEach((l, i) => {\n if (keep[i]) out.push(l)\n else if (typeof out[out.length - 1] === \"number\") out[out.length - 1] = (out[out.length - 1] as number) + 1\n else out.push(1)\n })\n return out\n}\n\nexport function ProposalCard({ proposal, onResolve }: { proposal: Proposal; onResolve: (status: ProposalStatus) => void }) {\n const { rootParam, openDoc } = useApp()\n const [before, setBefore] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [saving, setSaving] = useState(false)\n\n useEffect(() => {\n fetch(`/api/docs${rootParam}&read=${encodeURIComponent(proposal.path)}`)\n .then((r) => (r.ok ? r.json() : null))\n // readDoc falls back to fuzzy matching; a different path means this doc doesn't exist yet\n .then((d) => setBefore(d?.path === proposal.path.replace(/^\\.\\//, \"\") && typeof d.content === \"string\" ? d.content : \"\"))\n .catch(() => setBefore(\"\"))\n }, [proposal.path, rootParam])\n\n const applied = useMemo(() => (before === null ? null : applyEdits(before, proposal.edits)), [before, proposal.edits])\n const stale = applied !== null && \"error\" in applied ? applied.error : null\n const hunks = useMemo(\n () => (before === null || !applied || \"error\" in applied ? [] : visibleHunks(lineDiff(before, applied.content))),\n [before, applied],\n )\n const added = hunks.filter((h) => typeof h !== \"number\" && h.op === \"+\").length\n const removed = hunks.filter((h) => typeof h !== \"number\" && h.op === \"-\").length\n\n async function accept() {\n setSaving(true)\n setError(null)\n try {\n // Server re-applies the edits to the file as it is now, so unrelated changes since the proposal survive\n const res = await fetch(`/api/docs${rootParam}`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ path: proposal.path, edits: proposal.edits, actor: \"ai\" }),\n })\n if (!res.ok) throw new Error((await res.json().catch(() => null))?.error ?? \"Save failed\")\n onResolve(\"accepted\")\n } catch (e) {\n setError((e as Error).message)\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <div className=\"my-2 rounded-md border border-border overflow-hidden\">\n <div className=\"flex items-center gap-2 px-2 py-1.5 bg-surface2 border-b border-border\">\n <button onClick={() => openDoc(proposal.path)} className=\"text-xs font-mono text-accent truncate hover:underline\" title={proposal.path}>\n {proposal.path}\n </button>\n <span className=\"text-[10px] font-mono text-teal-400\">+{added}</span>\n <span className=\"text-[10px] font-mono text-red-400\">-{removed}</span>\n </div>\n {proposal.summary && <div className=\"px-2 py-1 text-xs text-muted border-b border-border\">{proposal.summary}</div>}\n\n <div className=\"max-h-72 overflow-auto text-[11px] font-mono leading-5\">\n {before === null && <div className=\"px-2 py-1 text-muted\">Loading diff…</div>}\n {stale && <div className=\"px-2 py-1 text-red-400\">Doc changed since this proposal ({stale}). Ask the agent to propose again.</div>}\n {before !== null && !stale && hunks.length === 0 && <div className=\"px-2 py-1 text-muted\">No changes</div>}\n {hunks.map((h, i) =>\n typeof h === \"number\" ? (\n <div key={i} className=\"px-2 text-muted bg-surface2/50\">⋯ {h} unchanged line{h > 1 ? \"s\" : \"\"}</div>\n ) : (\n <div\n key={i}\n className={cn(\n \"px-2 whitespace-pre-wrap break-words\",\n h.op === \"+\" && \"bg-teal-500/10 text-teal-300\",\n h.op === \"-\" && \"bg-red-500/10 text-red-300 line-through decoration-red-400/40\",\n )}\n >\n {h.op}{\" \"}{h.text || \" \"}\n </div>\n ),\n )}\n </div>\n\n <div className=\"flex items-center gap-2 px-2 py-1.5 border-t border-border\">\n {proposal.status === \"pending\" ? (\n <>\n <button\n onClick={accept}\n disabled={saving || before === null || !!stale}\n className=\"text-xs px-2 py-0.5 rounded-sm bg-accent/20 text-accent hover:bg-accent/30 disabled:opacity-50\"\n >\n {saving ? \"Applying…\" : \"Accept\"}\n </button>\n <button onClick={() => onResolve(\"rejected\")} disabled={saving} className=\"text-xs px-2 py-0.5 rounded-sm text-muted hover:text-txt\">\n Reject\n </button>\n </>\n ) : (\n <span className={cn(\"text-xs\", proposal.status === \"accepted\" ? \"text-teal-400\" : \"text-muted\")}>\n {proposal.status === \"accepted\" ? \"✓ Applied\" : \"Rejected\"}\n </span>\n )}\n {error && <span className=\"text-xs text-red-400 truncate\">{error}</span>}\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { MarkdownRenderer } from \"@/components/docs/MarkdownRenderer\"\nimport { cn } from \"@/lib/utils\"\nimport type { Plan, PlanEpic, PlanTask } from \"@/lib/plan\"\n\nexport type PlanStatus = \"pending\" | \"accepted\" | \"rejected\"\nexport interface PlanCreated { key: string; id: string; file: string }\n\nexport interface PlanProposal {\n id: string\n plan: Plan\n status: PlanStatus\n created?: PlanCreated[]\n}\n\nexport function PlanCard({ proposal, onResolve }: {\n proposal: PlanProposal\n onResolve: (status: PlanStatus, created: PlanCreated[], unchecked: string[]) => void\n}) {\n const { rootParam, openDoc } = useApp()\n const plan = proposal.plan\n const tasks: PlanTask[] = plan.kind === \"breakdown\" ? plan.tasks : []\n const horizons = plan.kind === \"roadmap\" ? plan.horizons ?? [] : []\n const epics: PlanEpic[] = plan.kind === \"roadmap\" ? plan.epics ?? [] : []\n const epicId = plan.kind === \"breakdown\" ? (plan.epic ?? \"\").trim().toUpperCase() : \"\"\n const newEpic = plan.kind === \"breakdown\" ? plan.newEpic : undefined\n const [titles, setTitles] = useState<Map<string, string>>(new Map())\n const [unchecked, setUnchecked] = useState<Set<string>>(new Set())\n const [open, setOpen] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [saving, setSaving] = useState(false)\n\n useEffect(() => {\n fetch(`/api/roadmap${rootParam}`)\n .then((r) => (r.ok ? r.json() : null))\n .then((d) => setTitles(new Map((d?.items ?? []).map((i: { id: string; title: string }) => [i.id, i.title]))))\n .catch(() => setTitles(new Map()))\n }, [rootParam])\n\n const keys = plan.kind === \"breakdown\" ? tasks.map((t) => t.key) : [...horizons, ...epics].map((x) => x.key)\n const selected = keys.filter((k) => !unchecked.has(k))\n const pending = proposal.status === \"pending\"\n\n // Roadmap: a horizon toggles its epics; checking an epic re-checks its horizon (never an epic without its horizon).\n const epicsOf = (h: string) => epics.filter((e) => e.parent.trim() === h).map((e) => e.key)\n const horizonKeys = new Set(horizons.map((h) => h.key))\n function toggle(key: string) {\n setError(null)\n setUnchecked((prev) => {\n const next = new Set(prev)\n const on = next.has(key)\n const group = horizonKeys.has(key) ? [key, ...epicsOf(key)] : [key]\n for (const k of group) if (on) next.delete(k); else next.add(k)\n const parent = epics.find((e) => e.key === key)?.parent.trim()\n if (on && parent && horizonKeys.has(parent)) next.delete(parent)\n return next\n })\n }\n\n const row = (key: string, title: string, meta: string, body: string | undefined, indent = false) => (\n <PlanRow\n key={key} rowKey={key} title={title} meta={meta} body={body} indent={indent}\n checked={!unchecked.has(key)} disabled={!pending || saving} onToggle={() => toggle(key)}\n open={open === key} onOpen={() => setOpen(open === key ? null : key)}\n />\n )\n const outcome = (body: string) => body.trim().split(\"\\n\")[0] ?? \"\"\n // Existing horizons that the plan adds epics to, in first-use order.\n const existingParents = [...new Set(epics.map((e) => e.parent.trim()).filter((p) => !horizonKeys.has(p)))]\n\n async function accept() {\n setSaving(true)\n setError(null)\n try {\n const res = await fetch(`/api/plan/apply${rootParam}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ plan, selected }),\n })\n const data = await res.json().catch(() => null)\n if (!res.ok) throw new Error(data?.error ?? `Apply failed (${res.status})`)\n onResolve(\"accepted\", data?.created ?? [], [...unchecked])\n } catch (e) {\n setError((e as Error).message)\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <div className=\"my-2 rounded-md border border-border overflow-hidden\">\n <div className=\"flex items-center gap-2 px-2 py-1.5 bg-surface2 border-b border-border\">\n <span className=\"text-[10px] font-mono uppercase tracking-widest text-muted\">Plan</span>\n {plan.kind === \"breakdown\" ? (\n <>\n {epicId ? (\n <>\n <span className=\"text-xs font-mono text-accent\">{epicId}</span>\n <span className=\"text-xs text-txt truncate\">{titles.get(epicId) ?? \"\"}</span>\n </>\n ) : newEpic ? (\n <span className=\"text-xs text-txt truncate\">\n New epic: {newEpic.title}\n <span className=\"text-muted\"> (under {newEpic.parent.trim().toUpperCase()} {titles.get(newEpic.parent.trim().toUpperCase()) ?? \"\"})</span>\n </span>\n ) : (\n <span className=\"text-xs text-muted\">No epic</span>\n )}\n <span className=\"ml-auto text-[10px] font-mono text-muted\">{tasks.length} tasks</span>\n </>\n ) : (\n <>\n <span className=\"text-xs text-txt\">Roadmap</span>\n <span className=\"ml-auto text-[10px] font-mono text-muted\">\n {horizons.length ? `${horizons.length} horizons · ` : \"\"}{epics.length} epics\n </span>\n </>\n )}\n </div>\n\n <ul className=\"max-h-80 overflow-auto\">\n {tasks.map((t) => row(\n t.key, t.title,\n [t.size, t.dependsOn?.length ? `after ${t.dependsOn.join(\", \")}` : null, t.due ? `due ${t.due}` : null].filter(Boolean).join(\" · \"),\n t.body,\n ))}\n {horizons.map((h) => [\n row(h.key, h.title, \"new horizon\", h.body),\n ...epics.filter((e) => e.parent.trim() === h.key).map((e) => row(e.key, e.title, outcome(e.body), e.body, true)),\n ])}\n {existingParents.map((p) => [\n <li key={`parent-${p}`} className=\"px-2 py-1.5 border-b border-border text-xs text-muted\">\n <span className=\"font-mono text-accent mr-1\">{p.toUpperCase()}</span>{titles.get(p.toUpperCase()) ?? \"\"}\n </li>,\n ...epics.filter((e) => e.parent.trim() === p).map((e) => row(e.key, e.title, outcome(e.body), e.body, true)),\n ])}\n </ul>\n\n {error && <div className=\"px-2 py-1 text-xs text-red-400 whitespace-pre-wrap border-t border-border\">{error}</div>}\n\n <div className=\"flex items-center gap-2 px-2 py-1.5 border-t border-border\">\n {pending ? (\n <>\n <button\n onClick={accept}\n disabled={saving || selected.length === 0}\n className=\"text-xs px-2 py-0.5 rounded-sm bg-accent/20 text-accent hover:bg-accent/30 disabled:opacity-50\"\n >\n {saving ? \"Creating…\" : `Accept (${selected.length})`}\n </button>\n <button onClick={() => onResolve(\"rejected\", [], [])} disabled={saving} className=\"text-xs px-2 py-0.5 rounded-sm text-muted hover:text-txt\">\n Reject\n </button>\n </>\n ) : proposal.status === \"accepted\" ? (\n <span className=\"text-xs text-teal-400\">\n ✓ Created{\" \"}\n {(proposal.created ?? []).map((c, i) => (\n <span key={c.id}>\n {i > 0 && \", \"}\n <button onClick={() => openDoc(c.file)} className=\"font-mono hover:underline\">{c.id}</button>\n </span>\n ))}\n </span>\n ) : (\n <span className=\"text-xs text-muted\">Rejected</span>\n )}\n </div>\n </div>\n )\n}\n\nfunction PlanRow({ rowKey, title, meta, body, indent, checked, disabled, onToggle, open, onOpen }: {\n rowKey: string\n title: string\n meta: string\n body?: string\n indent: boolean\n checked: boolean\n disabled: boolean\n onToggle: () => void\n open: boolean\n onOpen: () => void\n}) {\n return (\n <li data-plan-row={rowKey} className=\"border-b border-border last:border-b-0\">\n <div className={cn(\"flex items-start gap-2 px-2 py-1.5\", indent && \"pl-6\")}>\n <input\n type=\"checkbox\"\n aria-label={`Include ${title}`}\n checked={checked}\n disabled={disabled}\n onChange={onToggle}\n className=\"mt-0.5 accent-accent\"\n />\n <button onClick={onOpen} className=\"flex-1 min-w-0 text-left\">\n <div className={cn(\"text-xs text-txt\", !checked && \"line-through text-muted\")}>\n <span className=\"font-mono text-muted mr-1\">{rowKey}</span>{title}\n </div>\n {meta && <div className=\"text-[10px] font-mono text-muted truncate\">{meta}</div>}\n </button>\n </div>\n {open && body && (\n <div className=\"px-3 pb-2 border-t border-border bg-surface2/40\">\n <MarkdownRenderer content={body} className=\"text-xs\" />\n </div>\n )}\n </li>\n )\n}\n","export type DiffLine = { op: \" \" | \"+\" | \"-\"; text: string }\n\n// ponytail: O(n·m) LCS on the changed middle; fine for docs, swap for Myers if huge files show up.\nexport function lineDiff(before: string, after: string): DiffLine[] {\n const a = before.split(\"\\n\")\n const b = after.split(\"\\n\")\n let start = 0\n while (start < a.length && start < b.length && a[start] === b[start]) start++\n let endA = a.length\n let endB = b.length\n while (endA > start && endB > start && a[endA - 1] === b[endB - 1]) { endA--; endB-- }\n\n const x = a.slice(start, endA)\n const y = b.slice(start, endB)\n // lcs[i][j] = LCS length of x[i..] and y[j..]\n const lcs = Array.from({ length: x.length + 1 }, () => new Array<number>(y.length + 1).fill(0))\n for (let i = x.length - 1; i >= 0; i--) {\n for (let j = y.length - 1; j >= 0; j--) {\n lcs[i][j] = x[i] === y[j] ? lcs[i + 1][j + 1] + 1 : Math.max(lcs[i + 1][j], lcs[i][j + 1])\n }\n }\n\n const middle: DiffLine[] = []\n let i = 0\n let j = 0\n while (i < x.length || j < y.length) {\n if (i < x.length && j < y.length && x[i] === y[j]) { middle.push({ op: \" \", text: x[i] }); i++; j++ }\n else if (i < x.length && (j === y.length || lcs[i + 1][j] >= lcs[i][j + 1])) { middle.push({ op: \"-\", text: x[i] }); i++ }\n else { middle.push({ op: \"+\", text: y[j] }); j++ }\n }\n\n return [\n ...a.slice(0, start).map((text) => ({ op: \" \" as const, text })),\n ...middle,\n ...a.slice(endA).map((text) => ({ op: \" \" as const, text })),\n ]\n}\n\nexport type TextEdit = { old_string: string; new_string: string }\n\n// Same contract as Claude Code's Edit tool: each old_string must match exactly once, applied in order.\n// An empty old_string is only allowed on an empty/new file (write the first content).\nexport function applyEdits(text: string, edits: TextEdit[]): { content: string } | { error: string } {\n let content = text\n for (const [i, e] of edits.entries()) {\n if (typeof e?.old_string !== \"string\" || typeof e?.new_string !== \"string\") {\n return { error: `Edit ${i + 1}: old_string and new_string must be strings` }\n }\n if (e.old_string === \"\") {\n if (content !== \"\") return { error: `Edit ${i + 1}: empty old_string is only allowed for a new, empty doc` }\n content = e.new_string\n continue\n }\n const at = content.indexOf(e.old_string)\n if (at === -1) return { error: `Edit ${i + 1}: old_string not found in the doc` }\n if (content.indexOf(e.old_string, at + 1) !== -1) {\n return { error: `Edit ${i + 1}: old_string matches more than once; include more surrounding text` }\n }\n content = content.slice(0, at) + e.new_string + content.slice(at + e.old_string.length)\n }\n return { content }\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'square',\n size: 24,\n node: [['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }]],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Square\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/square\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Square = createLucideIcon(__iconData);\n\nexport default Square;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'maximize-2',\n size: 24,\n node: [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'm21 3-7 7', key: '1l2asr' }],\n ['path', { d: 'm3 21 7-7', key: 'tjx5ai' }],\n ['path', { d: 'M9 21H3v-6', key: 'wtvkvv' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Maximize2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0ibTIxIDMtNyA3IiAvPgogIDxwYXRoIGQ9Im0zIDIxIDctNyIgLz4KICA8cGF0aCBkPSJNOSAyMUgzdi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/maximize-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Maximize2 = createLucideIcon(__iconData);\n\nexport default Maximize2;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-up-right',\n size: 24,\n node: [\n ['path', { d: 'M7 7h10v10', key: '1tivn9' }],\n ['path', { d: 'M7 17 17 7', key: '1vkiza' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowUpRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNyA3aDEwdjEwIiAvPgogIDxwYXRoIGQ9Ik03IDE3IDE3IDciIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/arrow-up-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowUpRight = createLucideIcon(__iconData);\n\nexport default ArrowUpRight;\n"],"names":["__iconData","node"],"mappings":"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","ignoreList":[4,5,6]}
@@ -1,5 +1,5 @@
1
- module.exports=[685698,429672,107742,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(544394),f=a.i(368114);function g(a){return Array.isArray(a)&&a.length>0&&a.every(a=>!!a&&"object"==typeof a&&"string"==typeof a.question&&"string"==typeof a.header&&Array.isArray(a.options)&&a.options.every(a=>!!a&&"object"==typeof a&&"string"==typeof a.label))}let h="\0other";function i(a,b){return["Answers:",...a.map((a,c)=>`- ${a.header}: ${b[c]}`)].join("\n")}a.s(["QuestionCard",0,function({set:a,disabled:d,onSubmit:e}){let[g,i]=(0,c.useState)(()=>a.questions.map(()=>[])),[j,k]=(0,c.useState)(()=>a.questions.map(()=>"")),l=!!a.answers,m=a.questions.map((a,b)=>{let c=a.options.map(a=>a.label).filter(a=>g[b].includes(a));return g[b].includes(h)&&j[b].trim()&&c.push(`Other: "${j[b].trim()}"`),c.join(", ")}),n=m.every(Boolean);return(0,b.jsxs)("div",{className:"my-2 rounded-md border border-border overflow-hidden","data-question-card":!0,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 bg-surface2 border-b border-border",children:[(0,b.jsx)("span",{className:"text-[10px] font-mono uppercase tracking-widest text-muted",children:"Questions"}),l&&(0,b.jsx)("span",{className:"ml-auto text-[10px] font-mono text-accent",children:"✓ Answered"})]}),(0,b.jsxs)("div",{className:"p-2 space-y-3",children:[a.questions.map((c,d)=>(0,b.jsxs)("fieldset",{disabled:l,className:"space-y-1",children:[(0,b.jsxs)("legend",{className:"mb-1",children:[(0,b.jsx)("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded-sm bg-surface2 border border-border text-accent mr-1.5",children:c.header}),(0,b.jsx)("span",{className:"text-xs text-txt",children:c.question})]}),l?(0,b.jsx)("p",{className:"text-xs text-txt pl-1",children:a.answers?.[d]}):(0,b.jsxs)(b.Fragment,{children:[[...c.options,{label:"Other",value:h}].map(e=>{let h="value"in e?e.value:e.label,j=g[d].includes(h);return(0,b.jsxs)("label",{className:(0,f.cn)("flex gap-2 items-start rounded-sm px-1 py-0.5 cursor-pointer hover:bg-surface2",j&&"bg-surface2"),children:[(0,b.jsx)("input",{type:c.multiSelect?"checkbox":"radio",name:`${a.id}-${d}`,checked:j,onChange:()=>{var a;return a=c.multiSelect,void i(b=>b.map((b,c)=>c!==d?b:a?b.includes(h)?b.filter(a=>a!==h):[...b,h]:[h]))},className:"mt-0.5 accent-accent"}),(0,b.jsxs)("span",{className:"text-xs",children:[(0,b.jsx)("span",{className:"text-txt",children:e.label}),"description"in e&&e.description&&(0,b.jsx)("span",{className:"block text-muted",children:e.description})]})]},h)}),g[d].includes(h)&&(0,b.jsx)("input",{value:j[d],onChange:a=>k(b=>b.map((b,c)=>c===d?a.target.value:b)),placeholder:"Your answer","aria-label":`Other answer for ${c.header}`,className:"ml-6 w-[calc(100%-1.5rem)] rounded-sm bg-surface2 border border-border px-2 py-1 text-xs text-txt placeholder:text-muted focus:outline-hidden focus:border-accent"})]})]},d)),!l&&(0,b.jsx)("button",{onClick:()=>e(m),disabled:!n||d,className:"text-xs px-2 py-0.5 rounded-sm bg-accent/20 text-accent hover:bg-accent/30 disabled:opacity-50",children:"Submit"})]})]})},"formatAnswers",0,i,"isRenderableQuestions",0,g],429672);let j=a=>!!a&&"object"==typeof a&&!Array.isArray(a),k=a=>"string"==typeof a?a.trim():"";var l=a.i(525395);function m(a,b=Math.random()){return`c-${a.toString(36)}${b.toString(36).slice(2,6)}`}function n(a,b,c={}){var d;let e=c.now??new Date().toISOString();return[...a,{id:b,title:c.title??(c.attach?"epic"===(d=c.attach).kind?`Epic ${d.id}`:`Task ${d.id}`:"New chat"),messages:[],sessionId:null,busy:!1,notes:[],attach:c.attach??null,createdAt:e,updatedAt:e}]}function o(a,b,c){return a.map(a=>a.id===b?c(a):a)}function p(a){return a.messages.reduce((a,b)=>a+b.plans.filter(a=>"pending"===a.status).length+b.proposals.filter(a=>"pending"===a.status).length,0)}function q(a){if(a.busy)return"running";let b=a.messages[a.messages.length-1];if(b?.questions.some(a=>!a.answers))return"needs-answer";if(p(a))return"review";let c=a.messages.findLast(a=>"assistant"===a.role);return c?.error?"error":"idle"}let r=a=>"needs-answer"===a||"review"===a;function s(a,b,c={}){if((c.running??a.filter(a=>a.busy).length)>=4)return{refused:"Too many agents running (4). Stop or close a chat, or wait."};let d=a.find(a=>a.id===b);return!d||d.busy||c.newChat?{newChat:!0}:{chatId:d.id}}let t=a=>`${a.kind}:${a.id}`;function u(a){return a.trim().match(/^Break down epic (R\d+)/i)?.[1].toUpperCase()??null}function v(a,b){return a.filter(a=>{let c;return c=a.attach,!!c&&!!b&&c.kind===b.kind&&c.id===b.id}).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))[0]}let w={running:3,"needs-answer":2,review:1};function x(a){let b={};for(let c of a){let a=q(c);if(!c.attach||"idle"===a||"error"===a)continue;let d=t(c.attach),e=b[d];(!e||w[a]>w[e.status])&&(b[d]={status:a,chatId:c.id})}return b}function y(a){return"epic"===a.kind?`[This chat is about epic ${a.id}. Read it with vibedoc_get_roadmap (and its tasks with vibedoc_get_task) before answering.]`:`[This chat is about task ${a.id}. Read it with vibedoc_get_task before answering.]`}function z(a){let b=[...a].sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt)),c={needsYou:[],running:[],recent:[]};for(let a of b){let b=q(a);r(b)?c.needsYou.push(a):"running"===b?c.running.push(a):c.recent.push(a)}return c}function A(a){let b=z(a);return b.needsYou[0]??b.running[0]??b.recent[0]}function B(a){return a.messages.length?{...a,busy:!1}:null}function C(a){if(!a||"string"!=typeof a.id||!Array.isArray(a.messages))return null;let b=a.messages[a.messages.length-1],c=b?.role!=="assistant"||b.text||b.error||b.tools?.length||b.plans?.length||b.proposals?.length||b.questions?.length?a.messages:[...a.messages.slice(0,-1),{...b,error:"Interrupted: the page reloaded while the agent was working."}],d=a.updatedAt??a.createdAt??new Date(0).toISOString();return{...a,messages:c,busy:!1,notes:a.notes??[],attach:a.attach??null,createdAt:a.createdAt??d,updatedAt:d}}function D(a,b){return b.flatMap(b=>{let c=q(b);return r(c)&&a[b.id]!==c?[{chat:b,status:c}]:[]})}function E(a,b){let c=a.replace(/^\(\d+\) /,"");return b>0?`(${b}) ${c}`:c}function F(a){let b=u(a);if(b)return`Break down ${b}`;let c=a.trim().split("\n")[0];return c.length>40?`${c.slice(0,40).trimEnd()}…`:c}a.s(["MAX_RUNNING_CHATS",0,4,"STATUS_LABEL",0,{running:"Running","needs-answer":"Waiting for your answers",review:"Plan or edit to review",error:"Error",idle:"Idle"},"addChat",0,n,"ago",0,function(a,b){let c=Math.max(0,Math.floor((b-Date.parse(a))/6e4));return c<1?"now":c<60?`${c}m`:c<1440?`${Math.floor(c/60)}h`:`${Math.floor(c/1440)}d`},"attachContext",0,y,"attachKey",0,t,"chatFor",0,v,"chatStatus",0,q,"chatTitle",0,F,"defaultChat",0,A,"epicOf",0,u,"fromSaved",0,C,"groupChats",0,z,"isWaiting",0,r,"itemAgents",0,x,"newChatId",0,m,"newlyWaiting",0,D,"patchChat",0,o,"pendingReviews",0,p,"routeAsk",0,s,"suggestions",0,function(a){return a?"epic"===a.kind?[`Break down epic ${a.id} into tasks.`,"Summarize this epic's progress.","What is at risk in this epic?"]:["Refine this task's spec.","Split this task into smaller tasks.","What blocks this task?"]:["What should I work on next?","Plan a roadmap for this project.","What is blocked right now?"]},"toSaved",0,B,"waitingTitle",0,E],107742);let G=(a,b="")=>({role:a,text:b,tools:[],proposals:[],plans:[],questions:[]}),H=(0,c.createContext)(null),I=(0,c.createContext)({});a.s(["ChatProvider",0,function({children:a}){let{rootParam:f,activeProject:h,selectedDoc:t}=(0,e.useApp)(),w=(0,d.usePathname)(),z=(0,d.useRouter)(),[J,K]=(0,c.useState)([]),[L,M]=(0,c.useState)(!1),[N,O]=(0,c.useState)(null),[P,Q]=(0,c.useState)(null),[R,S]=(0,c.useState)(null),T=(0,c.useRef)(new Map),U=(0,c.useRef)(new Set),V=(0,c.useRef)({}),W="/chat"===w,X="/docs"===w?t?.path:void 0;(0,c.useEffect)(()=>{for(let a of T.current.values())a.abort();T.current.clear(),U.current.clear();let a=!1;return fetch(`/api/conversations${f}`).then(a=>a.ok?a.json():{chats:[]}).then(b=>{if(a)return;let c=(b.chats??[]).map(a=>C(a)).filter(a=>!!a);V.current=Object.fromEntries(c.map(a=>[a.id,q(a)])),K(c),O(null),Q(null),M(!0)}).catch(b=>{console.warn("[vibedoc] could not load chats:",b),a||(K([]),M(!0))}),()=>{a=!0}},[h,f]),(0,c.useEffect)(()=>{for(let a of[...U.current]){let b=J.find(b=>b.id===a);U.current.delete(a);let c=b&&B(b);c&&fetch(`/api/conversations${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat:c})}).catch(b=>console.warn(`[vibedoc] could not save chat ${a}:`,b))}},[J,f]);let Y=(0,c.useRef)({key:"{}",value:{}}),Z=(0,c.useMemo)(()=>{let a=x(J),b=JSON.stringify(a);return b!==Y.current.key&&(Y.current={key:b,value:a}),Y.current.value},[J]),$=J.filter(a=>a.busy).length,_=J.filter(a=>r(q(a))).length;function aa(a){U.current.add(a)}function ab(a){Q(a),W?(O(null),z.replace(`/chat?id=${encodeURIComponent(a)}`,{scroll:!1})):O(a)}function ac(a=null){let b=m(Date.now());return K(c=>n(c,b,{attach:a})),b}function ad(a,b){K(c=>o(c,a,a=>({...a,messages:[...a.messages.slice(0,-1),b(a.messages[a.messages.length-1])]})))}async function ae(a,b){let c=b.trim(),d=J.find(b=>b.id===a);if(!c||d?.busy)return;"Notification"in window&&"default"===Notification.permission&&Notification.requestPermission().catch(()=>{});let e=!d?.messages.length,h=u(c),i=d?.attach??(h?{kind:"epic",id:h}:null);K(b=>o(b,a,a=>({...a,title:a.messages.length?a.title:F(c),attach:a.attach??i,busy:!0,notes:[],updatedAt:new Date().toISOString(),messages:[...a.messages,G("user",c),G("assistant")]}))),aa(a);let k=[...e&&d?.attach?[y(d.attach)]:[],...d?.notes.length?[`[${d.notes.join(" ")}]`]:[]],l=k.length?`${k.join("\n")}
1
+ module.exports=[685698,429672,107742,598984,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(544394),f=a.i(368114);function g(a){return Array.isArray(a)&&a.length>0&&a.every(a=>!!a&&"object"==typeof a&&"string"==typeof a.question&&"string"==typeof a.header&&Array.isArray(a.options)&&a.options.every(a=>!!a&&"object"==typeof a&&"string"==typeof a.label))}let h="\0other";function i(a,b){return["Answers:",...a.map((a,c)=>`- ${a.header}: ${b[c]}`)].join("\n")}a.s(["QuestionCard",0,function({set:a,disabled:d,onSubmit:e}){let[g,i]=(0,c.useState)(()=>a.questions.map(()=>[])),[j,k]=(0,c.useState)(()=>a.questions.map(()=>"")),l=!!a.answers,m=a.questions.map((a,b)=>{let c=a.options.map(a=>a.label).filter(a=>g[b].includes(a));return g[b].includes(h)&&j[b].trim()&&c.push(`Other: "${j[b].trim()}"`),c.join(", ")}),n=m.every(Boolean);return(0,b.jsxs)("div",{className:"my-2 rounded-md border border-border overflow-hidden","data-question-card":!0,children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1.5 bg-surface2 border-b border-border",children:[(0,b.jsx)("span",{className:"text-[10px] font-mono uppercase tracking-widest text-muted",children:"Questions"}),l&&(0,b.jsx)("span",{className:"ml-auto text-[10px] font-mono text-accent",children:"✓ Answered"})]}),(0,b.jsxs)("div",{className:"p-2 space-y-3",children:[a.questions.map((c,d)=>(0,b.jsxs)("fieldset",{disabled:l,className:"space-y-1",children:[(0,b.jsxs)("legend",{className:"mb-1",children:[(0,b.jsx)("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded-sm bg-surface2 border border-border text-accent mr-1.5",children:c.header}),(0,b.jsx)("span",{className:"text-xs text-txt",children:c.question})]}),l?(0,b.jsx)("p",{className:"text-xs text-txt pl-1",children:a.answers?.[d]}):(0,b.jsxs)(b.Fragment,{children:[[...c.options,{label:"Other",value:h}].map(e=>{let h="value"in e?e.value:e.label,j=g[d].includes(h);return(0,b.jsxs)("label",{className:(0,f.cn)("flex gap-2 items-start rounded-sm px-1 py-0.5 cursor-pointer hover:bg-surface2",j&&"bg-surface2"),children:[(0,b.jsx)("input",{type:c.multiSelect?"checkbox":"radio",name:`${a.id}-${d}`,checked:j,onChange:()=>{var a;return a=c.multiSelect,void i(b=>b.map((b,c)=>c!==d?b:a?b.includes(h)?b.filter(a=>a!==h):[...b,h]:[h]))},className:"mt-0.5 accent-accent"}),(0,b.jsxs)("span",{className:"text-xs",children:[(0,b.jsx)("span",{className:"text-txt",children:e.label}),"description"in e&&e.description&&(0,b.jsx)("span",{className:"block text-muted",children:e.description})]})]},h)}),g[d].includes(h)&&(0,b.jsx)("input",{value:j[d],onChange:a=>k(b=>b.map((b,c)=>c===d?a.target.value:b)),placeholder:"Your answer","aria-label":`Other answer for ${c.header}`,className:"ml-6 w-[calc(100%-1.5rem)] rounded-sm bg-surface2 border border-border px-2 py-1 text-xs text-txt placeholder:text-muted focus:outline-hidden focus:border-accent"})]})]},d)),!l&&(0,b.jsx)("button",{onClick:()=>e(m),disabled:!n||d,className:"text-xs px-2 py-0.5 rounded-sm bg-accent/20 text-accent hover:bg-accent/30 disabled:opacity-50",children:"Submit"})]})]})},"formatAnswers",0,i,"isRenderableQuestions",0,g],429672);let j=a=>!!a&&"object"==typeof a&&!Array.isArray(a),k=a=>"string"==typeof a?a.trim():"";var l=a.i(525395);function m(a,b=Math.random()){return`c-${a.toString(36)}${b.toString(36).slice(2,6)}`}function n(a,b,c={}){var d;let e=c.now??new Date().toISOString();return[...a,{id:b,title:c.title??(c.attach?"epic"===(d=c.attach).kind?`Epic ${d.id}`:`Task ${d.id}`:"New chat"),messages:[],sessionId:null,busy:!1,notes:[],attach:c.attach??null,createdAt:e,updatedAt:e}]}function o(a,b,c){return a.map(a=>a.id===b?c(a):a)}let p={running:"Running","needs-answer":"Waiting for your answers",review:"Plan or edit to review",error:"Error",idle:"Idle"};function q(a){return a.messages.reduce((a,b)=>a+b.plans.filter(a=>"pending"===a.status).length+b.proposals.filter(a=>"pending"===a.status).length,0)}function r(a){if(a.busy)return"running";let b=a.messages[a.messages.length-1];if(b?.questions.some(a=>!a.answers))return"needs-answer";if(q(a))return"review";let c=a.messages.findLast(a=>"assistant"===a.role);return c?.error?"error":"idle"}function s(a,b){return!a.dismissed&&b-Date.parse(a.updatedAt)<864e5&&"error"===r(a)}let t=a=>"needs-answer"===a||"review"===a;function u(a,b,c={}){if((c.running??a.filter(a=>a.busy).length)>=4)return{refused:"Too many agents running (4). Stop or close a chat, or wait."};let d=a.find(a=>a.id===b);return!d||d.busy||c.newChat?{newChat:!0}:{chatId:d.id}}let v=a=>`${a.kind}:${a.id}`;function w(a){return a.trim().match(/^Break down epic (R\d+)/i)?.[1].toUpperCase()??null}function x(a,b){return a.filter(a=>{let c;return c=a.attach,!!c&&!!b&&c.kind===b.kind&&c.id===b.id}).sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt))[0]}let y={running:3,"needs-answer":2,review:1};function z(a){let b={};for(let c of a){let a=r(c);if(!c.attach||"idle"===a||"error"===a)continue;let d=v(c.attach),e=b[d];(!e||y[a]>y[e.status])&&(b[d]={status:a,chatId:c.id})}return b}function A(a){return"epic"===a.kind?`[This chat is about epic ${a.id}. Read it with vibedoc_get_roadmap (and its tasks with vibedoc_get_task) before answering.]`:`[This chat is about task ${a.id}. Read it with vibedoc_get_task before answering.]`}function B(a,b){let c=[...a].sort((a,b)=>b.updatedAt.localeCompare(a.updatedAt)),d={needsYou:[],errors:[],running:[],recent:[]};for(let a of c){let c=r(a);t(c)?d.needsYou.push(a):void 0!==b&&s(a,b)?d.errors.push(a):"running"===c?d.running.push(a):d.recent.push(a)}return d}function C(a,b){let c=B(a,b);return[...c.needsYou,...c.errors]}function D(a,b){let c=a.findIndex(a=>a.id===b);return a[c+1]}function E(a,b=Date.now()){let c=B(a,b);return c.needsYou[0]??c.errors[0]??c.running[0]??c.recent[0]}function F(a){return a.messages.length?{...a,busy:!1}:null}function G(a){if(!a||"string"!=typeof a.id||!Array.isArray(a.messages))return null;let b=a.messages[a.messages.length-1],c=b?.role!=="assistant"||b.text||b.error||b.tools?.length||b.plans?.length||b.proposals?.length||b.questions?.length?a.messages:[...a.messages.slice(0,-1),{...b,error:"Interrupted: the page reloaded while the agent was working."}],d=a.updatedAt??a.createdAt??new Date(0).toISOString();return{...a,messages:c,busy:!1,notes:a.notes??[],attach:a.attach??null,createdAt:a.createdAt??d,updatedAt:d}}function H(a,b){return b.flatMap(b=>{let c=r(b);return t(c)&&a[b.id]!==c?[{chat:b,status:c}]:[]})}function I(a,b){let c=a.replace(/^\(\d+\) /,"");return b>0?`(${b}) ${c}`:c}function J(a){let b=w(a);if(b)return`Break down ${b}`;let c=a.trim().split("\n")[0];return c.length>40?`${c.slice(0,40).trimEnd()}…`:c}a.s(["MAX_RUNNING_CHATS",0,4,"STATUS_LABEL",0,p,"addChat",0,n,"ago",0,function(a,b){let c=Math.max(0,Math.floor((b-Date.parse(a))/6e4));return c<1?"now":c<60?`${c}m`:c<1440?`${Math.floor(c/60)}h`:`${Math.floor(c/1440)}d`},"attachContext",0,A,"attachKey",0,v,"attentionQueue",0,C,"chatFor",0,x,"chatStatus",0,r,"chatTitle",0,J,"defaultChat",0,E,"epicOf",0,w,"fromSaved",0,G,"groupChats",0,B,"isActionableError",0,s,"isWaiting",0,t,"itemAgents",0,z,"newChatId",0,m,"newlyWaiting",0,H,"nextInQueue",0,D,"patchChat",0,o,"pendingReviews",0,q,"routeAsk",0,u,"shellStatus",0,function(a,b){let c=r(a);return"error"!==c||s(a,b)?c:"idle"},"suggestions",0,function(a){return a?"epic"===a.kind?[`Break down epic ${a.id} into tasks.`,"Summarize this epic's progress.","What is at risk in this epic?"]:["Refine this task's spec.","Split this task into smaller tasks.","What blocks this task?"]:["What should I work on next?","Plan a roadmap for this project.","What is blocked right now?"]},"toSaved",0,F,"waitingTitle",0,I],107742);let K=(a,b="")=>({role:a,text:b,tools:[],proposals:[],plans:[],questions:[]}),L=(0,c.createContext)(null),M=(0,c.createContext)({});a.s(["ChatProvider",0,function({children:a}){let{rootParam:f,activeProject:h,selectedDoc:p}=(0,e.useApp)(),v=(0,d.usePathname)(),y=(0,d.useRouter)(),[B,N]=(0,c.useState)([]),[O,P]=(0,c.useState)(!1),[Q,R]=(0,c.useState)(null),[S,T]=(0,c.useState)(null),[U,V]=(0,c.useState)(null),W=(0,c.useRef)(new Map),X=(0,c.useRef)(new Set),Y=(0,c.useRef)({}),[Z,$]=(0,c.useState)(()=>Date.now());(0,c.useEffect)(()=>{let a=setInterval(()=>$(Date.now()),6e4);return()=>clearInterval(a)},[]);let _="/chat"===v,aa="/docs"===v?p?.path:void 0;(0,c.useEffect)(()=>{for(let a of W.current.values())a.abort();W.current.clear(),X.current.clear();let a=!1;return fetch(`/api/conversations${f}`).then(a=>a.ok?a.json():{chats:[]}).then(b=>{if(a)return;let c=(b.chats??[]).map(a=>G(a)).filter(a=>!!a);Y.current=Object.fromEntries(c.map(a=>[a.id,r(a)])),N(c),R(null),T(null),P(!0)}).catch(b=>{console.warn("[vibedoc] could not load chats:",b),a||(N([]),P(!0))}),()=>{a=!0}},[h,f]),(0,c.useEffect)(()=>{for(let a of[...X.current]){let b=B.find(b=>b.id===a);X.current.delete(a);let c=b&&F(b);c&&fetch(`/api/conversations${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({chat:c})}).catch(b=>console.warn(`[vibedoc] could not save chat ${a}:`,b))}},[B,f]);let ab=(0,c.useRef)({key:"{}",value:{}}),ac=(0,c.useMemo)(()=>{let a=z(B),b=JSON.stringify(a);return b!==ab.current.key&&(ab.current={key:b,value:a}),ab.current.value},[B]),ad=B.filter(a=>a.busy).length,ae=B.filter(a=>t(r(a))).length,af=B.filter(a=>s(a,Z)).length,ag=(0,c.useMemo)(()=>C(B,Z),[B,Z]);function ah(a){X.current.add(a)}function ai(a={}){a.keep||N(a=>a.filter(a=>a.id!==Q||a.messages.length>0)),R(null)}function aj(a){T(a),_?(R(null),y.replace(`/chat?id=${encodeURIComponent(a)}`,{scroll:!1})):R(a)}function ak(a=null){let b=m(Date.now());return N(c=>n(c,b,{attach:a})),b}function al(a,b){N(c=>o(c,a,a=>({...a,messages:[...a.messages.slice(0,-1),b(a.messages[a.messages.length-1])]})))}async function am(a,b){let c=b.trim(),d=B.find(b=>b.id===a);if(!c||d?.busy)return;"Notification"in window&&"default"===Notification.permission&&Notification.requestPermission().catch(()=>{});let e=!d?.messages.length,h=w(c),i=d?.attach??(h?{kind:"epic",id:h}:null);N(b=>o(b,a,a=>({...a,title:a.messages.length?a.title:J(c),attach:a.attach??i,busy:!0,dismissed:!1,notes:[],updatedAt:new Date().toISOString(),messages:[...a.messages,K("user",c),K("assistant")]}))),ah(a);let k=[...e&&d?.attach?[A(d.attach)]:[],...d?.notes.length?[`[${d.notes.join(" ")}]`]:[]],l=k.length?`${k.join("\n")}
2
2
 
3
- ${c}`:c,m=new AbortController;T.current.set(a,m);try{let b=await fetch(`/api/chat${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:l,sessionId:d?.sessionId??null,docPath:X}),signal:m.signal});if(!b.ok||!b.body){let a=await b.json().catch(()=>null);throw Error(a?.error??`Request failed (${b.status})`)}let c=b.body.getReader(),e=new TextDecoder,h="";for(;;){let{done:b,value:d}=await c.read();if(b)break;let f=(h+=e.decode(d,{stream:!0})).split("\n");for(let b of(h=f.pop()??"",f))if(b.trim())try{!function(a,b){if(b.session_id&&K(c=>o(c,a,a=>a.sessionId===b.session_id?a:{...a,sessionId:b.session_id})),"stream_event"===b.type){let c=b.event;c?.type==="message_start"?ad(a,a=>a.text&&!a.text.endsWith("\n\n")?{...a,text:a.text+"\n\n"}:a):c?.type==="content_block_delta"&&c.delta?.type==="text_delta"&&ad(a,a=>({...a,text:a.text+c.delta.text}))}else if("assistant"===b.type){let c=(b.message?.content??[]).filter(a=>"tool_use"===a.type),d=c.filter(a=>a.name.endsWith("vibedoc_propose_edit")&&"string"==typeof a.input?.path&&Array.isArray(a.input?.edits)).map(a=>({id:a.id,path:a.input.path,edits:a.input.edits,summary:"string"==typeof a.input.summary?a.input.summary:void 0,status:"pending"})),e=c.filter(a=>a.name.endsWith("vibedoc_propose_plan")).flatMap(a=>{let b=function(a){if(!j(a))return null;let b=(a,b)=>Array.isArray(a)&&a.every(a=>j(a)&&b.every(b=>"string"==typeof a[b])&&(void 0===a.dependsOn||Array.isArray(a.dependsOn)));if("breakdown"===a.kind){let c=void 0===a.epic||"string"==typeof a.epic,d=void 0===a.newEpic||j(a.newEpic)&&"string"==typeof a.newEpic.title&&"string"==typeof a.newEpic.parent;return c&&d&&b(a.tasks,["key","title"])&&a.tasks.length>0?a:null}if("roadmap"===a.kind){let c=a.horizons??[],d=a.epics??[];return b(c,["key","title"])&&b(d,["key","title","parent"])?{kind:"roadmap",horizons:c,epics:d}:null}return null}(a.input?.plan);return b?[{id:a.id,plan:b,status:"pending"}]:[]}),f=c.filter(a=>a.name.endsWith("vibedoc_ask_questions")&&g(a.input?.questions)).map(a=>({id:a.id,questions:a.input.questions})),h=["vibedoc_propose_edit","vibedoc_propose_plan","vibedoc_ask_questions"],i=c.filter(a=>!h.some(b=>a.name.endsWith(b))).map(a=>a.name.replace(/^mcp__vibedoc__vibedoc_/,""));(i.length||d.length||e.length||f.length)&&ad(a,a=>({...a,tools:[...a.tools,...i],proposals:[...a.proposals,...d],plans:[...a.plans,...e],questions:[...a.questions,...f]}))}else if("user"===b.type){let c=new Set((b.message?.content??[]).filter(a=>"tool_result"===a.type&&a.is_error).map(a=>a.tool_use_id));c.size&&ad(a,a=>({...a,proposals:a.proposals.filter(a=>!c.has(a.id)),plans:a.plans.filter(a=>!c.has(a.id)),questions:a.questions.filter(a=>!c.has(a.id))}))}else"result"===b.type&&b.is_error?ad(a,a=>({...a,error:b.result??b.subtype??"Agent error"})):"error"===b.type&&ad(a,a=>({...a,error:b.message}))}(a,JSON.parse(b))}catch{}}}catch(b){m.signal.aborted?ad(a,a=>a.text||a.error?a:{...a,error:"Stopped."}):ad(a,a=>({...a,error:b.message}))}finally{T.current.get(a)===m&&(T.current.delete(a),aa(a)),K(b=>o(b,a,a=>({...a,busy:!1,updatedAt:new Date().toISOString()})))}}function af(a){T.current.get(a)?.abort()}function ag(a,b,c){K(d=>o(d,a,a=>({...a,notes:c?[...a.notes,c]:a.notes,messages:a.messages.map(b)}))),aa(a)}return(0,c.useEffect)(()=>{document.title=E(document.title,_)},[_,w]),(0,c.useEffect)(()=>{let a=D(V.current,J);if(V.current=Object.fromEntries(J.map(a=>[a.id,q(a)])),a.length&&document.hidden&&"Notification"in window&&"granted"===Notification.permission)for(let{chat:b,status:c}of a){let a=new Notification("needs-answer"===c?"Agent needs your answer":"Plan ready to review",{body:b.title,tag:b.id});a.onclick=()=>{window.focus(),(0,l.openAgentChat)(b.id),a.close()}}},[J]),(0,c.useEffect)(()=>{function a(a){let{message:b,newChat:c}=a.detail??{};if(!b)return;let d=s(J,P,{newChat:c,running:T.current.size});if("refused"in d)return S(d.refused);S(null);let e=u(b),f="chatId"in d?d.chatId:ac(e?{kind:"epic",id:e}:null);ae(f,b),c||ab(f)}function b(a){let b=a.detail?.chatId;b&&J.some(a=>a.id===b)&&ab(b)}return window.addEventListener(l.ASK_AGENT_EVENT,a),window.addEventListener(l.OPEN_CHAT_EVENT,b),()=>{window.removeEventListener(l.ASK_AGENT_EVENT,a),window.removeEventListener(l.OPEN_CHAT_EVENT,b)}}),(0,b.jsx)(H.Provider,{value:{chats:J,loaded:L,modalId:N,closeModal:function(a={}){a.keep||K(a=>a.filter(a=>a.id!==N||a.messages.length>0)),O(null)},show:ab,showDefault:function(){let a=A(J);ab(a?a.id:ac())},showAbout:function(a){let b=v(J,a);ab(b?b.id:ac(a))},create:ac,send:ae,stop:af,remove:function(a){let b=J.find(b=>b.id===a),c=b?p(b):0;return(!c||!!window.confirm(`Discard ${c} unreviewed proposal${1===c?"":"s"}?`))&&(af(a),T.current.delete(a),U.current.delete(a),K(b=>b.filter(b=>b.id!==a)),N===a&&O(null),P===a&&Q(null),fetch(`/api/conversations${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({delete:a})}).catch(b=>console.warn(`[vibedoc] could not delete chat ${a}:`,b)),!0)},resolveProposal:function(a,b,c,d){ag(a,a=>({...a,proposals:a.proposals.map(a=>a.id===b?{...a,status:d}:a)}),`User ${d} your proposed edit to ${c}.`)},resolvePlan:function(a,b,c,d,e){var f;let g="breakdown"===b.plan.kind?k((f=b.plan).epic)?k(f.epic).toUpperCase():f.newEpic?`new epic "${k(f.newEpic.title)}"`:"no epic":"the roadmap";ag(a,a=>({...a,plans:a.plans.map(a=>a.id===b.id?{...a,status:c,created:d}:a)}),"accepted"===c?`User accepted plan for ${g}: created ${d.map(a=>a.id).join(", ")}${e.length?` (unchecked: ${e.join(", ")})`:""}.`:`User rejected the plan for ${g}.`)},answerQuestions:function(a,b,c){J.find(b=>b.id===a)?.busy||(ag(a,a=>({...a,questions:a.questions.map(a=>a.id===b.id?{...a,answers:c}:a)})),ae(a,i(b.questions,c)))},agents:Z,runningCount:$,waitingCount:_,notice:R,dismissNotice:()=>S(null)},children:(0,b.jsx)(I.Provider,{value:Z,children:a})})},"useChats",0,function(){let a=(0,c.useContext)(H);if(!a)throw Error("useChats() must be used inside <ChatProvider>");return a},"useItemAgent",0,function(a){return(0,c.useContext)(I)[t(a)]}],685698)}];
3
+ ${c}`:c,m=new AbortController;W.current.set(a,m);try{let b=await fetch(`/api/chat${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:l,sessionId:d?.sessionId??null,docPath:aa}),signal:m.signal});if(!b.ok||!b.body){let a=await b.json().catch(()=>null);throw Error(a?.error??`Request failed (${b.status})`)}let c=b.body.getReader(),e=new TextDecoder,h="";for(;;){let{done:b,value:d}=await c.read();if(b)break;let f=(h+=e.decode(d,{stream:!0})).split("\n");for(let b of(h=f.pop()??"",f))if(b.trim())try{!function(a,b){if(b.session_id&&N(c=>o(c,a,a=>a.sessionId===b.session_id?a:{...a,sessionId:b.session_id})),"stream_event"===b.type){let c=b.event;c?.type==="message_start"?al(a,a=>a.text&&!a.text.endsWith("\n\n")?{...a,text:a.text+"\n\n"}:a):c?.type==="content_block_delta"&&c.delta?.type==="text_delta"&&al(a,a=>({...a,text:a.text+c.delta.text}))}else if("assistant"===b.type){let c=(b.message?.content??[]).filter(a=>"tool_use"===a.type),d=c.filter(a=>a.name.endsWith("vibedoc_propose_edit")&&"string"==typeof a.input?.path&&Array.isArray(a.input?.edits)).map(a=>({id:a.id,path:a.input.path,edits:a.input.edits,summary:"string"==typeof a.input.summary?a.input.summary:void 0,status:"pending"})),e=c.filter(a=>a.name.endsWith("vibedoc_propose_plan")).flatMap(a=>{let b=function(a){if(!j(a))return null;let b=(a,b)=>Array.isArray(a)&&a.every(a=>j(a)&&b.every(b=>"string"==typeof a[b])&&(void 0===a.dependsOn||Array.isArray(a.dependsOn)));if("breakdown"===a.kind){let c=void 0===a.epic||"string"==typeof a.epic,d=void 0===a.newEpic||j(a.newEpic)&&"string"==typeof a.newEpic.title&&"string"==typeof a.newEpic.parent;return c&&d&&b(a.tasks,["key","title"])&&a.tasks.length>0?a:null}if("roadmap"===a.kind){let c=a.horizons??[],d=a.epics??[];return b(c,["key","title"])&&b(d,["key","title","parent"])?{kind:"roadmap",horizons:c,epics:d}:null}return null}(a.input?.plan);return b?[{id:a.id,plan:b,status:"pending"}]:[]}),f=c.filter(a=>a.name.endsWith("vibedoc_ask_questions")&&g(a.input?.questions)).map(a=>({id:a.id,questions:a.input.questions})),h=["vibedoc_propose_edit","vibedoc_propose_plan","vibedoc_ask_questions"],i=c.filter(a=>!h.some(b=>a.name.endsWith(b))).map(a=>a.name.replace(/^mcp__vibedoc__vibedoc_/,""));(i.length||d.length||e.length||f.length)&&al(a,a=>({...a,tools:[...a.tools,...i],proposals:[...a.proposals,...d],plans:[...a.plans,...e],questions:[...a.questions,...f]}))}else if("user"===b.type){let c=new Set((b.message?.content??[]).filter(a=>"tool_result"===a.type&&a.is_error).map(a=>a.tool_use_id));c.size&&al(a,a=>({...a,proposals:a.proposals.filter(a=>!c.has(a.id)),plans:a.plans.filter(a=>!c.has(a.id)),questions:a.questions.filter(a=>!c.has(a.id))}))}else"result"===b.type&&b.is_error?al(a,a=>({...a,error:b.result??b.subtype??"Agent error"})):"error"===b.type&&al(a,a=>({...a,error:b.message}))}(a,JSON.parse(b))}catch{}}}catch(b){m.signal.aborted?al(a,a=>a.text||a.error?a:{...a,error:"Stopped."}):al(a,a=>({...a,error:b.message}))}finally{W.current.get(a)===m&&(W.current.delete(a),ah(a)),N(b=>o(b,a,a=>({...a,busy:!1,updatedAt:new Date().toISOString()})))}}function an(a){W.current.get(a)?.abort()}function ao(a,b,c){N(d=>o(d,a,a=>({...a,notes:c?[...a.notes,c]:a.notes,messages:a.messages.map(b)}))),ah(a)}return(0,c.useEffect)(()=>{document.title=I(document.title,ag.length)},[ag.length,v]),(0,c.useEffect)(()=>{let a=H(Y.current,B);if(Y.current=Object.fromEntries(B.map(a=>[a.id,r(a)])),a.length&&document.hidden&&"Notification"in window&&"granted"===Notification.permission)for(let{chat:b,status:c}of a){let a=new Notification("needs-answer"===c?"Agent needs your answer":"Plan ready to review",{body:b.title,tag:b.id});a.onclick=()=>{window.focus(),(0,l.openAgentChat)(b.id),a.close()}}},[B]),(0,c.useEffect)(()=>{function a(a){let{message:b,newChat:c}=a.detail??{};if(!b)return;let d=u(B,S,{newChat:c,running:W.current.size});if("refused"in d)return V(d.refused);V(null);let e=w(b),f="chatId"in d?d.chatId:ak(e?{kind:"epic",id:e}:null);am(f,b),c||aj(f)}function b(a){let b=a.detail?.chatId;b&&B.some(a=>a.id===b)&&aj(b)}return window.addEventListener(l.ASK_AGENT_EVENT,a),window.addEventListener(l.OPEN_CHAT_EVENT,b),()=>{window.removeEventListener(l.ASK_AGENT_EVENT,a),window.removeEventListener(l.OPEN_CHAT_EVENT,b)}}),(0,b.jsx)(L.Provider,{value:{chats:B,loaded:O,modalId:Q,closeModal:ai,show:aj,showDefault:function(){let a=D(ag,Q??(_?S:null));if(a)return aj(a.id);if(Q)return ai();let b=E(B,Z);aj(b?b.id:ak())},showAbout:function(a){let b=x(B,a);aj(b?b.id:ak(a))},create:ak,send:am,stop:an,dismiss:function(a){N(b=>o(b,a,a=>({...a,dismissed:!0}))),ah(a)},remove:function(a){let b=B.find(b=>b.id===a),c=b?q(b):0;return(!c||!!window.confirm(`Discard ${c} unreviewed proposal${1===c?"":"s"}?`))&&(an(a),W.current.delete(a),X.current.delete(a),N(b=>b.filter(b=>b.id!==a)),Q===a&&R(null),S===a&&T(null),fetch(`/api/conversations${f}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({delete:a})}).catch(b=>console.warn(`[vibedoc] could not delete chat ${a}:`,b)),!0)},resolveProposal:function(a,b,c,d){ao(a,a=>({...a,proposals:a.proposals.map(a=>a.id===b?{...a,status:d}:a)}),`User ${d} your proposed edit to ${c}.`)},resolvePlan:function(a,b,c,d,e){var f;let g="breakdown"===b.plan.kind?k((f=b.plan).epic)?k(f.epic).toUpperCase():f.newEpic?`new epic "${k(f.newEpic.title)}"`:"no epic":"the roadmap";ao(a,a=>({...a,plans:a.plans.map(a=>a.id===b.id?{...a,status:c,created:d}:a)}),"accepted"===c?`User accepted plan for ${g}: created ${d.map(a=>a.id).join(", ")}${e.length?` (unchecked: ${e.join(", ")})`:""}.`:`User rejected the plan for ${g}.`)},answerQuestions:function(a,b,c){B.find(b=>b.id===a)?.busy||(ao(a,a=>({...a,questions:a.questions.map(a=>a.id===b.id?{...a,answers:c}:a)})),am(a,i(b.questions,c)))},agents:ac,runningCount:ad,waitingCount:ae,errorCount:af,queue:ag,now:Z,notice:U,dismissNotice:()=>V(null)},children:(0,b.jsx)(M.Provider,{value:ac,children:a})})},"useChats",0,function(){let a=(0,c.useContext)(L);if(!a)throw Error("useChats() must be used inside <ChatProvider>");return a},"useItemAgent",0,function(a){return(0,c.useContext)(M)[v(a)]}],685698);var N=a.i(108280),O=a.i(899593),P=a.i(256857);let Q={name:"square-check",size:24,node:[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"m16 9-5.5 5.5L8 12",key:"xofnsj"}]],aliases:["check-square-2"]};Q.node;let R=(0,P.default)(Q);a.s(["AttachLabel",0,function({attach:a,className:c}){let d="epic"===a.kind?O.Map:R;return(0,b.jsxs)("span",{className:(0,f.cn)("inline-flex items-center gap-1 font-mono text-[10px] leading-none",c),children:[(0,b.jsx)(d,{className:"size-3"}),a.id]})},"StatusMarker",0,function({status:a,showIdle:c=!1,label:d,className:e}){if("idle"===a&&!c)return null;let g=d??p[a];return(0,b.jsx)("span",{role:"img","aria-label":g,title:g,className:(0,f.cn)("inline-flex size-3 shrink-0 items-center justify-center",e),children:"running"===a?(0,b.jsx)(N.Loader2,{className:"size-3 animate-spin text-accent"}):(0,b.jsx)("span",{className:(0,f.cn)("size-1.5","review"===a?"size-2 rotate-45 rounded-[1px] bg-accent animate-pulse-dot":"rounded-full","needs-answer"===a&&"bg-amber animate-pulse-dot","error"===a&&"bg-danger","idle"===a&&"border border-muted/60")})})},"attachHref",0,function(a){return"epic"===a.kind?`/roadmap?item=${a.id}`:`/board?task=${a.id}`}],598984)}];
4
4
 
5
5
  //# sourceMappingURL=src_context_ChatContext_tsx_0lowp8p._.js.map