sidebar-md 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +205 -0
- package/dist/server/annotation-ops.d.ts +104 -0
- package/dist/server/annotation-ops.js +166 -0
- package/dist/server/annotation-ops.js.map +1 -0
- package/dist/server/args.d.ts +20 -0
- package/dist/server/args.js +118 -0
- package/dist/server/args.js.map +1 -0
- package/dist/server/author.d.ts +1 -0
- package/dist/server/author.js +45 -0
- package/dist/server/author.js.map +1 -0
- package/dist/server/cli.d.ts +2 -0
- package/dist/server/cli.js +364 -0
- package/dist/server/cli.js.map +1 -0
- package/dist/server/config/gitignore.d.ts +10 -0
- package/dist/server/config/gitignore.js +53 -0
- package/dist/server/config/gitignore.js.map +1 -0
- package/dist/server/config/index.d.ts +5 -0
- package/dist/server/config/index.js +5 -0
- package/dist/server/config/index.js.map +1 -0
- package/dist/server/config/load.d.ts +21 -0
- package/dist/server/config/load.js +106 -0
- package/dist/server/config/load.js.map +1 -0
- package/dist/server/config/paths.d.ts +9 -0
- package/dist/server/config/paths.js +26 -0
- package/dist/server/config/paths.js.map +1 -0
- package/dist/server/config/schema.d.ts +26 -0
- package/dist/server/config/schema.js +56 -0
- package/dist/server/config/schema.js.map +1 -0
- package/dist/server/config/write.d.ts +29 -0
- package/dist/server/config/write.js +74 -0
- package/dist/server/config/write.js.map +1 -0
- package/dist/server/connection-file.d.ts +22 -0
- package/dist/server/connection-file.js +72 -0
- package/dist/server/connection-file.js.map +1 -0
- package/dist/server/dirty-buffer.d.ts +7 -0
- package/dist/server/dirty-buffer.js +39 -0
- package/dist/server/dirty-buffer.js.map +1 -0
- package/dist/server/files.d.ts +19 -0
- package/dist/server/files.js +112 -0
- package/dist/server/files.js.map +1 -0
- package/dist/server/hash.d.ts +1 -0
- package/dist/server/hash.js +7 -0
- package/dist/server/hash.js.map +1 -0
- package/dist/server/init.d.ts +16 -0
- package/dist/server/init.js +53 -0
- package/dist/server/init.js.map +1 -0
- package/dist/server/log.d.ts +8 -0
- package/dist/server/log.js +19 -0
- package/dist/server/log.js.map +1 -0
- package/dist/server/marker-ids.d.ts +3 -0
- package/dist/server/marker-ids.js +31 -0
- package/dist/server/marker-ids.js.map +1 -0
- package/dist/server/mcp-server.d.ts +22 -0
- package/dist/server/mcp-server.js +469 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/server/mention-ops.d.ts +115 -0
- package/dist/server/mention-ops.js +202 -0
- package/dist/server/mention-ops.js.map +1 -0
- package/dist/server/mention-store.d.ts +123 -0
- package/dist/server/mention-store.js +91 -0
- package/dist/server/mention-store.js.map +1 -0
- package/dist/server/runtime-check.d.ts +1 -0
- package/dist/server/runtime-check.js +10 -0
- package/dist/server/runtime-check.js.map +1 -0
- package/dist/server/server.d.ts +28 -0
- package/dist/server/server.js +736 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/stdio.d.ts +18 -0
- package/dist/server/stdio.js +144 -0
- package/dist/server/stdio.js.map +1 -0
- package/dist/server/verbs/builtin.d.ts +16 -0
- package/dist/server/verbs/builtin.js +27 -0
- package/dist/server/verbs/builtin.js.map +1 -0
- package/dist/server/verbs/index.d.ts +2 -0
- package/dist/server/verbs/index.js +3 -0
- package/dist/server/verbs/index.js.map +1 -0
- package/dist/server/verbs/load.d.ts +7 -0
- package/dist/server/verbs/load.js +24 -0
- package/dist/server/verbs/load.js.map +1 -0
- package/dist/server/workspace.d.ts +19 -0
- package/dist/server/workspace.js +138 -0
- package/dist/server/workspace.js.map +1 -0
- package/dist/shared/backoff.d.ts +1 -0
- package/dist/shared/backoff.js +12 -0
- package/dist/shared/backoff.js.map +1 -0
- package/dist/shared/markers.d.ts +136 -0
- package/dist/shared/markers.js +497 -0
- package/dist/shared/markers.js.map +1 -0
- package/dist/shared/protocol.d.ts +201 -0
- package/dist/shared/protocol.js +4 -0
- package/dist/shared/protocol.js.map +1 -0
- package/dist/static/assets/apl-B4CMkyY2.js +2 -0
- package/dist/static/assets/apl-B4CMkyY2.js.map +1 -0
- package/dist/static/assets/asciiarmor-Df11BRmG.js +2 -0
- package/dist/static/assets/asciiarmor-Df11BRmG.js.map +1 -0
- package/dist/static/assets/asn1-EdZsLKOL.js +2 -0
- package/dist/static/assets/asn1-EdZsLKOL.js.map +1 -0
- package/dist/static/assets/asterisk-B-8jnY81.js +2 -0
- package/dist/static/assets/asterisk-B-8jnY81.js.map +1 -0
- package/dist/static/assets/brainfuck-C4LP7Hcl.js +2 -0
- package/dist/static/assets/brainfuck-C4LP7Hcl.js.map +1 -0
- package/dist/static/assets/clike-B9uivgTg.js +2 -0
- package/dist/static/assets/clike-B9uivgTg.js.map +1 -0
- package/dist/static/assets/clojure-BMjYHr_A.js +2 -0
- package/dist/static/assets/clojure-BMjYHr_A.js.map +1 -0
- package/dist/static/assets/cmake-BQqOBYOt.js +2 -0
- package/dist/static/assets/cmake-BQqOBYOt.js.map +1 -0
- package/dist/static/assets/cobol-CWcv1MsR.js +2 -0
- package/dist/static/assets/cobol-CWcv1MsR.js.map +1 -0
- package/dist/static/assets/coffeescript-S37ZYGWr.js +2 -0
- package/dist/static/assets/coffeescript-S37ZYGWr.js.map +1 -0
- package/dist/static/assets/commonlisp-DBKNyK5s.js +2 -0
- package/dist/static/assets/commonlisp-DBKNyK5s.js.map +1 -0
- package/dist/static/assets/crystal-SjHAIU92.js +2 -0
- package/dist/static/assets/crystal-SjHAIU92.js.map +1 -0
- package/dist/static/assets/css-BnMrqG3P.js +2 -0
- package/dist/static/assets/css-BnMrqG3P.js.map +1 -0
- package/dist/static/assets/cypher-C_CwsFkJ.js +2 -0
- package/dist/static/assets/cypher-C_CwsFkJ.js.map +1 -0
- package/dist/static/assets/d-pRatUO7H.js +2 -0
- package/dist/static/assets/d-pRatUO7H.js.map +1 -0
- package/dist/static/assets/diff-DbItnlRl.js +2 -0
- package/dist/static/assets/diff-DbItnlRl.js.map +1 -0
- package/dist/static/assets/dockerfile-BKs6k2Af.js +2 -0
- package/dist/static/assets/dockerfile-BKs6k2Af.js.map +1 -0
- package/dist/static/assets/dtd-DF_7sFjM.js +2 -0
- package/dist/static/assets/dtd-DF_7sFjM.js.map +1 -0
- package/dist/static/assets/dylan-DwRh75JA.js +2 -0
- package/dist/static/assets/dylan-DwRh75JA.js.map +1 -0
- package/dist/static/assets/ebnf-CDyGwa7X.js +2 -0
- package/dist/static/assets/ebnf-CDyGwa7X.js.map +1 -0
- package/dist/static/assets/ecl-Cabwm37j.js +2 -0
- package/dist/static/assets/ecl-Cabwm37j.js.map +1 -0
- package/dist/static/assets/eiffel-CnydiIhH.js +2 -0
- package/dist/static/assets/eiffel-CnydiIhH.js.map +1 -0
- package/dist/static/assets/elm-vLlmbW-K.js +2 -0
- package/dist/static/assets/elm-vLlmbW-K.js.map +1 -0
- package/dist/static/assets/erlang-BNw1qcRV.js +2 -0
- package/dist/static/assets/erlang-BNw1qcRV.js.map +1 -0
- package/dist/static/assets/factor-kuTfRLto.js +2 -0
- package/dist/static/assets/factor-kuTfRLto.js.map +1 -0
- package/dist/static/assets/fcl-Kvtd6kyn.js +2 -0
- package/dist/static/assets/fcl-Kvtd6kyn.js.map +1 -0
- package/dist/static/assets/forth-Ffai-XNe.js +2 -0
- package/dist/static/assets/forth-Ffai-XNe.js.map +1 -0
- package/dist/static/assets/fortran-DYz_wnZ1.js +2 -0
- package/dist/static/assets/fortran-DYz_wnZ1.js.map +1 -0
- package/dist/static/assets/gas-Bneqetm1.js +2 -0
- package/dist/static/assets/gas-Bneqetm1.js.map +1 -0
- package/dist/static/assets/gherkin-heZmZLOM.js +2 -0
- package/dist/static/assets/gherkin-heZmZLOM.js.map +1 -0
- package/dist/static/assets/groovy-D9Dt4D0W.js +2 -0
- package/dist/static/assets/groovy-D9Dt4D0W.js.map +1 -0
- package/dist/static/assets/haskell-BWDZoCOh.js +2 -0
- package/dist/static/assets/haskell-BWDZoCOh.js.map +1 -0
- package/dist/static/assets/haxe-H-WmDvRZ.js +2 -0
- package/dist/static/assets/haxe-H-WmDvRZ.js.map +1 -0
- package/dist/static/assets/http-DBlCnlav.js +2 -0
- package/dist/static/assets/http-DBlCnlav.js.map +1 -0
- package/dist/static/assets/idl-BEugSyMb.js +2 -0
- package/dist/static/assets/idl-BEugSyMb.js.map +1 -0
- package/dist/static/assets/index-76gOt96S.js +2 -0
- package/dist/static/assets/index-76gOt96S.js.map +1 -0
- package/dist/static/assets/index-BOQmpwuG.js +2 -0
- package/dist/static/assets/index-BOQmpwuG.js.map +1 -0
- package/dist/static/assets/index-BRr3mRH4.js +2 -0
- package/dist/static/assets/index-BRr3mRH4.js.map +1 -0
- package/dist/static/assets/index-B_hEIVV3.js +2 -0
- package/dist/static/assets/index-B_hEIVV3.js.map +1 -0
- package/dist/static/assets/index-Be89YI4R.js +2 -0
- package/dist/static/assets/index-Be89YI4R.js.map +1 -0
- package/dist/static/assets/index-BiZobR_v.js +4 -0
- package/dist/static/assets/index-BiZobR_v.js.map +1 -0
- package/dist/static/assets/index-Brumy5_9.js +8 -0
- package/dist/static/assets/index-Brumy5_9.js.map +1 -0
- package/dist/static/assets/index-BsJm14K9.js +2 -0
- package/dist/static/assets/index-BsJm14K9.js.map +1 -0
- package/dist/static/assets/index-CTGcuUyU.js +2 -0
- package/dist/static/assets/index-CTGcuUyU.js.map +1 -0
- package/dist/static/assets/index-Cvxvsst9.js +2 -0
- package/dist/static/assets/index-Cvxvsst9.js.map +1 -0
- package/dist/static/assets/index-D6ORLFAQ.js +2 -0
- package/dist/static/assets/index-D6ORLFAQ.js.map +1 -0
- package/dist/static/assets/index-DEhB0VAu.js +3 -0
- package/dist/static/assets/index-DEhB0VAu.js.map +1 -0
- package/dist/static/assets/index-DTNng05d.js +2 -0
- package/dist/static/assets/index-DTNng05d.js.map +1 -0
- package/dist/static/assets/index-DUOyyduC.js +2 -0
- package/dist/static/assets/index-DUOyyduC.js.map +1 -0
- package/dist/static/assets/index-DaO1DHpW.js +101 -0
- package/dist/static/assets/index-DaO1DHpW.js.map +1 -0
- package/dist/static/assets/index-DjRybwG9.js +2 -0
- package/dist/static/assets/index-DjRybwG9.js.map +1 -0
- package/dist/static/assets/index-MU4h_pJS.js +2 -0
- package/dist/static/assets/index-MU4h_pJS.js.map +1 -0
- package/dist/static/assets/index-PYTD2O0j.js +2 -0
- package/dist/static/assets/index-PYTD2O0j.js.map +1 -0
- package/dist/static/assets/index-SfxJH5Y4.css +1 -0
- package/dist/static/assets/javascript-qCveANmP.js +2 -0
- package/dist/static/assets/javascript-qCveANmP.js.map +1 -0
- package/dist/static/assets/julia-DuME0IfC.js +2 -0
- package/dist/static/assets/julia-DuME0IfC.js.map +1 -0
- package/dist/static/assets/livescript-BwQOo05w.js +2 -0
- package/dist/static/assets/livescript-BwQOo05w.js.map +1 -0
- package/dist/static/assets/lua-BgMRiT3U.js +2 -0
- package/dist/static/assets/lua-BgMRiT3U.js.map +1 -0
- package/dist/static/assets/mathematica-DTrFuWx2.js +2 -0
- package/dist/static/assets/mathematica-DTrFuWx2.js.map +1 -0
- package/dist/static/assets/mbox-CNhZ1qSd.js +2 -0
- package/dist/static/assets/mbox-CNhZ1qSd.js.map +1 -0
- package/dist/static/assets/mirc-CjQqDB4T.js +2 -0
- package/dist/static/assets/mirc-CjQqDB4T.js.map +1 -0
- package/dist/static/assets/mllike-CXdrOF99.js +2 -0
- package/dist/static/assets/mllike-CXdrOF99.js.map +1 -0
- package/dist/static/assets/modelica-Dc1JOy9r.js +2 -0
- package/dist/static/assets/modelica-Dc1JOy9r.js.map +1 -0
- package/dist/static/assets/mscgen-BA5vi2Kp.js +2 -0
- package/dist/static/assets/mscgen-BA5vi2Kp.js.map +1 -0
- package/dist/static/assets/mumps-BT43cFF4.js +2 -0
- package/dist/static/assets/mumps-BT43cFF4.js.map +1 -0
- package/dist/static/assets/nginx-DdIZxoE0.js +2 -0
- package/dist/static/assets/nginx-DdIZxoE0.js.map +1 -0
- package/dist/static/assets/nsis-LdVXkNf5.js +2 -0
- package/dist/static/assets/nsis-LdVXkNf5.js.map +1 -0
- package/dist/static/assets/ntriples-BfvgReVJ.js +2 -0
- package/dist/static/assets/ntriples-BfvgReVJ.js.map +1 -0
- package/dist/static/assets/octave-Ck1zUtKM.js +2 -0
- package/dist/static/assets/octave-Ck1zUtKM.js.map +1 -0
- package/dist/static/assets/oz-BzwKVEFT.js +2 -0
- package/dist/static/assets/oz-BzwKVEFT.js.map +1 -0
- package/dist/static/assets/pascal--L3eBynH.js +2 -0
- package/dist/static/assets/pascal--L3eBynH.js.map +1 -0
- package/dist/static/assets/perl-CdXCOZ3F.js +2 -0
- package/dist/static/assets/perl-CdXCOZ3F.js.map +1 -0
- package/dist/static/assets/pig-CevX1Tat.js +2 -0
- package/dist/static/assets/pig-CevX1Tat.js.map +1 -0
- package/dist/static/assets/powershell-CFHJl5sT.js +2 -0
- package/dist/static/assets/powershell-CFHJl5sT.js.map +1 -0
- package/dist/static/assets/properties-C78fOPTZ.js +2 -0
- package/dist/static/assets/properties-C78fOPTZ.js.map +1 -0
- package/dist/static/assets/protobuf-ChK-085T.js +2 -0
- package/dist/static/assets/protobuf-ChK-085T.js.map +1 -0
- package/dist/static/assets/pug-DukmZTjD.js +2 -0
- package/dist/static/assets/pug-DukmZTjD.js.map +1 -0
- package/dist/static/assets/puppet-DMA9R1ak.js +2 -0
- package/dist/static/assets/puppet-DMA9R1ak.js.map +1 -0
- package/dist/static/assets/python-BuPzkPfP.js +2 -0
- package/dist/static/assets/python-BuPzkPfP.js.map +1 -0
- package/dist/static/assets/q-pXgVlZs6.js +2 -0
- package/dist/static/assets/q-pXgVlZs6.js.map +1 -0
- package/dist/static/assets/r-DUYO_cvP.js +2 -0
- package/dist/static/assets/r-DUYO_cvP.js.map +1 -0
- package/dist/static/assets/rpm-CTu-6PCP.js +2 -0
- package/dist/static/assets/rpm-CTu-6PCP.js.map +1 -0
- package/dist/static/assets/ruby-B2Rjki9n.js +2 -0
- package/dist/static/assets/ruby-B2Rjki9n.js.map +1 -0
- package/dist/static/assets/sas-B4kiWyti.js +2 -0
- package/dist/static/assets/sas-B4kiWyti.js.map +1 -0
- package/dist/static/assets/scheme-C41bIUwD.js +2 -0
- package/dist/static/assets/scheme-C41bIUwD.js.map +1 -0
- package/dist/static/assets/shell-CjFT_Tl9.js +2 -0
- package/dist/static/assets/shell-CjFT_Tl9.js.map +1 -0
- package/dist/static/assets/sieve-C3Gn_uJK.js +2 -0
- package/dist/static/assets/sieve-C3Gn_uJK.js.map +1 -0
- package/dist/static/assets/simple-mode-GW_nhZxv.js +2 -0
- package/dist/static/assets/simple-mode-GW_nhZxv.js.map +1 -0
- package/dist/static/assets/smalltalk-CnHTOXQT.js +2 -0
- package/dist/static/assets/smalltalk-CnHTOXQT.js.map +1 -0
- package/dist/static/assets/solr-DehyRSwq.js +2 -0
- package/dist/static/assets/solr-DehyRSwq.js.map +1 -0
- package/dist/static/assets/sparql-DkYu6x3z.js +2 -0
- package/dist/static/assets/sparql-DkYu6x3z.js.map +1 -0
- package/dist/static/assets/spreadsheet-BCZA_wO0.js +2 -0
- package/dist/static/assets/spreadsheet-BCZA_wO0.js.map +1 -0
- package/dist/static/assets/sql-D0XecflT.js +2 -0
- package/dist/static/assets/sql-D0XecflT.js.map +1 -0
- package/dist/static/assets/stex-C3f8Ysf7.js +2 -0
- package/dist/static/assets/stex-C3f8Ysf7.js.map +1 -0
- package/dist/static/assets/stylus-B533Al4x.js +2 -0
- package/dist/static/assets/stylus-B533Al4x.js.map +1 -0
- package/dist/static/assets/swift-BzpIVaGY.js +2 -0
- package/dist/static/assets/swift-BzpIVaGY.js.map +1 -0
- package/dist/static/assets/tcl-DVfN8rqt.js +2 -0
- package/dist/static/assets/tcl-DVfN8rqt.js.map +1 -0
- package/dist/static/assets/textile-CnDTJFAw.js +2 -0
- package/dist/static/assets/textile-CnDTJFAw.js.map +1 -0
- package/dist/static/assets/tiddlywiki-DO-Gjzrf.js +2 -0
- package/dist/static/assets/tiddlywiki-DO-Gjzrf.js.map +1 -0
- package/dist/static/assets/tiki-DGYXhP31.js +2 -0
- package/dist/static/assets/tiki-DGYXhP31.js.map +1 -0
- package/dist/static/assets/toml-Bm5Em-hy.js +2 -0
- package/dist/static/assets/toml-Bm5Em-hy.js.map +1 -0
- package/dist/static/assets/troff-wAsdV37c.js +2 -0
- package/dist/static/assets/troff-wAsdV37c.js.map +1 -0
- package/dist/static/assets/ttcn-CfJYG6tj.js +2 -0
- package/dist/static/assets/ttcn-CfJYG6tj.js.map +1 -0
- package/dist/static/assets/ttcn-cfg-B9xdYoR4.js +2 -0
- package/dist/static/assets/ttcn-cfg-B9xdYoR4.js.map +1 -0
- package/dist/static/assets/turtle-B1tBg_DP.js +2 -0
- package/dist/static/assets/turtle-B1tBg_DP.js.map +1 -0
- package/dist/static/assets/vb-CmGdzxic.js +2 -0
- package/dist/static/assets/vb-CmGdzxic.js.map +1 -0
- package/dist/static/assets/vbscript-BuJXcnF6.js +2 -0
- package/dist/static/assets/vbscript-BuJXcnF6.js.map +1 -0
- package/dist/static/assets/velocity-D8B20fx6.js +2 -0
- package/dist/static/assets/velocity-D8B20fx6.js.map +1 -0
- package/dist/static/assets/verilog-C6RDOZhf.js +2 -0
- package/dist/static/assets/verilog-C6RDOZhf.js.map +1 -0
- package/dist/static/assets/vhdl-lSbBsy5d.js +2 -0
- package/dist/static/assets/vhdl-lSbBsy5d.js.map +1 -0
- package/dist/static/assets/webidl-ZXfAyPTL.js +2 -0
- package/dist/static/assets/webidl-ZXfAyPTL.js.map +1 -0
- package/dist/static/assets/xquery-CQfU5ijd.js +2 -0
- package/dist/static/assets/xquery-CQfU5ijd.js.map +1 -0
- package/dist/static/assets/yacas-BJ4BC0dw.js +2 -0
- package/dist/static/assets/yacas-BJ4BC0dw.js.map +1 -0
- package/dist/static/assets/z80-Hz9HOZM7.js +2 -0
- package/dist/static/assets/z80-Hz9HOZM7.js.map +1 -0
- package/dist/static/index.html +14 -0
- package/package.json +89 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
export type MarkerType = "mention" | "note" | "suggestion";
|
|
2
|
+
export type MarkerAttrs = Readonly<Record<string, string>>;
|
|
3
|
+
/** A successfully parsed marker (mention or annotation). */
|
|
4
|
+
export type ParsedMarker = {
|
|
5
|
+
type: MarkerType;
|
|
6
|
+
id: string;
|
|
7
|
+
attrs: MarkerAttrs;
|
|
8
|
+
instruction: string;
|
|
9
|
+
/** Byte offset of the first character of the begin marker line. */
|
|
10
|
+
beginLineStart: number;
|
|
11
|
+
/** Byte offset just past the trailing newline of the begin marker line. */
|
|
12
|
+
beginLineEnd: number;
|
|
13
|
+
/** Byte offset of the first character of the end marker line. */
|
|
14
|
+
endLineStart: number;
|
|
15
|
+
/** Byte offset just past the trailing newline of the end marker line. */
|
|
16
|
+
endLineEnd: number;
|
|
17
|
+
/** Byte offset of the first character of the target region. */
|
|
18
|
+
targetStart: number;
|
|
19
|
+
/** Byte offset just past the last character of the target region. */
|
|
20
|
+
targetEnd: number;
|
|
21
|
+
/** Verbatim text of the target region between begin and end. */
|
|
22
|
+
targetContent: string;
|
|
23
|
+
/** 1-indexed line number of the begin marker. */
|
|
24
|
+
beginLineNumber: number;
|
|
25
|
+
/** 1-indexed line number of the end marker. */
|
|
26
|
+
endLineNumber: number;
|
|
27
|
+
};
|
|
28
|
+
/** A mention is a marker with the agreed attribute set. */
|
|
29
|
+
export type Mention = ParsedMarker & {
|
|
30
|
+
type: "mention";
|
|
31
|
+
origin: "human" | "agent";
|
|
32
|
+
verb: string;
|
|
33
|
+
author: string;
|
|
34
|
+
/** True when targetContent is empty or whitespace-only (ADR-0002 orphan). */
|
|
35
|
+
orphan: boolean;
|
|
36
|
+
/** 16-char hex truncation of sha256(targetContent). */
|
|
37
|
+
baseHash: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* An annotation is the same begin/end-pair shape as a mention but its
|
|
41
|
+
* `type` is `note` or `suggestion` instead of `mention`. The `instruction`
|
|
42
|
+
* slot of the begin marker carries the annotation's freeform markdown content
|
|
43
|
+
* (with newlines/control chars encoded so the marker stays on one line); the
|
|
44
|
+
* region between begin and end is the target prose the annotation is
|
|
45
|
+
* attached to. See spec / Marker Shape on Disk and ADR-0003.
|
|
46
|
+
*/
|
|
47
|
+
export type Annotation = ParsedMarker & {
|
|
48
|
+
type: "note" | "suggestion";
|
|
49
|
+
author: string;
|
|
50
|
+
/** Markdown body, with newline escapes decoded from `instruction`. */
|
|
51
|
+
content: string;
|
|
52
|
+
};
|
|
53
|
+
export type ParseErrorKind = "missing-end" | "stray-end" | "duplicate-id" | "malformed-syntax";
|
|
54
|
+
export type ParseError = {
|
|
55
|
+
kind: ParseErrorKind;
|
|
56
|
+
/** 1-indexed source line where the defect was detected. */
|
|
57
|
+
line: number;
|
|
58
|
+
/** Marker id when known. */
|
|
59
|
+
id?: string;
|
|
60
|
+
message: string;
|
|
61
|
+
};
|
|
62
|
+
/** Byte range of a malformed marker line, for editor red-gutter painting. */
|
|
63
|
+
export type MalformedRange = {
|
|
64
|
+
start: number;
|
|
65
|
+
end: number;
|
|
66
|
+
line: number;
|
|
67
|
+
kind: ParseErrorKind;
|
|
68
|
+
};
|
|
69
|
+
export type ParseResult = {
|
|
70
|
+
/** Every well-formed marker, in source order. */
|
|
71
|
+
markers: ParsedMarker[];
|
|
72
|
+
/** Convenience filter: well-formed mentions only. */
|
|
73
|
+
mentions: Mention[];
|
|
74
|
+
/** Convenience filter: well-formed annotations (note + suggestion). */
|
|
75
|
+
annotations: Annotation[];
|
|
76
|
+
errors: ParseError[];
|
|
77
|
+
malformedRanges: MalformedRange[];
|
|
78
|
+
};
|
|
79
|
+
export declare function parseMarkers(text: string): ParseResult;
|
|
80
|
+
/** Thin wrapper for callers that only care about annotations. */
|
|
81
|
+
export declare function parseAnnotations(text: string): Annotation[];
|
|
82
|
+
/**
|
|
83
|
+
* sha256(targetContent) hex, truncated to 16 chars. The truncation gives the
|
|
84
|
+
* agent a short token to echo back on resolve_mention without paying for the
|
|
85
|
+
* full 64-char hex on the wire. Slice 4 sets this contract; slices 5 and 6
|
|
86
|
+
* reuse the same algorithm.
|
|
87
|
+
*/
|
|
88
|
+
export declare function computeMentionBaseHash(targetContent: string): string;
|
|
89
|
+
/** Build the begin marker line (no trailing newline). */
|
|
90
|
+
export declare function formatMentionBegin(args: {
|
|
91
|
+
id: string;
|
|
92
|
+
verb: string;
|
|
93
|
+
origin: "human" | "agent";
|
|
94
|
+
author: string;
|
|
95
|
+
instruction: string;
|
|
96
|
+
}): string;
|
|
97
|
+
/** Build the end marker line (no trailing newline). */
|
|
98
|
+
export declare function formatMentionEnd(id: string): string;
|
|
99
|
+
export declare function formatAnnotationBegin(args: {
|
|
100
|
+
type: "note" | "suggestion";
|
|
101
|
+
id: string;
|
|
102
|
+
author: string;
|
|
103
|
+
/** Annotation body. Multi-line markdown is supported; encoded on emit. */
|
|
104
|
+
instruction: string;
|
|
105
|
+
}): string;
|
|
106
|
+
export declare function formatAnnotationEnd(id: string): string;
|
|
107
|
+
/**
|
|
108
|
+
* Strip control characters and replace `"` with `'` so a value never breaks
|
|
109
|
+
* the HTML comment quoting. Spec: Human identity in markers.
|
|
110
|
+
*/
|
|
111
|
+
export declare function sanitizeAttribute(v: string): string;
|
|
112
|
+
/**
|
|
113
|
+
* Sanitize instruction text: control-chars stripped, `"` replaced with `'`,
|
|
114
|
+
* `-->` neutered so the comment terminator inside the instruction can never
|
|
115
|
+
* close the marker prematurely.
|
|
116
|
+
*/
|
|
117
|
+
export declare function sanitizeInstruction(v: string): string;
|
|
118
|
+
/**
|
|
119
|
+
* Encode an annotation's markdown content into a single-line form safe to
|
|
120
|
+
* place inside the begin marker's `{instruction}` slot. Order matters: the
|
|
121
|
+
* backslash escape runs first so the newline/return escapes that follow
|
|
122
|
+
* don't get double-escaped on decode.
|
|
123
|
+
*
|
|
124
|
+
* Backslash, newline, and carriage-return become two-character escape
|
|
125
|
+
* sequences. Tabs are preserved (they survive in HTML comments and read fine
|
|
126
|
+
* inside markdown). Other control characters are dropped. The `"` to `'`
|
|
127
|
+
* substitution and the `-->` neutering match sanitizeInstruction so the
|
|
128
|
+
* marker's HTML comment quoting never gets broken.
|
|
129
|
+
*/
|
|
130
|
+
export declare function encodeAnnotationContent(v: string): string;
|
|
131
|
+
/**
|
|
132
|
+
* Reverse of {@link encodeAnnotationContent}. The decoder walks the string
|
|
133
|
+
* once so a literal `\\\\n` decodes to `\\n` (backslash plus n), not to a
|
|
134
|
+
* newline.
|
|
135
|
+
*/
|
|
136
|
+
export declare function decodeAnnotationContent(v: string): string;
|
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
// Marker parser primitives shared between the editor (for CodeMirror
|
|
2
|
+
// decorations) and the server (for MCP tools and list_recent_changes).
|
|
3
|
+
// Both layers must agree on what a well-formed marker looks like on disk;
|
|
4
|
+
// keep this module free of node-only imports so the editor bundle picks it up.
|
|
5
|
+
//
|
|
6
|
+
// Spec: Data Model / Marker Shape on Disk, Failure Modes / Malformed markers.
|
|
7
|
+
// ADR-0003 fixes the begin/end pair shape; slice 4 introduces the parser.
|
|
8
|
+
// Slice 5 (annotations) reuses every primitive here without forking; do not
|
|
9
|
+
// inline mention-specific assumptions into the generic marker helpers.
|
|
10
|
+
export function parseMarkers(text) {
|
|
11
|
+
const lines = splitLines(text);
|
|
12
|
+
const open = [];
|
|
13
|
+
const completedOrder = [];
|
|
14
|
+
const completedById = new Map();
|
|
15
|
+
const errors = [];
|
|
16
|
+
const malformedRanges = [];
|
|
17
|
+
const poisonedIds = new Set();
|
|
18
|
+
const seenBeginIds = new Set();
|
|
19
|
+
const reportMalformed = (kind, pl, id, msg) => {
|
|
20
|
+
errors.push({ kind, line: pl.lineNumber, id, message: msg });
|
|
21
|
+
malformedRanges.push({ start: pl.start, end: pl.end, line: pl.lineNumber, kind });
|
|
22
|
+
};
|
|
23
|
+
for (const pl of lines) {
|
|
24
|
+
const tok = tokenizeMarkerLine(pl);
|
|
25
|
+
if (!tok)
|
|
26
|
+
continue;
|
|
27
|
+
if (tok.kind === "begin") {
|
|
28
|
+
if (!tok.id) {
|
|
29
|
+
reportMalformed("malformed-syntax", pl, undefined, "marker begin missing id");
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (seenBeginIds.has(tok.id) || poisonedIds.has(tok.id)) {
|
|
33
|
+
if (!poisonedIds.has(tok.id)) {
|
|
34
|
+
// First time we notice the duplicate. Retroactively invalidate any
|
|
35
|
+
// previously parsed marker with this id so the public output never
|
|
36
|
+
// contains it.
|
|
37
|
+
const prior = completedById.get(tok.id);
|
|
38
|
+
if (prior) {
|
|
39
|
+
completedById.delete(tok.id);
|
|
40
|
+
const idx = completedOrder.indexOf(prior);
|
|
41
|
+
if (idx !== -1)
|
|
42
|
+
completedOrder.splice(idx, 1);
|
|
43
|
+
malformedRanges.push({
|
|
44
|
+
start: prior.beginLineStart,
|
|
45
|
+
end: prior.beginLineEnd,
|
|
46
|
+
line: prior.beginLineNumber,
|
|
47
|
+
kind: "duplicate-id",
|
|
48
|
+
});
|
|
49
|
+
malformedRanges.push({
|
|
50
|
+
start: prior.endLineStart,
|
|
51
|
+
end: prior.endLineEnd,
|
|
52
|
+
line: prior.endLineNumber,
|
|
53
|
+
kind: "duplicate-id",
|
|
54
|
+
});
|
|
55
|
+
errors.push({
|
|
56
|
+
kind: "duplicate-id",
|
|
57
|
+
line: prior.beginLineNumber,
|
|
58
|
+
id: tok.id,
|
|
59
|
+
message: `duplicate marker id ${tok.id}`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const openIdx = open.findIndex((b) => b.id === tok.id);
|
|
64
|
+
if (openIdx !== -1) {
|
|
65
|
+
const prev = open[openIdx];
|
|
66
|
+
open.splice(openIdx, 1);
|
|
67
|
+
malformedRanges.push({
|
|
68
|
+
start: prev.line.start,
|
|
69
|
+
end: prev.line.end,
|
|
70
|
+
line: prev.line.lineNumber,
|
|
71
|
+
kind: "duplicate-id",
|
|
72
|
+
});
|
|
73
|
+
errors.push({
|
|
74
|
+
kind: "duplicate-id",
|
|
75
|
+
line: prev.line.lineNumber,
|
|
76
|
+
id: tok.id,
|
|
77
|
+
message: `duplicate marker id ${tok.id}`,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
poisonedIds.add(tok.id);
|
|
82
|
+
}
|
|
83
|
+
reportMalformed("duplicate-id", pl, tok.id, `duplicate marker id ${tok.id}`);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
seenBeginIds.add(tok.id);
|
|
87
|
+
open.push({
|
|
88
|
+
line: pl,
|
|
89
|
+
type: tok.markerType,
|
|
90
|
+
id: tok.id,
|
|
91
|
+
attrs: tok.attrs,
|
|
92
|
+
instruction: tok.instruction,
|
|
93
|
+
});
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
// tok.kind === "end"
|
|
97
|
+
if (!tok.id) {
|
|
98
|
+
reportMalformed("malformed-syntax", pl, undefined, "marker end missing id");
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (poisonedIds.has(tok.id)) {
|
|
102
|
+
reportMalformed("duplicate-id", pl, tok.id, `end for poisoned id ${tok.id}`);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const matchIdx = open.findIndex((b) => b.id === tok.id);
|
|
106
|
+
if (matchIdx === -1) {
|
|
107
|
+
reportMalformed("stray-end", pl, tok.id, `end with no matching begin for id ${tok.id}`);
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
// Any earlier-open begins never got their own end.
|
|
111
|
+
for (let i = 0; i < matchIdx; i++) {
|
|
112
|
+
const stale = open[i];
|
|
113
|
+
reportMalformed("missing-end", stale.line, stale.id, `missing end for id ${stale.id}`);
|
|
114
|
+
}
|
|
115
|
+
const begin = open[matchIdx];
|
|
116
|
+
open.splice(0, matchIdx + 1);
|
|
117
|
+
const targetStart = begin.line.end;
|
|
118
|
+
const targetEnd = pl.start;
|
|
119
|
+
const targetContent = text.slice(targetStart, targetEnd);
|
|
120
|
+
const completed = {
|
|
121
|
+
type: begin.type,
|
|
122
|
+
id: begin.id,
|
|
123
|
+
attrs: begin.attrs,
|
|
124
|
+
instruction: begin.instruction,
|
|
125
|
+
beginLineStart: begin.line.start,
|
|
126
|
+
beginLineEnd: begin.line.end,
|
|
127
|
+
endLineStart: pl.start,
|
|
128
|
+
endLineEnd: pl.end,
|
|
129
|
+
targetStart,
|
|
130
|
+
targetEnd,
|
|
131
|
+
targetContent,
|
|
132
|
+
beginLineNumber: begin.line.lineNumber,
|
|
133
|
+
endLineNumber: pl.lineNumber,
|
|
134
|
+
};
|
|
135
|
+
completedOrder.push(completed);
|
|
136
|
+
completedById.set(begin.id, completed);
|
|
137
|
+
}
|
|
138
|
+
for (const b of open) {
|
|
139
|
+
reportMalformed("missing-end", b.line, b.id, `missing end for id ${b.id}`);
|
|
140
|
+
}
|
|
141
|
+
const mentions = [];
|
|
142
|
+
for (const m of completedOrder) {
|
|
143
|
+
if (m.type !== "mention")
|
|
144
|
+
continue;
|
|
145
|
+
const origin = m.attrs.origin;
|
|
146
|
+
if (origin !== "human" && origin !== "agent") {
|
|
147
|
+
errors.push({
|
|
148
|
+
kind: "malformed-syntax",
|
|
149
|
+
line: m.beginLineNumber,
|
|
150
|
+
id: m.id,
|
|
151
|
+
message: `mention origin must be 'human' or 'agent' (got ${origin ?? "missing"})`,
|
|
152
|
+
});
|
|
153
|
+
malformedRanges.push({
|
|
154
|
+
start: m.beginLineStart,
|
|
155
|
+
end: m.beginLineEnd,
|
|
156
|
+
line: m.beginLineNumber,
|
|
157
|
+
kind: "malformed-syntax",
|
|
158
|
+
});
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const verb = m.attrs.verb;
|
|
162
|
+
if (!verb || !/^[a-z][a-z0-9-]*$/.test(verb)) {
|
|
163
|
+
errors.push({
|
|
164
|
+
kind: "malformed-syntax",
|
|
165
|
+
line: m.beginLineNumber,
|
|
166
|
+
id: m.id,
|
|
167
|
+
message: `mention verb missing or malformed (got ${verb ?? "missing"})`,
|
|
168
|
+
});
|
|
169
|
+
malformedRanges.push({
|
|
170
|
+
start: m.beginLineStart,
|
|
171
|
+
end: m.beginLineEnd,
|
|
172
|
+
line: m.beginLineNumber,
|
|
173
|
+
kind: "malformed-syntax",
|
|
174
|
+
});
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const author = m.attrs.author ?? "";
|
|
178
|
+
mentions.push({
|
|
179
|
+
...m,
|
|
180
|
+
type: "mention",
|
|
181
|
+
origin,
|
|
182
|
+
verb,
|
|
183
|
+
author,
|
|
184
|
+
orphan: m.targetContent.trim() === "",
|
|
185
|
+
baseHash: computeMentionBaseHash(m.targetContent),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
const annotations = [];
|
|
189
|
+
for (const m of completedOrder) {
|
|
190
|
+
if (m.type !== "note" && m.type !== "suggestion")
|
|
191
|
+
continue;
|
|
192
|
+
const author = m.attrs.author ?? "";
|
|
193
|
+
annotations.push({
|
|
194
|
+
...m,
|
|
195
|
+
type: m.type,
|
|
196
|
+
author,
|
|
197
|
+
content: decodeAnnotationContent(m.instruction),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
markers: completedOrder,
|
|
202
|
+
mentions,
|
|
203
|
+
annotations,
|
|
204
|
+
errors,
|
|
205
|
+
malformedRanges,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/** Thin wrapper for callers that only care about annotations. */
|
|
209
|
+
export function parseAnnotations(text) {
|
|
210
|
+
return parseMarkers(text).annotations;
|
|
211
|
+
}
|
|
212
|
+
// ---------------------------------------------------------------------------
|
|
213
|
+
// Hash and marker-emit helpers
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
/**
|
|
216
|
+
* sha256(targetContent) hex, truncated to 16 chars. The truncation gives the
|
|
217
|
+
* agent a short token to echo back on resolve_mention without paying for the
|
|
218
|
+
* full 64-char hex on the wire. Slice 4 sets this contract; slices 5 and 6
|
|
219
|
+
* reuse the same algorithm.
|
|
220
|
+
*/
|
|
221
|
+
export function computeMentionBaseHash(targetContent) {
|
|
222
|
+
return sha256Pure(targetContent).slice(0, 16);
|
|
223
|
+
}
|
|
224
|
+
/** Build the begin marker line (no trailing newline). */
|
|
225
|
+
export function formatMentionBegin(args) {
|
|
226
|
+
const author = sanitizeAttribute(args.author);
|
|
227
|
+
const verb = sanitizeAttribute(args.verb);
|
|
228
|
+
const instruction = sanitizeInstruction(args.instruction);
|
|
229
|
+
return `<!-- @sidebar mention id="${args.id}" verb="${verb}" origin="${args.origin}" author="${author}": ${instruction} -->`;
|
|
230
|
+
}
|
|
231
|
+
/** Build the end marker line (no trailing newline). */
|
|
232
|
+
export function formatMentionEnd(id) {
|
|
233
|
+
return `<!-- @sidebar end id="${id}" -->`;
|
|
234
|
+
}
|
|
235
|
+
// Annotation emit helpers. The note/suggestion variants share the same
|
|
236
|
+
// begin/end pair shape (ADR-0003); the only difference is the type token.
|
|
237
|
+
// Annotation `content` is markdown and may include newlines or any control
|
|
238
|
+
// characters that aren't valid inside a single-line HTML comment, so we
|
|
239
|
+
// encode it before emission and decode it on parse. The mention path uses
|
|
240
|
+
// `formatMentionBegin` with `sanitizeInstruction`, which strips control
|
|
241
|
+
// characters by design (mention instructions are single-line prompts); the
|
|
242
|
+
// annotation path uses `encodeAnnotationContent` so multi-paragraph
|
|
243
|
+
// suggestions and notes survive the disk round-trip.
|
|
244
|
+
export function formatAnnotationBegin(args) {
|
|
245
|
+
const author = sanitizeAttribute(args.author);
|
|
246
|
+
const instruction = encodeAnnotationContent(args.instruction);
|
|
247
|
+
return `<!-- @sidebar ${args.type} id="${args.id}" author="${author}": ${instruction} -->`;
|
|
248
|
+
}
|
|
249
|
+
export function formatAnnotationEnd(id) {
|
|
250
|
+
return `<!-- @sidebar end id="${id}" -->`;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Strip control characters and replace `"` with `'` so a value never breaks
|
|
254
|
+
* the HTML comment quoting. Spec: Human identity in markers.
|
|
255
|
+
*/
|
|
256
|
+
export function sanitizeAttribute(v) {
|
|
257
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: deliberate scrubber
|
|
258
|
+
return v.replace(/[\x00-\x1f\x7f]/g, "").replace(/"/g, "'");
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Sanitize instruction text: control-chars stripped, `"` replaced with `'`,
|
|
262
|
+
* `-->` neutered so the comment terminator inside the instruction can never
|
|
263
|
+
* close the marker prematurely.
|
|
264
|
+
*/
|
|
265
|
+
export function sanitizeInstruction(v) {
|
|
266
|
+
return sanitizeAttribute(v).replace(/-->/g, "-->");
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Encode an annotation's markdown content into a single-line form safe to
|
|
270
|
+
* place inside the begin marker's `{instruction}` slot. Order matters: the
|
|
271
|
+
* backslash escape runs first so the newline/return escapes that follow
|
|
272
|
+
* don't get double-escaped on decode.
|
|
273
|
+
*
|
|
274
|
+
* Backslash, newline, and carriage-return become two-character escape
|
|
275
|
+
* sequences. Tabs are preserved (they survive in HTML comments and read fine
|
|
276
|
+
* inside markdown). Other control characters are dropped. The `"` to `'`
|
|
277
|
+
* substitution and the `-->` neutering match sanitizeInstruction so the
|
|
278
|
+
* marker's HTML comment quoting never gets broken.
|
|
279
|
+
*/
|
|
280
|
+
export function encodeAnnotationContent(v) {
|
|
281
|
+
return (v
|
|
282
|
+
.replace(/\\/g, "\\\\")
|
|
283
|
+
.replace(/\n/g, "\\n")
|
|
284
|
+
.replace(/\r/g, "\\r")
|
|
285
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: deliberate scrubber
|
|
286
|
+
.replace(/[\x00-\x08\x0b-\x1f\x7f]/g, "")
|
|
287
|
+
.replace(/"/g, "'")
|
|
288
|
+
.replace(/-->/g, "-->"));
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Reverse of {@link encodeAnnotationContent}. The decoder walks the string
|
|
292
|
+
* once so a literal `\\\\n` decodes to `\\n` (backslash plus n), not to a
|
|
293
|
+
* newline.
|
|
294
|
+
*/
|
|
295
|
+
export function decodeAnnotationContent(v) {
|
|
296
|
+
let out = "";
|
|
297
|
+
for (let i = 0; i < v.length; i++) {
|
|
298
|
+
const ch = v[i];
|
|
299
|
+
if (ch !== "\\" || i + 1 >= v.length) {
|
|
300
|
+
out += ch;
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
const next = v[i + 1];
|
|
304
|
+
if (next === "n") {
|
|
305
|
+
out += "\n";
|
|
306
|
+
i++;
|
|
307
|
+
}
|
|
308
|
+
else if (next === "r") {
|
|
309
|
+
out += "\r";
|
|
310
|
+
i++;
|
|
311
|
+
}
|
|
312
|
+
else if (next === "\\") {
|
|
313
|
+
out += "\\";
|
|
314
|
+
i++;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
out += ch;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return out.replace(/-->/g, "-->");
|
|
321
|
+
}
|
|
322
|
+
function splitLines(text) {
|
|
323
|
+
const out = [];
|
|
324
|
+
let lineNumber = 1;
|
|
325
|
+
let i = 0;
|
|
326
|
+
while (i < text.length) {
|
|
327
|
+
let j = i;
|
|
328
|
+
while (j < text.length && text.charCodeAt(j) !== 10 /* \n */)
|
|
329
|
+
j++;
|
|
330
|
+
const end = j < text.length ? j + 1 : j;
|
|
331
|
+
out.push({ text: text.slice(i, j), start: i, end, lineNumber });
|
|
332
|
+
i = end;
|
|
333
|
+
lineNumber++;
|
|
334
|
+
}
|
|
335
|
+
return out;
|
|
336
|
+
}
|
|
337
|
+
const BEGIN_LINE = /^\s*<!--\s*@sidebar\s+(mention|note|suggestion)\s+(.+?)\s*-->\s*$/;
|
|
338
|
+
const END_LINE = /^\s*<!--\s*@sidebar\s+end(?:\s+(.+?))?\s*-->\s*$/;
|
|
339
|
+
function tokenizeMarkerLine(pl) {
|
|
340
|
+
const trimmed = pl.text;
|
|
341
|
+
const endMatch = END_LINE.exec(trimmed);
|
|
342
|
+
if (endMatch) {
|
|
343
|
+
const rest = (endMatch[1] ?? "").trim();
|
|
344
|
+
const id = extractIdFromAttrs(rest);
|
|
345
|
+
return { kind: "end", id };
|
|
346
|
+
}
|
|
347
|
+
const beginMatch = BEGIN_LINE.exec(trimmed);
|
|
348
|
+
if (!beginMatch)
|
|
349
|
+
return null;
|
|
350
|
+
const markerType = beginMatch[1];
|
|
351
|
+
const rest = beginMatch[2];
|
|
352
|
+
let inQuote = null;
|
|
353
|
+
let colonAt = -1;
|
|
354
|
+
for (let i = 0; i < rest.length; i++) {
|
|
355
|
+
const ch = rest[i];
|
|
356
|
+
if (inQuote) {
|
|
357
|
+
if (ch === inQuote)
|
|
358
|
+
inQuote = null;
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
if (ch === '"' || ch === "'") {
|
|
362
|
+
inQuote = ch;
|
|
363
|
+
continue;
|
|
364
|
+
}
|
|
365
|
+
if (ch === ":") {
|
|
366
|
+
colonAt = i;
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
let attrsPart;
|
|
371
|
+
let instruction;
|
|
372
|
+
if (colonAt === -1) {
|
|
373
|
+
attrsPart = rest;
|
|
374
|
+
instruction = "";
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
attrsPart = rest.slice(0, colonAt).trim();
|
|
378
|
+
instruction = rest.slice(colonAt + 1).trim();
|
|
379
|
+
}
|
|
380
|
+
const attrs = parseAttrs(attrsPart);
|
|
381
|
+
const id = attrs.id ?? "";
|
|
382
|
+
return { kind: "begin", markerType, id, attrs, instruction };
|
|
383
|
+
}
|
|
384
|
+
function extractIdFromAttrs(s) {
|
|
385
|
+
const m = /(?:^|\s)id\s*=\s*"([^"]*)"/.exec(s);
|
|
386
|
+
return m ? m[1] : "";
|
|
387
|
+
}
|
|
388
|
+
function parseAttrs(s) {
|
|
389
|
+
const out = {};
|
|
390
|
+
const re = /([a-zA-Z_][a-zA-Z0-9_-]*)\s*=\s*"([^"]*)"/g;
|
|
391
|
+
let m = re.exec(s);
|
|
392
|
+
while (m) {
|
|
393
|
+
out[m[1]] = m[2];
|
|
394
|
+
m = re.exec(s);
|
|
395
|
+
}
|
|
396
|
+
return out;
|
|
397
|
+
}
|
|
398
|
+
// ---- Pure-JS SHA-256 (RFC 6234). The editor bundle stays node-import-free
|
|
399
|
+
// and the server-side cost is negligible at slice-4 volumes (one hash per
|
|
400
|
+
// mention's target region, rebuilt on file watcher change).
|
|
401
|
+
const K = [
|
|
402
|
+
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
|
|
403
|
+
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
|
|
404
|
+
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
|
405
|
+
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
|
|
406
|
+
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
|
|
407
|
+
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
|
408
|
+
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
|
|
409
|
+
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
|
|
410
|
+
];
|
|
411
|
+
function sha256Pure(message) {
|
|
412
|
+
const bytes = [];
|
|
413
|
+
for (let i = 0; i < message.length; i++) {
|
|
414
|
+
const code = message.charCodeAt(i);
|
|
415
|
+
if (code < 0x80)
|
|
416
|
+
bytes.push(code);
|
|
417
|
+
else if (code < 0x800)
|
|
418
|
+
bytes.push(0xc0 | (code >> 6), 0x80 | (code & 0x3f));
|
|
419
|
+
else if (code < 0xd800 || code >= 0xe000) {
|
|
420
|
+
bytes.push(0xe0 | (code >> 12), 0x80 | ((code >> 6) & 0x3f), 0x80 | (code & 0x3f));
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
const hi = code;
|
|
424
|
+
const lo = message.charCodeAt(++i);
|
|
425
|
+
const cp = 0x10000 + (((hi & 0x3ff) << 10) | (lo & 0x3ff));
|
|
426
|
+
bytes.push(0xf0 | (cp >> 18), 0x80 | ((cp >> 12) & 0x3f), 0x80 | ((cp >> 6) & 0x3f), 0x80 | (cp & 0x3f));
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
const bitLen = bytes.length * 8;
|
|
430
|
+
bytes.push(0x80);
|
|
431
|
+
while (bytes.length % 64 !== 56)
|
|
432
|
+
bytes.push(0);
|
|
433
|
+
const hi = Math.floor(bitLen / 0x100000000);
|
|
434
|
+
const lo = bitLen >>> 0;
|
|
435
|
+
bytes.push((hi >>> 24) & 0xff, (hi >>> 16) & 0xff, (hi >>> 8) & 0xff, hi & 0xff);
|
|
436
|
+
bytes.push((lo >>> 24) & 0xff, (lo >>> 16) & 0xff, (lo >>> 8) & 0xff, lo & 0xff);
|
|
437
|
+
let h0 = 0x6a09e667;
|
|
438
|
+
let h1 = 0xbb67ae85;
|
|
439
|
+
let h2 = 0x3c6ef372;
|
|
440
|
+
let h3 = 0xa54ff53a;
|
|
441
|
+
let h4 = 0x510e527f;
|
|
442
|
+
let h5 = 0x9b05688c;
|
|
443
|
+
let h6 = 0x1f83d9ab;
|
|
444
|
+
let h7 = 0x5be0cd19;
|
|
445
|
+
const w = new Array(64);
|
|
446
|
+
for (let chunk = 0; chunk < bytes.length; chunk += 64) {
|
|
447
|
+
for (let i = 0; i < 16; i++) {
|
|
448
|
+
const j = chunk + i * 4;
|
|
449
|
+
w[i] = ((bytes[j] << 24) | (bytes[j + 1] << 16) | (bytes[j + 2] << 8) | bytes[j + 3]) >>> 0;
|
|
450
|
+
}
|
|
451
|
+
for (let i = 16; i < 64; i++) {
|
|
452
|
+
const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);
|
|
453
|
+
const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);
|
|
454
|
+
w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;
|
|
455
|
+
}
|
|
456
|
+
let a = h0;
|
|
457
|
+
let b = h1;
|
|
458
|
+
let c = h2;
|
|
459
|
+
let d = h3;
|
|
460
|
+
let e = h4;
|
|
461
|
+
let f = h5;
|
|
462
|
+
let g = h6;
|
|
463
|
+
let h = h7;
|
|
464
|
+
for (let i = 0; i < 64; i++) {
|
|
465
|
+
const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
|
|
466
|
+
const ch = (e & f) ^ (~e & g);
|
|
467
|
+
const temp1 = (h + S1 + ch + K[i] + w[i]) >>> 0;
|
|
468
|
+
const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
|
|
469
|
+
const maj = (a & b) ^ (a & c) ^ (b & c);
|
|
470
|
+
const temp2 = (S0 + maj) >>> 0;
|
|
471
|
+
h = g;
|
|
472
|
+
g = f;
|
|
473
|
+
f = e;
|
|
474
|
+
e = (d + temp1) >>> 0;
|
|
475
|
+
d = c;
|
|
476
|
+
c = b;
|
|
477
|
+
b = a;
|
|
478
|
+
a = (temp1 + temp2) >>> 0;
|
|
479
|
+
}
|
|
480
|
+
h0 = (h0 + a) >>> 0;
|
|
481
|
+
h1 = (h1 + b) >>> 0;
|
|
482
|
+
h2 = (h2 + c) >>> 0;
|
|
483
|
+
h3 = (h3 + d) >>> 0;
|
|
484
|
+
h4 = (h4 + e) >>> 0;
|
|
485
|
+
h5 = (h5 + f) >>> 0;
|
|
486
|
+
h6 = (h6 + g) >>> 0;
|
|
487
|
+
h7 = (h7 + h) >>> 0;
|
|
488
|
+
}
|
|
489
|
+
return [h0, h1, h2, h3, h4, h5, h6, h7].map(toHex8).join("");
|
|
490
|
+
}
|
|
491
|
+
function rotr(x, n) {
|
|
492
|
+
return ((x >>> n) | (x << (32 - n))) >>> 0;
|
|
493
|
+
}
|
|
494
|
+
function toHex8(n) {
|
|
495
|
+
return n.toString(16).padStart(8, "0");
|
|
496
|
+
}
|
|
497
|
+
//# sourceMappingURL=markers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../src/shared/markers.ts"],"names":[],"mappings":"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"}
|