@maincode-ai/matilda-code 0.21.10-preview.0 → 0.21.10-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/mainy/docs/configuration/settings.md +9 -0
- package/chunks/agent-XXSEYARS.js +3 -0
- package/chunks/agent-headless-YBWTAFUH.js +3 -0
- package/chunks/{anthropicContentGenerator-SFJGSZHT.js → anthropicContentGenerator-IYZILRDW.js} +1 -1
- package/chunks/{askUserQuestion-G2H4VCRY.js → askUserQuestion-XWHJY3DM.js} +1 -1
- package/chunks/{chunk-INAZKGGR.js → chunk-2HQMJ2IU.js} +1 -1
- package/chunks/chunk-2W6MZZHZ.js +39 -0
- package/chunks/{todoWrite-3XJNFIBR.js → chunk-4CSSDBOS.js} +2 -2
- package/chunks/{chunk-5PMMY47S.js → chunk-4FVBPNTZ.js} +1 -1
- package/chunks/{chunk-TFWOXSAP.js → chunk-4TQ7ABLG.js} +14 -14
- package/chunks/{chunk-X6BEBYGX.js → chunk-66NIIU2R.js} +9 -9
- package/chunks/{chunk-32PTAACU.js → chunk-ELH4YHJR.js} +1 -1
- package/chunks/{chunk-FWIVFCKF.js → chunk-FFFZ2QMG.js} +1 -1
- package/chunks/{chunk-KSNBNXBC.js → chunk-FRRBNNEB.js} +48 -48
- package/chunks/{chunk-EQEQPZLQ.js → chunk-GO2GA2GY.js} +1 -1
- package/chunks/{chunk-QHA3ZBRO.js → chunk-GUFIMKF5.js} +1 -1
- package/chunks/{chunk-H6WMNUW2.js → chunk-HOCFKXNJ.js} +1 -1
- package/chunks/{chunk-VWWEEU4V.js → chunk-JXUDKX6D.js} +1 -1
- package/chunks/{chunk-VLYRNOD3.js → chunk-MH2P4YXC.js} +10 -10
- package/chunks/{chunk-6Q6PMGBD.js → chunk-MKFQMX37.js} +1 -1
- package/chunks/{chunk-VYTYYCBR.js → chunk-NYEWHSBL.js} +1 -1
- package/chunks/{chunk-LIWYWWOK.js → chunk-ODZOYHIC.js} +1 -1
- package/chunks/{chunk-Q2I3ARPJ.js → chunk-QH7736R5.js} +1 -1
- package/chunks/chunk-QN6WSWMM.js +9 -0
- package/chunks/{chunk-RJX7DK4Y.js → chunk-S4UT3QLV.js} +1 -1
- package/chunks/chunk-SNLH42QJ.js +10 -0
- package/chunks/{chunk-SE3XDSIJ.js → chunk-SPW5DXX4.js} +1 -1
- package/chunks/{chunk-S7G6QPEP.js → chunk-SUH3UUWZ.js} +1 -1
- package/chunks/{chunk-PIFQEMZZ.js → chunk-T4P4KEDW.js} +8 -8
- package/chunks/chunk-TO3ID3JW.js +35 -0
- package/chunks/{chunk-6ZMDAPGZ.js → chunk-VVIJGBQK.js} +566 -545
- package/chunks/{chunk-DCQKJTAX.js → chunk-W5CGKUM4.js} +8 -3
- package/chunks/{chunk-2PPJ3MJT.js → chunk-WHG6N5X2.js} +1 -1
- package/chunks/{chunk-GWGQRU36.js → chunk-WJO3QSBJ.js} +1 -1
- package/chunks/{chunk-XCJYORZX.js → chunk-XCFLI3OC.js} +1 -1
- package/chunks/{chunk-IJUI5A6G.js → chunk-YMIF2DMT.js} +1 -1
- package/chunks/chunk-YSIECQIZ.js +113 -0
- package/chunks/{computer-use-QN46FSNK.js → computer-use-HX2LYMYD.js} +7 -7
- package/chunks/contextCommand-W7DBC37U.js +3 -0
- package/chunks/{cron-create-MILWOYF6.js → cron-create-2UI4AT4Q.js} +1 -1
- package/chunks/{cron-delete-IEOPMRWP.js → cron-delete-ZB6BOTFF.js} +1 -1
- package/chunks/{cron-list-GGBUA7S7.js → cron-list-YYAXNHB6.js} +1 -1
- package/chunks/{edit-7AZARQPL.js → edit-HFUF2RN3.js} +1 -1
- package/chunks/{enter-worktree-GKYG5CD2.js → enter-worktree-LFCL64PJ.js} +1 -1
- package/chunks/{enterPlanMode-ICTG6ULZ.js → enterPlanMode-TREN7ULJ.js} +1 -1
- package/chunks/{exit-worktree-ZWYXIEIC.js → exit-worktree-MH2J4P42.js} +1 -1
- package/chunks/{exitPlanMode-5BQ4MY5I.js → exitPlanMode-PQO3EFFT.js} +1 -1
- package/chunks/{geminiContentGenerator-APSI54U5.js → geminiContentGenerator-FE5UVAOZ.js} +1 -1
- package/chunks/glob-VZAYMEQA.js +22 -0
- package/chunks/goal-tools-JN27F5BA.js +12 -0
- package/chunks/grep-2VT5TSRU.js +22 -0
- package/chunks/{keychain-token-storage-HAFQQIXL.js → keychain-token-storage-54BNK6VH.js} +1 -1
- package/chunks/{ls-FQYKJYAK.js → ls-YWZU3FYL.js} +1 -1
- package/chunks/{lsp-FGMC4KSB.js → lsp-4CJDKEEC.js} +1 -1
- package/chunks/{matildaAgentContentGenerator-HVIGLQJZ.js → matildaAgentContentGenerator-EYETUHCZ.js} +1 -1
- package/chunks/matildaContentGenerator-IWKH3YC4.js +8 -0
- package/chunks/{matildaOAuth2-W2DQO2NK.js → matildaOAuth2-GRS5K3D4.js} +1 -1
- package/chunks/monitor-AMIVJKDL.js +32 -0
- package/chunks/notebook-edit-BQUXXNEO.js +17 -0
- package/chunks/{openaiContentGenerator-X6TFPZGL.js → openaiContentGenerator-4M7WBW3G.js} +1 -1
- package/chunks/read-file-FNJZCMIZ.js +3 -0
- package/chunks/ripGrep-UOEUWYVF.js +3 -0
- package/chunks/scheduler-ASQLD6BW.js +8 -0
- package/chunks/{send-message-5PJPE34J.js → send-message-OO2HAKCC.js} +1 -1
- package/chunks/{serve-24HVCLFM.js → serve-FIDAAJAB.js} +1 -1
- package/chunks/shell-S732E2W4.js +3 -0
- package/chunks/{skill-HWDNN7P7.js → skill-VXNOQCSI.js} +1 -1
- package/chunks/src-QZENX46P.js +3 -0
- package/chunks/{symbol-search-BSE3FWJX.js → symbol-search-ALYOX5JN.js} +1 -1
- package/chunks/{syntheticOutput-DX4NN34N.js → syntheticOutput-UASKABJH.js} +1 -1
- package/chunks/task-create-EBJD55TB.js +3 -0
- package/chunks/{task-detach-TGM25ZIU.js → task-detach-I67ZE5MX.js} +1 -1
- package/chunks/{task-list-AZLBAQVL.js → task-list-5BGX4G5N.js} +1 -1
- package/chunks/{task-stop-B5PTXVMO.js → task-stop-ERI5X4AO.js} +1 -1
- package/chunks/{task-update-ARPBRTC5.js → task-update-CD3W556L.js} +1 -1
- package/chunks/{team-create-D4N2QVBX.js → team-create-CXY3MRCE.js} +1 -1
- package/chunks/{team-delete-AGYMEW6E.js → team-delete-5U3GBFKJ.js} +1 -1
- package/chunks/todoWrite-YGG6AZ3A.js +3 -0
- package/chunks/{tool-search-LRVN3W5W.js → tool-search-AJ57WSJC.js} +1 -1
- package/chunks/{web-fetch-Y64RF72K.js → web-fetch-63M6GZQL.js} +1 -1
- package/chunks/{web-search-I3D4EN5B.js → web-search-OX2DPEVN.js} +1 -1
- package/chunks/{workflow-BSK53DUN.js → workflow-55OAJ6XH.js} +2 -2
- package/chunks/write-file-2TWXQRDB.js +15 -0
- package/cli.js +459 -462
- package/package.json +2 -2
- package/chunks/agent-U43GELHB.js +0 -3
- package/chunks/agent-headless-7STBERN4.js +0 -3
- package/chunks/chunk-2NBII5ND.js +0 -34
- package/chunks/chunk-BN2CPSZ5.js +0 -34
- package/chunks/chunk-HMZOLFRP.js +0 -10
- package/chunks/chunk-ROETRE5J.js +0 -9
- package/chunks/chunk-XJYPRCV7.js +0 -108
- package/chunks/contextCommand-7G5FHBBE.js +0 -3
- package/chunks/glob-NPEYXTA6.js +0 -22
- package/chunks/grep-4NQTKAN6.js +0 -22
- package/chunks/matildaContentGenerator-5VOBYNAJ.js +0 -8
- package/chunks/monitor-RMKMKOUY.js +0 -32
- package/chunks/notebook-edit-H3ZFKBLR.js +0 -17
- package/chunks/read-file-3J3ZMBI2.js +0 -3
- package/chunks/ripGrep-WDYTLRCE.js +0 -3
- package/chunks/scheduler-TKK5QECI.js +0 -8
- package/chunks/shell-YPEMRDRO.js +0 -3
- package/chunks/src-W5VAKS5Y.js +0 -3
- package/chunks/task-create-3PW7T36X.js +0 -3
- package/chunks/update-goal-KLUMJFUA.js +0 -16
- package/chunks/write-file-GDKSQBMU.js +0 -15
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{M as D,N as
|
|
3
|
+
import{M as D,N as j,O as L,g as I,ia as W,na as _}from"./chunk-YSIECQIZ.js";import{b as m,e as w}from"./chunk-4J6DC24J.js";import{k as F,n as U}from"./chunk-SDTWBD62.js";import{q as b,s as $,t as x,u as O}from"./chunk-MH2P4YXC.js";import{b as G}from"./chunk-GZPNIYVZ.js";G();var X="2026-06-23",K="auto",z="instant",Y=12e4,h=18e4,Q=5e4,R=16e3,S=class extends Error{code="EMATILDA_STREAM_INCOMPLETE";constructor(){super("Matilda agent stream ended without an authoritative done signal."),this.name="MatildaAgentStreamProtocolError"}},Z=["Treat this as Matilda Code traffic.","Prefer the code specialist path for implementation, debugging, refactoring, tests, repo edits, and code review.","Use the fast instruct path for simple coordination, status, clarification, or non-code conversational replies.","Keep the response concise and action-oriented."].join(" "),q=["You are powering Matilda Code, an interactive terminal coding agent.","Matilda Code owns the local agent loop: codebase reads, edits, shell commands, approvals, memory, subagents, skills, and MCP tools run through the CLI.","Use the conversation context and tool results as facts. Do not claim to have inspected files, run commands, or edited code unless that action appears in the provided context.",`When the user gives a vague starter such as "let's code" without a concrete development task, ask a concise clarifying question instead of inventing an app or dumping code.`].join(" ");function ee(n){let e=(n||"https://matilda.maincode.com/api/v1").trim().replace(/\/+$/,"");return/\/api\/v1$/i.test(e)?e.replace(/\/api\/v1$/i,"/api"):/\/api$/i.test(e)?e:`${e}/api`}function y(n){try{let e=JSON.parse(n);return e&&typeof e=="object"?e:void 0}catch{return}}var te="Your message was blocked by our content safety system.";function ne(n){let e=y(n);if(!e||e.error!=="content_blocked")return;let t=Array.isArray(e.categories)?e.categories.filter(o=>typeof o=="string"):[],s=typeof e.assistant_message=="string"&&e.assistant_message.trim().length>0?e.assistant_message:typeof e.message=="string"?e.message:te;return{categories:t,severity:typeof e.severity=="string"?e.severity:void 0,assistantMessage:s}}function u(n,e){let s=y(n)?.[e];return typeof s=="string"?s:void 0}function B(n){return P(n)}function P(n){return typeof n=="string"?n:Array.isArray(n)?n.map(e=>{if(typeof e=="string")return e;if(!e||typeof e!="object")return"";let t=e;return typeof t.text=="string"?t.text:t.image_url?"[image omitted: Matilda native chat accepts text only]":t.input_audio?"[audio omitted: Matilda native chat accepts text only]":t.file?"[file omitted: Matilda native chat accepts text only]":""}).filter(Boolean).join(`
|
|
4
4
|
`):""}function f(n,e){if(n.length<=e)return n;let t=`
|
|
5
5
|
[...omitted to fit Matilda native agent context...]
|
|
6
|
-
`,s=e-t.length,o=Math.floor(s*.6),i=s-o;return`${n.slice(0,o)}${t}${n.slice(-i)}`}function
|
|
6
|
+
`,s=e-t.length,o=Math.floor(s*.6),i=s-o;return`${n.slice(0,o)}${t}${n.slice(-i)}`}function se(n){return(n.candidates?.[0]?.content?.parts??[]).map(t=>typeof t=="string"?t:"thought"in t&&t.thought?"":"text"in t&&t.text||"").join("")}function oe(n){let e=y(n),t=typeof e?.output_tokens=="number"?e.output_tokens:void 0;if(t!==void 0)return{promptTokenCount:0,candidatesTokenCount:t,totalTokenCount:t,usageIsIncomplete:!0}}function C(n){return JSON.stringify(n).length}function ae(n){if(C(n)<=h)return n;let e=`
|
|
7
7
|
[...omitted to fit Matilda native request limit...]
|
|
8
|
-
`;for(let t=0;t<n.messages.length;t+=1){let s=n.messages[t];!s||s.content.length<=R||(n.messages[t]={...s,content:f(s.content,R)})}if(C(n)<=h)return n;for(;n.messages.length>2&&C(n)>h;){n.messages.splice(1,1);let t=n.messages[0];t&&!t.content.includes(e.trim())&&(n.messages[0]={...t,content:`${t.content}${e}`})}for(;C(n)>h;){let t=n.messages.length>1?n.messages.length-1:0,s=n.messages[t];if(!s||s.content.length<=1e3)break;let o=C(n)-h,i=Math.max(1e3,s.content.length-o-e.length-2e3);n.messages[t]={...s,content:f(s.content,i)}}return C(n)<=h||n.clientTools&&delete n.clientTools,n}function
|
|
8
|
+
`;for(let t=0;t<n.messages.length;t+=1){let s=n.messages[t];!s||s.content.length<=R||(n.messages[t]={...s,content:f(s.content,R)})}if(C(n)<=h)return n;for(;n.messages.length>2&&C(n)>h;){n.messages.splice(1,1);let t=n.messages[0];t&&!t.content.includes(e.trim())&&(n.messages[0]={...t,content:`${t.content}${e}`})}for(;C(n)>h;){let t=n.messages.length>1?n.messages.length-1:0,s=n.messages[t];if(!s||s.content.length<=1e3)break;let o=C(n)-h,i=Math.max(1e3,s.content.length-o-e.length-2e3);n.messages[t]={...s,content:f(s.content,i)}}return C(n)<=h||n.clientTools&&delete n.clientTools,n}function ie(n){let e=y(n.data);if(!e)return;let t=typeof e.name=="string"?e.name:void 0;if(!t)return;let s=e.args&&typeof e.args=="object"?e.args:{};return{id:typeof e.id=="string"?e.id:void 0,name:t,args:s}}function re(n){let e=y(n.data);if(n.event==="thinking"){let t=u(n.data,"content");return t?`**Thinking** ${t}`:void 0}if(n.event==="generation_status"){let t=u(n.data,"phase");return t?`**Planning** ${t}`:void 0}if(n.event==="status"){let t=u(n.data,"state");if(!t)return;let s=typeof e?.position=="number"?` position ${e.position}`:"";return`**Status** ${t}${s}`}if(n.event==="tool_start"){let t=u(n.data,"tool");if(!t)return;let s=u(n.data,"input")??(e?.args?JSON.stringify(e.args):void 0);return`**Remote tool** Starting ${t}${s?` with ${s}`:""}`}if(n.event==="tool_progress"){let t=u(n.data,"tool"),s=u(n.data,"message");return t&&s?`**Remote tool** ${t}: ${s}`:void 0}if(n.event==="tool_result"){let t=u(n.data,"tool"),s=u(n.data,"status"),o=u(n.data,"output")??u(n.data,"result");return t?`**Remote tool** ${t} ${s??"completed"}${o?`: ${f(o,600)}`:""}`:void 0}}function T(n,e,t){let s=new w;return s.candidates=[{content:{parts:n?[{text:n}]:[],role:"model"},index:0,safetyRatings:[]}],s.createTime=Date.now().toString(),s.modelVersion=e,t&&(s.usageMetadata=t),s}function le(n,e){let t=new w;return t.candidates=[{content:{parts:n?[{text:n,thought:!0}]:[],role:"model"},index:0,safetyRatings:[]}],t.createTime=Date.now().toString(),t.modelVersion=e,t}function ce(n,e){let t=new w;return t.candidates=[{content:{parts:[{functionCall:n}],role:"model"},index:0,safetyRatings:[]}],t.createTime=Date.now().toString(),t.modelVersion=e,Object.defineProperty(t,"functionCalls",{value:[n],writable:!0,configurable:!0,enumerable:!0}),t}function H(n){let e=T("",n);return e.matildaReplace=!0,e}function de(n){return n.matildaReplace===!0}function J(n,e,t){let s=T("",n,t);return s.candidates=[{content:{parts:[],role:"model"},finishReason:e,index:0,safetyRatings:[]}],s}async function*ue(n,e){let t=n.body?.getReader();if(!t)throw new Error("Matilda agent stream returned no response body");let s=new TextDecoder,o="",i="message",r=[],d=!1,c,a=()=>{e<=0||(c&&clearTimeout(c),c=setTimeout(()=>{d=!0,t.cancel().catch(()=>{})},e))},l=()=>{c&&(clearTimeout(c),c=void 0)},g=()=>{if(r.length===0){i="message";return}let A={event:i,data:r.join(`
|
|
9
9
|
`)};return i="message",r=[],a(),A};a();try{for(;;){let{done:v,value:p}=await t.read();if(v||d)break;a(),o+=s.decode(p,{stream:!0});let E=o.split(`
|
|
10
10
|
`);o=E.pop()??"";for(let k of E){let M=k.endsWith("\r")?k.slice(0,-1):k;if(M.length===0){let N=g();N&&(yield N)}else M.startsWith("event:")?i=M.slice(6).trim():M.startsWith("data:")&&r.push(M.slice(5).trimStart())}}if(o+=s.decode(),o.length>0)for(let v of o.split(`
|
|
11
|
-
`)){let p=v.endsWith("\r")?v.slice(0,-1):v;p.startsWith("event:")?i=p.slice(6).trim():p.startsWith("data:")&&r.push(p.slice(5).trimStart())}let A=g();A&&(yield A)}finally{l()}if(d)throw Object.assign(new Error(`No Matilda agent SSE events for ${e}ms`),{code:"ETIMEDOUT"})}var
|
|
11
|
+
`)){let p=v.endsWith("\r")?v.slice(0,-1):v;p.startsWith("event:")?i=p.slice(6).trim():p.startsWith("data:")&&r.push(p.slice(5).trimStart())}let A=g();A&&(yield A)}finally{l()}if(d)throw Object.assign(new Error(`No Matilda agent SSE events for ${e}ms`),{code:"ETIMEDOUT"})}var V=class{constructor(e,t){this.contentGeneratorConfig=e;this.cliConfig=t}async generateContent(e,t){let s=await this.generateContentStream(e,t),o="",i,r=m.STOP,d=!1;for await(let a of s){de(a)?o="":o+=se(a),a.usageMetadata&&(i=a.usageMetadata);let l=a.candidates?.[0]?.finishReason;l&&(d=!0,r=l)}if(!d)throw new S;let c=T(o,this.modelFor(e),i);return c.candidates=[{content:{parts:o?[{text:o}]:[],role:"model"},index:0,safetyRatings:[]}],r&&(c.candidates[0].finishReason=r),c}async generateContentStream(e,t){return this.streamNativeChat(e)}async countTokens(e){return{totalTokens:Math.ceil(JSON.stringify(e.contents??"").length/4)}}async embedContent(e){throw new Error("Matilda agent SDK transport does not support embeddings.")}useSummarizedThinking(){return!1}async*streamNativeChat(e){let t=this.modelFor(e),s=await this.fetchNativeChat(e),o=!1,i=!1,r,d,c=!1;for await(let a of ue(s,Y))if(a.data!=="[DONE]"){if(a.event==="token"){let l=u(a.data,"content");l&&(i=!0,yield T(l,t))}else if(a.event==="thinking"||a.event==="generation_status"||a.event==="status"||a.event==="tool_start"||a.event==="tool_progress"||a.event==="tool_result"){let l=re(a);l&&(i=!0,yield le(l,t))}else if(a.event==="client_tool_call"){let l=ie(a);l&&(i=!0,yield ce(l,t))}else if(a.event==="usage")d=oe(a.data)??d;else if(a.event==="replace")yield H(t);else if(a.event==="safety_replace"){yield H(t);let l=u(a.data,"message")??u(a.data,"content");l&&(i=!0,yield T(l,t))}else if(a.event==="truncated")c=!0,r=m.MAX_TOKENS;else if(a.event==="done"){if(c=!0,r=u(a.data,"reason")==="max_tokens"?m.MAX_TOKENS:r??m.STOP,!i)throw new Error("Matilda agent returned an empty response.");yield J(t,r,d),o=!0}else if(a.event==="error"){let l=y(a.data),g=typeof l?.error=="string"?l.error:"Unknown Matilda agent stream error";throw new Error(`Matilda agent stream error: ${g}`)}}if(!o){if(e.config?.abortSignal?.aborted)return;if(!i)throw new Error("Matilda agent returned an empty response.");if(c)yield J(t,r??m.STOP,d);else throw new S}}async fetchNativeChat(e){let t=await _({baseUrl:this.contentGeneratorConfig.baseUrl,fallbackAccessToken:this.contentGeneratorConfig.apiKey,signal:e.config?.abortSignal,channel:this.cliConfig.getChannel?.()}),s=await this.postNativeChat(e,t);if(s.status!==401)return this.assertOkResponse(s);let o;try{o=await _({baseUrl:this.contentGeneratorConfig.baseUrl,fallbackAccessToken:t,forceRefresh:!0,signal:e.config?.abortSignal,channel:this.cliConfig.getChannel?.()})}catch(r){throw W(r)?new b(r instanceof Error?r.message:String(r)):r}if(!o||o===t)throw new b("Matilda session expired. Please sign in again.");let i=await F("retry",()=>this.postNativeChat(e,o));return this.assertOkResponse(i)}async postNativeChat(e,t){return fetch(`${ee(this.contentGeneratorConfig.baseUrl)}/chat`,{method:"POST",headers:this.buildHeaders(t),body:JSON.stringify(this.buildNativeRequest(e)),signal:e.config?.abortSignal})}async assertOkResponse(e){if(e.ok)return e;let t=await e.text();if(e.status===403){let o;try{o=JSON.parse(t)}catch{}if(x(o))throw new $}if(e.status===422){let o=ne(t);if(o)throw new O(`Matilda agent request blocked (422): ${t}`,o.categories,o.severity,o.assistantMessage)}let s=`Matilda agent request failed (${e.status}): ${t}`;throw e.status===401?new b(s):new Error(s)}buildHeaders(e){let t={"Content-Type":"application/json",Accept:"text/event-stream","X-Matilda-API-Version":X,"X-Matilda-Client":"matilda-code","User-Agent":`MatildaCode/${this.cliConfig.getCliVersion?.()||"unknown"}`};for(let[s,o]of Object.entries(this.contentGeneratorConfig.customHeaders??{}))s.toLowerCase()!=="x-matilda-response-mode"&&!j(s)&&(t[s]=o);return L(this.contentGeneratorConfig,e)&&Object.assign(t,D(this.cliConfig),U()),e&&(t.Authorization=`Bearer ${e}`),t}buildNativeRequest(e){let t=this.inferPurpose(e),s=this.clientToolsFromRequest(e),o={messages:this.buildNativeMessages(e,t),responseMode:this.responseModeForPurpose(t)};return s.length>0&&(o.clientTools=s),ae(o)}buildNativeMessages(e,t){let s=this.openAIMessagesFromRequest(e),i=[{role:"user",content:this.buildSystemContext(e,t)}];for(let d of s){if(d.role==="system")continue;let c=this.nativeMessageFromOpenAIMessage(d);c&&i.push(c)}i.length===1&&i.push({role:"user",content:`${this.purposeLabel(t)}:
|
|
12
12
|
(empty prompt)`});let r=i[i.length-1];return r?.role!=="user"?i.push({role:"user",content:`${this.purposeLabel(t)}:
|
|
13
13
|
Continue from the previous assistant response.`}):r.content.startsWith(`${this.purposeLabel(t)}:
|
|
14
14
|
`)||(i[i.length-1]={...r,content:`${this.purposeLabel(t)}:
|
|
15
15
|
${r.content}`}),i}buildSystemContext(e,t){let s=["Agent: Matilda Code",t==="code"?`Routing intent:
|
|
16
|
-
${
|
|
16
|
+
${Z}`:void 0,`Instructions:
|
|
17
17
|
${this.instructionsFromRequest(e)}`].filter(o=>!!o);return f(s.join(`
|
|
18
18
|
|
|
19
|
-
`),
|
|
19
|
+
`),Q)}nativeMessageFromOpenAIMessage(e){let t=this.describeMessage(e);if(t.trim())return{role:e.role==="assistant"?"assistant":"user",content:t}}inferPurpose(e){if(this.contentGeneratorConfig.matildaAgentPurpose)return this.contentGeneratorConfig.matildaAgentPurpose;if(this.contentGeneratorConfig.matildaAgentResponseMode==="instant")return"general";if(this.contentGeneratorConfig.matildaAgentResponseMode==="deep")return"analysis";let s=(this.userMessagesFromRequest(e).at(-1)?.trim()??"").toLowerCase().replace(/\s+/g," ");return/^(hi|hey|hello|thanks|thank you|ok|okay|cool|nice|what'?s up)[.!?]*$/.test(s)||/^(ok|okay)?\s*(let'?s|lets)\s+(code|build|start|get started)[.!?]*$/.test(s)?"general":"code"}responseModeForPurpose(e){return this.contentGeneratorConfig.matildaAgentResponseMode?this.contentGeneratorConfig.matildaAgentResponseMode:e==="general"?z:e==="analysis"?"deep":K}purposeLabel(e){return e==="code"?"Code task":e==="analysis"?"Analysis task":"Task"}instructionsFromRequest(e){let t=this.openAIMessagesFromRequest(e).filter(s=>s.role==="system").map(s=>P(s.content)).filter(s=>s.trim().length>0);return[q,...t,this.localAgentContext()].join(`
|
|
20
20
|
|
|
21
21
|
`)}localAgentContext(){let e=["Local agent context:","- CLI: Matilda Code terminal agent."],t=this.cliConfig.getModel?.();t&&e.push(`- Active model: ${t}`);let s=this.cliConfig.getApprovalMode?.();s&&e.push(`- Approval mode: ${s}`);let o=this.cliConfig.getSandbox?.();e.push(o?`- Sandbox: ${o.command} (${o.image}).`:"- Sandbox: disabled.");let i=[["allow",this.cliConfig.getPermissionsAllow?.()??[]],["ask",this.cliConfig.getPermissionsAsk?.()??[]],["deny",this.cliConfig.getPermissionsDeny?.()??[]]];for(let[l,g]of i)g.length>0&&e.push(`- Permission ${l} rules: ${g.join(", ")}`);let r=this.cliConfig.getIdeMode?.()?"IDE/ACP":this.cliConfig.isInteractive?.()?"interactive TUI":"headless";e.push(`- Interface mode: ${r}`);let d=this.cliConfig.getProjectRoot?.();d&&e.push(`- Project root: ${d}`);let c=this.cliConfig.getWorkingDir?.();c&&c!==d&&e.push(`- Working directory: ${c}`);let a=this.cliConfig.getToolRegistry?.()?.getAllToolNames?.().slice(0,30)??[];return a.length>0&&e.push(`- Local tools available through the CLI loop: ${a.join(", ")}`),e.join(`
|
|
22
|
-
`)}clientToolsFromRequest(e){let t=[];for(let s of e.config?.tools??[])"functionDeclarations"in s&&t.push(...(s.functionDeclarations??[]).filter(o=>!!o.name));return t.map(s=>({name:s.name,...s.description?{description:s.description}:{},...s.parametersJsonSchema?{parameters:s.parametersJsonSchema}:s.parameters?{parameters:s.parameters}:{}}))}userMessagesFromRequest(e){return this.openAIMessagesFromRequest(e).filter(t=>t.role==="user").map(t=>
|
|
23
|
-
${f(
|
|
22
|
+
`)}clientToolsFromRequest(e){let t=[];for(let s of e.config?.tools??[])"functionDeclarations"in s&&t.push(...(s.functionDeclarations??[]).filter(o=>!!o.name));return t.map(s=>({name:s.name,...s.description?{description:s.description}:{},...s.parametersJsonSchema?{parameters:s.parametersJsonSchema}:s.parameters?{parameters:s.parameters}:{}}))}userMessagesFromRequest(e){return this.openAIMessagesFromRequest(e).filter(t=>t.role==="user").map(t=>B(t.content)).filter(t=>t.trim().length>0)}openAIMessagesFromRequest(e){let t={model:this.modelFor(e),modalities:this.contentGeneratorConfig.modalities??{},startTime:Date.now(),splitToolMedia:this.contentGeneratorConfig.splitToolMedia??!0};return I.convertGeminiRequestToOpenAI(e,t,{cleanOrphanToolCalls:!1})}describeMessage(e){if(e.role==="user")return`User:
|
|
23
|
+
${f(B(e.content),R)}`;if(e.role==="assistant"){let t=P(e.content),s="tool_calls"in e&&Array.isArray(e.tool_calls)?e.tool_calls.map(o=>`Tool request: ${o.function.name}(${o.function.arguments})`).join(`
|
|
24
24
|
`):"";return`Assistant:
|
|
25
25
|
${f([t,s].filter(Boolean).join(`
|
|
26
26
|
`),R)}`}return e.role==="tool"?`Tool result ${e.tool_call_id}:
|
|
27
|
-
${f(P(e.content),R)}`:""}modelFor(e){return e.model||this.contentGeneratorConfig.model}};export{
|
|
27
|
+
${f(P(e.content),R)}`:""}modelFor(e){return e.model||this.contentGeneratorConfig.model}};export{de as a,V as b};
|
|
28
28
|
/**
|
|
29
29
|
* @license
|
|
30
30
|
* Copyright 2026 Matilda Team
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{I as l,L as M,
|
|
3
|
+
import{I as l,L as M,Q as A,w as g}from"./chunk-MH2P4YXC.js";import{b as h}from"./chunk-GZPNIYVZ.js";h();import*as s from"node:fs";import*as t from"node:path";var f="memory",y="MEMORY.md",x="meta.json",R="extract-cursor.json",O="consolidation.lock",T="memories";function D(r){let o=t.resolve(r);for(;;){let e=t.join(o,".git");if(s.existsSync(e))return o;let n=t.dirname(o);if(n===o)return null;o=n}}function j(r){let o=D(r);if(!o)return null;try{let e=s.readFileSync(t.join(o,".git"),"utf-8").trim();if(!e.startsWith("gitdir:"))return o;let n=t.resolve(o,e.slice(7).trim()),i=t.resolve(n,s.readFileSync(t.join(n,"commondir"),"utf-8").trim());return t.resolve(t.dirname(n))!==t.join(i,"worktrees")||s.realpathSync(s.readFileSync(t.join(n,"gitdir"),"utf-8").trim())!==t.join(s.realpathSync(o),".git")?o:t.basename(i)!==".git"?i.normalize("NFC"):t.dirname(i).normalize("NFC")}catch{return o}}function _(){return process.env.MATILDA_CODE_MEMORY_BASE_DIR?M(void 0,process.env.MATILDA_CODE_MEMORY_BASE_DIR):A.getRuntimeBaseDir()}var c=new Map;function u(r){let o=process.env.MATILDA_CODE_MEMORY_LOCAL==="1",e=o?"":_(),n=`${o?"local":e}\0${r}`,i=c.get(n);if(i!==void 0)return i;let a;if(o)a=t.join(r,g,f);else{let d=j(r)??t.resolve(r);a=t.join(e,"projects",l(d),f)}return c.set(n,a),a}function S(){c.clear()}function p(r){return t.dirname(u(r))}function I(r,o){let e=t.normalize(r),n=t.normalize(u(o)),i=t.relative(n,e);return i===""||!i.startsWith("..")&&!t.isAbsolute(i)}function v(r){return t.join(u(r),y)}function U(r){return t.join(p(r),x)}function F(r){return t.join(p(r),R)}function N(r){return t.join(p(r),O)}function E(r){return`${r}.md`}function Y(r,o){return t.join(u(r),E(o))}function z(r,o){return t.join(u(r),o)}function m(){return t.join(_(),T)}function k(){return t.join(m(),y)}function b(r){return t.join(m(),E(r))}function C(r){let o=t.normalize(r),e=t.normalize(m()),n=t.relative(e,o);return n===""||!n.startsWith("..")&&!t.isAbsolute(n)}function w(r,o){return I(r,o)||C(r)}export{f as a,y as b,x as c,R as d,O as e,T as f,_ as g,u as h,S as i,p as j,I as k,v as l,U as m,F as n,N as o,E as p,Y as q,z as r,m as s,k as t,b as u,C as v,w};
|
|
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{
|
|
3
|
+
import{ba as d}from"./chunk-MH2P4YXC.js";import{b as n}from"./chunk-GZPNIYVZ.js";n();import*as w from"node:crypto";n();var l=class{serviceName;constructor(e){this.serviceName=e}validateCredentials(e){if(!e.serverName)throw new Error("Server name is required");if(!e.token)throw new Error("Token is required");if(!e.token.accessToken)throw new Error("Access token is required");if(!e.token.tokenType)throw new Error("Token type is required")}isTokenExpired(e){if(!e.token.expiresAt)return!1;let t=5*60*1e3;return Date.now()>e.token.expiresAt-t}sanitizeServerName(e){return e.replace(/[^a-zA-Z0-9-_.]/g,"_")}};var o=d("MCP_KEYCHAIN"),c="__keychain_test__",s="__secret__",y=class extends l{keychainAvailable=null;keytarModule=null;keytarLoadAttempted=!1;async getKeytar(){if(this.keytarLoadAttempted)return this.keytarModule;this.keytarLoadAttempted=!0;try{let t=await import("keytar");this.keytarModule=t.default||t}catch(e){o.error(`Failed to load keytar module: ${e}`)}return this.keytarModule}async getCredentials(e){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let t=await this.getKeytar();if(!t)throw new Error("Keytar module not available");try{let r=this.sanitizeServerName(e),a=await t.getPassword(this.serviceName,r);if(!a)return null;let i=JSON.parse(a);return this.isTokenExpired(i)?null:i}catch(r){throw r instanceof SyntaxError?new Error(`Failed to parse stored credentials for ${e}`):r}}async setCredentials(e){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let t=await this.getKeytar();if(!t)throw new Error("Keytar module not available");this.validateCredentials(e);let r=this.sanitizeServerName(e.serverName),a={...e,updatedAt:Date.now()},i=JSON.stringify(a);await t.setPassword(this.serviceName,r,i)}async deleteCredentials(e){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let t=await this.getKeytar();if(!t)throw new Error("Keytar module not available");let r=this.sanitizeServerName(e);if(!await t.deletePassword(this.serviceName,r))throw new Error(`No credentials found for ${e}`)}async listServers(){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let e=await this.getKeytar();if(!e)throw new Error("Keytar module not available");try{return(await e.findCredentials(this.serviceName)).filter(r=>!r.account.startsWith(c)).filter(r=>!r.account.startsWith(s)).map(r=>r.account)}catch(t){return o.error(`Failed to list servers from keychain: ${t}`),[]}}async getAllCredentials(){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let e=await this.getKeytar();if(!e)throw new Error("Keytar module not available");let t=new Map;try{let r=(await e.findCredentials(this.serviceName)).filter(a=>!a.account.startsWith(c)).filter(a=>!a.account.startsWith(s));for(let a of r)try{let i=JSON.parse(a.password);this.isTokenExpired(i)||t.set(a.account,i)}catch(i){o.error(`Failed to parse credentials for ${a.account}: ${i}`)}}catch(r){o.error(`Failed to get all credentials from keychain: ${r}`)}return t}async clearAll(){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let e=this.keytarModule?await this.keytarModule.findCredentials(this.serviceName).then(r=>r.map(a=>a.account)).catch(r=>{throw new Error(`Failed to list servers for clearing: ${r.message}`)}):[],t=[];for(let r of e)try{await this.deleteCredentials(r)}catch(a){t.push(a)}if(t.length>0)throw new Error(`Failed to clear some credentials: ${t.map(r=>r.message).join(", ")}`)}async checkKeychainAvailability(){if(this.keychainAvailable!==null)return this.keychainAvailable;try{let e=await this.getKeytar();if(!e)return this.keychainAvailable=!1,!1;let t=`${c}${w.randomBytes(8).toString("hex")}`,r="test";await e.setPassword(this.serviceName,t,r);let a=await e.getPassword(this.serviceName,t),h=await e.deletePassword(this.serviceName,t)&&a===r;return this.keychainAvailable=h,h}catch{return this.keychainAvailable=!1,!1}}async isAvailable(){return this.checkKeychainAvailability()}async setSecret(e,t){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let r=await this.getKeytar();if(!r)throw new Error("Keytar module not available");await r.setPassword(this.serviceName,`${s}${e}`,t)}async getSecret(e){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let t=await this.getKeytar();if(!t)throw new Error("Keytar module not available");return t.getPassword(this.serviceName,`${s}${e}`)}async deleteSecret(e){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let t=await this.getKeytar();if(!t)throw new Error("Keytar module not available");if(!await t.deletePassword(this.serviceName,`${s}${e}`))throw new Error(`No secret found for key: ${e}`)}async listSecrets(){if(!await this.checkKeychainAvailability())throw new Error("Keychain is not available");let e=await this.getKeytar();if(!e)throw new Error("Keytar module not available");try{return(await e.findCredentials(this.serviceName)).filter(r=>r.account.startsWith(s)).map(r=>r.account.substring(s.length))}catch(t){return o.error(`Failed to list secrets from keychain: ${t}`),[]}}};export{l as a,y as b};
|
|
4
4
|
/**
|
|
5
5
|
* @license
|
|
6
6
|
* Copyright 2025 Google LLC
|