@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.
- package/README.md +27 -3
- package/dist/src/cli/agent-invocation.d.ts +6 -0
- package/dist/src/cli/agent-invocation.js +23 -0
- package/dist/src/cli/checklist-menu.d.ts +2 -1
- package/dist/src/cli/checklist-menu.js +3 -2
- package/dist/src/cli/fork-instructions.d.ts +1 -0
- package/dist/src/cli/fork-instructions.js +8 -32
- package/dist/src/cli/fork-scaffold.js +2 -2
- package/dist/src/cli/graph.d.ts +1 -1
- package/dist/src/cli/hook.d.ts +26 -0
- package/dist/src/cli/hook.js +115 -64
- package/dist/src/cli/index.js +178 -70
- package/dist/src/cli/init-preferences.d.ts +4 -0
- package/dist/src/cli/init-preferences.js +36 -0
- package/dist/src/cli/init.d.ts +2 -1
- package/dist/src/cli/init.js +100 -60
- package/dist/src/cli/reindex.d.ts +1 -1
- package/dist/src/cli/reindex.js +7 -10
- package/dist/src/cli/search.d.ts +14 -4
- package/dist/src/cli/search.js +115 -101
- package/dist/src/cli/ui-build-server.d.ts +12 -0
- package/dist/src/cli/ui-build-server.js +26 -0
- package/dist/src/cli/ui-build.d.ts +1 -1
- package/dist/src/cli/ui-build.js +1 -1
- package/dist/src/cli/ui.d.ts +1 -1
- package/dist/src/cli/ui.js +1 -1
- package/dist/src/cli/wiki.d.ts +12 -0
- package/dist/src/cli/wiki.js +85 -0
- package/dist/src/fork/antigravity-hook.d.ts +47 -0
- package/dist/src/fork/antigravity-hook.js +424 -0
- package/dist/src/fork/antigravity-init.d.ts +17 -0
- package/dist/src/fork/antigravity-init.js +124 -0
- package/dist/src/fork/upstream-drift.js +1 -1
- package/dist/src/fork/upstream-guard.d.ts +1 -1
- package/dist/src/fork/upstream-guard.js +8 -7
- package/dist/src/graph-export.js +7 -7
- package/dist/src/knowledge/index.js +2 -2
- package/dist/src/mcp/server.js +34 -18
- package/dist/src/search/cache.d.ts +3 -0
- package/dist/src/search/cache.js +104 -0
- package/dist/src/search/chunks.d.ts +23 -0
- package/dist/src/search/chunks.js +200 -0
- package/dist/src/search/db.d.ts +28 -16
- package/dist/src/search/db.js +100 -40
- package/dist/src/search/embedder.d.ts +2 -1
- package/dist/src/search/embedder.js +7 -6
- package/dist/src/search/index.d.ts +6 -2
- package/dist/src/search/index.js +176 -70
- package/dist/src/search/lexical.d.ts +6 -0
- package/dist/src/search/lexical.js +36 -0
- package/dist/src/search/lock.d.ts +5 -0
- package/dist/src/search/lock.js +45 -0
- package/dist/src/search/query.d.ts +26 -0
- package/dist/src/search/query.js +103 -0
- package/dist/src/search/search.d.ts +16 -7
- package/dist/src/search/search.js +165 -21
- package/dist/src/search/types.d.ts +15 -0
- package/dist/src/view/client/assets/GraphView-D_xnk0bP.js +456 -0
- package/dist/src/view/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/src/view/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/src/view/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/src/view/client/assets/MarkdownEditor-bjqt_FoF.js +28 -0
- package/dist/src/view/client/assets/OrbitControls-DwcpQNja.js +1 -0
- package/dist/src/view/client/assets/STLLoader-CLWTKt5i.js +1 -0
- package/dist/src/view/client/assets/_commonjsHelpers-CqkleIqs.js +1 -0
- package/dist/src/view/client/assets/abnfDiagram-VCTEODGH-kWGvtRnL.js +1 -0
- package/dist/src/view/client/assets/arc-BPAFd7cP.js +1 -0
- package/dist/src/view/client/assets/architectureDiagram-5GKGNRK7-CsY39oIR.js +36 -0
- package/dist/src/view/client/assets/blockDiagram-I7D4REHJ-DHGBG7BJ.js +129 -0
- package/dist/src/view/client/assets/c4Diagram-7LVT6UL2-vywK4eb7.js +38 -0
- package/dist/src/view/client/assets/channel-CX71L_qV.js +1 -0
- package/dist/src/view/client/assets/chunk-2Q5K7J3B-Do3Hz_ci.js +1 -0
- package/dist/src/view/client/assets/chunk-5VM5RSS4-B5R1lSeY.js +15 -0
- package/dist/src/view/client/assets/chunk-F27PBJKO-Dm55FM_W.js +1 -0
- package/dist/src/view/client/assets/chunk-IMKFNOWR-ChptrvvM.js +231 -0
- package/dist/src/view/client/assets/chunk-JWPE2WC7-BRQBjrKS.js +1 -0
- package/dist/src/view/client/assets/chunk-POPQ4Y6H-CainVZIL.js +1 -0
- package/dist/src/view/client/assets/chunk-SVP7TREG-DsKsNGmM.js +88 -0
- package/dist/src/view/client/assets/chunk-TICWLB2K-BctkMcJc.js +206 -0
- package/dist/src/view/client/assets/chunk-XXDRQBXY-BN7SgOUT.js +1 -0
- package/dist/src/view/client/assets/classDiagram-ZZMXUADV-B1VyU6zO.js +1 -0
- package/dist/src/view/client/assets/classDiagram-v2-VYDZK3BY-B1VyU6zO.js +1 -0
- package/dist/src/view/client/assets/cose-bilkent-JH36ORCC-BszzwrMe.js +1 -0
- package/dist/src/view/client/assets/cynefin-OW5HDTMX-CdRyAkPs.js +166 -0
- package/dist/src/view/client/assets/cynefinDiagram-5FMLGOSQ-BLvKPZ1u.js +62 -0
- package/dist/src/view/client/assets/cytoscape.esm-DzSz-X2X.js +321 -0
- package/dist/src/view/client/assets/dagre-GXQ25YYZ-V68w_l65.js +4 -0
- package/dist/src/view/client/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/src/view/client/assets/diagram-S7CK7UJ4-C2i4eEMg.js +30 -0
- package/dist/src/view/client/assets/diagram-UQ7AKVKN-BiwWh5jC.js +41 -0
- package/dist/src/view/client/assets/diagram-VSXAHHWV-hkKR_vyS.js +3 -0
- package/dist/src/view/client/assets/diagram-VX7I27RA-DzRCSMAc.js +24 -0
- package/dist/src/view/client/assets/diagram-Z3DM3KII-fhSFPxyK.js +24 -0
- package/dist/src/view/client/assets/ebnfDiagram-PWID7BFC-CCEUDKSA.js +1 -0
- package/dist/src/view/client/assets/erDiagram-RLTQ6QDP-FJ2IMyTi.js +99 -0
- package/dist/src/view/client/assets/flowDiagram-HODETNUW-BvasdLeK.js +168 -0
- package/dist/src/view/client/assets/ganttDiagram-EL5Y4UJY-CiwkBZvY.js +292 -0
- package/dist/src/view/client/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/src/view/client/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/src/view/client/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/src/view/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/src/view/client/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
- package/dist/src/view/client/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
- package/dist/src/view/client/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
- package/dist/src/view/client/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/dist/src/view/client/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
- package/dist/src/view/client/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
- package/dist/src/view/client/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/src/view/client/assets/gitGraphDiagram-WWUBYQGX-DYlP2_js.js +106 -0
- package/dist/src/view/client/assets/index-BnENo9bV.js +1 -0
- package/dist/src/view/client/assets/index-CQ7EOox7.css +1 -0
- package/dist/src/view/client/assets/index-CynNDkxt.js +13 -0
- package/dist/src/view/client/assets/infoDiagram-27XIBGKW-DRPB2c48.js +2 -0
- package/dist/src/view/client/assets/init-Gi6I4Gst.js +1 -0
- package/dist/src/view/client/assets/ishikawaDiagram-5VMMS53U-8VV429Cv.js +70 -0
- package/dist/src/view/client/assets/journeyDiagram-3NMN7TZE-Dzmwnf83.js +139 -0
- package/dist/src/view/client/assets/kanban-definition-UXKFOSKX-pYyZZ1i-.js +89 -0
- package/dist/src/view/client/assets/katex-HP8lGamR.js +257 -0
- package/dist/src/view/client/assets/layout-GF9k6yGo.js +1 -0
- package/dist/src/view/client/assets/linear-Yt2sSOYV.js +1 -0
- package/dist/src/view/client/assets/logo-RR_KBOAT.svg +149 -0
- package/dist/src/view/client/assets/maplibre-gl-CDX6Zuow.js +800 -0
- package/dist/src/view/client/assets/mermaid.core-ChWYCHN0.js +310 -0
- package/dist/src/view/client/assets/mindmap-definition-YA3MSWOX-Cc4fQvf1.js +96 -0
- package/dist/src/view/client/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/src/view/client/assets/pegDiagram-XKGWAZYB-C0SsB8bZ.js +1 -0
- package/dist/src/view/client/assets/pieDiagram-E7YTZNPT-DIJpqERZ.js +39 -0
- package/dist/src/view/client/assets/quadrantDiagram-AXDQQJYC--d-gl6j-.js +7 -0
- package/dist/src/view/client/assets/railroadDiagram-O6MQD6OU-BQxwTt7z.js +1 -0
- package/dist/src/view/client/assets/requirementDiagram-BXWQKSXE-B_oTeD2A.js +84 -0
- package/dist/src/view/client/assets/sankeyDiagram-P5KCCOFB-DLukmE8X.js +40 -0
- package/dist/src/view/client/assets/sequenceDiagram-WJ2MYXX4-BNjVB2sc.js +162 -0
- package/dist/src/view/client/assets/sizeCapture-INFHLROL-BZecQTOw.js +1 -0
- package/dist/src/view/client/assets/stateDiagram-D77RDMKH-Bu1urvXC.js +1 -0
- package/dist/src/view/client/assets/stateDiagram-v2-MP3YSRHH-5pc_697G.js +1 -0
- package/dist/src/view/client/assets/swimlanes-42K2YHIH-bLAlcepB.js +1 -0
- package/dist/src/view/client/assets/swimlanesDiagram-VR7AAH4N-BbOpZjpp.js +8 -0
- package/dist/src/view/client/assets/three.module-PDSP0dbZ.js +4108 -0
- package/dist/src/view/client/assets/timeline-definition-24CTP7MA-tbwCNvcA.js +120 -0
- package/dist/src/view/client/assets/vennDiagram-4TSXK5OY-D8U8Fk0N.js +34 -0
- package/dist/src/view/client/assets/wardleyDiagram-VM6X3IG4-LHBVIeNb.js +78 -0
- package/dist/src/view/client/assets/xychartDiagram-S5SC5T6Z-CN4tfaFV.js +7 -0
- package/dist/src/view/client/index.html +2 -2
- package/dist/src/view/client-shell.d.ts +2 -0
- package/dist/src/view/client-shell.js +5 -0
- package/dist/src/view/diagnostics.d.ts +3 -2
- package/dist/src/view/diagnostics.js +49 -58
- package/dist/src/view/document-edit.d.ts +8 -0
- package/dist/src/view/document-edit.js +25 -0
- package/dist/src/view/document-route.d.ts +14 -0
- package/dist/src/view/document-route.js +137 -0
- package/dist/src/view/document-tree.d.ts +18 -0
- package/dist/src/view/document-tree.js +139 -0
- package/dist/src/view/external-document-tree.d.ts +3 -0
- package/dist/src/view/external-document-tree.js +674 -0
- package/dist/src/view/git-diff.js +202 -2
- package/dist/src/view/git.js +1 -1
- package/dist/src/view/graph.d.ts +4 -3
- package/dist/src/view/graph.js +100 -9
- package/dist/src/view/highlight.d.ts +10 -2
- package/dist/src/view/highlight.js +50648 -3166
- package/dist/src/view/markdown.d.ts +3 -2
- package/dist/src/view/markdown.js +256 -54
- package/dist/src/view/preindexed-search.d.ts +15 -0
- package/dist/src/view/preindexed-search.js +25 -0
- package/dist/src/view/protocol.d.ts +53 -7
- package/dist/src/view/publication.d.ts +2 -0
- package/dist/src/view/publication.js +78 -0
- package/dist/src/view/references.d.ts +11 -26
- package/dist/src/view/references.js +121 -112
- package/dist/src/view/repository.d.ts +14 -4
- package/dist/src/view/repository.js +260 -19
- package/dist/src/view/request-security.d.ts +5 -0
- package/dist/src/view/request-security.js +46 -0
- package/dist/src/view/search-result.d.ts +4 -0
- package/dist/src/view/search-result.js +25 -0
- package/dist/src/view/search.d.ts +7 -2
- package/dist/src/view/search.js +23 -34
- package/dist/src/view/server-build.d.ts +21 -0
- package/dist/src/view/server-build.js +145 -0
- package/dist/src/view/server-deployment.d.ts +31 -0
- package/dist/src/view/server-deployment.js +123 -0
- package/dist/src/view/server-index-worker.d.ts +6 -0
- package/dist/src/view/server-index-worker.js +14 -0
- package/dist/src/view/server.d.ts +11 -2
- package/dist/src/view/server.js +245 -73
- package/dist/src/view/source-target.d.ts +2 -0
- package/dist/src/view/source-target.js +49 -8
- package/dist/src/view/static-build.d.ts +18 -2
- package/dist/src/view/static-build.js +449 -110
- package/dist/src/view/static-protocol.d.ts +26 -2
- package/dist/src/view/static-protocol.js +5 -0
- package/dist/src/view/store.d.ts +20 -3
- package/dist/src/view/store.js +304 -48
- package/dist/src/view/table-of-contents.d.ts +2 -2
- package/dist/src/view/table-of-contents.js +2 -22
- package/dist/src/view/vercel-build.d.ts +24 -0
- package/dist/src/view/vercel-build.js +152 -0
- package/dist/src/view/vercel-server-build.d.ts +10 -0
- package/dist/src/view/vercel-server-build.js +61 -0
- package/dist/src/wiki/catalog.d.ts +21 -0
- package/dist/src/wiki/catalog.js +256 -0
- package/dist/src/wiki/publish.d.ts +27 -0
- package/dist/src/wiki/publish.js +265 -0
- package/dist/src/wiki/render.d.ts +20 -0
- package/dist/src/wiki/render.js +163 -0
- package/dist/src/wiki/transform.d.ts +7 -0
- package/dist/src/wiki/transform.js +264 -0
- package/dist/vendor/lat.md-server/cli.d.ts +2 -0
- package/dist/vendor/lat.md-server/cli.js +12 -0
- package/dist/vendor/lat.md-server/index.d.ts +38 -0
- package/dist/vendor/lat.md-server/index.js +128 -0
- package/package.json +68 -22
- package/plugins/lat-md/README.md +61 -0
- package/plugins/lat-md/hooks.json +38 -0
- package/plugins/lat-md/plugin.json +9 -0
- package/plugins/lat-md/rules/AGENTS.md +344 -0
- package/plugins/lat-md/skills/lat-md/SKILL.md +210 -0
- package/plugins/lat-md/skills/lat-md-conventions/SKILL.md +226 -0
- package/templates/AGENTS.md +26 -7
- package/templates/cursor-rules.md +23 -7
- package/templates/fork/conventions.md +133 -11
- package/templates/opencode-plugin.ts +9 -9
- package/templates/pi-extension.ts +11 -11
- package/templates/skill/SKILL.md +35 -3
- package/dist/src/cli/check-coverage.d.ts +0 -2
- package/dist/src/cli/check-coverage.js +0 -71
- package/dist/src/cli/check-frontmatter.d.ts +0 -12
- package/dist/src/cli/check-frontmatter.js +0 -44
- package/dist/src/cli/check-mode.d.ts +0 -21
- package/dist/src/cli/check-mode.js +0 -364
- package/dist/src/cli/check-status.d.ts +0 -74
- package/dist/src/cli/check-status.js +0 -217
- package/dist/src/cli/check.d.ts +0 -45
- package/dist/src/cli/check.js +0 -781
- package/dist/src/cli/context.d.ts +0 -11
- package/dist/src/cli/context.js +0 -58
- package/dist/src/cli/expand.d.ts +0 -8
- package/dist/src/cli/expand.js +0 -94
- package/dist/src/cli/gen-index.d.ts +0 -45
- package/dist/src/cli/gen-index.js +0 -235
- package/dist/src/cli/link-scheme.d.ts +0 -54
- package/dist/src/cli/link-scheme.js +0 -101
- package/dist/src/cli/locate.d.ts +0 -2
- package/dist/src/cli/locate.js +0 -17
- package/dist/src/cli/refs.d.ts +0 -22
- package/dist/src/cli/refs.js +0 -229
- package/dist/src/cli/section.d.ts +0 -43
- package/dist/src/cli/section.js +0 -252
- package/dist/src/cli/select-menu.d.ts +0 -13
- package/dist/src/cli/select-menu.js +0 -100
- package/dist/src/code-refs.d.ts +0 -17
- package/dist/src/code-refs.js +0 -298
- package/dist/src/config.d.ts +0 -29
- package/dist/src/config.js +0 -83
- package/dist/src/context.d.ts +0 -23
- package/dist/src/context.js +0 -11
- package/dist/src/extensions/wiki-link/from-markdown.d.ts +0 -5
- package/dist/src/extensions/wiki-link/from-markdown.js +0 -34
- package/dist/src/extensions/wiki-link/index.d.ts +0 -4
- package/dist/src/extensions/wiki-link/index.js +0 -3
- package/dist/src/extensions/wiki-link/syntax.d.ts +0 -14
- package/dist/src/extensions/wiki-link/syntax.js +0 -121
- package/dist/src/extensions/wiki-link/to-markdown.d.ts +0 -5
- package/dist/src/extensions/wiki-link/to-markdown.js +0 -28
- package/dist/src/extensions/wiki-link/types.d.ts +0 -34
- package/dist/src/format.d.ts +0 -8
- package/dist/src/format.js +0 -43
- package/dist/src/init-version.d.ts +0 -10
- package/dist/src/init-version.js +0 -49
- package/dist/src/lattice.d.ts +0 -109
- package/dist/src/lattice.js +0 -817
- package/dist/src/parser.d.ts +0 -3
- package/dist/src/parser.js +0 -18
- package/dist/src/source-parser.d.ts +0 -27
- package/dist/src/source-parser.js +0 -916
- package/dist/src/untrusted.d.ts +0 -18
- package/dist/src/untrusted.js +0 -93
- package/dist/src/view/client/assets/index-C3iaZyYT.css +0 -1
- package/dist/src/view/client/assets/index-KWi67IMz.js +0 -334
- package/dist/src/view/client/assets/logo-CNF8zs47.svg +0 -182
- package/dist/src/walk.d.ts +0 -18
- package/dist/src/walk.js +0 -27
- /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
|
-
/**
|
|
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
|
-
|
|
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
|
|
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 '
|
|
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
|
-
|
|
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
|
-
[
|
|
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
|
-
|
|
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
|
|
88
|
-
|
|
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(
|
|
91
|
-
.use(
|
|
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
|
-
/**
|
|
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
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
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
|
|
408
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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
|
-
|
|
150
|
+
paragraphTree: ViewDocumentTree;
|
|
114
151
|
url: string;
|
|
115
152
|
};
|
|
116
153
|
export type ViewSourceDocument = {
|
|
117
154
|
path: string;
|
|
118
155
|
content: string;
|
|
119
|
-
|
|
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
|
};
|