codemini-cli 0.6.2 → 0.6.4
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/codemini-web/dist/assets/{AboutDialog-CBmrZqhV.js → AboutDialog-MRopwNIL.js} +2 -2
- package/codemini-web/dist/assets/CodeWikiPanel-UpK5xGE3.js +1 -0
- package/codemini-web/dist/assets/ConfigDialog-CNl28wsj.js +1 -0
- package/codemini-web/dist/assets/GitDiffDialog-gSysUg2J.js +3 -0
- package/codemini-web/dist/assets/MemoryDialog-DFUmo3Kl.js +3 -0
- package/codemini-web/dist/assets/MessageBubble-CGnnViv0.js +12 -0
- package/codemini-web/dist/assets/PatchDiff-B8rwvEg5.js +230 -0
- package/codemini-web/dist/assets/ProjectSelector-BF59M1zb.js +1 -0
- package/codemini-web/dist/assets/SkillDialog-CQTjbSiw.js +8 -0
- package/codemini-web/dist/assets/SoulDialog-BLjUGqqB.js +1 -0
- package/codemini-web/dist/assets/{angular-html-DQ1gtQ6R.js → angular-html-BtqWAyby.js} +1 -1
- package/codemini-web/dist/assets/{angular-html-kg4tCYym.js → angular-html-Dqm-Ium4.js} +1 -1
- package/codemini-web/dist/assets/{angular-ts-C_VTyikG.js → angular-ts-BUlY5dZZ.js} +1 -1
- package/codemini-web/dist/assets/{angular-ts-QUaQh54x.js → angular-ts-DXMH5pbz.js} +1 -1
- package/codemini-web/dist/assets/{apl-D2YQXnhn.js → apl-B9jkvghZ.js} +1 -1
- package/codemini-web/dist/assets/{apl-DTyfz60o.js → apl-Bt--uCmj.js} +1 -1
- package/codemini-web/dist/assets/{astro-DrBiKBx0.js → astro-P-Wk2Uo3.js} +1 -1
- package/codemini-web/dist/assets/{astro-STdMQy7_.js → astro-ZfS8gVPQ.js} +1 -1
- package/codemini-web/dist/assets/{blade-BzcRYrK8.js → blade-CxVOILUn.js} +1 -1
- package/codemini-web/dist/assets/{blade-DV-5zppA.js → blade-DsiMSXb3.js} +1 -1
- package/codemini-web/dist/assets/{bsl-D8KU0pjR.js → bsl-9Rfj8X2G.js} +1 -1
- package/codemini-web/dist/assets/{bsl-JaCMWPaY.js → bsl-CZ9gUG7G.js} +1 -1
- package/codemini-web/dist/assets/{cairo-D7Xpkdmw.js → cairo-B8t0-PSB.js} +1 -1
- package/codemini-web/dist/assets/{cairo-DcJUH2W4.js → cairo-CZcbsYHl.js} +1 -1
- package/codemini-web/dist/assets/chevron-right--85xg7qk.js +1 -0
- package/codemini-web/dist/assets/{chunk-BO2N2NFS-C-dwTHqR.js → chunk-BO2N2NFS-6uELoidu.js} +6 -6
- package/codemini-web/dist/assets/{cobol-VahErUC5.js → cobol-BdhxDqSp.js} +1 -1
- package/codemini-web/dist/assets/{cobol-DcObg-T7.js → cobol-C67LYEki.js} +1 -1
- package/codemini-web/dist/assets/{coffee-B5QkIGo_.js → coffee-C_zREOQP.js} +1 -1
- package/codemini-web/dist/assets/{coffee-eHrF22jH.js → coffee-DYSdownS.js} +1 -1
- package/codemini-web/dist/assets/{cpp-hpmt0Dm0.js → cpp-BcL70P81.js} +1 -1
- package/codemini-web/dist/assets/{cpp-oPWeBIxQ.js → cpp-CmF4N5qy.js} +1 -1
- package/codemini-web/dist/assets/{crystal-CoivzC9J.js → crystal-CoqbT5f8.js} +1 -1
- package/codemini-web/dist/assets/{crystal-s_8obDZh.js → crystal-N7P3W5Mw.js} +1 -1
- package/codemini-web/dist/assets/{edge--dOGTygN.js → edge-DrMWCZ8c.js} +1 -1
- package/codemini-web/dist/assets/{edge-C-DECmFd.js → edge-DytV3yX5.js} +1 -1
- package/codemini-web/dist/assets/{elixir-9z9mJoua.js → elixir-BLpitXJw.js} +1 -1
- package/codemini-web/dist/assets/{elixir-D3BiPlt5.js → elixir-CNV7hmh2.js} +1 -1
- package/codemini-web/dist/assets/{elm-BuOfOpho.js → elm-C5ZqKzP8.js} +1 -1
- package/codemini-web/dist/assets/{elm-DjcEOkt6.js → elm-DuNA2Kle.js} +1 -1
- package/codemini-web/dist/assets/{erb-B6UlpZlF.js → erb-Cx6GPjju.js} +1 -1
- package/codemini-web/dist/assets/{erb-omHMX7PR.js → erb-CxvZayEs.js} +1 -1
- package/codemini-web/dist/assets/{erlang-DJdyEhn7.js → erlang-3or6Qr_S.js} +1 -1
- package/codemini-web/dist/assets/{erlang-l2na0rr-.js → erlang-CdOz9ruD.js} +1 -1
- package/codemini-web/dist/assets/{fortran-fixed-form-72xY_C5B.js → fortran-fixed-form-BmD2L0UY.js} +1 -1
- package/codemini-web/dist/assets/{fortran-fixed-form-Dyncprn4.js → fortran-fixed-form-Hy2szps7.js} +1 -1
- package/codemini-web/dist/assets/{fsharp-CAeGcLFg.js → fsharp-CgGHW39K.js} +1 -1
- package/codemini-web/dist/assets/{fsharp-D6WYKxtq.js → fsharp-DgKUr7h2.js} +1 -1
- package/codemini-web/dist/assets/{gdresource-Bac2fAQZ.js → gdresource-BqgTfeIa.js} +1 -1
- package/codemini-web/dist/assets/{gdresource-D9tlxSca.js → gdresource-D6abIutu.js} +1 -1
- package/codemini-web/dist/assets/{git-commit-BQ43t81h.js → git-commit-CPnaL3nl.js} +1 -1
- package/codemini-web/dist/assets/{git-commit-CDZnUqIF.js → git-commit-DBwdkqC2.js} +1 -1
- package/codemini-web/dist/assets/{git-rebase-CrM8c9uR.js → git-rebase-BVjWygdV.js} +1 -1
- package/codemini-web/dist/assets/{git-rebase-nf_-tAIT.js → git-rebase-CLt-2irw.js} +1 -1
- package/codemini-web/dist/assets/{glimmer-js-CmAPRjq-.js → glimmer-js-BhZXPPf_.js} +1 -1
- package/codemini-web/dist/assets/{glimmer-js-BG6a3MVV.js → glimmer-js-bG2aM9pf.js} +1 -1
- package/codemini-web/dist/assets/{glimmer-ts-WUsACCRt.js → glimmer-ts-BZwU8tUk.js} +1 -1
- package/codemini-web/dist/assets/{glimmer-ts-CQha3IIl.js → glimmer-ts-D6GU3-HZ.js} +1 -1
- package/codemini-web/dist/assets/{glsl-CAJiER_N.js → glsl-BZXoHx-5.js} +1 -1
- package/codemini-web/dist/assets/{glsl-CUfWCqOt.js → glsl-BsJMlsXZ.js} +1 -1
- package/codemini-web/dist/assets/{graphql-B-xWjhGC.js → graphql-Bzui-_oF.js} +1 -1
- package/codemini-web/dist/assets/{graphql-CufH1FQw.js → graphql-lozg2JzK.js} +1 -1
- package/codemini-web/dist/assets/{hack-6ZyX-jpl.js → hack-BIx3oBuG.js} +1 -1
- package/codemini-web/dist/assets/{hack-D9TV3mFw.js → hack-Dl73UNBo.js} +1 -1
- package/codemini-web/dist/assets/{haml-CXPCOKlR.js → haml-BL3Pq-bL.js} +1 -1
- package/codemini-web/dist/assets/{haml-zf3skXy8.js → haml-CvBskpbA.js} +1 -1
- package/codemini-web/dist/assets/{handlebars-BFZlhIIV.js → handlebars-Ca8Ew3WT.js} +1 -1
- package/codemini-web/dist/assets/{handlebars-BzLrTccQ.js → handlebars-Dl0DZ9iU.js} +1 -1
- package/codemini-web/dist/assets/{highlighted-body-OFNGDK62-BlOR-p_j.js → highlighted-body-OFNGDK62-gb1UMBZ5.js} +1 -1
- package/codemini-web/dist/assets/{html-DLN1MsZQ.js → html-CCOAFbPU.js} +1 -1
- package/codemini-web/dist/assets/{html-CZRPtk7M.js → html-DFeJ4St6.js} +1 -1
- package/codemini-web/dist/assets/{html-derivative-DGaxN6Jm.js → html-derivative-BN80HtRR.js} +1 -1
- package/codemini-web/dist/assets/{html-derivative-Dryc40mO.js → html-derivative-BPYIQd1q.js} +1 -1
- package/codemini-web/dist/assets/{http-B3D7H2pi.js → http-BT0m2fV8.js} +1 -1
- package/codemini-web/dist/assets/{http-CD8xd_ys.js → http-BaSHFqsp.js} +1 -1
- package/codemini-web/dist/assets/{hurl-4R1-_fJo.js → hurl-Cu0t_0Ag.js} +1 -1
- package/codemini-web/dist/assets/{hurl-DhA9rL1f.js → hurl-QdCmCx_B.js} +1 -1
- package/codemini-web/dist/assets/{hxml-BNblpm3P.js → hxml-DlOl0PEf.js} +1 -1
- package/codemini-web/dist/assets/{hxml-y50fEZfK.js → hxml-IWjzRLpN.js} +1 -1
- package/codemini-web/dist/assets/index-1xqD0R5t.css +2 -0
- package/codemini-web/dist/assets/index-CDXQGwPs.js +65 -0
- package/codemini-web/dist/assets/{input-CNJXW0J8.js → input-Ca8O_061.js} +1 -1
- package/codemini-web/dist/assets/{jinja-BGFo9cp_.js → jinja-Cnv9YtxF.js} +1 -1
- package/codemini-web/dist/assets/{jinja-CMJRtHk5.js → jinja-CzKj-PyV.js} +1 -1
- package/codemini-web/dist/assets/{jison-CjADtx7J.js → jison-CMHmT6Zn.js} +1 -1
- package/codemini-web/dist/assets/{jison-DZG53562.js → jison-V0queBoO.js} +1 -1
- package/codemini-web/dist/assets/{julia-CrDH-yy9.js → julia-D6Tp2lkv.js} +1 -1
- package/codemini-web/dist/assets/{julia-DGoXLnGd.js → julia-ssnM4-62.js} +1 -1
- package/codemini-web/dist/assets/{just-BV8ObQSd.js → just-BYVm1Mrm.js} +1 -1
- package/codemini-web/dist/assets/{just-bFDeah4I.js → just-DNL8d4mn.js} +1 -1
- package/codemini-web/dist/assets/{latex-DDcspDwa.js → latex--PKG7pkB.js} +1 -1
- package/codemini-web/dist/assets/{latex-DHgb1D3g.js → latex-BKz2_Nxu.js} +1 -1
- package/codemini-web/dist/assets/lib-BXWizt13.js +1 -0
- package/codemini-web/dist/assets/{liquid-DY_Nh1yB.js → liquid-CmT9c2rW.js} +1 -1
- package/codemini-web/dist/assets/{liquid-CodJB6Oo.js → liquid-CnfwjcTC.js} +1 -1
- package/codemini-web/dist/assets/{lua-CSNL2IG5.js → lua-CG2sJZNs.js} +1 -1
- package/codemini-web/dist/assets/{lua-Mbb_FM_D.js → lua-D82-t9Zc.js} +1 -1
- package/codemini-web/dist/assets/{marko-CoJz_b4R.js → marko-BXWoQ9lL.js} +1 -1
- package/codemini-web/dist/assets/{marko-BtH_ko92.js → marko-CJF04FnX.js} +1 -1
- package/codemini-web/dist/assets/{mdc-U2Od-Be6.js → mdc-DjUuZ2FY.js} +1 -1
- package/codemini-web/dist/assets/{mdc-pc5Bd-NW.js → mdc-uFBHmEgm.js} +1 -1
- package/codemini-web/dist/assets/mermaid-GHXKKRXX-ROliF8Yd.js +1 -0
- package/codemini-web/dist/assets/{nextflow-C240AutA.js → nextflow-CK5HLJvq.js} +1 -1
- package/codemini-web/dist/assets/{nextflow-dLJhzX3Z.js → nextflow-S7dXFF9l.js} +1 -1
- package/codemini-web/dist/assets/{nginx-CeVyuhn6.js → nginx-3W9nM9y_.js} +1 -1
- package/codemini-web/dist/assets/{nginx-9UIFC5W_.js → nginx-BC64-3-i.js} +1 -1
- package/codemini-web/dist/assets/{nim-A60PrBkG.js → nim-DWppal1v.js} +1 -1
- package/codemini-web/dist/assets/{nim-DhQ1Hs8s.js → nim-x_81C3Qr.js} +1 -1
- package/codemini-web/dist/assets/{pencil-CARzRgk1.js → pencil-BhT11Ztp.js} +1 -1
- package/codemini-web/dist/assets/{perl-BPmyA-C2.js → perl-C6Dd0zxb.js} +1 -1
- package/codemini-web/dist/assets/{perl-CA0CUhlR.js → perl-Drip2S24.js} +1 -1
- package/codemini-web/dist/assets/{php-aSpTH15w.js → php-9sDqPlZW.js} +1 -1
- package/codemini-web/dist/assets/{php-DFR1z6f_.js → php-BbiCqfrp.js} +1 -1
- package/codemini-web/dist/assets/{pug-DXmP4Dd5.js → pug-BYheLFcw.js} +1 -1
- package/codemini-web/dist/assets/{pug-2MsinVHa.js → pug-D4U6GWCU.js} +1 -1
- package/codemini-web/dist/assets/{qml-Cp-MkXo2.js → qml-C7Gvixtn.js} +1 -1
- package/codemini-web/dist/assets/{qml-Dmd77dfv.js → qml-D3LW5Eh4.js} +1 -1
- package/codemini-web/dist/assets/{razor-BH58TmZI.js → razor-CeMDYz78.js} +1 -1
- package/codemini-web/dist/assets/{razor-knNn5G4N.js → razor-wtlbOx1Y.js} +1 -1
- package/codemini-web/dist/assets/refresh-cw-D7R5Lth6.js +1 -0
- package/codemini-web/dist/assets/{rst-BkVCrdGo.js → rst-4NiHKVzB.js} +1 -1
- package/codemini-web/dist/assets/{rst-l2oLaq8i.js → rst-CUgtqtsm.js} +1 -1
- package/codemini-web/dist/assets/{ruby-B4GtprLK.js → ruby-DJfS371J.js} +1 -1
- package/codemini-web/dist/assets/{ruby-gJeF3z-Y.js → ruby-DQmpjmxU.js} +1 -1
- package/codemini-web/dist/assets/{sas-CTgoo8hu.js → sas-B3ML-BPY.js} +1 -1
- package/codemini-web/dist/assets/{sas-Dav6qQnM.js → sas-BXFb3Byc.js} +1 -1
- package/codemini-web/dist/assets/{scss-B8ysOo22.js → scss-By7PHVyf.js} +1 -1
- package/codemini-web/dist/assets/{scss-C8Gq31Qt.js → scss-CQGBghOa.js} +1 -1
- package/codemini-web/dist/assets/select-DBvcHBzs.js +1 -0
- package/codemini-web/dist/assets/{shaderlab-BaYU-HWs.js → shaderlab-Ds6Ob14m.js} +1 -1
- package/codemini-web/dist/assets/{shaderlab-CSb6CBXg.js → shaderlab-jhHUXThs.js} +1 -1
- package/codemini-web/dist/assets/{shellsession-Ms8iC_in.js → shellsession-1pj9xPto.js} +1 -1
- package/codemini-web/dist/assets/{shellsession-eIO2JTpk.js → shellsession-mbgkQZNs.js} +1 -1
- package/codemini-web/dist/assets/{soy-CnmcxzZM.js → soy-Brdxowwc.js} +1 -1
- package/codemini-web/dist/assets/{soy-U7sqkat1.js → soy-CyoIOmkE.js} +1 -1
- package/codemini-web/dist/assets/{sparql-DrRAT0nC.js → sparql-D050l-1j.js} +1 -1
- package/codemini-web/dist/assets/{sparql-J1VOnnwM.js → sparql-EV95tWuj.js} +1 -1
- package/codemini-web/dist/assets/{stata-C07HETWZ.js → stata-Cxm-fX20.js} +1 -1
- package/codemini-web/dist/assets/{stata-C84Azx6N.js → stata-rcB48Bwa.js} +1 -1
- package/codemini-web/dist/assets/{surrealql-CHm1_yMm.js → surrealql-BEIq2Ti9.js} +1 -1
- package/codemini-web/dist/assets/{surrealql-D_Sm2j7-.js → surrealql-C89H8_VG.js} +1 -1
- package/codemini-web/dist/assets/{svelte-BgklcIcA.js → svelte-DLivETBJ.js} +1 -1
- package/codemini-web/dist/assets/{svelte-UDeamd-l.js → svelte-DVuJzFhW.js} +1 -1
- package/codemini-web/dist/assets/{templ-C1aXNqxr.js → templ-DCO78tPK.js} +1 -1
- package/codemini-web/dist/assets/{templ-Dej5xCfm.js → templ-Dr4toWAi.js} +1 -1
- package/codemini-web/dist/assets/{tex-CwV6ECg2.js → tex-C26OlX33.js} +1 -1
- package/codemini-web/dist/assets/{tex-DqduegnD.js → tex-CAFucSbn.js} +1 -1
- package/codemini-web/dist/assets/{trash-2-BvANH-oV.js → trash-2-BfNZcWfX.js} +1 -1
- package/codemini-web/dist/assets/{ts-tags-jpfdYtbg.js → ts-tags-DXz1U_l8.js} +1 -1
- package/codemini-web/dist/assets/{ts-tags-JHISWk_W.js → ts-tags-DxtnKICy.js} +1 -1
- package/codemini-web/dist/assets/{twig-Co8p9s-G.js → twig-BOjawstu.js} +1 -1
- package/codemini-web/dist/assets/{twig-Cq6hSxza.js → twig-l2jHuCJP.js} +1 -1
- package/codemini-web/dist/assets/{vue-CopUaTTK.js → vue-DTExrAHq.js} +1 -1
- package/codemini-web/dist/assets/{vue-CL6MdYNh.js → vue-d4Ps-pL3.js} +1 -1
- package/codemini-web/dist/assets/{vue-html-BJ2qlvpA.js → vue-html-Cc_wxOgn.js} +1 -1
- package/codemini-web/dist/assets/{vue-html-BkstOd36.js → vue-html-DF9b1rb0.js} +1 -1
- package/codemini-web/dist/assets/{vue-vine-BpJg_Jgw.js → vue-vine-A_lRwVWt.js} +1 -1
- package/codemini-web/dist/assets/{vue-vine-kdYS8aKZ.js → vue-vine-BDiNGm6C.js} +1 -1
- package/codemini-web/dist/assets/{xml-BVIbPGAO.js → xml-BUsFQ36n.js} +1 -1
- package/codemini-web/dist/assets/{xml-Cd8Ewme9.js → xml-DDsJXW9N.js} +1 -1
- package/codemini-web/dist/assets/{xsl-DsYdc3fS.js → xsl-DjgS9HxR.js} +1 -1
- package/codemini-web/dist/assets/{xsl-JOQu_a5N.js → xsl-TnKTzvHo.js} +1 -1
- package/codemini-web/dist/index.html +2 -2
- package/codemini-web/lib/runtime-bridge.js +325 -296
- package/codemini-web/server.js +482 -276
- package/package.json +1 -1
- package/src/core/agent-loop.js +188 -97
- package/src/core/chat-runtime.js +674 -571
- package/src/core/command-policy.js +73 -23
- package/src/core/config-store.js +11 -3
- package/src/core/git-oplog-change-tracker.js +387 -0
- package/src/core/non-git-backup.js +116 -0
- package/src/core/paths.js +123 -123
- package/src/core/session-store.js +148 -99
- package/src/core/tools.js +474 -396
- package/src/tui/chat-app.js +196 -56
- package/codemini-web/dist/assets/CodeWikiPanel-BjI4vz9H.js +0 -1
- package/codemini-web/dist/assets/ConfigDialog-hxEIuIXJ.js +0 -1
- package/codemini-web/dist/assets/GitDiffDialog-CVpmPcGi.js +0 -222
- package/codemini-web/dist/assets/MessageBubble-BkkfePXe.js +0 -6
- package/codemini-web/dist/assets/ProjectSelector-CjE9gbEY.js +0 -1
- package/codemini-web/dist/assets/SkillDialog-CpX5c2q5.js +0 -6
- package/codemini-web/dist/assets/SoulDialog-5ZMpAJl3.js +0 -1
- package/codemini-web/dist/assets/index-BkhgO3hd.js +0 -65
- package/codemini-web/dist/assets/index-COyr1sc3.css +0 -2
- package/codemini-web/dist/assets/lib-DQpX2ek0.js +0 -11
- package/codemini-web/dist/assets/lib-Dj6FJSN8.js +0 -1
- package/codemini-web/dist/assets/mermaid-GHXKKRXX-DV0jg4UB.js +0 -1
- package/codemini-web/dist/assets/select-BQ3BvnG8.js +0 -1
- /package/codemini-web/dist/assets/{abap-8gQxhw9X.js → abap-B7RnWQOG.js} +0 -0
- /package/codemini-web/dist/assets/{abap-DKGmjV0m.js → abap-NDM6s5zQ.js} +0 -0
- /package/codemini-web/dist/assets/{actionscript-3-Bvx2-wHH.js → actionscript-3-C9nBr3Mh.js} +0 -0
- /package/codemini-web/dist/assets/{actionscript-3-PQHI9sRP.js → actionscript-3-CRl2BRXz.js} +0 -0
- /package/codemini-web/dist/assets/{ada-7dCRqcEc.js → ada-BCQmYIk6.js} +0 -0
- /package/codemini-web/dist/assets/{ada-DXyixiJc.js → ada-CySgk42_.js} +0 -0
- /package/codemini-web/dist/assets/{andromeeda-CvHLbWZU.js → andromeeda-Bnm9WW1a.js} +0 -0
- /package/codemini-web/dist/assets/{andromeeda-D2bWTgXr.js → andromeeda-szAb-NZx.js} +0 -0
- /package/codemini-web/dist/assets/{apache-DuwFT_ko.js → apache-B22kDdQt.js} +0 -0
- /package/codemini-web/dist/assets/{apache-r4zD7Rt3.js → apache-CQgWNR0K.js} +0 -0
- /package/codemini-web/dist/assets/{apex-D3aemokf.js → apex-BkGtsu4e.js} +0 -0
- /package/codemini-web/dist/assets/{apex-ZrILV9y9.js → apex-CFa_x2c9.js} +0 -0
- /package/codemini-web/dist/assets/{applescript-B2uvrvew.js → applescript-CCGt--QU.js} +0 -0
- /package/codemini-web/dist/assets/{applescript-QewDI2Hm.js → applescript-Cb-r3lIv.js} +0 -0
- /package/codemini-web/dist/assets/{ara-CAKYVeDX.js → ara-CJYv1XlV.js} +0 -0
- /package/codemini-web/dist/assets/{ara-bfzpmn9d.js → ara-DKlv0ib1.js} +0 -0
- /package/codemini-web/dist/assets/{asciidoc-CN-ydgfB.js → asciidoc-BUOdyOiP.js} +0 -0
- /package/codemini-web/dist/assets/{asciidoc-xYtH5EEV.js → asciidoc-DxgPoKvx.js} +0 -0
- /package/codemini-web/dist/assets/{asm-DsgOTp4c.js → asm-2LyQSByb.js} +0 -0
- /package/codemini-web/dist/assets/{asm-DuNyKkDV.js → asm-BVk_pKLT.js} +0 -0
- /package/codemini-web/dist/assets/{aurora-x-CUFqx0Kt.js → aurora-x-B7Ot8iN2.js} +0 -0
- /package/codemini-web/dist/assets/{aurora-x-mlfFqJAh.js → aurora-x-DfOR6O80.js} +0 -0
- /package/codemini-web/dist/assets/{awk-BDSWDVpS.js → awk-CRf4hi6L.js} +0 -0
- /package/codemini-web/dist/assets/{awk-DETgsRcQ.js → awk-adfNbTQc.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-dark-BTeHke7b.js → ayu-dark-ADZF52JZ.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-dark-tcpgNy3s.js → ayu-dark-CqtoqjuU.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-light-B3O22CFD.js → ayu-light-CMMeLqXc.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-light-CoZXvb4i.js → ayu-light-OVSih2Vp.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-mirage-DkAXwBmm.js → ayu-mirage-BCL1vSWF.js} +0 -0
- /package/codemini-web/dist/assets/{ayu-mirage-DlGy8b5I.js → ayu-mirage-BZvrYN67.js} +0 -0
- /package/codemini-web/dist/assets/{ballerina-Dj9SHEWp.js → ballerina-D3rdtcDY.js} +0 -0
- /package/codemini-web/dist/assets/{ballerina-eIQtFtZN.js → ballerina-G1jH5Moz.js} +0 -0
- /package/codemini-web/dist/assets/{bat-DVPhDFws.js → bat-BRck8_tt.js} +0 -0
- /package/codemini-web/dist/assets/{bat-Dr7SKqI2.js → bat-CHXtPpft.js} +0 -0
- /package/codemini-web/dist/assets/{beancount-C5lGUCpK.js → beancount-CvA0H4kE.js} +0 -0
- /package/codemini-web/dist/assets/{beancount-DRh4LoEp.js → beancount-EfboDiXG.js} +0 -0
- /package/codemini-web/dist/assets/{berry-BJPWN0aG.js → berry-CnzAF9lD.js} +0 -0
- /package/codemini-web/dist/assets/{berry-C-53c7Cz.js → berry-DAhQzFBm.js} +0 -0
- /package/codemini-web/dist/assets/{bibtex-BXZl-zGT.js → bibtex-CYUaqfOv.js} +0 -0
- /package/codemini-web/dist/assets/{bibtex-c-0Qlbu0.js → bibtex-CanpD3m2.js} +0 -0
- /package/codemini-web/dist/assets/{bicep-CCk_fREF.js → bicep-Cc0u08ve.js} +0 -0
- /package/codemini-web/dist/assets/{bicep-DUhze7H3.js → bicep-JoteVAmD.js} +0 -0
- /package/codemini-web/dist/assets/{bird2-D_94N4Us.js → bird2-BmGSmafQ.js} +0 -0
- /package/codemini-web/dist/assets/{bird2-DIkIj7Bl.js → bird2-CUmLoLjb.js} +0 -0
- /package/codemini-web/dist/assets/{c-6DvQDc19.js → c-Ce4Vw5YJ.js} +0 -0
- /package/codemini-web/dist/assets/{c-C6aegu_R.js → c-DKLNAy6n.js} +0 -0
- /package/codemini-web/dist/assets/{c3-CUFd2ak_.js → c3-Bld9q8eN.js} +0 -0
- /package/codemini-web/dist/assets/{c3-_P-DNRtg.js → c3-Cp6mH0y7.js} +0 -0
- /package/codemini-web/dist/assets/{cadence-CRyyaA0J.js → cadence-CAWv0bgn.js} +0 -0
- /package/codemini-web/dist/assets/{cadence-zuA3Lqsu.js → cadence-_3OaglmQ.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-frappe-C4xh_RpD.js → catppuccin-frappe-Dn0XJ8jj.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-frappe-CptwRcV-.js → catppuccin-frappe-gRmOBxIl.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-latte-B5zTan83.js → catppuccin-latte-CNKGC9SI.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-latte-ZIzlVBYe.js → catppuccin-latte-D25Kwd8S.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-macchiato-D9kD7BY6.js → catppuccin-macchiato-Bc6w_RYC.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-macchiato-DOZXEuSH.js → catppuccin-macchiato-CjoU0lf6.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-mocha-DJlDggGb.js → catppuccin-mocha-DQ4pZxz-.js} +0 -0
- /package/codemini-web/dist/assets/{catppuccin-mocha-rnm_6i_u.js → catppuccin-mocha-Di4PH8Ri.js} +0 -0
- /package/codemini-web/dist/assets/{clarity-CRWl5goA.js → clarity-BnHuUVUS.js} +0 -0
- /package/codemini-web/dist/assets/{clarity-Dp-fzxYs.js → clarity-CVKtZWJu.js} +0 -0
- /package/codemini-web/dist/assets/{clojure-85kagXuc.js → clojure-BBjzfV1L.js} +0 -0
- /package/codemini-web/dist/assets/{clojure-Dva5KkQZ.js → clojure-C4w8xKrn.js} +0 -0
- /package/codemini-web/dist/assets/{cmake-5KZO_J3V.js → cmake-Dn2uxUrm.js} +0 -0
- /package/codemini-web/dist/assets/{cmake-BLlH-zTC.js → cmake-DuxpWyxB.js} +0 -0
- /package/codemini-web/dist/assets/{codeowners-CwITHnrC.js → codeowners-BK44uU1e.js} +0 -0
- /package/codemini-web/dist/assets/{codeowners-EEO8moZM.js → codeowners-BYgLRiPG.js} +0 -0
- /package/codemini-web/dist/assets/{codeql-C3IPOiKP.js → codeql-DmJo4bmm.js} +0 -0
- /package/codemini-web/dist/assets/{codeql-DsuZZPKs.js → codeql-comBgh3D.js} +0 -0
- /package/codemini-web/dist/assets/{common-lisp-DQj0fa1s.js → common-lisp-BKAyevA0.js} +0 -0
- /package/codemini-web/dist/assets/{common-lisp-DtIqam2P.js → common-lisp-xmwdM7sj.js} +0 -0
- /package/codemini-web/dist/assets/{coq-BGPtnnb4.js → coq-D004aLp-.js} +0 -0
- /package/codemini-web/dist/assets/{coq-CcjGcL2N.js → coq-DsaqZ5gv.js} +0 -0
- /package/codemini-web/dist/assets/{csharp-Bz4y1fn8.js → csharp-B1bok3CS.js} +0 -0
- /package/codemini-web/dist/assets/{csharp-CvOkmYFZ.js → csharp-BJRWJrkS.js} +0 -0
- /package/codemini-web/dist/assets/{css-DsnEBqY_.js → css-D2Zgfenk.js} +0 -0
- /package/codemini-web/dist/assets/{css-Cqx-Zivz.js → css-DI4Ka_1L.js} +0 -0
- /package/codemini-web/dist/assets/{csv-92JdhrVb.js → csv-BsMY8_5o.js} +0 -0
- /package/codemini-web/dist/assets/{csv-Cz8IGB-r.js → csv-Cx2EO4hN.js} +0 -0
- /package/codemini-web/dist/assets/{cue-BAtFpXsn.js → cue-5NODdLLQ.js} +0 -0
- /package/codemini-web/dist/assets/{cue-DO5iBckt.js → cue-BFvpulfw.js} +0 -0
- /package/codemini-web/dist/assets/{cypher-DrFFccaV.js → cypher-CloxltJj.js} +0 -0
- /package/codemini-web/dist/assets/{cypher-Dt0SBufN.js → cypher-DwXduOcz.js} +0 -0
- /package/codemini-web/dist/assets/{d-BIzkfvy1.js → d-ByN-nCZx.js} +0 -0
- /package/codemini-web/dist/assets/{d-POAmrdpL.js → d-D90yV2l6.js} +0 -0
- /package/codemini-web/dist/assets/{dark-plus-Ci223Kw7.js → dark-plus-BRQ4k4kr.js} +0 -0
- /package/codemini-web/dist/assets/{dark-plus-D-icMr_O.js → dark-plus-CmLXU_Iq.js} +0 -0
- /package/codemini-web/dist/assets/{dart-BA_zGMIh.js → dart-BL-Rg8Jo.js} +0 -0
- /package/codemini-web/dist/assets/{dart-Cv4z4sEx.js → dart-jaYeqpH7.js} +0 -0
- /package/codemini-web/dist/assets/{dax-CArXkuXO.js → dax-CQDoOssZ.js} +0 -0
- /package/codemini-web/dist/assets/{dax-Cw_LNvcO.js → dax-DfINWKOM.js} +0 -0
- /package/codemini-web/dist/assets/{desktop-BRifweK7.js → desktop-DssJfs2S.js} +0 -0
- /package/codemini-web/dist/assets/{desktop-B_uWbpWi.js → desktop-wuqAc75y.js} +0 -0
- /package/codemini-web/dist/assets/{diff-CTnn6Hu3.js → diff-BYMwyQmB.js} +0 -0
- /package/codemini-web/dist/assets/{diff-pSjjL-ZH.js → diff-DGLbp6Xl.js} +0 -0
- /package/codemini-web/dist/assets/{docker-D0ufKJwE.js → docker-B7aZDRTU.js} +0 -0
- /package/codemini-web/dist/assets/{docker-r0L9bSzI.js → docker-CfFDSeZZ.js} +0 -0
- /package/codemini-web/dist/assets/{dotenv-BKm_YkX-.js → dotenv-D3KyAIK0.js} +0 -0
- /package/codemini-web/dist/assets/{dotenv-DU-Uz6AA.js → dotenv-DVXB2U9o.js} +0 -0
- /package/codemini-web/dist/assets/{dracula-BkVbNmMW.js → dracula-6-t2eOMW.js} +0 -0
- /package/codemini-web/dist/assets/{dracula-C5lq8I7X.js → dracula-Dix5im8F.js} +0 -0
- /package/codemini-web/dist/assets/{dracula-soft-Benyby8y.js → dracula-soft-B4TZzIlp.js} +0 -0
- /package/codemini-web/dist/assets/{dracula-soft-QH3ntlSU.js → dracula-soft-DnrYBWgV.js} +0 -0
- /package/codemini-web/dist/assets/{dream-maker-Cp0hXi31.js → dream-maker-CaguOgbF.js} +0 -0
- /package/codemini-web/dist/assets/{dream-maker-DE3sVgWW.js → dream-maker-CjPuR0vx.js} +0 -0
- /package/codemini-web/dist/assets/{emacs-lisp-aMjKKeFP.js → emacs-lisp-BHg7FqFZ.js} +0 -0
- /package/codemini-web/dist/assets/{emacs-lisp-H4-vgzf_.js → emacs-lisp-BosL1Ugg.js} +0 -0
- /package/codemini-web/dist/assets/{everforest-dark-CDp5hxXO.js → everforest-dark-B4IVVaS6.js} +0 -0
- /package/codemini-web/dist/assets/{everforest-dark-KTiMpaXm.js → everforest-dark-DwEzvfit.js} +0 -0
- /package/codemini-web/dist/assets/{everforest-light-vtFhxTqx.js → everforest-light-CNoEiPUu.js} +0 -0
- /package/codemini-web/dist/assets/{everforest-light-yJZ9a76P.js → everforest-light-DnQkIdPL.js} +0 -0
- /package/codemini-web/dist/assets/{fennel-Bruivvq3.js → fennel-BiQcbtTd.js} +0 -0
- /package/codemini-web/dist/assets/{fennel-DNMUz8BE.js → fennel-DG6hK7z2.js} +0 -0
- /package/codemini-web/dist/assets/{fish-C44z9fhZ.js → fish-D3-ok12J.js} +0 -0
- /package/codemini-web/dist/assets/{fish-CaGhpV7s.js → fish-_zY__9L4.js} +0 -0
- /package/codemini-web/dist/assets/{fluent-BsmQk-nO.js → fluent-BBz3hVA9.js} +0 -0
- /package/codemini-web/dist/assets/{fluent-d_qH0cYL.js → fluent-CrjXrDzk.js} +0 -0
- /package/codemini-web/dist/assets/{fortran-free-form-B9mY58s0.js → fortran-free-form-Cyk1FB1e.js} +0 -0
- /package/codemini-web/dist/assets/{fortran-free-form-DYzg4zHf.js → fortran-free-form-Db24aQuN.js} +0 -0
- /package/codemini-web/dist/assets/{gdscript-B_WUGHIs.js → gdscript-CxxY7zMa.js} +0 -0
- /package/codemini-web/dist/assets/{gdscript-xj-VlIRU.js → gdscript-_NYgB0-E.js} +0 -0
- /package/codemini-web/dist/assets/{gdshader-BR6nyn6z.js → gdshader-Bhkdknye.js} +0 -0
- /package/codemini-web/dist/assets/{gdshader-BbYnAK14.js → gdshader-W85lNgcx.js} +0 -0
- /package/codemini-web/dist/assets/{genie-CNeJKHWH.js → genie-2WOhOayX.js} +0 -0
- /package/codemini-web/dist/assets/{genie-CW-a1unw.js → genie-C6BJUbST.js} +0 -0
- /package/codemini-web/dist/assets/{gherkin-By4Zv-ZP.js → gherkin-BsQJenZD.js} +0 -0
- /package/codemini-web/dist/assets/{gherkin-D8z0Dn14.js → gherkin-BzYX5w19.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-BLlNbGxe.js → github-dark-DH2_Q6FX.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-default-DPZ1YWUU.js → github-dark-default-B2Oq-dUJ.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-default-XYu-6ww7.js → github-dark-default-DTF8deNx.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-dimmed-BlMwpJVf.js → github-dark-dimmed-BvtnYOMy.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-dimmed-XAi8Eb3C.js → github-dark-dimmed-D0X0LfLF.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-C2YvJIRl.js → github-dark-fr8BfBxZ.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-high-contrast-D86iyx7L.js → github-dark-high-contrast-BAQfalyp.js} +0 -0
- /package/codemini-web/dist/assets/{github-dark-high-contrast-KRBg57oP.js → github-dark-high-contrast-CQhqa0EF.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-BLj5WXD_.js → github-light-CEqFW-kl.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-default-BLgrdOV4.js → github-light-default-9rPElOua.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-default-BzOWmaf-.js → github-light-default-Co9J0YT2.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-high-contrast-Bm3JPX7v.js → github-light-high-contrast-BFww7Aed.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-high-contrast-Bmexxccr.js → github-light-high-contrast-Drx2T_ea.js} +0 -0
- /package/codemini-web/dist/assets/{github-light-DxDzpZWY.js → github-light-t2gQwbnC.js} +0 -0
- /package/codemini-web/dist/assets/{gleam-BtOZgVle.js → gleam-BjFNd70h.js} +0 -0
- /package/codemini-web/dist/assets/{gleam-Lf_XYEK-.js → gleam-_RSzgxb1.js} +0 -0
- /package/codemini-web/dist/assets/{gn-CY4VHHa6.js → gn-BlAV1bS1.js} +0 -0
- /package/codemini-web/dist/assets/{gn-JO9YMz2t.js → gn-MXj_EEiV.js} +0 -0
- /package/codemini-web/dist/assets/{gnuplot-DjZHg3_f.js → gnuplot-BTJRjb2O.js} +0 -0
- /package/codemini-web/dist/assets/{gnuplot-MPAbQV9r.js → gnuplot-C40vWoS_.js} +0 -0
- /package/codemini-web/dist/assets/{go-D2GlBE5F.js → go-B2Qj-jpc.js} +0 -0
- /package/codemini-web/dist/assets/{go-C6ThH8Hx.js → go-BF9dg2tN.js} +0 -0
- /package/codemini-web/dist/assets/{groovy-1vEGAvvX.js → groovy-42TXi0JD.js} +0 -0
- /package/codemini-web/dist/assets/{groovy-C_xCWdb_.js → groovy-YtV4YqmI.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-hard-DHhjEKTi.js → gruvbox-dark-hard-DN_E1XFW.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-hard-pdBjrsK5.js → gruvbox-dark-hard-DaxQoAo9.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-medium-CL0I2zDn.js → gruvbox-dark-medium-CR6ynfxn.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-medium-Csp4lPEF.js → gruvbox-dark-medium-xNyLsUVI.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-soft-BpNWvgik.js → gruvbox-dark-soft-CrCUBJhA.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-dark-soft-Dy9vkRG2.js → gruvbox-dark-soft-QoKQNR_B.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-hard-CC8CVJp5.js → gruvbox-light-hard-BqLHNay_.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-hard-DO2pUUQV.js → gruvbox-light-hard-C3-JuKAe.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-medium-B_nBvpHM.js → gruvbox-light-medium-676URJw_.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-medium-D2yGUmJd.js → gruvbox-light-medium-86kxSNhL.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-soft-C_9RTTTT.js → gruvbox-light-soft-BGpHIYJO.js} +0 -0
- /package/codemini-web/dist/assets/{gruvbox-light-soft-DuLKkKFi.js → gruvbox-light-soft-ByoztTEu.js} +0 -0
- /package/codemini-web/dist/assets/{haskell-BFZjB68l.js → haskell-C5VEzHiR.js} +0 -0
- /package/codemini-web/dist/assets/{haskell-DfX5asxK.js → haskell-KyntJ58h.js} +0 -0
- /package/codemini-web/dist/assets/{haxe-DDQKctJt.js → haxe-Bnka4w1v.js} +0 -0
- /package/codemini-web/dist/assets/{haxe-Me-TWuvr.js → haxe-DxCG7g2C.js} +0 -0
- /package/codemini-web/dist/assets/{hcl-DUAADz_v.js → hcl-B-KEcm-b.js} +0 -0
- /package/codemini-web/dist/assets/{hcl-Ry3nZWbt.js → hcl-nG8lPt58.js} +0 -0
- /package/codemini-web/dist/assets/{hjson-CGFDmpMn.js → hjson-BUjIWbox.js} +0 -0
- /package/codemini-web/dist/assets/{hjson-DyGphq4K.js → hjson-KcqWy6wG.js} +0 -0
- /package/codemini-web/dist/assets/{hlsl-BKWZVvKK.js → hlsl-CU9ay1Rj.js} +0 -0
- /package/codemini-web/dist/assets/{hlsl-BVEJlW36.js → hlsl-CblrQXA-.js} +0 -0
- /package/codemini-web/dist/assets/{horizon-BZmYXqIF.js → horizon-BDDUNMOh.js} +0 -0
- /package/codemini-web/dist/assets/{horizon-D3wQTjs_.js → horizon-MuIr_z-n.js} +0 -0
- /package/codemini-web/dist/assets/{horizon-bright-D0uooZm5.js → horizon-bright-Km86OX7k.js} +0 -0
- /package/codemini-web/dist/assets/{horizon-bright-Cfh8ud4W.js → horizon-bright-QtrMcZM-.js} +0 -0
- /package/codemini-web/dist/assets/{houston-BUtcOxf9.js → houston-CnK3oLKP.js} +0 -0
- /package/codemini-web/dist/assets/{houston-CGv9NbgY.js → houston-L6-nhcqy.js} +0 -0
- /package/codemini-web/dist/assets/{hy-BqI2sCU2.js → hy-9kqolRdI.js} +0 -0
- /package/codemini-web/dist/assets/{hy-oWi_RwAK.js → hy-V3ipcBGo.js} +0 -0
- /package/codemini-web/dist/assets/{imba-DnUn0wai.js → imba-AWBATAYY.js} +0 -0
- /package/codemini-web/dist/assets/{imba-iwzgkuTD.js → imba-rkedaZRd.js} +0 -0
- /package/codemini-web/dist/assets/{ini-BNaakZQr.js → ini-BIn__beW.js} +0 -0
- /package/codemini-web/dist/assets/{ini-DMV_1xp9.js → ini-P5JLg6LV.js} +0 -0
- /package/codemini-web/dist/assets/{java-CTslCthB.js → java-Bb7gkEG1.js} +0 -0
- /package/codemini-web/dist/assets/{java-DbkCw8gs.js → java-X5SW6zDn.js} +0 -0
- /package/codemini-web/dist/assets/{javascript-BzJBge5U.js → javascript-Cn8UGaJe.js} +0 -0
- /package/codemini-web/dist/assets/{javascript-DqHURDA-.js → javascript-DHaqiI3u.js} +0 -0
- /package/codemini-web/dist/assets/{json-Cu3T5nD7.js → json-BlCKYbAr.js} +0 -0
- /package/codemini-web/dist/assets/{json-DZN6rfPx.js → json-Yl_wWztW.js} +0 -0
- /package/codemini-web/dist/assets/{json5-DSzj6NCq.js → json5-B3B8AE2U.js} +0 -0
- /package/codemini-web/dist/assets/{json5-Y2CuQCK-.js → json5-Cj9weIvR.js} +0 -0
- /package/codemini-web/dist/assets/{jsonc-B30nqSUF.js → jsonc-COLeM0mA.js} +0 -0
- /package/codemini-web/dist/assets/{jsonc-DwzKY8NT.js → jsonc-CwVZHrLL.js} +0 -0
- /package/codemini-web/dist/assets/{jsonl-B7UEa0TN.js → jsonl-CfYcxfNz.js} +0 -0
- /package/codemini-web/dist/assets/{jsonl-C8L12LZq.js → jsonl-my2EVZQF.js} +0 -0
- /package/codemini-web/dist/assets/{jsonnet-DYAV3b_U.js → jsonnet-B351KcBZ.js} +0 -0
- /package/codemini-web/dist/assets/{jsonnet-ZiCJB3SD.js → jsonnet-Cg2yxMWZ.js} +0 -0
- /package/codemini-web/dist/assets/{jssm-6UFVEBGg.js → jssm-CVNVxyp8.js} +0 -0
- /package/codemini-web/dist/assets/{jssm-BOfC2rh1.js → jssm-f9sZK7il.js} +0 -0
- /package/codemini-web/dist/assets/{jsx-AgmFDCOF.js → jsx-C-BZR9Er.js} +0 -0
- /package/codemini-web/dist/assets/{jsx-BEmZt5uE.js → jsx-mn0xQF_s.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-dragon-BVoApXR6.js → kanagawa-dragon-Bg-BKRuP.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-dragon-DF1o80wl.js → kanagawa-dragon-qidiS05d.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-lotus-BkVGQkvY.js → kanagawa-lotus-CVGoMXw8.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-lotus-C-uV5im6.js → kanagawa-lotus-DCJgGK2A.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-wave-BizPisns.js → kanagawa-wave-CVz5XkfW.js} +0 -0
- /package/codemini-web/dist/assets/{kanagawa-wave-Cl5W2OPg.js → kanagawa-wave-CuNbEAGB.js} +0 -0
- /package/codemini-web/dist/assets/{kdl-BCaiqQ4X.js → kdl-B2a5Hdo5.js} +0 -0
- /package/codemini-web/dist/assets/{kdl-Bg7xxjIF.js → kdl-CmBtNZAQ.js} +0 -0
- /package/codemini-web/dist/assets/{kotlin-CNprttl8.js → kotlin-BgCroCiE.js} +0 -0
- /package/codemini-web/dist/assets/{kotlin-DRaoVNCW.js → kotlin-CwntYu9G.js} +0 -0
- /package/codemini-web/dist/assets/{kusto-CW62F42W.js → kusto-Dto5Mt8f.js} +0 -0
- /package/codemini-web/dist/assets/{kusto-D3uRUZFA.js → kusto-DzqQhEgS.js} +0 -0
- /package/codemini-web/dist/assets/{laserwave-B1sGpeV2.js → laserwave-Bf5KiZGG.js} +0 -0
- /package/codemini-web/dist/assets/{laserwave-BypMvj8s.js → laserwave-DqmURGYs.js} +0 -0
- /package/codemini-web/dist/assets/{lean-BbKKg8_U.js → lean-CLemLjY9.js} +0 -0
- /package/codemini-web/dist/assets/{lean-CYwit69O.js → lean-bStt-IHo.js} +0 -0
- /package/codemini-web/dist/assets/{less-6BW8xQaX.js → less-Dycz37IB.js} +0 -0
- /package/codemini-web/dist/assets/{less-CMYX9LBx.js → less-_4Z4Zbgj.js} +0 -0
- /package/codemini-web/dist/assets/{light-plus-CytNlrnF.js → light-plus-BISup5vO.js} +0 -0
- /package/codemini-web/dist/assets/{light-plus-zSYF2DYe.js → light-plus-CUPZt_vJ.js} +0 -0
- /package/codemini-web/dist/assets/{llvm-BFcvUor4.js → llvm-B3vA1z1w.js} +0 -0
- /package/codemini-web/dist/assets/{llvm-OMExIg60.js → llvm-DAbx5jqK.js} +0 -0
- /package/codemini-web/dist/assets/{log-BBfW4u9k.js → log-BRjeW2DW.js} +0 -0
- /package/codemini-web/dist/assets/{log-BrS0_Y6P.js → log-CM4eTPwH.js} +0 -0
- /package/codemini-web/dist/assets/{logo-D8GGcRiY.js → logo-DCYIDlXZ.js} +0 -0
- /package/codemini-web/dist/assets/{logo-L3bKRswG.js → logo-Dyx9NcGm.js} +0 -0
- /package/codemini-web/dist/assets/{luau-B-E69GSh.js → luau-B3LrvOEt.js} +0 -0
- /package/codemini-web/dist/assets/{luau-CZIl0XK4.js → luau-BJOxIq3l.js} +0 -0
- /package/codemini-web/dist/assets/{make-CA9NajZk.js → make-Bep3F-fA.js} +0 -0
- /package/codemini-web/dist/assets/{make-mlZyflos.js → make-BmHGvFNV.js} +0 -0
- /package/codemini-web/dist/assets/{markdown-CppElJDR.js → markdown-BObkjWCp.js} +0 -0
- /package/codemini-web/dist/assets/{markdown-DkXb8qKc.js → markdown-qxcI0Ex1.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-BYnCtUED.js → material-theme-DfbSys7S.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-darker-BNfFk916.js → material-theme-darker-CXzTJODk.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-darker-s0o-qH0l.js → material-theme-darker-DM1OIivA.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-OBz0sIMu.js → material-theme-jZt3rhQh.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-lighter-BXApD6tt.js → material-theme-lighter-C7qz3G7H.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-lighter-D0OJsx_T.js → material-theme-lighter-HtgpH1FU.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-ocean-CKWC7YJB.js → material-theme-ocean-CeFuXoRG.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-ocean-Cl_PEvBf.js → material-theme-ocean-DmL5jMtS.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-palenight-CEFfV_mF.js → material-theme-palenight-BMg4YxS6.js} +0 -0
- /package/codemini-web/dist/assets/{material-theme-palenight-DOTFIR3W.js → material-theme-palenight-CRxwxFv4.js} +0 -0
- /package/codemini-web/dist/assets/{matlab-BiYD-Y7N.js → matlab-BjvFQgI4.js} +0 -0
- /package/codemini-web/dist/assets/{matlab-CwLrY_Ss.js → matlab-CeDNF4Ix.js} +0 -0
- /package/codemini-web/dist/assets/{mdx-OZt5aooY.js → mdx-C_WF1Zvy.js} +0 -0
- /package/codemini-web/dist/assets/{mdx-irdaVRH8.js → mdx-DnKU9cqA.js} +0 -0
- /package/codemini-web/dist/assets/{mermaid-CkReAMVX.js → mermaid-5NtVsV32.js} +0 -0
- /package/codemini-web/dist/assets/{mermaid-mzvznqsh.js → mermaid-CH8Qvaqo.js} +0 -0
- /package/codemini-web/dist/assets/{min-dark-BAbZNtjj.js → min-dark-B95jFnY0.js} +0 -0
- /package/codemini-web/dist/assets/{min-dark-DoFQ3_GG.js → min-dark-BQ7SSUoL.js} +0 -0
- /package/codemini-web/dist/assets/{min-light-BzEisXBR.js → min-light-BGgk1zEi.js} +0 -0
- /package/codemini-web/dist/assets/{min-light-o5Iu4PYL.js → min-light-CqwYUont.js} +0 -0
- /package/codemini-web/dist/assets/{mipsasm-B9ciUcum.js → mipsasm-BIZV50OU.js} +0 -0
- /package/codemini-web/dist/assets/{mipsasm-DONjtc4L.js → mipsasm-OAAwCDEg.js} +0 -0
- /package/codemini-web/dist/assets/{mojo-A9VdeGlD.js → mojo-Bh0Ln9-1.js} +0 -0
- /package/codemini-web/dist/assets/{mojo-CHKQ5hW9.js → mojo-COx3BOEA.js} +0 -0
- /package/codemini-web/dist/assets/{monokai-B8rLeJY_.js → monokai-C988KBom.js} +0 -0
- /package/codemini-web/dist/assets/{monokai-SjnsTHn6.js → monokai-D2lcpl-D.js} +0 -0
- /package/codemini-web/dist/assets/{moonbit-Bb7eeXNq.js → moonbit-C-CVJfEU.js} +0 -0
- /package/codemini-web/dist/assets/{moonbit-CWIHpJf0.js → moonbit-ChOfdbnC.js} +0 -0
- /package/codemini-web/dist/assets/{move-Dy7CmIgW.js → move-DjHf2uHT.js} +0 -0
- /package/codemini-web/dist/assets/{move-MA-qIPBB.js → move-jwG4QUY4.js} +0 -0
- /package/codemini-web/dist/assets/{narrat-Cq6wc063.js → narrat-Bv3slmdi.js} +0 -0
- /package/codemini-web/dist/assets/{narrat-NioX5-_j.js → narrat-CuRqtiDW.js} +0 -0
- /package/codemini-web/dist/assets/{nextflow-groovy-jKlTICX_.js → nextflow-groovy-CYeLXiaP.js} +0 -0
- /package/codemini-web/dist/assets/{nextflow-groovy-BgEBN3iS.js → nextflow-groovy-Dk0GcQpl.js} +0 -0
- /package/codemini-web/dist/assets/{night-owl-C_xVeV9U.js → night-owl-SjOLjRtB.js} +0 -0
- /package/codemini-web/dist/assets/{night-owl-DHaGAA37.js → night-owl-cv0FEuUh.js} +0 -0
- /package/codemini-web/dist/assets/{night-owl-light-B1H1b6pL.js → night-owl-light-CpcKp0OZ.js} +0 -0
- /package/codemini-web/dist/assets/{night-owl-light-C_DkqGGe.js → night-owl-light-DHrEzBAj.js} +0 -0
- /package/codemini-web/dist/assets/{nix-BZVKmCQS.js → nix-BtLlRvM0.js} +0 -0
- /package/codemini-web/dist/assets/{nix-CBdStlCf.js → nix-CcOD1khX.js} +0 -0
- /package/codemini-web/dist/assets/{nord-3ndmnVQb.js → nord-BGjNHkRW.js} +0 -0
- /package/codemini-web/dist/assets/{nord-CrTSutxR.js → nord-DiukgIFA.js} +0 -0
- /package/codemini-web/dist/assets/{nushell-BSMBFYgO.js → nushell-DUqFDYtM.js} +0 -0
- /package/codemini-web/dist/assets/{nushell-C8hgS98n.js → nushell-GFe6C8D1.js} +0 -0
- /package/codemini-web/dist/assets/{objective-c-BUiYTSad.js → objective-c-BUV8AyKp.js} +0 -0
- /package/codemini-web/dist/assets/{objective-c-DGGlUjtt.js → objective-c-Da4gtNmU.js} +0 -0
- /package/codemini-web/dist/assets/{objective-cpp-Bk8vAxra.js → objective-cpp-Du3a_PKx.js} +0 -0
- /package/codemini-web/dist/assets/{objective-cpp-BwY1U2XT.js → objective-cpp-U8QllJj4.js} +0 -0
- /package/codemini-web/dist/assets/{ocaml-D51PiCY5.js → ocaml-4v1g0DKj.js} +0 -0
- /package/codemini-web/dist/assets/{ocaml-KuZ2AeVv.js → ocaml-DwXjJdD9.js} +0 -0
- /package/codemini-web/dist/assets/{odin-CoC4d8pi.js → odin-BlEjbtjb.js} +0 -0
- /package/codemini-web/dist/assets/{odin-CvKV_dam.js → odin-C2CG6fMn.js} +0 -0
- /package/codemini-web/dist/assets/{one-dark-pro-BbI-DLX3.js → one-dark-pro-BL6Mm10K.js} +0 -0
- /package/codemini-web/dist/assets/{one-dark-pro-C9bEA2Dz.js → one-dark-pro-BwcbXd-T.js} +0 -0
- /package/codemini-web/dist/assets/{one-light-DZ_5GYrV.js → one-light-BOQW5zin.js} +0 -0
- /package/codemini-web/dist/assets/{one-light-Do56bP_A.js → one-light-Cx3Ps96S.js} +0 -0
- /package/codemini-web/dist/assets/{openscad-0H6ozqDa.js → openscad-Bs2SxlcB.js} +0 -0
- /package/codemini-web/dist/assets/{openscad-DCmPLSXt.js → openscad-C7dPmpxc.js} +0 -0
- /package/codemini-web/dist/assets/{pascal-BMY45JJO.js → pascal-B6AuHgs_.js} +0 -0
- /package/codemini-web/dist/assets/{pascal-DghlbeLm.js → pascal-ruAwSiza.js} +0 -0
- /package/codemini-web/dist/assets/{pierre-dark-Be9bUWwI.js → pierre-dark-8SGzlI93.js} +0 -0
- /package/codemini-web/dist/assets/{pierre-light-Cq6kCwdb.js → pierre-light-BJzkLopB.js} +0 -0
- /package/codemini-web/dist/assets/{pkl-BlBky-cR.js → pkl-Bdw5peeW.js} +0 -0
- /package/codemini-web/dist/assets/{pkl-BzGvIelR.js → pkl-BuPFXprX.js} +0 -0
- /package/codemini-web/dist/assets/{plastic-C50vuo0c.js → plastic-BiAROaFC.js} +0 -0
- /package/codemini-web/dist/assets/{plastic-CHL2Ec9b.js → plastic-CGwKUd0C.js} +0 -0
- /package/codemini-web/dist/assets/{plsql-B6Eq-lAd.js → plsql-DQ_z5ed2.js} +0 -0
- /package/codemini-web/dist/assets/{plsql-mtL4EDYx.js → plsql-DoG_QfBE.js} +0 -0
- /package/codemini-web/dist/assets/{po-9sFvF4V8.js → po-BvHij3iO.js} +0 -0
- /package/codemini-web/dist/assets/{po-ByS5p8Sz.js → po-DN-mfyYW.js} +0 -0
- /package/codemini-web/dist/assets/{poimandres-Cs9j_baE.js → poimandres-BbdNMHGS.js} +0 -0
- /package/codemini-web/dist/assets/{poimandres-Cu7ZGbJ7.js → poimandres-BdM9d7kg.js} +0 -0
- /package/codemini-web/dist/assets/{polar-COmSbiHW.js → polar-BZ5C-_XH.js} +0 -0
- /package/codemini-web/dist/assets/{polar-Dc9aglFR.js → polar-p_EVOYp2.js} +0 -0
- /package/codemini-web/dist/assets/{postcss-B_ncIJlb.js → postcss-BVVH-mhK.js} +0 -0
- /package/codemini-web/dist/assets/{postcss-D_ArMqNC.js → postcss-C_rkJ2pP.js} +0 -0
- /package/codemini-web/dist/assets/{powerquery-BzHwsYRb.js → powerquery-BBfv-1ce.js} +0 -0
- /package/codemini-web/dist/assets/{powerquery-CnV22x6V.js → powerquery-D2htabf9.js} +0 -0
- /package/codemini-web/dist/assets/{powershell-BGZYhdIS.js → powershell-BcfgzEsQ.js} +0 -0
- /package/codemini-web/dist/assets/{powershell-C6bIwB0M.js → powershell-NfY3J8Uu.js} +0 -0
- /package/codemini-web/dist/assets/{prisma-D5S9vj6g.js → prisma-CMeP8UTm.js} +0 -0
- /package/codemini-web/dist/assets/{prisma-rx7KPY6m.js → prisma-DFAqr_mL.js} +0 -0
- /package/codemini-web/dist/assets/{prolog-BfgX1o85.js → prolog-Cc9yvHML.js} +0 -0
- /package/codemini-web/dist/assets/{prolog-CHVuxG8M.js → prolog-rt-FXeeT.js} +0 -0
- /package/codemini-web/dist/assets/{proto-B_ioi7EM.js → proto-CNBX21YV.js} +0 -0
- /package/codemini-web/dist/assets/{proto-BhkmoXVj.js → proto-CYqgjQUT.js} +0 -0
- /package/codemini-web/dist/assets/{puppet-Brdz8eoo.js → puppet-BAAnN8uU.js} +0 -0
- /package/codemini-web/dist/assets/{puppet-tRlrvlcY.js → puppet-ZnM2F-kY.js} +0 -0
- /package/codemini-web/dist/assets/{purescript-Bwtvgqjl.js → purescript-hu-4rgo5.js} +0 -0
- /package/codemini-web/dist/assets/{purescript-DX3wKXeK.js → purescript-nyLIIaTP.js} +0 -0
- /package/codemini-web/dist/assets/{python-9qQRnRoJ.js → python-Dt6SBvxD.js} +0 -0
- /package/codemini-web/dist/assets/{python-CUtprRpG.js → python-DypNN-aL.js} +0 -0
- /package/codemini-web/dist/assets/{qmldir-BP8WEvx8.js → qmldir-BDEiw2QJ.js} +0 -0
- /package/codemini-web/dist/assets/{qmldir-ftS4SxdQ.js → qmldir-MBz01aYW.js} +0 -0
- /package/codemini-web/dist/assets/{qss-DrZJSiDh.js → qss-B8ZOZZRM.js} +0 -0
- /package/codemini-web/dist/assets/{qss-Mo-j41VR.js → qss-BjslRtqf.js} +0 -0
- /package/codemini-web/dist/assets/{r-BX0U3688.js → r-70IHnSKT.js} +0 -0
- /package/codemini-web/dist/assets/{r-DN76jn9o.js → r-UrwRxojO.js} +0 -0
- /package/codemini-web/dist/assets/{racket-CrTD1_3_.js → racket-emNFhxM0.js} +0 -0
- /package/codemini-web/dist/assets/{racket-DCvJyROq.js → racket-lrWGJ4l7.js} +0 -0
- /package/codemini-web/dist/assets/{raku-Bhig3MAC.js → raku-B1DWL3rh.js} +0 -0
- /package/codemini-web/dist/assets/{raku-CvVnta4t.js → raku-M_VGm79k.js} +0 -0
- /package/codemini-web/dist/assets/{red-CWX-2pbk.js → red-BcYVa2Jk.js} +0 -0
- /package/codemini-web/dist/assets/{red-CztBD70n.js → red-BvMgtCZO.js} +0 -0
- /package/codemini-web/dist/assets/{reg-99qFU_BD.js → reg-DL66XhHR.js} +0 -0
- /package/codemini-web/dist/assets/{reg-C0s7-4s0.js → reg-rRGLqGjW.js} +0 -0
- /package/codemini-web/dist/assets/{regexp-BIytsEkR.js → regexp-CEudNzRJ.js} +0 -0
- /package/codemini-web/dist/assets/{regexp-Cov7gRr6.js → regexp-PTdmEsyL.js} +0 -0
- /package/codemini-web/dist/assets/{rel-BuFiYCnx.js → rel-DlXaqz0b.js} +0 -0
- /package/codemini-web/dist/assets/{rel-D1_XRRAX.js → rel-DqcQFa7Q.js} +0 -0
- /package/codemini-web/dist/assets/{riscv-CdWUuizJ.js → riscv-CanSyeO8.js} +0 -0
- /package/codemini-web/dist/assets/{riscv-QV-e36TY.js → riscv-lk-jjtXM.js} +0 -0
- /package/codemini-web/dist/assets/{ron-B-EB7ZBI.js → ron-BQ46iNCb.js} +0 -0
- /package/codemini-web/dist/assets/{ron-B9EiEQzE.js → ron-CVeChqUp.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-B05wARW4.js → rose-pine-BuTm62Vj.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-Dxqc8n_1.js → rose-pine-ChTxq_yN.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-dawn-CSpx1lq4.js → rose-pine-dawn-B670NuiP.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-dawn-pz_3O4ep.js → rose-pine-dawn-RGM_kxZ2.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-moon-B27idgkd.js → rose-pine-moon-6KoQonQX.js} +0 -0
- /package/codemini-web/dist/assets/{rose-pine-moon-DXyZaCQX.js → rose-pine-moon-NLV-cJvy.js} +0 -0
- /package/codemini-web/dist/assets/{rosmsg-7fMni2bi.js → rosmsg-Bw0HfGe_.js} +0 -0
- /package/codemini-web/dist/assets/{rosmsg-CcBwQf5j.js → rosmsg-CUVWbdrA.js} +0 -0
- /package/codemini-web/dist/assets/{rust-BHulpgn4.js → rust-CrVJvhfa.js} +0 -0
- /package/codemini-web/dist/assets/{rust-ppknoGus.js → rust-D83UuV7F.js} +0 -0
- /package/codemini-web/dist/assets/{sass-Baw41att.js → sass-CE2YZJdE.js} +0 -0
- /package/codemini-web/dist/assets/{sass-DwJf1cGc.js → sass-Dfpo5TpD.js} +0 -0
- /package/codemini-web/dist/assets/{scala-B_iky--A.js → scala-BjILTRgu.js} +0 -0
- /package/codemini-web/dist/assets/{scala-DtlnBhKt.js → scala-CyYhociv.js} +0 -0
- /package/codemini-web/dist/assets/{scheme-B8EPXl9-.js → scheme-BQ8c0gTd.js} +0 -0
- /package/codemini-web/dist/assets/{scheme-DYQMayIi.js → scheme-BrRWQ1yX.js} +0 -0
- /package/codemini-web/dist/assets/{sdbl-BQ-WHv_b.js → sdbl-CtZR2I6R.js} +0 -0
- /package/codemini-web/dist/assets/{sdbl-D0gXyfL6.js → sdbl-Ds7t3N0Q.js} +0 -0
- /package/codemini-web/dist/assets/{shellscript-B_ROtSU5.js → shellscript-Cim6Loaj.js} +0 -0
- /package/codemini-web/dist/assets/{shellscript-CPlx29kh.js → shellscript-wXQ3AlcS.js} +0 -0
- /package/codemini-web/dist/assets/{slack-dark-D27cdsBY.js → slack-dark-CrWftATe.js} +0 -0
- /package/codemini-web/dist/assets/{slack-dark-D_l_kxUG.js → slack-dark-nxsbRL6U.js} +0 -0
- /package/codemini-web/dist/assets/{slack-ochin-BE7dVjTN.js → slack-ochin-Cx2HX71B.js} +0 -0
- /package/codemini-web/dist/assets/{slack-ochin-BaRZ7cFo.js → slack-ochin-DJ-2OJXN.js} +0 -0
- /package/codemini-web/dist/assets/{smalltalk-B12I7SNP.js → smalltalk-DGeW9hbd.js} +0 -0
- /package/codemini-web/dist/assets/{smalltalk-DRM3jr39.js → smalltalk-FYMOGNo9.js} +0 -0
- /package/codemini-web/dist/assets/{snazzy-light-BayTLer3.js → snazzy-light-508iEJO_.js} +0 -0
- /package/codemini-web/dist/assets/{snazzy-light-CooAwQFN.js → snazzy-light-BxBnzmu0.js} +0 -0
- /package/codemini-web/dist/assets/{solarized-dark-DJyTII3y.js → solarized-dark-B3HMD5k3.js} +0 -0
- /package/codemini-web/dist/assets/{solarized-dark-Y31Htb59.js → solarized-dark-TCkigWjM.js} +0 -0
- /package/codemini-web/dist/assets/{solarized-light-AlAlWTlV.js → solarized-light-B-wiF2HZ.js} +0 -0
- /package/codemini-web/dist/assets/{solarized-light-B-u_T8hk.js → solarized-light-R2Rcjqww.js} +0 -0
- /package/codemini-web/dist/assets/{solidity-CYAp_sJG.js → solidity-46G7JVSr.js} +0 -0
- /package/codemini-web/dist/assets/{solidity-DGySeR8E.js → solidity-Bv4Kww1K.js} +0 -0
- /package/codemini-web/dist/assets/{splunk-DIQhxWy6.js → splunk-DHfVkGsm.js} +0 -0
- /package/codemini-web/dist/assets/{splunk-LsCTpuOP.js → splunk-DKgoBk9o.js} +0 -0
- /package/codemini-web/dist/assets/{sql-BHYM5i23.js → sql-Bx-skccv.js} +0 -0
- /package/codemini-web/dist/assets/{sql-Cl5BmUDB.js → sql-PkTJiLTy.js} +0 -0
- /package/codemini-web/dist/assets/{ssh-config-CTKraw7w.js → ssh-config-B2E5WPpD.js} +0 -0
- /package/codemini-web/dist/assets/{ssh-config-QxQe7y21.js → ssh-config-JoXpWa3y.js} +0 -0
- /package/codemini-web/dist/assets/{stylus-DZvi0832.js → stylus-BPw8WnNN.js} +0 -0
- /package/codemini-web/dist/assets/{stylus-MJorGDSp.js → stylus-C836DBsS.js} +0 -0
- /package/codemini-web/dist/assets/{swift-BBBWvOdl.js → swift-CFG3rDz_.js} +0 -0
- /package/codemini-web/dist/assets/{swift-vEJN8-U8.js → swift-Ce2Nlw8Q.js} +0 -0
- /package/codemini-web/dist/assets/{synthwave-84-CU96aGm9.js → synthwave-84-Br2i7yYN.js} +0 -0
- /package/codemini-web/dist/assets/{synthwave-84-Dq9WAwjJ.js → synthwave-84-CvU6yQ4V.js} +0 -0
- /package/codemini-web/dist/assets/{system-verilog-BNegUpQT.js → system-verilog-BVQtCmAV.js} +0 -0
- /package/codemini-web/dist/assets/{system-verilog-Ddagu-BW.js → system-verilog-Dkc37EdI.js} +0 -0
- /package/codemini-web/dist/assets/{systemd-BxlmhgV_.js → systemd-CcJTFvpw.js} +0 -0
- /package/codemini-web/dist/assets/{systemd-k28iMR-m.js → systemd-svl6VdYY.js} +0 -0
- /package/codemini-web/dist/assets/{talonscript-DprpkXjP.js → talonscript-CHxC2PG4.js} +0 -0
- /package/codemini-web/dist/assets/{talonscript-p-GlmLEL.js → talonscript-CWZYyS8Z.js} +0 -0
- /package/codemini-web/dist/assets/{tasl-BNm9EzXM.js → tasl-BfBucHfV.js} +0 -0
- /package/codemini-web/dist/assets/{tasl-CcWIX7df.js → tasl-woKXKJkx.js} +0 -0
- /package/codemini-web/dist/assets/{tcl-BQwTCs7_.js → tcl-6FTtarFH.js} +0 -0
- /package/codemini-web/dist/assets/{tcl-CDAGOvGJ.js → tcl-iBXrc9W2.js} +0 -0
- /package/codemini-web/dist/assets/{terraform-DLqNQanb.js → terraform-BywKBLRG.js} +0 -0
- /package/codemini-web/dist/assets/{terraform-DQhgYyF5.js → terraform-DHx5Kdyi.js} +0 -0
- /package/codemini-web/dist/assets/{tokyo-night-DxL5lL62.js → tokyo-night-BQsIhA-A.js} +0 -0
- /package/codemini-web/dist/assets/{tokyo-night-mZPbj36U.js → tokyo-night-D2gua4K6.js} +0 -0
- /package/codemini-web/dist/assets/{toml-BncMjmx0.js → toml-B35rd2Aj.js} +0 -0
- /package/codemini-web/dist/assets/{toml-C7zZe7mY.js → toml-BCbG8Uu3.js} +0 -0
- /package/codemini-web/dist/assets/{tsv--yOlbuAc.js → tsv-Bfk0YRxN.js} +0 -0
- /package/codemini-web/dist/assets/{tsv-BYgjC2V4.js → tsv-ZPaCtsKO.js} +0 -0
- /package/codemini-web/dist/assets/{tsx-CQpoSLkt.js → tsx-BPnxgPXu.js} +0 -0
- /package/codemini-web/dist/assets/{tsx-_xvh4DFW.js → tsx-Cvi8n1qy.js} +0 -0
- /package/codemini-web/dist/assets/{turtle-DO1RZ6-t.js → turtle-Cj8ap4C4.js} +0 -0
- /package/codemini-web/dist/assets/{turtle-ZCrKgE8E.js → turtle-DsCF_r1D.js} +0 -0
- /package/codemini-web/dist/assets/{typescript-BGytLZ-E.js → typescript-DESGzanZ.js} +0 -0
- /package/codemini-web/dist/assets/{typescript-Bl_SUyNj.js → typescript-DkKrEyJv.js} +0 -0
- /package/codemini-web/dist/assets/{typespec-9rD7KG94.js → typespec-tsneGPKg.js} +0 -0
- /package/codemini-web/dist/assets/{typespec-Bb7cO9Af.js → typespec-zSWU032W.js} +0 -0
- /package/codemini-web/dist/assets/{typst-CChrusEX.js → typst-BcQNhVIE.js} +0 -0
- /package/codemini-web/dist/assets/{typst-DJ10KoY6.js → typst-C6LmF4pH.js} +0 -0
- /package/codemini-web/dist/assets/{v-CutuAYrg.js → v-CPbK5D5K.js} +0 -0
- /package/codemini-web/dist/assets/{v-DCfT4ti_.js → v-D6v2lknR.js} +0 -0
- /package/codemini-web/dist/assets/{vala-APnq2lEm.js → vala-CTmcnleK.js} +0 -0
- /package/codemini-web/dist/assets/{vala-DJpFErrU.js → vala-CW2V92s6.js} +0 -0
- /package/codemini-web/dist/assets/{vb-2TNZABCr.js → vb-CHzBmKx-.js} +0 -0
- /package/codemini-web/dist/assets/{vb-DQuyY02M.js → vb-iQRhK9Tp.js} +0 -0
- /package/codemini-web/dist/assets/{verilog-Bc6dGayD.js → verilog-BxRFSB3_.js} +0 -0
- /package/codemini-web/dist/assets/{verilog-BuvxZrtu.js → verilog-Cu16TfKw.js} +0 -0
- /package/codemini-web/dist/assets/{vesper-5CiKYnlC.js → vesper-B0T1dCxY.js} +0 -0
- /package/codemini-web/dist/assets/{vesper-bM1AKkiO.js → vesper-D_U9vezF.js} +0 -0
- /package/codemini-web/dist/assets/{vhdl-2NYOzUvZ.js → vhdl-D4h06VsC.js} +0 -0
- /package/codemini-web/dist/assets/{vhdl-pScFq2IF.js → vhdl-suLxFY6N.js} +0 -0
- /package/codemini-web/dist/assets/{viml-AdCpKk5r.js → viml-BQu4-sFk.js} +0 -0
- /package/codemini-web/dist/assets/{viml-LZIbwXqf.js → viml-DMcwh6Y2.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-black-BhKXUSxn.js → vitesse-black-Dk8H62LF.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-black-DJ5O_Wf1.js → vitesse-black-sFXfT98A.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-dark-23Naczwl.js → vitesse-dark-B_8wZgsl.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-dark-BzqhRcAC.js → vitesse-dark-BuiSS132.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-light-BDEFVzPq.js → vitesse-light-BFFa4sOZ.js} +0 -0
- /package/codemini-web/dist/assets/{vitesse-light-C6rj90Ld.js → vitesse-light-DfdaVJLv.js} +0 -0
- /package/codemini-web/dist/assets/{vyper-CAC2wkEx.js → vyper-CU9IduFj.js} +0 -0
- /package/codemini-web/dist/assets/{vyper-Cli2Hz-N.js → vyper-DfAPtbtc.js} +0 -0
- /package/codemini-web/dist/assets/{wasm-BYEYHoBh.js → wasm-6aAEIEYl.js} +0 -0
- /package/codemini-web/dist/assets/{wasm-JuQDwMf4.js → wasm-ByDQ9GrP.js} +0 -0
- /package/codemini-web/dist/assets/{wasm-C_1NoYKf.js → wasm-C9fkFrNS.js} +0 -0
- /package/codemini-web/dist/assets/{wasm-DmLFHHUn.js → wasm-CdytVWOW.js} +0 -0
- /package/codemini-web/dist/assets/{wenyan-BtC3dCkd.js → wenyan-B_37P8uK.js} +0 -0
- /package/codemini-web/dist/assets/{wenyan-DZOq1WNp.js → wenyan-DNkN8oQc.js} +0 -0
- /package/codemini-web/dist/assets/{wgsl-BfhDoYq0.js → wgsl-Bggw1Yhv.js} +0 -0
- /package/codemini-web/dist/assets/{wgsl-sEaiSqkk.js → wgsl-by06Hq-s.js} +0 -0
- /package/codemini-web/dist/assets/{wikitext-BBK9d3N8.js → wikitext-CjjhOSjd.js} +0 -0
- /package/codemini-web/dist/assets/{wikitext-BN0a9cMl.js → wikitext-zXy-4mpr.js} +0 -0
- /package/codemini-web/dist/assets/{wit-B5eB3VJ4.js → wit--vc2X9vR.js} +0 -0
- /package/codemini-web/dist/assets/{wit-Drz0L2pK.js → wit-BHjrebka.js} +0 -0
- /package/codemini-web/dist/assets/{wolfram-BjzpXDTC.js → wolfram-Dr60-Zy4.js} +0 -0
- /package/codemini-web/dist/assets/{wolfram-hGtNh8mf.js → wolfram-Mw4XcN1t.js} +0 -0
- /package/codemini-web/dist/assets/{yaml-45PVuYHO.js → yaml--meH0-me.js} +0 -0
- /package/codemini-web/dist/assets/{yaml-CvJwaec9.js → yaml-CZT5eZge.js} +0 -0
- /package/codemini-web/dist/assets/{zenscript-ChrmAB59.js → zenscript-C94GGJ6Y.js} +0 -0
- /package/codemini-web/dist/assets/{zenscript-Dl5s7Kfy.js → zenscript-Cf2Qp-oj.js} +0 -0
- /package/codemini-web/dist/assets/{zig-BYKQoCIF.js → zig-DgUQodsP.js} +0 -0
- /package/codemini-web/dist/assets/{zig-Dashm4F0.js → zig-feO0kYCa.js} +0 -0
package/src/core/tools.js
CHANGED
|
@@ -30,13 +30,13 @@ import {
|
|
|
30
30
|
sanitizeTextForModel,
|
|
31
31
|
summarizeRunOutput
|
|
32
32
|
} from './tool-output.js';
|
|
33
|
-
import {
|
|
34
|
-
normalizeFilePathValue,
|
|
35
|
-
normalizePathArgs,
|
|
36
|
-
parseInlineRangePath,
|
|
37
|
-
normalizePatternArgs,
|
|
38
|
-
normalizeReadArgs,
|
|
39
|
-
normalizeWebFetchArgs,
|
|
33
|
+
import {
|
|
34
|
+
normalizeFilePathValue,
|
|
35
|
+
normalizePathArgs,
|
|
36
|
+
parseInlineRangePath,
|
|
37
|
+
normalizePatternArgs,
|
|
38
|
+
normalizeReadArgs,
|
|
39
|
+
normalizeWebFetchArgs,
|
|
40
40
|
normalizeWebSearchArgs,
|
|
41
41
|
normalizeWriteArgs
|
|
42
42
|
} from './tool-args.js';
|
|
@@ -150,64 +150,64 @@ function trimLinePreview(line, maxLen = 180) {
|
|
|
150
150
|
return `${text.slice(0, maxLen - 3)}...`;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
function splitLines(text) {
|
|
154
|
-
return String(text || '').split('\n');
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
function buildDiffPreview(beforeContent, afterContent) {
|
|
158
|
-
const beforeLines = splitLines(beforeContent);
|
|
159
|
-
const afterLines = splitLines(afterContent);
|
|
160
|
-
let prefix = 0;
|
|
161
|
-
while (
|
|
162
|
-
prefix < beforeLines.length &&
|
|
163
|
-
prefix < afterLines.length &&
|
|
164
|
-
beforeLines[prefix] === afterLines[prefix]
|
|
165
|
-
) {
|
|
166
|
-
prefix += 1;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
let beforeEnd = beforeLines.length - 1;
|
|
170
|
-
let afterEnd = afterLines.length - 1;
|
|
171
|
-
while (
|
|
172
|
-
beforeEnd >= prefix &&
|
|
173
|
-
afterEnd >= prefix &&
|
|
174
|
-
beforeLines[beforeEnd] === afterLines[afterEnd]
|
|
175
|
-
) {
|
|
176
|
-
beforeEnd -= 1;
|
|
177
|
-
afterEnd -= 1;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
const lines = [];
|
|
181
|
-
for (let i = prefix; i <= beforeEnd; i += 1) {
|
|
182
|
-
lines.push(`-${i + 1}| ${beforeLines[i]}`);
|
|
183
|
-
}
|
|
184
|
-
for (let i = prefix; i <= afterEnd; i += 1) {
|
|
185
|
-
lines.push(`+${i + 1}| ${afterLines[i]}`);
|
|
186
|
-
}
|
|
187
|
-
return lines.join('\n');
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
function clampNumber(value, min, max, fallback) {
|
|
191
|
-
const num = Number(value);
|
|
192
|
-
if (!Number.isFinite(num)) return fallback;
|
|
153
|
+
function splitLines(text) {
|
|
154
|
+
return String(text || '').split('\n');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function buildDiffPreview(beforeContent, afterContent) {
|
|
158
|
+
const beforeLines = splitLines(beforeContent);
|
|
159
|
+
const afterLines = splitLines(afterContent);
|
|
160
|
+
let prefix = 0;
|
|
161
|
+
while (
|
|
162
|
+
prefix < beforeLines.length &&
|
|
163
|
+
prefix < afterLines.length &&
|
|
164
|
+
beforeLines[prefix] === afterLines[prefix]
|
|
165
|
+
) {
|
|
166
|
+
prefix += 1;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
let beforeEnd = beforeLines.length - 1;
|
|
170
|
+
let afterEnd = afterLines.length - 1;
|
|
171
|
+
while (
|
|
172
|
+
beforeEnd >= prefix &&
|
|
173
|
+
afterEnd >= prefix &&
|
|
174
|
+
beforeLines[beforeEnd] === afterLines[afterEnd]
|
|
175
|
+
) {
|
|
176
|
+
beforeEnd -= 1;
|
|
177
|
+
afterEnd -= 1;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const lines = [];
|
|
181
|
+
for (let i = prefix; i <= beforeEnd; i += 1) {
|
|
182
|
+
lines.push(`-${i + 1}| ${beforeLines[i]}`);
|
|
183
|
+
}
|
|
184
|
+
for (let i = prefix; i <= afterEnd; i += 1) {
|
|
185
|
+
lines.push(`+${i + 1}| ${afterLines[i]}`);
|
|
186
|
+
}
|
|
187
|
+
return lines.join('\n');
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function clampNumber(value, min, max, fallback) {
|
|
191
|
+
const num = Number(value);
|
|
192
|
+
if (!Number.isFinite(num)) return fallback;
|
|
193
193
|
return Math.min(max, Math.max(min, num));
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
function normalizeWhitespace(value) {
|
|
197
|
-
return String(value || '')
|
|
198
|
-
.replace(/\s+/g, ' ')
|
|
199
|
-
.trim();
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
function semanticBoolean(value, fallback = false) {
|
|
203
|
-
if (typeof value === 'boolean') return value;
|
|
204
|
-
if (typeof value === 'number') return value !== 0;
|
|
205
|
-
const text = String(value ?? '').trim().toLowerCase();
|
|
206
|
-
if (!text) return fallback;
|
|
207
|
-
if (['true', '1', 'yes', 'y', 'on'].includes(text)) return true;
|
|
208
|
-
if (['false', '0', 'no', 'n', 'off'].includes(text)) return false;
|
|
209
|
-
return Boolean(value);
|
|
210
|
-
}
|
|
196
|
+
function normalizeWhitespace(value) {
|
|
197
|
+
return String(value || '')
|
|
198
|
+
.replace(/\s+/g, ' ')
|
|
199
|
+
.trim();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function semanticBoolean(value, fallback = false) {
|
|
203
|
+
if (typeof value === 'boolean') return value;
|
|
204
|
+
if (typeof value === 'number') return value !== 0;
|
|
205
|
+
const text = String(value ?? '').trim().toLowerCase();
|
|
206
|
+
if (!text) return fallback;
|
|
207
|
+
if (['true', '1', 'yes', 'y', 'on'].includes(text)) return true;
|
|
208
|
+
if (['false', '0', 'no', 'n', 'off'].includes(text)) return false;
|
|
209
|
+
return Boolean(value);
|
|
210
|
+
}
|
|
211
211
|
|
|
212
212
|
function trimPreview(value, maxLen = 300) {
|
|
213
213
|
const text = normalizeWhitespace(value);
|
|
@@ -991,6 +991,9 @@ async function writeFile(root, args, config = {}) {
|
|
|
991
991
|
if (rawPath === '.' || rawPath === './') {
|
|
992
992
|
throw new Error('write requires a file path, not the workspace root');
|
|
993
993
|
}
|
|
994
|
+
if (normalizedArgs?.content == null) {
|
|
995
|
+
throw new Error('write requires content. For existing files, use edit with old_text/new_text or pass content with full_file_rewrite=true.');
|
|
996
|
+
}
|
|
994
997
|
const target = await resolveInWorkspace(root, rawPath, config);
|
|
995
998
|
try {
|
|
996
999
|
const stat = await fs.stat(target);
|
|
@@ -1007,18 +1010,30 @@ async function writeFile(root, args, config = {}) {
|
|
|
1007
1010
|
} catch {
|
|
1008
1011
|
existed = false;
|
|
1009
1012
|
}
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1013
|
+
const nextContent = String(normalizedArgs.content ?? '');
|
|
1014
|
+
if (existed && before === nextContent && !normalizedArgs?.append) {
|
|
1015
|
+
return {
|
|
1016
|
+
ok: true,
|
|
1017
|
+
path: rawPath,
|
|
1018
|
+
action: 'unchanged',
|
|
1019
|
+
changed_line: 1,
|
|
1020
|
+
diff_preview: '',
|
|
1021
|
+
lines_added: 0,
|
|
1022
|
+
lines_removed: 0
|
|
1023
|
+
};
|
|
1024
|
+
}
|
|
1025
|
+
if (existed && !normalizedArgs?.append && !normalizedArgs?.full_file_rewrite) {
|
|
1026
|
+
throw new Error(
|
|
1027
|
+
`write target exists: ${rawPath}. Use edit for source changes, append=true to append, or full_file_rewrite=true to replace the whole file.`
|
|
1028
|
+
);
|
|
1029
|
+
}
|
|
1015
1030
|
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
1016
1031
|
if (normalizedArgs?.append) {
|
|
1017
|
-
await fs.appendFile(target,
|
|
1032
|
+
await fs.appendFile(target, nextContent, 'utf8');
|
|
1018
1033
|
} else {
|
|
1019
|
-
await fs.writeFile(target,
|
|
1034
|
+
await fs.writeFile(target, nextContent, 'utf8');
|
|
1020
1035
|
}
|
|
1021
|
-
const after = normalizedArgs?.append ? `${before}${
|
|
1036
|
+
const after = normalizedArgs?.append ? `${before}${nextContent}` : nextContent;
|
|
1022
1037
|
const beforeLines = splitLines(before);
|
|
1023
1038
|
const afterLines = splitLines(after);
|
|
1024
1039
|
let changeLine = 0;
|
|
@@ -1029,17 +1044,17 @@ async function writeFile(root, args, config = {}) {
|
|
|
1029
1044
|
break;
|
|
1030
1045
|
}
|
|
1031
1046
|
}
|
|
1032
|
-
const changed = countChangedLines(before, after);
|
|
1033
|
-
return {
|
|
1034
|
-
ok: true,
|
|
1035
|
-
path: rawPath,
|
|
1036
|
-
action: normalizedArgs?.append ? 'append' : existed ? 'overwrite' : 'create',
|
|
1037
|
-
changed_line: changeLine || Math.max(1, afterLines.length),
|
|
1038
|
-
diff_preview: buildDiffPreview(before, after),
|
|
1039
|
-
lines_added: changed.added,
|
|
1040
|
-
lines_removed: changed.removed
|
|
1041
|
-
};
|
|
1042
|
-
}
|
|
1047
|
+
const changed = countChangedLines(before, after);
|
|
1048
|
+
return {
|
|
1049
|
+
ok: true,
|
|
1050
|
+
path: rawPath,
|
|
1051
|
+
action: normalizedArgs?.append ? 'append' : existed ? 'overwrite' : 'create',
|
|
1052
|
+
changed_line: changeLine || Math.max(1, afterLines.length),
|
|
1053
|
+
diff_preview: buildDiffPreview(before, after),
|
|
1054
|
+
lines_added: changed.added,
|
|
1055
|
+
lines_removed: changed.removed
|
|
1056
|
+
};
|
|
1057
|
+
}
|
|
1043
1058
|
|
|
1044
1059
|
async function prepareDeleteTarget(root, args, config = {}) {
|
|
1045
1060
|
const normalizedArgs = normalizePathArgs(args, ['file', 'file_path', 'target', 'directory', 'dir']);
|
|
@@ -1437,8 +1452,8 @@ async function stopBackgroundTask(_root, args) {
|
|
|
1437
1452
|
return { ...snapshotBackgroundTask(task), stopped: true };
|
|
1438
1453
|
}
|
|
1439
1454
|
|
|
1440
|
-
async function builtinGrep(root, args, config = {}) {
|
|
1441
|
-
const normalizedArgs = normalizePatternArgs(args, ['query', 'symbol', 'q'], ['directory', 'dir', 'cwd', 'file_path', 'file']);
|
|
1455
|
+
async function builtinGrep(root, args, config = {}) {
|
|
1456
|
+
const normalizedArgs = normalizePatternArgs(args, ['query', 'symbol', 'q'], ['directory', 'dir', 'cwd', 'file_path', 'file']);
|
|
1442
1457
|
const pattern = String(normalizedArgs?.pattern || '').trim();
|
|
1443
1458
|
if (!pattern) throw new Error('grep requires pattern');
|
|
1444
1459
|
const maxResults = Math.max(1, Math.min(200, Number(normalizedArgs?.max_results || 50)));
|
|
@@ -1472,8 +1487,8 @@ async function builtinGrep(root, args, config = {}) {
|
|
|
1472
1487
|
return { pattern, matches, truncated: false };
|
|
1473
1488
|
}
|
|
1474
1489
|
|
|
1475
|
-
async function builtinGlob(root, args, config = {}) {
|
|
1476
|
-
const normalizedArgs = normalizePatternArgs(args, ['glob', 'query'], ['directory', 'dir', 'cwd', 'file_path', 'file']);
|
|
1490
|
+
async function builtinGlob(root, args, config = {}) {
|
|
1491
|
+
const normalizedArgs = normalizePatternArgs(args, ['glob', 'query'], ['directory', 'dir', 'cwd', 'file_path', 'file']);
|
|
1477
1492
|
const pattern = String(normalizedArgs?.pattern || '').trim();
|
|
1478
1493
|
if (!pattern) throw new Error('glob requires pattern');
|
|
1479
1494
|
const maxResults = Math.max(1, Math.min(500, Number(normalizedArgs?.max_results || 200)));
|
|
@@ -1493,8 +1508,8 @@ async function builtinGlob(root, args, config = {}) {
|
|
|
1493
1508
|
};
|
|
1494
1509
|
}
|
|
1495
1510
|
|
|
1496
|
-
async function builtinList(root, args, config = {}) {
|
|
1497
|
-
const normalizedArgs = normalizePathArgs(args, ['dir', 'directory', 'file_path', 'file', 'target']);
|
|
1511
|
+
async function builtinList(root, args, config = {}) {
|
|
1512
|
+
const normalizedArgs = normalizePathArgs(args, ['dir', 'directory', 'file_path', 'file', 'target']);
|
|
1498
1513
|
const relativePath = String(normalizedArgs?.path || '.').trim() || '.';
|
|
1499
1514
|
const target = await resolveInWorkspace(root, relativePath, config);
|
|
1500
1515
|
const entries = await fs.readdir(target, { withFileTypes: true });
|
|
@@ -1634,10 +1649,10 @@ function countChangedLines(beforeContent, afterContent) {
|
|
|
1634
1649
|
return { added: n - lcsLen, removed: m - lcsLen };
|
|
1635
1650
|
}
|
|
1636
1651
|
|
|
1637
|
-
function editResult(pathText, action, beforeContent, afterContent, changedLine = 1) {
|
|
1638
|
-
const diffPreview = buildDiffPreview(beforeContent, afterContent);
|
|
1639
|
-
const changed = countChangedLines(beforeContent, afterContent);
|
|
1640
|
-
return {
|
|
1652
|
+
function editResult(pathText, action, beforeContent, afterContent, changedLine = 1) {
|
|
1653
|
+
const diffPreview = buildDiffPreview(beforeContent, afterContent);
|
|
1654
|
+
const changed = countChangedLines(beforeContent, afterContent);
|
|
1655
|
+
return {
|
|
1641
1656
|
ok: true,
|
|
1642
1657
|
path: pathText,
|
|
1643
1658
|
action,
|
|
@@ -1647,24 +1662,24 @@ function editResult(pathText, action, beforeContent, afterContent, changedLine =
|
|
|
1647
1662
|
lines_added: changed.added,
|
|
1648
1663
|
lines_removed: changed.removed
|
|
1649
1664
|
};
|
|
1650
|
-
}
|
|
1651
|
-
|
|
1652
|
-
function lineRangeToOffsets(content, startLineRaw, endLineRaw) {
|
|
1653
|
-
const lines = splitLines(content);
|
|
1654
|
-
const totalLines = lines.length;
|
|
1655
|
-
const startLine = Math.max(1, Math.min(totalLines, Number(startLineRaw) || 1));
|
|
1656
|
-
const endLine = Math.max(startLine, Math.min(totalLines, Number(endLineRaw) || startLine));
|
|
1657
|
-
let startOffset = 0;
|
|
1658
|
-
for (let i = 1; i < startLine; i += 1) {
|
|
1659
|
-
startOffset += lines[i - 1].length + 1;
|
|
1660
|
-
}
|
|
1661
|
-
let endOffset = startOffset;
|
|
1662
|
-
for (let i = startLine; i <= endLine; i += 1) {
|
|
1663
|
-
endOffset += lines[i - 1].length;
|
|
1664
|
-
if (i < endLine) endOffset += 1;
|
|
1665
|
-
}
|
|
1666
|
-
return { startLine, endLine, startOffset, endOffset };
|
|
1667
|
-
}
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
function lineRangeToOffsets(content, startLineRaw, endLineRaw) {
|
|
1668
|
+
const lines = splitLines(content);
|
|
1669
|
+
const totalLines = lines.length;
|
|
1670
|
+
const startLine = Math.max(1, Math.min(totalLines, Number(startLineRaw) || 1));
|
|
1671
|
+
const endLine = Math.max(startLine, Math.min(totalLines, Number(endLineRaw) || startLine));
|
|
1672
|
+
let startOffset = 0;
|
|
1673
|
+
for (let i = 1; i < startLine; i += 1) {
|
|
1674
|
+
startOffset += lines[i - 1].length + 1;
|
|
1675
|
+
}
|
|
1676
|
+
let endOffset = startOffset;
|
|
1677
|
+
for (let i = startLine; i <= endLine; i += 1) {
|
|
1678
|
+
endOffset += lines[i - 1].length;
|
|
1679
|
+
if (i < endLine) endOffset += 1;
|
|
1680
|
+
}
|
|
1681
|
+
return { startLine, endLine, startOffset, endOffset };
|
|
1682
|
+
}
|
|
1668
1683
|
|
|
1669
1684
|
async function replaceBlock(root, args, config = {}) {
|
|
1670
1685
|
const relativePath = String(args?.path || '').trim();
|
|
@@ -1685,51 +1700,67 @@ async function replaceBlock(root, args, config = {}) {
|
|
|
1685
1700
|
return editResult(relativePath, 'replace_block', state.content, afterContent, resolved.start_line);
|
|
1686
1701
|
}
|
|
1687
1702
|
|
|
1688
|
-
async function replaceText(root, args, config = {}) {
|
|
1689
|
-
const relativePath = String(args?.path || '').trim();
|
|
1690
|
-
const oldText = String(args?.old_text || '');
|
|
1691
|
-
const newText = String(args?.new_text || '');
|
|
1692
|
-
const replaceAll = semanticBoolean(args?.replace_all ?? args?.replaceAll);
|
|
1693
|
-
const state = await getFileState(root, relativePath, config);
|
|
1694
|
-
if (!oldText) {
|
|
1695
|
-
throw new Error('replace_text requires old_text');
|
|
1696
|
-
}
|
|
1697
|
-
const rangeStart = Number(args?.start_line || args?.line);
|
|
1698
|
-
const rangeEnd = Number(args?.end_line || args?.line);
|
|
1699
|
-
const hasRange = Number.isFinite(rangeStart) && rangeStart > 0;
|
|
1700
|
-
const range = hasRange
|
|
1701
|
-
? lineRangeToOffsets(state.content, rangeStart, Number.isFinite(rangeEnd) && rangeEnd >= rangeStart ? rangeEnd : rangeStart)
|
|
1702
|
-
: null;
|
|
1703
|
-
const searchContent = range ? state.content.slice(range.startOffset, range.endOffset) : state.content;
|
|
1704
|
-
const occurrences = searchContent.split(oldText).length - 1;
|
|
1705
|
-
if (occurrences !== 1) {
|
|
1706
|
-
if (replaceAll && occurrences > 0) {
|
|
1707
|
-
const replaced = searchContent.replaceAll(oldText, newText);
|
|
1708
|
-
const afterContent = range
|
|
1709
|
-
? `${state.content.slice(0, range.startOffset)}${replaced}${state.content.slice(range.endOffset)}`
|
|
1710
|
-
: state.content.replaceAll(oldText, newText);
|
|
1711
|
-
await fs.writeFile(state.target, afterContent, 'utf8');
|
|
1712
|
-
const changedLine = range
|
|
1713
|
-
? range.startLine + splitLines(searchContent.slice(0, searchContent.indexOf(oldText))).length - 1
|
|
1714
|
-
: splitLines(state.content.slice(0, state.content.indexOf(oldText))).length;
|
|
1715
|
-
return editResult(relativePath, 'replace_text', state.content, afterContent, changedLine);
|
|
1716
|
-
}
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
)
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
}
|
|
1703
|
+
async function replaceText(root, args, config = {}) {
|
|
1704
|
+
const relativePath = String(args?.path || '').trim();
|
|
1705
|
+
const oldText = String(args?.old_text || '');
|
|
1706
|
+
const newText = String(args?.new_text || '');
|
|
1707
|
+
const replaceAll = semanticBoolean(args?.replace_all ?? args?.replaceAll);
|
|
1708
|
+
const state = await getFileState(root, relativePath, config);
|
|
1709
|
+
if (!oldText) {
|
|
1710
|
+
throw new Error('replace_text requires old_text');
|
|
1711
|
+
}
|
|
1712
|
+
const rangeStart = Number(args?.start_line || args?.line);
|
|
1713
|
+
const rangeEnd = Number(args?.end_line || args?.line);
|
|
1714
|
+
const hasRange = Number.isFinite(rangeStart) && rangeStart > 0;
|
|
1715
|
+
const range = hasRange
|
|
1716
|
+
? lineRangeToOffsets(state.content, rangeStart, Number.isFinite(rangeEnd) && rangeEnd >= rangeStart ? rangeEnd : rangeStart)
|
|
1717
|
+
: null;
|
|
1718
|
+
const searchContent = range ? state.content.slice(range.startOffset, range.endOffset) : state.content;
|
|
1719
|
+
const occurrences = searchContent.split(oldText).length - 1;
|
|
1720
|
+
if (occurrences !== 1) {
|
|
1721
|
+
if (replaceAll && occurrences > 0) {
|
|
1722
|
+
const replaced = searchContent.replaceAll(oldText, newText);
|
|
1723
|
+
const afterContent = range
|
|
1724
|
+
? `${state.content.slice(0, range.startOffset)}${replaced}${state.content.slice(range.endOffset)}`
|
|
1725
|
+
: state.content.replaceAll(oldText, newText);
|
|
1726
|
+
await fs.writeFile(state.target, afterContent, 'utf8');
|
|
1727
|
+
const changedLine = range
|
|
1728
|
+
? range.startLine + splitLines(searchContent.slice(0, searchContent.indexOf(oldText))).length - 1
|
|
1729
|
+
: splitLines(state.content.slice(0, state.content.indexOf(oldText))).length;
|
|
1730
|
+
return editResult(relativePath, 'replace_text', state.content, afterContent, changedLine);
|
|
1731
|
+
}
|
|
1732
|
+
const baseLine = hasRange ? range.startLine : 1;
|
|
1733
|
+
const baseOffset = hasRange ? range.startOffset : 0;
|
|
1734
|
+
const lineDetails = [];
|
|
1735
|
+
let searchPos = 0;
|
|
1736
|
+
while (true) {
|
|
1737
|
+
const pos = searchContent.indexOf(oldText, searchPos);
|
|
1738
|
+
if (pos === -1) break;
|
|
1739
|
+
const lineNum = baseLine + splitLines(searchContent.slice(0, pos)).length - 1;
|
|
1740
|
+
const globalPos = baseOffset + pos;
|
|
1741
|
+
const lStart = state.content.lastIndexOf('\n', globalPos) + 1;
|
|
1742
|
+
const lEnd = state.content.indexOf('\n', globalPos);
|
|
1743
|
+
const lineText = state.content.slice(lStart, lEnd >= 0 ? lEnd : void 0).trim();
|
|
1744
|
+
lineDetails.push(` Line ${lineNum}: ${lineText}`);
|
|
1745
|
+
searchPos = pos + oldText.length;
|
|
1746
|
+
}
|
|
1747
|
+
const lineHint = lineDetails.length > 0 ? `\n${lineDetails.join('\n')}\n` : ' ';
|
|
1748
|
+
throw new Error(
|
|
1749
|
+
occurrences === 0
|
|
1750
|
+
? 'replace_text old_text not found'
|
|
1751
|
+
: `replace_text old_text not unique; found ${occurrences} occurrences:${lineHint}Use path:"${relativePath}:N-M" to narrow the range, set replace_all=true, or provide more unique old_text`
|
|
1752
|
+
);
|
|
1753
|
+
}
|
|
1754
|
+
const replaced = searchContent.replace(oldText, newText);
|
|
1755
|
+
const afterContent = range
|
|
1756
|
+
? `${state.content.slice(0, range.startOffset)}${replaced}${state.content.slice(range.endOffset)}`
|
|
1757
|
+
: state.content.replace(oldText, newText);
|
|
1758
|
+
await fs.writeFile(state.target, afterContent, 'utf8');
|
|
1759
|
+
const changedLine = range
|
|
1760
|
+
? range.startLine + splitLines(searchContent.slice(0, searchContent.indexOf(oldText))).length - 1
|
|
1761
|
+
: splitLines(state.content.slice(0, state.content.indexOf(oldText))).length;
|
|
1762
|
+
return editResult(relativePath, 'replace_text', state.content, afterContent, changedLine);
|
|
1763
|
+
}
|
|
1733
1764
|
|
|
1734
1765
|
async function insertRelative(root, args, mode, config = {}) {
|
|
1735
1766
|
const relativePath = String(args?.path || '').trim();
|
|
@@ -1776,62 +1807,62 @@ async function openTarget(root, args, config = {}) {
|
|
|
1776
1807
|
};
|
|
1777
1808
|
}
|
|
1778
1809
|
|
|
1779
|
-
function normalizeEditTargetArgs(args = {}) {
|
|
1780
|
-
const rawFile = String(args?.file || args?.path || args?.file_path || '').trim();
|
|
1781
|
-
const inlineRange = parseInlineRangePath(rawFile);
|
|
1782
|
-
const file = normalizeFilePathValue(rawFile, { stripInlineRange: true }).trim();
|
|
1783
|
-
const nestedEdit = args?.edit && typeof args.edit === 'object' ? args.edit : null;
|
|
1784
|
-
const startLine = args?.start_line ?? args?.line ?? inlineRange?.start_line;
|
|
1785
|
-
const endLine = args?.end_line ?? inlineRange?.end_line ?? args?.line;
|
|
1786
|
-
if (nestedEdit) {
|
|
1787
|
-
const normalizedEdit = { ...nestedEdit };
|
|
1788
|
-
if (normalizedEdit.new_content == null && normalizedEdit.content != null) {
|
|
1789
|
-
normalizedEdit.new_content = normalizedEdit.content;
|
|
1790
|
-
}
|
|
1791
|
-
if (normalizedEdit.old_text == null && normalizedEdit.old_string != null) {
|
|
1792
|
-
normalizedEdit.old_text = normalizedEdit.old_string;
|
|
1793
|
-
}
|
|
1794
|
-
if (normalizedEdit.new_text == null && normalizedEdit.content != null && normalizedEdit.old_text != null) {
|
|
1795
|
-
normalizedEdit.new_text = normalizedEdit.content;
|
|
1796
|
-
}
|
|
1797
|
-
if (normalizedEdit.new_text == null && normalizedEdit.new_string != null) {
|
|
1798
|
-
normalizedEdit.new_text = normalizedEdit.new_string;
|
|
1799
|
-
}
|
|
1800
|
-
return {
|
|
1801
|
-
path: file,
|
|
1802
|
-
file,
|
|
1803
|
-
start_line: startLine,
|
|
1804
|
-
end_line: endLine,
|
|
1805
|
-
ast_target: normalizedEdit.ast_target ?? args?.ast_target,
|
|
1806
|
-
edit: normalizedEdit
|
|
1807
|
-
};
|
|
1808
|
-
}
|
|
1810
|
+
function normalizeEditTargetArgs(args = {}) {
|
|
1811
|
+
const rawFile = String(args?.file || args?.path || args?.file_path || '').trim();
|
|
1812
|
+
const inlineRange = parseInlineRangePath(rawFile);
|
|
1813
|
+
const file = normalizeFilePathValue(rawFile, { stripInlineRange: true }).trim();
|
|
1814
|
+
const nestedEdit = args?.edit && typeof args.edit === 'object' ? args.edit : null;
|
|
1815
|
+
const startLine = args?.start_line ?? args?.line ?? inlineRange?.start_line;
|
|
1816
|
+
const endLine = args?.end_line ?? inlineRange?.end_line ?? args?.line;
|
|
1817
|
+
if (nestedEdit) {
|
|
1818
|
+
const normalizedEdit = { ...nestedEdit };
|
|
1819
|
+
if (normalizedEdit.new_content == null && normalizedEdit.content != null) {
|
|
1820
|
+
normalizedEdit.new_content = normalizedEdit.content;
|
|
1821
|
+
}
|
|
1822
|
+
if (normalizedEdit.old_text == null && normalizedEdit.old_string != null) {
|
|
1823
|
+
normalizedEdit.old_text = normalizedEdit.old_string;
|
|
1824
|
+
}
|
|
1825
|
+
if (normalizedEdit.new_text == null && normalizedEdit.content != null && normalizedEdit.old_text != null) {
|
|
1826
|
+
normalizedEdit.new_text = normalizedEdit.content;
|
|
1827
|
+
}
|
|
1828
|
+
if (normalizedEdit.new_text == null && normalizedEdit.new_string != null) {
|
|
1829
|
+
normalizedEdit.new_text = normalizedEdit.new_string;
|
|
1830
|
+
}
|
|
1831
|
+
return {
|
|
1832
|
+
path: file,
|
|
1833
|
+
file,
|
|
1834
|
+
start_line: startLine,
|
|
1835
|
+
end_line: endLine,
|
|
1836
|
+
ast_target: normalizedEdit.ast_target ?? args?.ast_target,
|
|
1837
|
+
edit: normalizedEdit
|
|
1838
|
+
};
|
|
1839
|
+
}
|
|
1809
1840
|
const topLevelOldText = args?.old_text ?? args?.old_string;
|
|
1810
1841
|
const topLevelContent = args?.content;
|
|
1811
|
-
return {
|
|
1812
|
-
path: file,
|
|
1813
|
-
file,
|
|
1814
|
-
start_line: startLine,
|
|
1815
|
-
end_line: endLine,
|
|
1816
|
-
ast_target: args?.ast_target,
|
|
1817
|
-
edit: {
|
|
1818
|
-
kind: args?.kind,
|
|
1819
|
-
target: args?.target,
|
|
1842
|
+
return {
|
|
1843
|
+
path: file,
|
|
1844
|
+
file,
|
|
1845
|
+
start_line: startLine,
|
|
1846
|
+
end_line: endLine,
|
|
1847
|
+
ast_target: args?.ast_target,
|
|
1848
|
+
edit: {
|
|
1849
|
+
kind: args?.kind,
|
|
1850
|
+
target: args?.target,
|
|
1820
1851
|
new_content: args?.new_content ?? args?.content,
|
|
1821
1852
|
old_text: args?.old_text,
|
|
1822
1853
|
new_text: args?.new_text ?? (topLevelOldText != null && topLevelContent != null ? topLevelContent : undefined),
|
|
1823
|
-
old_string: args?.old_string,
|
|
1824
|
-
new_string: args?.new_string,
|
|
1825
|
-
anchor_text: args?.anchor_text,
|
|
1826
|
-
content: args?.content,
|
|
1827
|
-
replace_all: args?.replace_all ?? args?.replaceAll
|
|
1828
|
-
}
|
|
1829
|
-
};
|
|
1830
|
-
}
|
|
1854
|
+
old_string: args?.old_string,
|
|
1855
|
+
new_string: args?.new_string,
|
|
1856
|
+
anchor_text: args?.anchor_text,
|
|
1857
|
+
content: args?.content,
|
|
1858
|
+
replace_all: args?.replace_all ?? args?.replaceAll
|
|
1859
|
+
}
|
|
1860
|
+
};
|
|
1861
|
+
}
|
|
1831
1862
|
|
|
1832
1863
|
async function editTarget(root, args, config = {}) {
|
|
1833
|
-
const normalized = normalizeEditTargetArgs(args);
|
|
1834
|
-
const file = normalized.file || normalizeFilePathValue(args?.recent_file || '', { stripInlineRange: true }).trim();
|
|
1864
|
+
const normalized = normalizeEditTargetArgs(args);
|
|
1865
|
+
const file = normalized.file || normalizeFilePathValue(args?.recent_file || '', { stripInlineRange: true }).trim();
|
|
1835
1866
|
const astTarget = normalized.ast_target;
|
|
1836
1867
|
const edit = normalized.edit || {};
|
|
1837
1868
|
let kind = String(edit.kind || '').trim();
|
|
@@ -1842,6 +1873,7 @@ async function editTarget(root, args, config = {}) {
|
|
|
1842
1873
|
edit.new_text = edit.new_string;
|
|
1843
1874
|
}
|
|
1844
1875
|
const hasContent = edit.new_content != null || edit.content != null;
|
|
1876
|
+
const hasExplicitRewrite = edit.kind === 'rewrite_file' || args?.kind === 'rewrite_file';
|
|
1845
1877
|
const hasTargetHint = Boolean(edit.symbol || args?.symbol || edit.line || args?.line || edit.target);
|
|
1846
1878
|
if (!kind) {
|
|
1847
1879
|
if (hasContent && hasTargetHint) {
|
|
@@ -1850,23 +1882,23 @@ async function editTarget(root, args, config = {}) {
|
|
|
1850
1882
|
kind = 'replace_text';
|
|
1851
1883
|
} else if ((edit.anchor_text != null || edit.target_text != null) && (edit.content != null || edit.new_content != null)) {
|
|
1852
1884
|
kind = String(edit.position || edit.mode || args?.position || '').trim() === 'after' ? 'insert_after' : 'insert_before';
|
|
1853
|
-
} else if (hasContent) {
|
|
1885
|
+
} else if (hasContent && hasExplicitRewrite) {
|
|
1854
1886
|
kind = 'rewrite_file';
|
|
1855
1887
|
}
|
|
1856
1888
|
}
|
|
1857
|
-
if (!file || !kind) {
|
|
1858
|
-
const recentFile = String(args?.recent_file || '').trim();
|
|
1859
|
-
const rawArgs = typeof args?._raw === 'string' && args._raw.trim() ? ` Raw tool arguments: ${args._raw.trim()}.` : '';
|
|
1860
|
-
const missing = !file
|
|
1861
|
-
? 'file path'
|
|
1862
|
-
: edit.old_text != null && edit.new_text == null && edit.content == null
|
|
1863
|
-
? 'new_text'
|
|
1864
|
-
: 'edit operation';
|
|
1865
|
-
const hint = recentFile
|
|
1866
|
-
? ` If you meant the recently read file ${recentFile}, use edit with {file:"${recentFile}", old_text:"...", new_text:"..."} for a text replacement, or {file:"${recentFile}",
|
|
1867
|
-
: ' Use edit with {file:"path", old_text:"...", new_text:"..."} for a text replacement, or {file:"path",
|
|
1868
|
-
throw new Error(`edit requires ${missing}.${rawArgs}${hint}`);
|
|
1869
|
-
}
|
|
1889
|
+
if (!file || !kind) {
|
|
1890
|
+
const recentFile = String(args?.recent_file || '').trim();
|
|
1891
|
+
const rawArgs = typeof args?._raw === 'string' && args._raw.trim() ? ` Raw tool arguments: ${args._raw.trim()}.` : '';
|
|
1892
|
+
const missing = !file
|
|
1893
|
+
? 'file path'
|
|
1894
|
+
: edit.old_text != null && edit.new_text == null && edit.content == null
|
|
1895
|
+
? 'new_text'
|
|
1896
|
+
: 'edit operation';
|
|
1897
|
+
const hint = recentFile
|
|
1898
|
+
? ` If you meant the recently read file ${recentFile}, use edit with {file:"${recentFile}", old_text:"...", new_text:"..."} for a text replacement, or {file:"${recentFile}", kind:"rewrite_file", new_content:"..."} for a full rewrite.`
|
|
1899
|
+
: ' Use edit with {file:"path", old_text:"...", new_text:"..."} for a text replacement, or {file:"path", kind:"rewrite_file", new_content:"..."} for a full rewrite.';
|
|
1900
|
+
throw new Error(`edit requires ${missing}.${rawArgs}${hint}`);
|
|
1901
|
+
}
|
|
1870
1902
|
if (astTarget) {
|
|
1871
1903
|
if (kind !== 'replace_block') {
|
|
1872
1904
|
throw new Error('AST-scoped edit only supports replace_block');
|
|
@@ -1910,16 +1942,16 @@ async function editTarget(root, args, config = {}) {
|
|
|
1910
1942
|
}, config);
|
|
1911
1943
|
}
|
|
1912
1944
|
}
|
|
1913
|
-
if (kind === 'replace_text') {
|
|
1914
|
-
return replaceText(root, {
|
|
1915
|
-
path: file,
|
|
1916
|
-
old_text: edit.old_text,
|
|
1917
|
-
new_text: edit.new_text,
|
|
1918
|
-
replace_all: edit.replace_all ?? args?.replace_all ?? args?.replaceAll,
|
|
1919
|
-
start_line: edit.start_line ?? normalized.start_line,
|
|
1920
|
-
end_line: edit.end_line ?? normalized.end_line
|
|
1921
|
-
}, config);
|
|
1922
|
-
}
|
|
1945
|
+
if (kind === 'replace_text') {
|
|
1946
|
+
return replaceText(root, {
|
|
1947
|
+
path: file,
|
|
1948
|
+
old_text: edit.old_text,
|
|
1949
|
+
new_text: edit.new_text,
|
|
1950
|
+
replace_all: edit.replace_all ?? args?.replace_all ?? args?.replaceAll,
|
|
1951
|
+
start_line: edit.start_line ?? normalized.start_line,
|
|
1952
|
+
end_line: edit.end_line ?? normalized.end_line
|
|
1953
|
+
}, config);
|
|
1954
|
+
}
|
|
1923
1955
|
if (kind === 'insert_before') {
|
|
1924
1956
|
return insertRelative(root, { path: file, anchor_text: edit.anchor_text, content: edit.content }, 'insert_before', config);
|
|
1925
1957
|
}
|
|
@@ -1936,19 +1968,19 @@ async function editTarget(root, args, config = {}) {
|
|
|
1936
1968
|
throw new Error(`edit does not support kind: ${kind}`);
|
|
1937
1969
|
}
|
|
1938
1970
|
|
|
1939
|
-
export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSystemEvent, getTodos, onTodosUpdate, getPlanState, onPlanStateUpdate, fffAdapter }) {
|
|
1971
|
+
export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSystemEvent, getTodos, onTodosUpdate, getPlanState, onPlanStateUpdate, fffAdapter, backupManager }) {
|
|
1940
1972
|
const emitSystemTool = (event) => {
|
|
1941
1973
|
if (typeof onSystemEvent === 'function' && event) onSystemEvent(event);
|
|
1942
1974
|
};
|
|
1943
|
-
const astSelectionCache = new Map();
|
|
1944
|
-
let lastAstTarget = null;
|
|
1945
|
-
let lastReadPath = '';
|
|
1946
|
-
let lastReadRange = null;
|
|
1947
|
-
const rememberAstSelection = (filePath, astTarget) => {
|
|
1948
|
-
const key = normalizePath(filePath).trim();
|
|
1949
|
-
if (!key || !astTarget) return;
|
|
1950
|
-
lastAstTarget = astTarget;
|
|
1951
|
-
astSelectionCache.set(key, astTarget);
|
|
1975
|
+
const astSelectionCache = new Map();
|
|
1976
|
+
let lastAstTarget = null;
|
|
1977
|
+
let lastReadPath = '';
|
|
1978
|
+
let lastReadRange = null;
|
|
1979
|
+
const rememberAstSelection = (filePath, astTarget) => {
|
|
1980
|
+
const key = normalizePath(filePath).trim();
|
|
1981
|
+
if (!key || !astTarget) return;
|
|
1982
|
+
lastAstTarget = astTarget;
|
|
1983
|
+
astSelectionCache.set(key, astTarget);
|
|
1952
1984
|
};
|
|
1953
1985
|
const hasExplicitBlockHints = (args = {}) =>
|
|
1954
1986
|
Boolean(
|
|
@@ -1961,15 +1993,15 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
1961
1993
|
args?.edit?.line ||
|
|
1962
1994
|
args?.edit?.target
|
|
1963
1995
|
);
|
|
1964
|
-
const resolveCachedAstTarget = (args = {}, { requireAstScope = false } = {}) => {
|
|
1965
|
-
const file = normalizeFilePathValue(args?.path || args?.file || args?.file_path || args?.ast_target?.path || '', { stripInlineRange: true }).trim();
|
|
1966
|
-
if (args?.ast_target) return args.ast_target;
|
|
1967
|
-
if (file) {
|
|
1968
|
-
if (requireAstScope && hasExplicitBlockHints(args)) return null;
|
|
1969
|
-
return astSelectionCache.get(file) || null;
|
|
1970
|
-
}
|
|
1971
|
-
return lastAstTarget || null;
|
|
1972
|
-
};
|
|
1996
|
+
const resolveCachedAstTarget = (args = {}, { requireAstScope = false } = {}) => {
|
|
1997
|
+
const file = normalizeFilePathValue(args?.path || args?.file || args?.file_path || args?.ast_target?.path || '', { stripInlineRange: true }).trim();
|
|
1998
|
+
if (args?.ast_target) return args.ast_target;
|
|
1999
|
+
if (file) {
|
|
2000
|
+
if (requireAstScope && hasExplicitBlockHints(args)) return null;
|
|
2001
|
+
return astSelectionCache.get(file) || null;
|
|
2002
|
+
}
|
|
2003
|
+
return lastAstTarget || null;
|
|
2004
|
+
};
|
|
1973
2005
|
const ensureProjectIndex = async () => {
|
|
1974
2006
|
const eventId = `project-index:${Date.now()}`;
|
|
1975
2007
|
const name = 'project_index(.codemini/project-map.json,.codemini/file-index.json)';
|
|
@@ -2021,17 +2053,17 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2021
2053
|
{
|
|
2022
2054
|
type: 'function',
|
|
2023
2055
|
function: {
|
|
2024
|
-
name: 'read',
|
|
2025
|
-
description:
|
|
2026
|
-
'Inspect code or text files. Use {path} for normal reads; file_path/file are accepted aliases. Use start_line/end_line or path:"src/app.ts:10-40" for ranges. Normal code reads include enclosing symbol metadata when available; read with query returns the matched AST node and ast_target.',
|
|
2027
|
-
parameters: {
|
|
2028
|
-
type: 'object',
|
|
2029
|
-
properties: {
|
|
2030
|
-
path: { type: 'string', description: 'File path to read. You can also include an inline range like src/app.ts:10-40.' },
|
|
2031
|
-
file_path: { type: 'string', description: 'Alias for path' },
|
|
2032
|
-
file: { type: 'string', description: 'Alias for path' },
|
|
2033
|
-
start_line: { type: 'number', description: '1-based start line' },
|
|
2034
|
-
end_line: { type: 'number', description: 'Inclusive end line' },
|
|
2056
|
+
name: 'read',
|
|
2057
|
+
description:
|
|
2058
|
+
'Inspect code or text files. Use {path} for normal reads; file_path/file are accepted aliases. Use start_line/end_line or path:"src/app.ts:10-40" for ranges. Normal code reads include enclosing symbol metadata when available; read with query returns the matched AST node and ast_target.',
|
|
2059
|
+
parameters: {
|
|
2060
|
+
type: 'object',
|
|
2061
|
+
properties: {
|
|
2062
|
+
path: { type: 'string', description: 'File path to read. You can also include an inline range like src/app.ts:10-40.' },
|
|
2063
|
+
file_path: { type: 'string', description: 'Alias for path' },
|
|
2064
|
+
file: { type: 'string', description: 'Alias for path' },
|
|
2065
|
+
start_line: { type: 'number', description: '1-based start line' },
|
|
2066
|
+
end_line: { type: 'number', description: 'Inclusive end line' },
|
|
2035
2067
|
max_chars: { type: 'number', description: 'Max chars to return' },
|
|
2036
2068
|
ast_target: { type: 'object', description: 'AST target from ast_query or a prior AST selection. When provided, read returns that node instead of a line window.' },
|
|
2037
2069
|
query: { type: 'string', description: 'Optional Tree-sitter query to run inline before reading the first matched AST node. Use with path for one-shot function/class/method reads.' },
|
|
@@ -2050,10 +2082,10 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2050
2082
|
'Search file contents. Use this for code search before read or edit. Do not use run with grep or rg for normal code search.',
|
|
2051
2083
|
parameters: {
|
|
2052
2084
|
type: 'object',
|
|
2053
|
-
properties: {
|
|
2054
|
-
pattern: { type: 'string', description: 'Search pattern' },
|
|
2055
|
-
path: { type: 'string', description: 'Directory or file to search. file_path/file/dir/directory/cwd are accepted aliases.' },
|
|
2056
|
-
regex: { type: 'boolean', description: 'Treat pattern as regex' },
|
|
2085
|
+
properties: {
|
|
2086
|
+
pattern: { type: 'string', description: 'Search pattern' },
|
|
2087
|
+
path: { type: 'string', description: 'Directory or file to search. file_path/file/dir/directory/cwd are accepted aliases.' },
|
|
2088
|
+
regex: { type: 'boolean', description: 'Treat pattern as regex' },
|
|
2057
2089
|
case_sensitive: { type: 'boolean', description: 'Case-sensitive matching' },
|
|
2058
2090
|
max_results: { type: 'number', description: 'Max matches to return' },
|
|
2059
2091
|
language: { type: 'string', description: 'Filter by language' },
|
|
@@ -2070,9 +2102,9 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2070
2102
|
description: 'List files and directories in a workspace path. Use this for quick directory discovery before deeper reads.',
|
|
2071
2103
|
parameters: {
|
|
2072
2104
|
type: 'object',
|
|
2073
|
-
properties: {
|
|
2074
|
-
path: { type: 'string', description: 'Directory path to list. file_path/file/dir/directory are accepted aliases.' },
|
|
2075
|
-
include_hidden: { type: 'boolean', description: 'Include dotfiles' }
|
|
2105
|
+
properties: {
|
|
2106
|
+
path: { type: 'string', description: 'Directory path to list. file_path/file/dir/directory are accepted aliases.' },
|
|
2107
|
+
include_hidden: { type: 'boolean', description: 'Include dotfiles' }
|
|
2076
2108
|
}
|
|
2077
2109
|
}
|
|
2078
2110
|
}
|
|
@@ -2080,9 +2112,9 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2080
2112
|
{
|
|
2081
2113
|
type: 'function',
|
|
2082
2114
|
function: {
|
|
2083
|
-
name: 'query_project_index',
|
|
2084
|
-
description:
|
|
2085
|
-
'Query the lightweight project index before broad file reads. Returns relevant files plus Symbol Graph summaries: symbol_id, type, range, signature, calls, called_by, imports, writes, and emits.',
|
|
2115
|
+
name: 'query_project_index',
|
|
2116
|
+
description:
|
|
2117
|
+
'Query the lightweight project index before broad file reads. Returns relevant files plus Symbol Graph summaries: symbol_id, type, range, signature, calls, called_by, imports, writes, and emits.',
|
|
2086
2118
|
parameters: {
|
|
2087
2119
|
type: 'object',
|
|
2088
2120
|
properties: {
|
|
@@ -2098,24 +2130,24 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2098
2130
|
{
|
|
2099
2131
|
type: 'function',
|
|
2100
2132
|
function: {
|
|
2101
|
-
name: 'edit',
|
|
2102
|
-
description:
|
|
2103
|
-
'Edit existing files. Prefer {path, old_text, new_text}; old_string/new_string and file_path/file are accepted aliases. If old_text is repeated, use path:"file:10-30" or rely on the most recent read range. Set replace_all=true to replace every match. Advanced kind/ast_target edits are still supported.',
|
|
2104
|
-
parameters: {
|
|
2105
|
-
type: 'object',
|
|
2106
|
-
properties: {
|
|
2107
|
-
path: { type: 'string', description: 'File path to edit. Inline ranges like src/app.js:10-30 are accepted.' },
|
|
2108
|
-
file_path: { type: 'string', description: 'Alias for path' },
|
|
2109
|
-
file: { type: 'string', description: 'Alias for path' },
|
|
2110
|
-
new_content: { type: 'string', description: 'Replacement content' },
|
|
2111
|
-
old_text: { type: 'string', description: 'Exact text to replace' },
|
|
2112
|
-
new_text: { type: 'string', description: 'Replacement text' },
|
|
2113
|
-
old_string: { type: 'string', description: 'Alias for old_text' },
|
|
2114
|
-
new_string: { type: 'string', description: 'Alias for new_text' },
|
|
2115
|
-
replace_all: { type: 'boolean', description: 'Replace all matching old_text occurrences' },
|
|
2116
|
-
start_line: { type: 'number', description: 'Optional range start for disambiguating old_text' },
|
|
2117
|
-
end_line: { type: 'number', description: 'Optional range end for disambiguating old_text' },
|
|
2118
|
-
anchor_text: { type: 'string', description: 'Anchor text for inserts' },
|
|
2133
|
+
name: 'edit',
|
|
2134
|
+
description:
|
|
2135
|
+
'Edit existing files. Prefer {path, old_text, new_text}; old_string/new_string and file_path/file are accepted aliases. If old_text is repeated, use path:"file:10-30" or rely on the most recent read range. Set replace_all=true to replace every match. Advanced kind/ast_target edits are still supported.',
|
|
2136
|
+
parameters: {
|
|
2137
|
+
type: 'object',
|
|
2138
|
+
properties: {
|
|
2139
|
+
path: { type: 'string', description: 'File path to edit. Inline ranges like src/app.js:10-30 are accepted.' },
|
|
2140
|
+
file_path: { type: 'string', description: 'Alias for path' },
|
|
2141
|
+
file: { type: 'string', description: 'Alias for path' },
|
|
2142
|
+
new_content: { type: 'string', description: 'Replacement content' },
|
|
2143
|
+
old_text: { type: 'string', description: 'Exact text to replace' },
|
|
2144
|
+
new_text: { type: 'string', description: 'Replacement text' },
|
|
2145
|
+
old_string: { type: 'string', description: 'Alias for old_text' },
|
|
2146
|
+
new_string: { type: 'string', description: 'Alias for new_text' },
|
|
2147
|
+
replace_all: { type: 'boolean', description: 'Replace all matching old_text occurrences' },
|
|
2148
|
+
start_line: { type: 'number', description: 'Optional range start for disambiguating old_text' },
|
|
2149
|
+
end_line: { type: 'number', description: 'Optional range end for disambiguating old_text' },
|
|
2150
|
+
anchor_text: { type: 'string', description: 'Anchor text for inserts' },
|
|
2119
2151
|
content: { type: 'string', description: 'Content to insert or append' },
|
|
2120
2152
|
position: { type: 'string', description: 'before or after' },
|
|
2121
2153
|
kind: { type: 'string', description: 'replace_block, replace_text, insert_before, insert_after, or rewrite_file' },
|
|
@@ -2125,23 +2157,23 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2125
2157
|
line: { type: 'number', description: 'Line to target' },
|
|
2126
2158
|
edit: { type: 'object', description: 'Structured edit input' }
|
|
2127
2159
|
},
|
|
2128
|
-
required: ['path']
|
|
2160
|
+
required: ['path', 'content']
|
|
2129
2161
|
}
|
|
2130
2162
|
}
|
|
2131
2163
|
},
|
|
2132
2164
|
{
|
|
2133
2165
|
type: 'function',
|
|
2134
2166
|
function: {
|
|
2135
|
-
name: 'write',
|
|
2136
|
-
description:
|
|
2137
|
-
'Create a new file, append to a file, or perform an explicit whole-file rewrite. Always include path and content; file_path/file are accepted aliases. For existing files, prefer edit after reading the relevant range. Overwriting an existing file requires full_file_rewrite=true.',
|
|
2138
|
-
parameters: {
|
|
2139
|
-
type: 'object',
|
|
2140
|
-
properties: {
|
|
2141
|
-
path: { type: 'string', description: 'Required file path like src/app.js or pages/index.html. Never omit this.' },
|
|
2142
|
-
file_path: { type: 'string', description: 'Alias for path' },
|
|
2143
|
-
file: { type: 'string', description: 'Alias for path' },
|
|
2144
|
-
content: { type: 'string', description: 'Content to write' },
|
|
2167
|
+
name: 'write',
|
|
2168
|
+
description:
|
|
2169
|
+
'Create a new file, append to a file, or perform an explicit whole-file rewrite. Always include path and content; file_path/file are accepted aliases. For existing files, prefer edit after reading the relevant range. Overwriting an existing file requires full_file_rewrite=true.',
|
|
2170
|
+
parameters: {
|
|
2171
|
+
type: 'object',
|
|
2172
|
+
properties: {
|
|
2173
|
+
path: { type: 'string', description: 'Required file path like src/app.js or pages/index.html. Never omit this.' },
|
|
2174
|
+
file_path: { type: 'string', description: 'Alias for path' },
|
|
2175
|
+
file: { type: 'string', description: 'Alias for path' },
|
|
2176
|
+
content: { type: 'string', description: 'Content to write' },
|
|
2145
2177
|
append: { type: 'boolean', description: 'Append instead of overwrite' },
|
|
2146
2178
|
full_file_rewrite: { type: 'boolean', description: 'Set true for whole-file rewrites' }
|
|
2147
2179
|
},
|
|
@@ -2157,12 +2189,12 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2157
2189
|
'Delete a file or directory inside the workspace. Missing targets fail. Workspace escape attempts are rejected.',
|
|
2158
2190
|
parameters: {
|
|
2159
2191
|
type: 'object',
|
|
2160
|
-
properties: {
|
|
2161
|
-
path: { type: 'string', description: 'File or directory path to delete. file_path/file/target are accepted aliases.' },
|
|
2162
|
-
file_path: { type: 'string', description: 'Alias for path' },
|
|
2163
|
-
file: { type: 'string', description: 'Alias for path' },
|
|
2164
|
-
target: { type: 'string', description: 'Alias for path' }
|
|
2165
|
-
},
|
|
2192
|
+
properties: {
|
|
2193
|
+
path: { type: 'string', description: 'File or directory path to delete. file_path/file/target are accepted aliases.' },
|
|
2194
|
+
file_path: { type: 'string', description: 'Alias for path' },
|
|
2195
|
+
file: { type: 'string', description: 'Alias for path' },
|
|
2196
|
+
target: { type: 'string', description: 'Alias for path' }
|
|
2197
|
+
},
|
|
2166
2198
|
required: ['path']
|
|
2167
2199
|
}
|
|
2168
2200
|
}
|
|
@@ -2530,7 +2562,36 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2530
2562
|
};
|
|
2531
2563
|
|
|
2532
2564
|
const definitions = [...primaryDefinitions];
|
|
2533
|
-
const activeFffAdapter = fffAdapter || createFffAdapter({ workspaceRoot, config });
|
|
2565
|
+
const activeFffAdapter = fffAdapter || createFffAdapter({ workspaceRoot, config });
|
|
2566
|
+
async function backupNonGitPathOnce(rawPath) {
|
|
2567
|
+
if (!backupManager || typeof backupManager.backupOnce !== 'function') return null;
|
|
2568
|
+
const normalized = normalizeFilePathValue(rawPath || '', { stripInlineRange: true }).trim();
|
|
2569
|
+
if (!normalized) return null;
|
|
2570
|
+
try {
|
|
2571
|
+
const backup = await backupManager.backupOnce(normalized);
|
|
2572
|
+
return backup?.ok ? backup : null;
|
|
2573
|
+
} catch (error) {
|
|
2574
|
+
return {
|
|
2575
|
+
ok: false,
|
|
2576
|
+
path: normalized,
|
|
2577
|
+
error: error instanceof Error ? error.message : String(error)
|
|
2578
|
+
};
|
|
2579
|
+
}
|
|
2580
|
+
}
|
|
2581
|
+
function attachBackup(result, backup) {
|
|
2582
|
+
if (!backup || !result || typeof result !== 'object') return result;
|
|
2583
|
+
return {
|
|
2584
|
+
...result,
|
|
2585
|
+
non_git_backup: true,
|
|
2586
|
+
backupPath: backup.backupPath || '',
|
|
2587
|
+
backupRelativePath: backup.backupRelativePath || '',
|
|
2588
|
+
backupCreated: backup.created === true,
|
|
2589
|
+
backupReused: backup.reused === true,
|
|
2590
|
+
backupSkipped: backup.skipped === true || (!backup.backupPath && backup.existed === true),
|
|
2591
|
+
backupError: backup.error || '',
|
|
2592
|
+
backupReason: backup.reason || ''
|
|
2593
|
+
};
|
|
2594
|
+
}
|
|
2534
2595
|
let fffConnected = false;
|
|
2535
2596
|
|
|
2536
2597
|
async function ensureFffConnected() {
|
|
@@ -2563,8 +2624,8 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2563
2624
|
return builtinGlob(workspaceRoot, args, config);
|
|
2564
2625
|
}
|
|
2565
2626
|
|
|
2566
|
-
async function list(args) {
|
|
2567
|
-
const normalizedArgs = normalizePathArgs(args, ['dir', 'directory', 'file_path', 'file', 'target']);
|
|
2627
|
+
async function list(args) {
|
|
2628
|
+
const normalizedArgs = normalizePathArgs(args, ['dir', 'directory', 'file_path', 'file', 'target']);
|
|
2568
2629
|
if (!resolvesOutsideRoot(workspaceRoot, normalizedArgs?.path || '.') && activeFffAdapter?.list) {
|
|
2569
2630
|
try {
|
|
2570
2631
|
await ensureFffConnected();
|
|
@@ -2585,15 +2646,15 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2585
2646
|
...args,
|
|
2586
2647
|
path: args?.path || directAstTarget?.path,
|
|
2587
2648
|
ast_target: directAstTarget
|
|
2588
|
-
});
|
|
2589
|
-
if (directAstTarget?.path) rememberAstSelection(directAstTarget.path, directAstTarget);
|
|
2590
|
-
const readPath = normalizePath(result?.path || directAstTarget?.path || '').trim();
|
|
2591
|
-
if (readPath) {
|
|
2592
|
-
lastReadPath = readPath;
|
|
2593
|
-
lastReadRange = null;
|
|
2594
|
-
}
|
|
2595
|
-
return { ...result, ast_target: directAstTarget };
|
|
2596
|
-
}
|
|
2649
|
+
});
|
|
2650
|
+
if (directAstTarget?.path) rememberAstSelection(directAstTarget.path, directAstTarget);
|
|
2651
|
+
const readPath = normalizePath(result?.path || directAstTarget?.path || '').trim();
|
|
2652
|
+
if (readPath) {
|
|
2653
|
+
lastReadPath = readPath;
|
|
2654
|
+
lastReadRange = null;
|
|
2655
|
+
}
|
|
2656
|
+
return { ...result, ast_target: directAstTarget };
|
|
2657
|
+
}
|
|
2597
2658
|
|
|
2598
2659
|
if (inlineQuery) {
|
|
2599
2660
|
const queryResult = await queryAst(workspaceRoot, args);
|
|
@@ -2614,30 +2675,30 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2614
2675
|
path: firstTarget.path,
|
|
2615
2676
|
ast_target: firstTarget
|
|
2616
2677
|
});
|
|
2617
|
-
const readPath = normalizePath(result?.path || firstTarget?.path || '').trim();
|
|
2618
|
-
if (readPath) {
|
|
2619
|
-
lastReadPath = readPath;
|
|
2620
|
-
lastReadRange = null;
|
|
2621
|
-
}
|
|
2622
|
-
return {
|
|
2623
|
-
path: result.path,
|
|
2624
|
-
language: result.language,
|
|
2625
|
-
node: result.node,
|
|
2626
|
-
content: result.content,
|
|
2627
|
-
ast_target: firstTarget,
|
|
2628
|
-
symbol: {
|
|
2629
|
-
symbol_id: `${result.path}#${firstTarget.name || firstTarget.node_type || `${result.node.start_line}-${result.node.end_line}`}`,
|
|
2630
|
-
type: result.node.node_type,
|
|
2631
|
-
file: result.path,
|
|
2632
|
-
range: {
|
|
2633
|
-
start_line: result.node.start_line,
|
|
2634
|
-
end_line: result.node.end_line
|
|
2635
|
-
}
|
|
2636
|
-
},
|
|
2637
|
-
query: inlineQuery,
|
|
2638
|
-
capture_name: String(args?.capture_name || '').trim() || undefined,
|
|
2639
|
-
matches: queryResult.matches.length
|
|
2640
|
-
};
|
|
2678
|
+
const readPath = normalizePath(result?.path || firstTarget?.path || '').trim();
|
|
2679
|
+
if (readPath) {
|
|
2680
|
+
lastReadPath = readPath;
|
|
2681
|
+
lastReadRange = null;
|
|
2682
|
+
}
|
|
2683
|
+
return {
|
|
2684
|
+
path: result.path,
|
|
2685
|
+
language: result.language,
|
|
2686
|
+
node: result.node,
|
|
2687
|
+
content: result.content,
|
|
2688
|
+
ast_target: firstTarget,
|
|
2689
|
+
symbol: {
|
|
2690
|
+
symbol_id: `${result.path}#${firstTarget.name || firstTarget.node_type || `${result.node.start_line}-${result.node.end_line}`}`,
|
|
2691
|
+
type: result.node.node_type,
|
|
2692
|
+
file: result.path,
|
|
2693
|
+
range: {
|
|
2694
|
+
start_line: result.node.start_line,
|
|
2695
|
+
end_line: result.node.end_line
|
|
2696
|
+
}
|
|
2697
|
+
},
|
|
2698
|
+
query: inlineQuery,
|
|
2699
|
+
capture_name: String(args?.capture_name || '').trim() || undefined,
|
|
2700
|
+
matches: queryResult.matches.length
|
|
2701
|
+
};
|
|
2641
2702
|
}
|
|
2642
2703
|
|
|
2643
2704
|
const result = await readFile(workspaceRoot, {
|
|
@@ -2648,14 +2709,14 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2648
2709
|
? args.max_chars
|
|
2649
2710
|
: config.context?.read_file_max_chars ?? 24000
|
|
2650
2711
|
}, config);
|
|
2651
|
-
const readPath = normalizePath(result?.path || args?.path || '').trim();
|
|
2652
|
-
if (readPath) {
|
|
2653
|
-
lastReadPath = readPath;
|
|
2654
|
-
lastReadRange = result?.phase === 'content'
|
|
2655
|
-
? { path: readPath, start_line: result.start_line, end_line: result.end_line }
|
|
2656
|
-
: null;
|
|
2657
|
-
}
|
|
2658
|
-
return result;
|
|
2712
|
+
const readPath = normalizePath(result?.path || args?.path || '').trim();
|
|
2713
|
+
if (readPath) {
|
|
2714
|
+
lastReadPath = readPath;
|
|
2715
|
+
lastReadRange = result?.phase === 'content'
|
|
2716
|
+
? { path: readPath, start_line: result.start_line, end_line: result.end_line }
|
|
2717
|
+
: null;
|
|
2718
|
+
}
|
|
2719
|
+
return result;
|
|
2659
2720
|
},
|
|
2660
2721
|
query_project_index: async (args) => {
|
|
2661
2722
|
await ensureProjectIndex();
|
|
@@ -2681,16 +2742,20 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2681
2742
|
edit: async (args) => {
|
|
2682
2743
|
await ensureProjectIndex();
|
|
2683
2744
|
const normalizedKind = String(args?.edit?.kind || args?.kind || '').trim();
|
|
2684
|
-
const
|
|
2685
|
-
const
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2745
|
+
const hasReplaceTextArgs = args?.edit?.old_text != null || args?.old_text != null || args?.old_string != null;
|
|
2746
|
+
const astTarget = hasReplaceTextArgs || (normalizedKind && normalizedKind !== 'replace_block')
|
|
2747
|
+
? null
|
|
2748
|
+
: resolveCachedAstTarget(args, { requireAstScope: normalizedKind === 'replace_block' });
|
|
2749
|
+
const editPath = normalizeFilePathValue(args?.path || args?.file || args?.file_path || args?.ast_target?.path || args?.edit?.target?.path || '', { stripInlineRange: true }).trim();
|
|
2750
|
+
const shouldUseRecentReadRange =
|
|
2751
|
+
editPath &&
|
|
2752
|
+
lastReadRange?.path === editPath &&
|
|
2753
|
+
!Number.isFinite(Number(args?.start_line || args?.line || args?.edit?.start_line)) &&
|
|
2754
|
+
!Number.isFinite(Number(args?.end_line || args?.edit?.end_line));
|
|
2755
|
+
const rangeArgs = shouldUseRecentReadRange
|
|
2756
|
+
? { start_line: lastReadRange.start_line, end_line: lastReadRange.end_line }
|
|
2757
|
+
: {};
|
|
2758
|
+
const backup = await backupNonGitPathOnce(editPath || astTarget?.path);
|
|
2694
2759
|
const result = await editTarget(
|
|
2695
2760
|
workspaceRoot,
|
|
2696
2761
|
astTarget
|
|
@@ -2698,21 +2763,25 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2698
2763
|
: { ...args, ...rangeArgs, recent_file: lastReadPath },
|
|
2699
2764
|
config
|
|
2700
2765
|
);
|
|
2701
|
-
if (result?.path) await refreshProjectFile(result.path);
|
|
2702
|
-
return result;
|
|
2703
|
-
},
|
|
2704
|
-
write: async (args) => {
|
|
2705
|
-
await ensureProjectIndex();
|
|
2706
|
-
const
|
|
2707
|
-
|
|
2708
|
-
|
|
2709
|
-
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2766
|
+
if (result?.path) await refreshProjectFile(result.path);
|
|
2767
|
+
return attachBackup(result, backup);
|
|
2768
|
+
},
|
|
2769
|
+
write: async (args) => {
|
|
2770
|
+
await ensureProjectIndex();
|
|
2771
|
+
const writePath = normalizeFilePathValue(args?.path || args?.file || args?.file_path || '', { stripInlineRange: true }).trim();
|
|
2772
|
+
const backup = await backupNonGitPathOnce(writePath);
|
|
2773
|
+
const result = await writeFile(workspaceRoot, args, config);
|
|
2774
|
+
if (result?.path) await refreshProjectFile(result.path);
|
|
2775
|
+
return attachBackup(result, backup);
|
|
2776
|
+
},
|
|
2777
|
+
delete: Object.assign(async (args) => {
|
|
2778
|
+
await ensureProjectIndex();
|
|
2779
|
+
const deletePathValue = normalizeFilePathValue(args?.path || args?.file || args?.file_path || args?.target || '', { stripInlineRange: true }).trim();
|
|
2780
|
+
const backup = await backupNonGitPathOnce(deletePathValue);
|
|
2781
|
+
const result = await deletePath(workspaceRoot, args, config);
|
|
2782
|
+
if (result?.path) await refreshProjectFile(result.path);
|
|
2783
|
+
return attachBackup(result, backup);
|
|
2784
|
+
}, {
|
|
2716
2785
|
prepareApproval: async (args) => {
|
|
2717
2786
|
const target = await prepareDeleteTarget(workspaceRoot, args, config);
|
|
2718
2787
|
return {
|
|
@@ -2994,41 +3063,50 @@ export function getBuiltinTools({ workspaceRoot = process.cwd(), config, onSyste
|
|
|
2994
3063
|
return lines.join('\n');
|
|
2995
3064
|
},
|
|
2996
3065
|
|
|
2997
|
-
edit(result) {
|
|
2998
|
-
if (!result || typeof result !== 'object') return String(result);
|
|
2999
|
-
const p = result.path || '';
|
|
3000
|
-
const action = result.action || '';
|
|
3001
|
-
const line = result.changed_line || 0;
|
|
3002
|
-
const
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3066
|
+
edit(result) {
|
|
3067
|
+
if (!result || typeof result !== 'object') return String(result);
|
|
3068
|
+
const p = result.path || '';
|
|
3069
|
+
const action = result.action || '';
|
|
3070
|
+
const line = result.changed_line || 0;
|
|
3071
|
+
const backup = result.backupPath
|
|
3072
|
+
? `\nbackup: ${result.backupPath}${result.backupReused ? ' (reused)' : ''}`
|
|
3073
|
+
: '';
|
|
3074
|
+
const summary = `${action} ${p}${line > 0 ? ` @L${line}` : ''}${backup}`;
|
|
3075
|
+
const diffPreview = result.diff_preview || '';
|
|
3076
|
+
if (diffPreview) {
|
|
3077
|
+
const trimmed = diffPreview.length > 600 ? `${diffPreview.slice(0, 597)}...` : diffPreview;
|
|
3006
3078
|
return `${summary}\n${trimmed}`;
|
|
3007
3079
|
}
|
|
3008
3080
|
return summary + (result.ok !== false ? '' : ` [FAILED: ${result.error || 'unknown'}]`);
|
|
3009
3081
|
},
|
|
3010
3082
|
|
|
3011
|
-
write(result) {
|
|
3012
|
-
if (!result || typeof result !== 'object') return String(result);
|
|
3013
|
-
const p = result.path || '';
|
|
3014
|
-
const action = result.action || 'write';
|
|
3015
|
-
const line = result.changed_line || 0;
|
|
3016
|
-
const
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3083
|
+
write(result) {
|
|
3084
|
+
if (!result || typeof result !== 'object') return String(result);
|
|
3085
|
+
const p = result.path || '';
|
|
3086
|
+
const action = result.action || 'write';
|
|
3087
|
+
const line = result.changed_line || 0;
|
|
3088
|
+
const backup = result.backupPath
|
|
3089
|
+
? `\nbackup: ${result.backupPath}${result.backupReused ? ' (reused)' : ''}`
|
|
3090
|
+
: '';
|
|
3091
|
+
const summary = `${action} ${p}${line > 0 ? ` @L${line}` : ''}${backup}`;
|
|
3092
|
+
const diffPreview = result.diff_preview || '';
|
|
3093
|
+
if (diffPreview) {
|
|
3094
|
+
const trimmed = diffPreview.length > 600 ? `${diffPreview.slice(0, 597)}...` : diffPreview;
|
|
3020
3095
|
return `${summary}\n${trimmed}`;
|
|
3021
3096
|
}
|
|
3022
3097
|
return summary;
|
|
3023
3098
|
},
|
|
3024
3099
|
|
|
3025
|
-
delete(result) {
|
|
3026
|
-
if (!result || typeof result !== 'object') return String(result);
|
|
3027
|
-
if (result.ok === false) return JSON.stringify(result);
|
|
3028
|
-
const kind = result.type || 'item';
|
|
3029
|
-
const target = result.path || '';
|
|
3030
|
-
|
|
3031
|
-
|
|
3100
|
+
delete(result) {
|
|
3101
|
+
if (!result || typeof result !== 'object') return String(result);
|
|
3102
|
+
if (result.ok === false) return JSON.stringify(result);
|
|
3103
|
+
const kind = result.type || 'item';
|
|
3104
|
+
const target = result.path || '';
|
|
3105
|
+
const backup = result.backupPath
|
|
3106
|
+
? `\nbackup: ${result.backupPath}${result.backupReused ? ' (reused)' : ''}`
|
|
3107
|
+
: '';
|
|
3108
|
+
return `[delete: ${kind}] deleted ${target}${backup}`;
|
|
3109
|
+
},
|
|
3032
3110
|
|
|
3033
3111
|
run(result) {
|
|
3034
3112
|
if (!result || typeof result !== 'object') return String(result);
|