@maincode-ai/matilda-code 0.21.11 → 0.21.13-nightly.20261026.e0eae1d8c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/mainy/SKILL.md +0 -2
- package/bundled/mainy/docs/_meta.ts +0 -2
- package/bundled/mainy/docs/configuration/auth.md +5 -10
- package/bundled/mainy/docs/configuration/model-providers.md +31 -217
- package/bundled/mainy/docs/configuration/settings.md +48 -9
- package/bundled/mainy/docs/configuration/trusted-folders.md +12 -6
- package/bundled/mainy/docs/features/auto-mode.md +1 -1
- package/bundled/mainy/docs/features/channels/_meta.ts +0 -3
- package/bundled/mainy/docs/features/channels/overview.md +8 -16
- package/bundled/mainy/docs/features/commands.md +4 -4
- package/bundled/mainy/docs/features/hooks.md +9 -7
- package/bundled/mainy/docs/features/language.md +2 -29
- package/bundled/mainy/docs/features/sub-agents.md +1 -1
- package/bundled/mainy/docs/features/worktree.md +3 -5
- package/bundled/mainy/docs/integration-github-action.md +3 -3
- package/bundled/mainy/docs/matilda-serve.md +1 -1
- package/bundled/mainy/docs/quickstart.md +2 -2
- package/bundled/mainy/docs/support/troubleshooting.md +3 -10
- package/chunks/agent-4FTU3WN6.js +3 -0
- package/chunks/agent-headless-QJUVHPFC.js +3 -0
- package/chunks/{askUserQuestion-XWHJY3DM.js → askUserQuestion-QKX4NEFX.js} +1 -1
- package/chunks/{ca-EUJBUYX5.js → ca-C2V7I65K.js} +6 -6
- package/chunks/{chunk-T4P4KEDW.js → chunk-2ONZZ46N.js} +2 -2
- package/chunks/chunk-36K4HBVM.js +7 -0
- package/chunks/{chunk-EQGA7LH7.js → chunk-3B2HABK7.js} +1 -1
- package/chunks/{chunk-5427BPR2.js → chunk-5NMK4Y7C.js} +1 -1
- package/chunks/chunk-5YT4GCK7.js +14 -0
- package/chunks/{chunk-MH2P4YXC.js → chunk-62AFAL4I.js} +10 -10
- package/chunks/chunk-75KP2FVD.js +81 -0
- package/chunks/chunk-7ZODGQO6.js +4 -0
- package/chunks/chunk-BZB7HYRC.js +37 -0
- package/chunks/{chunk-WHG6N5X2.js → chunk-EXNHJQCD.js} +1 -1
- package/chunks/chunk-FCGYRGV4.js +9 -0
- package/chunks/chunk-G4YMVWG4.js +8 -0
- package/chunks/{chunk-4FVBPNTZ.js → chunk-HDARIAVM.js} +1 -1
- package/chunks/{chunk-4YVN5HXG.js → chunk-HM5LCKDB.js} +2 -2
- package/chunks/chunk-IIQ5YERM.js +120 -0
- package/chunks/chunk-JGJ7BVZN.js +101 -0
- package/chunks/{chunk-FFFZ2QMG.js → chunk-JIKQI4MZ.js} +1 -1
- package/chunks/{chunk-SPW5DXX4.js → chunk-LHDCAN7Z.js} +1 -1
- package/chunks/chunk-LZDHANXA.js +89 -0
- package/chunks/{chunk-ELH4YHJR.js → chunk-NOE4UNQN.js} +1 -1
- package/chunks/chunk-OEZS5R3S.js +207 -0
- package/chunks/{chunk-OOEH6ZSV.js → chunk-PTMCLADZ.js} +1 -1
- package/chunks/{chunk-NYEWHSBL.js → chunk-PYZNGIIR.js} +1 -1
- package/chunks/chunk-QJJTUDDA.js +56 -0
- package/chunks/{chunk-GO2GA2GY.js → chunk-R34HYLL4.js} +1 -1
- package/chunks/{chunk-Q55AVE2N.js → chunk-RK4LPGBV.js} +11 -11
- package/chunks/{chunk-JXUDKX6D.js → chunk-RYHMPK5G.js} +1 -1
- package/chunks/chunk-SR7ARGUY.js +13 -0
- package/chunks/chunk-SY6JRCN3.js +2612 -0
- package/chunks/chunk-TUKNB5CQ.js +33 -0
- package/chunks/{chunk-YMIF2DMT.js → chunk-TZ4FRU6B.js} +1 -1
- package/chunks/chunk-U7V7APDV.js +9 -0
- package/chunks/{chunk-SNLH42QJ.js → chunk-UVWZ44ZW.js} +1 -1
- package/chunks/{chunk-HYVP4472.js → chunk-V6UPUMP3.js} +1 -1
- package/chunks/{chunk-4CSSDBOS.js → chunk-VLDZBRTL.js} +10 -10
- package/chunks/{computer-use-SXP25RZQ.js → computer-use-OXAMR75N.js} +1 -1
- package/chunks/contextCommand-ERLW5VWL.js +3 -0
- package/chunks/{cron-create-2UI4AT4Q.js → cron-create-AUDQ6STP.js} +1 -1
- package/chunks/{cron-delete-ZB6BOTFF.js → cron-delete-P5HE3PDD.js} +1 -1
- package/chunks/{cron-list-YYAXNHB6.js → cron-list-NR5FZBK2.js} +1 -1
- package/chunks/{de-DNEPG7S7.js → de-KOUI2CEW.js} +6 -6
- package/chunks/{devtools-5JRKK3E7.js → devtools-G5DWLP2N.js} +1 -1
- package/chunks/dist-XXTQNTKQ.js +42 -0
- package/chunks/dist-ZFZZLIQU.js +3 -0
- package/chunks/edit-REFR5ROS.js +43 -0
- package/chunks/{en-NOD6KQNM.js → en-RMYRLXC2.js} +4 -4
- package/chunks/{enter-worktree-X47BSJLE.js → enter-worktree-WO3DT2G7.js} +1 -1
- package/chunks/{enterPlanMode-F22ZNTYJ.js → enterPlanMode-PLRHEU5A.js} +1 -1
- package/chunks/{exit-worktree-XY5UMDHX.js → exit-worktree-J5PW6DCV.js} +1 -1
- package/chunks/exitPlanMode-KXUPNLCJ.js +120 -0
- package/chunks/{fr-2OE5WLJ4.js → fr-R3QF3LA2.js} +5 -5
- package/chunks/glob-ZVTVRDQO.js +22 -0
- package/chunks/{goal-tools-6QTC3UI7.js → goal-tools-XVKQJL5I.js} +1 -1
- package/chunks/{grep-6TTPZ524.js → grep-R7CWUNNE.js} +1 -1
- package/chunks/{ja-3B6V5KS7.js → ja-A5OQLXUZ.js} +6 -6
- package/chunks/{keychain-token-storage-54BNK6VH.js → keychain-token-storage-IM4UB4P4.js} +1 -1
- package/chunks/{ls-YWZU3FYL.js → ls-DEAFYDVV.js} +1 -1
- package/chunks/{lsp-4CJDKEEC.js → lsp-DL7W47VY.js} +1 -1
- package/chunks/matildaAgentContentGenerator-57EIU5XE.js +8 -0
- package/chunks/mcp-client-X7LEGSP3.js +3 -0
- package/chunks/monitor-KPWTMH3V.js +32 -0
- package/chunks/{multipart-parser-JI75T2O5.js → multipart-parser-FKHYAVGR.js} +1 -1
- package/chunks/notebook-edit-3ZH5M2TC.js +17 -0
- package/chunks/openaiContentGenerator-6PXSD3T7.js +37 -0
- package/chunks/{pt-KP2JCPUY.js → pt-RG3S3KA7.js} +6 -6
- package/chunks/read-file-JNS7WRUP.js +3 -0
- package/chunks/ripGrep-ICJDGIIV.js +3 -0
- package/chunks/{ru-K7IQQKHC.js → ru-5S5HLRT7.js} +5 -5
- package/chunks/scheduler-QC2PPMFP.js +8 -0
- package/chunks/{send-message-OO2HAKCC.js → send-message-V2WYLN5X.js} +1 -1
- package/chunks/{serve-ZQX2WBLF.js → serve-NUVQULZJ.js} +59 -48
- package/chunks/shell-5LNI7URE.js +3 -0
- package/chunks/{skill-KDM3UUML.js → skill-QFATRHQW.js} +1 -1
- package/chunks/src-6UPZ7TVB.js +3 -0
- package/chunks/src-LZEU4AYF.js +5 -0
- package/chunks/{symbol-search-ALYOX5JN.js → symbol-search-WL6ZHUUN.js} +1 -1
- package/chunks/{syntheticOutput-UASKABJH.js → syntheticOutput-3KW6SQAF.js} +1 -1
- package/chunks/task-create-PNW5SN27.js +3 -0
- package/chunks/{task-detach-I67ZE5MX.js → task-detach-B7PDPFBA.js} +1 -1
- package/chunks/task-list-GGZATGK5.js +9 -0
- package/chunks/{task-stop-ERI5X4AO.js → task-stop-UKBBE2KG.js} +1 -1
- package/chunks/{task-update-CD3W556L.js → task-update-4RHVUBUV.js} +1 -1
- package/chunks/{team-create-F4KQRGMB.js → team-create-2TJC3X57.js} +1 -1
- package/chunks/team-delete-4UJ7SU65.js +8 -0
- package/chunks/todoWrite-NEBVKOSG.js +3 -0
- package/chunks/{tool-search-JFCD5W5M.js → tool-search-R5GS64YR.js} +1 -1
- package/chunks/tree-sitter-bash-2SWKO5B7.js +3 -0
- package/chunks/{web-fetch-REWGIRWQ.js → web-fetch-H3XJMAEF.js} +17 -17
- package/chunks/{web-search-OX2DPEVN.js → web-search-Q6RWPEIB.js} +1 -1
- package/chunks/{workflow-SEFYGBED.js → workflow-3A7KN3E3.js} +2 -2
- package/chunks/write-file-O7Q6SKZC.js +15 -0
- package/cli.js +509 -495
- package/locales/ca.js +2 -28
- package/locales/de.js +2 -28
- package/locales/en.js +2 -30
- package/locales/fr.js +2 -30
- package/locales/ja.js +2 -28
- package/locales/pt.js +2 -28
- package/locales/ru.js +2 -28
- package/package.json +2 -2
- package/sandbox-macos-permissive-closed.sb +0 -1
- package/sandbox-macos-permissive-open.sb +0 -1
- package/sandbox-macos-permissive-proxied.sb +0 -1
- package/sandbox-macos-restrictive-closed.sb +3 -1
- package/sandbox-macos-restrictive-open.sb +3 -1
- package/sandbox-macos-restrictive-proxied.sb +3 -1
- package/bundled/mainy/docs/features/channels/dingtalk.md +0 -134
- package/bundled/mainy/docs/features/channels/feishu.md +0 -186
- package/bundled/mainy/docs/features/channels/weixin.md +0 -106
- package/bundled/mainy/docs/integration-jetbrains.md +0 -81
- package/bundled/mainy/docs/integration-zed.md +0 -72
- package/chunks/agent-ZFZ4HJQC.js +0 -3
- package/chunks/agent-headless-KH2BKLP7.js +0 -3
- package/chunks/anthropicContentGenerator-IYZILRDW.js +0 -39
- package/chunks/chunk-25NCTG5H.js +0 -184
- package/chunks/chunk-2HQMJ2IU.js +0 -8
- package/chunks/chunk-3YLXGE6T.js +0 -8
- package/chunks/chunk-4F4DA5UI.js +0 -8
- package/chunks/chunk-4J6DC24J.js +0 -59
- package/chunks/chunk-4Q2SNBUH.js +0 -18
- package/chunks/chunk-6GBNB5Z2.js +0 -3
- package/chunks/chunk-G7R2XEEF.js +0 -7
- package/chunks/chunk-GHBKFIHC.js +0 -35
- package/chunks/chunk-GUFIMKF5.js +0 -65
- package/chunks/chunk-HWOQNYAO.js +0 -27
- package/chunks/chunk-LJR4RZZ2.js +0 -3
- package/chunks/chunk-NIQK6NX3.js +0 -37
- package/chunks/chunk-NVM7W7TG.js +0 -101
- package/chunks/chunk-O44XK65C.js +0 -8
- package/chunks/chunk-OA56BXPD.js +0 -3
- package/chunks/chunk-ODZOYHIC.js +0 -8
- package/chunks/chunk-PA6532AY.js +0 -6
- package/chunks/chunk-QFNFLE2I.js +0 -2625
- package/chunks/chunk-QH7736R5.js +0 -8
- package/chunks/chunk-QN6WSWMM.js +0 -9
- package/chunks/chunk-QN6Y6NPA.js +0 -3
- package/chunks/chunk-RK2AKQAX.js +0 -39
- package/chunks/chunk-SDTWBD62.js +0 -8
- package/chunks/chunk-SUH3UUWZ.js +0 -25
- package/chunks/chunk-U347OO7S.js +0 -9
- package/chunks/chunk-UIRBHC5X.js +0 -3
- package/chunks/chunk-VI74YQQO.js +0 -8
- package/chunks/chunk-VYZOOSMP.js +0 -30
- package/chunks/chunk-W5CGKUM4.js +0 -15
- package/chunks/chunk-WRQLIPXW.js +0 -113
- package/chunks/chunk-WVY2P6WH.js +0 -26
- package/chunks/chunk-WZ75OGYY.js +0 -14
- package/chunks/chunk-XCFLI3OC.js +0 -9
- package/chunks/chunk-XMZIY7XX.js +0 -13
- package/chunks/contextCommand-3GN5CAOK.js +0 -3
- package/chunks/dist-7UYRLSLE.js +0 -3
- package/chunks/dist-ME6647DQ.js +0 -195
- package/chunks/dist-P6SLWL5V.js +0 -42
- package/chunks/dist-VG3ZDJ2A.js +0 -28
- package/chunks/dist-YTCHM57U.js +0 -23
- package/chunks/edit-KX6V4PH3.js +0 -39
- package/chunks/exitPlanMode-G3QLIWJ4.js +0 -90
- package/chunks/fileFromPath-7UCWPD4W.js +0 -3
- package/chunks/geminiContentGenerator-EQEGOXOV.js +0 -8
- package/chunks/glob-KSBEWI3E.js +0 -22
- package/chunks/matildaAgentContentGenerator-OV4U6DJD.js +0 -8
- package/chunks/matildaContentGenerator-ETIAWE22.js +0 -8
- package/chunks/matildaOAuth2-WOY7ZS43.js +0 -3
- package/chunks/monitor-F4K5HOZX.js +0 -32
- package/chunks/notebook-edit-TL7CI5EA.js +0 -17
- package/chunks/openaiContentGenerator-MGASUFQL.js +0 -3
- package/chunks/read-file-6EAPS2KG.js +0 -3
- package/chunks/ripGrep-K6SFFUIE.js +0 -3
- package/chunks/scheduler-TKWPD4LP.js +0 -8
- package/chunks/shell-AZRK5GIO.js +0 -3
- package/chunks/src-SGI6VLOS.js +0 -3
- package/chunks/src-WZTRMETQ.js +0 -5
- package/chunks/task-create-EBJD55TB.js +0 -3
- package/chunks/task-list-5BGX4G5N.js +0 -9
- package/chunks/team-delete-5U3GBFKJ.js +0 -8
- package/chunks/todoWrite-YGG6AZ3A.js +0 -3
- package/chunks/tree-sitter-bash-XNCMPQBK.js +0 -3
- package/chunks/write-file-UAGVBZMC.js +0 -15
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Force strict mode and setup for ESM
|
|
2
|
+
"use strict";
|
|
3
|
+
import{a as C}from"./chunk-HDARIAVM.js";import{Ka as D,Re as L,Se as q,Vc as X,Ze as G,lf as R,mf as S,qf as K,rf as V,uf as Q,xf as Y}from"./chunk-SY6JRCN3.js";import"./chunk-M53RP3YP.js";import"./chunk-FCGYRGV4.js";import"./chunk-G4YMVWG4.js";import"./chunk-5YT4GCK7.js";import"./chunk-MTMU7JYZ.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-PYZNGIIR.js";import"./chunk-QJJTUDDA.js";import"./chunk-5NMK4Y7C.js";import"./chunk-47XR7IMP.js";import"./chunk-UVWZ44ZW.js";import"./chunk-QKYGQLWC.js";import"./chunk-LHDCAN7Z.js";import"./chunk-V6UPUMP3.js";import"./chunk-RNKDFE2S.js";import"./chunk-VLDZBRTL.js";import"./chunk-RYHMPK5G.js";import"./chunk-JIKQI4MZ.js";import"./chunk-RK4LPGBV.js";import"./chunk-75KP2FVD.js";import"./chunk-7ZODGQO6.js";import"./chunk-TISQNFB5.js";import"./chunk-IIQ5YERM.js";import"./chunk-DC7LAFZZ.js";import"./chunk-LZDHANXA.js";import"./chunk-U7V7APDV.js";import"./chunk-SR7ARGUY.js";import{Ob as j,Pa as H,ca as U,cd as B,ia as P,xc as A}from"./chunk-OEZS5R3S.js";import{w as z}from"./chunk-NOE4UNQN.js";import"./chunk-R34HYLL4.js";import"./chunk-EXNHJQCD.js";import{i as k,p as F,q as W}from"./chunk-2ONZZ46N.js";import{D as T,E as I,G as v,b as x,ba as $}from"./chunk-62AFAL4I.js";import"./chunk-36K4HBVM.js";import"./chunk-FWDMPRKU.js";import{b}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";b();import*as _ from"node:fs";import*as p from"node:path";b();var re={"\u2010":"-","\u2011":"-","\u2012":"-","\u2013":"-","\u2014":"-","\u2015":"-","\u2212":"-","\u2018":"'","\u2019":"'","\u201A":"'","\u201B":"'","\u201C":'"',"\u201D":'"',"\u201E":'"',"\u201F":'"',"\xA0":" ","\u2002":" ","\u2003":" ","\u2004":" ","\u2005":" ","\u2006":" ","\u2007":" ","\u2008":" ","\u2009":" ","\u200A":" ","\u202F":" ","\u205F":" ","\u3000":" "},ue=new RegExp(`[${Object.keys(re).join("")}]`,"g");function w(n){return n.replace(ue,t=>re[t])}var he=[n=>n,n=>n.trimEnd()];function pe(n){return w(n).trimEnd()}function J(n,t,i){if(t.length===0)return 0;if(t.length>n.length)return null;e:for(let e=0;e<=n.length-t.length;e++){for(let r=0;r<t.length;r++)if(i(n[e+r])!==i(t[r]))continue e;return e}return null}function me(n){let t=n.split(`
|
|
4
|
+
`),i=new Array(t.length+1),e=0;for(let r=0;r<t.length;r++)i[r]=e,e+=t[r].length,r<t.length-1&&(e+=1);return i[t.length]=n.length,{lines:t,offsets:i}}function Z(n,t,i,e,r,o){if(r===0)return o?`
|
|
5
|
+
`:"";let l=t[e]??0,s=e+r-1,f=(t[s]??0)+(i[s]?.length??0);if(o){let g=t[e+r];g!==void 0?f=g:n.endsWith(`
|
|
6
|
+
`)&&(f=n.length)}return n.slice(l,f)}function _e(n,t){let{lines:i,offsets:e}=me(n),r=t.split(`
|
|
7
|
+
`),o=t.endsWith(`
|
|
8
|
+
`);if(r.length===0)return null;let l=c=>{for(let f of he){let g=J(i,c,f);if(g!==null)return g}return J(i,c,pe)},s=l(r);if(s!==null)return{slice:Z(n,e,i,s,r.length-(o?1:0),o),removedTrailingFinalEmptyLine:!1};if(r.at(-1)===""){let c=r.slice(0,-1);if(c.length===0)return null;if(s=l(c),s!==null)return{slice:Z(n,e,i,s,c.length,!1),removedTrailingFinalEmptyLine:!0}}return null}function we(n,t){if(t==="")return null;let i=n.indexOf(t);if(i!==-1)return{slice:n.slice(i,i+t.length),removedTrailingFinalEmptyLine:!1};let e=w(n),r=w(t),o=e.indexOf(r);return o!==-1?{slice:n.slice(o,o+t.length),removedTrailingFinalEmptyLine:!1}:_e(n,t)}function Ee(n){return n.endsWith(`\r
|
|
9
|
+
`)?n.slice(0,-2):n.endsWith(`
|
|
10
|
+
`)||n.endsWith("\r")?n.slice(0,-1):n}function ye(n,t){return t?Ee(n):n}function oe(n,t,i){if(n===null||t==="")return{oldString:t,newString:i};let e=we(n,t);return e!==null?{oldString:e.slice,newString:ye(i,e.removedTrailingFinalEmptyLine)}:{oldString:t,newString:i}}function se(n,t,i){if(n===null||t===""||i!==""||t.endsWith(`
|
|
11
|
+
`))return t;let e=`${t}
|
|
12
|
+
`;return n.includes(e)?e:t}function le(n,t){if(t==="")return 0;let i=0,e=n.indexOf(t);for(;e!==-1;)i++,e=n.indexOf(t,e+t.length);return i}var Te=12,ee=300,Ce=2e6,be=4e6;function ae(n,t){if(n.length>Ce||t.trim()==="")return;let i=n.split(`
|
|
13
|
+
`);return xe(n,i,t)??Ne(i,t)}function te(n){return w(n).replace(/\s+/g," ").trim()}function xe(n,t,i){let e=te(i),r=te(n),o=r.indexOf(e);if(e===""||o===-1)return;let[l,s]=Se(n,[ne(r,o),ne(r,o+e.length-1)]);return[`The text is in the file, but with different whitespace (indentation, tabs or spaces, or line breaks), at lines ${l+1}-${s+1}:`,...ce(t,l,s),"Copy the whitespace exactly as shown (\u2192 is a tab, \xB7 is a leading or trailing space)."].join(`
|
|
14
|
+
`)}function ne(n,t){let i=0;for(let e=0;e<t;e++)n.charCodeAt(e)!==32&&i++;return i}function Se(n,t){let i=[],e=0,r=0;for(let o=0;o<n.length&&i.length<t.length;o++){let l=n.charCodeAt(o);if(l===10&&e++,!(l<128?l===32||l>=9&&l<=13:/\s/.test(n[o]))){for(;i.length<t.length&&t[i.length]===r;)i.push(e);r++}}return i}function Ne(n,t){let i=d=>w(d).trim(),e=t.trim().split(`
|
|
15
|
+
`).map(i),r=e.length;if(r>n.length||r*n.length>be)return;let o=new Map,l=e.map(d=>d===""?-1:(o.has(d)||o.set(d,o.size),o.get(d))),s=new Set(e.map(d=>d.length)),c=n.map(d=>{let h=d.trim();return s.has(h.length)?o.get(w(h))??-2:-2}),f=-1,g=0;for(let d=0;d+r<=c.length;d++){let h=0;for(let a=0;a<r;a++)c[d+a]===l[a]&&h++;h>g&&(g=h,f=d)}if(f===-1||g*2<r)return;let m=f+r-1;return[`The closest match is at lines ${f+1}-${m+1}, where ${g} of ${r} lines agree once leading and trailing whitespace is ignored:`,...ce(n,Math.max(0,f-1),Math.min(n.length-1,m+1)),"Copy the text exactly as shown (\u2192 is a tab, \xB7 is a leading or trailing space)."].join(`
|
|
16
|
+
`)}function ce(n,t,i){let e=Math.min(i,t+Te-1),r=[];for(let o=t;o<=e;o++)r.push(`${String(o+1).padStart(6)}|${Ie(n[o])}`);return e<i&&r.push(` \u2026| ${i-e} more lines`),r}function Ie(n){let t=n.length>ee,i=t?n.slice(0,ee):n,e=c=>c===" "||c===" ",r=0;for(;e(i[r]);)r++;let o=i.length;for(;!t&&o>r&&e(i[o-1]);)o--;let l=c=>c.replace(/\t/g,"\u2192").replace(/ /g,"\xB7"),s=l(i.slice(0,r))+i.slice(r,o).replace(/\t/g,"\u2192")+l(i.slice(o));return t?`${s}\u2026[${n.length-i.length} more characters not shown]`:s}var ie=4,Fe=1e3;function fe(n,t){let i=t.split(`
|
|
17
|
+
`),e=i.length;if(n===null)return{startLine:1,endLine:e,totalLines:e,content:t};if(n===t||!t)return null;let r=n.split(`
|
|
18
|
+
`),o=0,l=Math.min(r.length,i.length);for(;o<l&&r[o]===i[o];)o++;let s=r.length-1,c=i.length-1;for(;s>=o&&c>=o&&r[s]===i[c];)s--,c--;let f=o+1,g=c+1;if(g-f>Fe)return null;let m=Math.max(1,f-ie),d=Math.min(e,g+ie),h=i.slice(m-1,d);return{startLine:m,endLine:d,totalLines:e,content:h.join(`
|
|
19
|
+
`)}}var de=$("EDIT_PRIOR_READ");function ge(n,t,i,e){return e?i:n===null?t===""?i:"":t===""&&!e?n:G(n,t,i)}var Pe=["filePath","filepath","path","file","filename"],Ae=["oldString","oldText","old_text","previous_string","previousString"],De=["newString","newText","new_text","content"];function Le(n){if(!(typeof n.file_path=="string"&&n.file_path.trim()))for(let t of Pe){let i=n[t];if(typeof i=="string"&&i.trim()){n.file_path=i,delete n[t];break}}if(n.old_string===void 0||n.old_string===null){for(let t of Ae)if(n[t]!==void 0&&n[t]!==null){n.old_string=n[t],delete n[t];break}}if(n.new_string===void 0||n.new_string===null){for(let t of De)if(n[t]!==void 0&&n[t]!==null){n.new_string=n[t],delete n[t];break}}(n.old_string===void 0||n.old_string===null)&&typeof n.new_string=="string"&&typeof n.file_path=="string"&&n.file_path.trim()&&(n.old_string="",n.full_file_replace=!0)}var M=class{constructor(t,i){this.config=t;this.params=i}toolLocations(){return[{path:this.params.file_path}]}async calculateEdit(t){let i=t.replace_all??!1,e=null,r=await P(t.file_path),o=!1,l=t.new_string,s=t.old_string,c=0,f,g=!1,m="utf-8",d="lf";if(!this.config.getFileReadCacheDisabled()){let a=await S(this.config.getFileReadCache(),t.file_path,"editing");if(!a.ok)return{currentContent:null,newContent:"",occurrences:0,error:{display:a.displayMessage,raw:a.rawMessage,type:a.type},isNewFile:!1,encoding:"utf-8",bom:!1,lineEnding:"lf"}}if(r)try{let a=await this.config.getFileSystemService().readTextFile({path:t.file_path});a._meta?.bom!==void 0?g=a._meta.bom:g=a.content.length>0&&a.content.codePointAt(0)===65279,m=a._meta?.encoding||"utf-8",d=Q(a.content),e=a.content.replace(/\r\n/g,`
|
|
20
|
+
`),r=!0}catch(a){if(!x(a)||a.code!=="ENOENT")throw a;r=!1}if(r&&!this.config.getFileReadCacheDisabled()){let a=await S(this.config.getFileReadCache(),t.file_path,"editing",{expectExisting:!0});if(!a.ok)return de.warn("post-read TOCTOU rejection",{path:t.file_path,reason:a.type}),{currentContent:null,newContent:"",occurrences:0,error:{display:a.displayMessage,raw:a.rawMessage,type:a.type},isNewFile:!1,encoding:"utf-8",bom:!1,lineEnding:"lf"}}if(t.full_file_replace)o=!r,r&&e!==null?(c=1,s=e,l=t.new_string):r||(s="",l=t.new_string);else{let a=oe(e,s,l);if(s=a.oldString,l=a.newString,s===""&&!r)o=!0;else if(!r)f={display:"File not found. Cannot apply edit. Use an empty old_string to create a new file.",raw:`File not found: ${t.file_path}`,type:"file_not_found"};else if(e!==null)if(s=se(e,s,l),c=le(e,s),t.old_string==="")f={display:"Failed to edit. Attempted to create a file that already exists.",raw:`File already exists, cannot create: ${t.file_path}`,type:"attempt_to_create_existing_file"};else if(c===0){let E=ae(e,s);f={display:"Failed to edit, could not find the string to replace.",raw:`Failed to edit, 0 occurrences found for old_string in ${t.file_path}. No edits made. ${E??`The exact text in old_string was not found. Ensure you're not escaping content incorrectly and check whitespace, indentation, and context. Use ${A.Name} tool to verify.`}`,type:"edit_no_occurrence_found"}}else!i&&c>1?f={display:"Failed to edit because the text matches multiple locations. Provide more context or set replace_all to true.",raw:`Failed to edit. Found ${c} occurrences for old_string in ${t.file_path} but replace_all was not enabled.`,type:"edit_expected_occurrence_mismatch"}:s===l&&(f={display:"No changes to apply. The old_string and new_string are identical.",raw:`No changes to apply. The old_string and new_string are identical in file: ${t.file_path}`,type:"edit_no_change"});else f={display:"Failed to read content of file.",raw:`Failed to read content of existing file: ${t.file_path}`,type:"read_content_failure"}}let h=f?e??"":t.full_file_replace?t.new_string:ge(e,s,l,o);return!f&&r&&e===h&&(f={display:"No changes to apply. The new content is identical to the current content.",raw:`No changes to apply. The new content is identical to the current content in file: ${t.file_path}`,type:"edit_no_change"}),{currentContent:e,newContent:h,occurrences:c,error:f,isNewFile:o,bom:g,encoding:m,lineEnding:d}}async getDefaultPermission(){let t=this.config.getProjectRoot();return z(p.resolve(this.params.file_path),t)?"allow":"ask"}async getConfirmationDetails(t){let i=C(this.config,this.params.file_path);if(i)throw new R(i,"path_not_in_workspace");let e;try{e=await this.calculateEdit(this.params)}catch(s){if(t.aborted)throw s;let c=s instanceof Error?s.message:String(s);throw new Error(`Error preparing edit: ${c}`)}if(e.error)throw new R(e.error.raw,e.error.type);let r=p.basename(this.params.file_path),o=D(r,e.currentContent??"",e.newContent,"Current","Proposed",L);return{type:"edit",title:`Confirm Edit: ${T(I(this.params.file_path,this.config.getTargetDir()))}`,fileName:r,filePath:this.params.file_path,fileDiff:o,originalContent:e.currentContent,newContent:e.newContent,onConfirm:async s=>{s==="proceed_always"&&this.config.setApprovalMode("auto-edit")}}}getDescription(){let t=I(this.params.file_path,this.config.getTargetDir());return this.params.old_string===""?`Create ${T(t)}`:this.params.old_string===this.params.new_string?`No file changes to ${T(t)}`:T(t)}async execute(t){let i=C(this.config,this.params.file_path);if(i)return{llmContent:i,returnDisplay:i,error:{message:i,type:"path_not_in_workspace"}};let e;try{e=await this.calculateEdit(this.params)}catch(r){if(t.aborted)throw r;let o=r instanceof Error?r.message:String(r);return{llmContent:`Error preparing edit: ${o}`,returnDisplay:`Error preparing edit: ${o}`,error:{message:o,type:"edit_preparation_failure"}}}if(e.error)return{llmContent:e.error.raw,returnDisplay:`Error: ${e.error.display}`,error:{message:e.error.raw,type:e.error.type}};try{try{await this.config.getFileHistoryService().trackEdit(this.params.file_path)}catch{}if(!this.config.getFileReadCacheDisabled()){let u=await S(this.config.getFileReadCache(),this.params.file_path,"editing",{expectExisting:!e.isNewFile});if(!u.ok)return de.warn("pre-write TOCTOU rejection",{path:this.params.file_path,reason:u.type}),{llmContent:u.rawMessage,returnDisplay:`Error: ${u.displayMessage}`,error:{message:u.rawMessage,type:u.type}}}let r=C(this.config,this.params.file_path);if(r)return{llmContent:r,returnDisplay:r,error:{message:r,type:"path_not_in_workspace"}};this.ensureParentDirectoriesExist(this.params.file_path);let o=C(this.config,this.params.file_path);if(o)return{llmContent:o,returnDisplay:o,error:{message:o,type:"path_not_in_workspace"}};if(e.isNewFile){let u=this.config.getDefaultFileEncoding(),N=!1;u===K.UTF8_BOM?N=!0:u===void 0&&(N=V(this.params.file_path)),await this.config.getFileSystemService().writeTextFile({path:this.params.file_path,content:e.newContent,_meta:{bom:N}})}else await this.config.getFileSystemService().writeTextFile({path:this.params.file_path,content:e.newContent,_meta:{bom:e.bom,encoding:e.encoding,lineEnding:e.lineEnding}});this.params.modified_by_user||X.getInstance().recordEdit(this.params.file_path,e.currentContent,e.newContent);try{let u=_.statSync(this.params.file_path);this.config.getFileReadCache().recordWrite(this.params.file_path,u)}catch{}let l=p.basename(this.params.file_path),s=this.params.ai_proposed_content||e.newContent,c=q(l,e.currentContent??"",s,e.newContent),g={fileDiff:D(l,e.currentContent??"",e.newContent,"Current","Proposed",L),fileName:l,originalContent:e.currentContent,newContent:e.newContent,diffStat:c},m=U(this.params.file_path),d=H(this.params.file_path),h=p.extname(this.params.file_path),a=e.isNewFile?"create":"update";j(this.config,new B(O.Name,a,e.newContent.split(`
|
|
21
|
+
`).length,m,h,d));let E=[e.isNewFile?`Created new file: ${this.params.file_path} with provided content.`:`The file: ${this.params.file_path} has been updated.`],y=fe(e.currentContent,e.newContent);if(y){let u=`Showing lines ${y.startLine}-${y.endLine} of ${y.totalLines} from the edited file:
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
${y.content}`;E.push(u)}try{let u=await Y(this.config,this.params.file_path);u&&E.push(`
|
|
26
|
+
|
|
27
|
+
${u}`)}catch{}return{llmContent:E.join(" "),returnDisplay:g}}catch(r){let o=r instanceof Error?r.message:String(r);return{llmContent:`Error executing edit: ${o}`,returnDisplay:`Error writing file: ${o}`,error:{message:o,type:"file_write_failure"}}}}ensureParentDirectoriesExist(t){let i=p.dirname(t);_.existsSync(i)||_.mkdirSync(i,{recursive:!0})}},O=class n extends k{constructor(i){super(n.Name,W.EDIT,`Replaces text within a file. By default, replaces a single occurrence. Set \`replace_all\` to true when you intend to modify every instance of \`old_string\`. This tool requires providing significant context around the change to ensure precise targeting. Always use the ${A.Name} tool to examine the file's current content before attempting a text replacement.
|
|
28
|
+
|
|
29
|
+
The user has the ability to modify the \`new_string\` content. If modified, this will be stated in the response.
|
|
30
|
+
|
|
31
|
+
Expectation for required parameters:
|
|
32
|
+
1. \`file_path\` MUST be an absolute path; otherwise an error will be thrown.
|
|
33
|
+
2. \`old_string\` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.). For a full-file rewrite prefer \`${F.WRITE_FILE}\`; if you omit \`old_string\` and only pass \`new_string\`, the tool overwrites the entire file.
|
|
34
|
+
3. \`new_string\` MUST be the exact literal text to replace \`old_string\` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic.
|
|
35
|
+
4. NEVER escape \`old_string\` or \`new_string\`, that would break the exact literal text requirement.
|
|
36
|
+
**Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for \`old_string\`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.
|
|
37
|
+
**Multiple replacements:** Set \`replace_all\` to true when you want to replace every occurrence that matches \`old_string\`.
|
|
38
|
+
**New files:** Pass an empty \`old_string\` to create a file that does not exist yet.`,"edit",{properties:{file_path:{description:"The absolute path to the file to modify. Must start with '/'.",type:"string"},old_string:{description:"The exact literal text to replace, preferably unescaped. For single replacements (default), include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string is not the exact literal text (i.e. you escaped it) or does not match exactly, the tool will fail. Omit only when intentionally overwriting the entire file with new_string (prefer write_file for that). Empty string creates a new file when the path does not exist.",type:"string"},new_string:{description:"The exact literal text to replace `old_string` with, preferably unescaped. Provide the EXACT text. Ensure the resulting code is correct and idiomatic.",type:"string"},replace_all:{type:"boolean",description:"Replace all occurrences of old_string (default false)."}},required:["file_path","old_string","new_string"],type:"object"});this.config=i}static Name=F.EDIT;validateToolParams(i){return Le(i),super.validateToolParams(i)}validateToolParamValues(i){return i.file_path=v(i.file_path.trim()),i.file_path?p.isAbsolute(i.file_path)?typeof i.new_string!="string"?"The 'new_string' parameter must be a string.":null:`File path must be absolute: ${i.file_path}`:"The 'file_path' parameter must be non-empty."}createInvocation(i){return new M(this.config,i)}toAutoClassifierInput(i){let e=i.old_string??"",r=i.new_string??"";return{file_path:i.file_path,old_string_preview:e.slice(0,300),new_string_preview:r.slice(0,300),old_string_truncated:e.length>300,new_string_truncated:r.length>300,lines_changed:(r.match(/\n/g)?.length??0)-(e.match(/\n/g)?.length??0)}}getModifyContext(i){return{getFilePath:e=>e.file_path,getCurrentContent:async e=>{if(await P(e.file_path))try{let{content:o}=await this.config.getFileSystemService().readTextFile({path:e.file_path});return o}catch(o){if(!x(o)||o.code!=="ENOENT")throw o;return""}else return""},getProposedContent:async e=>{if(e.full_file_replace)return e.new_string;if(_.existsSync(e.file_path))try{let{content:r}=await this.config.getFileSystemService().readTextFile({path:e.file_path});return ge(r,e.old_string,e.new_string,e.old_string===""&&r==="")}catch(r){if(!x(r)||r.code!=="ENOENT")throw r;return""}else return""},createUpdatedParams:(e,r,o)=>({...o,ai_proposed_content:e,old_string:e,new_string:r,modified_by_user:!0})}}};export{O as EditTool,ge as applyReplacement,Le as normalizeEditToolParams};
|
|
39
|
+
/**
|
|
40
|
+
* @license
|
|
41
|
+
* Copyright 2025 Google LLC
|
|
42
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
43
|
+
*/
|