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
@@ -1,3 +1,3 @@
1
- module.exports=[856095,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(200382),f=a.i(72551),g=a.i(54165),h=a.i(685698),i=a.i(712125),j=a.i(822404),k=a.i(544428),l=a.i(256857);let m={name:"link-2-off",size:24,node:[["path",{d:"M9 17H7A5 5 0 0 1 7 7",key:"10o201"}],["path",{d:"M15 7h2a5 5 0 0 1 4 8",key:"1d3206"}],["line",{x1:"8",x2:"12",y1:"12",y2:"12",key:"rvw6j4"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]};m.node;let n=(0,l.default)(m);var o=a.i(544394),p=a.i(149350),q=a.i(749223),r=a.i(618940),s=a.i(368114),t=a.i(598984);let u="font-mono text-[10px] uppercase tracking-widest text-muted",v={todo:"text-muted border-border2","in-progress":"text-amber border-amber/30 bg-amber/5",blocked:"text-danger border-danger/30 bg-danger/5",done:"text-teal border-teal/30 bg-teal/5",cancelled:"text-muted border-border"};function w({attach:a}){let{board:d,rootParam:e}=(0,o.useApp)(),[f,g]=(0,c.useState)([]),[h,i]=(0,c.useState)(0);(0,c.useEffect)(()=>{let a=!1;return fetch(`/api/roadmap${e}`).then(a=>a.ok?a.json():{items:[]}).then(b=>{a||g(b.items??[])}).catch(a=>console.warn("[vibedoc] could not load roadmap for the chat rail:",a)),()=>{a=!0}},[e,h]),(0,c.useEffect)(()=>{let a=a=>{let b=a.detail?.type;("roadmap_updated"===b||"task_created"===b)&&i(a=>a+1)};return window.addEventListener("vibedoc:sse",a),()=>window.removeEventListener("vibedoc:sse",a)},[]);let j=(0,c.useMemo)(()=>Object.fromEntries((d?Object.values(d).flat():[]).map(a=>[a.id,a])),[d]);return(0,b.jsx)("div",{className:"flex h-full min-h-0 flex-col overflow-y-auto",children:(0,b.jsxs)("div",{className:"flex flex-col gap-5 p-5 animate-fade-in",children:[!a&&(0,b.jsx)(x,{}),a?.kind==="epic"&&(0,b.jsx)(y,{item:f.find(b=>b.id===a.id),id:a.id,tasksById:j}),a?.kind==="task"&&(0,b.jsx)(A,{task:j[a.id],id:a.id,items:f})]},a?`${a.kind}:${a.id}`:"none")})}function x(){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:u,children:"Context"}),(0,b.jsxs)("div",{className:"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4",children:[(0,b.jsx)(n,{className:"size-4 text-muted"}),(0,b.jsx)("p",{className:"text-sm text-txt",children:"Not linked to an epic or task"}),(0,b.jsx)("p",{className:"text-xs leading-relaxed text-muted",children:"Open a chat from an epic on the roadmap or a task on the board, and the agent starts with that item as context. Its status then shows on the item."})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("p",{className:u,children:"The agent can"}),(0,b.jsxs)("ul",{className:"flex flex-col gap-1.5 text-xs text-muted",children:[(0,b.jsx)("li",{children:"Read docs, tasks, the roadmap and memory"}),(0,b.jsx)("li",{children:"Propose doc and task edits (you review a diff)"}),(0,b.jsx)("li",{children:"Propose epics and task breakdowns (you accept)"}),(0,b.jsx)("li",{className:"text-muted/70",children:"It can't run code or edit source files"})]})]})]})}function y({item:a,id:c,tasksById:d}){if(!a)return(0,b.jsx)(B,{kind:"Epic",id:c});let e=a.tasks.map(a=>d[a]).filter(a=>!!a),f=e.map(a=>a.status).filter(a=>"cancelled"!==a),g=f.filter(a=>"done"===a).length;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:u,children:["Epic · ",a.id]}),(0,b.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:a.title}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(r.StatusPill,{status:a.status}),a.due&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",a.due]})]})]}),f.length>0&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,b.jsx)("p",{className:u,children:"Progress"}),(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[g,"/",f.length," tasks"]})]}),(0,b.jsx)(r.SegmentedProgress,{statuses:f})]}),e.length>0&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:u,children:"Tasks"}),(0,b.jsx)("ul",{className:"-mx-2 flex flex-col",children:e.map(a=>(0,b.jsx)(z,{task:a},a.id))})]}),a.body.trim()&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:u,children:"Brief"}),(0,b.jsx)(p.MarkdownRenderer,{content:a.body,className:"prose-compact"})]}),(0,b.jsx)(C,{attach:{kind:"epic",id:a.id},label:"Open in roadmap"})]})}function z({task:a}){let{showAbout:c}=(0,h.useChats)();return(0,b.jsx)("li",{children:(0,b.jsxs)("button",{type:"button",onClick:()=>c({kind:"task",id:a.id}),title:`Chat about ${a.id}`,className:"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors duration-(--duration-fast) hover:bg-surface2",children:[(0,b.jsx)("span",{"aria-hidden":!0,children:q.STATUS_ICONS[a.status]}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:a.id}),(0,b.jsx)("span",{className:(0,s.cn)("min-w-0 flex-1 truncate","done"===a.status?"text-muted":"text-txt"),children:a.title})]})})}function A({task:a,id:c,items:d}){let{showAbout:e}=(0,h.useChats)();if(!a)return(0,b.jsx)(B,{kind:"Task",id:c});let f=a.phase.match(/^R\d+/)?.[0],g=f?d.find(a=>a.id===f):void 0,i=a.raw?.replace(/^#.*\n(\*\*[^*]+:\*\*.*\n)*/,"").trim();return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:u,children:["Task · ",a.id]}),(0,b.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:a.title}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsxs)("span",{className:(0,s.cn)("rounded-sm border px-1.5 py-0.5 font-mono text-[10px]",v[a.status]),children:[q.STATUS_ICONS[a.status]," ",a.status]}),a.size&&(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted",children:a.size}),a.due&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",a.due]})]})]}),(0,b.jsxs)("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs",children:[f&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dt",{className:"text-muted",children:"Epic"}),(0,b.jsx)("dd",{className:"min-w-0",children:(0,b.jsxs)("button",{type:"button",onClick:()=>e({kind:"epic",id:f}),className:"truncate text-left text-txt hover:text-accent",title:`Chat about ${f}`,children:[(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted",children:f})," ",g?.title??a.phase.replace(/^R\d+\s*—\s*/,"")]})})]}),a.dependsOn&&"—"!==a.dependsOn&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dt",{className:"text-muted",children:"Depends on"}),(0,b.jsx)("dd",{className:"font-mono text-[11px] text-txt",children:a.dependsOn})]})]}),i&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:u,children:"Spec"}),(0,b.jsx)(p.MarkdownRenderer,{content:i,className:"prose-compact"})]}),(0,b.jsx)(C,{attach:{kind:"task",id:a.id},label:"Open on board"})]})}function B({kind:a,id:c}){return(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:u,children:[a," · ",c]}),(0,b.jsxs)("p",{className:"text-sm text-muted",children:[a," ",c," isn't in this project any more."]})]})}function C({attach:a,label:c}){return(0,b.jsxs)(j.default,{href:(0,t.attachHref)(a),className:"group inline-flex w-fit items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-txt transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent",children:[c,(0,b.jsx)(k.ArrowUpRight,{className:"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px"})]})}var D=a.i(107742);let E=a=>{let b=setInterval(a,3e4);return()=>clearInterval(b)},F=()=>6e4*Math.floor(Date.now()/6e4);function G(){let{chats:a,loaded:c,create:e,show:f,send:g}=(0,h.useChats)(),j=(0,d.useRouter)(),k=(0,d.useSearchParams)().get("id"),l=a.find(a=>a.id===k)??(k?void 0:(0,D.defaultChat)(a));function m(a){let b=e();f(b),a&&g(b,a)}return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H,{selectedId:l?.id??null,onNew:()=>m()}),(0,b.jsx)("section",{className:"flex min-w-0 flex-1 flex-col border-r border-border bg-bg",children:l?(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col animate-fade-in",children:(0,b.jsx)(i.ChatView,{chatId:l.id,variant:"page"})},l.id):c?(0,b.jsx)(J,{missing:!!k,onStart:m,onBack:()=>j.replace("/chat")}):null}),(0,b.jsx)("aside",{className:"hidden w-80 shrink-0 bg-surface xl:block","aria-label":"Chat context",children:(0,b.jsx)(w,{attach:l?.attach??null})})]})}function H({selectedId:a,onNew:d}){let{chats:g}=(0,h.useChats)(),[i,j]=(0,c.useState)(""),k=i.trim().toLowerCase(),l=k?g.filter(a=>a.title.toLowerCase().includes(k)||a.attach?.id.toLowerCase().includes(k)):g,m=(0,D.groupChats)(l),n=[{label:"Needs you",items:m.needsYou,tone:"text-amber"},{label:"Running",items:m.running,tone:"text-accent"},{label:"Recent",items:m.recent,tone:"text-muted"}];return(0,b.jsxs)("aside",{className:"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex","aria-label":"All chats",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-4 pb-3 pt-4",children:[(0,b.jsx)("h1",{className:"flex-1 text-sm font-semibold text-txt",children:"Agents"}),(0,b.jsxs)("button",{type:"button",onClick:d,className:"inline-flex items-center gap-1.5 rounded-md bg-accent px-2.5 py-1.5 text-xs font-medium text-white transition-[filter,transform] duration-(--duration-fast) hover:brightness-110 active:scale-[0.97]",children:[(0,b.jsx)(e.Plus,{className:"size-3.5"})," New chat"]})]}),g.length>3&&(0,b.jsxs)("label",{className:"mx-3 mb-2 flex items-center gap-2 rounded-md border border-border bg-bg px-2.5 py-1.5 text-xs focus-within:border-accent/50",children:[(0,b.jsx)(f.Search,{className:"size-3.5 text-muted"}),(0,b.jsx)("input",{value:i,onChange:a=>j(a.target.value),placeholder:"Filter by title or R/T id",className:"min-w-0 flex-1 bg-transparent text-txt placeholder:text-muted focus:outline-hidden"})]}),(0,b.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto px-2 pb-4",children:[0===g.length&&(0,b.jsx)("p",{className:"px-2 py-6 text-xs text-muted",children:"No chats yet."}),n.map(c=>c.items.length>0&&(0,b.jsxs)("div",{className:"mt-3 first:mt-1",children:[(0,b.jsxs)("p",{className:(0,s.cn)("px-2 pb-1 font-mono text-[10px] uppercase tracking-widest",c.tone),children:[c.label," · ",c.items.length]}),(0,b.jsx)("ul",{className:"flex flex-col gap-px",children:c.items.map(c=>(0,b.jsx)(I,{chat:c,active:c.id===a},c.id))})]},c.label)),k&&0===l.length&&(0,b.jsxs)("p",{className:"px-2 py-6 text-xs text-muted",children:["No chat matches “",i,"”."]})]})]})}function I({chat:a,active:d}){let{show:e,remove:f}=(0,h.useChats)(),i=(0,c.useSyncExternalStore)(E,F,()=>0),j=(0,D.chatStatus)(a),k=[...a.messages].reverse().find(a=>a.text)?.text.replace(/\s+/g," ").trim();return(0,b.jsxs)("li",{className:"group relative animate-slide-in",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>e(a.id),"aria-current":d?"true":void 0,className:(0,s.cn)("flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)",d?"bg-surface2 shadow-[inset_2px_0_0_rgb(var(--rgb-accent))]":"hover:bg-surface2/60"),children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 pr-5",children:[(0,b.jsx)(t.StatusMarker,{status:j,showIdle:!0}),(0,b.jsx)("span",{className:(0,s.cn)("min-w-0 flex-1 truncate text-[13px]","idle"!==j||d?"text-txt":"text-txt/80"),children:a.title}),i>0&&(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0",children:(0,D.ago)(a.updatedAt,i)})]}),(a.attach||k)&&(0,b.jsxs)("span",{className:"flex items-center gap-2 pl-5 text-[11px] text-muted",children:[a.attach&&(0,b.jsx)(t.AttachLabel,{attach:a.attach,className:"shrink-0"}),k&&(0,b.jsx)("span",{className:"min-w-0 truncate",children:k})]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>f(a.id),"aria-label":`Close ${a.title}`,title:a.busy?"Stop and delete chat":"Delete chat",className:"absolute right-1.5 top-1.5 grid size-6 place-items-center rounded-md text-muted opacity-0 transition-opacity duration-(--duration-fast) hover:bg-surface hover:text-danger focus-visible:opacity-100 group-hover:opacity-100",children:(0,b.jsx)(g.X,{className:"size-3.5"})})]})}function J({missing:a,onStart:c,onBack:d}){return(0,b.jsx)("div",{className:"grid flex-1 place-items-center p-8",children:(0,b.jsxs)("div",{className:"flex max-w-md flex-col items-start gap-4 animate-fade-in",children:[(0,b.jsx)("div",{className:"grid size-10 place-items-center rounded-xl bg-linear-to-br from-accent to-teal text-white","aria-hidden":!0,children:"⬡"}),a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"This chat was deleted"}),(0,b.jsx)("button",{type:"button",onClick:d,className:"text-sm text-accent hover:underline",children:"Back to all chats"})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"Run agents side by side"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-muted",children:"Each chat is its own Claude Code session, up to 4 at once. Start one here, or from an epic on the roadmap or a task on the board."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:(0,D.suggestions)(null).map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>c(a),className:"rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors hover:border-accent/50 hover:bg-accent/5",children:a},a))})]})]})})}a.s(["default",0,function(){return(0,b.jsx)("div",{className:"flex h-[calc(100svh-3rem)] min-h-0",children:(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(G,{})})})}],856095)}];
1
+ module.exports=[856095,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(200382),f=a.i(72551),g=a.i(54165),h=a.i(685698),i=a.i(712125),j=a.i(147758),k=a.i(822404),l=a.i(544428),m=a.i(256857);let n={name:"link-2-off",size:24,node:[["path",{d:"M9 17H7A5 5 0 0 1 7 7",key:"10o201"}],["path",{d:"M15 7h2a5 5 0 0 1 4 8",key:"1d3206"}],["line",{x1:"8",x2:"12",y1:"12",y2:"12",key:"rvw6j4"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]};n.node;let o=(0,m.default)(n);var p=a.i(544394),q=a.i(149350),r=a.i(173628),s=a.i(618940),t=a.i(368114),u=a.i(598984);let v="font-mono text-[10px] uppercase tracking-widest text-muted";function w({attach:a}){let{board:d,rootParam:e}=(0,p.useApp)(),[f,g]=(0,c.useState)([]),[h,i]=(0,c.useState)(0);(0,c.useEffect)(()=>{let a=!1;return fetch(`/api/roadmap${e}`).then(a=>a.ok?a.json():{items:[]}).then(b=>{a||g(b.items??[])}).catch(a=>console.warn("[vibedoc] could not load roadmap for the chat rail:",a)),()=>{a=!0}},[e,h]),(0,c.useEffect)(()=>{let a=a=>{let b=a.detail?.type;("roadmap_updated"===b||"task_created"===b)&&i(a=>a+1)};return window.addEventListener("vibedoc:sse",a),()=>window.removeEventListener("vibedoc:sse",a)},[]);let j=(0,c.useMemo)(()=>Object.fromEntries((d?Object.values(d).flat():[]).map(a=>[a.id,a])),[d]);return(0,b.jsx)("div",{className:"flex h-full min-h-0 flex-col overflow-y-auto",children:(0,b.jsxs)("div",{className:"flex flex-col gap-5 p-5 animate-fade-in",children:[!a&&(0,b.jsx)(x,{}),a?.kind==="epic"&&(0,b.jsx)(y,{item:f.find(b=>b.id===a.id),id:a.id,tasksById:j}),a?.kind==="task"&&(0,b.jsx)(A,{task:j[a.id],id:a.id,items:f})]},a?`${a.kind}:${a.id}`:"none")})}function x(){return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("p",{className:v,children:"Context"}),(0,b.jsxs)("div",{className:"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4",children:[(0,b.jsx)(o,{className:"size-4 text-muted"}),(0,b.jsx)("p",{className:"text-sm text-txt",children:"Not linked to an epic or task"}),(0,b.jsx)("p",{className:"text-xs leading-relaxed text-muted",children:"Open a chat from an epic on the roadmap or a task on the board, and the agent starts with that item as context. Its status then shows on the item."})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)("p",{className:v,children:"The agent can"}),(0,b.jsxs)("ul",{className:"flex flex-col gap-1.5 text-xs text-muted",children:[(0,b.jsx)("li",{children:"Read docs, tasks, the roadmap and memory"}),(0,b.jsx)("li",{children:"Propose doc and task edits (you review a diff)"}),(0,b.jsx)("li",{children:"Propose epics and task breakdowns (you accept)"}),(0,b.jsx)("li",{className:"text-muted/70",children:"It can't run code or edit source files"})]})]})]})}function y({item:a,id:c,tasksById:d}){if(!a)return(0,b.jsx)(B,{kind:"Epic",id:c});let e=a.tasks.map(a=>d[a]).filter(a=>!!a),f=e.map(a=>a.status).filter(a=>"cancelled"!==a),g=f.filter(a=>"done"===a).length;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:["Epic · ",a.id]}),(0,b.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:a.title}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(s.StatusPill,{status:a.status}),a.due&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",a.due]})]})]}),f.length>0&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-baseline justify-between",children:[(0,b.jsx)("p",{className:v,children:"Progress"}),(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:[g,"/",f.length," tasks"]})]}),(0,b.jsx)(s.SegmentedProgress,{statuses:f})]}),e.length>0&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Tasks"}),(0,b.jsx)("ul",{className:"-mx-2 flex flex-col",children:e.map(a=>(0,b.jsx)(z,{task:a},a.id))})]}),a.body.trim()&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Brief"}),(0,b.jsx)(q.MarkdownRenderer,{content:a.body,className:"prose-compact"})]}),(0,b.jsx)(C,{attach:{kind:"epic",id:a.id},label:"Open in roadmap"})]})}function z({task:a}){let{showAbout:c}=(0,h.useChats)();return(0,b.jsx)("li",{children:(0,b.jsxs)("button",{type:"button",onClick:()=>c({kind:"task",id:a.id}),title:`Chat about ${a.id}`,className:"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors duration-(--duration-fast) hover:bg-surface2",children:[(0,b.jsx)(r.StatusIcon,{status:(0,j.displayStatus)(a),className:"size-3"}),(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted",children:a.id}),(0,b.jsx)("span",{className:(0,t.cn)("min-w-0 flex-1 truncate","done"===a.status?"text-muted":"text-txt"),children:a.title})]})})}function A({task:a,id:c,items:d}){let{showAbout:e}=(0,h.useChats)();if(!a)return(0,b.jsx)(B,{kind:"Task",id:c});let f=a.phase.match(/^R\d+/)?.[0],g=f?d.find(a=>a.id===f):void 0,i=a.raw?.replace(/^#.*\n(\*\*[^*]+:\*\*.*\n)*/,"").trim();return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:["Task · ",a.id]}),(0,b.jsx)("h3",{className:"text-base font-semibold leading-snug text-txt",children:a.title}),(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,b.jsx)(r.StatusChip,{status:(0,j.displayStatus)(a)}),a.size&&(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted",children:a.size}),a.due&&(0,b.jsxs)("span",{className:"font-mono text-[10px] text-muted",children:["due ",a.due]})]})]}),(0,b.jsxs)("dl",{className:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs",children:[f&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dt",{className:"text-muted",children:"Epic"}),(0,b.jsx)("dd",{className:"min-w-0",children:(0,b.jsxs)("button",{type:"button",onClick:()=>e({kind:"epic",id:f}),className:"truncate text-left text-txt hover:text-accent",title:`Chat about ${f}`,children:[(0,b.jsx)("span",{className:"font-mono text-[10px] text-muted",children:f})," ",g?.title??a.phase.replace(/^R\d+\s*—\s*/,"")]})})]}),a.dependsOn&&"—"!==a.dependsOn&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("dt",{className:"text-muted",children:"Depends on"}),(0,b.jsx)("dd",{className:"font-mono text-[11px] text-txt",children:a.dependsOn})]})]}),i&&(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("p",{className:v,children:"Spec"}),(0,b.jsx)(q.MarkdownRenderer,{content:i,className:"prose-compact"})]}),(0,b.jsx)(C,{attach:{kind:"task",id:a.id},label:"Open on board"})]})}function B({kind:a,id:c}){return(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("p",{className:v,children:[a," · ",c]}),(0,b.jsxs)("p",{className:"text-sm text-muted",children:[a," ",c," isn't in this project any more."]})]})}function C({attach:a,label:c}){return(0,b.jsxs)(k.default,{href:(0,u.attachHref)(a),className:"group inline-flex w-fit items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-txt transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent",children:[c,(0,b.jsx)(l.ArrowUpRight,{className:"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px"})]})}var D=a.i(107742);let E=a=>{let b=setInterval(a,3e4);return()=>clearInterval(b)},F=()=>6e4*Math.floor(Date.now()/6e4);function G(){let{chats:a,loaded:c,create:e,show:f,send:g,now:j}=(0,h.useChats)(),k=(0,d.useRouter)(),l=(0,d.useSearchParams)().get("id"),m=a.find(a=>a.id===l)??(l?void 0:(0,D.defaultChat)(a,j));function n(a){let b=e();f(b),a&&g(b,a)}return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(H,{selectedId:m?.id??null,onNew:()=>n()}),(0,b.jsx)("section",{className:"flex min-w-0 flex-1 flex-col border-r border-border bg-bg",children:m?(0,b.jsx)("div",{className:"flex min-h-0 flex-1 flex-col animate-fade-in",children:(0,b.jsx)(i.ChatView,{chatId:m.id,variant:"page"})},m.id):c?(0,b.jsx)(J,{missing:!!l,onStart:n,onBack:()=>k.replace("/chat")}):null}),(0,b.jsx)("aside",{className:"hidden w-80 shrink-0 bg-surface xl:block","aria-label":"Chat context",children:(0,b.jsx)(w,{attach:m?.attach??null})})]})}function H({selectedId:a,onNew:d}){let{chats:g,now:i}=(0,h.useChats)(),[j,k]=(0,c.useState)(""),l=j.trim().toLowerCase(),m=l?g.filter(a=>a.title.toLowerCase().includes(l)||a.attach?.id.toLowerCase().includes(l)):g,n=(0,D.groupChats)(m,i),o=[{label:"Needs you",items:n.needsYou,tone:"text-amber"},{label:"Errors",items:n.errors,tone:"text-danger"},{label:"Running",items:n.running,tone:"text-accent"},{label:"Recent",items:n.recent,tone:"text-muted"}];return(0,b.jsxs)("aside",{className:"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex","aria-label":"All chats",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2 px-4 pb-3 pt-4",children:[(0,b.jsx)("h1",{className:"flex-1 text-sm font-semibold text-txt",children:"Chats"}),(0,b.jsxs)("button",{type:"button",onClick:d,className:"inline-flex items-center gap-1.5 rounded-md bg-accent px-2.5 py-1.5 text-xs font-medium text-accent-fg transition-[filter,transform] duration-(--duration-fast) hover:brightness-110 active:scale-[0.97]",children:[(0,b.jsx)(e.Plus,{className:"size-3.5"})," New chat"]})]}),g.length>3&&(0,b.jsxs)("label",{className:"mx-3 mb-2 flex items-center gap-2 rounded-md border border-border bg-bg px-2.5 py-1.5 text-xs focus-within:border-accent/50",children:[(0,b.jsx)(f.Search,{className:"size-3.5 text-muted"}),(0,b.jsx)("input",{value:j,onChange:a=>k(a.target.value),placeholder:"Filter by title or R/T id",className:"min-w-0 flex-1 bg-transparent text-txt placeholder:text-muted focus:outline-hidden"})]}),(0,b.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto px-2 pb-4",children:[0===g.length&&(0,b.jsx)("p",{className:"px-2 py-6 text-xs text-muted",children:"No chats yet."}),o.map(c=>c.items.length>0&&(0,b.jsxs)("div",{className:"mt-3 first:mt-1",children:[(0,b.jsxs)("p",{className:(0,t.cn)("px-2 pb-1 font-mono text-[10px] uppercase tracking-widest",c.tone),children:[c.label," · ",c.items.length]}),(0,b.jsx)("ul",{className:"flex flex-col gap-px",children:c.items.map(c=>(0,b.jsx)(I,{chat:c,active:c.id===a},c.id))})]},c.label)),l&&0===m.length&&(0,b.jsxs)("p",{className:"px-2 py-6 text-xs text-muted",children:["No chat matches “",j,"”."]})]})]})}function I({chat:a,active:d}){let{show:e,remove:f,now:i}=(0,h.useChats)(),j=(0,c.useSyncExternalStore)(E,F,()=>0),k=(0,D.shellStatus)(a,i),l=[...a.messages].reverse().find(a=>a.text)?.text.replace(/\s+/g," ").trim();return(0,b.jsxs)("li",{className:"group relative animate-slide-in",children:[(0,b.jsxs)("button",{type:"button",onClick:()=>e(a.id),"aria-current":d?"true":void 0,className:(0,t.cn)("flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)",d?"bg-surface2 shadow-[inset_2px_0_0_rgb(var(--rgb-accent))]":"hover:bg-surface2/60"),children:[(0,b.jsxs)("span",{className:"flex items-center gap-2 pr-5",children:[(0,b.jsx)(u.StatusMarker,{status:k,showIdle:!0}),(0,b.jsx)("span",{className:(0,t.cn)("min-w-0 flex-1 truncate text-[13px]","idle"!==k||d?"text-txt":"text-txt/80"),children:a.title}),j>0&&(0,b.jsx)("span",{className:"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0",children:(0,D.ago)(a.updatedAt,j)})]}),(a.attach||l)&&(0,b.jsxs)("span",{className:"flex items-center gap-2 pl-5 text-[11px] text-muted",children:[a.attach&&(0,b.jsx)(u.AttachLabel,{attach:a.attach,className:"shrink-0"}),l&&(0,b.jsx)("span",{className:"min-w-0 truncate",children:l})]})]}),(0,b.jsx)("button",{type:"button",onClick:()=>f(a.id),"aria-label":`Close ${a.title}`,title:a.busy?"Stop and delete chat":"Delete chat",className:"absolute right-1.5 top-1.5 grid size-6 place-items-center rounded-md text-muted opacity-0 transition-opacity duration-(--duration-fast) hover:bg-surface hover:text-danger focus-visible:opacity-100 group-hover:opacity-100",children:(0,b.jsx)(g.X,{className:"size-3.5"})})]})}function J({missing:a,onStart:c,onBack:d}){return(0,b.jsx)("div",{className:"grid flex-1 place-items-center p-8",children:(0,b.jsxs)("div",{className:"flex max-w-md flex-col items-start gap-4 animate-fade-in",children:[(0,b.jsx)("div",{className:"grid size-10 place-items-center rounded-xl bg-linear-to-br from-accent to-teal text-white","aria-hidden":!0,children:"⬡"}),a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"This chat was deleted"}),(0,b.jsx)("button",{type:"button",onClick:d,className:"text-sm text-accent hover:underline",children:"Back to all chats"})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h2",{className:"text-lg font-semibold text-txt",children:"Run chats side by side"}),(0,b.jsx)("p",{className:"mt-1 text-sm text-muted",children:"Each chat is its own Claude Code session, up to 4 at once. Start one here, or from an epic on the roadmap or a task on the board."})]}),(0,b.jsx)("div",{className:"flex flex-col gap-1.5",children:(0,D.suggestions)(null).map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>c(a),className:"rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors hover:border-accent/50 hover:bg-accent/5",children:a},a))})]})]})})}a.s(["default",0,function(){return(0,b.jsx)("div",{className:"flex h-[calc(100svh-3rem)] min-h-0",children:(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(G,{})})})}],856095)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28app%29_chat_page_tsx_0c3e4l4._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/chat/ChatContextRail.tsx","../../../../src/app/%28app%29/chat/page.tsx","../../../../src/hooks/use-minute.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/link-2-off.ts"],"sourcesContent":["\"use client\"\n\nimport { useEffect, useMemo, useState } from \"react\"\nimport Link from \"next/link\"\nimport { ArrowUpRight, Link2Off } from \"lucide-react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { MarkdownRenderer } from \"@/components/docs/MarkdownRenderer\"\nimport { STATUS_ICONS } from \"@/components/board/TaskCard\"\nimport { SegmentedProgress, StatusPill } from \"@/components/roadmap/RoadmapNodes\"\nimport { cn } from \"@/lib/utils\"\nimport type { Attach } from \"@/lib/chats\"\nimport type { RoadmapItem, Task, TaskStatus } from \"@/types\"\nimport { attachHref } from \"./StatusMarker\"\n\nconst KICKER = \"font-mono text-[10px] uppercase tracking-widest text-muted\"\n\nconst TASK_STATUS_CLASS: Record<string, string> = {\n todo: \"text-muted border-border2\",\n \"in-progress\": \"text-amber border-amber/30 bg-amber/5\",\n blocked: \"text-danger border-danger/30 bg-danger/5\",\n done: \"text-teal border-teal/30 bg-teal/5\",\n cancelled: \"text-muted border-border\",\n}\n\n/** Right column of /chat: what the chat is about (epic or task), live from the board and roadmap. */\nexport function ChatContextRail({ attach }: { attach: Attach | null }) {\n const { board, rootParam } = useApp()\n const [items, setItems] = useState<RoadmapItem[]>([])\n const [reload, setReload] = useState(0)\n\n // Roadmap items: loaded here (the roadmap page keeps its own copy); refetched on roadmap SSE events\n useEffect(() => {\n let cancelled = false\n fetch(`/api/roadmap${rootParam}`)\n .then((r) => (r.ok ? r.json() : { items: [] }))\n .then((d: { items?: RoadmapItem[] }) => { if (!cancelled) setItems(d.items ?? []) })\n .catch((e) => console.warn(\"[vibedoc] could not load roadmap for the chat rail:\", e))\n return () => { cancelled = true }\n }, [rootParam, reload])\n useEffect(() => {\n const onSse = (e: Event) => {\n const type = (e as CustomEvent<{ type?: string }>).detail?.type\n if (type === \"roadmap_updated\" || type === \"task_created\") setReload((n) => n + 1)\n }\n window.addEventListener(\"vibedoc:sse\", onSse)\n return () => window.removeEventListener(\"vibedoc:sse\", onSse)\n }, [])\n\n const tasksById = useMemo(() => {\n const all = board ? Object.values(board).flat() : []\n return Object.fromEntries(all.map((t) => [t.id, t])) as Record<string, Task>\n }, [board])\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-y-auto\">\n <div key={attach ? `${attach.kind}:${attach.id}` : \"none\"} className=\"flex flex-col gap-5 p-5 animate-fade-in\">\n {!attach && <NoAttach />}\n {attach?.kind === \"epic\" && <EpicContext item={items.find((i) => i.id === attach.id)} id={attach.id} tasksById={tasksById} />}\n {attach?.kind === \"task\" && <TaskContext task={tasksById[attach.id]} id={attach.id} items={items} />}\n </div>\n </div>\n )\n}\n\nfunction NoAttach() {\n return (\n <>\n <p className={KICKER}>Context</p>\n <div className=\"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4\">\n <Link2Off className=\"size-4 text-muted\" />\n <p className=\"text-sm text-txt\">Not linked to an epic or task</p>\n <p className=\"text-xs leading-relaxed text-muted\">\n Open a chat from an epic on the roadmap or a task on the board, and the agent starts with that item as context.\n Its status then shows on the item.\n </p>\n </div>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>The agent can</p>\n <ul className=\"flex flex-col gap-1.5 text-xs text-muted\">\n <li>Read docs, tasks, the roadmap and memory</li>\n <li>Propose doc and task edits (you review a diff)</li>\n <li>Propose epics and task breakdowns (you accept)</li>\n <li className=\"text-muted/70\">It can&apos;t run code or edit source files</li>\n </ul>\n </div>\n </>\n )\n}\n\nfunction EpicContext({ item, id, tasksById }: { item?: RoadmapItem; id: string; tasksById: Record<string, Task> }) {\n if (!item) return <Missing kind=\"Epic\" id={id} />\n const tasks = item.tasks.map((t) => tasksById[t]).filter((t): t is Task => !!t)\n const statuses = tasks.map((t) => t.status).filter((s): s is TaskStatus => s !== \"cancelled\")\n const done = statuses.filter((s) => s === \"done\").length\n return (\n <>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>Epic · {item.id}</p>\n <h3 className=\"text-base font-semibold leading-snug text-txt\">{item.title}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <StatusPill status={item.status} />\n {item.due && <span className=\"font-mono text-[10px] text-muted\">due {item.due}</span>}\n </div>\n </div>\n\n {statuses.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-baseline justify-between\">\n <p className={KICKER}>Progress</p>\n <span className=\"font-mono text-[10px] text-muted\">{done}/{statuses.length} tasks</span>\n </div>\n <SegmentedProgress statuses={statuses} />\n </div>\n )}\n\n {tasks.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Tasks</p>\n <ul className=\"-mx-2 flex flex-col\">\n {tasks.map((t) => <TaskRow key={t.id} task={t} />)}\n </ul>\n </div>\n )}\n\n {item.body.trim() && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Brief</p>\n <MarkdownRenderer content={item.body} className=\"prose-compact\" />\n </div>\n )}\n\n <OpenLink attach={{ kind: \"epic\", id: item.id }} label=\"Open in roadmap\" />\n </>\n )\n}\n\nfunction TaskRow({ task }: { task: Task }) {\n const { showAbout } = useChats()\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => showAbout({ kind: \"task\", id: task.id })}\n title={`Chat about ${task.id}`}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors duration-(--duration-fast) hover:bg-surface2\"\n >\n <span aria-hidden>{STATUS_ICONS[task.status]}</span>\n <span className=\"shrink-0 font-mono text-[10px] text-muted\">{task.id}</span>\n <span className={cn(\"min-w-0 flex-1 truncate\", task.status === \"done\" ? \"text-muted\" : \"text-txt\")}>{task.title}</span>\n </button>\n </li>\n )\n}\n\nfunction TaskContext({ task, id, items }: { task?: Task; id: string; items: RoadmapItem[] }) {\n const { showAbout } = useChats()\n if (!task) return <Missing kind=\"Task\" id={id} />\n const epicId = task.phase.match(/^R\\d+/)?.[0]\n const epic = epicId ? items.find((i) => i.id === epicId) : undefined\n const body = task.raw?.replace(/^#.*\\n(\\*\\*[^*]+:\\*\\*.*\\n)*/, \"\").trim()\n return (\n <>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>Task · {task.id}</p>\n <h3 className=\"text-base font-semibold leading-snug text-txt\">{task.title}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className={cn(\"rounded-sm border px-1.5 py-0.5 font-mono text-[10px]\", TASK_STATUS_CLASS[task.status])}>\n {STATUS_ICONS[task.status]} {task.status}\n </span>\n {task.size && <span className=\"font-mono text-[10px] text-muted\">{task.size}</span>}\n {task.due && <span className=\"font-mono text-[10px] text-muted\">due {task.due}</span>}\n </div>\n </div>\n\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs\">\n {epicId && (\n <>\n <dt className=\"text-muted\">Epic</dt>\n <dd className=\"min-w-0\">\n <button type=\"button\" onClick={() => showAbout({ kind: \"epic\", id: epicId })} className=\"truncate text-left text-txt hover:text-accent\" title={`Chat about ${epicId}`}>\n <span className=\"font-mono text-[10px] text-muted\">{epicId}</span> {epic?.title ?? task.phase.replace(/^R\\d+\\s*—\\s*/, \"\")}\n </button>\n </dd>\n </>\n )}\n {task.dependsOn && task.dependsOn !== \"—\" && (\n <>\n <dt className=\"text-muted\">Depends on</dt>\n <dd className=\"font-mono text-[11px] text-txt\">{task.dependsOn}</dd>\n </>\n )}\n </dl>\n\n {body && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Spec</p>\n <MarkdownRenderer content={body} className=\"prose-compact\" />\n </div>\n )}\n\n <OpenLink attach={{ kind: \"task\", id: task.id }} label=\"Open on board\" />\n </>\n )\n}\n\nfunction Missing({ kind, id }: { kind: string; id: string }) {\n return (\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>{kind} · {id}</p>\n <p className=\"text-sm text-muted\">{kind} {id} isn&apos;t in this project any more.</p>\n </div>\n )\n}\n\nfunction OpenLink({ attach, label }: { attach: Attach; label: string }) {\n return (\n <Link\n href={attachHref(attach)}\n className=\"group inline-flex w-fit items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-txt transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent\"\n >\n {label}\n <ArrowUpRight className=\"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px\" />\n </Link>\n )\n}\n","\"use client\"\n\nimport { Suspense, useState } from \"react\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\nimport { Plus, Search, X } from \"lucide-react\"\nimport { useChats, type ChatTab } from \"@/context/ChatContext\"\nimport { ChatView } from \"@/components/chat/ChatView\"\nimport { ChatContextRail } from \"@/components/chat/ChatContextRail\"\nimport { AttachLabel, StatusMarker } from \"@/components/chat/StatusMarker\"\nimport { ago, chatStatus, defaultChat, groupChats, suggestions } from \"@/lib/chats\"\nimport { useMinute } from \"@/hooks/use-minute\"\nimport { cn } from \"@/lib/utils\"\n\nexport default function ChatPage() {\n // main has no fixed height; the columns need one (viewport minus the h-12 AppHeader)\n return (\n <div className=\"flex h-[calc(100svh-3rem)] min-h-0\">\n <Suspense>\n <ChatPageInner />\n </Suspense>\n </div>\n )\n}\n\nfunction ChatPageInner() {\n const { chats, loaded, create, show, send } = useChats()\n const router = useRouter()\n const param = useSearchParams().get(\"id\")\n const selected = chats.find((c) => c.id === param) ?? (param ? undefined : defaultChat(chats))\n\n function startWith(text?: string) {\n const id = create()\n show(id)\n if (text) send(id, text)\n }\n\n return (\n <>\n <ChatList selectedId={selected?.id ?? null} onNew={() => startWith()} />\n\n <section className=\"flex min-w-0 flex-1 flex-col border-r border-border bg-bg\">\n {selected ? (\n <div key={selected.id} className=\"flex min-h-0 flex-1 flex-col animate-fade-in\">\n <ChatView chatId={selected.id} variant=\"page\" />\n </div>\n ) : loaded ? (\n <NoChat\n missing={!!param}\n onStart={startWith}\n onBack={() => router.replace(\"/chat\")}\n />\n ) : null}\n </section>\n\n <aside className=\"hidden w-80 shrink-0 bg-surface xl:block\" aria-label=\"Chat context\">\n <ChatContextRail attach={selected?.attach ?? null} />\n </aside>\n </>\n )\n}\n\nfunction ChatList({ selectedId, onNew }: { selectedId: string | null; onNew: () => void }) {\n const { chats } = useChats()\n const [query, setQuery] = useState(\"\")\n const q = query.trim().toLowerCase()\n const shown = q ? chats.filter((c) => c.title.toLowerCase().includes(q) || c.attach?.id.toLowerCase().includes(q)) : chats\n const g = groupChats(shown)\n const sections = [\n { label: \"Needs you\", items: g.needsYou, tone: \"text-amber\" },\n { label: \"Running\", items: g.running, tone: \"text-accent\" },\n { label: \"Recent\", items: g.recent, tone: \"text-muted\" },\n ]\n\n return (\n <aside className=\"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex\" aria-label=\"All chats\">\n <div className=\"flex items-center gap-2 px-4 pb-3 pt-4\">\n <h1 className=\"flex-1 text-sm font-semibold text-txt\">Agents</h1>\n <button\n type=\"button\"\n onClick={onNew}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-2.5 py-1.5 text-xs font-medium text-white transition-[filter,transform] duration-(--duration-fast) hover:brightness-110 active:scale-[0.97]\"\n >\n <Plus className=\"size-3.5\" /> New chat\n </button>\n </div>\n {chats.length > 3 && (\n <label className=\"mx-3 mb-2 flex items-center gap-2 rounded-md border border-border bg-bg px-2.5 py-1.5 text-xs focus-within:border-accent/50\">\n <Search className=\"size-3.5 text-muted\" />\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Filter by title or R/T id\"\n className=\"min-w-0 flex-1 bg-transparent text-txt placeholder:text-muted focus:outline-hidden\"\n />\n </label>\n )}\n <div className=\"min-h-0 flex-1 overflow-y-auto px-2 pb-4\">\n {chats.length === 0 && <p className=\"px-2 py-6 text-xs text-muted\">No chats yet.</p>}\n {sections.map((s) => s.items.length > 0 && (\n <div key={s.label} className=\"mt-3 first:mt-1\">\n <p className={cn(\"px-2 pb-1 font-mono text-[10px] uppercase tracking-widest\", s.tone)}>\n {s.label} · {s.items.length}\n </p>\n <ul className=\"flex flex-col gap-px\">\n {s.items.map((c) => <ChatRow key={c.id} chat={c} active={c.id === selectedId} />)}\n </ul>\n </div>\n ))}\n {q && shown.length === 0 && <p className=\"px-2 py-6 text-xs text-muted\">No chat matches “{query}”.</p>}\n </div>\n </aside>\n )\n}\n\nfunction ChatRow({ chat, active }: { chat: ChatTab; active: boolean }) {\n const { show, remove } = useChats()\n const now = useMinute()\n const status = chatStatus(chat)\n const lastText = [...chat.messages].reverse().find((m) => m.text)?.text.replace(/\\s+/g, \" \").trim()\n return (\n <li className=\"group relative animate-slide-in\">\n <button\n type=\"button\"\n onClick={() => show(chat.id)}\n aria-current={active ? \"true\" : undefined}\n className={cn(\n \"flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)\",\n active ? \"bg-surface2 shadow-[inset_2px_0_0_rgb(var(--rgb-accent))]\" : \"hover:bg-surface2/60\",\n )}\n >\n <span className=\"flex items-center gap-2 pr-5\">\n <StatusMarker status={status} showIdle />\n <span className={cn(\"min-w-0 flex-1 truncate text-[13px]\", status === \"idle\" && !active ? \"text-txt/80\" : \"text-txt\")}>{chat.title}</span>\n {now > 0 && <span className=\"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0\">{ago(chat.updatedAt, now)}</span>}\n </span>\n {(chat.attach || lastText) && (\n <span className=\"flex items-center gap-2 pl-5 text-[11px] text-muted\">\n {chat.attach && <AttachLabel attach={chat.attach} className=\"shrink-0\" />}\n {lastText && <span className=\"min-w-0 truncate\">{lastText}</span>}\n </span>\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => remove(chat.id)}\n aria-label={`Close ${chat.title}`}\n title={chat.busy ? \"Stop and delete chat\" : \"Delete chat\"}\n className=\"absolute right-1.5 top-1.5 grid size-6 place-items-center rounded-md text-muted opacity-0 transition-opacity duration-(--duration-fast) hover:bg-surface hover:text-danger focus-visible:opacity-100 group-hover:opacity-100\"\n >\n <X className=\"size-3.5\" />\n </button>\n </li>\n )\n}\n\nfunction NoChat({ missing, onStart, onBack }: { missing: boolean; onStart: (text?: string) => void; onBack: () => void }) {\n return (\n <div className=\"grid flex-1 place-items-center p-8\">\n <div className=\"flex max-w-md flex-col items-start gap-4 animate-fade-in\">\n <div className=\"grid size-10 place-items-center rounded-xl bg-linear-to-br from-accent to-teal text-white\" aria-hidden>⬡</div>\n {missing ? (\n <>\n <h2 className=\"text-lg font-semibold text-txt\">This chat was deleted</h2>\n <button type=\"button\" onClick={onBack} className=\"text-sm text-accent hover:underline\">Back to all chats</button>\n </>\n ) : (\n <>\n <div>\n <h2 className=\"text-lg font-semibold text-txt\">Run agents side by side</h2>\n <p className=\"mt-1 text-sm text-muted\">\n Each chat is its own Claude Code session, up to 4 at once. Start one here, or from an epic on the roadmap or a task on the board.\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n {suggestions(null).map((s) => (\n <button key={s} type=\"button\" onClick={() => onStart(s)} className=\"rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors hover:border-accent/50 hover:bg-accent/5\">\n {s}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","import { useSyncExternalStore } from \"react\"\n\nconst subscribe = (tick: () => void) => {\n const id = setInterval(tick, 30_000)\n return () => clearInterval(id)\n}\n// Rounded to the minute so the snapshot is stable between ticks\nconst snapshot = () => Math.floor(Date.now() / 60_000) * 60_000\n\n/** Current time in ms, updated about once a minute (for \"5m ago\" labels). 0 during server render. */\nexport function useMinute(): number {\n return useSyncExternalStore(subscribe, snapshot, () => 0)\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'link-2-off',\n size: 24,\n node: [\n ['path', { d: 'M9 17H7A5 5 0 0 1 7 7', key: '10o201' }],\n ['path', { d: 'M15 7h2a5 5 0 0 1 4 8', key: '1d3206' }],\n ['line', { x1: '8', x2: '12', y1: '12', y2: '12', key: 'rvw6j4' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22', key: 'a6p6uj' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Link2Off\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOSAxN0g3QTUgNSAwIDAgMSA3IDciIC8+CiAgPHBhdGggZD0iTTE1IDdoMmE1IDUgMCAwIDEgNCA4IiAvPgogIDxsaW5lIHgxPSI4IiB4Mj0iMTIiIHkxPSIxMiIgeTI9IjEyIiAvPgogIDxsaW5lIHgxPSIyIiB4Mj0iMjIiIHkxPSIyIiB5Mj0iMjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/link-2-off\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 Link2Off = createLucideIcon(__iconData);\n\nexport default Link2Off;\n"],"names":["x2","y2"],"mappings":"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","ignoreList":[3]}
1
+ {"version":3,"sources":["../../../../src/components/chat/ChatContextRail.tsx","../../../../src/app/%28app%29/chat/page.tsx","../../../../src/hooks/use-minute.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/link-2-off.ts"],"sourcesContent":["\"use client\"\n\nimport { displayStatus } from \"@/lib/statuses\"\nimport { useEffect, useMemo, useState } from \"react\"\nimport Link from \"next/link\"\nimport { ArrowUpRight, Link2Off } from \"lucide-react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { useChats } from \"@/context/ChatContext\"\nimport { MarkdownRenderer } from \"@/components/docs/MarkdownRenderer\"\nimport { StatusChip, StatusIcon } from \"@/components/shared/StatusIcon\"\nimport { SegmentedProgress, StatusPill } from \"@/components/roadmap/RoadmapNodes\"\nimport { cn } from \"@/lib/utils\"\nimport type { Attach } from \"@/lib/chats\"\nimport type { RoadmapItem, Task, TaskStatus } from \"@/types\"\nimport { attachHref } from \"./StatusMarker\"\n\nconst KICKER = \"font-mono text-[10px] uppercase tracking-widest text-muted\"\n\n\n/** Right column of /chat: what the chat is about (epic or task), live from the board and roadmap. */\nexport function ChatContextRail({ attach }: { attach: Attach | null }) {\n const { board, rootParam } = useApp()\n const [items, setItems] = useState<RoadmapItem[]>([])\n const [reload, setReload] = useState(0)\n\n // Roadmap items: loaded here (the roadmap page keeps its own copy); refetched on roadmap SSE events\n useEffect(() => {\n let cancelled = false\n fetch(`/api/roadmap${rootParam}`)\n .then((r) => (r.ok ? r.json() : { items: [] }))\n .then((d: { items?: RoadmapItem[] }) => { if (!cancelled) setItems(d.items ?? []) })\n .catch((e) => console.warn(\"[vibedoc] could not load roadmap for the chat rail:\", e))\n return () => { cancelled = true }\n }, [rootParam, reload])\n useEffect(() => {\n const onSse = (e: Event) => {\n const type = (e as CustomEvent<{ type?: string }>).detail?.type\n if (type === \"roadmap_updated\" || type === \"task_created\") setReload((n) => n + 1)\n }\n window.addEventListener(\"vibedoc:sse\", onSse)\n return () => window.removeEventListener(\"vibedoc:sse\", onSse)\n }, [])\n\n const tasksById = useMemo(() => {\n const all = board ? Object.values(board).flat() : []\n return Object.fromEntries(all.map((t) => [t.id, t])) as Record<string, Task>\n }, [board])\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-y-auto\">\n <div key={attach ? `${attach.kind}:${attach.id}` : \"none\"} className=\"flex flex-col gap-5 p-5 animate-fade-in\">\n {!attach && <NoAttach />}\n {attach?.kind === \"epic\" && <EpicContext item={items.find((i) => i.id === attach.id)} id={attach.id} tasksById={tasksById} />}\n {attach?.kind === \"task\" && <TaskContext task={tasksById[attach.id]} id={attach.id} items={items} />}\n </div>\n </div>\n )\n}\n\nfunction NoAttach() {\n return (\n <>\n <p className={KICKER}>Context</p>\n <div className=\"flex flex-col items-start gap-3 rounded-lg border border-dashed border-border2 p-4\">\n <Link2Off className=\"size-4 text-muted\" />\n <p className=\"text-sm text-txt\">Not linked to an epic or task</p>\n <p className=\"text-xs leading-relaxed text-muted\">\n Open a chat from an epic on the roadmap or a task on the board, and the agent starts with that item as context.\n Its status then shows on the item.\n </p>\n </div>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>The agent can</p>\n <ul className=\"flex flex-col gap-1.5 text-xs text-muted\">\n <li>Read docs, tasks, the roadmap and memory</li>\n <li>Propose doc and task edits (you review a diff)</li>\n <li>Propose epics and task breakdowns (you accept)</li>\n <li className=\"text-muted/70\">It can&apos;t run code or edit source files</li>\n </ul>\n </div>\n </>\n )\n}\n\nfunction EpicContext({ item, id, tasksById }: { item?: RoadmapItem; id: string; tasksById: Record<string, Task> }) {\n if (!item) return <Missing kind=\"Epic\" id={id} />\n const tasks = item.tasks.map((t) => tasksById[t]).filter((t): t is Task => !!t)\n const statuses = tasks.map((t) => t.status).filter((s): s is TaskStatus => s !== \"cancelled\")\n const done = statuses.filter((s) => s === \"done\").length\n return (\n <>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>Epic · {item.id}</p>\n <h3 className=\"text-base font-semibold leading-snug text-txt\">{item.title}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <StatusPill status={item.status} />\n {item.due && <span className=\"font-mono text-[10px] text-muted\">due {item.due}</span>}\n </div>\n </div>\n\n {statuses.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-baseline justify-between\">\n <p className={KICKER}>Progress</p>\n <span className=\"font-mono text-[10px] text-muted\">{done}/{statuses.length} tasks</span>\n </div>\n <SegmentedProgress statuses={statuses} />\n </div>\n )}\n\n {tasks.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Tasks</p>\n <ul className=\"-mx-2 flex flex-col\">\n {tasks.map((t) => <TaskRow key={t.id} task={t} />)}\n </ul>\n </div>\n )}\n\n {item.body.trim() && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Brief</p>\n <MarkdownRenderer content={item.body} className=\"prose-compact\" />\n </div>\n )}\n\n <OpenLink attach={{ kind: \"epic\", id: item.id }} label=\"Open in roadmap\" />\n </>\n )\n}\n\nfunction TaskRow({ task }: { task: Task }) {\n const { showAbout } = useChats()\n return (\n <li>\n <button\n type=\"button\"\n onClick={() => showAbout({ kind: \"task\", id: task.id })}\n title={`Chat about ${task.id}`}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs transition-colors duration-(--duration-fast) hover:bg-surface2\"\n >\n <StatusIcon status={displayStatus(task)} className=\"size-3\" />\n <span className=\"shrink-0 font-mono text-[10px] text-muted\">{task.id}</span>\n <span className={cn(\"min-w-0 flex-1 truncate\", task.status === \"done\" ? \"text-muted\" : \"text-txt\")}>{task.title}</span>\n </button>\n </li>\n )\n}\n\nfunction TaskContext({ task, id, items }: { task?: Task; id: string; items: RoadmapItem[] }) {\n const { showAbout } = useChats()\n if (!task) return <Missing kind=\"Task\" id={id} />\n const epicId = task.phase.match(/^R\\d+/)?.[0]\n const epic = epicId ? items.find((i) => i.id === epicId) : undefined\n const body = task.raw?.replace(/^#.*\\n(\\*\\*[^*]+:\\*\\*.*\\n)*/, \"\").trim()\n return (\n <>\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>Task · {task.id}</p>\n <h3 className=\"text-base font-semibold leading-snug text-txt\">{task.title}</h3>\n <div className=\"flex flex-wrap items-center gap-2\">\n <StatusChip status={displayStatus(task)} />\n {task.size && <span className=\"font-mono text-[10px] text-muted\">{task.size}</span>}\n {task.due && <span className=\"font-mono text-[10px] text-muted\">due {task.due}</span>}\n </div>\n </div>\n\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1.5 text-xs\">\n {epicId && (\n <>\n <dt className=\"text-muted\">Epic</dt>\n <dd className=\"min-w-0\">\n <button type=\"button\" onClick={() => showAbout({ kind: \"epic\", id: epicId })} className=\"truncate text-left text-txt hover:text-accent\" title={`Chat about ${epicId}`}>\n <span className=\"font-mono text-[10px] text-muted\">{epicId}</span> {epic?.title ?? task.phase.replace(/^R\\d+\\s*—\\s*/, \"\")}\n </button>\n </dd>\n </>\n )}\n {task.dependsOn && task.dependsOn !== \"—\" && (\n <>\n <dt className=\"text-muted\">Depends on</dt>\n <dd className=\"font-mono text-[11px] text-txt\">{task.dependsOn}</dd>\n </>\n )}\n </dl>\n\n {body && (\n <div className=\"flex flex-col gap-1.5\">\n <p className={KICKER}>Spec</p>\n <MarkdownRenderer content={body} className=\"prose-compact\" />\n </div>\n )}\n\n <OpenLink attach={{ kind: \"task\", id: task.id }} label=\"Open on board\" />\n </>\n )\n}\n\nfunction Missing({ kind, id }: { kind: string; id: string }) {\n return (\n <div className=\"flex flex-col gap-2\">\n <p className={KICKER}>{kind} · {id}</p>\n <p className=\"text-sm text-muted\">{kind} {id} isn&apos;t in this project any more.</p>\n </div>\n )\n}\n\nfunction OpenLink({ attach, label }: { attach: Attach; label: string }) {\n return (\n <Link\n href={attachHref(attach)}\n className=\"group inline-flex w-fit items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs text-txt transition-colors duration-(--duration-fast) hover:border-accent/50 hover:text-accent\"\n >\n {label}\n <ArrowUpRight className=\"size-3.5 transition-transform duration-(--duration-fast) group-hover:-translate-y-px group-hover:translate-x-px\" />\n </Link>\n )\n}\n","\"use client\"\n\nimport { Suspense, useState } from \"react\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\nimport { Plus, Search, X } from \"lucide-react\"\nimport { useChats, type ChatTab } from \"@/context/ChatContext\"\nimport { ChatView } from \"@/components/chat/ChatView\"\nimport { ChatContextRail } from \"@/components/chat/ChatContextRail\"\nimport { AttachLabel, StatusMarker } from \"@/components/chat/StatusMarker\"\nimport { ago, defaultChat, groupChats, shellStatus, suggestions } from \"@/lib/chats\"\nimport { useMinute } from \"@/hooks/use-minute\"\nimport { cn } from \"@/lib/utils\"\n\nexport default function ChatPage() {\n // main has no fixed height; the columns need one (viewport minus the h-12 AppHeader)\n return (\n <div className=\"flex h-[calc(100svh-3rem)] min-h-0\">\n <Suspense>\n <ChatPageInner />\n </Suspense>\n </div>\n )\n}\n\nfunction ChatPageInner() {\n const { chats, loaded, create, show, send, now } = useChats()\n const router = useRouter()\n const param = useSearchParams().get(\"id\")\n const selected = chats.find((c) => c.id === param) ?? (param ? undefined : defaultChat(chats, now))\n\n function startWith(text?: string) {\n const id = create()\n show(id)\n if (text) send(id, text)\n }\n\n return (\n <>\n <ChatList selectedId={selected?.id ?? null} onNew={() => startWith()} />\n\n <section className=\"flex min-w-0 flex-1 flex-col border-r border-border bg-bg\">\n {selected ? (\n <div key={selected.id} className=\"flex min-h-0 flex-1 flex-col animate-fade-in\">\n <ChatView chatId={selected.id} variant=\"page\" />\n </div>\n ) : loaded ? (\n <NoChat\n missing={!!param}\n onStart={startWith}\n onBack={() => router.replace(\"/chat\")}\n />\n ) : null}\n </section>\n\n <aside className=\"hidden w-80 shrink-0 bg-surface xl:block\" aria-label=\"Chat context\">\n <ChatContextRail attach={selected?.attach ?? null} />\n </aside>\n </>\n )\n}\n\nfunction ChatList({ selectedId, onNew }: { selectedId: string | null; onNew: () => void }) {\n const { chats, now } = useChats()\n const [query, setQuery] = useState(\"\")\n const q = query.trim().toLowerCase()\n const shown = q ? chats.filter((c) => c.title.toLowerCase().includes(q) || c.attach?.id.toLowerCase().includes(q)) : chats\n const g = groupChats(shown, now)\n const sections = [\n { label: \"Needs you\", items: g.needsYou, tone: \"text-amber\" },\n { label: \"Errors\", items: g.errors, tone: \"text-danger\" },\n { label: \"Running\", items: g.running, tone: \"text-accent\" },\n { label: \"Recent\", items: g.recent, tone: \"text-muted\" },\n ]\n\n return (\n <aside className=\"hidden w-72 shrink-0 flex-col border-r border-border bg-surface md:flex\" aria-label=\"All chats\">\n <div className=\"flex items-center gap-2 px-4 pb-3 pt-4\">\n <h1 className=\"flex-1 text-sm font-semibold text-txt\">Chats</h1>\n <button\n type=\"button\"\n onClick={onNew}\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-2.5 py-1.5 text-xs font-medium text-accent-fg transition-[filter,transform] duration-(--duration-fast) hover:brightness-110 active:scale-[0.97]\"\n >\n <Plus className=\"size-3.5\" /> New chat\n </button>\n </div>\n {chats.length > 3 && (\n <label className=\"mx-3 mb-2 flex items-center gap-2 rounded-md border border-border bg-bg px-2.5 py-1.5 text-xs focus-within:border-accent/50\">\n <Search className=\"size-3.5 text-muted\" />\n <input\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Filter by title or R/T id\"\n className=\"min-w-0 flex-1 bg-transparent text-txt placeholder:text-muted focus:outline-hidden\"\n />\n </label>\n )}\n <div className=\"min-h-0 flex-1 overflow-y-auto px-2 pb-4\">\n {chats.length === 0 && <p className=\"px-2 py-6 text-xs text-muted\">No chats yet.</p>}\n {sections.map((s) => s.items.length > 0 && (\n <div key={s.label} className=\"mt-3 first:mt-1\">\n <p className={cn(\"px-2 pb-1 font-mono text-[10px] uppercase tracking-widest\", s.tone)}>\n {s.label} · {s.items.length}\n </p>\n <ul className=\"flex flex-col gap-px\">\n {s.items.map((c) => <ChatRow key={c.id} chat={c} active={c.id === selectedId} />)}\n </ul>\n </div>\n ))}\n {q && shown.length === 0 && <p className=\"px-2 py-6 text-xs text-muted\">No chat matches “{query}”.</p>}\n </div>\n </aside>\n )\n}\n\nfunction ChatRow({ chat, active }: { chat: ChatTab; active: boolean }) {\n const { show, remove, now: clock } = useChats()\n const now = useMinute()\n const status = shellStatus(chat, clock)\n const lastText = [...chat.messages].reverse().find((m) => m.text)?.text.replace(/\\s+/g, \" \").trim()\n return (\n <li className=\"group relative animate-slide-in\">\n <button\n type=\"button\"\n onClick={() => show(chat.id)}\n aria-current={active ? \"true\" : undefined}\n className={cn(\n \"flex w-full flex-col gap-1 rounded-lg px-2.5 py-2 text-left transition-colors duration-(--duration-fast)\",\n active ? \"bg-surface2 shadow-[inset_2px_0_0_rgb(var(--rgb-accent))]\" : \"hover:bg-surface2/60\",\n )}\n >\n <span className=\"flex items-center gap-2 pr-5\">\n <StatusMarker status={status} showIdle />\n <span className={cn(\"min-w-0 flex-1 truncate text-[13px]\", status === \"idle\" && !active ? \"text-txt/80\" : \"text-txt\")}>{chat.title}</span>\n {now > 0 && <span className=\"shrink-0 font-mono text-[10px] text-muted group-hover:opacity-0\">{ago(chat.updatedAt, now)}</span>}\n </span>\n {(chat.attach || lastText) && (\n <span className=\"flex items-center gap-2 pl-5 text-[11px] text-muted\">\n {chat.attach && <AttachLabel attach={chat.attach} className=\"shrink-0\" />}\n {lastText && <span className=\"min-w-0 truncate\">{lastText}</span>}\n </span>\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => remove(chat.id)}\n aria-label={`Close ${chat.title}`}\n title={chat.busy ? \"Stop and delete chat\" : \"Delete chat\"}\n className=\"absolute right-1.5 top-1.5 grid size-6 place-items-center rounded-md text-muted opacity-0 transition-opacity duration-(--duration-fast) hover:bg-surface hover:text-danger focus-visible:opacity-100 group-hover:opacity-100\"\n >\n <X className=\"size-3.5\" />\n </button>\n </li>\n )\n}\n\nfunction NoChat({ missing, onStart, onBack }: { missing: boolean; onStart: (text?: string) => void; onBack: () => void }) {\n return (\n <div className=\"grid flex-1 place-items-center p-8\">\n <div className=\"flex max-w-md flex-col items-start gap-4 animate-fade-in\">\n <div className=\"grid size-10 place-items-center rounded-xl bg-linear-to-br from-accent to-teal text-white\" aria-hidden>⬡</div>\n {missing ? (\n <>\n <h2 className=\"text-lg font-semibold text-txt\">This chat was deleted</h2>\n <button type=\"button\" onClick={onBack} className=\"text-sm text-accent hover:underline\">Back to all chats</button>\n </>\n ) : (\n <>\n <div>\n <h2 className=\"text-lg font-semibold text-txt\">Run chats side by side</h2>\n <p className=\"mt-1 text-sm text-muted\">\n Each chat is its own Claude Code session, up to 4 at once. Start one here, or from an epic on the roadmap or a task on the board.\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n {suggestions(null).map((s) => (\n <button key={s} type=\"button\" onClick={() => onStart(s)} className=\"rounded-lg border border-border px-3 py-2 text-left text-sm text-txt/90 transition-colors hover:border-accent/50 hover:bg-accent/5\">\n {s}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","import { useSyncExternalStore } from \"react\"\n\nconst subscribe = (tick: () => void) => {\n const id = setInterval(tick, 30_000)\n return () => clearInterval(id)\n}\n// Rounded to the minute so the snapshot is stable between ticks\nconst snapshot = () => Math.floor(Date.now() / 60_000) * 60_000\n\n/** Current time in ms, updated about once a minute (for \"5m ago\" labels). 0 during server render. */\nexport function useMinute(): number {\n return useSyncExternalStore(subscribe, snapshot, () => 0)\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'link-2-off',\n size: 24,\n node: [\n ['path', { d: 'M9 17H7A5 5 0 0 1 7 7', key: '10o201' }],\n ['path', { d: 'M15 7h2a5 5 0 0 1 4 8', key: '1d3206' }],\n ['line', { x1: '8', x2: '12', y1: '12', y2: '12', key: 'rvw6j4' }],\n ['line', { x1: '2', x2: '22', y1: '2', y2: '22', key: 'a6p6uj' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Link2Off\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOSAxN0g3QTUgNSAwIDAgMSA3IDciIC8+CiAgPHBhdGggZD0iTTE1IDdoMmE1IDUgMCAwIDEgNCA4IiAvPgogIDxsaW5lIHgxPSI4IiB4Mj0iMTIiIHkxPSIxMiIgeTI9IjEyIiAvPgogIDxsaW5lIHgxPSIyIiB4Mj0iMjIiIHkxPSIyIiB5Mj0iMjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/link-2-off\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 Link2Off = createLucideIcon(__iconData);\n\nexport default Link2Off;\n"],"names":["x2","y2"],"mappings":"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","ignoreList":[3]}
@@ -1,3 +1,3 @@
1
- module.exports=[648102,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(544394),f=a.i(210436),g=a.i(817163);function h(){let{rootParam:a,refresh:b,setEditorSettings:d,setAutoRefreshSeconds:h,autoRefreshSeconds:i}=(0,e.useApp)(),j=(0,c.useRef)(null);return(0,c.useEffect)(()=>{if(!a)return;let b=!1;return fetch(`/api/settings${a}&type=settings`).then(a=>a.ok?a.json():g.DEFAULT_SETTINGS).then(a=>{b||((0,f.applyTheme)(a.theme),(0,f.applyAccent)(a.accentColor),(0,f.applyFontSize)(a.fontSize),(0,f.applyFonts)(a),d(a.editor),h(a.project?.autoRefresh??0))}).catch(()=>{}),()=>{b=!0}},[a]),(0,c.useEffect)(()=>(j.current&&clearInterval(j.current),i>0&&(j.current=setInterval(b,1e3*i)),()=>{j.current&&(clearInterval(j.current),j.current=null)}),[i,b]),null}function i(){return(0,b.jsx)("div",{className:"min-h-screen flex items-center justify-center",children:(0,b.jsxs)("div",{className:"text-center",children:[(0,b.jsx)("div",{className:"flex gap-1.5 justify-center mb-4",children:[0,1,2].map(a=>(0,b.jsx)("div",{className:"w-2 h-2 rounded-full bg-accent animate-pulse-dot",style:{animationDelay:`${.15*a}s`}},a))}),(0,b.jsx)("p",{className:"text-muted text-sm font-mono",children:"Loading project..."})]})})}var j=a.i(685698),k=a.i(335732);function l({projects:a,activeProject:c,currentName:d,onSelect:e}){return(0,b.jsxs)(k.DropdownMenu,{children:[(0,b.jsx)(k.DropdownMenuTrigger,{asChild:!0,children:(0,b.jsxs)("button",{className:"flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-surface2 border border-border text-sm hover:border-border2 transition-colors",children:[(0,b.jsx)("span",{className:"text-txt font-medium truncate max-w-[200px]",children:d||"Select project"}),(0,b.jsx)("span",{className:"text-muted text-xs",children:"▾"})]})}),(0,b.jsx)(k.DropdownMenuContent,{className:"w-64 bg-surface border-border2 text-txt",align:"start",children:0===a.length?(0,b.jsx)("div",{className:"px-3 py-2 text-sm text-muted",children:"No projects found"}):a.map(a=>(0,b.jsx)(k.DropdownMenuItem,{onClick:()=>e(a.root),className:`cursor-pointer hover:bg-surface2 focus:bg-surface2 ${a.root===c?"text-accent":""}`,children:(0,b.jsxs)("div",{children:[(0,b.jsx)("div",{className:"font-medium",children:a.name}),(0,b.jsx)("div",{className:"text-xs text-muted truncate font-mono",children:a.root})]})},a.root))})]})}var m=a.i(786304);function n({board:a}){return(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)(m.Badge,{variant:"secondary",className:"gap-1 text-xs font-mono text-amber",children:["🔨 ",a["in-progress"]||0]}),(0,b.jsxs)(m.Badge,{variant:"secondary",className:"gap-1 text-xs font-mono text-muted",children:["📋 ",a.todo||0]}),(0,b.jsxs)(m.Badge,{variant:"secondary",className:"gap-1 text-xs font-mono text-teal",children:["✅ ",a.done||0]})]})}var o=a.i(368114);function p({active:a}){return(0,b.jsxs)("div",{className:"flex items-center gap-1.5 text-xs font-mono text-muted",children:[(0,b.jsx)("div",{className:(0,o.cn)("w-1.5 h-1.5 rounded-full transition-colors duration-500",a?"bg-teal shadow-[0_0_6px_#4fd8b4]":"bg-border2")}),(0,b.jsx)("span",{children:a?"live update":"connected"})]})}var q=a.i(776692),r=a.i(142261),s=a.i(256857);let t={name:"panel-left",size:24,node:[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],aliases:["sidebar"]};t.node;let u=(0,s.default)(t);var v=a.i(699570),w=a.i(866718),x=a.i(505084),y=a.i(757061);function z({className:a,...c}){return(0,b.jsx)("div",{className:(0,o.cn)("animate-pulse rounded-md bg-surface2",a),...c})}var A=a.i(785259);let B=c.createContext(null);function C(){let a=c.useContext(B);if(!a)throw Error("useSidebar must be used within a SidebarProvider.");return a}let D=c.forwardRef(({defaultOpen:a=!0,open:d,onOpenChange:e,className:f,style:g,children:h,...i},j)=>{let k=function(){let[a,b]=c.useState(void 0);return c.useEffect(()=>{let a=window.matchMedia("(max-width: 767px)"),c=()=>{b(window.innerWidth<768)};return a.addEventListener("change",c),b(window.innerWidth<768),()=>a.removeEventListener("change",c)},[]),!!a}(),[l,m]=c.useState(!1),[n,p]=c.useState(a),q=d??n,r=c.useCallback(a=>{let b="function"==typeof a?a(q):a;e?e(b):p(b),document.cookie=`sidebar_state=${b}; path=/; max-age=604800`},[e,q]),s=c.useCallback(()=>k?m(a=>!a):r(a=>!a),[k,r,m]);c.useEffect(()=>{let a=a=>{"b"===a.key&&(a.metaKey||a.ctrlKey)&&(a.preventDefault(),s())};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[s]);let t=q?"expanded":"collapsed",u=c.useMemo(()=>({state:t,open:q,setOpen:r,isMobile:k,openMobile:l,setOpenMobile:m,toggleSidebar:s}),[t,q,r,k,l,m,s]);return(0,b.jsx)(B.Provider,{value:u,children:(0,b.jsx)(A.TooltipProvider,{delayDuration:0,children:(0,b.jsx)("div",{style:{"--sidebar-width":"16rem","--sidebar-width-icon":"3rem",...g},className:(0,o.cn)("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",f),ref:j,...i,children:h})})})});D.displayName="SidebarProvider";let E=c.forwardRef(({side:a="left",variant:c="sidebar",collapsible:d="offcanvas",className:e,children:f,...g},h)=>{let{isMobile:i,state:j,openMobile:k,setOpenMobile:l}=C();return"none"===d?(0,b.jsx)("div",{className:(0,o.cn)("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",e),ref:h,...g,children:f}):i?(0,b.jsx)(y.Sheet,{open:k,onOpenChange:l,...g,children:(0,b.jsxs)(y.SheetContent,{"data-sidebar":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":"18rem"},side:a,children:[(0,b.jsxs)(y.SheetHeader,{className:"sr-only",children:[(0,b.jsx)(y.SheetTitle,{children:"Sidebar"}),(0,b.jsx)(y.SheetDescription,{children:"Displays the mobile sidebar."})]}),(0,b.jsx)("div",{className:"flex h-full w-full flex-col",children:f})]})}):(0,b.jsxs)("div",{ref:h,className:"group peer hidden text-sidebar-foreground md:block","data-state":j,"data-collapsible":"collapsed"===j?d:"","data-variant":c,"data-side":a,children:[(0,b.jsx)("div",{className:(0,o.cn)("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180","floating"===c||"inset"===c?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),(0,b.jsx)("div",{className:(0,o.cn)("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex","left"===a?"left-0 group-data-[collapsible=offcanvas]:-left-(--sidebar-width)":"right-0 group-data-[collapsible=offcanvas]:-right-(--sidebar-width)","floating"===c||"inset"===c?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",e),...g,children:(0,b.jsx)("div",{"data-sidebar":"sidebar",className:"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm",children:f})})]})});E.displayName="Sidebar";let F=c.forwardRef(({className:a,onClick:c,...d},e)=>{let{toggleSidebar:f}=C();return(0,b.jsxs)(v.Button,{ref:e,"data-sidebar":"trigger",variant:"ghost",size:"icon",className:(0,o.cn)("h-7 w-7",a),onClick:a=>{c?.(a),f()},...d,children:[(0,b.jsx)(u,{}),(0,b.jsx)("span",{className:"sr-only",children:"Toggle Sidebar"})]})});F.displayName="SidebarTrigger",c.forwardRef(({className:a,...c},d)=>{let{toggleSidebar:e}=C();return(0,b.jsx)("button",{ref:d,"data-sidebar":"rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:e,title:"Toggle Sidebar",className:(0,o.cn)("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-[translate,background-color] ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex","in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize","group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",a),...c})}).displayName="SidebarRail";let G=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("main",{ref:d,className:(0,o.cn)("relative flex w-full flex-1 flex-col bg-bg","md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm",a),...c}));G.displayName="SidebarInset",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(w.Input,{ref:d,"data-sidebar":"input",className:(0,o.cn)("h-8 w-full bg-bg shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",a),...c})).displayName="SidebarInput";let H=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"header",className:(0,o.cn)("flex flex-col gap-2 p-2",a),...c}));H.displayName="SidebarHeader",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"footer",className:(0,o.cn)("flex flex-col gap-2 p-2",a),...c})).displayName="SidebarFooter";let I=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(x.Separator,{ref:d,"data-sidebar":"separator",className:(0,o.cn)("mx-2 w-auto bg-sidebar-border",a),...c}));I.displayName="SidebarSeparator";let J=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"content",className:(0,o.cn)("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",a),...c}));J.displayName="SidebarContent";let K=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"group",className:(0,o.cn)("relative flex w-full min-w-0 flex-col p-2",a),...c}));K.displayName="SidebarGroup";let L=c.forwardRef(({className:a,asChild:c=!1,...d},e)=>{let f=c?q.Slot:"div";return(0,b.jsx)(f,{ref:e,"data-sidebar":"group-label",className:(0,o.cn)("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",a),...d})});L.displayName="SidebarGroupLabel";let M=c.forwardRef(({className:a,asChild:c=!1,...d},e)=>{let f=c?q.Slot:"button";return(0,b.jsx)(f,{ref:e,"data-sidebar":"group-action",className:(0,o.cn)("absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 md:after:hidden","group-data-[collapsible=icon]:hidden",a),...d})});M.displayName="SidebarGroupAction";let N=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"group-content",className:(0,o.cn)("w-full text-sm",a),...c}));N.displayName="SidebarGroupContent";let O=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("ul",{ref:d,"data-sidebar":"menu",className:(0,o.cn)("flex w-full min-w-0 flex-col gap-1",a),...c}));O.displayName="SidebarMenu";let P=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("li",{ref:d,"data-sidebar":"menu-item",className:(0,o.cn)("group/menu-item relative",a),...c}));P.displayName="SidebarMenuItem";let Q=(0,r.cva)("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-bg shadow-[0_0_0_1px_rgb(var(--rgb-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_rgb(var(--rgb-surface2))]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}}),R=c.forwardRef(({asChild:a=!1,isActive:c=!1,variant:d="default",size:e="default",tooltip:f,className:g,...h},i)=>{let j=a?q.Slot:"button",{isMobile:k,state:l}=C(),m=(0,b.jsx)(j,{ref:i,"data-sidebar":"menu-button","data-size":e,"data-active":c,className:(0,o.cn)(Q({variant:d,size:e}),g),...h});return f?("string"==typeof f&&(f={children:f}),(0,b.jsxs)(A.Tooltip,{children:[(0,b.jsx)(A.TooltipTrigger,{asChild:!0,children:m}),(0,b.jsx)(A.TooltipContent,{side:"right",align:"center",hidden:"collapsed"!==l||k,...f})]})):m});R.displayName="SidebarMenuButton",c.forwardRef(({className:a,asChild:c=!1,showOnHover:d=!1,...e},f)=>{let g=c?q.Slot:"button";return(0,b.jsx)(g,{ref:f,"data-sidebar":"menu-action",className:(0,o.cn)("absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 md:after:hidden","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",d&&"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",a),...e})}).displayName="SidebarMenuAction",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"menu-badge",className:(0,o.cn)("pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground","peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",a),...c})).displayName="SidebarMenuBadge",c.forwardRef(({className:a,showIcon:d=!1,...e},f)=>{let g=c.useMemo(()=>`${Math.floor(40*Math.random())+50}%`,[]);return(0,b.jsxs)("div",{ref:f,"data-sidebar":"menu-skeleton",className:(0,o.cn)("flex h-8 items-center gap-2 rounded-md px-2",a),...e,children:[d&&(0,b.jsx)(z,{className:"size-4 rounded-md","data-sidebar":"menu-skeleton-icon"}),(0,b.jsx)(z,{className:"h-4 max-w-(--skeleton-width) flex-1","data-sidebar":"menu-skeleton-text",style:{"--skeleton-width":g}})]})}).displayName="SidebarMenuSkeleton",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("ul",{ref:d,"data-sidebar":"menu-sub",className:(0,o.cn)("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5","group-data-[collapsible=icon]:hidden",a),...c})).displayName="SidebarMenuSub",c.forwardRef(({...a},c)=>(0,b.jsx)("li",{ref:c,...a})).displayName="SidebarMenuSubItem",c.forwardRef(({asChild:a=!1,size:c="md",isActive:d,className:e,...f},g)=>{let h=a?q.Slot:"a";return(0,b.jsx)(h,{ref:g,"data-sidebar":"menu-sub-button","data-size":c,"data-active":d,className:(0,o.cn)("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground","data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground","sm"===c&&"text-xs","md"===c&&"text-sm","group-data-[collapsible=icon]:hidden",e),...f})}).displayName="SidebarMenuSubButton";var S=a.i(689101);function T({summary:a,projects:c,activeProject:d,liveIndicator:e,onProjectChange:f,onToggleChat:g}){let h=(0,S.useOrigin)().replace(/^https?:\/\//,""),i=(0,j.useChats)().waitingCount;return(0,b.jsxs)("header",{className:"h-12 border-b border-border flex items-center px-4 gap-4 shrink-0 bg-surface/80 backdrop-blur-xs sticky top-0 z-50",children:[(0,b.jsx)(F,{className:"-ml-1"}),(0,b.jsx)(x.Separator,{orientation:"vertical",className:"mr-2 h-4"}),(0,b.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[(0,b.jsx)("div",{className:"w-6 h-6 rounded-md bg-linear-to-br from-accent to-teal flex items-center justify-center text-xs",children:"⬡"}),(0,b.jsx)("span",{className:"font-mono text-xs text-muted tracking-widest uppercase",children:"VibeDoc"})]}),(0,b.jsx)(l,{projects:c,activeProject:d,currentName:a?.name||"",onSelect:f}),a&&(0,b.jsx)(n,{board:a.tasks.board}),(0,b.jsx)("div",{className:"flex-1"}),(0,b.jsx)(p,{active:e}),(0,b.jsxs)("button",{onClick:g,title:i?`Agent chat (c) \xb7 ${i} waiting for you`:"Agent chat (c)",className:"relative px-2 py-1 rounded-sm border border-border bg-surface2 text-xs font-mono text-muted hover:text-txt",children:["Agent",i>0&&(0,b.jsx)("span",{"aria-label":`${i} waiting for you`,className:"absolute -right-1.5 -top-1.5 min-w-4 h-4 px-1 rounded-full bg-amber text-bg text-[10px] leading-4 font-semibold text-center",children:i})]}),(0,b.jsxs)("div",{className:"hidden md:flex items-center gap-1.5 px-2 py-1 rounded-sm bg-surface2 border border-border",children:[(0,b.jsx)("span",{className:"text-xs font-mono text-muted",children:"MCP"}),(0,b.jsxs)("code",{className:"text-xs font-mono text-accent",children:[h,"/api/mcp"]})]})]})}let U={name:"layout-dashboard",size:24,node:[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]};U.node;let V=(0,s.default)(U);var W=a.i(508817),X=a.i(879136);let Y={name:"brain",size:24,node:[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]]};Y.node;let Z=(0,s.default)(Y),$={name:"circle-dot",size:24,node:[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]};$.node;let _=(0,s.default)($),aa={name:"ban",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M4.929 4.929 19.07 19.071",key:"196cmz"}]]};aa.node;let ab=(0,s.default)(aa),ac={name:"clipboard-list",size:24,node:[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]};ac.node;let ad=(0,s.default)(ac),ae={name:"circle-check",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m16 9-5.5 5.5L8 12",key:"xofnsj"}]],aliases:["check-circle-2"]};ae.node;let af=(0,s.default)(ae);var ag=a.i(966420);let ah={name:"folder-tree",size:24,node:[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]]};ah.node;let ai=(0,s.default)(ah);var aj=a.i(899593),ak=a.i(822404),al=a.i(795667);let am={name:"messages-square",size:24,node:[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]};am.node;let an=(0,s.default)(am);var ao=a.i(200382),ap=a.i(598984),aq=a.i(107742);function ar(){return(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(as,{})})}function as(){let{chats:a,loaded:c,modalId:e,show:f,create:g,waitingCount:h,runningCount:i}=(0,j.useChats)(),k=(0,d.usePathname)(),l=(0,d.useSearchParams)().get("id"),m=(0,aq.groupChats)(a),n=[...m.needsYou,...m.running,...m.recent.slice(0,4)],p=a.length-n.length;return(0,b.jsxs)(K,{role:"group","aria-label":"Agent chats",children:[(0,b.jsxs)(L,{className:"gap-2",children:["Agents",i>0&&(0,b.jsxs)("span",{className:"font-mono text-[10px] normal-case tracking-normal text-accent",children:[i," running"]})]}),(0,b.jsxs)(M,{title:"New chat",onClick:()=>f(g()),children:[(0,b.jsx)(ao.Plus,{}),(0,b.jsx)("span",{className:"sr-only",children:"New chat"})]}),(0,b.jsx)(N,{children:(0,b.jsxs)(O,{children:[(0,b.jsx)(P,{className:"hidden group-data-[collapsible=icon]:block",children:(0,b.jsx)(R,{asChild:!0,tooltip:h?`Agents \xb7 ${h} waiting for you`:"Agents",isActive:"/chat"===k,children:(0,b.jsxs)(ak.default,{href:"/chat",className:"relative",children:[(0,b.jsx)(al.Bot,{}),(0,b.jsx)("span",{children:"Agents"}),h>0&&(0,b.jsx)("span",{className:"absolute right-1 top-1 size-1.5 rounded-full bg-amber animate-pulse-dot"})]})})}),c&&0===a.length&&(0,b.jsx)(P,{className:"group-data-[collapsible=icon]:hidden",children:(0,b.jsxs)(R,{onClick:()=>f(g()),className:"text-muted",children:[(0,b.jsx)(an,{}),(0,b.jsx)("span",{children:"Start a chat"})]})}),n.map(a=>{let c,d=(0,aq.chatStatus)(a);return(0,b.jsx)(P,{className:"group-data-[collapsible=icon]:hidden animate-slide-in",children:(0,b.jsxs)(R,{onClick:()=>f(a.id),isActive:e===(c=a.id)||"/chat"===k&&l===c,className:(0,o.cn)("h-8","idle"===d&&"text-muted"),title:a.title,children:[(0,b.jsx)(ap.StatusMarker,{status:d,showIdle:!0}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a.title}),a.attach&&(0,b.jsx)(ap.AttachLabel,{attach:a.attach,className:"shrink-0 text-muted"})]})},a.id)}),a.length>0&&(0,b.jsx)(P,{className:"group-data-[collapsible=icon]:hidden",children:(0,b.jsx)(R,{asChild:!0,isActive:"/chat"===k&&!l,className:"h-7 text-xs text-muted",children:(0,b.jsxs)(ak.default,{href:"/chat",children:[(0,b.jsx)(an,{}),(0,b.jsx)("span",{children:p>0?`All chats \xb7 ${a.length}`:"All chats"})]})})})]})})]})}let at=[{href:"/board",icon:V,label:"Board"},{href:"/roadmap",icon:aj.Map,label:"Roadmap"},{href:"/docs",icon:W.BookOpen,label:"Docs"},{href:"/activity",icon:X.Zap,label:"Activity"},{href:"/memory",icon:Z,label:"Memory"},{href:"/explorer",icon:ai,label:"Explorer"},{href:"/settings",icon:ag.Settings,label:"Settings"}],au=[{status:"in-progress",icon:_,label:"Active"},{status:"blocked",icon:ab,label:"Blocked"},{status:"todo",icon:ad,label:"Todo"},{status:"done",icon:af,label:"Done"}];function av({board:a}){let c=(0,d.usePathname)();return(0,b.jsxs)(E,{collapsible:"icon",children:[(0,b.jsx)(H,{children:(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1",children:[(0,b.jsx)("div",{className:"w-6 h-6 rounded-md bg-linear-to-br from-accent to-teal flex items-center justify-center text-xs shrink-0",children:"⬡"}),(0,b.jsx)("span",{className:"font-mono text-xs text-muted tracking-widest uppercase group-data-[collapsible=icon]:hidden",children:"VibeDoc"})]})}),(0,b.jsxs)(J,{children:[(0,b.jsx)(K,{children:(0,b.jsx)(N,{children:(0,b.jsx)(O,{children:at.map(({href:a,icon:d,label:e})=>(0,b.jsx)(P,{children:(0,b.jsx)(R,{asChild:!0,isActive:c.startsWith(a),tooltip:e,children:(0,b.jsxs)(ak.default,{href:a,children:[(0,b.jsx)(d,{}),(0,b.jsx)("span",{children:e})]})})},a))})})}),(0,b.jsx)(I,{}),(0,b.jsx)(ar,{}),a&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(I,{}),(0,b.jsxs)(K,{children:[(0,b.jsx)(L,{children:"Board"}),(0,b.jsx)(N,{children:(0,b.jsx)(O,{children:au.map(({status:c,icon:d,label:e})=>{let f=a[c]?.length||0;return(0,b.jsx)(P,{children:(0,b.jsxs)(R,{tooltip:`${e}: ${f}`,children:[(0,b.jsx)(d,{}),(0,b.jsx)("span",{children:e}),(0,b.jsx)("span",{className:"ml-auto font-mono text-xs",children:f})]})},c)})})})]})]})]})]})}var aw=a.i(72551);let ax={name:"file-plus",size:24,node:[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}],["path",{d:"M12 18v-6",key:"17g6i2"}]]};ax.node;let ay=(0,s.default)(ax),az={name:"activity",size:24,node:[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]};az.node;let aA=(0,s.default)(az);var aB=a.i(814574),aC=a.i(269876);function aD({open:a,onClose:e,onOpenDoc:f,onNewDoc:g,rootParam:h}){let i=(0,d.useRouter)(),[j,k]=(0,c.useState)(""),[l,m]=(0,c.useState)([]),[n,p]=(0,c.useState)(0),q=[{label:"New Doc",icon:ay,action:()=>{g?.(),e()}},{label:"Go to Board",icon:V,action:()=>{i.push("/board"),e()}},{label:"Go to Roadmap",icon:aj.Map,action:()=>{i.push("/roadmap"),e()}},{label:"Go to Activity",icon:aA,action:()=>{i.push("/activity"),e()}},{label:"Go to Memory",icon:Z,action:()=>{i.push("/memory"),e()}}];function r(a){f(a.path),e()}(0,c.useEffect)(()=>{a||(k(""),m([]),p(0))},[a]),(0,c.useEffect)(()=>{if(j.length<2){m([]),p(0);return}let a=setTimeout(async()=>{try{let a=await fetch(`/api/docs${h}&q=${encodeURIComponent(j)}`),b=await a.json();m(b.results?.map(a=>({path:a.file,section:a.file.split("/").slice(0,-1).join("/"),name:a.file.split("/").pop()?.replace(/\.md$/,"")??a.file}))??[]),p(0)}catch{}},300);return()=>clearTimeout(a)},[j,h]);let s=""===j;return(0,b.jsx)(aB.Dialog,{open:a,onOpenChange:a=>{a||e()},children:(0,b.jsxs)(aB.DialogContent,{className:"max-w-lg p-0 overflow-hidden bg-surface border-border gap-0",children:[(0,b.jsx)(aB.DialogTitle,{className:"sr-only",children:"Command Palette"}),(0,b.jsxs)("div",{className:"flex items-center px-4 h-12",children:[(0,b.jsx)(aw.Search,{className:"h-4 w-4 text-muted shrink-0 mr-3"}),(0,b.jsx)(w.Input,{autoFocus:!0,value:j,onChange:a=>k(a.target.value),onKeyDown:function(a){let b=l.length>0,c=b?l.length:q.length;"ArrowDown"===a.key?(a.preventDefault(),p(a=>Math.min(a+1,c-1))):"ArrowUp"===a.key?(a.preventDefault(),p(a=>Math.max(a-1,0))):"Enter"===a.key&&(b&&l[n]?r(l[n]):!b&&j.length<2&&q[n]&&q[n].action())},placeholder:"Search docs…",className:"border-0 bg-transparent h-full text-sm shadow-none focus-visible:ring-0 px-0 placeholder:text-muted"})]}),(0,b.jsx)("div",{className:"border-t border-border"}),(0,b.jsxs)(aC.ScrollArea,{className:"max-h-72",children:[s&&(0,b.jsx)("div",{className:"py-1",children:q.map((a,c)=>(0,b.jsxs)("button",{onClick:a.action,onMouseEnter:()=>p(c),className:(0,o.cn)("flex items-center gap-3 w-full px-4 py-2 text-sm text-left transition-colors",n===c?"bg-accent/10 text-txt":"text-muted hover:text-txt"),children:[(0,b.jsx)(a.icon,{className:"h-4 w-4 shrink-0"}),a.label]},a.label))}),!s&&l.length>0&&(0,b.jsx)("div",{className:"py-1",children:l.map((a,c)=>(0,b.jsxs)("button",{onClick:()=>r(a),onMouseEnter:()=>p(c),className:(0,o.cn)("flex items-center justify-between w-full px-4 py-2 text-sm text-left transition-colors",n===c?"bg-accent/10":"hover:bg-accent/5"),children:[(0,b.jsx)("span",{className:"font-medium text-txt truncate",children:a.name}),a.section&&(0,b.jsx)("span",{className:"text-xs text-muted ml-3 shrink-0 truncate max-w-[40%]",children:a.section})]},a.path))}),!s&&j.length>=2&&0===l.length&&(0,b.jsx)("div",{className:"px-4 py-6 text-center text-sm text-muted",children:"No docs found"})]})]})})}var aE=a.i(926128);let aF=/[/\-_. ]/;function aG({open:a,onClose:d,onOpenDoc:e,rootParam:f}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(0),m=(0,c.useRef)(null),[n,p]=(0,c.useState)(a);a!==n&&(p(a),a&&(j(""),l(0))),(0,c.useEffect)(()=>{a&&fetch(`/api/docs${f}`).then(a=>a.json()).then(a=>h(Array.isArray(a)?a:[])).catch(()=>h([]))},[a,f]);let q=(0,c.useMemo)(()=>{var a;return a=a=>a.path,g.map(b=>({item:b,path:a(b),score:function(a,b){let c=a.toLowerCase().replace(/\s+/g,"");if(!c)return 0;let d=b.toLowerCase(),e=null;for(let a=d.indexOf(c[0]);-1!==a;a=d.indexOf(c[0],a+1)){let b=function(a,b,c){let d=b.lastIndexOf("/")+1,e=0,f=0,g=-2;for(let h=c;h<b.length&&f<a.length;h++)b[h]===a[f]&&(e+=1,h===g+1&&(e+=5),(0===h||aF.test(b[h-1]))&&(e+=8),h>=d&&(e+=3),g=h,f++);return f===a.length?e:null}(c,d,a);null!==b&&(null===e||b>e)&&(e=b)}return e}(i,a(b))})).filter(a=>null!==a.score).sort((a,b)=>b.score-a.score||a.path.length-b.path.length).map(a=>a.item)},[i,g]),r=q.slice(0,50);function s(a){a&&(e(a.path),d())}return(0,c.useEffect)(()=>{m.current?.querySelector(`[data-index="${k}"]`)?.scrollIntoView({block:"nearest"})},[k]),(0,b.jsx)(aB.Dialog,{open:a,onOpenChange:a=>{a||d()},children:(0,b.jsxs)(aB.DialogContent,{className:"max-w-xl p-0 overflow-hidden bg-surface border-border gap-0 top-[20%] translate-y-0",children:[(0,b.jsx)(aB.DialogTitle,{className:"sr-only",children:"Go to file"}),(0,b.jsx)(w.Input,{autoFocus:!0,value:i,onChange:a=>{j(a.target.value),l(0)},onKeyDown:function(a){"ArrowDown"===a.key||a.ctrlKey&&"n"===a.key?(a.preventDefault(),l(a=>Math.min(a+1,r.length-1))):"ArrowUp"===a.key||a.ctrlKey&&"p"===a.key?(a.preventDefault(),l(a=>Math.max(a-1,0))):"Enter"===a.key&&(a.preventDefault(),s(r[k]))},placeholder:"Go to file…",className:"h-11 rounded-none border-0 border-b border-border bg-transparent px-4 text-sm shadow-none focus-visible:ring-0 placeholder:text-muted"}),(0,b.jsxs)("div",{ref:m,className:"max-h-80 overflow-y-auto py-1",children:[r.map((a,c)=>{let d=a.path.lastIndexOf("/");return(0,b.jsxs)("button",{"data-index":c,onClick:()=>s(a),onMouseMove:()=>l(c),className:(0,o.cn)("flex items-center gap-2.5 w-full px-4 py-1.5 text-left text-sm transition-colors",k===c?"bg-accent/10 text-txt":"text-muted"),children:[(0,b.jsx)(aE.FileText,{className:"h-3.5 w-3.5 shrink-0 opacity-60"}),(0,b.jsx)("span",{className:"truncate text-txt",children:a.path.slice(d+1)}),d>0&&(0,b.jsx)("span",{className:"truncate text-xs text-muted",children:a.path.slice(0,d)})]},a.path)}),0===r.length&&(0,b.jsx)("div",{className:"px-4 py-6 text-center text-sm text-muted",children:"No matching files"}),q.length>50&&(0,b.jsxs)("div",{className:"px-4 py-1.5 text-xs text-muted",children:[q.length-50," more — keep typing to narrow"]})]})]})})}var aH=a.i(877468),aI=a.i(712125);function aJ(){let{chats:a,modalId:c,closeModal:e}=(0,j.useChats)(),f=(0,d.useRouter)(),g=a.find(a=>a.id===c)?.title??"Chat";return(0,b.jsx)(aB.Dialog,{open:!!c,onOpenChange:a=>{a||e()},children:(0,b.jsxs)(aB.DialogContent,{"aria-describedby":void 0,className:"flex h-[min(82vh,780px)] w-[calc(100vw-2rem)] flex-col gap-0 overflow-hidden rounded-xl p-0 shadow-2xl sm:max-w-3xl sm:rounded-xl",children:[(0,b.jsx)(aB.DialogTitle,{className:"sr-only",children:g}),c&&(0,b.jsx)(aI.ChatView,{chatId:c,variant:"modal",onNavigate:e,onExpand:()=>{e({keep:!0}),f.push(`/chat?id=${encodeURIComponent(c)}`)}})]})})}let aK=[{key:"Cmd+K",description:"Open command palette"},{key:"Cmd+P",description:"Go to file"},{key:"b",description:"Go to Board"},{key:"d",description:"Go to Docs"},{key:"a",description:"Go to Activity"},{key:"m",description:"Go to Memory"},{key:"e",description:"Go to Explorer"},{key:"c",description:"Open agent chat"},{key:"/",description:"Focus doc search"},{key:"?",description:"Toggle this help"},{key:"Esc",description:"Close panel / modal"}];function aL({children:a}){let{loading:f,summary:g,projects:h,activeProject:k,liveIndicator:l,onProjectChange:m,board:n,openDoc:o,rootParam:p}=(0,e.useApp)(),q=(0,d.useRouter)(),r=(0,d.usePathname)(),[s,t]=(0,c.useState)(!1),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(!1),[y,z]=(0,c.useState)(!1),{modalId:A,closeModal:B,showDefault:C}=(0,j.useChats)();return((0,c.useEffect)(()=>{function a(a){if((a.metaKey||a.ctrlKey)&&"k"===a.key){a.preventDefault(),v(a=>!a);return}if((a.metaKey||a.ctrlKey)&&"p"===a.key){a.preventDefault(),v(!1),x(a=>!a);return}let b=a.target?.tagName;if("INPUT"!==b&&"TEXTAREA"!==b)switch(a.key){case"b":q.push("/board");break;case"d":q.push("/docs");break;case"a":q.push("/activity");break;case"m":q.push("/memory");break;case"e":q.push("/explorer");break;case"c":a.preventDefault(),A?B():C();break;case"?":t(a=>!a);break;case"Escape":t(!1);break;case"/":a.preventDefault(),"/docs"===r?document.getElementById("doc-search")?.focus():q.push("/docs")}}return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[q,r,A,B,C]),f)?(0,b.jsx)(i,{}):(0,b.jsxs)(D,{children:[(0,b.jsx)(av,{board:n}),(0,b.jsxs)(G,{className:"min-w-0",children:[(0,b.jsx)(T,{summary:g,projects:h,activeProject:k,liveIndicator:l,onProjectChange:m,onToggleChat:()=>A?B():C()}),(0,b.jsx)("main",{className:"flex-1 min-h-0 overflow-y-auto",children:a}),(0,b.jsx)(aJ,{}),(0,b.jsx)(aG,{open:w,onClose:()=>x(!1),onOpenDoc:o,rootParam:p}),(0,b.jsx)(aD,{open:u,onClose:()=>v(!1),onOpenDoc:o,onNewDoc:()=>{v(!1),z(!0)},rootParam:p}),(0,b.jsx)(aH.NewDocModal,{open:y,onOpenChange:z,rootParam:p,onDocCreated:async a=>{await o(a)}}),(0,b.jsx)(aB.Dialog,{open:s,onOpenChange:t,children:(0,b.jsxs)(aB.DialogContent,{"aria-describedby":void 0,className:"block w-80 p-5 rounded-xl sm:rounded-xl shadow-2xl",children:[(0,b.jsx)(aB.DialogTitle,{className:"font-display text-sm font-semibold text-txt mb-4",children:"Keyboard shortcuts"}),(0,b.jsx)("table",{className:"w-full text-xs",children:(0,b.jsx)("tbody",{children:aK.map(({key:a,description:c})=>(0,b.jsxs)("tr",{className:"border-t border-border first:border-0",children:[(0,b.jsx)("td",{className:"py-1.5 pr-4",children:(0,b.jsx)("kbd",{className:"font-mono bg-surface2 border border-border rounded-sm px-1.5 py-0.5 text-accent",children:a})}),(0,b.jsx)("td",{className:"py-1.5 text-muted",children:c})]},a))})})]})})]})]})}a.s(["default",0,function({children:a}){return(0,b.jsxs)(e.AppProvider,{children:[(0,b.jsx)(h,{}),(0,b.jsx)(j.ChatProvider,{children:(0,b.jsx)(aL,{children:a})})]})}],648102)}];
1
+ module.exports=[648102,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(544394),f=a.i(210436),g=a.i(817163);function h(){let{rootParam:a,refresh:b,setEditorSettings:d,setAutoRefreshSeconds:h,autoRefreshSeconds:i}=(0,e.useApp)(),j=(0,c.useRef)(null);return(0,c.useEffect)(()=>{if(!a)return;let b=!1;return fetch(`/api/settings${a}&type=settings`).then(a=>a.ok?a.json():g.DEFAULT_SETTINGS).then(a=>{b||((0,f.applyTheme)(a.theme),(0,f.applyAccent)(a.accentColor),(0,f.applyFontSize)(a.fontSize),(0,f.applyFonts)(a),d(a.editor),h(a.project?.autoRefresh??0))}).catch(()=>{}),()=>{b=!0}},[a]),(0,c.useEffect)(()=>(j.current&&clearInterval(j.current),i>0&&(j.current=setInterval(b,1e3*i)),()=>{j.current&&(clearInterval(j.current),j.current=null)}),[i,b]),null}function i(){return(0,b.jsx)("div",{className:"min-h-screen flex items-center justify-center",children:(0,b.jsxs)("div",{className:"text-center",children:[(0,b.jsx)("div",{className:"flex gap-1.5 justify-center mb-4",children:[0,1,2].map(a=>(0,b.jsx)("div",{className:"w-2 h-2 rounded-full bg-accent animate-pulse-dot",style:{animationDelay:`${.15*a}s`}},a))}),(0,b.jsx)("p",{className:"text-muted text-sm font-mono",children:"Loading project..."})]})})}var j=a.i(822404),k=a.i(795667),l=a.i(425404),m=a.i(60084),n=a.i(108280),o=a.i(256857);let p={name:"messages-square",size:24,node:[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]};p.node;let q=(0,o.default)(p);var r=a.i(909898),s=a.i(72551),t=a.i(685698),u=a.i(335732),v=a.i(195011),w=a.i(368114);function x({projects:a,activeProject:d,currentName:e,onSelect:f}){let[g,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),k=a.length>=6,m=i.trim().toLowerCase(),n=m?a.filter(a=>`${a.name} ${a.root}`.toLowerCase().includes(m)):a;return(0,b.jsxs)(u.DropdownMenu,{open:g,onOpenChange:a=>{h(a),a||j("")},children:[(0,b.jsx)(u.DropdownMenuTrigger,{asChild:!0,children:(0,b.jsxs)("button",{className:"flex h-8 items-center gap-1.5 rounded-md px-2 text-sm text-muted transition-colors hover:bg-surface2 hover:text-txt focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg",children:[(0,b.jsx)("span",{className:"max-w-[160px] truncate",children:e||"Select project"}),(0,b.jsx)(v.ChevronsUpDown,{className:"size-3.5 shrink-0 opacity-60"})]})}),(0,b.jsxs)(u.DropdownMenuContent,{className:"w-64 bg-surface border-border2 text-txt",align:"start",children:[k&&(0,b.jsx)("input",{autoFocus:!0,value:i,onChange:a=>j(a.target.value),onKeyDown:a=>{"ArrowDown"===a.key?(a.preventDefault(),a.currentTarget.parentElement?.querySelector("[role=menuitem]")?.focus()):"Enter"===a.key&&n[0]?(f(n[0].root),h(!1),j("")):1===a.key.length&&a.stopPropagation()},placeholder:"Filter projects…","aria-label":"Filter projects",className:"mb-1 h-8 w-full border-b border-border bg-transparent px-2 text-sm text-txt outline-none placeholder:text-muted"}),0===n.length?(0,b.jsx)("div",{className:"px-3 py-2 text-sm text-muted",children:a.length?`No project matches “${i.trim()}”`:"No projects found"}):n.map(a=>{var c;let e,g=a.root===d;return(0,b.jsxs)(u.DropdownMenuItem,{onClick:()=>f(a.root),title:a.root,"aria-current":g||void 0,className:(0,w.cn)("cursor-pointer hover:bg-surface2 focus:bg-surface2",g&&"text-accent"),children:[(0,b.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,b.jsx)("div",{className:"truncate font-medium",children:a.name}),(0,b.jsx)("div",{className:"truncate font-mono text-[11px] text-muted",children:(e=(c=a.root).split("/").filter(Boolean)).length>2?`…/${e.slice(-2).join("/")}`:c})]}),(0,b.jsx)(l.Check,{"aria-hidden":!0,className:(0,w.cn)("size-3.5 shrink-0",!g&&"invisible")})]},a.root)})]})]})}var y=a.i(776692),z=a.i(142261);let A={name:"panel-left",size:24,node:[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],aliases:["sidebar"]};A.node;let B=(0,o.default)(A);var C=a.i(959792),D=a.i(699570),E=a.i(866718),F=a.i(505084),G=a.i(757061);function H({className:a,...c}){return(0,b.jsx)("div",{className:(0,w.cn)("animate-pulse rounded-md bg-surface2",a),...c})}var I=a.i(785259);let J=c.createContext(null);function K(){let a=c.useContext(J);if(!a)throw Error("useSidebar must be used within a SidebarProvider.");return a}let L=c.forwardRef(({defaultOpen:a=!0,open:d,onOpenChange:e,className:f,style:g,children:h,...i},j)=>{let k=function(){let[a,b]=c.useState(void 0);return c.useEffect(()=>{let a=window.matchMedia("(max-width: 767px)"),c=()=>{b(window.innerWidth<768)};return a.addEventListener("change",c),b(window.innerWidth<768),()=>a.removeEventListener("change",c)},[]),!!a}(),[l,m]=c.useState(!1),[n,o]=c.useState(a),p=d??n,q=c.useCallback(a=>{let b="function"==typeof a?a(p):a;e?e(b):o(b),document.cookie=`sidebar_state=${b}; path=/; max-age=604800`},[e,p]),r=c.useCallback(()=>k?m(a=>!a):q(a=>!a),[k,q,m]);c.useEffect(()=>{let a=a=>{"b"===a.key&&(a.metaKey||a.ctrlKey)&&!a.defaultPrevented&&!(0,C.inTextField)(a.target)&&(a.preventDefault(),r())};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[r]);let s=p?"expanded":"collapsed",t=c.useMemo(()=>({state:s,open:p,setOpen:q,isMobile:k,openMobile:l,setOpenMobile:m,toggleSidebar:r}),[s,p,q,k,l,m,r]);return(0,b.jsx)(J.Provider,{value:t,children:(0,b.jsx)(I.TooltipProvider,{delayDuration:0,children:(0,b.jsx)("div",{style:{"--sidebar-width":"16rem","--sidebar-width-icon":"3rem",...g},className:(0,w.cn)("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",f),ref:j,...i,children:h})})})});L.displayName="SidebarProvider";let M=c.forwardRef(({side:a="left",variant:c="sidebar",collapsible:d="offcanvas",className:e,children:f,...g},h)=>{let{isMobile:i,state:j,openMobile:k,setOpenMobile:l}=K();return"none"===d?(0,b.jsx)("div",{className:(0,w.cn)("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",e),ref:h,...g,children:f}):i?(0,b.jsx)(G.Sheet,{open:k,onOpenChange:l,...g,children:(0,b.jsxs)(G.SheetContent,{"data-sidebar":"sidebar","data-mobile":"true",className:"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden",style:{"--sidebar-width":"18rem"},side:a,children:[(0,b.jsxs)(G.SheetHeader,{className:"sr-only",children:[(0,b.jsx)(G.SheetTitle,{children:"Sidebar"}),(0,b.jsx)(G.SheetDescription,{children:"Displays the mobile sidebar."})]}),(0,b.jsx)("div",{className:"flex h-full w-full flex-col",children:f})]})}):(0,b.jsxs)("div",{ref:h,className:"group peer hidden text-sidebar-foreground md:block","data-state":j,"data-collapsible":"collapsed"===j?d:"","data-variant":c,"data-side":a,children:[(0,b.jsx)("div",{className:(0,w.cn)("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180","floating"===c||"inset"===c?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),(0,b.jsx)("div",{className:(0,w.cn)("fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex","left"===a?"left-0 group-data-[collapsible=offcanvas]:-left-(--sidebar-width)":"right-0 group-data-[collapsible=offcanvas]:-right-(--sidebar-width)","floating"===c||"inset"===c?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",e),...g,children:(0,b.jsx)("div",{"data-sidebar":"sidebar",className:"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm",children:f})})]})});M.displayName="Sidebar";let N=c.forwardRef(({className:a,onClick:c,...d},e)=>{let{toggleSidebar:f}=K();return(0,b.jsxs)(D.Button,{ref:e,"data-sidebar":"trigger",variant:"ghost",size:"icon",className:(0,w.cn)("h-7 w-7",a),onClick:a=>{c?.(a),f()},...d,children:[(0,b.jsx)(B,{}),(0,b.jsx)("span",{className:"sr-only",children:"Toggle Sidebar"})]})});N.displayName="SidebarTrigger",c.forwardRef(({className:a,...c},d)=>{let{toggleSidebar:e}=K();return(0,b.jsx)("button",{ref:d,"data-sidebar":"rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:e,title:"Toggle Sidebar",className:(0,w.cn)("absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-[translate,background-color] ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex","in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize","group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",a),...c})}).displayName="SidebarRail";let O=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,w.cn)("relative flex w-full flex-1 flex-col bg-bg","md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm",a),...c}));O.displayName="SidebarInset",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(E.Input,{ref:d,"data-sidebar":"input",className:(0,w.cn)("h-8 w-full bg-bg shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",a),...c})).displayName="SidebarInput";let P=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"header",className:(0,w.cn)("flex flex-col gap-2 p-2",a),...c}));P.displayName="SidebarHeader";let Q=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"footer",className:(0,w.cn)("flex flex-col gap-2 p-2",a),...c}));Q.displayName="SidebarFooter",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(F.Separator,{ref:d,"data-sidebar":"separator",className:(0,w.cn)("mx-2 w-auto bg-sidebar-border",a),...c})).displayName="SidebarSeparator";let R=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"content",className:(0,w.cn)("flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",a),...c}));R.displayName="SidebarContent";let S=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"group",className:(0,w.cn)("relative flex w-full min-w-0 flex-col p-2",a),...c}));S.displayName="SidebarGroup";let T=c.forwardRef(({className:a,asChild:c=!1,...d},e)=>{let f=c?y.Slot:"div";return(0,b.jsx)(f,{ref:e,"data-sidebar":"group-label",className:(0,w.cn)("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-hidden ring-sidebar-ring transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",a),...d})});T.displayName="SidebarGroupLabel";let U=c.forwardRef(({className:a,asChild:c=!1,...d},e)=>{let f=c?y.Slot:"button";return(0,b.jsx)(f,{ref:e,"data-sidebar":"group-action",className:(0,w.cn)("absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 md:after:hidden","group-data-[collapsible=icon]:hidden",a),...d})});U.displayName="SidebarGroupAction";let V=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"group-content",className:(0,w.cn)("w-full text-sm",a),...c}));V.displayName="SidebarGroupContent";let W=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("ul",{ref:d,"data-sidebar":"menu",className:(0,w.cn)("flex w-full min-w-0 flex-col gap-1",a),...c}));W.displayName="SidebarMenu";let X=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("li",{ref:d,"data-sidebar":"menu-item",className:(0,w.cn)("group/menu-item relative",a),...c}));X.displayName="SidebarMenuItem";let Y=(0,z.cva)("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-bg shadow-[0_0_0_1px_rgb(var(--rgb-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_rgb(var(--rgb-surface2))]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}}),Z=c.forwardRef(({asChild:a=!1,isActive:c=!1,variant:d="default",size:e="default",tooltip:f,className:g,...h},i)=>{let j=a?y.Slot:"button",{isMobile:k,state:l}=K(),m=(0,b.jsx)(j,{ref:i,"data-sidebar":"menu-button","data-size":e,"data-active":c,className:(0,w.cn)(Y({variant:d,size:e}),g),...h});return f?("string"==typeof f&&(f={children:f}),(0,b.jsxs)(I.Tooltip,{children:[(0,b.jsx)(I.TooltipTrigger,{asChild:!0,children:m}),(0,b.jsx)(I.TooltipContent,{side:"right",align:"center",hidden:"collapsed"!==l||k,...f})]})):m});Z.displayName="SidebarMenuButton";let $=c.forwardRef(({className:a,asChild:c=!1,showOnHover:d=!1,...e},f)=>{let g=c?y.Slot:"button";return(0,b.jsx)(g,{ref:f,"data-sidebar":"menu-action",className:(0,w.cn)("absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-hidden ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0","after:absolute after:-inset-2 md:after:hidden","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",d&&"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",a),...e})});$.displayName="SidebarMenuAction",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,"data-sidebar":"menu-badge",className:(0,w.cn)("pointer-events-none absolute right-1 flex h-5 min-w-5 select-none items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground","peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground","peer-data-[size=sm]/menu-button:top-1","peer-data-[size=default]/menu-button:top-1.5","peer-data-[size=lg]/menu-button:top-2.5","group-data-[collapsible=icon]:hidden",a),...c})).displayName="SidebarMenuBadge",c.forwardRef(({className:a,showIcon:d=!1,...e},f)=>{let g=c.useMemo(()=>`${Math.floor(40*Math.random())+50}%`,[]);return(0,b.jsxs)("div",{ref:f,"data-sidebar":"menu-skeleton",className:(0,w.cn)("flex h-8 items-center gap-2 rounded-md px-2",a),...e,children:[d&&(0,b.jsx)(H,{className:"size-4 rounded-md","data-sidebar":"menu-skeleton-icon"}),(0,b.jsx)(H,{className:"h-4 max-w-(--skeleton-width) flex-1","data-sidebar":"menu-skeleton-text",style:{"--skeleton-width":g}})]})}).displayName="SidebarMenuSkeleton",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("ul",{ref:d,"data-sidebar":"menu-sub",className:(0,w.cn)("mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5","group-data-[collapsible=icon]:hidden",a),...c})).displayName="SidebarMenuSub",c.forwardRef(({...a},c)=>(0,b.jsx)("li",{ref:c,...a})).displayName="SidebarMenuSubItem",c.forwardRef(({asChild:a=!1,size:c="md",isActive:d,className:e,...f},g)=>{let h=a?y.Slot:"a";return(0,b.jsx)(h,{ref:g,"data-sidebar":"menu-sub-button","data-size":c,"data-active":d,className:(0,w.cn)("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground","data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground","sm"===c&&"text-xs","md"===c&&"text-sm","group-data-[collapsible=icon]:hidden",e),...f})}).displayName="SidebarMenuSubButton";var _=a.i(689101),aa=a.i(107742),ab=a.i(376847);let ac={"/board":"Board","/roadmap":"Roadmap","/docs":"Docs","/activity":"Activity","/memory":"Memory","/manual-tests":"Manual tests","/explorer":"Explorer","/settings":"Settings","/chat":"Chats"},ad="focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg";function ae({summary:a,projects:c,activeProject:f,liveIndicator:g,onProjectChange:h,onToggleChat:i,onOpenSearch:j}){let k=(0,d.usePathname)(),l=Object.entries(ac).find(([a])=>k.startsWith(a))?.[1],{activity:m}=(0,e.useApp)(),{now:n}=(0,t.useChats)();return(0,b.jsxs)("header",{className:"sticky top-0 z-50 flex h-12 shrink-0 items-center gap-2 border-b border-border bg-surface/80 px-3 backdrop-blur-xs sm:px-4",children:[(0,b.jsx)(N,{className:"-ml-1 text-muted hover:text-txt"}),(0,b.jsx)("span",{className:"mx-1 h-4 w-px bg-border","aria-hidden":!0}),(0,b.jsxs)("nav",{"aria-label":"Location",className:"flex min-w-0 items-center gap-1.5 text-sm [&_button]:min-w-0 max-sm:[&_button>span]:max-w-20",children:[(0,b.jsx)(x,{projects:c,activeProject:f,currentName:a?.name||"",onSelect:h}),l&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"text-muted","aria-hidden":!0,children:"/"}),(0,b.jsx)("span",{className:"shrink-0 font-medium text-txt",children:l})]})]}),(0,b.jsx)("div",{className:"flex-1"}),(0,b.jsx)(ag,{liveIndicator:g,activity:m,now:n}),(0,b.jsxs)("button",{type:"button",onClick:j,className:(0,w.cn)("flex h-8 items-center gap-2 rounded-md border border-border bg-bg/60 px-2 text-xs text-muted transition-colors hover:border-border2 hover:text-txt sm:w-48 sm:px-2.5",ad),children:[(0,b.jsx)(s.Search,{className:"size-3.5"}),(0,b.jsx)("span",{className:"hidden flex-1 text-left sm:inline",children:"Search…"}),(0,b.jsx)("kbd",{className:"hidden rounded-sm border border-border px-1 font-mono text-[10px] sm:inline",children:"⌘K"}),(0,b.jsx)("span",{className:"sr-only sm:hidden",children:"Search"})]}),(0,b.jsx)(ah,{activity:m,now:n}),(0,b.jsxs)("button",{type:"button",onClick:i,title:"Chats (c)","aria-label":"Chats (c)",className:(0,w.cn)("flex h-8 items-center gap-1.5 rounded-md border border-border px-2.5 text-xs text-muted transition-colors hover:border-border2 hover:text-txt",ad),children:[(0,b.jsx)(q,{className:"size-3.5","aria-hidden":!0}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Chats"})]})]})}let af=(a,b)=>`${a} ${b}${1===a?"":"s"}`;function ag({liveIndicator:a,activity:c,now:f}){let{connection:g}=(0,e.useApp)(),{runningCount:h,waitingCount:i,errorCount:j,queue:l,show:m}=(0,t.useChats)(),o=(0,d.useRouter)(),p=(0,ab.groupSessions)(c).filter(a=>"ai"===a.actor&&(0,ab.isLive)(a,f)).length,q="disconnected"===g,r=q?"Reconnecting…":"live"===g?"Connected":"Connecting",s=[r,p&&`${af(p,"agent")} working`,h&&`${h} ${1===h?"chat":"chats"} running`,i&&`${i} need you`,j&&`${af(j,"chat error")}`].filter(Boolean).join(" · "),u=`${s} — ${l[0]?"open next in queue":"open Chats"}`,v=[i&&`${i} ${1===i?"chat needs":"chats need"} you`,j&&af(j,"chat error")].filter(Boolean).join(", "),x=[["agents",p>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(k.Bot,{"aria-hidden":!0,className:"size-3 text-txt motion-safe:animate-pulse-dot"}),(0,b.jsxs)("span",{className:"text-txt",children:[p,(0,b.jsxs)("span",{className:"max-sm:sr-only",children:[" ",1===p?"agent":"agents"," working"]})]})]})],["running",h>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(n.Loader2,{"aria-hidden":!0,className:"size-3 animate-spin text-accent"}),h," running"]})],["waiting",i>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{"aria-hidden":!0,className:"size-1.5 rounded-full bg-amber animate-pulse-dot"}),(0,b.jsxs)("span",{className:"text-txt",children:[i,(0,b.jsx)("span",{className:"max-sm:sr-only",children:" need you"})]})]})],["errors",j>0&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{"aria-hidden":!0,className:"size-1.5 rounded-full bg-danger"}),(0,b.jsxs)("span",{className:"text-txt",children:[j,(0,b.jsxs)("span",{className:"max-sm:sr-only",children:[" ",1===j?"error":"errors"]})]})]})]].filter(([,a])=>a);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("button",{id:"agent-status",type:"button",onClick:()=>l[0]?m(l[0].id):o.push("/chat"),title:u,"aria-label":u,className:(0,w.cn)("flex h-8 min-w-0 items-center gap-1.5 overflow-hidden whitespace-nowrap rounded-md px-1.5 font-mono text-[11px] text-muted transition-colors duration-(--duration-fast) hover:bg-surface2 hover:text-txt",ad),children:[(0,b.jsx)("span",{"aria-hidden":!0,className:(0,w.cn)("size-1.5 shrink-0 rounded-full transition-colors duration-(--duration-slow)",q?"bg-amber":"live"===g?a?"bg-txt":"bg-muted":"border border-muted")}),q&&(0,b.jsx)("span",{className:"text-txt max-sm:sr-only",children:r}),x.map(([a,c],d)=>(0,b.jsxs)("span",{className:(0,w.cn)("flex items-center gap-1","running"===a&&"max-sm:hidden"),children:[(d>0||q)&&(0,b.jsx)("span",{"aria-hidden":!0,className:(0,w.cn)("text-muted",x.slice(0,d).every(([a])=>"running"===a)&&"max-sm:hidden"),children:"·"}),c]},a))]}),(0,b.jsx)("span",{"aria-live":"polite",className:"sr-only",children:v})]})}function ah({activity:a,now:d}){let e=`${(0,_.useOrigin)()}/api/mcp`,f=`claude mcp add --transport http vibedoc ${e}`,[g,h]=(0,c.useState)(null),i=a.filter(a=>"ai"===a.actor).reduce((a,b)=>!a||b.timestamp>a?b.timestamp:a,null),k=i&&(0,aa.ago)(i,d);async function n(a){try{await navigator.clipboard.writeText(a),h(a),setTimeout(()=>h(null),1500)}catch(a){console.warn("[vibedoc] could not copy:",a)}}let o=(a,c)=>(0,b.jsxs)(u.DropdownMenuItem,{onSelect:b=>{b.preventDefault(),n(a)},className:"mt-2 items-start gap-1 rounded-md border border-border bg-bg px-2 py-1.5 focus:border-border2 [&_svg]:size-3.5",children:[(0,b.jsxs)("span",{className:"sr-only",children:[c,": "]}),(0,b.jsx)("code",{className:"min-w-0 flex-1 break-all font-mono text-xs text-accent",children:a}),(0,b.jsx)("span",{"aria-hidden":!0,className:"grid size-5 place-items-center text-muted",children:g===a?(0,b.jsx)(l.Check,{className:"text-teal"}):(0,b.jsx)(m.Copy,{})})]});return(0,b.jsxs)(u.DropdownMenu,{children:[(0,b.jsx)(u.DropdownMenuTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button",title:"Connect an AI agent (MCP)",className:(0,w.cn)("flex h-8 items-center gap-1.5 rounded-md border border-border px-2 text-xs text-muted transition-colors hover:border-border2 hover:text-txt md:px-2.5",ad),children:[(0,b.jsx)(r.Plug,{"aria-hidden":!0,className:"size-3.5"}),(0,b.jsx)("span",{className:"max-md:sr-only",children:"Connect"})]})}),(0,b.jsxs)(u.DropdownMenuContent,{align:"end",className:"w-80 max-w-[calc(100vw-1.5rem)] border-border2 bg-surface p-3 text-txt",children:[(0,b.jsx)("p",{className:"text-sm font-medium",children:"Connect your AI agent"}),(0,b.jsx)("p",{className:"mt-1 text-xs text-muted",children:"Add this MCP endpoint to Claude Code, Cursor or Windsurf. The board updates live as the agent works."}),o(e,"Copy endpoint"),o(f,"Copy claude mcp add command"),(0,b.jsxs)("p",{className:"mt-3 font-mono text-[11px] text-muted",children:["Last agent call: ",k?"now"===k?"just now":`${k} ago`:"none yet"]}),(0,b.jsx)(u.DropdownMenuItem,{asChild:!0,className:"mt-1 -mx-2 text-xs text-muted focus:text-txt",children:(0,b.jsxs)(j.default,{href:"/settings",children:["Agent configs and connection test in ",(0,b.jsx)("span",{className:"text-accent",children:"Settings → MCP"})]})})]})]})}let ai={name:"layout-dashboard",size:24,node:[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]};ai.node;let aj=(0,o.default)(ai);var ak=a.i(508817),al=a.i(879136),am=a.i(842717),an=a.i(966420);let ao={name:"folder-tree",size:24,node:[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]]};ao.node;let ap=(0,o.default)(ao);var aq=a.i(899593),ar=a.i(270923);let as={name:"hexagon",size:24,node:[["path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z",key:"yt0hxn"}]]};as.node;let at=(0,o.default)(as),au={name:"keyboard",size:24,node:[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]]};au.node;let av=(0,o.default)(au);var aw=a.i(200382),ax=a.i(54165),ay=a.i(598984);let az=(0,C.shortcutFor)("/chat"),aA="rounded-sm border border-border bg-surface2 px-1 font-mono text-[10px] leading-4 text-muted";function aB(){return(0,b.jsx)(c.Suspense,{children:(0,b.jsx)(aC,{})})}function aC(){let{chats:a,loaded:c,modalId:e,show:f,create:g,dismiss:h,waitingCount:i,runningCount:k,errorCount:l,now:m}=(0,t.useChats)(),o=(0,d.usePathname)(),p=(0,d.useSearchParams)().get("id"),r=(0,aa.groupChats)(a,m),s=[...r.needsYou,...r.errors,...r.running,...r.recent.slice(0,4)],u=a.length-s.length,v=[k&&`${k} running`,i&&`${i} waiting for you`,l&&`${l} with an error`].filter(Boolean).join(" · "),x=v?`Chats \xb7 ${v}`:"Chats";return(0,b.jsxs)(S,{role:"group","aria-label":"Chats",children:[(0,b.jsx)(T,{children:"Chats"}),(0,b.jsxs)(U,{title:"New chat",onClick:()=>f(g()),children:[(0,b.jsx)(aw.Plus,{}),(0,b.jsx)("span",{className:"sr-only",children:"New chat"})]}),(0,b.jsx)(V,{children:(0,b.jsxs)(W,{children:[(0,b.jsx)(X,{className:"hidden group-data-[collapsible=icon]:block",children:(0,b.jsx)(Z,{asChild:!0,tooltip:{children:(0,b.jsxs)("span",{className:"flex items-center gap-2",children:[x,az&&(0,b.jsx)("kbd",{className:aA,children:az})]})},isActive:"/chat"===o,children:(0,b.jsxs)(j.default,{href:"/chat","aria-keyshortcuts":az,className:"relative",children:[k>0?(0,b.jsx)(n.Loader2,{className:"animate-spin text-accent"}):(0,b.jsx)(q,{}),(0,b.jsx)("span",{children:x}),i>0&&(0,b.jsx)("span",{"aria-hidden":!0,className:"absolute right-1 top-1 size-1.5 rounded-full bg-amber animate-pulse-dot"}),l>0&&(0,b.jsx)("span",{"aria-hidden":!0,className:"absolute bottom-1 right-1 size-1.5 rounded-full bg-danger"})]})})}),c&&0===a.length&&(0,b.jsx)(X,{className:"group-data-[collapsible=icon]:hidden",children:(0,b.jsxs)(Z,{onClick:()=>f(g()),className:"text-muted",children:[(0,b.jsx)(q,{}),(0,b.jsx)("span",{children:"Start a chat"})]})}),s.map(a=>{let c,d=(0,aa.shellStatus)(a,m),g=(0,aa.isActionableError)(a,m);return(0,b.jsxs)(X,{className:"group-data-[collapsible=icon]:hidden animate-slide-in",children:[(0,b.jsxs)(Z,{onClick:()=>f(a.id),isActive:e===(c=a.id)||"/chat"===o&&p===c,className:(0,w.cn)("h-8","idle"===d&&"text-muted",g&&"pr-8"),title:a.title,children:[(0,b.jsx)(ay.StatusMarker,{status:d,showIdle:!0}),(0,b.jsx)("span",{className:"min-w-0 flex-1 truncate",children:a.title}),g&&(0,b.jsx)("span",{"aria-hidden":!0,className:"shrink-0 font-mono text-[10px] text-danger",children:"error"}),a.attach&&!a.title.includes(a.attach.id)&&(0,b.jsx)(ay.AttachLabel,{attach:a.attach,className:"shrink-0 text-muted"})]}),g&&(0,b.jsxs)($,{title:"Dismiss error",onClick:()=>h(a.id),className:"text-muted hover:text-txt",children:[(0,b.jsx)(ax.X,{}),(0,b.jsxs)("span",{className:"sr-only",children:["Dismiss error in ",a.title]})]})]},a.id)}),a.length>0&&(0,b.jsx)(X,{className:"group-data-[collapsible=icon]:hidden",children:(0,b.jsx)(Z,{asChild:!0,isActive:"/chat"===o&&!p,className:"h-7 text-xs text-muted",children:(0,b.jsxs)(j.default,{href:"/chat","aria-keyshortcuts":az,children:[(0,b.jsx)(q,{}),(0,b.jsx)("span",{children:u>0?`All chats \xb7 ${a.length}`:"All chats"}),az&&(0,b.jsx)("kbd",{"aria-hidden":!0,className:(0,w.cn)(aA,"ml-auto hidden group-hover/menu-item:inline group-focus-within/menu-item:inline"),children:az})]})})})]})})]})}let aD=[{label:"Plan & supervise",items:[{href:"/board",icon:aj,label:"Board"},{href:"/roadmap",icon:aq.Map,label:"Roadmap"},{href:"/manual-tests",icon:ar.FlaskConical,label:"Manual tests"},{href:"/activity",icon:al.Zap,label:"Activity"}]},{label:"Reference",items:[{href:"/docs",icon:ak.BookOpen,label:"Docs"},{href:"/memory",icon:am.Brain,label:"Memory"},{href:"/explorer",icon:ap,label:"Explorer"}]}],aE="rounded-sm border border-border bg-surface2 px-1 font-mono text-[10px] leading-4 text-muted";function aF(){window.dispatchEvent(new KeyboardEvent("keydown",{key:"?"}))}function aG({board:a}){let c=(0,d.usePathname)(),e=(0,C.shortcutFor)("/settings"),f=a?Object.values(a).flat().reduce((a,b)=>a+(b.manualTests?b.manualTests.total-b.manualTests.done:0),0):0,g={"/board":{n:a?a["in-progress"].length+a.review.length:0,label:"in progress or in review"},"/manual-tests":{n:f,label:"unticked"}};return(0,b.jsxs)(M,{collapsible:"icon",children:[(0,b.jsx)(P,{children:(0,b.jsxs)("div",{className:"flex items-center gap-2 px-2 py-1",children:[(0,b.jsx)("div",{"aria-hidden":!0,className:"grid size-6 shrink-0 place-items-center rounded-md bg-accent text-accent-fg",children:(0,b.jsx)(at,{className:"size-3.5",strokeWidth:2.5})}),(0,b.jsx)("span",{className:"text-sm font-semibold tracking-tight text-txt group-data-[collapsible=icon]:hidden",children:"VibeDoc"})]})}),(0,b.jsxs)(R,{children:[(0,b.jsx)(aB,{}),aD.map(a=>(0,b.jsxs)(S,{children:[(0,b.jsx)(T,{children:a.label}),(0,b.jsx)(V,{children:(0,b.jsx)(W,{children:a.items.map(({href:a,icon:d,label:e})=>{let f=(0,C.shortcutFor)(a),h=g[a];return(0,b.jsx)(X,{children:(0,b.jsx)(Z,{asChild:!0,isActive:c.startsWith(a),tooltip:{children:(0,b.jsxs)("span",{className:"flex items-center gap-2",children:[e,f&&(0,b.jsx)("kbd",{className:aE,children:f})]})},children:(0,b.jsxs)(j.default,{href:a,"aria-keyshortcuts":f,children:[(0,b.jsx)(d,{}),(0,b.jsx)("span",{children:e}),h?.n>0&&(0,b.jsxs)("span",{className:"ml-auto font-mono text-[10px] tabular-nums text-muted",children:[h.n,(0,b.jsxs)("span",{className:"sr-only",children:[" ",h.label]})]}),f&&(0,b.jsx)("kbd",{"aria-hidden":!0,className:(0,w.cn)(aE,!(h?.n>0)&&"ml-auto","hidden group-hover/menu-item:inline group-focus-within/menu-item:inline"),children:f})]})})},a)})})})]},a.label))]}),(0,b.jsx)(Q,{children:(0,b.jsxs)(W,{children:[(0,b.jsx)(X,{children:(0,b.jsxs)(Z,{onClick:aF,"aria-keyshortcuts":"?",tooltip:"Keyboard shortcuts (?)",className:"text-muted",children:[(0,b.jsx)(av,{}),(0,b.jsx)("span",{children:"Shortcuts"}),(0,b.jsx)("kbd",{"aria-hidden":!0,className:(0,w.cn)(aE,"ml-auto"),children:"?"})]})}),(0,b.jsx)(X,{children:(0,b.jsx)(Z,{asChild:!0,isActive:c.startsWith("/settings"),tooltip:{children:(0,b.jsxs)("span",{className:"flex items-center gap-2",children:["Settings",(0,b.jsx)("kbd",{className:aE,children:e})]})},children:(0,b.jsxs)(j.default,{href:"/settings","aria-keyshortcuts":e,children:[(0,b.jsx)(an.Settings,{}),(0,b.jsx)("span",{children:"Settings"}),(0,b.jsx)("kbd",{"aria-hidden":!0,className:(0,w.cn)(aE,"ml-auto hidden group-hover/menu-item:inline group-focus-within/menu-item:inline"),children:e})]})})})]})})]})}var aH=a.i(228705),aI=a.i(192676),aJ=a.i(926128);let aK={name:"message-square-plus",size:24,node:[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}],["path",{d:"M12 8v6",key:"1ib9pf"}],["path",{d:"M9 11h6",key:"1fldmi"}]]};aK.node;let aL=(0,o.default)(aK),aM={name:"sun-moon",size:24,node:[["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715",key:"xlf6rm"}],["path",{d:"M16 12a4 4 0 0 0-4-4",key:"6vsxu"}],["path",{d:"m19 5-1.256 1.256",key:"1yg6a6"}],["path",{d:"M20 12h2",key:"1q8mjw"}]]};aM.node;let aN=(0,o.default)(aM);var aO=a.i(769242);let aP=/[/\-_. ]/;function aQ(a,b,c){return b.map(b=>({item:b,path:c(b),score:function(a,b){let c=a.toLowerCase().replace(/\s+/g,"");if(!c)return 0;let d=b.toLowerCase(),e=null;for(let a=d.indexOf(c[0]);-1!==a;a=d.indexOf(c[0],a+1)){let b=function(a,b,c){let d=b.lastIndexOf("/")+1,e=0,f=0,g=-2;for(let h=c;h<b.length&&f<a.length;h++)b[h]===a[f]&&(e+=1,h===g+1&&(e+=5),(0===h||aP.test(b[h-1]))&&(e+=8),h>=d&&(e+=3),g=h,f++);return f===a.length?e:null}(c,d,a);null!==b&&(null===e||b>e)&&(e=b)}return e}(a,c(b))})).filter(a=>null!==a.score).sort((a,b)=>b.score-a.score||a.path.length-b.path.length).map(a=>a.item)}var aR=a.i(173628),aS=a.i(814574),aT=a.i(890728),aU=a.i(147758);let aV=[{href:"/chat",label:"Chats",icon:k.Bot},{href:"/board",label:"Board",icon:aj},{href:"/roadmap",label:"Roadmap",icon:aq.Map},{href:"/docs",label:"Docs",icon:ak.BookOpen},{href:"/activity",label:"Activity",icon:aI.Activity},{href:"/memory",label:"Memory",icon:am.Brain},{href:"/manual-tests",label:"Manual tests",icon:ar.FlaskConical},{href:"/explorer",label:"Explorer",icon:ap},{href:"/settings",label:"Settings",icon:an.Settings}],aW=a=>(0,b.jsx)(a,{className:"size-3.5 shrink-0 text-muted","aria-hidden":!0});function aX({open:a,onClose:f,onOpenDoc:g,onNewDoc:h,onQuickOpen:i,onShowHelp:j,rootParam:k}){let l=(0,d.useRouter)(),{board:m,projects:n,activeProject:o,onProjectChange:p}=(0,e.useApp)(),{chats:q,queue:r,now:u,show:v,create:x}=(0,t.useChats)(),[y,z]=(0,c.useState)(""),[A,B]=(0,c.useState)(0),[D,E]=(0,c.useState)(null),[F,G]=(0,c.useState)([]),H=(0,c.useRef)(null),I=(0,aT.useCurrentItemCommands)(),[J,K]=(0,c.useState)(a);a!==J&&(K(a),a&&(z(""),B(0),E(null))),(0,c.useEffect)(()=>{if(!a)return;let b=!1;return fetch(`/api/roadmap${k}`).then(a=>a.ok?a.json():{items:[]}).then(a=>{b||G((a.items??[]).filter(a=>a.parent))}).catch(a=>console.warn("[vibedoc] palette could not load the roadmap:",a)),()=>{b=!0}},[a,k]);let L=y.trim();(0,c.useEffect)(()=>{if(L.length<2)return;let a=setTimeout(async()=>{try{let a=await fetch(`/api/docs${k}&q=${encodeURIComponent(L)}`);if(!a.ok)throw Error(`HTTP ${a.status}`);let b=await a.json();E({query:L,status:"done",files:b.results?.map(a=>a.file)??[]})}catch(a){console.warn("[vibedoc] doc search failed:",a),E({query:L,status:"error",files:[]})}},300);return()=>clearTimeout(a)},[L,k]);let M=(0,c.useMemo)(()=>{let a=a=>()=>{l.push(a),f()},c=(a,b)=>L?aQ(L,a,b).slice(0,6):a,d=[],e=[];if(I)for(let a of c(I.commands,a=>a.label))d.push({id:`item-cmd-${a.action}`,group:I.title,label:a.label,lead:aW(al.Zap),kbd:(0,aT.itemKeyLabel)(a.action),run:()=>{f(),a.run()}});if(L){let c=[...(m?Object.values(m).flat():[]).map(a=>({id:a.id,title:a.title,lead:(0,b.jsx)(aR.StatusIcon,{status:(0,aU.displayStatus)(a)}),href:(0,ay.attachHref)({kind:"task",id:a.id})})),...F.map(a=>({id:a.id,title:a.title,lead:aW(aq.Map),href:(0,ay.attachHref)({kind:"epic",id:a.id})}))],d=L.toLowerCase(),f=c.filter(a=>a.id.toLowerCase().startsWith(d)).sort((a,b)=>a.id.length-b.id.length);for(let b of(f.length?f:aQ(L,c,a=>a.title)).slice(0,6))e.push({id:`item-${b.id}`,group:"Tasks & epics",label:b.title,code:b.id,lead:b.lead,run:a(b.href)})}let s=/^[TR]\d/i.test(L);s&&d.push(...e);let t=(0,aa.groupChats)(q,u),w=[...r,...t.running];for(let a of c(L?q:w.length?w:t.recent.slice(0,3),a=>`${a.attach?.id??""} ${a.title}`))d.push({id:`chat-${a.id}`,group:"Chats",label:a.title,code:a.attach?.id,lead:(0,b.jsx)(ay.StatusMarker,{status:(0,aa.shellStatus)(a,u),showIdle:!0}),run:()=>{v(a.id),f()}});for(let b of(s||d.push(...e),c(aV,a=>a.label)))d.push({id:`page-${b.href}`,group:"Navigate",label:b.label,lead:aW(b.icon),kbd:(0,C.shortcutFor)(b.href),run:a(b.href)});let y=[{id:"new-chat",group:"Actions",label:"New chat",lead:aW(aL),run:()=>{v(x()),f()}},{id:"new-doc",group:"Actions",label:"New doc",lead:aW(aH.FilePlus),run:()=>{h?.(),f()}},{id:"go-file",group:"Actions",label:"Go to file",lead:aW(aJ.FileText),kbd:"⌘P",run:i},{id:"theme",group:"Actions",label:"Toggle light / dark theme",lead:aW(aN),run:()=>{aY(k),f()}},{id:"help",group:"Actions",label:"Keyboard shortcuts",lead:aW(av),kbd:"?",run:j},...(L?n.filter(a=>a.root!==o):[]).map(a=>({id:`project-${a.root}`,group:"Actions",label:`Switch project: ${a.name}`,detail:a.root,lead:aW(aO.FolderOpen),run:()=>{p(a.root),f()}}))];if(d.push(...c(y,a=>a.label)),L.length>=2&&D?.query===L)for(let a of D.files.filter(a=>!/^plans\/(tasks|roadmap)\//.test(a)).slice(0,6)){let b=a.lastIndexOf("/");d.push({id:`doc-${a}`,group:"Docs",label:a.slice(b+1).replace(/\.md$/,""),detail:b>0?a.slice(0,b):void 0,lead:aW(aJ.FileText),run:()=>{g(a),f()}})}return d},[L,I,q,r,u,m,F,n,o,D,l,f,v,x,h,i,j,g,p,k]),N=Math.max(0,Math.min(A,M.length-1)),O=M.reduce((a,b,c)=>{let d=a[a.length-1];return d?.group===b.group?d.items.push(b):a.push({group:b.group,start:c,items:[b]}),a},[]),P=L.length>=2&&D?.query!==L,Q=L.length>=2&&D?.query===L&&"error"===D.status;return(0,c.useEffect)(()=>{H.current?.querySelector(`[data-index="${N}"]`)?.scrollIntoView({block:"nearest"})},[N]),(0,b.jsx)(aS.Dialog,{open:a,onOpenChange:a=>{a||f()},children:(0,b.jsxs)(aS.DialogContent,{className:"max-w-lg p-0 overflow-hidden bg-surface border-border gap-0 top-[20%] translate-y-0",children:[(0,b.jsx)(aS.DialogTitle,{className:"sr-only",children:"Command palette"}),(0,b.jsxs)("div",{className:"flex items-center gap-3 px-4 h-11 border-b border-border",children:[(0,b.jsx)(s.Search,{className:"size-4 text-muted shrink-0","aria-hidden":!0}),(0,b.jsx)("input",{autoFocus:!0,role:"combobox","aria-expanded":M.length>0,"aria-controls":"cmd-list","aria-autocomplete":"list","aria-activedescendant":M[N]?`cmd-${N}`:void 0,value:y,onChange:a=>{z(a.target.value),B(0)},onKeyDown:function(a){"ArrowDown"===a.key?(a.preventDefault(),B(Math.min(N+1,M.length-1))):"ArrowUp"===a.key?(a.preventDefault(),B(Math.max(N-1,0))):"Enter"===a.key&&(a.preventDefault(),M[N]?.run())},placeholder:"Search tasks, epics, chats, docs…",className:"h-full flex-1 bg-transparent text-sm text-txt outline-none placeholder:text-muted"})]}),(0,b.jsxs)("div",{ref:H,id:"cmd-list",role:"listbox","aria-label":"Results",className:"max-h-80 overflow-y-auto py-1",children:[O.map(({group:a,start:c,items:d})=>(0,b.jsxs)("div",{role:"group","aria-labelledby":`cmd-g-${c}`,children:[(0,b.jsx)("div",{id:`cmd-g-${c}`,role:"presentation",className:"px-4 pt-2 pb-1 font-mono text-[10px] uppercase tracking-[0.06em] text-muted",children:a}),d.map((a,d)=>{let e=c+d;return(0,b.jsxs)("div",{id:`cmd-${e}`,"data-index":e,role:"option","aria-selected":e===N,onClick:a.run,onMouseMove:()=>B(e),className:(0,w.cn)("flex items-center gap-2.5 w-full px-4 py-1.5 text-[13px] cursor-pointer transition-colors duration-[var(--duration-fast)]",e===N?"bg-accent/10 text-txt":"text-muted"),children:[a.lead,a.code&&(0,b.jsx)("span",{className:"font-mono text-[11px] text-muted shrink-0",children:a.code}),(0,b.jsx)("span",{className:"truncate text-txt",children:a.label}),a.detail&&(0,b.jsx)("span",{className:"truncate text-[11px] text-muted",children:a.detail}),a.kbd&&(0,b.jsx)("kbd",{className:"ml-auto shrink-0 rounded-sm border border-border px-1 font-mono text-[10px] text-muted",children:a.kbd})]},a.id)})]},`${a}-${c}`)),P&&(0,b.jsx)("div",{className:"px-4 py-1.5 text-[11px] text-muted",children:"Searching docs…"}),Q&&(0,b.jsx)("div",{role:"alert",className:"px-4 py-1.5 text-[11px] text-danger",children:"Search failed. Check the server and try again."}),0===M.length&&!P&&!Q&&(0,b.jsxs)("div",{className:"px-4 py-6 text-center text-[13px] text-muted",children:["Nothing matches “",L,"”"]})]})]})})}async function aY(a){try{let b=await fetch(`/api/settings${a}&type=settings`);if(!b.ok)throw Error(`HTTP ${b.status}`);let c={...g.DEFAULT_SETTINGS,...await b.json()};c.theme=document.documentElement.classList.contains("dark")?"light":"dark",(0,f.applyTheme)(c.theme),await fetch(`/api/settings${a}&type=settings`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})}catch(a){console.warn("[vibedoc] could not save the theme:",a)}}function aZ({open:a,onClose:d,onOpenDoc:e,rootParam:f}){let[g,h]=(0,c.useState)([]),[i,j]=(0,c.useState)(""),[k,l]=(0,c.useState)(0),m=(0,c.useRef)(null),[n,o]=(0,c.useState)(a);a!==n&&(o(a),a&&(j(""),l(0))),(0,c.useEffect)(()=>{a&&fetch(`/api/docs${f}`).then(a=>a.json()).then(a=>h(Array.isArray(a)?a:[])).catch(()=>h([]))},[a,f]);let p=(0,c.useMemo)(()=>aQ(i,g,a=>a.path),[i,g]),q=p.slice(0,50);function r(a){a&&(e(a.path),d())}return(0,c.useEffect)(()=>{m.current?.querySelector(`[data-index="${k}"]`)?.scrollIntoView({block:"nearest"})},[k]),(0,b.jsx)(aS.Dialog,{open:a,onOpenChange:a=>{a||d()},children:(0,b.jsxs)(aS.DialogContent,{className:"max-w-xl p-0 overflow-hidden bg-surface border-border gap-0 top-[20%] translate-y-0",children:[(0,b.jsx)(aS.DialogTitle,{className:"sr-only",children:"Go to file"}),(0,b.jsx)(E.Input,{autoFocus:!0,role:"combobox","aria-expanded":q.length>0,"aria-controls":"quick-open-list","aria-autocomplete":"list","aria-activedescendant":q[k]?`quick-open-${k}`:void 0,value:i,onChange:a=>{j(a.target.value),l(0)},onKeyDown:function(a){"ArrowDown"===a.key||a.ctrlKey&&"n"===a.key?(a.preventDefault(),l(a=>Math.min(a+1,q.length-1))):"ArrowUp"===a.key||a.ctrlKey&&"p"===a.key?(a.preventDefault(),l(a=>Math.max(a-1,0))):"Enter"===a.key&&(a.preventDefault(),r(q[k]))},placeholder:"Go to file…",className:"h-11 rounded-none border-0 border-b border-border bg-transparent px-4 text-sm shadow-none focus-visible:ring-0 placeholder:text-muted"}),(0,b.jsxs)("div",{ref:m,id:"quick-open-list",role:"listbox","aria-label":"Files",className:"max-h-80 overflow-y-auto py-1",children:[q.map((a,c)=>{let d=a.path.lastIndexOf("/");return(0,b.jsxs)("div",{id:`quick-open-${c}`,"data-index":c,role:"option","aria-selected":k===c,onClick:()=>r(a),onMouseMove:()=>l(c),className:(0,w.cn)("flex items-center gap-2.5 w-full px-4 py-1.5 text-left text-sm cursor-pointer transition-colors",k===c?"bg-accent/10 text-txt":"text-muted"),children:[(0,b.jsx)(aJ.FileText,{"aria-hidden":!0,className:"h-3.5 w-3.5 shrink-0 opacity-60"}),(0,b.jsx)("span",{className:"truncate text-txt",children:a.path.slice(d+1)}),d>0&&(0,b.jsx)("span",{className:"truncate text-xs text-muted",children:a.path.slice(0,d)})]},a.path)}),0===q.length&&(0,b.jsx)("div",{role:"presentation",className:"px-4 py-6 text-center text-sm text-muted",children:"No matching files"}),p.length>50&&(0,b.jsxs)("div",{className:"px-4 py-1.5 text-xs text-muted",children:[p.length-50," more — keep typing to narrow"]})]})]})})}var a$=a.i(877468),a_=a.i(712125);function a0(){let{chats:a,modalId:c,closeModal:e}=(0,t.useChats)(),f=(0,d.useRouter)(),g=a.find(a=>a.id===c)?.title??"Chat";return(0,b.jsx)(aS.Dialog,{open:!!c,onOpenChange:a=>{a||e()},children:(0,b.jsxs)(aS.DialogContent,{"aria-describedby":void 0,className:"flex h-[min(82vh,780px)] w-[calc(100vw-2rem)] flex-col gap-0 overflow-hidden rounded-xl p-0 shadow-2xl sm:max-w-3xl sm:rounded-xl",children:[(0,b.jsx)(aS.DialogTitle,{className:"sr-only",children:g}),c&&(0,b.jsx)(a_.ChatView,{chatId:c,variant:"modal",onNavigate:e,onExpand:()=>{e({keep:!0}),f.push(`/chat?id=${encodeURIComponent(c)}`)}})]})})}var a1=a.i(269769);let a2=[{title:"Go to",rows:C.PAGE_SHORTCUTS.map(({key:a,label:b,help:c})=>({key:a,description:c??b}))},...["Open","Board","Open item","Editing & other"].map(a=>({title:a,rows:C.OTHER_SHORTCUTS.filter(b=>b.section===a).map(({key:a,label:b})=>({key:a,description:b}))}))],a3="sr-only focus:not-sr-only focus:fixed focus:left-2 focus:top-2 focus:z-50 focus:rounded-md focus:bg-surface focus:px-3 focus:py-1.5 focus:text-xs focus:text-txt focus:ring-2 focus:ring-ring";function a4({children:a}){let{loading:f,summary:g,projects:h,activeProject:j,liveIndicator:k,onProjectChange:l,board:m,openDoc:n,rootParam:o}=(0,e.useApp)(),p=(0,d.useRouter)(),q=(0,d.usePathname)(),[r,s]=(0,c.useState)(!1),[u,v]=(0,c.useState)(!1),[w,x]=(0,c.useState)(!1),[y,z]=(0,c.useState)(!1),{showDefault:A}=(0,t.useChats)(),B=(0,c.useRef)(!1),D=(0,c.useRef)(q),E=g?.name;return((0,c.useEffect)(()=>{let a=[(0,C.pageTitle)(q),E].filter(Boolean).join(" · "),b=document.title.match(/^\(\d+\) /)?.[0]??"";document.title=`${b}${a?`${a} — `:""}VibeDoc`,D.current!==q&&(D.current=q,B.current&&document.getElementById("main")?.focus({preventScroll:!0}))},[q,E]),(0,c.useEffect)(()=>{let a=()=>{B.current=!0},b=()=>{B.current=!1};return window.addEventListener("keydown",a,!0),window.addEventListener("pointerdown",b,!0),()=>{window.removeEventListener("keydown",a,!0),window.removeEventListener("pointerdown",b,!0)}},[]),(0,c.useEffect)(()=>{function a(a){if((a.metaKey||a.ctrlKey)&&"k"===a.key){a.preventDefault(),v(a=>!a);return}if((a.metaKey||a.ctrlKey)&&"p"===a.key){a.preventDefault(),v(!1),x(a=>!a);return}if(!(0,C.shouldHandleShortcut)(a))return;let b=(0,C.pageForKey)(a.key);if(b)return void p.push(b);switch(a.key){case C.CHAT_KEY:a.preventDefault(),A();break;case"?":s(a=>!a);break;case"Escape":s(!1);break;case"/":a.preventDefault(),"/docs"===q?document.getElementById("doc-search")?.focus():"/board"===q?document.getElementById("board-search")?.focus():p.push("/docs")}}return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[p,q,A]),f)?(0,b.jsx)(i,{}):(0,b.jsxs)(L,{children:[(0,b.jsx)("a",{href:"#agent-status",className:a3,children:"Skip to agent status"}),(0,b.jsx)("a",{href:"#main",className:a3,children:"Skip to content"}),(0,b.jsx)(aG,{board:m}),(0,b.jsxs)(O,{className:"min-w-0",children:[(0,b.jsx)(ae,{summary:g,projects:h,activeProject:j,liveIndicator:k,onProjectChange:l,onToggleChat:A,onOpenSearch:()=>v(!0)}),(0,b.jsx)("main",{id:"main",tabIndex:-1,className:"flex-1 min-h-0 overflow-y-auto outline-none",children:a}),(0,b.jsx)(a0,{}),(0,b.jsx)(a1.Toaster,{}),(0,b.jsx)(aT.ItemCommandKeys,{}),(0,b.jsx)(aZ,{open:w,onClose:()=>x(!1),onOpenDoc:n,rootParam:o}),(0,b.jsx)(aX,{open:u,onClose:()=>v(!1),onOpenDoc:n,onNewDoc:()=>{v(!1),z(!0)},onQuickOpen:()=>{v(!1),x(!0)},onShowHelp:()=>{v(!1),s(!0)},rootParam:o}),(0,b.jsx)(a$.NewDocModal,{open:y,onOpenChange:z,rootParam:o,onDocCreated:async a=>{await n(a)}}),(0,b.jsx)(aS.Dialog,{open:r,onOpenChange:s,children:(0,b.jsxs)(aS.DialogContent,{"aria-describedby":void 0,className:"block w-80 p-5 rounded-xl sm:rounded-xl shadow-2xl",children:[(0,b.jsx)(aS.DialogTitle,{className:"font-display text-sm font-semibold text-txt mb-4",children:"Keyboard shortcuts"}),a2.map(({title:a,rows:c})=>(0,b.jsxs)("table",{className:"w-full text-xs mt-3 first-of-type:mt-0",children:[(0,b.jsx)("caption",{className:"pb-1 text-left font-mono text-[10px] uppercase tracking-[0.06em] text-muted",children:a}),(0,b.jsx)("tbody",{children:c.map(({key:a,description:c})=>(0,b.jsxs)("tr",{className:"border-t border-border first:border-0",children:[(0,b.jsx)("td",{className:"py-1.5 pr-4 w-16 whitespace-nowrap",children:(0,b.jsx)("kbd",{className:"font-mono bg-surface2 border border-border rounded-sm px-1.5 py-0.5 text-txt",children:a})}),(0,b.jsx)("td",{className:"py-1.5 text-muted",children:c})]},a))})]},a))]})})]})]})}a.s(["default",0,function({children:a}){return(0,b.jsxs)(e.AppProvider,{children:[(0,b.jsx)(h,{}),(0,b.jsx)(t.ChatProvider,{children:(0,b.jsx)(a4,{children:a})})]})}],648102)}];
2
2
 
3
3
  //# sourceMappingURL=src_app_%28app%29_layout_tsx_1yu5hom._.js.map