@plebeiantech/lat.md 0.12.3-fork.9 → 0.13.4-fork.2

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 (340) 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 +178 -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/cli/wiki.d.ts +12 -0
  28. package/dist/src/cli/wiki.js +85 -0
  29. package/dist/src/fork/antigravity-hook.d.ts +47 -0
  30. package/dist/src/fork/antigravity-hook.js +424 -0
  31. package/dist/src/fork/antigravity-init.d.ts +17 -0
  32. package/dist/src/fork/antigravity-init.js +124 -0
  33. package/dist/src/fork/upstream-drift.js +1 -1
  34. package/dist/src/fork/upstream-guard.d.ts +1 -1
  35. package/dist/src/fork/upstream-guard.js +8 -7
  36. package/dist/src/graph-export.js +7 -7
  37. package/dist/src/knowledge/index.js +2 -2
  38. package/dist/src/mcp/server.js +34 -18
  39. package/dist/src/search/cache.d.ts +3 -0
  40. package/dist/src/search/cache.js +104 -0
  41. package/dist/src/search/chunks.d.ts +23 -0
  42. package/dist/src/search/chunks.js +200 -0
  43. package/dist/src/search/db.d.ts +28 -16
  44. package/dist/src/search/db.js +100 -40
  45. package/dist/src/search/embedder.d.ts +2 -1
  46. package/dist/src/search/embedder.js +7 -6
  47. package/dist/src/search/index.d.ts +6 -2
  48. package/dist/src/search/index.js +176 -70
  49. package/dist/src/search/lexical.d.ts +6 -0
  50. package/dist/src/search/lexical.js +36 -0
  51. package/dist/src/search/lock.d.ts +5 -0
  52. package/dist/src/search/lock.js +45 -0
  53. package/dist/src/search/query.d.ts +26 -0
  54. package/dist/src/search/query.js +103 -0
  55. package/dist/src/search/search.d.ts +16 -7
  56. package/dist/src/search/search.js +165 -21
  57. package/dist/src/search/types.d.ts +15 -0
  58. package/dist/src/view/client/assets/GraphView-D_xnk0bP.js +456 -0
  59. package/dist/src/view/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  60. package/dist/src/view/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  61. package/dist/src/view/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  62. package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  63. package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  64. package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  65. package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  66. package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  67. package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  68. package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  69. package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  70. package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  71. package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  72. package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  73. package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  74. package/dist/src/view/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  75. package/dist/src/view/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  76. package/dist/src/view/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  77. package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  78. package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  79. package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  80. package/dist/src/view/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  81. package/dist/src/view/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  82. package/dist/src/view/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  83. package/dist/src/view/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  84. package/dist/src/view/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  85. package/dist/src/view/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  86. package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  87. package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  88. package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  89. package/dist/src/view/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  90. package/dist/src/view/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  91. package/dist/src/view/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  92. package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  93. package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  94. package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  95. package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  96. package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  97. package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  98. package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  99. package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  100. package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  101. package/dist/src/view/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  102. package/dist/src/view/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  103. package/dist/src/view/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  104. package/dist/src/view/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  105. package/dist/src/view/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  106. package/dist/src/view/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  107. package/dist/src/view/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  108. package/dist/src/view/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  109. package/dist/src/view/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  110. package/dist/src/view/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  111. package/dist/src/view/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  112. package/dist/src/view/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  113. package/dist/src/view/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  114. package/dist/src/view/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  115. package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  116. package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  117. package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  118. package/dist/src/view/client/assets/MarkdownEditor-bjqt_FoF.js +28 -0
  119. package/dist/src/view/client/assets/OrbitControls-DwcpQNja.js +1 -0
  120. package/dist/src/view/client/assets/STLLoader-CLWTKt5i.js +1 -0
  121. package/dist/src/view/client/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  122. package/dist/src/view/client/assets/abnfDiagram-VCTEODGH-kWGvtRnL.js +1 -0
  123. package/dist/src/view/client/assets/arc-BPAFd7cP.js +1 -0
  124. package/dist/src/view/client/assets/architectureDiagram-5GKGNRK7-CsY39oIR.js +36 -0
  125. package/dist/src/view/client/assets/blockDiagram-I7D4REHJ-DHGBG7BJ.js +129 -0
  126. package/dist/src/view/client/assets/c4Diagram-7LVT6UL2-vywK4eb7.js +38 -0
  127. package/dist/src/view/client/assets/channel-CX71L_qV.js +1 -0
  128. package/dist/src/view/client/assets/chunk-2Q5K7J3B-Do3Hz_ci.js +1 -0
  129. package/dist/src/view/client/assets/chunk-5VM5RSS4-B5R1lSeY.js +15 -0
  130. package/dist/src/view/client/assets/chunk-F27PBJKO-Dm55FM_W.js +1 -0
  131. package/dist/src/view/client/assets/chunk-IMKFNOWR-ChptrvvM.js +231 -0
  132. package/dist/src/view/client/assets/chunk-JWPE2WC7-BRQBjrKS.js +1 -0
  133. package/dist/src/view/client/assets/chunk-POPQ4Y6H-CainVZIL.js +1 -0
  134. package/dist/src/view/client/assets/chunk-SVP7TREG-DsKsNGmM.js +88 -0
  135. package/dist/src/view/client/assets/chunk-TICWLB2K-BctkMcJc.js +206 -0
  136. package/dist/src/view/client/assets/chunk-XXDRQBXY-BN7SgOUT.js +1 -0
  137. package/dist/src/view/client/assets/classDiagram-ZZMXUADV-B1VyU6zO.js +1 -0
  138. package/dist/src/view/client/assets/classDiagram-v2-VYDZK3BY-B1VyU6zO.js +1 -0
  139. package/dist/src/view/client/assets/cose-bilkent-JH36ORCC-BszzwrMe.js +1 -0
  140. package/dist/src/view/client/assets/cynefin-OW5HDTMX-CdRyAkPs.js +166 -0
  141. package/dist/src/view/client/assets/cynefinDiagram-5FMLGOSQ-BLvKPZ1u.js +62 -0
  142. package/dist/src/view/client/assets/cytoscape.esm-DzSz-X2X.js +321 -0
  143. package/dist/src/view/client/assets/dagre-GXQ25YYZ-V68w_l65.js +4 -0
  144. package/dist/src/view/client/assets/defaultLocale-DX6XiGOO.js +1 -0
  145. package/dist/src/view/client/assets/diagram-S7CK7UJ4-C2i4eEMg.js +30 -0
  146. package/dist/src/view/client/assets/diagram-UQ7AKVKN-BiwWh5jC.js +41 -0
  147. package/dist/src/view/client/assets/diagram-VSXAHHWV-hkKR_vyS.js +3 -0
  148. package/dist/src/view/client/assets/diagram-VX7I27RA-DzRCSMAc.js +24 -0
  149. package/dist/src/view/client/assets/diagram-Z3DM3KII-fhSFPxyK.js +24 -0
  150. package/dist/src/view/client/assets/ebnfDiagram-PWID7BFC-CCEUDKSA.js +1 -0
  151. package/dist/src/view/client/assets/erDiagram-RLTQ6QDP-FJ2IMyTi.js +99 -0
  152. package/dist/src/view/client/assets/flowDiagram-HODETNUW-BvasdLeK.js +168 -0
  153. package/dist/src/view/client/assets/ganttDiagram-EL5Y4UJY-CiwkBZvY.js +292 -0
  154. package/dist/src/view/client/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  155. package/dist/src/view/client/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  156. package/dist/src/view/client/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  157. package/dist/src/view/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  158. package/dist/src/view/client/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  159. package/dist/src/view/client/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  160. package/dist/src/view/client/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  161. package/dist/src/view/client/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  162. package/dist/src/view/client/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  163. package/dist/src/view/client/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  164. package/dist/src/view/client/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  165. package/dist/src/view/client/assets/gitGraphDiagram-WWUBYQGX-DYlP2_js.js +106 -0
  166. package/dist/src/view/client/assets/index-BnENo9bV.js +1 -0
  167. package/dist/src/view/client/assets/index-CQ7EOox7.css +1 -0
  168. package/dist/src/view/client/assets/index-CynNDkxt.js +13 -0
  169. package/dist/src/view/client/assets/infoDiagram-27XIBGKW-DRPB2c48.js +2 -0
  170. package/dist/src/view/client/assets/init-Gi6I4Gst.js +1 -0
  171. package/dist/src/view/client/assets/ishikawaDiagram-5VMMS53U-8VV429Cv.js +70 -0
  172. package/dist/src/view/client/assets/journeyDiagram-3NMN7TZE-Dzmwnf83.js +139 -0
  173. package/dist/src/view/client/assets/kanban-definition-UXKFOSKX-pYyZZ1i-.js +89 -0
  174. package/dist/src/view/client/assets/katex-HP8lGamR.js +257 -0
  175. package/dist/src/view/client/assets/layout-GF9k6yGo.js +1 -0
  176. package/dist/src/view/client/assets/linear-Yt2sSOYV.js +1 -0
  177. package/dist/src/view/client/assets/logo-RR_KBOAT.svg +149 -0
  178. package/dist/src/view/client/assets/maplibre-gl-CDX6Zuow.js +800 -0
  179. package/dist/src/view/client/assets/mermaid.core-ChWYCHN0.js +310 -0
  180. package/dist/src/view/client/assets/mindmap-definition-YA3MSWOX-Cc4fQvf1.js +96 -0
  181. package/dist/src/view/client/assets/ordinal-Cboi1Yqb.js +1 -0
  182. package/dist/src/view/client/assets/pegDiagram-XKGWAZYB-C0SsB8bZ.js +1 -0
  183. package/dist/src/view/client/assets/pieDiagram-E7YTZNPT-DIJpqERZ.js +39 -0
  184. package/dist/src/view/client/assets/quadrantDiagram-AXDQQJYC--d-gl6j-.js +7 -0
  185. package/dist/src/view/client/assets/railroadDiagram-O6MQD6OU-BQxwTt7z.js +1 -0
  186. package/dist/src/view/client/assets/requirementDiagram-BXWQKSXE-B_oTeD2A.js +84 -0
  187. package/dist/src/view/client/assets/sankeyDiagram-P5KCCOFB-DLukmE8X.js +40 -0
  188. package/dist/src/view/client/assets/sequenceDiagram-WJ2MYXX4-BNjVB2sc.js +162 -0
  189. package/dist/src/view/client/assets/sizeCapture-INFHLROL-BZecQTOw.js +1 -0
  190. package/dist/src/view/client/assets/stateDiagram-D77RDMKH-Bu1urvXC.js +1 -0
  191. package/dist/src/view/client/assets/stateDiagram-v2-MP3YSRHH-5pc_697G.js +1 -0
  192. package/dist/src/view/client/assets/swimlanes-42K2YHIH-bLAlcepB.js +1 -0
  193. package/dist/src/view/client/assets/swimlanesDiagram-VR7AAH4N-BbOpZjpp.js +8 -0
  194. package/dist/src/view/client/assets/three.module-PDSP0dbZ.js +4108 -0
  195. package/dist/src/view/client/assets/timeline-definition-24CTP7MA-tbwCNvcA.js +120 -0
  196. package/dist/src/view/client/assets/vennDiagram-4TSXK5OY-D8U8Fk0N.js +34 -0
  197. package/dist/src/view/client/assets/wardleyDiagram-VM6X3IG4-LHBVIeNb.js +78 -0
  198. package/dist/src/view/client/assets/xychartDiagram-S5SC5T6Z-CN4tfaFV.js +7 -0
  199. package/dist/src/view/client/index.html +2 -2
  200. package/dist/src/view/client-shell.d.ts +2 -0
  201. package/dist/src/view/client-shell.js +5 -0
  202. package/dist/src/view/diagnostics.d.ts +3 -2
  203. package/dist/src/view/diagnostics.js +49 -58
  204. package/dist/src/view/document-edit.d.ts +8 -0
  205. package/dist/src/view/document-edit.js +25 -0
  206. package/dist/src/view/document-route.d.ts +14 -0
  207. package/dist/src/view/document-route.js +137 -0
  208. package/dist/src/view/document-tree.d.ts +18 -0
  209. package/dist/src/view/document-tree.js +139 -0
  210. package/dist/src/view/external-document-tree.d.ts +3 -0
  211. package/dist/src/view/external-document-tree.js +674 -0
  212. package/dist/src/view/git-diff.js +202 -2
  213. package/dist/src/view/git.js +1 -1
  214. package/dist/src/view/graph.d.ts +4 -3
  215. package/dist/src/view/graph.js +100 -9
  216. package/dist/src/view/highlight.d.ts +10 -2
  217. package/dist/src/view/highlight.js +50648 -3166
  218. package/dist/src/view/markdown.d.ts +3 -2
  219. package/dist/src/view/markdown.js +256 -54
  220. package/dist/src/view/preindexed-search.d.ts +15 -0
  221. package/dist/src/view/preindexed-search.js +25 -0
  222. package/dist/src/view/protocol.d.ts +53 -7
  223. package/dist/src/view/publication.d.ts +2 -0
  224. package/dist/src/view/publication.js +78 -0
  225. package/dist/src/view/references.d.ts +11 -26
  226. package/dist/src/view/references.js +121 -112
  227. package/dist/src/view/repository.d.ts +14 -4
  228. package/dist/src/view/repository.js +260 -19
  229. package/dist/src/view/request-security.d.ts +5 -0
  230. package/dist/src/view/request-security.js +46 -0
  231. package/dist/src/view/search-result.d.ts +4 -0
  232. package/dist/src/view/search-result.js +25 -0
  233. package/dist/src/view/search.d.ts +7 -2
  234. package/dist/src/view/search.js +23 -34
  235. package/dist/src/view/server-build.d.ts +21 -0
  236. package/dist/src/view/server-build.js +145 -0
  237. package/dist/src/view/server-deployment.d.ts +31 -0
  238. package/dist/src/view/server-deployment.js +123 -0
  239. package/dist/src/view/server-index-worker.d.ts +6 -0
  240. package/dist/src/view/server-index-worker.js +14 -0
  241. package/dist/src/view/server.d.ts +11 -2
  242. package/dist/src/view/server.js +245 -73
  243. package/dist/src/view/source-target.d.ts +2 -0
  244. package/dist/src/view/source-target.js +49 -8
  245. package/dist/src/view/static-build.d.ts +18 -2
  246. package/dist/src/view/static-build.js +449 -110
  247. package/dist/src/view/static-protocol.d.ts +26 -2
  248. package/dist/src/view/static-protocol.js +5 -0
  249. package/dist/src/view/store.d.ts +20 -3
  250. package/dist/src/view/store.js +304 -48
  251. package/dist/src/view/table-of-contents.d.ts +2 -2
  252. package/dist/src/view/table-of-contents.js +2 -22
  253. package/dist/src/view/vercel-build.d.ts +24 -0
  254. package/dist/src/view/vercel-build.js +152 -0
  255. package/dist/src/view/vercel-server-build.d.ts +10 -0
  256. package/dist/src/view/vercel-server-build.js +61 -0
  257. package/dist/src/wiki/catalog.d.ts +21 -0
  258. package/dist/src/wiki/catalog.js +256 -0
  259. package/dist/src/wiki/publish.d.ts +27 -0
  260. package/dist/src/wiki/publish.js +265 -0
  261. package/dist/src/wiki/render.d.ts +20 -0
  262. package/dist/src/wiki/render.js +163 -0
  263. package/dist/src/wiki/transform.d.ts +7 -0
  264. package/dist/src/wiki/transform.js +264 -0
  265. package/dist/vendor/lat.md-server/cli.d.ts +2 -0
  266. package/dist/vendor/lat.md-server/cli.js +12 -0
  267. package/dist/vendor/lat.md-server/index.d.ts +38 -0
  268. package/dist/vendor/lat.md-server/index.js +128 -0
  269. package/package.json +68 -22
  270. package/plugins/lat-md/README.md +61 -0
  271. package/plugins/lat-md/hooks.json +38 -0
  272. package/plugins/lat-md/plugin.json +9 -0
  273. package/plugins/lat-md/rules/AGENTS.md +344 -0
  274. package/plugins/lat-md/skills/lat-md/SKILL.md +210 -0
  275. package/plugins/lat-md/skills/lat-md-conventions/SKILL.md +226 -0
  276. package/templates/AGENTS.md +26 -7
  277. package/templates/cursor-rules.md +23 -7
  278. package/templates/fork/conventions.md +133 -11
  279. package/templates/opencode-plugin.ts +9 -9
  280. package/templates/pi-extension.ts +11 -11
  281. package/templates/skill/SKILL.md +35 -3
  282. package/dist/src/cli/check-coverage.d.ts +0 -2
  283. package/dist/src/cli/check-coverage.js +0 -71
  284. package/dist/src/cli/check-frontmatter.d.ts +0 -12
  285. package/dist/src/cli/check-frontmatter.js +0 -44
  286. package/dist/src/cli/check-mode.d.ts +0 -21
  287. package/dist/src/cli/check-mode.js +0 -364
  288. package/dist/src/cli/check-status.d.ts +0 -74
  289. package/dist/src/cli/check-status.js +0 -217
  290. package/dist/src/cli/check.d.ts +0 -45
  291. package/dist/src/cli/check.js +0 -781
  292. package/dist/src/cli/context.d.ts +0 -11
  293. package/dist/src/cli/context.js +0 -58
  294. package/dist/src/cli/expand.d.ts +0 -8
  295. package/dist/src/cli/expand.js +0 -94
  296. package/dist/src/cli/gen-index.d.ts +0 -45
  297. package/dist/src/cli/gen-index.js +0 -235
  298. package/dist/src/cli/link-scheme.d.ts +0 -54
  299. package/dist/src/cli/link-scheme.js +0 -101
  300. package/dist/src/cli/locate.d.ts +0 -2
  301. package/dist/src/cli/locate.js +0 -17
  302. package/dist/src/cli/refs.d.ts +0 -22
  303. package/dist/src/cli/refs.js +0 -229
  304. package/dist/src/cli/section.d.ts +0 -43
  305. package/dist/src/cli/section.js +0 -252
  306. package/dist/src/cli/select-menu.d.ts +0 -13
  307. package/dist/src/cli/select-menu.js +0 -100
  308. package/dist/src/code-refs.d.ts +0 -17
  309. package/dist/src/code-refs.js +0 -298
  310. package/dist/src/config.d.ts +0 -29
  311. package/dist/src/config.js +0 -83
  312. package/dist/src/context.d.ts +0 -23
  313. package/dist/src/context.js +0 -11
  314. package/dist/src/extensions/wiki-link/from-markdown.d.ts +0 -5
  315. package/dist/src/extensions/wiki-link/from-markdown.js +0 -34
  316. package/dist/src/extensions/wiki-link/index.d.ts +0 -4
  317. package/dist/src/extensions/wiki-link/index.js +0 -3
  318. package/dist/src/extensions/wiki-link/syntax.d.ts +0 -14
  319. package/dist/src/extensions/wiki-link/syntax.js +0 -121
  320. package/dist/src/extensions/wiki-link/to-markdown.d.ts +0 -5
  321. package/dist/src/extensions/wiki-link/to-markdown.js +0 -28
  322. package/dist/src/extensions/wiki-link/types.d.ts +0 -34
  323. package/dist/src/format.d.ts +0 -8
  324. package/dist/src/format.js +0 -43
  325. package/dist/src/init-version.d.ts +0 -10
  326. package/dist/src/init-version.js +0 -49
  327. package/dist/src/lattice.d.ts +0 -109
  328. package/dist/src/lattice.js +0 -817
  329. package/dist/src/parser.d.ts +0 -3
  330. package/dist/src/parser.js +0 -18
  331. package/dist/src/source-parser.d.ts +0 -27
  332. package/dist/src/source-parser.js +0 -916
  333. package/dist/src/untrusted.d.ts +0 -18
  334. package/dist/src/untrusted.js +0 -93
  335. package/dist/src/view/client/assets/index-C3iaZyYT.css +0 -1
  336. package/dist/src/view/client/assets/index-KWi67IMz.js +0 -334
  337. package/dist/src/view/client/assets/logo-CNF8zs47.svg +0 -182
  338. package/dist/src/walk.d.ts +0 -18
  339. package/dist/src/walk.js +0 -27
  340. /package/dist/src/{extensions/wiki-link → search}/types.js +0 -0
@@ -1,4 +1,5 @@
1
1
  import type { Root } from 'mdast';
2
+ import type { ViewDocumentTree } from './protocol.js';
2
3
  export type WikiLinkContext = {
3
4
  line: number;
4
5
  };
@@ -19,8 +20,8 @@ export type MarkdownRenderOptions = {
19
20
  lineOffset?: number;
20
21
  rewriteMarkdownLink?: (url: string) => string;
21
22
  };
22
- /** Render a lat.md file as safe HTML with resolved wiki links. */
23
+ /** Normalize a lat.md file into the safe, parser-neutral view tree. */
23
24
  export declare function renderMarkdown(markdown: string, filePath: string, resolveWikiLink?: WikiLinkResolver, options?: MarkdownRenderOptions, parsedTree?: Root): Promise<{
24
- html: string;
25
+ tree: ViewDocumentTree;
25
26
  title: string;
26
27
  }>;
@@ -1,11 +1,15 @@
1
1
  import { basename, extname } from 'node:path';
2
2
  import rehypeSanitize, { defaultSchema } from 'rehype-sanitize';
3
+ import rehypeRaw from 'rehype-raw';
4
+ import rehypeKatex from 'rehype-katex';
3
5
  import rehypeSlug from 'rehype-slug';
4
- import rehypeStringify from 'rehype-stringify';
6
+ import remarkEmoji from 'remark-emoji';
5
7
  import remarkRehype from 'remark-rehype';
6
8
  import { unified } from 'unified';
7
9
  import { visit } from 'unist-util-visit';
8
- import { parse } from '../parser.js';
10
+ import { parse } from '@plebeiantech/lat.md-core/parser';
11
+ import { decorateExternalSiteLinks, toViewDocumentTree, } from './document-tree.js';
12
+ import { highlightCode } from './highlight.js';
9
13
  const CODE_LINK_CLASSES = [
10
14
  'wiki-link-code',
11
15
  'wiki-link-active',
@@ -14,22 +18,66 @@ const CODE_LINK_CLASSES = [
14
18
  'code-language-ts',
15
19
  'code-language-js',
16
20
  'code-language-py',
21
+ 'code-language-rb',
17
22
  'code-language-rs',
18
23
  'code-language-go',
19
24
  'code-language-c',
25
+ 'code-language-dart',
26
+ 'code-language-java',
27
+ 'code-language-swift',
20
28
  ];
21
29
  const ERROR_CLASS = 'markdown-error';
22
- const EXTERNAL_LINK_CLASS = 'external-link';
23
- const EXTERNAL_LINK_ICON_CLASS = 'external-link-icon';
24
30
  const GIT_CLASSES = ['git-added', 'git-removed'];
25
- function classAttributes(tag) {
31
+ const GEOJSON_SOURCE_CLASS = 'markdown-geojson-source';
32
+ const HIGHLIGHT_CLASS = 'hljs';
33
+ const MERMAID_SOURCE_CLASS = 'markdown-mermaid-source';
34
+ const MATH_DIFF_BLOCK_CLASS = 'git-math-block';
35
+ const RICH_FENCE_SOURCE_CLASS = 'markdown-diagram-source';
36
+ const STL_SOURCE_CLASS = 'markdown-stl-source';
37
+ const TOPOJSON_SOURCE_CLASS = 'markdown-topojson-source';
38
+ const ALERT_KINDS = ['note', 'tip', 'important', 'warning', 'caution'];
39
+ const ALERT_CLASSES = [
40
+ 'markdown-alert',
41
+ 'markdown-alert-title',
42
+ ...ALERT_KINDS.map((kind) => `markdown-alert-${kind}`),
43
+ ];
44
+ const GITHUB_CUSTOM_EMOJI = new Set([
45
+ 'atom',
46
+ 'basecamp',
47
+ 'basecampy',
48
+ 'bowtie',
49
+ 'electron',
50
+ 'feelsgood',
51
+ 'finnadie',
52
+ 'fishsticks',
53
+ 'fu',
54
+ 'goberserk',
55
+ 'godmode',
56
+ 'hurtrealbad',
57
+ 'neckbeard',
58
+ 'octocat',
59
+ 'rage1',
60
+ 'rage2',
61
+ 'rage3',
62
+ 'rage4',
63
+ 'shipit',
64
+ 'suspect',
65
+ 'trollface',
66
+ ]);
67
+ function classAttributes(tag, extraClasses = []) {
26
68
  const attributes = defaultSchema.attributes?.[tag] ?? [];
27
69
  const allowedClasses = attributes.flatMap((attribute) => Array.isArray(attribute) && attribute[0] === 'className'
28
70
  ? attribute.slice(1)
29
71
  : []);
30
72
  return [
31
73
  ...attributes.filter((attribute) => !(Array.isArray(attribute) && attribute[0] === 'className')),
32
- ['className', ...allowedClasses, ERROR_CLASS, ...GIT_CLASSES],
74
+ [
75
+ 'className',
76
+ ...allowedClasses,
77
+ ERROR_CLASS,
78
+ ...GIT_CLASSES,
79
+ ...extraClasses,
80
+ ],
33
81
  ];
34
82
  }
35
83
  const sanitizeSchema = {
@@ -45,50 +93,168 @@ const sanitizeSchema = {
45
93
  'wiki-link-segmented',
46
94
  'wiki-link-code',
47
95
  'wiki-link-active',
48
- EXTERNAL_LINK_CLASS,
49
96
  ERROR_CLASS,
50
97
  ...GIT_CLASSES,
51
98
  ],
52
99
  ],
53
100
  blockquote: classAttributes('blockquote'),
54
- code: classAttributes('code'),
101
+ code: classAttributes('code', [
102
+ HIGHLIGHT_CLASS,
103
+ 'math-display',
104
+ 'math-inline',
105
+ ]),
55
106
  del: classAttributes('del'),
56
- div: classAttributes('div'),
107
+ details: [...(defaultSchema.attributes?.details ?? []), ['open', true]],
108
+ div: classAttributes('div', [...ALERT_CLASSES, MATH_DIFF_BLOCK_CLASS]),
57
109
  h1: classAttributes('h1'),
58
110
  h2: classAttributes('h2'),
59
111
  h3: classAttributes('h3'),
60
112
  h4: classAttributes('h4'),
61
113
  h5: classAttributes('h5'),
62
114
  h6: classAttributes('h6'),
63
- img: classAttributes('img'),
115
+ img: classAttributes('img', ['markdown-emoji']),
116
+ input: [...(defaultSchema.attributes?.input ?? []), ['checked', true]],
64
117
  ins: classAttributes('ins'),
65
118
  li: classAttributes('li'),
66
119
  ol: classAttributes('ol'),
67
- p: classAttributes('p'),
68
- pre: classAttributes('pre'),
120
+ p: classAttributes('p', ALERT_CLASSES),
121
+ pre: classAttributes('pre', [
122
+ GEOJSON_SOURCE_CLASS,
123
+ MERMAID_SOURCE_CLASS,
124
+ RICH_FENCE_SOURCE_CLASS,
125
+ STL_SOURCE_CLASS,
126
+ TOPOJSON_SOURCE_CLASS,
127
+ ]),
69
128
  span: [
70
129
  ...(defaultSchema.attributes?.span ?? []),
71
130
  'ariaHidden',
72
131
  'ariaLabel',
132
+ 'role',
73
133
  [
74
134
  'className',
75
135
  'wiki-link-context',
76
136
  'wiki-link-leaf',
77
137
  'wiki-link-ref-count',
78
- EXTERNAL_LINK_ICON_CLASS,
79
138
  ...CODE_LINK_CLASSES.slice(2),
139
+ /^hljs-./,
80
140
  ERROR_CLASS,
81
141
  ...GIT_CLASSES,
82
142
  ],
83
143
  ],
144
+ table: classAttributes('table'),
145
+ tr: classAttributes('tr'),
84
146
  ul: classAttributes('ul'),
85
147
  },
86
148
  };
87
- const htmlProcessor = unified()
88
- .use(remarkRehype)
149
+ const highlightedCodeHandler = (state, rawNode) => {
150
+ const node = rawNode;
151
+ const language = node.lang?.split(/\s+/, 1)[0];
152
+ const richSourceClass = language?.toLowerCase() === 'mermaid'
153
+ ? MERMAID_SOURCE_CLASS
154
+ : language?.toLowerCase() === 'geojson'
155
+ ? GEOJSON_SOURCE_CLASS
156
+ : language?.toLowerCase() === 'topojson'
157
+ ? TOPOJSON_SOURCE_CLASS
158
+ : language?.toLowerCase() === 'stl'
159
+ ? STL_SOURCE_CLASS
160
+ : null;
161
+ const highlighted = language && !richSourceClass ? highlightCode(language, node.value) : null;
162
+ const code = {
163
+ type: 'element',
164
+ tagName: 'code',
165
+ properties: {
166
+ className: [
167
+ ...(language ? [`language-${language}`] : []),
168
+ ...(highlighted === null ? [] : [HIGHLIGHT_CLASS]),
169
+ ],
170
+ },
171
+ children: highlighted === null
172
+ ? [
173
+ {
174
+ type: 'text',
175
+ value: node.value ? `${node.value}\n` : '',
176
+ },
177
+ ]
178
+ : [...highlighted.children, { type: 'text', value: '\n' }],
179
+ ...(node.meta ? { data: { meta: node.meta } } : {}),
180
+ };
181
+ state.patch(node, code);
182
+ const result = state.applyData(node, code);
183
+ const pre = {
184
+ type: 'element',
185
+ tagName: 'pre',
186
+ properties: {
187
+ className: richSourceClass
188
+ ? [RICH_FENCE_SOURCE_CLASS, richSourceClass]
189
+ : [],
190
+ },
191
+ children: [result],
192
+ };
193
+ state.patch(node, pre);
194
+ return pre;
195
+ };
196
+ const documentTreeProcessor = unified()
197
+ .use(remarkRehype, {
198
+ allowDangerousHtml: true,
199
+ handlers: { code: highlightedCodeHandler },
200
+ })
201
+ .use(rehypeRaw)
202
+ .use(() => (tree, file) => {
203
+ const rewrite = file.data.rewriteMarkdownLink;
204
+ if (typeof rewrite !== 'function')
205
+ return;
206
+ // HTML attributes only become nodes after rehypeRaw. Resolve remaining
207
+ // relative URLs here, before the sanitizer enforces allowed protocols.
208
+ visit(tree, 'element', (node) => {
209
+ for (const name of ['href', 'src']) {
210
+ const value = node.properties[name];
211
+ if (typeof value === 'string' &&
212
+ value &&
213
+ !/^(?:[#/]|[a-z][a-z\d+.-]*:)/i.test(value)) {
214
+ node.properties[name] = rewrite(value);
215
+ }
216
+ }
217
+ });
218
+ })
89
219
  .use(rehypeSanitize, sanitizeSchema)
90
- .use(rehypeSlug)
91
- .use(rehypeStringify);
220
+ .use(rehypeKatex)
221
+ .use(rehypeSlug);
222
+ const emojiProcessor = unified().use(remarkEmoji, { accessible: true });
223
+ function transformCustomEmoji(tree) {
224
+ visit(tree, 'text', (node, index, parent) => {
225
+ if (index === undefined || !parent || !node.value.includes(':'))
226
+ return;
227
+ const pattern = /:([a-z0-9_+-]+):/g;
228
+ const children = [];
229
+ let cursor = 0;
230
+ let match;
231
+ while ((match = pattern.exec(node.value))) {
232
+ if (!GITHUB_CUSTOM_EMOJI.has(match[1]))
233
+ continue;
234
+ if (match.index > cursor) {
235
+ children.push({
236
+ type: 'text',
237
+ value: node.value.slice(cursor, match.index),
238
+ });
239
+ }
240
+ children.push({
241
+ type: 'image',
242
+ url: `https://github.githubassets.com/images/icons/emoji/${match[1]}.png?v8`,
243
+ alt: match[0],
244
+ title: null,
245
+ data: { hProperties: { className: ['markdown-emoji'] } },
246
+ });
247
+ cursor = match.index + match[0].length;
248
+ }
249
+ if (children.length === 0)
250
+ return;
251
+ if (cursor < node.value.length) {
252
+ children.push({ type: 'text', value: node.value.slice(cursor) });
253
+ }
254
+ parent.children.splice(index, 1, ...children);
255
+ return index + children.length;
256
+ });
257
+ }
92
258
  function nodeText(node) {
93
259
  if (typeof node.value === 'string')
94
260
  return node.value;
@@ -98,6 +264,38 @@ function nodeText(node) {
98
264
  .map((child) => nodeText(child))
99
265
  .join('');
100
266
  }
267
+ function transformAlerts(tree) {
268
+ visit(tree, 'blockquote', (node) => {
269
+ const firstBlock = node.children[0];
270
+ if (firstBlock?.type !== 'paragraph')
271
+ return;
272
+ const firstInline = firstBlock.children[0];
273
+ if (firstInline?.type !== 'alertMarker')
274
+ return;
275
+ const label = firstInline.value;
276
+ const kind = label.toLowerCase();
277
+ firstBlock.children.shift();
278
+ if (firstBlock.children.length === 0)
279
+ node.children.shift();
280
+ node.data = {
281
+ ...node.data,
282
+ hName: 'div',
283
+ hProperties: {
284
+ ...(node.data?.hProperties ?? {}),
285
+ className: ['markdown-alert', `markdown-alert-${kind}`],
286
+ },
287
+ };
288
+ node.children.unshift({
289
+ type: 'paragraph',
290
+ data: {
291
+ hProperties: { className: ['markdown-alert-title'] },
292
+ },
293
+ children: [
294
+ { type: 'text', value: label[0] + label.slice(1).toLowerCase() },
295
+ ],
296
+ });
297
+ });
298
+ }
101
299
  function wikiLinkContent(node) {
102
300
  if (node.data.alias) {
103
301
  return {
@@ -144,6 +342,10 @@ function codeLanguage(target) {
144
342
  return { className: 'code-language-js', label: 'JS' };
145
343
  case '.py':
146
344
  return { className: 'code-language-py', label: 'PY' };
345
+ case '.erb':
346
+ case '.rake':
347
+ case '.rb':
348
+ return { className: 'code-language-rb', label: 'RB' };
147
349
  case '.rs':
148
350
  return { className: 'code-language-rs', label: 'RS' };
149
351
  case '.go':
@@ -151,6 +353,12 @@ function codeLanguage(target) {
151
353
  case '.c':
152
354
  case '.h':
153
355
  return { className: 'code-language-c', label: 'C' };
356
+ case '.dart':
357
+ return { className: 'code-language-dart', label: 'DART' };
358
+ case '.swift':
359
+ return { className: 'code-language-swift', label: 'SWIFT' };
360
+ case '.java':
361
+ return { className: 'code-language-java', label: 'JAVA' };
154
362
  default:
155
363
  return null;
156
364
  }
@@ -194,22 +402,6 @@ function codeLinkContent(language, children) {
194
402
  ...rest,
195
403
  ];
196
404
  }
197
- function externalLinkIcon() {
198
- return {
199
- type: 'emphasis',
200
- data: {
201
- hName: 'span',
202
- hProperties: {
203
- ariaHidden: 'true',
204
- className: [EXTERNAL_LINK_ICON_CLASS],
205
- },
206
- },
207
- children: [],
208
- };
209
- }
210
- function isExternalSiteUrl(url) {
211
- return /^(?:https?:)?\/\//i.test(url);
212
- }
213
405
  function referenceCountBadge(count) {
214
406
  return {
215
407
  type: 'emphasis',
@@ -291,10 +483,13 @@ function markMarkdownErrors(tree, errors) {
291
483
  };
292
484
  }
293
485
  }
294
- /** Render a lat.md file as safe HTML with resolved wiki links. */
486
+ /** Normalize a lat.md file into the safe, parser-neutral view tree. */
295
487
  export async function renderMarkdown(markdown, filePath, resolveWikiLink, options = {}, parsedTree) {
296
488
  const tree = parsedTree ? structuredClone(parsedTree) : parse(markdown);
297
489
  tree.children = tree.children.filter((node) => node.type !== 'yaml');
490
+ await emojiProcessor.run(tree);
491
+ transformCustomEmoji(tree);
492
+ transformAlerts(tree);
298
493
  if (options.errors)
299
494
  markMarkdownErrors(tree, options.errors);
300
495
  visit(tree, 'link', (node) => {
@@ -312,23 +507,16 @@ export async function renderMarkdown(markdown, filePath, resolveWikiLink, option
312
507
  if (options.rewriteMarkdownLink) {
313
508
  node.url = options.rewriteMarkdownLink(authoredUrl);
314
509
  }
315
- if (!isExternalSiteUrl(node.url))
316
- return;
317
- const properties = node.data?.hProperties ?? {};
318
- const currentClasses = properties.className;
319
- const classes = Array.isArray(currentClasses)
320
- ? currentClasses.map(String)
321
- : currentClasses
322
- ? [String(currentClasses)]
323
- : [];
324
- node.data = {
325
- ...node.data,
326
- hProperties: {
327
- ...properties,
328
- className: [...classes, EXTERNAL_LINK_CLASS],
329
- },
330
- };
331
- node.children.push(externalLinkIcon());
510
+ });
511
+ visit(tree, 'image', (node) => {
512
+ if (options.rewriteMarkdownLink) {
513
+ node.url = options.rewriteMarkdownLink(node.url);
514
+ }
515
+ });
516
+ visit(tree, 'definition', (node) => {
517
+ if (options.rewriteMarkdownLink) {
518
+ node.url = options.rewriteMarkdownLink(node.url);
519
+ }
332
520
  });
333
521
  const firstHeading = tree.children.find((node) => node.type === 'heading');
334
522
  const title = firstHeading
@@ -354,7 +542,7 @@ export async function renderMarkdown(markdown, filePath, resolveWikiLink, option
354
542
  if (resolution) {
355
543
  const { href, referenceCount } = resolution;
356
544
  const content = wikiLinkContent(node);
357
- const language = href.startsWith('/code/')
545
+ const language = href.startsWith('/code/') || href.startsWith('/external/')
358
546
  ? codeLanguage(node.value)
359
547
  : null;
360
548
  const classes = content.segmented ? ['wiki-link-segmented'] : [];
@@ -404,6 +592,20 @@ export async function renderMarkdown(markdown, filePath, resolveWikiLink, option
404
592
  value: `[[${node.value}${alias}]]`,
405
593
  };
406
594
  });
407
- const hast = await htmlProcessor.run(tree);
408
- return { html: htmlProcessor.stringify(hast), title };
595
+ const hast = await documentTreeProcessor.run(tree, {
596
+ data: { rewriteMarkdownLink: options.rewriteMarkdownLink },
597
+ });
598
+ // Attach source ranges after sanitization, before positions are discarded.
599
+ visit(hast, 'element', (node) => {
600
+ if (!/^(p|pre|li|tr|h[1-6])$/.test(node.tagName) || !node.position)
601
+ return;
602
+ node.properties['data-source-start-line'] =
603
+ node.position.start.line + (options.lineOffset ?? 0);
604
+ node.properties['data-source-end-line'] =
605
+ node.position.end.line + (options.lineOffset ?? 0);
606
+ });
607
+ return {
608
+ tree: decorateExternalSiteLinks(toViewDocumentTree(hast)),
609
+ title,
610
+ };
409
611
  }
@@ -0,0 +1,15 @@
1
+ import type { Section } from '@plebeiantech/lat.md-core/lattice-model';
2
+ import type { CreateSearchEngine } from '../search/embedder.js';
3
+ import { type IndexedSearchSession } from '../search/query.js';
4
+ import type { ViewSearchResponse } from './protocol.js';
5
+ export type PreindexedViewSearchDependencies = {
6
+ openSearchSession: (latDir: string, options: {
7
+ cacheDir?: string;
8
+ createSearchEngine?: CreateSearchEngine;
9
+ }) => Promise<IndexedSearchSession>;
10
+ };
11
+ export type PreindexedViewSearch = ((query: string) => Promise<ViewSearchResponse>) & {
12
+ close: () => Promise<void>;
13
+ };
14
+ /** Serve a built search index without importing indexing or Markdown parsers. */
15
+ export declare function createPreindexedViewSearch(latDir: string, cacheDir: string, sections: readonly Section[], documentPaths: ReadonlyMap<string, string>, dependencies?: PreindexedViewSearchDependencies, createSearchEngine?: CreateSearchEngine): Promise<PreindexedViewSearch>;
@@ -0,0 +1,25 @@
1
+ import { openIndexedSearchSession, resolveSearchMatches, } from '../search/query.js';
2
+ import { viewSearchResult } from './search-result.js';
3
+ const VIEW_SEARCH_LIMIT = 10;
4
+ /** Serve a built search index without importing indexing or Markdown parsers. */
5
+ export async function createPreindexedViewSearch(latDir, cacheDir, sections, documentPaths, dependencies = {
6
+ openSearchSession: openIndexedSearchSession,
7
+ }, createSearchEngine) {
8
+ const sectionById = new Map(sections.map((section) => [section.id.toLowerCase(), section]));
9
+ const session = await dependencies.openSearchSession(latDir, {
10
+ cacheDir,
11
+ createSearchEngine,
12
+ });
13
+ const search = async (rawQuery) => {
14
+ const query = rawQuery.trim();
15
+ if (!query)
16
+ return { query: '', results: [] };
17
+ const results = await session.search(query, VIEW_SEARCH_LIMIT);
18
+ return {
19
+ query,
20
+ results: resolveSearchMatches(results, sectionById).map((match) => viewSearchResult(latDir, match, documentPaths)),
21
+ };
22
+ };
23
+ search.close = session.close;
24
+ return search;
25
+ }
@@ -1,9 +1,18 @@
1
+ import type { SearchEvidence } from '../search/types.js';
1
2
  export type ViewGitFileStatus = 'modified' | 'new';
2
3
  export type ViewGitState = {
3
4
  files: Record<string, ViewGitFileStatus>;
4
5
  };
6
+ export type ViewExternalFile = {
7
+ handle: string;
8
+ path: string;
9
+ target: string;
10
+ };
5
11
  export type ViewIndex = {
6
12
  files: string[];
13
+ /** Authored directory-index entries, keyed by vault-relative directory ('' at root). */
14
+ directoryOrder: Record<string, string[]>;
15
+ externalFiles: ViewExternalFile[];
7
16
  entry: string;
8
17
  errorCounts: Record<string, number>;
9
18
  git: ViewGitState | null;
@@ -24,16 +33,31 @@ export type ViewSearchResult = {
24
33
  breadcrumbs: string[];
25
34
  description: string;
26
35
  url: string;
27
- score: number;
36
+ rankScore: number;
37
+ introduction: string;
38
+ evidence: SearchEvidence[];
39
+ semanticSimilarity?: number;
40
+ semanticRank?: number;
41
+ lexicalRank?: number;
28
42
  };
29
43
  export type ViewSearchResponse = {
30
44
  query: string;
31
45
  results: ViewSearchResult[];
32
46
  };
33
- export type ViewProjectChange = {
47
+ import type { ViewDocumentTree } from '@plebeiantech/lat.md-core/document-tree';
48
+ export type { ViewDocumentProperty, ViewDocumentText, ViewDocumentElement, ViewDocumentNode, ViewDocumentTree, } from '@plebeiantech/lat.md-core/document-tree';
49
+ export type ViewSectionCommandOutput = {
50
+ output: string;
51
+ tree: ViewDocumentTree;
52
+ isError: boolean;
53
+ };
54
+ export type ViewProjectGeneration = {
34
55
  generation: number;
35
56
  markdownGeneration: number;
36
57
  };
58
+ export type ViewProjectChange = ViewProjectGeneration & {
59
+ instanceId: string;
60
+ };
37
61
  export type ViewGraphNodeKind = 'document' | 'source' | 'code-reference';
38
62
  export type ViewGraphNode = {
39
63
  id: string;
@@ -41,6 +65,7 @@ export type ViewGraphNode = {
41
65
  label: string;
42
66
  url: string;
43
67
  breadcrumbs: string[];
68
+ /** Local documents sum direct backlink counts across every heading. Other nodes use incoming edge weights. */
44
69
  inDegree: number;
45
70
  outDegree: number;
46
71
  documentPath?: string;
@@ -49,6 +74,7 @@ export type ViewGraphNode = {
49
74
  symbol?: string;
50
75
  line?: number;
51
76
  snippet?: string;
77
+ externalTarget?: string;
52
78
  gitStatus?: ViewGitFileStatus;
53
79
  errorCount?: number;
54
80
  };
@@ -75,8 +101,8 @@ export type ViewDocumentTocItem = {
75
101
  export type ViewDocument = {
76
102
  path: string;
77
103
  title: string;
78
- html: string;
79
- gitHtml: string | null;
104
+ tree: ViewDocumentTree;
105
+ gitTree: ViewDocumentTree | null;
80
106
  graphNodeIds: Record<string, string>;
81
107
  tableOfContents: ViewDocumentTocItem[];
82
108
  errors: ViewDocumentError[];
@@ -85,12 +111,23 @@ export type ViewDocument = {
85
111
  requireCodeMention: boolean;
86
112
  };
87
113
  };
114
+ export type ViewDocumentSource = {
115
+ path: string;
116
+ content: string;
117
+ };
118
+ export type ViewDocumentEditRequest = {
119
+ baseContent: string;
120
+ content: string;
121
+ };
122
+ export type ViewDocumentEditResponse = ViewDocumentSource & {
123
+ merged: boolean;
124
+ };
88
125
  export type ViewMarkdownBackReference = {
89
126
  kind: 'markdown';
90
127
  sectionId: string;
91
128
  breadcrumbs: string[];
92
129
  paragraph: string;
93
- paragraphHtml: string;
130
+ paragraphTree: ViewDocumentTree;
94
131
  url: string;
95
132
  };
96
133
  export type ViewCodeBackReference = {
@@ -110,13 +147,13 @@ export type ViewSourceReference = {
110
147
  sectionId: string;
111
148
  breadcrumbs: string[];
112
149
  paragraph: string;
113
- paragraphHtml: string;
150
+ paragraphTree: ViewDocumentTree;
114
151
  url: string;
115
152
  };
116
153
  export type ViewSourceDocument = {
117
154
  path: string;
118
155
  content: string;
119
- highlightedHtmlLines: string[];
156
+ highlightedLines: ViewDocumentTree[];
120
157
  focus: {
121
158
  symbol: string;
122
159
  kind: string;
@@ -127,6 +164,15 @@ export type ViewSourceDocument = {
127
164
  context: ViewSourceReference | null;
128
165
  otherReferences: ViewSourceReference[];
129
166
  };
167
+ export type ViewExternalDocument = {
168
+ kind: 'markdown';
169
+ target: string;
170
+ document: ViewDocument;
171
+ } | {
172
+ kind: 'source';
173
+ target: string;
174
+ source: ViewSourceDocument;
175
+ };
130
176
  export type ViewError = {
131
177
  error: string;
132
178
  };
@@ -0,0 +1,2 @@
1
+ /** Publication scope is deliberately narrower than interactive source browsing. */
2
+ export declare function createPublicationPolicy(projectRoot: string): Promise<(path: string) => Promise<boolean>>;