diffing 0.2.1 → 0.3.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/README.md +158 -1
- package/dist/{cli-agent-ZAkixf4c.mjs → cli-agent-KxNAFIPf.mjs} +6 -2
- package/dist/cli-gh-CDGSpndZ.mjs +147 -0
- package/dist/cli.mjs +1064 -44
- package/dist/client/assets/{angular-html-DsssUIMZ.js → angular-html-DbbrJavS.js} +1 -1
- package/dist/client/assets/{angular-ts-dTg-sJ77.js → angular-ts-tCrxb1ht.js} +1 -1
- package/dist/client/assets/{apl-C1yUKbqz.js → apl-DawII0w7.js} +1 -1
- package/dist/client/assets/arc-DIRV7ZXr.js +1 -0
- package/dist/client/assets/architecture-7EHR7CIX-BM5HxebS.js +1 -0
- package/dist/client/assets/architectureDiagram-3BPJPVTR-3IoH78OV.js +36 -0
- package/dist/client/assets/array-CkF66D10.js +1 -0
- package/dist/client/assets/{astro-BI07ha2y.js → astro-DIyGTFXc.js} +1 -1
- package/dist/client/assets/{blade-DkzUGffS.js → blade-CuF4Z1mP.js} +1 -1
- package/dist/client/assets/blockDiagram-GPEHLZMM-CFxPndC0.js +132 -0
- package/dist/client/assets/{bsl-Dx5tFn3i.js → bsl-BrHd4RA2.js} +1 -1
- package/dist/client/assets/{c-KkuqqOvW.js → c-DUrjo9T5.js} +1 -1
- package/dist/client/assets/c4Diagram-AAUBKEIU-CGMBnkiv.js +10 -0
- package/dist/client/assets/{cairo-wCCQTdA9.js → cairo-BDZ6TRZS.js} +1 -1
- package/dist/client/assets/channel-D5AdjEWX.js +1 -0
- package/dist/client/assets/chunk-2J33WTMH-CJMBLaXy.js +1 -0
- package/dist/client/assets/chunk-3OPIFGDE-C9HQWVLl.js +62 -0
- package/dist/client/assets/chunk-4BX2VUAB-Qqg72GQd.js +1 -0
- package/dist/client/assets/chunk-4EGX6M5U-C70lfA2p.js +1 -0
- package/dist/client/assets/chunk-55IACEB6-DZF8brTR.js +1 -0
- package/dist/client/assets/chunk-5DO6E6H7-PprNUwlI.js +1 -0
- package/dist/client/assets/chunk-5ZQYHXKU-BflVFV5z.js +2 -0
- package/dist/client/assets/chunk-727SXJPM-COn6BRLY.js +206 -0
- package/dist/client/assets/chunk-AQP2D5EJ-CNOjODUR.js +231 -0
- package/dist/client/assets/chunk-BR22UD5L-D8XCYMy9.js +1 -0
- package/dist/client/assets/chunk-BSJP7CBP-PQX4ASCI.js +1 -0
- package/dist/client/assets/chunk-CSCIHK7Q-BfmUvL-L.js +124 -0
- package/dist/client/assets/chunk-FHYWG6QK-CcHPrHH1.js +1 -0
- package/dist/client/assets/chunk-FMBD7UC4-DorfwLnQ.js +15 -0
- package/dist/client/assets/chunk-KSCS5N6A-CXY93mId.js +10 -0
- package/dist/client/assets/chunk-L5ZTLDWV-BjMrSVmH.js +1 -0
- package/dist/client/assets/chunk-LZXEDZCA-q8jj6Nyb.js +2 -0
- package/dist/client/assets/chunk-MPE355IW-Bf9yHfDS.js +1 -0
- package/dist/client/assets/chunk-MZUSXYTE-CnUIUKI4.js +1 -0
- package/dist/client/assets/chunk-N66VUXT2-ahAf9GvV.js +1 -0
- package/dist/client/assets/chunk-ND2GUHAM-BRRQbYHl.js +1 -0
- package/dist/client/assets/chunk-NNHCCRGN-DHF3V75i.js +159 -0
- package/dist/client/assets/chunk-NZK2D7GU-Czt1qHrO.js +1 -0
- package/dist/client/assets/chunk-O5CBEL6O-DEopURak.js +70 -0
- package/dist/client/assets/chunk-PUPMXCY4-D0KKIhut.js +1 -0
- package/dist/client/assets/chunk-QZHKN3VN-BE917fn9.js +1 -0
- package/dist/client/assets/chunk-UIBZB4QT-TYsZ_c8u.js +1 -0
- package/dist/client/assets/chunk-WCWK7LTN-Dj8SfnMU.js +1 -0
- package/dist/client/assets/chunk-WU5MYG2G-DdoWnPla.js +1 -0
- package/dist/client/assets/chunk-XPW4576I-DocCoKUT.js +32 -0
- package/dist/client/assets/classDiagram-4FO5ZUOK-CxjhKO7s.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CSScAAQ4.js +1 -0
- package/dist/client/assets/{cobol-DRh7-jLi.js → cobol-BylylR2x.js} +1 -1
- package/dist/client/assets/{coffee-wR_ZAh9a.js → coffee-DCKfk8xx.js} +1 -1
- package/dist/client/assets/cose-bilkent-S5V4N54A-Cm0BD5CS.js +1 -0
- package/dist/client/assets/{cpp-OD_qyywn.js → cpp-CfKCIrGK.js} +1 -1
- package/dist/client/assets/{crystal-E4ahAddE.js → crystal-v-9RIu3l.js} +1 -1
- package/dist/client/assets/{css-2NgE_uxz.js → css-XjlXeGmZ.js} +1 -1
- package/dist/client/assets/cytoscape.esm-B7MQoI9k.js +321 -0
- package/dist/client/assets/dagre-BM42HDAG-kqgFUaF1.js +4 -0
- package/dist/client/assets/dagre-DAhKikc0.js +1 -0
- package/dist/client/assets/defaultLocale-B_TxGd0k.js +1 -0
- package/dist/client/assets/diagram-2AECGRRQ-B3hBvGUc.js +43 -0
- package/dist/client/assets/diagram-5GNKFQAL-r8zU8C-Y.js +10 -0
- package/dist/client/assets/diagram-KO2AKTUF-CDWD5zkZ.js +3 -0
- package/dist/client/assets/diagram-LMA3HP47-CRRfS6RD.js +24 -0
- package/dist/client/assets/diagram-OG6HWLK6-ChBS6E-K.js +24 -0
- package/dist/client/assets/dist-DUTeKbN7.js +1 -0
- package/dist/client/assets/{edge-8mbscxxD.js → edge-Cwh953i8.js} +1 -1
- package/dist/client/assets/{elixir-CJv1b3Q6.js → elixir-C4MgLzTj.js} +1 -1
- package/dist/client/assets/{elm-DUPzqZ9H.js → elm-CFBu8r7i.js} +1 -1
- package/dist/client/assets/erDiagram-TEJ5UH35-_03Fb9RH.js +85 -0
- package/dist/client/assets/{erb-ssvEF26z.js → erb-CrCna7R1.js} +1 -1
- package/dist/client/assets/{erlang-CtK0kQ6z.js → erlang-cuhwpmsu.js} +1 -1
- package/dist/client/assets/eventmodeling-FCH6USID-hlXE2E34.js +1 -0
- package/dist/client/assets/flowDiagram-I6XJVG4X-D9pSaH_8.js +162 -0
- package/dist/client/assets/{fortran-fixed-form-DBM4e0_k.js → fortran-fixed-form-DWr0EnJn.js} +1 -1
- package/dist/client/assets/{fsharp-CmzzGQLe.js → fsharp-CQ5iYSPA.js} +1 -1
- package/dist/client/assets/ganttDiagram-6RSMTGT7-DKBfXY9D.js +292 -0
- package/dist/client/assets/{gdresource-B_wbPqHd.js → gdresource-CN-lsNu5.js} +1 -1
- package/dist/client/assets/{git-commit-1z4D6NzL.js → git-commit-6e79eN7Q.js} +1 -1
- package/dist/client/assets/{git-rebase-DiWIK1Oa.js → git-rebase-CExLk2dD.js} +1 -1
- package/dist/client/assets/gitGraph-WXDBUCRP-D_3ZhTam.js +1 -0
- package/dist/client/assets/gitGraphDiagram-PVQCEYII-BPQ2kpJA.js +106 -0
- package/dist/client/assets/{glimmer-js-DrHg6AuA.js → glimmer-js-wjBSKaMu.js} +1 -1
- package/dist/client/assets/{glimmer-ts-wQSGOa8A.js → glimmer-ts-CyjMXDgZ.js} +1 -1
- package/dist/client/assets/{glsl-OY27QGY0.js → glsl-CWOoN8or.js} +1 -1
- package/dist/client/assets/graphlib-DBdw4opr.js +1 -0
- package/dist/client/assets/{graphql-CSWSqe6f.js → graphql-DI5CB58U.js} +1 -1
- package/dist/client/assets/{hack-Bi1v624Q.js → hack-Ct_Cm7Pr.js} +1 -1
- package/dist/client/assets/{haml-CX94zV9m.js → haml-DzAjli8d.js} +1 -1
- package/dist/client/assets/{handlebars-C1j6wnjG.js → handlebars-BfJB0RYx.js} +1 -1
- package/dist/client/assets/{html-BcAjMlB7.js → html-CK8auhK8.js} +1 -1
- package/dist/client/assets/{html-derivative-DcEpOzdx.js → html-derivative-B7VntYnF.js} +1 -1
- package/dist/client/assets/{http-BBxxSc6S.js → http-_Zy71Sv3.js} +1 -1
- package/dist/client/assets/{hurl-CpKRNTz4.js → hurl-VbL4I95z.js} +1 -1
- package/dist/client/assets/{hxml-DC4KwKt2.js → hxml-nwJci6H5.js} +1 -1
- package/dist/client/assets/{index-CoZyJYkw.css → index-C3p7VKOX.css} +1 -1
- package/dist/client/assets/index-Dv9jPmOc.js +3921 -0
- package/dist/client/assets/info-J43DQDTF-CAllC7mK.js +1 -0
- package/dist/client/assets/infoDiagram-5YYISTIA-B5RN-4Ke.js +2 -0
- package/dist/client/assets/init-Ce66tIvf.js +1 -0
- package/dist/client/assets/ishikawaDiagram-YF4QCWOH-DpbSX3Zy.js +70 -0
- package/dist/client/assets/{java-CFUlLvAA.js → java-0CC2DnK9.js} +1 -1
- package/dist/client/assets/{javascript-C-HnT3sE.js → javascript-DKSTP7rz.js} +1 -1
- package/dist/client/assets/{jinja-CPU8RwNP.js → jinja-DoGBHNJ6.js} +1 -1
- package/dist/client/assets/{jison-CW0TBQOs.js → jison-Bnl3lPA2.js} +1 -1
- package/dist/client/assets/journeyDiagram-JHISSGLW-B_X4_qPO.js +139 -0
- package/dist/client/assets/{json-qUjlNuEJ.js → json-BQ3Ddj6g.js} +1 -1
- package/dist/client/assets/{jsx-KWeo60kf.js → jsx-C_aFDuFZ.js} +1 -1
- package/dist/client/assets/{julia-CnJB8y2e.js → julia-nIjp5yMR.js} +1 -1
- package/dist/client/assets/{just-Do22d9PP.js → just-zc4yJ46n.js} +1 -1
- package/dist/client/assets/kanban-definition-UN3LZRKU-BSs4C5DW.js +89 -0
- package/dist/client/assets/katex-eRFNlMh0.js +257 -0
- package/dist/client/assets/{latex-CCPgzvKn.js → latex-BszBC80j.js} +1 -1
- package/dist/client/assets/line-C9HWVwPi.js +1 -0
- package/dist/client/assets/linear-DatJfpKY.js +1 -0
- package/dist/client/assets/{liquid-B9btdZoI.js → liquid-DglQpTge.js} +1 -1
- package/dist/client/assets/{lua-IFRifurW.js → lua-BcbliFeR.js} +1 -1
- package/dist/client/assets/{marko-CCaVBFq1.js → marko-BPm4M8j-.js} +1 -1
- package/dist/client/assets/{mdc-BtbnOLUc.js → mdc-BNUj07UF.js} +1 -1
- package/dist/client/assets/mermaid-parser.core-BVEKlqQr.js +4 -0
- package/dist/client/assets/mermaid.core-DVis21V_.js +9 -0
- package/dist/client/assets/mindmap-definition-RKZ34NQL-Cuo7KewF.js +96 -0
- package/dist/client/assets/{nextflow-CApkvBGW.js → nextflow-DSfydIxt.js} +1 -1
- package/dist/client/assets/{nginx-BkbFZHVt.js → nginx-CSSJwkd6.js} +1 -1
- package/dist/client/assets/{nim-2uCd5j65.js → nim-nQAskwTR.js} +1 -1
- package/dist/client/assets/ordinal-5ziJS8mo.js +1 -0
- package/dist/client/assets/packet-YPE3B663-Dy58IAiO.js +1 -0
- package/dist/client/assets/path-g3G46IZB.js +1 -0
- package/dist/client/assets/{perl-C4ixqSNT.js → perl-CtH8xYH6.js} +1 -1
- package/dist/client/assets/{php-DJ8WOtcI.js → php-Dcc3T2PH.js} +1 -1
- package/dist/client/assets/pie-LRSECV5Y-FXFFfdz2.js +1 -0
- package/dist/client/assets/pieDiagram-4H26LBE5-BfpvCRmo.js +30 -0
- package/dist/client/assets/{pug-BOaafhT5.js → pug-BCLaymlV.js} +1 -1
- package/dist/client/assets/{qml-CURE-1y4.js → qml-BpKydcOi.js} +1 -1
- package/dist/client/assets/quadrantDiagram-W4KKPZXB-CJY6un0-.js +7 -0
- package/dist/client/assets/{r-CPWmgzo3.js → r-BzCB9dpd.js} +1 -1
- package/dist/client/assets/radar-GUYGQ44K-BKTzSQ68.js +1 -0
- package/dist/client/assets/{razor-DH83VP_d.js → razor-BWmujqiQ.js} +1 -1
- package/dist/client/assets/{regexp-BXVWi-t_.js → regexp-urCI3YiZ.js} +1 -1
- package/dist/client/assets/requirementDiagram-4Y6WPE33-DIHWguS0.js +84 -0
- package/dist/client/assets/rough.esm-BBrzuQ0N.js +1 -0
- package/dist/client/assets/{rst-Bbxxs6E2.js → rst-YTDC9H6u.js} +1 -1
- package/dist/client/assets/{ruby-C-TuWES4.js → ruby-v1IXQAFZ.js} +1 -1
- package/dist/client/assets/sankeyDiagram-5OEKKPKP-DJRPEO_F.js +40 -0
- package/dist/client/assets/{sas-njzNYNOq.js → sas-KDUG3BSk.js} +1 -1
- package/dist/client/assets/{scss-D2i6rHB8.js → scss-pLIGFpjD.js} +1 -1
- package/dist/client/assets/sequenceDiagram-3UESZ5HK-DX0jVCOU.js +162 -0
- package/dist/client/assets/{shaderlab-DXAhMdPo.js → shaderlab-CbbQwRPF.js} +1 -1
- package/dist/client/assets/{shellscript-D6Bxi40C.js → shellscript-B5ZTyEsK.js} +1 -1
- package/dist/client/assets/{shellsession-Defxq-I6.js → shellsession-DVK3bw4p.js} +1 -1
- package/dist/client/assets/{soy-D0GKXrtT.js → soy-BXgyj2-T.js} +1 -1
- package/dist/client/assets/{sparql-BdcL8cbr.js → sparql-DEoxFJ5d.js} +1 -1
- package/dist/client/assets/{sql-BRW_ADkU.js → sql-G2vZCmw6.js} +1 -1
- package/dist/client/assets/src-D9zkqEEX.js +1 -0
- package/dist/client/assets/{stata-w7w59F48.js → stata-C4mEnygx.js} +1 -1
- package/dist/client/assets/stateDiagram-AJRCARHV-AMtMxKgQ.js +1 -0
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-C89CM-_4.js +1 -0
- package/dist/client/assets/{surrealql-O-lLuqz7.js → surrealql-Bf8gsTcP.js} +1 -1
- package/dist/client/assets/{svelte-DN3DR5-t.js → svelte-C1oIyl9t.js} +1 -1
- package/dist/client/assets/{templ-CJ2JFoia.js → templ-PJcWUuTF.js} +1 -1
- package/dist/client/assets/{tex-CpWrf5g9.js → tex-B7Fnujsi.js} +1 -1
- package/dist/client/assets/timeline-definition-PNZ67QCA-BZJSqcAg.js +120 -0
- package/dist/client/assets/treeView-BLDUP644-DtjHwb6x.js +1 -0
- package/dist/client/assets/treemap-LRROVOQU-GqTXzMFU.js +1 -0
- package/dist/client/assets/{ts-tags-CZ6Af6Pe.js → ts-tags-CAAsFnUt.js} +1 -1
- package/dist/client/assets/{tsx-gIUSpRih.js → tsx-DAKyTsWW.js} +1 -1
- package/dist/client/assets/{twig-DwZINhmw.js → twig-Bd4dieZF.js} +1 -1
- package/dist/client/assets/{typescript-Dj2aMECR.js → typescript-8myByDGd.js} +1 -1
- package/dist/client/assets/vennDiagram-CIIHVFJN-CMjBZNs2.js +34 -0
- package/dist/client/assets/{vue-B5K0aWrP.js → vue-fBA2B-QU.js} +1 -1
- package/dist/client/assets/{vue-html-DKGgrypd.js → vue-html-DEZECpsR.js} +1 -1
- package/dist/client/assets/{vue-vine-B5iDYTCh.js → vue-vine-B_gG939R.js} +1 -1
- package/dist/client/assets/wardley-L42UT6IY-pROVAAhW.js +1 -0
- package/dist/client/assets/wardleyDiagram-YWT4CUSO-qeHmPLyL.js +78 -0
- package/dist/client/assets/{xml-CbTzxfc-.js → xml-DbXNss3s.js} +1 -1
- package/dist/client/assets/{xsl-Dj-Be6nx.js → xsl-B7_dgqqc.js} +1 -1
- package/dist/client/assets/xychartDiagram-2RQKCTM6-NN2Et7YL.js +7 -0
- package/dist/client/assets/{yaml-rTK8uEjh.js → yaml-DSyIApdJ.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/{mcp-CE77qfjx.mjs → mcp-BWeWR4yd.mjs} +2 -1
- package/dist/plan-format-f62JWFI-.mjs +117 -0
- package/dist/{server-lock-DpCrvL-Z.mjs → server-lock-Dj9fG9md.mjs} +246 -122
- package/package.json +26 -14
- package/dist/cli-agent-BLPX3oOP.mjs +0 -443
- package/dist/cli-agent-BNwY5lZE.mjs +0 -446
- package/dist/cli-agent-CbzXDSSF.mjs +0 -446
- package/dist/cli-agent-Cfuy9fLC.mjs +0 -179
- package/dist/cli-agent-CtNivjQW.mjs +0 -179
- package/dist/cli-agent-DZBvZoXZ.mjs +0 -179
- package/dist/cli-agent-DsqbS3n7.mjs +0 -443
- package/dist/cli-agent-Vbs-ePHv.mjs +0 -443
- package/dist/cli-agent-WzJPMH52.mjs +0 -174
- package/dist/cli-agent-uYUoCA4X.mjs +0 -179
- package/dist/client/assets/index-Bwv7BWUp.js +0 -3959
- package/dist/mcp-BQmH_By-.mjs +0 -119
- package/dist/mcp-CFeE13n-.mjs +0 -254
- package/dist/mcp-CLgzC8_a.mjs +0 -119
- package/dist/mcp-D9E2HQZ9.mjs +0 -119
- package/dist/mcp-DKlThflu.mjs +0 -253
- package/dist/mcp-LVbLV17O.mjs +0 -119
- package/dist/mcp-SGCrfYGo.mjs +0 -254
- package/dist/mcp-nMwTAut3.mjs +0 -119
- package/dist/server-lock-B4crz9-_.mjs +0 -708
- package/dist/server-lock-BbiF7u3F.mjs +0 -493
- package/dist/server-lock-Bx9ixiF6.mjs +0 -575
- package/dist/server-lock-CAdqFSfl.mjs +0 -691
- package/dist/server-lock-DIkImokU.mjs +0 -487
- package/dist/server-lock-DbxpfF3j.mjs +0 -575
- package/dist/update-check-DJuFE9w6.mjs +0 -128
- package/dist/update-check-DSC02MWQ.mjs +0 -129
- package/dist/client/assets/{abap-CkQ0tsz-.js → abap-cWYhO34H.js} +0 -0
- package/dist/client/assets/{actionscript-3-DHm0ZfF4.js → actionscript-3-B80ndJsD.js} +0 -0
- package/dist/client/assets/{ada-DK_ua92Z.js → ada-C0C0SoYB.js} +0 -0
- package/dist/client/assets/{andromeeda-D2ccw8v4.js → andromeeda-Ch2kWS7s.js} +0 -0
- package/dist/client/assets/{apache-DXtpFu7o.js → apache-DBwBm4bB.js} +0 -0
- package/dist/client/assets/{apex-DlnRRWpl.js → apex-FcV7UxQi.js} +0 -0
- package/dist/client/assets/{applescript-CShk62ad.js → applescript-hQs8VNpS.js} +0 -0
- package/dist/client/assets/{ara-CWN-FDkm.js → ara-BOadBOZg.js} +0 -0
- package/dist/client/assets/{asciidoc-Bg-PM9Vn.js → asciidoc-BsfqiBck.js} +0 -0
- package/dist/client/assets/{asm-DKOhR24S.js → asm-C2vUqzqz.js} +0 -0
- package/dist/client/assets/{aurora-x-DpaEirL8.js → aurora-x-BHLqzt7j.js} +0 -0
- package/dist/client/assets/{awk-3ibKHffv.js → awk-D4e-eeZT.js} +0 -0
- package/dist/client/assets/{ayu-dark-ursiSH5k.js → ayu-dark-DCotN_ZT.js} +0 -0
- package/dist/client/assets/{ayu-light-DMjlrKmx.js → ayu-light-CKB6o_im.js} +0 -0
- package/dist/client/assets/{ayu-mirage-DZEMb75h.js → ayu-mirage-B38lW-C5.js} +0 -0
- package/dist/client/assets/{ballerina-xx7VNGxs.js → ballerina-BzvFqbha.js} +0 -0
- package/dist/client/assets/{bat-DGYsZ5wR.js → bat-CFyw2ERn.js} +0 -0
- package/dist/client/assets/{beancount-D_ATR1UV.js → beancount-a6Gsu5WX.js} +0 -0
- package/dist/client/assets/{berry-BqYMORfH.js → berry-C2jyz4Ah.js} +0 -0
- package/dist/client/assets/{bibtex-CQTBDajW.js → bibtex-Dyet-B83.js} +0 -0
- package/dist/client/assets/{bicep-CfNtxPrK.js → bicep-CghvUIvy.js} +0 -0
- package/dist/client/assets/{bird2-C0dUPe3I.js → bird2-nHigvs-R.js} +0 -0
- package/dist/client/assets/{c3-BUwZ5e3k.js → c3-9ZrcmAmr.js} +0 -0
- package/dist/client/assets/{cadence-C3OKDYrr.js → cadence-BPDgYNWy.js} +0 -0
- package/dist/client/assets/{catppuccin-frappe-CMnRXVZP.js → catppuccin-frappe-BY_2ofjk.js} +0 -0
- package/dist/client/assets/{catppuccin-latte-CqhXSjCC.js → catppuccin-latte-D6GXPBmA.js} +0 -0
- package/dist/client/assets/{catppuccin-macchiato-B6kneE0C.js → catppuccin-macchiato-BuW8_cyo.js} +0 -0
- package/dist/client/assets/{catppuccin-mocha-CP8YZpvj.js → catppuccin-mocha-znex9DPe.js} +0 -0
- package/dist/client/assets/{clarity-Crxe8gSr.js → clarity-Cmao5KSK.js} +0 -0
- package/dist/client/assets/{clojure-BuzOUPMr.js → clojure-D2dPuTkk.js} +0 -0
- package/dist/client/assets/{cmake-CCpZLdLI.js → cmake-DaqQuj4A.js} +0 -0
- package/dist/client/assets/{codeowners-Bo1VYpHz.js → codeowners-B748jmvc.js} +0 -0
- package/dist/client/assets/{codeql-Db01hzHE.js → codeql-CXb_8gHR.js} +0 -0
- package/dist/client/assets/{common-lisp-CMlJIc6Y.js → common-lisp-UZn9nc_5.js} +0 -0
- package/dist/client/assets/{coq-BlzBYp3f.js → coq-DtO6yBIf.js} +0 -0
- package/dist/client/assets/{csharp-kfNshAa7.js → csharp-C3YlYcLV.js} +0 -0
- package/dist/client/assets/{csv-Dr8ri5Nd.js → csv-BBwiVr0X.js} +0 -0
- package/dist/client/assets/{cue-jXfhyOwY.js → cue-ScBFXY5f.js} +0 -0
- package/dist/client/assets/{cypher-CayLeiaR.js → cypher-CGStaC1X.js} +0 -0
- package/dist/client/assets/{d-BMZQ0mAy.js → d-CuTCIvnX.js} +0 -0
- package/dist/client/assets/{dark-plus-B__q47Nr.js → dark-plus-BvePH-r3.js} +0 -0
- package/dist/client/assets/{dart-gMOEMyuz.js → dart-CqEodbm2.js} +0 -0
- package/dist/client/assets/{dax-C3t5LadU.js → dax-UdE5S0Dh.js} +0 -0
- package/dist/client/assets/{desktop-DmhXLwLR.js → desktop-DfmsfHJA.js} +0 -0
- package/dist/client/assets/{diff-togOXQX6.js → diff-CW0RWGd9.js} +0 -0
- package/dist/client/assets/{docker--6N01olR.js → docker-B1qtW4ha.js} +0 -0
- package/dist/client/assets/{dotenv-Bq930Yx8.js → dotenv-BUzOh1k8.js} +0 -0
- package/dist/client/assets/{dracula-CBkSghcw.js → dracula-kJQjC_Gy.js} +0 -0
- package/dist/client/assets/{dracula-soft-CCSYeoxL.js → dracula-soft-B3XhEjCl.js} +0 -0
- package/dist/client/assets/{dream-maker-BiMf3DHl.js → dream-maker-CBvk18nW.js} +0 -0
- package/dist/client/assets/{emacs-lisp-Dhht7he2.js → emacs-lisp-DvSgLhDc.js} +0 -0
- package/dist/client/assets/{everforest-dark-NqSz4oHS.js → everforest-dark-u0zLn75q.js} +0 -0
- package/dist/client/assets/{everforest-light-a3Yzs_lT.js → everforest-light-D3syIoAR.js} +0 -0
- package/dist/client/assets/{fennel-BExc9TZf.js → fennel-C-1kWlGf.js} +0 -0
- package/dist/client/assets/{fish-C2p-AJmZ.js → fish-CCpdtwqS.js} +0 -0
- package/dist/client/assets/{fluent-CeYzs8Qy.js → fluent-BLg032oD.js} +0 -0
- package/dist/client/assets/{fortran-free-form-BIQEK2Jw.js → fortran-free-form-Br4jRtSc.js} +0 -0
- package/dist/client/assets/{gdscript-B5JQPh_-.js → gdscript-hSAZM1eh.js} +0 -0
- package/dist/client/assets/{gdshader-vVjJ_Qr8.js → gdshader-D4XNAEs9.js} +0 -0
- package/dist/client/assets/{genie-DGl5rqC8.js → genie-DmN-ICAN.js} +0 -0
- package/dist/client/assets/{gherkin-CY_VLUnD.js → gherkin-cuHHmRcX.js} +0 -0
- package/dist/client/assets/{github-dark-ClO4AStc.js → github-dark-CEBLh0--.js} +0 -0
- package/dist/client/assets/{github-dark-default-CM0dPco8.js → github-dark-default-Dq0Z4Xai.js} +0 -0
- package/dist/client/assets/{github-dark-dimmed-Cb6xxpXY.js → github-dark-dimmed-D90YmS4w.js} +0 -0
- package/dist/client/assets/{github-dark-high-contrast-BpYtx2-M.js → github-dark-high-contrast-B6BWv1iC.js} +0 -0
- package/dist/client/assets/{github-light-default-BmnCWL6x.js → github-light-default-DsPWmj4v.js} +0 -0
- package/dist/client/assets/{github-light-high-contrast-rpagNF5O.js → github-light-high-contrast-C7aLb3kp.js} +0 -0
- package/dist/client/assets/{github-light-CeOVFgf_.js → github-light-lXSVSq5T.js} +0 -0
- package/dist/client/assets/{gleam-BarIG9kQ.js → gleam-D8VhqPDN.js} +0 -0
- package/dist/client/assets/{gn-DhYsTPYc.js → gn-BjGRlX27.js} +0 -0
- package/dist/client/assets/{gnuplot-CucLlTBc.js → gnuplot-BZCXuE4q.js} +0 -0
- package/dist/client/assets/{go-toi-uWvg.js → go-BJpWXZEs.js} +0 -0
- package/dist/client/assets/{groovy-Ds4dis_k.js → groovy-D9w3Dn-z.js} +0 -0
- package/dist/client/assets/{gruvbox-dark-hard-aPiW8pQh.js → gruvbox-dark-hard-_deksD0U.js} +0 -0
- package/dist/client/assets/{gruvbox-dark-medium-2HJCvzsS.js → gruvbox-dark-medium-CT31284j.js} +0 -0
- package/dist/client/assets/{gruvbox-dark-soft-Da97ODX9.js → gruvbox-dark-soft-BZuEUCbj.js} +0 -0
- package/dist/client/assets/{gruvbox-light-hard-BXlEipFe.js → gruvbox-light-hard-dxv4n_ZS.js} +0 -0
- package/dist/client/assets/{gruvbox-light-medium-Cun-GjGk.js → gruvbox-light-medium-BsW_fVfR.js} +0 -0
- package/dist/client/assets/{gruvbox-light-soft-Bd3qiiSw.js → gruvbox-light-soft-BiGy99gD.js} +0 -0
- package/dist/client/assets/{haskell-B_jvz5Po.js → haskell-DqDdKEgk.js} +0 -0
- package/dist/client/assets/{haxe-BRbuo5UO.js → haxe-DMg0jS3a.js} +0 -0
- package/dist/client/assets/{hcl-BzNUCtsK.js → hcl-SZIZUK_X.js} +0 -0
- package/dist/client/assets/{hjson-BxVo3sS2.js → hjson-DF1VspiE.js} +0 -0
- package/dist/client/assets/{hlsl-C8Wes1nf.js → hlsl-DPe9L0Dt.js} +0 -0
- package/dist/client/assets/{horizon-D54PjLAY.js → horizon-Ngud75Kn.js} +0 -0
- package/dist/client/assets/{horizon-bright-D9RccdIr.js → horizon-bright-Cnljd0XD.js} +0 -0
- package/dist/client/assets/{houston-CMu1N_4K.js → houston-BenZxlMr.js} +0 -0
- package/dist/client/assets/{hy-dMrJKKU_.js → hy-B0f-B1mH.js} +0 -0
- package/dist/client/assets/{imba-DG_oO8tg.js → imba-Bq3j1cW5.js} +0 -0
- package/dist/client/assets/{ini-geHw79Aj.js → ini-BayloP2U.js} +0 -0
- package/dist/client/assets/{json5-CDUsNqz6.js → json5-CRSfdIrY.js} +0 -0
- package/dist/client/assets/{jsonc-D48xcwyD.js → jsonc-y4g9DQPx.js} +0 -0
- package/dist/client/assets/{jsonl-cpIYDXEe.js → jsonl-D2paVn9r.js} +0 -0
- package/dist/client/assets/{jsonnet-Da1lhszN.js → jsonnet-CLH27mtz.js} +0 -0
- package/dist/client/assets/{jssm-B8BLrEGL.js → jssm-CPPYaqX-.js} +0 -0
- package/dist/client/assets/{kanagawa-dragon-2Sk8Rx83.js → kanagawa-dragon-Bt5mhLu1.js} +0 -0
- package/dist/client/assets/{kanagawa-lotus-CQVSWfJp.js → kanagawa-lotus-FGA3pRJk.js} +0 -0
- package/dist/client/assets/{kanagawa-wave-BKWNioLX.js → kanagawa-wave-DnLVZPAD.js} +0 -0
- package/dist/client/assets/{kdl-B-2tSRmp.js → kdl-D1BQjjnw.js} +0 -0
- package/dist/client/assets/{kotlin-DepsEzh3.js → kotlin-ndCaDnf0.js} +0 -0
- package/dist/client/assets/{kusto-BcCtXIb8.js → kusto-D-4nbkD3.js} +0 -0
- package/dist/client/assets/{laserwave-BUqkO46F.js → laserwave-D2qAZkaG.js} +0 -0
- package/dist/client/assets/{lean-CNO9ffpX.js → lean-YmtAsB0p.js} +0 -0
- package/dist/client/assets/{less-Dj0T9pWC.js → less-DyHub3ow.js} +0 -0
- package/dist/client/assets/{light-plus-C9Hnuc1T.js → light-plus-CP13QUvm.js} +0 -0
- package/dist/client/assets/{llvm-DbV9b66l.js → llvm-DCcqrY0D.js} +0 -0
- package/dist/client/assets/{log-BMblmPyH.js → log-DWAAMNbe.js} +0 -0
- package/dist/client/assets/{logo-B78qMxws.js → logo-ClQMGkNL.js} +0 -0
- package/dist/client/assets/{luau-BUd8xsdE.js → luau-CmcXFvLt.js} +0 -0
- package/dist/client/assets/{make-Ev-6cJrd.js → make-DcfJyUzm.js} +0 -0
- package/dist/client/assets/{markdown-CS4LI6sN.js → markdown-DXxotAxn.js} +0 -0
- package/dist/client/assets/{material-theme-5rA1zn0D.js → material-theme-JFoPTBSr.js} +0 -0
- package/dist/client/assets/{material-theme-darker-DGOEiL65.js → material-theme-darker-BHaqZ19v.js} +0 -0
- package/dist/client/assets/{material-theme-lighter-CULfFRX0.js → material-theme-lighter-CGnnS2bs.js} +0 -0
- package/dist/client/assets/{material-theme-ocean-LQZ9CleP.js → material-theme-ocean-Drhewjqf.js} +0 -0
- package/dist/client/assets/{material-theme-palenight-Di_f5oks.js → material-theme-palenight-DbUypmpb.js} +0 -0
- package/dist/client/assets/{matlab-C0qEtAx9.js → matlab-BlfbTznR.js} +0 -0
- package/dist/client/assets/{mdx-CzvnbLXb.js → mdx-H8fyPQd8.js} +0 -0
- package/dist/client/assets/{mermaid-BPquZaKt.js → mermaid-CWAV2dmV.js} +0 -0
- package/dist/client/assets/{min-dark-rkuIbtJV.js → min-dark-BEelvXUB.js} +0 -0
- package/dist/client/assets/{min-light-Dj_HOGsr.js → min-light-CTPBOACR.js} +0 -0
- package/dist/client/assets/{mipsasm-k5DQoS6j.js → mipsasm-BWYFAm2s.js} +0 -0
- package/dist/client/assets/{mojo-sTTDuNnR.js → mojo-DZcPJEIN.js} +0 -0
- package/dist/client/assets/{monokai-D5p-u2ij.js → monokai-DQlZXbkg.js} +0 -0
- package/dist/client/assets/{moonbit-j5ChFtBC.js → moonbit-6eslNlJL.js} +0 -0
- package/dist/client/assets/{move-Dj0Gmn6R.js → move-DxFc9-QU.js} +0 -0
- package/dist/client/assets/{narrat-DJgMz2oW.js → narrat-gv38dJOT.js} +0 -0
- package/dist/client/assets/{nextflow-groovy-eDLuZ_oi.js → nextflow-groovy-DV4H3hok.js} +0 -0
- package/dist/client/assets/{night-owl-CEdtPl3A.js → night-owl-BLcrYhaC.js} +0 -0
- package/dist/client/assets/{night-owl-light-GdSldewm.js → night-owl-light-BG-tBJOz.js} +0 -0
- package/dist/client/assets/{nix-CxIPS3pb.js → nix-NlOz3HGM.js} +0 -0
- package/dist/client/assets/{nord-3WFAz5H9.js → nord-Dm2F5_QB.js} +0 -0
- package/dist/client/assets/{nushell-GDfBmoBU.js → nushell-D86Z8aFF.js} +0 -0
- package/dist/client/assets/{objective-c-MFQ_MGUa.js → objective-c-iuJvUjCv.js} +0 -0
- package/dist/client/assets/{objective-cpp-Y83LcBE7.js → objective-cpp-C62JvfMT.js} +0 -0
- package/dist/client/assets/{ocaml-FxYfaJxu.js → ocaml-Rbryo9lg.js} +0 -0
- package/dist/client/assets/{odin-CprihY3z.js → odin-CfaOVNP_.js} +0 -0
- package/dist/client/assets/{one-dark-pro-BB6mpmmA.js → one-dark-pro-DC9SHdX0.js} +0 -0
- package/dist/client/assets/{one-light-BYLoxNtg.js → one-light-Doo39p0H.js} +0 -0
- package/dist/client/assets/{openscad-Bc1FbpOi.js → openscad-DCRhgheK.js} +0 -0
- package/dist/client/assets/{pascal-Bb4d8cUL.js → pascal-CTesTHtV.js} +0 -0
- package/dist/client/assets/{pierre-dark-cF19s-RM.js → pierre-dark-Gtc9M_gS.js} +0 -0
- package/dist/client/assets/{pierre-light-BdpX8OpD.js → pierre-light-EDxMHmhf.js} +0 -0
- package/dist/client/assets/{pkl-tM25Sq0w.js → pkl-BjUMjQkt.js} +0 -0
- package/dist/client/assets/{plastic-D3k2Xp_5.js → plastic-B3CcSpon.js} +0 -0
- package/dist/client/assets/{plsql-CLEfFhSj.js → plsql-BgKEZSSo.js} +0 -0
- package/dist/client/assets/{po-CaAzdrrh.js → po-C5s_CVt8.js} +0 -0
- package/dist/client/assets/{poimandres-bPTvT4Da.js → poimandres-BsK70ma5.js} +0 -0
- package/dist/client/assets/{polar-TG7aTGdK.js → polar-y4hX8qM0.js} +0 -0
- package/dist/client/assets/{postcss-8kqfa9f0.js → postcss-BHCm7Qae.js} +0 -0
- package/dist/client/assets/{powerquery-CtSu1Nfd.js → powerquery-C2vMt8aZ.js} +0 -0
- package/dist/client/assets/{powershell-87lLBHMy.js → powershell-DEcjmg1c.js} +0 -0
- package/dist/client/assets/{prisma-Dnf694DZ.js → prisma-Ba-Tcxy5.js} +0 -0
- package/dist/client/assets/{prolog-C0XbHTWa.js → prolog-B4o261Jv.js} +0 -0
- package/dist/client/assets/{proto-BZP-HLIb.js → proto-o3IZKiMR.js} +0 -0
- package/dist/client/assets/{puppet-CJYWgYC5.js → puppet-BC0dqZ31.js} +0 -0
- package/dist/client/assets/{purescript-B95Q6BAd.js → purescript-CLDw1y5G.js} +0 -0
- package/dist/client/assets/{python-CqTCsi7P.js → python-D1NFioGW.js} +0 -0
- package/dist/client/assets/{qmldir-DlIL4hls.js → qmldir-B7i9e9Vn.js} +0 -0
- package/dist/client/assets/{qss-BW72E0q_.js → qss-DIe6oKX8.js} +0 -0
- package/dist/client/assets/{racket-CCAimEsC.js → racket-CAOC_yyk.js} +0 -0
- package/dist/client/assets/{raku-mSuqElkM.js → raku-Ccua3vW6.js} +0 -0
- package/dist/client/assets/{red-C-DA4yBI.js → red-DtDH206x.js} +0 -0
- package/dist/client/assets/{reg-CGwMBJ2c.js → reg-CAYZT9kE.js} +0 -0
- package/dist/client/assets/{rel-JwrbYgX4.js → rel-cvB6F5nO.js} +0 -0
- package/dist/client/assets/{riscv-CoYyE75b.js → riscv-SYGtE4EN.js} +0 -0
- package/dist/client/assets/{ron-C5wrhnmJ.js → ron-CRt869SB.js} +0 -0
- package/dist/client/assets/{rose-pine-DlrMPYYd.js → rose-pine-CjBfSJ5b.js} +0 -0
- package/dist/client/assets/{rose-pine-dawn-DBHFtZD2.js → rose-pine-dawn-C0xwy7iJ.js} +0 -0
- package/dist/client/assets/{rose-pine-moon-BBfrpe5q.js → rose-pine-moon-BSNy9Ty0.js} +0 -0
- package/dist/client/assets/{rosmsg-DlimTR9t.js → rosmsg-BwrfJ66Z.js} +0 -0
- package/dist/client/assets/{rust-Cxnkxx3h.js → rust-DCKTTPxN.js} +0 -0
- package/dist/client/assets/{sass-DEyqUIpU.js → sass-CorcwySt.js} +0 -0
- package/dist/client/assets/{scala-i3RN3yAN.js → scala-DlI-OmYj.js} +0 -0
- package/dist/client/assets/{scheme-BcKdjYkO.js → scheme-CcNEGkZH.js} +0 -0
- package/dist/client/assets/{sdbl-Be_XWc3n.js → sdbl-AL_m-RO_.js} +0 -0
- package/dist/client/assets/{slack-dark-3PDtm74m.js → slack-dark-rMhrfPm6.js} +0 -0
- package/dist/client/assets/{slack-ochin-CwiuFRJD.js → slack-ochin-9w8X74hU.js} +0 -0
- package/dist/client/assets/{smalltalk-BdBlL6ks.js → smalltalk-Y2ogrfbk.js} +0 -0
- package/dist/client/assets/{snazzy-light-Dyqc8Is2.js → snazzy-light-DHr9ygpP.js} +0 -0
- package/dist/client/assets/{solarized-dark-DZiTscIX.js → solarized-dark-UPcKev9Q.js} +0 -0
- package/dist/client/assets/{solarized-light-DBcfxrfG.js → solarized-light-DUsjROvl.js} +0 -0
- package/dist/client/assets/{solidity-DH-yUSWc.js → solidity-Bfbm9QZQ.js} +0 -0
- package/dist/client/assets/{splunk-CIjc4kxs.js → splunk-6DJA2XFa.js} +0 -0
- package/dist/client/assets/{ssh-config-BKVd4drG.js → ssh-config-CbQtdF-u.js} +0 -0
- package/dist/client/assets/{stylus-tqAsmugv.js → stylus-B_iq45Sj.js} +0 -0
- package/dist/client/assets/{swift-CdDBQ3_Z.js → swift-C7KIgN-p.js} +0 -0
- package/dist/client/assets/{synthwave-84-CbbRs73K.js → synthwave-84-lf_Wt0K_.js} +0 -0
- package/dist/client/assets/{system-verilog-CBqEY-9v.js → system-verilog-C3G9wERd.js} +0 -0
- package/dist/client/assets/{systemd-khRP5zwK.js → systemd-CwxGrojj.js} +0 -0
- package/dist/client/assets/{talonscript-D_lneH-6.js → talonscript-DqnSo1EO.js} +0 -0
- package/dist/client/assets/{tasl-CLymawGe.js → tasl-T8ethp86.js} +0 -0
- package/dist/client/assets/{tcl-BRY1S87U.js → tcl-Ccl366o0.js} +0 -0
- package/dist/client/assets/{terraform-BqohMo2f.js → terraform-BBf6ZI_0.js} +0 -0
- package/dist/client/assets/{tokyo-night-BWUONxad.js → tokyo-night-BF5ata25.js} +0 -0
- package/dist/client/assets/{toml-C4c85Lwg.js → toml-C5Z_BR4r.js} +0 -0
- package/dist/client/assets/{tsv-DsZq9HBQ.js → tsv-rX8sUJs7.js} +0 -0
- package/dist/client/assets/{turtle-Dpr8zLlw.js → turtle-BM-MG8WY.js} +0 -0
- package/dist/client/assets/{typespec-DcqgATB-.js → typespec-C5gKydvR.js} +0 -0
- package/dist/client/assets/{typst-CeVxmuPg.js → typst--_5VchrY.js} +0 -0
- package/dist/client/assets/{v-C2Qsh2-1.js → v-C6PwpmTC.js} +0 -0
- package/dist/client/assets/{vala-CvZ3yL7c.js → vala-4pTaceSj.js} +0 -0
- package/dist/client/assets/{vb-B_p4qDw4.js → vb-DhoR5A6S.js} +0 -0
- package/dist/client/assets/{verilog-D8MGjxD7.js → verilog-B9f_1lPn.js} +0 -0
- package/dist/client/assets/{vesper-DossXiE1.js → vesper-CmBi_iCT.js} +0 -0
- package/dist/client/assets/{vhdl-MLyYh_Gz.js → vhdl-Cy4RAmOe.js} +0 -0
- package/dist/client/assets/{viml-BuYIArcz.js → viml-CFQW-CcD.js} +0 -0
- package/dist/client/assets/{vitesse-black-C3kc1227.js → vitesse-black-CE8RoBJP.js} +0 -0
- package/dist/client/assets/{vitesse-dark-kWOu5V36.js → vitesse-dark-BpF142p_.js} +0 -0
- package/dist/client/assets/{vitesse-light-DMtiL8bK.js → vitesse-light-CMwxPBrg.js} +0 -0
- package/dist/client/assets/{vyper-CNqG09-_.js → vyper-BW5zj9bE.js} +0 -0
- package/dist/client/assets/{wasm-BsQDV7Y0.js → wasm-BigxSLnm.js} +0 -0
- package/dist/client/assets/{wasm-DFVlQlgd.js → wasm-CSccDuAq.js} +0 -0
- package/dist/client/assets/{wenyan-BmOQge13.js → wenyan-BZzM1SQT.js} +0 -0
- package/dist/client/assets/{wgsl-CgWrmvIg.js → wgsl-xBPHbLlq.js} +0 -0
- package/dist/client/assets/{wikitext-DkwckXCk.js → wikitext-BXJWUNJK.js} +0 -0
- package/dist/client/assets/{wit-CtyVFGe7.js → wit-2GnUs67P.js} +0 -0
- package/dist/client/assets/{wolfram-CXE4FrKz.js → wolfram-DIFDmw-g.js} +0 -0
- package/dist/client/assets/{zenscript-DH15wJt0.js → zenscript-DQaUUjbx.js} +0 -0
- package/dist/client/assets/{zig-CqXN9brD.js → zig-BDepRvBi.js} +0 -0
- package/dist/{update-check-KL-2sGxE.mjs → update-check-DAPFCqpF.mjs} +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile, execFileSync } from "node:child_process";
|
|
2
|
+
import { basename, join, relative, resolve, sep } from "node:path";
|
|
2
3
|
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
4
|
import { promisify } from "node:util";
|
|
4
|
-
import { execFile, execFileSync } from "node:child_process";
|
|
5
5
|
import { readFile } from "node:fs/promises";
|
|
6
6
|
import { homedir } from "node:os";
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
@@ -19,7 +19,7 @@ function toSafeRelativePath(filePath, baseDir) {
|
|
|
19
19
|
if (normalized.includes("..") || normalized.includes("\0")) return null;
|
|
20
20
|
const resolved = resolve(baseDir, normalized);
|
|
21
21
|
const resolvedBase = resolve(baseDir);
|
|
22
|
-
if (!(resolved
|
|
22
|
+
if (!(resolved === resolvedBase || resolved.startsWith(resolvedBase + sep))) return null;
|
|
23
23
|
return relative(resolvedBase, resolved);
|
|
24
24
|
}
|
|
25
25
|
function isSafePath(relativePath, baseDir) {
|
|
@@ -28,6 +28,9 @@ function isSafePath(relativePath, baseDir) {
|
|
|
28
28
|
//#endregion
|
|
29
29
|
//#region src/lib/git.ts
|
|
30
30
|
const execFileAsync = promisify(execFile);
|
|
31
|
+
function splitLines(content) {
|
|
32
|
+
return content.split(/\r\n|\n|\r/);
|
|
33
|
+
}
|
|
31
34
|
function isBinaryFile(absolutePath) {
|
|
32
35
|
try {
|
|
33
36
|
const buffer = readFileSync(absolutePath);
|
|
@@ -140,7 +143,7 @@ async function getUntrackedFilesDiffAsync() {
|
|
|
140
143
|
`Binary files /dev/null and b/${file} differ`
|
|
141
144
|
].join("\n");
|
|
142
145
|
else try {
|
|
143
|
-
const lines = (await readFile(absolutePath, "utf-8"))
|
|
146
|
+
const lines = splitLines(await readFile(absolutePath, "utf-8"));
|
|
144
147
|
const diffLines = lines.map((l) => `+${l}`);
|
|
145
148
|
return [
|
|
146
149
|
`diff --git a/${file} b/${file}`,
|
|
@@ -298,7 +301,7 @@ function getFilePatch(filePath) {
|
|
|
298
301
|
try {
|
|
299
302
|
const absolutePath = join(getRepoRoot(), filePath);
|
|
300
303
|
if (isBinaryFile(absolutePath)) return "";
|
|
301
|
-
const lines = readFileSync(absolutePath, "utf-8")
|
|
304
|
+
const lines = splitLines(readFileSync(absolutePath, "utf-8"));
|
|
302
305
|
return [
|
|
303
306
|
`diff --git a/${filePath} b/${filePath}`,
|
|
304
307
|
"new file mode 100644",
|
|
@@ -448,6 +451,243 @@ function getHunkHistory(filePath, deletionStart, deletionCount, revision = "HEAD
|
|
|
448
451
|
recentCommits
|
|
449
452
|
};
|
|
450
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* Parse the output of `git log --pretty=raw -p` into `CommitInfo[]`.
|
|
456
|
+
*
|
|
457
|
+
* The `raw` format emits one record per commit:
|
|
458
|
+
*
|
|
459
|
+
* commit <sha>
|
|
460
|
+
* tree <sha>
|
|
461
|
+
* parent <sha> (zero or more; merges have ≥ 2)
|
|
462
|
+
* author <name> <email> <unix-time> <tz>
|
|
463
|
+
* committer <name> <email> <unix-time> <tz>
|
|
464
|
+
* gpgsig -----BEGIN ... (optional; continuation lines start with a single space)
|
|
465
|
+
* <indented body>
|
|
466
|
+
*
|
|
467
|
+
* <indented commit message — 4 spaces of indent>
|
|
468
|
+
*
|
|
469
|
+
* diff --git a/... b/... (the per-commit patch; may be empty)
|
|
470
|
+
* ...
|
|
471
|
+
*
|
|
472
|
+
* Records are separated by blank lines but the unambiguous boundary is the
|
|
473
|
+
* next line beginning with `commit <40-hex>` at column 0.
|
|
474
|
+
*/
|
|
475
|
+
function parseGitShowRaw(raw) {
|
|
476
|
+
if (!raw) return [];
|
|
477
|
+
const out = [];
|
|
478
|
+
const lines = raw.split("\n");
|
|
479
|
+
const starts = [];
|
|
480
|
+
for (let i = 0; i < lines.length; i++) if (/^commit [0-9a-f]{40}\b/.test(lines[i])) starts.push(i);
|
|
481
|
+
if (starts.length === 0) return [];
|
|
482
|
+
for (let s = 0; s < starts.length; s++) {
|
|
483
|
+
const begin = starts[s];
|
|
484
|
+
const end = s + 1 < starts.length ? starts[s + 1] : lines.length;
|
|
485
|
+
const info = parseSingleCommitRaw(lines.slice(begin, end));
|
|
486
|
+
if (info) out.push(info);
|
|
487
|
+
}
|
|
488
|
+
return out;
|
|
489
|
+
}
|
|
490
|
+
function parseSingleCommitRaw(lines) {
|
|
491
|
+
const shaMatch = (lines[0] ?? "").match(/^commit ([0-9a-f]{40})/);
|
|
492
|
+
if (!shaMatch) return null;
|
|
493
|
+
const sha = shaMatch[1];
|
|
494
|
+
let i = 1;
|
|
495
|
+
const parents = [];
|
|
496
|
+
let authorName = "";
|
|
497
|
+
let authorEmail = "";
|
|
498
|
+
let authorDate = "";
|
|
499
|
+
let committerName = "";
|
|
500
|
+
let committerEmail = "";
|
|
501
|
+
let committerDate = "";
|
|
502
|
+
while (i < lines.length) {
|
|
503
|
+
const line = lines[i];
|
|
504
|
+
if (line === "") break;
|
|
505
|
+
if (line.startsWith(" ")) {
|
|
506
|
+
i++;
|
|
507
|
+
continue;
|
|
508
|
+
}
|
|
509
|
+
const idx = line.indexOf(" ");
|
|
510
|
+
const key = idx === -1 ? line : line.slice(0, idx);
|
|
511
|
+
const value = idx === -1 ? "" : line.slice(idx + 1);
|
|
512
|
+
switch (key) {
|
|
513
|
+
case "tree": break;
|
|
514
|
+
case "parent":
|
|
515
|
+
if (value) parents.push(value);
|
|
516
|
+
break;
|
|
517
|
+
case "author": {
|
|
518
|
+
const ident = parseIdent(value);
|
|
519
|
+
authorName = ident.name;
|
|
520
|
+
authorEmail = ident.email;
|
|
521
|
+
authorDate = ident.date;
|
|
522
|
+
break;
|
|
523
|
+
}
|
|
524
|
+
case "committer": {
|
|
525
|
+
const ident = parseIdent(value);
|
|
526
|
+
committerName = ident.name;
|
|
527
|
+
committerEmail = ident.email;
|
|
528
|
+
committerDate = ident.date;
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
default: break;
|
|
532
|
+
}
|
|
533
|
+
i++;
|
|
534
|
+
}
|
|
535
|
+
if (i < lines.length && lines[i] === "") i++;
|
|
536
|
+
const msgLines = [];
|
|
537
|
+
while (i < lines.length) {
|
|
538
|
+
const line = lines[i];
|
|
539
|
+
if (line.startsWith(" ")) {
|
|
540
|
+
msgLines.push(line.slice(4));
|
|
541
|
+
i++;
|
|
542
|
+
continue;
|
|
543
|
+
}
|
|
544
|
+
if (line === "") {
|
|
545
|
+
msgLines.push("");
|
|
546
|
+
i++;
|
|
547
|
+
continue;
|
|
548
|
+
}
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
const { subject, body } = splitMessage(msgLines);
|
|
552
|
+
let patchStart = -1;
|
|
553
|
+
for (let j = i; j < lines.length; j++) {
|
|
554
|
+
const line = lines[j];
|
|
555
|
+
if (line.startsWith("diff --git ") || line.startsWith("Binary files ")) {
|
|
556
|
+
patchStart = j;
|
|
557
|
+
break;
|
|
558
|
+
}
|
|
559
|
+
if (line === "") continue;
|
|
560
|
+
break;
|
|
561
|
+
}
|
|
562
|
+
const patch = patchStart === -1 ? "" : lines.slice(patchStart).join("\n").replace(/\n+$/, "\n");
|
|
563
|
+
return {
|
|
564
|
+
sha,
|
|
565
|
+
shortSha: sha.slice(0, 7),
|
|
566
|
+
parents,
|
|
567
|
+
subject,
|
|
568
|
+
body,
|
|
569
|
+
authorName,
|
|
570
|
+
authorEmail,
|
|
571
|
+
authorDate,
|
|
572
|
+
committerName,
|
|
573
|
+
committerEmail,
|
|
574
|
+
committerDate,
|
|
575
|
+
patch
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Parse a `Name <email> <unix-seconds> <±HHMM>` ident line into structured
|
|
580
|
+
* fields. The email is bracketed; the timestamp is split out and converted to
|
|
581
|
+
* ISO 8601 for consumers.
|
|
582
|
+
*/
|
|
583
|
+
function parseIdent(value) {
|
|
584
|
+
const match = value.match(/^(.*?)\s+<([^>]*)>\s+(\d+)\s+([+-]\d{4})$/);
|
|
585
|
+
if (!match) return {
|
|
586
|
+
name: value,
|
|
587
|
+
email: "",
|
|
588
|
+
date: ""
|
|
589
|
+
};
|
|
590
|
+
const [, name, email, secs, tz] = match;
|
|
591
|
+
return {
|
|
592
|
+
name,
|
|
593
|
+
email,
|
|
594
|
+
date: unixToIso(Number(secs), tz)
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
function unixToIso(secs, tz) {
|
|
598
|
+
if (!Number.isFinite(secs)) return "";
|
|
599
|
+
const sign = tz.startsWith("-") ? -1 : 1;
|
|
600
|
+
const tzHours = Number(tz.slice(1, 3));
|
|
601
|
+
const tzMins = Number(tz.slice(3, 5));
|
|
602
|
+
const offsetMs = sign * (tzHours * 60 + tzMins) * 6e4;
|
|
603
|
+
const d = new Date(secs * 1e3 + offsetMs);
|
|
604
|
+
const pad = (n, w = 2) => String(n).padStart(w, "0");
|
|
605
|
+
return `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}T${pad(d.getUTCHours())}:${pad(d.getUTCMinutes())}:${pad(d.getUTCSeconds())}${tz.slice(0, 3)}:${tz.slice(3)}`;
|
|
606
|
+
}
|
|
607
|
+
function splitMessage(msgLines) {
|
|
608
|
+
if (msgLines.length === 0) return {
|
|
609
|
+
subject: "",
|
|
610
|
+
body: ""
|
|
611
|
+
};
|
|
612
|
+
let start = 0;
|
|
613
|
+
while (start < msgLines.length && msgLines[start] === "") start++;
|
|
614
|
+
let stop = msgLines.length;
|
|
615
|
+
while (stop > start && msgLines[stop - 1] === "") stop--;
|
|
616
|
+
if (start >= stop) return {
|
|
617
|
+
subject: "",
|
|
618
|
+
body: ""
|
|
619
|
+
};
|
|
620
|
+
const subject = msgLines[start];
|
|
621
|
+
let bodyStart = start + 1;
|
|
622
|
+
if (bodyStart < stop && msgLines[bodyStart] === "") bodyStart++;
|
|
623
|
+
return {
|
|
624
|
+
subject,
|
|
625
|
+
body: msgLines.slice(bodyStart, stop).join("\n")
|
|
626
|
+
};
|
|
627
|
+
}
|
|
628
|
+
async function getShowDiff(revspecs, pathspecs = []) {
|
|
629
|
+
if (revspecs.length === 0) return {
|
|
630
|
+
commits: [],
|
|
631
|
+
patch: "",
|
|
632
|
+
truncated: 0
|
|
633
|
+
};
|
|
634
|
+
let shaList;
|
|
635
|
+
try {
|
|
636
|
+
const { stdout } = await execFileAsync("git", [
|
|
637
|
+
"rev-list",
|
|
638
|
+
"--no-walk",
|
|
639
|
+
"--reverse",
|
|
640
|
+
...revspecs,
|
|
641
|
+
...pathspecs.length ? ["--", ...pathspecs] : []
|
|
642
|
+
], {
|
|
643
|
+
encoding: "utf-8",
|
|
644
|
+
maxBuffer: 50 * 1024 * 1024
|
|
645
|
+
});
|
|
646
|
+
shaList = stdout.split("\n").filter(Boolean);
|
|
647
|
+
} catch {
|
|
648
|
+
return {
|
|
649
|
+
commits: [],
|
|
650
|
+
patch: "",
|
|
651
|
+
truncated: 0
|
|
652
|
+
};
|
|
653
|
+
}
|
|
654
|
+
if (shaList.length === 0) return {
|
|
655
|
+
commits: [],
|
|
656
|
+
patch: "",
|
|
657
|
+
truncated: 0
|
|
658
|
+
};
|
|
659
|
+
const truncated = Math.max(0, shaList.length - 100);
|
|
660
|
+
const trimmed = truncated === 0 ? shaList : shaList.slice(0, 100);
|
|
661
|
+
let raw;
|
|
662
|
+
try {
|
|
663
|
+
const { stdout } = await execFileAsync("git", [
|
|
664
|
+
"log",
|
|
665
|
+
"--no-walk",
|
|
666
|
+
"--reverse",
|
|
667
|
+
"-p",
|
|
668
|
+
"--pretty=raw",
|
|
669
|
+
...DIFF_FLAGS,
|
|
670
|
+
...trimmed,
|
|
671
|
+
...pathspecs.length ? ["--", ...pathspecs] : []
|
|
672
|
+
], {
|
|
673
|
+
encoding: "utf-8",
|
|
674
|
+
maxBuffer: 200 * 1024 * 1024
|
|
675
|
+
});
|
|
676
|
+
raw = stdout;
|
|
677
|
+
} catch {
|
|
678
|
+
return {
|
|
679
|
+
commits: [],
|
|
680
|
+
patch: "",
|
|
681
|
+
truncated: 0
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
const commits = parseGitShowRaw(raw);
|
|
685
|
+
return {
|
|
686
|
+
commits,
|
|
687
|
+
patch: commits.map((c) => c.patch).filter(Boolean).join("\n"),
|
|
688
|
+
truncated
|
|
689
|
+
};
|
|
690
|
+
}
|
|
451
691
|
//#endregion
|
|
452
692
|
//#region src/lib/comment-format.ts
|
|
453
693
|
/** Plain-language guidance the agent should act on, derived from the verdict. */
|
|
@@ -554,122 +794,6 @@ function formatComments(comments, generalComment, decision) {
|
|
|
554
794
|
return lines.join("\n");
|
|
555
795
|
}
|
|
556
796
|
//#endregion
|
|
557
|
-
//#region src/lib/plan-format.ts
|
|
558
|
-
/**
|
|
559
|
-
* Serialize a reviewed plan into the `<plan-review>` XML envelope handed back to
|
|
560
|
-
* a waiting agent. The diff-review counterpart is {@link formatComments}; this
|
|
561
|
-
* keeps the two handoffs structurally consistent so an agent learns one shape.
|
|
562
|
-
*
|
|
563
|
-
* Shared by the server's `/api/plan-review/await` handoff, the `diffing plan`
|
|
564
|
-
* CLI, and the MCP server so every channel emits byte-identical output.
|
|
565
|
-
*/
|
|
566
|
-
function escapeAttr(value) {
|
|
567
|
-
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
568
|
-
}
|
|
569
|
-
/** Human-readable guidance the agent should act on, derived from the verdict. */
|
|
570
|
-
function decisionSummary(decision) {
|
|
571
|
-
switch (decision) {
|
|
572
|
-
case "approved": return "The reviewer APPROVED this plan. Proceed with implementation exactly as described, taking any inline comments into account.";
|
|
573
|
-
case "rejected": return "The reviewer REJECTED this plan. Do NOT proceed. Reconsider the approach based on the comments; only continue once a new plan is approved.";
|
|
574
|
-
case "changes-requested": return "The reviewer REQUESTED CHANGES. Revise the plan to address every open comment below, then resubmit the updated plan for re-review (do not start implementation yet).";
|
|
575
|
-
default: return "This plan has not been decided yet. Wait for the reviewer to approve, reject, or request changes.";
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
/**
|
|
579
|
-
* Resolve the line label for a plan comment: `plan` for whole-plan notes,
|
|
580
|
-
* `12-15` for a multi-line selection, otherwise the single line number.
|
|
581
|
-
*/
|
|
582
|
-
function lineLabel(comment) {
|
|
583
|
-
if (comment.lineNumber === 0) return "plan";
|
|
584
|
-
if (comment.startLineNumber && comment.startLineNumber !== comment.lineNumber) return `${comment.startLineNumber}-${comment.lineNumber}`;
|
|
585
|
-
return `${comment.lineNumber}`;
|
|
586
|
-
}
|
|
587
|
-
function formatPlanReview(plan) {
|
|
588
|
-
const lines = [];
|
|
589
|
-
lines.push("<plan-review>");
|
|
590
|
-
lines.push(" <instructions>");
|
|
591
|
-
lines.push(" You are an AI coding assistant receiving a human review of a plan you submitted.");
|
|
592
|
-
lines.push(" - The \"decision\" attribute is the headline verdict: \"approved\", \"rejected\", \"changes-requested\", or \"pending\".");
|
|
593
|
-
lines.push(" - <decision-summary> tells you, in plain language, what to do next based on that verdict.");
|
|
594
|
-
lines.push(" - <decision-comment> is the reviewer's overall note (may be absent).");
|
|
595
|
-
lines.push(" - <plan-body> is the exact markdown of the plan being reviewed. Inline comments target lines within it.");
|
|
596
|
-
lines.push(" - Each <comment> targets a line (\"line=42\"), a range (\"line=12-15\"), or the whole plan (\"line=plan\").");
|
|
597
|
-
lines.push(" \"section\" names the nearest markdown heading for context. Only address comments with status=\"open\".");
|
|
598
|
-
lines.push(" - <context> contains the exact plan text the comment is anchored to.");
|
|
599
|
-
lines.push("");
|
|
600
|
-
lines.push(" HOW TO RESPOND:");
|
|
601
|
-
lines.push(" - If approved: proceed with the work.");
|
|
602
|
-
lines.push(" - If changes-requested: revise the plan and resubmit it for another review round.");
|
|
603
|
-
lines.push(" - If rejected: stop and rethink; do not implement.");
|
|
604
|
-
lines.push(" Prefer the diffing CLI or MCP (port-agnostic, no copy-paste):");
|
|
605
|
-
lines.push(" diffing plan reply <comment-id> --body \"...\" --model \"<your-model-name>\"");
|
|
606
|
-
lines.push(" diffing plan resolve <comment-id>");
|
|
607
|
-
lines.push(" diffing plan submit <revised-plan.md> --id <plan-id> # resubmit a new version for re-review");
|
|
608
|
-
lines.push(" (Or the equivalent MCP tools: reply_to_plan_comment, resolve_plan_comment, submit_plan.)");
|
|
609
|
-
lines.push(" </instructions>");
|
|
610
|
-
const decidedAttr = plan.decidedAt ? ` decided-at="${new Date(plan.decidedAt).toISOString()}"` : "";
|
|
611
|
-
lines.push(` <plan id="${escapeAttr(plan.id)}" title="${escapeAttr(plan.title)}" version="${plan.version}" decision="${plan.decision}"${decidedAttr}>`);
|
|
612
|
-
lines.push(` <decision-summary><![CDATA[${decisionSummary(plan.decision)}]]></decision-summary>`);
|
|
613
|
-
const trimmedDecisionComment = plan.decisionComment?.trim();
|
|
614
|
-
if (trimmedDecisionComment) lines.push(` <decision-comment><![CDATA[${trimmedDecisionComment}]]></decision-comment>`);
|
|
615
|
-
lines.push(` <plan-body><![CDATA[${plan.body}]]></plan-body>`);
|
|
616
|
-
const comments = plan.comments ?? [];
|
|
617
|
-
if (comments.length > 0) {
|
|
618
|
-
lines.push(" <comments>");
|
|
619
|
-
for (const comment of comments) {
|
|
620
|
-
const sectionAttr = comment.sectionTitle ? ` section="${escapeAttr(comment.sectionTitle)}"` : "";
|
|
621
|
-
const isoDate = new Date(comment.createdAt).toISOString();
|
|
622
|
-
lines.push(` <comment id="${escapeAttr(comment.id)}" line="${lineLabel(comment)}"${sectionAttr} status="${comment.status}" created-at="${isoDate}">`);
|
|
623
|
-
if (comment.lineNumber !== 0 && comment.lineContent) lines.push(` <context><![CDATA[${comment.lineContent}]]></context>`);
|
|
624
|
-
lines.push(` <body><![CDATA[${comment.body}]]></body>`);
|
|
625
|
-
if (comment.replies && comment.replies.length > 0) {
|
|
626
|
-
lines.push(" <replies>");
|
|
627
|
-
for (const reply of comment.replies) {
|
|
628
|
-
const replyIsoDate = new Date(reply.createdAt).toISOString();
|
|
629
|
-
const roleAttr = reply.role ? ` role="${reply.role}"` : " role=\"agent\"";
|
|
630
|
-
const modelAttr = reply.model ? ` model="${escapeAttr(reply.model)}"` : "";
|
|
631
|
-
lines.push(` <reply id="${escapeAttr(reply.id)}" created-at="${replyIsoDate}"${roleAttr}${modelAttr}>`);
|
|
632
|
-
lines.push(` <![CDATA[${reply.body}]]>`);
|
|
633
|
-
lines.push(" </reply>");
|
|
634
|
-
}
|
|
635
|
-
lines.push(" </replies>");
|
|
636
|
-
}
|
|
637
|
-
lines.push(" </comment>");
|
|
638
|
-
}
|
|
639
|
-
lines.push(" </comments>");
|
|
640
|
-
}
|
|
641
|
-
lines.push(" </plan>");
|
|
642
|
-
lines.push("</plan-review>");
|
|
643
|
-
return lines.join("\n");
|
|
644
|
-
}
|
|
645
|
-
/**
|
|
646
|
-
* Find the nearest markdown ATX heading at or above a 1-based line, so a comment
|
|
647
|
-
* can record which section of the plan it belongs to. Returns the heading text
|
|
648
|
-
* without the leading `#`s, or undefined when the line precedes any heading.
|
|
649
|
-
*/
|
|
650
|
-
function sectionTitleForLine(body, lineNumber) {
|
|
651
|
-
if (lineNumber < 1) return void 0;
|
|
652
|
-
const lines = body.split("\n");
|
|
653
|
-
const end = Math.min(lineNumber, lines.length);
|
|
654
|
-
for (let i = end - 1; i >= 0; i--) {
|
|
655
|
-
const match = /^\s{0,3}(#{1,6})\s+(.*?)\s*#*\s*$/.exec(lines[i]);
|
|
656
|
-
if (match) return match[2].trim();
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
/**
|
|
660
|
-
* Snapshot the plan text spanned by a 1-based, inclusive [start, end] line
|
|
661
|
-
* range, used as the `lineContent` anchor when a comment is created without one
|
|
662
|
-
* (e.g. posted by an agent over the API).
|
|
663
|
-
*/
|
|
664
|
-
function extractPlanLines(body, startLine, endLine) {
|
|
665
|
-
if (startLine < 1) return "";
|
|
666
|
-
const lines = body.split("\n");
|
|
667
|
-
const from = Math.max(1, startLine);
|
|
668
|
-
const to = Math.min(endLine, lines.length);
|
|
669
|
-
if (to < from) return "";
|
|
670
|
-
return lines.slice(from - 1, to).join("\n");
|
|
671
|
-
}
|
|
672
|
-
//#endregion
|
|
673
797
|
//#region src/lib/server-lock.ts
|
|
674
798
|
function lockPath(repoRoot) {
|
|
675
799
|
return join(getProjectStorageDir(repoRoot), "server.json");
|
|
@@ -711,4 +835,4 @@ function removeServerLock(repoRoot) {
|
|
|
711
835
|
} catch {}
|
|
712
836
|
}
|
|
713
837
|
//#endregion
|
|
714
|
-
export {
|
|
838
|
+
export { toSafeRelativePath as C, isSafePath as S, getUntrackedFilePathsAsync as _, formatComments as a, listRepoFiles as b, getFileContent as c, getMergeStatus as d, getProjectStorageDir as f, getTabSizeForFiles as g, getShowDiff as h, writeServerLock as i, getGitDiffAsync as l, getRepoRoot as m, readServerLock as n, getBranchName as o, getRepoName as p, removeServerLock as r, getCustomGitDiffAsync as s, isLockAlive as t, getHunkHistory as u, gitAddFile as v, revertHunk as x, isGitRepo as y };
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "diffing",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "local-first CLI for reviewing, navigating, and discussing git diffs with AI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"packageManager": "pnpm@10.32.1",
|
|
7
8
|
"homepage": "https://github.com/ahmedragab20/diffing",
|
|
8
9
|
"repository": {
|
|
9
10
|
"type": "git",
|
|
@@ -24,6 +25,23 @@
|
|
|
24
25
|
"files": [
|
|
25
26
|
"dist"
|
|
26
27
|
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "vite build && tsdown && pnpm run build:tui",
|
|
30
|
+
"build:ts": "vite build && tsdown",
|
|
31
|
+
"build:tui": "cargo build --release --manifest-path crates/diffing-tui/Cargo.toml",
|
|
32
|
+
"build:tui:debug": "cargo build --manifest-path crates/diffing-tui/Cargo.toml",
|
|
33
|
+
"changeset": "changeset",
|
|
34
|
+
"dev:client": "vite",
|
|
35
|
+
"dev:server": "tsx src/cli.ts --no-open --port 3433",
|
|
36
|
+
"dev:tui": "cargo run --release --manifest-path crates/diffing-tui/Cargo.toml --",
|
|
37
|
+
"test": "vitest run && pnpm run test:tui",
|
|
38
|
+
"test:ts": "vitest run",
|
|
39
|
+
"test:tui": "cargo test --manifest-path crates/diffing-tui/Cargo.toml",
|
|
40
|
+
"test:watch": "vitest",
|
|
41
|
+
"prepublishOnly": "pnpm run build",
|
|
42
|
+
"release": "pnpm run build && changeset publish",
|
|
43
|
+
"version-packages": "changeset version"
|
|
44
|
+
},
|
|
27
45
|
"dependencies": {
|
|
28
46
|
"@base-ui-components/react": "1.0.0-rc.0",
|
|
29
47
|
"@ff-labs/fff-node": "^0.8.4",
|
|
@@ -36,10 +54,14 @@
|
|
|
36
54
|
"@tanstack/react-store": "^0.11.0",
|
|
37
55
|
"editorconfig": "^3.0.2",
|
|
38
56
|
"get-port": "^7.2.0",
|
|
39
|
-
"highlight.js": "^11.11.1",
|
|
40
57
|
"hono": "^4.7.6",
|
|
41
|
-
"
|
|
58
|
+
"mermaid": "^11.15.0",
|
|
42
59
|
"open": "^11.0.0",
|
|
60
|
+
"react-markdown": "^10.1.0",
|
|
61
|
+
"rehype-highlight": "^7.0.2",
|
|
62
|
+
"rehype-sanitize": "^6.0.0",
|
|
63
|
+
"remark-breaks": "^4.0.0",
|
|
64
|
+
"remark-gfm": "^4.0.1",
|
|
43
65
|
"web-haptics": "0.0.6",
|
|
44
66
|
"zod": "^4.4.3"
|
|
45
67
|
},
|
|
@@ -62,15 +84,5 @@
|
|
|
62
84
|
"typescript": "^6.0.2",
|
|
63
85
|
"vite": "^8.0.3",
|
|
64
86
|
"vitest": "^4.1.7"
|
|
65
|
-
},
|
|
66
|
-
"scripts": {
|
|
67
|
-
"build": "vite build && tsdown",
|
|
68
|
-
"changeset": "changeset",
|
|
69
|
-
"dev:client": "vite",
|
|
70
|
-
"dev:server": "tsx src/cli.ts --no-open --port 3433",
|
|
71
|
-
"test": "vitest run",
|
|
72
|
-
"test:watch": "vitest",
|
|
73
|
-
"release": "pnpm run build && changeset publish",
|
|
74
|
-
"version-packages": "changeset version"
|
|
75
87
|
}
|
|
76
|
-
}
|
|
88
|
+
}
|