@maincode-ai/matilda-code 0.20.8 → 0.20.9
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/chunks/{agent-3E4OSF2E.js → agent-MR6HBCNC.js} +1 -1
- package/chunks/{agent-headless-22O7UBQY.js → agent-headless-Y5AQHZHB.js} +1 -1
- package/chunks/anthropicContentGenerator-I3ANKUSE.js +39 -0
- package/chunks/{chunk-2FYDKSRH.js → chunk-2D5W3WW7.js} +498 -494
- package/chunks/{chunk-LYNJBU6H.js → chunk-2JIJ6PFL.js} +1 -1
- package/chunks/chunk-7VBRP4XQ.js +18 -0
- package/chunks/chunk-7VE3KGS4.js +8 -0
- package/chunks/{chunk-WLZF5HVE.js → chunk-FIUFMVRX.js} +1 -1
- package/chunks/{chunk-IRT3RU6X.js → chunk-JFICDNCB.js} +1 -1
- package/chunks/{chunk-FXQULW2K.js → chunk-NPLAJOCA.js} +2 -2
- package/chunks/chunk-OVZKSZIR.js +101 -0
- package/chunks/{computer-use-KS6XCSQU.js → computer-use-5NE6OER4.js} +1 -1
- package/chunks/{contextCommand-TNTORBHV.js → contextCommand-TQW3E3L6.js} +1 -1
- package/chunks/edit-PMMM4Z57.js +39 -0
- package/chunks/{enter-worktree-NF7MA5QG.js → enter-worktree-KOLSAE3N.js} +1 -1
- package/chunks/{enterPlanMode-KPWSPCF2.js → enterPlanMode-WIEHROJ4.js} +1 -1
- package/chunks/{exit-worktree-XWVGI4HA.js → exit-worktree-5GFNCQCU.js} +1 -1
- package/chunks/{exitPlanMode-OS2BGGZK.js → exitPlanMode-4SD3GHP7.js} +1 -1
- package/chunks/{geminiContentGenerator-WF3CO3CH.js → geminiContentGenerator-GSNXCP36.js} +1 -1
- package/chunks/{glob-Y3XNORZ3.js → glob-6NLJB2GI.js} +1 -1
- package/chunks/{grep-NA3SFYUM.js → grep-7TT7XXG2.js} +1 -1
- package/chunks/matildaAgentContentGenerator-BZXWJKJ6.js +32 -0
- package/chunks/{matildaContentGenerator-4BGLGEWH.js → matildaContentGenerator-BBG5MEI5.js} +1 -1
- package/chunks/{monitor-R3FCMPC6.js → monitor-7Z2SKQOD.js} +1 -1
- package/chunks/{notebook-edit-4U5TTZFZ.js → notebook-edit-ZWC6PWD3.js} +1 -1
- package/chunks/{openaiContentGenerator-DMT4SZML.js → openaiContentGenerator-JACPHIUG.js} +1 -1
- package/chunks/{ripGrep-43PC37KD.js → ripGrep-3EJOL3QF.js} +1 -1
- package/chunks/{scheduler-SRRKOB5L.js → scheduler-6GFBYAJV.js} +1 -1
- package/chunks/{serve-YOJETSOR.js → serve-HI33OSTP.js} +1 -1
- package/chunks/{shell-N7HJYZVF.js → shell-6VEGUV5J.js} +1 -1
- package/chunks/{skill-YXHHDMLR.js → skill-HOXYLSX3.js} +1 -1
- package/chunks/src-3M4GZHJB.js +3 -0
- package/chunks/{team-create-EOV7F7EH.js → team-create-PWPR4OKM.js} +1 -1
- package/chunks/{workflow-Y5CYLQU7.js → workflow-UMB2MXXJ.js} +2 -2
- package/chunks/{write-file-ECUYLTFL.js → write-file-REUJ4LGI.js} +1 -1
- package/cli.js +399 -399
- package/package.json +2 -2
- package/chunks/anthropicContentGenerator-ATLOKYPR.js +0 -39
- package/chunks/chunk-2XZIKUB6.js +0 -18
- package/chunks/chunk-6V6R7SFP.js +0 -101
- package/chunks/chunk-ISW2QC5B.js +0 -8
- package/chunks/edit-5OWDNHI4.js +0 -38
- package/chunks/matildaAgentContentGenerator-4B4MMKWH.js +0 -32
- package/chunks/src-55PQXZJ3.js +0 -3
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// Force strict mode and setup for ESM
|
|
2
|
+
"use strict";
|
|
3
|
+
import{a as L,d as Ct}from"./chunk-4F4DA5UI.js";import{a as Tt,b as Fe,c as At,d as Mt}from"./chunk-DC7LAFZZ.js";import{a as Y}from"./chunk-7VBRP4XQ.js";import{a as ft,b as ht,e as Ke,n as yt,q as J,r as St}from"./chunk-XYA3SFGC.js";import{b as A,e as K}from"./chunk-4J6DC24J.js";import{a as mt}from"./chunk-XJDC3ZQZ.js";import{Jc as ut,Kc as pt,Mb as lt,Mc as gt,Pb as dt,Rb as ct,Sa as F,Wa as Ue,Xa as De,Ya as Ge,eb as Ne,f as P,fb as $,tb as de,ub as ce}from"./chunk-CFBZKYFB.js";import{b as vt}from"./chunk-3YLXGE6T.js";import{L as st,Y as b,c as at,d as B,e as W}from"./chunk-QWBNNEV2.js";import{h as x,l as Le,n as sn}from"./chunk-FWDMPRKU.js";import{b as h}from"./chunk-GZPNIYVZ.js";h();h();var j=b("TAGGED_THINKING_PARSER"),X=["<think>","<thinking>"],Z=["</think>","</thinking>"],ln=Math.max(...X.map(t=>t.length),...Z.map(t=>t.length));function q(t,e,n){e&&t.push(n==="thought"?{text:e,thought:!0}:{text:e})}function ue(t,e,n){let o=t.length-e;return o<=0||o>ln?!1:n.some(i=>i.startsWith(t.slice(e,e+o)))}function pe(t,e,n){return n.find(o=>t.startsWith(o,e))}function je(t){if(!t)return t;let e=t;return e=e.replace(/<\/?think(?:ing)?>/gi,""),e=e.replace(/[A-Za-z]*long[_-]?message[_-]?THINKING/gi,""),e=e.replace(/\bM?long[_-]?message\b/gi,""),e=e.replace(/(^|[\s>])THINKING(?=[\sA-Z<]|$)/g,"$1"),e=e.replace(/[ \t]{2,}/g," "),e=e.replace(/^\s+/,""),e}function _t(t){let e=[];for(let n of t){if(n.thought===!0||typeof n.text!="string"){e.push(n);continue}let o=je(n.text);o&&e.push({text:o})}return e}var $e=class{mode="text";buffer="";parse(e,n=!1){this.buffer+=e;let o=this.buffer.toLowerCase(),i=[],r="",a=0;for(;a<this.buffer.length;){if(this.mode==="text"){let s=pe(o,a,X);if(s){j.debug(`taggedThinking: detected open tag "${s}" at offset ${a}`),q(i,r,this.mode),r="",this.mode="thought",a+=s.length;continue}let l=pe(o,a,Z);if(l){j.debug(`taggedThinking: dropping orphan close tag "${l}" at offset ${a}`),q(i,r,this.mode),r="",a+=l.length;continue}if(!n&&(ue(o,a,X)||ue(o,a,Z)))break}else{let s=pe(o,a,Z);if(s){j.debug(`taggedThinking: detected close tag "${s}" at offset ${a}`),q(i,r,this.mode),r="",this.mode="text",a+=s.length;continue}let l=pe(o,a,X);if(l){a+=l.length;continue}if(!n&&(ue(o,a,Z)||ue(o,a,X)))break}r+=this.buffer[a],a+=1}return a<this.buffer.length?(q(i,r,this.mode),this.buffer=this.buffer.slice(a),j.debug(`taggedThinking: emitted ${i.length} part(s), buffered ${this.buffer.length} char(s)`),_t(i)):(this.buffer="",this.mode==="thought"&&r&&j.warn(`taggedThinking: flushing ${r.length} chars of unclosed thought on stream end`),q(i,r,this.mode),j.debug(`taggedThinking: emitted ${i.length} part(s), flush complete`),_t(i))}};function It(t){return new $e().parse(t,!0)}var w=b("CONVERTER"),Et="(attached media from previous tool call)";function Ot(t,e={}){let n=t.prompt_tokens||0,o=t.completion_tokens||0,i=t.total_tokens||0,r=t.prompt_tokens_details,a=r?.cached_tokens??r?.cachedTokens??t.cached_tokens??t.prompt_cache_hit_tokens??t.cache_read_input_tokens??0,s=t.completion_tokens_details,l=s?.reasoning_tokens??s?.reasoningTokens??t.reasoning_tokens??0,c=Math.max(0,e.estimatedReasoningTokens??0),u=Math.max(0,e.estimatedContentTokens??0),p=l>0?l:c,d=o;p>0&&(o>=p?d=o:d=o+p),(u>0||c>0)&&(d=Math.max(d,u+(l>0?0:c),u+p)),i>n&&(n>0||o>0||p>0)&&(d=Math.max(d,i-n)),p===0&&c>0&&(p=c),p>d&&(p=d);let m=t.usage_is_incomplete===!0||o>0&&n===0||i>0&&n===0&&o===0,f=n,g=i;return(g===0&&(f>0||d>0)||g>0&&f>0&&g<f+d)&&(g=f+d),{promptTokenCount:f,candidatesTokenCount:d,totalTokenCount:g,cachedContentTokenCount:a,thoughtsTokenCount:p,...m?{usageIsIncomplete:!0}:{}}}var dn=64,bt=1024;function kt(t,e){if(t.length===0)return"";if(e.emittedText.length===0)return e.emittedText=t,e.emittedLength=t.length,t;if(e.cumulativeMode){if(t.startsWith(e.emittedText)){let n=t.slice(e.emittedText.length);return e.emittedText=t,e.emittedLength=t.length,n}return e.emittedText.startsWith(t)?(w.debug(`normalizeStreamingTextDelta: cumulative rewind suppression (emitted=${e.emittedText.length}b, chunk=${t.length}b)`),""):(w.debug("normalizeStreamingTextDelta: exiting cumulative mode (chunk does not match prior accumulated text)"),e.cumulativeMode=!1,e.emittedText=t,e.emittedLength+=t.length,t)}if(t.length>e.emittedText.length&&t.startsWith(e.emittedText)){let n=e.emittedText.length,i=n>=bt&&e.emittedLength>n?e.emittedLength:n;if(t.length>i){let r=t.slice(i);return e.emittedText=t,e.emittedLength=t.length,e.cumulativeMode=!0,w.debug(`normalizeStreamingTextDelta: entered cumulative mode (prefix overlap, baseline=${n}b sliceFrom=${i}b -> curr=${t.length}b)`),r}}return t===e.emittedText?t.length>=dn?(e.cumulativeMode=!0,w.debug(`normalizeStreamingTextDelta: entered cumulative mode (exact repeat, ${t.length}b)`),""):(e.emittedLength+=t.length,t):(e.emittedText.length<bt&&(e.emittedText+=t),e.emittedLength+=t.length,t)}function Lt(t){if(!t||typeof t!="object")return t;let e=JSON.parse(JSON.stringify(t)),n=o=>{if(typeof o!="object"||o===null)return o;if(Array.isArray(o))return o.map(n);let i={};for(let[r,a]of Object.entries(o))if(r==="type"&&typeof a=="string"){let s=a.toLowerCase();s==="integer"?i[r]="integer":s==="number"?i[r]="number":i[r]=s}else r==="minimum"||r==="maximum"||r==="multipleOf"?typeof a=="string"&&!isNaN(Number(a))?i[r]=Number(a):i[r]=a:r==="minLength"||r==="maxLength"||r==="minItems"||r==="maxItems"?typeof a=="string"&&!isNaN(Number(a))?i[r]=parseInt(a,10):i[r]=a:typeof a=="object"?i[r]=n(a):i[r]=a;return i};return n(e)}async function cn(t,e="auto"){let n=[];for(let o of t){let i;if("tool"in o?i=await o.tool():i=o,i.functionDeclarations){for(let r of i.functionDeclarations)if(r.name&&r.description){let a;r.parametersJsonSchema?a={...r.parametersJsonSchema}:r.parameters&&(a=Lt(r.parameters)),a&&(a=ht(a,e)),n.push({type:"function",function:{name:r.name,description:r.description,parameters:a}})}}}return n}function un(t,e,n={cleanOrphanToolCalls:!0}){let o=[];return gn(t,o),fn(t.contents,o,e),o=Pt(o),n.cleanOrphanToolCalls&&(o=vn(o),o=Pt(o)),o}function pn(t,e){let n=t.candidates?.[0],o=n?.content?.parts||[],i=[],r=[],a=[],s=0;for(let g of o)typeof g=="string"?r.push(g):"text"in g&&g.text?"thought"in g&&g.thought?i.push(g.text):r.push(g.text):"functionCall"in g&&g.functionCall&&(a.push({id:g.functionCall.id||`call_${s}`,type:"function",function:{name:g.functionCall.name||"",arguments:JSON.stringify(g.functionCall.args||{})}}),s+=1);let l={role:"assistant",content:r.join("")||null,refusal:null},c=i.join("");c&&(l.reasoning_content=c),a.length>0&&(l.tool_calls=a);let u=Sn(n?.finishReason),p=t.usageMetadata,d={prompt_tokens:p?.promptTokenCount||0,completion_tokens:p?.candidatesTokenCount||0,total_tokens:p?.totalTokenCount||0};p?.cachedContentTokenCount!==void 0&&(d.prompt_tokens_details={cached_tokens:p.cachedContentTokenCount});let m=t.createTime?Number(t.createTime):Date.now(),f=Number.isFinite(m)?Math.floor(m/1e3):Math.floor(Date.now()/1e3);return{id:t.responseId||`gemini-${Date.now()}`,object:"chat.completion",created:f,model:t.modelVersion||e.model,choices:[{index:0,message:l,finish_reason:u,logprobs:null}],usage:d}}function gn(t,e){if(!t.config?.systemInstruction)return;let n=Dt(t.config.systemInstruction);n&&e.push({role:"system",content:n})}function fn(t,e,n){if(Array.isArray(t))for(let o of t)xt(o,e,n);else t&&xt(t,e,n)}function xt(t,e,n){if(typeof t=="string"){e.push({role:"user",content:t});return}if(!yn(t))return;let o=t.parts||[],i=t.role==="model"?"assistant":"user",r=[],a=[],s=[],l=0,c=new Set,u=new Set,p=[];for(let d of o){if(typeof d=="string"){r.push({type:"text",text:d});continue}"text"in d&&"thought"in d&&d.thought&&i==="assistant"&&d.text&&a.push(d.text),"text"in d&&d.text&&!("thought"in d&&d.thought)&&r.push({type:"text",text:d.text});let m=Ut(d,n);if(m&&i==="user"&&r.push(m),"functionCall"in d&&d.functionCall&&i==="assistant"){let f=d.functionCall.id;if(f){if(c.has(f)){w.debug(`Dropping duplicate functionCall id=${f} while converting content`);continue}c.add(f)}s.push({id:f||`call_${l}`,type:"function",function:{name:d.functionCall.name||"",arguments:JSON.stringify(d.functionCall.args||{})}}),l+=1}if(d.functionResponse&&i==="user"){let f=d.functionResponse.id;if(f){if(u.has(f))continue;u.add(f)}let g=mn(d.functionResponse,n);if(g){if(n.splitToolMedia&&Array.isArray(g.content)){let C=[],y=[];for(let T of g.content)T&&(T.type==="image_url"||T.type==="input_audio"||T.type==="video_url"||T.type==="file")?C.push(T):T&&T.type==="text"&&y.push(T);if(C.length>0){let T=y.map(S=>S.text).join(`
|
|
4
|
+
`);g.content=T||"[media attached in following user message]",p.push(...C)}}e.push(g)}}}if(p.length>0&&e.push({role:"user",content:[{type:"text",text:Et},...p]}),i==="assistant"){if(r.length===0&&s.length===0&&a.length===0)return;let m={role:"assistant",content:r.filter(g=>g.type==="text").map(g=>g.text).join("")||(a.length>0?"":null)};s.length>0&&(m.tool_calls=s);let f=a.join("");f&&(m.reasoning_content=f),e.push(m);return}r.length>0&&e.push({role:"user",content:r})}function hn(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="object"){let e=t,n=e.output;if(typeof n=="string")return n;let o=e.error;if(typeof o=="string")return o}try{return JSON.stringify(t)??String(t)}catch{return String(t)}}function mn(t,e){let n=hn(t.response),o=[];n&&o.push({type:"text",text:n});for(let i of t.parts||[]){if("text"in i&&typeof i.text=="string"){i.text.length>0&&o.push({type:"text",text:i.text});continue}let r=Ut(i,e);r&&o.push(r)}return o.length===0?{role:"tool",tool_call_id:t.id||"",content:""}:{role:"tool",tool_call_id:t.id||"",content:o}}function Ut(t,e){let{modalities:n}=e;if(t.inlineData?.mimeType&&t.inlineData?.data){let o=t.inlineData.mimeType,i=wt(o),r=t.inlineData.displayName||o;if(i==="image")return n.image?{type:"image_url",image_url:{url:`data:${o};base64,${t.inlineData.data}`}}:U("image",r,e);if(o==="application/pdf")return n.pdf?{type:"file",file:{filename:t.inlineData.displayName||"document.pdf",file_data:`data:${o};base64,${t.inlineData.data}`}}:U("pdf",r,e);if(i==="audio"){if(!n.audio)return U("audio",r,e);let a=Cn(o);if(a)return{type:"input_audio",input_audio:{data:`data:${o};base64,${t.inlineData.data}`,format:a}}}return i==="video"?n.video?{type:"video_url",video_url:{url:`data:${o};base64,${t.inlineData.data}`}}:U("video",r,e):{type:"text",text:`Unsupported inline media type: ${o} (${r}).`}}if(t.fileData?.mimeType&&t.fileData?.fileUri){let o=t.fileData.displayName||"file",i=t.fileData.fileUri,r=t.fileData.mimeType,a=wt(r);if(a==="image")return n.image?{type:"image_url",image_url:{url:i}}:U("image",o,e);if(r==="application/pdf")return n.pdf?{type:"file",file:{filename:o,file_data:i}}:U("pdf",o,e);if(a==="video")return n.video?{type:"video_url",video_url:{url:i}}:U("video",o,e);let s=t.fileData.displayName?` (${t.fileData.displayName})`:"";return{type:"text",text:`Unsupported file media type: ${r}${s}.`}}return null}function U(t,e,n){w.warn(`Model '${n.model}' does not support ${t} input. Replacing with text placeholder: ${e}`);let o;return t==="pdf"?o=`This model does not support PDF input directly. The read_file tool cannot extract PDF content either. To extract text from the PDF file, try using skills if applicable, or guide user to install pdf skill by running this slash command:
|
|
5
|
+
/extensions install https://github.com/anthropics/skills:document-skills`:o=`This model does not support ${t} input. The read_file tool cannot process this type of file either. To handle this file, try using skills if applicable, or any tools installed at system wide, or let the user know you cannot process this type of file.`,{type:"text",text:`[Unsupported ${t} file: "${e}". ${o}]`}}function wt(t){return t.startsWith("image/")?"image":t.startsWith("audio/")?"audio":t.startsWith("video/")?"video":"file"}function Cn(t){return t.includes("wav")?"wav":t.includes("mp3")||t.includes("mpeg")?"mp3":null}function yn(t){return typeof t=="object"&&t!==null&&"role"in t&&"parts"in t&&Array.isArray(t.parts)}function Dt(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>Dt(e)).filter(Boolean).join(`
|
|
6
|
+
`):typeof t=="object"&&t!==null&&"parts"in t&&t.parts?.map(n=>typeof n=="string"?n:"text"in n&&n.text||"").filter(Boolean).join(`
|
|
7
|
+
`)||""}function He(t,e,n=!0){if(e.taggedThinkingParser)return e.taggedThinkingParser.parse(t,n);if(e.responseParsingOptions?.taggedThinkingTags)return It(t);if(!t)return[];let o=je(t);return o?[{text:o}]:[]}function Tn(t,e){let n=t.choices?.[0],o=new K;if(n){let i=[];if(!e.responseParsingOptions?.taggedThinkingTags){let r=n.message.reasoning_content??n.message.reasoning;r&&i.push({text:r,thought:!0})}if(n.message.content&&i.push(...He(n.message.content,e)),n.message.tool_calls){for(let r of n.message.tool_calls)if(r.function){let a={};r.function.arguments&&(a=ft(r.function.arguments,{})),i.push({functionCall:{id:r.id,name:r.function.name,args:a}})}}o.candidates=[{content:{parts:i,role:"model"},finishReason:Gt(n.finish_reason||"stop"),index:0,safetyRatings:[]}]}else o.candidates=[];if(o.responseId=t.id,o.createTime=t.created?t.created.toString():new Date().getTime().toString(),o.modelVersion=e.model,o.promptFeedback={safetyRatings:[]},t.usage){let i=t.choices?.[0]?.message,r=i?.reasoning_content??i?.reasoning??"",a=typeof i?.content=="string"?i.content:"";o.usageMetadata=Ot(t.usage,{estimatedReasoningTokens:Y(r.length),estimatedContentTokens:Y(a.length)})}return o}function An(t,e){let n=t.choices?.[0],o=new K,i=e.toolCallParser;if(!i)throw new Error("convertOpenAIChunkToGemini requires requestContext.toolCallParser \u2014 attach a fresh StreamingToolCallParser at stream start.");if(n){let r=[];if(!e.responseParsingOptions?.taggedThinkingTags){let c=n.delta?.reasoning_content??n.delta?.reasoning;if(c){let u=kt(c,e.reasoningDeltaState??={emittedText:"",emittedLength:0,cumulativeMode:!1});u&&r.push({text:u,thought:!0})}}if(typeof n.delta?.content=="string"){let c=kt(n.delta.content,e.textDeltaState??={emittedText:"",emittedLength:0,cumulativeMode:!1});(c||n.finish_reason)&&r.push(...He(c,e,!!n.finish_reason))}else n.finish_reason&&r.push(...He("",e,!0));if(n.delta?.tool_calls)for(let c of n.delta.tool_calls){let u=c.index??0;c.function?.arguments?i.addChunk(u,c.function.arguments,c.id,c.function.name):i.addChunk(u,"",c.id,c.function?.name)}let a=!1;if(n.finish_reason){a=i.hasIncompleteToolCalls();let c=i.getCompletedToolCalls();for(let u of c)u.name&&r.push({functionCall:{id:u.id||`call_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,name:u.name,args:u.args}})}let s=a&&n.finish_reason!=="length"?"length":n.finish_reason,l={content:{parts:r,role:"model"},index:0,safetyRatings:[]};s&&(l.finishReason=Gt(s)),o.candidates=[l]}else o.candidates=[];return o.responseId=t.id,o.createTime=t.created?t.created.toString():new Date().getTime().toString(),o.modelVersion=e.model,o.promptFeedback={safetyRatings:[]},t.usage&&(o.usageMetadata=Ot(t.usage,Mn(e))),o}function Mn(t){return{estimatedReasoningTokens:Y(t.reasoningDeltaState?.emittedLength??0),estimatedContentTokens:Y(t.textDeltaState?.emittedLength??0)}}function Gt(t){return t?{stop:A.STOP,length:A.MAX_TOKENS,content_filter:A.SAFETY,function_call:A.STOP,tool_calls:A.STOP}[t]||A.FINISH_REASON_UNSPECIFIED:A.FINISH_REASON_UNSPECIFIED}function Sn(t){if(!t)return"stop";switch(t){case A.STOP:return"stop";case A.MAX_TOKENS:return"length";case A.SAFETY:case A.RECITATION:case A.BLOCKLIST:case A.PROHIBITED_CONTENT:case A.SPII:case A.IMAGE_SAFETY:case A.IMAGE_RECITATION:case A.IMAGE_PROHIBITED_CONTENT:case A.IMAGE_OTHER:return"content_filter";case A.NO_IMAGE:return"stop";default:return"stop"}}function ze(t){return t.role==="assistant"&&"tool_calls"in t&&Array.isArray(t.tool_calls)&&t.tool_calls.length>0}function Rt(t){if(t.role!=="user"||!("content"in t)||!Array.isArray(t.content))return!1;let e=t.content[0];return e?.type==="text"&&e.text===Et}function vn(t){let e=[],n=new Map,o=new Map,i=new Map,r=new Set,a=new Set;for(let s=0;s<t.length;s+=1){let l=t[s];if(ze(l)){let c=[],u=new Set;for(let C of l.tool_calls){let y=C.id;!y||a.has(y)||u.has(y)||(u.add(y),c.push(C))}let p=new Set,d=[],m=[],f=!1;for(let C=s+1;C<t.length;C+=1){let y=t[C];if(y.role==="tool"&&"tool_call_id"in y){if(!y.tool_call_id){f=!1;continue}u.has(y.tool_call_id)&&!p.has(y.tool_call_id)?(p.add(y.tool_call_id),d.push(C),f=!0):f=!1;continue}if(Rt(y)){f&&m.push(C);continue}if(!(y.role==="assistant"&&!ze(y)))break}let g=c.filter(C=>p.has(C.id));for(let C of g)a.add(C.id);n.set(s,g),o.set(s,d),i.set(s,m)}}for(let s=0;s<t.length;s+=1){if(r.has(s))continue;let l=t[s];if(ze(l)){let c=l.reasoning_content,u=n.get(s)??[];if(u.length>0){let p={...l};p.tool_calls=u,e.push(p);for(let d of o.get(s)??[]){let m=t[d];m&&(e.push(m),r.add(d))}for(let d of i.get(s)??[]){let m=t[d];m&&(e.push(m),r.add(d))}}else if(typeof l.content=="string"&&l.content.trim()||c){let p={...l};delete p.tool_calls,e.push(p)}else w.debug(`cleanOrphanedToolCalls: dropping assistant with ${l.tool_calls.length} orphaned tool call(s) and no text/reasoning content`)}else l.role==="tool"&&"tool_call_id"in l?w.debug(`cleanOrphanedToolCalls: dropping orphaned tool response ${l.tool_call_id||"<empty>"}`):Rt(l)?w.debug("cleanOrphanedToolCalls: dropping orphaned split tool media message"):e.push(l)}return e}function Pt(t){let e=[];for(let n of t){if(n.role==="assistant"&&e.length>0){let o=e[e.length-1];if(o.role==="assistant"){let i="tool_calls"in o?o.tool_calls||[]:[],r="tool_calls"in n?n.tool_calls||[]:[],a=o.content,s=n.content,l=Array.isArray(a)||Array.isArray(s),c;if(l){let p=Array.isArray(a)?a:typeof a=="string"&&a?[{type:"text",text:a}]:[],d=Array.isArray(s)?s:typeof s=="string"&&s?[{type:"text",text:s}]:[];c=[...p,...d]}else c=[typeof a=="string"?a:"",typeof s=="string"?s:""].filter(Boolean).join("")||null;let u=[...i,...r];o.content=c||null,u.length>0&&(o.tool_calls=u);continue}}e.push(n)}return e}var ge={convertGeminiToolParametersToOpenAI:Lt,convertGeminiToolsToOpenAI:cn,convertGeminiRequestToOpenAI:un,convertGeminiResponseToOpenAI:pn,convertOpenAIResponseToGemini:Tn,convertOpenAIChunkToGemini:An};h();import*as _ from"node:path";import{promises as me}from"node:fs";h();h();import _n from"crypto";var he=new Uint8Array(256),fe=he.length;function Ve(){return fe>he.length-16&&(_n.randomFillSync(he),fe=0),he.slice(fe,fe+=16)}h();var M=[];for(let t=0;t<256;++t)M.push((t+256).toString(16).slice(1));function Nt(t,e=0){return M[t[e+0]]+M[t[e+1]]+M[t[e+2]]+M[t[e+3]]+"-"+M[t[e+4]]+M[t[e+5]]+"-"+M[t[e+6]]+M[t[e+7]]+"-"+M[t[e+8]]+M[t[e+9]]+"-"+M[t[e+10]]+M[t[e+11]]+M[t[e+12]]+M[t[e+13]]+M[t[e+14]]+M[t[e+15]]}h();h();import In from"crypto";var Be={randomUUID:In.randomUUID};function bn(t,e,n){if(Be.randomUUID&&!e&&!t)return Be.randomUUID();t=t||{};let o=t.random||(t.rng||Ve)();if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){n=n||0;for(let i=0;i<16;++i)e[n+i]=o[i];return e}return Nt(o)}var We=bn;import*as E from"os";var Ce=b("OPENAI_LOGGER"),kn="########",xn=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function wn(t,e){let n=e||process.cwd();if(!t)return _.join(n,"logs","openai");let o=t;return t==="~"||t.startsWith("~/")?o=_.join(E.homedir(),t.slice(1)):_.isAbsolute(t)||(o=_.resolve(n,t)),_.normalize(o)}function Kt(t){return t&&t.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||void 0}function Rn(t){let e=t.split("#");if(e.length!==3)return;let[,n,o]=e;if(!(!n||!o||!/^\d+$/.test(o)))return`subagent-${n}`}function Pn(t){if(t)return F(t)?Kt(t):Kt(Rn(t))}function En(t){if(!t)return;let e=t.indexOf(kn);if(e>0)return t.slice(0,e);if(xn.test(t))return t;let n=t.split("#");if(n.length>=3&&n[0])return n[0]}function On(t){let e=t?.trim(),n=En(e);return!e&&!n?null:{...e?{promptId:e}:{},...n?{sessionId:n}:{}}}var Q=class{logDir;initialized=!1;constructor(e,n){this.logDir=wn(e,n)}async initialize(){if(!this.initialized)try{await me.mkdir(this.logDir,{recursive:!0}),this.initialized=!0}catch(e){throw Ce.error("Failed to initialize OpenAI logger:",e),new Error(`Failed to initialize OpenAI logger: ${e}`)}}async logInteraction(e,n,o,i){this.initialized||await this.initialize();let r=new Date().toISOString().replace(/:/g,"-"),a=We().slice(0,8),s=Pn(i),l=s?`openai-${r}-${a}-${s}.json`:`openai-${r}-${a}.json`,c=_.join(this.logDir,l),u={timestamp:new Date().toISOString(),request:e,response:n||null,error:o?{message:o.message,stack:o.stack}:null,context:On(i),system:{hostname:E.hostname(),platform:E.platform(),release:E.release(),nodeVersion:process.version}};try{return await me.writeFile(c,JSON.stringify(u,null,2),"utf-8"),c}catch(p){throw Ce.error("Failed to write OpenAI log file:",p),new Error(`Failed to write OpenAI log file: ${p}`)}}async getLogFiles(e){this.initialized||await this.initialize();try{let o=(await me.readdir(this.logDir)).filter(i=>i.startsWith("openai-")&&i.endsWith(".json")).map(i=>_.join(this.logDir,i)).sort().reverse();return e?o.slice(0,e):o}catch(n){return n.code==="ENOENT"?[]:(Ce.error("Failed to read OpenAI log directory:",n),[])}}async readLogFile(e){try{let n=await me.readFile(e,"utf-8");return JSON.parse(n)}catch(n){throw Ce.error(`Failed to read log file ${e}:`,n),new Error(`Failed to read log file: ${n}`)}}},ni=new Q;h();var ye="$runtime|";function ri(t){let e=t;for(;e.startsWith(ye);){let n=e.split("|").slice(2).join("|");if(!n)break;e=n}return e}h();var Te=["samplingParams","timeout","maxRetries","retryErrorCodes","enableCacheControl","schemaCompliance","reasoning","contextWindowSize","customHeaders","extra_body","modalities","splitToolMedia","matildaAgentSdk","matildaAgentPurpose","matildaAgentResponseMode","openAIRequestProfile"],Ft=["model","apiKey","apiKeyEnvKey","baseUrl"],Ae=[...Ft,...Te],di={openai:{apiKey:["OPENAI_API_KEY"],baseUrl:["OPENAI_BASE_URL"],model:["OPENAI_MODEL","MATILDA_MODEL"]},anthropic:{apiKey:["ANTHROPIC_API_KEY"],baseUrl:["ANTHROPIC_BASE_URL"],model:["ANTHROPIC_MODEL"]},gemini:{apiKey:["GEMINI_API_KEY"],baseUrl:[],model:["GEMINI_MODEL"]},"vertex-ai":{apiKey:["GOOGLE_API_KEY"],baseUrl:[],model:["GOOGLE_MODEL"]},"matilda-oauth":{apiKey:[],baseUrl:[],model:[]}},ci={openai:Ct,"matilda-oauth":L},Me=[{id:"coder-model",name:"coder-model",description:"Matilda 3.6 Plus \u2014 efficient hybrid model with leading coding performance",capabilities:{vision:!0}}],ui=Me.map(t=>t.id);h();h();h();h();sn();h();import{AsyncLocalStorage as Ln}from"node:async_hooks";var $t=new Ln;h();function jt(t){let e=t.candidates?.[0]?.content?.parts;return!e||e.length===0?!1:e.some(Un)}function Un(t){if(t===null||typeof t!="object")return!1;let e=t;return typeof e.text=="string"&&e.text.length>0||e.functionCall!==void 0||e.inlineData!==void 0||e.executableCode!==void 0||e.thought===!0}function zt(){let t=mt.getStore();return{attempt:t?.attempt??1,requestSetupMs:t?.requestSetupMs,retryTotalDelayMs:t?.retryTotalDelayMs}}var D=b("LOGGING_CONTENT_GENERATOR"),Dn=4096,Ht="...[truncated]",Gn=Dn-Ht.length,ee=class{constructor(e,n,o){this.wrapped=e;this.config=n;this.modalities=o.modalities,this.splitToolMedia=o.splitToolMedia,this.generatorAuthType=o.authType,o.enableOpenAILogging&&(this.openaiLogger=new Q(o.openAILoggingDir,n.getWorkingDir()),this.schemaCompliance=o.schemaCompliance)}openaiLogger;schemaCompliance;modalities;splitToolMedia;generatorAuthType;getWrapped(){return this.wrapped}logApiRequest(e,n,o){let i=JSON.stringify(e);lt(this.config,new ut(n,o,i,P.getStore()))}_logApiResponse(e,n,o,i,r,a){ct(this.config,new gt(e,o,n,i,this.generatorAuthType,r,a,P.getStore()))}_logApiError(e,n,o,i,r){let a=at(o),s=W(o),l=o?.requestID||o?.request_id||e,c=B(o);dt(this.config,new pt({responseId:l,model:i,durationMs:n,promptId:r,authType:this.generatorAuthType,errorMessage:a,errorType:s,statusCode:c,subagentName:P.getStore()}))}safelyLogApiError(e,n,o,i,r){try{this._logApiError(e,n,o,i,r)}catch(a){D.warn("Failed to log API error:",a)}}safelyLogApiResponse(e,n,o,i,r,a){try{this._logApiResponse(e,n,o,i,r,a)}catch(s){D.warn("Failed to log API response:",s)}}getClientVisibleModelId(e,n){return("isManagedMatildaModel"in this.config&&typeof this.config.isManagedMatildaModel=="function"?this.config.isManagedMatildaModel(e):!1)&&"getPublicModelId"in this.config&&typeof this.config.getPublicModelId=="function"?this.config.getPublicModelId(e):n||e}async generateContent(e,n){let o=zt(),i=Ne(e.model,n);try{i.setAttribute("llm_request.stream",!1)}catch{}let r=Le.setSpan(x.active(),i),a=Date.now(),s=F(n),l=this.startCaptureSession();try{Ke.recordGenerateContentRequest(e,{stream:!1,source:"generateContent"}),s||(Ue(this.config,i,e.config?.systemInstruction),De(this.config,i,e.config?.tools));let c=await x.with(r,async()=>{s||this.logApiRequest(this.toContents(e.contents),e.model,n);let u=await l.wrap(()=>this.wrapped.generateContent(e,n)),p=Date.now()-a,d=s?void 0:this.extractResponseText(u);s||Ge(this.config,i,d),this.safelyLogApiResponse(u.responseId??"",p,this.getClientVisibleModelId(e.model,u.modelVersion),n,u.usageMetadata,d);try{await this.safelyLogOpenAIInteraction(await l.resolve(e),u,void 0,n)}catch(m){D.warn("Failed to log OpenAI interaction:",m)}return u});return $(i,{success:!0,inputTokens:c.usageMetadata?.promptTokenCount,outputTokens:c.usageMetadata?.candidatesTokenCount,cachedInputTokens:c.usageMetadata?.cachedContentTokenCount,durationMs:Date.now()-a,responseId:c.responseId||void 0,finishReason:c.candidates?.[0]?.finishReason||void 0,thoughtsTokenCount:c.usageMetadata?.thoughtsTokenCount,subagentName:P.getStore()||void 0,...o}),c}catch(c){let u=Date.now()-a,p=e.config?.abortSignal?.aborted??!1;throw $(i,{success:!1,durationMs:u,error:p?ce:de,errorType:W(c),errorStatusCode:B(c),subagentName:P.getStore()||void 0,...o}),await x.with(r,async()=>{this.safelyLogApiError("",u,c,this.getClientVisibleModelId(e.model),n);try{await this.safelyLogOpenAIInteraction(await l.resolve(e),void 0,c,n)}catch(d){D.warn("Failed to log OpenAI interaction:",d)}}),c}}async generateContentStream(e,n){let o=zt(),i=Ne(e.model,n);try{i.setAttribute("llm_request.stream",!0)}catch{}let r=Le.setSpan(x.active(),i),a=Date.now(),s=F(n),l=this.startCaptureSession(),c;try{Ke.recordGenerateContentRequest(e,{stream:!0,source:"generateContentStream"}),s||(Ue(this.config,i,e.config?.systemInstruction),De(this.config,i,e.config?.tools)),c=await x.with(r,async()=>(s||this.logApiRequest(this.toContents(e.contents),e.model,n),l.wrap(()=>this.wrapped.generateContentStream(e,n))))}catch(p){let d=Date.now()-a;x.with(r,()=>this.safelyLogApiError("",d,p,e.model,n));let m=e.config?.abortSignal?.aborted??!1;$(i,{success:!1,durationMs:d,error:m?ce:de,errorType:W(p),errorStatusCode:B(p),subagentName:P.getStore()||void 0,...o});try{await this.safelyLogOpenAIInteraction(await l.resolve(e),void 0,p,n)}catch(f){D.warn("Failed to log OpenAI interaction:",f)}throw p}let u;if(this.openaiLogger)try{u=await l.resolve(e)}catch(p){D.warn("Failed to resolve OpenAI request:",p)}return x.with(r,()=>this.loggingStreamWrapper(c,a,n,e.model,u,i,r,e.config?.abortSignal,o))}startCaptureSession(){let e,n=!this.openaiLogger;return{wrap:o=>n?o():$t.run(i=>{e=i},o),resolve:async o=>this.openaiLogger?e??await this.buildOpenAIRequestForLogging(o):void 0}}async*loggingStreamWrapper(e,n,o,i,r,a,s,l,c){let u=F(o),p=!u||!!this.openaiLogger,d=[],m="",f="",g,C=!1,y,T,S=P.getStore(),R,V=!1,se=v=>s?x.with(s,v):v(),an=5*6e4,k,ot=a?()=>{V||(k!==void 0&&clearTimeout(k),k=setTimeout(()=>{try{a.setAttribute("stream.timed_out",!0)}catch{}$(a,{success:!1,durationMs:Date.now()-n,error:"Stream span timed out (idle)",responseId:m||void 0,subagentName:S||void 0,...c}),V=!0},an),k.unref())}:void 0;ot?.();try{for await(let I of e){!m&&I.responseId&&(m=I.responseId),!f&&I.modelVersion&&(f=I.modelVersion),p&&d.push(I),I.usageMetadata&&(g=I.usageMetadata);let rt=I.candidates?.[0];rt?.finishReason&&(y=rt.finishReason),R===void 0&&jt(I)&&(R=Date.now()-n),ot?.(),yield I}k!==void 0&&(clearTimeout(k),k=void 0);let v=Date.now()-n,le=p?this.consolidateGeminiResponsesForLogging(d):void 0,it=u?void 0:this.extractResponseText(le);V||(se(()=>this.safelyLogApiResponse(m,v,this.getClientVisibleModelId(i,f),o,g,it)),!u&&a&&Ge(this.config,a,it),await se(()=>this.safelyLogOpenAIInteraction(r,le,void 0,o)))}catch(v){if(C=!0,T=v,!V){let le=Date.now()-n;se(()=>this.safelyLogApiError(m,le,v,this.getClientVisibleModelId(i,f),o)),await se(()=>this.safelyLogOpenAIInteraction(r,void 0,v,o))}throw v}finally{if(k!==void 0&&clearTimeout(k),a&&!V){let v=l?.aborted??!1;$(a,{success:!C,inputTokens:g?.promptTokenCount,outputTokens:g?.candidatesTokenCount,cachedInputTokens:g?.cachedContentTokenCount,ttftMs:R,durationMs:Date.now()-n,error:C?v?ce:de:void 0,responseId:m||void 0,finishReason:y,thoughtsTokenCount:g?.thoughtsTokenCount,subagentName:S||void 0,errorType:T?W(T):void 0,errorStatusCode:T?B(T):void 0,...c})}}}async buildOpenAIRequestForLogging(e){if(!this.openaiLogger)return;let n=this.createLoggingRequestContext(e.model),o=ge.convertGeminiRequestToOpenAI(e,n,{cleanOrphanToolCalls:!1}),i={model:e.model,messages:o};return e.config?.tools&&(i.tools=await ge.convertGeminiToolsToOpenAI(e.config.tools,this.schemaCompliance??"auto")),e.config?.temperature!==void 0&&(i.temperature=e.config.temperature),e.config?.topP!==void 0&&(i.top_p=e.config.topP),e.config?.maxOutputTokens!==void 0&&(i.max_tokens=e.config.maxOutputTokens),e.config?.presencePenalty!==void 0&&(i.presence_penalty=e.config.presencePenalty),e.config?.frequencyPenalty!==void 0&&(i.frequency_penalty=e.config.frequencyPenalty),i}createLoggingRequestContext(e){return{model:e,modalities:this.modalities??{},splitToolMedia:this.splitToolMedia??!0,startTime:0}}async logOpenAIInteraction(e,n,o,i){if(!this.openaiLogger||!e)return;let r=n?this.convertGeminiResponseToOpenAIForLogging(n,e):void 0;await this.openaiLogger.logInteraction(e,r,o instanceof Error?o:o?new Error(String(o)):void 0,i)}async safelyLogOpenAIInteraction(e,n,o,i){try{await this.logOpenAIInteraction(e,n,o,i)}catch(r){D.warn("Failed to log OpenAI interaction:",r)}}convertGeminiResponseToOpenAIForLogging(e,n){let o=new K;return Object.assign(o,e),o.modelVersion=this.getClientVisibleModelId(n.model,e.modelVersion),ge.convertGeminiResponseToOpenAI(o,this.createLoggingRequestContext(n.model))}consolidateGeminiResponsesForLogging(e){if(e.length===0)return;let n=new K,o=[],i=new Map,r,a;for(let c of e){c.usageMetadata&&(a=c.usageMetadata);let u=c.candidates?.[0];u?.finishReason&&(r=u.finishReason);let p=u?.content?.parts??[];for(let d of p){if(typeof d=="string"){o.push({text:d});continue}if("text"in d){d.text&&o.push({text:d.text,...d.thought?{thought:!0}:{},...d.thoughtSignature?{thoughtSignature:d.thoughtSignature}:{}});continue}if("functionCall"in d&&d.functionCall){let m=d.functionCall.id||d.functionCall.name||"tool_call",f=i.get(m),g={functionCall:d.functionCall};f!==void 0?o[f]=g:(i.set(m,o.length),o.push(g));continue}if("functionResponse"in d&&d.functionResponse){o.push({functionResponse:d.functionResponse});continue}o.push(d)}}let s=e[e.length-1],l=s.candidates?.[0];return n.responseId=s.responseId,n.createTime=s.createTime,n.modelVersion=s.modelVersion,n.promptFeedback=s.promptFeedback,n.usageMetadata=a,n.candidates=[{content:{role:l?.content?.role||"model",parts:o},...r?{finishReason:r}:{},index:0,safetyRatings:l?.safetyRatings||[]}],n}extractResponseText(e){let n=e?.candidates?.[0]?.content?.parts;if(!n?.length)return;let o="",i=!1,r=!1,a=s=>{if(i=!0,r)return;let l=Gn-o.length;if(s.length<=l){o+=s;return}o+=s.slice(0,Math.max(0,l)),r=!0};for(let s of n){if(typeof s=="string"){a(s);continue}"text"in s&&typeof s.text=="string"&&!("thought"in s&&s.thought)&&a(s.text)}if(i)return r?`${o}${Ht}`:o}async countTokens(e){return this.wrapped.countTokens(e)}async embedContent(e){return this.wrapped.embedContent(e)}useSummarizedThinking(){return this.wrapped.useSummarizedThinking()}toContents(e){return Array.isArray(e)?e.map(n=>this.toContent(n)):[this.toContent(e)]}toContent(e){return Array.isArray(e)?{role:"user",parts:this.toParts(e)}:typeof e=="string"?{role:"user",parts:[{text:e}]}:"parts"in e?{...e,parts:e.parts?this.toParts(e.parts.filter(n=>n!=null)):[]}:{role:"user",parts:[this.toPart(e)]}}toParts(e){return e.map(n=>this.toPart(n))}toPart(e){if(typeof e=="string")return{text:e};if("thought"in e&&e.thought){let n=`[Thought: ${e.thought}]`,o={...e};if(delete o.thought,"functionCall"in o||"functionResponse"in o||"inlineData"in o||"fileData"in o)return o;let r=o.text,a=r?String(r):"",s=a?`${a}
|
|
8
|
+
${n}`:n;return{...o,text:s}}return e}};h();function Vt(t){switch(t){case"openai":return"OPENAI_API_KEY";case"anthropic":return"ANTHROPIC_API_KEY";case"gemini":return"GEMINI_API_KEY";case"vertex-ai":return"GOOGLE_API_KEY";default:return"API_KEY"}}function Bt(t){switch(t){case"openai":return"OPENAI_MODEL";case"anthropic":return"ANTHROPIC_MODEL";case"gemini":return"GEMINI_MODEL";case"vertex-ai":return"GOOGLE_MODEL";default:return"MODEL"}}var O=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},Se=class extends O{code="STRICT_MISSING_CREDENTIALS";constructor(e,n,o){let i=e||"(unknown)",r=n||"(unknown)";super(`Missing credentials for modelProviders model '${r}'. `+(o?`Current configured envKey: '${o}'. Set that environment variable, or update modelProviders.${i}[].envKey.`:`Configure modelProviders.${i}[].envKey and set that environment variable.`))}},ve=class extends O{code="STRICT_MISSING_MODEL_ID";constructor(e){super(`Missing model id for strict modelProviders resolution (authType: ${e}).`)}},_e=class extends O{code="MISSING_API_KEY";constructor(e){super(`Missing API key for ${e.authType} auth. Current model: '${e.model||"(unknown)"}', baseUrl: '${e.baseUrl||"(default)"}'. Provide an API key via settings (security.auth.apiKey), or set the environment variable '${e.envKey}'.`)}},Ie=class extends O{code="MISSING_MODEL";constructor(e){super(`Missing model for ${e.authType} auth. Set the environment variable '${e.envKey}'.`)}},be=class extends O{code="MISSING_BASE_URL";constructor(e){super(`Missing baseUrl for modelProviders model '${e.model||"(unknown)"}'. Configure modelProviders.${e.authType||"(unknown)"}[].baseUrl.`)}},ke=class extends O{code="MISSING_ANTHROPIC_BASE_URL_ENV";constructor(){super("ANTHROPIC_BASE_URL environment variable not found.")}};h();import Kn from"node:process";h();var Wt={image:!0,pdf:!0,audio:!0,video:!0},Nn=[[/^gemini-3/,Wt],[/^gemini-/,Wt],[/^gpt-5/,{image:!0}],[/^gpt-/,{image:!0}],[/^o\d/,{image:!0}],[/^claude-/,{image:!0,pdf:!0}],[/^matilda3\.5-plus/,{image:!0,video:!0}],[/^matilda3\.6-plus/,{image:!0,video:!0}],[/^matilda3\.7-plus/,{image:!0,video:!0}],[/^coder-model$/,{image:!0,video:!0}],[/^matilda-vl-/,{image:!0,video:!0}],[/^matilda3-vl-/,{image:!0,video:!0}],[/^matilda-code$/,{}],[/^matilda3-coder-/,{}],[/^matilda3\.6-35b/,{image:!0,video:!0}],[/^matilda/,{}],[/^deepseek/,{}],[/^glm-4\.5v/,{image:!0}],[/^glm-5(?:-|$)/,{}],[/^glm-/,{}],[/^minimax-m3/i,{image:!0,video:!0}],[/^minimax-/,{}],[/^kimi-k2\.5/,{image:!0,video:!0}],[/^kimi-/,{}],[/^doubao-seed(ance|ream)/,{}],[/^doubao-seed/,{image:!0}],[/^doubao-.*(vision|vl)/,{image:!0}],[/^doubao/,{}]];function te(t){let e=yt(t);for(let[n,o]of Nn)if(n.test(e))return{...o};return{}}h();var Yt=class t{modelRegistry;currentAuthType;_generationConfig;generationConfigSources;strictModelProviderSelection=!1;requireCachedMatildaCredentialsOnce=!1;hasManualCredentials=!1;onModelChange;authTypeWasExplicitlyProvided;runtimeModelSnapshots=new Map;activeRuntimeModelSnapshotId;static deepClone(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(o=>t.deepClone(o));let n={};for(let o of Object.keys(e))n[o]=t.deepClone(e[o]);return n}constructor(e={}){this.modelRegistry=new xe(e.modelProvidersConfig),this.onModelChange=e.onModelChange,this._generationConfig={...e.generationConfig||{}},this.generationConfigSources=e.generationConfigSources||{},this.authTypeWasExplicitlyProvided=e.initialAuthType!==void 0,this.currentAuthType=e.initialAuthType}createStateSnapshotForRollback(){return{currentAuthType:this.currentAuthType,generationConfig:t.deepClone(this._generationConfig),generationConfigSources:t.deepClone(this.generationConfigSources),strictModelProviderSelection:this.strictModelProviderSelection,requireCachedMatildaCredentialsOnce:this.requireCachedMatildaCredentialsOnce,hasManualCredentials:this.hasManualCredentials,activeRuntimeModelSnapshotId:this.activeRuntimeModelSnapshotId}}rollbackToStateSnapshot(e){this.currentAuthType=e.currentAuthType,this._generationConfig=e.generationConfig,this.generationConfigSources=e.generationConfigSources,this.strictModelProviderSelection=e.strictModelProviderSelection,this.requireCachedMatildaCredentialsOnce=e.requireCachedMatildaCredentialsOnce,this.hasManualCredentials=e.hasManualCredentials,this.activeRuntimeModelSnapshotId=e.activeRuntimeModelSnapshotId}getModel(){return this._generationConfig.model||L}getCurrentAuthType(){return this.currentAuthType}wasAuthTypeExplicitlyProvided(){return this.authTypeWasExplicitlyProvided}getAvailableModels(){return this.currentAuthType?this.modelRegistry.getModelsForAuthType(this.currentAuthType):[]}getAvailableModelsForAuthType(e){return this.modelRegistry.getModelsForAuthType(e)}getAllConfiguredModels(e){let n=e&&e.length>0?e:Object.values(G),o=new Set,i=[];for(let l of n)o.has(l)||(o.add(l),i.push(l));let r=[];i.includes("matilda-oauth")&&r.push("matilda-oauth");for(let l of i)l!=="matilda-oauth"&&r.push(l);let a=this.getRuntimeModelOption(),s=[];for(let l of r)a&&a.authType===l&&s.push(a),s.push(...this.modelRegistry.getModelsForAuthType(l));return s}hasModel(e,n){return this.modelRegistry.hasModel(e,n)}getResolvedModel(e,n){return this.modelRegistry.getModel(e,n)}isManagedMatildaResolvedModel(e){return e?.id===Fe&&e?.envKey===Tt&&e?.baseUrl===Mt&&e?.generationConfig?.openAIRequestProfile==="matilda-code"}isManagedMatildaModel(e){let n=e.trim();return!n||!this.currentAuthType?!1:this.isManagedMatildaResolvedModel(this.modelRegistry.getModel(this.currentAuthType,n))}getPublicModelId(e){return this.isManagedMatildaModel(e)?Fe:e}getModelDisplayName(e){return this.isManagedMatildaModel(e)?At:this.currentAuthType?this.modelRegistry.getModel(this.currentAuthType,e)?.name??e:e}async setModel(e,n){if(this.currentAuthType==="matilda-oauth"&&e===L){this.strictModelProviderSelection=!1,this._generationConfig.model=e,this.generationConfigSources.model={kind:"programmatic",detail:n?.reason||"setModel"},this.onModelChange&&await this.onModelChange("matilda-oauth",!1);return}if(this.currentAuthType&&this.modelRegistry.hasModel(this.currentAuthType,e)){await this.switchModel(this.currentAuthType,e);return}let o=this.createStateSnapshotForRollback();try{this.strictModelProviderSelection=!1,this._generationConfig.model=e,this.generationConfigSources.model={kind:"programmatic",detail:n?.reason||"setModel"},this.applyRawModelDerivedDefaults(e),this.onModelChange&&this.currentAuthType&&await this.onModelChange(this.currentAuthType,!0)}catch(i){throw this.rollbackToStateSnapshot(o),i}}applyRawModelDerivedDefaults(e){this.shouldUpdateModelDerivedDefault("modalities")&&(this._generationConfig.modalities=te(e),this.generationConfigSources.modalities={kind:"computed",detail:"auto-detected from model"}),this.shouldUpdateModelDerivedDefault("contextWindowSize")&&(this._generationConfig.contextWindowSize=J(e,"input"),this.generationConfigSources.contextWindowSize={kind:"computed",detail:"auto-detected from model"})}shouldUpdateModelDerivedDefault(e){let n=this.generationConfigSources[e];return n===void 0||n.kind==="computed"||n.kind==="default"||n.kind==="modelProviders"||n.kind==="programmatic"||n.kind==="unknown"}async switchModel(e,n,o){let i=this.extractRuntimeModelSnapshotId(n);if(i){await this.switchToRuntimeModel(i);return}let r=this.createStateSnapshotForRollback();e==="matilda-oauth"&&o?.requireCachedCredentials&&(this.requireCachedMatildaCredentialsOnce=!0);try{let a=e!==this.currentAuthType;this.currentAuthType=e;let s=this.modelRegistry.getModel(e,n,o?.baseUrl);if(!s)throw new Error(`Model '${n}' not found for authType '${e}'`);let l=r.generationConfig.model||"",c=!a&&l?this.modelRegistry.getModel(e,l,r.generationConfig.baseUrl)??this.modelRegistry.getModel(e,l):void 0,u=e!=="matilda-oauth"&&!a&&!!r.generationConfig.apiKey&&!!s.envKey&&c?.envKey===s.envKey&&c.baseUrl===s.baseUrl,p=u?r.generationConfig.apiKey:void 0,d=u?r.generationConfigSources.apiKey:void 0;this.applyResolvedModelDefaults(s),!this._generationConfig.apiKey&&p&&(this._generationConfig.apiKey=p,d&&(this.generationConfigSources.apiKey=t.deepClone(d))),this.activeRuntimeModelSnapshotId=void 0;let m=a?!0:this.checkRequiresRefresh(l);this.onModelChange&&await this.onModelChange(e,m)}catch(a){throw this.rollbackToStateSnapshot(r),a}}buildRuntimeModelSnapshotId(e,n){return`${ye}${e}|${n}`}extractRuntimeModelSnapshotId(e){if(e.startsWith(ye))return this.runtimeModelSnapshots.has(e)?e:void 0;if(this.runtimeModelSnapshots.has(e))return e}getGenerationConfig(){return this._generationConfig}getGenerationConfigSources(){return this.generationConfigSources}mergeSettingsGenerationConfig(e){if(e)for(let n of Te)!(n in this._generationConfig)&&n in e&&(this._generationConfig[n]=e[n],this.generationConfigSources[n]={kind:"settings",detail:`model.generationConfig.${n}`})}updateCredentials(e,n){(e.apiKey||e.baseUrl||e.model)&&(this.hasManualCredentials=!0,this.clearProviderSourcedConfig()),e.apiKey&&(this._generationConfig.apiKey=e.apiKey,this.generationConfigSources.apiKey={kind:"programmatic",detail:"updateCredentials"}),e.baseUrl&&(this._generationConfig.baseUrl=e.baseUrl,this.generationConfigSources.baseUrl={kind:"programmatic",detail:"updateCredentials"}),e.model&&(this._generationConfig.model=e.model,this.generationConfigSources.model={kind:"programmatic",detail:"updateCredentials"}),this.strictModelProviderSelection=!1,this._generationConfig.apiKeyEnvKey=void 0,n&&this.mergeSettingsGenerationConfig(n),this.syncRuntimeModelSnapshotWithCredentials()}syncRuntimeModelSnapshotWithCredentials(){let e=this.currentAuthType,{model:n,apiKey:o,baseUrl:i}=this._generationConfig;if(!(!n||!e||!o||!i)&&!this.modelRegistry.hasModel(e,n,i))if(this.activeRuntimeModelSnapshotId&&this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)){let r=this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId);r.apiKey=o,r.baseUrl=i,r.modelId=n;let a=this.buildRuntimeModelSnapshotId(r.authType,r.modelId);a!==r.id&&(this.runtimeModelSnapshots.delete(r.id),r.id=a,this.runtimeModelSnapshots.set(a,r),this.activeRuntimeModelSnapshotId=a),r.createdAt=Date.now()}else this.detectAndCaptureRuntimeModel()}clearProviderSourcedConfig(){for(let e of Ae)this.generationConfigSources[e]?.kind==="modelProviders"&&(delete this._generationConfig[e],delete this.generationConfigSources[e])}isStrictModelProviderSelection(){return this.strictModelProviderSelection}resetStrictModelProviderSelection(){this.strictModelProviderSelection=!1}consumeRequireCachedCredentialsFlag(){let e=this.requireCachedMatildaCredentialsOnce;return this.requireCachedMatildaCredentialsOnce=!1,e}applyResolvedModelDefaults(e){if(this.strictModelProviderSelection=!0,this.hasManualCredentials=!1,this._generationConfig.model=e.id,this.generationConfigSources.model={kind:"modelProviders",authType:e.authType,modelId:e.id,detail:"model.id"},this.currentAuthType==="matilda-oauth"?(this._generationConfig.apiKey="MATILDA_OAUTH_DYNAMIC_TOKEN",this.generationConfigSources.apiKey={kind:"computed",detail:"Matilda OAuth placeholder token"},this._generationConfig.apiKeyEnvKey=void 0,delete this.generationConfigSources.apiKeyEnvKey):(this._generationConfig.apiKey=void 0,this._generationConfig.apiKeyEnvKey=void 0),e.envKey!==void 0){let o=Kn.env[e.envKey];o&&(this._generationConfig.apiKey=o,this.generationConfigSources.apiKey={kind:"env",envKey:e.envKey,via:{kind:"modelProviders",authType:e.authType,modelId:e.id,detail:"envKey"}}),this._generationConfig.apiKeyEnvKey=e.envKey,this.generationConfigSources.apiKeyEnvKey={kind:"modelProviders",authType:e.authType,modelId:e.id,detail:"envKey"}}this._generationConfig.baseUrl=e.baseUrl,this.generationConfigSources.baseUrl={kind:"modelProviders",authType:e.authType,modelId:e.id,detail:"baseUrl"};let n=e.generationConfig;for(let o of Te)this._generationConfig[o]=n[o],this.generationConfigSources[o]={kind:"modelProviders",authType:e.authType,modelId:e.id,detail:`generationConfig.${o}`};n.contextWindowSize===void 0&&(this._generationConfig.contextWindowSize=J(e.id,"input"),this.generationConfigSources.contextWindowSize={kind:"computed",detail:"auto-detected from model"}),n.modalities===void 0&&(this._generationConfig.modalities=te(e.id),this.generationConfigSources.modalities={kind:"computed",detail:"auto-detected from model"})}checkRequiresRefresh(e){let n=this.currentAuthType;if(!n)return!0;if(n==="matilda-oauth")return!1;let o=this.modelRegistry.getModel(n,this._generationConfig.model||"",this._generationConfig.baseUrl||void 0),i=this.modelRegistry.getModel(n,e);return!i||!o||i.envKey!==o.envKey||i.baseUrl!==o.baseUrl}syncAfterAuthRefresh(e,n){this.strictModelProviderSelection=!1;let o=this.currentAuthType;this.currentAuthType=e;let i=this.generationConfigSources.baseUrl?.kind==="modelProviders"?this._generationConfig.baseUrl:void 0,r=n?this.modelRegistry.getModel(e,n,i)??this.modelRegistry.getModel(e,n):void 0;if(r){let m=this.generationConfigSources.baseUrl?.kind==="modelProviders"&&(this._generationConfig.apiKeyEnvKey!==r.envKey||this._generationConfig.baseUrl!==r.baseUrl),f=o===e&&this._generationConfig.model===n&&!m,g=f?this._generationConfig.apiKey:void 0,C=f&&this.generationConfigSources.apiKey?{...this.generationConfigSources.apiKey}:void 0,y=this.generationConfigSources.baseUrl,T=f&&!!this._generationConfig.baseUrl&&(y?.kind==="cli"||y?.kind==="env"||y?.kind==="settings"),S=T?this._generationConfig.baseUrl:void 0,R=T&&y?{...y}:void 0;this.applyResolvedModelDefaults(r),f&&!this._generationConfig.apiKey&&g&&(this._generationConfig.apiKey=g,C&&(this.generationConfigSources.apiKey=C)),S&&(this._generationConfig.baseUrl=S,R&&(this.generationConfigSources.baseUrl=R)),this.strictModelProviderSelection=!0,this.activeRuntimeModelSnapshotId=void 0;return}let a=this.generationConfigSources.apiKey,s=this.generationConfigSources.baseUrl,l=this._generationConfig.apiKey&&a?.kind!=="modelProviders"||this._generationConfig.baseUrl&&s?.kind!=="modelProviders";if(!(o!==e)&&(n===void 0||!this.modelRegistry.hasModel(e,n))&&(this.hasManualCredentials||l)){n&&(this._generationConfig.model=n,this.generationConfigSources.model||(this.generationConfigSources.model={kind:"programmatic",detail:"auth refresh (preserved credentials)"}));return}let p=this.modelRegistry.getDefaultModelForAuthType(e);if(p){this.applyResolvedModelDefaults(p),this.activeRuntimeModelSnapshotId=void 0;return}n&&(this._generationConfig.model=n,this.generationConfigSources.model||(this.generationConfigSources.model={kind:"programmatic",detail:"auth refresh (no default model)"}))}setOnModelChange(e){this.onModelChange=e}detectAndCaptureRuntimeModel(){let{model:e,apiKey:n,baseUrl:o,apiKeyEnvKey:i,...r}=this._generationConfig,a=this.currentAuthType;if(!e||!a)return;if(this.modelRegistry.hasModel(a,e,o)){this.clearRuntimeModelSnapshotForAuthType(a);return}if(!(this._generationConfig.apiKey&&this._generationConfig.baseUrl))return;let l=this.buildRuntimeModelSnapshotId(a,e),c={id:l,authType:a,modelId:e,apiKey:n,baseUrl:o,apiKeyEnvKey:i,generationConfig:r,sources:{...this.generationConfigSources},createdAt:Date.now()};return this.runtimeModelSnapshots.set(l,c),this.activeRuntimeModelSnapshotId=l,this.cleanupOldRuntimeModelSnapshots(),l}getActiveRuntimeModelSnapshot(){if(this.activeRuntimeModelSnapshotId)return this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId)}getActiveRuntimeModelSnapshotId(){return this.activeRuntimeModelSnapshotId}async switchToRuntimeModel(e){let n=this.runtimeModelSnapshots.get(e);if(!n)throw new Error(`Runtime model snapshot '${e}' not found`);let o=this.createStateSnapshotForRollback();try{let i=n.authType!==this.currentAuthType;this.currentAuthType=n.authType,this.activeRuntimeModelSnapshotId=e,this.strictModelProviderSelection=!1,this.hasManualCredentials=!0,this._generationConfig.model=n.modelId,this.generationConfigSources.model={kind:"programmatic",detail:"runtimeModelSwitch"},n.apiKey&&(this._generationConfig.apiKey=n.apiKey,this.generationConfigSources.apiKey=n.sources.apiKey||{kind:"programmatic",detail:"runtimeModelSwitch"}),n.baseUrl&&(this._generationConfig.baseUrl=n.baseUrl,this.generationConfigSources.baseUrl=n.sources.baseUrl||{kind:"programmatic",detail:"runtimeModelSwitch"}),n.apiKeyEnvKey&&(this._generationConfig.apiKeyEnvKey=n.apiKeyEnvKey),n.generationConfig&&Object.assign(this._generationConfig,n.generationConfig);let r=i;this.onModelChange&&await this.onModelChange(n.authType,r)}catch(i){throw this.rollbackToStateSnapshot(o),i}}getRuntimeModelOption(){let e=this.getActiveRuntimeModelSnapshot();if(e)return{id:e.modelId,label:e.modelId,authType:e.authType,isVision:!1,contextWindowSize:e.generationConfig?.contextWindowSize,isRuntimeModel:!0,runtimeSnapshotId:e.id}}clearRuntimeModelSnapshotForAuthType(e){for(let[n,o]of this.runtimeModelSnapshots.entries())o.authType===e&&(this.runtimeModelSnapshots.delete(n),this.activeRuntimeModelSnapshotId===n&&(this.activeRuntimeModelSnapshotId=void 0))}cleanupOldRuntimeModelSnapshots(){let e=new Map;for(let n of this.runtimeModelSnapshots.values()){let o=e.get(n.authType);(!o||n.createdAt>o.createdAt)&&e.set(n.authType,n)}this.runtimeModelSnapshots.clear();for(let n of e.values())this.runtimeModelSnapshots.set(n.id,n);this.activeRuntimeModelSnapshotId&&!this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)&&(this.activeRuntimeModelSnapshotId=void 0)}reloadModelProvidersConfig(e){this.modelRegistry.reloadModels(e)}};h();import{readFileSync as no}from"node:fs";import{join as oo}from"node:path";h();h();import{randomBytes as Fn,createHash as $n}from"node:crypto";function Jt(t){return t==="localhost"||t==="127.0.0.1"||t==="::1"||t==="[::1]"}function Ye(){let t=Fn(32).toString("base64url"),e=$n("sha256").update(t).digest("base64url");return{codeVerifier:t,codeChallenge:e}}function ne(t,e){return{accessToken:t.access_token,refreshToken:t.refresh_token??e?.refreshToken,expiresAt:Date.now()+(t.expires_in??3600)*1e3,idToken:t.id_token??e?.idToken}}async function Je(t){let e=t.replace(/\/+$/,""),n=new URL("/.well-known/oauth-authorization-server",e);if(n.protocol!=="https:"&&!Jt(n.hostname))throw new Error(`Refusing OAuth discovery over insecure transport: ${n.origin}`);let o=await fetch(n,{headers:{accept:"application/json"}});if(!o.ok)throw new Error(`OAuth discovery failed (${o.status}) for ${n.origin}`);let i=await o.json();if(!i.issuer||!i.authorization_endpoint||!i.token_endpoint)throw new Error(`OAuth discovery document missing required fields for ${n.origin}`);return{issuer:i.issuer,authorization_endpoint:i.authorization_endpoint,token_endpoint:i.token_endpoint,device_authorization_endpoint:i.device_authorization_endpoint}}h();import{promises as we,openSync as jn,closeSync as zn,unlinkSync as qt,statSync as Hn}from"node:fs";import{dirname as Vn}from"node:path";var Bn=1e4,Wn=3e4,Yn=50;function qe(t){let e=async()=>{try{let i=await we.readFile(t,"utf8"),r=JSON.parse(i);return r&&typeof r=="object"?r:{}}catch(i){if(i.code==="ENOENT")return{};throw i}},n=async i=>{await we.mkdir(Vn(t),{recursive:!0}),await we.writeFile(t,JSON.stringify(i,null,2),{mode:384}),await we.chmod(t,384).catch(()=>{})};return{store:{async get(i){return(await e())[i]??null},async set(i,r){let a=await e();a[i]=r,await n(a)},async remove(i){let r=await e();i in r&&(delete r[i],await n(r))}},lock:Jn(`${t}.lock`)}}function Jn(t){let e=Promise.resolve();return n=>{let o=e.then(async()=>{await qn(t);try{return await n()}finally{Xn(t)}});return e=o.then(()=>{},()=>{}),o}}async function qn(t){let e=Date.now()+Bn;for(;;)try{zn(jn(t,"wx"));return}catch(n){if(n.code!=="EEXIST")throw n;try{if(Date.now()-Hn(t).mtimeMs>Wn){qt(t);continue}}catch{continue}if(Date.now()>e)throw new Error(`Timed out acquiring credential lock at ${t}`);await Zn(Yn)}}function Xn(t){try{qt(t)}catch{}}function Zn(t){return new Promise(e=>setTimeout(e,t))}h();var z=class extends Error{code="invalid_grant";constructor(e="Refresh token is no longer valid \u2014 sign in again."){super(e),this.name="InvalidGrantError"}};function Xe(t){let e=t.storageKey??"default",n=t.fetchImpl??fetch,o=t.expirySkewMs??6e4,i=null,r=async()=>{let l=await t.store.get(e);if(!l)return null;try{let c=JSON.parse(l);return c.accessToken?c:null}catch{return null}},a=l=>l.expiresAt-Date.now()>o,s=l=>t.lock(async()=>{let c=await r()??l;if(c.accessToken!==l.accessToken&&a(c))return c.accessToken;if(!c.refreshToken)throw new z("No refresh token available \u2014 sign in again.");let u=await n(t.tokenEndpoint,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",client_id:t.clientId,refresh_token:c.refreshToken})});if(!u.ok){let m=await u.text().catch(()=>"");throw u.status>=400&&u.status<500&&Qn(m)==="invalid_grant"?(await t.store.remove(e),new z):new Error(`Token refresh failed (${u.status})`)}let p=await u.json(),d=ne(p,c);return await t.store.set(e,JSON.stringify(d)),d.accessToken});return{async getAccessToken(l){let c=await r();if(!c)throw new z("Not signed in.");return!l?.forceRefresh&&a(c)?c.accessToken:(i||(i=s(c).finally(()=>{i=null})),i)}}}function Qn(t){try{return JSON.parse(t).error}catch{return}}h();import{createServer as eo}from"node:http";import{randomBytes as to}from"node:crypto";async function Ze(t){if(t.transport.kind!=="loopback")throw new Error(`Unsupported login transport: ${t.transport.kind}`);if(t.signal?.aborted)throw new Error("Login aborted");let e=f=>t.onEvent?.(f),{codeVerifier:n,codeChallenge:o}=Ye(),i=to(16).toString("hex"),r=t.timeoutMs??5*60*1e3,a=t.transport.successRedirect;e({type:"state",status:"idle"});let s,l,c=new Promise((f,g)=>{s=f,l=g});c.catch(()=>{});let u=eo((f,g)=>{let C=new URL(f.url??"/","http://127.0.0.1");if(C.pathname!=="/callback"){g.writeHead(404).end();return}let y=C.searchParams.get("error"),T=C.searchParams.get("state"),S=C.searchParams.get("code");if(y){Xt(g,a,()=>l(new Error(`OAuth error: ${y}`)));return}if(T!==i){g.writeHead(400).end("State mismatch"),l(new Error("OAuth state mismatch"));return}if(!S){g.writeHead(400).end("Missing authorization code");return}Xt(g,a,()=>s(S))}),p=await new Promise((f,g)=>{u.once("error",g),u.listen(t.transport.port??0,"127.0.0.1",()=>{f(u.address().port)})}),d=setTimeout(()=>l(new Error("Login timed out \u2014 no callback received")),r),m=()=>l(new Error("Login aborted"));t.signal?.addEventListener("abort",m,{once:!0});try{let f=`http://127.0.0.1:${p}/callback`,g=new URL(t.metadata.authorization_endpoint);g.searchParams.set("client_id",t.clientId),g.searchParams.set("response_type","code"),g.searchParams.set("redirect_uri",f),g.searchParams.set("code_challenge",o),g.searchParams.set("code_challenge_method","S256"),g.searchParams.set("state",i),g.searchParams.set("scope",t.scope??"openid offline_access");let C=g.toString();e({type:"authorize_url",url:C}),e({type:"state",status:"awaiting_user"}),t.openBrowser&&await t.openBrowser(C);let y=await c;e({type:"state",status:"exchanging"});let T=await fetch(t.metadata.token_endpoint,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:t.clientId,code:y,code_verifier:n,redirect_uri:f})});if(!T.ok){let R=await T.text().catch(()=>"");throw new Error(`Token exchange failed (${T.status}): ${R}`)}let S=ne(await T.json());return e({type:"state",status:"authenticated"}),S}catch(f){throw e({type:"state",status:"error"}),f}finally{clearTimeout(d),t.signal?.removeEventListener("abort",m),u.close()}}function Xt(t,e,n){t.writeHead(302,{location:e}).end(n)}var Re="matilda-code",Zt="matilda-desktop",oe="MATILDA_API_KEY",io="openid profile email offline_access matilda:code",ro="matilda";function ie(t){return t.trim().replace(/\/+$/,"").replace(/\/api\/v1(?:\/code)?$/i,"")}function Qt(){return oo(st.getGlobalMatildaDir(),"matilda-auth.json")}function Pe(){return qe(Qt())}function ao(t){return t==="desktop"}function re(t){return t?.clientId?t.clientId:ao(t?.channel)?Zt:Re}function H(t){return`matilda:${t}`}function Ee(t){return`${H(t)}:refresh-rejected`}function ae(t){return t===Re?[H(t),ro]:[H(t)]}function so(){try{let t=no(Qt(),"utf8");return JSON.parse(t)}catch{return{}}}function Qe(t){if(!t)return null;try{let e=JSON.parse(t);return typeof e?.accessToken=="string"&&typeof e?.baseUrl=="string"?e:null}catch{return null}}function lo(t,e){return ie(t)===ie(e)}function co(t){if(!t)return{};try{let e=t.split(".")[1],n=Buffer.from(e.replace(/-/g,"+").replace(/_/g,"/"),"base64").toString("utf8"),o=JSON.parse(n);return{sub:o.sub,email:o.email,name:o.name}}catch{return{}}}function uo(t,e){let n=co(t.idToken);return{accessToken:t.accessToken,accessTokenExpiresAt:t.expiresAt,refreshToken:t.refreshToken??"",userId:n.sub,email:n.email,displayName:n.name,baseUrl:e}}async function en(t){try{return await Je(t)}catch{return{issuer:t,authorization_endpoint:`${t}/api/auth/oauth/authorize`,token_endpoint:`${t}/api/auth/oauth/token`,device_authorization_endpoint:`${t}/api/auth/oauth/device/code`}}}function N(t){try{let e=so(),n=re(t);for(let o of ae(n)){let i=Qe(e[o]);if(i)return i}return null}catch{return null}}async function po(t){let e=re(t),n=Pe().store;for(let o of ae(e))await n.remove(o);await n.set(Ee(e),"1"),delete process.env[oe]}function go(t){return t instanceof Error?t.code==="invalid_grant"||t.name==="InvalidGrantError"?!0:t.message==="Token refresh failed (401)":!1}async function fo(t,e){let n=re(e),o=Pe().store;await o.set(H(n),JSON.stringify(t)),await o.remove(Ee(n));for(let i of ae(n))i!==H(n)&&await o.remove(i);process.env[oe]=t.accessToken}async function ho(t){let e=re(t),n=Pe().store;for(let o of ae(e))await n.remove(o);await n.remove(Ee(e)),delete process.env[oe]}function Or(t){let e=N(t);return e?{authenticated:!0,userId:e.userId,email:e.email,displayName:e.displayName,baseUrl:e.baseUrl,accessTokenExpiresAt:e.accessTokenExpiresAt}:{authenticated:!1}}async function Lr(t){let e={channel:t?.channel,clientId:t?.clientId},n=N(e);if(n?.accessToken){let o=ie(n.baseUrl);await fetch(`${o}/api/auth/logout`,{method:"POST",headers:{authorization:`Bearer ${n.accessToken}`,"content-type":"application/json"},body:JSON.stringify(n.refreshToken?{refreshToken:n.refreshToken}:{}),signal:t?.signal??AbortSignal.timeout(5e3)}).catch(()=>{})}await ho(e)}async function et(t){let e=re(t),n=H(e),o=N({channel:t?.channel,clientId:e});if(!o||t?.baseUrl&&!lo(o.baseUrl,t.baseUrl))return t?.fallbackAccessToken??process.env[oe]??"";let i=ie(o.baseUrl),r=await en(i),{store:a,lock:s}=Pe(),l=mo(a,s,r.token_endpoint,o.baseUrl,e,n,t?.signal),c;try{c=await l.getAccessToken({forceRefresh:t?.forceRefresh})}catch(u){throw e===Zt&&go(u)&&await po({channel:t?.channel,clientId:e}),u}return process.env[oe]=c,c}async function Ur(t){await et(t);let e=N(t);if(!e)throw new Error("No Matilda credentials to refresh \u2014 sign in again.");return e}function mo(t,e,n,o,i,r,a){let s=ae(i);return Xe({tokenEndpoint:n,clientId:i,store:{get:async u=>{let p=u===r?s:[u],d=null;for(let f of p)if(d=Qe(await t.get(f)),d)break;if(!d?.accessToken)return null;let m={accessToken:d.accessToken,refreshToken:d.refreshToken,expiresAt:d.accessTokenExpiresAt};return JSON.stringify(m)},set:async(u,p)=>{let d=JSON.parse(p),m=u===r?s:[u],f={};for(let C of m){let y=Qe(await t.get(C));if(y){f=y;break}}let g={...f,accessToken:d.accessToken,accessTokenExpiresAt:d.expiresAt,refreshToken:d.refreshToken??f.refreshToken??"",baseUrl:f.baseUrl??o};await t.set(r,JSON.stringify(g)),await t.remove(Ee(i));for(let C of s)C!==r&&await t.remove(C)},remove:async u=>{let p=u===r?s:[u];for(let d of p)await t.remove(d)}},storageKey:r,lock:e,fetchImpl:(u,p)=>fetch(u,{...p,signal:a}),expirySkewMs:3e5})}function Co(){return process.env.MATILDA_AUTH_SKIP_BROWSER!=="1"&&vt()}async function Dr(t){let e=ie(t.baseUrl),n=await en(e),o="",i=s=>Ze({metadata:n,clientId:Re,scope:s,transport:{kind:"loopback",successRedirect:`${e}/api/auth/oauth/success?client_id=${encodeURIComponent(Re)}`},signal:t.signal,onEvent:l=>{l.type==="authorize_url"&&(o=l.url,t.onAuthorizeUrl?.(l.url))},openBrowser:async l=>{if(!(t.openBrowser===!1||!Co()))try{let{default:c}=await import("./open-QQ7FWG4A.js");(await c(l)).once("error",()=>{})}catch{}}}),r;try{r=await i(io)}catch(s){if(s instanceof Error&&s.message.includes("invalid_scope"))r=await i("openid offline_access");else throw s}let a=uo(r,t.baseUrl);return await fo(a),{...a,authorizeUrl:o}}var G=(r=>(r.USE_OPENAI="openai",r.MATILDA_OAUTH="matilda-oauth",r.USE_GEMINI="gemini",r.USE_VERTEX_AI="vertex-ai",r.USE_ANTHROPIC="anthropic",r))(G||{}),yo="MATILDA_AGENT_SDK",Oe="MATILDA_API_KEY";function To(t,e){if(t.apiKey||t.apiKeyEnvKey!==Oe)return;let n=N({channel:e});n?.accessToken&&(t.apiKey=n.accessToken,process.env[Oe]=n.accessToken)}async function Ao(t,e){if(t.apiKeyEnvKey!==Oe)return;let n=N({channel:e});if(!n?.accessToken)return;let o=await et({baseUrl:t.baseUrl,fallbackAccessToken:n.accessToken,channel:e});o&&(t.apiKey=o,process.env[Oe]=o)}function Mo(t){return t.matildaAgentSdk===!0||process.env[yo]==="1"}function tt(t,e,n){t[e]=n}function So(t,e){return t?.[e]}function vo(t,e,n,o,i){let r={...o||{}},a=i?.strictModelProvider===!0,s={...n||{},authType:e,proxy:t?.getProxy()};tt(r,"authType",{kind:"computed",detail:"provided by caller"}),t?.getProxy()&&tt(r,"proxy",{kind:"computed",detail:"Config.getProxy()"});let l=u=>So(o,u)??{kind:"unknown"};for(let u of Ae)n&&u in n&&!r[u]&&tt(r,u,l(u));To(s,t.getChannel());let c=nn(s,a);if(!c.valid)throw new Error(c.errors.map(u=>u.message).join(`
|
|
9
|
+
`));return{config:s,sources:r}}function nn(t,e=!1){let n=[];if(t.authType==="matilda-oauth")return{valid:!0,errors:[]};if(!t.apiKey)if(e)n.push(new Se(t.authType,t.model,t.apiKeyEnvKey));else{let o=t.apiKeyEnvKey||Vt(t.authType);n.push(new _e({authType:t.authType,model:t.model,baseUrl:t.baseUrl,envKey:o}))}if(!t.model)if(e)n.push(new ve(t.authType));else{let o=Bt(t.authType);n.push(new Ie({authType:t.authType,envKey:o}))}return t.authType==="anthropic"&&!t.baseUrl&&(e?n.push(new be({authType:t.authType,model:t.model})):t.authType==="anthropic"&&n.push(new ke)),{valid:n.length===0,errors:n}}function zr(t,e,n){return vo(t,e,n).config}function tn(t){let e=t;for(;e instanceof Error;){if("code"in e&&e.code==="ERR_MODULE_NOT_FOUND")return e;e=e.cause}}async function Hr(t,e,n){await Ao(t,e.getChannel());let o=nn(t,!1);if(!o.valid)throw new Error(o.errors.map(a=>a.message).join(`
|
|
10
|
+
`));let i=t.authType;if(!i)throw new Error("ContentGeneratorConfig must have an authType");let r;try{if(i==="openai")if(Mo(t)){let{createMatildaAgentContentGenerator:a}=await import("./matildaAgentContentGenerator-BZXWJKJ6.js");r=a(t,e)}else{let{createOpenAIContentGenerator:a}=await import("./openaiContentGenerator-JACPHIUG.js");r=a(t,e)}else if(i==="matilda-oauth"){let{getMatildaOAuthClient:a}=await import("./matildaOAuth2-LKOMJUC6.js"),{MatildaContentGenerator:s}=await import("./matildaContentGenerator-BBG5MEI5.js");try{let l=await a(e,n?{requireCachedCredentials:!0}:void 0);r=new s(l,t,e)}catch(l){throw tn(l)?l:new Error(l instanceof Error?l.message:String(l))}}else if(i==="anthropic"){let{createAnthropicContentGenerator:a}=await import("./anthropicContentGenerator-I3ANKUSE.js");r=a(t,e)}else if(i==="gemini"||i==="vertex-ai"){let{createGeminiContentGenerator:a}=await import("./geminiContentGenerator-GSNXCP36.js");r=a(t,e)}else throw new Error(`Error creating contentGenerator: Unsupported authType: ${i}`)}catch(a){let s=tn(a);throw s?new Error(`Matilda was updated in the background and needs to be restarted.
|
|
11
|
+
Please exit and restart Matilda to use the '${i}' provider.`,{cause:s}):a}return new ee(r,e,t)}var nt=b("MODEL_REGISTRY");function on(t){if(Object.values(G).includes(t))return t}function _o(t){return/^minimax-m3/i.test(t.trim().toLowerCase())}function rn(t,e){return e?`${t}\0${e}`:t}var xe=class{modelsByAuthType;getDefaultBaseUrl(e){switch(e){case"matilda-oauth":return"DYNAMIC_MATILDA_OAUTH_BASE_URL";case"openai":return St;default:return""}}constructor(e){if(this.modelsByAuthType=new Map,this.registerAuthTypeModels("matilda-oauth",Me),e)for(let[n,o]of Object.entries(e)){let i=on(n);if(!i){nt.warn(`Invalid authType key "${n}" in modelProviders config. Expected one of: ${Object.values(G).join(", ")}. Skipping.`);continue}i!=="matilda-oauth"&&this.registerAuthTypeModels(i,o)}}registerAuthTypeModels(e,n){let o=new Map;for(let i of n){let r=rn(i.id,i.baseUrl);if(o.has(r)){nt.warn(`Duplicate model id "${i.id}"${i.baseUrl?` with baseUrl "${i.baseUrl}"`:""} for authType "${e}". Using the first registered config.`);continue}let a=this.resolveModelConfig(i,e);o.set(r,a)}this.modelsByAuthType.set(e,o)}getModelsForAuthType(e){let n=this.modelsByAuthType.get(e);return n?Array.from(n.values()).map(o=>({id:o.id,label:o.name,description:o.description,capabilities:o.capabilities,authType:o.authType,isVision:o.capabilities?.vision??!1,contextWindowSize:o.generationConfig.contextWindowSize??J(o.id),modalities:o.generationConfig.modalities,baseUrl:o.baseUrl,envKey:o.envKey})):[]}getModel(e,n,o){let i=this.modelsByAuthType.get(e);if(!i)return;if(o)return i.get(rn(n,o));let r=i.get(n);if(r)return r;for(let a of i.values())if(a.id===n)return a}hasModel(e,n,o){return this.getModel(e,n,o)!==void 0}getDefaultModelForAuthType(e){if(e==="matilda-oauth")return this.getModel(e,L);let n=this.modelsByAuthType.get(e);if(!(!n||n.size===0))return Array.from(n.values())[0]}resolveModelConfig(e,n){this.validateModelConfig(e,n);let o={...e.generationConfig??{}};return(o.modalities===void 0||_o(e.id))&&(o.modalities=te(e.id)),{...e,authType:n,name:e.name||e.id,baseUrl:e.baseUrl||this.getDefaultBaseUrl(n),generationConfig:o,capabilities:e.capabilities||{}}}validateModelConfig(e,n){if(!e.id)throw new Error(`Model config in authType '${n}' missing required field: id`)}reloadModels(e){for(let n of this.modelsByAuthType.keys())n!=="matilda-oauth"&&this.modelsByAuthType.delete(n);if(e)for(let[n,o]of Object.entries(e)){let i=on(n);if(!i){nt.warn(`Invalid authType key "${n}" in modelProviders config. Expected one of: ${Object.values(G).join(", ")}. Skipping.`);continue}i!=="matilda-oauth"&&this.registerAuthTypeModels(i,o)}}};export{$e as a,Ot as b,ge as c,$t as d,wn as e,Q as f,ni as g,te as h,ye as i,ri as j,Te as k,di as l,ci as m,Me as n,ui as o,rn as p,xe as q,Yt as r,Qt as s,N as t,fo as u,ho as v,Or as w,Lr as x,et as y,Ur as z,Co as A,Dr as B,G as C,vo as D,nn as E,zr as F,Hr as G};
|
|
12
|
+
/**
|
|
13
|
+
* @license
|
|
14
|
+
* Copyright 2025 Matilda
|
|
15
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* @license
|
|
19
|
+
* Copyright 2025 Google LLC
|
|
20
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* @license
|
|
24
|
+
* Copyright 2025 Matilda Team
|
|
25
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* @license
|
|
29
|
+
* Copyright 2026 Matilda Team
|
|
30
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* @license
|
|
34
|
+
* Copyright 2026 Maincode
|
|
35
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
36
|
+
*
|
|
37
|
+
* Low-level OAuth primitives for core-auth's unified `/api/auth/oauth/*` flow
|
|
38
|
+
* (ADR-029): PKCE pair generation, RFC 8414 discovery, the RFC 8628 device
|
|
39
|
+
* grant, and refresh. Vendored (as source) from matilda-core's
|
|
40
|
+
* `packages/client-sdk/src/auth.ts` and extended to carry the `id_token`
|
|
41
|
+
* (display identity) that the higher-level flows need. Node built-ins only —
|
|
42
|
+
* no third-party runtime dependencies.
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* @license
|
|
46
|
+
* Copyright 2026 Maincode
|
|
47
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
48
|
+
*
|
|
49
|
+
* File-backed token store + cross-process lock. The store persists a JSON map
|
|
50
|
+
* (`{ [key]: value }`) at 0600 so callers can key several credentials in one
|
|
51
|
+
* file; the lock is an O_EXCL lockfile that serialises refreshes across
|
|
52
|
+
* processes (the guarantee a plaintext read/modify/write can't give).
|
|
53
|
+
*/
|
|
54
|
+
/**
|
|
55
|
+
* @license
|
|
56
|
+
* Copyright 2026 Maincode
|
|
57
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
58
|
+
*
|
|
59
|
+
* Hardened access-token manager: returns a valid access token, refreshing via
|
|
60
|
+
* core-auth's token endpoint when expired or forced. Single-flight within the
|
|
61
|
+
* process, serialised across processes by the store's lock, carries a prior
|
|
62
|
+
* refresh token forward when the response omits one, and evicts on a terminal
|
|
63
|
+
* `invalid_grant` so a dead session doesn't wedge the caller in a refresh loop.
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* @license
|
|
67
|
+
* Copyright 2026 Maincode
|
|
68
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
69
|
+
*
|
|
70
|
+
* Browser login orchestration: PKCE + a loopback capture server, driven off
|
|
71
|
+
* discovery metadata. Unlike a bare loopback helper, this emits lifecycle
|
|
72
|
+
* events for a UI, honours an AbortSignal, and — instead of serving its own
|
|
73
|
+
* HTML — 302-redirects the browser to an app-owned branded landing
|
|
74
|
+
* (`successRedirect`). Returns a TokenSet including the `id_token`.
|
|
75
|
+
*/
|
|
76
|
+
/**
|
|
77
|
+
* @license
|
|
78
|
+
* Copyright 2026 Maincode
|
|
79
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
80
|
+
*
|
|
81
|
+
* Node auth surface for `@maincode-ai/matilda-client-sdk/auth/node`.
|
|
82
|
+
* Re-exports the OAuth primitives plus the higher-level login flow, file token
|
|
83
|
+
* store, and hardened token manager that the CLI (`packages/core`) and the
|
|
84
|
+
* Electron desktop app consume.
|
|
85
|
+
*/
|
|
86
|
+
/**
|
|
87
|
+
* @license
|
|
88
|
+
* Copyright 2026 Maincode
|
|
89
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
90
|
+
*
|
|
91
|
+
* Matilda account auth for the CLI, backed by the shared client SDK.
|
|
92
|
+
*
|
|
93
|
+
* The OAuth dance (PKCE, loopback capture, code exchange, refresh, cross-process
|
|
94
|
+
* token locking) is owned by `@maincode-ai/matilda-client-sdk/auth/node` — the
|
|
95
|
+
* auth team's tested implementation of ADR-029's unified `/api/auth/oauth/*`
|
|
96
|
+
* flow. This module keeps ONLY the CLI-specific concerns: which endpoint, the
|
|
97
|
+
* on-disk credential shape the rest of the CLI already reads, and surfacing the
|
|
98
|
+
* authorize URL to the Ink UI. No PKCE crypto, no loopback server, no token
|
|
99
|
+
* exchange lives here anymore (replaced the 391-line hand-rolled beta that hit
|
|
100
|
+
* the divergent `/api/auth/cli/*` endpoints and stored tokens in plaintext).
|
|
101
|
+
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{Oe as X,Qe as H,Zh as K}from"./chunk-
|
|
3
|
+
import{Oe as X,Qe as H,Zh as K}from"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import{i as S}from"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import{g as B,i as G}from"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import{b as d}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";d();d();d();import{homedir as ye}from"node:os";d();import{join as I}from"node:path";import{homedir as R}from"node:os";var l="0.5.2",ue="https://matilda.maincode.com/assets/computer-use",me="https://github.com/trycua/cua/releases/download";function E(e=process.platform,t=process.arch,o=l){let r=o;if(e==="darwin"){let n=`cua-driver-rs-${r}-${t==="arm64"?"darwin-arm64":"darwin-x86_64"}`;return{asset:`${n}.tar.gz`,extractDir:n,binaryRelPath:"CuaDriver.app/Contents/MacOS/cua-driver",hasApp:!0}}if(e==="linux"){if(t!=="x64")throw new Error(`Computer Use: unsupported Linux arch '${t}' (only x64).`);return{asset:`cua-driver-rs-${r}-linux-x86_64-binary.tar.gz`,extractDir:".",binaryRelPath:"cua-driver",hasApp:!1}}if(e==="win32"){let n=`cua-driver-rs-${r}-${t==="arm64"?"windows-arm64":"windows-x86_64"}`;return{asset:`${n}.zip`,extractDir:n,binaryRelPath:"cua-driver.exe",hasApp:!1}}throw new Error(`Computer Use: unsupported platform '${e}'.`)}function U(e,t=process.env,o=l){let r=[],i=t.MATILDA_COMPUTER_USE_DOWNLOAD_HOST;return i&&r.push(`${ge(i)}/cua-driver-rs/v${o}/${e}`),r.push(`${ue}/cua-driver-rs/v${o}/${e}`),r.push(`${me}/cua-driver-rs-v${o}/${e}`),r}function J(e=process.env,t=l){return U("checksums.txt",e,t)}var he="MATILDA_COMPUTER_USE_MAX_IMAGE_DIMENSION";function V(e){if(e===void 0||typeof e=="string"&&e.trim()==="")return;let t=typeof e=="number"?e:Number(e);if(!(!Number.isInteger(t)||t<0))return t}function Y(e,t=process.env){let o=V(t[he]);return o!==void 0?o:V(e)}function fe(e=R()){return I(e,".matilda","computer-use")}function N(e=R(),t=l){return I(fe(e),`cua-driver-rs-${t}`)}function u(e=R(),t=process.platform,o=process.arch,r=l){let i=E(t,o,r);return I(N(e,r),i.extractDir,i.binaryRelPath)}function h(e=l){return`cua-driver-rs@${e}`}function ge(e){return e.endsWith("/")?e.slice(0,-1):e}var f=class e{static singleton;binary;onProgress;maxImageDimension;client;startPromise;constructor(t){this.binary=t.binary,this.onProgress=t.onProgress??(()=>{}),this.maxImageDimension=t.maxImageDimension}setMaxImageDimension(t){this.maxImageDimension=t}static shared(){return e.singleton||(e.singleton=new e({binary:u(ye())})),e.singleton}static setSharedForTest(t){e.singleton=t}isStarted(){return this.client!==void 0}async start(t){if(!this.client)return this.startPromise?this.startPromise:(this.startPromise=this.doStart(t).finally(()=>{this.startPromise=void 0}),this.startPromise)}async doStart(t){let o=t??this.onProgress;o("Starting Computer Use driver...");let r=new H({command:this.binary,args:["mcp"],env:{...process.env}}),i=new X({name:"matilda-code-computer-use",version:"1.0.0"},{capabilities:{}});await i.connect(r),this.client=i,await this.applyRuntimeConfig(i,o)}async applyRuntimeConfig(t,o){if(this.maxImageDimension!==void 0)try{await t.callTool({name:"set_config",arguments:{max_image_dimension:this.maxImageDimension}})}catch(r){let i=r instanceof Error?r.message:String(r);o(`Computer Use: could not apply max_image_dimension=${this.maxImageDimension} (${i}); using driver default.`)}}async listTools(){if(!this.client)throw new Error("ComputerUseClient not started");return this.client.listTools()}async callTool(t,o){if(!this.client)throw new Error("ComputerUseClient not started");try{return await this.client.callTool({name:t,arguments:o})}catch(r){if(!Q(r))throw r;let i=r;for(let n=0;n<3;n++){if(await this.stop(),await this.start(),!this.client)throw new Error("ComputerUseClient reconnect failed");try{return await this.client.callTool({name:t,arguments:o})}catch(s){if(!Q(s))throw s;i=s,await new Promise(a=>setTimeout(a,1e3))}}throw i}}async stop(){let t=this.client;if(this.client=void 0,t)try{await t.close()}catch{}}};function Q(e){let t=e instanceof Error?e.message:String(e);return/connection closed|not connected|connection refused|daemon transport error|os error 61/i.test(t)}d();var M=["bring_to_front","check_for_update","check_permissions","click","double_click","drag","end_session","get_accessibility_tree","get_agent_cursor_state","get_config","get_cursor_position","get_recording_state","get_screen_size","get_window_state","hotkey","kill_app","launch_app","list_apps","list_windows","move_cursor","page","press_key","replay_trajectory","right_click","scroll","set_agent_cursor_enabled","set_agent_cursor_motion","set_agent_cursor_style","set_config","set_value","start_recording","start_session","stop_recording","type_text","zoom"],g={bring_to_front:{description:'Activate a window so subsequent input tools with `dispatch:"foreground"` land on it without a per-call SetForegroundWindow flash. **Windows-only:** on macOS this tool returns an error pointing to the platform-native `NSRunningApplication.activate` (which the macOS input tools don\'t need because CGEvent.postToPid reaches backgrounded windows). On Linux this tool also stubs out; use `wmctrl -a` or `xdotool windowactivate` if you need explicit activation.',parameterSchema:{additionalProperties:!1,properties:{pid:{type:"integer"},window_id:{type:"integer"}},required:["pid"],type:"object"}},check_for_update:{description:"Check whether a newer cua-driver-rs release is available on GitHub. Returns the current and latest versions, an `update_available` boolean, the install one-liner, and the release notes URL. Read-only \u2014 never installs. Mirror of `cua-driver check-update --json`.",parameterSchema:{additionalProperties:!1,properties:{},type:"object"}},check_permissions:{description:"Report TCC permission status for Accessibility and Screen Recording. By default also raises the system permission dialogs for any missing grants \u2014 Apple's request APIs are no-ops when the grant is already active, so this is safe to call repeatedly. Pass {\"prompt\": false} for a purely read-only status check.\n\nReturns: `accessibility` + `screen_recording` (booleans from the TCC preflight APIs), `screen_recording_capturable` (a live ScreenCaptureKit probe \u2014 if it disagrees with `screen_recording`, the preflight grant belongs to a different process), and `source` (which TCC identity the booleans reflect: the CuaDriver daemon vs the launching terminal/IDE). macOS attributes grants to the responsible process, so a standalone call from a terminal reports the terminal's grants, not the driver's.",parameterSchema:{additionalProperties:!1,properties:{prompt:{description:"Raise the system permission prompts for missing grants. Default true.",type:"boolean"}},type:"object"}},click:{description:`Left-click against a target pid. **Prefer \`element_index\` over pixel coordinates** \u2014 element_index works on backgrounded / minimized / hidden / off-Space windows, surfaces a stable handle that survives rebuilds, and tells you what you're clicking via the cached element's role + label. Reach for \`x, y\` only when the target is a canvas / video / WebGL / custom-drawn surface that doesn't appear in the AX tree.
|
|
4
4
|
|
|
5
5
|
Two addressing modes:
|
|
6
6
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{c as a,d as b,e as c}from"./chunk-
|
|
3
|
+
import{c as a,d as b,e as c}from"./chunk-JFICDNCB.js";import"./chunk-2JIJ6PFL.js";import"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";export{a as collectContextData,c as contextCommand,b as formatContextUsageText};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Force strict mode and setup for ESM
|
|
2
|
+
"use strict";
|
|
3
|
+
import{a as V}from"./chunk-OCXGNAAT.js";import{a as X}from"./chunk-I55PXD4N.js";import{Kd as P,Ld as j,Ob as W,Sd as z,de as B,ee as y,ja as S,ke as q,le as G,oe as H}from"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import{Lb as $,Oa as M,_c as k,ca as O,ha as b,wc as F}from"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import{w as U}from"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import{i as R,p as x,q as A}from"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import{A as C,C as L,Y as v,a as w,z as _}from"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import{b as E}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";E();import*as m from"node:fs";import*as g from"node:path";E();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":" "};function D(i){if(i==="")return i;let t="";for(let e of i)t+=re[e]??e;return t}var oe=[i=>i,i=>i.trimEnd()];function le(i){return D(i).trimEnd()}function K(i,t,e){if(t.length===0)return 0;if(t.length>i.length)return null;e:for(let n=0;n<=i.length-t.length;n++){for(let r=0;r<t.length;r++)if(e(i[n+r])!==e(t[r]))continue e;return n}return null}function se(i){let t=i.split(`
|
|
4
|
+
`),e=new Array(t.length+1),n=0;for(let r=0;r<t.length;r++)e[r]=n,n+=t[r].length,r<t.length-1&&(n+=1);return e[t.length]=i.length,{lines:t,offsets:e}}function Q(i,t,e,n,r,l){if(r===0)return l?`
|
|
5
|
+
`:"";let a=t[n]??0,s=n+r-1,f=(t[s]??0)+(e[s]?.length??0);if(l){let d=t[n+r];d!==void 0?f=d:i.endsWith(`
|
|
6
|
+
`)&&(f=i.length)}return i.slice(a,f)}function ae(i,t){let{lines:e,offsets:n}=se(i),r=t.split(`
|
|
7
|
+
`),l=t.endsWith(`
|
|
8
|
+
`);if(r.length===0)return null;let a=c=>{for(let f of oe){let d=K(e,c,f);if(d!==null)return d}return K(e,c,le)},s=a(r);if(s!==null)return{slice:Q(i,n,e,s,r.length,l),removedTrailingFinalEmptyLine:!1};if(r.at(-1)===""){let c=r.slice(0,-1);if(c.length===0)return null;if(s=a(c),s!==null)return{slice:Q(i,n,e,s,c.length,!1),removedTrailingFinalEmptyLine:!0}}return null}function ce(i,t){if(t==="")return null;let e=i.indexOf(t);if(e!==-1)return{slice:i.slice(e,e+t.length),removedTrailingFinalEmptyLine:!1};let n=D(i),r=D(t),l=n.indexOf(r);return l!==-1?{slice:i.slice(l,l+t.length),removedTrailingFinalEmptyLine:!1}:ae(i,t)}function fe(i){return i.endsWith(`\r
|
|
9
|
+
`)?i.slice(0,-2):i.endsWith(`
|
|
10
|
+
`)||i.endsWith("\r")?i.slice(0,-1):i}function de(i,t){return t?fe(i):i}function J(i,t,e){if(i===null||t==="")return{oldString:t,newString:e};let n=ce(i,t);return n!==null?{oldString:n.slice,newString:de(e,n.removedTrailingFinalEmptyLine)}:{oldString:t,newString:e}}function Z(i,t,e){if(i===null||t===""||e!==""||t.endsWith(`
|
|
11
|
+
`))return t;let n=`${t}
|
|
12
|
+
`;return i.includes(n)?n:t}function ee(i,t){if(t==="")return 0;let e=0,n=i.indexOf(t);for(;n!==-1;)e++,n=i.indexOf(t,n+t.length);return e}var Y=4,ge=1e3;function te(i,t){let e=t.split(`
|
|
13
|
+
`),n=e.length;if(i===null)return{startLine:1,endLine:n,totalLines:n,content:t};if(i===t||!t)return null;let r=i.split(`
|
|
14
|
+
`),l=0,a=Math.min(r.length,e.length);for(;l<a&&r[l]===e[l];)l++;let s=r.length-1,c=e.length-1;for(;s>=l&&c>=l&&r[s]===e[c];)s--,c--;let f=l+1,d=c+1;if(d-f>ge)return null;let h=Math.max(1,f-Y),p=Math.min(n,d+Y),u=e.slice(h-1,p);return{startLine:h,endLine:p,totalLines:n,content:u.join(`
|
|
15
|
+
`)}}var ne=v("EDIT_PRIOR_READ");function ie(i,t,e,n){return n?e:i===null?t===""?e:"":t===""&&!n?i:z(i,t,e)}var ue=["filePath","filepath","path","file","filename"],pe=["oldString","oldText","old_text","previous_string","previousString"],he=["newString","newText","new_text","content"];function me(i){if(!(typeof i.file_path=="string"&&i.file_path.trim()))for(let t of ue){let e=i[t];if(typeof e=="string"&&e.trim()){i.file_path=e,delete i[t];break}}if(i.old_string===void 0||i.old_string===null){for(let t of pe)if(i[t]!==void 0&&i[t]!==null){i.old_string=i[t],delete i[t];break}}if(i.new_string===void 0||i.new_string===null){for(let t of he)if(i[t]!==void 0&&i[t]!==null){i.new_string=i[t],delete i[t];break}}(i.old_string===void 0||i.old_string===null)&&typeof i.new_string=="string"&&typeof i.file_path=="string"&&i.file_path.trim()&&(i.old_string="",i.full_file_replace=!0)}var N=class{constructor(t,e){this.config=t;this.params=e}toolLocations(){return[{path:this.params.file_path}]}async calculateEdit(t){let e=t.replace_all??!1,n=null,r=await b(t.file_path),l=!1,a=t.new_string,s=t.old_string,c=0,f,d=!1,h="utf-8",p="lf";if(!this.config.getFileReadCacheDisabled()){let o=await y(this.config.getFileReadCache(),t.file_path,"editing");if(!o.ok)return{currentContent:null,newContent:"",occurrences:0,error:{display:o.displayMessage,raw:o.rawMessage,type:o.type},isNewFile:!1,encoding:"utf-8",bom:!1,lineEnding:"lf"}}if(r)try{let o=await this.config.getFileSystemService().readTextFile({path:t.file_path});o._meta?.bom!==void 0?d=o._meta.bom:d=o.content.length>0&&o.content.codePointAt(0)===65279,h=o._meta?.encoding||"utf-8",p=H(o.content),n=o.content.replace(/\r\n/g,`
|
|
16
|
+
`),r=!0}catch(o){if(!w(o)||o.code!=="ENOENT")throw o;r=!1}if(r&&!this.config.getFileReadCacheDisabled()){let o=await y(this.config.getFileReadCache(),t.file_path,"editing",{expectExisting:!0});if(!o.ok)return ne.warn("post-read TOCTOU rejection",{path:t.file_path,reason:o.type}),{currentContent:null,newContent:"",occurrences:0,error:{display:o.displayMessage,raw:o.rawMessage,type:o.type},isNewFile:!1,encoding:"utf-8",bom:!1,lineEnding:"lf"}}if(t.full_file_replace)l=!r,r&&n!==null?(c=1,s=n,a=t.new_string):r||(s="",a=t.new_string);else{let o=J(n,s,a);s=o.oldString,a=o.newString,s===""&&!r?l=!0:r?n!==null?(s=Z(n,s,a),c=ee(n,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"}:c===0?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. The exact text in old_string was not found. Ensure you're not escaping content incorrectly and check whitespace, indentation, and context. Use ${F.Name} tool to verify.`,type:"edit_no_occurrence_found"}:!e&&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===a&&(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"})):f={display:"Failed to read content of file.",raw:`Failed to read content of existing file: ${t.file_path}`,type:"read_content_failure"}: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"}}let u=f?n??"":t.full_file_replace?t.new_string:ie(n,s,a,l);return!f&&r&&n===u&&(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:n,newContent:u,occurrences:c,error:f,isNewFile:l,bom:d,encoding:h,lineEnding:p}}async getDefaultPermission(){let t=this.config.getProjectRoot();return U(g.resolve(this.params.file_path),t)?"allow":"ask"}async getConfirmationDetails(t){let e;try{e=await this.calculateEdit(this.params)}catch(a){if(t.aborted)throw a;let s=a instanceof Error?a.message:String(a);throw new Error(`Error preparing edit: ${s}`)}if(e.error)throw new B(e.error.raw,e.error.type);let n=g.basename(this.params.file_path),r=S(n,e.currentContent??"",e.newContent,"Current","Proposed",P);return{type:"edit",title:`Confirm Edit: ${_(C(this.params.file_path,this.config.getTargetDir()))}`,fileName:n,filePath:this.params.file_path,fileDiff:r,originalContent:e.currentContent,newContent:e.newContent,onConfirm:async a=>{a==="proceed_always"&&this.config.setApprovalMode("auto-edit")}}}getDescription(){let t=C(this.params.file_path,this.config.getTargetDir());return this.params.old_string===""?`Create ${_(t)}`:this.params.old_string===this.params.new_string?`No file changes to ${_(t)}`:_(t)}async execute(t){let e;try{e=await this.calculateEdit(this.params)}catch(n){if(t.aborted)throw n;let r=n instanceof Error?n.message:String(n);return{llmContent:`Error preparing edit: ${r}`,returnDisplay:`Error preparing edit: ${r}`,error:{message:r,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 o=await y(this.config.getFileReadCache(),this.params.file_path,"editing",{expectExisting:!e.isNewFile});if(!o.ok)return ne.warn("pre-write TOCTOU rejection",{path:this.params.file_path,reason:o.type}),{llmContent:o.rawMessage,returnDisplay:`Error: ${o.displayMessage}`,error:{message:o.rawMessage,type:o.type}}}if(this.ensureParentDirectoriesExist(this.params.file_path),e.isNewFile){let o=this.config.getDefaultFileEncoding(),T=!1;o===q.UTF8_BOM?T=!0:o===void 0&&(T=G(this.params.file_path)),await this.config.getFileSystemService().writeTextFile({path:this.params.file_path,content:e.newContent,_meta:{bom:T}})}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||W.getInstance().recordEdit(this.params.file_path,e.currentContent,e.newContent);try{let o=m.statSync(this.params.file_path);this.config.getFileReadCache().recordWrite(this.params.file_path,o)}catch{}let n=g.basename(this.params.file_path),r=this.params.ai_proposed_content||e.newContent,l=j(n,e.currentContent??"",r,e.newContent),s={fileDiff:S(n,e.currentContent??"",e.newContent,"Current","Proposed",P),fileName:n,originalContent:e.currentContent,newContent:e.newContent,diffStat:l},c=O(this.params.file_path),f=M(this.params.file_path),d=g.extname(this.params.file_path),h=e.isNewFile?"create":"update";$(this.config,new k(I.Name,h,e.newContent.split(`
|
|
17
|
+
`).length,c,d,f));let p=[e.isNewFile?`Created new file: ${this.params.file_path} with provided content.`:`The file: ${this.params.file_path} has been updated.`],u=te(e.currentContent,e.newContent);if(u){let o=`Showing lines ${u.startLine}-${u.endLine} of ${u.totalLines} from the edited file:
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
${u.content}`;p.push(o)}try{let o=await X(this.config,this.params.file_path);o&&p.push(`
|
|
22
|
+
|
|
23
|
+
${o}`)}catch{}return{llmContent:p.join(" "),returnDisplay:s}}catch(n){let r=n instanceof Error?n.message:String(n);return{llmContent:`Error executing edit: ${r}`,returnDisplay:`Error writing file: ${r}`,error:{message:r,type:"file_write_failure"}}}}ensureParentDirectoriesExist(t){let e=g.dirname(t);m.existsSync(e)||m.mkdirSync(e,{recursive:!0})}},I=class i extends R{constructor(e){super(i.Name,A.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 ${F.Name} tool to examine the file's current content before attempting a text replacement.
|
|
24
|
+
|
|
25
|
+
The user has the ability to modify the \`new_string\` content. If modified, this will be stated in the response.
|
|
26
|
+
|
|
27
|
+
Expectation for required parameters:
|
|
28
|
+
1. \`file_path\` MUST be an absolute path; otherwise an error will be thrown.
|
|
29
|
+
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 \`${x.WRITE_FILE}\`; if you omit \`old_string\` and only pass \`new_string\`, the tool overwrites the entire file.
|
|
30
|
+
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.
|
|
31
|
+
4. NEVER escape \`old_string\` or \`new_string\`, that would break the exact literal text requirement.
|
|
32
|
+
**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.
|
|
33
|
+
**Multiple replacements:** Set \`replace_all\` to true when you want to replace every occurrence that matches \`old_string\`.
|
|
34
|
+
**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=e}static Name=x.EDIT;validateToolParams(e){return me(e),super.validateToolParams(e)}validateToolParamValues(e){if(e.file_path=L(e.file_path.trim()),!e.file_path)return"The 'file_path' parameter must be non-empty.";if(!g.isAbsolute(e.file_path))return`File path must be absolute: ${e.file_path}`;if(typeof e.new_string!="string")return"The 'new_string' parameter must be a string.";let n=V(this.config,e.file_path);return n||null}createInvocation(e){return new N(this.config,e)}toAutoClassifierInput(e){let n=e.old_string??"",r=e.new_string??"";return{file_path:e.file_path,old_string_preview:n.slice(0,300),new_string_preview:r.slice(0,300),old_string_truncated:n.length>300,new_string_truncated:r.length>300,lines_changed:(r.match(/\n/g)?.length??0)-(n.match(/\n/g)?.length??0)}}getModifyContext(e){return{getFilePath:n=>n.file_path,getCurrentContent:async n=>{if(await b(n.file_path))try{let{content:l}=await this.config.getFileSystemService().readTextFile({path:n.file_path});return l}catch(l){if(!w(l)||l.code!=="ENOENT")throw l;return""}else return""},getProposedContent:async n=>{if(n.full_file_replace)return n.new_string;if(m.existsSync(n.file_path))try{let{content:r}=await this.config.getFileSystemService().readTextFile({path:n.file_path});return ie(r,n.old_string,n.new_string,n.old_string===""&&r==="")}catch(r){if(!w(r)||r.code!=="ENOENT")throw r;return""}else return""},createUpdatedParams:(n,r,l)=>({...l,ai_proposed_content:n,old_string:n,new_string:r,modified_by_user:!0})}}};export{I as EditTool,ie as applyReplacement,me as normalizeEditToolParams};
|
|
35
|
+
/**
|
|
36
|
+
* @license
|
|
37
|
+
* Copyright 2025 Google LLC
|
|
38
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
39
|
+
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{ej as T,kf as W,sf as s}from"./chunk-
|
|
3
|
+
import{ej as T,kf as W,sf as s}from"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import{g as $,i as E,p as m,q as R}from"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import{Y as b}from"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import{b as y}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";y();var o=b("ENTER_WORKTREE"),P=`Creates an isolated git worktree at \`<projectRoot>/.matilda/worktrees/<slug>\` and returns its absolute path so subsequent file edits, shell commands, and other tools can operate inside it.
|
|
4
4
|
|
|
5
5
|
## When to Use
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{I as r}from"./chunk-
|
|
3
|
+
import{I as r}from"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import{g as m,i as u,p as d,q as c}from"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import{Y as p}from"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import{b as l}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";l();var y=p("ENTER_PLAN_MODE"),g=`Use this tool to lower into plan mode before doing uncertain or complex work. Entering plan mode is a privilege reduction, so it does not require user confirmation.
|
|
4
4
|
|
|
5
5
|
## When to Use This Tool
|
|
6
6
|
Use this tool when the task is not yet clear enough to safely execute, for example when it requires multi-file changes, design choices, investigation before a plan can be summarized, or when requirements are ambiguous. While investigating, if complexity rises or you find yourself repeatedly needing to ask the user, enter plan mode and consolidate a plan.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{dj as C,fj as x,if as k,lf as W,sf as l}from"./chunk-
|
|
3
|
+
import{dj as C,fj as x,if as k,lf as W,sf as l}from"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import{g as E,i as R,p as c,q as T}from"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import{Y as b,a as $}from"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import{b as y}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";y();import*as S from"node:fs/promises";var h=b("EXIT_WORKTREE"),O=`Exits a worktree previously created by ${c.ENTER_WORKTREE}.
|
|
4
4
|
|
|
5
5
|
## Behavior
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{a as k}from"./chunk-ILBTI4K5.js";import{Df as $,I as w,_e as M}from"./chunk-
|
|
3
|
+
import{a as k}from"./chunk-ILBTI4K5.js";import{Df as $,I as w,_e as M}from"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import{g as G,i as R,p as T,q as _}from"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import{Y as f}from"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import{b as h}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";h();h();h();var E=f("GATE_REVIEW_AGENTS");function L(n){return`You are a Plan Design Reviewer for the Plan Approval Gate. Review the plan across three dimensions:
|
|
4
4
|
|
|
5
5
|
1. **Request Fit** \u2014 Does the plan fulfill every part of the user's original request and respect all explicit constraints? Does it do anything the user explicitly asked NOT to do?
|
|
6
6
|
2. **System Fit** \u2014 Does the plan align with the codebase structure, file paths, function names, permission model, and integration boundaries found during investigation?
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{a as g}from"./chunk-EMWHQSMS.js";import{g as u}from"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import{f as d}from"./chunk-XJDC3ZQZ.js";import"./chunk-IOCF4XSR.js";import"./chunk-QWBNNEV2.js";import"./chunk-FWDMPRKU.js";import{b as m}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";m();m();var p=class{googleGenAI;contentGeneratorConfig;constructor(e,t){let r=t?.customHeaders,n=r?(()=>{let i=e.httpOptions,s=i?.headers??{},l=Object.fromEntries(Object.entries(r).filter(([a])=>!d(a)));return{...e,httpOptions:{...i??{},headers:{...s,...l}}}})():e;this.googleGenAI=new u(n),this.contentGeneratorConfig=t}buildGenerateContentConfig(e){let t=this.contentGeneratorConfig?.samplingParams,r=e.config||{},n=(i,s,l)=>{let a=r[s];return i!==void 0?i:a!==void 0?a:l};return{...r,temperature:n(t?.temperature,"temperature",1),topP:n(t?.top_p,"topP",.95),topK:n(t?.top_k,"topK",64),maxOutputTokens:n(t?.max_tokens,"maxOutputTokens"),presencePenalty:n(t?.presence_penalty,"presencePenalty"),frequencyPenalty:n(t?.frequency_penalty,"frequencyPenalty"),thinkingConfig:n(this.buildThinkingConfig(),"thinkingConfig",{includeThoughts:!0,thinkingLevel:"THINKING_LEVEL_UNSPECIFIED"})}}buildThinkingConfig(){let e=this.contentGeneratorConfig?.reasoning;if(e===!1)return{includeThoughts:!1};if(e)return{includeThoughts:!0,thinkingLevel:e.effort==="low"?"LOW":e.effort==="high"||e.effort==="max"?"HIGH":"THINKING_LEVEL_UNSPECIFIED"}}async generateContent(e,t){let r={...e,contents:this.stripUnsupportedFields(e.contents),config:this.buildGenerateContentConfig(e)};return this.googleGenAI.models.generateContent(r)}async generateContentStream(e,t){let r={...e,contents:this.stripUnsupportedFields(e.contents),config:this.buildGenerateContentConfig(e)};return this.googleGenAI.models.generateContentStream(r)}stripUnsupportedFields(e){return!e||typeof e=="string"?e:Array.isArray(e)?e.map(t=>this.stripContentFields(t)):this.stripContentFields(e)}stripContentFields(e){if(typeof e=="string")return e;if(!("role"in e)&&!("parts"in e))return this.stripPartFields(e);let t=e;return t.parts?{...t,parts:t.parts.map(r=>this.stripPartFields(r))}:t}stripPartFields(e){if(typeof e=="string")return e;let t={...e};if(t.inlineData){let{displayName:r,...n}=t.inlineData;t.inlineData=n}if(t.fileData){let{displayName:r,...n}=t.fileData;t.fileData=n}if(t.functionResponse?.parts){let r=t.functionResponse.parts.map(n=>{let i=this.convertUnsupportedMediaToText(n);return this.stripPartFields(i)});t.functionResponse={...t.functionResponse,parts:r}}return t}convertUnsupportedMediaToText(e){if(typeof e=="string")return e;let t=e.inlineData?.mimeType||"",r=e.fileData?.mimeType||"";if(t.startsWith("audio/")||t.startsWith("video/")){let n=e.inlineData?.displayName,i=n?` (${n})`:"";return{text:`Unsupported media type for Gemini: ${t}${i}.`}}if(r.startsWith("audio/")||r.startsWith("video/")){let n=e.fileData?.displayName,i=n?` (${n})`:"";return{text:`Unsupported media type for Gemini: ${r}${i}.`}}return e}async countTokens(e){return this.googleGenAI.models.countTokens(e)}async embedContent(e){return this.googleGenAI.models.embedContent(e)}useSummarizedThinking(){return!0}};function T(o,e){let i={...{"User-Agent":o.userAgent||`MatildaCode/0.20.
|
|
3
|
+
import{a as g}from"./chunk-EMWHQSMS.js";import{g as u}from"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import{f as d}from"./chunk-XJDC3ZQZ.js";import"./chunk-IOCF4XSR.js";import"./chunk-QWBNNEV2.js";import"./chunk-FWDMPRKU.js";import{b as m}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";m();m();var p=class{googleGenAI;contentGeneratorConfig;constructor(e,t){let r=t?.customHeaders,n=r?(()=>{let i=e.httpOptions,s=i?.headers??{},l=Object.fromEntries(Object.entries(r).filter(([a])=>!d(a)));return{...e,httpOptions:{...i??{},headers:{...s,...l}}}})():e;this.googleGenAI=new u(n),this.contentGeneratorConfig=t}buildGenerateContentConfig(e){let t=this.contentGeneratorConfig?.samplingParams,r=e.config||{},n=(i,s,l)=>{let a=r[s];return i!==void 0?i:a!==void 0?a:l};return{...r,temperature:n(t?.temperature,"temperature",1),topP:n(t?.top_p,"topP",.95),topK:n(t?.top_k,"topK",64),maxOutputTokens:n(t?.max_tokens,"maxOutputTokens"),presencePenalty:n(t?.presence_penalty,"presencePenalty"),frequencyPenalty:n(t?.frequency_penalty,"frequencyPenalty"),thinkingConfig:n(this.buildThinkingConfig(),"thinkingConfig",{includeThoughts:!0,thinkingLevel:"THINKING_LEVEL_UNSPECIFIED"})}}buildThinkingConfig(){let e=this.contentGeneratorConfig?.reasoning;if(e===!1)return{includeThoughts:!1};if(e)return{includeThoughts:!0,thinkingLevel:e.effort==="low"?"LOW":e.effort==="high"||e.effort==="max"?"HIGH":"THINKING_LEVEL_UNSPECIFIED"}}async generateContent(e,t){let r={...e,contents:this.stripUnsupportedFields(e.contents),config:this.buildGenerateContentConfig(e)};return this.googleGenAI.models.generateContent(r)}async generateContentStream(e,t){let r={...e,contents:this.stripUnsupportedFields(e.contents),config:this.buildGenerateContentConfig(e)};return this.googleGenAI.models.generateContentStream(r)}stripUnsupportedFields(e){return!e||typeof e=="string"?e:Array.isArray(e)?e.map(t=>this.stripContentFields(t)):this.stripContentFields(e)}stripContentFields(e){if(typeof e=="string")return e;if(!("role"in e)&&!("parts"in e))return this.stripPartFields(e);let t=e;return t.parts?{...t,parts:t.parts.map(r=>this.stripPartFields(r))}:t}stripPartFields(e){if(typeof e=="string")return e;let t={...e};if(t.inlineData){let{displayName:r,...n}=t.inlineData;t.inlineData=n}if(t.fileData){let{displayName:r,...n}=t.fileData;t.fileData=n}if(t.functionResponse?.parts){let r=t.functionResponse.parts.map(n=>{let i=this.convertUnsupportedMediaToText(n);return this.stripPartFields(i)});t.functionResponse={...t.functionResponse,parts:r}}return t}convertUnsupportedMediaToText(e){if(typeof e=="string")return e;let t=e.inlineData?.mimeType||"",r=e.fileData?.mimeType||"";if(t.startsWith("audio/")||t.startsWith("video/")){let n=e.inlineData?.displayName,i=n?` (${n})`:"";return{text:`Unsupported media type for Gemini: ${t}${i}.`}}if(r.startsWith("audio/")||r.startsWith("video/")){let n=e.fileData?.displayName,i=n?` (${n})`:"";return{text:`Unsupported media type for Gemini: ${r}${i}.`}}return e}async countTokens(e){return this.googleGenAI.models.countTokens(e)}async embedContent(e){return this.googleGenAI.models.embedContent(e)}useSummarizedThinking(){return!0}};function T(o,e){let i={...{"User-Agent":o.userAgent||`MatildaCode/0.20.9 (${process.platform}; ${process.arch})`}};if(e?.getUsageStatisticsEnabled()){let f=new g().getInstallationId();i={...i,"x-gemini-api-privileged-user-id":`${f}`}}let s=o.baseUrl?{headers:i,baseUrl:o.baseUrl}:{headers:i};return new p({apiKey:o.apiKey===""?void 0:o.apiKey,vertexai:o.vertexai,httpOptions:s},o)}export{p as GeminiContentGenerator,T as createGeminiContentGenerator};
|
|
4
4
|
/**
|
|
5
5
|
* @license
|
|
6
6
|
* Copyright 2025 Google LLC
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{he as _,ie as j}from"./chunk-
|
|
3
|
+
import{he as _,ie as j}from"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import{b as D}from"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import{g as k}from"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import{g as M,i as C,p as N,q as A}from"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import{C as $,F as O,J as v,Y as R,c as x}from"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import{b as L}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";L();import z from"node:fs";import T from"node:path";var V=R("GLOB"),Y=100,B=2e4,W=15e3,q=500;function K(u,g,t){let e=[...u];return e.sort((r,s)=>{let c=r.mtimeMs??0,a=s.mtimeMs??0,o=g-c<t,l=g-a<t;return o&&l?a-c:o?-1:l?1:r.fullpath().localeCompare(s.fullpath())}),e}var S=class extends M{constructor(t,e){super(e);this.config=t;this.fileService=t.getFileService()}fileService;getDescription(){let t=`'${this.params.pattern}'`;return this.params.path&&(t+=` in path '${this.params.path}'`),t}async getDefaultPermission(){if(!this.params.path)return"allow";let t=this.config.getWorkspaceContext(),e=T.resolve(this.config.getTargetDir(),this.params.path);return t.isPathWithinWorkspace(e)||O(k(),e)?"allow":"ask"}async globInDirectory(t,e,r){let s=e,c=T.join(t,s);z.existsSync(c)&&(s=_(s));let a=j(s,{cwd:t,withFileTypes:!0,nodir:!0,stat:!0,nocase:!0,dot:!0,ignore:this.config.getFileExclusions().getGlobExcludes(),follow:!1,signal:r}),o=[],l=Date.now(),p=null;for await(let n of a){if(o.push(n),o.length>=B){p="count";break}if(Date.now()-l>W){p="time";break}o.length%q===0&&await new Promise(b=>setImmediate(b))}p&&a.destroy?.();let d=this.config.getTargetDir(),P=o.map(n=>T.relative(d,n.fullpath())),{filteredPaths:m}=this.fileService.filterFilesWithReport(P,this.getFileFilteringOptions()),h=n=>process.platform==="win32"||process.platform==="darwin"?n.toLowerCase():n,f=new Set(m.map(n=>h(T.resolve(d,n))));return{entries:o.filter(n=>f.has(h(n.fullpath()))),limited:p}}async execute(t){try{let e=[],r;if(this.params.path){let i=v(this.config,this.params.path,{allowExternalPaths:!0});e.push(i),r=`within ${i}`}else{let i=this.config.getWorkspaceContext().getDirectories();e.push(...i),r=i.length>1?`across ${i.length} workspace directories`:"in the workspace directory"}let s=this.params.pattern,c=[],a=new Set,o=null;for(let i of e){let{entries:F,limited:E}=await this.globInDirectory(i,s,t);E&&(o=E);for(let G of F){let I=G.fullpath();a.has(I)||(a.add(I),c.push(G))}}let l=c,p=o==="time"?`
|
|
4
4
|
|
|
5
5
|
[Search stopped after ${W/1e3}s before scanning the whole tree. Results may be incomplete \u2014 narrow the search by passing a more specific 'path' or pattern.]`:o==="count"?`
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{$i as K,aa as q,aj as Y,ie as z,zc as F}from"./chunk-
|
|
3
|
+
import{$i as K,aa as q,aj as Y,ie as z,zc as F}from"./chunk-2D5W3WW7.js";import"./chunk-TZIDSCTF.js";import"./chunk-FUNLOUYI.js";import"./chunk-R3H6IWFK.js";import"./chunk-OMZ5SGMK.js";import"./chunk-GIIMOLLN.js";import"./chunk-RBG4ERTN.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-LQWORCPO.js";import"./chunk-TISQNFB5.js";import"./chunk-SS5WUOSJ.js";import"./chunk-47XR7IMP.js";import"./chunk-QEI3OETI.js";import"./chunk-QKYGQLWC.js";import"./chunk-MNGFXISD.js";import"./chunk-4R2OFVPK.js";import"./chunk-RNKDFE2S.js";import"./chunk-EMWHQSMS.js";import"./chunk-S4K76QPI.js";import"./chunk-OVZKSZIR.js";import"./chunk-4F4DA5UI.js";import"./chunk-DC7LAFZZ.js";import"./chunk-7VBRP4XQ.js";import"./chunk-XYA3SFGC.js";import"./chunk-4J6DC24J.js";import"./chunk-LJR4RZZ2.js";import"./chunk-U347OO7S.js";import"./chunk-XJDC3ZQZ.js";import"./chunk-CFBZKYFB.js";import"./chunk-WVY2P6WH.js";import"./chunk-UIRBHC5X.js";import{g as _}from"./chunk-UY2R3ZQ4.js";import"./chunk-NDR7ZFUA.js";import{g as U,i as V,p as H,q as J}from"./chunk-5U3A6KMU.js";import"./chunk-IMYUVCF7.js";import"./chunk-XKDGRW3K.js";import"./chunk-ESSYHTAZ.js";import"./chunk-3YLXGE6T.js";import"./chunk-IOCF4XSR.js";import{C as O,F as W,J as S,Y as j,a as I,c as P}from"./chunk-QWBNNEV2.js";import"./chunk-G7R2XEEF.js";import"./chunk-OA56BXPD.js";import"./chunk-FWDMPRKU.js";import{b as B}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";B();import tt from"node:fs/promises";import y from"node:path";import{EOL as et}from"node:os";import{spawn as X}from"node:child_process";var k=j("GREP"),M=class extends U{constructor(e,s){super(s);this.config=e;this.fileExclusions=e.getFileExclusions()}fileExclusions;async getDefaultPermission(){if(!this.params.path)return"allow";let e=this.config.getWorkspaceContext(),s=y.resolve(this.config.getTargetDir(),this.params.path);return e.isPathWithinWorkspace(s)||W(_(),s)?"allow":"ask"}async execute(e){try{let s=[],i;if(this.params.path){let t=S(this.config,this.params.path,{allowExternalPaths:!0});s.push(t),i=`in path "${this.params.path}"`}else{let t=this.config.getWorkspaceContext().getDirectories();s.push(...t),i=t.length>1?`across ${t.length} workspace directories`:"in the workspace directory"}let l=[];for(let t of s){let o=await this.performGrepSearch({pattern:this.params.pattern,path:t,glob:this.params.glob,signal:e});if(s.length>1)for(let a of o)y.isAbsolute(a.filePath)||(a.filePath=y.resolve(t,a.filePath));l.push(...o)}if(s.length>1){let t=new Set;l=l.filter(o=>{let a=`${o.filePath}:${o.lineNumber}`;return t.has(a)?!1:(t.add(a),!0)})}let f=this.params.glob?` (filter: "${this.params.glob}")`:"";if(l.length===0)return{llmContent:`No matches found for pattern "${this.params.pattern}" ${i}${f}.`,returnDisplay:"No matches found"};let h=this.config.getTruncateToolOutputThreshold(),w=Math.min(this.config.getTruncateToolOutputLines(),this.params.limit??Number.POSITIVE_INFINITY),$=!1,C=l;l.length>w&&(C=l.slice(0,w),$=!0);let E=l.length,x=E===1?"match":"matches",G=`Found ${E} ${x} for pattern "${this.params.pattern}" ${i}${f}:
|
|
4
4
|
---
|
|
5
5
|
`,v=C.reduce((t,o)=>{let a=o.filePath;return t[a]||(t[a]=[]),t[a].push(o),t[a].sort((L,D)=>L.lineNumber-D.lineNumber),t},{}),n="",g=[],m=!1,c=(t,o)=>Number.isFinite(h)&&n.length+t.length>h?(n+=t.slice(0,Math.max(h-n.length,0)),n+="...",o&&g.push(o),m=!0,!1):(n+=t,o&&g.push(o),!0);for(let t in v){if(!c(`File: ${t}
|
|
6
6
|
`))break;let o=!1;for(let a of v[t]){let L=a.line.trim();if(!c(`L${a.lineNumber}: ${L}
|