vibedoc 1.11.0 → 1.13.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 (818) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +5 -1
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +70 -14
  5. package/.next/routes-manifest.json +24 -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)/getting-started/page/app-paths-manifest.json +3 -0
  17. package/.next/server/app/(app)/getting-started/page/build-manifest.json +20 -0
  18. package/.next/server/app/(app)/getting-started/page/next-font-manifest.json +11 -0
  19. package/.next/server/app/(app)/getting-started/page/react-loadable-manifest.json +1 -0
  20. package/.next/server/app/(app)/getting-started/page/server-reference-manifest.json +4 -0
  21. package/.next/server/app/(app)/getting-started/page.js +15 -0
  22. package/.next/server/app/(app)/getting-started/page.js.map +5 -0
  23. package/.next/server/app/(app)/getting-started/page.js.nft.json +1 -0
  24. package/.next/server/app/(app)/getting-started/page_client-reference-manifest.js +3 -0
  25. package/.next/server/app/(app)/graph/page.js.nft.json +1 -1
  26. package/.next/server/app/(app)/graph/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(app)/manual-tests/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/manual-tests/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
  30. package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
  32. package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  34. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  35. package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
  36. package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/_global-error/page.js.nft.json +1 -1
  38. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/_global-error.html +1 -1
  40. package/.next/server/app/_global-error.rsc +1 -1
  41. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  42. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  43. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  44. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  45. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  46. package/.next/server/app/_not-found.html +1 -1
  47. package/.next/server/app/_not-found.rsc +2 -2
  48. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  49. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  50. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  51. package/.next/server/app/activity.html +1 -1
  52. package/.next/server/app/activity.rsc +7 -7
  53. package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +5 -5
  54. package/.next/server/app/activity.segments/_full.segment.rsc +7 -7
  55. package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
  56. package/.next/server/app/api/activity/route.js +2 -3
  57. package/.next/server/app/api/activity/route.js.nft.json +1 -1
  58. package/.next/server/app/api/chat/route.js +2 -2
  59. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  60. package/.next/server/app/api/context/route.js +2 -3
  61. package/.next/server/app/api/context/route.js.nft.json +1 -1
  62. package/.next/server/app/api/conversations/route.js +3 -4
  63. package/.next/server/app/api/conversations/route.js.nft.json +1 -1
  64. package/.next/server/app/api/decisions/route.js +2 -3
  65. package/.next/server/app/api/decisions/route.js.nft.json +1 -1
  66. package/.next/server/app/api/docs/graph/route.js +2 -4
  67. package/.next/server/app/api/docs/graph/route.js.nft.json +1 -1
  68. package/.next/server/app/api/docs/links/route.js +2 -4
  69. package/.next/server/app/api/docs/links/route.js.nft.json +1 -1
  70. package/.next/server/app/api/docs/route.js +2 -3
  71. package/.next/server/app/api/docs/route.js.nft.json +1 -1
  72. package/.next/server/app/api/explorer/route.js +3 -4
  73. package/.next/server/app/api/explorer/route.js.nft.json +1 -1
  74. package/.next/server/app/api/mcp/route.js +3 -4
  75. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  76. package/.next/server/app/api/memory/entries/delete/route.js +3 -4
  77. package/.next/server/app/api/memory/entries/delete/route.js.nft.json +1 -1
  78. package/.next/server/app/api/memory/entries/merge/route.js +3 -4
  79. package/.next/server/app/api/memory/entries/merge/route.js.nft.json +1 -1
  80. package/.next/server/app/api/memory/entries/merge/undo/route.js +3 -4
  81. package/.next/server/app/api/memory/entries/merge/undo/route.js.nft.json +1 -1
  82. package/.next/server/app/api/memory/entries/restore/route.js +3 -4
  83. package/.next/server/app/api/memory/entries/restore/route.js.nft.json +1 -1
  84. package/.next/server/app/api/memory/entries/route.js +2 -3
  85. package/.next/server/app/api/memory/entries/route.js.nft.json +1 -1
  86. package/.next/server/app/api/memory/entries/save/route.js +3 -4
  87. package/.next/server/app/api/memory/entries/save/route.js.nft.json +1 -1
  88. package/.next/server/app/api/memory/graph/route.js +3 -4
  89. package/.next/server/app/api/memory/graph/route.js.nft.json +1 -1
  90. package/.next/server/app/api/memory/health/dismiss/route.js +3 -4
  91. package/.next/server/app/api/memory/health/dismiss/route.js.nft.json +1 -1
  92. package/.next/server/app/api/memory/health/route.js +2 -3
  93. package/.next/server/app/api/memory/health/route.js.nft.json +1 -1
  94. package/.next/server/app/api/memory/history/route.js +2 -4
  95. package/.next/server/app/api/memory/history/route.js.nft.json +1 -1
  96. package/.next/server/app/api/memory/restore/route/app-paths-manifest.json +3 -0
  97. package/.next/server/app/api/memory/restore/route/build-manifest.json +12 -0
  98. package/.next/server/app/api/memory/restore/route/server-reference-manifest.json +4 -0
  99. package/.next/server/app/api/memory/restore/route.js +8 -0
  100. package/.next/server/app/api/memory/restore/route.js.map +5 -0
  101. package/.next/server/app/api/memory/restore/route.js.nft.json +1 -0
  102. package/.next/server/app/api/memory/restore/route_client-reference-manifest.js +3 -0
  103. package/.next/server/app/api/memory/route.js +2 -3
  104. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  105. package/.next/server/app/api/memory/versions/route/app-paths-manifest.json +3 -0
  106. package/.next/server/app/api/memory/versions/route/build-manifest.json +12 -0
  107. package/.next/server/app/api/memory/versions/route/server-reference-manifest.json +4 -0
  108. package/.next/server/app/api/memory/versions/route.js +7 -0
  109. package/.next/server/app/api/memory/versions/route.js.map +5 -0
  110. package/.next/server/app/api/memory/versions/route.js.nft.json +1 -0
  111. package/.next/server/app/api/memory/versions/route_client-reference-manifest.js +3 -0
  112. package/.next/server/app/api/plan/apply/route.js +3 -4
  113. package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
  114. package/.next/server/app/api/projects/route.js +2 -3
  115. package/.next/server/app/api/projects/route.js.nft.json +1 -1
  116. package/.next/server/app/api/registry/route.js +2 -3
  117. package/.next/server/app/api/registry/route.js.nft.json +1 -1
  118. package/.next/server/app/api/roadmap/create/route.js +3 -4
  119. package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
  120. package/.next/server/app/api/roadmap/delete/route.js +3 -4
  121. package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
  122. package/.next/server/app/api/roadmap/generate/route.js +3 -4
  123. package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
  124. package/.next/server/app/api/roadmap/layout/route.js +3 -4
  125. package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
  126. package/.next/server/app/api/roadmap/restore/route.js +3 -4
  127. package/.next/server/app/api/roadmap/restore/route.js.nft.json +1 -1
  128. package/.next/server/app/api/roadmap/route.js +2 -3
  129. package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
  130. package/.next/server/app/api/roadmap/update/route.js +3 -4
  131. package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
  132. package/.next/server/app/api/sessions/route.js +2 -3
  133. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  134. package/.next/server/app/api/settings/route.js +2 -3
  135. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  136. package/.next/server/app/api/setup/generate/route.js +2 -3
  137. package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
  138. package/.next/server/app/api/setup/write/route.js +2 -3
  139. package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
  140. package/.next/server/app/api/summary/route.js +2 -3
  141. package/.next/server/app/api/summary/route.js.nft.json +1 -1
  142. package/.next/server/app/api/tasks/bulk/route.js +3 -4
  143. package/.next/server/app/api/tasks/bulk/route.js.nft.json +1 -1
  144. package/.next/server/app/api/tasks/create/route.js +2 -3
  145. package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
  146. package/.next/server/app/api/tasks/delete/route.js +3 -4
  147. package/.next/server/app/api/tasks/delete/route.js.nft.json +1 -1
  148. package/.next/server/app/api/tasks/manual-tests/route.js +3 -3
  149. package/.next/server/app/api/tasks/manual-tests/route.js.nft.json +1 -1
  150. package/.next/server/app/api/tasks/restore/route.js +3 -4
  151. package/.next/server/app/api/tasks/restore/route.js.nft.json +1 -1
  152. package/.next/server/app/api/tasks/review/route.js +3 -4
  153. package/.next/server/app/api/tasks/review/route.js.nft.json +1 -1
  154. package/.next/server/app/api/tasks/route.js +2 -3
  155. package/.next/server/app/api/tasks/route.js.nft.json +1 -1
  156. package/.next/server/app/api/tasks/update/route.js +3 -4
  157. package/.next/server/app/api/tasks/update/route.js.nft.json +1 -1
  158. package/.next/server/app/api/views/route.js +2 -3
  159. package/.next/server/app/api/views/route.js.nft.json +1 -1
  160. package/.next/server/app/board.html +1 -1
  161. package/.next/server/app/board.rsc +7 -7
  162. package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +5 -5
  163. package/.next/server/app/board.segments/_full.segment.rsc +7 -7
  164. package/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  165. package/.next/server/app/chat.html +1 -1
  166. package/.next/server/app/chat.rsc +6 -6
  167. package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +6 -6
  168. package/.next/server/app/chat.segments/_full.segment.rsc +6 -6
  169. package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
  170. package/.next/server/app/docs.html +1 -1
  171. package/.next/server/app/docs.rsc +7 -7
  172. package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +5 -5
  173. package/.next/server/app/docs.segments/_full.segment.rsc +7 -7
  174. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  175. package/.next/server/app/explorer.html +1 -1
  176. package/.next/server/app/explorer.rsc +7 -7
  177. package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +9 -11
  178. package/.next/server/app/explorer.segments/_full.segment.rsc +7 -7
  179. package/.next/server/app/explorer.segments/_tree.segment.rsc +2 -2
  180. package/.next/server/app/getting-started.html +1 -0
  181. package/.next/server/app/getting-started.meta +31 -0
  182. package/.next/server/app/getting-started.rsc +31 -0
  183. package/.next/server/app/getting-started.segments/!KGFwcCk/getting-started/__PAGE__.segment.rsc +32 -0
  184. package/.next/server/app/getting-started.segments/_full.segment.rsc +31 -0
  185. package/.next/server/app/getting-started.segments/_tree.segment.rsc +5 -0
  186. package/.next/server/app/graph.html +1 -1
  187. package/.next/server/app/graph.rsc +6 -6
  188. package/.next/server/app/graph.segments/!KGFwcCk/graph/__PAGE__.segment.rsc +5 -5
  189. package/.next/server/app/graph.segments/_full.segment.rsc +6 -6
  190. package/.next/server/app/graph.segments/_tree.segment.rsc +2 -2
  191. package/.next/server/app/index.html +1 -1
  192. package/.next/server/app/index.rsc +2 -2
  193. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  194. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  195. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  196. package/.next/server/app/manual-tests.html +1 -1
  197. package/.next/server/app/manual-tests.rsc +7 -7
  198. package/.next/server/app/manual-tests.segments/!KGFwcCk/manual-tests/__PAGE__.segment.rsc +9 -11
  199. package/.next/server/app/manual-tests.segments/_full.segment.rsc +7 -7
  200. package/.next/server/app/manual-tests.segments/_tree.segment.rsc +2 -2
  201. package/.next/server/app/memory.html +1 -1
  202. package/.next/server/app/memory.rsc +7 -7
  203. package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +5 -5
  204. package/.next/server/app/memory.segments/_full.segment.rsc +7 -7
  205. package/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
  206. package/.next/server/app/page.js.nft.json +1 -1
  207. package/.next/server/app/page_client-reference-manifest.js +1 -1
  208. package/.next/server/app/roadmap.html +1 -1
  209. package/.next/server/app/roadmap.rsc +7 -7
  210. package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +5 -5
  211. package/.next/server/app/roadmap.segments/_full.segment.rsc +7 -7
  212. package/.next/server/app/roadmap.segments/_tree.segment.rsc +2 -2
  213. package/.next/server/app/settings.html +1 -1
  214. package/.next/server/app/settings.rsc +6 -6
  215. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +11 -9
  216. package/.next/server/app/settings.segments/_full.segment.rsc +6 -6
  217. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  218. package/.next/server/app/setup.html +1 -1
  219. package/.next/server/app/setup.rsc +6 -6
  220. package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +9 -11
  221. package/.next/server/app/setup.segments/_full.segment.rsc +6 -6
  222. package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  223. package/.next/server/app/welcome/page/app-paths-manifest.json +3 -0
  224. package/.next/server/app/welcome/page/build-manifest.json +20 -0
  225. package/.next/server/app/welcome/page/next-font-manifest.json +11 -0
  226. package/.next/server/app/welcome/page/react-loadable-manifest.json +1 -0
  227. package/.next/server/app/welcome/page/server-reference-manifest.json +4 -0
  228. package/.next/server/app/welcome/page.js +13 -0
  229. package/.next/server/app/welcome/page.js.map +5 -0
  230. package/.next/server/app/welcome/page.js.nft.json +1 -0
  231. package/.next/server/app/welcome/page_client-reference-manifest.js +3 -0
  232. package/.next/server/app/welcome.html +1 -0
  233. package/.next/server/app/welcome.meta +26 -0
  234. package/.next/server/app/welcome.rsc +27 -0
  235. package/.next/server/app/welcome.segments/_full.segment.rsc +27 -0
  236. package/.next/server/app/welcome.segments/_tree.segment.rsc +5 -0
  237. package/.next/server/app/welcome.segments/welcome/__PAGE__.segment.rsc +29 -0
  238. package/.next/server/app-paths-manifest.json +5 -1
  239. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01gyja3._.js → 11mp_@anthropic-ai_sdk_0-smxh7._.js} +1 -1
  240. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_02lx_j3._.js → 11mp_@anthropic-ai_sdk_0-upxuo._.js} +1 -1
  241. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-r4g2t._.js → 11mp_@anthropic-ai_sdk_00stvd0._.js} +1 -1
  242. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_05iv23g._.js → 11mp_@anthropic-ai_sdk_05tlp4j._.js} +1 -1
  243. package/.next/server/chunks/11mp_@anthropic-ai_sdk_06i1jku._.js +3 -0
  244. package/.next/server/chunks/11mp_@anthropic-ai_sdk_06pqlwo._.js +3 -0
  245. package/.next/server/chunks/11mp_@anthropic-ai_sdk_06q_bm6._.js +3 -0
  246. package/.next/server/chunks/11mp_@anthropic-ai_sdk_098dref._.js +3 -0
  247. package/.next/server/chunks/11mp_@anthropic-ai_sdk_09q07e_._.js +3 -0
  248. package/.next/server/chunks/11mp_@anthropic-ai_sdk_09r9wsn._.js +3 -0
  249. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_rnqa6._.js +3 -0
  250. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ch0mdl._.js +3 -0
  251. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0didq3m._.js +3 -0
  252. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0dwtv_z._.js +3 -0
  253. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0e8sqia._.js +3 -0
  254. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0gk-rze._.js +3 -0
  255. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0gywxp1._.js +3 -0
  256. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0h4l0yx._.js +3 -0
  257. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hjmy82._.js +3 -0
  258. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0jbmnx_._.js +3 -0
  259. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l7teck._.js +3 -0
  260. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ldf-lc._.js +3 -0
  261. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0oe9p6l._.js +3 -0
  262. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ppgi2h._.js +3 -0
  263. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ydb8nm._.js +3 -0
  264. package/.next/server/chunks/11mp_@anthropic-ai_sdk_11hsr1e._.js +3 -0
  265. package/.next/server/chunks/11mp_@anthropic-ai_sdk_14pgcis._.js +3 -0
  266. package/.next/server/chunks/11mp_@anthropic-ai_sdk_15_sqq8._.js +3 -0
  267. package/.next/server/chunks/11mp_@anthropic-ai_sdk_16up-b0._.js +3 -0
  268. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_jm94w._.js +3 -0
  269. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1aswx0v._.js +3 -0
  270. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1bkea9c._.js +3 -0
  271. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1d41_6l._.js +3 -0
  272. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1d959rx._.js +3 -0
  273. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1eughke._.js +3 -0
  274. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ev29eb._.js +3 -0
  275. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1faxy2m._.js +3 -0
  276. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lginb1._.js +3 -0
  277. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1pg6fky._.js +3 -0
  278. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1qfho5e._.js +3 -0
  279. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1r9e6jv._.js +3 -0
  280. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1tjlpeq._.js +3 -0
  281. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1wcdj4f._.js +3 -0
  282. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1x25dnb._.js +3 -0
  283. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ywjkuh._.js +3 -0
  284. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1zbnql3._.js +3 -0
  285. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1zbnql3._.js.map +1 -0
  286. package/.next/server/chunks/11mp_@anthropic-ai_sdk_208gclq._.js +3 -0
  287. package/.next/server/chunks/11mp_@anthropic-ai_sdk_208gclq._.js.map +1 -0
  288. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_07rnikd._.js +3 -0
  289. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0cxqkzo._.js +3 -0
  290. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0iemvsj._.js +3 -0
  291. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0losy1p._.js +3 -0
  292. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0q2-o56._.js +3 -0
  293. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0v9tonm._.js +3 -0
  294. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ve_28v._.js +3 -0
  295. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0vta7f6._.js +3 -0
  296. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0xme80s._.js +3 -0
  297. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_12tnhho._.js +3 -0
  298. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_14-nnf3._.js +3 -0
  299. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_14e0xcw._.js +3 -0
  300. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1cbywiw._.js +3 -0
  301. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1d4fc7y._.js +3 -0
  302. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1e89sld._.js +3 -0
  303. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1emt011._.js +3 -0
  304. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1jgaffx._.js +3 -0
  305. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1m9p_w8._.js +3 -0
  306. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1mtv1gy._.js +3 -0
  307. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1plmrbl._.js +3 -0
  308. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1toqkb5._.js +3 -0
  309. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1yc8ml3._.js +3 -0
  310. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ycnogk._.js +3 -0
  311. package/.next/server/chunks/[root-of-the-server]__02ym03p._.js +3 -0
  312. package/.next/server/chunks/[root-of-the-server]__02ym03p._.js.map +1 -0
  313. package/.next/server/chunks/[root-of-the-server]__04qfxm4._.js +3 -0
  314. package/.next/server/chunks/[root-of-the-server]__04qfxm4._.js.map +1 -0
  315. package/.next/server/chunks/[root-of-the-server]__04t339z._.js +3 -0
  316. package/.next/server/chunks/[root-of-the-server]__04t339z._.js.map +1 -0
  317. package/.next/server/chunks/[root-of-the-server]__05b72pa._.js +3 -0
  318. package/.next/server/chunks/[root-of-the-server]__05b72pa._.js.map +1 -0
  319. package/.next/server/chunks/[root-of-the-server]__05jwgm-._.js +261 -0
  320. package/.next/server/chunks/[root-of-the-server]__05jwgm-._.js.map +1 -0
  321. package/.next/server/chunks/{[root-of-the-server]__0rh8yfn._.js → [root-of-the-server]__06ikdrx._.js} +2 -2
  322. package/.next/server/chunks/{[root-of-the-server]__0rh8yfn._.js.map → [root-of-the-server]__06ikdrx._.js.map} +1 -1
  323. package/.next/server/chunks/[root-of-the-server]__06x7kjp._.js +3 -0
  324. package/.next/server/chunks/{[root-of-the-server]__1wbho9e._.js.map → [root-of-the-server]__06x7kjp._.js.map} +1 -1
  325. package/.next/server/chunks/[root-of-the-server]__07-qwkc._.js +3 -0
  326. package/.next/server/chunks/[root-of-the-server]__07-qwkc._.js.map +1 -0
  327. package/.next/server/chunks/[root-of-the-server]__0_j-3zy._.js +3 -0
  328. package/.next/server/chunks/{[root-of-the-server]__1r_0uma._.js.map → [root-of-the-server]__0_j-3zy._.js.map} +1 -1
  329. package/.next/server/chunks/{[root-of-the-server]__0pz59qo._.js → [root-of-the-server]__0_paned._.js} +2 -2
  330. package/.next/server/chunks/[root-of-the-server]__0_paned._.js.map +1 -0
  331. package/.next/server/chunks/{[root-of-the-server]__0rikmqn._.js → [root-of-the-server]__0adl8c2._.js} +2 -2
  332. package/.next/server/chunks/[root-of-the-server]__0be-1oe._.js +3 -0
  333. package/.next/server/chunks/[root-of-the-server]__0be-1oe._.js.map +1 -0
  334. package/.next/server/chunks/[root-of-the-server]__0c7qnhb._.js +3 -0
  335. package/.next/server/chunks/{[root-of-the-server]__0vf-0gp._.js.map → [root-of-the-server]__0c7qnhb._.js.map} +1 -1
  336. package/.next/server/chunks/[root-of-the-server]__0dfd91u._.js +3 -0
  337. package/.next/server/chunks/[root-of-the-server]__0dfd91u._.js.map +1 -0
  338. package/.next/server/chunks/[root-of-the-server]__0e_zpd3._.js +3 -0
  339. package/.next/server/chunks/[root-of-the-server]__0e_zpd3._.js.map +1 -0
  340. package/.next/server/chunks/[root-of-the-server]__0efnsph._.js +3 -0
  341. package/.next/server/chunks/[root-of-the-server]__0efnsph._.js.map +1 -0
  342. package/.next/server/chunks/{[root-of-the-server]__1sn6-7a._.js → [root-of-the-server]__0gbhsr4._.js} +2 -2
  343. package/.next/server/chunks/{[root-of-the-server]__1sn6-7a._.js.map → [root-of-the-server]__0gbhsr4._.js.map} +1 -1
  344. package/.next/server/chunks/[root-of-the-server]__0pb7dzk._.js +261 -0
  345. package/.next/server/chunks/[root-of-the-server]__0pb7dzk._.js.map +1 -0
  346. package/.next/server/chunks/[root-of-the-server]__0q-h0w3._.js +3 -0
  347. package/.next/server/chunks/[root-of-the-server]__0q-h0w3._.js.map +1 -0
  348. package/.next/server/chunks/{[root-of-the-server]__1yh-4vk._.js → [root-of-the-server]__0r_831n._.js} +2 -2
  349. package/.next/server/chunks/[root-of-the-server]__0s9wedh._.js +3 -0
  350. package/.next/server/chunks/[root-of-the-server]__0s9wedh._.js.map +1 -0
  351. package/.next/server/chunks/{[root-of-the-server]__08v3p50._.js → [root-of-the-server]__0tzsbyx._.js} +2 -2
  352. package/.next/server/chunks/[root-of-the-server]__0uyhc_4._.js +3 -0
  353. package/.next/server/chunks/[root-of-the-server]__0uyhc_4._.js.map +1 -0
  354. package/.next/server/chunks/[root-of-the-server]__0z2h080._.js +3 -0
  355. package/.next/server/chunks/[root-of-the-server]__0z2h080._.js.map +1 -0
  356. package/.next/server/chunks/[root-of-the-server]__1-f1pzo._.js +3 -0
  357. package/.next/server/chunks/{[root-of-the-server]__0b6w_wb._.js.map → [root-of-the-server]__1-f1pzo._.js.map} +1 -1
  358. package/.next/server/chunks/[root-of-the-server]__120uun8._.js +3 -0
  359. package/.next/server/chunks/{[root-of-the-server]__05us508._.js.map → [root-of-the-server]__120uun8._.js.map} +1 -1
  360. package/.next/server/chunks/[root-of-the-server]__12qs29o._.js +261 -0
  361. package/.next/server/chunks/[root-of-the-server]__12qs29o._.js.map +1 -0
  362. package/.next/server/chunks/{[root-of-the-server]__1r67yrn._.js → [root-of-the-server]__146-7zt._.js} +2 -2
  363. package/.next/server/chunks/[root-of-the-server]__146-7zt._.js.map +1 -0
  364. package/.next/server/chunks/[root-of-the-server]__17_dic_._.js +3 -0
  365. package/.next/server/chunks/[root-of-the-server]__17_dic_._.js.map +1 -0
  366. package/.next/server/chunks/[root-of-the-server]__19a04nn._.js +3 -0
  367. package/.next/server/chunks/{[root-of-the-server]__0hg1r2b._.js.map → [root-of-the-server]__19a04nn._.js.map} +1 -1
  368. package/.next/server/chunks/[root-of-the-server]__1_q8upn._.js +3 -0
  369. package/.next/server/chunks/[root-of-the-server]__1ar-16i._.js +3 -0
  370. package/.next/server/chunks/[root-of-the-server]__1ar-16i._.js.map +1 -0
  371. package/.next/server/chunks/[root-of-the-server]__1egi_4t._.js +3 -0
  372. package/.next/server/chunks/[root-of-the-server]__1egi_4t._.js.map +1 -0
  373. package/.next/server/chunks/[root-of-the-server]__1eh1p2_._.js +3 -0
  374. package/.next/server/chunks/[root-of-the-server]__1eh1p2_._.js.map +1 -0
  375. package/.next/server/chunks/[root-of-the-server]__1gwdudg._.js +3 -0
  376. package/.next/server/chunks/{[root-of-the-server]__18dt3sr._.js.map → [root-of-the-server]__1gwdudg._.js.map} +1 -1
  377. package/.next/server/chunks/{[root-of-the-server]__0wc_gnr._.js → [root-of-the-server]__1hz94ca._.js} +2 -2
  378. package/.next/server/chunks/[root-of-the-server]__1jyx430._.js +3 -0
  379. package/.next/server/chunks/{[root-of-the-server]__1wcd2x9._.js.map → [root-of-the-server]__1jyx430._.js.map} +1 -1
  380. package/.next/server/chunks/[root-of-the-server]__1meifxd._.js +3 -0
  381. package/.next/server/chunks/[root-of-the-server]__1meifxd._.js.map +1 -0
  382. package/.next/server/chunks/[root-of-the-server]__1mn0d5e._.js +3 -0
  383. package/.next/server/chunks/[root-of-the-server]__1mn0d5e._.js.map +1 -0
  384. package/.next/server/chunks/[root-of-the-server]__1o-hldt._.js +3 -0
  385. package/.next/server/chunks/{[root-of-the-server]__1pjwaan._.js.map → [root-of-the-server]__1o-hldt._.js.map} +1 -1
  386. package/.next/server/chunks/[root-of-the-server]__1ocnzl5._.js +3 -0
  387. package/.next/server/chunks/[root-of-the-server]__1ocnzl5._.js.map +1 -0
  388. package/.next/server/chunks/{[root-of-the-server]__06ndlro._.js → [root-of-the-server]__1pf07ha._.js} +2 -2
  389. package/.next/server/chunks/{[root-of-the-server]__0zy73pu._.js → [root-of-the-server]__1rtj94g._.js} +2 -2
  390. package/.next/server/chunks/{[root-of-the-server]__11nbc9e._.js.map → [root-of-the-server]__1rtj94g._.js.map} +1 -1
  391. package/.next/server/chunks/[root-of-the-server]__1rz7a1h._.js +3 -0
  392. package/.next/server/chunks/[root-of-the-server]__1rz7a1h._.js.map +1 -0
  393. package/.next/server/chunks/[root-of-the-server]__1s7yctb._.js +3 -0
  394. package/.next/server/chunks/{[root-of-the-server]__0rggulw._.js.map → [root-of-the-server]__1s7yctb._.js.map} +1 -1
  395. package/.next/server/chunks/[root-of-the-server]__1tebaoq._.js +3 -0
  396. package/.next/server/chunks/[root-of-the-server]__1tebaoq._.js.map +1 -0
  397. package/.next/server/chunks/[root-of-the-server]__1uh0213._.js +3 -0
  398. package/.next/server/chunks/{[root-of-the-server]__1skrybv._.js.map → [root-of-the-server]__1uh0213._.js.map} +1 -1
  399. package/.next/server/chunks/[root-of-the-server]__1vj_u-e._.js +3 -0
  400. package/.next/server/chunks/{[root-of-the-server]__1p6-0l0._.js.map → [root-of-the-server]__1vj_u-e._.js.map} +1 -1
  401. package/.next/server/chunks/{[root-of-the-server]__1_qenei._.js → [root-of-the-server]__20ctbhx._.js} +2 -2
  402. package/.next/server/chunks/{[root-of-the-server]__1_qenei._.js.map → [root-of-the-server]__20ctbhx._.js.map} +1 -1
  403. package/.next/server/chunks/[root-of-the-server]__20nzp64._.js +3 -0
  404. package/.next/server/chunks/{[root-of-the-server]__1r67yrn._.js.map → [root-of-the-server]__20nzp64._.js.map} +1 -1
  405. package/.next/server/chunks/_04byth9._.js +19 -18
  406. package/.next/server/chunks/_04byth9._.js.map +1 -1
  407. package/.next/server/chunks/_0safx0g._.js +3 -3
  408. package/.next/server/chunks/_0safx0g._.js.map +1 -1
  409. package/.next/server/chunks/_1au4syj._.js +1 -1
  410. package/.next/server/chunks/_1au4syj._.js.map +1 -1
  411. package/.next/server/chunks/_1b5fqxy._.js +1 -1
  412. package/.next/server/chunks/_1b5fqxy._.js.map +1 -1
  413. package/.next/server/chunks/_1ivswa9._.js +1 -1
  414. package/.next/server/chunks/_1ivswa9._.js.map +1 -1
  415. package/.next/server/chunks/_1si7nb_._.js +2 -2
  416. package/.next/server/chunks/_1si7nb_._.js.map +1 -1
  417. package/.next/server/chunks/_next-internal_server_app_api_memory_restore_route_actions_0679kmo.js +3 -0
  418. package/.next/server/chunks/_next-internal_server_app_api_memory_versions_route_actions_13mix75.js +3 -0
  419. package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_0y_edkq._.js → 0_nd_mermaid_dist_mermaid_core_mjs_1trh599._.js} +2 -2
  420. package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_0yg8zto._.js → 1u84_katex_dist_katex_mjs_0wukkxe._.js} +1 -1
  421. package/.next/server/chunks/ssr/[root-of-the-server]__0dn-5g9._.js +3 -0
  422. package/.next/server/chunks/ssr/[root-of-the-server]__0dn-5g9._.js.map +1 -0
  423. package/.next/server/chunks/ssr/{[root-of-the-server]__08z0szh._.js → [root-of-the-server]__0p_ieww._.js} +1 -1
  424. package/.next/server/chunks/ssr/[root-of-the-server]__1_4pq0_._.js +3 -0
  425. package/.next/server/chunks/ssr/[root-of-the-server]__1_4pq0_._.js.map +1 -0
  426. package/.next/server/chunks/ssr/{[root-of-the-server]__1wdwnnp._.js → [root-of-the-server]__1ecvjg8._.js} +1 -1
  427. package/.next/server/chunks/ssr/_04xff_2._.js +1 -1
  428. package/.next/server/chunks/ssr/_04xff_2._.js.map +1 -1
  429. package/.next/server/chunks/ssr/_09qa3fe._.js +3 -0
  430. package/.next/server/chunks/ssr/_09qa3fe._.js.map +1 -0
  431. package/.next/server/chunks/ssr/_0_74-q8._.js +3 -0
  432. package/.next/server/chunks/ssr/_0_74-q8._.js.map +1 -0
  433. package/.next/server/chunks/ssr/_0cv0ugs._.js +3 -0
  434. package/.next/server/chunks/ssr/_0cv0ugs._.js.map +1 -0
  435. package/.next/server/chunks/ssr/_0ghj-vx._.js +1 -1
  436. package/.next/server/chunks/ssr/_0ghj-vx._.js.map +1 -1
  437. package/.next/server/chunks/ssr/_0hck6f0._.js +3 -0
  438. package/.next/server/chunks/ssr/_0hck6f0._.js.map +1 -0
  439. package/.next/server/chunks/ssr/_0o8t6j-._.js +3 -0
  440. package/.next/server/chunks/ssr/_0o8t6j-._.js.map +1 -0
  441. package/.next/server/chunks/ssr/_0p_5o4z._.js +23 -0
  442. package/.next/server/chunks/ssr/_0p_5o4z._.js.map +1 -0
  443. package/.next/server/chunks/ssr/_0rmo9r-._.js +1 -1
  444. package/.next/server/chunks/ssr/_0rmo9r-._.js.map +1 -1
  445. package/.next/server/chunks/ssr/_0ust7tw._.js +1 -1
  446. package/.next/server/chunks/ssr/_0ust7tw._.js.map +1 -1
  447. package/.next/server/chunks/ssr/_1c46ap6._.js +23 -0
  448. package/.next/server/chunks/ssr/_1c46ap6._.js.map +1 -0
  449. package/.next/server/chunks/ssr/_1gxjjvh._.js +1 -1
  450. package/.next/server/chunks/ssr/_1gxjjvh._.js.map +1 -1
  451. package/.next/server/chunks/ssr/_1jjs63r._.js +131 -0
  452. package/.next/server/chunks/ssr/_1jjs63r._.js.map +1 -0
  453. package/.next/server/chunks/ssr/_1kcyxnh._.js +3 -0
  454. package/.next/server/chunks/ssr/_1kcyxnh._.js.map +1 -0
  455. package/.next/server/chunks/ssr/_1lvbdeq._.js +3 -0
  456. package/.next/server/chunks/ssr/_1lvbdeq._.js.map +1 -0
  457. package/.next/server/chunks/ssr/_1rewjdw._.js +3 -0
  458. package/.next/server/chunks/ssr/_1rewjdw._.js.map +1 -0
  459. package/.next/server/chunks/ssr/_1tv---f._.js +3 -0
  460. package/.next/server/chunks/ssr/_1tv---f._.js.map +1 -0
  461. package/.next/server/chunks/ssr/_1zyvi-w._.js +3 -0
  462. package/.next/server/chunks/ssr/_1zyvi-w._.js.map +1 -0
  463. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_getting-started_page_actions_18jod7i.js +3 -0
  464. package/.next/server/chunks/ssr/_next-internal_server_app_welcome_page_actions_1unjea7.js +3 -0
  465. package/.next/server/chunks/ssr/{node_modules__pnpm_03mp7qw._.js → node_modules__pnpm_0-6sq9f._.js} +2 -2
  466. package/.next/server/chunks/ssr/{node_modules__pnpm_0jampur._.js → node_modules__pnpm_0-vta96._.js} +1 -1
  467. package/.next/server/chunks/ssr/{node_modules__pnpm_00f4yhs._.js → node_modules__pnpm_04qn321._.js} +1 -1
  468. package/.next/server/chunks/ssr/{node_modules__pnpm_0tn5pg3._.js → node_modules__pnpm_06r-oci._.js} +1 -1
  469. package/.next/server/chunks/ssr/{node_modules__pnpm_0iu4132._.js → node_modules__pnpm_0fe8aya._.js} +1 -1
  470. package/.next/server/chunks/ssr/{node_modules__pnpm_0oyo3yo._.js → node_modules__pnpm_0hpufx1._.js} +2 -2
  471. package/.next/server/chunks/ssr/{node_modules__pnpm_0j_-le7._.js → node_modules__pnpm_0k5j0_5._.js} +2 -2
  472. package/.next/server/chunks/ssr/node_modules__pnpm_0k5j0_5._.js.map +1 -0
  473. package/.next/server/chunks/ssr/{node_modules__pnpm_0x5wj-4._.js → node_modules__pnpm_0kv8p99._.js} +2 -2
  474. package/.next/server/chunks/ssr/{node_modules__pnpm_06_8fr8._.js → node_modules__pnpm_0m-_au1._.js} +1 -1
  475. package/.next/server/chunks/ssr/{node_modules__pnpm_1zme4rg._.js → node_modules__pnpm_0mrjd3b._.js} +1 -1
  476. package/.next/server/chunks/ssr/{node_modules__pnpm_0mqeoh-._.js → node_modules__pnpm_0p2ufg5._.js} +2 -2
  477. package/.next/server/chunks/ssr/{node_modules__pnpm_03mpmzx._.js → node_modules__pnpm_0r2omyh._.js} +1 -1
  478. package/.next/server/chunks/ssr/{node_modules__pnpm_0_e05ka._.js → node_modules__pnpm_0uh9zwf._.js} +1 -1
  479. package/.next/server/chunks/ssr/{node_modules__pnpm_035haet._.js → node_modules__pnpm_0ujugl_._.js} +1 -1
  480. package/.next/server/chunks/ssr/{node_modules__pnpm_0lkvbt-._.js → node_modules__pnpm_0v-_iaj._.js} +1 -1
  481. package/.next/server/chunks/ssr/{node_modules__pnpm_0rq9x9q._.js → node_modules__pnpm_0xin4nu._.js} +2 -2
  482. package/.next/server/chunks/ssr/{node_modules__pnpm_139-v1i._.js → node_modules__pnpm_1-zfovp._.js} +1 -1
  483. package/.next/server/chunks/ssr/{node_modules__pnpm_1i_chik._.js → node_modules__pnpm_11p7w0z._.js} +1 -1
  484. package/.next/server/chunks/ssr/{node_modules__pnpm_1jgju12._.js → node_modules__pnpm_16l16l0._.js} +1 -1
  485. package/.next/server/chunks/ssr/{node_modules__pnpm_1n9oeu0._.js → node_modules__pnpm_16vl5yb._.js} +1 -1
  486. package/.next/server/chunks/ssr/{node_modules__pnpm_1ydeqw6._.js → node_modules__pnpm_1alnvos._.js} +1 -1
  487. package/.next/server/chunks/ssr/{node_modules__pnpm_03an60e._.js → node_modules__pnpm_1e_74v6._.js} +1 -1
  488. package/.next/server/chunks/ssr/{node_modules__pnpm_2045l51._.js → node_modules__pnpm_1kvkjrs._.js} +1 -1
  489. package/.next/server/chunks/ssr/{node_modules__pnpm_0zz55xq._.js → node_modules__pnpm_1l4yejo._.js} +1 -1
  490. package/.next/server/chunks/ssr/node_modules__pnpm_1l4yejo._.js.map +1 -0
  491. package/.next/server/chunks/ssr/{node_modules__pnpm_1ws3ez9._.js → node_modules__pnpm_1uly489._.js} +1 -1
  492. package/.next/server/chunks/ssr/{node_modules__pnpm_1zum4yd._.js → node_modules__pnpm_1xntybk._.js} +1 -1
  493. package/.next/server/chunks/ssr/{node_modules__pnpm_09nd7ia._.js → node_modules__pnpm_20g30gl._.js} +1 -1
  494. package/.next/server/chunks/ssr/src_app_(app)_activity_page_tsx_13jd6bn._.js +1 -1
  495. package/.next/server/chunks/ssr/src_app_(app)_activity_page_tsx_13jd6bn._.js.map +1 -1
  496. package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js +1 -1
  497. package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js.map +1 -1
  498. package/.next/server/chunks/ssr/src_app_(app)_getting-started_page_tsx_0dgdc6p._.js +3 -0
  499. package/.next/server/chunks/ssr/src_app_(app)_getting-started_page_tsx_0dgdc6p._.js.map +1 -0
  500. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js +1 -1
  501. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js.map +1 -1
  502. package/.next/server/chunks/ssr/src_app_(app)_manual-tests_page_tsx_01tnunf._.js +1 -1
  503. package/.next/server/chunks/ssr/src_app_(app)_manual-tests_page_tsx_01tnunf._.js.map +1 -1
  504. package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js +3 -3
  505. package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js.map +1 -1
  506. package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js +2 -2
  507. package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js.map +1 -1
  508. package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js +1 -1
  509. package/.next/server/chunks/ssr/src_components_chat_ChatView_tsx_0h5j-e2._.js.map +1 -1
  510. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js +2 -2
  511. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js.map +1 -1
  512. package/.next/server/middleware-build-manifest.js +3 -3
  513. package/.next/server/next-font-manifest.js +1 -1
  514. package/.next/server/next-font-manifest.json +8 -0
  515. package/.next/server/pages/404.html +1 -1
  516. package/.next/server/pages/500.html +1 -1
  517. package/.next/server/prefetch-hints.json +33 -0
  518. package/.next/server/server-reference-manifest.js +1 -1
  519. package/.next/server/server-reference-manifest.json +1 -1
  520. package/.next/static/chunks/056pca8ms7k-9.js +1 -0
  521. package/.next/static/chunks/07hf_3iqpzmvo.css +1 -0
  522. package/.next/static/chunks/09-kkj4oxfqu1.js +1 -0
  523. package/.next/static/chunks/0fvkvef41i5ka.js +1 -0
  524. package/.next/static/chunks/{1xxzt2y2ttqql.js → 0kmyxrtasrg2e.js} +1 -1
  525. package/.next/static/chunks/11plpfj6j22fq.js +3 -0
  526. package/.next/static/chunks/{3ly7b47esdb7j.js → 1on4c-091wzdq.js} +1 -1
  527. package/.next/static/chunks/22vfp8880q59s.js +1 -0
  528. package/.next/static/chunks/2kf1_d5fndxdb.js +1 -0
  529. package/.next/static/chunks/{0_8ovyz2sbr3p.js → 2m7a38m38tx5y.js} +1 -1
  530. package/.next/static/chunks/31q2_z_ekk94r.js +1 -0
  531. package/.next/static/chunks/34lxzt8ahe_9n.js +1 -0
  532. package/.next/static/chunks/3fgzdr870mbms.js +2 -0
  533. package/.next/static/chunks/3gzt07wmbrocf.js +12 -0
  534. package/.next/static/chunks/3j_ko3wq2nvby.js +1 -0
  535. package/.next/static/chunks/3l3l7u2t-n2fh.js +3 -0
  536. package/.next/static/chunks/3l4yjycfav_7a.js +1 -0
  537. package/.next/static/chunks/3s8g1yx5n4kmt.js +1 -0
  538. package/.next/static/chunks/3v8szq-k4jtkg.js +1 -0
  539. package/.next/static/chunks/3xp-i_0-8cq9_.js +1 -0
  540. package/.next/static/chunks/41mb4xnwp-aq_.js +1 -0
  541. package/README.md +9 -2
  542. package/bin/vibedoc.check.mts +25 -0
  543. package/bin/vibedoc.mjs +9 -0
  544. package/docs/getting-started.md +93 -0
  545. package/package.json +3 -1
  546. package/.next/server/chunks/0_g__next_1qpfvou._.js +0 -158
  547. package/.next/server/chunks/0_g__next_1qpfvou._.js.map +0 -1
  548. package/.next/server/chunks/11mp_@anthropic-ai_sdk_05oneea._.js +0 -3
  549. package/.next/server/chunks/11mp_@anthropic-ai_sdk_07fgg-l._.js +0 -3
  550. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_5gzfy._.js +0 -3
  551. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_jynr-._.js +0 -3
  552. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0aykesf._.js +0 -3
  553. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0br_1fc._.js +0 -3
  554. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0cd5lu7._.js +0 -3
  555. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ckxhy7._.js +0 -3
  556. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0e5qkuv._.js +0 -3
  557. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0el8pm6._.js +0 -3
  558. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i4w8fv._.js +0 -3
  559. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i7ckik._.js +0 -3
  560. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l1p4c6._.js +0 -3
  561. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0m-xqs_._.js +0 -3
  562. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0nltdmf._.js +0 -3
  563. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qxmzg8._.js +0 -3
  564. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0spr_aj._.js +0 -3
  565. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0th0pyh._.js +0 -3
  566. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0x21fif._.js +0 -3
  567. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1-7bj56._.js +0 -3
  568. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1-efoj1._.js +0 -3
  569. package/.next/server/chunks/11mp_@anthropic-ai_sdk_13vu693._.js +0 -3
  570. package/.next/server/chunks/11mp_@anthropic-ai_sdk_13w62gi._.js +0 -3
  571. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1887ce1._.js +0 -3
  572. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_jq3yb._.js +0 -3
  573. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1agvp6h._.js +0 -3
  574. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1b1-3vt._.js +0 -3
  575. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ekldtb._.js +0 -3
  576. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ezcndt._.js +0 -3
  577. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1gr-orf._.js +0 -3
  578. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1hf-884._.js +0 -3
  579. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ndwnmb._.js +0 -3
  580. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rdesfd._.js +0 -3
  581. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1s8h60-._.js +0 -3
  582. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1tgk9wk._.js +0 -3
  583. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1uugb45._.js +0 -3
  584. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vcxmui._.js +0 -3
  585. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1x63qpm._.js +0 -3
  586. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y5oj_h._.js +0 -3
  587. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1z0q4jj._.js +0 -3
  588. package/.next/server/chunks/11mp_@anthropic-ai_sdk_20j6dn7._.js +0 -3
  589. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_00nr0dy._.js +0 -3
  590. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_06kgcr0._.js +0 -3
  591. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_07kod-g._.js +0 -3
  592. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0_va-1q._.js +0 -3
  593. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0dr79hc._.js +0 -3
  594. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ew4_uw._.js +0 -3
  595. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0iy714m._.js +0 -3
  596. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0n6aq49._.js +0 -3
  597. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ncvuil._.js +0 -3
  598. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0vilstf._.js +0 -3
  599. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ybdfbv._.js +0 -3
  600. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0z31-c0._.js +0 -3
  601. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0zu51ny._.js +0 -3
  602. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13-fsm5._.js +0 -3
  603. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13lk7wf._.js +0 -3
  604. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ao3e3l._.js +0 -3
  605. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ck6z1z._.js +0 -3
  606. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1dm3so9._.js +0 -3
  607. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1jxtz_6._.js +0 -3
  608. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1pdl5qg._.js +0 -3
  609. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1tzpss1._.js +0 -3
  610. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x_0sf4._.js +0 -3
  611. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x_fy5x._.js +0 -3
  612. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1xx8_-m._.js +0 -3
  613. package/.next/server/chunks/[root-of-the-server]__05us508._.js +0 -3
  614. package/.next/server/chunks/[root-of-the-server]__09oyvwa._.js +0 -3
  615. package/.next/server/chunks/[root-of-the-server]__09oyvwa._.js.map +0 -1
  616. package/.next/server/chunks/[root-of-the-server]__0b6w_wb._.js +0 -3
  617. package/.next/server/chunks/[root-of-the-server]__0cxmrop._.js +0 -3
  618. package/.next/server/chunks/[root-of-the-server]__0cxmrop._.js.map +0 -1
  619. package/.next/server/chunks/[root-of-the-server]__0exzf-v._.js +0 -3
  620. package/.next/server/chunks/[root-of-the-server]__0exzf-v._.js.map +0 -1
  621. package/.next/server/chunks/[root-of-the-server]__0fn-a8c._.js +0 -126
  622. package/.next/server/chunks/[root-of-the-server]__0fn-a8c._.js.map +0 -1
  623. package/.next/server/chunks/[root-of-the-server]__0gnil0m._.js +0 -3
  624. package/.next/server/chunks/[root-of-the-server]__0gnil0m._.js.map +0 -1
  625. package/.next/server/chunks/[root-of-the-server]__0hg1r2b._.js +0 -3
  626. package/.next/server/chunks/[root-of-the-server]__0hk-9ll._.js +0 -3
  627. package/.next/server/chunks/[root-of-the-server]__0hk-9ll._.js.map +0 -1
  628. package/.next/server/chunks/[root-of-the-server]__0i1yba1._.js +0 -3
  629. package/.next/server/chunks/[root-of-the-server]__0i1yba1._.js.map +0 -1
  630. package/.next/server/chunks/[root-of-the-server]__0khz7sy._.js +0 -3
  631. package/.next/server/chunks/[root-of-the-server]__0khz7sy._.js.map +0 -1
  632. package/.next/server/chunks/[root-of-the-server]__0lf11mz._.js +0 -3
  633. package/.next/server/chunks/[root-of-the-server]__0lf11mz._.js.map +0 -1
  634. package/.next/server/chunks/[root-of-the-server]__0lix3ru._.js +0 -3
  635. package/.next/server/chunks/[root-of-the-server]__0lix3ru._.js.map +0 -1
  636. package/.next/server/chunks/[root-of-the-server]__0pvi3ku._.js +0 -126
  637. package/.next/server/chunks/[root-of-the-server]__0pvi3ku._.js.map +0 -1
  638. package/.next/server/chunks/[root-of-the-server]__0pz59qo._.js.map +0 -1
  639. package/.next/server/chunks/[root-of-the-server]__0rggulw._.js +0 -3
  640. package/.next/server/chunks/[root-of-the-server]__0s8v5i-._.js +0 -3
  641. package/.next/server/chunks/[root-of-the-server]__0s8v5i-._.js.map +0 -1
  642. package/.next/server/chunks/[root-of-the-server]__0usdydm._.js +0 -3
  643. package/.next/server/chunks/[root-of-the-server]__0usdydm._.js.map +0 -1
  644. package/.next/server/chunks/[root-of-the-server]__0vf-0gp._.js +0 -3
  645. package/.next/server/chunks/[root-of-the-server]__0xldguc._.js +0 -3
  646. package/.next/server/chunks/[root-of-the-server]__0xldguc._.js.map +0 -1
  647. package/.next/server/chunks/[root-of-the-server]__11nbc9e._.js +0 -3
  648. package/.next/server/chunks/[root-of-the-server]__11rp-qx._.js +0 -3
  649. package/.next/server/chunks/[root-of-the-server]__11rp-qx._.js.map +0 -1
  650. package/.next/server/chunks/[root-of-the-server]__15c5snv._.js +0 -3
  651. package/.next/server/chunks/[root-of-the-server]__15c5snv._.js.map +0 -1
  652. package/.next/server/chunks/[root-of-the-server]__18dt3sr._.js +0 -3
  653. package/.next/server/chunks/[root-of-the-server]__1a7d63a._.js +0 -3
  654. package/.next/server/chunks/[root-of-the-server]__1a7d63a._.js.map +0 -1
  655. package/.next/server/chunks/[root-of-the-server]__1e68zmx._.js +0 -3
  656. package/.next/server/chunks/[root-of-the-server]__1e68zmx._.js.map +0 -1
  657. package/.next/server/chunks/[root-of-the-server]__1ef-hw_._.js +0 -3
  658. package/.next/server/chunks/[root-of-the-server]__1ef-hw_._.js.map +0 -1
  659. package/.next/server/chunks/[root-of-the-server]__1jel07j._.js +0 -3
  660. package/.next/server/chunks/[root-of-the-server]__1jel07j._.js.map +0 -1
  661. package/.next/server/chunks/[root-of-the-server]__1la-6xe._.js +0 -3
  662. package/.next/server/chunks/[root-of-the-server]__1la-6xe._.js.map +0 -1
  663. package/.next/server/chunks/[root-of-the-server]__1p6-0l0._.js +0 -3
  664. package/.next/server/chunks/[root-of-the-server]__1pjwaan._.js +0 -3
  665. package/.next/server/chunks/[root-of-the-server]__1qcy2l0._.js +0 -3
  666. package/.next/server/chunks/[root-of-the-server]__1qcy2l0._.js.map +0 -1
  667. package/.next/server/chunks/[root-of-the-server]__1r_0uma._.js +0 -3
  668. package/.next/server/chunks/[root-of-the-server]__1skrybv._.js +0 -3
  669. package/.next/server/chunks/[root-of-the-server]__1vnine1._.js +0 -126
  670. package/.next/server/chunks/[root-of-the-server]__1vnine1._.js.map +0 -1
  671. package/.next/server/chunks/[root-of-the-server]__1wbho9e._.js +0 -3
  672. package/.next/server/chunks/[root-of-the-server]__1wcd2x9._.js +0 -3
  673. package/.next/server/chunks/[root-of-the-server]__1zhd93r._.js +0 -3
  674. package/.next/server/chunks/[root-of-the-server]__1zhd93r._.js.map +0 -1
  675. package/.next/server/chunks/ssr/_0kob2si._.js +0 -151
  676. package/.next/server/chunks/ssr/_0kob2si._.js.map +0 -1
  677. package/.next/server/chunks/ssr/_0me5_6x._.js +0 -3
  678. package/.next/server/chunks/ssr/_0me5_6x._.js.map +0 -1
  679. package/.next/server/chunks/ssr/_0pg63il._.js +0 -3
  680. package/.next/server/chunks/ssr/_0pg63il._.js.map +0 -1
  681. package/.next/server/chunks/ssr/_16b4hkt._.js +0 -3
  682. package/.next/server/chunks/ssr/_16b4hkt._.js.map +0 -1
  683. package/.next/server/chunks/ssr/_190c11r._.js +0 -3
  684. package/.next/server/chunks/ssr/_190c11r._.js.map +0 -1
  685. package/.next/server/chunks/ssr/_1cz8dnu._.js +0 -3
  686. package/.next/server/chunks/ssr/_1cz8dnu._.js.map +0 -1
  687. package/.next/server/chunks/ssr/_1feybpz._.js +0 -3
  688. package/.next/server/chunks/ssr/_1feybpz._.js.map +0 -1
  689. package/.next/server/chunks/ssr/_1r_t_wi._.js +0 -3
  690. package/.next/server/chunks/ssr/_1t8it2w._.js +0 -3
  691. package/.next/server/chunks/ssr/_1t8it2w._.js.map +0 -1
  692. package/.next/static/chunks/036fex6o238at.css +0 -1
  693. package/.next/static/chunks/03tzhv775qv5m.js +0 -1
  694. package/.next/static/chunks/05rjl54wa6y43.js +0 -1
  695. package/.next/static/chunks/1b9r_vdcewfu7.js +0 -1
  696. package/.next/static/chunks/1c459q7xpgq6r.js +0 -3
  697. package/.next/static/chunks/1c5ibgojv8jdi.js +0 -3
  698. package/.next/static/chunks/1c_8t2kecjnua.js +0 -1
  699. package/.next/static/chunks/1pmgcotwq-_yh.js +0 -1
  700. package/.next/static/chunks/1v63qs4kxxcfh.js +0 -1
  701. package/.next/static/chunks/2-0lpccy0f8bk.js +0 -2
  702. package/.next/static/chunks/263i_dcdizuvd.js +0 -1
  703. package/.next/static/chunks/2mf5us3y9wd9g.js +0 -1
  704. package/.next/static/chunks/36s2k2k_w-or8.js +0 -1
  705. package/.next/static/chunks/37u2gjz5dzhep.js +0 -1
  706. package/.next/static/chunks/3ctec-7mnm19m.js +0 -1
  707. package/.next/static/chunks/3rtr962aa09nh.js +0 -12
  708. package/.next/static/chunks/42c9smmpcu4re.js +0 -1
  709. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-r4g2t._.js.map → 11mp_@anthropic-ai_sdk_0-smxh7._.js.map} +0 -0
  710. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_01gyja3._.js.map → 11mp_@anthropic-ai_sdk_0-upxuo._.js.map} +0 -0
  711. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_02lx_j3._.js.map → 11mp_@anthropic-ai_sdk_00stvd0._.js.map} +0 -0
  712. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_05iv23g._.js.map → 11mp_@anthropic-ai_sdk_05tlp4j._.js.map} +0 -0
  713. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_05oneea._.js.map → 11mp_@anthropic-ai_sdk_06i1jku._.js.map} +0 -0
  714. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_07fgg-l._.js.map → 11mp_@anthropic-ai_sdk_06pqlwo._.js.map} +0 -0
  715. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_5gzfy._.js.map → 11mp_@anthropic-ai_sdk_06q_bm6._.js.map} +0 -0
  716. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_jynr-._.js.map → 11mp_@anthropic-ai_sdk_098dref._.js.map} +0 -0
  717. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0aykesf._.js.map → 11mp_@anthropic-ai_sdk_09q07e_._.js.map} +0 -0
  718. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0br_1fc._.js.map → 11mp_@anthropic-ai_sdk_09r9wsn._.js.map} +0 -0
  719. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0cd5lu7._.js.map → 11mp_@anthropic-ai_sdk_0_rnqa6._.js.map} +0 -0
  720. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0ckxhy7._.js.map → 11mp_@anthropic-ai_sdk_0ch0mdl._.js.map} +0 -0
  721. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0e5qkuv._.js.map → 11mp_@anthropic-ai_sdk_0didq3m._.js.map} +0 -0
  722. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0el8pm6._.js.map → 11mp_@anthropic-ai_sdk_0dwtv_z._.js.map} +0 -0
  723. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0i4w8fv._.js.map → 11mp_@anthropic-ai_sdk_0e8sqia._.js.map} +0 -0
  724. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0i7ckik._.js.map → 11mp_@anthropic-ai_sdk_0gk-rze._.js.map} +0 -0
  725. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0l1p4c6._.js.map → 11mp_@anthropic-ai_sdk_0gywxp1._.js.map} +0 -0
  726. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0m-xqs_._.js.map → 11mp_@anthropic-ai_sdk_0h4l0yx._.js.map} +0 -0
  727. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0nltdmf._.js.map → 11mp_@anthropic-ai_sdk_0hjmy82._.js.map} +0 -0
  728. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0qxmzg8._.js.map → 11mp_@anthropic-ai_sdk_0jbmnx_._.js.map} +0 -0
  729. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0spr_aj._.js.map → 11mp_@anthropic-ai_sdk_0l7teck._.js.map} +0 -0
  730. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0th0pyh._.js.map → 11mp_@anthropic-ai_sdk_0ldf-lc._.js.map} +0 -0
  731. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0x21fif._.js.map → 11mp_@anthropic-ai_sdk_0oe9p6l._.js.map} +0 -0
  732. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1-7bj56._.js.map → 11mp_@anthropic-ai_sdk_0ppgi2h._.js.map} +0 -0
  733. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1-efoj1._.js.map → 11mp_@anthropic-ai_sdk_0ydb8nm._.js.map} +0 -0
  734. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_13vu693._.js.map → 11mp_@anthropic-ai_sdk_11hsr1e._.js.map} +0 -0
  735. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_13w62gi._.js.map → 11mp_@anthropic-ai_sdk_14pgcis._.js.map} +0 -0
  736. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1887ce1._.js.map → 11mp_@anthropic-ai_sdk_15_sqq8._.js.map} +0 -0
  737. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1_jq3yb._.js.map → 11mp_@anthropic-ai_sdk_16up-b0._.js.map} +0 -0
  738. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1agvp6h._.js.map → 11mp_@anthropic-ai_sdk_1_jm94w._.js.map} +0 -0
  739. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1b1-3vt._.js.map → 11mp_@anthropic-ai_sdk_1aswx0v._.js.map} +0 -0
  740. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ekldtb._.js.map → 11mp_@anthropic-ai_sdk_1bkea9c._.js.map} +0 -0
  741. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ezcndt._.js.map → 11mp_@anthropic-ai_sdk_1d41_6l._.js.map} +0 -0
  742. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1gr-orf._.js.map → 11mp_@anthropic-ai_sdk_1d959rx._.js.map} +0 -0
  743. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1hf-884._.js.map → 11mp_@anthropic-ai_sdk_1eughke._.js.map} +0 -0
  744. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ndwnmb._.js.map → 11mp_@anthropic-ai_sdk_1ev29eb._.js.map} +0 -0
  745. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1rdesfd._.js.map → 11mp_@anthropic-ai_sdk_1faxy2m._.js.map} +0 -0
  746. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1s8h60-._.js.map → 11mp_@anthropic-ai_sdk_1lginb1._.js.map} +0 -0
  747. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1tgk9wk._.js.map → 11mp_@anthropic-ai_sdk_1pg6fky._.js.map} +0 -0
  748. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1uugb45._.js.map → 11mp_@anthropic-ai_sdk_1qfho5e._.js.map} +0 -0
  749. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1vcxmui._.js.map → 11mp_@anthropic-ai_sdk_1r9e6jv._.js.map} +0 -0
  750. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1x63qpm._.js.map → 11mp_@anthropic-ai_sdk_1tjlpeq._.js.map} +0 -0
  751. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1y5oj_h._.js.map → 11mp_@anthropic-ai_sdk_1wcdj4f._.js.map} +0 -0
  752. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1z0q4jj._.js.map → 11mp_@anthropic-ai_sdk_1x25dnb._.js.map} +0 -0
  753. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_20j6dn7._.js.map → 11mp_@anthropic-ai_sdk_1ywjkuh._.js.map} +0 -0
  754. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_00nr0dy._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_07rnikd._.js.map} +0 -0
  755. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_06kgcr0._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0cxqkzo._.js.map} +0 -0
  756. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_07kod-g._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0iemvsj._.js.map} +0 -0
  757. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0_va-1q._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0losy1p._.js.map} +0 -0
  758. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0dr79hc._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0q2-o56._.js.map} +0 -0
  759. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0ew4_uw._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0v9tonm._.js.map} +0 -0
  760. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0iy714m._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0ve_28v._.js.map} +0 -0
  761. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0n6aq49._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0vta7f6._.js.map} +0 -0
  762. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0ncvuil._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0xme80s._.js.map} +0 -0
  763. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0vilstf._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_12tnhho._.js.map} +0 -0
  764. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0ybdfbv._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_14-nnf3._.js.map} +0 -0
  765. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0z31-c0._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_14e0xcw._.js.map} +0 -0
  766. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0zu51ny._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1cbywiw._.js.map} +0 -0
  767. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_13-fsm5._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1d4fc7y._.js.map} +0 -0
  768. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_13lk7wf._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1e89sld._.js.map} +0 -0
  769. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1ao3e3l._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1emt011._.js.map} +0 -0
  770. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1ck6z1z._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1jgaffx._.js.map} +0 -0
  771. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1dm3so9._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1m9p_w8._.js.map} +0 -0
  772. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1jxtz_6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1mtv1gy._.js.map} +0 -0
  773. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1pdl5qg._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1plmrbl._.js.map} +0 -0
  774. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1tzpss1._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1toqkb5._.js.map} +0 -0
  775. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1x_0sf4._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1yc8ml3._.js.map} +0 -0
  776. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1x_fy5x._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1ycnogk._.js.map} +0 -0
  777. /package/.next/server/chunks/{[root-of-the-server]__0rikmqn._.js.map → [root-of-the-server]__0adl8c2._.js.map} +0 -0
  778. /package/.next/server/chunks/{[root-of-the-server]__08v3p50._.js.map → [root-of-the-server]__0r_831n._.js.map} +0 -0
  779. /package/.next/server/chunks/{[root-of-the-server]__0wc_gnr._.js.map → [root-of-the-server]__0tzsbyx._.js.map} +0 -0
  780. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1xx8_-m._.js.map → [root-of-the-server]__1_q8upn._.js.map} +0 -0
  781. /package/.next/server/chunks/{[root-of-the-server]__1yh-4vk._.js.map → [root-of-the-server]__1hz94ca._.js.map} +0 -0
  782. /package/.next/server/chunks/{[root-of-the-server]__06ndlro._.js.map → [root-of-the-server]__1pf07ha._.js.map} +0 -0
  783. /package/.next/server/chunks/{[root-of-the-server]__0zy73pu._.js.map → _next-internal_server_app_api_memory_restore_route_actions_0679kmo.js.map} +0 -0
  784. /package/.next/server/chunks/{ssr/0_nd_mermaid_dist_mermaid_core_mjs_0y_edkq._.js.map → _next-internal_server_app_api_memory_versions_route_actions_13mix75.js.map} +0 -0
  785. /package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_0yg8zto._.js.map → 0_nd_mermaid_dist_mermaid_core_mjs_1trh599._.js.map} +0 -0
  786. /package/.next/server/chunks/ssr/{_1r_t_wi._.js.map → 1u84_katex_dist_katex_mjs_0wukkxe._.js.map} +0 -0
  787. /package/.next/server/chunks/ssr/{[root-of-the-server]__08z0szh._.js.map → [root-of-the-server]__0p_ieww._.js.map} +0 -0
  788. /package/.next/server/chunks/ssr/{[root-of-the-server]__1wdwnnp._.js.map → [root-of-the-server]__1ecvjg8._.js.map} +0 -0
  789. /package/.next/server/chunks/ssr/{node_modules__pnpm_00f4yhs._.js.map → _next-internal_server_app_(app)_getting-started_page_actions_18jod7i.js.map} +0 -0
  790. /package/.next/server/chunks/ssr/{node_modules__pnpm_0j_-le7._.js.map → _next-internal_server_app_welcome_page_actions_1unjea7.js.map} +0 -0
  791. /package/.next/server/chunks/ssr/{node_modules__pnpm_03mp7qw._.js.map → node_modules__pnpm_0-6sq9f._.js.map} +0 -0
  792. /package/.next/server/chunks/ssr/{node_modules__pnpm_0jampur._.js.map → node_modules__pnpm_0-vta96._.js.map} +0 -0
  793. /package/.next/server/chunks/ssr/{node_modules__pnpm_0zz55xq._.js.map → node_modules__pnpm_04qn321._.js.map} +0 -0
  794. /package/.next/server/chunks/ssr/{node_modules__pnpm_0tn5pg3._.js.map → node_modules__pnpm_06r-oci._.js.map} +0 -0
  795. /package/.next/server/chunks/ssr/{node_modules__pnpm_0iu4132._.js.map → node_modules__pnpm_0fe8aya._.js.map} +0 -0
  796. /package/.next/server/chunks/ssr/{node_modules__pnpm_0oyo3yo._.js.map → node_modules__pnpm_0hpufx1._.js.map} +0 -0
  797. /package/.next/server/chunks/ssr/{node_modules__pnpm_0x5wj-4._.js.map → node_modules__pnpm_0kv8p99._.js.map} +0 -0
  798. /package/.next/server/chunks/ssr/{node_modules__pnpm_06_8fr8._.js.map → node_modules__pnpm_0m-_au1._.js.map} +0 -0
  799. /package/.next/server/chunks/ssr/{node_modules__pnpm_1zme4rg._.js.map → node_modules__pnpm_0mrjd3b._.js.map} +0 -0
  800. /package/.next/server/chunks/ssr/{node_modules__pnpm_0mqeoh-._.js.map → node_modules__pnpm_0p2ufg5._.js.map} +0 -0
  801. /package/.next/server/chunks/ssr/{node_modules__pnpm_03mpmzx._.js.map → node_modules__pnpm_0r2omyh._.js.map} +0 -0
  802. /package/.next/server/chunks/ssr/{node_modules__pnpm_0_e05ka._.js.map → node_modules__pnpm_0uh9zwf._.js.map} +0 -0
  803. /package/.next/server/chunks/ssr/{node_modules__pnpm_035haet._.js.map → node_modules__pnpm_0ujugl_._.js.map} +0 -0
  804. /package/.next/server/chunks/ssr/{node_modules__pnpm_0lkvbt-._.js.map → node_modules__pnpm_0v-_iaj._.js.map} +0 -0
  805. /package/.next/server/chunks/ssr/{node_modules__pnpm_0rq9x9q._.js.map → node_modules__pnpm_0xin4nu._.js.map} +0 -0
  806. /package/.next/server/chunks/ssr/{node_modules__pnpm_139-v1i._.js.map → node_modules__pnpm_1-zfovp._.js.map} +0 -0
  807. /package/.next/server/chunks/ssr/{node_modules__pnpm_1i_chik._.js.map → node_modules__pnpm_11p7w0z._.js.map} +0 -0
  808. /package/.next/server/chunks/ssr/{node_modules__pnpm_1jgju12._.js.map → node_modules__pnpm_16l16l0._.js.map} +0 -0
  809. /package/.next/server/chunks/ssr/{node_modules__pnpm_1n9oeu0._.js.map → node_modules__pnpm_16vl5yb._.js.map} +0 -0
  810. /package/.next/server/chunks/ssr/{node_modules__pnpm_1ydeqw6._.js.map → node_modules__pnpm_1alnvos._.js.map} +0 -0
  811. /package/.next/server/chunks/ssr/{node_modules__pnpm_03an60e._.js.map → node_modules__pnpm_1e_74v6._.js.map} +0 -0
  812. /package/.next/server/chunks/ssr/{node_modules__pnpm_2045l51._.js.map → node_modules__pnpm_1kvkjrs._.js.map} +0 -0
  813. /package/.next/server/chunks/ssr/{node_modules__pnpm_1ws3ez9._.js.map → node_modules__pnpm_1uly489._.js.map} +0 -0
  814. /package/.next/server/chunks/ssr/{node_modules__pnpm_1zum4yd._.js.map → node_modules__pnpm_1xntybk._.js.map} +0 -0
  815. /package/.next/server/chunks/ssr/{node_modules__pnpm_09nd7ia._.js.map → node_modules__pnpm_20g30gl._.js.map} +0 -0
  816. /package/.next/static/{5hNes2Kijr5IvUPPw-ez9 → BQD2S1kA-_gIYFyMKyJ2F}/_buildManifest.js +0 -0
  817. /package/.next/static/{5hNes2Kijr5IvUPPw-ez9 → BQD2S1kA-_gIYFyMKyJ2F}/_clientMiddlewareManifest.js +0 -0
  818. /package/.next/static/{5hNes2Kijr5IvUPPw-ez9 → BQD2S1kA-_gIYFyMKyJ2F}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[508817,a=>{"use strict";var b=a.i(256857);let c={name:"book-open",size:24,node:[["path",{d:"M12 5v16",key:"1f6ucr"}],["path",{d:"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z",key:"1fyvmf"}]]};c.node;let d=(0,b.default)(c);a.s(["BookOpen",0,d],508817)},717371,a=>{"use strict";var b=a.i(256857);let c={name:"flag",size:24,node:[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]};c.node;let d=(0,b.default)(c);a.s(["Flag",0,d],717371)},759658,a=>{"use strict";var b=a.i(256857);let c={name:"lightbulb",size:24,node:[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]};c.node;let d=(0,b.default)(c);a.s(["Lightbulb",0,d],759658)},471617,a=>{"use strict";var b=a.i(256857);let c={name:"scale",size:24,node:[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"m19 8 3 8a5 5 0 0 1-6 0zV7",key:"zcdpyk"}],["path",{d:"M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1",key:"1yorad"}],["path",{d:"m5 8 3 8a5 5 0 0 1-6 0zV7",key:"eua70x"}],["path",{d:"M7 21h10",key:"1b0cd5"}]]};c.node;let d=(0,b.default)(c);a.s(["Scale",0,d],471617)},853244,a=>{"use strict";var b=a.i(256857);let c={name:"unlink",size:24,node:[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]};c.node;let d=(0,b.default)(c);a.s(["Unlink",0,d],853244)},892678,a=>{"use strict";var b=a.i(256857);let c={name:"user",size:24,node:[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]};c.node;let d=(0,b.default)(c);a.s(["User",0,d],892678)},731050,760093,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(508817),f=a.i(926128),g=a.i(717371),h=a.i(759658),i=a.i(471617),j=a.i(544394),k=a.i(173628),l=a.i(147758);let m=[{kind:"task",label:"Tasks"},{kind:"epic",label:"Epics"},{kind:"adr",label:"ADRs"},{kind:"doc",label:"Docs"},{kind:"entry",label:"Entries"}],n={epic:g.Flag,adr:i.Scale,doc:f.FileText,entry:h.Lightbulb,task:e.BookOpen};function o(a){let b=(0,d.useRouter)(),{openDoc:c}=(0,j.useApp)();return d=>{"task"===d.kind?b.push(`/board?task=${d.id}`):"epic"===d.kind?b.push(`/roadmap?item=${d.id}`):"entry"===d.kind?a(d.id):c(d.path)}}a.s(["EntryRelated",0,function({entryId:a,onOpenEntry:d}){let{rootParam:e,summary:f,board:g}=(0,j.useApp)(),h=o(d),[i,p]=(0,c.useState)(null);(0,c.useEffect)(()=>{let b=!0;return fetch(`/api/memory/graph${e}&entry=${encodeURIComponent(a)}`).then(a=>a.json()).then(a=>{b&&p(a.nodes?a:{nodes:[],edges:[]})}).catch(a=>{console.warn("Loading entry links failed",a),b&&p({nodes:[],edges:[]})}),()=>{b=!1}},[a,e,f]);let q=(0,c.useMemo)(()=>new Map(Object.values(g??{}).flat().map(a=>[a.id,a])),[g]),r=(0,c.useMemo)(()=>new Map((i?.nodes??[]).map(a=>[a.id,a])),[i]),s=a=>a.map(a=>r.get(a)).filter(a=>!!a),t=s((i?.edges??[]).filter(b=>b.from===a).map(a=>a.to)),u=s((i?.edges??[]).filter(b=>b.to===a).map(a=>a.from)),v=a=>{let c="task"===a.kind?q.get(a.id):void 0,d=c?(0,l.displayStatus)(c):"epic"===a.kind?a.status:void 0,e=n[a.kind];return(0,b.jsx)("li",{children:(0,b.jsxs)("button",{type:"button",onClick:()=>h(a),title:a.path,className:"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-sm outline-none hover:bg-surface2 focus-visible:ring-2 focus-visible:ring-accent",children:[d?(0,b.jsx)(k.StatusIcon,{status:d,className:"size-3.5 shrink-0"}):(0,b.jsx)(e,{className:"size-3.5 shrink-0 text-muted","aria-hidden":!0}),"doc"!==a.kind&&(0,b.jsx)("span",{className:"shrink-0 font-mono text-[11px] text-muted",children:a.id}),(0,b.jsx)("span",{className:"min-w-0 truncate text-txt",children:a.label})]})},a.id)},w=(a,c)=>(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("h4",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted",children:a}),m.map(({kind:a,label:d})=>{let e=c.filter(b=>b.kind===a);return e.length?(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"px-2 text-[11px] text-muted",children:d}),(0,b.jsx)("ul",{children:e.map(v)})]},a):null})]});return(0,b.jsxs)("section",{"aria-label":"Related",className:"mt-5 flex flex-col gap-3 border-t border-border pt-4",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold text-txt",children:"Related"}),null===i?(0,b.jsx)("p",{className:"text-xs text-muted",children:"Loading links…"}):t.length||u.length?(0,b.jsxs)(b.Fragment,{children:[t.length>0&&w("Links to",t),u.length>0&&w("Linked from",u)]}):(0,b.jsx)("p",{className:"text-xs text-muted",children:"No links yet. Mention a task, epic or doc in the entry to link it."})]})},"GROUPS",0,m,"KIND_ICON",0,n,"useOpenNode",0,o],731050);let p=new Set(["doc_updated","doc_created","doc_deleted","doc_renamed","task_created","task_updated","roadmap_updated","memory_updated","decision_logged"]),q=new Set;function r(a){return q.add(a),()=>{q.delete(a)}}function s(){return(0,c.useSyncExternalStore)(r,()=>0,()=>0)}let t=new Map;function u(a){let b=t.get(a);if(!b){let c=b=fetch(a).then(async a=>{let b=await a.json().catch(()=>null);if(!a.ok)throw Error(b?.error??`${a.status} ${a.statusText}`);return b});c.catch(()=>{t.get(a)===c&&t.delete(a)}),t.set(a,c)}return b}a.s(["LINK_EVENTS",0,p,"fetchLinkJson",0,u,"useDocLinks",0,function(a){let{rootParam:b}=(0,j.useApp)(),[d,e]=(0,c.useState)(null),f=s();return(0,c.useEffect)(()=>{if(!a)return;let c=!0;return u(`/api/docs/links${b}&path=${encodeURIComponent(a)}`).then(b=>{c&&e({path:a,links:{out:b.out??[],in:b.in??[],broken:b.broken??[],stale:b.stale??[],targets:b.targets??{}}})}).catch(b=>{console.warn("Loading doc links failed",b),c&&e({path:a,links:{out:[],in:[],broken:[],stale:[],targets:{}}})}),()=>{c=!1}},[a,b,f]),a&&d?.path===a?d.links:null},"useLinkGeneration",0,s],760093)},813722,853775,a=>{"use strict";var b=a.i(662145),c=a.i(795667),d=a.i(892678),e=a.i(368114);function f(a){return"human"===a?"human":a?.startsWith("ai:")?"ai":"none"}function g(a){return"human"===a?"Human":a?.startsWith("ai:")?a.slice(3):"No owner"}a.s(["ownerKind",0,f,"ownerLabel",0,g],853775),a.s(["OwnerChip",0,function({owner:a,className:h}){let i=f(a);if("none"===i)return null;let j="ai"===i?c.Bot:d.User;return(0,b.jsxs)("span",{title:`Owner: ${g(a)}`,className:(0,e.cn)("inline-flex items-center gap-1 text-[11px] text-muted",h),children:[(0,b.jsx)(j,{className:(0,e.cn)("size-3.5 shrink-0","ai"===i&&"text-accent"),"aria-hidden":!0}),g(a)]})}],813722)},692938,a=>{"use strict";let b=new Set(["a","b","c","x","y","z","path","name","slug","title","foo","bar","wikilinks","example"]),c=a=>String(Number(a)).padStart(3,"0");function d(a){return a.startsWith("ADR-")?`ADR-${c(a.slice(4))}`:a.startsWith("E")?`E${c(a.slice(1))}`:a}function e(a,b){let c,e=function(a){let b=[];for(let c of a.replace(/\\/g,"/").split("/"))if(c&&"."!==c)if(".."===c){if(!b.length)return null;b.pop()}else b.push(c);return b.join("/")}(a)??a,f=(e.split("/").pop()??e).replace(/\.md$/i,""),g=(/^#\s+(.+?)\s*$/m.exec(b)?.[1]??"").replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g,(a,b,c)=>c??b).replace(/(\*\*|\*|~~|`)(\S(?:.*?\S)?)\1/g,"$2").replace(/(^|\W)(__|_)(\S(?:.*?\S)?)\2(?=\W|$)/g,"$1$3").replace(/<[^>]+>/g,"").trim(),h=/[^.][.!]$/.test(g)?"":g,i=a=>h.replace(RegExp(`^${a}\\s*[:—–-]\\s*`),"")||f;return(c=/^plans\/tasks\/(T\d{3,})[^/]*\.md$/.exec(e))?{id:c[1],kind:"task",label:i(c[1]),path:e}:(c=/^plans\/roadmap\/(R\d{3,})[^/]*\.md$/.exec(e))?{id:c[1],kind:"epic",label:i(c[1]),path:e}:(c=/^memory\/entries\/(E\d+)[^/]*\.md$/.exec(e))?{id:d(c[1]),kind:"entry",label:i(c[1]),path:e}:(c=/(?:^|\/)(ADR-\d+)[^/]*\.md$/.exec(e))?{id:d(c[1]),kind:"adr",label:i(c[1]),path:e}:{id:e,kind:"doc",label:h||f,path:e}}new WeakMap;let f=["doc","adr"],g=/^(?:Entry )?(E\d+|T\d{3,}|R\d{3,}|ADR-\d+)\b/,h=new Set(["doc_updated","doc_created"]);a.s(["GRAPH_DEFAULT_KINDS",0,f,"docNode",0,e,"graphHref",0,function(a){let b=new URLSearchParams({node:a,focus:"1"}),c=e(a,"").kind;return f.includes(c)||b.set("kinds",[...f,c].join(",")),`/graph?${b}`},"isExampleTarget",0,function(a){let c=(a.split("/").pop()??"").replace(/\.md$/i,"").replace(/^(?:ADR-\d+|[TRE]\d+)-/,"");return b.has(c.toLowerCase())},"touchedPaths",0,function(a,b,c){let d=new Map;for(let a of b)d.set(a.id,a.path),d.set(a.path,a.path);let e=new Set;for(let b of a){if(!(Date.parse(b.timestamp)>=c))continue;let a=[b.taskId,g.exec(b.title)?.[1]];for(let c of(h.has(b.type)&&a.push(b.detail),"doc_renamed"===b.type&&a.push(b.title.split(" → ")[1]),"memory_updated"!==b.type||b.title.startsWith("Entry ")||a.push("memory/MEMORY.md"),a)){let a=c?d.get(c.trim()):void 0;a&&e.add(a)}}return e}])}];
1
+ module.exports=[508817,a=>{"use strict";var b=a.i(256857);let c={name:"book-open",size:24,node:[["path",{d:"M12 5v16",key:"1f6ucr"}],["path",{d:"M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z",key:"1fyvmf"}]]};c.node;let d=(0,b.default)(c);a.s(["BookOpen",0,d],508817)},717371,a=>{"use strict";var b=a.i(256857);let c={name:"flag",size:24,node:[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]};c.node;let d=(0,b.default)(c);a.s(["Flag",0,d],717371)},759658,a=>{"use strict";var b=a.i(256857);let c={name:"lightbulb",size:24,node:[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]};c.node;let d=(0,b.default)(c);a.s(["Lightbulb",0,d],759658)},471617,a=>{"use strict";var b=a.i(256857);let c={name:"scale",size:24,node:[["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"m19 8 3 8a5 5 0 0 1-6 0zV7",key:"zcdpyk"}],["path",{d:"M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1",key:"1yorad"}],["path",{d:"m5 8 3 8a5 5 0 0 1-6 0zV7",key:"eua70x"}],["path",{d:"M7 21h10",key:"1b0cd5"}]]};c.node;let d=(0,b.default)(c);a.s(["Scale",0,d],471617)},853244,a=>{"use strict";var b=a.i(256857);let c={name:"unlink",size:24,node:[["path",{d:"m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71",key:"yqzxt4"}],["path",{d:"m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71",key:"4qinb0"}],["line",{x1:"8",x2:"8",y1:"2",y2:"5",key:"1041cp"}],["line",{x1:"2",x2:"5",y1:"8",y2:"8",key:"14m1p5"}],["line",{x1:"16",x2:"16",y1:"19",y2:"22",key:"rzdirn"}],["line",{x1:"19",x2:"22",y1:"16",y2:"16",key:"ox905f"}]]};c.node;let d=(0,b.default)(c);a.s(["Unlink",0,d],853244)},892678,a=>{"use strict";var b=a.i(256857);let c={name:"user",size:24,node:[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]};c.node;let d=(0,b.default)(c);a.s(["User",0,d],892678)},731050,760093,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(913975),e=a.i(508817),f=a.i(926128),g=a.i(717371),h=a.i(759658),i=a.i(471617),j=a.i(544394),k=a.i(173628),l=a.i(147758);let m=[{kind:"task",label:"Tasks"},{kind:"epic",label:"Epics"},{kind:"adr",label:"ADRs"},{kind:"doc",label:"Docs"},{kind:"entry",label:"Entries"}],n={epic:g.Flag,adr:i.Scale,doc:f.FileText,entry:h.Lightbulb,task:e.BookOpen};function o(a){let b=(0,d.useRouter)(),{openDoc:c}=(0,j.useApp)();return d=>{"task"===d.kind?b.push(`/board?task=${d.id}`):"epic"===d.kind?b.push(`/roadmap?item=${d.id}`):"entry"===d.kind?a(d.id):c(d.path)}}a.s(["EntryRelated",0,function({entryId:a,onOpenEntry:d}){let{rootParam:e,summary:f,board:g}=(0,j.useApp)(),h=o(d),[i,p]=(0,c.useState)(null);(0,c.useEffect)(()=>{let b=!0;return fetch(`/api/memory/graph${e}&entry=${encodeURIComponent(a)}`).then(a=>a.json()).then(a=>{b&&p(a.nodes?a:{nodes:[],edges:[]})}).catch(a=>{console.warn("Loading entry links failed",a),b&&p({nodes:[],edges:[]})}),()=>{b=!1}},[a,e,f]);let q=(0,c.useMemo)(()=>new Map(Object.values(g??{}).flat().map(a=>[a.id,a])),[g]),r=(0,c.useMemo)(()=>new Map((i?.nodes??[]).map(a=>[a.id,a])),[i]),s=a=>a.map(a=>r.get(a)).filter(a=>!!a),t=s((i?.edges??[]).filter(b=>b.from===a).map(a=>a.to)),u=s((i?.edges??[]).filter(b=>b.to===a).map(a=>a.from)),v=a=>{let c="task"===a.kind?q.get(a.id):void 0,d=c?(0,l.displayStatus)(c):"epic"===a.kind?a.status:void 0,e=n[a.kind];return(0,b.jsx)("li",{children:(0,b.jsxs)("button",{type:"button",onClick:()=>h(a),title:a.path,className:"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-sm outline-none hover:bg-surface2 focus-visible:ring-2 focus-visible:ring-accent",children:[d?(0,b.jsx)(k.StatusIcon,{status:d,className:"size-3.5 shrink-0"}):(0,b.jsx)(e,{className:"size-3.5 shrink-0 text-muted","aria-hidden":!0}),"doc"!==a.kind&&(0,b.jsx)("span",{className:"shrink-0 font-mono text-[11px] text-muted",children:a.id}),(0,b.jsx)("span",{className:"min-w-0 truncate text-txt",children:a.label})]})},a.id)},w=(a,c)=>(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("h4",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted",children:a}),m.map(({kind:a,label:d})=>{let e=c.filter(b=>b.kind===a);return e.length?(0,b.jsxs)("div",{children:[(0,b.jsx)("p",{className:"px-2 text-[11px] text-muted",children:d}),(0,b.jsx)("ul",{children:e.map(v)})]},a):null})]});return(0,b.jsxs)("section",{"aria-label":"Related",className:"mt-5 flex flex-col gap-3 border-t border-border pt-4",children:[(0,b.jsx)("h3",{className:"text-xs font-semibold text-txt",children:"Related"}),null===i?(0,b.jsx)("p",{className:"text-xs text-muted",children:"Loading links…"}):t.length||u.length?(0,b.jsxs)(b.Fragment,{children:[t.length>0&&w("Links to",t),u.length>0&&w("Linked from",u)]}):(0,b.jsx)("p",{className:"text-xs text-muted",children:"No links yet. Mention a task, epic or doc in the entry to link it."})]})},"GROUPS",0,m,"KIND_ICON",0,n,"useOpenNode",0,o],731050);let p=new Set(["doc_updated","doc_created","doc_deleted","doc_renamed","task_created","task_updated","roadmap_updated","memory_updated","decision_logged"]),q=new Set;function r(a){return q.add(a),()=>{q.delete(a)}}function s(){return(0,c.useSyncExternalStore)(r,()=>0,()=>0)}let t=new Map;function u(a){let b=t.get(a);if(!b){let c=b=fetch(a).then(async a=>{let b=await a.json().catch(()=>null);if(!a.ok)throw Error(b?.error??`${a.status} ${a.statusText}`);return b});c.catch(()=>{t.get(a)===c&&t.delete(a)}),t.set(a,c)}return b}a.s(["LINK_EVENTS",0,p,"fetchLinkJson",0,u,"useDocLinks",0,function(a){let{rootParam:b}=(0,j.useApp)(),[d,e]=(0,c.useState)(null),f=s();return(0,c.useEffect)(()=>{if(!a)return;let c=!0;return u(`/api/docs/links${b}&path=${encodeURIComponent(a)}`).then(b=>{c&&e({path:a,links:{out:b.out??[],in:b.in??[],broken:b.broken??[],stale:b.stale??[],targets:b.targets??{}}})}).catch(b=>{console.warn("Loading doc links failed",b),c&&e({path:a,links:{out:[],in:[],broken:[],stale:[],targets:{}}})}),()=>{c=!1}},[a,b,f]),a&&d?.path===a?d.links:null},"useLinkGeneration",0,s],760093)},813722,853775,a=>{"use strict";var b=a.i(662145),c=a.i(795667),d=a.i(892678),e=a.i(368114);function f(a){return"human"===a?"human":a?.startsWith("ai:")?"ai":"none"}function g(a){return"human"===a?"Human":a?.startsWith("ai:")?a.slice(3):"No owner"}a.s(["ownerKind",0,f,"ownerLabel",0,g,"parseOwner",0,function(a){let b=(a??"").trim().toLowerCase();if("human"===b)return"human";let c=b.match(/^ai(?::\s*([a-z0-9._-]+))?$/);return c?`ai:${c[1]??"agent"}`:null}],853775),a.s(["OwnerChip",0,function({owner:a,className:h}){let i=f(a);if("none"===i)return null;let j="ai"===i?c.Bot:d.User;return(0,b.jsxs)("span",{title:`Owner: ${g(a)}`,className:(0,e.cn)("inline-flex items-center gap-1 text-[11px] text-muted",h),children:[(0,b.jsx)(j,{className:(0,e.cn)("size-3.5 shrink-0","ai"===i&&"text-accent"),"aria-hidden":!0}),g(a)]})}],813722)},692938,a=>{"use strict";let b=new Set(["a","b","c","x","y","z","path","name","slug","title","foo","bar","wikilinks","example"]),c=a=>String(Number(a)).padStart(3,"0");function d(a){return a.startsWith("ADR-")?`ADR-${c(a.slice(4))}`:a.startsWith("E")?`E${c(a.slice(1))}`:a}function e(a,b){let c,e=function(a){let b=[];for(let c of a.replace(/\\/g,"/").split("/"))if(c&&"."!==c)if(".."===c){if(!b.length)return null;b.pop()}else b.push(c);return b.join("/")}(a)??a,f=(e.split("/").pop()??e).replace(/\.md$/i,""),g=(/^#\s+(.+?)\s*$/m.exec(b)?.[1]??"").replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1").replace(/\[\[([^\]|]+)(?:\|([^\]]+))?\]\]/g,(a,b,c)=>c??b).replace(/(\*\*|\*|~~|`)(\S(?:.*?\S)?)\1/g,"$2").replace(/(^|\W)(__|_)(\S(?:.*?\S)?)\2(?=\W|$)/g,"$1$3").replace(/<[^>]+>/g,"").trim(),h=/[^.][.!]$/.test(g)?"":g,i=a=>h.replace(RegExp(`^${a}\\s*[:—–-]\\s*`),"")||f;return(c=/^plans\/tasks\/(T\d{3,})[^/]*\.md$/.exec(e))?{id:c[1],kind:"task",label:i(c[1]),path:e}:(c=/^plans\/roadmap\/(R\d{3,})[^/]*\.md$/.exec(e))?{id:c[1],kind:"epic",label:i(c[1]),path:e}:(c=/^memory\/entries\/(E\d+)[^/]*\.md$/.exec(e))?{id:d(c[1]),kind:"entry",label:i(c[1]),path:e}:(c=/(?:^|\/)(ADR-\d+)[^/]*\.md$/.exec(e))?{id:d(c[1]),kind:"adr",label:i(c[1]),path:e}:{id:e,kind:"doc",label:h||f,path:e}}new WeakMap;let f=["doc","adr"],g=/^(?:Entry )?(E\d+|T\d{3,}|R\d{3,}|ADR-\d+)\b/,h=new Set(["doc_updated","doc_created"]);a.s(["GRAPH_DEFAULT_KINDS",0,f,"docNode",0,e,"graphHref",0,function(a){let b=new URLSearchParams({node:a,focus:"1"}),c=e(a,"").kind;return f.includes(c)||b.set("kinds",[...f,c].join(",")),`/graph?${b}`},"isExampleTarget",0,function(a){let c=(a.split("/").pop()??"").replace(/\.md$/i,"").replace(/^(?:ADR-\d+|[TRE]\d+)-/,"");return b.has(c.toLowerCase())},"touchedPaths",0,function(a,b,c){let d=new Map;for(let a of b)d.set(a.id,a.path),d.set(a.path,a.path);let e=new Set;for(let b of a){if(!(Date.parse(b.timestamp)>=c))continue;let a=[b.taskId,g.exec(b.title)?.[1]];for(let c of(h.has(b.type)&&a.push(b.detail),"doc_renamed"===b.type&&a.push(b.title.split(" → ")[1]),"memory_updated"!==b.type||b.title.startsWith("Entry ")||a.push("memory/MEMORY.md"),a)){let a=c?d.get(c.trim()):void 0;a&&e.add(a)}}return e}])}];
2
2
 
3
3
  //# sourceMappingURL=_0ghj-vx._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/book-open.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/flag.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/lightbulb.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/scale.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/unlink.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/user.ts","../../../../src/components/memory/EntryRelated.tsx","../../../../src/components/docs/useDocLinks.ts","../../../../src/components/shared/OwnerChip.tsx","../../../../src/lib/owner.ts","../../../../src/lib/doc-links.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'book-open',\n size: 24,\n node: [\n ['path', { d: 'M12 5v16', key: '1f6ucr' }],\n [\n 'path',\n {\n d: 'M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z',\n key: '1fyvmf',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name BookOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgNXYxNiIgLz4KICA8cGF0aCBkPSJNMjAuMDAxIDE5QTIgMiAwIDAwMjIgMTdWNWEyIDIgMCAwMC0xLjk5OS0yTDE2IDMuMDAyQTUgNSAwIDAwMTIgNWE1IDUgMCAwMC00LTJINGEyIDIgMCAwMC0yIDJ2MTJhMiAyIDAgMDAxLjk5OSAySDhhNSA1IDAgMDE0IDIgNSA1IDAgMDE0LTJ6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/book-open\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 BookOpen = createLucideIcon(__iconData);\n\nexport default BookOpen;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'flag',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528',\n key: '1jaruq',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Flag\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNCAyMlY0YTEgMSAwIDAgMSAuNC0uOEE2IDYgMCAwIDEgOCAyYzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTBhMSAxIDAgMCAxLS40LjhBNiA2IDAgMCAxIDE2IDE2Yy0zIDAtNS0yLTgtMmE2IDYgMCAwIDAtNCAxLjUyOCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/flag\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 Flag = createLucideIcon(__iconData);\n\nexport default Flag;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'lightbulb',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5',\n key: '1gvzjb',\n },\n ],\n ['path', { d: 'M9 18h6', key: 'x1upvd' }],\n ['path', { d: 'M10 22h4', key: 'ceow96' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Lightbulb\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgMTRjLjItMSAuNy0xLjcgMS41LTIuNSAxLS45IDEuNS0yLjIgMS41LTMuNUE2IDYgMCAwIDAgNiA4YzAgMSAuMiAyLjIgMS41IDMuNS43LjcgMS4zIDEuNSAxLjUgMi41IiAvPgogIDxwYXRoIGQ9Ik05IDE4aDYiIC8+CiAgPHBhdGggZD0iTTEwIDIyaDQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/lightbulb\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 Lightbulb = createLucideIcon(__iconData);\n\nexport default Lightbulb;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'scale',\n size: 24,\n node: [\n ['path', { d: 'M12 3v18', key: '108xh3' }],\n ['path', { d: 'm19 8 3 8a5 5 0 0 1-6 0zV7', key: 'zcdpyk' }],\n ['path', { d: 'M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1', key: '1yorad' }],\n ['path', { d: 'm5 8 3 8a5 5 0 0 1-6 0zV7', key: 'eua70x' }],\n ['path', { d: 'M7 21h10', key: '1b0cd5' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Scale\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgM3YxOCIgLz4KICA8cGF0aCBkPSJtMTkgOCAzIDhhNSA1IDAgMCAxLTYgMHpWNyIgLz4KICA8cGF0aCBkPSJNMyA3aDFhMTcgMTcgMCAwIDAgOC0yIDE3IDE3IDAgMCAwIDggMmgxIiAvPgogIDxwYXRoIGQ9Im01IDggMyA4YTUgNSAwIDAgMS02IDB6VjciIC8+CiAgPHBhdGggZD0iTTcgMjFoMTAiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/scale\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 Scale = createLucideIcon(__iconData);\n\nexport default Scale;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'unlink',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'm18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71',\n key: 'yqzxt4',\n },\n ],\n [\n 'path',\n {\n d: 'm5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71',\n key: '4qinb0',\n },\n ],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '5', key: '1041cp' }],\n ['line', { x1: '2', x2: '5', y1: '8', y2: '8', key: '14m1p5' }],\n ['line', { x1: '16', x2: '16', y1: '19', y2: '22', key: 'rzdirn' }],\n ['line', { x1: '19', x2: '22', y1: '16', y2: '16', key: 'ox905f' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Unlink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTguODQgMTIuMjUgMS43Mi0xLjcxaC0uMDJhNS4wMDQgNS4wMDQgMCAwIDAtLjEyLTcuMDcgNS4wMDYgNS4wMDYgMCAwIDAtNi45NSAwbC0xLjcyIDEuNzEiIC8+CiAgPHBhdGggZD0ibTUuMTcgMTEuNzUtMS43MSAxLjcxYTUuMDA0IDUuMDA0IDAgMCAwIC4xMiA3LjA3IDUuMDA2IDUuMDA2IDAgMCAwIDYuOTUgMGwxLjcxLTEuNzEiIC8+CiAgPGxpbmUgeDE9IjgiIHgyPSI4IiB5MT0iMiIgeTI9IjUiIC8+CiAgPGxpbmUgeDE9IjIiIHgyPSI1IiB5MT0iOCIgeTI9IjgiIC8+CiAgPGxpbmUgeDE9IjE2IiB4Mj0iMTYiIHkxPSIxOSIgeTI9IjIyIiAvPgogIDxsaW5lIHgxPSIxOSIgeDI9IjIyIiB5MT0iMTYiIHkyPSIxNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/unlink\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 Unlink = createLucideIcon(__iconData);\n\nexport default Unlink;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'user',\n size: 24,\n node: [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\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 User = createLucideIcon(__iconData);\n\nexport default User;\n","\"use client\"\n\nimport { useEffect, useMemo, useState } from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { BookOpen, FileText, Flag, Lightbulb, Scale } from \"lucide-react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { StatusIcon } from \"@/components/shared/StatusIcon\"\nimport { displayStatus } from \"@/lib/statuses\"\nimport type { GraphNode, MemoryGraph, NodeKind } from \"@/lib/memory-graph\"\n\nexport const GROUPS: { kind: NodeKind; label: string }[] = [\n { kind: \"task\", label: \"Tasks\" },\n { kind: \"epic\", label: \"Epics\" },\n { kind: \"adr\", label: \"ADRs\" },\n { kind: \"doc\", label: \"Docs\" },\n { kind: \"entry\", label: \"Entries\" },\n]\nexport const KIND_ICON = { epic: Flag, adr: Scale, doc: FileText, entry: Lightbulb, task: BookOpen } as const\n\n/** Open a graph node where it lives: a task on /board, an epic on /roadmap, a doc or ADR in Docs, an entry here. */\nexport function useOpenNode(onOpenEntry: (id: string) => void) {\n const router = useRouter()\n const { openDoc } = useApp()\n return (n: GraphNode) => {\n if (n.kind === \"task\") router.push(`/board?task=${n.id}`)\n else if (n.kind === \"epic\") router.push(`/roadmap?item=${n.id}`)\n else if (n.kind === \"entry\") onOpenEntry(n.id)\n else void openDoc(n.path)\n }\n}\n\n/**\n * What an entry links to and what links back (R053), from GET /api/memory/graph?entry=.\n * Links are inferred from text, so the way to change them is to edit the entry.\n */\nexport function EntryRelated({ entryId, onOpenEntry }: { entryId: string; onOpenEntry: (id: string) => void }) {\n const { rootParam, summary, board } = useApp()\n const open = useOpenNode(onOpenEntry)\n const [graph, setGraph] = useState<MemoryGraph | null>(null)\n\n // refetch when the entry changes and on every memory_updated SSE event (AppContext replaces `summary`)\n useEffect(() => {\n let live = true\n fetch(`/api/memory/graph${rootParam}&entry=${encodeURIComponent(entryId)}`)\n .then((r) => r.json())\n .then((g: MemoryGraph) => { if (live) setGraph(g.nodes ? g : { nodes: [], edges: [] }) })\n .catch((e) => {\n console.warn(\"Loading entry links failed\", e)\n if (live) setGraph({ nodes: [], edges: [] })\n })\n return () => { live = false }\n }, [entryId, rootParam, summary])\n\n const tasks = useMemo(() => new Map(Object.values(board ?? {}).flat().map((t) => [t.id, t])), [board])\n const byId = useMemo(() => new Map((graph?.nodes ?? []).map((n) => [n.id, n])), [graph])\n const pick = (ids: string[]) => ids.map((id) => byId.get(id)).filter((n): n is GraphNode => !!n)\n const linksTo = pick((graph?.edges ?? []).filter((e) => e.from === entryId).map((e) => e.to))\n const linkedFrom = pick((graph?.edges ?? []).filter((e) => e.to === entryId).map((e) => e.from))\n\n // tasks from the live board, epics from the node (their roadmap status): one StatusIcon for both, as in Linked docs\n const row = (n: GraphNode & { status?: string }) => {\n const task = n.kind === \"task\" ? tasks.get(n.id) : undefined\n const status = task ? displayStatus(task) : n.kind === \"epic\" ? n.status : undefined\n const Icon = KIND_ICON[n.kind]\n return (\n <li key={n.id}>\n <button\n type=\"button\"\n onClick={() => open(n)}\n title={n.path}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-sm outline-none hover:bg-surface2 focus-visible:ring-2 focus-visible:ring-accent\"\n >\n {status ? <StatusIcon status={status} className=\"size-3.5 shrink-0\" /> : <Icon className=\"size-3.5 shrink-0 text-muted\" aria-hidden />}\n {n.kind !== \"doc\" && <span className=\"shrink-0 font-mono text-[11px] text-muted\">{n.id}</span>}\n <span className=\"min-w-0 truncate text-txt\">{n.label}</span>\n </button>\n </li>\n )\n }\n\n const section = (title: string, nodes: GraphNode[]) => (\n <div className=\"flex flex-col gap-1.5\">\n <h4 className=\"text-[11px] font-semibold uppercase tracking-wider text-muted\">{title}</h4>\n {GROUPS.map(({ kind, label }) => {\n const group = nodes.filter((n) => n.kind === kind)\n if (!group.length) return null\n return (\n <div key={kind}>\n <p className=\"px-2 text-[11px] text-muted\">{label}</p>\n <ul>{group.map(row)}</ul>\n </div>\n )\n })}\n </div>\n )\n\n return (\n <section aria-label=\"Related\" className=\"mt-5 flex flex-col gap-3 border-t border-border pt-4\">\n <h3 className=\"text-xs font-semibold text-txt\">Related</h3>\n {graph === null ? (\n <p className=\"text-xs text-muted\">Loading links…</p>\n ) : !linksTo.length && !linkedFrom.length ? (\n <p className=\"text-xs text-muted\">No links yet. Mention a task, epic or doc in the entry to link it.</p>\n ) : (\n <>\n {linksTo.length > 0 && section(\"Links to\", linksTo)}\n {linkedFrom.length > 0 && section(\"Linked from\", linkedFrom)}\n </>\n )}\n </section>\n )\n}\n","\"use client\"\n\nimport { useEffect, useState, useSyncExternalStore } from \"react\"\nimport { useApp } from \"@/context/AppContext\"\nimport type { LinkRow, TargetRow } from \"@/lib/doc-links\"\n\nexport type DocLinksData = { out: LinkRow[]; in: LinkRow[]; broken: LinkRow[]; stale: LinkRow[]; targets: Record<string, TargetRow> }\n\n/** Events that can change which files exist or what they link to. */\nexport const LINK_EVENTS = new Set([\"doc_updated\", \"doc_created\", \"doc_deleted\", \"doc_renamed\", \"task_created\", \"task_updated\", \"roadmap_updated\", \"memory_updated\", \"decision_logged\"])\n\n// A burst of LINK_EVENTS (an agent moving five tasks) becomes one generation bump, so one refetch per URL\nconst DEBOUNCE_MS = 250\nlet generation = 0\nlet timer: ReturnType<typeof setTimeout> | undefined\nconst subscribers = new Set<() => void>()\nfunction onSse(e: Event) {\n if (!LINK_EVENTS.has((e as CustomEvent<{ type: string }>).detail?.type)) return\n clearTimeout(timer)\n timer = setTimeout(() => {\n generation++\n cache.clear()\n subscribers.forEach((f) => f())\n }, DEBOUNCE_MS)\n}\n// Registered once for the page's life, never removed: the cache must be cleared even while no link view is mounted\n// (a change made while the user is on /board must not be served from a stale promise on the way back).\nif (typeof window !== \"undefined\") window.addEventListener(\"vibedoc:sse\", onSse)\nfunction subscribe(cb: () => void) {\n subscribers.add(cb)\n return () => { subscribers.delete(cb) }\n}\n\n/** Bumps ~250ms after the last file-changing SSE event; use it as an effect dep to refetch link data. */\nexport function useLinkGeneration(): number {\n return useSyncExternalStore(subscribe, () => generation, () => 0)\n}\n\n// One request per URL per generation, shared by every caller (DocViewer + the preview's link handling, strict\n// mode's double effect). A failure is evicted so Retry asks again.\nconst cache = new Map<string, Promise<unknown>>()\nexport function fetchLinkJson<T>(url: string): Promise<T> {\n let p = cache.get(url)\n if (!p) {\n p = fetch(url).then(async (r) => {\n const body = await r.json().catch(() => null)\n if (!r.ok) throw new Error(body?.error ?? `${r.status} ${r.statusText}`)\n return body\n })\n const mine = p\n mine.catch(() => { if (cache.get(url) === mine) cache.delete(url) })\n cache.set(url, mine)\n }\n return p as Promise<T>\n}\n\n/**\n * Resolved links of one .md file (R056), from GET /api/docs/links; null while loading, empty for an unknown file.\n * Refetched on file-changing SSE events. The browser never resolves paths: a clicked link is matched to this data\n * by its raw target string as written in the file (`../b/y.md` without `#h`, `[[DOMAIN_MAP]]` → `DOMAIN_MAP`),\n * looked up in `targets` first, then `broken`.\n */\nexport function useDocLinks(path: string | undefined): DocLinksData | null {\n const { rootParam } = useApp()\n const [data, setData] = useState<{ path: string; links: DocLinksData } | null>(null)\n const gen = useLinkGeneration()\n\n useEffect(() => {\n if (!path) return\n let live = true\n fetchLinkJson<Partial<DocLinksData>>(`/api/docs/links${rootParam}&path=${encodeURIComponent(path)}`)\n .then((d) => {\n if (live) setData({ path, links: { out: d.out ?? [], in: d.in ?? [], broken: d.broken ?? [], stale: d.stale ?? [], targets: d.targets ?? {} } })\n })\n .catch((e) => {\n console.warn(\"Loading doc links failed\", e)\n if (live) setData({ path, links: { out: [], in: [], broken: [], stale: [], targets: {} } })\n })\n return () => { live = false }\n }, [path, rootParam, gen])\n\n // another file's links never show while this one loads\n return path && data?.path === path ? data.links : null\n}\n","import { Bot, User } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { ownerKind, ownerLabel } from \"@/lib/owner\"\n\n/** Who is in charge: a person icon for \"human\", a bot + agent name for \"ai:<agent>\". Nothing when unset. */\nexport function OwnerChip({ owner, className }: { owner: string | null; className?: string }) {\n const kind = ownerKind(owner)\n if (kind === \"none\") return null\n const Icon = kind === \"ai\" ? Bot : User\n return (\n <span title={`Owner: ${ownerLabel(owner)}`} className={cn(\"inline-flex items-center gap-1 text-[11px] text-muted\", className)}>\n <Icon className={cn(\"size-3.5 shrink-0\", kind === \"ai\" && \"text-accent\")} aria-hidden />\n {ownerLabel(owner)}\n </span>\n )\n}\n","// Who is in charge of a task / epic (R055): `**Owner:** human` or `**Owner:** ai:<agent>`.\n// Pure (no React, no fs). Self-check: `node src/lib/owner.check.mts`.\n\nexport type OwnerKind = \"human\" | \"ai\" | \"none\"\n\nconst KNOWN_AGENTS = [\"claude\", \"cursor\", \"codex\", \"copilot\", \"gemini\", \"windsurf\", \"cline\", \"opencode\"]\n\n/** \"human\" | \"ai:<agent>\" (lowercase), or null for empty / \"—\" / anything else. A bare \"ai\" becomes \"ai:agent\". */\nexport function parseOwner(raw: string | null | undefined): string | null {\n const v = (raw ?? \"\").trim().toLowerCase()\n if (v === \"human\") return \"human\"\n const m = v.match(/^ai(?::\\s*([a-z0-9._-]+))?$/)\n return m ? `ai:${m[1] ?? \"agent\"}` : null\n}\n\nexport function ownerKind(owner: string | null): OwnerKind {\n return owner === \"human\" ? \"human\" : owner?.startsWith(\"ai:\") ? \"ai\" : \"none\"\n}\n\n/** \"Human\", \"claude\", \"No owner\". */\nexport function ownerLabel(owner: string | null): string {\n return owner === \"human\" ? \"Human\" : owner?.startsWith(\"ai:\") ? owner.slice(3) : \"No owner\"\n}\n\n/** Agent name from an MCP client's User-Agent (\"claude-code/2.1\" → \"claude\"); \"agent\" when unknown. */\nexport function agentFromUserAgent(ua: string | null | undefined): string {\n const s = (ua ?? \"\").toLowerCase()\n return KNOWN_AGENTS.find((a) => s.includes(a)) ?? \"agent\"\n}\n","// Pure doc link graph (R056, no fs): resolved links between every .md file, derived from text, never stored.\n// Self-check: node src/lib/doc-links.check.mts. Regexes and labels are copied from memory-graph.ts (pure libs\n// never import values from each other), but here relative `./` and `../` targets are resolved.\n\nexport type DocNodeKind = 'doc' | 'adr' | 'task' | 'epic' | 'entry'\n/** `status` / `owner` are set on task and epic nodes by GET /api/docs/graph, never by docNode(). */\nexport type DocNode = { id: string; kind: DocNodeKind; label: string; path: string; status?: string; owner?: string | null }\nexport type LinkKind = 'md' | 'wiki' | 'code' | 'id'\n/** `context`: the sentence around the link (or the heading above it), set only when the link text is just the target. */\nexport type DocLink = { target: string; kind: LinkKind; line: number; text: string; context?: string }\n/** One file as the graph needs it: its node and its raw (unresolved) links. core.ts caches this per file. */\nexport type DocItem = { node: DocNode; links: DocLink[] }\nexport type DocEdge = { from: string; to: string; line: number; text: string; context?: string }\nexport type BrokenLink = { from: string; target: string; line: number; text: string; kind: LinkKind }\n/** Raw link target as written in a file → the file it resolves to (self-links included). Keyed by source path. */\nexport type ResolvedTargets = Record<string, Record<string, string>>\n/** `broken`: md / wiki links that point nowhere. `stale`: backticked paths (`code`) to a file that doesn't exist. */\nexport type DocGraph = { nodes: DocNode[]; edges: DocEdge[]; broken: BrokenLink[]; stale: BrokenLink[]; targets: ResolvedTargets }\n/** `status`: a linked task's or epic's status, set by GET /api/docs/links (as on graph nodes), never by docLinks(). */\nexport type LinkRow = { path: string; kind: string; label: string; line: number; text: string; context?: string; status?: string }\n\n// Upper case only, whole tokens: \"XT0651\", \"e2e\" and \"T0651a\" don't match\nconst ID_RE = /(?<![A-Za-z0-9_-])(E\\d+|T\\d{3,}|R\\d{3,}|ADR-\\d+)(?![A-Za-z0-9_])/g\nconst ID_ONLY_RE = /^(E\\d+|T\\d{3,}|R\\d{3,}|ADR-\\d+)$/\nconst BACKTICK_MD_RE = /`([^`\\s]+\\.md)`/g\nconst LINK_MD_RE = /\\[([^\\]]*)\\]\\(\\s*<?([^)\\s>#]+\\.md)(?:#[^)\\s]*)?>?(?:\\s+\"[^\"]*\"|\\s+'[^']*')?\\s*\\)/g\nconst FENCE_RE = /^\\s*(`{3,}|~{3,})/\nconst INLINE_CODE_RE = /(`+)[^`]*?\\1/g\n\n/** Targets are keyed decoded (`my%20doc.md` → `my doc.md`), as the client looks them up after marked encodes. */\nconst decode = (t: string) => { try { return decodeURI(t) } catch { return t } }\n/** A source line as plain prose: list / heading / checkbox markers, link syntax, code ticks and emphasis removed. */\nconst plainLine = (l: string) => l\n .replace(/^\\s*(?:#{1,6}|>|[-*+]|\\d+\\.)\\s+(?:\\[[ xX]\\]\\s+)?/, '')\n .replace(/\\[\\[([^\\]|#]+)(?:#[^\\]|]*)?(?:\\|([^\\]]+))?\\]\\]/g, (_, a, b) => b ?? a)\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/`|\\*\\*|__/g, '')\n .trim()\n\n/** The sentence of `line` that holds `text`, minus a leading `text:`; the heading above when the line is only the link. */\nfunction linkContext(line: string, text: string, heading: string): string {\n const sentence = plainLine(line).split(/(?<=[.!?])\\s+/).find(s => s.includes(text)) ?? ''\n const rest = (sentence.startsWith(text) ? sentence.slice(text.length).replace(/^[\\s:,;–—-]+/, '') : sentence).trim()\n return (/[A-Za-z]{3}/.test(rest.replace(text, '')) ? rest : heading).slice(0, 200)\n}\n\n/**\n * A target written as a template, never a file: `<slug>`, `{id}`, globs, `…` / `...`, and `T00N` / `NNN` / `XXX` /\n * `YYYY` tokens (`plans/tasks/T<NNN>-<slug>.md`, `docs/meetings/YYYY-MM-DD.md`). Skipped at extraction.\n */\nconst PLACEHOLDER_RE = /[<>{}*?…]|\\.\\.\\.|(?:^|[^A-Za-z0-9])(?:[A-Z]?0+N|N{2,}|X{3,}|YYYY)(?![A-Za-z0-9])/\n/**\n * Names that teach link syntax in specs (`[text](path.md)`, `[[name]]`, `[[wikilinks]]`, `docs/a/x.md`): the whole\n * file name is one of these, or the rest after an item id (`T001-x.md`, `ADR-001-title.md`). Only ever drops a miss,\n * so a real `x.md` still links. Never a `-` part of a longer name: `user-name.md` and `plan-b.md` are real misses.\n * `missing` is deliberately not here: e2e fixtures use it for a real broken link.\n */\nconst EXAMPLE_NAMES = new Set(['a', 'b', 'c', 'x', 'y', 'z', 'path', 'name', 'slug', 'title', 'foo', 'bar', 'wikilinks', 'example'])\nexport function isExampleTarget(target: string): boolean {\n const name = (target.split('/').pop() ?? '').replace(/\\.md$/i, '').replace(/^(?:ADR-\\d+|[TRE]\\d+)-/, '')\n return EXAMPLE_NAMES.has(name.toLowerCase())\n}\n\nconst WIKI_RE = /\\[\\[([^\\]|#]+)(?:#[^\\]|]*)?(?:\\|([^\\]]+))?\\]\\]/g\nconst EXTERNAL_RE = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i\n\nconst pad3 = (n: string) => String(Number(n)).padStart(3, '0')\n\n/** \"E1\" → \"E001\", \"ADR-4\" → \"ADR-004\"; task and roadmap ids are already padded. */\nfunction normalizeId(id: string): string {\n if (id.startsWith('ADR-')) return `ADR-${pad3(id.slice(4))}`\n if (id.startsWith('E')) return `E${pad3(id.slice(1))}`\n return id\n}\n\n/** Posix-normalize: backslashes, `.` and `..` segments, leading `./` or `/`. Escaping above the root → null. */\nfunction normalizePath(p: string): string | null {\n const out: string[] = []\n for (const seg of p.replace(/\\\\/g, '/').split('/')) {\n if (!seg || seg === '.') continue\n if (seg === '..') { if (!out.length) return null; out.pop() } else out.push(seg)\n }\n return out.join('/')\n}\n\nconst dirOf = (p: string) => p.includes('/') ? p.slice(0, p.lastIndexOf('/')) : ''\nconst baseName = (p: string) => (p.split('/').pop() ?? p).replace(/\\.md$/i, '')\n\n/** The item id a file stands for (T093, R056, E001, ADR-004), from its path; null for a plain doc. */\nfunction idOfPath(p: string): string | null {\n const m = /^plans\\/tasks\\/(T\\d{3,})[^/]*\\.md$/.exec(p) ?? /^plans\\/roadmap\\/(R\\d{3,})[^/]*\\.md$/.exec(p)\n ?? /^memory\\/entries\\/(E\\d+)[^/]*\\.md$/.exec(p) ?? /(?:^|\\/)(ADR-\\d+)[^/]*\\.md$/.exec(p)\n return m ? normalizeId(m[1]) : null\n}\n\n/** Inline markdown → plain text for a label: images and links keep their text, emphasis / code marks go. */\nfunction plainText(md: string): string {\n return md\n .replace(/!?\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/\\[\\[([^\\]|]+)(?:\\|([^\\]]+))?\\]\\]/g, (_, t: string, alias?: string) => alias ?? t)\n .replace(/(\\*\\*|\\*|~~|`)(\\S(?:.*?\\S)?)\\1/g, '$2')\n .replace(/(^|\\W)(__|_)(\\S(?:.*?\\S)?)\\2(?=\\W|$)/g, '$1$3') // _em_, never snake_case\n .replace(/<[^>]+>/g, '')\n .trim()\n}\n\n/**\n * Classify a markdown file by path. Label = its H1 without the \"ID: \" prefix, else the file name. An H1 that reads as\n * a sentence (ends in . or !, like AGENTS.md's \"See CLAUDE.md — this file mirrors it…\") is prose, not a title.\n */\nexport function docNode(relPath: string, raw: string): DocNode {\n const p = normalizePath(relPath) ?? relPath\n const name = baseName(p)\n const heading = plainText(/^#\\s+(.+?)\\s*$/m.exec(raw)?.[1] ?? '')\n const h1 = /[^.][.!]$/.test(heading) ? '' : heading\n const label = (id: string) => h1.replace(new RegExp(`^${id}\\\\s*[:—–-]\\\\s*`), '') || name\n let m: RegExpExecArray | null\n if ((m = /^plans\\/tasks\\/(T\\d{3,})[^/]*\\.md$/.exec(p))) return { id: m[1], kind: 'task', label: label(m[1]), path: p }\n if ((m = /^plans\\/roadmap\\/(R\\d{3,})[^/]*\\.md$/.exec(p))) return { id: m[1], kind: 'epic', label: label(m[1]), path: p }\n if ((m = /^memory\\/entries\\/(E\\d+)[^/]*\\.md$/.exec(p))) return { id: normalizeId(m[1]), kind: 'entry', label: label(m[1]), path: p }\n if ((m = /(?:^|\\/)(ADR-\\d+)[^/]*\\.md$/.exec(p))) return { id: normalizeId(m[1]), kind: 'adr', label: label(m[1]), path: p }\n return { id: p, kind: 'doc', label: h1 || name, path: p }\n}\n\n/**\n * Links in `raw`, in order, with 1-based line numbers. Lines inside ``` / ~~~ fences and external URLs are skipped;\n * md and wiki links inside inline code spans too. Indented code blocks are not detected (nested lists look alike).\n */\nexport function extractLinks(raw: string, _fromPath?: string): DocLink[] {\n const links: DocLink[] = []\n let fence = '' // the opening marker while inside a fence\n let heading = ''\n raw.replace(/\\r\\n/g, '\\n').split('\\n').forEach((l, i) => {\n const f = FENCE_RE.exec(l)?.[1]\n if (f && (!fence || (f[0] === fence[0] && f.length >= fence.length))) { fence = fence ? '' : f; return }\n if (fence) return\n const line = i + 1\n const from = links.length\n const prose = l.replace(INLINE_CODE_RE, m => ' '.repeat(m.length))\n for (const m of prose.matchAll(LINK_MD_RE)) {\n // text from the original line (same offsets): [`code`](x.md) keeps its label\n const text = l.slice(m.index + 1, m.index + 1 + m[1].length)\n if (!EXTERNAL_RE.test(m[2]) && !PLACEHOLDER_RE.test(m[2])) links.push({ target: decode(m[2]), kind: 'md', line, text: text || m[2] })\n }\n for (const m of prose.matchAll(WIKI_RE)) {\n const target = decode(m[1].trim())\n if (target && !EXTERNAL_RE.test(target) && !PLACEHOLDER_RE.test(target)) links.push({ target, kind: 'wiki', line, text: (m[2] ?? target).trim() })\n }\n for (const m of l.matchAll(BACKTICK_MD_RE)) {\n // a glob (`memory/entries/E*.md`) or a template (`E001-<slug>.md`) names a pattern, not a file\n if (!EXTERNAL_RE.test(m[1]) && !PLACEHOLDER_RE.test(m[1])) links.push({ target: decode(m[1]), kind: 'code', line, text: m[1] })\n }\n for (const m of l.matchAll(ID_RE)) {\n if (/^E0+$/.test(m[1])) continue // E0 is not an entry id\n links.push({ target: normalizeId(m[1]), kind: 'id', line, text: m[1] })\n }\n // a bare link (text = target) says nothing by itself: carry the sentence it sits in\n for (const k of links.slice(from)) if (k.text === k.target) {\n const context = linkContext(l, k.text, heading)\n if (context) k.context = context\n }\n if (/^#{1,6}\\s/.test(l)) heading = plainLine(l)\n })\n return links\n}\n\ntype PathIndex = { set: Set<string>; byBase: Map<string, string[]>; byId: Map<string, string> }\nconst indexCache = new WeakMap<readonly string[], PathIndex>()\n\nfunction indexOf(allPaths: readonly string[]): PathIndex {\n let idx = indexCache.get(allPaths)\n if (idx) return idx\n idx = { set: new Set(allPaths), byBase: new Map(), byId: new Map() }\n for (const p of allPaths) {\n const b = baseName(p).toLowerCase()\n idx.byBase.set(b, [...(idx.byBase.get(b) ?? []), p])\n const id = idOfPath(p)\n if (id && !idx.byId.has(id)) idx.byId.set(id, p)\n }\n indexCache.set(allPaths, idx)\n return idx\n}\n\n/** Files named exactly `t` (case-insensitive, `.md` added when missing), anywhere in the repo. */\nfunction bareHits(t: string, idx: PathIndex): string[] {\n const file = (/\\.md$/i.test(t) ? t : `${t}.md`).toLowerCase()\n return (idx.byBase.get(baseName(file)) ?? []).filter(p => (p.split('/').pop() ?? '').toLowerCase() === file)\n}\n\n/**\n * The file a link points at, or null (broken). Paths: relative to the source folder, then root-relative.\n * An explicit `./` or `../` never falls back to the root. Wikilinks: by basename without `.md`, same folder first,\n * then the shortest path; [[T093]] / [[E1]] go to the item's file first. Ids: the item's file.\n * `target` is taken as written, already decoded (extractLinks decodes).\n * `kind` is inferred when left out: an id token → id, no `.md` → wiki, else a path.\n * Paths: a leading `@` (Claude include, `@docs/HLD.md`) is dropped. A backticked bare name (`MEMORY.md`) that is in\n * neither folder resolves when exactly one file in the repo has that name; an md link never does.\n */\nexport function resolveLink(target: string, fromPath: string, allPaths: readonly string[], kind?: LinkKind): string | null {\n const idx = indexOf(allPaths)\n const k = kind ?? (ID_ONLY_RE.test(target) ? 'id' : /\\.md$/i.test(target) ? 'md' : 'wiki')\n if (k === 'id') return idx.byId.get(normalizeId(target)) ?? null\n\n if (k === 'wiki' && ID_ONLY_RE.test(target)) {\n const byId = idx.byId.get(normalizeId(target))\n if (byId) return byId\n }\n const t = k === 'wiki' ? target : target.replace(/^@(?=[^/@])/, '')\n const explicitRel = /^\\.\\.?\\//.test(t)\n const from = normalizePath(fromPath) ?? fromPath\n const tryPath = (p: string) => {\n const cands = [p, /\\.md$/i.test(p) ? null : `${p}.md`].filter((c): c is string => !!c)\n for (const c of cands) {\n const rel = t.startsWith('/') ? null : normalizePath(`${dirOf(from)}/${c}`)\n if (rel !== null && idx.set.has(rel)) return rel\n if (explicitRel) continue\n const abs = normalizePath(c)\n if (abs !== null && idx.set.has(abs)) return abs\n }\n return null\n }\n if (k !== 'wiki') {\n // a link must work as written (it does on GitHub too); a backticked mention only has to name the file\n const hits = k !== 'code' || t.includes('/') ? [] : bareHits(t, idx)\n return tryPath(t) ?? (hits.length === 1 ? hits[0] : null)\n }\n\n // wikilink: an exact path first ([[docs/HLD]]), then by basename\n const exact = t.includes('/') ? tryPath(t) : null\n if (exact) return exact\n const name = baseName(t).toLowerCase()\n const suffix = t.includes('/') ? `/${t.replace(/\\.md$/i, '').toLowerCase()}.md` : null\n const hits = (idx.byBase.get(name) ?? []).filter(p => !suffix || `/${p.toLowerCase()}`.endsWith(suffix))\n if (!hits.length) return null\n const dir = dirOf(from)\n return hits.find(p => dirOf(p) === dir)\n ?? [...hits].sort((a, b) => a.split('/').length - b.split('/').length || a.length - b.length || a.localeCompare(b))[0]\n}\n\n/**\n * Resolve every item's links. One edge per from→to pair (first line wins), self-links dropped. Misses: md / wiki\n * links → broken, backticked paths → stale (a mention of a moved or planned file, not a link).\n * Not misses: a target that exists among `otherPaths` (files outside the graph, e.g. `.claude/**`; no node, no edge),\n * a backticked bare name several files share (it exists, just not one file), and a syntax example (`isExampleTarget`).\n */\nexport function buildDocGraph(items: DocItem[], otherPaths: readonly string[] = []): DocGraph {\n const allPaths = items.map(i => i.node.path)\n const known = [...allPaths, ...otherPaths]\n const exists = (l: DocLink, from: string) => resolveLink(l.target, from, known, l.kind) !== null\n || (l.kind === 'code' && !l.target.includes('/') && bareHits(l.target, indexOf(known)).length > 0)\n const edges = new Map<string, DocEdge>()\n const broken = new Map<string, BrokenLink>()\n const stale = new Map<string, BrokenLink>()\n const targets: ResolvedTargets = {}\n for (const { node, links } of items) {\n for (const l of links) {\n const to = resolveLink(l.target, node.path, allPaths, l.kind)\n if (to !== null) (targets[node.path] ??= {})[l.target] ??= to\n if (to === node.path) continue\n if (to === null) {\n // an id with no file (T999, a typo) is just text, not a broken link\n if (l.kind === 'id' || isExampleTarget(l.target) || exists(l, node.path)) continue\n const key = `${node.path}\\u0000${l.target}`\n const misses = l.kind === 'code' ? stale : broken\n if (!misses.has(key)) misses.set(key, { from: node.path, target: l.target, line: l.line, text: l.text, kind: l.kind })\n continue\n }\n const key = `${node.path}\\u0000${to}`\n if (!edges.has(key)) edges.set(key, { from: node.path, to, line: l.line, text: l.text, ...(l.context && { context: l.context }) })\n }\n }\n return { nodes: items.map(i => i.node), edges: [...edges.values()], broken: [...broken.values()], stale: [...stale.values()], targets }\n}\n\n/** The kinds /graph shows when its URL names none. */\nexport const GRAPH_DEFAULT_KINDS: readonly DocNodeKind[] = ['doc', 'adr']\n\n/** /graph selected on one file with Focus 1 (\"Show in graph\"); a task, epic or entry also turns its kind on. */\nexport function graphHref(path: string): string {\n const p = new URLSearchParams({ node: path, focus: '1' })\n const kind = docNode(path, '').kind\n if (!GRAPH_DEFAULT_KINDS.includes(kind)) p.set('kinds', [...GRAPH_DEFAULT_KINDS, kind].join(','))\n return `/graph?${p}`\n}\n\nexport type TargetRow = { path: string; kind: DocNodeKind; id: string; label: string }\n\n/**\n * Links out of, into, broken and stale paths in one file; null when the path is not in the graph.\n * `targets` maps each raw target written in the file (`../b/y.md`, `DOMAIN_MAP`, `T093`) to its node, so a client\n * can open a clicked link without resolving paths itself. A target in both `targets` and `broken` resolved.\n */\nexport function docLinks(graph: DocGraph, path: string): { out: LinkRow[]; in: LinkRow[]; broken: LinkRow[]; stale: LinkRow[]; targets: Record<string, TargetRow> } | null {\n const p = normalizePath(path) ?? path\n const byPath = new Map(graph.nodes.map(n => [n.path, n]))\n if (!byPath.has(p)) return null\n const row = (other: string, e: DocEdge): LinkRow => {\n const n = byPath.get(other)\n return { path: other, kind: n?.kind ?? 'doc', label: n?.label ?? baseName(other), line: e.line, text: e.text, ...(e.context && { context: e.context }) }\n }\n const miss = (b: BrokenLink): LinkRow => ({ path: b.target, kind: b.kind, label: b.target, line: b.line, text: b.text })\n return {\n out: graph.edges.filter(e => e.from === p).map(e => row(e.to, e)),\n in: graph.edges.filter(e => e.to === p).map(e => row(e.from, e)),\n broken: graph.broken.filter(b => b.from === p).map(miss),\n stale: graph.stale.filter(b => b.from === p).map(miss),\n targets: Object.fromEntries(Object.entries(graph.targets[p] ?? {}).map(([t, to]) => {\n const n = byPath.get(to)\n return [t, { path: to, kind: n?.kind ?? 'doc', id: n?.id ?? to, label: n?.label ?? baseName(to) }]\n })),\n }\n}\n\n/**\n * Footer for vibedoc_read_doc (T096): the files a doc links to and is linked from, each named so an agent can\n * pass it straight to a tool (tasks, epics, entries, ADRs by id; docs by path). Empty string when no links.\n */\nexport function formatRelatedFiles(links: { out: LinkRow[]; in: LinkRow[]; broken: LinkRow[]; stale?: LinkRow[] } | null, cap = 10): string {\n if (!links) return ''\n const name = (r: LinkRow) => idOfPath(r.path) ?? r.path\n const line = (label: string, items: string[]) => {\n if (!items.length) return []\n const more = items.length > cap ? ` (+${items.length - cap} more)` : ''\n return [`${label}: ${items.slice(0, cap).join(' · ')}${more}`]\n }\n const body = [\n ...line('Links to', links.out.map(name)),\n ...line('Linked from', links.in.map(r => `${name(r)} (L${r.line})`)),\n ...line('Broken', links.broken.map(r => `${r.path} (L${r.line})`)),\n ...line('Stale paths', (links.stale ?? []).map(r => `${r.path} (L${r.line})`)),\n ]\n if (!body.length) return ''\n return ['## Related files', ...body, 'Read with vibedoc_read_doc, or several at once with vibedoc_get_context { paths }.'].join('\\n')\n}\n\n/** The parts of an activity event (core's ActivityEvent) that say which file it touched. */\nexport type TouchEvent = { timestamp: string; type: string; title: string; detail?: string; taskId?: string }\nconst TOUCH_ID_RE = /^(?:Entry )?(E\\d+|T\\d{3,}|R\\d{3,}|ADR-\\d+)\\b/\nconst DOC_EVENTS = new Set(['doc_updated', 'doc_created'])\n\n/**\n * Paths of the files an agent or a human changed since `since` (ms), from the activity log (T110 \"Recent\"): task\n * moves and edits (taskId), epics / entries / ADRs (the id leading the title), doc edits and creates (detail = path),\n * a rename's new path and the session handoff (memory/MEMORY.md). Events for files that no longer exist drop out.\n */\nexport function touchedPaths(events: readonly TouchEvent[], nodes: readonly DocNode[], since: number): Set<string> {\n const byKey = new Map<string, string>()\n for (const n of nodes) { byKey.set(n.id, n.path); byKey.set(n.path, n.path) }\n const out = new Set<string>()\n for (const e of events) {\n if (!(Date.parse(e.timestamp) >= since)) continue\n const keys = [e.taskId, TOUCH_ID_RE.exec(e.title)?.[1]]\n if (DOC_EVENTS.has(e.type)) keys.push(e.detail)\n if (e.type === 'doc_renamed') keys.push(e.title.split(' → ')[1])\n if (e.type === 'memory_updated' && !e.title.startsWith('Entry ')) keys.push('memory/MEMORY.md')\n for (const k of keys) {\n const p = k ? byKey.get(k.trim()) : undefined\n if (p) out.add(p)\n }\n }\n return out\n}\n"],"names":["GROUPS","kind","label","KIND_ICON","epic","adr","doc","entry","task","useOpenNode","onOpenEntry","router","openDoc","n","push","id","path","EntryRelated","entryId","rootParam","summary","board","open","graph","setGraph","live","fetch","encodeURIComponent","then","r","json","g","nodes","edges","catch","e","console","warn","tasks","Map","Object","values","flat","map","t","byId","pick","ids","get","filter","linksTo","from","to","linkedFrom","row","undefined","status","Icon","type","onClick","title","className","section","group","length","KNOWN_AGENTS","parseOwner","raw","v","trim","toLowerCase","m","match","ownerKind","owner","startsWith","ownerLabel","slice","agentFromUserAgent","ua","s","find","a","includes","ID_RE","ID_ONLY_RE","BACKTICK_MD_RE","LINK_MD_RE","FENCE_RE","INLINE_CODE_RE","decode","decodeURI","plainLine","l","replace","_","b","linkContext","line","text","heading","sentence","split","rest","test","PLACEHOLDER_RE","EXAMPLE_NAMES","Set","isExampleTarget","target","name","pop","has","WIKI_RE","EXTERNAL_RE","pad3","String","Number","padStart","normalizeId","normalizePath","p","out","seg","join","dirOf","lastIndexOf","baseName","idOfPath","exec","plainText","md","alias","docNode","relPath","h1","RegExp","extractLinks","_fromPath","links","fence","forEach","i","f","prose","repeat","matchAll","index","k","context","indexCache","WeakMap","indexOf","allPaths","idx","set","byBase","bareHits","file","resolveLink","fromPath","explicitRel","tryPath","cands","c","rel","abs","hits","exact","suffix","endsWith","dir","sort","localeCompare","buildDocGraph","items","otherPaths","node","known","exists","broken","stale","targets","key","misses","GRAPH_DEFAULT_KINDS","graphHref","URLSearchParams","focus","docLinks","byPath","other","miss","in","fromEntries","entries","formatRelatedFiles","cap","more","body","TOUCH_ID_RE","DOC_EVENTS","touchedPaths","events","since","byKey","Date","parse","timestamp","keys","taskId","detail","add"],"mappings":"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","ignoreList":[0,1,2,3,4,5]}
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/book-open.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/flag.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/lightbulb.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/scale.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/unlink.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/user.ts","../../../../src/components/memory/EntryRelated.tsx","../../../../src/components/docs/useDocLinks.ts","../../../../src/components/shared/OwnerChip.tsx","../../../../src/lib/owner.ts","../../../../src/lib/doc-links.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'book-open',\n size: 24,\n node: [\n ['path', { d: 'M12 5v16', key: '1f6ucr' }],\n [\n 'path',\n {\n d: 'M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z',\n key: '1fyvmf',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name BookOpen\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgNXYxNiIgLz4KICA8cGF0aCBkPSJNMjAuMDAxIDE5QTIgMiAwIDAwMjIgMTdWNWEyIDIgMCAwMC0xLjk5OS0yTDE2IDMuMDAyQTUgNSAwIDAwMTIgNWE1IDUgMCAwMC00LTJINGEyIDIgMCAwMC0yIDJ2MTJhMiAyIDAgMDAxLjk5OSAySDhhNSA1IDAgMDE0IDIgNSA1IDAgMDE0LTJ6IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/book-open\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 BookOpen = createLucideIcon(__iconData);\n\nexport default BookOpen;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'flag',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528',\n key: '1jaruq',\n },\n ],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Flag\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNCAyMlY0YTEgMSAwIDAgMSAuNC0uOEE2IDYgMCAwIDEgOCAyYzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTBhMSAxIDAgMCAxLS40LjhBNiA2IDAgMCAxIDE2IDE2Yy0zIDAtNS0yLTgtMmE2IDYgMCAwIDAtNCAxLjUyOCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/flag\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 Flag = createLucideIcon(__iconData);\n\nexport default Flag;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'lightbulb',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5',\n key: '1gvzjb',\n },\n ],\n ['path', { d: 'M9 18h6', key: 'x1upvd' }],\n ['path', { d: 'M10 22h4', key: 'ceow96' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Lightbulb\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgMTRjLjItMSAuNy0xLjcgMS41LTIuNSAxLS45IDEuNS0yLjIgMS41LTMuNUE2IDYgMCAwIDAgNiA4YzAgMSAuMiAyLjIgMS41IDMuNS43LjcgMS4zIDEuNSAxLjUgMi41IiAvPgogIDxwYXRoIGQ9Ik05IDE4aDYiIC8+CiAgPHBhdGggZD0iTTEwIDIyaDQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/lightbulb\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 Lightbulb = createLucideIcon(__iconData);\n\nexport default Lightbulb;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'scale',\n size: 24,\n node: [\n ['path', { d: 'M12 3v18', key: '108xh3' }],\n ['path', { d: 'm19 8 3 8a5 5 0 0 1-6 0zV7', key: 'zcdpyk' }],\n ['path', { d: 'M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1', key: '1yorad' }],\n ['path', { d: 'm5 8 3 8a5 5 0 0 1-6 0zV7', key: 'eua70x' }],\n ['path', { d: 'M7 21h10', key: '1b0cd5' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Scale\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgM3YxOCIgLz4KICA8cGF0aCBkPSJtMTkgOCAzIDhhNSA1IDAgMCAxLTYgMHpWNyIgLz4KICA8cGF0aCBkPSJNMyA3aDFhMTcgMTcgMCAwIDAgOC0yIDE3IDE3IDAgMCAwIDggMmgxIiAvPgogIDxwYXRoIGQ9Im01IDggMyA4YTUgNSAwIDAgMS02IDB6VjciIC8+CiAgPHBhdGggZD0iTTcgMjFoMTAiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/scale\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 Scale = createLucideIcon(__iconData);\n\nexport default Scale;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'unlink',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'm18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71',\n key: 'yqzxt4',\n },\n ],\n [\n 'path',\n {\n d: 'm5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71',\n key: '4qinb0',\n },\n ],\n ['line', { x1: '8', x2: '8', y1: '2', y2: '5', key: '1041cp' }],\n ['line', { x1: '2', x2: '5', y1: '8', y2: '8', key: '14m1p5' }],\n ['line', { x1: '16', x2: '16', y1: '19', y2: '22', key: 'rzdirn' }],\n ['line', { x1: '19', x2: '22', y1: '16', y2: '16', key: 'ox905f' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Unlink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTguODQgMTIuMjUgMS43Mi0xLjcxaC0uMDJhNS4wMDQgNS4wMDQgMCAwIDAtLjEyLTcuMDcgNS4wMDYgNS4wMDYgMCAwIDAtNi45NSAwbC0xLjcyIDEuNzEiIC8+CiAgPHBhdGggZD0ibTUuMTcgMTEuNzUtMS43MSAxLjcxYTUuMDA0IDUuMDA0IDAgMCAwIC4xMiA3LjA3IDUuMDA2IDUuMDA2IDAgMCAwIDYuOTUgMGwxLjcxLTEuNzEiIC8+CiAgPGxpbmUgeDE9IjgiIHgyPSI4IiB5MT0iMiIgeTI9IjUiIC8+CiAgPGxpbmUgeDE9IjIiIHgyPSI1IiB5MT0iOCIgeTI9IjgiIC8+CiAgPGxpbmUgeDE9IjE2IiB4Mj0iMTYiIHkxPSIxOSIgeTI9IjIyIiAvPgogIDxsaW5lIHgxPSIxOSIgeDI9IjIyIiB5MT0iMTYiIHkyPSIxNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/unlink\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 Unlink = createLucideIcon(__iconData);\n\nexport default Unlink;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'user',\n size: 24,\n node: [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2', key: '975kel' }],\n ['circle', { cx: '12', cy: '7', r: '4', key: '17ys0d' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name User\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTkgMjF2LTJhNCA0IDAgMCAwLTQtNEg5YTQgNCAwIDAgMC00IDR2MiIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjciIHI9IjQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/user\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 User = createLucideIcon(__iconData);\n\nexport default User;\n","\"use client\"\n\nimport { useEffect, useMemo, useState } from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { BookOpen, FileText, Flag, Lightbulb, Scale } from \"lucide-react\"\nimport { useApp } from \"@/context/AppContext\"\nimport { StatusIcon } from \"@/components/shared/StatusIcon\"\nimport { displayStatus } from \"@/lib/statuses\"\nimport type { GraphNode, MemoryGraph, NodeKind } from \"@/lib/memory-graph\"\n\nexport const GROUPS: { kind: NodeKind; label: string }[] = [\n { kind: \"task\", label: \"Tasks\" },\n { kind: \"epic\", label: \"Epics\" },\n { kind: \"adr\", label: \"ADRs\" },\n { kind: \"doc\", label: \"Docs\" },\n { kind: \"entry\", label: \"Entries\" },\n]\nexport const KIND_ICON = { epic: Flag, adr: Scale, doc: FileText, entry: Lightbulb, task: BookOpen } as const\n\n/** Open a graph node where it lives: a task on /board, an epic on /roadmap, a doc or ADR in Docs, an entry here. */\nexport function useOpenNode(onOpenEntry: (id: string) => void) {\n const router = useRouter()\n const { openDoc } = useApp()\n return (n: GraphNode) => {\n if (n.kind === \"task\") router.push(`/board?task=${n.id}`)\n else if (n.kind === \"epic\") router.push(`/roadmap?item=${n.id}`)\n else if (n.kind === \"entry\") onOpenEntry(n.id)\n else void openDoc(n.path)\n }\n}\n\n/**\n * What an entry links to and what links back (R053), from GET /api/memory/graph?entry=.\n * Links are inferred from text, so the way to change them is to edit the entry.\n */\nexport function EntryRelated({ entryId, onOpenEntry }: { entryId: string; onOpenEntry: (id: string) => void }) {\n const { rootParam, summary, board } = useApp()\n const open = useOpenNode(onOpenEntry)\n const [graph, setGraph] = useState<MemoryGraph | null>(null)\n\n // refetch when the entry changes and on every memory_updated SSE event (AppContext replaces `summary`)\n useEffect(() => {\n let live = true\n fetch(`/api/memory/graph${rootParam}&entry=${encodeURIComponent(entryId)}`)\n .then((r) => r.json())\n .then((g: MemoryGraph) => { if (live) setGraph(g.nodes ? g : { nodes: [], edges: [] }) })\n .catch((e) => {\n console.warn(\"Loading entry links failed\", e)\n if (live) setGraph({ nodes: [], edges: [] })\n })\n return () => { live = false }\n }, [entryId, rootParam, summary])\n\n const tasks = useMemo(() => new Map(Object.values(board ?? {}).flat().map((t) => [t.id, t])), [board])\n const byId = useMemo(() => new Map((graph?.nodes ?? []).map((n) => [n.id, n])), [graph])\n const pick = (ids: string[]) => ids.map((id) => byId.get(id)).filter((n): n is GraphNode => !!n)\n const linksTo = pick((graph?.edges ?? []).filter((e) => e.from === entryId).map((e) => e.to))\n const linkedFrom = pick((graph?.edges ?? []).filter((e) => e.to === entryId).map((e) => e.from))\n\n // tasks from the live board, epics from the node (their roadmap status): one StatusIcon for both, as in Linked docs\n const row = (n: GraphNode & { status?: string }) => {\n const task = n.kind === \"task\" ? tasks.get(n.id) : undefined\n const status = task ? displayStatus(task) : n.kind === \"epic\" ? n.status : undefined\n const Icon = KIND_ICON[n.kind]\n return (\n <li key={n.id}>\n <button\n type=\"button\"\n onClick={() => open(n)}\n title={n.path}\n className=\"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-sm outline-none hover:bg-surface2 focus-visible:ring-2 focus-visible:ring-accent\"\n >\n {status ? <StatusIcon status={status} className=\"size-3.5 shrink-0\" /> : <Icon className=\"size-3.5 shrink-0 text-muted\" aria-hidden />}\n {n.kind !== \"doc\" && <span className=\"shrink-0 font-mono text-[11px] text-muted\">{n.id}</span>}\n <span className=\"min-w-0 truncate text-txt\">{n.label}</span>\n </button>\n </li>\n )\n }\n\n const section = (title: string, nodes: GraphNode[]) => (\n <div className=\"flex flex-col gap-1.5\">\n <h4 className=\"text-[11px] font-semibold uppercase tracking-wider text-muted\">{title}</h4>\n {GROUPS.map(({ kind, label }) => {\n const group = nodes.filter((n) => n.kind === kind)\n if (!group.length) return null\n return (\n <div key={kind}>\n <p className=\"px-2 text-[11px] text-muted\">{label}</p>\n <ul>{group.map(row)}</ul>\n </div>\n )\n })}\n </div>\n )\n\n return (\n <section aria-label=\"Related\" className=\"mt-5 flex flex-col gap-3 border-t border-border pt-4\">\n <h3 className=\"text-xs font-semibold text-txt\">Related</h3>\n {graph === null ? (\n <p className=\"text-xs text-muted\">Loading links…</p>\n ) : !linksTo.length && !linkedFrom.length ? (\n <p className=\"text-xs text-muted\">No links yet. Mention a task, epic or doc in the entry to link it.</p>\n ) : (\n <>\n {linksTo.length > 0 && section(\"Links to\", linksTo)}\n {linkedFrom.length > 0 && section(\"Linked from\", linkedFrom)}\n </>\n )}\n </section>\n )\n}\n","\"use client\"\n\nimport { useEffect, useState, useSyncExternalStore } from \"react\"\nimport { useApp } from \"@/context/AppContext\"\nimport type { LinkRow, TargetRow } from \"@/lib/doc-links\"\n\nexport type DocLinksData = { out: LinkRow[]; in: LinkRow[]; broken: LinkRow[]; stale: LinkRow[]; targets: Record<string, TargetRow> }\n\n/** Events that can change which files exist or what they link to. */\nexport const LINK_EVENTS = new Set([\"doc_updated\", \"doc_created\", \"doc_deleted\", \"doc_renamed\", \"task_created\", \"task_updated\", \"roadmap_updated\", \"memory_updated\", \"decision_logged\"])\n\n// A burst of LINK_EVENTS (an agent moving five tasks) becomes one generation bump, so one refetch per URL\nconst DEBOUNCE_MS = 250\nlet generation = 0\nlet timer: ReturnType<typeof setTimeout> | undefined\nconst subscribers = new Set<() => void>()\nfunction onSse(e: Event) {\n if (!LINK_EVENTS.has((e as CustomEvent<{ type: string }>).detail?.type)) return\n clearTimeout(timer)\n timer = setTimeout(() => {\n generation++\n cache.clear()\n subscribers.forEach((f) => f())\n }, DEBOUNCE_MS)\n}\n// Registered once for the page's life, never removed: the cache must be cleared even while no link view is mounted\n// (a change made while the user is on /board must not be served from a stale promise on the way back).\nif (typeof window !== \"undefined\") window.addEventListener(\"vibedoc:sse\", onSse)\nfunction subscribe(cb: () => void) {\n subscribers.add(cb)\n return () => { subscribers.delete(cb) }\n}\n\n/** Bumps ~250ms after the last file-changing SSE event; use it as an effect dep to refetch link data. */\nexport function useLinkGeneration(): number {\n return useSyncExternalStore(subscribe, () => generation, () => 0)\n}\n\n// One request per URL per generation, shared by every caller (DocViewer + the preview's link handling, strict\n// mode's double effect). A failure is evicted so Retry asks again.\nconst cache = new Map<string, Promise<unknown>>()\nexport function fetchLinkJson<T>(url: string): Promise<T> {\n let p = cache.get(url)\n if (!p) {\n p = fetch(url).then(async (r) => {\n const body = await r.json().catch(() => null)\n if (!r.ok) throw new Error(body?.error ?? `${r.status} ${r.statusText}`)\n return body\n })\n const mine = p\n mine.catch(() => { if (cache.get(url) === mine) cache.delete(url) })\n cache.set(url, mine)\n }\n return p as Promise<T>\n}\n\n/**\n * Resolved links of one .md file (R056), from GET /api/docs/links; null while loading, empty for an unknown file.\n * Refetched on file-changing SSE events. The browser never resolves paths: a clicked link is matched to this data\n * by its raw target string as written in the file (`../b/y.md` without `#h`, `[[DOMAIN_MAP]]` → `DOMAIN_MAP`),\n * looked up in `targets` first, then `broken`.\n */\nexport function useDocLinks(path: string | undefined): DocLinksData | null {\n const { rootParam } = useApp()\n const [data, setData] = useState<{ path: string; links: DocLinksData } | null>(null)\n const gen = useLinkGeneration()\n\n useEffect(() => {\n if (!path) return\n let live = true\n fetchLinkJson<Partial<DocLinksData>>(`/api/docs/links${rootParam}&path=${encodeURIComponent(path)}`)\n .then((d) => {\n if (live) setData({ path, links: { out: d.out ?? [], in: d.in ?? [], broken: d.broken ?? [], stale: d.stale ?? [], targets: d.targets ?? {} } })\n })\n .catch((e) => {\n console.warn(\"Loading doc links failed\", e)\n if (live) setData({ path, links: { out: [], in: [], broken: [], stale: [], targets: {} } })\n })\n return () => { live = false }\n }, [path, rootParam, gen])\n\n // another file's links never show while this one loads\n return path && data?.path === path ? data.links : null\n}\n","import { Bot, User } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { ownerKind, ownerLabel } from \"@/lib/owner\"\n\n/** Who is in charge: a person icon for \"human\", a bot + agent name for \"ai:<agent>\". Nothing when unset. */\nexport function OwnerChip({ owner, className }: { owner: string | null; className?: string }) {\n const kind = ownerKind(owner)\n if (kind === \"none\") return null\n const Icon = kind === \"ai\" ? Bot : User\n return (\n <span title={`Owner: ${ownerLabel(owner)}`} className={cn(\"inline-flex items-center gap-1 text-[11px] text-muted\", className)}>\n <Icon className={cn(\"size-3.5 shrink-0\", kind === \"ai\" && \"text-accent\")} aria-hidden />\n {ownerLabel(owner)}\n </span>\n )\n}\n","// Who is in charge of a task / epic (R055): `**Owner:** human` or `**Owner:** ai:<agent>`.\n// Pure (no React, no fs). Self-check: `node src/lib/owner.check.mts`.\n\nexport type OwnerKind = \"human\" | \"ai\" | \"none\"\n\nconst KNOWN_AGENTS = [\"claude\", \"cursor\", \"codex\", \"copilot\", \"gemini\", \"windsurf\", \"cline\", \"opencode\"]\n\n/** \"human\" | \"ai:<agent>\" (lowercase), or null for empty / \"—\" / anything else. A bare \"ai\" becomes \"ai:agent\". */\nexport function parseOwner(raw: string | null | undefined): string | null {\n const v = (raw ?? \"\").trim().toLowerCase()\n if (v === \"human\") return \"human\"\n const m = v.match(/^ai(?::\\s*([a-z0-9._-]+))?$/)\n return m ? `ai:${m[1] ?? \"agent\"}` : null\n}\n\nexport function ownerKind(owner: string | null): OwnerKind {\n return owner === \"human\" ? \"human\" : owner?.startsWith(\"ai:\") ? \"ai\" : \"none\"\n}\n\n/** \"Human\", \"claude\", \"No owner\". */\nexport function ownerLabel(owner: string | null): string {\n return owner === \"human\" ? \"Human\" : owner?.startsWith(\"ai:\") ? owner.slice(3) : \"No owner\"\n}\n\n/** Agent name from an MCP client's User-Agent (\"claude-code/2.1\" → \"claude\"); \"agent\" when unknown. */\nexport function agentFromUserAgent(ua: string | null | undefined): string {\n const s = (ua ?? \"\").toLowerCase()\n return KNOWN_AGENTS.find((a) => s.includes(a)) ?? \"agent\"\n}\n","// Pure doc link graph (R056, no fs): resolved links between every .md file, derived from text, never stored.\n// Self-check: node src/lib/doc-links.check.mts. Regexes and labels are copied from memory-graph.ts (pure libs\n// never import values from each other), but here relative `./` and `../` targets are resolved.\n\nexport type DocNodeKind = 'doc' | 'adr' | 'task' | 'epic' | 'entry'\n/** `status` / `owner` are set on task and epic nodes by GET /api/docs/graph, never by docNode(). */\nexport type DocNode = { id: string; kind: DocNodeKind; label: string; path: string; status?: string; owner?: string | null }\nexport type LinkKind = 'md' | 'wiki' | 'code' | 'id'\n/** `context`: the sentence around the link (or the heading above it), set only when the link text is just the target. */\nexport type DocLink = { target: string; kind: LinkKind; line: number; text: string; context?: string }\n/** One file as the graph needs it: its node and its raw (unresolved) links. core.ts caches this per file. */\nexport type DocItem = { node: DocNode; links: DocLink[] }\nexport type DocEdge = { from: string; to: string; line: number; text: string; context?: string }\nexport type BrokenLink = { from: string; target: string; line: number; text: string; kind: LinkKind }\n/** Raw link target as written in a file → the file it resolves to (self-links included). Keyed by source path. */\nexport type ResolvedTargets = Record<string, Record<string, string>>\n/** `broken`: md / wiki links that point nowhere. `stale`: backticked paths (`code`) to a file that doesn't exist. */\nexport type DocGraph = { nodes: DocNode[]; edges: DocEdge[]; broken: BrokenLink[]; stale: BrokenLink[]; targets: ResolvedTargets }\n/** `status`: a linked task's or epic's status, set by GET /api/docs/links (as on graph nodes), never by docLinks(). */\nexport type LinkRow = { path: string; kind: string; label: string; line: number; text: string; context?: string; status?: string }\n\n// Upper case only, whole tokens: \"XT0651\", \"e2e\" and \"T0651a\" don't match\nconst ID_RE = /(?<![A-Za-z0-9_-])(E\\d+|T\\d{3,}|R\\d{3,}|ADR-\\d+)(?![A-Za-z0-9_])/g\nconst ID_ONLY_RE = /^(E\\d+|T\\d{3,}|R\\d{3,}|ADR-\\d+)$/\nconst BACKTICK_MD_RE = /`([^`\\s]+\\.md)`/g\nconst LINK_MD_RE = /\\[([^\\]]*)\\]\\(\\s*<?([^)\\s>#]+\\.md)(?:#[^)\\s]*)?>?(?:\\s+\"[^\"]*\"|\\s+'[^']*')?\\s*\\)/g\nconst FENCE_RE = /^\\s*(`{3,}|~{3,})/\nconst INLINE_CODE_RE = /(`+)[^`]*?\\1/g\n\n/** Targets are keyed decoded (`my%20doc.md` → `my doc.md`), as the client looks them up after marked encodes. */\nconst decode = (t: string) => { try { return decodeURI(t) } catch { return t } }\n/** A source line as plain prose: list / heading / checkbox markers, link syntax, code ticks and emphasis removed. */\nconst plainLine = (l: string) => l\n .replace(/^\\s*(?:#{1,6}|>|[-*+]|\\d+\\.)\\s+(?:\\[[ xX]\\]\\s+)?/, '')\n .replace(/\\[\\[([^\\]|#]+)(?:#[^\\]|]*)?(?:\\|([^\\]]+))?\\]\\]/g, (_, a, b) => b ?? a)\n .replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/`|\\*\\*|__/g, '')\n .trim()\n\n/** The sentence of `line` that holds `text`, minus a leading `text:`; the heading above when the line is only the link. */\nfunction linkContext(line: string, text: string, heading: string): string {\n const sentence = plainLine(line).split(/(?<=[.!?])\\s+/).find(s => s.includes(text)) ?? ''\n const rest = (sentence.startsWith(text) ? sentence.slice(text.length).replace(/^[\\s:,;–—-]+/, '') : sentence).trim()\n return (/[A-Za-z]{3}/.test(rest.replace(text, '')) ? rest : heading).slice(0, 200)\n}\n\n/**\n * A target written as a template, never a file: `<slug>`, `{id}`, globs, `…` / `...`, and `T00N` / `NNN` / `XXX` /\n * `YYYY` tokens (`plans/tasks/T<NNN>-<slug>.md`, `docs/meetings/YYYY-MM-DD.md`). Skipped at extraction.\n */\nconst PLACEHOLDER_RE = /[<>{}*?…]|\\.\\.\\.|(?:^|[^A-Za-z0-9])(?:[A-Z]?0+N|N{2,}|X{3,}|YYYY)(?![A-Za-z0-9])/\n/**\n * Names that teach link syntax in specs (`[text](path.md)`, `[[name]]`, `[[wikilinks]]`, `docs/a/x.md`): the whole\n * file name is one of these, or the rest after an item id (`T001-x.md`, `ADR-001-title.md`). Only ever drops a miss,\n * so a real `x.md` still links. Never a `-` part of a longer name: `user-name.md` and `plan-b.md` are real misses.\n * `missing` is deliberately not here: e2e fixtures use it for a real broken link.\n */\nconst EXAMPLE_NAMES = new Set(['a', 'b', 'c', 'x', 'y', 'z', 'path', 'name', 'slug', 'title', 'foo', 'bar', 'wikilinks', 'example'])\nexport function isExampleTarget(target: string): boolean {\n const name = (target.split('/').pop() ?? '').replace(/\\.md$/i, '').replace(/^(?:ADR-\\d+|[TRE]\\d+)-/, '')\n return EXAMPLE_NAMES.has(name.toLowerCase())\n}\n\nconst WIKI_RE = /\\[\\[([^\\]|#]+)(?:#[^\\]|]*)?(?:\\|([^\\]]+))?\\]\\]/g\nconst EXTERNAL_RE = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i\n\nconst pad3 = (n: string) => String(Number(n)).padStart(3, '0')\n\n/** \"E1\" → \"E001\", \"ADR-4\" → \"ADR-004\"; task and roadmap ids are already padded. */\nfunction normalizeId(id: string): string {\n if (id.startsWith('ADR-')) return `ADR-${pad3(id.slice(4))}`\n if (id.startsWith('E')) return `E${pad3(id.slice(1))}`\n return id\n}\n\n/** Posix-normalize: backslashes, `.` and `..` segments, leading `./` or `/`. Escaping above the root → null. */\nfunction normalizePath(p: string): string | null {\n const out: string[] = []\n for (const seg of p.replace(/\\\\/g, '/').split('/')) {\n if (!seg || seg === '.') continue\n if (seg === '..') { if (!out.length) return null; out.pop() } else out.push(seg)\n }\n return out.join('/')\n}\n\nconst dirOf = (p: string) => p.includes('/') ? p.slice(0, p.lastIndexOf('/')) : ''\nconst baseName = (p: string) => (p.split('/').pop() ?? p).replace(/\\.md$/i, '')\n\n/** The item id a file stands for (T093, R056, E001, ADR-004), from its path; null for a plain doc. */\nfunction idOfPath(p: string): string | null {\n const m = /^plans\\/tasks\\/(T\\d{3,})[^/]*\\.md$/.exec(p) ?? /^plans\\/roadmap\\/(R\\d{3,})[^/]*\\.md$/.exec(p)\n ?? /^memory\\/entries\\/(E\\d+)[^/]*\\.md$/.exec(p) ?? /(?:^|\\/)(ADR-\\d+)[^/]*\\.md$/.exec(p)\n return m ? normalizeId(m[1]) : null\n}\n\n/** Inline markdown → plain text for a label: images and links keep their text, emphasis / code marks go. */\nfunction plainText(md: string): string {\n return md\n .replace(/!?\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/\\[\\[([^\\]|]+)(?:\\|([^\\]]+))?\\]\\]/g, (_, t: string, alias?: string) => alias ?? t)\n .replace(/(\\*\\*|\\*|~~|`)(\\S(?:.*?\\S)?)\\1/g, '$2')\n .replace(/(^|\\W)(__|_)(\\S(?:.*?\\S)?)\\2(?=\\W|$)/g, '$1$3') // _em_, never snake_case\n .replace(/<[^>]+>/g, '')\n .trim()\n}\n\n/**\n * Classify a markdown file by path. Label = its H1 without the \"ID: \" prefix, else the file name. An H1 that reads as\n * a sentence (ends in . or !, like AGENTS.md's \"See CLAUDE.md — this file mirrors it…\") is prose, not a title.\n */\nexport function docNode(relPath: string, raw: string): DocNode {\n const p = normalizePath(relPath) ?? relPath\n const name = baseName(p)\n const heading = plainText(/^#\\s+(.+?)\\s*$/m.exec(raw)?.[1] ?? '')\n const h1 = /[^.][.!]$/.test(heading) ? '' : heading\n const label = (id: string) => h1.replace(new RegExp(`^${id}\\\\s*[:—–-]\\\\s*`), '') || name\n let m: RegExpExecArray | null\n if ((m = /^plans\\/tasks\\/(T\\d{3,})[^/]*\\.md$/.exec(p))) return { id: m[1], kind: 'task', label: label(m[1]), path: p }\n if ((m = /^plans\\/roadmap\\/(R\\d{3,})[^/]*\\.md$/.exec(p))) return { id: m[1], kind: 'epic', label: label(m[1]), path: p }\n if ((m = /^memory\\/entries\\/(E\\d+)[^/]*\\.md$/.exec(p))) return { id: normalizeId(m[1]), kind: 'entry', label: label(m[1]), path: p }\n if ((m = /(?:^|\\/)(ADR-\\d+)[^/]*\\.md$/.exec(p))) return { id: normalizeId(m[1]), kind: 'adr', label: label(m[1]), path: p }\n return { id: p, kind: 'doc', label: h1 || name, path: p }\n}\n\n/**\n * Links in `raw`, in order, with 1-based line numbers. Lines inside ``` / ~~~ fences and external URLs are skipped;\n * md and wiki links inside inline code spans too. Indented code blocks are not detected (nested lists look alike).\n */\nexport function extractLinks(raw: string, _fromPath?: string): DocLink[] {\n const links: DocLink[] = []\n let fence = '' // the opening marker while inside a fence\n let heading = ''\n raw.replace(/\\r\\n/g, '\\n').split('\\n').forEach((l, i) => {\n const f = FENCE_RE.exec(l)?.[1]\n if (f && (!fence || (f[0] === fence[0] && f.length >= fence.length))) { fence = fence ? '' : f; return }\n if (fence) return\n const line = i + 1\n const from = links.length\n const prose = l.replace(INLINE_CODE_RE, m => ' '.repeat(m.length))\n for (const m of prose.matchAll(LINK_MD_RE)) {\n // text from the original line (same offsets): [`code`](x.md) keeps its label\n const text = l.slice(m.index + 1, m.index + 1 + m[1].length)\n if (!EXTERNAL_RE.test(m[2]) && !PLACEHOLDER_RE.test(m[2])) links.push({ target: decode(m[2]), kind: 'md', line, text: text || m[2] })\n }\n for (const m of prose.matchAll(WIKI_RE)) {\n const target = decode(m[1].trim())\n if (target && !EXTERNAL_RE.test(target) && !PLACEHOLDER_RE.test(target)) links.push({ target, kind: 'wiki', line, text: (m[2] ?? target).trim() })\n }\n for (const m of l.matchAll(BACKTICK_MD_RE)) {\n // a glob (`memory/entries/E*.md`) or a template (`E001-<slug>.md`) names a pattern, not a file\n if (!EXTERNAL_RE.test(m[1]) && !PLACEHOLDER_RE.test(m[1])) links.push({ target: decode(m[1]), kind: 'code', line, text: m[1] })\n }\n for (const m of l.matchAll(ID_RE)) {\n if (/^E0+$/.test(m[1])) continue // E0 is not an entry id\n links.push({ target: normalizeId(m[1]), kind: 'id', line, text: m[1] })\n }\n // a bare link (text = target) says nothing by itself: carry the sentence it sits in\n for (const k of links.slice(from)) if (k.text === k.target) {\n const context = linkContext(l, k.text, heading)\n if (context) k.context = context\n }\n if (/^#{1,6}\\s/.test(l)) heading = plainLine(l)\n })\n return links\n}\n\ntype PathIndex = { set: Set<string>; byBase: Map<string, string[]>; byId: Map<string, string> }\nconst indexCache = new WeakMap<readonly string[], PathIndex>()\n\nfunction indexOf(allPaths: readonly string[]): PathIndex {\n let idx = indexCache.get(allPaths)\n if (idx) return idx\n idx = { set: new Set(allPaths), byBase: new Map(), byId: new Map() }\n for (const p of allPaths) {\n const b = baseName(p).toLowerCase()\n idx.byBase.set(b, [...(idx.byBase.get(b) ?? []), p])\n const id = idOfPath(p)\n if (id && !idx.byId.has(id)) idx.byId.set(id, p)\n }\n indexCache.set(allPaths, idx)\n return idx\n}\n\n/** Files named exactly `t` (case-insensitive, `.md` added when missing), anywhere in the repo. */\nfunction bareHits(t: string, idx: PathIndex): string[] {\n const file = (/\\.md$/i.test(t) ? t : `${t}.md`).toLowerCase()\n return (idx.byBase.get(baseName(file)) ?? []).filter(p => (p.split('/').pop() ?? '').toLowerCase() === file)\n}\n\n/**\n * The file a link points at, or null (broken). Paths: relative to the source folder, then root-relative.\n * An explicit `./` or `../` never falls back to the root. Wikilinks: by basename without `.md`, same folder first,\n * then the shortest path; [[T093]] / [[E1]] go to the item's file first. Ids: the item's file.\n * `target` is taken as written, already decoded (extractLinks decodes).\n * `kind` is inferred when left out: an id token → id, no `.md` → wiki, else a path.\n * Paths: a leading `@` (Claude include, `@docs/HLD.md`) is dropped. A backticked bare name (`MEMORY.md`) that is in\n * neither folder resolves when exactly one file in the repo has that name; an md link never does.\n */\nexport function resolveLink(target: string, fromPath: string, allPaths: readonly string[], kind?: LinkKind): string | null {\n const idx = indexOf(allPaths)\n const k = kind ?? (ID_ONLY_RE.test(target) ? 'id' : /\\.md$/i.test(target) ? 'md' : 'wiki')\n if (k === 'id') return idx.byId.get(normalizeId(target)) ?? null\n\n if (k === 'wiki' && ID_ONLY_RE.test(target)) {\n const byId = idx.byId.get(normalizeId(target))\n if (byId) return byId\n }\n const t = k === 'wiki' ? target : target.replace(/^@(?=[^/@])/, '')\n const explicitRel = /^\\.\\.?\\//.test(t)\n const from = normalizePath(fromPath) ?? fromPath\n const tryPath = (p: string) => {\n const cands = [p, /\\.md$/i.test(p) ? null : `${p}.md`].filter((c): c is string => !!c)\n for (const c of cands) {\n const rel = t.startsWith('/') ? null : normalizePath(`${dirOf(from)}/${c}`)\n if (rel !== null && idx.set.has(rel)) return rel\n if (explicitRel) continue\n const abs = normalizePath(c)\n if (abs !== null && idx.set.has(abs)) return abs\n }\n return null\n }\n if (k !== 'wiki') {\n // a link must work as written (it does on GitHub too); a backticked mention only has to name the file\n const hits = k !== 'code' || t.includes('/') ? [] : bareHits(t, idx)\n return tryPath(t) ?? (hits.length === 1 ? hits[0] : null)\n }\n\n // wikilink: an exact path first ([[docs/HLD]]), then by basename\n const exact = t.includes('/') ? tryPath(t) : null\n if (exact) return exact\n const name = baseName(t).toLowerCase()\n const suffix = t.includes('/') ? `/${t.replace(/\\.md$/i, '').toLowerCase()}.md` : null\n const hits = (idx.byBase.get(name) ?? []).filter(p => !suffix || `/${p.toLowerCase()}`.endsWith(suffix))\n if (!hits.length) return null\n const dir = dirOf(from)\n return hits.find(p => dirOf(p) === dir)\n ?? [...hits].sort((a, b) => a.split('/').length - b.split('/').length || a.length - b.length || a.localeCompare(b))[0]\n}\n\n/**\n * Resolve every item's links. One edge per from→to pair (first line wins), self-links dropped. Misses: md / wiki\n * links → broken, backticked paths → stale (a mention of a moved or planned file, not a link).\n * Not misses: a target that exists among `otherPaths` (files outside the graph, e.g. `.claude/**`; no node, no edge),\n * a backticked bare name several files share (it exists, just not one file), and a syntax example (`isExampleTarget`).\n */\nexport function buildDocGraph(items: DocItem[], otherPaths: readonly string[] = []): DocGraph {\n const allPaths = items.map(i => i.node.path)\n const known = [...allPaths, ...otherPaths]\n const exists = (l: DocLink, from: string) => resolveLink(l.target, from, known, l.kind) !== null\n || (l.kind === 'code' && !l.target.includes('/') && bareHits(l.target, indexOf(known)).length > 0)\n const edges = new Map<string, DocEdge>()\n const broken = new Map<string, BrokenLink>()\n const stale = new Map<string, BrokenLink>()\n const targets: ResolvedTargets = {}\n for (const { node, links } of items) {\n for (const l of links) {\n const to = resolveLink(l.target, node.path, allPaths, l.kind)\n if (to !== null) (targets[node.path] ??= {})[l.target] ??= to\n if (to === node.path) continue\n if (to === null) {\n // an id with no file (T999, a typo) is just text, not a broken link\n if (l.kind === 'id' || isExampleTarget(l.target) || exists(l, node.path)) continue\n const key = `${node.path}\\u0000${l.target}`\n const misses = l.kind === 'code' ? stale : broken\n if (!misses.has(key)) misses.set(key, { from: node.path, target: l.target, line: l.line, text: l.text, kind: l.kind })\n continue\n }\n const key = `${node.path}\\u0000${to}`\n if (!edges.has(key)) edges.set(key, { from: node.path, to, line: l.line, text: l.text, ...(l.context && { context: l.context }) })\n }\n }\n return { nodes: items.map(i => i.node), edges: [...edges.values()], broken: [...broken.values()], stale: [...stale.values()], targets }\n}\n\n/** The kinds /graph shows when its URL names none. */\nexport const GRAPH_DEFAULT_KINDS: readonly DocNodeKind[] = ['doc', 'adr']\n\n/** /graph selected on one file with Focus 1 (\"Show in graph\"); a task, epic or entry also turns its kind on. */\nexport function graphHref(path: string): string {\n const p = new URLSearchParams({ node: path, focus: '1' })\n const kind = docNode(path, '').kind\n if (!GRAPH_DEFAULT_KINDS.includes(kind)) p.set('kinds', [...GRAPH_DEFAULT_KINDS, kind].join(','))\n return `/graph?${p}`\n}\n\nexport type TargetRow = { path: string; kind: DocNodeKind; id: string; label: string }\n\n/**\n * Links out of, into, broken and stale paths in one file; null when the path is not in the graph.\n * `targets` maps each raw target written in the file (`../b/y.md`, `DOMAIN_MAP`, `T093`) to its node, so a client\n * can open a clicked link without resolving paths itself. A target in both `targets` and `broken` resolved.\n */\nexport function docLinks(graph: DocGraph, path: string): { out: LinkRow[]; in: LinkRow[]; broken: LinkRow[]; stale: LinkRow[]; targets: Record<string, TargetRow> } | null {\n const p = normalizePath(path) ?? path\n const byPath = new Map(graph.nodes.map(n => [n.path, n]))\n if (!byPath.has(p)) return null\n const row = (other: string, e: DocEdge): LinkRow => {\n const n = byPath.get(other)\n return { path: other, kind: n?.kind ?? 'doc', label: n?.label ?? baseName(other), line: e.line, text: e.text, ...(e.context && { context: e.context }) }\n }\n const miss = (b: BrokenLink): LinkRow => ({ path: b.target, kind: b.kind, label: b.target, line: b.line, text: b.text })\n return {\n out: graph.edges.filter(e => e.from === p).map(e => row(e.to, e)),\n in: graph.edges.filter(e => e.to === p).map(e => row(e.from, e)),\n broken: graph.broken.filter(b => b.from === p).map(miss),\n stale: graph.stale.filter(b => b.from === p).map(miss),\n targets: Object.fromEntries(Object.entries(graph.targets[p] ?? {}).map(([t, to]) => {\n const n = byPath.get(to)\n return [t, { path: to, kind: n?.kind ?? 'doc', id: n?.id ?? to, label: n?.label ?? baseName(to) }]\n })),\n }\n}\n\n/**\n * Footer for vibedoc_read_doc (T096): the files a doc links to and is linked from, each named so an agent can\n * pass it straight to a tool (tasks, epics, entries, ADRs by id; docs by path). Empty string when no links.\n */\nexport function formatRelatedFiles(links: { out: LinkRow[]; in: LinkRow[]; broken: LinkRow[]; stale?: LinkRow[] } | null, cap = 10): string {\n if (!links) return ''\n const name = (r: LinkRow) => idOfPath(r.path) ?? r.path\n const line = (label: string, items: string[]) => {\n if (!items.length) return []\n const more = items.length > cap ? ` (+${items.length - cap} more)` : ''\n return [`${label}: ${items.slice(0, cap).join(' · ')}${more}`]\n }\n const body = [\n ...line('Links to', links.out.map(name)),\n ...line('Linked from', links.in.map(r => `${name(r)} (L${r.line})`)),\n ...line('Broken', links.broken.map(r => `${r.path} (L${r.line})`)),\n ...line('Stale paths', (links.stale ?? []).map(r => `${r.path} (L${r.line})`)),\n ]\n if (!body.length) return ''\n return ['## Related files', ...body, 'Read with vibedoc_read_doc, or several at once with vibedoc_get_context { paths }.'].join('\\n')\n}\n\n/** The parts of an activity event (core's ActivityEvent) that say which file it touched. */\nexport type TouchEvent = { timestamp: string; type: string; title: string; detail?: string; taskId?: string }\nconst TOUCH_ID_RE = /^(?:Entry )?(E\\d+|T\\d{3,}|R\\d{3,}|ADR-\\d+)\\b/\nconst DOC_EVENTS = new Set(['doc_updated', 'doc_created'])\n\n/**\n * Paths of the files an agent or a human changed since `since` (ms), from the activity log (T110 \"Recent\"): task\n * moves and edits (taskId), epics / entries / ADRs (the id leading the title), doc edits and creates (detail = path),\n * a rename's new path and the session handoff (memory/MEMORY.md). Events for files that no longer exist drop out.\n */\nexport function touchedPaths(events: readonly TouchEvent[], nodes: readonly DocNode[], since: number): Set<string> {\n const byKey = new Map<string, string>()\n for (const n of nodes) { byKey.set(n.id, n.path); byKey.set(n.path, n.path) }\n const out = new Set<string>()\n for (const e of events) {\n if (!(Date.parse(e.timestamp) >= since)) continue\n const keys = [e.taskId, TOUCH_ID_RE.exec(e.title)?.[1]]\n if (DOC_EVENTS.has(e.type)) keys.push(e.detail)\n if (e.type === 'doc_renamed') keys.push(e.title.split(' → ')[1])\n if (e.type === 'memory_updated' && !e.title.startsWith('Entry ')) keys.push('memory/MEMORY.md')\n for (const k of keys) {\n const p = k ? byKey.get(k.trim()) : undefined\n if (p) out.add(p)\n }\n }\n return out\n}\n"],"names":["GROUPS","kind","label","KIND_ICON","epic","adr","doc","entry","task","useOpenNode","onOpenEntry","router","openDoc","n","push","id","path","EntryRelated","entryId","rootParam","summary","board","open","graph","setGraph","live","fetch","encodeURIComponent","then","r","json","g","nodes","edges","catch","e","console","warn","tasks","Map","Object","values","flat","map","t","byId","pick","ids","get","filter","linksTo","from","to","linkedFrom","row","undefined","status","Icon","type","onClick","title","className","section","group","length","KNOWN_AGENTS","parseOwner","raw","v","trim","toLowerCase","m","match","ownerKind","owner","startsWith","ownerLabel","slice","agentFromUserAgent","ua","s","find","a","includes","ID_RE","ID_ONLY_RE","BACKTICK_MD_RE","LINK_MD_RE","FENCE_RE","INLINE_CODE_RE","decode","decodeURI","plainLine","l","replace","_","b","linkContext","line","text","heading","sentence","split","rest","test","PLACEHOLDER_RE","EXAMPLE_NAMES","Set","isExampleTarget","target","name","pop","has","WIKI_RE","EXTERNAL_RE","pad3","String","Number","padStart","normalizeId","normalizePath","p","out","seg","join","dirOf","lastIndexOf","baseName","idOfPath","exec","plainText","md","alias","docNode","relPath","h1","RegExp","extractLinks","_fromPath","links","fence","forEach","i","f","prose","repeat","matchAll","index","k","context","indexCache","WeakMap","indexOf","allPaths","idx","set","byBase","bareHits","file","resolveLink","fromPath","explicitRel","tryPath","cands","c","rel","abs","hits","exact","suffix","endsWith","dir","sort","localeCompare","buildDocGraph","items","otherPaths","node","known","exists","broken","stale","targets","key","misses","GRAPH_DEFAULT_KINDS","graphHref","URLSearchParams","focus","docLinks","byPath","other","miss","in","fromEntries","entries","formatRelatedFiles","cap","more","body","TOUCH_ID_RE","DOC_EVENTS","touchedPaths","events","since","byKey","Date","parse","timestamp","keys","taskId","detail","add"],"mappings":"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","ignoreList":[0,1,2,3,4,5]}
@@ -0,0 +1,3 @@
1
+ module.exports=[923053,a=>{"use strict";var b=a.i(174897),c=a.i(196265),d=a.i(521831),e=a.i(691321),f=a.i(635163),g=a.i(541151),h=a.i(555595),i=a.i(289923),j=a.i(585851),k=a.i(818920),l=a.i(436102),m=a.i(592182),n=a.i(967683),o=a.i(310859),p=a.i(516164),q=a.i(776692),r=a.i(662145),s=Object.defineProperty,t=(a,b)=>s(a,"name",{value:b,configurable:!0}),u="Dialog",[v,w]=(0,e.createContextScope)(u),[x,y]=v(u),z=t(a=>{let{__scopeDialog:c,children:d,open:e,defaultOpen:h,onOpenChange:i,modal:j=!0}=a,k=b.useRef(null),l=b.useRef(null),[m,n]=(0,g.useControllableState)({prop:e,defaultProp:h??!1,onChange:i,caller:u}),[o,p]=b.useState(0),[q,s]=b.useState(0);return(0,r.jsx)(x,{scope:c,triggerRef:k,contentRef:l,contentId:(0,f.useId)(),titleId:(0,f.useId)(),descriptionId:(0,f.useId)(),titlePresent:o>0,descriptionPresent:q>0,setTitleCount:p,setDescriptionCount:s,open:m,onOpenChange:n,onOpenToggle:b.useCallback(()=>n(a=>!a),[n]),modal:j,children:d})},"Dialog"),A=b.forwardRef(t(function(a,b){let{__scopeDialog:e,...f}=a,g=y("DialogTrigger",e),h=(0,d.useComposedRefs)(b,g.triggerRef);return(0,r.jsx)(l.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":g.open,"aria-controls":g.open?g.contentId:void 0,"data-state":R(g.open),...f,ref:h,onClick:(0,c.composeEventHandlers)(a.onClick,g.onOpenToggle)})},"DialogTrigger")),B="DialogPortal",[C,D]=v(B,{forceMount:void 0}),E=t(a=>{let{__scopeDialog:c,forceMount:d,children:e,container:f}=a,g=y(B,c);return(0,r.jsx)(C,{scope:c,forceMount:d,children:b.Children.map(e,a=>(0,r.jsx)(k.Presence,{present:d||g.open,children:(0,r.jsx)(j.Portal,{asChild:!0,container:f,children:a})}))})},"DialogPortal"),F="DialogOverlay",G=b.forwardRef(t(function(a,b){let c=D(F,a.__scopeDialog),{forceMount:d=c.forceMount,...e}=a,f=y(F,a.__scopeDialog);return f.modal?(0,r.jsx)(k.Presence,{present:d||f.open,children:(0,r.jsx)(I,{...e,ref:b})}):null},"DialogOverlay")),H=(0,q.createSlot)("DialogOverlay.RemoveScroll"),I=b.forwardRef(t(function(a,b){let{__scopeDialog:c,...e}=a,f=y(F,c),g=(0,h.useDismissableLayerSurface)(),i=(0,d.useComposedRefs)(b,g);return(0,r.jsx)(o.RemoveScroll,{as:H,allowPinchZoom:!0,shards:[f.contentRef],children:(0,r.jsx)(l.Primitive.div,{"data-state":R(f.open),...e,ref:i,style:{pointerEvents:"auto",...e.style}})})},"DialogOverlayImpl")),J="DialogContent",K=b.forwardRef(t(function(a,b){let c=D(J,a.__scopeDialog),{forceMount:d=c.forceMount,...e}=a,f=y(J,a.__scopeDialog);return(0,r.jsx)(k.Presence,{present:d||f.open,children:f.modal?(0,r.jsx)(L,{...e,ref:b}):(0,r.jsx)(M,{...e,ref:b})})},"DialogContent")),L=b.forwardRef(t(function(a,e){let f=y(J,a.__scopeDialog),g=b.useRef(null),h=(0,d.useComposedRefs)(e,f.contentRef,g);return b.useEffect(()=>{let a=g.current;if(a)return(0,p.hideOthers)(a)},[]),(0,r.jsx)(N,{...a,ref:h,trapFocus:f.open,disableOutsidePointerEvents:f.open,onCloseAutoFocus:(0,c.composeEventHandlers)(a.onCloseAutoFocus,a=>{a.preventDefault(),f.triggerRef.current?.focus()}),onPointerDownOutside:(0,c.composeEventHandlers)(a.onPointerDownOutside,a=>{let b=a.detail.originalEvent,c=0===b.button&&!0===b.ctrlKey;(2===b.button||c)&&a.preventDefault()}),onFocusOutside:(0,c.composeEventHandlers)(a.onFocusOutside,a=>a.preventDefault())})},"DialogContentModal")),M=b.forwardRef(t(function(a,c){let d=y(J,a.__scopeDialog),e=b.useRef(!1),f=b.useRef(!1);return(0,r.jsx)(N,{...a,ref:c,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:b=>{a.onCloseAutoFocus?.(b),b.defaultPrevented||(e.current||d.triggerRef.current?.focus(),b.preventDefault()),e.current=!1,f.current=!1},onInteractOutside:b=>{a.onInteractOutside?.(b),b.defaultPrevented||(e.current=!0,"pointerdown"===b.detail.originalEvent.type&&(f.current=!0));let c=b.target;d.triggerRef.current?.contains(c)&&b.preventDefault(),"focusin"===b.detail.originalEvent.type&&f.current&&b.preventDefault()}})},"DialogContentNonModal")),N=b.forwardRef(t(function(a,b){let{__scopeDialog:c,trapFocus:d,onOpenAutoFocus:e,onCloseAutoFocus:f,...g}=a,j=y(J,c);return(0,m.useFocusGuards)(),(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(i.FocusScope,{asChild:!0,loop:!0,trapped:d,onMountAutoFocus:e,onUnmountAutoFocus:f,children:(0,r.jsx)(h.DismissableLayer,{role:"dialog",id:j.contentId,"aria-describedby":j.descriptionPresent?j.descriptionId:void 0,"aria-labelledby":j.titlePresent?j.titleId:void 0,"data-state":R(j.open),...g,ref:b,deferPointerDownOutside:!0,onDismiss:()=>j.onOpenChange(!1)})})})},"DialogContentImpl")),O=b.forwardRef(t(function(a,b){let{__scopeDialog:c,...d}=a,e=y("DialogTitle",c),{setTitleCount:f}=e;return(0,n.useLayoutEffect)(()=>(f(a=>a+1),()=>f(a=>a-1)),[f]),(0,r.jsx)(l.Primitive.h2,{id:e.titleId,...d,ref:b})},"DialogTitle")),P=b.forwardRef(t(function(a,b){let{__scopeDialog:c,...d}=a,e=y("DialogDescription",c),{setDescriptionCount:f}=e;return(0,n.useLayoutEffect)(()=>(f(a=>a+1),()=>f(a=>a-1)),[f]),(0,r.jsx)(l.Primitive.p,{id:e.descriptionId,...d,ref:b})},"DialogDescription")),Q=b.forwardRef(t(function(a,b){let{__scopeDialog:d,...e}=a,f=y("DialogClose",d);return(0,r.jsx)(l.Primitive.button,{type:"button",...e,ref:b,onClick:(0,c.composeEventHandlers)(a.onClick,()=>f.onOpenChange(!1))})},"DialogClose"));function R(a){return a?"open":"closed"}t(R,"getState"),a.s(["Close",0,Q,"Content",0,K,"Description",0,P,"Overlay",0,G,"Portal",0,E,"Root",0,z,"Title",0,O,"Trigger",0,A])},842717,a=>{"use strict";var b=a.i(256857);let c={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"}]]};c.node;let d=(0,b.default)(c);a.s(["Brain",0,d],842717)},228705,a=>{"use strict";var b=a.i(256857);let c={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"}]]};c.node;let d=(0,b.default)(c);a.s(["FilePlus",0,d],228705)},909898,a=>{"use strict";var b=a.i(256857);let c={name:"plug",size:24,node:[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]]};c.node;let d=(0,b.default)(c);a.s(["Plug",0,d],909898)},200382,a=>{"use strict";var b=a.i(256857);let c={name:"plus",size:24,node:[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]};c.node;let d=(0,b.default)(c);a.s(["Plus",0,d],200382)},72551,a=>{"use strict";var b=a.i(256857);let c={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};c.node;let d=(0,b.default)(c);a.s(["Search",0,d],72551)},28386,a=>{"use strict";var b=a.i(256857);let c={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};c.node;let d=(0,b.default)(c);a.s(["Trash2",0,d],28386)},699570,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(776692),e=a.i(142261),f=a.i(368114);let g=(0,e.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-bg transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-accent text-accent-fg hover:bg-accent/90",destructive:"bg-danger text-destructive-foreground hover:bg-danger/90",outline:"border border-border bg-bg hover:bg-surface2 hover:text-txt",secondary:"bg-surface2 text-txt hover:bg-surface2/80",ghost:"hover:bg-surface2 hover:text-txt",link:"text-txt underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),h=c.forwardRef(({className:a,variant:c,size:e,asChild:h=!1,...i},j)=>{let k=h?d.Slot:"button";return(0,b.jsx)(k,{className:(0,f.cn)(g({variant:c,size:e,className:a})),ref:j,...i})});h.displayName="Button",a.s(["Button",0,h])},814574,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(923053),e=a.i(54165),f=a.i(368114);let g=d.Root;d.Trigger;let h=d.Portal;d.Close;let i=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)(d.Overlay,{ref:e,className:(0,f.cn)("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",a),...c}));i.displayName=d.Overlay.displayName;let j=c.forwardRef(({className:a,children:c,...g},j)=>(0,b.jsxs)(h,{children:[(0,b.jsx)(i,{}),(0,b.jsxs)(d.Content,{ref:j,className:(0,f.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-surface p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",a),...g,children:[c,(0,b.jsxs)(d.Close,{className:"absolute right-4 top-4 rounded-xs opacity-70 ring-offset-bg transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-accent focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-surface2 data-[state=open]:text-muted",children:[(0,b.jsx)(e.X,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"sr-only",children:"Close"})]})]})]}));j.displayName=d.Content.displayName;let k=({className:a,...c})=>(0,b.jsx)("div",{className:(0,f.cn)("flex flex-col space-y-1.5 text-center sm:text-left",a),...c});k.displayName="DialogHeader";let l=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)(d.Title,{ref:e,className:(0,f.cn)("text-lg font-semibold leading-none tracking-tight",a),...c}));l.displayName=d.Title.displayName;let m=c.forwardRef(({className:a,...c},e)=>(0,b.jsx)(d.Description,{ref:e,className:(0,f.cn)("text-sm text-muted",a),...c}));m.displayName=d.Description.displayName,a.s(["Dialog",0,g,"DialogContent",0,j,"DialogDescription",0,m,"DialogHeader",0,k,"DialogTitle",0,l])},866718,a=>{"use strict";var b=a.i(662145),c=a.i(174897),d=a.i(368114);let e=c.forwardRef(({className:a,type:c,...e},f)=>(0,b.jsx)("input",{type:c,className:(0,d.cn)("flex h-10 w-full rounded-md border border-border bg-bg px-3 py-2 text-base ring-offset-bg file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-txt placeholder:text-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",a),ref:f,...e}));e.displayName="Input",a.s(["Input",0,e])}];
2
+
3
+ //# sourceMappingURL=_0hck6f0._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/%40radix-ui%2Breact-dialog%401.1.23_%40types%2Breact-dom%4019.3.0_%40types%2Breact%4019.3.0__%40types%2Breact_926a73c8bc6f3de0d90045b25ef37c03/node_modules/%40radix-ui/react-dialog/src/dialog.tsx","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/brain.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/file-plus.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/plug.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/plus.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/search.ts","../../../../node_modules/.pnpm/lucide-react%401.48.0_react%4019.3.0/node_modules/lucide-react/src/icons/trash.ts","../../../../src/components/ui/button.tsx","../../../../src/components/ui/dialog.tsx","../../../../src/components/ui/input.tsx"],"sourcesContent":["import * as React from 'react';\nimport { composeEventHandlers } from '@radix-ui/primitive';\nimport { useComposedRefs } from '@radix-ui/react-compose-refs';\nimport { createContextScope } from '@radix-ui/react-context';\nimport { useId } from '@radix-ui/react-id';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { DismissableLayer, useDismissableLayerSurface } from '@radix-ui/react-dismissable-layer';\nimport { FocusScope } from '@radix-ui/react-focus-scope';\nimport { Portal as PortalPrimitive } from '@radix-ui/react-portal';\nimport { Presence } from '@radix-ui/react-presence';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { useFocusGuards } from '@radix-ui/react-focus-guards';\nimport { useLayoutEffect } from '@radix-ui/react-use-layout-effect';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { hideOthers } from 'aria-hidden';\nimport { createSlot } from '@radix-ui/react-slot';\n\nimport type { Scope } from '@radix-ui/react-context';\n\n/* -------------------------------------------------------------------------------------------------\n * Dialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst DIALOG_NAME = 'Dialog';\n\ntype ScopedProps<P> = P & { __scopeDialog?: Scope };\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\n\ntype DialogContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n contentRef: React.RefObject<DialogContentElement | null>;\n contentId: string;\n titleId: string;\n descriptionId: string;\n titlePresent: boolean;\n descriptionPresent: boolean;\n setTitleCount: React.Dispatch<React.SetStateAction<number>>;\n setDescriptionCount: React.Dispatch<React.SetStateAction<number>>;\n open: boolean;\n onOpenChange(open: boolean): void;\n onOpenToggle(): void;\n modal: boolean;\n};\n\nconst [DialogProvider, useDialogContext] = createDialogContext<DialogContextValue>(DIALOG_NAME);\n\ninterface DialogProps {\n children?: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?(open: boolean): void;\n modal?: boolean;\n}\n\nconst Dialog: React.FC<DialogProps> = (props: ScopedProps<DialogProps>) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true,\n } = props;\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const contentRef = React.useRef<DialogContentElement>(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME,\n });\n\n const [titleCount, setTitleCount] = React.useState(0);\n const [descriptionCount, setDescriptionCount] = React.useState(0);\n\n return (\n <DialogProvider\n scope={__scopeDialog}\n triggerRef={triggerRef}\n contentRef={contentRef}\n contentId={useId()}\n titleId={useId()}\n descriptionId={useId()}\n titlePresent={titleCount > 0}\n descriptionPresent={descriptionCount > 0}\n setTitleCount={setTitleCount}\n setDescriptionCount={setDescriptionCount}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n >\n {children}\n </DialogProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger';\n\ntype DialogTriggerElement = React.ComponentRef<typeof Primitive.button>;\ntype PrimitiveButtonProps = React.ComponentPropsWithoutRef<typeof Primitive.button>;\ninterface DialogTriggerProps extends PrimitiveButtonProps {}\n\nconst DialogTrigger = /* @__PURE__ */ React.forwardRef<DialogTriggerElement, DialogTriggerProps>(\n function DialogTrigger(props: ScopedProps<DialogTriggerProps>, forwardedRef) {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return (\n <Primitive.button\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={context.open}\n aria-controls={context.open ? context.contentId : undefined}\n data-state={getState(context.open)}\n {...triggerProps}\n ref={composedTriggerRef}\n onClick={composeEventHandlers(props.onClick, context.onOpenToggle)}\n />\n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal';\n\ntype PortalContextValue = { forceMount?: true };\nconst [PortalProvider, usePortalContext] = createDialogContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n});\n\ntype PortalProps = React.ComponentPropsWithoutRef<typeof PortalPrimitive>;\ninterface DialogPortalProps {\n children?: React.ReactNode;\n /**\n * Specify a container element to portal the content into.\n */\n container?: PortalProps['container'];\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogPortal: React.FC<DialogPortalProps> = (props: ScopedProps<DialogPortalProps>) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return (\n <PortalProvider scope={__scopeDialog} forceMount={forceMount}>\n {React.Children.map(children, (child) => (\n <Presence present={forceMount || context.open}>\n <PortalPrimitive asChild container={container}>\n {child}\n </PortalPrimitive>\n </Presence>\n ))}\n </PortalProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay';\n\ntype DialogOverlayElement = DialogOverlayImplElement;\ninterface DialogOverlayProps extends DialogOverlayImplProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogOverlay = /* @__PURE__ */ React.forwardRef<DialogOverlayElement, DialogOverlayProps>(\n function DialogOverlay(props: ScopedProps<DialogOverlayProps>, forwardedRef) {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? (\n <Presence present={forceMount || context.open}>\n <DialogOverlayImpl {...overlayProps} ref={forwardedRef} />\n </Presence>\n ) : null;\n },\n);\n\ntype DialogOverlayImplElement = React.ComponentRef<typeof Primitive.div>;\ntype PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;\ninterface DialogOverlayImplProps extends PrimitiveDivProps {}\n\nconst Slot = createSlot('DialogOverlay.RemoveScroll');\n\nconst DialogOverlayImpl = /* @__PURE__ */ React.forwardRef<\n DialogOverlayImplElement,\n DialogOverlayImplProps\n>(\n // blank line to reduce diff noise\n function DialogOverlayImpl(props: ScopedProps<DialogOverlayImplProps>, forwardedRef) {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n\n // Register the overlay as a dismiss surface so a consumer calling\n // `stopPropagation` on it (eg. to avoid triggering parent handlers) does not\n // prevent the dialog from closing. See: https://github.com/radix-ui/primitives/issues/3346\n const registerDismissableSurface = useDismissableLayerSurface();\n const composedRefs = useComposedRefs(forwardedRef, registerDismissableSurface);\n\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n <RemoveScroll as={Slot} allowPinchZoom shards={[context.contentRef]}>\n <Primitive.div\n data-state={getState(context.open)}\n {...overlayProps}\n ref={composedRefs}\n // We re-enable pointer-events prevented by `Dialog.Content` to allow scrolling the overlay.\n style={{ pointerEvents: 'auto', ...overlayProps.style }}\n />\n </RemoveScroll>\n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent';\n\ntype DialogContentElement = DialogContentTypeElement;\ninterface DialogContentProps extends DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true;\n}\n\nconst DialogContent = /* @__PURE__ */ React.forwardRef<DialogContentElement, DialogContentProps>(\n function DialogContent(props: ScopedProps<DialogContentProps>, forwardedRef) {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return (\n <Presence present={forceMount || context.open}>\n {context.modal ? (\n <DialogContentModal {...contentProps} ref={forwardedRef} />\n ) : (\n <DialogContentNonModal {...contentProps} ref={forwardedRef} />\n )}\n </Presence>\n );\n },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentTypeElement = DialogContentImplElement;\ninterface DialogContentTypeProps extends Omit<\n DialogContentImplProps,\n 'trapFocus' | 'disableOutsidePointerEvents'\n> {}\n\nconst DialogContentModal = /* @__PURE__ */ React.forwardRef<\n DialogContentTypeElement,\n DialogContentTypeProps\n>(\n // blank line to reduce diff noise\n function DialogContentModal(props: ScopedProps<DialogContentTypeProps>, forwardedRef) {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef<HTMLDivElement>(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n\n return (\n <DialogContentImpl\n {...props}\n ref={composedRefs}\n // we make sure focus isn't trapped once `DialogContent` has been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n disableOutsidePointerEvents={context.open}\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n })}\n onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault();\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault(),\n )}\n />\n );\n },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = /* @__PURE__ */ React.forwardRef<\n DialogContentTypeElement,\n DialogContentTypeProps\n>(\n // blank line to reduce diff noise\n function DialogContentNonModal(props: ScopedProps<DialogContentTypeProps>, forwardedRef) {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n\n return (\n <DialogContentImpl\n {...props}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n onCloseAutoFocus={(event) => {\n props.onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault();\n }\n\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event);\n\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === 'pointerdown') {\n hasPointerDownOutsideRef.current = true;\n }\n }\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n const target = event.target as HTMLElement;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n\n // On Safari if the trigger is inside a container with tabIndex={0}, when clicked\n // we will get the pointer down outside event on the trigger, but then a subsequent\n // focus outside event on the container, we ignore any focus outside event when we've\n // already had a pointer down outside event.\n if (event.detail.originalEvent.type === 'focusin' && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }}\n />\n );\n },\n);\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplElement = React.ComponentRef<typeof DismissableLayer>;\ntype DismissableLayerProps = React.ComponentPropsWithoutRef<typeof DismissableLayer>;\ntype FocusScopeProps = React.ComponentPropsWithoutRef<typeof FocusScope>;\ninterface DialogContentImplProps extends Omit<DismissableLayerProps, 'onDismiss'> {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped'];\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];\n}\n\nconst DialogContentImpl = /* @__PURE__ */ React.forwardRef<\n DialogContentImplElement,\n DialogContentImplProps\n>(\n // blank line to reduce diff noise\n function DialogContentImpl(props: ScopedProps<DialogContentImplProps>, forwardedRef) {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n\n // Make sure the whole tree has focus guards as our `Dialog` will be\n // the last element in the DOM (because of the `Portal`)\n useFocusGuards();\n\n return (\n <>\n <FocusScope\n asChild\n loop\n trapped={trapFocus}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <DismissableLayer\n role=\"dialog\"\n id={context.contentId}\n aria-describedby={context.descriptionPresent ? context.descriptionId : undefined}\n aria-labelledby={context.titlePresent ? context.titleId : undefined}\n data-state={getState(context.open)}\n {...contentProps}\n ref={forwardedRef}\n deferPointerDownOutside\n onDismiss={() => context.onOpenChange(false)}\n />\n </FocusScope>\n </>\n );\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle';\n\ntype DialogTitleElement = React.ComponentRef<typeof Primitive.h2>;\ntype PrimitiveHeading2Props = React.ComponentPropsWithoutRef<typeof Primitive.h2>;\ninterface DialogTitleProps extends PrimitiveHeading2Props {}\n\nconst DialogTitle = /* @__PURE__ */ React.forwardRef<DialogTitleElement, DialogTitleProps>(\n function DialogTitle(props: ScopedProps<DialogTitleProps>, forwardedRef) {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n const { setTitleCount } = context;\n useLayoutEffect(() => {\n setTitleCount((count) => count + 1);\n return () => setTitleCount((count) => count - 1);\n }, [setTitleCount]);\n return <Primitive.h2 id={context.titleId} {...titleProps} ref={forwardedRef} />;\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'DialogDescription';\n\ntype DialogDescriptionElement = React.ComponentRef<typeof Primitive.p>;\ntype PrimitiveParagraphProps = React.ComponentPropsWithoutRef<typeof Primitive.p>;\ninterface DialogDescriptionProps extends PrimitiveParagraphProps {}\n\nconst DialogDescription = /* @__PURE__ */ React.forwardRef<\n DialogDescriptionElement,\n DialogDescriptionProps\n>(\n // blank line to reduce diff noise\n function DialogDescription(props: ScopedProps<DialogDescriptionProps>, forwardedRef) {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n const { setDescriptionCount } = context;\n useLayoutEffect(() => {\n setDescriptionCount((count) => count + 1);\n return () => setDescriptionCount((count) => count - 1);\n }, [setDescriptionCount]);\n return <Primitive.p id={context.descriptionId} {...descriptionProps} ref={forwardedRef} />;\n },\n);\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose';\n\ntype DialogCloseElement = React.ComponentRef<typeof Primitive.button>;\ninterface DialogCloseProps extends PrimitiveButtonProps {}\n\nconst DialogClose = /* @__PURE__ */ React.forwardRef<DialogCloseElement, DialogCloseProps>(\n function DialogClose(props: ScopedProps<DialogCloseProps>, forwardedRef) {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return (\n <Primitive.button\n type=\"button\"\n {...closeProps}\n ref={forwardedRef}\n onClick={composeEventHandlers(props.onClick, () => context.onOpenChange(false))}\n />\n );\n },\n);\n\n/** @deprecated Noop component to avoid breaking changes. */\nexport const WarningProvider: React.FC<\n ScopedProps<{\n children?: React.ReactNode;\n contentName: string;\n titleName: string;\n docsSlug: 'dialog';\n }>\n> = (props) => {\n return props.children;\n};\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed';\n}\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n Dialog as Root,\n DialogTrigger as Trigger,\n DialogPortal as Portal,\n DialogOverlay as Overlay,\n DialogContent as Content,\n DialogTitle as Title,\n DialogDescription as Description,\n DialogClose as Close,\n};\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n};\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'brain',\n size: 24,\n node: [\n ['path', { d: 'M12 18V5', key: 'adv99a' }],\n ['path', { d: 'M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4', key: '1e3is1' }],\n ['path', { d: 'M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5', key: '1gqd8o' }],\n ['path', { d: 'M17.997 5.125a4 4 0 0 1 2.526 5.77', key: 'iwvgf7' }],\n ['path', { d: 'M18 18a4 4 0 0 0 2-7.464', key: 'efp6ie' }],\n ['path', { d: 'M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517', key: '1gq6am' }],\n ['path', { d: 'M6 18a4 4 0 0 1-2-7.464', key: 'k1g0md' }],\n ['path', { d: 'M6.003 5.125a4 4 0 0 0-2.526 5.77', key: 'q97ue3' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Brain\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMThWNSIgLz4KICA8cGF0aCBkPSJNMTUgMTNhNC4xNyA0LjE3IDAgMCAxLTMtNCA0LjE3IDQuMTcgMCAwIDEtMyA0IiAvPgogIDxwYXRoIGQ9Ik0xNy41OTggNi41QTMgMyAwIDEgMCAxMiA1YTMgMyAwIDEgMC01LjU5OCAxLjUiIC8+CiAgPHBhdGggZD0iTTE3Ljk5NyA1LjEyNWE0IDQgMCAwIDEgMi41MjYgNS43NyIgLz4KICA8cGF0aCBkPSJNMTggMThhNCA0IDAgMCAwIDItNy40NjQiIC8+CiAgPHBhdGggZD0iTTE5Ljk2NyAxNy40ODNBNCA0IDAgMSAxIDEyIDE4YTQgNCAwIDEgMS03Ljk2Ny0uNTE3IiAvPgogIDxwYXRoIGQ9Ik02IDE4YTQgNCAwIDAgMS0yLTcuNDY0IiAvPgogIDxwYXRoIGQ9Ik02LjAwMyA1LjEyNWE0IDQgMCAwIDAtMi41MjYgNS43NyIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/brain\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 Brain = createLucideIcon(__iconData);\n\nexport default Brain;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'file-plus',\n size: 24,\n node: [\n [\n 'path',\n {\n 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',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M9 15h6', key: 'cctwl0' }],\n ['path', { d: 'M12 18v-6', key: '17g6i2' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name FilePlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNOSAxNWg2IiAvPgogIDxwYXRoIGQ9Ik0xMiAxOHYtNiIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file-plus\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 FilePlus = createLucideIcon(__iconData);\n\nexport default FilePlus;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'plug',\n size: 24,\n node: [\n ['path', { d: 'M12 22v-5', key: '1ega77' }],\n ['path', { d: 'M15 8V2', key: '18g5xt' }],\n [\n 'path',\n { d: 'M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z', key: '1xoxul' },\n ],\n ['path', { d: 'M9 8V2', key: '14iosj' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Plug\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMjJ2LTUiIC8+CiAgPHBhdGggZD0iTTE1IDhWMiIgLz4KICA8cGF0aCBkPSJNMTcgOGExIDEgMCAwIDEgMSAxdjRhNCA0IDAgMCAxLTQgNGgtNGE0IDQgMCAwIDEtNC00VjlhMSAxIDAgMCAxIDEtMXoiIC8+CiAgPHBhdGggZD0iTTkgOFYyIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/plug\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 Plug = createLucideIcon(__iconData);\n\nexport default Plug;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'plus',\n size: 24,\n node: [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'M12 5v14', key: 's699le' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Plus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KICA8cGF0aCBkPSJNMTIgNXYxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/plus\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 Plus = createLucideIcon(__iconData);\n\nexport default Plus;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'search',\n size: 24,\n node: [\n ['path', { d: 'm21 21-4.34-4.34', key: '14j7rj' }],\n ['circle', { cx: '11', cy: '11', r: '8', key: '4ej97u' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Search\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMjEgMjEtNC4zNC00LjM0IiAvPgogIDxjaXJjbGUgY3g9IjExIiBjeT0iMTEiIHI9IjgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/search\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 Search = createLucideIcon(__iconData);\n\nexport default Search;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'trash',\n size: 24,\n node: [\n ['path', { d: 'M10 11v6', key: 'nco0om' }],\n ['path', { d: 'M14 11v6', key: 'outv1u' }],\n ['path', { d: 'M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6', key: 'miytrc' }],\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2', key: 'e791ji' }],\n ],\n aliases: ['trash-2'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Trash\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTQgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiAvPgogIDxwYXRoIGQ9Ik0zIDZoMTgiIC8+CiAgPHBhdGggZD0iTTggNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/trash\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 Trash = createLucideIcon(__iconData);\n\nexport default Trash;\n","import * as React from \"react\"\r\nimport { Slot } from \"@radix-ui/react-slot\"\r\nimport { cva, type VariantProps } from \"class-variance-authority\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst buttonVariants = cva(\r\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-bg transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"bg-accent text-accent-fg hover:bg-accent/90\",\r\n destructive:\r\n \"bg-danger text-destructive-foreground hover:bg-danger/90\",\r\n outline:\r\n \"border border-border bg-bg hover:bg-surface2 hover:text-txt\",\r\n secondary:\r\n \"bg-surface2 text-txt hover:bg-surface2/80\",\r\n ghost: \"hover:bg-surface2 hover:text-txt\",\r\n link: \"text-txt underline-offset-4 hover:underline\",\r\n },\r\n size: {\r\n default: \"h-10 px-4 py-2\",\r\n sm: \"h-9 rounded-md px-3\",\r\n lg: \"h-11 rounded-md px-8\",\r\n icon: \"h-10 w-10\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n size: \"default\",\r\n },\r\n }\r\n)\r\n\r\nexport interface ButtonProps\r\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\r\n VariantProps<typeof buttonVariants> {\r\n asChild?: boolean\r\n}\r\n\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant, size, asChild = false, ...props }, ref) => {\r\n const Comp = asChild ? Slot : \"button\"\r\n return (\r\n <Comp\r\n className={cn(buttonVariants({ variant, size, className }))}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nButton.displayName = \"Button\"\r\n\r\nexport { Button, buttonVariants }\r\n","import * as React from \"react\"\r\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\r\nimport { X } from \"lucide-react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst Dialog = DialogPrimitive.Root\r\n\r\nconst DialogTrigger = DialogPrimitive.Trigger\r\n\r\nconst DialogPortal = DialogPrimitive.Portal\r\n\r\nconst DialogClose = DialogPrimitive.Close\r\n\r\nconst DialogOverlay = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Overlay>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Overlay\r\n ref={ref}\r\n className={cn(\r\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\r\n\r\nconst DialogContent = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Content>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\r\n>(({ className, children, ...props }, ref) => (\r\n <DialogPortal>\r\n <DialogOverlay />\r\n <DialogPrimitive.Content\r\n ref={ref}\r\n className={cn(\r\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-surface p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\r\n className\r\n )}\r\n {...props}\r\n >\r\n {children}\r\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-xs opacity-70 ring-offset-bg transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-accent focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-surface2 data-[state=open]:text-muted\">\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </DialogPrimitive.Close>\r\n </DialogPrimitive.Content>\r\n </DialogPortal>\r\n))\r\nDialogContent.displayName = DialogPrimitive.Content.displayName\r\n\r\nconst DialogHeader = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nDialogHeader.displayName = \"DialogHeader\"\r\n\r\nconst DialogFooter = ({\r\n className,\r\n ...props\r\n}: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div\r\n className={cn(\r\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n)\r\nDialogFooter.displayName = \"DialogFooter\"\r\n\r\nconst DialogTitle = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Title>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Title\r\n ref={ref}\r\n className={cn(\r\n \"text-lg font-semibold leading-none tracking-tight\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n))\r\nDialogTitle.displayName = DialogPrimitive.Title.displayName\r\n\r\nconst DialogDescription = React.forwardRef<\r\n React.ElementRef<typeof DialogPrimitive.Description>,\r\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\r\n>(({ className, ...props }, ref) => (\r\n <DialogPrimitive.Description\r\n ref={ref}\r\n className={cn(\"text-sm text-muted\", className)}\r\n {...props}\r\n />\r\n))\r\nDialogDescription.displayName = DialogPrimitive.Description.displayName\r\n\r\nexport {\r\n Dialog,\r\n DialogPortal,\r\n DialogOverlay,\r\n DialogClose,\r\n DialogTrigger,\r\n DialogContent,\r\n DialogHeader,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n}\r\n","import * as React from \"react\"\r\n\r\nimport { cn } from \"@/lib/utils\"\r\n\r\nconst Input = React.forwardRef<HTMLInputElement, React.ComponentProps<\"input\">>(\r\n ({ className, type, ...props }, ref) => {\r\n return (\r\n <input\r\n type={type}\r\n className={cn(\r\n \"flex h-10 w-full rounded-md border border-border bg-bg px-3 py-2 text-base ring-offset-bg file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-txt placeholder:text-muted focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\r\n className\r\n )}\r\n ref={ref}\r\n {...props}\r\n />\r\n )\r\n }\r\n)\r\nInput.displayName = \"Input\"\r\n\r\nexport { Input }\r\n"],"names":["DialogTrigger","DialogOverlay","DialogOverlayImpl","DialogContent","DialogContentModal","DialogContentNonModal","DialogContentImpl","DialogTitle","DialogDescription","DialogClose","buttonVariants","variants","variant","default","destructive","outline","secondary","ghost","link","size","sm","lg","icon","defaultVariants","Button","className","asChild","props","ref","Comp","displayName","Dialog","DialogPortal","children","DialogHeader","DialogFooter","Input","type"],"mappings":"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","ignoreList":[1,2,3,4,5,6]}