@plebeiantech/lat.md 0.12.3-fork.8 → 0.13.4-fork.1

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 (330) hide show
  1. package/README.md +27 -3
  2. package/dist/src/cli/agent-invocation.d.ts +6 -0
  3. package/dist/src/cli/agent-invocation.js +23 -0
  4. package/dist/src/cli/checklist-menu.d.ts +2 -1
  5. package/dist/src/cli/checklist-menu.js +3 -2
  6. package/dist/src/cli/fork-instructions.d.ts +1 -0
  7. package/dist/src/cli/fork-instructions.js +8 -32
  8. package/dist/src/cli/fork-scaffold.js +2 -2
  9. package/dist/src/cli/graph.d.ts +1 -1
  10. package/dist/src/cli/hook.d.ts +26 -0
  11. package/dist/src/cli/hook.js +115 -64
  12. package/dist/src/cli/index.js +147 -70
  13. package/dist/src/cli/init-preferences.d.ts +4 -0
  14. package/dist/src/cli/init-preferences.js +36 -0
  15. package/dist/src/cli/init.d.ts +2 -1
  16. package/dist/src/cli/init.js +100 -60
  17. package/dist/src/cli/reindex.d.ts +1 -1
  18. package/dist/src/cli/reindex.js +7 -10
  19. package/dist/src/cli/search.d.ts +14 -4
  20. package/dist/src/cli/search.js +115 -101
  21. package/dist/src/cli/ui-build-server.d.ts +12 -0
  22. package/dist/src/cli/ui-build-server.js +26 -0
  23. package/dist/src/cli/ui-build.d.ts +1 -1
  24. package/dist/src/cli/ui-build.js +1 -1
  25. package/dist/src/cli/ui.d.ts +1 -1
  26. package/dist/src/cli/ui.js +1 -1
  27. package/dist/src/fork/antigravity-hook.d.ts +47 -0
  28. package/dist/src/fork/antigravity-hook.js +424 -0
  29. package/dist/src/fork/antigravity-init.d.ts +17 -0
  30. package/dist/src/fork/antigravity-init.js +124 -0
  31. package/dist/src/fork/upstream-drift.js +1 -1
  32. package/dist/src/fork/upstream-guard.d.ts +1 -1
  33. package/dist/src/fork/upstream-guard.js +8 -7
  34. package/dist/src/graph-export.js +7 -7
  35. package/dist/src/knowledge/index.js +2 -2
  36. package/dist/src/mcp/server.js +34 -18
  37. package/dist/src/search/cache.d.ts +3 -0
  38. package/dist/src/search/cache.js +104 -0
  39. package/dist/src/search/chunks.d.ts +23 -0
  40. package/dist/src/search/chunks.js +200 -0
  41. package/dist/src/search/db.d.ts +28 -16
  42. package/dist/src/search/db.js +100 -40
  43. package/dist/src/search/embedder.d.ts +2 -1
  44. package/dist/src/search/embedder.js +7 -6
  45. package/dist/src/search/index.d.ts +6 -2
  46. package/dist/src/search/index.js +176 -53
  47. package/dist/src/search/lexical.d.ts +6 -0
  48. package/dist/src/search/lexical.js +36 -0
  49. package/dist/src/search/lock.d.ts +5 -0
  50. package/dist/src/search/lock.js +45 -0
  51. package/dist/src/search/query.d.ts +26 -0
  52. package/dist/src/search/query.js +103 -0
  53. package/dist/src/search/search.d.ts +16 -7
  54. package/dist/src/search/search.js +165 -21
  55. package/dist/src/search/types.d.ts +15 -0
  56. package/dist/src/view/client/assets/GraphView-D_xnk0bP.js +456 -0
  57. package/dist/src/view/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  58. package/dist/src/view/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  59. package/dist/src/view/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  60. package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  61. package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  62. package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  63. package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  64. package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  65. package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  66. package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  67. package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  68. package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  69. package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  70. package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  71. package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  72. package/dist/src/view/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  73. package/dist/src/view/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  74. package/dist/src/view/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  75. package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  76. package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  77. package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  78. package/dist/src/view/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  79. package/dist/src/view/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  80. package/dist/src/view/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  81. package/dist/src/view/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  82. package/dist/src/view/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  83. package/dist/src/view/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  84. package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  85. package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  86. package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  87. package/dist/src/view/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  88. package/dist/src/view/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  89. package/dist/src/view/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  90. package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  91. package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  92. package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  93. package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  94. package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  95. package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  96. package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  97. package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  98. package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  99. package/dist/src/view/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  100. package/dist/src/view/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  101. package/dist/src/view/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  102. package/dist/src/view/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  103. package/dist/src/view/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  104. package/dist/src/view/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  105. package/dist/src/view/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  106. package/dist/src/view/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  107. package/dist/src/view/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  108. package/dist/src/view/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  109. package/dist/src/view/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  110. package/dist/src/view/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  111. package/dist/src/view/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  112. package/dist/src/view/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  113. package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  114. package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  115. package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  116. package/dist/src/view/client/assets/MarkdownEditor-bjqt_FoF.js +28 -0
  117. package/dist/src/view/client/assets/OrbitControls-DwcpQNja.js +1 -0
  118. package/dist/src/view/client/assets/STLLoader-CLWTKt5i.js +1 -0
  119. package/dist/src/view/client/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  120. package/dist/src/view/client/assets/abnfDiagram-VCTEODGH-kWGvtRnL.js +1 -0
  121. package/dist/src/view/client/assets/arc-BPAFd7cP.js +1 -0
  122. package/dist/src/view/client/assets/architectureDiagram-5GKGNRK7-CsY39oIR.js +36 -0
  123. package/dist/src/view/client/assets/blockDiagram-I7D4REHJ-DHGBG7BJ.js +129 -0
  124. package/dist/src/view/client/assets/c4Diagram-7LVT6UL2-vywK4eb7.js +38 -0
  125. package/dist/src/view/client/assets/channel-CX71L_qV.js +1 -0
  126. package/dist/src/view/client/assets/chunk-2Q5K7J3B-Do3Hz_ci.js +1 -0
  127. package/dist/src/view/client/assets/chunk-5VM5RSS4-B5R1lSeY.js +15 -0
  128. package/dist/src/view/client/assets/chunk-F27PBJKO-Dm55FM_W.js +1 -0
  129. package/dist/src/view/client/assets/chunk-IMKFNOWR-ChptrvvM.js +231 -0
  130. package/dist/src/view/client/assets/chunk-JWPE2WC7-BRQBjrKS.js +1 -0
  131. package/dist/src/view/client/assets/chunk-POPQ4Y6H-CainVZIL.js +1 -0
  132. package/dist/src/view/client/assets/chunk-SVP7TREG-DsKsNGmM.js +88 -0
  133. package/dist/src/view/client/assets/chunk-TICWLB2K-BctkMcJc.js +206 -0
  134. package/dist/src/view/client/assets/chunk-XXDRQBXY-BN7SgOUT.js +1 -0
  135. package/dist/src/view/client/assets/classDiagram-ZZMXUADV-B1VyU6zO.js +1 -0
  136. package/dist/src/view/client/assets/classDiagram-v2-VYDZK3BY-B1VyU6zO.js +1 -0
  137. package/dist/src/view/client/assets/cose-bilkent-JH36ORCC-BszzwrMe.js +1 -0
  138. package/dist/src/view/client/assets/cynefin-OW5HDTMX-CdRyAkPs.js +166 -0
  139. package/dist/src/view/client/assets/cynefinDiagram-5FMLGOSQ-BLvKPZ1u.js +62 -0
  140. package/dist/src/view/client/assets/cytoscape.esm-DzSz-X2X.js +321 -0
  141. package/dist/src/view/client/assets/dagre-GXQ25YYZ-V68w_l65.js +4 -0
  142. package/dist/src/view/client/assets/defaultLocale-DX6XiGOO.js +1 -0
  143. package/dist/src/view/client/assets/diagram-S7CK7UJ4-C2i4eEMg.js +30 -0
  144. package/dist/src/view/client/assets/diagram-UQ7AKVKN-BiwWh5jC.js +41 -0
  145. package/dist/src/view/client/assets/diagram-VSXAHHWV-hkKR_vyS.js +3 -0
  146. package/dist/src/view/client/assets/diagram-VX7I27RA-DzRCSMAc.js +24 -0
  147. package/dist/src/view/client/assets/diagram-Z3DM3KII-fhSFPxyK.js +24 -0
  148. package/dist/src/view/client/assets/ebnfDiagram-PWID7BFC-CCEUDKSA.js +1 -0
  149. package/dist/src/view/client/assets/erDiagram-RLTQ6QDP-FJ2IMyTi.js +99 -0
  150. package/dist/src/view/client/assets/flowDiagram-HODETNUW-BvasdLeK.js +168 -0
  151. package/dist/src/view/client/assets/ganttDiagram-EL5Y4UJY-CiwkBZvY.js +292 -0
  152. package/dist/src/view/client/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  153. package/dist/src/view/client/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  154. package/dist/src/view/client/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  155. package/dist/src/view/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  156. package/dist/src/view/client/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  157. package/dist/src/view/client/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  158. package/dist/src/view/client/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  159. package/dist/src/view/client/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  160. package/dist/src/view/client/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  161. package/dist/src/view/client/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  162. package/dist/src/view/client/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  163. package/dist/src/view/client/assets/gitGraphDiagram-WWUBYQGX-DYlP2_js.js +106 -0
  164. package/dist/src/view/client/assets/index-BnENo9bV.js +1 -0
  165. package/dist/src/view/client/assets/index-CQ7EOox7.css +1 -0
  166. package/dist/src/view/client/assets/index-CynNDkxt.js +13 -0
  167. package/dist/src/view/client/assets/infoDiagram-27XIBGKW-DRPB2c48.js +2 -0
  168. package/dist/src/view/client/assets/init-Gi6I4Gst.js +1 -0
  169. package/dist/src/view/client/assets/ishikawaDiagram-5VMMS53U-8VV429Cv.js +70 -0
  170. package/dist/src/view/client/assets/journeyDiagram-3NMN7TZE-Dzmwnf83.js +139 -0
  171. package/dist/src/view/client/assets/kanban-definition-UXKFOSKX-pYyZZ1i-.js +89 -0
  172. package/dist/src/view/client/assets/katex-HP8lGamR.js +257 -0
  173. package/dist/src/view/client/assets/layout-GF9k6yGo.js +1 -0
  174. package/dist/src/view/client/assets/linear-Yt2sSOYV.js +1 -0
  175. package/dist/src/view/client/assets/logo-RR_KBOAT.svg +149 -0
  176. package/dist/src/view/client/assets/maplibre-gl-CDX6Zuow.js +800 -0
  177. package/dist/src/view/client/assets/mermaid.core-ChWYCHN0.js +310 -0
  178. package/dist/src/view/client/assets/mindmap-definition-YA3MSWOX-Cc4fQvf1.js +96 -0
  179. package/dist/src/view/client/assets/ordinal-Cboi1Yqb.js +1 -0
  180. package/dist/src/view/client/assets/pegDiagram-XKGWAZYB-C0SsB8bZ.js +1 -0
  181. package/dist/src/view/client/assets/pieDiagram-E7YTZNPT-DIJpqERZ.js +39 -0
  182. package/dist/src/view/client/assets/quadrantDiagram-AXDQQJYC--d-gl6j-.js +7 -0
  183. package/dist/src/view/client/assets/railroadDiagram-O6MQD6OU-BQxwTt7z.js +1 -0
  184. package/dist/src/view/client/assets/requirementDiagram-BXWQKSXE-B_oTeD2A.js +84 -0
  185. package/dist/src/view/client/assets/sankeyDiagram-P5KCCOFB-DLukmE8X.js +40 -0
  186. package/dist/src/view/client/assets/sequenceDiagram-WJ2MYXX4-BNjVB2sc.js +162 -0
  187. package/dist/src/view/client/assets/sizeCapture-INFHLROL-BZecQTOw.js +1 -0
  188. package/dist/src/view/client/assets/stateDiagram-D77RDMKH-Bu1urvXC.js +1 -0
  189. package/dist/src/view/client/assets/stateDiagram-v2-MP3YSRHH-5pc_697G.js +1 -0
  190. package/dist/src/view/client/assets/swimlanes-42K2YHIH-bLAlcepB.js +1 -0
  191. package/dist/src/view/client/assets/swimlanesDiagram-VR7AAH4N-BbOpZjpp.js +8 -0
  192. package/dist/src/view/client/assets/three.module-PDSP0dbZ.js +4108 -0
  193. package/dist/src/view/client/assets/timeline-definition-24CTP7MA-tbwCNvcA.js +120 -0
  194. package/dist/src/view/client/assets/vennDiagram-4TSXK5OY-D8U8Fk0N.js +34 -0
  195. package/dist/src/view/client/assets/wardleyDiagram-VM6X3IG4-LHBVIeNb.js +78 -0
  196. package/dist/src/view/client/assets/xychartDiagram-S5SC5T6Z-CN4tfaFV.js +7 -0
  197. package/dist/src/view/client/index.html +2 -2
  198. package/dist/src/view/client-shell.d.ts +2 -0
  199. package/dist/src/view/client-shell.js +5 -0
  200. package/dist/src/view/diagnostics.d.ts +3 -2
  201. package/dist/src/view/diagnostics.js +49 -58
  202. package/dist/src/view/document-edit.d.ts +8 -0
  203. package/dist/src/view/document-edit.js +25 -0
  204. package/dist/src/view/document-route.d.ts +14 -0
  205. package/dist/src/view/document-route.js +137 -0
  206. package/dist/src/view/document-tree.d.ts +18 -0
  207. package/dist/src/view/document-tree.js +139 -0
  208. package/dist/src/view/external-document-tree.d.ts +3 -0
  209. package/dist/src/view/external-document-tree.js +674 -0
  210. package/dist/src/view/git-diff.js +202 -2
  211. package/dist/src/view/git.js +1 -1
  212. package/dist/src/view/graph.d.ts +4 -3
  213. package/dist/src/view/graph.js +100 -9
  214. package/dist/src/view/highlight.d.ts +10 -2
  215. package/dist/src/view/highlight.js +50648 -3166
  216. package/dist/src/view/markdown.d.ts +3 -2
  217. package/dist/src/view/markdown.js +256 -54
  218. package/dist/src/view/preindexed-search.d.ts +15 -0
  219. package/dist/src/view/preindexed-search.js +25 -0
  220. package/dist/src/view/protocol.d.ts +53 -7
  221. package/dist/src/view/publication.d.ts +2 -0
  222. package/dist/src/view/publication.js +78 -0
  223. package/dist/src/view/references.d.ts +11 -26
  224. package/dist/src/view/references.js +121 -112
  225. package/dist/src/view/repository.d.ts +14 -4
  226. package/dist/src/view/repository.js +260 -19
  227. package/dist/src/view/request-security.d.ts +5 -0
  228. package/dist/src/view/request-security.js +46 -0
  229. package/dist/src/view/search-result.d.ts +4 -0
  230. package/dist/src/view/search-result.js +25 -0
  231. package/dist/src/view/search.d.ts +7 -2
  232. package/dist/src/view/search.js +23 -34
  233. package/dist/src/view/server-build.d.ts +21 -0
  234. package/dist/src/view/server-build.js +145 -0
  235. package/dist/src/view/server-deployment.d.ts +31 -0
  236. package/dist/src/view/server-deployment.js +123 -0
  237. package/dist/src/view/server-index-worker.d.ts +6 -0
  238. package/dist/src/view/server-index-worker.js +14 -0
  239. package/dist/src/view/server.d.ts +11 -2
  240. package/dist/src/view/server.js +245 -73
  241. package/dist/src/view/source-target.d.ts +2 -0
  242. package/dist/src/view/source-target.js +49 -8
  243. package/dist/src/view/static-build.d.ts +18 -2
  244. package/dist/src/view/static-build.js +449 -110
  245. package/dist/src/view/static-protocol.d.ts +26 -2
  246. package/dist/src/view/static-protocol.js +5 -0
  247. package/dist/src/view/store.d.ts +20 -3
  248. package/dist/src/view/store.js +304 -48
  249. package/dist/src/view/table-of-contents.d.ts +2 -2
  250. package/dist/src/view/table-of-contents.js +2 -22
  251. package/dist/src/view/vercel-build.d.ts +24 -0
  252. package/dist/src/view/vercel-build.js +152 -0
  253. package/dist/src/view/vercel-server-build.d.ts +10 -0
  254. package/dist/src/view/vercel-server-build.js +61 -0
  255. package/dist/vendor/lat.md-server/cli.d.ts +2 -0
  256. package/dist/vendor/lat.md-server/cli.js +12 -0
  257. package/dist/vendor/lat.md-server/index.d.ts +38 -0
  258. package/dist/vendor/lat.md-server/index.js +128 -0
  259. package/package.json +68 -22
  260. package/plugins/lat-md/README.md +61 -0
  261. package/plugins/lat-md/hooks.json +38 -0
  262. package/plugins/lat-md/plugin.json +9 -0
  263. package/plugins/lat-md/rules/AGENTS.md +344 -0
  264. package/plugins/lat-md/skills/lat-md/SKILL.md +210 -0
  265. package/plugins/lat-md/skills/lat-md-conventions/SKILL.md +226 -0
  266. package/templates/AGENTS.md +26 -7
  267. package/templates/cursor-rules.md +23 -7
  268. package/templates/fork/conventions.md +133 -11
  269. package/templates/opencode-plugin.ts +9 -9
  270. package/templates/pi-extension.ts +11 -11
  271. package/templates/skill/SKILL.md +35 -3
  272. package/dist/src/cli/check-coverage.d.ts +0 -2
  273. package/dist/src/cli/check-coverage.js +0 -71
  274. package/dist/src/cli/check-frontmatter.d.ts +0 -12
  275. package/dist/src/cli/check-frontmatter.js +0 -44
  276. package/dist/src/cli/check-mode.d.ts +0 -21
  277. package/dist/src/cli/check-mode.js +0 -364
  278. package/dist/src/cli/check-status.d.ts +0 -74
  279. package/dist/src/cli/check-status.js +0 -217
  280. package/dist/src/cli/check.d.ts +0 -45
  281. package/dist/src/cli/check.js +0 -781
  282. package/dist/src/cli/context.d.ts +0 -11
  283. package/dist/src/cli/context.js +0 -58
  284. package/dist/src/cli/expand.d.ts +0 -8
  285. package/dist/src/cli/expand.js +0 -94
  286. package/dist/src/cli/gen-index.d.ts +0 -45
  287. package/dist/src/cli/gen-index.js +0 -235
  288. package/dist/src/cli/link-scheme.d.ts +0 -54
  289. package/dist/src/cli/link-scheme.js +0 -101
  290. package/dist/src/cli/locate.d.ts +0 -2
  291. package/dist/src/cli/locate.js +0 -17
  292. package/dist/src/cli/refs.d.ts +0 -22
  293. package/dist/src/cli/refs.js +0 -229
  294. package/dist/src/cli/section.d.ts +0 -43
  295. package/dist/src/cli/section.js +0 -252
  296. package/dist/src/cli/select-menu.d.ts +0 -13
  297. package/dist/src/cli/select-menu.js +0 -100
  298. package/dist/src/code-refs.d.ts +0 -17
  299. package/dist/src/code-refs.js +0 -298
  300. package/dist/src/config.d.ts +0 -29
  301. package/dist/src/config.js +0 -83
  302. package/dist/src/context.d.ts +0 -23
  303. package/dist/src/context.js +0 -11
  304. package/dist/src/extensions/wiki-link/from-markdown.d.ts +0 -5
  305. package/dist/src/extensions/wiki-link/from-markdown.js +0 -34
  306. package/dist/src/extensions/wiki-link/index.d.ts +0 -4
  307. package/dist/src/extensions/wiki-link/index.js +0 -3
  308. package/dist/src/extensions/wiki-link/syntax.d.ts +0 -14
  309. package/dist/src/extensions/wiki-link/syntax.js +0 -121
  310. package/dist/src/extensions/wiki-link/to-markdown.d.ts +0 -5
  311. package/dist/src/extensions/wiki-link/to-markdown.js +0 -28
  312. package/dist/src/extensions/wiki-link/types.d.ts +0 -34
  313. package/dist/src/format.d.ts +0 -8
  314. package/dist/src/format.js +0 -43
  315. package/dist/src/init-version.d.ts +0 -10
  316. package/dist/src/init-version.js +0 -49
  317. package/dist/src/lattice.d.ts +0 -109
  318. package/dist/src/lattice.js +0 -817
  319. package/dist/src/parser.d.ts +0 -3
  320. package/dist/src/parser.js +0 -18
  321. package/dist/src/source-parser.d.ts +0 -27
  322. package/dist/src/source-parser.js +0 -916
  323. package/dist/src/untrusted.d.ts +0 -18
  324. package/dist/src/untrusted.js +0 -93
  325. package/dist/src/view/client/assets/index-VZwPPiFE.js +0 -334
  326. package/dist/src/view/client/assets/index-W8ktvNj9.css +0 -1
  327. package/dist/src/view/client/assets/logo-CNF8zs47.svg +0 -182
  328. package/dist/src/walk.d.ts +0 -18
  329. package/dist/src/walk.js +0 -27
  330. /package/dist/src/{extensions/wiki-link → search}/types.js +0 -0
@@ -1,916 +0,0 @@
1
- import { readFileSync } from 'node:fs';
2
- import { dirname, join } from 'node:path';
3
- import { createRequire } from 'node:module';
4
- import { Parser, Language, } from 'web-tree-sitter';
5
- // Lazy singleton for the parser
6
- let parserReady = null;
7
- let parserInstance = null;
8
- const languages = new Map();
9
- function wasmDir() {
10
- const require = createRequire(import.meta.url);
11
- const pkgPath = require.resolve('@repomix/tree-sitter-wasms/package.json');
12
- return join(dirname(pkgPath), 'out');
13
- }
14
- async function ensureParser() {
15
- if (!parserReady) {
16
- parserReady = Parser.init();
17
- }
18
- await parserReady;
19
- if (!parserInstance) {
20
- parserInstance = new Parser();
21
- }
22
- return parserInstance;
23
- }
24
- /** Extension → tree-sitter WASM grammar mapping. This is the single source of
25
- * truth for which source file extensions lat supports. */
26
- const grammarMap = {
27
- '.ts': 'tree-sitter-typescript.wasm',
28
- '.tsx': 'tree-sitter-tsx.wasm',
29
- '.js': 'tree-sitter-javascript.wasm',
30
- '.jsx': 'tree-sitter-javascript.wasm',
31
- '.py': 'tree-sitter-python.wasm',
32
- '.rs': 'tree-sitter-rust.wasm',
33
- '.go': 'tree-sitter-go.wasm',
34
- '.c': 'tree-sitter-c.wasm',
35
- '.h': 'tree-sitter-c.wasm',
36
- };
37
- /** All source file extensions that lat can parse (derived from grammarMap). */
38
- export const SOURCE_EXTENSIONS = new Set(Object.keys(grammarMap));
39
- async function getLanguage(ext) {
40
- const wasmFile = grammarMap[ext];
41
- if (!wasmFile)
42
- return null;
43
- // Ensure WASM runtime is initialized before loading languages
44
- await ensureParser();
45
- if (!languages.has(wasmFile)) {
46
- const wasmPath = join(wasmDir(), wasmFile);
47
- const lang = await Language.load(wasmPath);
48
- languages.set(wasmFile, lang);
49
- }
50
- return languages.get(wasmFile);
51
- }
52
- function extractName(node) {
53
- const nameNode = node.childForFieldName('name');
54
- return nameNode ? nameNode.text : null;
55
- }
56
- function extractTsSymbols(tree) {
57
- const symbols = [];
58
- const root = tree.rootNode;
59
- for (let i = 0; i < root.childCount; i++) {
60
- let node = root.child(i);
61
- // Unwrap export_statement to get the inner declaration
62
- const isExport = node.type === 'export_statement';
63
- if (isExport) {
64
- const inner = node.namedChildren.find((c) => c.type === 'function_declaration' ||
65
- c.type === 'class_declaration' ||
66
- c.type === 'lexical_declaration' ||
67
- c.type === 'type_alias_declaration' ||
68
- c.type === 'interface_declaration' ||
69
- c.type === 'abstract_class_declaration');
70
- if (inner)
71
- node = inner;
72
- }
73
- const startLine = node.startPosition.row + 1;
74
- const endLine = node.endPosition.row + 1;
75
- if (node.type === 'function_declaration' ||
76
- node.type === 'generator_function_declaration') {
77
- const name = extractName(node);
78
- if (name) {
79
- symbols.push({
80
- name,
81
- kind: 'function',
82
- startLine,
83
- endLine,
84
- signature: firstLine(node.text),
85
- });
86
- }
87
- }
88
- else if (node.type === 'class_declaration' ||
89
- node.type === 'abstract_class_declaration') {
90
- const name = extractName(node);
91
- if (name) {
92
- symbols.push({
93
- name,
94
- kind: 'class',
95
- startLine,
96
- endLine,
97
- signature: firstLine(node.text),
98
- });
99
- // Extract methods
100
- const body = node.childForFieldName('body');
101
- if (body) {
102
- extractClassMethods(body, name, symbols);
103
- }
104
- }
105
- }
106
- else if (node.type === 'lexical_declaration') {
107
- // const/let declarations
108
- for (const decl of node.namedChildren) {
109
- if (decl.type === 'variable_declarator') {
110
- const name = extractName(decl);
111
- if (name) {
112
- symbols.push({
113
- name,
114
- kind: 'const',
115
- startLine,
116
- endLine,
117
- signature: firstLine(node.text),
118
- });
119
- }
120
- }
121
- }
122
- }
123
- else if (node.type === 'type_alias_declaration') {
124
- const name = extractName(node);
125
- if (name) {
126
- symbols.push({
127
- name,
128
- kind: 'type',
129
- startLine,
130
- endLine,
131
- signature: firstLine(node.text),
132
- });
133
- }
134
- }
135
- else if (node.type === 'interface_declaration') {
136
- const name = extractName(node);
137
- if (name) {
138
- symbols.push({
139
- name,
140
- kind: 'interface',
141
- startLine,
142
- endLine,
143
- signature: firstLine(node.text),
144
- });
145
- }
146
- }
147
- }
148
- return symbols;
149
- }
150
- function extractClassMethods(body, className, symbols) {
151
- for (let i = 0; i < body.namedChildCount; i++) {
152
- const member = body.namedChild(i);
153
- if (member.type === 'method_definition' ||
154
- member.type === 'public_field_definition') {
155
- const name = extractName(member);
156
- if (name) {
157
- symbols.push({
158
- name,
159
- kind: 'method',
160
- parent: className,
161
- startLine: member.startPosition.row + 1,
162
- endLine: member.endPosition.row + 1,
163
- signature: firstLine(member.text),
164
- });
165
- }
166
- }
167
- }
168
- }
169
- function extractPySymbols(tree) {
170
- const symbols = [];
171
- const root = tree.rootNode;
172
- for (let i = 0; i < root.childCount; i++) {
173
- const node = root.child(i);
174
- const startLine = node.startPosition.row + 1;
175
- const endLine = node.endPosition.row + 1;
176
- // Unwrap decorated_definition to get the inner function/class
177
- const inner = node.type === 'decorated_definition'
178
- ? node.childForFieldName('definition')
179
- : node;
180
- if (!inner)
181
- continue;
182
- if (inner.type === 'function_definition') {
183
- const name = extractName(inner);
184
- if (name) {
185
- symbols.push({
186
- name,
187
- kind: 'function',
188
- startLine,
189
- endLine,
190
- signature: firstLine(inner.text),
191
- });
192
- }
193
- }
194
- else if (inner.type === 'class_definition') {
195
- const name = extractName(inner);
196
- if (name) {
197
- symbols.push({
198
- name,
199
- kind: 'class',
200
- startLine,
201
- endLine,
202
- signature: firstLine(inner.text),
203
- });
204
- // Extract methods
205
- const body = inner.childForFieldName('body');
206
- if (body) {
207
- for (let j = 0; j < body.namedChildCount; j++) {
208
- let member = body.namedChild(j);
209
- // Unwrap decorated methods
210
- if (member.type === 'decorated_definition') {
211
- member = member.childForFieldName('definition') ?? member;
212
- }
213
- if (member.type === 'function_definition') {
214
- const methodName = extractName(member);
215
- if (methodName) {
216
- symbols.push({
217
- name: methodName,
218
- kind: 'method',
219
- parent: name,
220
- startLine: member.startPosition.row + 1,
221
- endLine: member.endPosition.row + 1,
222
- signature: firstLine(member.text),
223
- });
224
- }
225
- }
226
- }
227
- }
228
- }
229
- }
230
- else if (inner.type === 'expression_statement' &&
231
- inner.namedChildCount === 1 &&
232
- inner.namedChild(0).type === 'assignment') {
233
- // Top-level assignment: FOO = ...
234
- const assign = inner.namedChild(0);
235
- const left = assign.childForFieldName('left');
236
- if (left && left.type === 'identifier') {
237
- symbols.push({
238
- name: left.text,
239
- kind: 'variable',
240
- startLine,
241
- endLine,
242
- signature: firstLine(node.text),
243
- });
244
- }
245
- }
246
- }
247
- return symbols;
248
- }
249
- function extractRustSymbols(tree) {
250
- const symbols = [];
251
- const root = tree.rootNode;
252
- for (let i = 0; i < root.childCount; i++) {
253
- const node = root.child(i);
254
- const startLine = node.startPosition.row + 1;
255
- const endLine = node.endPosition.row + 1;
256
- if (node.type === 'function_item') {
257
- const name = extractName(node);
258
- if (name) {
259
- symbols.push({
260
- name,
261
- kind: 'function',
262
- startLine,
263
- endLine,
264
- signature: firstLine(node.text),
265
- });
266
- }
267
- }
268
- else if (node.type === 'struct_item') {
269
- const name = extractName(node);
270
- if (name) {
271
- symbols.push({
272
- name,
273
- kind: 'class',
274
- startLine,
275
- endLine,
276
- signature: firstLine(node.text),
277
- });
278
- }
279
- }
280
- else if (node.type === 'enum_item') {
281
- const name = extractName(node);
282
- if (name) {
283
- symbols.push({
284
- name,
285
- kind: 'class',
286
- startLine,
287
- endLine,
288
- signature: firstLine(node.text),
289
- });
290
- }
291
- }
292
- else if (node.type === 'trait_item') {
293
- const name = extractName(node);
294
- if (name) {
295
- symbols.push({
296
- name,
297
- kind: 'interface',
298
- startLine,
299
- endLine,
300
- signature: firstLine(node.text),
301
- });
302
- }
303
- }
304
- else if (node.type === 'impl_item') {
305
- // impl Type { ... } or impl Trait for Type { ... }
306
- const typeName = node.childForFieldName('type')?.text;
307
- if (!typeName)
308
- continue;
309
- const body = node.childForFieldName('body');
310
- if (!body)
311
- continue;
312
- for (let j = 0; j < body.namedChildCount; j++) {
313
- const member = body.namedChild(j);
314
- if (member.type === 'function_item') {
315
- const name = extractName(member);
316
- if (name) {
317
- symbols.push({
318
- name,
319
- kind: 'method',
320
- parent: typeName,
321
- startLine: member.startPosition.row + 1,
322
- endLine: member.endPosition.row + 1,
323
- signature: firstLine(member.text),
324
- });
325
- }
326
- }
327
- }
328
- }
329
- else if (node.type === 'const_item') {
330
- const name = extractName(node);
331
- if (name) {
332
- symbols.push({
333
- name,
334
- kind: 'const',
335
- startLine,
336
- endLine,
337
- signature: firstLine(node.text),
338
- });
339
- }
340
- }
341
- else if (node.type === 'static_item') {
342
- const name = extractName(node);
343
- if (name) {
344
- symbols.push({
345
- name,
346
- kind: 'variable',
347
- startLine,
348
- endLine,
349
- signature: firstLine(node.text),
350
- });
351
- }
352
- }
353
- else if (node.type === 'type_item') {
354
- const name = extractName(node);
355
- if (name) {
356
- symbols.push({
357
- name,
358
- kind: 'type',
359
- startLine,
360
- endLine,
361
- signature: firstLine(node.text),
362
- });
363
- }
364
- }
365
- }
366
- return symbols;
367
- }
368
- /**
369
- * Extract the receiver type name from a Go method declaration's receiver node.
370
- * Handles both value receivers (Greeter) and pointer receivers (*Greeter).
371
- */
372
- function goReceiverType(receiverNode) {
373
- const param = receiverNode.namedChild(0);
374
- if (!param)
375
- return null;
376
- const typeNode = param.childForFieldName('type');
377
- if (!typeNode)
378
- return null;
379
- // pointer_type -> child is the actual type name
380
- if (typeNode.type === 'pointer_type') {
381
- return typeNode.namedChild(0)?.text ?? null;
382
- }
383
- return typeNode.text;
384
- }
385
- function extractGoSymbols(tree) {
386
- const symbols = [];
387
- const root = tree.rootNode;
388
- for (let i = 0; i < root.childCount; i++) {
389
- const node = root.child(i);
390
- const startLine = node.startPosition.row + 1;
391
- const endLine = node.endPosition.row + 1;
392
- if (node.type === 'function_declaration') {
393
- const name = extractName(node);
394
- if (name) {
395
- symbols.push({
396
- name,
397
- kind: 'function',
398
- startLine,
399
- endLine,
400
- signature: firstLine(node.text),
401
- });
402
- }
403
- }
404
- else if (node.type === 'method_declaration') {
405
- const name = extractName(node);
406
- const receiver = node.childForFieldName('receiver');
407
- const typeName = receiver ? goReceiverType(receiver) : null;
408
- if (name && typeName) {
409
- symbols.push({
410
- name,
411
- kind: 'method',
412
- parent: typeName,
413
- startLine,
414
- endLine,
415
- signature: firstLine(node.text),
416
- });
417
- }
418
- }
419
- else if (node.type === 'type_declaration') {
420
- for (let j = 0; j < node.namedChildCount; j++) {
421
- const spec = node.namedChild(j);
422
- if (spec.type !== 'type_spec')
423
- continue;
424
- const name = spec.childForFieldName('name')?.text;
425
- if (!name)
426
- continue;
427
- const typeNode = spec.childForFieldName('type');
428
- const kind = typeNode?.type === 'interface_type' ? 'interface' : 'class';
429
- symbols.push({
430
- name,
431
- kind,
432
- startLine: spec.startPosition.row + 1,
433
- endLine: spec.endPosition.row + 1,
434
- signature: firstLine(node.text),
435
- });
436
- }
437
- }
438
- else if (node.type === 'const_declaration') {
439
- for (let j = 0; j < node.namedChildCount; j++) {
440
- const spec = node.namedChild(j);
441
- if (spec.type !== 'const_spec')
442
- continue;
443
- const name = spec.childForFieldName('name')?.text;
444
- if (name) {
445
- symbols.push({
446
- name,
447
- kind: 'const',
448
- startLine: spec.startPosition.row + 1,
449
- endLine: spec.endPosition.row + 1,
450
- signature: firstLine(node.text),
451
- });
452
- }
453
- }
454
- }
455
- else if (node.type === 'var_declaration') {
456
- for (let j = 0; j < node.namedChildCount; j++) {
457
- const spec = node.namedChild(j);
458
- if (spec.type !== 'var_spec')
459
- continue;
460
- const name = spec.childForFieldName('name')?.text;
461
- if (name) {
462
- symbols.push({
463
- name,
464
- kind: 'variable',
465
- startLine: spec.startPosition.row + 1,
466
- endLine: spec.endPosition.row + 1,
467
- signature: firstLine(node.text),
468
- });
469
- }
470
- }
471
- }
472
- }
473
- return symbols;
474
- }
475
- /**
476
- * Extract the declarator name from a C function_declarator node.
477
- * Handles plain identifiers and pointer declarators (*name).
478
- */
479
- function cFuncName(declarator) {
480
- // Unwrap pointer_declarator layers (for functions returning pointers,
481
- // e.g. `JSRuntime *JS_NewRuntime(void)` → pointer_declarator > function_declarator)
482
- let node = declarator;
483
- while (node.type === 'pointer_declarator') {
484
- const child = node.childForFieldName('declarator');
485
- if (!child)
486
- return null;
487
- node = child;
488
- }
489
- if (node.type === 'function_declarator') {
490
- const inner = node.childForFieldName('declarator');
491
- if (!inner)
492
- return null;
493
- if (inner.type === 'identifier')
494
- return inner.text;
495
- if (inner.type === 'pointer_declarator') {
496
- // *name — dig through pointer layers
497
- let cur = inner;
498
- while (cur.type === 'pointer_declarator') {
499
- const child = cur.childForFieldName('declarator');
500
- if (!child)
501
- return null;
502
- cur = child;
503
- }
504
- return cur.type === 'identifier' ? cur.text : null;
505
- }
506
- }
507
- return null;
508
- }
509
- /**
510
- * Extract the variable name from a C init_declarator or plain declarator.
511
- * Handles pointers like `*DEFAULT_NAME = "World"`.
512
- */
513
- function cVarName(declarator) {
514
- let node = declarator;
515
- // Unwrap init_declarator to get the declarator part
516
- if (node.type === 'init_declarator') {
517
- const inner = node.childForFieldName('declarator');
518
- if (!inner)
519
- return null;
520
- node = inner;
521
- }
522
- // Unwrap array_declarator (e.g. `char js_version[]`)
523
- if (node.type === 'array_declarator') {
524
- const inner = node.childForFieldName('declarator');
525
- if (!inner)
526
- return null;
527
- node = inner;
528
- }
529
- if (node.type === 'identifier')
530
- return node.text;
531
- if (node.type === 'pointer_declarator') {
532
- let cur = node;
533
- while (cur.type === 'pointer_declarator') {
534
- const child = cur.childForFieldName('declarator');
535
- if (!child)
536
- return null;
537
- cur = child;
538
- }
539
- return cur.type === 'identifier' ? cur.text : null;
540
- }
541
- return null;
542
- }
543
- function extractCSymbols(tree) {
544
- const symbols = [];
545
- collectCNodes(tree.rootNode, symbols);
546
- return symbols;
547
- }
548
- /**
549
- * Walk C AST nodes, collecting symbols. Recurses into preprocessor
550
- * conditional blocks (ifdef/ifndef/if), linkage specifications
551
- * (extern "C" { ... }), and declaration lists so that include guards
552
- * and conditional compilation don't hide declarations.
553
- *
554
- * For #if/#ifdef/#ifndef, only the "then" branch is traversed —
555
- * preproc_else and preproc_elif children are skipped.
556
- */
557
- function collectCNodes(parent, symbols) {
558
- for (let i = 0; i < parent.childCount; i++) {
559
- const node = parent.child(i);
560
- const startLine = node.startPosition.row + 1;
561
- const endLine = node.endPosition.row + 1;
562
- if (node.type === 'function_definition') {
563
- const declarator = node.childForFieldName('declarator');
564
- const name = declarator ? cFuncName(declarator) : null;
565
- if (name) {
566
- symbols.push({
567
- name,
568
- kind: 'function',
569
- startLine,
570
- endLine,
571
- signature: firstLine(node.text),
572
- });
573
- }
574
- }
575
- else if (node.type === 'struct_specifier') {
576
- const name = extractName(node);
577
- if (name) {
578
- symbols.push({
579
- name,
580
- kind: 'class',
581
- startLine,
582
- endLine,
583
- signature: firstLine(node.text),
584
- });
585
- collectCStructFields(node, name, symbols);
586
- }
587
- }
588
- else if (node.type === 'enum_specifier') {
589
- const name = extractName(node);
590
- if (name) {
591
- symbols.push({
592
- name,
593
- kind: 'class',
594
- startLine,
595
- endLine,
596
- signature: firstLine(node.text),
597
- });
598
- }
599
- collectCEnumMembers(node, symbols, name ?? undefined);
600
- }
601
- else if (node.type === 'type_definition') {
602
- let declarator = node.childForFieldName('declarator');
603
- // Unwrap pointer_declarator for pointer typedefs
604
- // e.g. `typedef struct __JSValue *JSValue;`
605
- while (declarator?.type === 'pointer_declarator') {
606
- declarator = declarator.childForFieldName('declarator') ?? null;
607
- }
608
- const name = declarator?.type === 'type_identifier' ? declarator.text : null;
609
- if (name) {
610
- symbols.push({
611
- name,
612
- kind: 'type',
613
- startLine,
614
- endLine,
615
- signature: firstLine(node.text),
616
- });
617
- }
618
- for (const child of node.namedChildren) {
619
- if (child.type === 'enum_specifier') {
620
- collectCEnumMembers(child, symbols, name ?? extractName(child) ?? undefined);
621
- }
622
- else if (child.type === 'struct_specifier' && name) {
623
- collectCStructFields(child, name, symbols);
624
- }
625
- }
626
- }
627
- else if (node.type === 'declaration') {
628
- const declarator = node.childForFieldName('declarator');
629
- // Try as function declaration first (e.g. `void greet(const char *name);`
630
- // in headers), then fall back to variable.
631
- const funcName = declarator ? cFuncName(declarator) : null;
632
- if (funcName) {
633
- symbols.push({
634
- name: funcName,
635
- kind: 'function',
636
- startLine,
637
- endLine,
638
- signature: firstLine(node.text),
639
- });
640
- }
641
- else {
642
- const name = declarator ? cVarName(declarator) : null;
643
- if (name) {
644
- symbols.push({
645
- name,
646
- kind: 'variable',
647
- startLine,
648
- endLine,
649
- signature: firstLine(node.text),
650
- });
651
- }
652
- }
653
- }
654
- else if (node.type === 'preproc_def' ||
655
- node.type === 'preproc_function_def') {
656
- const name = extractName(node);
657
- if (name) {
658
- symbols.push({
659
- name,
660
- kind: 'const',
661
- startLine,
662
- endLine,
663
- signature: firstLine(node.text),
664
- });
665
- }
666
- }
667
- else if (node.type === 'preproc_ifdef' ||
668
- node.type === 'preproc_ifndef' ||
669
- node.type === 'preproc_if') {
670
- // Recurse into conditional blocks (then-branch only).
671
- // preproc_else / preproc_elif children are skipped.
672
- collectCNodes(node, symbols);
673
- }
674
- else if (node.type === 'linkage_specification' ||
675
- node.type === 'declaration_list') {
676
- // extern "C" { ... } wraps declarations in linkage_specification
677
- // containing a declaration_list — recurse through both.
678
- collectCNodes(node, symbols);
679
- }
680
- else if (node.type === 'preproc_else' || node.type === 'preproc_elif') {
681
- // Skip else/elif branches of preprocessor conditionals.
682
- }
683
- }
684
- }
685
- function collectCEnumMembers(enumSpecifier, symbols, enumName) {
686
- for (const child of enumSpecifier.namedChildren) {
687
- if (child.type !== 'enumerator_list')
688
- continue;
689
- for (const enumerator of child.namedChildren) {
690
- if (enumerator.type !== 'enumerator')
691
- continue;
692
- const name = extractName(enumerator);
693
- if (!name)
694
- continue;
695
- const sym = {
696
- name,
697
- kind: 'const',
698
- startLine: enumerator.startPosition.row + 1,
699
- endLine: enumerator.endPosition.row + 1,
700
- signature: firstLine(enumerator.text),
701
- };
702
- // Emit without parent (standalone lookup like #GREEN)
703
- symbols.push(sym);
704
- // Also emit with parent so #Color#GREEN works
705
- if (enumName) {
706
- symbols.push({ ...sym, parent: enumName });
707
- }
708
- }
709
- }
710
- }
711
- /**
712
- * Extract struct field/member names from a struct_specifier and emit
713
- * them as symbols with `parent` set to the struct name.
714
- * Handles plain identifiers, pointers, arrays, bitfields, and
715
- * anonymous union/struct members (recurses into them).
716
- */
717
- function collectCStructFields(structNode, structName, symbols) {
718
- for (const child of structNode.namedChildren) {
719
- if (child.type !== 'field_declaration_list')
720
- continue;
721
- collectFieldsFromList(child, structName, symbols);
722
- }
723
- }
724
- function collectFieldsFromList(fieldList, structName, symbols) {
725
- for (const field of fieldList.namedChildren) {
726
- if (field.type !== 'field_declaration')
727
- continue;
728
- const declarator = field.childForFieldName('declarator');
729
- if (declarator) {
730
- const name = cFieldName(declarator);
731
- if (!name)
732
- continue;
733
- symbols.push({
734
- name,
735
- kind: 'variable',
736
- parent: structName,
737
- startLine: field.startPosition.row + 1,
738
- endLine: field.endPosition.row + 1,
739
- signature: firstLine(field.text),
740
- });
741
- }
742
- else {
743
- // Anonymous union/struct member — recurse into its field list
744
- for (const inner of field.namedChildren) {
745
- if ((inner.type === 'union_specifier' ||
746
- inner.type === 'struct_specifier') &&
747
- !extractName(inner)) {
748
- for (const sub of inner.namedChildren) {
749
- if (sub.type === 'field_declaration_list') {
750
- collectFieldsFromList(sub, structName, symbols);
751
- }
752
- }
753
- }
754
- }
755
- }
756
- }
757
- }
758
- /**
759
- * Extract the field name from a C struct field declarator.
760
- * Handles field_identifier, pointer_declarator, array_declarator,
761
- * and bitfield_clause (e.g. `uint8_t extensible : 1`).
762
- */
763
- function cFieldName(declarator) {
764
- let node = declarator;
765
- // Unwrap pointer_declarator layers (e.g. `JSShape *shape`)
766
- while (node.type === 'pointer_declarator') {
767
- const child = node.childForFieldName('declarator');
768
- if (!child)
769
- return null;
770
- node = child;
771
- }
772
- // Unwrap array_declarator (e.g. `char name[32]`)
773
- if (node.type === 'array_declarator') {
774
- const inner = node.childForFieldName('declarator');
775
- if (!inner)
776
- return null;
777
- node = inner;
778
- }
779
- if (node.type === 'field_identifier')
780
- return node.text;
781
- return null;
782
- }
783
- function firstLine(text) {
784
- const nl = text.indexOf('\n');
785
- return nl === -1 ? text : text.slice(0, nl);
786
- }
787
- export async function parseSourceSymbols(filePath, content) {
788
- const ext = filePath.match(/\.[^.]+$/)?.[0] ?? '';
789
- const lang = await getLanguage(ext);
790
- if (!lang)
791
- return [];
792
- const p = await ensureParser();
793
- p.setLanguage(lang);
794
- const tree = p.parse(content);
795
- if (!tree)
796
- return [];
797
- try {
798
- if (ext === '.py') {
799
- return extractPySymbols(tree);
800
- }
801
- if (ext === '.rs') {
802
- return extractRustSymbols(tree);
803
- }
804
- if (ext === '.go') {
805
- return extractGoSymbols(tree);
806
- }
807
- if (ext === '.c' || ext === '.h') {
808
- return extractCSymbols(tree);
809
- }
810
- return extractTsSymbols(tree);
811
- }
812
- finally {
813
- tree.delete();
814
- }
815
- }
816
- // Per-invocation cache for parsed source symbols, keyed by absolute file path.
817
- // Prevents re-parsing the same file when multiple wiki links reference it
818
- // (e.g. 20+ links to quickjs.c would otherwise parse a 60K-line file 20 times).
819
- const symbolCache = new Map();
820
- /** Clear the symbol cache. Call between top-level operations. */
821
- export function clearSymbolCache() {
822
- symbolCache.clear();
823
- }
824
- /**
825
- * Check whether a source file path (relative to projectRoot) has a given symbol.
826
- * Used by lat check to validate source code wiki links lazily.
827
- */
828
- export async function resolveSourceSymbol(filePath, symbolPath, projectRoot) {
829
- const absPath = join(projectRoot, filePath);
830
- let cached = symbolCache.get(absPath);
831
- if (!cached) {
832
- let content;
833
- try {
834
- content = readFileSync(absPath, 'utf-8');
835
- }
836
- catch {
837
- cached = { symbols: [] };
838
- symbolCache.set(absPath, cached);
839
- return { found: false, symbols: [] };
840
- }
841
- try {
842
- const symbols = await parseSourceSymbols(filePath, content);
843
- cached = { symbols };
844
- }
845
- catch (err) {
846
- cached = {
847
- symbols: [],
848
- error: `failed to parse "${filePath}": ${err instanceof Error ? err.message : String(err)}`,
849
- };
850
- }
851
- symbolCache.set(absPath, cached);
852
- }
853
- if (cached.error) {
854
- return { found: false, symbols: cached.symbols, error: cached.error };
855
- }
856
- const { symbols } = cached;
857
- const parts = symbolPath.split('#');
858
- if (parts.length === 1) {
859
- // Simple symbol: getConfigDir
860
- const found = symbols.some((s) => s.name === parts[0] && !s.parent);
861
- return { found, symbols };
862
- }
863
- if (parts.length === 2) {
864
- // Nested symbol: MyClass#myMethod
865
- const found = symbols.some((s) => s.name === parts[1] && s.parent === parts[0]);
866
- return { found, symbols };
867
- }
868
- return { found: false, symbols };
869
- }
870
- /**
871
- * Convert source symbols to Section objects for uniform handling.
872
- */
873
- export function sourceSymbolsToSections(symbols, filePath) {
874
- const sections = [];
875
- const classMap = new Map();
876
- for (const sym of symbols) {
877
- if (sym.parent)
878
- continue; // Handle methods after their class
879
- const section = {
880
- id: `${filePath}#${sym.name}`,
881
- heading: sym.name,
882
- depth: 1,
883
- file: filePath,
884
- filePath,
885
- children: [],
886
- startLine: sym.startLine,
887
- endLine: sym.endLine,
888
- firstParagraph: sym.signature,
889
- };
890
- sections.push(section);
891
- if (sym.kind === 'class') {
892
- classMap.set(sym.name, section);
893
- }
894
- }
895
- // Add methods as children
896
- for (const sym of symbols) {
897
- if (!sym.parent)
898
- continue;
899
- const parentSection = classMap.get(sym.parent);
900
- if (!parentSection)
901
- continue;
902
- const section = {
903
- id: `${filePath}#${sym.parent}#${sym.name}`,
904
- heading: sym.name,
905
- depth: 2,
906
- file: filePath,
907
- filePath,
908
- children: [],
909
- startLine: sym.startLine,
910
- endLine: sym.endLine,
911
- firstParagraph: sym.signature,
912
- };
913
- parentSection.children.push(section);
914
- }
915
- return sections;
916
- }