vibedoc 1.9.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (741) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +7 -1
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +41 -13
  5. package/.next/routes-manifest.json +42 -6
  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)/graph/page/app-paths-manifest.json +3 -0
  17. package/.next/server/app/(app)/graph/page/build-manifest.json +20 -0
  18. package/.next/server/app/(app)/graph/page/next-font-manifest.json +11 -0
  19. package/.next/server/app/(app)/graph/page/react-loadable-manifest.json +1 -0
  20. package/.next/server/app/(app)/graph/page.js +15 -0
  21. package/.next/server/app/(app)/graph/page.js.nft.json +1 -0
  22. package/.next/server/app/(app)/graph/page_client-reference-manifest.js +3 -0
  23. package/.next/server/app/(app)/manual-tests/page.js.nft.json +1 -1
  24. package/.next/server/app/(app)/manual-tests/page_client-reference-manifest.js +1 -1
  25. package/.next/server/app/(app)/memory/page.js.nft.json +1 -1
  26. package/.next/server/app/(app)/memory/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(app)/roadmap/page.js.nft.json +1 -1
  28. package/.next/server/app/(app)/roadmap/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  30. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/(app)/setup/page.js.nft.json +1 -1
  32. package/.next/server/app/(app)/setup/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/_global-error.html +1 -1
  34. package/.next/server/app/_global-error.rsc +1 -1
  35. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  36. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  37. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  38. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  39. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/.next/server/app/_not-found.html +1 -1
  41. package/.next/server/app/_not-found.rsc +2 -2
  42. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  43. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  44. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  45. package/.next/server/app/activity.html +1 -1
  46. package/.next/server/app/activity.rsc +23 -22
  47. package/.next/server/app/activity.segments/!KGFwcCk/activity/__PAGE__.segment.rsc +9 -11
  48. package/.next/server/app/activity.segments/_full.segment.rsc +23 -22
  49. package/.next/server/app/activity.segments/_tree.segment.rsc +2 -2
  50. package/.next/server/app/api/activity/route.js +2 -2
  51. package/.next/server/app/api/activity/route.js.nft.json +1 -1
  52. package/.next/server/app/api/chat/route.js +2 -2
  53. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  54. package/.next/server/app/api/context/route.js +2 -2
  55. package/.next/server/app/api/context/route.js.nft.json +1 -1
  56. package/.next/server/app/api/conversations/route.js +2 -2
  57. package/.next/server/app/api/conversations/route.js.nft.json +1 -1
  58. package/.next/server/app/api/decisions/route.js +2 -2
  59. package/.next/server/app/api/decisions/route.js.nft.json +1 -1
  60. package/.next/server/app/api/docs/graph/route/app-paths-manifest.json +3 -0
  61. package/.next/server/app/api/docs/graph/route/server-reference-manifest.json +4 -0
  62. package/.next/server/app/api/docs/graph/route.js +9 -0
  63. package/.next/server/app/api/docs/graph/route.js.map +5 -0
  64. package/.next/server/app/api/docs/graph/route.js.nft.json +1 -0
  65. package/.next/server/app/api/docs/graph/route_client-reference-manifest.js +3 -0
  66. package/.next/server/app/api/docs/links/route/app-paths-manifest.json +3 -0
  67. package/.next/server/app/api/docs/links/route/build-manifest.json +12 -0
  68. package/.next/server/app/api/docs/links/route/server-reference-manifest.json +4 -0
  69. package/.next/server/app/api/docs/links/route.js +9 -0
  70. package/.next/server/app/api/docs/links/route.js.map +5 -0
  71. package/.next/server/app/api/docs/links/route.js.nft.json +1 -0
  72. package/.next/server/app/api/docs/links/route_client-reference-manifest.js +3 -0
  73. package/.next/server/app/api/docs/route.js +2 -2
  74. package/.next/server/app/api/docs/route.js.nft.json +1 -1
  75. package/.next/server/app/api/explorer/route.js +2 -2
  76. package/.next/server/app/api/explorer/route.js.nft.json +1 -1
  77. package/.next/server/app/api/mcp/route.js +2 -2
  78. package/.next/server/app/api/mcp/route.js.nft.json +1 -1
  79. package/.next/server/app/api/memory/entries/delete/route.js +2 -2
  80. package/.next/server/app/api/memory/entries/delete/route.js.nft.json +1 -1
  81. package/.next/server/app/api/memory/entries/merge/route/app-paths-manifest.json +3 -0
  82. package/.next/server/app/api/memory/entries/merge/route/build-manifest.json +12 -0
  83. package/.next/server/app/api/memory/entries/merge/route/server-reference-manifest.json +4 -0
  84. package/.next/server/app/api/memory/entries/merge/route.js +9 -0
  85. package/.next/server/app/api/memory/entries/merge/route.js.map +5 -0
  86. package/.next/server/app/api/memory/entries/merge/route.js.nft.json +1 -0
  87. package/.next/server/app/api/memory/entries/merge/route_client-reference-manifest.js +3 -0
  88. package/.next/server/app/api/memory/entries/merge/undo/route/app-paths-manifest.json +3 -0
  89. package/.next/server/app/api/memory/entries/merge/undo/route/build-manifest.json +12 -0
  90. package/.next/server/app/api/memory/entries/merge/undo/route/server-reference-manifest.json +4 -0
  91. package/.next/server/app/api/memory/entries/merge/undo/route.js +9 -0
  92. package/.next/server/app/api/memory/entries/merge/undo/route.js.map +5 -0
  93. package/.next/server/app/api/memory/entries/merge/undo/route.js.nft.json +1 -0
  94. package/.next/server/app/api/memory/entries/merge/undo/route_client-reference-manifest.js +3 -0
  95. package/.next/server/app/api/memory/entries/restore/route.js +2 -2
  96. package/.next/server/app/api/memory/entries/restore/route.js.nft.json +1 -1
  97. package/.next/server/app/api/memory/entries/route.js +2 -2
  98. package/.next/server/app/api/memory/entries/route.js.nft.json +1 -1
  99. package/.next/server/app/api/memory/entries/save/route.js +2 -2
  100. package/.next/server/app/api/memory/entries/save/route.js.nft.json +1 -1
  101. package/.next/server/app/api/memory/graph/route.js +2 -2
  102. package/.next/server/app/api/memory/graph/route.js.nft.json +1 -1
  103. package/.next/server/app/api/memory/health/dismiss/route/app-paths-manifest.json +3 -0
  104. package/.next/server/app/api/memory/health/dismiss/route/build-manifest.json +12 -0
  105. package/.next/server/app/api/memory/health/dismiss/route/server-reference-manifest.json +4 -0
  106. package/.next/server/app/api/memory/health/dismiss/route.js +9 -0
  107. package/.next/server/app/api/memory/health/dismiss/route.js.map +5 -0
  108. package/.next/server/app/api/memory/health/dismiss/route.js.nft.json +1 -0
  109. package/.next/server/app/api/memory/health/dismiss/route_client-reference-manifest.js +3 -0
  110. package/.next/server/app/api/memory/health/route/app-paths-manifest.json +3 -0
  111. package/.next/server/app/api/memory/health/route/build-manifest.json +12 -0
  112. package/.next/server/app/api/memory/health/route/server-reference-manifest.json +4 -0
  113. package/.next/server/app/api/memory/health/route.js +8 -0
  114. package/.next/server/app/api/memory/health/route.js.map +5 -0
  115. package/.next/server/app/api/memory/health/route.js.nft.json +1 -0
  116. package/.next/server/app/api/memory/health/route_client-reference-manifest.js +3 -0
  117. package/.next/server/app/api/memory/history/route.js +2 -2
  118. package/.next/server/app/api/memory/history/route.js.nft.json +1 -1
  119. package/.next/server/app/api/memory/route.js +2 -2
  120. package/.next/server/app/api/memory/route.js.nft.json +1 -1
  121. package/.next/server/app/api/plan/apply/route.js +2 -2
  122. package/.next/server/app/api/plan/apply/route.js.nft.json +1 -1
  123. package/.next/server/app/api/projects/route.js +2 -2
  124. package/.next/server/app/api/projects/route.js.nft.json +1 -1
  125. package/.next/server/app/api/registry/route.js +2 -2
  126. package/.next/server/app/api/registry/route.js.nft.json +1 -1
  127. package/.next/server/app/api/roadmap/create/route.js +2 -2
  128. package/.next/server/app/api/roadmap/create/route.js.nft.json +1 -1
  129. package/.next/server/app/api/roadmap/delete/route.js +2 -2
  130. package/.next/server/app/api/roadmap/delete/route.js.nft.json +1 -1
  131. package/.next/server/app/api/roadmap/generate/route.js +2 -2
  132. package/.next/server/app/api/roadmap/generate/route.js.nft.json +1 -1
  133. package/.next/server/app/api/roadmap/layout/route.js +2 -2
  134. package/.next/server/app/api/roadmap/layout/route.js.nft.json +1 -1
  135. package/.next/server/app/api/roadmap/restore/route.js +2 -2
  136. package/.next/server/app/api/roadmap/restore/route.js.nft.json +1 -1
  137. package/.next/server/app/api/roadmap/route.js +2 -2
  138. package/.next/server/app/api/roadmap/route.js.nft.json +1 -1
  139. package/.next/server/app/api/roadmap/update/route.js +2 -2
  140. package/.next/server/app/api/roadmap/update/route.js.nft.json +1 -1
  141. package/.next/server/app/api/sessions/route.js +2 -2
  142. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  143. package/.next/server/app/api/settings/route.js +2 -2
  144. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  145. package/.next/server/app/api/setup/generate/route.js +2 -2
  146. package/.next/server/app/api/setup/generate/route.js.nft.json +1 -1
  147. package/.next/server/app/api/setup/write/route.js +2 -2
  148. package/.next/server/app/api/setup/write/route.js.nft.json +1 -1
  149. package/.next/server/app/api/summary/route.js +2 -2
  150. package/.next/server/app/api/summary/route.js.nft.json +1 -1
  151. package/.next/server/app/api/tasks/bulk/route.js +2 -2
  152. package/.next/server/app/api/tasks/bulk/route.js.nft.json +1 -1
  153. package/.next/server/app/api/tasks/create/route.js +2 -2
  154. package/.next/server/app/api/tasks/create/route.js.nft.json +1 -1
  155. package/.next/server/app/api/tasks/delete/route.js +2 -2
  156. package/.next/server/app/api/tasks/delete/route.js.nft.json +1 -1
  157. package/.next/server/app/api/tasks/manual-tests/route.js +2 -2
  158. package/.next/server/app/api/tasks/manual-tests/route.js.nft.json +1 -1
  159. package/.next/server/app/api/tasks/restore/route.js +2 -2
  160. package/.next/server/app/api/tasks/restore/route.js.nft.json +1 -1
  161. package/.next/server/app/api/tasks/review/route.js +2 -2
  162. package/.next/server/app/api/tasks/review/route.js.nft.json +1 -1
  163. package/.next/server/app/api/tasks/route.js +2 -2
  164. package/.next/server/app/api/tasks/route.js.nft.json +1 -1
  165. package/.next/server/app/api/tasks/update/route.js +2 -2
  166. package/.next/server/app/api/tasks/update/route.js.nft.json +1 -1
  167. package/.next/server/app/api/views/route.js +2 -2
  168. package/.next/server/app/api/views/route.js.nft.json +1 -1
  169. package/.next/server/app/board.html +1 -1
  170. package/.next/server/app/board.rsc +23 -22
  171. package/.next/server/app/board.segments/!KGFwcCk/board/__PAGE__.segment.rsc +6 -6
  172. package/.next/server/app/board.segments/_full.segment.rsc +23 -22
  173. package/.next/server/app/board.segments/_tree.segment.rsc +2 -2
  174. package/.next/server/app/chat.html +1 -1
  175. package/.next/server/app/chat.rsc +23 -22
  176. package/.next/server/app/chat.segments/!KGFwcCk/chat/__PAGE__.segment.rsc +6 -6
  177. package/.next/server/app/chat.segments/_full.segment.rsc +23 -22
  178. package/.next/server/app/chat.segments/_tree.segment.rsc +2 -2
  179. package/.next/server/app/docs.html +1 -1
  180. package/.next/server/app/docs.rsc +23 -22
  181. package/.next/server/app/docs.segments/!KGFwcCk/docs/__PAGE__.segment.rsc +6 -6
  182. package/.next/server/app/docs.segments/_full.segment.rsc +23 -22
  183. package/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  184. package/.next/server/app/explorer.html +1 -1
  185. package/.next/server/app/explorer.rsc +23 -22
  186. package/.next/server/app/explorer.segments/!KGFwcCk/explorer/__PAGE__.segment.rsc +11 -10
  187. package/.next/server/app/explorer.segments/_full.segment.rsc +23 -22
  188. package/.next/server/app/explorer.segments/_tree.segment.rsc +2 -2
  189. package/.next/server/app/graph.html +1 -0
  190. package/.next/server/app/graph.meta +31 -0
  191. package/.next/server/app/graph.rsc +32 -0
  192. package/.next/server/app/graph.segments/!KGFwcCk/graph/__PAGE__.segment.rsc +33 -0
  193. package/.next/server/app/graph.segments/_full.segment.rsc +32 -0
  194. package/.next/server/app/graph.segments/_tree.segment.rsc +6 -0
  195. package/.next/server/app/index.html +1 -1
  196. package/.next/server/app/index.rsc +2 -2
  197. package/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  198. package/.next/server/app/index.segments/_full.segment.rsc +2 -2
  199. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  200. package/.next/server/app/manual-tests.html +1 -1
  201. package/.next/server/app/manual-tests.rsc +23 -22
  202. package/.next/server/app/manual-tests.segments/!KGFwcCk/manual-tests/__PAGE__.segment.rsc +11 -10
  203. package/.next/server/app/manual-tests.segments/_full.segment.rsc +23 -22
  204. package/.next/server/app/manual-tests.segments/_tree.segment.rsc +2 -2
  205. package/.next/server/app/memory.html +1 -1
  206. package/.next/server/app/memory.rsc +23 -22
  207. package/.next/server/app/memory.segments/!KGFwcCk/memory/__PAGE__.segment.rsc +9 -11
  208. package/.next/server/app/memory.segments/_full.segment.rsc +23 -22
  209. package/.next/server/app/memory.segments/_tree.segment.rsc +2 -2
  210. package/.next/server/app/page.js.nft.json +1 -1
  211. package/.next/server/app/page_client-reference-manifest.js +1 -1
  212. package/.next/server/app/roadmap.html +1 -1
  213. package/.next/server/app/roadmap.rsc +23 -22
  214. package/.next/server/app/roadmap.segments/!KGFwcCk/roadmap/__PAGE__.segment.rsc +6 -6
  215. package/.next/server/app/roadmap.segments/_full.segment.rsc +23 -22
  216. package/.next/server/app/roadmap.segments/_tree.segment.rsc +2 -2
  217. package/.next/server/app/settings.html +1 -1
  218. package/.next/server/app/settings.rsc +23 -22
  219. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +9 -10
  220. package/.next/server/app/settings.segments/_full.segment.rsc +23 -22
  221. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  222. package/.next/server/app/setup.html +1 -1
  223. package/.next/server/app/setup.rsc +23 -22
  224. package/.next/server/app/setup.segments/!KGFwcCk/setup/__PAGE__.segment.rsc +11 -10
  225. package/.next/server/app/setup.segments/_full.segment.rsc +23 -22
  226. package/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  227. package/.next/server/app-paths-manifest.json +7 -1
  228. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-_cqh8._.js → 11mp_@anthropic-ai_sdk_0-r4g2t._.js} +1 -1
  229. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00o5o78._.js → 11mp_@anthropic-ai_sdk_01gyja3._.js} +1 -1
  230. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_03cp17a._.js → 11mp_@anthropic-ai_sdk_02lx_j3._.js} +1 -1
  231. package/.next/server/chunks/{11mp_@anthropic-ai_sdk_07dk2er._.js → 11mp_@anthropic-ai_sdk_05iv23g._.js} +1 -1
  232. package/.next/server/chunks/11mp_@anthropic-ai_sdk_05oneea._.js +3 -0
  233. package/.next/server/chunks/11mp_@anthropic-ai_sdk_07fgg-l._.js +3 -0
  234. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_5gzfy._.js +3 -0
  235. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_jynr-._.js +3 -0
  236. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0aykesf._.js +3 -0
  237. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0br_1fc._.js +3 -0
  238. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0cd5lu7._.js +3 -0
  239. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ckxhy7._.js +3 -0
  240. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0e5qkuv._.js +3 -0
  241. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0el8pm6._.js +3 -0
  242. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i4w8fv._.js +3 -0
  243. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0i7ckik._.js +3 -0
  244. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0l1p4c6._.js +3 -0
  245. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0m-xqs_._.js +3 -0
  246. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0nltdmf._.js +3 -0
  247. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0qxmzg8._.js +3 -0
  248. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0spr_aj._.js +3 -0
  249. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0th0pyh._.js +3 -0
  250. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0x21fif._.js +3 -0
  251. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1-7bj56._.js +3 -0
  252. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1-efoj1._.js +3 -0
  253. package/.next/server/chunks/11mp_@anthropic-ai_sdk_13vu693._.js +3 -0
  254. package/.next/server/chunks/11mp_@anthropic-ai_sdk_13w62gi._.js +3 -0
  255. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1887ce1._.js +3 -0
  256. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_jq3yb._.js +3 -0
  257. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1agvp6h._.js +3 -0
  258. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1b1-3vt._.js +3 -0
  259. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ekldtb._.js +3 -0
  260. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ezcndt._.js +3 -0
  261. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1gr-orf._.js +3 -0
  262. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1hf-884._.js +3 -0
  263. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ndwnmb._.js +3 -0
  264. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rdesfd._.js +3 -0
  265. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1s8h60-._.js +3 -0
  266. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1tgk9wk._.js +3 -0
  267. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1uugb45._.js +3 -0
  268. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vcxmui._.js +3 -0
  269. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1vcxmui._.js.map +1 -0
  270. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1x63qpm._.js +3 -0
  271. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1x63qpm._.js.map +1 -0
  272. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y5oj_h._.js +3 -0
  273. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1y5oj_h._.js.map +1 -0
  274. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1z0q4jj._.js +3 -0
  275. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1z0q4jj._.js.map +1 -0
  276. package/.next/server/chunks/11mp_@anthropic-ai_sdk_20j6dn7._.js +3 -0
  277. package/.next/server/chunks/11mp_@anthropic-ai_sdk_20j6dn7._.js.map +1 -0
  278. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_00nr0dy._.js +3 -0
  279. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_06kgcr0._.js +3 -0
  280. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_07kod-g._.js +3 -0
  281. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0_va-1q._.js +3 -0
  282. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0dr79hc._.js +3 -0
  283. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ew4_uw._.js +3 -0
  284. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0iy714m._.js +3 -0
  285. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0n6aq49._.js +3 -0
  286. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ncvuil._.js +3 -0
  287. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0vilstf._.js +3 -0
  288. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ybdfbv._.js +3 -0
  289. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0z31-c0._.js +3 -0
  290. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0zu51ny._.js +3 -0
  291. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13-fsm5._.js +3 -0
  292. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_13lk7wf._.js +3 -0
  293. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ao3e3l._.js +3 -0
  294. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1ck6z1z._.js +3 -0
  295. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1dm3so9._.js +3 -0
  296. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1jxtz_6._.js +3 -0
  297. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1pdl5qg._.js +3 -0
  298. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1tzpss1._.js +3 -0
  299. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x_0sf4._.js +3 -0
  300. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x_fy5x._.js +3 -0
  301. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1xx8_-m._.js +3 -0
  302. package/.next/server/chunks/{[root-of-the-server]__0hfyuhq._.js → [root-of-the-server]__06ndlro._.js} +2 -2
  303. package/.next/server/chunks/{[root-of-the-server]__0b2488c._.js → [root-of-the-server]__08v3p50._.js} +2 -2
  304. package/.next/server/chunks/{[root-of-the-server]__0ikbk15._.js → [root-of-the-server]__0cxmrop._.js} +2 -2
  305. package/.next/server/chunks/[root-of-the-server]__0fn-a8c._.js +126 -0
  306. package/.next/server/chunks/[root-of-the-server]__0fn-a8c._.js.map +1 -0
  307. package/.next/server/chunks/{[root-of-the-server]__1b448u7._.js → [root-of-the-server]__0hk-9ll._.js} +2 -2
  308. package/.next/server/chunks/{[root-of-the-server]__16u25oa._.js → [root-of-the-server]__0i1yba1._.js} +2 -2
  309. package/.next/server/chunks/[root-of-the-server]__0lix3ru._.js +3 -0
  310. package/.next/server/chunks/[root-of-the-server]__0lix3ru._.js.map +1 -0
  311. package/.next/server/chunks/[root-of-the-server]__0pvi3ku._.js +126 -0
  312. package/.next/server/chunks/[root-of-the-server]__0pvi3ku._.js.map +1 -0
  313. package/.next/server/chunks/{[root-of-the-server]__1jz98vb._.js → [root-of-the-server]__0pz59qo._.js} +2 -2
  314. package/.next/server/chunks/[root-of-the-server]__0rggulw._.js +3 -0
  315. package/.next/server/chunks/[root-of-the-server]__0rggulw._.js.map +1 -0
  316. package/.next/server/chunks/[root-of-the-server]__0rh8yfn._.js +3 -0
  317. package/.next/server/chunks/[root-of-the-server]__0rh8yfn._.js.map +1 -0
  318. package/.next/server/chunks/{[root-of-the-server]__08yaps5._.js → [root-of-the-server]__0rikmqn._.js} +2 -2
  319. package/.next/server/chunks/[root-of-the-server]__0s8v5i-._.js +3 -0
  320. package/.next/server/chunks/[root-of-the-server]__0s8v5i-._.js.map +1 -0
  321. package/.next/server/chunks/{[root-of-the-server]__008focd._.js → [root-of-the-server]__0usdydm._.js} +2 -2
  322. package/.next/server/chunks/{[root-of-the-server]__1z3tswg._.js → [root-of-the-server]__0wc_gnr._.js} +2 -2
  323. package/.next/server/chunks/{[root-of-the-server]__1gvv2xp._.js → [root-of-the-server]__0xldguc._.js} +2 -2
  324. package/.next/server/chunks/{[root-of-the-server]__1xpp36t._.js → [root-of-the-server]__0zy73pu._.js} +2 -2
  325. package/.next/server/chunks/{[root-of-the-server]__1tu85zx._.js → [root-of-the-server]__11nbc9e._.js} +2 -2
  326. package/.next/server/chunks/[root-of-the-server]__11nbc9e._.js.map +1 -0
  327. package/.next/server/chunks/{[root-of-the-server]__0m8hmg0._.js → [root-of-the-server]__11rp-qx._.js} +2 -2
  328. package/.next/server/chunks/[root-of-the-server]__1_qenei._.js +1 -1
  329. package/.next/server/chunks/[root-of-the-server]__1_qenei._.js.map +1 -1
  330. package/.next/server/chunks/{[root-of-the-server]__0y5usoz._.js → [root-of-the-server]__1ef-hw_._.js} +2 -2
  331. package/.next/server/chunks/[root-of-the-server]__1pjwaan._.js +3 -0
  332. package/.next/server/chunks/{[root-of-the-server]__01xmabe._.js.map → [root-of-the-server]__1pjwaan._.js.map} +1 -1
  333. package/.next/server/chunks/{[root-of-the-server]__0qij7wy._.js → [root-of-the-server]__1qcy2l0._.js} +2 -2
  334. package/.next/server/chunks/{[root-of-the-server]__0axugex._.js → [root-of-the-server]__1r67yrn._.js} +2 -2
  335. package/.next/server/chunks/[root-of-the-server]__1skrybv._.js +3 -0
  336. package/.next/server/chunks/[root-of-the-server]__1skrybv._.js.map +1 -0
  337. package/.next/server/chunks/{[root-of-the-server]__03ogp2r._.js → [root-of-the-server]__1sn6-7a._.js} +2 -2
  338. package/.next/server/chunks/[root-of-the-server]__1vnine1._.js +126 -0
  339. package/.next/server/chunks/[root-of-the-server]__1vnine1._.js.map +1 -0
  340. package/.next/server/chunks/{[root-of-the-server]__0x8wtot._.js → [root-of-the-server]__1wbho9e._.js} +2 -2
  341. package/.next/server/chunks/{[root-of-the-server]__1ssunti._.js → [root-of-the-server]__1yh-4vk._.js} +2 -2
  342. package/.next/server/chunks/{[root-of-the-server]__0cbh1s-._.js → [root-of-the-server]__1zhd93r._.js} +2 -2
  343. package/.next/server/chunks/_04byth9._.js +33 -28
  344. package/.next/server/chunks/_04byth9._.js.map +1 -1
  345. package/.next/server/chunks/_0safx0g._.js +3 -3
  346. package/.next/server/chunks/_0safx0g._.js.map +1 -1
  347. package/.next/server/chunks/_1au4syj._.js +1 -1
  348. package/.next/server/chunks/_1au4syj._.js.map +1 -1
  349. package/.next/server/chunks/_next-internal_server_app_api_docs_graph_route_actions_1nzoqf-.js +3 -0
  350. package/.next/server/chunks/_next-internal_server_app_api_docs_links_route_actions_1q-6jeg.js +3 -0
  351. package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_route_actions_1rr-wwt.js +3 -0
  352. package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_undo_route_actions_0l6cy9q.js +3 -0
  353. package/.next/server/chunks/_next-internal_server_app_api_memory_entries_merge_undo_route_actions_0l6cy9q.js.map +1 -0
  354. package/.next/server/chunks/_next-internal_server_app_api_memory_health_dismiss_route_actions_0i7_n68.js +3 -0
  355. package/.next/server/chunks/_next-internal_server_app_api_memory_health_dismiss_route_actions_0i7_n68.js.map +1 -0
  356. package/.next/server/chunks/_next-internal_server_app_api_memory_health_route_actions_1lk-_5d.js +3 -0
  357. package/.next/server/chunks/_next-internal_server_app_api_memory_health_route_actions_1lk-_5d.js.map +1 -0
  358. package/.next/server/chunks/ssr/{0_nd_mermaid_dist_mermaid_core_mjs_027n2yl._.js → 0_nd_mermaid_dist_mermaid_core_mjs_0y_edkq._.js} +2 -2
  359. package/.next/server/chunks/ssr/0_nd_mermaid_dist_mermaid_core_mjs_0y_edkq._.js.map +1 -0
  360. package/.next/server/chunks/ssr/{1u84_katex_dist_katex_mjs_1kb5xea._.js → 1u84_katex_dist_katex_mjs_0yg8zto._.js} +1 -1
  361. package/.next/server/chunks/ssr/1u84_katex_dist_katex_mjs_0yg8zto._.js.map +1 -0
  362. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_1tcci-3._.js +3 -0
  363. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_1tcci-3._.js.map +1 -0
  364. package/.next/server/chunks/ssr/{1x05_lucide-react_dist_esm_icons_14hl50o._.js → 1x05_lucide-react_dist_esm_icons_1uybmua._.js} +2 -2
  365. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_1uybmua._.js.map +1 -0
  366. package/.next/server/chunks/ssr/[root-of-the-server]__1drc5py._.js +3 -0
  367. package/.next/server/chunks/ssr/[root-of-the-server]__1drc5py._.js.map +1 -0
  368. package/.next/server/chunks/ssr/_02ks8_a._.js +3 -0
  369. package/.next/server/chunks/ssr/_02ks8_a._.js.map +1 -0
  370. package/.next/server/chunks/ssr/_04xff_2._.js +1 -1
  371. package/.next/server/chunks/ssr/_04xff_2._.js.map +1 -1
  372. package/.next/server/chunks/ssr/_0696iog._.js +3 -0
  373. package/.next/server/chunks/ssr/_0696iog._.js.map +1 -0
  374. package/.next/server/chunks/ssr/_0ghj-vx._.js +3 -0
  375. package/.next/server/chunks/ssr/_0ghj-vx._.js.map +1 -0
  376. package/.next/server/chunks/ssr/{_0idb-vo._.js → _0kob2si._.js} +2 -2
  377. package/.next/server/chunks/ssr/_0kob2si._.js.map +1 -0
  378. package/.next/server/chunks/ssr/_0me5_6x._.js +3 -0
  379. package/.next/server/chunks/ssr/_0me5_6x._.js.map +1 -0
  380. package/.next/server/chunks/ssr/_0pg63il._.js +3 -0
  381. package/.next/server/chunks/ssr/_0pg63il._.js.map +1 -0
  382. package/.next/server/chunks/ssr/_0rmo9r-._.js +4 -0
  383. package/.next/server/chunks/ssr/_0rmo9r-._.js.map +1 -0
  384. package/.next/server/chunks/ssr/_0ust7tw._.js +4 -0
  385. package/.next/server/chunks/ssr/_0ust7tw._.js.map +1 -0
  386. package/.next/server/chunks/ssr/_16b4hkt._.js +3 -0
  387. package/.next/server/chunks/ssr/_16b4hkt._.js.map +1 -0
  388. package/.next/server/chunks/ssr/_190c11r._.js +3 -0
  389. package/.next/server/chunks/ssr/_190c11r._.js.map +1 -0
  390. package/.next/server/chunks/ssr/_19k2iz0._.js +70 -0
  391. package/.next/server/chunks/ssr/_19k2iz0._.js.map +1 -0
  392. package/.next/server/chunks/ssr/_1b82nz3._.js +3 -0
  393. package/.next/server/chunks/ssr/_1b82nz3._.js.map +1 -0
  394. package/.next/server/chunks/ssr/_1cz8dnu._.js +3 -0
  395. package/.next/server/chunks/ssr/_1cz8dnu._.js.map +1 -0
  396. package/.next/server/chunks/ssr/_1feybpz._.js +3 -0
  397. package/.next/server/chunks/ssr/_1feybpz._.js.map +1 -0
  398. package/.next/server/chunks/ssr/_1r_t_wi._.js +3 -0
  399. package/.next/server/chunks/ssr/_1r_t_wi._.js.map +1 -0
  400. package/.next/server/chunks/ssr/_1t8it2w._.js +3 -0
  401. package/.next/server/chunks/ssr/_1t8it2w._.js.map +1 -0
  402. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_graph_page_actions_041e9i7.js +3 -0
  403. package/.next/server/chunks/ssr/_next-internal_server_app_(app)_graph_page_actions_041e9i7.js.map +1 -0
  404. package/.next/server/chunks/ssr/{node_modules__pnpm_189m48n._.js → node_modules__pnpm_00f4yhs._.js} +1 -1
  405. package/.next/server/chunks/ssr/node_modules__pnpm_00f4yhs._.js.map +1 -0
  406. package/.next/server/chunks/ssr/{node_modules__pnpm_1min2jl._.js → node_modules__pnpm_035haet._.js} +1 -1
  407. package/.next/server/chunks/ssr/{node_modules__pnpm_1uwkcin._.js → node_modules__pnpm_03an60e._.js} +1 -1
  408. package/.next/server/chunks/ssr/{node_modules__pnpm_1q_hhr3._.js → node_modules__pnpm_03mp7qw._.js} +2 -2
  409. package/.next/server/chunks/ssr/{node_modules__pnpm_0ctisl0._.js → node_modules__pnpm_03mpmzx._.js} +1 -1
  410. package/.next/server/chunks/ssr/{node_modules__pnpm_0fwp8jm._.js → node_modules__pnpm_06_8fr8._.js} +1 -1
  411. package/.next/server/chunks/ssr/{node_modules__pnpm_17i6z2d._.js → node_modules__pnpm_09nd7ia._.js} +1 -1
  412. package/.next/server/chunks/ssr/{node_modules__pnpm_192f222._.js → node_modules__pnpm_0_e05ka._.js} +1 -1
  413. package/.next/server/chunks/ssr/node_modules__pnpm_0aoa6rg._.js +1 -1
  414. package/.next/server/chunks/ssr/node_modules__pnpm_0aoa6rg._.js.map +1 -1
  415. package/.next/server/chunks/ssr/{node_modules__pnpm_1ygal0c._.js → node_modules__pnpm_0iu4132._.js} +1 -1
  416. package/.next/server/chunks/ssr/{node_modules__pnpm_16u1vfb._.js → node_modules__pnpm_0j_-le7._.js} +2 -2
  417. package/.next/server/chunks/ssr/node_modules__pnpm_0j_-le7._.js.map +1 -0
  418. package/.next/server/chunks/ssr/{node_modules__pnpm_0kpu0-2._.js → node_modules__pnpm_0jampur._.js} +1 -1
  419. package/.next/server/chunks/ssr/{node_modules__pnpm_1aa37e1._.js → node_modules__pnpm_0lkvbt-._.js} +1 -1
  420. package/.next/server/chunks/ssr/{node_modules__pnpm_0vry74x._.js → node_modules__pnpm_0mqeoh-._.js} +2 -2
  421. package/.next/server/chunks/ssr/{node_modules__pnpm_06d-fdo._.js → node_modules__pnpm_0oyo3yo._.js} +2 -2
  422. package/.next/server/chunks/ssr/{node_modules__pnpm_1qp_jvj._.js → node_modules__pnpm_0rq9x9q._.js} +2 -2
  423. package/.next/server/chunks/ssr/{node_modules__pnpm_01bjcv9._.js → node_modules__pnpm_0tn5pg3._.js} +1 -1
  424. package/.next/server/chunks/ssr/{node_modules__pnpm_0ycbjbd._.js → node_modules__pnpm_0x5wj-4._.js} +2 -2
  425. package/.next/server/chunks/ssr/{node_modules__pnpm_14piqi4._.js → node_modules__pnpm_0zz55xq._.js} +1 -1
  426. package/.next/server/chunks/ssr/node_modules__pnpm_0zz55xq._.js.map +1 -0
  427. package/.next/server/chunks/ssr/{node_modules__pnpm_1fn3ejy._.js → node_modules__pnpm_139-v1i._.js} +1 -1
  428. package/.next/server/chunks/ssr/{node_modules__pnpm_1txccoj._.js → node_modules__pnpm_1i_chik._.js} +1 -1
  429. package/.next/server/chunks/ssr/{node_modules__pnpm_1qmkxyo._.js → node_modules__pnpm_1jgju12._.js} +1 -1
  430. package/.next/server/chunks/ssr/{node_modules__pnpm_1ssjj4u._.js → node_modules__pnpm_1n9oeu0._.js} +1 -1
  431. package/.next/server/chunks/ssr/node_modules__pnpm_1oygi6o._.js +3 -0
  432. package/.next/server/chunks/ssr/node_modules__pnpm_1oygi6o._.js.map +1 -0
  433. package/.next/server/chunks/ssr/node_modules__pnpm_1ukodtk._.js +3 -0
  434. package/.next/server/chunks/ssr/node_modules__pnpm_1ukodtk._.js.map +1 -0
  435. package/.next/server/chunks/ssr/{node_modules__pnpm_1-76qxg._.js → node_modules__pnpm_1ws3ez9._.js} +1 -1
  436. package/.next/server/chunks/ssr/{node_modules__pnpm_1-r94f7._.js → node_modules__pnpm_1ydeqw6._.js} +1 -1
  437. package/.next/server/chunks/ssr/{node_modules__pnpm_1f440kx._.js → node_modules__pnpm_1zme4rg._.js} +1 -1
  438. package/.next/server/chunks/ssr/{node_modules__pnpm_03qrzdb._.js → node_modules__pnpm_1zum4yd._.js} +1 -1
  439. package/.next/server/chunks/ssr/{node_modules__pnpm_1a48_nl._.js → node_modules__pnpm_2045l51._.js} +1 -1
  440. package/.next/server/chunks/ssr/src_1e9kctc._.js +3 -0
  441. package/.next/server/chunks/ssr/src_1e9kctc._.js.map +1 -0
  442. package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js +1 -1
  443. package/.next/server/chunks/ssr/src_app_(app)_board_page_tsx_0gpfc77._.js.map +1 -1
  444. package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js +1 -1
  445. package/.next/server/chunks/ssr/src_app_(app)_chat_page_tsx_0c3e4l4._.js.map +1 -1
  446. package/.next/server/chunks/ssr/src_app_(app)_graph_page_tsx_1yudb7h._.js +3 -0
  447. package/.next/server/chunks/ssr/src_app_(app)_graph_page_tsx_1yudb7h._.js.map +1 -0
  448. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js +1 -1
  449. package/.next/server/chunks/ssr/src_app_(app)_layout_tsx_1yu5hom._.js.map +1 -1
  450. package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js +3 -2
  451. package/.next/server/chunks/ssr/src_app_(app)_memory_page_tsx_19jhb1c._.js.map +1 -1
  452. package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js +2 -2
  453. package/.next/server/chunks/ssr/src_app_(app)_roadmap_page_tsx_0vcq3jr._.js.map +1 -1
  454. package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js +2 -2
  455. package/.next/server/chunks/ssr/src_app_(app)_settings_page_tsx_0zevtee._.js.map +1 -1
  456. package/.next/server/chunks/ssr/src_app_(app)_setup_page_tsx_1yids_n._.js +1 -1
  457. package/.next/server/chunks/ssr/src_app_(app)_setup_page_tsx_1yids_n._.js.map +1 -1
  458. package/.next/server/chunks/ssr/src_components_docs_editor-theme_ts_0ji4rd5._.js +3 -0
  459. package/.next/server/chunks/ssr/src_components_docs_editor-theme_ts_0ji4rd5._.js.map +1 -0
  460. package/.next/server/chunks/ssr/src_components_roadmap_RoadmapNodes_tsx_0up_ygp._.js +3 -0
  461. package/.next/server/chunks/ssr/src_components_roadmap_RoadmapNodes_tsx_0up_ygp._.js.map +1 -0
  462. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js +2 -2
  463. package/.next/server/chunks/ssr/src_context_ChatContext_tsx_0lowp8p._.js.map +1 -1
  464. package/.next/server/middleware-build-manifest.js +3 -3
  465. package/.next/server/next-font-manifest.js +1 -1
  466. package/.next/server/next-font-manifest.json +4 -0
  467. package/.next/server/pages/404.html +1 -1
  468. package/.next/server/pages/500.html +1 -1
  469. package/.next/server/prefetch-hints.json +19 -0
  470. package/.next/server/server-reference-manifest.js +1 -1
  471. package/.next/server/server-reference-manifest.json +1 -1
  472. package/.next/static/chunks/036fex6o238at.css +1 -0
  473. package/.next/static/chunks/03tzhv775qv5m.js +1 -0
  474. package/.next/static/chunks/05rjl54wa6y43.js +1 -0
  475. package/.next/static/chunks/0_8ovyz2sbr3p.js +1 -0
  476. package/.next/static/chunks/0do6j4i1v_c6s.js +1 -0
  477. package/.next/static/chunks/{3xqcluqa32mjv.js → 0h52yb69w77nq.js} +2 -2
  478. package/.next/static/chunks/0kb25y5g772mn.js +1 -0
  479. package/.next/static/chunks/0pmpdvev8bf-o.js +1 -0
  480. package/.next/static/chunks/10itjt9fhlzr1.js +68 -0
  481. package/.next/static/chunks/13cz-8lvre7gj.js +1 -0
  482. package/.next/static/chunks/1b9r_vdcewfu7.js +1 -0
  483. package/.next/static/chunks/1c459q7xpgq6r.js +3 -0
  484. package/.next/static/chunks/1c5ibgojv8jdi.js +3 -0
  485. package/.next/static/chunks/1huu1nljqois-.js +1 -0
  486. package/.next/static/chunks/1l8fp2uesk29q.js +1 -0
  487. package/.next/static/chunks/1pmgcotwq-_yh.js +1 -0
  488. package/.next/static/chunks/1s64z5c36fv-4.js +21 -0
  489. package/.next/static/chunks/1v63qs4kxxcfh.js +1 -0
  490. package/.next/static/chunks/{1l_dys0-y5-r7.js → 1xxzt2y2ttqql.js} +1 -1
  491. package/.next/static/chunks/2-0lpccy0f8bk.js +2 -0
  492. package/.next/static/chunks/263i_dcdizuvd.js +1 -0
  493. package/.next/static/chunks/2mf5us3y9wd9g.js +1 -0
  494. package/.next/static/chunks/2x6eh3w-u8lk4.js +1 -0
  495. package/.next/static/chunks/36s2k2k_w-or8.js +1 -0
  496. package/.next/static/chunks/37u2gjz5dzhep.js +1 -0
  497. package/.next/static/chunks/3ctec-7mnm19m.js +1 -0
  498. package/.next/static/chunks/3rtr962aa09nh.js +12 -0
  499. package/.next/static/chunks/3x43gd45wlhbl.js +1 -0
  500. package/.next/static/chunks/42c9smmpcu4re.js +1 -0
  501. package/README.md +12 -6
  502. package/package.json +3 -2
  503. package/.next/server/app/api/backlinks/route/app-paths-manifest.json +0 -3
  504. package/.next/server/app/api/backlinks/route.js +0 -8
  505. package/.next/server/app/api/backlinks/route.js.nft.json +0 -1
  506. package/.next/server/app/api/backlinks/route_client-reference-manifest.js +0 -3
  507. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_e9zpr._.js +0 -3
  508. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0_xx_qf._.js +0 -3
  509. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0aer9lc._.js +0 -3
  510. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ax30pe._.js +0 -3
  511. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0gn7vgs._.js +0 -3
  512. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0hye94a._.js +0 -3
  513. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0ir5cgk._.js +0 -3
  514. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0je0_pa._.js +0 -3
  515. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0jfgh0o._.js +0 -3
  516. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0mha4x1._.js +0 -3
  517. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0n__boa._.js +0 -3
  518. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0sqv26_._.js +0 -3
  519. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0wnc6g-._.js +0 -3
  520. package/.next/server/chunks/11mp_@anthropic-ai_sdk_0xh0g59._.js +0 -3
  521. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1-5wyhj._.js +0 -3
  522. package/.next/server/chunks/11mp_@anthropic-ai_sdk_13ahm3n._.js +0 -3
  523. package/.next/server/chunks/11mp_@anthropic-ai_sdk_13e6aq4._.js +0 -3
  524. package/.next/server/chunks/11mp_@anthropic-ai_sdk_14eg0ld._.js +0 -3
  525. package/.next/server/chunks/11mp_@anthropic-ai_sdk_15md1n2._.js +0 -3
  526. package/.next/server/chunks/11mp_@anthropic-ai_sdk_16av8b9._.js +0 -3
  527. package/.next/server/chunks/11mp_@anthropic-ai_sdk_16hjhv1._.js +0 -3
  528. package/.next/server/chunks/11mp_@anthropic-ai_sdk_16txvf7._.js +0 -3
  529. package/.next/server/chunks/11mp_@anthropic-ai_sdk_198yu7d._.js +0 -3
  530. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_9tfq3._.js +0 -3
  531. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1_izr2o._.js +0 -3
  532. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1fljcyg._.js +0 -3
  533. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1lrt6ul._.js +0 -3
  534. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1nev_ee._.js +0 -3
  535. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1pgoe2i._.js +0 -3
  536. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1rgl7mu._.js +0 -3
  537. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1slq49k._.js +0 -3
  538. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1t9bdf0._.js +0 -3
  539. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1u6qqm2._.js +0 -3
  540. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1v7ygvz._.js +0 -3
  541. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1wls8zc._.js +0 -3
  542. package/.next/server/chunks/11mp_@anthropic-ai_sdk_1ywboja._.js +0 -3
  543. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_00kwqu5._.js +0 -3
  544. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_01j2nrd._.js +0 -3
  545. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_05ybj3t._.js +0 -3
  546. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0adt7jj._.js +0 -3
  547. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0bnl14w._.js +0 -3
  548. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0f557t9._.js +0 -3
  549. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_0ra6giw._.js +0 -3
  550. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_107cqfx._.js +0 -3
  551. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1377sl6._.js +0 -3
  552. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1_2hcok._.js +0 -3
  553. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1g--m6y._.js +0 -3
  554. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1geopi5._.js +0 -3
  555. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1i11dte._.js +0 -3
  556. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1mj3_qk._.js +0 -3
  557. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1qgy210._.js +0 -3
  558. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1rkng9q._.js +0 -3
  559. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1vr8q8y._.js +0 -3
  560. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1x8b64g._.js +0 -3
  561. package/.next/server/chunks/11mp_@anthropic-ai_sdk_index_mjs_1zhahf7._.js +0 -3
  562. package/.next/server/chunks/[root-of-the-server]__01xmabe._.js +0 -3
  563. package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js +0 -110
  564. package/.next/server/chunks/[root-of-the-server]__0jr_5eq._.js.map +0 -1
  565. package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js +0 -110
  566. package/.next/server/chunks/[root-of-the-server]__19rxcu4._.js.map +0 -1
  567. package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js +0 -110
  568. package/.next/server/chunks/[root-of-the-server]__1qd-ecl._.js.map +0 -1
  569. package/.next/server/chunks/_next-internal_server_app_api_backlinks_route_actions_1_58m09.js +0 -3
  570. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0wurouw._.js +0 -3
  571. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_0wurouw._.js.map +0 -1
  572. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_14hl50o._.js.map +0 -1
  573. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js +0 -3
  574. package/.next/server/chunks/ssr/1x05_lucide-react_dist_esm_icons_triangle-alert_mjs_0ei-mpz._.js.map +0 -1
  575. package/.next/server/chunks/ssr/_071j6mr._.js +0 -4
  576. package/.next/server/chunks/ssr/_071j6mr._.js.map +0 -1
  577. package/.next/server/chunks/ssr/_0i75x-o._.js +0 -3
  578. package/.next/server/chunks/ssr/_0i75x-o._.js.map +0 -1
  579. package/.next/server/chunks/ssr/_0idb-vo._.js.map +0 -1
  580. package/.next/server/chunks/ssr/_0qp3gu7._.js +0 -3
  581. package/.next/server/chunks/ssr/_0qp3gu7._.js.map +0 -1
  582. package/.next/server/chunks/ssr/_15qpb4z._.js +0 -3
  583. package/.next/server/chunks/ssr/_15qpb4z._.js.map +0 -1
  584. package/.next/server/chunks/ssr/_1fg0usp._.js +0 -3
  585. package/.next/server/chunks/ssr/_1fg0usp._.js.map +0 -1
  586. package/.next/server/chunks/ssr/_1h0wfpz._.js +0 -3
  587. package/.next/server/chunks/ssr/_1h0wfpz._.js.map +0 -1
  588. package/.next/server/chunks/ssr/_1ncdakv._.js +0 -4
  589. package/.next/server/chunks/ssr/_1ncdakv._.js.map +0 -1
  590. package/.next/server/chunks/ssr/_1ocnpth._.js +0 -3
  591. package/.next/server/chunks/ssr/_1ocnpth._.js.map +0 -1
  592. package/.next/server/chunks/ssr/_1t76zdx._.js +0 -3
  593. package/.next/server/chunks/ssr/_1t76zdx._.js.map +0 -1
  594. package/.next/server/chunks/ssr/_1uno162._.js +0 -3
  595. package/.next/server/chunks/ssr/_1uno162._.js.map +0 -1
  596. package/.next/server/chunks/ssr/node_modules__pnpm_0al3nfy._.js +0 -3
  597. package/.next/server/chunks/ssr/node_modules__pnpm_0al3nfy._.js.map +0 -1
  598. package/.next/server/chunks/ssr/node_modules__pnpm_1xeothw._.js +0 -3
  599. package/.next/server/chunks/ssr/src_components_0eyr_zi._.js +0 -3
  600. package/.next/server/chunks/ssr/src_components_0eyr_zi._.js.map +0 -1
  601. package/.next/server/chunks/ssr/src_components_1s861m8._.js +0 -3
  602. package/.next/server/chunks/ssr/src_components_1s861m8._.js.map +0 -1
  603. package/.next/server/chunks/ssr/src_components_docs_MarkdownRenderer_tsx_1kshaz1._.js +0 -70
  604. package/.next/server/chunks/ssr/src_components_docs_MarkdownRenderer_tsx_1kshaz1._.js.map +0 -1
  605. package/.next/static/chunks/02cj5_i9np4sg.js +0 -3
  606. package/.next/static/chunks/0b547y6rqct9z.js +0 -1
  607. package/.next/static/chunks/0e3ha56i_0j05.css +0 -1
  608. package/.next/static/chunks/0f32hudp0yir7.js +0 -2
  609. package/.next/static/chunks/0mgifb98wbesa.js +0 -1
  610. package/.next/static/chunks/0rsmz1jgro1kj.js +0 -1
  611. package/.next/static/chunks/0wnq_kh8-6wc1.js +0 -2
  612. package/.next/static/chunks/13l4l-boqg8fx.js +0 -1
  613. package/.next/static/chunks/14hxe1qiaram9.js +0 -1
  614. package/.next/static/chunks/16k196zyl-n9q.js +0 -1
  615. package/.next/static/chunks/18b5l8p0vd9f8.js +0 -1
  616. package/.next/static/chunks/1acpfyut6j4e2.js +0 -1
  617. package/.next/static/chunks/1rko_88i85yqb.js +0 -21
  618. package/.next/static/chunks/1tu8lforstp1o.js +0 -1
  619. package/.next/static/chunks/20mdcup14_0yi.js +0 -11
  620. package/.next/static/chunks/23-xknrz6o748.js +0 -1
  621. package/.next/static/chunks/24u_rc2tbkhai.js +0 -3
  622. package/.next/static/chunks/2p-pkveutoh75.js +0 -1
  623. package/.next/static/chunks/329sozud9-tvr.js +0 -1
  624. package/.next/static/chunks/3qqvn9vv6i0gy.js +0 -68
  625. package/.next/static/chunks/3ruw8lu2_re-h.js +0 -1
  626. /package/.next/server/app/{api/backlinks/route → (app)/graph/page}/server-reference-manifest.json +0 -0
  627. /package/.next/server/app/{api/backlinks/route.js.map → (app)/graph/page.js.map} +0 -0
  628. /package/.next/server/app/api/{backlinks → docs/graph}/route/build-manifest.json +0 -0
  629. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0-_cqh8._.js.map → 11mp_@anthropic-ai_sdk_0-r4g2t._.js.map} +0 -0
  630. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_00o5o78._.js.map → 11mp_@anthropic-ai_sdk_01gyja3._.js.map} +0 -0
  631. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_03cp17a._.js.map → 11mp_@anthropic-ai_sdk_02lx_j3._.js.map} +0 -0
  632. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_07dk2er._.js.map → 11mp_@anthropic-ai_sdk_05iv23g._.js.map} +0 -0
  633. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_e9zpr._.js.map → 11mp_@anthropic-ai_sdk_05oneea._.js.map} +0 -0
  634. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0_xx_qf._.js.map → 11mp_@anthropic-ai_sdk_07fgg-l._.js.map} +0 -0
  635. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0aer9lc._.js.map → 11mp_@anthropic-ai_sdk_0_5gzfy._.js.map} +0 -0
  636. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0ax30pe._.js.map → 11mp_@anthropic-ai_sdk_0_jynr-._.js.map} +0 -0
  637. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0gn7vgs._.js.map → 11mp_@anthropic-ai_sdk_0aykesf._.js.map} +0 -0
  638. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0hye94a._.js.map → 11mp_@anthropic-ai_sdk_0br_1fc._.js.map} +0 -0
  639. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0ir5cgk._.js.map → 11mp_@anthropic-ai_sdk_0cd5lu7._.js.map} +0 -0
  640. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0je0_pa._.js.map → 11mp_@anthropic-ai_sdk_0ckxhy7._.js.map} +0 -0
  641. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0jfgh0o._.js.map → 11mp_@anthropic-ai_sdk_0e5qkuv._.js.map} +0 -0
  642. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0mha4x1._.js.map → 11mp_@anthropic-ai_sdk_0el8pm6._.js.map} +0 -0
  643. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0n__boa._.js.map → 11mp_@anthropic-ai_sdk_0i4w8fv._.js.map} +0 -0
  644. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0sqv26_._.js.map → 11mp_@anthropic-ai_sdk_0i7ckik._.js.map} +0 -0
  645. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0wnc6g-._.js.map → 11mp_@anthropic-ai_sdk_0l1p4c6._.js.map} +0 -0
  646. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_0xh0g59._.js.map → 11mp_@anthropic-ai_sdk_0m-xqs_._.js.map} +0 -0
  647. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1-5wyhj._.js.map → 11mp_@anthropic-ai_sdk_0nltdmf._.js.map} +0 -0
  648. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_13ahm3n._.js.map → 11mp_@anthropic-ai_sdk_0qxmzg8._.js.map} +0 -0
  649. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_13e6aq4._.js.map → 11mp_@anthropic-ai_sdk_0spr_aj._.js.map} +0 -0
  650. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_14eg0ld._.js.map → 11mp_@anthropic-ai_sdk_0th0pyh._.js.map} +0 -0
  651. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_15md1n2._.js.map → 11mp_@anthropic-ai_sdk_0x21fif._.js.map} +0 -0
  652. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_16av8b9._.js.map → 11mp_@anthropic-ai_sdk_1-7bj56._.js.map} +0 -0
  653. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_16hjhv1._.js.map → 11mp_@anthropic-ai_sdk_1-efoj1._.js.map} +0 -0
  654. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_16txvf7._.js.map → 11mp_@anthropic-ai_sdk_13vu693._.js.map} +0 -0
  655. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_198yu7d._.js.map → 11mp_@anthropic-ai_sdk_13w62gi._.js.map} +0 -0
  656. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1_9tfq3._.js.map → 11mp_@anthropic-ai_sdk_1887ce1._.js.map} +0 -0
  657. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1_izr2o._.js.map → 11mp_@anthropic-ai_sdk_1_jq3yb._.js.map} +0 -0
  658. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1fljcyg._.js.map → 11mp_@anthropic-ai_sdk_1agvp6h._.js.map} +0 -0
  659. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1lrt6ul._.js.map → 11mp_@anthropic-ai_sdk_1b1-3vt._.js.map} +0 -0
  660. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1nev_ee._.js.map → 11mp_@anthropic-ai_sdk_1ekldtb._.js.map} +0 -0
  661. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1pgoe2i._.js.map → 11mp_@anthropic-ai_sdk_1ezcndt._.js.map} +0 -0
  662. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1rgl7mu._.js.map → 11mp_@anthropic-ai_sdk_1gr-orf._.js.map} +0 -0
  663. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1slq49k._.js.map → 11mp_@anthropic-ai_sdk_1hf-884._.js.map} +0 -0
  664. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1t9bdf0._.js.map → 11mp_@anthropic-ai_sdk_1ndwnmb._.js.map} +0 -0
  665. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1u6qqm2._.js.map → 11mp_@anthropic-ai_sdk_1rdesfd._.js.map} +0 -0
  666. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1v7ygvz._.js.map → 11mp_@anthropic-ai_sdk_1s8h60-._.js.map} +0 -0
  667. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1wls8zc._.js.map → 11mp_@anthropic-ai_sdk_1tgk9wk._.js.map} +0 -0
  668. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_1ywboja._.js.map → 11mp_@anthropic-ai_sdk_1uugb45._.js.map} +0 -0
  669. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_00kwqu5._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_00nr0dy._.js.map} +0 -0
  670. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_01j2nrd._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_06kgcr0._.js.map} +0 -0
  671. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_05ybj3t._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_07kod-g._.js.map} +0 -0
  672. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0adt7jj._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0_va-1q._.js.map} +0 -0
  673. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0bnl14w._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0dr79hc._.js.map} +0 -0
  674. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0f557t9._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0ew4_uw._.js.map} +0 -0
  675. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_0ra6giw._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0iy714m._.js.map} +0 -0
  676. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_107cqfx._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0n6aq49._.js.map} +0 -0
  677. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1377sl6._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0ncvuil._.js.map} +0 -0
  678. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1_2hcok._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0vilstf._.js.map} +0 -0
  679. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1g--m6y._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0ybdfbv._.js.map} +0 -0
  680. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1geopi5._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0z31-c0._.js.map} +0 -0
  681. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1i11dte._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_0zu51ny._.js.map} +0 -0
  682. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1mj3_qk._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_13-fsm5._.js.map} +0 -0
  683. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1qgy210._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_13lk7wf._.js.map} +0 -0
  684. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1rkng9q._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1ao3e3l._.js.map} +0 -0
  685. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1vr8q8y._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1ck6z1z._.js.map} +0 -0
  686. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1x8b64g._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1dm3so9._.js.map} +0 -0
  687. /package/.next/server/chunks/{11mp_@anthropic-ai_sdk_index_mjs_1zhahf7._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1jxtz_6._.js.map} +0 -0
  688. /package/.next/server/chunks/{[root-of-the-server]__0hfyuhq._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1pdl5qg._.js.map} +0 -0
  689. /package/.next/server/chunks/{[root-of-the-server]__1tu85zx._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1tzpss1._.js.map} +0 -0
  690. /package/.next/server/chunks/{[root-of-the-server]__1xpp36t._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1x_0sf4._.js.map} +0 -0
  691. /package/.next/server/chunks/{_next-internal_server_app_api_backlinks_route_actions_1_58m09.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1x_fy5x._.js.map} +0 -0
  692. /package/.next/server/chunks/{ssr/0_nd_mermaid_dist_mermaid_core_mjs_027n2yl._.js.map → 11mp_@anthropic-ai_sdk_index_mjs_1xx8_-m._.js.map} +0 -0
  693. /package/.next/server/chunks/{ssr/1u84_katex_dist_katex_mjs_1kb5xea._.js.map → [root-of-the-server]__06ndlro._.js.map} +0 -0
  694. /package/.next/server/chunks/{[root-of-the-server]__0b2488c._.js.map → [root-of-the-server]__08v3p50._.js.map} +0 -0
  695. /package/.next/server/chunks/{[root-of-the-server]__0ikbk15._.js.map → [root-of-the-server]__0cxmrop._.js.map} +0 -0
  696. /package/.next/server/chunks/{[root-of-the-server]__1b448u7._.js.map → [root-of-the-server]__0hk-9ll._.js.map} +0 -0
  697. /package/.next/server/chunks/{[root-of-the-server]__16u25oa._.js.map → [root-of-the-server]__0i1yba1._.js.map} +0 -0
  698. /package/.next/server/chunks/{[root-of-the-server]__1jz98vb._.js.map → [root-of-the-server]__0pz59qo._.js.map} +0 -0
  699. /package/.next/server/chunks/{[root-of-the-server]__08yaps5._.js.map → [root-of-the-server]__0rikmqn._.js.map} +0 -0
  700. /package/.next/server/chunks/{[root-of-the-server]__008focd._.js.map → [root-of-the-server]__0usdydm._.js.map} +0 -0
  701. /package/.next/server/chunks/{[root-of-the-server]__1ssunti._.js.map → [root-of-the-server]__0wc_gnr._.js.map} +0 -0
  702. /package/.next/server/chunks/{[root-of-the-server]__1gvv2xp._.js.map → [root-of-the-server]__0xldguc._.js.map} +0 -0
  703. /package/.next/server/chunks/{ssr/node_modules__pnpm_14piqi4._.js.map → [root-of-the-server]__0zy73pu._.js.map} +0 -0
  704. /package/.next/server/chunks/{[root-of-the-server]__0m8hmg0._.js.map → [root-of-the-server]__11rp-qx._.js.map} +0 -0
  705. /package/.next/server/chunks/{[root-of-the-server]__0y5usoz._.js.map → [root-of-the-server]__1ef-hw_._.js.map} +0 -0
  706. /package/.next/server/chunks/{[root-of-the-server]__0qij7wy._.js.map → [root-of-the-server]__1qcy2l0._.js.map} +0 -0
  707. /package/.next/server/chunks/{[root-of-the-server]__0axugex._.js.map → [root-of-the-server]__1r67yrn._.js.map} +0 -0
  708. /package/.next/server/chunks/{[root-of-the-server]__03ogp2r._.js.map → [root-of-the-server]__1sn6-7a._.js.map} +0 -0
  709. /package/.next/server/chunks/{[root-of-the-server]__0x8wtot._.js.map → [root-of-the-server]__1wbho9e._.js.map} +0 -0
  710. /package/.next/server/chunks/{[root-of-the-server]__1z3tswg._.js.map → [root-of-the-server]__1yh-4vk._.js.map} +0 -0
  711. /package/.next/server/chunks/{[root-of-the-server]__0cbh1s-._.js.map → [root-of-the-server]__1zhd93r._.js.map} +0 -0
  712. /package/.next/server/chunks/{ssr/node_modules__pnpm_16u1vfb._.js.map → _next-internal_server_app_api_docs_graph_route_actions_1nzoqf-.js.map} +0 -0
  713. /package/.next/server/chunks/{ssr/node_modules__pnpm_189m48n._.js.map → _next-internal_server_app_api_docs_links_route_actions_1q-6jeg.js.map} +0 -0
  714. /package/.next/server/chunks/{ssr/node_modules__pnpm_1xeothw._.js.map → _next-internal_server_app_api_memory_entries_merge_route_actions_1rr-wwt.js.map} +0 -0
  715. /package/.next/server/chunks/ssr/{node_modules__pnpm_1min2jl._.js.map → node_modules__pnpm_035haet._.js.map} +0 -0
  716. /package/.next/server/chunks/ssr/{node_modules__pnpm_1uwkcin._.js.map → node_modules__pnpm_03an60e._.js.map} +0 -0
  717. /package/.next/server/chunks/ssr/{node_modules__pnpm_1q_hhr3._.js.map → node_modules__pnpm_03mp7qw._.js.map} +0 -0
  718. /package/.next/server/chunks/ssr/{node_modules__pnpm_0ctisl0._.js.map → node_modules__pnpm_03mpmzx._.js.map} +0 -0
  719. /package/.next/server/chunks/ssr/{node_modules__pnpm_0fwp8jm._.js.map → node_modules__pnpm_06_8fr8._.js.map} +0 -0
  720. /package/.next/server/chunks/ssr/{node_modules__pnpm_17i6z2d._.js.map → node_modules__pnpm_09nd7ia._.js.map} +0 -0
  721. /package/.next/server/chunks/ssr/{node_modules__pnpm_192f222._.js.map → node_modules__pnpm_0_e05ka._.js.map} +0 -0
  722. /package/.next/server/chunks/ssr/{node_modules__pnpm_1ygal0c._.js.map → node_modules__pnpm_0iu4132._.js.map} +0 -0
  723. /package/.next/server/chunks/ssr/{node_modules__pnpm_0kpu0-2._.js.map → node_modules__pnpm_0jampur._.js.map} +0 -0
  724. /package/.next/server/chunks/ssr/{node_modules__pnpm_1aa37e1._.js.map → node_modules__pnpm_0lkvbt-._.js.map} +0 -0
  725. /package/.next/server/chunks/ssr/{node_modules__pnpm_0vry74x._.js.map → node_modules__pnpm_0mqeoh-._.js.map} +0 -0
  726. /package/.next/server/chunks/ssr/{node_modules__pnpm_06d-fdo._.js.map → node_modules__pnpm_0oyo3yo._.js.map} +0 -0
  727. /package/.next/server/chunks/ssr/{node_modules__pnpm_1qp_jvj._.js.map → node_modules__pnpm_0rq9x9q._.js.map} +0 -0
  728. /package/.next/server/chunks/ssr/{node_modules__pnpm_01bjcv9._.js.map → node_modules__pnpm_0tn5pg3._.js.map} +0 -0
  729. /package/.next/server/chunks/ssr/{node_modules__pnpm_0ycbjbd._.js.map → node_modules__pnpm_0x5wj-4._.js.map} +0 -0
  730. /package/.next/server/chunks/ssr/{node_modules__pnpm_1fn3ejy._.js.map → node_modules__pnpm_139-v1i._.js.map} +0 -0
  731. /package/.next/server/chunks/ssr/{node_modules__pnpm_1txccoj._.js.map → node_modules__pnpm_1i_chik._.js.map} +0 -0
  732. /package/.next/server/chunks/ssr/{node_modules__pnpm_1qmkxyo._.js.map → node_modules__pnpm_1jgju12._.js.map} +0 -0
  733. /package/.next/server/chunks/ssr/{node_modules__pnpm_1ssjj4u._.js.map → node_modules__pnpm_1n9oeu0._.js.map} +0 -0
  734. /package/.next/server/chunks/ssr/{node_modules__pnpm_1-76qxg._.js.map → node_modules__pnpm_1ws3ez9._.js.map} +0 -0
  735. /package/.next/server/chunks/ssr/{node_modules__pnpm_1-r94f7._.js.map → node_modules__pnpm_1ydeqw6._.js.map} +0 -0
  736. /package/.next/server/chunks/ssr/{node_modules__pnpm_1f440kx._.js.map → node_modules__pnpm_1zme4rg._.js.map} +0 -0
  737. /package/.next/server/chunks/ssr/{node_modules__pnpm_03qrzdb._.js.map → node_modules__pnpm_1zum4yd._.js.map} +0 -0
  738. /package/.next/server/chunks/ssr/{node_modules__pnpm_1a48_nl._.js.map → node_modules__pnpm_2045l51._.js.map} +0 -0
  739. /package/.next/static/{Q29Tn_NjyVms0d3pKn4Yx → 5hNes2Kijr5IvUPPw-ez9}/_buildManifest.js +0 -0
  740. /package/.next/static/{Q29Tn_NjyVms0d3pKn4Yx → 5hNes2Kijr5IvUPPw-ez9}/_clientMiddlewareManifest.js +0 -0
  741. /package/.next/static/{Q29Tn_NjyVms0d3pKn4Yx → 5hNes2Kijr5IvUPPw-ez9}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/app/%28app%29/graph/page.tsx","../../../../src/components/graph/DocGraph.tsx","../../../../src/components/graph/force-layout.ts"],"sourcesContent":["\"use client\"\n\nimport { Suspense } from \"react\"\nimport { DocGraph } from \"@/components/graph/DocGraph\"\n\nexport default function GraphPage() {\n // main has no fixed height; the canvas needs one (viewport minus the h-12 AppHeader)\n return (\n <div className=\"flex h-[calc(100svh-3rem)] flex-col\">\n <Suspense>\n <DocGraph />\n </Suspense>\n </div>\n )\n}\n","\"use client\"\n\nimport { memo, useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from \"react\"\nimport { useRouter, useSearchParams } from \"next/navigation\"\nimport { Background, BackgroundVariant, ControlButton, Controls, getViewportForBounds, Handle, Position, ReactFlow, type Edge, type Node, type NodeProps, type ReactFlowInstance } from \"@xyflow/react\"\nimport \"@xyflow/react/dist/style.css\"\nimport { Info, Search, Unlink, X } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\nimport { useApp } from \"@/context/AppContext\"\nimport { Button } from \"@/components/ui/button\"\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger } from \"@/components/ui/dropdown-menu\"\nimport { KIND_ICON, useOpenNode } from \"@/components/memory/EntryRelated\"\nimport { fetchLinkJson, useLinkGeneration } from \"@/components/docs/useDocLinks\"\nimport { GRAPH_DEFAULT_KINDS, touchedPaths, type BrokenLink, type DocGraph as Graph, type DocNode, type DocNodeKind, type TouchEvent } from \"@/lib/doc-links\"\nimport { STATUS_COLOR_CLASS, StatusChip } from \"@/components/shared/StatusIcon\"\nimport { statusDefIn, useStatusDefs } from \"@/components/shared/status-defs\"\nimport { OwnerChip } from \"@/components/shared/OwnerChip\"\nimport { AgentDot } from \"@/components/chat/AgentMark\"\nimport type { StatusDef } from \"@/lib/statuses\"\nimport { GRAPH_KEYS } from \"@/lib/shortcuts\"\nimport { forceLayout, graphChanges, hiddenLabels, neighbourhoodIds, SPRING, springStep, stepFocus, type ArrowKey, type LabelBox, type SpringWorld } from \"./force-layout\"\n\n// delay: the selection ripple (depth-2 lights after depth-1); quick: no selection, so state changes run on fast.\n// enter / exit: a node that appears / disappears during a relayout tween. unfold: the entrance offset (dot starts\n// there, relative to its layout point) and its start delay.\ntype DotData = { node: DocNode; size: number; box: number; dim: boolean; chip: boolean; active: boolean; match: boolean; changed: boolean; hue: string; hollow: boolean; recent: boolean; hideLabel: boolean; delay: number; quick: boolean; enter?: boolean; exit?: boolean; unfold?: { x: number; y: number; wait: number } }\ntype DotNode = Node<DotData, \"dot\">\ntype LinkEdge = Edge\ntype GraphState = { node: string | null; focus: 0 | 1 | 2; kinds: DocNodeKind[]; q: string; recent: boolean }\ntype XY = { x: number; y: number }\n/** A relayout in flight: centres it started from, where it is now, where it goes, and the nodes it removed. */\ntype Tween = { from: Record<string, XY>; at: Record<string, XY>; to: Record<string, XY>; gone: DotNode[] }\n\nconst KINDS: { kind: DocNodeKind; label: string }[] = [\n { kind: \"doc\", label: \"Docs\" },\n { kind: \"adr\", label: \"ADRs\" },\n { kind: \"task\", label: \"Tasks\" },\n { kind: \"epic\", label: \"Epics\" },\n { kind: \"entry\", label: \"Entries\" },\n]\nconst DEFAULT_KINDS: DocNodeKind[] = [...GRAPH_DEFAULT_KINDS]\n// React Flow chrome in the app's tokens: Controls read as ghost icon buttons\nconst FLOW_STYLE = {\n \"--xy-background-color\": \"var(--color-bg)\",\n \"--xy-controls-box-shadow\": \"none\",\n \"--xy-controls-button-background-color\": \"transparent\",\n \"--xy-controls-button-background-color-hover\": \"var(--color-surface2)\",\n \"--xy-controls-button-color\": \"var(--color-muted)\",\n \"--xy-controls-button-color-hover\": \"var(--color-txt)\",\n \"--xy-controls-button-border-color\": \"transparent\",\n} as React.CSSProperties\nconst PRO_OPTIONS = { hideAttribution: true }\n// edges clear 3:1 on the page in both themes (border2 was 1.46:1); measured, see T103\nconst EDGE = \"color-mix(in srgb, var(--color-muted) 80%, var(--color-bg))\"\n// a label is 11px sans (16.5px line box) under the dot (mt-1), at most max-w-48 (12rem) wide; ids are 10px mono + mr-1\nconst LABEL_H = 17\nconst LABEL_GAP = 4\n// ponytail: above this many nodes only the ones on screen render (same knob as MemoryGraph)\nconst VIRTUALIZE_OVER = 150\n// a fitted big graph is unreadable; fit no further out than this and let the user pan. 0.5 is also the floor that keeps\n// every hit area ≥ 24 screen px (HIT / zoom, capped at HIT_MAX)\nconst FIT_MIN_ZOOM = 0.5\nconst FIT_OPTIONS = { padding: 0.1, minZoom: FIT_MIN_ZOOM, maxZoom: 1 }\n// React Flow's fit-view glyph (not exported), for our own Fit button\nconst FIT_ICON = \"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z\"\n// how long a live update marks the nodes it touched (data-changed, for the update flash)\nconst CHANGED_MS = 1500\nconst EMPTY_GRAPH: Graph = { nodes: [], edges: [], broken: [], stale: [], targets: {} }\nconst NONE = new Set<string>()\nconst SEP = \"\\u0000\"\n// A label shows only while it renders ≥ LABEL_PX on screen (11px × zoom). Below that only the selected file, search\n// matches and the lit neighbourhood keep theirs, counter-scaled back to LABEL_PX on a surface chip.\nconst LABEL_FONT = 11\nconst LABEL_PX = 9\nconst LABEL_MIN_ZOOM = LABEL_PX / LABEL_FONT\n// the chip's scale for the collision pass, in quarter steps so a zoom gesture re-runs it only a few times\nconst labelScaleOf = (zoom: number) => (zoom >= LABEL_MIN_ZOOM ? 1 : Math.ceil((LABEL_MIN_ZOOM / zoom) * 4) / 4)\n// zoomed out with nothing selected or searched, this many files (by rank, then degree) keep a chip so the map is named\nconst TOP_LABELS = 10\n// a selection with more visible neighbours than this, zoomed out, forces only its own label; the neighbours compete\nconst CROWD = 8\n// a chip's px-1 on both sides\nconst CHIP_PAD = 8\nconst CENTER = { left: \"50%\", top: \"50%\", transform: \"translate(-50%, -50%)\" }\n// every node is at least this big to hit (WCAG 2.5.8) in *screen* px, however small its dot or the zoom: an invisible\n// pad of HIT / zoom flow px, capped at the layout's minimum node distance so neighbours never steal each other's clicks\nconst HIT = 24\nconst HIT_MAX = 48\n// search framing: half a typical label's width beside the outermost matches\nconst MATCH_PAD_X = 72\nconst HIT_PAD = `min(${HIT_MAX}px, max(100%, calc(${HIT}px / var(--graph-zoom, 1))))`\nconst KIND_NAME: Record<DocNodeKind, string> = { doc: \"Doc\", adr: \"ADR\", task: \"Task\", epic: \"Epic\", entry: \"Entry\" }\n// \"Recent\": files the activity log says an agent or a human changed in this window (T110)\nconst RECENT_MS = 24 * 60 * 60 * 1000\n// ponytail: the newest 1000 events cover a day of agent work here; page the log if a busy day outgrows it\nconst ACTIVITY_LIMIT = 1000\n// the selection reads without hue (the accent can match a status): accent ring, a bg gap, then a hairline in text colour\nconst SELECTED_RING = \"ring-2 ring-accent ring-offset-2 ring-offset-bg shadow-[0_0_0_5px_var(--color-bg),0_0_0_6px_var(--color-txt)]\"\n// a search match: a dashed accent ring, so a match never reads as the selection\nconst MATCH_RING = \"outline-1 outline-offset-2 outline-dashed outline-accent\"\n\n/** Settled (done / cancelled, custom ones too) draws hollow Pencil Grey; active statuses keep their hue; no status = grey. */\nfunction dotStyle(defs: StatusDef[], status: string | undefined): { hue: string; hollow: boolean } {\n if (!status) return { hue: \"text-muted\", hollow: false }\n const def = statusDefIn(defs, status)\n const hollow = def.category === \"done\" || def.category === \"cancelled\"\n return { hue: hollow ? \"text-muted\" : STATUS_COLOR_CLASS[def.color].text, hollow }\n}\n// relayout: positions and camera glide together (the roadmap Arrange tween is 420ms too)\nconst TWEEN_MS = 420\n// ease-out-quart, close to --ease-out-soft; dots and camera share it so they move as one\nconst easeOut = (k: number) => 1 - Math.pow(1 - k, 4)\n// the selection ripple: depth-2 neighbours light this long after depth-1\nconst RIPPLE_MS = 60\nconst EXIT_STYLE = { pointerEvents: \"none\" } as const\n// Entrance (mount and Fit): every dot unfolds from near the centre to its layout point, the best-linked file's\n// neighbourhood first, and the edges fade in as the dots land. Pure CSS on the compositor (graph-node-unfold), so no\n// React render per frame: the old frame-by-frame playback re-rendered every node and edge 60 times a second and stuttered.\nconst UNFOLD_FROM = 0.85 // a dot starts this share of the way back towards the centre\nconst UNFOLD_STAGGER_MS = 30\nconst UNFOLD_STAGGER_CAP = 240\nconst EDGE_IN_AFTER_MS = 420\n// a file with no path to the hub waits like one 8 hops out\nconst waitOf = (h: number | undefined) => Math.min((h ?? 8) * UNFOLD_STAGGER_MS, UNFOLD_STAGGER_CAP)\nconst UNFOLD_MS = 900 + UNFOLD_STAGGER_CAP + 520 // dots + stagger + edge fade; then data-unfold comes off the wrapper\n// ponytail: transforms only, measured smooth at 192 dots / 687 edges; skip above this if low-end machines stutter\nconst UNFOLD_MAX_NODES = 400\n// hover / keyboard focus: linked dots lean this far toward the one under the pointer\nconst MAGNET_PX = 8\n// a wiggle under this many px is still a click; more is a drag\nconst DRAG_PX = 4\n// a hovered file's edges: one step brighter than EDGE, still neutral (accent stays for selection)\nconst EDGE_HOVER = \"var(--color-muted)\"\nconst still = () => typeof window !== \"undefined\" && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\nconst ARROWS = new Set([\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"])\nconst HINT = \"Tab moves between files, then the unlinked ones below the map. Enter selects a file; Enter again or O opens it. Arrow keys move to the nearest linked file. Escape clears the search, then the selection. Slash jumps to search; Enter there frames every match, then steps through them (Shift+Enter goes back).\"\nconst ARIA_LABELS = { \"node.a11yDescription.default\": HINT }\n// keyboard hints, neutral like the ? sheet (never accent)\nconst KBD = \"rounded-sm border border-border2 bg-surface2 px-1 py-0.5 font-mono text-[10px] leading-none text-txt\"\n\nfunction subscribeTheme(cb: () => void) {\n const mo = new MutationObserver(cb)\n mo.observe(document.documentElement, { attributes: true, attributeFilter: [\"class\"] })\n return () => mo.disconnect()\n}\n\nfunction readState(p: URLSearchParams): GraphState {\n const f = p.get(\"focus\")\n const kinds = p.get(\"kinds\")?.split(\",\").filter((k): k is DocNodeKind => KINDS.some((x) => x.kind === k))\n return { node: p.get(\"node\"), focus: f === \"1\" ? 1 : f === \"2\" ? 2 : 0, kinds: kinds ?? DEFAULT_KINDS, q: p.get(\"q\") ?? \"\", recent: p.get(\"recent\") === \"1\" }\n}\n\n/** Native replaceState syncs useSearchParams without a server round trip (as on /board). */\nfunction writeState(s: GraphState) {\n const p = new URLSearchParams(window.location.search)\n const set = (k: string, v: string | null) => (v ? p.set(k, v) : p.delete(k))\n set(\"node\", s.node)\n set(\"focus\", s.node && s.focus ? String(s.focus) : null)\n const kinds = KINDS.map((k) => k.kind).filter((k) => s.kinds.includes(k))\n set(\"kinds\", kinds.join(\",\") === DEFAULT_KINDS.join(\",\") ? null : kinds.join(\",\") || \"none\")\n set(\"q\", s.q || null)\n set(\"recent\", s.recent ? \"1\" : null)\n window.history.replaceState(null, \"\", p.size ? `${window.location.pathname}?${p}` : window.location.pathname)\n}\n\n/** Label width in px as DotView renders it (canvas measure in the page's fonts), capped at max-w-48. */\nfunction labelMeasurer(): (n: DocNode) => number {\n const ctx = document.createElement(\"canvas\").getContext(\"2d\")\n const css = getComputedStyle(document.documentElement)\n const max = 12 * parseFloat(css.fontSize)\n const width = (text: string, font: string) => {\n if (!ctx) return text.length * 6.5\n ctx.font = font\n return ctx.measureText(text).width\n }\n const sans = `11px ${css.getPropertyValue(\"--font-sans\")}`\n const mono = `10px ${css.getPropertyValue(\"--font-mono\")}`\n return (n) => Math.min(max, width(n.label, sans) + (n.kind === \"doc\" ? 0 : width(n.id, mono) + 4))\n}\n\n/**\n * Kind by shape, drawn in currentColor: doc circle, ADR square, epic diamond, task (small) circle, entry ring.\n * `hollow` (done / cancelled) draws the same shape as an outline, inset so the stroke stays inside the box.\n */\nfunction Shape({ kind, size, hollow, className }: { kind: DocNodeKind; size: number; hollow?: boolean; className?: string }) {\n // the stroke stays ≥ 1.25 screen px on the smallest dot (a 6px task)\n const w = Math.max(1.6, 12.5 / size)\n const paint = hollow ? { fill: \"none\", stroke: \"currentColor\", strokeWidth: w } : { fill: \"currentColor\" }\n const i = hollow ? w / 2 : 0\n return (\n <svg width={size} height={size} viewBox=\"0 0 10 10\" aria-hidden className={cn(\"shrink-0\", className)}>\n {kind === \"adr\" ? <rect x={0.75 + i} y={0.75 + i} width={8.5 - 2 * i} height={8.5 - 2 * i} rx=\"1\" {...paint} />\n : kind === \"epic\" ? <path d={hollow ? `M5 ${i * 1.42}L${10 - i * 1.42} 5 5 ${10 - i * 1.42}${i * 1.42} 5Z` : \"M5 0 10 5 5 10 0 5Z\"} strokeLinejoin=\"round\" {...paint} />\n : kind === \"entry\" ? <circle cx=\"5\" cy=\"5\" r=\"3.9\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" />\n : <circle cx=\"5\" cy=\"5\" r={5 - i} {...paint} />}\n </svg>\n )\n}\n\n/** A shape sized by degree, centred on its layout point; the label hangs below and never takes clicks. */\nconst DotView = memo(function DotView({ data }: NodeProps<DotNode>) {\n const { node, size, box, dim, chip, active, match, changed, hue, hollow, recent, hideLabel, delay, quick, enter, exit } = data\n // a dot entering or leaving in a relayout runs node-in / node-out, without the entrance's delay\n const unfold = enter || exit ? undefined : data.unfold\n // The React Flow wrapper (.react-flow__node) takes focus; the halo goes on the dot and the label\n return (\n <div\n title={node.path}\n data-changed={changed || undefined}\n style={{ width: box, height: box, ...(unfold && ({ \"--ux\": `${unfold.x}px`, \"--uy\": `${unfold.y}px`, animationDelay: `${unfold.wait}ms` } as React.CSSProperties)) }}\n className={cn(\"relative flex items-center justify-center\", enter && \"animate-node-in\", exit && \"animate-node-out\", unfold && \"graph-node-unfold\")}\n >\n {/* the hit pad: ≥ HIT screen px at any zoom ≥ FIT_MIN_ZOOM; clicks on it bubble to the node */}\n <span data-hit aria-hidden style={{ width: HIT_PAD, height: HIT_PAD }} className=\"absolute top-1/2 left-1/2 -translate-1/2\" />\n {/* live ping: two rings spread from a dot an update touched (outside the dot, so dimming doesn't eat them) */}\n {changed && [0, 1].map((i) => <span key={i} aria-hidden style={{ width: size, height: size }} className={cn(\"graph-ping\", i && \"graph-ping-2\")} />)}\n <div\n style={{ width: size, height: size, transitionDelay: `${delay}ms` }}\n className={cn(\n \"relative rounded-full transition-[opacity,box-shadow,outline-color] ease-out-soft\",\n quick ? \"duration-(--duration-fast)\" : \"duration-(--duration-base)\",\n hue,\n dim && \"opacity-25\",\n active ? SELECTED_RING : match && MATCH_RING,\n \"in-[[data-id]:focus-visible]:opacity-100\",\n // focus halo; on the selected node it goes outside the double ring so the text-colour hairline survives\n // (Enter selects the focused node: the keyboard path must keep selection hue-independent)\n active\n ? \"in-[[data-id]:focus-visible]:shadow-[0_0_0_5px_var(--color-bg),0_0_0_6px_var(--color-txt),0_0_0_9px_rgb(var(--rgb-accent)/0.2)]\"\n : \"in-[[data-id]:focus-visible]:ring-2 in-[[data-id]:focus-visible]:ring-accent/60 in-[[data-id]:focus-visible]:shadow-[0_0_0_6px_rgb(var(--rgb-accent)/0.15)]\",\n )}\n >\n <Shape kind={node.kind} size={size} hollow={hollow} className=\"block\" />\n {/* changed in the last 24h: a small accent notch on the dot's shoulder, cut out of the dot by a bg ring */}\n {recent && <span aria-hidden className=\"absolute -top-0.5 -right-0.5 size-1.5 rounded-full bg-accent ring-1 ring-bg\" />}\n <Handle type=\"source\" position={Position.Top} isConnectable={false} style={CENTER} className=\"opacity-0\" />\n <Handle type=\"target\" position={Position.Top} isConnectable={false} style={CENTER} className=\"opacity-0\" />\n <span\n data-label\n className={cn(\n \"pointer-events-none absolute top-full left-1/2 mt-1 max-w-48 origin-top -translate-x-1/2 truncate rounded-sm text-[11px] whitespace-nowrap\",\n // the zoom threshold and collisions fade labels rather than snapping them\n \"transition-[opacity,background-color] duration-(--duration-base) ease-out-soft\",\n active || match ? \"font-medium text-txt\" : \"text-muted\",\n // below the readable zoom only chip labels show (the selection, matches, the lit set, the overview's top files):\n // scaled back up to LABEL_PX on a surface chip\n chip\n ? \"group-data-[far=true]/graph:scale-(--label-k) group-data-[far=true]/graph:bg-surface group-data-[far=true]/graph:px-1\"\n : \"group-data-[far=true]/graph:opacity-0\",\n // at full zoom a bg halo, so an edge passing under the text doesn't strike through it\n \"group-data-[far=false]/graph:[text-shadow:0_0_2px_var(--color-bg),0_0_3px_var(--color-bg)]\",\n hideLabel && \"opacity-0\",\n // a keyboard-focused file's label shows too, readable at any zoom\n \"group-data-[far=true]/graph:in-[[data-id]:focus-visible]:scale-(--label-k)\",\n \"in-[[data-id]:focus-visible]:opacity-100! in-[[data-id]:focus-visible]:bg-surface in-[[data-id]:focus-visible]:px-1 in-[[data-id]:focus-visible]:text-txt in-[[data-id]:focus-visible]:ring-1 in-[[data-id]:focus-visible]:ring-accent/60 in-[[data-id]:focus-visible]:shadow-[0_0_0_3px_rgb(var(--rgb-accent)/0.15)]\",\n )}\n >\n {node.kind !== \"doc\" && <span className=\"mr-1 font-mono text-[10px]\">{node.id}</span>}\n {node.label}\n </span>\n </div>\n </div>\n )\n})\nconst nodeTypes = { dot: DotView }\n\n\n/**\n * Every .md file in the project and the links between them (R056), like Obsidian's graph view. Deterministic\n * force layout per (visible nodes, edges); selection only restyles. The URL holds the state (?node&focus&kinds&q).\n */\nexport function DocGraph() {\n const { rootParam } = useApp()\n const statusDefs = useStatusDefs()\n const router = useRouter()\n const open = useOpenNode((id) => router.push(`/memory?entry=${encodeURIComponent(id)}`))\n const params = useSearchParams()\n const key = params.toString()\n const state = useMemo(() => readState(new URLSearchParams(key)), [key])\n const update = useCallback((patch: Partial<GraphState>) => writeState({ ...readState(new URLSearchParams(window.location.search)), ...patch }), [])\n\n const [graph, setGraph] = useState<Graph | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [retry, setRetry] = useState(0)\n // node paths the last live refresh touched (T105 flashes them); cleared after CHANGED_MS\n const [changed, setChanged] = useState<Set<string>>(NONE)\n const last = useRef<{ root: string; graph: Graph } | null>(null)\n const gen = useLinkGeneration()\n const [rf, setRf] = useState<ReactFlowInstance<DotNode, LinkEdge> | null>(null)\n // the label chip scale bucket (1 = labels readable as drawn); the exact zoom goes to CSS vars, never to React state\n const [labelK, setLabelK] = useState(1)\n const [legendOpen, setLegendOpen] = useState(false)\n // the last selected file: the card keeps showing it while it fades out\n const [cardNode, setCardNode] = useState<DocNode | undefined>(undefined)\n const rootRef = useRef<HTMLDivElement>(null)\n const isDark = useSyncExternalStore(subscribeTheme, () => document.documentElement.classList.contains(\"dark\"), () => true)\n\n // One request per load / SSE burst: fetchLinkJson shares it per generation (strict mode, other link hooks)\n useEffect(() => {\n let live = true\n fetchLinkJson<Graph>(`/api/docs/graph${rootParam}`)\n .then((g) => {\n if (!live) return\n const next = g.nodes ? g : EMPTY_GRAPH\n const prev = last.current?.root === rootParam ? last.current.graph : null\n last.current = { root: rootParam, graph: next }\n const diff = graphChanges(prev, next)\n setGraph(next)\n setError(null)\n if (diff.size) setChanged(diff)\n })\n .catch((e) => {\n console.warn(\"Loading the doc graph failed\", e)\n if (live) setError(e instanceof Error ? e.message : String(e))\n })\n return () => { live = false }\n }, [rootParam, gen, retry])\n\n // The activity log, for \"Recent\": refetched with the graph (task moves and doc edits bump the same generation)\n const [activity, setActivity] = useState<{ events: TouchEvent[]; at: number } | null>(null)\n useEffect(() => {\n let live = true\n fetchLinkJson<TouchEvent[]>(`/api/activity${rootParam}&limit=${ACTIVITY_LIMIT}`)\n .then((events) => { if (live) setActivity({ events: Array.isArray(events) ? events : [], at: Date.now() }) })\n .catch((e) => console.warn(\"Loading the activity log for Recent failed\", e))\n return () => { live = false }\n }, [rootParam, gen])\n\n useEffect(() => {\n if (!changed.size) return\n const t = setTimeout(() => setChanged(NONE), CHANGED_MS)\n return () => clearTimeout(t)\n }, [changed])\n\n // Edges are keyed by path (a task's node id is T093, its edges use the file path), so everything here is.\n const byPath = useMemo(() => new Map((graph?.nodes ?? []).map((n) => [n.path, n])), [graph])\n // files an agent or a human changed in the last 24h (every kind, so the chip can turn their kinds on)\n const touched = useMemo(\n () => (graph && activity ? touchedPaths(activity.events, graph.nodes, activity.at - RECENT_MS) : NONE),\n [graph, activity],\n )\n // the legend's statuses: the ones on screen, in the project's order\n const legendStatuses = useMemo(() => {\n const ids = new Set<string>()\n for (const n of graph?.nodes ?? []) if (n.status && state.kinds.includes(n.kind)) ids.add(statusDefIn(statusDefs, n.status).id)\n return statusDefs.filter((d) => ids.has(d.id))\n }, [graph, state.kinds, statusDefs])\n const counts = useMemo(() => {\n const c: Partial<Record<DocNodeKind, number>> = {}\n for (const n of graph?.nodes ?? []) c[n.kind] = (c[n.kind] ?? 0) + 1\n return c\n }, [graph])\n\n const selected = state.node && byPath.has(state.node) && state.kinds.includes(byPath.get(state.node)!.kind) ? state.node : null\n const focusRoot = selected && state.focus ? selected : null\n\n // What's on screen: the kinds that are on, cut to the focus neighbourhood. Doesn't depend on plain selection.\n const visible = useMemo(() => {\n if (!graph) return null\n const kept = new Set(graph.nodes.filter((n) => state.kinds.includes(n.kind)).map((n) => n.path))\n let edges = dedupe(graph.edges.filter((e) => e.from !== e.to && kept.has(e.from) && kept.has(e.to)))\n if (focusRoot && state.focus) {\n const near = neighbourhoodIds(edges, focusRoot, state.focus)\n for (const p of kept) if (!near.has(p)) kept.delete(p)\n edges = edges.filter((e) => kept.has(e.from) && kept.has(e.to))\n }\n return { paths: [...kept], edges }\n }, [graph, state.kinds, focusRoot, state.focus])\n\n // Unique linked files per visible node (arrow keys, link counts) and the tab order: by label, then path\n const adj = useMemo(() => {\n const m = new Map<string, Set<string>>()\n for (const e of visible?.edges ?? []) {\n for (const [a, b] of [[e.from, e.to], [e.to, e.from]]) m.set(a, (m.get(a) ?? new Set()).add(b))\n }\n return m\n }, [visible])\n // Hops from the best-linked file: the entrance order for dots and edges\n const hops = useMemo(() => {\n const hub = [...adj].reduce<[string, number] | null>((best, [p, s]) => (!best || s.size > best[1] ? [p, s.size] : best), null)?.[0]\n const out = new Map<string, number>(hub ? [[hub, 0]] : [])\n for (let frontier = hub ? [hub] : [], d = 1; frontier.length; d++) {\n const next: string[] = []\n for (const p of frontier) for (const q of adj.get(p) ?? []) if (!out.has(q)) { out.set(q, d); next.push(q) }\n frontier = next\n }\n return out\n }, [adj])\n const order = useMemo(\n () => (visible?.paths ?? []).slice().sort((a, b) => (byPath.get(a)?.label ?? a).localeCompare(byPath.get(b)?.label ?? b) || a.localeCompare(b)),\n [visible, byPath],\n )\n\n // Layout is keyed by the sorted id and edge sets, not object identity: a refresh with the same links keeps every\n // position (a task status change on its own never moves a dot)\n const idsKey = useMemo(() => (visible?.paths ?? []).slice().sort().join(SEP), [visible])\n const edgesKey = useMemo(() => (visible?.edges ?? []).map((e) => `${e.from}${SEP}${e.to}`).sort().join(\"\\n\"), [visible])\n const layoutInput = useMemo(() => ({\n nodes: idsKey ? idsKey.split(SEP).map((id) => ({ id })) : [],\n edges: edgesKey ? edgesKey.split(\"\\n\").map((k) => { const [from, to] = k.split(SEP); return { from, to } }) : [],\n }), [idsKey, edgesKey])\n // only linked files get a position; the rest (no visible link) sit on the Unlinked shelf, so they never stretch the fit\n const pos = useMemo(() => forceLayout(layoutInput.nodes, layoutInput.edges), [layoutInput])\n const flowOrder = useMemo(() => order.filter((p) => pos[p]), [order, pos])\n const unlinked = useMemo(() => order.filter((p) => !pos[p]), [order, pos])\n\n // Entrance on mount and on Fit (never on a live refresh). Every node and edge always carries its unfold offset and\n // delay (inert CSS); a run is only data-unfold on the wrapper, set and cleared through the DOM. Toggling the classes\n // through React re-rendered all 687 edges at the end (a 115ms task on all kinds). a / b alternate so Fit restarts it.\n const unfoldRun = useRef({ timer: 0, b: false })\n const endUnfold = useCallback(() => {\n clearTimeout(unfoldRun.current.timer)\n rootRef.current?.removeAttribute(\"data-unfold\")\n }, [])\n const unfolding = () => !!rootRef.current?.hasAttribute(\"data-unfold\")\n const unfold = useCallback(() => {\n if (still() || layoutInput.nodes.length > UNFOLD_MAX_NODES) return\n const run = unfoldRun.current\n run.b = !run.b\n clearTimeout(run.timer)\n rootRef.current?.setAttribute(\"data-unfold\", run.b ? \"b\" : \"a\")\n // off once it's over, so dots React Flow mounts later (virtualized pans, relayout enters) don't replay it\n run.timer = window.setTimeout(endUnfold, UNFOLD_MS)\n }, [layoutInput, endUnfold])\n useEffect(() => endUnfold, [endUnfold])\n\n // Fit on first load, on a filter / focus change, or when the visible set grows or shrinks; never once the user\n // has panned or zoomed (until the filter / focus changes or they press Fit)\n const userMoved = useRef(false)\n /** The exact zoom to CSS (hit pads, label chips); the coarse label bucket to state, for the collision pass. */\n const applyZoom = useCallback((zoom: number) => {\n const el = rootRef.current\n el?.style.setProperty(\"--graph-zoom\", String(zoom))\n el?.style.setProperty(\"--label-k\", String(Math.max(1, LABEL_MIN_ZOOM / zoom)))\n setLabelK(labelScaleOf(zoom))\n }, [])\n // the canvas stays invisible until the first fit lands, so the unfold starts from the final camera, not a jump\n const [veiled, setVeiled] = useState(true)\n const firstFit = useRef(true)\n const viewKey = `${state.kinds.join(\",\")}|${focusRoot ?? \"\"}|${focusRoot ? state.focus : 0}`\n useEffect(() => { userMoved.current = false }, [viewKey])\n /** The camera that fits the layout points. The mount fit and the Fit button share it: React Flow's own fitView\n * frames the node boxes, a slightly different zoom, so the first Fit re-ran the label pass during the entrance. */\n const layoutViewport = useCallback(() => {\n const el = rootRef.current?.querySelector<HTMLElement>(\".react-flow\")\n const pts = Object.values(pos)\n if (!el || !pts.length) return null\n const xs = pts.map((p) => p.x), ys = pts.map((p) => p.y)\n const x = Math.min(...xs) - HIT, y = Math.min(...ys) - HIT\n const bounds = { x, y, width: Math.max(...xs) + HIT - x, height: Math.max(...ys) + HIT - y }\n return getViewportForBounds(bounds, el.clientWidth, el.clientHeight, FIT_MIN_ZOOM, FIT_OPTIONS.maxZoom, FIT_OPTIONS.padding)\n }, [pos])\n // Fit: the same camera as the mount fit, set at once; the entrance starts a task later, after any label pass a\n // zoom change renders (the user had zoomed), so the two long tasks never stack\n const fit = () => {\n userMoved.current = false\n const vp = layoutViewport()\n if (!rf || !vp) return\n applyZoom(vp.zoom)\n void rf.setViewport(vp, { duration: 0 })\n setTimeout(unfold, 0)\n }\n // Fits the *target* layout, so the camera glides alongside the position tween instead of after a jump\n useEffect(() => {\n if (!rf || userMoved.current) return\n const id = requestAnimationFrame(() => {\n const vp = layoutViewport()\n if (!vp) return setVeiled(false)\n const first = firstFit.current\n firstFit.current = false\n applyZoom(vp.zoom)\n void rf.setViewport(vp, { duration: first || still() ? 0 : TWEEN_MS, ease: easeOut })\n // the label pass for the fitted zoom renders in this frame; the veil and the entrance start in a later one, so\n // neither long task stacks on the other\n if (first) setTimeout(() => { setVeiled(false); unfold() }, 0)\n })\n return () => cancelAnimationFrame(id)\n }, [rf, viewKey, layoutViewport, unfold, applyZoom])\n\n const q = state.q.trim().toLowerCase()\n // Label and id first (a doc's id is its path, so it doesn't count); the path only when the query looks like one (\"/\" or\n // \".\") or names nothing, so a folder word like \"roadmap\" doesn't light a whole folder\n const matches = useMemo(() => {\n if (!q) return []\n const has = (p: string, withPath: boolean) => {\n const n = byPath.get(p)\n return !!n && (n.label.toLowerCase().includes(q) || (n.kind !== \"doc\" && n.id.toLowerCase().includes(q)) || (withPath && n.path.toLowerCase().includes(q)))\n }\n const pathy = /[/.]/.test(q)\n const named = order.filter((p) => has(p, pathy))\n return named.length || pathy ? named : order.filter((p) => has(p, true))\n }, [q, order, byPath])\n\n const { base, edges } = useMemo(() => {\n if (!visible) return { base: [] as DotNode[], edges: [] as LinkEdge[] }\n const degree = new Map<string, number>()\n for (const e of visible.edges) for (const p of [e.from, e.to]) degree.set(p, (degree.get(p) ?? 0) + 1)\n // Selection ripple: depth-1 lights first; with Focus 2 the depth-2 ring lights RIPPLE_MS later\n const near = selected ? neighbourhoodIds(visible.edges, selected, 1) : null\n // Recent on (and nothing selected or searched): everything the last 24h didn't touch dims\n const lit = selected ? (state.focus === 2 ? neighbourhoodIds(visible.edges, selected, 2) : near) : q ? new Set(matches) : state.recent ? touched : null\n const delayOf = (p: string) => (near && lit?.has(p) && !near.has(p) ? RIPPLE_MS : 0)\n const quick = !selected\n const matched = new Set(matches)\n // tasks are the small circles; everything grows with degree\n const sizeOf = (p: string) => Math.round((byPath.get(p)?.kind === \"task\" ? 0.7 : 1) * (8 + 4 * Math.sqrt(degree.get(p) ?? 0)))\n // Labels: the selected file, then its direct neighbours, matches, the rest of the lit set, then by degree; a lower one\n // that overlaps is hidden. The selection always shows; zoomed out its neighbours do too, on opaque chips (plain\n // text at full zoom would print over each other, so there they yield). Matches yield: forcing them all stacks chips.\n // A hub's neighbours (more than CROWD) would stack chips at the fit, so then only the selection is forced.\n const far = labelK > 1\n const crowded = far && (near?.size ?? 0) - 1 > CROWD\n const keep = new Set(selected ? [selected, ...(far && !crowded ? near ?? [] : [])] : [])\n const rank = (p: string) => (p === selected ? 4 : near?.has(p) ? 3 : matched.has(p) ? 2 : lit?.has(p) ? 1 : 0)\n const measure = typeof document === \"undefined\" ? null : labelMeasurer()\n // Zoomed out with nothing selected or searched (the overview, Recent too): the top TOP_LABELS files keep a chip,\n // so the fitted map is never unlabeled\n const overview = far && !selected && !q\n // zoomed out, only chip labels compete, at their chip's size; dots are obstacles too, but only lit ones when a set is\n // lit (a dimmed dot under a chip hides nothing)\n const boxes: LabelBox[] = measure\n ? flowOrder.filter((p) => !far || (overview ? !lit || lit.has(p) : rank(p) > 0)).sort((a, b) => rank(b) - rank(a) || (degree.get(b) ?? 0) - (degree.get(a) ?? 0)).map((p) => {\n const at = pos[p]\n const w = (measure(byPath.get(p)!) + (far ? CHIP_PAD : 0)) * labelK\n return { id: p, x: at.x - w / 2, y: at.y + sizeOf(p) / 2 + LABEL_GAP, w, h: LABEL_H * labelK }\n })\n : []\n const dots: LabelBox[] = flowOrder.filter((p) => !lit || lit.has(p)).map((p) => { const r = sizeOf(p) / 2; return { id: p, x: pos[p].x - r, y: pos[p].y - r, w: 2 * r, h: 2 * r } })\n const hideLabel = hiddenLabels(boxes, keep, dots)\n // the first TOP_LABELS placed = stopping the pass there (a later box never hides an earlier one)\n const top = new Set<string>()\n if (overview) {\n for (const b of boxes) {\n if (hideLabel.has(b.id)) continue\n if (top.size < TOP_LABELS) top.add(b.id)\n else hideLabel.add(b.id)\n }\n }\n // DOM order = tab order, so nodes go in label order\n const nodes: DotNode[] = flowOrder.map((p) => {\n const size = sizeOf(p)\n const box = Math.max(size, HIT)\n const at = pos[p] ?? { x: 0, y: 0 }\n const n = byPath.get(p)!\n const links = adj.get(p)?.size ?? 0\n // task / epic: an active status's own colour, as on the board and the StatusChip; settled ones hollow grey\n const { hue, hollow } = dotStyle(statusDefs, n.status)\n return {\n id: p,\n type: \"dot\",\n position: { x: at.x - box / 2, y: at.y - box / 2 },\n // known size: a fresh node object (every restyle, every tween frame) keeps its handles and stays visible\n // instead of React Flow hiding it, and its edges, until it re-measures\n measured: { width: box, height: box },\n ariaLabel: `${KIND_NAME[n.kind]}${n.kind === \"doc\" ? \"\" : ` ${n.id}`} ${n.label}, ${links} link${links === 1 ? \"\" : \"s\"}${touched.has(p) ? \", changed in the last 24 hours\" : \"\"}${p === selected ? \", selected\" : \"\"}`,\n // the entrance offset: the layout is centred on 0,0, so -at points back at the centre (inert until data-unfold)\n data: { node: n, size, box, dim: !!lit && !lit.has(p), chip: p === selected || matched.has(p) || !!lit?.has(p) || top.has(p), active: p === selected, match: matched.has(p), changed: changed.has(p), hue, hollow, recent: touched.has(p), hideLabel: hideLabel.has(p), delay: delayOf(p), quick, unfold: { x: -at.x * UNFOLD_FROM, y: -at.y * UNFOLD_FROM, wait: waitOf(hops.get(p)) } },\n draggable: true,\n }\n })\n // edges share the nodes' timing (they used to snap); the ripple delay goes in the shorthand, since React\n // warns when `transition` and `transitionDelay` are mixed on one element\n const ms = quick ? \"var(--duration-fast)\" : \"var(--duration-base)\"\n const transition = (delay: number) => [\"stroke\", \"stroke-width\", \"opacity\"].map((pr) => `${pr} ${ms} var(--ease-out-soft) ${delay}ms`).join(\", \")\n const edges: LinkEdge[] = visible.edges.map((e) => {\n const hot = !!selected && (e.from === selected || e.to === selected)\n // Focus 2: an edge inside the 2-hop ring stays lit, after the ripple delay\n const on = hot || (!!selected && state.focus === 2 && !!lit?.has(e.from) && !!lit.has(e.to))\n // entrance: fades in as its nearer dot lands (inert until data-unfold)\n const h = Math.min(hops.get(e.from) ?? Infinity, hops.get(e.to) ?? Infinity)\n return {\n id: `${e.from}->${e.to}`,\n source: e.from,\n target: e.to,\n type: \"straight\",\n className: \"graph-edge-in\",\n domAttributes: { \"aria-hidden\": true },\n style: {\n // accent-edge: the accent darkened where it would miss 3:1 on the light page (green, orange)\n stroke: hot ? \"var(--color-accent-edge)\" : EDGE,\n strokeWidth: hot ? 1.75 : 1,\n opacity: lit && !on ? 0.15 : 1,\n transition: transition(hot ? 0 : Math.max(delayOf(e.from), delayOf(e.to))),\n animationDelay: `${EDGE_IN_AFTER_MS + waitOf(Number.isFinite(h) ? h : undefined)}ms`,\n },\n }\n })\n return { base: nodes, edges }\n }, [visible, flowOrder, adj, hops, pos, byPath, selected, state.focus, state.recent, touched, q, matches, changed, statusDefs, labelK])\n\n // Relayout tween (filter / focus / data change): dots glide from where they are drawn to the new layout, new ones\n // scale in at their target, removed ones fade out. A new relayout mid-tween starts from the interpolated positions.\n // \"Previous render\" bookkeeping is state, set while rendering (React's documented pattern), so nothing reads refs.\n const [seen, setSeen] = useState({ pos, base })\n const [tween, setTween] = useState<Tween | null>(null)\n if (seen.base !== base) {\n setSeen({ pos, base })\n if (seen.pos !== pos) {\n // ponytail: per-frame React Flow updates; above VIRTUALIZE_OVER nodes the graph jumps instead of gliding\n const glide = seen.base.length > 0 && base.length > 0 && Math.max(seen.base.length, base.length) <= VIRTUALIZE_OVER && !still()\n const from = tween?.to === seen.pos ? tween.at : seen.pos\n setTween(glide ? { from, at: from, to: pos, gone: seen.base.filter((n) => !pos[n.id]) } : null)\n }\n }\n\n\n // Live physics (drag, hover magnet): a small spring sim over the touched neighbourhood only, on rAF while anything\n // moves; idle (no loop) once every dot rests. rAF doesn't run in a hidden tab, and springStep clamps the gap after.\n const sim = useRef<SpringWorld>({ bodies: new Map(), layout: {}, shift: {}, drag: null, links: [] })\n const simRaf = useRef(0)\n const [live, setLive] = useState<Record<string, XY> | null>(null)\n const [hovered, setHovered] = useState<string | null>(null)\n const kick = useCallback(() => {\n if (simRaf.current) return\n let last = performance.now()\n const tick = (now: number) => {\n const w = sim.current\n const moving = springStep(w, (now - last) / 1000)\n last = now\n setLive(w.bodies.size ? Object.fromEntries([...w.bodies].map(([id, b]) => [id, { x: b.x, y: b.y }])) : null)\n simRaf.current = moving ? requestAnimationFrame(tick) : 0\n }\n simRaf.current = requestAnimationFrame(tick)\n }, [])\n useEffect(() => () => cancelAnimationFrame(simRaf.current), [])\n // the layout moved under the sim (filter, focus, new link): bodies rest on the new points; gone ones drop\n useEffect(() => {\n const w = sim.current\n w.layout = pos\n for (const id of w.bodies.keys()) if (!pos[id]) w.bodies.delete(id)\n if (w.bodies.size) kick()\n }, [pos, kick])\n\n /** Hover / keyboard focus: brighten the file's edges and lean its linked dots toward it (springs, interruptible). */\n const magnet = (id: string | null) => {\n setHovered(id)\n const w = sim.current\n // no lean while the entrance plays or a drag holds the neighbourhood\n if (still() || w.drag || unfolding()) return\n const shift: Record<string, XY> = {}\n const h = id ? pos[id] : undefined\n for (const p of (id && h && adj.get(id)) || []) {\n const a = pos[p]\n const d = a ? Math.hypot(h!.x - a.x, h!.y - a.y) : 0\n if (!a || d < 1) continue\n shift[p] = { x: a.x + ((h!.x - a.x) / d) * MAGNET_PX, y: a.y + ((h!.y - a.y) / d) * MAGNET_PX }\n if (!w.bodies.has(p)) w.bodies.set(p, { x: a.x, y: a.y, vx: 0, vy: 0 })\n }\n w.shift = shift\n kick()\n }\n const keyFocused = () => !!rootRef.current?.querySelector(\".react-flow__node:focus-visible\")\n const centreOf = (n: DotNode) => ({ x: n.position.x + n.data.box / 2, y: n.position.y + n.data.box / 2 })\n /** Drag: the dot follows the pointer, its ≤2-hop neighbourhood (1-hop on big graphs) follows on springs. */\n const onDragStart = (n: DotNode) => {\n endUnfold()\n const w = sim.current\n w.shift = {}\n const at = centreOf(n)\n if (still()) {\n // reduced motion: only the held dot moves, and it snaps back on release\n w.drag = { id: n.id, ...at }\n return setLive({ [n.id]: at })\n }\n const edges = visible?.edges ?? []\n const near = neighbourhoodIds(edges, n.id, order.length > VIRTUALIZE_OVER ? 1 : 2)\n for (const p of near) {\n const a = live?.[p] ?? pos[p]\n if (a && !w.bodies.has(p)) w.bodies.set(p, { x: a.x, y: a.y, vx: 0, vy: 0 })\n }\n w.links = edges.flatMap((e) => {\n const a = pos[e.from], b = pos[e.to]\n if (!a || !b || (!near.has(e.from) && !near.has(e.to))) return []\n return [{ a: e.from, b: e.to, len: Math.hypot(a.x - b.x, a.y - b.y), k: e.from === n.id || e.to === n.id ? SPRING.link : SPRING.link * 0.4 }]\n })\n w.drag = { id: n.id, ...at }\n kick()\n }\n const onDrag = (n: DotNode) => {\n const w = sim.current\n if (!w.drag) return\n w.drag = { id: n.id, ...centreOf(n) }\n if (still()) setLive({ [n.id]: w.drag })\n }\n const onDragStop = () => {\n const w = sim.current\n w.drag = null\n if (still()) {\n w.bodies.clear()\n return setLive(null)\n }\n kick()\n }\n const tweenFrom = tween?.from\n const tweenTo = tween?.to\n useEffect(() => {\n if (!tweenFrom || !tweenTo) return\n const t0 = performance.now()\n let raf = 0\n const step = (now: number) => {\n const k = Math.min(1, Math.max(0, (now - t0) / TWEEN_MS))\n if (k >= 1) return setTween(null)\n const e = easeOut(k)\n const at: Record<string, XY> = {}\n for (const [id, b] of Object.entries(tweenTo)) {\n const a = tweenFrom[id] ?? b\n at[id] = { x: a.x + (b.x - a.x) * e, y: a.y + (b.y - a.y) * e }\n }\n setTween((t) => (t && t.from === tweenFrom ? { ...t, at } : t))\n raf = requestAnimationFrame(step)\n }\n raf = requestAnimationFrame(step)\n return () => cancelAnimationFrame(raf)\n }, [tweenFrom, tweenTo])\n\n // Drawn centre: live physics, else the relayout tween, else the layout (the entrance only offsets the dot in CSS)\n const nodes = useMemo(() => {\n if (!tween && !live) return base\n const moved = base.map((n): DotNode => {\n if (tween && !tween.from[n.id]) return { ...n, data: { ...n.data, enter: true } }\n const c = live?.[n.id] ?? tween?.at[n.id]\n return c ? { ...n, position: { x: c.x - n.data.box / 2, y: c.y - n.data.box / 2 } } : n\n })\n const gone = (tween?.gone ?? []).map((n): DotNode => ({ ...n, focusable: false, selectable: false, draggable: false, style: EXIT_STYLE, data: { ...n.data, exit: true } }))\n return [...moved, ...gone]\n }, [base, tween, live])\n\n // Edges as drawn: a hovered file's edges one step brighter (the selected file's stay accent). Kept out of `base`,\n // which measures every label.\n const shownEdges = useMemo(() => {\n if (!hovered) return edges\n return edges.map((e): LinkEdge => {\n const hot = !!selected && (e.source === selected || e.target === selected)\n return !hot && (e.source === hovered || e.target === hovered) ? { ...e, style: { ...e.style, stroke: EDGE_HOVER, strokeWidth: 1.5 } } : e\n })\n }, [edges, hovered, selected])\n\n // Esc on /graph steps back: clear the search, then the selection, then leave the graph. Capture phase, so\n // React Flow's own Escape (which blurs the node) and the global handler never see it.\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\" || e.defaultPrevented || document.querySelector(\"[role=dialog]\")) return\n const root = rootRef.current\n const t = e.target instanceof HTMLElement ? e.target : null\n const inside = !!t && !!root?.contains(t)\n if (!root || !(inside || t === document.body || t?.id === \"main\")) return\n if (state.q) update({ q: \"\" })\n else if (selected) update({ node: null })\n else if (inside) t.blur()\n else return\n e.preventDefault()\n e.stopPropagation()\n }\n window.addEventListener(\"keydown\", onKey, true)\n return () => window.removeEventListener(\"keydown\", onKey, true)\n }, [state.q, selected, update])\n\n const select = (p: string | null) => update({ node: p })\n const shelfItem = (p: string) => rootRef.current?.querySelector<HTMLElement>(`[data-shelf] [data-path=\"${CSS.escape(p)}\"]`)\n /** Keyboard focus to a node; one that's off screen (not rendered when virtualized) is centred first; an unlinked one is on the shelf. */\n const focusNode = (p: string) => {\n const find = () => rootRef.current?.querySelector<HTMLElement>(`.react-flow__node[data-id=\"${CSS.escape(p)}\"]`)\n const el = find() ?? shelfItem(p)\n if (el) return el.focus({ preventScroll: !!pos[p] })\n const at = pos[p]\n if (!rf || !at) return\n userMoved.current = true\n void rf.setCenter(at.x, at.y, { zoom: rf.getZoom() }).then(() => requestAnimationFrame(() => find()?.focus({ preventScroll: true })))\n }\n /** Select and centre a file; `focus` moves keyboard focus to it (search cycling keeps it in the search box). */\n const pick = (p: string, focus = true) => {\n select(p)\n const at = pos[p]\n if (!rf || !at) return focus ? focusNode(p) : shelfItem(p)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" })\n userMoved.current = true\n void rf.setCenter(at.x, at.y, { zoom: Math.max(rf.getZoom(), 1), duration: still() ? 0 : TWEEN_MS, ease: easeOut }).then(() => { if (focus) focusNode(p) })\n }\n // Search Enter: the first frames every match, the next ones step through them (Shift+Enter back). i -1 = framed.\n // The cursor is keyed on the query and the match list, so a filter change or a refresh that changes the matches\n // starts over instead of leaving a stale \"98 of 0\".\n const matchKey = q + SEP + matches.join(SEP)\n const [cursor, setCursor] = useState<{ key: string; i: number } | null>(null)\n const step = cursor?.key === matchKey ? cursor.i : null\n /** Camera to the bounds of every match on the map; when none is on the map, the first shelf match scrolls into view. */\n const frame = useCallback((ps: string[]) => {\n const pts = ps.flatMap((p) => (pos[p] ? [pos[p]] : []))\n const el = rootRef.current?.querySelector<HTMLElement>(\".react-flow\")\n if (!pts.length) {\n if (ps[0]) rootRef.current?.querySelector(`[data-shelf] [data-path=\"${CSS.escape(ps[0])}\"]`)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" })\n return\n }\n if (!rf || !el) return\n const xs = pts.map((p) => p.x), ys = pts.map((p) => p.y)\n // room for the labels: half a typical one beside the outer dots, one line under the lowest\n const x = Math.min(...xs) - MATCH_PAD_X, y = Math.min(...ys) - HIT\n const bounds = { x, y, width: Math.max(...xs) + MATCH_PAD_X - x, height: Math.max(...ys) + HIT + LABEL_H - y }\n userMoved.current = true\n void rf.setViewport(getViewportForBounds(bounds, el.clientWidth, el.clientHeight, FIT_MIN_ZOOM, FIT_OPTIONS.maxZoom, FIT_OPTIONS.padding), { duration: still() ? 0 : TWEEN_MS, ease: easeOut })\n }, [pos, rf])\n // Turning Recent on frames the changed files (a user action, so the camera may move); off, or an SSE refresh, never.\n // After the layout for the kinds it turns on: the effect runs once `frame` carries the new positions, its rAF after\n // the view-change fit's, so this camera lands last.\n const frameRecent = useRef(false)\n useEffect(() => {\n if (!frameRecent.current || !state.recent) return\n const id = requestAnimationFrame(() => {\n frameRecent.current = false\n frame([...touched])\n })\n return () => cancelAnimationFrame(id)\n }, [frame, state.recent, touched])\n const onSearchKey = (e: React.KeyboardEvent) => {\n if (e.key !== \"Enter\" || !matches.length) return\n e.preventDefault()\n // one match: select it and move there, as before\n if (matches.length === 1) return pick(matches[0])\n if (step === null) {\n setCursor({ key: matchKey, i: -1 })\n return frame(matches)\n }\n const i = e.shiftKey ? (step <= 0 ? matches.length - 1 : step - 1) : (step + 1) % matches.length\n setCursor({ key: matchKey, i })\n pick(matches[i], false)\n }\n // Keys on a focused node (React Flow's wrapper div carries data-id)\n const onNodeKey = (e: React.KeyboardEvent) => {\n const el = e.target as HTMLElement\n const id = el.classList.contains(\"react-flow__node\") ? el.dataset.id : undefined\n const n = id ? byPath.get(id) : undefined\n if (!id || !n || e.metaKey || e.ctrlKey || e.altKey) return\n if (e.key === \"Enter\") {\n if (id === selected) open(n)\n else select(id)\n } else if (e.key === \" \") select(id)\n else if (e.key === \"o\") open(n)\n else if (ARROWS.has(e.key)) {\n const to = stepFocus(id, e.key as ArrowKey, pos, adj.get(id) ?? [], flowOrder)\n if (to) focusNode(to)\n } else return\n e.preventDefault()\n }\n\n if (!graph && !error) return <p className=\"p-6 text-sm text-muted\">Loading graph…</p>\n if (graph && !graph.edges.length && !error) {\n return <p className=\"m-6 rounded-lg border border-dashed border-border p-4 text-sm text-muted\">No links between docs yet. Link docs with [text](path.md) or [[name]].</p>\n }\n // a load failure keeps the toolbar (filters, search) and says what to do; the raw error is a details line\n const g = graph ?? EMPTY_GRAPH\n\n const sel = selected ? byPath.get(selected) : undefined\n if (sel && sel !== cardNode) setCardNode(sel)\n const card = sel ?? cardNode\n // selected in the URL but its kind is filtered out: say so instead of dropping it\n const hidden = state.node && !selected ? byPath.get(state.node) : undefined\n // Card counts = the edges drawn; links to files the filters / focus hide are \"+N hidden\"\n const cp = card?.path\n const linked = (es: { from: string; to: string }[]) => cp\n ? { to: new Set(es.filter((e) => e.from === cp && e.to !== cp).map((e) => e.to)).size, from: new Set(es.filter((e) => e.to === cp && e.from !== cp).map((e) => e.from)).size }\n : { to: 0, from: 0 }\n const shown = linked(visible?.edges ?? [])\n const all = linked(g.edges)\n const hiddenLinks = all.to + all.from - shown.to - shown.from\n\n return (\n <div ref={rootRef} className=\"flex min-h-0 flex-1 flex-col\">\n <div className=\"flex flex-wrap items-center gap-x-1.5 gap-y-2 border-b border-border px-4 py-2\">\n {KINDS.map(({ kind, label }) => {\n const on = state.kinds.includes(kind)\n const count = counts[kind] ?? 0\n // a kind with no files is a dead chip; a failed load keeps them all, showing –\n if (!count && !error) return null\n return (\n <button\n key={kind}\n type=\"button\"\n aria-pressed={on}\n disabled={!count}\n onClick={() => update({ kinds: on ? state.kinds.filter((k) => k !== kind) : [...state.kinds, kind] })}\n className={cn(\n \"inline-flex h-7 items-center gap-1.5 rounded-sm border px-2 text-xs outline-none transition-colors duration-(--duration-fast) focus-visible:ring-2 focus-visible:ring-accent disabled:pointer-events-none disabled:opacity-50\",\n on ? \"border-border2 bg-surface2 text-txt\" : \"border-border text-muted hover:border-border2 hover:text-txt\",\n )}\n >\n <Shape kind={kind} size={kind === \"task\" ? 7 : 9} className=\"text-muted\" />\n <span className=\"sr-only md:not-sr-only\">{label}</span>\n {/* a failed load has no counts: \"–\", not a 0 that claims the project is empty */}\n <span className=\"font-mono tabular-nums text-muted\">{error ? \"–\" : count}</span>\n </button>\n )\n })}\n <button\n type=\"button\"\n aria-pressed={state.recent}\n disabled={!touched.size && !state.recent}\n title=\"Files an agent or you changed in the last 24 hours\"\n // on: dim everything else, and turn on the kinds the changed files belong to\n onClick={() => {\n frameRecent.current = !state.recent\n update(state.recent ? { recent: false } : { recent: true, kinds: KINDS.map((k) => k.kind).filter((k) => state.kinds.includes(k) || [...touched].some((p) => byPath.get(p)?.kind === k)) })\n }}\n className={cn(\n \"inline-flex h-7 items-center gap-1.5 rounded-sm border px-2 text-xs outline-none transition-colors duration-(--duration-fast) focus-visible:ring-2 focus-visible:ring-accent disabled:pointer-events-none disabled:opacity-50\",\n state.recent ? \"border-border2 bg-surface2 text-txt\" : \"border-border text-muted hover:border-border2 hover:text-txt\",\n )}\n >\n <span aria-hidden className=\"size-1.5 rounded-full bg-accent\" />\n Recent\n <span className=\"font-mono tabular-nums text-muted\">{error ? \"–\" : touched.size}</span>\n </button>\n <button\n type=\"button\"\n aria-expanded={legendOpen}\n aria-controls=\"graph-legend\"\n aria-label=\"Legend\"\n onClick={() => setLegendOpen((o) => !o)}\n className=\"inline-flex size-7 items-center justify-center rounded-md text-muted outline-none transition-colors duration-(--duration-fast) hover:bg-surface2 hover:text-txt focus-visible:ring-2 focus-visible:ring-accent aria-expanded:bg-surface2 aria-expanded:text-txt xl:hidden\"\n >\n <Info className=\"size-3.5\" aria-hidden />\n </button>\n <p id=\"graph-legend\" className={cn(\"order-last basis-full flex-wrap items-center gap-x-3 gap-y-1 font-mono text-[10px] text-muted xl:order-none xl:ml-2 xl:flex xl:basis-auto\", legendOpen ? \"flex\" : \"hidden\")}>\n {KINDS.map(({ kind }) => (\n <span key={kind} className=\"inline-flex items-center gap-1\"><Shape kind={kind} size={kind === \"task\" ? 6 : 8} />{KIND_NAME[kind].toLowerCase()}</span>\n ))}\n {legendStatuses.length > 0 && (\n <>\n <span>colour = status</span>\n {legendStatuses.map((d) => {\n const { hue, hollow } = dotStyle(statusDefs, d.id)\n return <span key={d.id} className=\"inline-flex items-center gap-1\"><Shape kind=\"doc\" size={7} hollow={hollow} className={hue} />{d.label.toLowerCase()}</span>\n })}\n <span>hollow = done</span>\n </>\n )}\n <span className=\"inline-flex items-center gap-1\"><span aria-hidden className=\"size-1.5 rounded-full bg-accent\" />changed in 24h</span>\n </p>\n <MissingLinks broken={g.broken} />\n {/* the broken-links button carries ml-auto; with none, the search does */}\n <label className={cn(\"relative flex items-center\", !g.broken.length && \"ml-auto\")}>\n <Search className=\"pointer-events-none absolute left-2 size-3.5 text-muted\" aria-hidden />\n <input\n id=\"graph-search\"\n type=\"search\"\n value={state.q}\n placeholder=\"Find a file…\"\n aria-label=\"Find a file in the graph\"\n aria-describedby=\"graph-matches\"\n onChange={(e) => update({ q: e.target.value })}\n onKeyDown={onSearchKey}\n className=\"h-7 w-44 rounded-md border border-border bg-surface pr-16 2xl:w-48 pl-7 text-xs text-txt outline-none placeholder:text-muted focus-visible:ring-2 focus-visible:ring-accent [&::-webkit-search-cancel-button]:hidden\"\n />\n {/* the count sits inside the input's reserved right padding, so it never shifts the toolbar */}\n <span id=\"graph-matches\" className=\"pointer-events-none absolute right-2 font-mono text-[10px] text-muted tabular-nums\">\n {!q ? \"\" : step !== null && step >= 0 ? `${step + 1} of ${matches.length}` : `${matches.length} match${matches.length === 1 ? \"\" : \"es\"}`}\n </span>\n {/* the / hint, as on /board, until there's a count to show */}\n {!q && <kbd aria-hidden className={cn(KBD, \"pointer-events-none absolute right-1.5 max-sm:hidden\")}>{GRAPH_KEYS.search.key}</kbd>}\n </label>\n </div>\n\n <div\n data-far={labelK > 1}\n onKeyDown={onNodeKey}\n // keyboard focus pulls like hover (a click also focuses the node, so only :focus-visible counts)\n onFocus={(e) => { const t = e.target as HTMLElement; if (t.classList.contains(\"react-flow__node\") && t.matches(\":focus-visible\")) magnet(t.dataset.id ?? null) }}\n onBlur={(e) => { const t = e.target as HTMLElement; if (t.classList.contains(\"react-flow__node\") && t.dataset.id === hovered) magnet(null) }}\n className=\"group/graph relative min-h-0 flex-1\"\n >\n <p id=\"graph-hint\" className=\"sr-only\">{HINT}</p>\n {error ? (\n <div role=\"alert\" className=\"m-6 max-w-xl rounded-lg border border-danger/30 bg-danger/5 p-4\">\n <p className=\"text-sm font-medium text-txt\">Couldn&apos;t load the link graph.</p>\n <p className=\"mt-1 text-xs text-muted\">Check that VibeDoc is still running, then try again. Your files are untouched.</p>\n <p className=\"mt-1 font-mono text-[11px] break-words text-muted\">Details: {error}</p>\n <Button size=\"sm\" variant=\"outline\" className=\"mt-3\" onClick={() => { setError(null); setRetry((r) => r + 1) }}>Retry</Button>\n </div>\n ) : !state.kinds.length ? (\n <div className=\"m-6 flex flex-wrap items-center gap-3\">\n <p className=\"text-sm text-muted\">Every kind is off, so no files are drawn.</p>\n <Button size=\"sm\" variant=\"outline\" onClick={() => update({ kinds: DEFAULT_KINDS })}>Show docs</Button>\n </div>\n ) : (\n <ReactFlow<DotNode, LinkEdge>\n aria-label=\"Doc link graph\"\n aria-roledescription=\"link graph\"\n aria-describedby=\"graph-hint\"\n ariaLabelConfig={ARIA_LABELS}\n edgesFocusable={false}\n nodes={nodes}\n edges={shownEdges}\n nodeTypes={nodeTypes}\n className={cn(veiled && \"opacity-0\")}\n onInit={setRf}\n onMoveStart={(e) => { if (e) userMoved.current = true }}\n onMove={(_, vp) => applyZoom(vp.zoom)}\n onNodeClick={(_, n) => select(n.id)}\n onNodeDoubleClick={(_, n) => open(n.data.node)}\n // hover yields to keyboard focus: while a node has the focus halo, the pointer doesn't move the lean\n onNodeMouseEnter={(_, n) => { if (!n.data.exit && !keyFocused()) magnet(n.id) }}\n onNodeMouseLeave={(_, n) => { if (n.id === hovered && !keyFocused()) magnet(null) }}\n onNodeDragStart={(_, n) => onDragStart(n)}\n onNodeDrag={(_, n) => onDrag(n)}\n onNodeDragStop={onDragStop}\n nodeClickDistance={DRAG_PX}\n nodeDragThreshold={DRAG_PX}\n autoPanOnNodeDrag={false}\n onPaneClick={() => select(null)}\n nodesConnectable={false}\n nodesDraggable\n zoomOnDoubleClick={false}\n deleteKeyCode={null}\n colorMode={isDark ? \"dark\" : \"light\"}\n onlyRenderVisibleElements={nodes.length > VIRTUALIZE_OVER}\n fitView\n fitViewOptions={FIT_OPTIONS}\n minZoom={0.1}\n proOptions={PRO_OPTIONS}\n style={FLOW_STYLE}\n >\n <Background variant={BackgroundVariant.Lines} gap={24} lineWidth={1} color=\"var(--color-surface2)\" />\n <Controls\n showInteractive={false}\n showFitView={false}\n onZoomIn={() => { userMoved.current = true }}\n onZoomOut={() => { userMoved.current = true }}\n className=\"gap-0.5 rounded-md border border-border bg-surface p-0.5 [&_button]:size-7 [&_button]:rounded-md [&_button]:transition-colors [&_button]:duration-(--duration-fast) [&_button]:outline-none [&_button:focus-visible]:ring-2 [&_button:focus-visible]:ring-accent [&_svg]:max-h-3 [&_svg]:max-w-3\"\n >\n <ControlButton onClick={fit} className=\"react-flow__controls-fitview\" title=\"Fit View\" aria-label=\"Fit View\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 30\" aria-hidden=\"true\"><path d={FIT_ICON} /></svg>\n </ControlButton>\n </Controls>\n </ReactFlow>\n )}\n\n {/* Unlinked shelf: files with no visible link, off the map so they never stretch the fit; after the map in tab order */}\n {!error && state.kinds.length > 0 && unlinked.length > 0 && (\n <div\n data-shelf\n role=\"group\"\n aria-labelledby=\"graph-unlinked\"\n className=\"absolute right-3 bottom-3 left-14 z-10 flex items-center gap-1 overflow-x-auto rounded-md border border-border bg-surface p-1 md:left-auto md:max-w-[min(44rem,calc(100%-4.5rem))] md:flex-wrap md:overflow-x-visible md:max-h-17 md:overflow-y-auto\"\n >\n <span id=\"graph-unlinked\" className=\"sticky left-0 shrink-0 bg-surface px-1.5 font-mono text-[10px] font-medium tracking-[0.06em] text-muted uppercase\">\n Unlinked <span className=\"tabular-nums\">{unlinked.length}</span>\n </span>\n {unlinked.map((p) => {\n const n = byPath.get(p)!\n const on = p === selected\n const match = q ? matches.includes(p) : false\n const dim = selected ? !on : q ? !match : state.recent && !touched.has(p)\n const { hue, hollow } = dotStyle(statusDefs, n.status)\n return (\n <button\n key={p}\n type=\"button\"\n data-path={p}\n title={n.path}\n aria-pressed={on}\n aria-label={`${KIND_NAME[n.kind]}${n.kind === \"doc\" ? \"\" : ` ${n.id}`} ${n.label}, 0 links${touched.has(p) ? \", changed in the last 24 hours\" : \"\"}`}\n onClick={() => (on ? open(n) : select(p))}\n className={cn(\n \"inline-flex h-6 max-w-48 shrink-0 items-center gap-1.5 rounded-sm px-1.5 text-[11px] outline-none\",\n \"transition-[opacity,background-color,color] duration-(--duration-fast) ease-out-soft hover:bg-surface2 hover:text-txt focus-visible:ring-2 focus-visible:ring-accent\",\n on ? \"font-medium text-txt ring-1 ring-accent\" : match ? \"font-medium text-txt outline-1 -outline-offset-1 outline-dashed outline-accent\" : \"text-muted\",\n dim && \"opacity-25\",\n )}\n >\n <span className=\"relative inline-flex\">\n <Shape kind={n.kind} size={n.kind === \"task\" ? 6 : 8} hollow={hollow} className={hue} />\n {touched.has(p) && <span aria-hidden className=\"absolute -top-0.5 -right-0.5 size-1 rounded-full bg-accent ring-1 ring-surface\" />}\n </span>\n {n.kind !== \"doc\" && <span className=\"font-mono text-[10px]\">{n.id}</span>}\n <span className=\"truncate\">{n.label}</span>\n </button>\n )\n })}\n </div>\n )}\n\n <div aria-live=\"polite\">\n {hidden && (\n <p className=\"absolute top-3 right-3 z-10 max-w-72 rounded-lg border border-border bg-surface px-3 py-2 text-xs text-muted shadow-lg\">\n {hidden.kind !== \"doc\" && <span className=\"mr-1 font-mono text-[11px]\">{hidden.id}</span>}\n <span className=\"text-txt\">{hidden.label}</span> is hidden by filters ·{\" \"}\n <button\n type=\"button\"\n onClick={() => update({ kinds: [...state.kinds, hidden.kind] })}\n className=\"rounded-sm text-accent underline-offset-2 outline-none hover:underline focus-visible:ring-2 focus-visible:ring-accent\"\n >\n Show\n </button>\n </p>\n )}\n {card && (\n <aside\n aria-label=\"Selected file\"\n inert={!sel}\n className={cn(\n \"absolute top-3 right-3 z-10 w-72 max-w-[calc(100%-1.5rem)] rounded-lg border border-border bg-surface p-3 shadow-lg shadow-black/20\",\n // phones: a bottom sheet beside the zoom controls (left-14) and above the Unlinked shelf, so the map's\n // top stays clear\n \"max-sm:top-auto max-sm:left-14 max-sm:w-auto max-sm:max-w-none\",\n unlinked.length > 0 ? \"max-sm:bottom-14\" : \"max-sm:bottom-3\",\n // enters with a fade and a 4px slide (from the right; from below on phones), leaves faster; it stays\n // mounted for the exit\n \"transition-[opacity,translate,visibility] ease-out-soft\",\n sel\n ? \"duration-(--duration-base) starting:opacity-0 sm:starting:translate-x-1 max-sm:starting:translate-y-1\"\n : \"invisible opacity-0 duration-(--duration-fast) sm:translate-x-1 max-sm:translate-y-1\",\n )}\n >\n {/* reselecting crossfades the content */}\n <div key={card.path} className=\"animate-[pane-in_var(--duration-fast)_var(--ease-out-soft)]\">\n <div className=\"flex items-start gap-2\">\n {(() => { const Icon = KIND_ICON[card.kind]; return <Icon className=\"mt-0.5 size-4 shrink-0 text-muted\" aria-hidden /> })()}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-txt\">{card.kind !== \"doc\" && <span className=\"mr-1.5 font-mono text-[11px] text-muted\">{card.id}</span>}{card.label}</p>\n <p className=\"mt-0.5 truncate font-mono text-[11px] text-muted\" title={card.path}>{card.path}</p>\n </div>\n <button type=\"button\" aria-label=\"Clear selection\" onClick={() => select(null)} className=\"inline-flex size-6 shrink-0 items-center justify-center rounded text-muted outline-none hover:text-txt focus-visible:ring-2 focus-visible:ring-accent\">\n <X className=\"size-3.5\" />\n </button>\n </div>\n <div className=\"mt-2 flex flex-wrap items-center gap-x-2 gap-y-1\">\n <span className=\"font-mono text-[10px] font-medium tracking-[0.06em] text-muted uppercase\">{KIND_NAME[card.kind]}</span>\n {card.status && <StatusChip status={card.status} />}\n {card.owner && <OwnerChip owner={card.owner} />}\n {(card.kind === \"task\" || card.kind === \"epic\") && <AgentDot attach={{ kind: card.kind, id: card.id }} />}\n </div>\n <p className=\"mt-2 text-xs text-muted\">\n Links to <span className=\"font-mono tabular-nums text-txt\">{shown.to}</span> · Linked from <span className=\"font-mono tabular-nums text-txt\">{shown.from}</span>\n {hiddenLinks > 0 && <span className=\"text-muted\"> · <span className=\"font-mono tabular-nums\">+{hiddenLinks}</span> hidden by filters</span>}\n </p>\n {/* the keys that drive the map, for sighted keyboard users (screen readers get #graph-hint) */}\n <p aria-hidden className=\"mt-2 flex flex-wrap items-center gap-x-1 gap-y-1 text-[11px] text-muted max-sm:hidden\">\n <kbd className={KBD}>{GRAPH_KEYS.select.key}</kbd><kbd className={KBD}>{GRAPH_KEYS.open.key}</kbd> open\n <span aria-hidden>·</span>\n <kbd className={KBD}>←→</kbd> linked\n <span aria-hidden>·</span>\n <kbd className={KBD}>{GRAPH_KEYS.clear.key}</kbd> clear\n </p>\n <div className=\"mt-3 flex items-center gap-2\">\n <Button size=\"sm\" onClick={() => open(card)}>Open</Button>\n <div role=\"group\" aria-label=\"Focus\" className=\"ml-auto flex items-center rounded-md border border-border text-xs\">\n <span className=\"px-2 text-muted\">Focus</span>\n {([0, 1, 2] as const).map((f) => (\n <button\n key={f}\n type=\"button\"\n aria-pressed={state.focus === f}\n title={f ? `Show files within ${f} link${f === 1 ? \"\" : \"s\"}` : \"Show every file\"}\n onClick={() => update({ focus: f })}\n className={cn(\"inline-flex h-6 min-w-6 items-center justify-center px-2 outline-none focus-visible:ring-2 focus-visible:ring-accent\", state.focus === f ? \"bg-surface2 text-txt\" : \"text-muted hover:text-txt\")}\n >\n {f === 0 ? \"Off\" : f}\n </button>\n ))}\n </div>\n </div>\n </div>\n </aside>\n )}\n </div>\n </div>\n </div>\n )\n}\n\n/** One edge per ordered pair (a file can link to another on many lines). */\nfunction dedupe<E extends { from: string; to: string }>(edges: E[]): E[] {\n const seen = new Set<string>()\n return edges.filter((e) => {\n const k = `${e.from}${SEP}${e.to}`\n if (seen.has(k)) return false\n seen.add(k)\n return true\n })\n}\n\nconst MISS_KIND: Record<string, string> = { md: \"link\", wiki: \"wikilink\" }\nconst MISS_FILES_SHOWN = 5\n\n/**\n * \"N broken links\" (hidden at 0) and the list behind it: md / wiki links to no file, grouped by file, most first; the\n * first 5 files open, \"Show all N files\" for the rest. A row opens the file at that spot (`openDoc` `?link=`).\n * Stale paths (backticked mentions) are a per-doc lint: /docs Linked docs and the MCP footer list them, not here.\n */\nfunction MissingLinks({ broken }: { broken: BrokenLink[] }) {\n const { openDoc } = useApp()\n const [all, setAll] = useState(false)\n // \"Show all\" → focus the first newly shown row, so a keyboard user carries on where the list grew\n const firstNew = useRef<HTMLDivElement>(null)\n useEffect(() => {\n if (all) firstNew.current?.focus()\n }, [all])\n if (!broken.length) return null\n const byFile = new Map<string, BrokenLink[]>()\n for (const r of [...broken].sort((a, b) => a.line - b.line)) byFile.set(r.from, [...(byFile.get(r.from) ?? []), r])\n const files = [...byFile].sort(([a, ra], [b, rb]) => rb.length - ra.length || a.localeCompare(b))\n const shown = all ? files : files.slice(0, MISS_FILES_SHOWN)\n return (\n <DropdownMenu onOpenChange={(open) => { if (!open) setAll(false) }}>\n <DropdownMenuTrigger className=\"ml-auto inline-flex h-7 items-center gap-1 rounded-md px-2 text-xs text-muted outline-none transition-colors duration-(--duration-fast) hover:bg-surface2 hover:text-txt focus-visible:ring-2 focus-visible:ring-accent data-[state=open]:bg-surface2 data-[state=open]:text-txt\">\n <span className=\"font-mono tabular-nums\">{broken.length}</span> broken<span className=\"max-lg:sr-only\"> link{broken.length === 1 ? \"\" : \"s\"}</span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"max-h-[min(28rem,var(--radix-dropdown-menu-content-available-height))] w-[min(26rem,calc(100vw-2rem))]\">\n <DropdownMenuGroup>\n <DropdownMenuLabel className=\"flex items-center px-2 pt-2 pb-1 font-mono text-[10px] font-medium tracking-[0.06em] text-muted uppercase\">\n Broken links<span className=\"ml-auto tabular-nums\">{broken.length}</span>\n </DropdownMenuLabel>\n {shown.map(([file, items], fi) => (\n <div key={file} role=\"group\" aria-label={`${file}, ${items.length} broken`}>\n <p className=\"flex items-baseline gap-2 px-2 pt-1.5 font-mono text-[11px] text-txt\" title={file}>\n <span className=\"min-w-0 truncate\">{file}</span>\n <span className=\"ml-auto shrink-0 text-muted tabular-nums\">{items.length}</span>\n </p>\n {items.map((r, ri) => (\n <DropdownMenuItem key={`${r.target}:${r.line}`} ref={fi === MISS_FILES_SHOWN && ri === 0 ? firstNew : undefined} onSelect={() => void openDoc(r.from, r.target)} className=\"gap-2 py-1 text-xs\">\n <Unlink className=\"size-3.5 text-muted\" aria-hidden />\n <span className=\"min-w-0 truncate font-mono text-muted\">{r.target}</span>\n <span className=\"ml-auto shrink-0 text-[11px] text-muted\">{MISS_KIND[r.kind] ?? r.kind}</span>\n <span className=\"shrink-0 font-mono text-[11px] text-muted tabular-nums\">L{r.line}</span>\n </DropdownMenuItem>\n ))}\n </div>\n ))}\n {/* an item, so arrow keys reach it; preventDefault keeps the menu open while it grows */}\n {shown.length < files.length && (\n <DropdownMenuItem onSelect={(e) => { e.preventDefault(); setAll(true) }} className=\"mt-1 py-1 text-xs text-muted\">\n <span>Show all <span className=\"font-mono tabular-nums\">{files.length}</span> files</span>\n </DropdownMenuItem>\n )}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","// Pure, deterministic force layout for the doc graph (/graph). No React, no fs, no Math.random:\n// the same nodes and edges always give the same positions, whatever their input order.\n\nexport type Point = { x: number; y: number }\nexport type ForceLayoutOptions = {\n /** Simulation steps; the temperature cools linearly to ~0 over them. */\n iterations?: number\n /** Average edge length of the output, in px. */\n edgeLength?: number\n /** No two nodes end up closer than this, in px. */\n minDistance?: number\n}\n\n/** FNV-1a 32-bit, mapped to [0, 1). */\nfunction hash01(s: string): number {\n let h = 0x811c9dc5\n for (let i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i)\n h = Math.imul(h, 0x01000193)\n }\n return (h >>> 0) / 2 ** 32\n}\n\n/**\n * Positions keyed by node id. Linked nodes pull together, everything repels, a weak pull to the centre keeps\n * disconnected components close. Nodes without edges get no position: /graph lists them on its Unlinked shelf, so\n * they never stretch the fit. The bounding box is centred on 0,0 and the average edge is ~`edgeLength` px.\n */\nexport function forceLayout(\n nodes: { id: string }[],\n edges: { from: string; to: string }[],\n opts: ForceLayoutOptions = {},\n): Record<string, Point> {\n return simulate(nodes, edges, opts, 1)[0]\n}\n\nfunction simulate(\n nodes: { id: string }[],\n edges: { from: string; to: string }[],\n opts: ForceLayoutOptions,\n frames: number,\n): Record<string, Point>[] {\n const { iterations = 300, edgeLength = 120, minDistance = 48 } = opts\n const ids = [...new Set(nodes.map(n => n.id))].sort()\n const index = new Map(ids.map((id, i) => [id, i]))\n // undirected, deduped, sorted pairs of known distinct nodes\n const pairKeys = new Set<string>()\n const links: [number, number][] = []\n for (const e of edges) {\n const a = index.get(e.from), b = index.get(e.to)\n if (a === undefined || b === undefined || a === b) continue\n const [i, j] = a < b ? [a, b] : [b, a]\n if (pairKeys.has(`${i} ${j}`)) continue\n pairKeys.add(`${i} ${j}`)\n links.push([i, j])\n }\n links.sort((p, q) => p[0] - q[0] || p[1] - q[1])\n\n const degree = ids.map(() => 0)\n for (const [i, j] of links) { degree[i]++; degree[j]++ }\n const linked = ids.map((_, i) => i).filter(i => degree[i] > 0)\n const n = linked.length\n\n // Seeded start from each id's own hash, so adding one doc barely moves the others' start.\n const K = 1 // ideal edge length in simulation units; rescaled at the end\n const spread = Math.sqrt(Math.max(n, 1)) * K\n const xs = ids.map(id => (hash01(id) - 0.5) * spread)\n const ys = ids.map(id => (hash01(`${id}\\u0000y`) - 0.5) * spread)\n\n // ponytail: O(n²) repulsion per step, fine to ~500 nodes; Barnes-Hut (quadtree) if graphs get bigger.\n const dx = new Float64Array(ids.length), dy = new Float64Array(ids.length)\n const gravity = 0.05\n const out: Record<string, Point>[] = []\n // frame f of `frames` is taken before iteration round(iterations * (f / (frames - 1))²), the last after the loop:\n // the layout moves most in its first iterations, so they get most of the frames\n const sampleAt = (f: number) => Math.round(iterations * (f / (frames - 1)) ** 2)\n let next = 0\n for (let step = 0; step < iterations; step++) {\n while (next < frames - 1 && sampleAt(next) === step) { out.push(normalize(xs.slice(), ys.slice(), 4)); next++ }\n const temp = spread * 0.1 * (1 - step / iterations) + 0.001\n dx.fill(0); dy.fill(0)\n for (let a = 0; a < n; a++) {\n const i = linked[a]\n for (let b = a + 1; b < n; b++) {\n const j = linked[b]\n let ex = xs[i] - xs[j], ey = ys[i] - ys[j]\n let d2 = ex * ex + ey * ey\n if (d2 < 1e-9) { ex = (i - j) * 1e-3; ey = 1e-3; d2 = ex * ex + ey * ey } // coincident: split by index\n const f = (K * K) / d2 // repulsion K²/d, as a factor on the (ex, ey) vector\n dx[i] += ex * f; dy[i] += ey * f; dx[j] -= ex * f; dy[j] -= ey * f\n }\n }\n for (const [i, j] of links) {\n const ex = xs[i] - xs[j], ey = ys[i] - ys[j]\n const f = Math.sqrt(ex * ex + ey * ey) / K // spring d²/K\n dx[i] -= ex * f; dy[i] -= ey * f; dx[j] += ex * f; dy[j] += ey * f\n }\n for (const i of linked) {\n dx[i] -= xs[i] * gravity; dy[i] -= ys[i] * gravity\n const len = Math.hypot(dx[i], dy[i])\n if (len > 0) { const m = Math.min(len, temp) / len; xs[i] += dx[i] * m; ys[i] += dy[i] * m }\n }\n }\n\n out.push(normalize(xs, ys, 50))\n return out\n\n /**\n * Scale to the average edge length, push apart pairs closer than minDistance, centre. Mutates.\n * ponytail: in-between frames get 4 push passes, not 50 (early ones are a scatter and 50 cost ~100ms on 200 nodes); they're in motion anyway.\n */\n function normalize(xs: number[], ys: number[], passes: number): Record<string, Point> {\n // Scale to the average edge length, then push apart any pair still closer than minDistance.\n const avg = links.reduce((s, [i, j]) => s + Math.hypot(xs[i] - xs[j], ys[i] - ys[j]), 0) / (links.length || 1)\n const scale = avg > 0 ? edgeLength / avg : 1\n for (const i of linked) { xs[i] *= scale; ys[i] *= scale }\n for (let pass = 0; pass < passes; pass++) {\n let moved = false\n for (let a = 0; a < n; a++) for (let b = a + 1; b < n; b++) {\n const i = linked[a], j = linked[b]\n let ex = xs[j] - xs[i], ey = ys[j] - ys[i]\n let d = Math.hypot(ex, ey)\n if (d >= minDistance) continue\n if (d < 1e-6) { ex = 1; ey = 0; d = 1 }\n const push = (minDistance - d) / 2 + 0.5\n xs[i] -= (ex / d) * push; ys[i] -= (ey / d) * push\n xs[j] += (ex / d) * push; ys[j] += (ey / d) * push\n moved = true\n }\n if (!moved) break\n }\n\n // Centre the bounding box on 0,0.\n const midX = n ? (Math.min(...linked.map(i => xs[i])) + Math.max(...linked.map(i => xs[i]))) / 2 : 0\n const midY = n ? (Math.min(...linked.map(i => ys[i])) + Math.max(...linked.map(i => ys[i]))) / 2 : 0\n const res: Record<string, Point> = {}\n for (const i of linked) res[ids[i]] = { x: Math.round((xs[i] - midX) * 100) / 100, y: Math.round((ys[i] - midY) * 100) / 100 }\n return res\n }\n}\n\n/** The ids within `depth` hops of `id`, either edge direction, including `id` itself. Used by Focus on /graph. */\nexport function neighbourhoodIds(edges: { from: string; to: string }[], id: string, depth: 1 | 2): Set<string> {\n const seen = new Set([id])\n let frontier = [id]\n for (let d = 0; d < depth; d++) {\n const next: string[] = []\n for (const e of edges) {\n for (const [a, b] of [[e.from, e.to], [e.to, e.from]]) {\n if (frontier.includes(a) && !seen.has(b)) { seen.add(b); next.push(b) }\n }\n }\n frontier = next\n }\n return seen\n}\n\nexport type ArrowKey = \"ArrowUp\" | \"ArrowDown\" | \"ArrowLeft\" | \"ArrowRight\"\n\n/**\n * Where an arrow key moves keyboard focus on /graph: the nearest linked node in that direction (distance along\n * the arrow plus twice the sideways drift), else the next (→ ↓) or previous (← ↑) node in `order`, wrapping.\n */\nexport function stepFocus(\n from: string,\n key: ArrowKey,\n pos: Record<string, Point>,\n neighbours: Iterable<string>,\n order: string[],\n): string | undefined {\n const a = pos[from]\n let best: string | undefined\n let bestScore = Infinity\n if (a) {\n for (const id of neighbours) {\n const b = pos[id]\n if (!b || id === from) continue\n const dx = b.x - a.x\n const dy = b.y - a.y\n const along = key === \"ArrowRight\" ? dx : key === \"ArrowLeft\" ? -dx : key === \"ArrowDown\" ? dy : -dy\n if (along <= 0) continue\n const score = along + 2 * Math.abs(key === \"ArrowRight\" || key === \"ArrowLeft\" ? dy : dx)\n if (score < bestScore || (score === bestScore && best !== undefined && id < best)) { best = id; bestScore = score }\n }\n }\n if (best || !order.length) return best\n const i = order.indexOf(from)\n const step = key === \"ArrowRight\" || key === \"ArrowDown\" ? 1 : -1\n return order[(Math.max(i, step > 0 ? -1 : 0) + step + order.length) % order.length]\n}\n\ntype GraphLike = { nodes: { path: string; label: string; status?: string }[]; edges: { from: string; to: string }[] }\n\n/**\n * Node paths a refresh touched: added or removed files, both ends of an added or removed link, renamed labels, status changes.\n * Empty on the first load (no `prev`), so only live updates flash.\n */\nexport function graphChanges(prev: GraphLike | null, next: GraphLike): Set<string> {\n const out = new Set<string>()\n if (!prev) return out\n // a relabel or a status change (an agent moving a task) marks the node\n const sig = (n: GraphLike[\"nodes\"][number]) => `${n.label}\\u0000${n.status ?? \"\"}`\n const labels = new Map(prev.nodes.map((n) => [n.path, sig(n)]))\n const now = new Set(next.nodes.map((n) => n.path))\n for (const n of next.nodes) if (labels.get(n.path) !== sig(n)) out.add(n.path)\n for (const p of labels.keys()) if (!now.has(p)) out.add(p)\n const key = (e: { from: string; to: string }) => `${e.from}\\u0000${e.to}`\n const before = new Set(prev.edges.map(key))\n const after = new Set(next.edges.map(key))\n for (const e of next.edges) if (!before.has(key(e))) out.add(e.from).add(e.to)\n for (const e of prev.edges) if (!after.has(key(e))) out.add(e.from).add(e.to)\n return out\n}\n\nexport type LabelBox = { id: string; x: number; y: number; w: number; h: number }\n\n/**\n * Greedy label collision pass: boxes come in priority order (selected, matches, then by degree); a label that\n * overlaps one already placed, or another node's dot (`dots`, keyed by node id), is hidden. `keep` ids are always\n * placed. Flow coordinates, so it holds at any zoom.\n * ponytail: O(n²) over visible labels (~200 here); a grid bucket if graphs reach thousands of labels.\n */\nexport function hiddenLabels(boxes: LabelBox[], keep: Set<string> = new Set(), dots: LabelBox[] = []): Set<string> {\n const placed: LabelBox[] = []\n const hidden = new Set<string>()\n const hit = (a: LabelBox, b: LabelBox) => a.x < b.x + b.w && b.x < a.x + a.w && a.y < b.y + b.h && b.y < a.y + a.h\n for (const b of boxes) {\n if (!keep.has(b.id) && (placed.some((p) => hit(p, b)) || dots.some((d) => d.id !== b.id && hit(d, b)))) hidden.add(b.id)\n else placed.push(b)\n }\n return hidden\n}\n\n/** A node the spring sim is moving on /graph: position and velocity, in flow px and px/s. */\nexport type Body = { x: number; y: number; vx: number; vy: number }\n/**\n * Live drag / hover physics on /graph. Only `bodies` move; everything else stays at its `layout` point. Positions are\n * never saved: a body at rest on its layout point is dropped, so the graph always comes back to the layout.\n */\nexport type SpringWorld = {\n bodies: Map<string, Body>\n /** The layout: where every node rests, and the fixed anchor for links to nodes that aren't simulated. */\n layout: Record<string, Point>\n /** Rest point overrides (the hover magnet's nudge); a body without one rests on its layout point. */\n shift: Record<string, Point>\n /** The node under the pointer: pinned there; its links pull the others while it's held. */\n drag: { id: string; x: number; y: number } | null\n /** Edges among the dragged node's neighbourhood: natural length `len` (the layout distance) and strength `k`. */\n links: { a: string; b: string; len: number; k: number }[]\n}\n\n// Return / magnet spring: ω = √170 ≈ 13/s, ζ 0.72 (≈ 4% overshoot, at rest in ~0.6s). While a drag holds the\n// neighbourhood, the pull home drops to a light tether so the edge springs lead; a light push keeps dots apart.\nexport const SPRING = { stiffness: 170, damping: 0.72, tether: 32, link: 90, repel: 2600, repelRadius: 70 }\nconst REST_PX = 0.05\nconst REST_V = 0.5\n\n/** Advances the world by `dt` seconds (clamped, substepped). True while anything still moves or is held. */\nexport function springStep(w: SpringWorld, dt: number): boolean {\n // a tab that was hidden comes back with a huge dt; an unclamped spring would fly off\n const total = Math.min(Math.max(dt, 0), 1 / 30)\n const subs = Math.max(1, Math.ceil(total * 240))\n const h = total / subs\n const c = 2 * SPRING.damping * Math.sqrt(SPRING.stiffness)\n const posOf = (id: string) => (w.drag?.id === id ? w.drag : w.bodies.get(id) ?? w.layout[id])\n for (let s = 0; s < subs; s++) {\n for (const [id, b] of w.bodies) {\n if (w.drag?.id === id) { b.x = w.drag.x; b.y = w.drag.y; b.vx = 0; b.vy = 0; continue }\n const rest = w.shift[id] ?? w.layout[id]\n if (!rest) continue\n const k = w.drag ? SPRING.tether : SPRING.stiffness\n let fx = k * (rest.x - b.x) - c * b.vx\n let fy = k * (rest.y - b.y) - c * b.vy\n if (w.drag) {\n for (const l of w.links) {\n const other = l.a === id ? l.b : l.b === id ? l.a : null\n const o = other === null ? undefined : posOf(other)\n if (!o) continue\n const ex = o.x - b.x, ey = o.y - b.y\n const d = Math.hypot(ex, ey) || 1\n const f = l.k * (d - l.len) / d\n fx += ex * f; fy += ey * f\n }\n const ex = b.x - w.drag.x, ey = b.y - w.drag.y\n const d = Math.hypot(ex, ey)\n if (d > 0 && d < SPRING.repelRadius) {\n const f = (SPRING.repel * (1 - d / SPRING.repelRadius)) / d\n fx += ex * f; fy += ey * f\n }\n }\n b.vx += fx * h; b.vy += fy * h\n b.x += b.vx * h; b.y += b.vy * h\n }\n }\n if (w.drag) return true\n let moving = false\n for (const [id, b] of w.bodies) {\n const rest = w.shift[id] ?? w.layout[id]\n if (!rest || (Math.hypot(rest.x - b.x, rest.y - b.y) < REST_PX && Math.hypot(b.vx, b.vy) < REST_V)) {\n // at rest: snap exactly; a body home on its layout point is done\n if (!rest || !w.shift[id]) w.bodies.delete(id)\n else { b.x = rest.x; b.y = rest.y; b.vx = 0; b.vy = 0 }\n } else moving = true\n }\n return moving\n}\n"],"names":["hash01","s","h","i","length","charCodeAt","Math","imul","forceLayout","nodes","edges","opts","simulate","frames","iterations","edgeLength","minDistance","ids","Set","map","n","id","sort","index","Map","pairKeys","links","e","a","get","from","b","to","undefined","j","has","add","push","p","q","degree","linked","_","filter","K","spread","sqrt","max","xs","ys","dx","Float64Array","dy","gravity","out","sampleAt","f","round","next","step","normalize","slice","temp","fill","ex","ey","d2","len","hypot","m","min","passes","avg","reduce","scale","pass","moved","d","midX","midY","res","x","y","neighbourhoodIds","depth","seen","frontier","includes","stepFocus","key","pos","neighbours","order","best","bestScore","Infinity","along","score","abs","indexOf","graphChanges","prev","sig","label","status","labels","path","now","keys","before","after","hiddenLabels","boxes","keep","dots","placed","hidden","hit","w","some","SPRING","stiffness","damping","tether","link","repel","repelRadius","REST_PX","REST_V","springStep","dt","total","subs","ceil","c","posOf","drag","bodies","layout","vx","vy","rest","shift","k","fx","fy","l","other","o","moving","delete"],"mappings":"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"}