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.
Files changed (653) hide show
  1. package/codemini-web/dist/assets/{AboutDialog-CBmrZqhV.js → AboutDialog-MRopwNIL.js} +2 -2
  2. package/codemini-web/dist/assets/CodeWikiPanel-UpK5xGE3.js +1 -0
  3. package/codemini-web/dist/assets/ConfigDialog-CNl28wsj.js +1 -0
  4. package/codemini-web/dist/assets/GitDiffDialog-gSysUg2J.js +3 -0
  5. package/codemini-web/dist/assets/MemoryDialog-DFUmo3Kl.js +3 -0
  6. package/codemini-web/dist/assets/MessageBubble-CGnnViv0.js +12 -0
  7. package/codemini-web/dist/assets/PatchDiff-B8rwvEg5.js +230 -0
  8. package/codemini-web/dist/assets/ProjectSelector-BF59M1zb.js +1 -0
  9. package/codemini-web/dist/assets/SkillDialog-CQTjbSiw.js +8 -0
  10. package/codemini-web/dist/assets/SoulDialog-BLjUGqqB.js +1 -0
  11. package/codemini-web/dist/assets/{angular-html-DQ1gtQ6R.js → angular-html-BtqWAyby.js} +1 -1
  12. package/codemini-web/dist/assets/{angular-html-kg4tCYym.js → angular-html-Dqm-Ium4.js} +1 -1
  13. package/codemini-web/dist/assets/{angular-ts-C_VTyikG.js → angular-ts-BUlY5dZZ.js} +1 -1
  14. package/codemini-web/dist/assets/{angular-ts-QUaQh54x.js → angular-ts-DXMH5pbz.js} +1 -1
  15. package/codemini-web/dist/assets/{apl-D2YQXnhn.js → apl-B9jkvghZ.js} +1 -1
  16. package/codemini-web/dist/assets/{apl-DTyfz60o.js → apl-Bt--uCmj.js} +1 -1
  17. package/codemini-web/dist/assets/{astro-DrBiKBx0.js → astro-P-Wk2Uo3.js} +1 -1
  18. package/codemini-web/dist/assets/{astro-STdMQy7_.js → astro-ZfS8gVPQ.js} +1 -1
  19. package/codemini-web/dist/assets/{blade-BzcRYrK8.js → blade-CxVOILUn.js} +1 -1
  20. package/codemini-web/dist/assets/{blade-DV-5zppA.js → blade-DsiMSXb3.js} +1 -1
  21. package/codemini-web/dist/assets/{bsl-D8KU0pjR.js → bsl-9Rfj8X2G.js} +1 -1
  22. package/codemini-web/dist/assets/{bsl-JaCMWPaY.js → bsl-CZ9gUG7G.js} +1 -1
  23. package/codemini-web/dist/assets/{cairo-D7Xpkdmw.js → cairo-B8t0-PSB.js} +1 -1
  24. package/codemini-web/dist/assets/{cairo-DcJUH2W4.js → cairo-CZcbsYHl.js} +1 -1
  25. package/codemini-web/dist/assets/chevron-right--85xg7qk.js +1 -0
  26. package/codemini-web/dist/assets/{chunk-BO2N2NFS-C-dwTHqR.js → chunk-BO2N2NFS-6uELoidu.js} +6 -6
  27. package/codemini-web/dist/assets/{cobol-VahErUC5.js → cobol-BdhxDqSp.js} +1 -1
  28. package/codemini-web/dist/assets/{cobol-DcObg-T7.js → cobol-C67LYEki.js} +1 -1
  29. package/codemini-web/dist/assets/{coffee-B5QkIGo_.js → coffee-C_zREOQP.js} +1 -1
  30. package/codemini-web/dist/assets/{coffee-eHrF22jH.js → coffee-DYSdownS.js} +1 -1
  31. package/codemini-web/dist/assets/{cpp-hpmt0Dm0.js → cpp-BcL70P81.js} +1 -1
  32. package/codemini-web/dist/assets/{cpp-oPWeBIxQ.js → cpp-CmF4N5qy.js} +1 -1
  33. package/codemini-web/dist/assets/{crystal-CoivzC9J.js → crystal-CoqbT5f8.js} +1 -1
  34. package/codemini-web/dist/assets/{crystal-s_8obDZh.js → crystal-N7P3W5Mw.js} +1 -1
  35. package/codemini-web/dist/assets/{edge--dOGTygN.js → edge-DrMWCZ8c.js} +1 -1
  36. package/codemini-web/dist/assets/{edge-C-DECmFd.js → edge-DytV3yX5.js} +1 -1
  37. package/codemini-web/dist/assets/{elixir-9z9mJoua.js → elixir-BLpitXJw.js} +1 -1
  38. package/codemini-web/dist/assets/{elixir-D3BiPlt5.js → elixir-CNV7hmh2.js} +1 -1
  39. package/codemini-web/dist/assets/{elm-BuOfOpho.js → elm-C5ZqKzP8.js} +1 -1
  40. package/codemini-web/dist/assets/{elm-DjcEOkt6.js → elm-DuNA2Kle.js} +1 -1
  41. package/codemini-web/dist/assets/{erb-B6UlpZlF.js → erb-Cx6GPjju.js} +1 -1
  42. package/codemini-web/dist/assets/{erb-omHMX7PR.js → erb-CxvZayEs.js} +1 -1
  43. package/codemini-web/dist/assets/{erlang-DJdyEhn7.js → erlang-3or6Qr_S.js} +1 -1
  44. package/codemini-web/dist/assets/{erlang-l2na0rr-.js → erlang-CdOz9ruD.js} +1 -1
  45. package/codemini-web/dist/assets/{fortran-fixed-form-72xY_C5B.js → fortran-fixed-form-BmD2L0UY.js} +1 -1
  46. package/codemini-web/dist/assets/{fortran-fixed-form-Dyncprn4.js → fortran-fixed-form-Hy2szps7.js} +1 -1
  47. package/codemini-web/dist/assets/{fsharp-CAeGcLFg.js → fsharp-CgGHW39K.js} +1 -1
  48. package/codemini-web/dist/assets/{fsharp-D6WYKxtq.js → fsharp-DgKUr7h2.js} +1 -1
  49. package/codemini-web/dist/assets/{gdresource-Bac2fAQZ.js → gdresource-BqgTfeIa.js} +1 -1
  50. package/codemini-web/dist/assets/{gdresource-D9tlxSca.js → gdresource-D6abIutu.js} +1 -1
  51. package/codemini-web/dist/assets/{git-commit-BQ43t81h.js → git-commit-CPnaL3nl.js} +1 -1
  52. package/codemini-web/dist/assets/{git-commit-CDZnUqIF.js → git-commit-DBwdkqC2.js} +1 -1
  53. package/codemini-web/dist/assets/{git-rebase-CrM8c9uR.js → git-rebase-BVjWygdV.js} +1 -1
  54. package/codemini-web/dist/assets/{git-rebase-nf_-tAIT.js → git-rebase-CLt-2irw.js} +1 -1
  55. package/codemini-web/dist/assets/{glimmer-js-CmAPRjq-.js → glimmer-js-BhZXPPf_.js} +1 -1
  56. package/codemini-web/dist/assets/{glimmer-js-BG6a3MVV.js → glimmer-js-bG2aM9pf.js} +1 -1
  57. package/codemini-web/dist/assets/{glimmer-ts-WUsACCRt.js → glimmer-ts-BZwU8tUk.js} +1 -1
  58. package/codemini-web/dist/assets/{glimmer-ts-CQha3IIl.js → glimmer-ts-D6GU3-HZ.js} +1 -1
  59. package/codemini-web/dist/assets/{glsl-CAJiER_N.js → glsl-BZXoHx-5.js} +1 -1
  60. package/codemini-web/dist/assets/{glsl-CUfWCqOt.js → glsl-BsJMlsXZ.js} +1 -1
  61. package/codemini-web/dist/assets/{graphql-B-xWjhGC.js → graphql-Bzui-_oF.js} +1 -1
  62. package/codemini-web/dist/assets/{graphql-CufH1FQw.js → graphql-lozg2JzK.js} +1 -1
  63. package/codemini-web/dist/assets/{hack-6ZyX-jpl.js → hack-BIx3oBuG.js} +1 -1
  64. package/codemini-web/dist/assets/{hack-D9TV3mFw.js → hack-Dl73UNBo.js} +1 -1
  65. package/codemini-web/dist/assets/{haml-CXPCOKlR.js → haml-BL3Pq-bL.js} +1 -1
  66. package/codemini-web/dist/assets/{haml-zf3skXy8.js → haml-CvBskpbA.js} +1 -1
  67. package/codemini-web/dist/assets/{handlebars-BFZlhIIV.js → handlebars-Ca8Ew3WT.js} +1 -1
  68. package/codemini-web/dist/assets/{handlebars-BzLrTccQ.js → handlebars-Dl0DZ9iU.js} +1 -1
  69. package/codemini-web/dist/assets/{highlighted-body-OFNGDK62-BlOR-p_j.js → highlighted-body-OFNGDK62-gb1UMBZ5.js} +1 -1
  70. package/codemini-web/dist/assets/{html-DLN1MsZQ.js → html-CCOAFbPU.js} +1 -1
  71. package/codemini-web/dist/assets/{html-CZRPtk7M.js → html-DFeJ4St6.js} +1 -1
  72. package/codemini-web/dist/assets/{html-derivative-DGaxN6Jm.js → html-derivative-BN80HtRR.js} +1 -1
  73. package/codemini-web/dist/assets/{html-derivative-Dryc40mO.js → html-derivative-BPYIQd1q.js} +1 -1
  74. package/codemini-web/dist/assets/{http-B3D7H2pi.js → http-BT0m2fV8.js} +1 -1
  75. package/codemini-web/dist/assets/{http-CD8xd_ys.js → http-BaSHFqsp.js} +1 -1
  76. package/codemini-web/dist/assets/{hurl-4R1-_fJo.js → hurl-Cu0t_0Ag.js} +1 -1
  77. package/codemini-web/dist/assets/{hurl-DhA9rL1f.js → hurl-QdCmCx_B.js} +1 -1
  78. package/codemini-web/dist/assets/{hxml-BNblpm3P.js → hxml-DlOl0PEf.js} +1 -1
  79. package/codemini-web/dist/assets/{hxml-y50fEZfK.js → hxml-IWjzRLpN.js} +1 -1
  80. package/codemini-web/dist/assets/index-1xqD0R5t.css +2 -0
  81. package/codemini-web/dist/assets/index-CDXQGwPs.js +65 -0
  82. package/codemini-web/dist/assets/{input-CNJXW0J8.js → input-Ca8O_061.js} +1 -1
  83. package/codemini-web/dist/assets/{jinja-BGFo9cp_.js → jinja-Cnv9YtxF.js} +1 -1
  84. package/codemini-web/dist/assets/{jinja-CMJRtHk5.js → jinja-CzKj-PyV.js} +1 -1
  85. package/codemini-web/dist/assets/{jison-CjADtx7J.js → jison-CMHmT6Zn.js} +1 -1
  86. package/codemini-web/dist/assets/{jison-DZG53562.js → jison-V0queBoO.js} +1 -1
  87. package/codemini-web/dist/assets/{julia-CrDH-yy9.js → julia-D6Tp2lkv.js} +1 -1
  88. package/codemini-web/dist/assets/{julia-DGoXLnGd.js → julia-ssnM4-62.js} +1 -1
  89. package/codemini-web/dist/assets/{just-BV8ObQSd.js → just-BYVm1Mrm.js} +1 -1
  90. package/codemini-web/dist/assets/{just-bFDeah4I.js → just-DNL8d4mn.js} +1 -1
  91. package/codemini-web/dist/assets/{latex-DDcspDwa.js → latex--PKG7pkB.js} +1 -1
  92. package/codemini-web/dist/assets/{latex-DHgb1D3g.js → latex-BKz2_Nxu.js} +1 -1
  93. package/codemini-web/dist/assets/lib-BXWizt13.js +1 -0
  94. package/codemini-web/dist/assets/{liquid-DY_Nh1yB.js → liquid-CmT9c2rW.js} +1 -1
  95. package/codemini-web/dist/assets/{liquid-CodJB6Oo.js → liquid-CnfwjcTC.js} +1 -1
  96. package/codemini-web/dist/assets/{lua-CSNL2IG5.js → lua-CG2sJZNs.js} +1 -1
  97. package/codemini-web/dist/assets/{lua-Mbb_FM_D.js → lua-D82-t9Zc.js} +1 -1
  98. package/codemini-web/dist/assets/{marko-CoJz_b4R.js → marko-BXWoQ9lL.js} +1 -1
  99. package/codemini-web/dist/assets/{marko-BtH_ko92.js → marko-CJF04FnX.js} +1 -1
  100. package/codemini-web/dist/assets/{mdc-U2Od-Be6.js → mdc-DjUuZ2FY.js} +1 -1
  101. package/codemini-web/dist/assets/{mdc-pc5Bd-NW.js → mdc-uFBHmEgm.js} +1 -1
  102. package/codemini-web/dist/assets/mermaid-GHXKKRXX-ROliF8Yd.js +1 -0
  103. package/codemini-web/dist/assets/{nextflow-C240AutA.js → nextflow-CK5HLJvq.js} +1 -1
  104. package/codemini-web/dist/assets/{nextflow-dLJhzX3Z.js → nextflow-S7dXFF9l.js} +1 -1
  105. package/codemini-web/dist/assets/{nginx-CeVyuhn6.js → nginx-3W9nM9y_.js} +1 -1
  106. package/codemini-web/dist/assets/{nginx-9UIFC5W_.js → nginx-BC64-3-i.js} +1 -1
  107. package/codemini-web/dist/assets/{nim-A60PrBkG.js → nim-DWppal1v.js} +1 -1
  108. package/codemini-web/dist/assets/{nim-DhQ1Hs8s.js → nim-x_81C3Qr.js} +1 -1
  109. package/codemini-web/dist/assets/{pencil-CARzRgk1.js → pencil-BhT11Ztp.js} +1 -1
  110. package/codemini-web/dist/assets/{perl-BPmyA-C2.js → perl-C6Dd0zxb.js} +1 -1
  111. package/codemini-web/dist/assets/{perl-CA0CUhlR.js → perl-Drip2S24.js} +1 -1
  112. package/codemini-web/dist/assets/{php-aSpTH15w.js → php-9sDqPlZW.js} +1 -1
  113. package/codemini-web/dist/assets/{php-DFR1z6f_.js → php-BbiCqfrp.js} +1 -1
  114. package/codemini-web/dist/assets/{pug-DXmP4Dd5.js → pug-BYheLFcw.js} +1 -1
  115. package/codemini-web/dist/assets/{pug-2MsinVHa.js → pug-D4U6GWCU.js} +1 -1
  116. package/codemini-web/dist/assets/{qml-Cp-MkXo2.js → qml-C7Gvixtn.js} +1 -1
  117. package/codemini-web/dist/assets/{qml-Dmd77dfv.js → qml-D3LW5Eh4.js} +1 -1
  118. package/codemini-web/dist/assets/{razor-BH58TmZI.js → razor-CeMDYz78.js} +1 -1
  119. package/codemini-web/dist/assets/{razor-knNn5G4N.js → razor-wtlbOx1Y.js} +1 -1
  120. package/codemini-web/dist/assets/refresh-cw-D7R5Lth6.js +1 -0
  121. package/codemini-web/dist/assets/{rst-BkVCrdGo.js → rst-4NiHKVzB.js} +1 -1
  122. package/codemini-web/dist/assets/{rst-l2oLaq8i.js → rst-CUgtqtsm.js} +1 -1
  123. package/codemini-web/dist/assets/{ruby-B4GtprLK.js → ruby-DJfS371J.js} +1 -1
  124. package/codemini-web/dist/assets/{ruby-gJeF3z-Y.js → ruby-DQmpjmxU.js} +1 -1
  125. package/codemini-web/dist/assets/{sas-CTgoo8hu.js → sas-B3ML-BPY.js} +1 -1
  126. package/codemini-web/dist/assets/{sas-Dav6qQnM.js → sas-BXFb3Byc.js} +1 -1
  127. package/codemini-web/dist/assets/{scss-B8ysOo22.js → scss-By7PHVyf.js} +1 -1
  128. package/codemini-web/dist/assets/{scss-C8Gq31Qt.js → scss-CQGBghOa.js} +1 -1
  129. package/codemini-web/dist/assets/select-DBvcHBzs.js +1 -0
  130. package/codemini-web/dist/assets/{shaderlab-BaYU-HWs.js → shaderlab-Ds6Ob14m.js} +1 -1
  131. package/codemini-web/dist/assets/{shaderlab-CSb6CBXg.js → shaderlab-jhHUXThs.js} +1 -1
  132. package/codemini-web/dist/assets/{shellsession-Ms8iC_in.js → shellsession-1pj9xPto.js} +1 -1
  133. package/codemini-web/dist/assets/{shellsession-eIO2JTpk.js → shellsession-mbgkQZNs.js} +1 -1
  134. package/codemini-web/dist/assets/{soy-CnmcxzZM.js → soy-Brdxowwc.js} +1 -1
  135. package/codemini-web/dist/assets/{soy-U7sqkat1.js → soy-CyoIOmkE.js} +1 -1
  136. package/codemini-web/dist/assets/{sparql-DrRAT0nC.js → sparql-D050l-1j.js} +1 -1
  137. package/codemini-web/dist/assets/{sparql-J1VOnnwM.js → sparql-EV95tWuj.js} +1 -1
  138. package/codemini-web/dist/assets/{stata-C07HETWZ.js → stata-Cxm-fX20.js} +1 -1
  139. package/codemini-web/dist/assets/{stata-C84Azx6N.js → stata-rcB48Bwa.js} +1 -1
  140. package/codemini-web/dist/assets/{surrealql-CHm1_yMm.js → surrealql-BEIq2Ti9.js} +1 -1
  141. package/codemini-web/dist/assets/{surrealql-D_Sm2j7-.js → surrealql-C89H8_VG.js} +1 -1
  142. package/codemini-web/dist/assets/{svelte-BgklcIcA.js → svelte-DLivETBJ.js} +1 -1
  143. package/codemini-web/dist/assets/{svelte-UDeamd-l.js → svelte-DVuJzFhW.js} +1 -1
  144. package/codemini-web/dist/assets/{templ-C1aXNqxr.js → templ-DCO78tPK.js} +1 -1
  145. package/codemini-web/dist/assets/{templ-Dej5xCfm.js → templ-Dr4toWAi.js} +1 -1
  146. package/codemini-web/dist/assets/{tex-CwV6ECg2.js → tex-C26OlX33.js} +1 -1
  147. package/codemini-web/dist/assets/{tex-DqduegnD.js → tex-CAFucSbn.js} +1 -1
  148. package/codemini-web/dist/assets/{trash-2-BvANH-oV.js → trash-2-BfNZcWfX.js} +1 -1
  149. package/codemini-web/dist/assets/{ts-tags-jpfdYtbg.js → ts-tags-DXz1U_l8.js} +1 -1
  150. package/codemini-web/dist/assets/{ts-tags-JHISWk_W.js → ts-tags-DxtnKICy.js} +1 -1
  151. package/codemini-web/dist/assets/{twig-Co8p9s-G.js → twig-BOjawstu.js} +1 -1
  152. package/codemini-web/dist/assets/{twig-Cq6hSxza.js → twig-l2jHuCJP.js} +1 -1
  153. package/codemini-web/dist/assets/{vue-CopUaTTK.js → vue-DTExrAHq.js} +1 -1
  154. package/codemini-web/dist/assets/{vue-CL6MdYNh.js → vue-d4Ps-pL3.js} +1 -1
  155. package/codemini-web/dist/assets/{vue-html-BJ2qlvpA.js → vue-html-Cc_wxOgn.js} +1 -1
  156. package/codemini-web/dist/assets/{vue-html-BkstOd36.js → vue-html-DF9b1rb0.js} +1 -1
  157. package/codemini-web/dist/assets/{vue-vine-BpJg_Jgw.js → vue-vine-A_lRwVWt.js} +1 -1
  158. package/codemini-web/dist/assets/{vue-vine-kdYS8aKZ.js → vue-vine-BDiNGm6C.js} +1 -1
  159. package/codemini-web/dist/assets/{xml-BVIbPGAO.js → xml-BUsFQ36n.js} +1 -1
  160. package/codemini-web/dist/assets/{xml-Cd8Ewme9.js → xml-DDsJXW9N.js} +1 -1
  161. package/codemini-web/dist/assets/{xsl-DsYdc3fS.js → xsl-DjgS9HxR.js} +1 -1
  162. package/codemini-web/dist/assets/{xsl-JOQu_a5N.js → xsl-TnKTzvHo.js} +1 -1
  163. package/codemini-web/dist/index.html +2 -2
  164. package/codemini-web/lib/runtime-bridge.js +325 -296
  165. package/codemini-web/server.js +482 -276
  166. package/package.json +1 -1
  167. package/src/core/agent-loop.js +188 -97
  168. package/src/core/chat-runtime.js +674 -571
  169. package/src/core/command-policy.js +73 -23
  170. package/src/core/config-store.js +11 -3
  171. package/src/core/git-oplog-change-tracker.js +387 -0
  172. package/src/core/non-git-backup.js +116 -0
  173. package/src/core/paths.js +123 -123
  174. package/src/core/session-store.js +148 -99
  175. package/src/core/tools.js +474 -396
  176. package/src/tui/chat-app.js +196 -56
  177. package/codemini-web/dist/assets/CodeWikiPanel-BjI4vz9H.js +0 -1
  178. package/codemini-web/dist/assets/ConfigDialog-hxEIuIXJ.js +0 -1
  179. package/codemini-web/dist/assets/GitDiffDialog-CVpmPcGi.js +0 -222
  180. package/codemini-web/dist/assets/MessageBubble-BkkfePXe.js +0 -6
  181. package/codemini-web/dist/assets/ProjectSelector-CjE9gbEY.js +0 -1
  182. package/codemini-web/dist/assets/SkillDialog-CpX5c2q5.js +0 -6
  183. package/codemini-web/dist/assets/SoulDialog-5ZMpAJl3.js +0 -1
  184. package/codemini-web/dist/assets/index-BkhgO3hd.js +0 -65
  185. package/codemini-web/dist/assets/index-COyr1sc3.css +0 -2
  186. package/codemini-web/dist/assets/lib-DQpX2ek0.js +0 -11
  187. package/codemini-web/dist/assets/lib-Dj6FJSN8.js +0 -1
  188. package/codemini-web/dist/assets/mermaid-GHXKKRXX-DV0jg4UB.js +0 -1
  189. package/codemini-web/dist/assets/select-BQ3BvnG8.js +0 -1
  190. /package/codemini-web/dist/assets/{abap-8gQxhw9X.js → abap-B7RnWQOG.js} +0 -0
  191. /package/codemini-web/dist/assets/{abap-DKGmjV0m.js → abap-NDM6s5zQ.js} +0 -0
  192. /package/codemini-web/dist/assets/{actionscript-3-Bvx2-wHH.js → actionscript-3-C9nBr3Mh.js} +0 -0
  193. /package/codemini-web/dist/assets/{actionscript-3-PQHI9sRP.js → actionscript-3-CRl2BRXz.js} +0 -0
  194. /package/codemini-web/dist/assets/{ada-7dCRqcEc.js → ada-BCQmYIk6.js} +0 -0
  195. /package/codemini-web/dist/assets/{ada-DXyixiJc.js → ada-CySgk42_.js} +0 -0
  196. /package/codemini-web/dist/assets/{andromeeda-CvHLbWZU.js → andromeeda-Bnm9WW1a.js} +0 -0
  197. /package/codemini-web/dist/assets/{andromeeda-D2bWTgXr.js → andromeeda-szAb-NZx.js} +0 -0
  198. /package/codemini-web/dist/assets/{apache-DuwFT_ko.js → apache-B22kDdQt.js} +0 -0
  199. /package/codemini-web/dist/assets/{apache-r4zD7Rt3.js → apache-CQgWNR0K.js} +0 -0
  200. /package/codemini-web/dist/assets/{apex-D3aemokf.js → apex-BkGtsu4e.js} +0 -0
  201. /package/codemini-web/dist/assets/{apex-ZrILV9y9.js → apex-CFa_x2c9.js} +0 -0
  202. /package/codemini-web/dist/assets/{applescript-B2uvrvew.js → applescript-CCGt--QU.js} +0 -0
  203. /package/codemini-web/dist/assets/{applescript-QewDI2Hm.js → applescript-Cb-r3lIv.js} +0 -0
  204. /package/codemini-web/dist/assets/{ara-CAKYVeDX.js → ara-CJYv1XlV.js} +0 -0
  205. /package/codemini-web/dist/assets/{ara-bfzpmn9d.js → ara-DKlv0ib1.js} +0 -0
  206. /package/codemini-web/dist/assets/{asciidoc-CN-ydgfB.js → asciidoc-BUOdyOiP.js} +0 -0
  207. /package/codemini-web/dist/assets/{asciidoc-xYtH5EEV.js → asciidoc-DxgPoKvx.js} +0 -0
  208. /package/codemini-web/dist/assets/{asm-DsgOTp4c.js → asm-2LyQSByb.js} +0 -0
  209. /package/codemini-web/dist/assets/{asm-DuNyKkDV.js → asm-BVk_pKLT.js} +0 -0
  210. /package/codemini-web/dist/assets/{aurora-x-CUFqx0Kt.js → aurora-x-B7Ot8iN2.js} +0 -0
  211. /package/codemini-web/dist/assets/{aurora-x-mlfFqJAh.js → aurora-x-DfOR6O80.js} +0 -0
  212. /package/codemini-web/dist/assets/{awk-BDSWDVpS.js → awk-CRf4hi6L.js} +0 -0
  213. /package/codemini-web/dist/assets/{awk-DETgsRcQ.js → awk-adfNbTQc.js} +0 -0
  214. /package/codemini-web/dist/assets/{ayu-dark-BTeHke7b.js → ayu-dark-ADZF52JZ.js} +0 -0
  215. /package/codemini-web/dist/assets/{ayu-dark-tcpgNy3s.js → ayu-dark-CqtoqjuU.js} +0 -0
  216. /package/codemini-web/dist/assets/{ayu-light-B3O22CFD.js → ayu-light-CMMeLqXc.js} +0 -0
  217. /package/codemini-web/dist/assets/{ayu-light-CoZXvb4i.js → ayu-light-OVSih2Vp.js} +0 -0
  218. /package/codemini-web/dist/assets/{ayu-mirage-DkAXwBmm.js → ayu-mirage-BCL1vSWF.js} +0 -0
  219. /package/codemini-web/dist/assets/{ayu-mirage-DlGy8b5I.js → ayu-mirage-BZvrYN67.js} +0 -0
  220. /package/codemini-web/dist/assets/{ballerina-Dj9SHEWp.js → ballerina-D3rdtcDY.js} +0 -0
  221. /package/codemini-web/dist/assets/{ballerina-eIQtFtZN.js → ballerina-G1jH5Moz.js} +0 -0
  222. /package/codemini-web/dist/assets/{bat-DVPhDFws.js → bat-BRck8_tt.js} +0 -0
  223. /package/codemini-web/dist/assets/{bat-Dr7SKqI2.js → bat-CHXtPpft.js} +0 -0
  224. /package/codemini-web/dist/assets/{beancount-C5lGUCpK.js → beancount-CvA0H4kE.js} +0 -0
  225. /package/codemini-web/dist/assets/{beancount-DRh4LoEp.js → beancount-EfboDiXG.js} +0 -0
  226. /package/codemini-web/dist/assets/{berry-BJPWN0aG.js → berry-CnzAF9lD.js} +0 -0
  227. /package/codemini-web/dist/assets/{berry-C-53c7Cz.js → berry-DAhQzFBm.js} +0 -0
  228. /package/codemini-web/dist/assets/{bibtex-BXZl-zGT.js → bibtex-CYUaqfOv.js} +0 -0
  229. /package/codemini-web/dist/assets/{bibtex-c-0Qlbu0.js → bibtex-CanpD3m2.js} +0 -0
  230. /package/codemini-web/dist/assets/{bicep-CCk_fREF.js → bicep-Cc0u08ve.js} +0 -0
  231. /package/codemini-web/dist/assets/{bicep-DUhze7H3.js → bicep-JoteVAmD.js} +0 -0
  232. /package/codemini-web/dist/assets/{bird2-D_94N4Us.js → bird2-BmGSmafQ.js} +0 -0
  233. /package/codemini-web/dist/assets/{bird2-DIkIj7Bl.js → bird2-CUmLoLjb.js} +0 -0
  234. /package/codemini-web/dist/assets/{c-6DvQDc19.js → c-Ce4Vw5YJ.js} +0 -0
  235. /package/codemini-web/dist/assets/{c-C6aegu_R.js → c-DKLNAy6n.js} +0 -0
  236. /package/codemini-web/dist/assets/{c3-CUFd2ak_.js → c3-Bld9q8eN.js} +0 -0
  237. /package/codemini-web/dist/assets/{c3-_P-DNRtg.js → c3-Cp6mH0y7.js} +0 -0
  238. /package/codemini-web/dist/assets/{cadence-CRyyaA0J.js → cadence-CAWv0bgn.js} +0 -0
  239. /package/codemini-web/dist/assets/{cadence-zuA3Lqsu.js → cadence-_3OaglmQ.js} +0 -0
  240. /package/codemini-web/dist/assets/{catppuccin-frappe-C4xh_RpD.js → catppuccin-frappe-Dn0XJ8jj.js} +0 -0
  241. /package/codemini-web/dist/assets/{catppuccin-frappe-CptwRcV-.js → catppuccin-frappe-gRmOBxIl.js} +0 -0
  242. /package/codemini-web/dist/assets/{catppuccin-latte-B5zTan83.js → catppuccin-latte-CNKGC9SI.js} +0 -0
  243. /package/codemini-web/dist/assets/{catppuccin-latte-ZIzlVBYe.js → catppuccin-latte-D25Kwd8S.js} +0 -0
  244. /package/codemini-web/dist/assets/{catppuccin-macchiato-D9kD7BY6.js → catppuccin-macchiato-Bc6w_RYC.js} +0 -0
  245. /package/codemini-web/dist/assets/{catppuccin-macchiato-DOZXEuSH.js → catppuccin-macchiato-CjoU0lf6.js} +0 -0
  246. /package/codemini-web/dist/assets/{catppuccin-mocha-DJlDggGb.js → catppuccin-mocha-DQ4pZxz-.js} +0 -0
  247. /package/codemini-web/dist/assets/{catppuccin-mocha-rnm_6i_u.js → catppuccin-mocha-Di4PH8Ri.js} +0 -0
  248. /package/codemini-web/dist/assets/{clarity-CRWl5goA.js → clarity-BnHuUVUS.js} +0 -0
  249. /package/codemini-web/dist/assets/{clarity-Dp-fzxYs.js → clarity-CVKtZWJu.js} +0 -0
  250. /package/codemini-web/dist/assets/{clojure-85kagXuc.js → clojure-BBjzfV1L.js} +0 -0
  251. /package/codemini-web/dist/assets/{clojure-Dva5KkQZ.js → clojure-C4w8xKrn.js} +0 -0
  252. /package/codemini-web/dist/assets/{cmake-5KZO_J3V.js → cmake-Dn2uxUrm.js} +0 -0
  253. /package/codemini-web/dist/assets/{cmake-BLlH-zTC.js → cmake-DuxpWyxB.js} +0 -0
  254. /package/codemini-web/dist/assets/{codeowners-CwITHnrC.js → codeowners-BK44uU1e.js} +0 -0
  255. /package/codemini-web/dist/assets/{codeowners-EEO8moZM.js → codeowners-BYgLRiPG.js} +0 -0
  256. /package/codemini-web/dist/assets/{codeql-C3IPOiKP.js → codeql-DmJo4bmm.js} +0 -0
  257. /package/codemini-web/dist/assets/{codeql-DsuZZPKs.js → codeql-comBgh3D.js} +0 -0
  258. /package/codemini-web/dist/assets/{common-lisp-DQj0fa1s.js → common-lisp-BKAyevA0.js} +0 -0
  259. /package/codemini-web/dist/assets/{common-lisp-DtIqam2P.js → common-lisp-xmwdM7sj.js} +0 -0
  260. /package/codemini-web/dist/assets/{coq-BGPtnnb4.js → coq-D004aLp-.js} +0 -0
  261. /package/codemini-web/dist/assets/{coq-CcjGcL2N.js → coq-DsaqZ5gv.js} +0 -0
  262. /package/codemini-web/dist/assets/{csharp-Bz4y1fn8.js → csharp-B1bok3CS.js} +0 -0
  263. /package/codemini-web/dist/assets/{csharp-CvOkmYFZ.js → csharp-BJRWJrkS.js} +0 -0
  264. /package/codemini-web/dist/assets/{css-DsnEBqY_.js → css-D2Zgfenk.js} +0 -0
  265. /package/codemini-web/dist/assets/{css-Cqx-Zivz.js → css-DI4Ka_1L.js} +0 -0
  266. /package/codemini-web/dist/assets/{csv-92JdhrVb.js → csv-BsMY8_5o.js} +0 -0
  267. /package/codemini-web/dist/assets/{csv-Cz8IGB-r.js → csv-Cx2EO4hN.js} +0 -0
  268. /package/codemini-web/dist/assets/{cue-BAtFpXsn.js → cue-5NODdLLQ.js} +0 -0
  269. /package/codemini-web/dist/assets/{cue-DO5iBckt.js → cue-BFvpulfw.js} +0 -0
  270. /package/codemini-web/dist/assets/{cypher-DrFFccaV.js → cypher-CloxltJj.js} +0 -0
  271. /package/codemini-web/dist/assets/{cypher-Dt0SBufN.js → cypher-DwXduOcz.js} +0 -0
  272. /package/codemini-web/dist/assets/{d-BIzkfvy1.js → d-ByN-nCZx.js} +0 -0
  273. /package/codemini-web/dist/assets/{d-POAmrdpL.js → d-D90yV2l6.js} +0 -0
  274. /package/codemini-web/dist/assets/{dark-plus-Ci223Kw7.js → dark-plus-BRQ4k4kr.js} +0 -0
  275. /package/codemini-web/dist/assets/{dark-plus-D-icMr_O.js → dark-plus-CmLXU_Iq.js} +0 -0
  276. /package/codemini-web/dist/assets/{dart-BA_zGMIh.js → dart-BL-Rg8Jo.js} +0 -0
  277. /package/codemini-web/dist/assets/{dart-Cv4z4sEx.js → dart-jaYeqpH7.js} +0 -0
  278. /package/codemini-web/dist/assets/{dax-CArXkuXO.js → dax-CQDoOssZ.js} +0 -0
  279. /package/codemini-web/dist/assets/{dax-Cw_LNvcO.js → dax-DfINWKOM.js} +0 -0
  280. /package/codemini-web/dist/assets/{desktop-BRifweK7.js → desktop-DssJfs2S.js} +0 -0
  281. /package/codemini-web/dist/assets/{desktop-B_uWbpWi.js → desktop-wuqAc75y.js} +0 -0
  282. /package/codemini-web/dist/assets/{diff-CTnn6Hu3.js → diff-BYMwyQmB.js} +0 -0
  283. /package/codemini-web/dist/assets/{diff-pSjjL-ZH.js → diff-DGLbp6Xl.js} +0 -0
  284. /package/codemini-web/dist/assets/{docker-D0ufKJwE.js → docker-B7aZDRTU.js} +0 -0
  285. /package/codemini-web/dist/assets/{docker-r0L9bSzI.js → docker-CfFDSeZZ.js} +0 -0
  286. /package/codemini-web/dist/assets/{dotenv-BKm_YkX-.js → dotenv-D3KyAIK0.js} +0 -0
  287. /package/codemini-web/dist/assets/{dotenv-DU-Uz6AA.js → dotenv-DVXB2U9o.js} +0 -0
  288. /package/codemini-web/dist/assets/{dracula-BkVbNmMW.js → dracula-6-t2eOMW.js} +0 -0
  289. /package/codemini-web/dist/assets/{dracula-C5lq8I7X.js → dracula-Dix5im8F.js} +0 -0
  290. /package/codemini-web/dist/assets/{dracula-soft-Benyby8y.js → dracula-soft-B4TZzIlp.js} +0 -0
  291. /package/codemini-web/dist/assets/{dracula-soft-QH3ntlSU.js → dracula-soft-DnrYBWgV.js} +0 -0
  292. /package/codemini-web/dist/assets/{dream-maker-Cp0hXi31.js → dream-maker-CaguOgbF.js} +0 -0
  293. /package/codemini-web/dist/assets/{dream-maker-DE3sVgWW.js → dream-maker-CjPuR0vx.js} +0 -0
  294. /package/codemini-web/dist/assets/{emacs-lisp-aMjKKeFP.js → emacs-lisp-BHg7FqFZ.js} +0 -0
  295. /package/codemini-web/dist/assets/{emacs-lisp-H4-vgzf_.js → emacs-lisp-BosL1Ugg.js} +0 -0
  296. /package/codemini-web/dist/assets/{everforest-dark-CDp5hxXO.js → everforest-dark-B4IVVaS6.js} +0 -0
  297. /package/codemini-web/dist/assets/{everforest-dark-KTiMpaXm.js → everforest-dark-DwEzvfit.js} +0 -0
  298. /package/codemini-web/dist/assets/{everforest-light-vtFhxTqx.js → everforest-light-CNoEiPUu.js} +0 -0
  299. /package/codemini-web/dist/assets/{everforest-light-yJZ9a76P.js → everforest-light-DnQkIdPL.js} +0 -0
  300. /package/codemini-web/dist/assets/{fennel-Bruivvq3.js → fennel-BiQcbtTd.js} +0 -0
  301. /package/codemini-web/dist/assets/{fennel-DNMUz8BE.js → fennel-DG6hK7z2.js} +0 -0
  302. /package/codemini-web/dist/assets/{fish-C44z9fhZ.js → fish-D3-ok12J.js} +0 -0
  303. /package/codemini-web/dist/assets/{fish-CaGhpV7s.js → fish-_zY__9L4.js} +0 -0
  304. /package/codemini-web/dist/assets/{fluent-BsmQk-nO.js → fluent-BBz3hVA9.js} +0 -0
  305. /package/codemini-web/dist/assets/{fluent-d_qH0cYL.js → fluent-CrjXrDzk.js} +0 -0
  306. /package/codemini-web/dist/assets/{fortran-free-form-B9mY58s0.js → fortran-free-form-Cyk1FB1e.js} +0 -0
  307. /package/codemini-web/dist/assets/{fortran-free-form-DYzg4zHf.js → fortran-free-form-Db24aQuN.js} +0 -0
  308. /package/codemini-web/dist/assets/{gdscript-B_WUGHIs.js → gdscript-CxxY7zMa.js} +0 -0
  309. /package/codemini-web/dist/assets/{gdscript-xj-VlIRU.js → gdscript-_NYgB0-E.js} +0 -0
  310. /package/codemini-web/dist/assets/{gdshader-BR6nyn6z.js → gdshader-Bhkdknye.js} +0 -0
  311. /package/codemini-web/dist/assets/{gdshader-BbYnAK14.js → gdshader-W85lNgcx.js} +0 -0
  312. /package/codemini-web/dist/assets/{genie-CNeJKHWH.js → genie-2WOhOayX.js} +0 -0
  313. /package/codemini-web/dist/assets/{genie-CW-a1unw.js → genie-C6BJUbST.js} +0 -0
  314. /package/codemini-web/dist/assets/{gherkin-By4Zv-ZP.js → gherkin-BsQJenZD.js} +0 -0
  315. /package/codemini-web/dist/assets/{gherkin-D8z0Dn14.js → gherkin-BzYX5w19.js} +0 -0
  316. /package/codemini-web/dist/assets/{github-dark-BLlNbGxe.js → github-dark-DH2_Q6FX.js} +0 -0
  317. /package/codemini-web/dist/assets/{github-dark-default-DPZ1YWUU.js → github-dark-default-B2Oq-dUJ.js} +0 -0
  318. /package/codemini-web/dist/assets/{github-dark-default-XYu-6ww7.js → github-dark-default-DTF8deNx.js} +0 -0
  319. /package/codemini-web/dist/assets/{github-dark-dimmed-BlMwpJVf.js → github-dark-dimmed-BvtnYOMy.js} +0 -0
  320. /package/codemini-web/dist/assets/{github-dark-dimmed-XAi8Eb3C.js → github-dark-dimmed-D0X0LfLF.js} +0 -0
  321. /package/codemini-web/dist/assets/{github-dark-C2YvJIRl.js → github-dark-fr8BfBxZ.js} +0 -0
  322. /package/codemini-web/dist/assets/{github-dark-high-contrast-D86iyx7L.js → github-dark-high-contrast-BAQfalyp.js} +0 -0
  323. /package/codemini-web/dist/assets/{github-dark-high-contrast-KRBg57oP.js → github-dark-high-contrast-CQhqa0EF.js} +0 -0
  324. /package/codemini-web/dist/assets/{github-light-BLj5WXD_.js → github-light-CEqFW-kl.js} +0 -0
  325. /package/codemini-web/dist/assets/{github-light-default-BLgrdOV4.js → github-light-default-9rPElOua.js} +0 -0
  326. /package/codemini-web/dist/assets/{github-light-default-BzOWmaf-.js → github-light-default-Co9J0YT2.js} +0 -0
  327. /package/codemini-web/dist/assets/{github-light-high-contrast-Bm3JPX7v.js → github-light-high-contrast-BFww7Aed.js} +0 -0
  328. /package/codemini-web/dist/assets/{github-light-high-contrast-Bmexxccr.js → github-light-high-contrast-Drx2T_ea.js} +0 -0
  329. /package/codemini-web/dist/assets/{github-light-DxDzpZWY.js → github-light-t2gQwbnC.js} +0 -0
  330. /package/codemini-web/dist/assets/{gleam-BtOZgVle.js → gleam-BjFNd70h.js} +0 -0
  331. /package/codemini-web/dist/assets/{gleam-Lf_XYEK-.js → gleam-_RSzgxb1.js} +0 -0
  332. /package/codemini-web/dist/assets/{gn-CY4VHHa6.js → gn-BlAV1bS1.js} +0 -0
  333. /package/codemini-web/dist/assets/{gn-JO9YMz2t.js → gn-MXj_EEiV.js} +0 -0
  334. /package/codemini-web/dist/assets/{gnuplot-DjZHg3_f.js → gnuplot-BTJRjb2O.js} +0 -0
  335. /package/codemini-web/dist/assets/{gnuplot-MPAbQV9r.js → gnuplot-C40vWoS_.js} +0 -0
  336. /package/codemini-web/dist/assets/{go-D2GlBE5F.js → go-B2Qj-jpc.js} +0 -0
  337. /package/codemini-web/dist/assets/{go-C6ThH8Hx.js → go-BF9dg2tN.js} +0 -0
  338. /package/codemini-web/dist/assets/{groovy-1vEGAvvX.js → groovy-42TXi0JD.js} +0 -0
  339. /package/codemini-web/dist/assets/{groovy-C_xCWdb_.js → groovy-YtV4YqmI.js} +0 -0
  340. /package/codemini-web/dist/assets/{gruvbox-dark-hard-DHhjEKTi.js → gruvbox-dark-hard-DN_E1XFW.js} +0 -0
  341. /package/codemini-web/dist/assets/{gruvbox-dark-hard-pdBjrsK5.js → gruvbox-dark-hard-DaxQoAo9.js} +0 -0
  342. /package/codemini-web/dist/assets/{gruvbox-dark-medium-CL0I2zDn.js → gruvbox-dark-medium-CR6ynfxn.js} +0 -0
  343. /package/codemini-web/dist/assets/{gruvbox-dark-medium-Csp4lPEF.js → gruvbox-dark-medium-xNyLsUVI.js} +0 -0
  344. /package/codemini-web/dist/assets/{gruvbox-dark-soft-BpNWvgik.js → gruvbox-dark-soft-CrCUBJhA.js} +0 -0
  345. /package/codemini-web/dist/assets/{gruvbox-dark-soft-Dy9vkRG2.js → gruvbox-dark-soft-QoKQNR_B.js} +0 -0
  346. /package/codemini-web/dist/assets/{gruvbox-light-hard-CC8CVJp5.js → gruvbox-light-hard-BqLHNay_.js} +0 -0
  347. /package/codemini-web/dist/assets/{gruvbox-light-hard-DO2pUUQV.js → gruvbox-light-hard-C3-JuKAe.js} +0 -0
  348. /package/codemini-web/dist/assets/{gruvbox-light-medium-B_nBvpHM.js → gruvbox-light-medium-676URJw_.js} +0 -0
  349. /package/codemini-web/dist/assets/{gruvbox-light-medium-D2yGUmJd.js → gruvbox-light-medium-86kxSNhL.js} +0 -0
  350. /package/codemini-web/dist/assets/{gruvbox-light-soft-C_9RTTTT.js → gruvbox-light-soft-BGpHIYJO.js} +0 -0
  351. /package/codemini-web/dist/assets/{gruvbox-light-soft-DuLKkKFi.js → gruvbox-light-soft-ByoztTEu.js} +0 -0
  352. /package/codemini-web/dist/assets/{haskell-BFZjB68l.js → haskell-C5VEzHiR.js} +0 -0
  353. /package/codemini-web/dist/assets/{haskell-DfX5asxK.js → haskell-KyntJ58h.js} +0 -0
  354. /package/codemini-web/dist/assets/{haxe-DDQKctJt.js → haxe-Bnka4w1v.js} +0 -0
  355. /package/codemini-web/dist/assets/{haxe-Me-TWuvr.js → haxe-DxCG7g2C.js} +0 -0
  356. /package/codemini-web/dist/assets/{hcl-DUAADz_v.js → hcl-B-KEcm-b.js} +0 -0
  357. /package/codemini-web/dist/assets/{hcl-Ry3nZWbt.js → hcl-nG8lPt58.js} +0 -0
  358. /package/codemini-web/dist/assets/{hjson-CGFDmpMn.js → hjson-BUjIWbox.js} +0 -0
  359. /package/codemini-web/dist/assets/{hjson-DyGphq4K.js → hjson-KcqWy6wG.js} +0 -0
  360. /package/codemini-web/dist/assets/{hlsl-BKWZVvKK.js → hlsl-CU9ay1Rj.js} +0 -0
  361. /package/codemini-web/dist/assets/{hlsl-BVEJlW36.js → hlsl-CblrQXA-.js} +0 -0
  362. /package/codemini-web/dist/assets/{horizon-BZmYXqIF.js → horizon-BDDUNMOh.js} +0 -0
  363. /package/codemini-web/dist/assets/{horizon-D3wQTjs_.js → horizon-MuIr_z-n.js} +0 -0
  364. /package/codemini-web/dist/assets/{horizon-bright-D0uooZm5.js → horizon-bright-Km86OX7k.js} +0 -0
  365. /package/codemini-web/dist/assets/{horizon-bright-Cfh8ud4W.js → horizon-bright-QtrMcZM-.js} +0 -0
  366. /package/codemini-web/dist/assets/{houston-BUtcOxf9.js → houston-CnK3oLKP.js} +0 -0
  367. /package/codemini-web/dist/assets/{houston-CGv9NbgY.js → houston-L6-nhcqy.js} +0 -0
  368. /package/codemini-web/dist/assets/{hy-BqI2sCU2.js → hy-9kqolRdI.js} +0 -0
  369. /package/codemini-web/dist/assets/{hy-oWi_RwAK.js → hy-V3ipcBGo.js} +0 -0
  370. /package/codemini-web/dist/assets/{imba-DnUn0wai.js → imba-AWBATAYY.js} +0 -0
  371. /package/codemini-web/dist/assets/{imba-iwzgkuTD.js → imba-rkedaZRd.js} +0 -0
  372. /package/codemini-web/dist/assets/{ini-BNaakZQr.js → ini-BIn__beW.js} +0 -0
  373. /package/codemini-web/dist/assets/{ini-DMV_1xp9.js → ini-P5JLg6LV.js} +0 -0
  374. /package/codemini-web/dist/assets/{java-CTslCthB.js → java-Bb7gkEG1.js} +0 -0
  375. /package/codemini-web/dist/assets/{java-DbkCw8gs.js → java-X5SW6zDn.js} +0 -0
  376. /package/codemini-web/dist/assets/{javascript-BzJBge5U.js → javascript-Cn8UGaJe.js} +0 -0
  377. /package/codemini-web/dist/assets/{javascript-DqHURDA-.js → javascript-DHaqiI3u.js} +0 -0
  378. /package/codemini-web/dist/assets/{json-Cu3T5nD7.js → json-BlCKYbAr.js} +0 -0
  379. /package/codemini-web/dist/assets/{json-DZN6rfPx.js → json-Yl_wWztW.js} +0 -0
  380. /package/codemini-web/dist/assets/{json5-DSzj6NCq.js → json5-B3B8AE2U.js} +0 -0
  381. /package/codemini-web/dist/assets/{json5-Y2CuQCK-.js → json5-Cj9weIvR.js} +0 -0
  382. /package/codemini-web/dist/assets/{jsonc-B30nqSUF.js → jsonc-COLeM0mA.js} +0 -0
  383. /package/codemini-web/dist/assets/{jsonc-DwzKY8NT.js → jsonc-CwVZHrLL.js} +0 -0
  384. /package/codemini-web/dist/assets/{jsonl-B7UEa0TN.js → jsonl-CfYcxfNz.js} +0 -0
  385. /package/codemini-web/dist/assets/{jsonl-C8L12LZq.js → jsonl-my2EVZQF.js} +0 -0
  386. /package/codemini-web/dist/assets/{jsonnet-DYAV3b_U.js → jsonnet-B351KcBZ.js} +0 -0
  387. /package/codemini-web/dist/assets/{jsonnet-ZiCJB3SD.js → jsonnet-Cg2yxMWZ.js} +0 -0
  388. /package/codemini-web/dist/assets/{jssm-6UFVEBGg.js → jssm-CVNVxyp8.js} +0 -0
  389. /package/codemini-web/dist/assets/{jssm-BOfC2rh1.js → jssm-f9sZK7il.js} +0 -0
  390. /package/codemini-web/dist/assets/{jsx-AgmFDCOF.js → jsx-C-BZR9Er.js} +0 -0
  391. /package/codemini-web/dist/assets/{jsx-BEmZt5uE.js → jsx-mn0xQF_s.js} +0 -0
  392. /package/codemini-web/dist/assets/{kanagawa-dragon-BVoApXR6.js → kanagawa-dragon-Bg-BKRuP.js} +0 -0
  393. /package/codemini-web/dist/assets/{kanagawa-dragon-DF1o80wl.js → kanagawa-dragon-qidiS05d.js} +0 -0
  394. /package/codemini-web/dist/assets/{kanagawa-lotus-BkVGQkvY.js → kanagawa-lotus-CVGoMXw8.js} +0 -0
  395. /package/codemini-web/dist/assets/{kanagawa-lotus-C-uV5im6.js → kanagawa-lotus-DCJgGK2A.js} +0 -0
  396. /package/codemini-web/dist/assets/{kanagawa-wave-BizPisns.js → kanagawa-wave-CVz5XkfW.js} +0 -0
  397. /package/codemini-web/dist/assets/{kanagawa-wave-Cl5W2OPg.js → kanagawa-wave-CuNbEAGB.js} +0 -0
  398. /package/codemini-web/dist/assets/{kdl-BCaiqQ4X.js → kdl-B2a5Hdo5.js} +0 -0
  399. /package/codemini-web/dist/assets/{kdl-Bg7xxjIF.js → kdl-CmBtNZAQ.js} +0 -0
  400. /package/codemini-web/dist/assets/{kotlin-CNprttl8.js → kotlin-BgCroCiE.js} +0 -0
  401. /package/codemini-web/dist/assets/{kotlin-DRaoVNCW.js → kotlin-CwntYu9G.js} +0 -0
  402. /package/codemini-web/dist/assets/{kusto-CW62F42W.js → kusto-Dto5Mt8f.js} +0 -0
  403. /package/codemini-web/dist/assets/{kusto-D3uRUZFA.js → kusto-DzqQhEgS.js} +0 -0
  404. /package/codemini-web/dist/assets/{laserwave-B1sGpeV2.js → laserwave-Bf5KiZGG.js} +0 -0
  405. /package/codemini-web/dist/assets/{laserwave-BypMvj8s.js → laserwave-DqmURGYs.js} +0 -0
  406. /package/codemini-web/dist/assets/{lean-BbKKg8_U.js → lean-CLemLjY9.js} +0 -0
  407. /package/codemini-web/dist/assets/{lean-CYwit69O.js → lean-bStt-IHo.js} +0 -0
  408. /package/codemini-web/dist/assets/{less-6BW8xQaX.js → less-Dycz37IB.js} +0 -0
  409. /package/codemini-web/dist/assets/{less-CMYX9LBx.js → less-_4Z4Zbgj.js} +0 -0
  410. /package/codemini-web/dist/assets/{light-plus-CytNlrnF.js → light-plus-BISup5vO.js} +0 -0
  411. /package/codemini-web/dist/assets/{light-plus-zSYF2DYe.js → light-plus-CUPZt_vJ.js} +0 -0
  412. /package/codemini-web/dist/assets/{llvm-BFcvUor4.js → llvm-B3vA1z1w.js} +0 -0
  413. /package/codemini-web/dist/assets/{llvm-OMExIg60.js → llvm-DAbx5jqK.js} +0 -0
  414. /package/codemini-web/dist/assets/{log-BBfW4u9k.js → log-BRjeW2DW.js} +0 -0
  415. /package/codemini-web/dist/assets/{log-BrS0_Y6P.js → log-CM4eTPwH.js} +0 -0
  416. /package/codemini-web/dist/assets/{logo-D8GGcRiY.js → logo-DCYIDlXZ.js} +0 -0
  417. /package/codemini-web/dist/assets/{logo-L3bKRswG.js → logo-Dyx9NcGm.js} +0 -0
  418. /package/codemini-web/dist/assets/{luau-B-E69GSh.js → luau-B3LrvOEt.js} +0 -0
  419. /package/codemini-web/dist/assets/{luau-CZIl0XK4.js → luau-BJOxIq3l.js} +0 -0
  420. /package/codemini-web/dist/assets/{make-CA9NajZk.js → make-Bep3F-fA.js} +0 -0
  421. /package/codemini-web/dist/assets/{make-mlZyflos.js → make-BmHGvFNV.js} +0 -0
  422. /package/codemini-web/dist/assets/{markdown-CppElJDR.js → markdown-BObkjWCp.js} +0 -0
  423. /package/codemini-web/dist/assets/{markdown-DkXb8qKc.js → markdown-qxcI0Ex1.js} +0 -0
  424. /package/codemini-web/dist/assets/{material-theme-BYnCtUED.js → material-theme-DfbSys7S.js} +0 -0
  425. /package/codemini-web/dist/assets/{material-theme-darker-BNfFk916.js → material-theme-darker-CXzTJODk.js} +0 -0
  426. /package/codemini-web/dist/assets/{material-theme-darker-s0o-qH0l.js → material-theme-darker-DM1OIivA.js} +0 -0
  427. /package/codemini-web/dist/assets/{material-theme-OBz0sIMu.js → material-theme-jZt3rhQh.js} +0 -0
  428. /package/codemini-web/dist/assets/{material-theme-lighter-BXApD6tt.js → material-theme-lighter-C7qz3G7H.js} +0 -0
  429. /package/codemini-web/dist/assets/{material-theme-lighter-D0OJsx_T.js → material-theme-lighter-HtgpH1FU.js} +0 -0
  430. /package/codemini-web/dist/assets/{material-theme-ocean-CKWC7YJB.js → material-theme-ocean-CeFuXoRG.js} +0 -0
  431. /package/codemini-web/dist/assets/{material-theme-ocean-Cl_PEvBf.js → material-theme-ocean-DmL5jMtS.js} +0 -0
  432. /package/codemini-web/dist/assets/{material-theme-palenight-CEFfV_mF.js → material-theme-palenight-BMg4YxS6.js} +0 -0
  433. /package/codemini-web/dist/assets/{material-theme-palenight-DOTFIR3W.js → material-theme-palenight-CRxwxFv4.js} +0 -0
  434. /package/codemini-web/dist/assets/{matlab-BiYD-Y7N.js → matlab-BjvFQgI4.js} +0 -0
  435. /package/codemini-web/dist/assets/{matlab-CwLrY_Ss.js → matlab-CeDNF4Ix.js} +0 -0
  436. /package/codemini-web/dist/assets/{mdx-OZt5aooY.js → mdx-C_WF1Zvy.js} +0 -0
  437. /package/codemini-web/dist/assets/{mdx-irdaVRH8.js → mdx-DnKU9cqA.js} +0 -0
  438. /package/codemini-web/dist/assets/{mermaid-CkReAMVX.js → mermaid-5NtVsV32.js} +0 -0
  439. /package/codemini-web/dist/assets/{mermaid-mzvznqsh.js → mermaid-CH8Qvaqo.js} +0 -0
  440. /package/codemini-web/dist/assets/{min-dark-BAbZNtjj.js → min-dark-B95jFnY0.js} +0 -0
  441. /package/codemini-web/dist/assets/{min-dark-DoFQ3_GG.js → min-dark-BQ7SSUoL.js} +0 -0
  442. /package/codemini-web/dist/assets/{min-light-BzEisXBR.js → min-light-BGgk1zEi.js} +0 -0
  443. /package/codemini-web/dist/assets/{min-light-o5Iu4PYL.js → min-light-CqwYUont.js} +0 -0
  444. /package/codemini-web/dist/assets/{mipsasm-B9ciUcum.js → mipsasm-BIZV50OU.js} +0 -0
  445. /package/codemini-web/dist/assets/{mipsasm-DONjtc4L.js → mipsasm-OAAwCDEg.js} +0 -0
  446. /package/codemini-web/dist/assets/{mojo-A9VdeGlD.js → mojo-Bh0Ln9-1.js} +0 -0
  447. /package/codemini-web/dist/assets/{mojo-CHKQ5hW9.js → mojo-COx3BOEA.js} +0 -0
  448. /package/codemini-web/dist/assets/{monokai-B8rLeJY_.js → monokai-C988KBom.js} +0 -0
  449. /package/codemini-web/dist/assets/{monokai-SjnsTHn6.js → monokai-D2lcpl-D.js} +0 -0
  450. /package/codemini-web/dist/assets/{moonbit-Bb7eeXNq.js → moonbit-C-CVJfEU.js} +0 -0
  451. /package/codemini-web/dist/assets/{moonbit-CWIHpJf0.js → moonbit-ChOfdbnC.js} +0 -0
  452. /package/codemini-web/dist/assets/{move-Dy7CmIgW.js → move-DjHf2uHT.js} +0 -0
  453. /package/codemini-web/dist/assets/{move-MA-qIPBB.js → move-jwG4QUY4.js} +0 -0
  454. /package/codemini-web/dist/assets/{narrat-Cq6wc063.js → narrat-Bv3slmdi.js} +0 -0
  455. /package/codemini-web/dist/assets/{narrat-NioX5-_j.js → narrat-CuRqtiDW.js} +0 -0
  456. /package/codemini-web/dist/assets/{nextflow-groovy-jKlTICX_.js → nextflow-groovy-CYeLXiaP.js} +0 -0
  457. /package/codemini-web/dist/assets/{nextflow-groovy-BgEBN3iS.js → nextflow-groovy-Dk0GcQpl.js} +0 -0
  458. /package/codemini-web/dist/assets/{night-owl-C_xVeV9U.js → night-owl-SjOLjRtB.js} +0 -0
  459. /package/codemini-web/dist/assets/{night-owl-DHaGAA37.js → night-owl-cv0FEuUh.js} +0 -0
  460. /package/codemini-web/dist/assets/{night-owl-light-B1H1b6pL.js → night-owl-light-CpcKp0OZ.js} +0 -0
  461. /package/codemini-web/dist/assets/{night-owl-light-C_DkqGGe.js → night-owl-light-DHrEzBAj.js} +0 -0
  462. /package/codemini-web/dist/assets/{nix-BZVKmCQS.js → nix-BtLlRvM0.js} +0 -0
  463. /package/codemini-web/dist/assets/{nix-CBdStlCf.js → nix-CcOD1khX.js} +0 -0
  464. /package/codemini-web/dist/assets/{nord-3ndmnVQb.js → nord-BGjNHkRW.js} +0 -0
  465. /package/codemini-web/dist/assets/{nord-CrTSutxR.js → nord-DiukgIFA.js} +0 -0
  466. /package/codemini-web/dist/assets/{nushell-BSMBFYgO.js → nushell-DUqFDYtM.js} +0 -0
  467. /package/codemini-web/dist/assets/{nushell-C8hgS98n.js → nushell-GFe6C8D1.js} +0 -0
  468. /package/codemini-web/dist/assets/{objective-c-BUiYTSad.js → objective-c-BUV8AyKp.js} +0 -0
  469. /package/codemini-web/dist/assets/{objective-c-DGGlUjtt.js → objective-c-Da4gtNmU.js} +0 -0
  470. /package/codemini-web/dist/assets/{objective-cpp-Bk8vAxra.js → objective-cpp-Du3a_PKx.js} +0 -0
  471. /package/codemini-web/dist/assets/{objective-cpp-BwY1U2XT.js → objective-cpp-U8QllJj4.js} +0 -0
  472. /package/codemini-web/dist/assets/{ocaml-D51PiCY5.js → ocaml-4v1g0DKj.js} +0 -0
  473. /package/codemini-web/dist/assets/{ocaml-KuZ2AeVv.js → ocaml-DwXjJdD9.js} +0 -0
  474. /package/codemini-web/dist/assets/{odin-CoC4d8pi.js → odin-BlEjbtjb.js} +0 -0
  475. /package/codemini-web/dist/assets/{odin-CvKV_dam.js → odin-C2CG6fMn.js} +0 -0
  476. /package/codemini-web/dist/assets/{one-dark-pro-BbI-DLX3.js → one-dark-pro-BL6Mm10K.js} +0 -0
  477. /package/codemini-web/dist/assets/{one-dark-pro-C9bEA2Dz.js → one-dark-pro-BwcbXd-T.js} +0 -0
  478. /package/codemini-web/dist/assets/{one-light-DZ_5GYrV.js → one-light-BOQW5zin.js} +0 -0
  479. /package/codemini-web/dist/assets/{one-light-Do56bP_A.js → one-light-Cx3Ps96S.js} +0 -0
  480. /package/codemini-web/dist/assets/{openscad-0H6ozqDa.js → openscad-Bs2SxlcB.js} +0 -0
  481. /package/codemini-web/dist/assets/{openscad-DCmPLSXt.js → openscad-C7dPmpxc.js} +0 -0
  482. /package/codemini-web/dist/assets/{pascal-BMY45JJO.js → pascal-B6AuHgs_.js} +0 -0
  483. /package/codemini-web/dist/assets/{pascal-DghlbeLm.js → pascal-ruAwSiza.js} +0 -0
  484. /package/codemini-web/dist/assets/{pierre-dark-Be9bUWwI.js → pierre-dark-8SGzlI93.js} +0 -0
  485. /package/codemini-web/dist/assets/{pierre-light-Cq6kCwdb.js → pierre-light-BJzkLopB.js} +0 -0
  486. /package/codemini-web/dist/assets/{pkl-BlBky-cR.js → pkl-Bdw5peeW.js} +0 -0
  487. /package/codemini-web/dist/assets/{pkl-BzGvIelR.js → pkl-BuPFXprX.js} +0 -0
  488. /package/codemini-web/dist/assets/{plastic-C50vuo0c.js → plastic-BiAROaFC.js} +0 -0
  489. /package/codemini-web/dist/assets/{plastic-CHL2Ec9b.js → plastic-CGwKUd0C.js} +0 -0
  490. /package/codemini-web/dist/assets/{plsql-B6Eq-lAd.js → plsql-DQ_z5ed2.js} +0 -0
  491. /package/codemini-web/dist/assets/{plsql-mtL4EDYx.js → plsql-DoG_QfBE.js} +0 -0
  492. /package/codemini-web/dist/assets/{po-9sFvF4V8.js → po-BvHij3iO.js} +0 -0
  493. /package/codemini-web/dist/assets/{po-ByS5p8Sz.js → po-DN-mfyYW.js} +0 -0
  494. /package/codemini-web/dist/assets/{poimandres-Cs9j_baE.js → poimandres-BbdNMHGS.js} +0 -0
  495. /package/codemini-web/dist/assets/{poimandres-Cu7ZGbJ7.js → poimandres-BdM9d7kg.js} +0 -0
  496. /package/codemini-web/dist/assets/{polar-COmSbiHW.js → polar-BZ5C-_XH.js} +0 -0
  497. /package/codemini-web/dist/assets/{polar-Dc9aglFR.js → polar-p_EVOYp2.js} +0 -0
  498. /package/codemini-web/dist/assets/{postcss-B_ncIJlb.js → postcss-BVVH-mhK.js} +0 -0
  499. /package/codemini-web/dist/assets/{postcss-D_ArMqNC.js → postcss-C_rkJ2pP.js} +0 -0
  500. /package/codemini-web/dist/assets/{powerquery-BzHwsYRb.js → powerquery-BBfv-1ce.js} +0 -0
  501. /package/codemini-web/dist/assets/{powerquery-CnV22x6V.js → powerquery-D2htabf9.js} +0 -0
  502. /package/codemini-web/dist/assets/{powershell-BGZYhdIS.js → powershell-BcfgzEsQ.js} +0 -0
  503. /package/codemini-web/dist/assets/{powershell-C6bIwB0M.js → powershell-NfY3J8Uu.js} +0 -0
  504. /package/codemini-web/dist/assets/{prisma-D5S9vj6g.js → prisma-CMeP8UTm.js} +0 -0
  505. /package/codemini-web/dist/assets/{prisma-rx7KPY6m.js → prisma-DFAqr_mL.js} +0 -0
  506. /package/codemini-web/dist/assets/{prolog-BfgX1o85.js → prolog-Cc9yvHML.js} +0 -0
  507. /package/codemini-web/dist/assets/{prolog-CHVuxG8M.js → prolog-rt-FXeeT.js} +0 -0
  508. /package/codemini-web/dist/assets/{proto-B_ioi7EM.js → proto-CNBX21YV.js} +0 -0
  509. /package/codemini-web/dist/assets/{proto-BhkmoXVj.js → proto-CYqgjQUT.js} +0 -0
  510. /package/codemini-web/dist/assets/{puppet-Brdz8eoo.js → puppet-BAAnN8uU.js} +0 -0
  511. /package/codemini-web/dist/assets/{puppet-tRlrvlcY.js → puppet-ZnM2F-kY.js} +0 -0
  512. /package/codemini-web/dist/assets/{purescript-Bwtvgqjl.js → purescript-hu-4rgo5.js} +0 -0
  513. /package/codemini-web/dist/assets/{purescript-DX3wKXeK.js → purescript-nyLIIaTP.js} +0 -0
  514. /package/codemini-web/dist/assets/{python-9qQRnRoJ.js → python-Dt6SBvxD.js} +0 -0
  515. /package/codemini-web/dist/assets/{python-CUtprRpG.js → python-DypNN-aL.js} +0 -0
  516. /package/codemini-web/dist/assets/{qmldir-BP8WEvx8.js → qmldir-BDEiw2QJ.js} +0 -0
  517. /package/codemini-web/dist/assets/{qmldir-ftS4SxdQ.js → qmldir-MBz01aYW.js} +0 -0
  518. /package/codemini-web/dist/assets/{qss-DrZJSiDh.js → qss-B8ZOZZRM.js} +0 -0
  519. /package/codemini-web/dist/assets/{qss-Mo-j41VR.js → qss-BjslRtqf.js} +0 -0
  520. /package/codemini-web/dist/assets/{r-BX0U3688.js → r-70IHnSKT.js} +0 -0
  521. /package/codemini-web/dist/assets/{r-DN76jn9o.js → r-UrwRxojO.js} +0 -0
  522. /package/codemini-web/dist/assets/{racket-CrTD1_3_.js → racket-emNFhxM0.js} +0 -0
  523. /package/codemini-web/dist/assets/{racket-DCvJyROq.js → racket-lrWGJ4l7.js} +0 -0
  524. /package/codemini-web/dist/assets/{raku-Bhig3MAC.js → raku-B1DWL3rh.js} +0 -0
  525. /package/codemini-web/dist/assets/{raku-CvVnta4t.js → raku-M_VGm79k.js} +0 -0
  526. /package/codemini-web/dist/assets/{red-CWX-2pbk.js → red-BcYVa2Jk.js} +0 -0
  527. /package/codemini-web/dist/assets/{red-CztBD70n.js → red-BvMgtCZO.js} +0 -0
  528. /package/codemini-web/dist/assets/{reg-99qFU_BD.js → reg-DL66XhHR.js} +0 -0
  529. /package/codemini-web/dist/assets/{reg-C0s7-4s0.js → reg-rRGLqGjW.js} +0 -0
  530. /package/codemini-web/dist/assets/{regexp-BIytsEkR.js → regexp-CEudNzRJ.js} +0 -0
  531. /package/codemini-web/dist/assets/{regexp-Cov7gRr6.js → regexp-PTdmEsyL.js} +0 -0
  532. /package/codemini-web/dist/assets/{rel-BuFiYCnx.js → rel-DlXaqz0b.js} +0 -0
  533. /package/codemini-web/dist/assets/{rel-D1_XRRAX.js → rel-DqcQFa7Q.js} +0 -0
  534. /package/codemini-web/dist/assets/{riscv-CdWUuizJ.js → riscv-CanSyeO8.js} +0 -0
  535. /package/codemini-web/dist/assets/{riscv-QV-e36TY.js → riscv-lk-jjtXM.js} +0 -0
  536. /package/codemini-web/dist/assets/{ron-B-EB7ZBI.js → ron-BQ46iNCb.js} +0 -0
  537. /package/codemini-web/dist/assets/{ron-B9EiEQzE.js → ron-CVeChqUp.js} +0 -0
  538. /package/codemini-web/dist/assets/{rose-pine-B05wARW4.js → rose-pine-BuTm62Vj.js} +0 -0
  539. /package/codemini-web/dist/assets/{rose-pine-Dxqc8n_1.js → rose-pine-ChTxq_yN.js} +0 -0
  540. /package/codemini-web/dist/assets/{rose-pine-dawn-CSpx1lq4.js → rose-pine-dawn-B670NuiP.js} +0 -0
  541. /package/codemini-web/dist/assets/{rose-pine-dawn-pz_3O4ep.js → rose-pine-dawn-RGM_kxZ2.js} +0 -0
  542. /package/codemini-web/dist/assets/{rose-pine-moon-B27idgkd.js → rose-pine-moon-6KoQonQX.js} +0 -0
  543. /package/codemini-web/dist/assets/{rose-pine-moon-DXyZaCQX.js → rose-pine-moon-NLV-cJvy.js} +0 -0
  544. /package/codemini-web/dist/assets/{rosmsg-7fMni2bi.js → rosmsg-Bw0HfGe_.js} +0 -0
  545. /package/codemini-web/dist/assets/{rosmsg-CcBwQf5j.js → rosmsg-CUVWbdrA.js} +0 -0
  546. /package/codemini-web/dist/assets/{rust-BHulpgn4.js → rust-CrVJvhfa.js} +0 -0
  547. /package/codemini-web/dist/assets/{rust-ppknoGus.js → rust-D83UuV7F.js} +0 -0
  548. /package/codemini-web/dist/assets/{sass-Baw41att.js → sass-CE2YZJdE.js} +0 -0
  549. /package/codemini-web/dist/assets/{sass-DwJf1cGc.js → sass-Dfpo5TpD.js} +0 -0
  550. /package/codemini-web/dist/assets/{scala-B_iky--A.js → scala-BjILTRgu.js} +0 -0
  551. /package/codemini-web/dist/assets/{scala-DtlnBhKt.js → scala-CyYhociv.js} +0 -0
  552. /package/codemini-web/dist/assets/{scheme-B8EPXl9-.js → scheme-BQ8c0gTd.js} +0 -0
  553. /package/codemini-web/dist/assets/{scheme-DYQMayIi.js → scheme-BrRWQ1yX.js} +0 -0
  554. /package/codemini-web/dist/assets/{sdbl-BQ-WHv_b.js → sdbl-CtZR2I6R.js} +0 -0
  555. /package/codemini-web/dist/assets/{sdbl-D0gXyfL6.js → sdbl-Ds7t3N0Q.js} +0 -0
  556. /package/codemini-web/dist/assets/{shellscript-B_ROtSU5.js → shellscript-Cim6Loaj.js} +0 -0
  557. /package/codemini-web/dist/assets/{shellscript-CPlx29kh.js → shellscript-wXQ3AlcS.js} +0 -0
  558. /package/codemini-web/dist/assets/{slack-dark-D27cdsBY.js → slack-dark-CrWftATe.js} +0 -0
  559. /package/codemini-web/dist/assets/{slack-dark-D_l_kxUG.js → slack-dark-nxsbRL6U.js} +0 -0
  560. /package/codemini-web/dist/assets/{slack-ochin-BE7dVjTN.js → slack-ochin-Cx2HX71B.js} +0 -0
  561. /package/codemini-web/dist/assets/{slack-ochin-BaRZ7cFo.js → slack-ochin-DJ-2OJXN.js} +0 -0
  562. /package/codemini-web/dist/assets/{smalltalk-B12I7SNP.js → smalltalk-DGeW9hbd.js} +0 -0
  563. /package/codemini-web/dist/assets/{smalltalk-DRM3jr39.js → smalltalk-FYMOGNo9.js} +0 -0
  564. /package/codemini-web/dist/assets/{snazzy-light-BayTLer3.js → snazzy-light-508iEJO_.js} +0 -0
  565. /package/codemini-web/dist/assets/{snazzy-light-CooAwQFN.js → snazzy-light-BxBnzmu0.js} +0 -0
  566. /package/codemini-web/dist/assets/{solarized-dark-DJyTII3y.js → solarized-dark-B3HMD5k3.js} +0 -0
  567. /package/codemini-web/dist/assets/{solarized-dark-Y31Htb59.js → solarized-dark-TCkigWjM.js} +0 -0
  568. /package/codemini-web/dist/assets/{solarized-light-AlAlWTlV.js → solarized-light-B-wiF2HZ.js} +0 -0
  569. /package/codemini-web/dist/assets/{solarized-light-B-u_T8hk.js → solarized-light-R2Rcjqww.js} +0 -0
  570. /package/codemini-web/dist/assets/{solidity-CYAp_sJG.js → solidity-46G7JVSr.js} +0 -0
  571. /package/codemini-web/dist/assets/{solidity-DGySeR8E.js → solidity-Bv4Kww1K.js} +0 -0
  572. /package/codemini-web/dist/assets/{splunk-DIQhxWy6.js → splunk-DHfVkGsm.js} +0 -0
  573. /package/codemini-web/dist/assets/{splunk-LsCTpuOP.js → splunk-DKgoBk9o.js} +0 -0
  574. /package/codemini-web/dist/assets/{sql-BHYM5i23.js → sql-Bx-skccv.js} +0 -0
  575. /package/codemini-web/dist/assets/{sql-Cl5BmUDB.js → sql-PkTJiLTy.js} +0 -0
  576. /package/codemini-web/dist/assets/{ssh-config-CTKraw7w.js → ssh-config-B2E5WPpD.js} +0 -0
  577. /package/codemini-web/dist/assets/{ssh-config-QxQe7y21.js → ssh-config-JoXpWa3y.js} +0 -0
  578. /package/codemini-web/dist/assets/{stylus-DZvi0832.js → stylus-BPw8WnNN.js} +0 -0
  579. /package/codemini-web/dist/assets/{stylus-MJorGDSp.js → stylus-C836DBsS.js} +0 -0
  580. /package/codemini-web/dist/assets/{swift-BBBWvOdl.js → swift-CFG3rDz_.js} +0 -0
  581. /package/codemini-web/dist/assets/{swift-vEJN8-U8.js → swift-Ce2Nlw8Q.js} +0 -0
  582. /package/codemini-web/dist/assets/{synthwave-84-CU96aGm9.js → synthwave-84-Br2i7yYN.js} +0 -0
  583. /package/codemini-web/dist/assets/{synthwave-84-Dq9WAwjJ.js → synthwave-84-CvU6yQ4V.js} +0 -0
  584. /package/codemini-web/dist/assets/{system-verilog-BNegUpQT.js → system-verilog-BVQtCmAV.js} +0 -0
  585. /package/codemini-web/dist/assets/{system-verilog-Ddagu-BW.js → system-verilog-Dkc37EdI.js} +0 -0
  586. /package/codemini-web/dist/assets/{systemd-BxlmhgV_.js → systemd-CcJTFvpw.js} +0 -0
  587. /package/codemini-web/dist/assets/{systemd-k28iMR-m.js → systemd-svl6VdYY.js} +0 -0
  588. /package/codemini-web/dist/assets/{talonscript-DprpkXjP.js → talonscript-CHxC2PG4.js} +0 -0
  589. /package/codemini-web/dist/assets/{talonscript-p-GlmLEL.js → talonscript-CWZYyS8Z.js} +0 -0
  590. /package/codemini-web/dist/assets/{tasl-BNm9EzXM.js → tasl-BfBucHfV.js} +0 -0
  591. /package/codemini-web/dist/assets/{tasl-CcWIX7df.js → tasl-woKXKJkx.js} +0 -0
  592. /package/codemini-web/dist/assets/{tcl-BQwTCs7_.js → tcl-6FTtarFH.js} +0 -0
  593. /package/codemini-web/dist/assets/{tcl-CDAGOvGJ.js → tcl-iBXrc9W2.js} +0 -0
  594. /package/codemini-web/dist/assets/{terraform-DLqNQanb.js → terraform-BywKBLRG.js} +0 -0
  595. /package/codemini-web/dist/assets/{terraform-DQhgYyF5.js → terraform-DHx5Kdyi.js} +0 -0
  596. /package/codemini-web/dist/assets/{tokyo-night-DxL5lL62.js → tokyo-night-BQsIhA-A.js} +0 -0
  597. /package/codemini-web/dist/assets/{tokyo-night-mZPbj36U.js → tokyo-night-D2gua4K6.js} +0 -0
  598. /package/codemini-web/dist/assets/{toml-BncMjmx0.js → toml-B35rd2Aj.js} +0 -0
  599. /package/codemini-web/dist/assets/{toml-C7zZe7mY.js → toml-BCbG8Uu3.js} +0 -0
  600. /package/codemini-web/dist/assets/{tsv--yOlbuAc.js → tsv-Bfk0YRxN.js} +0 -0
  601. /package/codemini-web/dist/assets/{tsv-BYgjC2V4.js → tsv-ZPaCtsKO.js} +0 -0
  602. /package/codemini-web/dist/assets/{tsx-CQpoSLkt.js → tsx-BPnxgPXu.js} +0 -0
  603. /package/codemini-web/dist/assets/{tsx-_xvh4DFW.js → tsx-Cvi8n1qy.js} +0 -0
  604. /package/codemini-web/dist/assets/{turtle-DO1RZ6-t.js → turtle-Cj8ap4C4.js} +0 -0
  605. /package/codemini-web/dist/assets/{turtle-ZCrKgE8E.js → turtle-DsCF_r1D.js} +0 -0
  606. /package/codemini-web/dist/assets/{typescript-BGytLZ-E.js → typescript-DESGzanZ.js} +0 -0
  607. /package/codemini-web/dist/assets/{typescript-Bl_SUyNj.js → typescript-DkKrEyJv.js} +0 -0
  608. /package/codemini-web/dist/assets/{typespec-9rD7KG94.js → typespec-tsneGPKg.js} +0 -0
  609. /package/codemini-web/dist/assets/{typespec-Bb7cO9Af.js → typespec-zSWU032W.js} +0 -0
  610. /package/codemini-web/dist/assets/{typst-CChrusEX.js → typst-BcQNhVIE.js} +0 -0
  611. /package/codemini-web/dist/assets/{typst-DJ10KoY6.js → typst-C6LmF4pH.js} +0 -0
  612. /package/codemini-web/dist/assets/{v-CutuAYrg.js → v-CPbK5D5K.js} +0 -0
  613. /package/codemini-web/dist/assets/{v-DCfT4ti_.js → v-D6v2lknR.js} +0 -0
  614. /package/codemini-web/dist/assets/{vala-APnq2lEm.js → vala-CTmcnleK.js} +0 -0
  615. /package/codemini-web/dist/assets/{vala-DJpFErrU.js → vala-CW2V92s6.js} +0 -0
  616. /package/codemini-web/dist/assets/{vb-2TNZABCr.js → vb-CHzBmKx-.js} +0 -0
  617. /package/codemini-web/dist/assets/{vb-DQuyY02M.js → vb-iQRhK9Tp.js} +0 -0
  618. /package/codemini-web/dist/assets/{verilog-Bc6dGayD.js → verilog-BxRFSB3_.js} +0 -0
  619. /package/codemini-web/dist/assets/{verilog-BuvxZrtu.js → verilog-Cu16TfKw.js} +0 -0
  620. /package/codemini-web/dist/assets/{vesper-5CiKYnlC.js → vesper-B0T1dCxY.js} +0 -0
  621. /package/codemini-web/dist/assets/{vesper-bM1AKkiO.js → vesper-D_U9vezF.js} +0 -0
  622. /package/codemini-web/dist/assets/{vhdl-2NYOzUvZ.js → vhdl-D4h06VsC.js} +0 -0
  623. /package/codemini-web/dist/assets/{vhdl-pScFq2IF.js → vhdl-suLxFY6N.js} +0 -0
  624. /package/codemini-web/dist/assets/{viml-AdCpKk5r.js → viml-BQu4-sFk.js} +0 -0
  625. /package/codemini-web/dist/assets/{viml-LZIbwXqf.js → viml-DMcwh6Y2.js} +0 -0
  626. /package/codemini-web/dist/assets/{vitesse-black-BhKXUSxn.js → vitesse-black-Dk8H62LF.js} +0 -0
  627. /package/codemini-web/dist/assets/{vitesse-black-DJ5O_Wf1.js → vitesse-black-sFXfT98A.js} +0 -0
  628. /package/codemini-web/dist/assets/{vitesse-dark-23Naczwl.js → vitesse-dark-B_8wZgsl.js} +0 -0
  629. /package/codemini-web/dist/assets/{vitesse-dark-BzqhRcAC.js → vitesse-dark-BuiSS132.js} +0 -0
  630. /package/codemini-web/dist/assets/{vitesse-light-BDEFVzPq.js → vitesse-light-BFFa4sOZ.js} +0 -0
  631. /package/codemini-web/dist/assets/{vitesse-light-C6rj90Ld.js → vitesse-light-DfdaVJLv.js} +0 -0
  632. /package/codemini-web/dist/assets/{vyper-CAC2wkEx.js → vyper-CU9IduFj.js} +0 -0
  633. /package/codemini-web/dist/assets/{vyper-Cli2Hz-N.js → vyper-DfAPtbtc.js} +0 -0
  634. /package/codemini-web/dist/assets/{wasm-BYEYHoBh.js → wasm-6aAEIEYl.js} +0 -0
  635. /package/codemini-web/dist/assets/{wasm-JuQDwMf4.js → wasm-ByDQ9GrP.js} +0 -0
  636. /package/codemini-web/dist/assets/{wasm-C_1NoYKf.js → wasm-C9fkFrNS.js} +0 -0
  637. /package/codemini-web/dist/assets/{wasm-DmLFHHUn.js → wasm-CdytVWOW.js} +0 -0
  638. /package/codemini-web/dist/assets/{wenyan-BtC3dCkd.js → wenyan-B_37P8uK.js} +0 -0
  639. /package/codemini-web/dist/assets/{wenyan-DZOq1WNp.js → wenyan-DNkN8oQc.js} +0 -0
  640. /package/codemini-web/dist/assets/{wgsl-BfhDoYq0.js → wgsl-Bggw1Yhv.js} +0 -0
  641. /package/codemini-web/dist/assets/{wgsl-sEaiSqkk.js → wgsl-by06Hq-s.js} +0 -0
  642. /package/codemini-web/dist/assets/{wikitext-BBK9d3N8.js → wikitext-CjjhOSjd.js} +0 -0
  643. /package/codemini-web/dist/assets/{wikitext-BN0a9cMl.js → wikitext-zXy-4mpr.js} +0 -0
  644. /package/codemini-web/dist/assets/{wit-B5eB3VJ4.js → wit--vc2X9vR.js} +0 -0
  645. /package/codemini-web/dist/assets/{wit-Drz0L2pK.js → wit-BHjrebka.js} +0 -0
  646. /package/codemini-web/dist/assets/{wolfram-BjzpXDTC.js → wolfram-Dr60-Zy4.js} +0 -0
  647. /package/codemini-web/dist/assets/{wolfram-hGtNh8mf.js → wolfram-Mw4XcN1t.js} +0 -0
  648. /package/codemini-web/dist/assets/{yaml-45PVuYHO.js → yaml--meH0-me.js} +0 -0
  649. /package/codemini-web/dist/assets/{yaml-CvJwaec9.js → yaml-CZT5eZge.js} +0 -0
  650. /package/codemini-web/dist/assets/{zenscript-ChrmAB59.js → zenscript-C94GGJ6Y.js} +0 -0
  651. /package/codemini-web/dist/assets/{zenscript-Dl5s7Kfy.js → zenscript-Cf2Qp-oj.js} +0 -0
  652. /package/codemini-web/dist/assets/{zig-BYKQoCIF.js → zig-DgUQodsP.js} +0 -0
  653. /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
- if (existed && !normalizedArgs?.append && !normalizedArgs?.full_file_rewrite) {
1011
- throw new Error(
1012
- 'write blocks full overwrite for existing files by default. Use read -> edit for existing file changes, or pass full_file_rewrite=true when a whole-file rewrite is truly intended.'
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, normalizedArgs?.content || '', 'utf8');
1032
+ await fs.appendFile(target, nextContent, 'utf8');
1018
1033
  } else {
1019
- await fs.writeFile(target, normalizedArgs?.content || '', 'utf8');
1034
+ await fs.writeFile(target, nextContent, 'utf8');
1020
1035
  }
1021
- const after = normalizedArgs?.append ? `${before}${normalizedArgs?.content || ''}` : normalizedArgs?.content || '';
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
- throw new Error(
1718
- occurrences === 0
1719
- ? 'replace_text old_text not found'
1720
- : 'replace_text old_text not unique; add a line range like path:"file.js:10-30" or set replace_all=true'
1721
- );
1722
- }
1723
- const replaced = searchContent.replace(oldText, newText);
1724
- const afterContent = range
1725
- ? `${state.content.slice(0, range.startOffset)}${replaced}${state.content.slice(range.endOffset)}`
1726
- : state.content.replace(oldText, newText);
1727
- await fs.writeFile(state.target, afterContent, 'utf8');
1728
- const changedLine = range
1729
- ? range.startLine + splitLines(searchContent.slice(0, searchContent.indexOf(oldText))).length - 1
1730
- : splitLines(state.content.slice(0, state.content.indexOf(oldText))).length;
1731
- return editResult(relativePath, 'replace_text', state.content, afterContent, changedLine);
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}", edit:{kind:"rewrite_file", new_content:"..."}} for a full rewrite.`
1867
- : ' Use edit with {file:"path", old_text:"...", new_text:"..."} for a text replacement, or {file:"path", edit:{kind:"rewrite_file", new_content:"..."}} for a full rewrite.';
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 astTarget = resolveCachedAstTarget(args, { requireAstScope: normalizedKind === 'replace_block' });
2685
- const editPath = normalizeFilePathValue(args?.path || args?.file || args?.file_path || '', { stripInlineRange: true }).trim();
2686
- const shouldUseRecentReadRange =
2687
- editPath &&
2688
- lastReadRange?.path === editPath &&
2689
- !Number.isFinite(Number(args?.start_line || args?.line || args?.edit?.start_line)) &&
2690
- !Number.isFinite(Number(args?.end_line || args?.edit?.end_line));
2691
- const rangeArgs = shouldUseRecentReadRange
2692
- ? { start_line: lastReadRange.start_line, end_line: lastReadRange.end_line }
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 result = await writeFile(workspaceRoot, args, config);
2707
- if (result?.path) await refreshProjectFile(result.path);
2708
- return result;
2709
- },
2710
- delete: Object.assign(async (args) => {
2711
- await ensureProjectIndex();
2712
- const result = await deletePath(workspaceRoot, args, config);
2713
- if (result?.path) await refreshProjectFile(result.path);
2714
- return result;
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 summary = `${action} ${p}${line > 0 ? ` @L${line}` : ''}`;
3003
- const diffPreview = result.diff_preview || '';
3004
- if (diffPreview) {
3005
- const trimmed = diffPreview.length > 600 ? `${diffPreview.slice(0, 597)}...` : diffPreview;
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 summary = `${action} ${p}${line > 0 ? ` @L${line}` : ''}`;
3017
- const diffPreview = result.diff_preview || '';
3018
- if (diffPreview) {
3019
- const trimmed = diffPreview.length > 600 ? `${diffPreview.slice(0, 597)}...` : diffPreview;
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
- return `[delete: ${kind}] deleted ${target}`;
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);