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 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/server/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type LogLevel = "DEBUG" | "INFO" | "WARN" | "ERROR";
|
|
2
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
3
|
+
export declare const log: {
|
|
4
|
+
debug: (m: string) => void;
|
|
5
|
+
info: (m: string) => void;
|
|
6
|
+
warn: (m: string) => void;
|
|
7
|
+
error: (m: string) => void;
|
|
8
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// stderr logger per the spec's Runtime baseline: INFO by default, --verbose
|
|
2
|
+
// raises to DEBUG, --quiet lowers to WARN. No file logging in V1.
|
|
3
|
+
const RANK = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 };
|
|
4
|
+
let threshold = RANK.INFO;
|
|
5
|
+
export function setLogLevel(level) {
|
|
6
|
+
threshold = RANK[level];
|
|
7
|
+
}
|
|
8
|
+
function emit(level, msg) {
|
|
9
|
+
if (RANK[level] < threshold)
|
|
10
|
+
return;
|
|
11
|
+
process.stderr.write(`[${level}] ${msg}\n`);
|
|
12
|
+
}
|
|
13
|
+
export const log = {
|
|
14
|
+
debug: (m) => emit("DEBUG", m),
|
|
15
|
+
info: (m) => emit("INFO", m),
|
|
16
|
+
warn: (m) => emit("WARN", m),
|
|
17
|
+
error: (m) => emit("ERROR", m),
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/server/log.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,kEAAkE;AAIlE,MAAM,IAAI,GAA6B,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAEhF,IAAI,SAAS,GAAW,IAAI,CAAC,IAAI,CAAC;AAElC,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,IAAI,CAAC,KAAe,EAAE,GAAW;IACxC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,SAAS;QAAE,OAAO;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;CACvC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
|
+
// Spec / slice-4 design: stable, never-recomputed marker ids. Generated once
|
|
3
|
+
// at creation time (here) from crypto.randomBytes encoded in base36 to a
|
|
4
|
+
// short ~4-character body. We pick the prefix by marker type so a glance at
|
|
5
|
+
// the on-disk file tells you what kind of marker carries the id:
|
|
6
|
+
//
|
|
7
|
+
// m-xxxx mention (this slice)
|
|
8
|
+
// n-xxxx note (slice 5)
|
|
9
|
+
// s-xxxx suggestion (slice 5)
|
|
10
|
+
//
|
|
11
|
+
// Duplicate ids in a file are a malformed-marker defect, not an auto-rename
|
|
12
|
+
// trigger. The id is independent of the marker's content; content can change
|
|
13
|
+
// underneath while the marker is open and the id stays constant.
|
|
14
|
+
const ID_BODY_BYTES = 3; // -> roughly 4 base36 chars
|
|
15
|
+
export function generateMentionId() {
|
|
16
|
+
return `m-${randomChunk()}`;
|
|
17
|
+
}
|
|
18
|
+
export function generateNoteId() {
|
|
19
|
+
return `n-${randomChunk()}`;
|
|
20
|
+
}
|
|
21
|
+
export function generateSuggestionId() {
|
|
22
|
+
return `s-${randomChunk()}`;
|
|
23
|
+
}
|
|
24
|
+
function randomChunk() {
|
|
25
|
+
const buf = randomBytes(ID_BODY_BYTES);
|
|
26
|
+
let n = 0;
|
|
27
|
+
for (let i = 0; i < buf.length; i++)
|
|
28
|
+
n = (n << 8) | buf[i];
|
|
29
|
+
return n.toString(36).padStart(4, "0").slice(-6);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=marker-ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marker-ids.js","sourceRoot":"","sources":["../../src/server/marker-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,6EAA6E;AAC7E,yEAAyE;AACzE,4EAA4E;AAC5E,iEAAiE;AACjE,EAAE;AACF,mCAAmC;AACnC,gCAAgC;AAChC,iCAAiC;AACjC,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,iEAAiE;AAEjE,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,4BAA4B;AAErD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,KAAK,WAAW,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,KAAK,WAAW,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,KAAK,WAAW,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { type AnnotationCreatedAtMap } from "./annotation-ops.js";
|
|
3
|
+
import type { DirtyBufferTracker } from "./dirty-buffer.js";
|
|
4
|
+
import { type MentionCreatedAtMap } from "./mention-ops.js";
|
|
5
|
+
import type { MentionStore } from "./mention-store.js";
|
|
6
|
+
import type { VerbCatalog } from "./verbs/index.js";
|
|
7
|
+
import type { Workspace } from "./workspace.js";
|
|
8
|
+
export declare const TIER1_DESCRIPTION: string;
|
|
9
|
+
export type McpServerDeps = {
|
|
10
|
+
workspace: Workspace;
|
|
11
|
+
dirtyBuffers: DirtyBufferTracker;
|
|
12
|
+
mentionStore: MentionStore;
|
|
13
|
+
/** Persistent map from mention id -> ISO creation timestamp. Shared
|
|
14
|
+
* across requests so created_at survives re-scans. */
|
|
15
|
+
mentionCreatedAt: MentionCreatedAtMap;
|
|
16
|
+
/** Persistent map from annotation id -> ISO creation timestamp. */
|
|
17
|
+
annotationCreatedAt: AnnotationCreatedAtMap;
|
|
18
|
+
verbCatalog: VerbCatalog;
|
|
19
|
+
/** Resolved on each call so mid-session git config edits take effect. */
|
|
20
|
+
resolveHumanAuthor: () => string;
|
|
21
|
+
};
|
|
22
|
+
export declare function createSidebarMcpServer(deps: McpServerDeps): McpServer;
|
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import fastGlob from "fast-glob";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { addAnnotation, listAnnotations, removeAnnotation, updateAnnotation, } from "./annotation-ops.js";
|
|
5
|
+
import { readWorkspaceFile } from "./files.js";
|
|
6
|
+
import { findMention, listMentions, resolveMention, } from "./mention-ops.js";
|
|
7
|
+
// The Tier-1 server description (~300 tokens). Every connecting agent sees
|
|
8
|
+
// this on `initialize` regardless of whether a richer skill file was
|
|
9
|
+
// scaffolded. It is the protocol floor that pins the prose-edit permission
|
|
10
|
+
// model, the base_hash protocol, the is_draft signal, and a pointer to
|
|
11
|
+
// scaffold-skill (see spec: Skill / Tier 1).
|
|
12
|
+
//
|
|
13
|
+
// Tokens are roughly 4 chars each for English prose; this string sits around
|
|
14
|
+
// 1300 chars to stay safely inside the 200-400 token band.
|
|
15
|
+
export const TIER1_DESCRIPTION = [
|
|
16
|
+
"Sidebar is a local-first markdown reading and co-authoring surface for a project's docs.",
|
|
17
|
+
"It hosts the project's workspace (markdown files matching the configured glob) and mediates",
|
|
18
|
+
"collaboration between the human (via a CodeMirror editor in the browser) and you (via this",
|
|
19
|
+
"MCP server). Read tools surface the workspace; write tools, when present, are constrained.",
|
|
20
|
+
"",
|
|
21
|
+
"Permission model. You may read freely, but you may not edit prose unilaterally. Prose changes",
|
|
22
|
+
"happen in only two ways: (1) resolve_mention, when the human has placed a Mention marker",
|
|
23
|
+
"authorizing edits to a specific region; (2) add_annotation(type=suggestion), which proposes",
|
|
24
|
+
"replacement text that the human must accept. You can write note annotations anywhere for",
|
|
25
|
+
"information; notes do not edit prose.",
|
|
26
|
+
"",
|
|
27
|
+
"base_hash protocol. Mention lifecycle uses optimistic concurrency. When you read a mention",
|
|
28
|
+
"you receive its base_hash (first 16 hex chars of sha256(target_content)). resolve_mention",
|
|
29
|
+
"must echo that hash. If the file changed since, you get a conflict; refresh via get_mention",
|
|
30
|
+
"and retry against the new content.",
|
|
31
|
+
"",
|
|
32
|
+
"is_draft signal. read_doc returns is_draft: bool and draft_age_seconds: int. When is_draft is",
|
|
33
|
+
"true, the human has unsaved edits in the editor and the disk content you see is stale. Prefer",
|
|
34
|
+
"to skip the file or create an agent-origin mention with verb clarify asking whether to proceed.",
|
|
35
|
+
"",
|
|
36
|
+
"For full guidance (verb tables, mention round-trip examples, multi-agent etiquette, suggestion",
|
|
37
|
+
"flow), run npx sidebar-md scaffold-skill in this project. That writes a skill file your agent can",
|
|
38
|
+
"load alongside this server.",
|
|
39
|
+
].join("\n");
|
|
40
|
+
export function createSidebarMcpServer(deps) {
|
|
41
|
+
const { workspace, dirtyBuffers, mentionStore, mentionCreatedAt, annotationCreatedAt, verbCatalog, } = deps;
|
|
42
|
+
void deps.resolveHumanAuthor; // reserved for agent-origin mention path (slice 6)
|
|
43
|
+
const server = new McpServer({ name: "sidebar", version: "0.1.0" }, {
|
|
44
|
+
instructions: TIER1_DESCRIPTION,
|
|
45
|
+
capabilities: { tools: {} },
|
|
46
|
+
});
|
|
47
|
+
// Malformed-marker warnings are emitted by the server's status broadcaster
|
|
48
|
+
// (server.ts buildStatusSnapshot) so we get exactly one warning per affected
|
|
49
|
+
// file per process lifetime. MCP tool calls just read; they don't warn.
|
|
50
|
+
// -------------------------------------------------------------------------
|
|
51
|
+
// Read tools (existing + slice 4)
|
|
52
|
+
// -------------------------------------------------------------------------
|
|
53
|
+
server.registerTool("list_docs", {
|
|
54
|
+
description: "List every markdown file in the sidebar workspace (the configured workspace glob).",
|
|
55
|
+
inputSchema: {},
|
|
56
|
+
}, async () => {
|
|
57
|
+
const ignores = ["**/.git/**", "**/node_modules/**", "**/dist/**", "**/.sidebar/**"];
|
|
58
|
+
const files = await fastGlob(workspace.innerGlob, {
|
|
59
|
+
cwd: workspace.root,
|
|
60
|
+
onlyFiles: true,
|
|
61
|
+
dot: false,
|
|
62
|
+
followSymbolicLinks: false,
|
|
63
|
+
ignore: ignores,
|
|
64
|
+
});
|
|
65
|
+
const paths = files.sort();
|
|
66
|
+
return {
|
|
67
|
+
content: [{ type: "text", text: JSON.stringify({ paths }) }],
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
server.registerTool("read_doc", {
|
|
71
|
+
description: "Read a markdown file in the sidebar workspace. Returns full content with mention and " +
|
|
72
|
+
"annotation markers intact, plus is_draft (true when the human has unsaved edits in the " +
|
|
73
|
+
"editor) and draft_age_seconds.",
|
|
74
|
+
inputSchema: {
|
|
75
|
+
path: z.string().min(1).describe("POSIX-style path relative to the workspace root."),
|
|
76
|
+
},
|
|
77
|
+
}, async ({ path }) => {
|
|
78
|
+
try {
|
|
79
|
+
const { content } = await readWorkspaceFile(workspace, path);
|
|
80
|
+
return {
|
|
81
|
+
content: [
|
|
82
|
+
{
|
|
83
|
+
type: "text",
|
|
84
|
+
text: JSON.stringify({
|
|
85
|
+
path,
|
|
86
|
+
content,
|
|
87
|
+
is_draft: dirtyBuffers.isDirty(path),
|
|
88
|
+
draft_age_seconds: dirtyBuffers.draftAgeSeconds(path),
|
|
89
|
+
}),
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
return errorResult(`read_doc failed: ${e.message}`);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
server.registerTool("list_pending_mentions", {
|
|
99
|
+
description: "List every open mention across the workspace. Each entry has id, file, origin, verb, " +
|
|
100
|
+
"instruction, author, target_content, base_hash (sha256(target_content) truncated to 16 " +
|
|
101
|
+
"hex chars), and created_at. Orphaned mentions (target region empty/whitespace) are " +
|
|
102
|
+
"included; malformed markers are skipped.",
|
|
103
|
+
inputSchema: {},
|
|
104
|
+
}, async () => {
|
|
105
|
+
const { mentions } = await listMentions(workspace, mentionCreatedAt);
|
|
106
|
+
return {
|
|
107
|
+
content: [
|
|
108
|
+
{
|
|
109
|
+
type: "text",
|
|
110
|
+
text: JSON.stringify({
|
|
111
|
+
mentions: mentions.map(toMentionPayload),
|
|
112
|
+
}),
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
});
|
|
117
|
+
server.registerTool("get_mention", {
|
|
118
|
+
description: "Get a single mention by id. Use this to refresh base_hash before retrying " +
|
|
119
|
+
"resolve_mention after a conflict.",
|
|
120
|
+
inputSchema: {
|
|
121
|
+
mention_id: z.string().min(1),
|
|
122
|
+
},
|
|
123
|
+
}, async ({ mention_id }) => {
|
|
124
|
+
const m = await findMention(workspace, mention_id, mentionCreatedAt);
|
|
125
|
+
if (!m)
|
|
126
|
+
return errorResult(`get_mention: no open mention with id ${mention_id}`);
|
|
127
|
+
return { content: [{ type: "text", text: JSON.stringify(toMentionPayload(m)) }] };
|
|
128
|
+
});
|
|
129
|
+
server.registerTool("mark_in_progress", {
|
|
130
|
+
description: "Claim a mention exclusively for processing. First caller wins; subsequent callers " +
|
|
131
|
+
"receive a conflict error including the winning client's name. Release via " +
|
|
132
|
+
"resolve_mention or report_error.",
|
|
133
|
+
inputSchema: {
|
|
134
|
+
mention_id: z.string().min(1),
|
|
135
|
+
},
|
|
136
|
+
}, async ({ mention_id }) => {
|
|
137
|
+
const m = await findMention(workspace, mention_id, mentionCreatedAt);
|
|
138
|
+
if (!m)
|
|
139
|
+
return errorResult(`mark_in_progress: no open mention with id ${mention_id}`);
|
|
140
|
+
const agentName = clientNameOf(server) ?? "agent";
|
|
141
|
+
const claim = mentionStore.claim(mention_id, agentName);
|
|
142
|
+
if (!claim.ok) {
|
|
143
|
+
return errorResult(`mark_in_progress conflict: mention ${mention_id} is already claimed by ${claim.heldBy}`);
|
|
144
|
+
}
|
|
145
|
+
mentionStore.recordEvent({
|
|
146
|
+
kind: "mention-claimed",
|
|
147
|
+
mention_id,
|
|
148
|
+
file: m.file,
|
|
149
|
+
agent: agentName,
|
|
150
|
+
at: new Date().toISOString(),
|
|
151
|
+
});
|
|
152
|
+
return {
|
|
153
|
+
content: [
|
|
154
|
+
{
|
|
155
|
+
type: "text",
|
|
156
|
+
text: JSON.stringify({ ok: true, mention_id, agent: agentName }),
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
const resolveActionSchema = z
|
|
162
|
+
.union([
|
|
163
|
+
z.object({
|
|
164
|
+
type: z.literal("replace"),
|
|
165
|
+
content: z.string(),
|
|
166
|
+
}),
|
|
167
|
+
z.object({
|
|
168
|
+
type: z.literal("annotation"),
|
|
169
|
+
annotation_type: z.enum(["note", "suggestion"]),
|
|
170
|
+
text: z.string(),
|
|
171
|
+
}),
|
|
172
|
+
])
|
|
173
|
+
.describe("{ type: 'replace', content }: overwrite the target region inline (markers go too). " +
|
|
174
|
+
"{ type: 'annotation', annotation_type: 'note', text }: leave a note next to the target. " +
|
|
175
|
+
"annotation_type: 'suggestion' is rejected here; the agent's path to proposing prose " +
|
|
176
|
+
"edits is add_annotation(type='suggestion'), which the human accepts or rejects.");
|
|
177
|
+
server.registerTool("resolve_mention", {
|
|
178
|
+
description: "Complete a mention. action is either { type: 'replace', content } or { type: 'annotation', " +
|
|
179
|
+
"annotation_type: 'note', text }. base_hash must echo the value returned by get_mention; " +
|
|
180
|
+
"on mismatch the call is refused with a conflict, the agent should call get_mention to " +
|
|
181
|
+
"refresh and retry. Verb policy: action verbs allow replace; query verbs (and any unknown " +
|
|
182
|
+
"verb) allow only annotation. The marker disappears on resolution (ADR-0002).",
|
|
183
|
+
inputSchema: {
|
|
184
|
+
mention_id: z.string().min(1),
|
|
185
|
+
base_hash: z.string().min(1),
|
|
186
|
+
action: resolveActionSchema,
|
|
187
|
+
},
|
|
188
|
+
}, async ({ mention_id, base_hash, action }) => {
|
|
189
|
+
// Slice 5: the suggestion path lives on add_annotation. Refuse it here
|
|
190
|
+
// so the agent can't smuggle a prose-replacement proposal through the
|
|
191
|
+
// mention lifecycle (which would skip human accept/reject).
|
|
192
|
+
if (action.type === "annotation" && action.annotation_type === "suggestion") {
|
|
193
|
+
return errorResult("resolve_mention: action.annotation_type='suggestion' is not allowed. " +
|
|
194
|
+
"To propose a prose edit, call add_annotation(type='suggestion'); the human " +
|
|
195
|
+
"accepts or rejects via the editor's side card.");
|
|
196
|
+
}
|
|
197
|
+
const m = await findMention(workspace, mention_id, mentionCreatedAt);
|
|
198
|
+
if (!m)
|
|
199
|
+
return errorResult(`resolve_mention: no open mention with id ${mention_id}`);
|
|
200
|
+
const verbDef = verbCatalog.human.get(m.verb);
|
|
201
|
+
const verbMode = verbDef ? verbDef.mode : "unknown";
|
|
202
|
+
const agentName = clientNameOf(server) ?? "agent";
|
|
203
|
+
const annotationAuthor = agentName;
|
|
204
|
+
const result = await resolveMention(workspace, mention_id, action, base_hash, {
|
|
205
|
+
verbMode,
|
|
206
|
+
annotationAuthor,
|
|
207
|
+
firstSeenAt: mentionCreatedAt,
|
|
208
|
+
});
|
|
209
|
+
if (result.kind === "not-found") {
|
|
210
|
+
return errorResult(`resolve_mention: no open mention with id ${mention_id}`);
|
|
211
|
+
}
|
|
212
|
+
if (result.kind === "orphaned") {
|
|
213
|
+
return errorResult(`resolve_mention: mention ${mention_id} is orphaned (target region is empty). ` +
|
|
214
|
+
`The user must cancel or restore it.`);
|
|
215
|
+
}
|
|
216
|
+
if (result.kind === "conflict") {
|
|
217
|
+
return errorResult(`resolve_mention conflict: base_hash is stale. Refresh via get_mention (current base_hash=${result.current_base_hash}).`);
|
|
218
|
+
}
|
|
219
|
+
if (result.kind === "verb-not-replaceable") {
|
|
220
|
+
return errorResult(`resolve_mention: verb '${result.verb}' is unknown or annotation-only; this mention ` +
|
|
221
|
+
`accepts action { type: 'annotation', annotation_type: 'note', text } only.`);
|
|
222
|
+
}
|
|
223
|
+
// Mention disappeared on resolve; drop the claim and emit an event.
|
|
224
|
+
mentionStore.release(mention_id);
|
|
225
|
+
mentionCreatedAt.delete(mention_id);
|
|
226
|
+
mentionStore.recordEvent({
|
|
227
|
+
kind: "mention-resolved",
|
|
228
|
+
mention_id,
|
|
229
|
+
file: m.file,
|
|
230
|
+
agent: agentName,
|
|
231
|
+
resolution: action.type === "replace" ? "replace" : "annotation",
|
|
232
|
+
at: new Date().toISOString(),
|
|
233
|
+
});
|
|
234
|
+
return {
|
|
235
|
+
content: [
|
|
236
|
+
{
|
|
237
|
+
type: "text",
|
|
238
|
+
text: JSON.stringify({
|
|
239
|
+
ok: true,
|
|
240
|
+
mention_id,
|
|
241
|
+
file: m.file,
|
|
242
|
+
resolution: action.type === "replace" ? "replace" : "annotation",
|
|
243
|
+
}),
|
|
244
|
+
},
|
|
245
|
+
],
|
|
246
|
+
};
|
|
247
|
+
});
|
|
248
|
+
server.registerTool("report_error", {
|
|
249
|
+
description: "Release a claimed mention back to open so the human can retry or cancel. The marker " +
|
|
250
|
+
"stays in place on disk; only the in-progress state is cleared. Use when you cannot " +
|
|
251
|
+
"complete the work.",
|
|
252
|
+
inputSchema: {
|
|
253
|
+
mention_id: z.string().min(1),
|
|
254
|
+
reason: z.string().min(1),
|
|
255
|
+
},
|
|
256
|
+
}, async ({ mention_id, reason }) => {
|
|
257
|
+
const released = mentionStore.release(mention_id);
|
|
258
|
+
if (!released) {
|
|
259
|
+
return errorResult(`report_error: mention ${mention_id} is not claimed (nothing to release).`);
|
|
260
|
+
}
|
|
261
|
+
const m = await findMention(workspace, mention_id, mentionCreatedAt);
|
|
262
|
+
mentionStore.recordEvent({
|
|
263
|
+
kind: "mention-released",
|
|
264
|
+
mention_id,
|
|
265
|
+
file: m?.file ?? "",
|
|
266
|
+
agent: released.agentName,
|
|
267
|
+
reason,
|
|
268
|
+
at: new Date().toISOString(),
|
|
269
|
+
});
|
|
270
|
+
return {
|
|
271
|
+
content: [
|
|
272
|
+
{
|
|
273
|
+
type: "text",
|
|
274
|
+
text: JSON.stringify({ ok: true, mention_id, reason }),
|
|
275
|
+
},
|
|
276
|
+
],
|
|
277
|
+
};
|
|
278
|
+
});
|
|
279
|
+
// -------------------------------------------------------------------------
|
|
280
|
+
// Annotation tools (slice 5)
|
|
281
|
+
// -------------------------------------------------------------------------
|
|
282
|
+
const targetAnchorSchema = z
|
|
283
|
+
.object({ start: z.number().int().min(0), end: z.number().int().min(0) })
|
|
284
|
+
.describe("Character offsets in the file marking the target region.");
|
|
285
|
+
server.registerTool("list_annotations", {
|
|
286
|
+
description: "List every annotation (note + suggestion) across the workspace, or in one file " +
|
|
287
|
+
"when `path` is given. Each entry has id, file, type, author, target_content, " +
|
|
288
|
+
"content, target_anchor (start/end char offsets), and created_at.",
|
|
289
|
+
inputSchema: {
|
|
290
|
+
path: z.string().min(1).optional(),
|
|
291
|
+
},
|
|
292
|
+
}, async ({ path }) => {
|
|
293
|
+
const list = await listAnnotations(workspace, annotationCreatedAt, { path });
|
|
294
|
+
return {
|
|
295
|
+
content: [
|
|
296
|
+
{
|
|
297
|
+
type: "text",
|
|
298
|
+
text: JSON.stringify({
|
|
299
|
+
annotations: list.map((a) => ({
|
|
300
|
+
id: a.id,
|
|
301
|
+
file: a.file,
|
|
302
|
+
type: a.type,
|
|
303
|
+
author: a.author,
|
|
304
|
+
target_content: a.targetContent,
|
|
305
|
+
content: a.content,
|
|
306
|
+
target_anchor: { start: a.targetStart, end: a.targetEnd },
|
|
307
|
+
created_at: a.created_at,
|
|
308
|
+
})),
|
|
309
|
+
}),
|
|
310
|
+
},
|
|
311
|
+
],
|
|
312
|
+
};
|
|
313
|
+
});
|
|
314
|
+
server.registerTool("add_annotation", {
|
|
315
|
+
description: "Create a new annotation. type='note' is pure information; type='suggestion' proposes " +
|
|
316
|
+
"replacement text the human accepts or rejects via the editor side card. author is set " +
|
|
317
|
+
"from the connecting MCP client's identity (clientInfo.name with collision suffix when " +
|
|
318
|
+
"multiple clients share a name).",
|
|
319
|
+
inputSchema: {
|
|
320
|
+
path: z.string().min(1),
|
|
321
|
+
target_anchor: targetAnchorSchema,
|
|
322
|
+
type: z.enum(["note", "suggestion"]),
|
|
323
|
+
content: z.string(),
|
|
324
|
+
},
|
|
325
|
+
}, async ({ path, target_anchor, type, content }) => {
|
|
326
|
+
try {
|
|
327
|
+
const author = clientNameOf(server) ?? "agent";
|
|
328
|
+
const result = await addAnnotation(workspace, {
|
|
329
|
+
path,
|
|
330
|
+
target_anchor,
|
|
331
|
+
type,
|
|
332
|
+
content,
|
|
333
|
+
author,
|
|
334
|
+
});
|
|
335
|
+
annotationCreatedAt.set(result.annotation.id, new Date().toISOString());
|
|
336
|
+
mentionStore.recordEvent({
|
|
337
|
+
kind: "annotation-created",
|
|
338
|
+
annotation_id: result.annotation.id,
|
|
339
|
+
file: path,
|
|
340
|
+
annotation_type: type,
|
|
341
|
+
author,
|
|
342
|
+
at: new Date().toISOString(),
|
|
343
|
+
});
|
|
344
|
+
return {
|
|
345
|
+
content: [
|
|
346
|
+
{
|
|
347
|
+
type: "text",
|
|
348
|
+
text: JSON.stringify({
|
|
349
|
+
id: result.annotation.id,
|
|
350
|
+
file: result.annotation.file,
|
|
351
|
+
type: result.annotation.type,
|
|
352
|
+
author: result.annotation.author,
|
|
353
|
+
target_anchor: result.annotation.target_anchor,
|
|
354
|
+
}),
|
|
355
|
+
},
|
|
356
|
+
],
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
catch (e) {
|
|
360
|
+
return errorResult(`add_annotation failed: ${e.message}`);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
server.registerTool("update_annotation", {
|
|
364
|
+
description: "Replace the content of an annotation. The agent can only update annotations whose " +
|
|
365
|
+
"author matches its own client identity.",
|
|
366
|
+
inputSchema: {
|
|
367
|
+
id: z.string().min(1),
|
|
368
|
+
content: z.string(),
|
|
369
|
+
},
|
|
370
|
+
}, async ({ id, content }) => {
|
|
371
|
+
const author = clientNameOf(server) ?? "agent";
|
|
372
|
+
const result = await updateAnnotation(workspace, id, content, {
|
|
373
|
+
requireAuthor: author,
|
|
374
|
+
firstSeenAt: annotationCreatedAt,
|
|
375
|
+
});
|
|
376
|
+
if (result.kind === "not-found") {
|
|
377
|
+
return errorResult(`update_annotation: no annotation with id ${id}`);
|
|
378
|
+
}
|
|
379
|
+
if (result.kind === "forbidden") {
|
|
380
|
+
return errorResult(`update_annotation: annotation ${id} was authored by ${result.author}; ` +
|
|
381
|
+
`you can only update annotations you authored (current identity: ${author}).`);
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, id, file: result.file }) }],
|
|
385
|
+
};
|
|
386
|
+
});
|
|
387
|
+
server.registerTool("remove_annotation", {
|
|
388
|
+
description: "Remove an annotation. Strips the begin/end pair; the target prose stays. The agent " +
|
|
389
|
+
"can only remove annotations whose author matches its own client identity.",
|
|
390
|
+
inputSchema: {
|
|
391
|
+
id: z.string().min(1),
|
|
392
|
+
},
|
|
393
|
+
}, async ({ id }) => {
|
|
394
|
+
const author = clientNameOf(server) ?? "agent";
|
|
395
|
+
const result = await removeAnnotation(workspace, id, {
|
|
396
|
+
requireAuthor: author,
|
|
397
|
+
firstSeenAt: annotationCreatedAt,
|
|
398
|
+
});
|
|
399
|
+
if (result.kind === "not-found") {
|
|
400
|
+
return errorResult(`remove_annotation: no annotation with id ${id}`);
|
|
401
|
+
}
|
|
402
|
+
if (result.kind === "forbidden") {
|
|
403
|
+
return errorResult(`remove_annotation: annotation ${id} was authored by ${result.author}; ` +
|
|
404
|
+
`you can only remove annotations you authored (current identity: ${author}).`);
|
|
405
|
+
}
|
|
406
|
+
mentionStore.recordEvent({
|
|
407
|
+
kind: "annotation-removed",
|
|
408
|
+
annotation_id: id,
|
|
409
|
+
file: result.file,
|
|
410
|
+
annotation_type: result.type,
|
|
411
|
+
author,
|
|
412
|
+
at: new Date().toISOString(),
|
|
413
|
+
});
|
|
414
|
+
return {
|
|
415
|
+
content: [{ type: "text", text: JSON.stringify({ ok: true, id, file: result.file }) }],
|
|
416
|
+
};
|
|
417
|
+
});
|
|
418
|
+
server.registerTool("list_recent_changes", {
|
|
419
|
+
description: "Return recent workspace activity: human file edits, mention create/claim/resolve/release " +
|
|
420
|
+
"events. Pass `since` (last event id you've seen) to fetch only newer events. Default " +
|
|
421
|
+
"returns the last 50.",
|
|
422
|
+
inputSchema: {
|
|
423
|
+
since: z.number().int().optional(),
|
|
424
|
+
},
|
|
425
|
+
}, async ({ since }) => {
|
|
426
|
+
const events = mentionStore.recentEvents(since);
|
|
427
|
+
return {
|
|
428
|
+
content: [{ type: "text", text: JSON.stringify({ events }) }],
|
|
429
|
+
};
|
|
430
|
+
});
|
|
431
|
+
return server;
|
|
432
|
+
}
|
|
433
|
+
function toMentionPayload(m) {
|
|
434
|
+
return {
|
|
435
|
+
id: m.id,
|
|
436
|
+
file: m.file,
|
|
437
|
+
origin: m.origin,
|
|
438
|
+
verb: m.verb,
|
|
439
|
+
author: m.author,
|
|
440
|
+
instruction: m.instruction,
|
|
441
|
+
target_content: m.targetContent,
|
|
442
|
+
base_hash: m.baseHash,
|
|
443
|
+
orphan: m.orphan,
|
|
444
|
+
created_at: m.created_at,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
function clientNameOf(server) {
|
|
448
|
+
// McpServer exposes the underlying low-level Server which carries the
|
|
449
|
+
// connected client's clientInfo after `initialize`. Different SDK versions
|
|
450
|
+
// expose this in slightly different ways; try the common shapes.
|
|
451
|
+
// biome-ignore lint/suspicious/noExplicitAny: SDK internals shape
|
|
452
|
+
const s = server;
|
|
453
|
+
const inner = s.server ?? s;
|
|
454
|
+
const ci = inner?.getClientVersion?.() ??
|
|
455
|
+
inner?._clientVersion ??
|
|
456
|
+
inner?.clientInfo ??
|
|
457
|
+
inner?._serverInfo ??
|
|
458
|
+
null;
|
|
459
|
+
if (ci && typeof ci.name === "string" && ci.name.length > 0)
|
|
460
|
+
return ci.name;
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
function errorResult(message) {
|
|
464
|
+
return {
|
|
465
|
+
isError: true,
|
|
466
|
+
content: [{ type: "text", text: message }],
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/server/mcp-server.ts"],"names":[],"mappings":"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"}
|