@maincode-ai/matilda-code 0.22.0 → 0.22.1-nightly.20261104.f4c27782c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/chunks/agent-BXVCIBXW.js +3 -0
  2. package/chunks/agent-headless-64NUELGA.js +3 -0
  3. package/chunks/{askUserQuestion-RZYBOPLR.js → askUserQuestion-A46IDHKS.js} +1 -1
  4. package/chunks/{chunk-453BANK3.js → chunk-5JCW6FH6.js} +1 -1
  5. package/chunks/{chunk-LM6OIN4B.js → chunk-6RK6IJY5.js} +1 -1
  6. package/chunks/{chunk-ARAB5QTM.js → chunk-6T25BBKH.js} +62 -62
  7. package/chunks/{chunk-J3ZCE3TA.js → chunk-7AEOFDY3.js} +1 -1
  8. package/chunks/{chunk-NBLBE7PE.js → chunk-7YEKK577.js} +451 -458
  9. package/chunks/{chunk-6NXVLJ3X.js → chunk-A5QKQKJW.js} +1 -1
  10. package/chunks/{chunk-7E2YCGHS.js → chunk-AEYNMLMW.js} +12 -12
  11. package/chunks/{chunk-PQZ6HKKW.js → chunk-BSSOFLAZ.js} +26 -26
  12. package/chunks/{chunk-5ETLURI6.js → chunk-DEN6RR3B.js} +1 -1
  13. package/chunks/{chunk-2XSB5XHX.js → chunk-FI2FSW7J.js} +1 -1
  14. package/chunks/chunk-FPGKJJJY.js +13 -0
  15. package/chunks/{chunk-MGRXOZAG.js → chunk-HRCRNKY2.js} +1 -1
  16. package/chunks/{chunk-ILHNCXBC.js → chunk-IV6PS6DB.js} +1 -1
  17. package/chunks/{chunk-POGNX7U3.js → chunk-KYNP66YS.js} +1 -1
  18. package/chunks/{chunk-RPXRN7E6.js → chunk-LONWTJOE.js} +1 -1
  19. package/chunks/{chunk-G3F3ZCH2.js → chunk-RH3AEZWO.js} +1 -1
  20. package/chunks/chunk-S6SR7XG2.js +121 -0
  21. package/chunks/{chunk-7B65UIHB.js → chunk-SMTY6M3W.js} +1 -1
  22. package/chunks/{chunk-IHWAOFCQ.js → chunk-TDFF4ZGY.js} +1 -1
  23. package/chunks/chunk-TKEFJ3O3.js +9 -0
  24. package/chunks/{chunk-V4VILMIK.js → chunk-UICLGQTV.js} +1 -1
  25. package/chunks/chunk-XPVKH5TC.js +10 -0
  26. package/chunks/{chunk-4UGPARBR.js → chunk-YY64FVJG.js} +1 -1
  27. package/chunks/{chunk-LMZBADPW.js → chunk-ZABAV4XA.js} +1 -1
  28. package/chunks/{computer-use-PBCWDTJR.js → computer-use-2YIT7SIT.js} +1 -1
  29. package/chunks/{cron-create-PHQ43NYA.js → cron-create-JINCFLKY.js} +1 -1
  30. package/chunks/{cron-delete-7RCQIU2U.js → cron-delete-RF6JLUAV.js} +1 -1
  31. package/chunks/{cron-list-KKNLLMNN.js → cron-list-VXLBAXZ3.js} +1 -1
  32. package/chunks/{edit-ELHNQB5E.js → edit-6S3DRURW.js} +3 -3
  33. package/chunks/{enter-worktree-UZIBOBV3.js → enter-worktree-57EOUOC4.js} +1 -1
  34. package/chunks/{enterPlanMode-UHY3DZXE.js → enterPlanMode-EWO2LZ5G.js} +1 -1
  35. package/chunks/{exit-worktree-HLG4PDMX.js → exit-worktree-T7IHIQX5.js} +1 -1
  36. package/chunks/{exitPlanMode-V4HYNH3J.js → exitPlanMode-YW7MKP6A.js} +1 -1
  37. package/chunks/{glob-C5CTWXLP.js → glob-EYNPF6KD.js} +1 -1
  38. package/chunks/{goal-tools-BGIWEJ3K.js → goal-tools-F2V2CXAF.js} +1 -1
  39. package/chunks/{grep-BEFTGKHW.js → grep-CDC2COXY.js} +1 -1
  40. package/chunks/{keychain-token-storage-FEJZYJBB.js → keychain-token-storage-UTWIIKCK.js} +1 -1
  41. package/chunks/{ls-XH55NAD3.js → ls-3EEHZY4W.js} +1 -1
  42. package/chunks/{lsp-BKDCR37G.js → lsp-H4EXPHFD.js} +1 -1
  43. package/chunks/mcp-client-3GTPI6IS.js +3 -0
  44. package/chunks/monitor-AHLS4MYF.js +32 -0
  45. package/chunks/notebook-edit-6HEQYPZ3.js +17 -0
  46. package/chunks/openaiContentGenerator-CQQ7EBHB.js +47 -0
  47. package/chunks/read-file-EWNDGS3Y.js +3 -0
  48. package/chunks/ripGrep-6BXNDTIT.js +3 -0
  49. package/chunks/scheduler-FLVTLJFY.js +8 -0
  50. package/chunks/{send-message-GJSEMAZB.js → send-message-5XHDGHSN.js} +1 -1
  51. package/chunks/shell-FVBBSL2E.js +3 -0
  52. package/chunks/{skill-3RWNSUNE.js → skill-AR3SRFYF.js} +1 -1
  53. package/chunks/{symbol-search-4VM6J5Y4.js → symbol-search-ZM3HFCUV.js} +1 -1
  54. package/chunks/{syntheticOutput-O7LEF3AM.js → syntheticOutput-OIPRFBVD.js} +1 -1
  55. package/chunks/{task-create-N4IRJBTF.js → task-create-QP44DKH4.js} +1 -1
  56. package/chunks/{task-detach-RGNQUX3H.js → task-detach-AUTU6C4G.js} +1 -1
  57. package/chunks/{task-list-Z7JUB4QK.js → task-list-U2WAGMM7.js} +1 -1
  58. package/chunks/{task-stop-L2OWK2PJ.js → task-stop-GN5WZ3IA.js} +1 -1
  59. package/chunks/{task-update-H5AXVXDS.js → task-update-26N2AUQT.js} +1 -1
  60. package/chunks/{team-create-FWTIQ2FT.js → team-create-RPZE626O.js} +1 -1
  61. package/chunks/{team-delete-D45ALROH.js → team-delete-XCKD5FBZ.js} +1 -1
  62. package/chunks/todoWrite-JN3ZV5O2.js +3 -0
  63. package/chunks/{tool-search-X6UUCSPU.js → tool-search-RDU7B45X.js} +1 -1
  64. package/chunks/{web-fetch-244KUWSX.js → web-fetch-6RRSCIUU.js} +1 -1
  65. package/chunks/{web-search-YRZ3BZ3X.js → web-search-3IXDQD7D.js} +3 -3
  66. package/chunks/{workflow-EP4AFR24.js → workflow-P6YL6ZHY.js} +2 -2
  67. package/chunks/write-file-BYAPFQ5P.js +15 -0
  68. package/cli.js +431 -424
  69. package/package.json +2 -2
  70. package/chunks/agent-IUINB66G.js +0 -3
  71. package/chunks/agent-headless-YA2RKYEZ.js +0 -3
  72. package/chunks/chunk-DUB7JMQV.js +0 -13
  73. package/chunks/chunk-RHSUTILA.js +0 -9
  74. package/chunks/chunk-V2VUANFI.js +0 -120
  75. package/chunks/mcp-client-GAQG7MCT.js +0 -3
  76. package/chunks/monitor-NSVUUKCM.js +0 -32
  77. package/chunks/notebook-edit-AXKYC64C.js +0 -17
  78. package/chunks/openaiContentGenerator-66YY6CIM.js +0 -47
  79. package/chunks/read-file-YFJMLS7V.js +0 -3
  80. package/chunks/ripGrep-BEHEB23R.js +0 -3
  81. package/chunks/scheduler-GKQOREMS.js +0 -8
  82. package/chunks/shell-J5Q2UEXH.js +0 -3
  83. package/chunks/todoWrite-LCQOQBI7.js +0 -3
  84. package/chunks/write-file-EXWGRN4Q.js +0 -15
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maincode-ai/matilda-code",
3
- "version": "0.22.0",
3
+ "version": "0.22.1-nightly.20261104.f4c27782c",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "cli.js",
@@ -26,7 +26,7 @@
26
26
  "bundled"
27
27
  ],
28
28
  "config": {
29
- "sandboxImageUri": "ghcr.io/maincode/matilda-code:0.22.0"
29
+ "sandboxImageUri": "ghcr.io/maincode/matilda-code:0.22.1-nightly.20261104.f4c27782c"
30
30
  },
31
31
  "dependencies": {},
32
32
  "optionalDependencies": {
@@ -1,3 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{Jc as a,Kc as b,Lc as c,Mc as d,Nc as e,Oc as f}from"./chunk-NBLBE7PE.js";import"./chunk-MGRXOZAG.js";import"./chunk-ZSGBDQXU.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-5ETLURI6.js";import"./chunk-G3F3ZCH2.js";import"./chunk-V4VILMIK.js";import"./chunk-6NXVLJ3X.js";import"./chunk-4UGPARBR.js";import"./chunk-7B65UIHB.js";import"./chunk-QXSBPCBA.js";import"./chunk-LMZBADPW.js";import"./chunk-V6UPUMP3.js";import"./chunk-5B2QERWR.js";import"./chunk-453BANK3.js";import"./chunk-PQZ6HKKW.js";import"./chunk-7ZODGQO6.js";import"./chunk-GT6MSEK4.js";import"./chunk-V2VUANFI.js";import"./chunk-225CZWD7.js";import"./chunk-LBQNFSZ2.js";import"./chunk-DUB7JMQV.js";import"./chunk-ARAB5QTM.js";import"./chunk-ILHNCXBC.js";import"./chunk-LM6OIN4B.js";import"./chunk-RPXRN7E6.js";import"./chunk-RHSUTILA.js";import"./chunk-J3ZCE3TA.js";import"./chunk-POGNX7U3.js";import"./chunk-7E2YCGHS.js";import"./chunk-UM6CLO7D.js";import"./chunk-HEJO7OBH.js";import"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";export{f as AgentTool,b as TOOL_REGISTRY_REBUILT,e as createApprovalModeOverride,c as hasRebuiltToolRegistry,d as rebuildToolRegistryOnOverride,a as resolveSubagentApprovalMode};
@@ -1,3 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{wc as a,xc as b,yc as c}from"./chunk-NBLBE7PE.js";import"./chunk-MGRXOZAG.js";import"./chunk-ZSGBDQXU.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-5ETLURI6.js";import"./chunk-G3F3ZCH2.js";import"./chunk-V4VILMIK.js";import"./chunk-6NXVLJ3X.js";import"./chunk-4UGPARBR.js";import"./chunk-7B65UIHB.js";import"./chunk-QXSBPCBA.js";import"./chunk-LMZBADPW.js";import"./chunk-V6UPUMP3.js";import"./chunk-5B2QERWR.js";import"./chunk-453BANK3.js";import"./chunk-PQZ6HKKW.js";import"./chunk-7ZODGQO6.js";import"./chunk-GT6MSEK4.js";import"./chunk-V2VUANFI.js";import"./chunk-225CZWD7.js";import"./chunk-LBQNFSZ2.js";import"./chunk-DUB7JMQV.js";import"./chunk-ARAB5QTM.js";import"./chunk-ILHNCXBC.js";import"./chunk-LM6OIN4B.js";import"./chunk-RPXRN7E6.js";import"./chunk-RHSUTILA.js";import"./chunk-J3ZCE3TA.js";import"./chunk-POGNX7U3.js";import"./chunk-7E2YCGHS.js";import"./chunk-UM6CLO7D.js";import"./chunk-HEJO7OBH.js";import"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";export{c as AgentHeadless,a as ContextState,b as templateString};
@@ -1,13 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{b as r}from"./chunk-GZPNIYVZ.js";r();r();var _="MATILDA_API_KEY";var d="matilda-code-1.0",f="Matilda",x="https://matilda.maincode.com/api/v1/code";var C={id:"matilda",label:"Matilda",description:"Connect to the Matilda Core code API endpoint",protocol:"openai",baseUrl:x,envKey:_,models:[{id:d,displayName:f,contextWindowSize:1048576,description:"Matilda Code model",generationConfig:{openAIRequestProfile:"matilda-code",timeout:6e5,samplingParams:{max_tokens:65536,chat_template_kwargs:{enable_thinking:!0}},schemaCompliance:"openapi_30",splitToolMedia:!0,customHeaders:{"User-Agent":"MatildaCode/0.1"}}}],modelNamePrefix:"",documentationUrl:"https://matilda.maincode.help/welcome/external-api",uiGroup:"third-party"};var b=d,k="text-embedding-v4";r();import{AsyncLocalStorage as y}from"node:async_hooks";import{randomUUID as O}from"node:crypto";r();import{AsyncLocalStorage as g}from"node:async_hooks";var l=new g;var R="x-matilda-reported-operation-id",A="x-matilda-reported-attempt-purpose",P=[R,A],D=new Set(P),I=["answer","tool_followup","continuation","retry","compaction","unknown"],h=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,M=new Set(I),c=new y,E=new WeakSet;function m(){return O()}function s(t,e){let o=Object.freeze({operationId:t,attemptPurpose:e});return E.add(o),o}function B(t){return D.has(t.toLowerCase())}function p(){let t=c.getStore();return t&&E.has(t)?t:void 0}var T=class{activeOperationId;begin(e){return this.activeOperationId=m(),s(this.activeOperationId,e)}continue(e){let o=p()?.operationId??this.activeOperationId??m();return this.activeOperationId=o,s(o,e)}};function i(t,e){return c.run(t,e)}function K(t){c.enterWith(t)}function q(t,e){let o=p();return o?i(s(o.operationId,t),e):e()}function w(t,e){let o={next:(...n)=>i(t,()=>e.next(...n)),return:n=>i(t,()=>e.return(n)),throw:n=>i(t,()=>e.throw(n)),[Symbol.asyncIterator]:()=>o},a=Symbol.asyncDispose,u=a&&e[a];return a&&typeof u=="function"&&(o[a]=()=>i(t,()=>u.call(e))),o}function z(t,e){let o=p();return o?w(s(o.operationId,t),e):e}function F(){let t=p();if(!t||!h.test(t.operationId))return{};let e=l.getStore()?.attempt,o=e!==void 0&&e>1?"retry":t.attemptPurpose;return M.has(o)?{[R]:t.operationId,[A]:o}:{}}export{l as a,R as b,A as c,P as d,B as e,p as f,T as g,i as h,K as i,q as j,w as k,z as l,F as m,_ as n,d as o,f as p,x as q,C as r,b as s,k as t};
4
- /**
5
- * @license
6
- * Copyright 2026 Matilda Team
7
- * SPDX-License-Identifier: Apache-2.0
8
- */
9
- /**
10
- * @license
11
- * Copyright 2025 Google LLC
12
- * SPDX-License-Identifier: Apache-2.0
13
- */
@@ -1,9 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{V as x}from"./chunk-7E2YCGHS.js";import{b as m}from"./chunk-GZPNIYVZ.js";m();var f=x("TRUSTED_HOOKS");var h=(o=>(o.PreToolUse="PreToolUse",o.PostToolUse="PostToolUse",o.PostToolUseFailure="PostToolUseFailure",o.PostToolBatch="PostToolBatch",o.Notification="Notification",o.UserPromptSubmit="UserPromptSubmit",o.UserPromptExpansion="UserPromptExpansion",o.SessionStart="SessionStart",o.Stop="Stop",o.SubagentStart="SubagentStart",o.SubagentStop="SubagentStop",o.PreCompact="PreCompact",o.PostCompact="PostCompact",o.SessionEnd="SessionEnd",o.PermissionRequest="PermissionRequest",o.PermissionDenied="PermissionDenied",o.StopFailure="StopFailure",o.TodoCreated="TodoCreated",o.TodoCompleted="TodoCompleted",o.InstructionsLoaded="InstructionsLoaded",o))(h||{});var O=["enabled","disabled","notifications"];function C(t){let e=t.name??"";switch(t.type){case"command":return e?`${e}:${t.command}`:t.command;case"http":return e?`${e}:${t.url}`:t.url;case"function":return e?`${e}:${t.id??"function"}`:t.id??"function";case"prompt":return e?`${e}:${t.prompt}`:t.prompt;default:return e||"unknown"}}var _=1e4;function P(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").slice(0,_).replace(/&(?:a(?:mp?)?|lt?|gt?)?$/,"")}function b(t,e){switch(t){case"PreToolUse":return new r(e);case"PostToolUse":return new u(e);case"PostToolUseFailure":return new p(e);case"UserPromptExpansion":return new a(e);case"PostToolBatch":return new c(e);case"Stop":case"SubagentStop":return new d(e);case"PermissionRequest":return new l(e);default:return new n(e)}}var n=class{continue;stopReason;suppressOutput;systemMessage;terminalSequence;decision;reason;hookSpecificOutput;constructor(e={}){this.continue=e.continue,this.stopReason=e.stopReason,this.suppressOutput=e.suppressOutput,this.systemMessage=e.systemMessage,this.terminalSequence=e.terminalSequence,this.decision=e.decision,this.reason=e.reason,this.hookSpecificOutput=e.hookSpecificOutput}isBlockingDecision(){return this.decision==="block"||this.decision==="deny"}shouldStopExecution(){return this.continue===!1}getEffectiveReason(){return this.stopReason||this.reason||"No reason provided"}getRawAdditionalContext(){if(this.hookSpecificOutput&&"additionalContext"in this.hookSpecificOutput){let e=this.hookSpecificOutput.additionalContext;return typeof e=="string"?e:void 0}}getAdditionalContext(){let e=this.getRawAdditionalContext();if(e!==void 0)return e.replace(/</g,"&lt;").replace(/>/g,"&gt;")}getBlockingError(){return this.isBlockingDecision()?{blocked:!0,reason:this.getEffectiveReason()}:{blocked:!1,reason:""}}shouldClearContext(){return!1}},r=class extends n{getPermissionDecision(){if(this.hookSpecificOutput&&"permissionDecision"in this.hookSpecificOutput){let e=this.hookSpecificOutput.permissionDecision;if(e==="allow"||e==="deny"||e==="ask")return e}if(this.decision==="allow"||this.decision==="approve")return"allow";if(this.decision==="deny"||this.decision==="block")return"deny";if(this.decision==="ask")return"ask"}getPermissionDecisionReason(){if(this.hookSpecificOutput&&"permissionDecisionReason"in this.hookSpecificOutput){let e=this.hookSpecificOutput.permissionDecisionReason;if(typeof e=="string")return e}return this.reason}isDenied(){return this.getPermissionDecision()==="deny"}isAsk(){return this.getPermissionDecision()==="ask"}isAllowed(){return this.getPermissionDecision()==="allow"}},u=class extends n{decision;reason;constructor(e={}){super(e),this.decision=e.decision??"allow",this.reason=e.reason??"No reason provided",e.decision===void 0&&f.debug('PostToolUseHookOutput: No explicit decision set, defaulting to "allow"'),e.reason===void 0&&f.debug('PostToolUseHookOutput: No explicit reason set, defaulting to "No reason provided"')}},p=class extends n{getAdditionalContext(){return super.getAdditionalContext()}},a=class extends n{getAdditionalContext(){let e=this.getRawAdditionalContext();if(e!==void 0)return P(e)}},c=class extends n{shouldStopExecution(){return super.shouldStopExecution()||this.isBlockingDecision()}},d=class extends n{stopReason;constructor(e={}){super(e),this.stopReason=e.stopReason}getStopReason(){if(this.stopReason)return`Stop hook feedback:
4
- ${this.stopReason}`}},l=class extends n{getPermissionDecision(){if(this.hookSpecificOutput&&"decision"in this.hookSpecificOutput){let e=this.hookSpecificOutput.decision;if(typeof e=="object"&&e!==null&&!Array.isArray(e))return e}}isPermissionDenied(){return this.getPermissionDecision()?.behavior==="deny"}getDenyMessage(){return this.getPermissionDecision()?.message}shouldInterrupt(){return this.getPermissionDecision()?.interrupt===!0}getUpdatedToolInput(){return this.getPermissionDecision()?.updatedInput}getUpdatedPermissions(){return this.getPermissionDecision()?.updatedPermissions}};function H(t,e){let k=new Map(t.map(i=>[i.id,i])),s={created:[],completed:[]};for(let i of e){let g=k.get(i.id);g?g.status!=="completed"&&i.status==="completed"&&s.completed.push(i):s.created.push(i)}return s}export{h as a,O as b,C as c,P as d,b as e,n as f,r as g,u as h,p as i,a as j,c as k,d as l,l as m,H as n};
5
- /**
6
- * @license
7
- * Copyright 2026 Matilda Team
8
- * SPDX-License-Identifier: Apache-2.0
9
- */
@@ -1,120 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{a as k,d as ne}from"./chunk-225CZWD7.js";import{a as Gn,d as $n,n as tt,o as Wt,p as Vn,q as nt,s as ot}from"./chunk-DUB7JMQV.js";import{Aa as $t,Ca as Bt,I as le,K as Je,L as Ye,M as Xe,U as Qe,V as oe,ha as Ze,ia as et,qa as q,qb as jt,rb as Vt,tb as zt,ya as Gt}from"./chunk-ARAB5QTM.js";import{L as He,V as N,c as Bn,d as jn,e as H,f as Me,j as ze,s as We}from"./chunk-7E2YCGHS.js";import{h as j,i as qe,k as Ft,m as Kt}from"./chunk-HEJO7OBH.js";import{b as p}from"./chunk-GZPNIYVZ.js";p();p();p();p();p();var V=class extends Error{constructor(e,n){super(`${e} at position ${n}`),this.position=n}};p();function zn(t){return/^[0-9A-Fa-f]$/.test(t)}function Y(t){return t>="0"&&t<="9"}function Wn(t){return t>=" "}function ke(t){return`,:[]/{}()
4
- +`.includes(t)}function Ht(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"}function qt(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"||t==="_"||t==="$"||t>="0"&&t<="9"}var Jt=/^(http|https|ftp|mailto|file|data|irc):\/\/$/,Yt=/^[A-Za-z0-9-._~:/?#@!$&'()*+;=]$/;function Xt(t){return`,[]/{}
5
- +`.includes(t)}function Qt(t){return _e(t)||wr.test(t)}var wr=/^[[{\w-]$/;function Hn(t){return t===`
6
- `||t==="\r"||t===" "||t==="\b"||t==="\f"}function J(t,e){let n=t.charCodeAt(e);return n===32||n===10||n===9||n===13}function qn(t,e){let n=t.charCodeAt(e);return n===32||n===9||n===13}function Jn(t,e){let n=t.charCodeAt(e);return n===160||n>=8192&&n<=8202||n===8239||n===8287||n===12288}function _e(t){return Zt(t)||rt(t)}function Zt(t){return t==='"'||t==="\u201C"||t==="\u201D"}function en(t){return t==='"'}function rt(t){return t==="'"||t==="\u2018"||t==="\u2019"||t==="`"||t==="\xB4"}function tn(t){return t==="'"}function ue(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,o=t.lastIndexOf(e);return o!==-1?t.substring(0,o)+(n?"":t.substring(o+1)):t}function F(t,e){let n=t.length;if(!J(t,n-1))return t+e;for(;J(t,n-1);)n--;return t.substring(0,n)+e+t.substring(n)}function Yn(t,e,n){return t.substring(0,e)+t.substring(e+n)}function Xn(t){return/[,\n][ \t\r]*$/.test(t)}var xr={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},Ir={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
7
- `,r:"\r",t:" "};function it(t){let e=0,n="";c(["```","[```","{```"]),i()||ee(),c(["```","```]","```}"]);let r=f(",");for(r&&s(),Qt(t[e])&&Xn(n)?(r||(n=F(n,",")),T()):r&&(n=ue(n,","));t[e]==="}"||t[e]==="]";)e++,s();if(e>=t.length)return n;je();function i(){s();let y=g()||C()||S()||w()||R()||B(!1)||Lt();return s(),y}function s(){let y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,A=e,E=a(y);do E=l(),E&&(E=a(y));while(E);return e>A}function a(y){let A=y?J:qn,E="";for(;;)if(A(t,e))E+=t[e],e++;else if(Jn(t,e))E+=" ",e++;else break;return E.length>0?(n+=E,!0):!1}function l(){if(t[e]==="/"&&t[e+1]==="*"){for(;e<t.length&&!Or(t,e);)e++;return e+=2,!0}if(t[e]==="/"&&t[e+1]==="/"){for(;e<t.length&&t[e]!==`
8
- `;)e++;return!0}return!1}function c(y){if(u(y)){if(Ht(t[e]))for(;e<t.length&&qt(t[e]);)e++;return s(),!0}return!1}function u(y){a(!0);for(let A of y){let E=e+A.length;if(t.slice(e,E)===A)return e=E,!0}return!1}function f(y){return t[e]===y?(n+=t[e],e++,!0):!1}function d(y){return t[e]===y?(e++,!0):!1}function m(){return d("\\")}function h(){return s(),t[e]==="."&&t[e+1]==="."&&t[e+2]==="."?(e+=3,s(),d(","),!0):!1}function g(){if(t[e]==="{"){n+="{",e++,s(),d(",")&&s();let y=!0;for(;e<t.length&&t[e]!=="}";){let A;if(y?(A=!0,y=!1):(A=f(","),A||(n=F(n,",")),s()),h(),!(S()||B(!0))){t[e]==="}"||t[e]==="{"||t[e]==="]"||t[e]==="["||t[e]===void 0?n=ue(n,","):U();break}s();let Ve=f(":"),te=e>=t.length;Ve||(Qt(t[e])||te?n=F(n,":"):be()),i()||(Ve||te?n+="null":be())}return t[e]==="}"?(n+="}",e++):n=F(n,"}"),!0}return!1}function C(){if(t[e]==="["){n+="[",e++,s(),d(",")&&s();let y=!0;for(;e<t.length&&t[e]!=="]";)if(y?y=!1:f(",")||(n=F(n,",")),h(),!i()){n=ue(n,",");break}return t[e]==="]"?(n+="]",e++):n=F(n,"]"),!0}return!1}function T(){let y=!0,A=!0;for(;A;)y?y=!1:f(",")||(n=F(n,",")),A=i();A||(n=ue(n,",")),n=`[
9
- ${n}
10
- ]`}function S(){let y=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,E=t[e]==="\\";if(E&&(e++,E=!0),_e(t[e])){let Ve=en(t[e])?en:tn(t[e])?tn:rt(t[e])?rt:Zt,te=e,Re=n.length,M='"';for(e++;;){if(e>=t.length){let O=P(e-1);return!y&&ke(t.charAt(O))?(e=te,n=n.substring(0,Re),S(!0)):(M=F(M,'"'),n+=M,!0)}if(e===A)return M=F(M,'"'),n+=M,!0;if(Ve(t[e])){let O=e,Nt=M.length;if(M+='"',e++,n+=M,s(!1),y||e>=t.length||ke(t[e])||_e(t[e])||Y(t[e]))return v(),!0;let W=P(O-1),Kn=t.charAt(W);if(Kn===",")return e=te,n=n.substring(0,Re),S(!1,W);if(ke(Kn))return e=te,n=n.substring(0,Re),S(!0);n=n.substring(0,Re),e=O+1,M=`${M.substring(0,Nt)}\\${M.substring(Nt)}`}else if(y&&Xt(t[e])){if(t[e-1]===":"&&Jt.test(t.substring(te+1,e+2)))for(;e<t.length&&Yt.test(t[e]);)M+=t[e],e++;return M=F(M,'"'),n+=M,v(),!0}else if(t[e]==="\\"){let O=t.charAt(e+1);if(Ir[O]!==void 0)M+=t.slice(e,e+2),e+=2;else if(O==="u"){let W=2;for(;W<6&&zn(t[e+W]);)W++;W===6?(M+=t.slice(e,e+6),e+=6):e+W>=t.length?e=t.length:_r()}else M+=O,e+=2}else{let O=t.charAt(e);O==='"'&&t[e-1]!=="\\"?(M+=`\\${O}`,e++):Hn(O)?(M+=xr[O],e++):(Wn(O)||Z(O),M+=O,e++)}E&&m()}}return!1}function v(){let y=!1;for(s();t[e]==="+";){y=!0,e++,s(),n=ue(n,'"',!0);let A=n.length;S()?n=Yn(n,A,1):n=F(n,'"')}return y}function w(){let y=e;if(t[e]==="-"){if(e++,ae())return I(y),!0;if(!Y(t[e]))return e=y,!1}for(;Y(t[e]);)e++;if(t[e]==="."){if(e++,ae())return I(y),!0;if(!Y(t[e]))return e=y,!1;for(;Y(t[e]);)e++}if(t[e]==="e"||t[e]==="E"){if(e++,(t[e]==="-"||t[e]==="+")&&e++,ae())return I(y),!0;if(!Y(t[e]))return e=y,!1;for(;Y(t[e]);)e++}if(!ae())return e=y,!1;if(e>y){let A=t.slice(y,e),E=/^0\d/.test(A);return n+=E?`"${A}"`:A,!0}return!1}function R(){return x("true","true")||x("false","false")||x("null","null")||x("True","true")||x("False","false")||x("None","null")}function x(y,A){return t.slice(e,e+y.length)===y?(n+=A,e+=y.length,!0):!1}function B(y){let A=e;if(Ht(t[e])){for(;e<t.length&&qt(t[e]);)e++;let E=e;for(;J(t,E);)E++;if(t[E]==="(")return e=E+1,i(),t[e]===")"&&(e++,t[e]===";"&&e++),!0}for(;e<t.length&&!Xt(t[e])&&!_e(t[e])&&(!y||t[e]!==":");)e++;if(t[e-1]===":"&&Jt.test(t.substring(A,e+2)))for(;e<t.length&&Yt.test(t[e]);)e++;if(e>A){for(;J(t,e-1)&&e>0;)e--;let E=t.slice(A,e);return n+=E==="undefined"?"null":JSON.stringify(E),t[e]==='"'&&e++,!0}}function Lt(){if(t[e]==="/"){let y=e;for(e++;e<t.length&&(t[e]!=="/"||t[e-1]==="\\");)e++;return e++,n+=`"${t.substring(y,e)}"`,!0}}function P(y){let A=y;for(;A>0&&J(t,A);)A--;return A}function ae(){return e>=t.length||ke(t[e])||J(t,e)}function I(y){n+=`${t.slice(y,e)}0`}function Z(y){throw new V(`Invalid character ${JSON.stringify(y)}`,e)}function je(){throw new V(`Unexpected character ${JSON.stringify(t[e])}`,e)}function ee(){throw new V("Unexpected end of json string",t.length)}function U(){throw new V("Object key expected",e)}function be(){throw new V("Colon expected",e)}function _r(){let y=t.slice(e,e+6);throw new V(`Invalid unicode character "${y}"`,e)}}function Or(t,e){return t[e]==="*"&&t[e+1]==="/"}var Pr=N("JSON_PARSE");function Dr(t,e={}){if(!t||typeof t!="string")return e;try{return JSON.parse(t)}catch(n){let o=Ur(t);if(o!==void 0)return o;try{let r=it(t);return JSON.parse(r)}catch(r){let i=eo(t);if(i&&i!==t)try{return JSON.parse(it(i))}catch{}return Pr.error("Failed to parse JSON even with jsonrepair:",{originalError:n,repairError:r,jsonString:t}),e}}}var Qn=Symbol("tool-args-parse-failed");function Zn(t){if(t==null)return{};let e=typeof t=="string"?t.trim():"";if(!e)return{};let n=Dr(e,Qn);return n===Qn?null:n&&typeof n=="object"&&!Array.isArray(n)?n:null}function Ur(t){let e=eo(t);if(e&&e!==t.trim())try{return JSON.parse(e)}catch{return}}function eo(t){let e=t.trimStart();if(!e)return null;let n=e[0];if(n!=="{"&&n!=="[")return null;let o=0,r=!1,i=!1;for(let s=0;s<e.length;s++){let a=e[s];if(r){i?i=!1:a==="\\"?i=!0:a==='"'&&(r=!1);continue}if(a==='"'){r=!0;continue}if(a==="{"||a==="[")o++;else if(a==="}"||a==="]"){if(o--,o===0)return e.slice(0,s+1);if(o<0)return null}}return null}p();var Lr=/[A-Za-z\u00C0-\u024F]/g;function Nr(t){return t>=1024&&t<=1279||t>=1280&&t<=1327||t>=11744&&t<=11775||t>=42560&&t<=42655||t>=12352&&t<=12543||t>=13312&&t<=19903||t>=19968&&t<=40959||t>=63744&&t<=64255||t>=44032&&t<=55215}function nn(t){let e=t.codePointAt(0);return e!==void 0&&Nr(e)}function Fr(t){let e=t.match(Lr)?.length??0;if(e<24)return!1;let n=0;for(let o of t)nn(o)&&n++;return n===0||e>=n*8}function st(t){if(!t||!Fr(t))return t;let e="",n=0,o=[...t];for(;n<o.length;){if(!nn(o[n])){e+=o[n],n++;continue}let r=n;for(;r>0&&o[r-1]===" ";)r--;let i=n+1;for(;i<o.length&&nn(o[i]);)i++;for(;i<o.length&&o[i]===" ";)i++;let s=r>0?o[r-1]:"",a=i<o.length?o[i]:"";(/[A-Za-z0-9]/.test(s)&&/[A-Za-z0-9]/.test(a)||o[r]===" "||o[i-1]===" ")&&(e+=" "),n=i,r<n&&o[r]===" "&&e.endsWith(" ")&&(e=e.slice(0,-1))}return e.replace(/ {2,}/g," ")}p();var ce=N("TAGGED_THINKING_PARSER"),xe=["<think>","<thinking>"],Ie=["</think>","</thinking>"],Kr=Math.max(...xe.map(t=>t.length),...Ie.map(t=>t.length));function we(t,e,n){e&&t.push(n==="thought"?{text:e,thought:!0}:{text:e})}function at(t,e,n){let o=t.length-e;return o<=0||o>Kr?!1:n.some(r=>r.startsWith(t.slice(e,e+o)))}function lt(t,e,n){return n.find(o=>t.startsWith(o,e))}function rn(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!==t&&(e=e.replace(/[ \t]{2,}/g," ")),e}function to(t){let e=[];for(let n of t){if(n.thought===!0||typeof n.text!="string"){e.push(n);continue}let o=st(rn(n.text));(o.length>0||/^\s+$/.test(n.text))&&e.push({text:o.length>0?o:n.text})}return e}var on=class{mode="text";buffer="";parse(e,n=!1){this.buffer+=e;let o=this.buffer.toLowerCase(),r=[],i="",s=0;for(;s<this.buffer.length;){if(this.mode==="text"){let a=lt(o,s,xe);if(a){ce.debug(`taggedThinking: detected open tag "${a}" at offset ${s}`),we(r,i,this.mode),i="",this.mode="thought",s+=a.length;continue}let l=lt(o,s,Ie);if(l){ce.debug(`taggedThinking: dropping orphan close tag "${l}" at offset ${s}`),we(r,i,this.mode),i="",s+=l.length;continue}if(!n&&(at(o,s,xe)||at(o,s,Ie)))break}else{let a=lt(o,s,Ie);if(a){ce.debug(`taggedThinking: detected close tag "${a}" at offset ${s}`),we(r,i,this.mode),i="",this.mode="text",s+=a.length;continue}let l=lt(o,s,xe);if(l){s+=l.length;continue}if(!n&&(at(o,s,Ie)||at(o,s,xe)))break}i+=this.buffer[s],s+=1}return s<this.buffer.length?(we(r,i,this.mode),this.buffer=this.buffer.slice(s),ce.debug(`taggedThinking: emitted ${r.length} part(s), buffered ${this.buffer.length} char(s)`),to(r)):(this.buffer="",this.mode==="thought"&&i&&ce.warn(`taggedThinking: flushing ${i.length} chars of unclosed thought on stream end`),we(r,i,this.mode),ce.debug(`taggedThinking: emitted ${r.length} part(s), flush complete`),to(r))}};function no(t){return new on().parse(t,!0)}p();function oo(t,e="auto"){return e==="openapi_30"?Gr(t):t}function Gr(t){let e=n=>{if(typeof n!="object"||n===null)return n;if(Array.isArray(n))return n.map(e);let o=n,r={};if(Array.isArray(o.type)){let i=o.type;i.length===2&&i.includes("null")?(r.type=i.find(s=>s!=="null"),r.nullable=!0):r.type=i[0]}else o.type!==void 0&&(r.type=o.type);o.const!==void 0&&(r.enum=[o.const],delete r.const),typeof o.exclusiveMinimum=="number"&&(r.minimum=o.exclusiveMinimum,r.exclusiveMinimum=!0),typeof o.exclusiveMaximum=="number"&&(r.maximum=o.exclusiveMaximum,r.exclusiveMaximum=!0),Array.isArray(o.items)?delete r.items:typeof o.items=="object"&&o.items!==null&&(r.items=e(o.items)),Array.isArray(o.enum)&&(r.enum=o.enum.map(String));for(let[i,s]of Object.entries(o))i==="type"||i==="const"||i==="exclusiveMinimum"||i==="exclusiveMaximum"||i==="items"||i==="enum"||i==="$schema"||i==="$id"||i==="default"||i==="dependencies"||i==="patternProperties"||(r[i]=e(s));return r};return e(t)}p();function de(t){return!Number.isFinite(t)||t<=0?0:Math.ceil(t/4)}function ut(t){let e=t.candidates||0,n=t.thoughts||0;return n>e?e+n:Math.max(e,n)}function $r(t){return t.total&&t.total>0?Math.max(t.total,(t.prompt||0)+ut(t)):(t.prompt||0)+ut(t)}function Br(t){let e=Math.max(0,t.thoughtsTokens||0),n=ut({candidates:t.outputTokens||0,thoughts:e}),o=Math.max(t.totalTokens||0,(t.inputTokens||0)+n);return{...t,outputTokens:n,thoughtsTokens:e,totalTokens:o}}var z=N("CONVERTER"),co="(attached media from previous tool call)";function po(t,e={}){let n=t.prompt_tokens||0,o=t.completion_tokens||0,r=t.total_tokens||0,i=t.prompt_tokens_details,s=i?.cached_tokens??i?.cachedTokens??t.cached_tokens??t.prompt_cache_hit_tokens??t.cache_read_input_tokens??0,a=t.completion_tokens_details,l=a?.reasoning_tokens??a?.reasoningTokens??t.reasoning_tokens??0,c=Math.max(0,e.estimatedReasoningTokens??0),u=Math.max(0,e.estimatedContentTokens??0),f=l>0?l:c,d=o;f>0&&(o>=f?d=o:d=o+f),(u>0||c>0)&&(d=Math.max(d,u+(l>0?0:c),u+f)),r>n&&(n>0||o>0||f>0)&&(d=Math.max(d,r-n)),f===0&&c>0&&(f=c),f>d&&(f=d);let m=t.usage_is_incomplete===!0||o>0&&n===0||r>0&&n===0&&o===0,h=n,g=r;return(g===0&&(h>0||d>0)||g>0&&h>0&&g<h+d)&&(g=h+d),{promptTokenCount:h,candidatesTokenCount:d,totalTokenCount:g,cachedContentTokenCount:s,thoughtsTokenCount:f,...m?{usageIsIncomplete:!0}:{}}}var jr=64,ro=1024;function io(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)?(z.debug(`normalizeStreamingTextDelta: cumulative rewind suppression (emitted=${e.emittedText.length}b, chunk=${t.length}b)`),""):(z.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,r=n>=ro&&e.emittedLength>n?e.emittedLength:n;if(t.length>r){let i=t.slice(r);return e.emittedText=t,e.emittedLength=t.length,e.cumulativeMode=!0,z.debug(`normalizeStreamingTextDelta: entered cumulative mode (prefix overlap, baseline=${n}b sliceFrom=${r}b -> curr=${t.length}b)`),i}}return t===e.emittedText?t.length>=jr?(e.cumulativeMode=!0,z.debug(`normalizeStreamingTextDelta: entered cumulative mode (exact repeat, ${t.length}b)`),""):(e.emittedLength+=t.length,t):(e.emittedText.length<ro&&(e.emittedText+=t),e.emittedLength+=t.length,t)}function fo(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 r={};for(let[i,s]of Object.entries(o))if(i==="type"&&typeof s=="string"){let a=s.toLowerCase();a==="integer"?r[i]="integer":a==="number"?r[i]="number":r[i]=a}else i==="minimum"||i==="maximum"||i==="multipleOf"?typeof s=="string"&&!isNaN(Number(s))?r[i]=Number(s):r[i]=s:i==="minLength"||i==="maxLength"||i==="minItems"||i==="maxItems"?typeof s=="string"&&!isNaN(Number(s))?r[i]=parseInt(s,10):r[i]=s:typeof s=="object"?r[i]=n(s):r[i]=s;return r};return n(e)}async function Vr(t,e="auto"){let n=[];for(let o of t){let r;if("tool"in o?r=await o.tool():r=o,r.functionDeclarations){for(let i of r.functionDeclarations)if(i.name&&i.description){let s;i.parametersJsonSchema?s={...i.parametersJsonSchema}:i.parameters&&(s=fo(i.parameters)),s&&(s=oo(s,e)),n.push({type:"function",function:{name:i.name,description:i.description,parameters:s}})}}}return n}function zr(t,e,n={cleanOrphanToolCalls:!0}){let o=[];return Hr(t,o),qr(t.contents,o,e),o=uo(o),n.cleanOrphanToolCalls&&(o=ri(o),o=uo(o)),o}function Wr(t,e){let n=t.candidates?.[0],o=n?.content?.parts||[],r=[],i=[],s=[],a=0;for(let g of o)typeof g=="string"?i.push(g):"text"in g&&g.text?"thought"in g&&g.thought?r.push(g.text):i.push(g.text):"functionCall"in g&&g.functionCall&&(s.push({id:g.functionCall.id||`call_${a}`,type:"function",function:{name:g.functionCall.name||"",arguments:JSON.stringify(g.functionCall.args||{})}}),a+=1);let l={role:"assistant",content:i.join("")||null,refusal:null},c=r.join("");c&&(l.reasoning_content=c),s.length>0&&(l.tool_calls=s);let u=oi(n?.finishReason),f=t.usageMetadata,d={prompt_tokens:f?.promptTokenCount||0,completion_tokens:f?.candidatesTokenCount||0,total_tokens:f?.totalTokenCount||0};f?.cachedContentTokenCount!==void 0&&(d.prompt_tokens_details={cached_tokens:f.cachedContentTokenCount});let m=t.createTime?Number(t.createTime):Date.now(),h=Number.isFinite(m)?Math.floor(m/1e3):Math.floor(Date.now()/1e3);return{id:t.responseId||`gemini-${Date.now()}`,object:"chat.completion",created:h,model:t.modelVersion||e.model,choices:[{index:0,message:l,finish_reason:u,logprobs:null}],usage:d}}function Hr(t,e){if(!t.config?.systemInstruction)return;let n=mo(t.config.systemInstruction);n&&e.push({role:"system",content:n})}function qr(t,e,n){if(Array.isArray(t))for(let o of t)so(o,e,n);else t&&so(t,e,n)}function so(t,e,n){if(typeof t=="string"){e.push({role:"user",content:t});return}if(!Qr(t))return;let o=t.parts||[],r=t.role==="model"?"assistant":"user",i=[],s=[],a=[],l=0,c=new Set,u=new Set,f=[];for(let d of o){if(typeof d=="string"){i.push({type:"text",text:d});continue}"text"in d&&"thought"in d&&d.thought&&r==="assistant"&&d.text&&s.push(d.text),"text"in d&&d.text&&!("thought"in d&&d.thought)&&i.push({type:"text",text:d.text});let m=go(d,n);if(m&&r==="user"&&i.push(m),"functionCall"in d&&d.functionCall&&r==="assistant"){let h=d.functionCall.id;if(h){if(c.has(h)){z.debug(`Dropping duplicate functionCall id=${h} while converting content`);continue}c.add(h)}a.push({id:h||`call_${l}`,type:"function",function:{name:d.functionCall.name||"",arguments:JSON.stringify(d.functionCall.args||{})}}),l+=1}if(d.functionResponse&&r==="user"){let h=d.functionResponse.id;if(h){if(u.has(h))continue;u.add(h)}let g=Yr(d.functionResponse,n);if(g){if(n.splitToolMedia&&Array.isArray(g.content)){let C=[],T=[];for(let S of g.content)S&&(S.type==="image_url"||S.type==="input_audio"||S.type==="video_url"||S.type==="file")?C.push(S):S&&S.type==="text"&&T.push(S);if(C.length>0){let S=T.map(v=>v.text).join(`
11
- `);g.content=S||"[media attached in following user message]",f.push(...C)}}e.push(g)}}}if(f.length>0&&e.push({role:"user",content:[{type:"text",text:co},...f]}),r==="assistant"){if(i.length===0&&a.length===0&&s.length===0)return;let m={role:"assistant",content:i.filter(g=>g.type==="text").map(g=>g.text).join("")||(s.length>0?"":null)};a.length>0&&(m.tool_calls=a);let h=s.join("");h&&(m.reasoning_content=h),e.push(m);return}i.length>0&&e.push({role:"user",content:i})}function Jr(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 Yr(t,e){let n=Jr(t.response),o=[];n&&o.push({type:"text",text:n});for(let r of t.parts||[]){if("text"in r&&typeof r.text=="string"){r.text.length>0&&o.push({type:"text",text:r.text});continue}let i=go(r,e);i&&o.push(i)}return o.length===0?{role:"tool",tool_call_id:t.id||"",content:""}:{role:"tool",tool_call_id:t.id||"",content:o}}function go(t,e){let{modalities:n}=e;if(t.inlineData?.mimeType&&t.inlineData?.data){let o=t.inlineData.mimeType,r=ao(o),i=t.inlineData.displayName||o;if(r==="image")return n.image?{type:"image_url",image_url:{url:`data:${o};base64,${t.inlineData.data}`}}:re("image",i,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}`}}:re("pdf",i,e);if(r==="audio"){if(!n.audio)return re("audio",i,e);let s=Xr(o);if(s)return{type:"input_audio",input_audio:{data:`data:${o};base64,${t.inlineData.data}`,format:s}}}return r==="video"?n.video?{type:"video_url",video_url:{url:`data:${o};base64,${t.inlineData.data}`}}:re("video",i,e):{type:"text",text:`Unsupported inline media type: ${o} (${i}).`}}if(t.fileData?.mimeType&&t.fileData?.fileUri){let o=t.fileData.displayName||"file",r=t.fileData.fileUri,i=t.fileData.mimeType,s=ao(i);if(s==="image")return n.image?{type:"image_url",image_url:{url:r}}:re("image",o,e);if(i==="application/pdf")return n.pdf?{type:"file",file:{filename:o,file_data:r}}:re("pdf",o,e);if(s==="video")return n.video?{type:"video_url",video_url:{url:r}}:re("video",o,e);let a=t.fileData.displayName?` (${t.fileData.displayName})`:"";return{type:"text",text:`Unsupported file media type: ${i}${a}.`}}return null}function re(t,e,n){z.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:
12
- /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 ao(t){return t.startsWith("image/")?"image":t.startsWith("audio/")?"audio":t.startsWith("video/")?"video":"file"}function Xr(t){return t.includes("wav")?"wav":t.includes("mp3")||t.includes("mpeg")?"mp3":null}function Qr(t){return typeof t=="object"&&t!==null&&"role"in t&&"parts"in t&&Array.isArray(t.parts)}function mo(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>mo(e)).filter(Boolean).join(`
13
- `):typeof t=="object"&&t!==null&&"parts"in t&&t.parts?.map(n=>typeof n=="string"?n:"text"in n&&n.text||"").filter(Boolean).join(`
14
- `)||""}function ct(t,e,n=!0){if(e.taggedThinkingParser)return e.taggedThinkingParser.parse(t,n);if(e.responseParsingOptions?.taggedThinkingTags)return no(t);if(!t)return[];let o=st(rn(t));return o?[{text:o}]:[]}function Zr(t,e){let n=t.choices?.[0],o=new ne;if(n){let r=[];if(!e.responseParsingOptions?.taggedThinkingTags){let i=n.message.reasoning_content??n.message.reasoning;i&&r.push({text:i,thought:!0})}if(n.message.content&&r.push(...ct(n.message.content,e)),n.message.tool_calls){for(let i of n.message.tool_calls)if(i.function){let s=Zn(i.function.arguments);if(s===null)continue;r.push({functionCall:{id:i.id,name:i.function.name,args:s}})}}o.candidates=[{content:{parts:r,role:"model"},finishReason:ho(n.finish_reason),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 r=t.choices?.[0]?.message,i=r?.reasoning_content??r?.reasoning??"",s=typeof r?.content=="string"?r.content:"";o.usageMetadata=po(t.usage,{estimatedReasoningTokens:de(i.length),estimatedContentTokens:de(s.length)})}return o}function ei(t,e){let n=t.choices?.[0],o=new ne,r=e.toolCallParser;if(!r)throw new Error("convertOpenAIChunkToGemini requires requestContext.toolCallParser \u2014 attach a fresh StreamingToolCallParser at stream start.");if(n){let i=[];if(!e.responseParsingOptions?.taggedThinkingTags){let c=n.delta?.reasoning_content??n.delta?.reasoning;if(c){let u=io(c,e.reasoningDeltaState??={emittedText:"",emittedLength:0,cumulativeMode:!1});u&&i.push({text:u,thought:!0})}}if(typeof n.delta?.content=="string"){let c=io(n.delta.content,e.textDeltaState??={emittedText:"",emittedLength:0,cumulativeMode:!1});(c||n.finish_reason)&&i.push(...ct(c,e,!!n.finish_reason))}else n.finish_reason&&i.push(...ct("",e,!0));if(n.delta?.tool_calls)for(let c of n.delta.tool_calls){let u=c.index??0;c.function?.arguments?r.addChunk(u,c.function.arguments,c.id,c.function.name):r.addChunk(u,"",c.id,c.function?.name)}let s=!1;if(n.finish_reason){s=r.hasIncompleteToolCalls();let c=r.getCompletedToolCalls();for(let u of c)u.name&&i.push({functionCall:{id:u.id||`call_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,name:u.name,args:u.args}})}let a=s&&n.finish_reason!=="length"?"length":n.finish_reason,l={content:{parts:i,role:"model"},index:0,safetyRatings:[]};a&&(l.finishReason=ho(a)),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=po(t.usage,ni(e))),o}function ti(t){let e=t.toolCallParser;if(!e)return null;let n=[],o=e.getStrictCompletedToolCalls(),r=e.hasIncompleteToolCalls();for(let s of o)s.name&&n.push({functionCall:{id:s.id||`call_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,name:s.name,args:s.args}});if(n.push(...ct("",t,!0)),n.length===0&&!r)return null;let i=new ne;return i.candidates=[{content:{parts:n,role:"model"},index:0,safetyRatings:[],finishReason:r?k.MAX_TOKENS:k.STOP}],i.responseId=`stream-flush-${Date.now()}`,i.createTime=new Date().getTime().toString(),i.modelVersion=t.model,i.promptFeedback={safetyRatings:[]},i}function ni(t){return{estimatedReasoningTokens:de(t.reasoningDeltaState?.emittedLength??0),estimatedContentTokens:de(t.textDeltaState?.emittedLength??0)}}function ho(t){return t?{stop:k.STOP,length:k.MAX_TOKENS,content_filter:k.SAFETY,function_call:k.STOP,tool_calls:k.STOP}[t]||k.FINISH_REASON_UNSPECIFIED:k.FINISH_REASON_UNSPECIFIED}function oi(t){if(!t)return"stop";switch(t){case k.STOP:return"stop";case k.MAX_TOKENS:return"length";case k.SAFETY:case k.RECITATION:case k.BLOCKLIST:case k.PROHIBITED_CONTENT:case k.SPII:case k.IMAGE_SAFETY:case k.IMAGE_RECITATION:case k.IMAGE_PROHIBITED_CONTENT:case k.IMAGE_OTHER:return"content_filter";case k.NO_IMAGE:return"stop";default:return"stop"}}function sn(t){return t.role==="assistant"&&"tool_calls"in t&&Array.isArray(t.tool_calls)&&t.tool_calls.length>0}function lo(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===co}function ri(t){let e=[],n=new Map,o=new Map,r=new Map,i=new Set,s=new Set;for(let a=0;a<t.length;a+=1){let l=t[a];if(sn(l)){let c=[],u=new Set;for(let C of l.tool_calls){let T=C.id;!T||s.has(T)||u.has(T)||(u.add(T),c.push(C))}let f=new Set,d=[],m=[],h=!1;for(let C=a+1;C<t.length;C+=1){let T=t[C];if(T.role==="tool"&&"tool_call_id"in T){if(!T.tool_call_id){h=!1;continue}u.has(T.tool_call_id)&&!f.has(T.tool_call_id)?(f.add(T.tool_call_id),d.push(C),h=!0):h=!1;continue}if(lo(T)){h&&m.push(C);continue}if(!(T.role==="assistant"&&!sn(T)))break}let g=c.filter(C=>f.has(C.id));for(let C of g)s.add(C.id);n.set(a,g),o.set(a,d),r.set(a,m)}}for(let a=0;a<t.length;a+=1){if(i.has(a))continue;let l=t[a];if(sn(l)){let c=l.reasoning_content,u=n.get(a)??[];if(u.length>0){let f={...l};f.tool_calls=u,e.push(f);for(let d of o.get(a)??[]){let m=t[d];m&&(e.push(m),i.add(d))}for(let d of r.get(a)??[]){let m=t[d];m&&(e.push(m),i.add(d))}}else if(typeof l.content=="string"&&l.content.trim()||c){let f={...l};delete f.tool_calls,e.push(f)}else z.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?z.debug(`cleanOrphanedToolCalls: dropping orphaned tool response ${l.tool_call_id||"<empty>"}`):lo(l)?z.debug("cleanOrphanedToolCalls: dropping orphaned split tool media message"):e.push(l)}return e}function uo(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 r="tool_calls"in o?o.tool_calls||[]:[],i="tool_calls"in n?n.tool_calls||[]:[],s=o.content,a=n.content,l=Array.isArray(s)||Array.isArray(a),c;if(l){let f=Array.isArray(s)?s:typeof s=="string"&&s?[{type:"text",text:s}]:[],d=Array.isArray(a)?a:typeof a=="string"&&a?[{type:"text",text:a}]:[];c=[...f,...d]}else c=[typeof s=="string"?s:"",typeof a=="string"?a:""].filter(Boolean).join("")||null;let u=[...r,...i];o.content=c||null,u.length>0&&(o.tool_calls=u);continue}}e.push(n)}return e}var dt={convertGeminiToolParametersToOpenAI:fo,convertGeminiToolsToOpenAI:Vr,convertGeminiRequestToOpenAI:zr,convertGeminiResponseToOpenAI:Wr,convertOpenAIResponseToGemini:Zr,convertOpenAIChunkToGemini:ei,flushOpenAIStreamToGemini:ti};p();var an="MATILDA_BASE_URL",ii=new Set(["localhost","127.0.0.1","[::1]"]);function si(t){return t.trim().replace(/\/+$/,"").replace(/\/api\/v1(?:\/code)?$/i,"")}function Co(t){let e;try{e=new URL(si(t))}catch{return}if(!(!(e.protocol==="https:"||e.protocol==="http:"&&ii.has(e.hostname))||e.username||e.password||e.search||e.hash))return`${e.origin}${e.pathname.replace(/\/+$/,"")}/api/v1/code`}function yo(t=process.env){let e=t[an]?.trim();return e?Co(e):void 0}function Oe(t,e=process.env){let n=yo(e);if(!n||!t)return!1;try{return new URL(t).origin===new URL(n).origin}catch{return!1}}function To(t){return t.apiKeyEnvKey===tt||ai(t.baseUrl)}function ai(t){if(!t)return!0;let e=t.endsWith("/")?t.slice(0,-1):t,n=null;try{n=new URL(e).hostname.toLowerCase()}catch{n=null}return n!==null&&(n==="matilda.maincode.com"||n.endsWith(".matilda.maincode.com")||n==="localhost"||n==="127.0.0.1"||n.endsWith(".matilda")||n==="core-api.matilda")||Oe(e)}function li(t=process.env){let e=t[an]?.trim();if(e&&!Co(e))throw new ze(`${an} must be the HTTPS address of your Matilda deployment, such as https://matilda.example.com. HTTP is accepted only for localhost.`)}function K(t=process.env){return li(t),yo(t)??nt}p();p();p();Kt();var ui=new Set(["service.version","service.instance.id","session.id"]);function ie(t,e){qe.warn(t),e?.push(t)}function So(t,e){if(!t)return{};let n={};for(let o of t.split(",")){let r=o.trim();if(!r)continue;let i=r.indexOf("=");if(i<0){ie(`Skipping malformed OTEL_RESOURCE_ATTRIBUTES entry: "${r}" (hint: percent-encode literal commas as %2C)`,e);continue}let s=r.slice(0,i).trim();if(!s)continue;let a=r.slice(i+1).trim(),l;try{l=decodeURIComponent(s)}catch{ie(`Invalid percent-encoding in OTEL_RESOURCE_ATTRIBUTES key "${s}", using raw key`,e),l=s}let c;try{c=decodeURIComponent(a)}catch{ie(`Invalid percent-encoding in OTEL_RESOURCE_ATTRIBUTES for key "${l}", using raw value`,e),c=a}n[l]=c}return n}function ln(t,e,n){for(let o of ui)o in t&&(ie(`${e} cannot override reserved key "${o}"; ignoring`,n),delete t[o]);return t}function Ao(t,e){if(t==null)return{};if(typeof t!="object"||Array.isArray(t))return ie("settings.telemetry.resourceAttributes must be an object; ignoring",e),{};let n={};for(let[o,r]of Object.entries(t)){let i=o.trim();if(!i){ie("settings.telemetry.resourceAttributes has an empty or whitespace-only key; ignoring",e);continue}typeof r=="string"?n[i]=r:ie(`settings.telemetry.resourceAttributes value for "${i}" must be a string (got ${typeof r}); ignoring`,e)}return n}function Pe(t){if(t!==void 0)return t==="true"||t==="1"}async function ci(t){let e=t.argv??{},n=t.env??{},o=t.settings??{},r=e.telemetry??Pe(n.MATILDA_TELEMETRY_ENABLED)??o.enabled,i=e.telemetryOtlpEndpoint??n.MATILDA_TELEMETRY_OTLP_ENDPOINT??n.OTEL_EXPORTER_OTLP_ENDPOINT??o.otlpEndpoint,s=e.telemetryOtlpProtocol??n.MATILDA_TELEMETRY_OTLP_PROTOCOL??o.otlpProtocol,a=["grpc","http"].find(R=>R===s);if(s!==void 0&&a===void 0)throw new ze(`Invalid telemetry OTLP protocol: ${String(s)}. Valid values are: grpc, http`);let l=e.telemetryLogPrompts??Pe(n.MATILDA_TELEMETRY_LOG_PROMPTS)??o.logPrompts,c=Pe(n.MATILDA_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES)??o.includeSensitiveSpanAttributes??!1,u=e.telemetryOutfile??n.MATILDA_TELEMETRY_OUTFILE??o.outfile,f=n.MATILDA_TELEMETRY_OTLP_TRACES_ENDPOINT??n.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT??o.otlpTracesEndpoint,d=n.MATILDA_TELEMETRY_OTLP_LOGS_ENDPOINT??n.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT??o.otlpLogsEndpoint,m=n.MATILDA_TELEMETRY_OTLP_METRICS_ENDPOINT??n.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT??o.otlpMetricsEndpoint,h=[],g=ln(So(n.OTEL_RESOURCE_ATTRIBUTES,h),"OTEL_RESOURCE_ATTRIBUTES",h),C=ln(Ao(o.resourceAttributes,h),"settings.telemetry.resourceAttributes",h),T={...g,...C},S=n.OTEL_SERVICE_NAME?.trim();S&&(T["service.name"]=S);let v=Object.keys(T).length?T:void 0,w=Pe(n.MATILDA_TELEMETRY_METRICS_INCLUDE_SESSION_ID)??o.metrics?.includeSessionId??!1;return{enabled:r,otlpEndpoint:i,otlpProtocol:a,otlpTracesEndpoint:f,otlpLogsEndpoint:d,otlpMetricsEndpoint:m,logPrompts:l,includeSensitiveSpanAttributes:c,outfile:u,resourceAttributes:v,metrics:{includeSessionId:w},resourceAttributeWarnings:h.length?h:void 0}}p();Kt();import*as Q from"node:fs";import*as Ut from"node:path";p();p();p();p();Kt();p();import{AsyncLocalStorage as di}from"node:async_hooks";var Eo=new di;p();import*as G from"node:path";import{promises as gt}from"node:fs";p();p();import pi from"crypto";var ft=new Uint8Array(256),pt=ft.length;function un(){return pt>ft.length-16&&(pi.randomFillSync(ft),pt=0),ft.slice(pt,pt+=16)}p();var _=[];for(let t=0;t<256;++t)_.push((t+256).toString(16).slice(1));function vo(t,e=0){return _[t[e+0]]+_[t[e+1]]+_[t[e+2]]+_[t[e+3]]+"-"+_[t[e+4]]+_[t[e+5]]+"-"+_[t[e+6]]+_[t[e+7]]+"-"+_[t[e+8]]+_[t[e+9]]+"-"+_[t[e+10]]+_[t[e+11]]+_[t[e+12]]+_[t[e+13]]+_[t[e+14]]+_[t[e+15]]}p();p();import fi from"crypto";var cn={randomUUID:fi.randomUUID};function gi(t,e,n){if(cn.randomUUID&&!e&&!t)return cn.randomUUID();t=t||{};let o=t.random||(t.rng||un)();if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){n=n||0;for(let r=0;r<16;++r)e[n+r]=o[r];return e}return vo(o)}var dn=gi;import*as X from"os";var mt=N("OPENAI_LOGGER"),mi="########",hi=/^[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 Ci(t,e){let n=e||process.cwd();if(!t)return G.join(n,"logs","openai");let o=t;return t==="~"||t.startsWith("~/")?o=G.join(X.homedir(),t.slice(1)):G.isAbsolute(t)||(o=G.resolve(n,t)),G.normalize(o)}function bo(t){return t&&t.replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||void 0}function yi(t){let e=t.split("#");if(e.length!==3)return;let[,n,o]=e;if(!(!n||!o||!/^\d+$/.test(o)))return`subagent-${n}`}function Ti(t){if(t)return le(t)?bo(t):bo(yi(t))}function Si(t){if(!t)return;let e=t.indexOf(mi);if(e>0)return t.slice(0,e);if(hi.test(t))return t;let n=t.split("#");if(n.length>=3&&n[0])return n[0]}function Ai(t){let e=t?.trim(),n=Si(e);return!e&&!n?null:{...e?{promptId:e}:{},...n?{sessionId:n}:{}}}var De=class{logDir;initialized=!1;constructor(e,n){this.logDir=Ci(e,n)}async initialize(){if(!this.initialized)try{await gt.mkdir(this.logDir,{recursive:!0}),this.initialized=!0}catch(e){throw mt.error("Failed to initialize OpenAI logger:",e),new Error(`Failed to initialize OpenAI logger: ${e}`)}}async logInteraction(e,n,o,r){this.initialized||await this.initialize();let i=new Date().toISOString().replace(/:/g,"-"),s=dn().slice(0,8),a=Ti(r),l=a?`openai-${i}-${s}-${a}.json`:`openai-${i}-${s}.json`,c=G.join(this.logDir,l),u={timestamp:new Date().toISOString(),request:e,response:n||null,error:o?{message:o.message,stack:o.stack}:null,context:Ai(r),system:{hostname:X.hostname(),platform:X.platform(),release:X.release(),nodeVersion:process.version}};try{return await gt.writeFile(c,JSON.stringify(u,null,2),"utf-8"),c}catch(f){throw mt.error("Failed to write OpenAI log file:",f),new Error(`Failed to write OpenAI log file: ${f}`)}}async getLogFiles(e){this.initialized||await this.initialize();try{let o=(await gt.readdir(this.logDir)).filter(r=>r.startsWith("openai-")&&r.endsWith(".json")).map(r=>G.join(this.logDir,r)).sort().reverse();return e?o.slice(0,e):o}catch(n){return n.code==="ENOENT"?[]:(mt.error("Failed to read OpenAI log directory:",n),[])}}async readLogFile(e){try{let n=await gt.readFile(e,"utf-8");return JSON.parse(n)}catch(n){throw mt.error(`Failed to read log file ${e}:`,n),new Error(`Failed to read log file: ${n}`)}}},jl=new De;p();var Ei="MATILDA_CODE_PROFILE_RUNTIME";function Ro(t=process.env){return t[Ei]==="1"}var fn=class{enabled;now;startedAt;requestIndex=0;openAIWireRequestIndex=0;requests=[];openaiWireRequests=[];tools=Mo();constructor(e={}){this.enabled=e.enabled??Ro(),this.now=e.now??(()=>new Date().toISOString()),this.startedAt=this.now()}reset(e={}){this.enabled=e.enabled??Ro(),this.startedAt=this.now(),this.requestIndex=0,this.openAIWireRequestIndex=0,this.requests=[],this.openaiWireRequests=[],this.tools=Mo()}isEnabled(){return this.enabled}recordGenerateContentRequest(e,n){this.enabled&&(this.requestIndex+=1,this.requests.push({index:this.requestIndex,timestamp:this.now(),source:n.source,model:e.model,stream:n.stream,serializedBytes:D(_i(e)),contents:ko(e.contents),systemInstructionBytes:Ri(e.config?.systemInstruction),generationConfigBytes:D(_o(e.config)),tools:ki(e.config?.tools)}))}recordOpenAIWireRequest(e){this.enabled&&(this.openAIWireRequestIndex+=1,this.openaiWireRequests.push({index:this.openAIWireRequestIndex,timestamp:this.now(),...vi(e)}))}recordToolUse(e,n){if(!this.enabled)return;let o=D(n),r=this.getToolNameDiagnostics(e);r.uses+=1,r.argBytes+=o,r.maxArgBytes=Math.max(r.maxArgBytes,o),this.tools.toolUseCount+=1,this.tools.totalToolUseArgBytes+=o,this.tools.maxToolUseArgBytes=Math.max(this.tools.maxToolUseArgBytes,o)}recordToolResult(e){if(!this.enabled)return;let n=this.getToolNameDiagnostics(e.name);n.results+=1,n.resultBytes+=e.resultBytes,n.maxResultBytes=Math.max(n.maxResultBytes,e.resultBytes),e.isError&&(n.errors+=1,this.tools.toolResultErrorCount+=1),this.tools.toolResultCount+=1,this.tools.totalToolResultBytes+=e.resultBytes,this.tools.maxToolResultBytes=Math.max(this.tools.maxToolResultBytes,e.resultBytes)}snapshot(){return{enabled:this.enabled,startedAt:this.startedAt,requests:this.requests.map(e=>({...e,contents:{...e.contents,roleCounts:{...e.contents.roleCounts}},tools:{...e.tools}})),openaiWireRequests:this.openaiWireRequests.map(e=>({...e,messageBytesByRole:{...e.messageBytesByRole},topLevelKeys:[...e.topLevelKeys]})),tools:{...this.tools,byName:Object.fromEntries(Object.entries(this.tools.byName).map(([e,n])=>[e,{...n}]))}}}getToolNameDiagnostics(e){let n=this.tools.byName[e];if(n)return n;let o=bi();return this.tools.byName[e]=o,o}},gn=new fn;function vi(t){let e=pe(t),n=Array.isArray(e.messages)?e.messages:[],o=Array.isArray(e.tools)?e.tools:[],r={};for(let i of n){let s=pe(i),a=typeof s.role=="string"?s.role:"unknown";r[a]=(r[a]??0)+D(s.content)}return{model:typeof e.model=="string"?e.model:"unknown",stream:e.stream===!0,bodyBytes:D(t),messageCount:n.length,messageBytesByRole:r,toolsCount:o.length,toolSchemaBytes:D(o),topLevelKeys:Object.keys(e).sort()}}function Mo(){return{toolUseCount:0,toolResultCount:0,toolResultErrorCount:0,totalToolUseArgBytes:0,maxToolUseArgBytes:0,totalToolResultBytes:0,maxToolResultBytes:0,byName:Object.create(null)}}function bi(){return{uses:0,argBytes:0,maxArgBytes:0,results:0,errors:0,resultBytes:0,maxResultBytes:0}}function ko(t){let e={count:0,roleCounts:{},partCount:0,textBytes:0,functionCallCount:0,functionCallArgBytes:0,functionResponseCount:0,functionResponseBytes:0,inlineDataCount:0,inlineDataBytes:0,fileDataCount:0},n=Array.isArray(t)?t:t==null?[]:[t];for(let o of n){if(e.count+=1,typeof o=="string"){e.roleCounts.user=(e.roleCounts.user??0)+1,e.partCount+=1,e.textBytes+=D(o);continue}let r=pe(o),i=typeof r.role=="string"?r.role:"unknown";e.roleCounts[i]=(e.roleCounts[i]??0)+1;let s=Array.isArray(r.parts)?r.parts:[];Mi(s,e)}return e}function Ri(t){return ko(t).textBytes}function Mi(t,e){for(let n of t){if(e.partCount+=1,typeof n=="string"){e.textBytes+=D(n);continue}let o=pe(n);typeof o.text=="string"&&(e.textBytes+=D(o.text));let r=pn(o.functionCall);r&&(e.functionCallCount+=1,e.functionCallArgBytes+=D(r.args));let i=pn(o.functionResponse);i&&(e.functionResponseCount+=1,e.functionResponseBytes+=D(i.response)+D(i.parts));let s=pn(o.inlineData);s&&(e.inlineDataCount+=1,e.inlineDataBytes+=D(s.data)),o.fileData&&(e.fileDataCount+=1)}}function ki(t){let e=Array.isArray(t)?t:[],n=0;for(let o of e){let r=pe(o),i=Array.isArray(r.functionDeclarations)?r.functionDeclarations:[];n+=i.length}return{count:e.length,functionDeclarationCount:n,schemaBytes:D(e)}}function _i(t){return{model:t.model,contents:t.contents,config:_o(t.config)}}function _o(t){if(!t)return;let e=pe(t),n={};for(let[o,r]of Object.entries(e))o!=="abortSignal"&&(n[o]=r);return n}function D(t){return t==null?0:typeof t=="string"?Buffer.byteLength(t,"utf8"):Buffer.byteLength(wi(t),"utf8")}function wi(t){try{return JSON.stringify(t)??""}catch{return"[unserializable]"}}function pe(t){return typeof t=="object"&&t!==null?t:{}}function pn(t){return typeof t=="object"&&t!==null?t:null}p();function wo(t){let e=t.candidates?.[0]?.content?.parts;return!e||e.length===0?!1:e.some(xi)}function xi(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 xo(){let t=Gn.getStore();return{attempt:t?.attempt??1,requestSetupMs:t?.requestSetupMs,retryTotalDelayMs:t?.retryTotalDelayMs}}var se=N("LOGGING_CONTENT_GENERATOR"),Ii=4096,Io="...[truncated]",Oi=Ii-Io.length,Ue=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 De(o.openAILoggingDir,n.getWorkingDir()),this.schemaCompliance=o.schemaCompliance)}openaiLogger;schemaCompliance;modalities;splitToolMedia;generatorAuthType;getWrapped(){return this.wrapped}logApiRequest(e,n,o){let r=JSON.stringify(e);Gt(this.config,new jt(n,o,r,q.getStore()))}_logApiResponse(e,n,o,r,i,s){Bt(this.config,new zt(e,o,n,r,this.generatorAuthType,i,s,q.getStore()))}_logApiError(e,n,o,r,i){let s=jn(o),a=Me(o),l=o?.requestID||o?.request_id||e,c=H(o);$t(this.config,new Vt({responseId:l,model:r,durationMs:n,promptId:i,authType:this.generatorAuthType,errorMessage:s,errorType:a,statusCode:c,subagentName:q.getStore()}))}safelyLogApiError(e,n,o,r,i){try{this._logApiError(e,n,o,r,i)}catch(s){se.warn("Failed to log API error:",s)}}safelyLogApiResponse(e,n,o,r,i,s){try{this._logApiResponse(e,n,o,r,i,s)}catch(a){se.warn("Failed to log API response:",a)}}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=xo(),r=Qe(e.model,n);try{r.setAttribute("llm_request.stream",!1)}catch{}let i=Ft.setSpan(j.active(),r),s=Date.now(),a=le(n),l=this.startCaptureSession();try{gn.recordGenerateContentRequest(e,{stream:!1,source:"generateContent"}),a||(Je(this.config,r,e.config?.systemInstruction),Ye(this.config,r,e.config?.tools));let c=await j.with(i,async()=>{a||this.logApiRequest(this.toContents(e.contents),e.model,n);let u=await l.wrap(()=>this.wrapped.generateContent(e,n)),f=Date.now()-s,d=a?void 0:this.extractResponseText(u);a||Xe(this.config,r,d),this.safelyLogApiResponse(u.responseId??"",f,this.getClientVisibleModelId(e.model,u.modelVersion),n,u.usageMetadata,d);try{await this.safelyLogOpenAIInteraction(await l.resolve(e),u,void 0,n)}catch(m){se.warn("Failed to log OpenAI interaction:",m)}return u});return oe(r,{success:!0,inputTokens:c.usageMetadata?.promptTokenCount,outputTokens:c.usageMetadata?.candidatesTokenCount,cachedInputTokens:c.usageMetadata?.cachedContentTokenCount,durationMs:Date.now()-s,responseId:c.responseId||void 0,finishReason:c.candidates?.[0]?.finishReason||void 0,thoughtsTokenCount:c.usageMetadata?.thoughtsTokenCount,subagentName:q.getStore()||void 0,...o}),c}catch(c){let u=Date.now()-s,f=e.config?.abortSignal?.aborted??!1;throw oe(r,{success:!1,durationMs:u,error:f?et:Ze,errorType:Me(c),errorStatusCode:H(c),subagentName:q.getStore()||void 0,...o}),await j.with(i,async()=>{this.safelyLogApiError("",u,c,this.getClientVisibleModelId(e.model),n);try{await this.safelyLogOpenAIInteraction(await l.resolve(e),void 0,c,n)}catch(d){se.warn("Failed to log OpenAI interaction:",d)}}),c}}async generateContentStream(e,n){let o=xo(),r=Qe(e.model,n);try{r.setAttribute("llm_request.stream",!0)}catch{}let i=Ft.setSpan(j.active(),r),s=Date.now(),a=le(n),l=this.startCaptureSession(),c;try{gn.recordGenerateContentRequest(e,{stream:!0,source:"generateContentStream"}),a||(Je(this.config,r,e.config?.systemInstruction),Ye(this.config,r,e.config?.tools)),c=await j.with(i,async()=>(a||this.logApiRequest(this.toContents(e.contents),e.model,n),l.wrap(()=>this.wrapped.generateContentStream(e,n))))}catch(f){let d=Date.now()-s;j.with(i,()=>this.safelyLogApiError("",d,f,e.model,n));let m=e.config?.abortSignal?.aborted??!1;oe(r,{success:!1,durationMs:d,error:m?et:Ze,errorType:Me(f),errorStatusCode:H(f),subagentName:q.getStore()||void 0,...o});try{await this.safelyLogOpenAIInteraction(await l.resolve(e),void 0,f,n)}catch(h){se.warn("Failed to log OpenAI interaction:",h)}throw f}let u;if(this.openaiLogger)try{u=await l.resolve(e)}catch(f){se.warn("Failed to resolve OpenAI request:",f)}return j.with(i,()=>this.loggingStreamWrapper(c,s,n,e.model,u,r,i,e.config?.abortSignal,o))}startCaptureSession(){let e,n=!this.openaiLogger;return{wrap:o=>n?o():Eo.run(r=>{e=r},o),resolve:async o=>this.openaiLogger?e??await this.buildOpenAIRequestForLogging(o):void 0}}async*loggingStreamWrapper(e,n,o,r,i,s,a,l,c){let u=le(o),f=!u||!!this.openaiLogger,d=[],m="",h="",g,C=!1,T,S=!1,v,w=q.getStore(),R,x=!1,B=I=>a?j.with(a,I):I(),Lt=5*6e4,P,ae=s?()=>{x||(P!==void 0&&clearTimeout(P),P=setTimeout(()=>{try{s.setAttribute("stream.timed_out",!0)}catch{}oe(s,{success:!1,durationMs:Date.now()-n,error:"Stream span timed out (idle)",responseId:m||void 0,subagentName:w||void 0,...c}),x=!0},Lt),P.unref())}:void 0;try{for await(let U of e){!m&&U.responseId&&(m=U.responseId),!h&&U.modelVersion&&(h=U.modelVersion),f&&d.push(U),U.usageMetadata&&(g=U.usageMetadata);let be=U.candidates?.[0];be?.finishReason&&(T=be.finishReason),U.functionCalls?.length&&(S=!0),R===void 0&&wo(U)&&(R=Date.now()-n),ae?.(),yield U,P!==void 0&&(clearTimeout(P),P=void 0)}P!==void 0&&(clearTimeout(P),P=void 0);let I=Date.now()-n,Z=f?this.consolidateGeminiResponsesForLogging(d):void 0,je=u?void 0:this.extractResponseText(Z),ee=!T&&!S?new Error("Model stream ended without a finish reason"):void 0;ee&&(C=!0,v=ee),x||(ee?(B(()=>this.safelyLogApiError(m,I,ee,this.getClientVisibleModelId(r,h),o)),await B(()=>this.safelyLogOpenAIInteraction(i,Z,ee,o))):(B(()=>this.safelyLogApiResponse(m,I,this.getClientVisibleModelId(r,h),o,g,je)),!u&&s&&Xe(this.config,s,je),await B(()=>this.safelyLogOpenAIInteraction(i,Z,void 0,o))))}catch(I){if(C=!0,v=I,!x){let Z=Date.now()-n;B(()=>this.safelyLogApiError(m,Z,I,this.getClientVisibleModelId(r,h),o)),await B(()=>this.safelyLogOpenAIInteraction(i,void 0,I,o))}throw I}finally{if(P!==void 0&&clearTimeout(P),s&&!x){let I=l?.aborted??!1;oe(s,{success:!C,inputTokens:g?.promptTokenCount,outputTokens:g?.candidatesTokenCount,cachedInputTokens:g?.cachedContentTokenCount,ttftMs:R,durationMs:Date.now()-n,error:C?I?et:Ze:void 0,responseId:m||void 0,finishReason:T,thoughtsTokenCount:g?.thoughtsTokenCount,subagentName:w||void 0,errorType:v?Me(v):void 0,errorStatusCode:v?H(v):void 0,...c})}}}async buildOpenAIRequestForLogging(e){if(!this.openaiLogger)return;let n=this.createLoggingRequestContext(e.model),o=dt.convertGeminiRequestToOpenAI(e,n,{cleanOrphanToolCalls:!1}),r={model:e.model,messages:o};return e.config?.tools&&(r.tools=await dt.convertGeminiToolsToOpenAI(e.config.tools,this.schemaCompliance??"auto")),e.config?.temperature!==void 0&&(r.temperature=e.config.temperature),e.config?.topP!==void 0&&(r.top_p=e.config.topP),e.config?.maxOutputTokens!==void 0&&(r.max_tokens=e.config.maxOutputTokens),e.config?.presencePenalty!==void 0&&(r.presence_penalty=e.config.presencePenalty),e.config?.frequencyPenalty!==void 0&&(r.frequency_penalty=e.config.frequencyPenalty),r}createLoggingRequestContext(e){return{model:e,modalities:this.modalities??{},splitToolMedia:this.splitToolMedia??!0,startTime:0}}async logOpenAIInteraction(e,n,o,r){if(!this.openaiLogger||!e)return;let i=n?this.convertGeminiResponseToOpenAIForLogging(n,e):void 0;await this.openaiLogger.logInteraction(e,i,o instanceof Error?o:o?new Error(String(o)):void 0,r)}async safelyLogOpenAIInteraction(e,n,o,r){try{await this.logOpenAIInteraction(e,n,o,r)}catch(i){se.warn("Failed to log OpenAI interaction:",i)}}convertGeminiResponseToOpenAIForLogging(e,n){let o=new ne;return Object.assign(o,e),o.modelVersion=this.getClientVisibleModelId(n.model,e.modelVersion),dt.convertGeminiResponseToOpenAI(o,this.createLoggingRequestContext(n.model))}consolidateGeminiResponsesForLogging(e){if(e.length===0)return;let n=new ne,o=[],r=new Map,i,s;for(let c of e){c.usageMetadata&&(s=c.usageMetadata);let u=c.candidates?.[0];u?.finishReason&&(i=u.finishReason);let f=u?.content?.parts??[];for(let d of f){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",h=r.get(m),g={functionCall:d.functionCall};h!==void 0?o[h]=g:(r.set(m,o.length),o.push(g));continue}if("functionResponse"in d&&d.functionResponse){o.push({functionResponse:d.functionResponse});continue}o.push(d)}}let a=e[e.length-1],l=a.candidates?.[0];return n.responseId=a.responseId,n.createTime=a.createTime,n.modelVersion=a.modelVersion,n.promptFeedback=a.promptFeedback,n.usageMetadata=s,n.candidates=[{content:{role:l?.content?.role||"model",parts:o},...i?{finishReason:i}:{},index:0,safetyRatings:l?.safetyRatings||[]}],n}extractResponseText(e){let n=e?.candidates?.[0]?.content?.parts;if(!n?.length)return;let o="",r=!1,i=!1,s=a=>{if(r=!0,i)return;let l=Oi-o.length;if(a.length<=l){o+=a;return}o+=a.slice(0,Math.max(0,l)),i=!0};for(let a of n){if(typeof a=="string"){s(a);continue}"text"in a&&typeof a.text=="string"&&!("thought"in a&&a.thought)&&s(a.text)}if(r)return i?`${o}${Io}`: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 i=o.text,s=i?String(i):"",a=s?`${s}
15
- ${n}`:n;return{...o,text:a}}return e}};p();var mn="x-matilda-organization-id",Pi=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function yu(t){if(t!==void 0){if(typeof t!="string"||t.length!==36||!Pi.test(t))throw new Error("--organization-id must be a single UUID.");return t.toLowerCase()}}function hn(t){if(t)try{let e=new URL(t);if((e.hostname==="matilda.maincode.com"&&e.protocol==="https:"&&!e.port||e.hostname==="core-api.matilda"&&(e.protocol==="http:"||e.protocol==="https:"))&&!e.username&&!e.password&&!e.search&&!e.hash)return e}catch{}}function Cn(t,e,n){if(e===void 0&&n===void 0)return;let o=hn(t.baseUrl);if(!o||o.pathname.replace(/\/$/,"")!=="/api/v1/code"||t.authType!=="openai")throw new Error("Organization selection and credit spending require the first-party Matilda Core Code endpoint.")}function Oo(t){for(let e of Object.keys(t??{})){let n=e.toLowerCase();if(n===mn)throw new Error("Select the organization with --organization-id, not customHeaders.");if(n.startsWith("x-matilda-usage-credit-"))throw new Error("Code credit spending through customHeaders is not supported.")}}function Tu(t,e,n,o,r){Cn(n,o,r);let i=hn(n.baseUrl),s=hn(t instanceof Request?t.url:String(t));if(!s||s.origin!==i.origin||s.pathname!=="/api/v1/code/chat/completions")throw new Error("The selected organization cannot be sent to this endpoint.");let a=e.get(mn);if(a!==null&&a!==o)throw new Error("The request organization conflicts with --organization-id.");o!==void 0&&e.set(mn,o)}p();function Po(t){switch(t){case"openai":return"OPENAI_API_KEY";default:return"API_KEY"}}function Do(t){switch(t){case"openai":return"OPENAI_MODEL";default:return"MODEL"}}var fe=class extends Error{constructor(e){super(e),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},ht=class extends fe{code="STRICT_MISSING_CREDENTIALS";constructor(e,n,o){let r=e||"(unknown)",i=n||"(unknown)";super(`Missing credentials for modelProviders model '${i}'. `+(o?`Current configured envKey: '${o}'. Set that environment variable, or update modelProviders.${r}[].envKey.`:`Configure modelProviders.${r}[].envKey and set that environment variable.`))}},Ct=class extends fe{code="STRICT_MISSING_MODEL_ID";constructor(e){super(`Missing model id for strict modelProviders resolution (authType: ${e}).`)}},yt=class extends fe{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}'.`)}},Tt=class extends fe{code="MISSING_MODEL";constructor(e){super(`Missing model for ${e.authType} auth. Set the environment variable '${e.envKey}'.`)}};p();import En from"node:process";p();function bu(t,e,n,o=2048){let r=e-n-o;return!Number.isFinite(r)||r<=0?0:Math.min(t,r)}var b={"32k":32768,"64k":65536,"128k":131072,"200k":2e5,"256k":262144,"272k":272e3,"400k":4e5,"512k":524288,"1m":1e6,"4k":4096,"8k":8192,"16k":16384};function St(t){let e=(t??"").toLowerCase().trim();return e=e.replace(/^.*\//,""),e=e.split("|").pop()??e,e=e.split(":").pop()??e,e=e.replace(/\s+/g,"-"),e=e.replace(/-preview/g,""),e.match(/^kimi-k2-\d{4}$/)||(e=e.replace(/-(?:\d{4,}|\d+x\d+b|v\d+(?:\.\d+)*|(?<=-[^-]+-)\d+(?:\.\d+)+|latest|exp)$/g,"")),e=e.replace(/-(?:\d?bit|int[48]|bf16|fp16|q[45]|quantized)$/g,""),e}var Di=[[/^gemini-3/,b["1m"]],[/^gemini-/,b["1m"]],[/^gpt-5/,b["272k"]],[/^gpt-/,b["128k"]],[/^o\d/,b["200k"]],[/^claude-/,b["200k"]],[/^glm-5(\.[01])?(-|$)/,202752],[/^glm-(?:[5-9]|\d{2,})/,b["1m"]],[/^glm-/,202752],[/^matilda-code$/,b["1m"]],[/^matilda/,b["256k"]],[/^ornith/,b["64k"]],[/^kimi-/,b["256k"]],[/^seed-oss/,b["512k"]]],Uo=[[/^gemini-3/,b["64k"]],[/^gemini-/,b["8k"]],[/^gpt-5/,b["128k"]],[/^gpt-/,b["16k"]],[/^o\d/,b["128k"]],[/^claude-opus-4-6/,b["128k"]],[/^claude-sonnet-4-6/,b["64k"]],[/^claude-/,b["64k"]],[/^glm-5\.2/,b["64k"]],[/^glm-5/,b["64k"]],[/^glm-4\.7/,b["16k"]],[/^matilda-code$/,b["64k"]],[/^matilda$/,b["64k"]],[/^matilda-core$/,b["64k"]],[/^ornith/,b["32k"]],[/^kimi-k2\.5/,b["32k"]]];function Ui(t,e="input"){let n=St(t),o=e==="output"?Uo:Di;for(let[r,i]of o)if(r.test(n))return i}function Ru(t){let e=St(t);return Uo.some(([n])=>n.test(e))}function Li(t,e="input"){return Ui(t,e)}function At(t,e="input"){return Li(t,e)??(e==="output"?32e3:131072)}p();p();var Lo={image:!0,pdf:!0,audio:!0,video:!0},Ni=[[/^gemini-3/,Lo],[/^gemini-/,Lo],[/^gpt-5/,{image:!0}],[/^gpt-/,{image:!0}],[/^o\d/,{image:!0}],[/^claude-/,{image:!0,pdf:!0}],[/^glm-4\.5v/,{image:!0}],[/^glm-5(?:-|$)/,{}],[/^glm-/,{}],[/^kimi-k2\.5/,{image:!0,video:!0}],[/^kimi-/,{}],[/^doubao-seed(ance|ream)/,{}],[/^doubao-seed/,{image:!0}],[/^doubao-.*(vision|vl)/,{image:!0}],[/^doubao/,{}]];function Et(t){let e=St(t);for(let[n,o]of Ni)if(n.test(e))return{...o};return{}}p();function No(t,e,n={kind:"default"}){for(let o of t)if(Fo(o.value))return{value:o.value,source:o.source};return{value:e,source:n}}function yn(t){for(let e of t)if(Fo(e.value))return{value:e.value,source:e.source}}function Fo(t){return!(t==null||typeof t=="string"&&t.trim()==="")}function vt(t){return{kind:"cli",detail:t}}function Fi(t){return{kind:"env",envKey:t}}function Le(t){return{kind:"settings",settingsPath:t}}function ge(t,e,n){return{kind:"modelProviders",authType:t,modelId:e,detail:n}}function Tn(t){return{kind:"default",detail:t}}function bt(t){return{kind:"computed",detail:t}}function Rt(t,e,n){let o=t[e];return{value:o!==void 0?n?n(o):o:void 0,source:Fi(e)}}function L(t,e){return{value:t,source:e}}p();var me=["samplingParams","timeout","maxRetries","retryErrorCodes","enableCacheControl","schemaCompliance","reasoning","contextWindowSize","customHeaders","extra_body","modalities","splitToolMedia","openAIRequestProfile"],Ko=["model","apiKey","apiKeyEnvKey","baseUrl"],Mt=[...Ko,...me],Go={openai:{apiKey:["OPENAI_API_KEY"],baseUrl:["OPENAI_BASE_URL"],model:["OPENAI_MODEL","MATILDA_MODEL"]}},$o={openai:ot};var he="MATILDA_API_KEY",Ki="matilda-code-1.0";function Gi(t,e){if(!t)return!0;try{let{hostname:n}=new URL(t);return n==="matilda.maincode.com"||n.endsWith(".matilda.maincode.com")||Oe(t,e)}catch{return!1}}function $i(t,e,n,o){if(o?.timeout!==void 0)return;let r=t.MATILDA_CODE_API_TIMEOUT_MS;if(r===void 0)return;let i=Number(r);Number.isFinite(i)&&i>0&&(e.timeout=Math.floor(i),n.timeout={kind:"env",envKey:"MATILDA_CODE_API_TIMEOUT_MS"})}function $u(t){let{authType:e,cli:n,settings:o,env:r,modelProvider:i,proxy:s}=t,a=[],l={},c=e?Go[e]:{model:[],apiKey:[],baseUrl:[]},u=[];e&&i&&u.push(L(i.id,ge(e,i.id,"model.id"))),n?.model&&u.push(L(n.model,vt("--model"))),e==="openai"&&r[he]&&!r.OPENAI_MODEL&&!r.MATILDA_MODEL&&u.push(L(Ki,{kind:"env",envKey:he}));for(let R of c.model)u.push(Rt(r,R));o?.model&&u.push(L(o.model,Le("model.name")));let f=e?$o[e]:"",d=No(u,f,Tn(f));l.model=d.source;let m=[];if(e&&i?.envKey){let R=r[i.envKey];R&&m.push(L(R,{kind:"env",envKey:i.envKey,via:ge(e,i.id,"envKey")}))}if(n?.apiKey&&m.push(L(n.apiKey,vt("--openaiApiKey"))),!i?.envKey){let R=r[he];e==="openai"&&R&&Gi(r.OPENAI_BASE_URL,r)&&m.push(L(R,{kind:"env",envKey:he}));for(let x of c.apiKey)m.push(Rt(r,x))}o?.apiKey&&m.push(L(o.apiKey,Le("security.auth.apiKey")));let h=yn(m);h&&(l.apiKey=h.source);let g=[];e&&i?.baseUrl&&g.push(L(i.baseUrl,ge(e,i.id,"baseUrl"))),n?.baseUrl&&g.push(L(n.baseUrl,vt("--openaiBaseUrl"))),e==="openai"&&r[he]&&!r.OPENAI_BASE_URL&&g.push(L(K(r),{kind:"env",envKey:he}));for(let R of c.baseUrl)g.push(Rt(r,R));o?.baseUrl&&g.push(L(o.baseUrl,Le("security.auth.baseUrl")));let C=yn(g)??(e==="openai"?{value:K(r),source:Tn("the configured Matilda endpoint")}:void 0);C&&(l.baseUrl=C.source);let T;e&&i?.envKey&&(T=i.envKey,l.apiKeyEnvKey={...ge(e,i.id,"envKey"),envKey:i.envKey});let S=kt(o?.generationConfig,i?.generationConfig,e,i?.id??d.value,r),v=S.config;Object.assign(l,S.sources);let w={authType:e,model:d.value||"",apiKey:h?.value,apiKeyEnvKey:T,baseUrl:C?.value,proxy:s,...v};return s&&(l.proxy=bt("Config.getProxy()")),l.authType=bt("provided by caller"),{config:w,sources:l,warnings:a}}function kt(t,e,n,o,r){let i={},s=Bi(t,e,n,o,i);return $i(r,s,i,e),{config:s,sources:i}}function Bi(t,e,n,o,r){let i={};for(let s of me)n&&e&&s in e?(i[s]=e[s],r[s]=ge(n,o||"",`generationConfig.${s}`)):t&&s in t&&(i[s]=t[s],r[s]=Le(`model.generationConfig.${s}`));return i.modalities===void 0&&o&&(i.modalities=Et(o),r.modalities=bt("auto-detected from model")),i}p();var _t="$runtime|";function zu(t){let e=t;for(;e.startsWith(_t);){let n=e.split("|").slice(2).join("|");if(!n)break;e=n}return e}p();p();var An=N("MODEL_REGISTRY");function Bo(t){if(Object.values($).includes(t))return t}function jo(t,e){return e?`${t}\0${e}`:t}var wt=class{modelsByAuthType;constructor(e){if(this.modelsByAuthType=new Map,e)for(let[n,o]of Object.entries(e)){let r=Bo(n);if(!r){An.warn(`Invalid authType key "${n}" in modelProviders config. Expected one of: ${Object.values($).join(", ")}. Skipping.`);continue}this.registerAuthTypeModels(r,o)}}registerAuthTypeModels(e,n){let o=new Map;for(let r of n){let i=jo(r.id,r.baseUrl);if(o.has(i)){An.warn(`Duplicate model id "${r.id}"${r.baseUrl?` with baseUrl "${r.baseUrl}"`:""} for authType "${e}". Using the first registered config.`);continue}let s=this.resolveModelConfig(r,e);o.set(i,s)}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??At(o.id),modalities:o.generationConfig.modalities??Et(o.id),baseUrl:o.baseUrl,envKey:o.envKey})):[]}getModel(e,n,o){let r=this.modelsByAuthType.get(e);if(!r)return;if(o)return r.get(jo(n,o));let i=r.get(n);if(i)return i;for(let s of r.values())if(s.id===n)return s}hasModel(e,n,o){return this.getModel(e,n,o)!==void 0}getDefaultModelForAuthType(e){let n=this.modelsByAuthType.get(e);if(!(!n||n.size===0))return Array.from(n.values())[0]}resolveModelConfig(e,n){return this.validateModelConfig(e,n),{...e,authType:n,name:e.name||e.id,baseUrl:e.baseUrl||K(),generationConfig:{...e.generationConfig??{}},capabilities:e.capabilities||{}}}validateModelConfig(e,n){if(!e.id)throw new Error(`Model config in authType '${n}' missing required field: id`)}reloadModels(e){if(this.modelsByAuthType.clear(),e)for(let[n,o]of Object.entries(e)){let r=Bo(n);if(!r){An.warn(`Invalid authType key "${n}" in modelProviders config. Expected one of: ${Object.values($).join(", ")}. Skipping.`);continue}this.registerAuthTypeModels(r,o)}}};var Vo=class t{modelRegistry;currentAuthType;_generationConfig;generationConfigSources;strictModelProviderSelection=!1;hasManualCredentials=!1;onModelChange;authTypeWasExplicitlyProvided;settingsGenerationConfig;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 wt(e.modelProvidersConfig),this.onModelChange=e.onModelChange,this._generationConfig={...e.generationConfig||{}},this.generationConfigSources=e.generationConfigSources||{},this.settingsGenerationConfig=t.deepClone(e.settingsGenerationConfig),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,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.hasManualCredentials=e.hasManualCredentials,this.activeRuntimeModelSnapshotId=e.activeRuntimeModelSnapshotId}getModel(){return this._generationConfig.model||ot}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($),o=new Set,r=[];for(let a of n)o.has(a)||(o.add(a),r.push(a));let i=this.getRuntimeModelOption(),s=[];for(let a of r)i&&i.authType===a&&s.push(i),s.push(...this.modelRegistry.getModelsForAuthType(a));return s}hasModel(e,n){return this.modelRegistry.hasModel(e,n)}getResolvedModel(e,n){let o=this.modelRegistry.getModel(e,n);if(o)return{...o,generationConfig:this.resolveEntryGenerationConfig(o).config}}resolveEntryGenerationConfig(e){return kt(this.settingsGenerationConfig,e.generationConfig,e.authType,e.id,En.env)}isManagedMatildaResolvedModel(e){return e?.id===Wt&&e?.envKey===tt&&e?.baseUrl===nt&&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)?Wt:e}getModelDisplayName(e){return this.isManagedMatildaModel(e)?Vn:this.currentAuthType?this.modelRegistry.getModel(this.currentAuthType,e)?.name??e:e}async setModel(e,n){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)}catch(r){throw this.rollbackToStateSnapshot(o),r}}applyRawModelDerivedDefaults(e){let n=kt(this.settingsGenerationConfig,void 0,this.currentAuthType,e,En.env);this.shouldUpdateModelDerivedDefault("modalities")&&this.applyResolvedField("modalities",n),this.shouldUpdateModelDerivedDefault("contextWindowSize")&&(this.applyResolvedField("contextWindowSize",n),this.fillContextWindowSize(e))}applyResolvedField(e,n){this._generationConfig[e]=t.deepClone(n.config[e]);let o=n.sources[e];o?this.generationConfigSources[e]=o:delete this.generationConfigSources[e]}fillContextWindowSize(e){this._generationConfig.contextWindowSize===void 0&&(this._generationConfig.contextWindowSize=At(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 r=this.extractRuntimeModelSnapshotId(n);if(r){await this.switchToRuntimeModel(r);return}let i=this.createStateSnapshotForRollback();try{let s=e!==this.currentAuthType;this.currentAuthType=e;let a=this.modelRegistry.getModel(e,n,o?.baseUrl);if(!a)throw new Error(`Model '${n}' not found for authType '${e}'`);let l=i.generationConfig.model||"",c=!s&&l?this.modelRegistry.getModel(e,l,i.generationConfig.baseUrl)??this.modelRegistry.getModel(e,l):void 0,u=!s&&!!i.generationConfig.apiKey&&!!a.envKey&&c?.envKey===a.envKey&&c.baseUrl===a.baseUrl,f=u?i.generationConfig.apiKey:void 0,d=u?i.generationConfigSources.apiKey:void 0;this.applyResolvedModelDefaults(a),!this._generationConfig.apiKey&&f&&(this._generationConfig.apiKey=f,d&&(this.generationConfigSources.apiKey=t.deepClone(d))),this.activeRuntimeModelSnapshotId=void 0,this.onModelChange&&await this.onModelChange(e)}catch(s){throw this.rollbackToStateSnapshot(i),s}}buildRuntimeModelSnapshotId(e,n){return`${_t}${e}|${n}`}extractRuntimeModelSnapshotId(e){if(e.startsWith(_t))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 me)!(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:r}=this._generationConfig;if(!(!n||!e||!o||!r)&&!this.modelRegistry.hasModel(e,n,r))if(this.activeRuntimeModelSnapshotId&&this.runtimeModelSnapshots.has(this.activeRuntimeModelSnapshotId)){let i=this.runtimeModelSnapshots.get(this.activeRuntimeModelSnapshotId);i.apiKey=o,i.baseUrl=r,i.modelId=n;let s=this.buildRuntimeModelSnapshotId(i.authType,i.modelId);s!==i.id&&(this.runtimeModelSnapshots.delete(i.id),i.id=s,this.runtimeModelSnapshots.set(s,i),this.activeRuntimeModelSnapshotId=s),i.createdAt=Date.now()}else this.detectAndCaptureRuntimeModel()}clearProviderSourcedConfig(){for(let e of Mt)this.generationConfigSources[e]?.kind==="modelProviders"&&(delete this._generationConfig[e],delete this.generationConfigSources[e])}isStrictModelProviderSelection(){return this.strictModelProviderSelection}resetStrictModelProviderSelection(){this.strictModelProviderSelection=!1}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._generationConfig.apiKey=void 0,this._generationConfig.apiKeyEnvKey=void 0,e.envKey!==void 0){let o=En.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=this.resolveEntryGenerationConfig(e);for(let o of me)this.applyResolvedField(o,n);this.fillContextWindowSize(e.id)}syncAfterAuthRefresh(e,n){this.strictModelProviderSelection=!1;let o=this.currentAuthType;this.currentAuthType=e;let r=this.generationConfigSources.baseUrl?.kind==="modelProviders"?this._generationConfig.baseUrl:void 0,i=n?this.modelRegistry.getModel(e,n,r)??this.modelRegistry.getModel(e,n):void 0;if(i){let m=this.generationConfigSources.baseUrl?.kind==="modelProviders"&&(this._generationConfig.apiKeyEnvKey!==i.envKey||this._generationConfig.baseUrl!==i.baseUrl),h=o===e&&this._generationConfig.model===n&&!m,g=h?this._generationConfig.apiKey:void 0,C=h&&this.generationConfigSources.apiKey?{...this.generationConfigSources.apiKey}:void 0,T=this.generationConfigSources.baseUrl,S=h&&!!this._generationConfig.baseUrl&&(T?.kind==="cli"||T?.kind==="env"||T?.kind==="settings"),v=S?this._generationConfig.baseUrl:void 0,w=S&&T?{...T}:void 0;this.applyResolvedModelDefaults(i),h&&!this._generationConfig.apiKey&&g&&(this._generationConfig.apiKey=g,C&&(this.generationConfigSources.apiKey=C)),v&&(this._generationConfig.baseUrl=v,w&&(this.generationConfigSources.baseUrl=w)),this.strictModelProviderSelection=!0,this.activeRuntimeModelSnapshotId=void 0;return}let s=this.generationConfigSources.apiKey,a=this.generationConfigSources.baseUrl,l=this._generationConfig.apiKey&&s?.kind!=="modelProviders"||this._generationConfig.baseUrl&&a?.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 f=this.modelRegistry.getDefaultModelForAuthType(e);if(f){this.applyResolvedModelDefaults(f),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:r,...i}=this._generationConfig,s=this.currentAuthType;if(!e||!s)return;if(this.modelRegistry.hasModel(s,e,o)){this.clearRuntimeModelSnapshotForAuthType(s);return}if(!(this._generationConfig.apiKey&&this._generationConfig.baseUrl))return;let l=this.buildRuntimeModelSnapshotId(s,e),c={id:l,authType:s,modelId:e,apiKey:n,baseUrl:o,apiKeyEnvKey:r,generationConfig:i,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{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),this.onModelChange&&await this.onModelChange(n.authType)}catch(r){throw this.rollbackToStateSnapshot(o),r}}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)}};p();import{randomUUID as gs}from"node:crypto";import{mkdirSync as ms,readFileSync as hs}from"node:fs";import{dirname as Cs,join as ys}from"node:path";p();p();import{randomBytes as ji,createHash as Vi}from"node:crypto";import{setTimeout as zi}from"node:timers/promises";var Wi="urn:ietf:params:oauth:grant-type:device_code";function zo(t){return t==="localhost"||t==="127.0.0.1"||t==="::1"||t==="[::1]"}function bn(){let t=ji(32).toString("base64url"),e=Vi("sha256").update(t).digest("base64url");return{codeVerifier:t,codeChallenge:e}}function Ce(t,e){let n=typeof t=="object"&&t!==null?t:{};if(typeof n.access_token!="string"||n.access_token==="")throw new Error("The token response has no access token");return{accessToken:n.access_token,refreshToken:n.refresh_token??e?.refreshToken,expiresAt:Date.now()+(n.expires_in??3600)*1e3,idToken:n.id_token??e?.idToken}}var Hi=15e3;async function Rn(t){let e=t.replace(/\/+$/,""),n=new URL("/.well-known/oauth-authorization-server",e);if(n.protocol!=="https:"&&!zo(n.hostname))throw new Error(`Refusing OAuth discovery over insecure transport: ${n.origin}`);let o=await fetch(n,{headers:{accept:"application/json"},signal:AbortSignal.timeout(Hi)});if(!o.ok)throw new Error(`OAuth discovery failed (${o.status}) for ${n.origin}`);let r=await o.json();if(!r.issuer||!r.authorization_endpoint||!r.token_endpoint)throw new Error(`OAuth discovery document missing required fields for ${n.origin}`);return{issuer:r.issuer,authorization_endpoint:r.authorization_endpoint,token_endpoint:r.token_endpoint,device_authorization_endpoint:r.device_authorization_endpoint}}var qi=15e3,vn="Device code expired: restart the sign-in";async function Mn(t,e,n={}){let o;try{o=await fetch(t,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:e.clientId,scope:e.scope??"openid offline_access"}),signal:qo(AbortSignal.timeout(qi),n.signal)})}catch(i){throw Jo(i,n.signal)?new Error("The device code request timed out"):i}if(!o.ok)throw new Error(`Device code request failed (${o.status})`);let r=await o.json();return{deviceCode:r.device_code,userCode:r.user_code,verificationUri:r.verification_uri,verificationUriComplete:r.verification_uri_complete,expiresAt:Date.now()+r.expires_in*1e3,interval:r.interval??5}}async function Wo(t,e,n={}){let o=await fetch(t,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:Wi,client_id:e.clientId,device_code:e.deviceCode}),signal:n.signal});if(o.ok)return{kind:"authorized",tokens:Ce(await o.json())};let r=await o.json().catch(()=>({})),i=typeof r.error=="string"?r.error:"unknown";switch(i){case"authorization_pending":return{kind:"pending"};case"slow_down":return{kind:"slow_down"};default:return{kind:"error",error:i}}}async function Ho(t,e,n={}){let o=e.interval*1e3;try{for(;Date.now()<e.expiresAt;){await zi(Math.min(o,e.expiresAt-Date.now()),void 0,{signal:n.signal});let r=e.expiresAt-Date.now();if(r<=0)break;let i=await Wo(t,e,{signal:qo(AbortSignal.timeout(r),n.signal)});if(i.kind==="authorized")return i.tokens;if(i.kind!=="pending"){if(i.kind==="slow_down"){o+=5e3;continue}switch(i.error){case"expired_token":throw new Error(vn);case"access_denied":throw new Error("User denied the authorization request");default:throw new Error(`Device flow error: ${i.error}`)}}}}catch(r){throw Jo(r,n.signal)?new Error(vn):r}throw new Error(vn)}function qo(t,e){return e?AbortSignal.any([t,e]):t}function Jo(t,e){return!e?.aborted&&t instanceof Error&&t.name==="TimeoutError"}p();import{randomBytes as Ji}from"node:crypto";import{promises as ye,openSync as Yi,closeSync as Xi,unlinkSync as Xo,statSync as Qi}from"node:fs";import{dirname as Zi}from"node:path";var Yo=new Map,es=2e4,ts=3e4,ns=50;function kn(t,e={}){let n=async()=>{try{let s=await ye.readFile(t,"utf8"),a=JSON.parse(s);return a&&typeof a=="object"?a:{}}catch(s){if(s.code==="ENOENT")return{};throw s}},o=async(s,a)=>{await ye.mkdir(Zi(t),{recursive:!0});let l=`${t}.${process.pid}.${Ji(4).toString("hex")}.tmp`;try{await ye.writeFile(l,JSON.stringify(s,null,2),{mode:384}),a?.throwIfAborted(),await ye.rename(l,t)}catch(c){throw await ye.rm(l,{force:!0}).catch(()=>{}),c}await ye.chmod(t,384).catch(()=>{})},r=(s,a={})=>{let c=(Yo.get(t)??Promise.resolve()).then(async()=>{a.signal?.throwIfAborted();let u=await n(),f=!1;for(let[d,m]of Object.entries(s)){if(m===null){if(!(d in u))continue;delete u[d]}else{if(u[d]===m)continue;u[d]=m}f=!0}f&&await o(u,a.signal),a.onCommit?.()});return Yo.set(t,c.catch(()=>{})),c};return{store:{async get(s){return(await n())[s]??null},set:(s,a,l)=>r({[s]:a},l),remove:(s,a)=>r({[s]:null},a)},lock:os(`${t}.lock`,e.lockTimeoutMs??es),update:r}}function os(t,e){let n=Promise.resolve();return o=>{let r=n.then(async()=>{await rs(t,e);try{return await o()}finally{is(t)}});return n=r.then(()=>{},()=>{}),r}}async function rs(t,e){let n=Date.now()+e;for(;;)try{Xi(Yi(t,"wx"));return}catch(o){if(o.code!=="EEXIST")throw o;try{if(Date.now()-Qi(t).mtimeMs>ts){Xo(t);continue}}catch{continue}if(Date.now()>n)throw Object.assign(new Error(`Timed out acquiring credential lock at ${t}`),{code:"ETIMEDOUT"});await ss(ns)}}function is(t){try{Xo(t)}catch{}}function ss(t){return new Promise(e=>setTimeout(e,t))}p();var Te=class extends Error{code="invalid_grant";constructor(e="Refresh token is no longer valid \u2014 sign in again."){super(e),this.name="InvalidGrantError"}};function _n(t){let e=t.storageKey??"default",n=t.fetchImpl??fetch,o=t.expirySkewMs??6e4,r=t.refreshTimeoutMs??15e3,i=null,s=async()=>{let c=await t.store.get(e);if(!c)return null;try{let u=JSON.parse(c);return u.accessToken?u:null}catch{return null}},a=c=>c.expiresAt-Date.now()>o,l=c=>t.lock(async()=>{let u=await s()??c;if(u.accessToken!==c.accessToken&&a(u))return u.accessToken;if(!u.refreshToken)throw new Te("No refresh token available \u2014 sign in again.");let f;try{let m=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:u.refreshToken}),signal:AbortSignal.timeout(r)});if(!m.ok){let h=await m.text().catch(()=>"");throw m.status>=400&&m.status<500&&as(h)==="invalid_grant"?(await t.store.remove(e),new Te):Object.assign(new Error(`Token refresh failed (${m.status})`),{status:m.status})}f=await m.json()}catch(m){throw m?.name==="TimeoutError"?Object.assign(new Error(`Token refresh timed out after ${r} ms`),{code:"ETIMEDOUT",cause:m}):m}let d=Ce(f,u);return await t.store.set(e,JSON.stringify(d)),d.accessToken});return{async getAccessToken(c){let u=await s();if(!u)throw new Te("Not signed in.");return!c?.forceRefresh&&a(u)?u.accessToken:(i||(i=l(u).finally(()=>{i=null})),i)}}}function as(t){try{return JSON.parse(t).error}catch{return}}p();import{createServer as ls}from"node:http";import{randomBytes as us}from"node:crypto";async function xt(t){if(t.transport.kind==="device")return cs(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=g=>t.onEvent?.(g),{codeVerifier:n,codeChallenge:o}=bn(),r=us(16).toString("hex"),i=t.timeoutMs??5*60*1e3,s=t.transport.successRedirect,a=t.transport.port;e({type:"state",status:"idle"});let l,c,u=new Promise((g,C)=>{l=g,c=C});u.catch(()=>{});let f=ls((g,C)=>{let T=new URL(g.url??"/","http://127.0.0.1");if(T.pathname!=="/callback"){C.writeHead(404).end();return}let S=T.searchParams.get("error"),v=T.searchParams.get("state"),w=T.searchParams.get("code");if(S){let R=T.searchParams.get("error_description"),x=R?`OAuth error: ${S} (${R})`:`OAuth error: ${S}`;C.writeHead(400,{"content-type":"text/plain; charset=utf-8"}).end(`Sign-in failed: ${S}
16
- `,()=>c(new Error(x)));return}if(v!==r){C.writeHead(400).end("State mismatch"),c(new Error("OAuth state mismatch"));return}if(!w){C.writeHead(400).end("Missing authorization code");return}ds(C,s,()=>l(w))}),d=await new Promise((g,C)=>{f.once("error",C),f.listen(a??0,"127.0.0.1",()=>{g(f.address().port)})}),m=setTimeout(()=>c(new Error("Login timed out \u2014 the browser never reached the local callback. The hosted success page is not a completed sign-in.")),i),h=()=>c(new Error("Login aborted"));t.signal?.addEventListener("abort",h,{once:!0}),t.signal?.aborted&&h();try{t.signal?.throwIfAborted();let g=`http://127.0.0.1:${d}/callback`,C=new URL(t.metadata.authorization_endpoint);C.searchParams.set("client_id",t.clientId),C.searchParams.set("response_type","code"),C.searchParams.set("redirect_uri",g),C.searchParams.set("code_challenge",o),C.searchParams.set("code_challenge_method","S256"),C.searchParams.set("state",r),C.searchParams.set("prompt","select_account"),C.searchParams.set("scope",t.scope??"openid offline_access");let T=C.toString();e({type:"authorize_url",url:T}),e({type:"state",status:"awaiting_user"}),t.openBrowser&&await t.openBrowser(T);let S=await u;await Qo(f),e({type:"state",status:"exchanging"});let v=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:S,code_verifier:n,redirect_uri:g}),signal:t.signal});if(!v.ok){let R=await v.text().catch(()=>"");throw new Error(`Token exchange failed (${v.status}): ${R}`)}let w=Ce(await v.json());return e({type:"state",status:"authenticated"}),w}catch(g){throw e({type:"state",status:"error"}),t.signal?.aborted?new Error("Login aborted"):g}finally{clearTimeout(m),t.signal?.removeEventListener("abort",h),await Qo(f)}}async function cs(t){let e=t.metadata.device_authorization_endpoint;if(!e)throw new Error("The authorization server does not offer device sign-in");if(t.signal?.aborted)throw new Error("Login aborted");let n=o=>t.onEvent?.(o);n({type:"state",status:"idle"});try{let o=await Mn(e,{clientId:t.clientId,scope:t.scope},{signal:t.signal});n({type:"user_code",userCode:o.userCode,verificationUri:o.verificationUri,verificationUriComplete:o.verificationUriComplete}),n({type:"state",status:"awaiting_user"});let r=await Ho(t.metadata.token_endpoint,{clientId:t.clientId,deviceCode:o.deviceCode,interval:o.interval,expiresAt:o.expiresAt},{signal:t.signal});return n({type:"state",status:"authenticated"}),r}catch(o){throw n({type:"state",status:"error"}),t.signal?.aborted?new Error("Login aborted"):o}}function Qo(t){return t.listening?new Promise(e=>{t.close(()=>e()),t.closeAllConnections()}):Promise.resolve()}function ds(t,e,n){t.writeHead(302,{location:e}).end(n)}p();var ps=["www-browser"];function fs(t){let e=t.replace(/\\/g,"/").split("/").pop();return!!e&&ps.includes(e)}function Zo(t={}){let n=process.env.BROWSER?.trim()?.match(/^\S+/)?.[0];if(!t.ignoreBrowserBlocklist&&process.platform!=="win32"&&n&&fs(n)||process.env.CI||process.env.DEBIAN_FRONTEND==="noninteractive")return!1;let o=!!process.env.SSH_CONNECTION;return!(process.platform==="linux"&&!["DISPLAY","WAYLAND_DISPLAY","MIR_SOCKET"].some(s=>!!process.env[s])||o&&process.platform!=="linux")}var Ae="matilda-code",tr="matilda-desktop",nr="openid profile email offline_access",wn="MATILDA_API_KEY",Ts="matilda";function Ee(t){return t.trim().replace(/\/+$/,"").replace(/\/api\/v1(?:\/code)?$/i,"")}function or(){return ys(He.getGlobalMatildaDir(),"matilda-auth.json")}function Ke(){let t=or();return ms(Cs(t),{recursive:!0}),kn(t)}function Ss(t){return t==="desktop"}function Ge(t){return t?.clientId?t.clientId:Ss(t?.channel)?tr:Ae}function Fe(t){return`matilda:${t}`}function Ot(t){return`${Fe(t)}:refresh-rejected`}function $e(t){return t===Ae?[Fe(t),Ts]:[Fe(t)]}function rr(){try{let t=hs(or(),"utf8");return JSON.parse(t)}catch{return{}}}function It(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 In(t,e){return Ee(t)===Ee(e)}function As(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 ir(t,e){let n=As(t.idToken);return{accessToken:t.accessToken,accessTokenExpiresAt:t.expiresAt,refreshToken:t.refreshToken??"",userId:n.sub,email:n.email,displayName:n.name,baseUrl:e}}var er=new Map;async function On(t){let e=er.get(t);if(e)return e;try{let n=await Rn(t);return er.set(t,n),n}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 Pn(t){try{let e=rr(),n=Ge(t);for(let o of $e(n)){let r=It(e[o]);if(r)return r}return null}catch{return null}}function sr(t){let e=Pn(t);return!e||t?.baseUrl&&!In(e.baseUrl,t.baseUrl)?null:e}function Dn(t){return sr(t)!==null}async function ar(t,e){for(let n of e){let o=await t.get(n);if(It(o))return o}return null}async function Es(t,e){let n=Ge(t),o=$e(n),{store:r,lock:i}=Ke();await i(async()=>{let s=await ar(r,o);if(!(s!==null&&s!==e)){for(let a of o)await r.remove(a);await r.set(Ot(n),"1")}})}function vs(t){return t instanceof Error?t.code==="invalid_grant"||t.name==="InvalidGrantError"?!0:t.message==="Token refresh failed (401)":!1}function Se(t){xn({authStage:t.authStage,authOutcome:t.authOutcome,occurrenceCount:t.occurrenceCount},{baseUrl:t.baseUrl,token:t.token}).catch(()=>{})}async function lr(t,e,n={}){let o=Ge(e),r=Fe(o),i={[r]:JSON.stringify(t),[Ot(o)]:null};for(let l of $e(o))l!==r&&(i[l]=null);let{lock:s,update:a}=Ke();await s(()=>a(i,{signal:n.signal}))}async function bs(t,e){for(let n of $e(e))await t.remove(n);await t.remove(Ot(e))}var Ne="matilda:api-key";function ur(){let t=rr()[Ne];if(!t)return null;try{let{apiKey:e,baseUrl:n}=JSON.parse(t);return typeof e=="string"&&e.length>0&&typeof n=="string"?{apiKey:e,baseUrl:n}:null}catch{return null}}function Pt(t){let e=ur();return e&&In(e.baseUrl,t)?e.apiKey:void 0}async function Rs(t){let e=gs(),n=JSON.stringify(t?{...t,saveId:e}:{saveId:e}),{store:o,lock:r,update:i}=Ke(),s=await r(async()=>{let a=await o.get(Ne);return(t||a!==null)&&await i({[Ne]:n}),a});return()=>r(async()=>{await o.get(Ne)===n&&await i({[Ne]:s})})}function Ms(t){let e=Pn(t);return e?{authenticated:!0,userId:e.userId,email:e.email,displayName:e.displayName,baseUrl:e.baseUrl,accessTokenExpiresAt:e.accessTokenExpiresAt}:{authenticated:!1}}async function Xc(t){let e={channel:t?.channel,clientId:t?.clientId},{store:n,lock:o}=Ke(),r=await o(async()=>{let s=Pn(e);return await bs(n,Ge(e)),s}),i=ur()!==null;if(await Rs(null),r?.accessToken){let s=Ee(r.baseUrl);await fetch(`${s}/api/auth/logout`,{method:"POST",headers:{authorization:`Bearer ${r.accessToken}`,"content-type":"application/json"},body:JSON.stringify(r.refreshToken?{refreshToken:r.refreshToken}:{}),signal:t?.signal??AbortSignal.timeout(5e3)}).catch(()=>{})}return!!r||i}function cr(t){let{baseUrl:e,channel:n,apiKey:o}=t;if(Dn({baseUrl:e,channel:n})){let r=Ms({channel:n});return{kind:"sign-in",account:r.authenticated?r.email??r.displayName??r.userId:void 0}}return o?.value?{kind:"api-key",from:o.from}:process.env[wn]?{kind:"api-key",from:wn}:Pt(e)!==void 0?{kind:"api-key",from:"saved"}:{kind:"none"}}async function dr(t){let e=Ge(t),n=Fe(e),o=sr({baseUrl:t?.baseUrl,channel:t?.channel,clientId:e});if(!o)return t?.fallbackAccessToken||process.env[wn]||t?.baseUrl&&Pt(t.baseUrl)||"";let r=Ee(o.baseUrl),i=await On(r),{store:s,lock:a}=Ke(),{manager:l,startedFrom:c}=ks(s,a,i.token_endpoint,o.baseUrl,e,n,t?.signal),u=e===Ae&&(!!t?.forceRefresh||o.accessTokenExpiresAt-Date.now()<=3e5),f;try{f=await l.getAccessToken({forceRefresh:t?.forceRefresh})}catch(d){throw u&&Se({baseUrl:o.baseUrl,token:o.accessToken,authStage:"refresh",authOutcome:"failed"}),!vs(d)||d instanceof We?d:(e===tr&&await Es({channel:t?.channel,clientId:e},c()),new We({cause:d}))}return u&&Se({baseUrl:o.baseUrl,token:f,authStage:"refresh",authOutcome:"succeeded"}),f}function ks(t,e,n,o,r,i,s){let a=$e(r),l=(m,h)=>{let g=[h?.signal,s].filter(C=>C instanceof AbortSignal);return fetch(m,{...h,signal:g.length>1?AbortSignal.any(g):g[0]})},c=m=>ar(t,m===i?a:[m]),u=null;return{manager:_n({tokenEndpoint:n,clientId:r,store:{get:async m=>{let h=await c(m),g=It(h);if(u=g&&In(g.baseUrl,o)?h:null,!u||!g?.accessToken)return null;let C={accessToken:g.accessToken,refreshToken:g.refreshToken,expiresAt:g.accessTokenExpiresAt};return JSON.stringify(C)},set:async(m,h)=>{let g=await c(m);if(g===null||g!==u)throw new We;let C=JSON.parse(h),T=It(g)??{},S={...T,accessToken:C.accessToken,accessTokenExpiresAt:C.expiresAt,refreshToken:C.refreshToken??T.refreshToken??"",baseUrl:T.baseUrl??o};await t.set(i,JSON.stringify(S)),await t.remove(Ot(r));for(let v of a)v!==i&&await t.remove(v)},remove:async m=>{if(await c(m)!==u)return;let h=m===i?a:[m];for(let g of h)await t.remove(g)}},storageKey:i,lock:e,fetchImpl:l,expirySkewMs:3e5}),startedFrom:()=>u}}function _s(){return process.env.MATILDA_AUTH_SKIP_BROWSER!=="1"&&Zo()}async function Qc(t){let e=Ee(t.baseUrl),n=await On(e),o="",r=0,i=0,s={},a=f=>{s[f]=(s[f]??0)+1},c=await(f=>(r+=1,xt({metadata:n,clientId:Ae,scope:f,transport:{kind:"loopback",successRedirect:`${e}/api/auth/oauth/success?client_id=${encodeURIComponent(Ae)}`},signal:t.signal,onEvent:d=>{d.type==="authorize_url"&&(o=d.url,t.onAuthorizeUrl?.(d.url)),d.type==="state"&&d.status==="exchanging"&&(i+=1)},openBrowser:async d=>{if(t.openBrowser===!1||!_s()){a("skipped");return}try{let{default:m}=await import("./open-QQ7FWG4A.js");(await m(d)).once("error",()=>{}),a("succeeded")}catch{a("failed")}}})))(nr),u=ir(c,t.baseUrl);await lr(u),Se({baseUrl:t.baseUrl,token:u.accessToken,authStage:"auth_started",authOutcome:"started",occurrenceCount:r});for(let[f,d]of Object.entries(s))Se({baseUrl:t.baseUrl,token:u.accessToken,authStage:"browser_opened",authOutcome:f,occurrenceCount:d});return i>0&&Se({baseUrl:t.baseUrl,token:u.accessToken,authStage:"callback_received",authOutcome:"succeeded",occurrenceCount:i}),Se({baseUrl:t.baseUrl,token:u.accessToken,authStage:"token_persisted",authOutcome:"succeeded"}),{...u,authorizeUrl:o}}async function Zc(t){let e=Ee(t.baseUrl),n=await On(e),o=await xt({metadata:n,clientId:Ae,scope:nr,transport:{kind:"device"},signal:t.signal,onEvent:i=>{i.type==="user_code"&&t.onDeviceCode({userCode:i.userCode,verificationUri:i.verificationUri,verificationUriComplete:i.verificationUriComplete})}}),r=ir(o,t.baseUrl);return await lr(r),r}p();p();p();function Dt(t){return typeof t=="object"&&t!==null&&"error"in t&&typeof t.error=="object"&&"message"in t.error}function pr(t){return typeof t=="object"&&t!==null&&"message"in t&&typeof t.message=="string"}p();function fr(t){let e=Math.max(1,t.attempt),n=Math.min(t.maxDelayMs,2147483647),o=Math.min(e-1,31),r=Math.min(t.initialDelayMs*Math.pow(2,o),n),s=(t.retryAfterMode??"ignore")==="ignore"?null:ws(t.error);if(s!==null&&s>0){let u=Math.min(t.retryAfterMaxDelayMs??t.maxDelayMs,2147483647),f=Math.min(s,u);return Math.max(r,f)}let a=t.jitterRatio??0;if(a<=0)return r;let l=t.random??Math.random,c=r*a*(l()*2-1);return Math.min(Math.max(0,r+c),n)}function ws(t){let e=gr(t,"retry-after")??xs(t,"retry-after");if(e===null)return null;let n=e.trim();if(/^\d+(\.\d+)?$/.test(n)){let i=Number(n);if(Number.isFinite(i)&&i>=0)return Math.min(i*1e3,2147483647)}let o=Date.parse(n);if(!Number.isFinite(o))return null;let r=o-Date.now();return r>0?Math.min(r,2147483647):0}function gr(t,e){if(!Is(t))return null;let{headers:n}=t;if(typeof n.get=="function"){let r=n.get(e);return typeof r=="string"?r:null}if(typeof n!="object"||n===null)return null;let o=e.toLowerCase();for(let[r,i]of Object.entries(n))if(r.toLowerCase()===o)return typeof i=="string"?i:null;return null}function xs(t,e){return Os(t)?gr(t.response,e):null}function Is(t){return typeof t=="object"&&t!==null&&"headers"in t&&t.headers!=null}function Os(t){return typeof t=="object"&&t!==null&&"response"in t&&typeof t.response=="object"&&t.response!==null&&"headers"in t.response&&t.response.headers!=null}var Ps=new Set([429,503,1302,1305]);function Un(t,e){if(Ln(t))return!1;let n=Us(t);return n===null?!1:!!(Ps.has(n)||e&&e.includes(n))}function Ln(t){return Ds(t)==="insufficient_quota"}function Ds(t){let e=hr(t)?.code;if(e!==void 0)return e;let n=typeof t=="object"&&t!==null&&"code"in t?t.code:void 0;return typeof n=="string"||typeof n=="number"?n:void 0}function mr(t){let e=H(t),n=hr(t),o=Cr(t),r=o?.includes("event:error")||o?.includes("HTTP_STATUS/")?"sse":e!==void 0?"http":"unknown";return{...e!==void 0?{statusCode:e}:{},...n?.code!==void 0?{providerCode:String(n.code)}:{},...n?.message!==void 0?{providerMessage:n.message}:{},...n?.requestId!==void 0?{requestId:n.requestId}:{},transport:r}}function ud(t,e){return fr({attempt:t,initialDelayMs:e.initialDelayMs,maxDelayMs:e.maxDelayMs,retryAfterMode:"minimum",retryAfterMaxDelayMs:e.maxDelayMs,error:e.error})}function Us(t){if(Dt(t)){let n=Number(t.error.code);if(Number.isFinite(n)&&n>0)return n}let e=t instanceof Error?t.message:typeof t=="string"?t:null;if(e){let n=e.indexOf("{");if(n!==-1)try{let o=JSON.parse(e.substring(n));if(Dt(o)){let r=Number(o.error.code);if(Number.isFinite(r)&&r>0)return r}}catch{}}if(pr(t)&&typeof t.status=="number")return t.status;if(t instanceof Error&&"status"in t){let n=t.status;if(typeof n=="number")return n}return H(t)??null}function hr(t){for(let e of Ls(t)){if(typeof e!="object"||e===null)continue;let n=e,o=e.error,i=(typeof o=="object"&&o!==null?o:void 0)??n,s=typeof i.code=="string"||typeof i.code=="number"?i.code:void 0,a=typeof i.message=="string"?i.message:void 0,l=typeof i.request_id=="string"?i.request_id:typeof i.requestId=="string"?i.requestId:typeof n.request_id=="string"?n.request_id:typeof n.requestId=="string"?n.requestId:void 0;if(s!==void 0||a!==void 0||l!==void 0)return{code:s,message:a,requestId:l}}return Dt(t)?{code:t.error.code,message:t.error.message}:null}function Ls(t){let e=Cr(t);if(!e)return[];let n=[];for(let i of e.split(/\r?\n/)){if(!i.startsWith("data:"))continue;let s=i.slice(5).trim();if(!(!s||s==="[DONE]"))try{n.push(JSON.parse(s))}catch{}}if(n.length>0)return n;let o=e.indexOf("{"),r=e.lastIndexOf("}");if(o!==-1&&r>o)try{n.push(JSON.parse(e.slice(o,r+1)))}catch{}return n}function Cr(t){return t instanceof Error?t.message:typeof t=="string"?t:null}function Ns(t,e={}){if(Fs(t))return{kind:"abort",diagnosis:"fail-fast",reason:"aborted"};let n=mr(t),o=n.statusCode,r=Vs(t),i=n.providerCode??r.providerCode,s=n.providerMessage??r.providerMessage,a=n.requestId??r.requestId,l={...o!==void 0?{statusCode:o}:{},...i!==void 0?{providerCode:i}:{},...s!==void 0?{providerMessage:s}:{},...a!==void 0?{requestId:a}:{}};if(js(i))return{kind:"provider-business",diagnosis:"fail-fast",reason:"allocated-quota-exceeded",...l};if(Ln(t))return{kind:"provider-business",diagnosis:"fail-fast",reason:"insufficient-quota",...l};if(Un(t,e.extraRetryErrorCodes))return{kind:n.transport==="sse"?"sse-provider":o!==void 0?"http":"provider",diagnosis:"retryable",reason:"rate-limit",...l};let c=Gs(t);if(c!==void 0&&(o===void 0||o>=500))return{kind:"transport",diagnosis:"retryable",reason:"transport-error",transportCode:c,...o!==void 0?{statusCode:o}:{}};if(o!==void 0){let u=n.transport==="sse"?"sse-provider":"http";return o===529?{kind:u,diagnosis:"retryable",reason:"capacity-overload",...l}:o===401||o===403?{kind:u,diagnosis:"fail-fast",reason:"auth-error",...l}:o>=400&&o<500?{kind:u,diagnosis:"fail-fast",reason:"client-error",...l}:o>=500&&o<600?{kind:u,diagnosis:"retryable",reason:"server-error",...l}:{kind:u,diagnosis:"unknown",reason:"http-status",...l}}return i==="upstream_unavailable"||i==="upstream_timeout"||i==="incomplete_stream"?{kind:"sse-provider",diagnosis:"retryable",reason:"server-error",...l}:{kind:"unknown",diagnosis:"unknown",reason:"unclassified",...l}}function gd(t){let e=t.statusCode??Number(t.providerCode);return t.kind!=="transport"&&t.diagnosis!=="fail-fast"&&(e>=500&&e<600||t.kind==="sse-provider"&&t.reason==="server-error"&&t.diagnosis==="retryable")}function yr(t,e){return Un(t,e)||Ns(t,{extraRetryErrorCodes:e}).diagnosis==="retryable"}function Fs(t){return Bn(t)?!0:t instanceof Error&&t.name==="CanceledError"}var Ks=5;function Gs(t){let e=t;for(let n=0;n<=Ks;n++){if(typeof e!="object"||e===null)return;let o=e.code;if(typeof o=="string"&&$s(o))return o;e=e instanceof Error?e.cause:void 0}}function $s(t){return Bs.has(t)}var Bs=new Set(["EAI_AGAIN","ECONNABORTED","ECONNREFUSED","ECONNRESET","EHOSTUNREACH","ENETDOWN","ENETUNREACH","ENOTFOUND","EPIPE","ETIMEDOUT","UND_ERR_BODY_TIMEOUT","UND_ERR_CONNECT_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_SOCKET","ConnectionClosed","ConnectionRefused","ConnectionReset","ConnectionTimedOut","FailedToOpenSocket","HostUnreachable","NetworkUnreachable"]);function js(t){return t==="Throttling.AllocationQuota"}function Vs(t){if(typeof t!="object"||t===null)return{};let e=t,n=typeof e.code=="string"||typeof e.code=="number"?String(e.code):void 0,o=typeof e.code=="number"&&e.code>=100&&e.code<600,r=t instanceof Error&&n?.startsWith("ERR_")||o?void 0:n,i=typeof e.request_id=="string"?e.request_id:typeof e.requestId=="string"?e.requestId:void 0,s=typeof e.message=="string"&&(!(t instanceof Error)||r!==void 0||i!==void 0)?e.message:void 0;return{...r!==void 0?{providerCode:r}:{},...s!==void 0?{providerMessage:s}:{},...i!==void 0?{requestId:i}:{}}}var $=(e=>(e.USE_OPENAI="openai",e))($||{}),zs="MATILDA_API_KEY";function Tr(t,e){if(delete t.usesMatildaSignIn,delete t.usesMatildaSavedApiKey,t.apiKeyEnvKey!==zs)return;let n=t.baseUrl||K();Dn({baseUrl:n,channel:e})&&(t.usesMatildaSignIn=!0),!t.apiKey&&Pt(n)!==void 0&&(t.usesMatildaSavedApiKey=!0)}function bd(t,e={}){let n=t.apiKey?{value:t.apiKey,from:e.apiKeyFrom??"config"}:void 0;return To(t)?cr({baseUrl:t.baseUrl||K(),channel:e.channel,apiKey:n}):n&&{kind:"api-key",from:n.from}}async function Ws(t,e){try{await dr({baseUrl:t.baseUrl||K(),channel:e})}catch(n){if(!yr(n))throw n}}function Nn(t,e,n){t[e]=n}function Hs(t,e){return t?.[e]}function Rd(t,e,n,o,r){let i={...o||{}},s=r?.strictModelProvider===!0,a={...n||{},authType:e,proxy:t?.getProxy()};Nn(i,"authType",{kind:"computed",detail:"provided by caller"}),t?.getProxy()&&Nn(i,"proxy",{kind:"computed",detail:"Config.getProxy()"});let l=u=>Hs(o,u)??{kind:"unknown"};for(let u of Mt)n&&u in n&&!i[u]&&Nn(i,u,l(u));Tr(a,t.getChannel());let c=Sn(a,s);if(!c.valid)throw new Error(c.errors.map(u=>u.message).join(`
17
- `));return{config:a,sources:i}}function Sn(t,e=!1){let n=[];if(!t.apiKey&&!t.usesMatildaSignIn&&!t.usesMatildaSavedApiKey)if(e)n.push(new ht(t.authType,t.model,t.apiKeyEnvKey));else{let o=t.apiKeyEnvKey||Po(t.authType);n.push(new yt({authType:t.authType,model:t.model,baseUrl:t.baseUrl,envKey:o}))}if(!t.model)if(e)n.push(new Ct(t.authType));else{let o=Do(t.authType);n.push(new Tt({authType:t.authType,envKey:o}))}return{valid:n.length===0,errors:n}}function qs(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 Md(t,e,n){Cn(t,e.getOrganizationId?.(),e.getCodeCreditLimitMinor?.()),Oo(t.customHeaders),Tr(t,e.getChannel()),t.usesMatildaSignIn&&await Ws(t,e.getChannel());let o=Sn(t,!1);if(!o.valid)throw new Error(o.errors.map(s=>s.message).join(`
18
- `));let r=t.authType;if(!r)throw new Error("ContentGeneratorConfig must have an authType");let i;try{if(r==="openai"){let{applyDeclaredInputModalities:s,createOpenAIContentGenerator:a}=await import("./openaiContentGenerator-66YY6CIM.js");await s(t,e,n),i=a(t,e)}else throw new Error(`Error creating contentGenerator: Unsupported authType: ${r}`)}catch(s){let a=qs(s);throw a?new Error(`Matilda was updated in the background and needs to be restarted.
19
- Please exit and restart Matilda to use the '${r}' provider.`,{cause:a}):s}return new Ue(i,e,t)}var Js=["x-matilda-client-name","x-matilda-client-version","x-matilda-client-operating-system","x-matilda-client-architecture","x-matilda-client-distribution-channel","x-matilda-client-release-channel"],Ys=new Set([...Js,...$n]),Xs=new Set(["VSCode","ACP","SDK","CI"]),ve="(?:0|[1-9]\\d{0,4})\\.(?:0|[1-9]\\d{0,4})\\.(?:0|[1-9]\\d{0,4})",Qs="[A-Za-z][0-9A-Za-z-]{0,23}",Sr="(?:0|[1-9]\\d{0,11}|[0-9A-Fa-f]{7,12})",Zs=new RegExp(`^${ve}(?:-${Qs}(?:\\.${Sr})+)?$`),ea=63,ta=new RegExp(`^${ve}$`),na=new RegExp(`^${ve}-preview\\.(?:0|[1-9]\\d{0,11})$`),oa=new RegExp(`^${ve}-canary\\.(?:0|[1-9]\\d{0,11})$`),ra=new RegExp(`^${ve}-nightly\\.(?:0|[1-9]\\d{0,11})\\.[0-9A-Fa-f]{7,12}$`),ia=new RegExp(`^${ve}-(preview|canary|nightly|development|internal)(?:\\.${Sr})+$`);function sa(t){return t==="desktop"?"desktop":t===void 0||Xs.has(t)?"code_cli":"unknown"}function aa(t){if(t==="android")return"android";if(t==="darwin")return"macos";if(t==="win32")return"windows";if(t==="linux")return"linux"}function la(t){if(t==="x64")return"x64";if(t==="arm64")return"arm64"}function ua(t){if(t===void 0)return"npm";if(t==="desktop")return"direct-download";if(t==="VSCode")return"vscode-marketplace"}function ca(t,e){if(e==="desktop")return"matilda-desktop";if(t==="VSCode")return"matilda-vscode";if(e==="code_cli")return"matilda-code"}function da(t){if(typeof t=="string"&&!(t.length>ea||!Zs.test(t)))return t}function pa(t){if(t!==void 0)return ta.test(t)?"stable":na.test(t)?"preview":oa.test(t)?"canary":ra.test(t)?"nightly":ia.exec(t)?.[1]}function Ar(t,e=process.platform,n=process.arch){let o=t.getChannel?.(),r=sa(o),i=da(o==="desktop"&&process.env.CRAFT_AGENT_VERSION!==void 0?process.env.CRAFT_AGENT_VERSION:t.getCliVersion?.()),s=pa(i),a=aa(e),l=la(n),c=ua(o),u=ca(o,r);return{...u?{"x-matilda-client-name":u}:{},...i?{"x-matilda-client-version":i}:{},...a?{"x-matilda-client-operating-system":a}:{},...l?{"x-matilda-client-architecture":l}:{},...c?{"x-matilda-client-distribution-channel":c}:{},...s?{"x-matilda-client-release-channel":s}:{}}}function Od(t){let e=t.toLowerCase();return Ys.has(e)||e.startsWith("x-matilda-reported-")}function fa(t){let e=t??K();try{let n=new URL(e);if(n.protocol!=="https:"&&n.protocol!=="http:")return!1;let o=n.hostname.toLowerCase();return o==="matilda.maincode.com"||o.endsWith(".matilda.maincode.com")||o==="core-api.matilda"||Oe(e)}catch{return!1}}function Pd(t,e=t.apiKey){return t.authType==="openai"&&(!!e||t.usesMatildaSignIn===!0||t.usesMatildaSavedApiKey===!0)&&fa(t.baseUrl)}var ga=3e3,Be=1,ma=24*60*60*1e3,Er=20,vr=999,ha=new Set(["UNABLE_TO_GET_ISSUER_CERT_LOCALLY","UNABLE_TO_VERIFY_LEAF_SIGNATURE","SELF_SIGNED_CERT_IN_CHAIN","DEPTH_ZERO_SELF_SIGNED_CERT","CERT_HAS_EXPIRED","ERR_TLS_CERT_ALTNAME_INVALID"]),Ca=new Set(["ENOTFOUND","EAI_AGAIN"]),ya=new Set(["ECONNREFUSED","EHOSTUNREACH","ENETUNREACH"]),Ta=new Set(["ABORT_ERR","ETIMEDOUT","UND_ERR_BODY_TIMEOUT","UND_ERR_CONNECT_TIMEOUT","UND_ERR_HEADERS_TIMEOUT"]),Sa=new Set(["ECONNRESET","EPIPE","UND_ERR_SOCKET"]);function Aa(t){return`${new URL(t).origin}/api/client-events`}function Ea(t){let e={eventType:t.eventType,platform:"cli"};return t.eventType==="network_error"&&(e.transportReason=t.transportReason,e.transportStage=t.transportStage,e.responseReceived=t.responseReceived,e.occurrenceCount=t.occurrenceCount),t.eventType==="auth_funnel"&&(e.authStage=t.authStage,e.authOutcome=t.authOutcome,e.occurrenceCount=t.occurrenceCount),t.eventType==="network_error"&&(e.reportedSurface=t.reportedSurface,e.reportedOs=t.reportedOs,e.reportedArchitecture=t.reportedArchitecture,e.reportedProcess=t.reportedProcess,e.reportedReleaseChannel=t.reportedReleaseChannel,t.reportedVersion&&(e.reportedVersion=t.reportedVersion)),e}async function Fn(t,e){let{baseUrl:n,token:o}=e;if(!n||!o)return!1;let r=e.fetchImpl??fetch,i=new AbortController,s=setTimeout(()=>i.abort(),e.timeoutMs??ga);try{let a=await r(Aa(n),{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${o}`},body:JSON.stringify(Ea(t)),signal:i.signal});return a.ok?!0:(qe.warn(`client-events beacon: server rejected payload (HTTP ${a.status})`),!1)}catch{return!1}finally{clearTimeout(s)}}async function xn(t,e){let n=typeof t.occurrenceCount=="number"&&Number.isFinite(t.occurrenceCount)?Math.max(1,Math.min(Math.floor(t.occurrenceCount),vr)):1;return Fn({eventType:"auth_funnel",authStage:t.authStage,authOutcome:t.authOutcome,occurrenceCount:n},e)}function br(){try{let t=Q.readFileSync(kr(),"utf8"),e=JSON.parse(t);return e.schemaVersion!==Be||!Array.isArray(e.failures)?void 0:{schemaVersion:Be,failures:e.failures.filter(va)}}catch{return}}function va(t){if(!t||typeof t!="object")return!1;let e=t;return e.eventType==="network_error"&&typeof e.transportReason=="string"&&typeof e.transportStage=="string"&&typeof e.responseReceived=="boolean"&&typeof e.occurrenceCount=="number"&&typeof e.reportedSurface=="string"&&typeof e.reportedOs=="string"&&typeof e.reportedArchitecture=="string"&&typeof e.reportedProcess=="string"&&typeof e.reportedReleaseChannel=="string"&&typeof e.firstObservedAtMs=="number"&&typeof e.lastObservedAtMs=="number"}function Rr(t){let e=kr();if(t.failures.length===0){try{Q.rmSync(e,{force:!0})}catch{}return}try{Q.mkdirSync(Ut.dirname(e),{recursive:!0}),Q.writeFileSync(e,`${JSON.stringify(t)}
20
- `,"utf8")}catch{}}function Mr(t,e){return t.filter(n=>e-n.lastObservedAtMs<=ma).sort((n,o)=>n.firstObservedAtMs-o.firstObservedAtMs).slice(-Er)}function ba(t){let e=Ar(t);return{reportedSurface:e["x-matilda-client-name"]==="matilda-desktop"?"desktop":e["x-matilda-client-name"]==="matilda-code"||e["x-matilda-client-name"]==="matilda-vscode"?"code_cli":"unknown",reportedOs:e["x-matilda-client-operating-system"]??"unknown",reportedArchitecture:e["x-matilda-client-architecture"]??"unknown",reportedProcess:e["x-matilda-client-name"]??"unknown",reportedVersion:e["x-matilda-client-version"],reportedReleaseChannel:e["x-matilda-client-release-channel"]??"unknown"}}function Ra(t){if(!t||typeof t!="object")return;let e=t.code;if(typeof e=="string")return e;if(!(t instanceof Error)||!t.cause||typeof t.cause!="object")return;let n=t.cause.code;return typeof n=="string"?n:void 0}function Ma(t){if(!(!t||typeof t!="object"))for(let e of["status","statusCode"]){let n=t[e];if(typeof n=="number")return n}}function ka(t,e){let n=Ra(t);if(n&&ha.has(n))return{reason:"tls",stage:"tls",responseReceived:!1};if(n&&Ca.has(n))return{reason:"dns",stage:"resolve",responseReceived:!1};if(n&&ya.has(n))return{reason:"connect",stage:"connect",responseReceived:!1};if(n&&Ta.has(n))return{reason:"timeout",stage:n==="UND_ERR_BODY_TIMEOUT"?"response":"request",responseReceived:n==="UND_ERR_BODY_TIMEOUT"};if(n&&Sa.has(n))return{reason:"reset",stage:n==="UND_ERR_SOCKET"?"response":"request",responseReceived:n==="UND_ERR_SOCKET"};let o=Ma(t),r=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();if(r.includes("self signed")||r.includes("certificate")||r.includes("tls"))return{reason:"tls",stage:"tls",responseReceived:!1};if(o===407||n==="proxy_auth_required")return{reason:"proxy",stage:"connect",responseReceived:!0};if(e&&r.includes("proxy")&&(r.includes("407")||r.includes("connect")||r.includes("fetch failed")))return{reason:"proxy",stage:"connect",responseReceived:!1};if(r.includes("timed out")||r.includes("timeout")||r.includes("deadline exceeded"))return{reason:"timeout",stage:"request",responseReceived:!1};if(r.includes("fetch failed"))return{reason:"unknown",stage:"unknown",responseReceived:!1}}function _a(t,e){return t.findIndex(n=>n.transportReason===e.transportReason&&n.transportStage===e.transportStage&&n.responseReceived===e.responseReceived&&n.reportedSurface===e.reportedSurface&&n.reportedOs===e.reportedOs&&n.reportedArchitecture===e.reportedArchitecture&&n.reportedProcess===e.reportedProcess&&n.reportedVersion===e.reportedVersion&&n.reportedReleaseChannel===e.reportedReleaseChannel)}function Kd(t,e){let n=ba(e.cliConfig);if(n.reportedSurface!=="code_cli"&&n.reportedSurface!=="desktop")return!1;let o=ka(t,e.proxyConfigured);if(!o)return!1;let r=Date.now(),i={eventType:"network_error",transportReason:o.reason,transportStage:o.stage,responseReceived:o.responseReceived,occurrenceCount:1,...n,firstObservedAtMs:r,lastObservedAtMs:r},s=br()??{schemaVersion:Be,failures:[]},a=Mr(s.failures,r),l=_a(a,i);if(l>=0){let c=a[l];a[l]={...c,occurrenceCount:Math.min(c.occurrenceCount+1,vr),lastObservedAtMs:r}}else a.push(i);return Rr({schemaVersion:Be,failures:a.slice(-Er)}),!0}async function Gd(t){let e=br();if(!e)return;let n=Mr(e.failures,Date.now()),o=[];for(let r=0;r<n.length;r+=1){let i=n[r];if(!await Fn({eventType:i.eventType,transportReason:i.transportReason,transportStage:i.transportStage,responseReceived:i.responseReceived,occurrenceCount:i.occurrenceCount,reportedSurface:i.reportedSurface,reportedOs:i.reportedOs,reportedArchitecture:i.reportedArchitecture,reportedProcess:i.reportedProcess,reportedVersion:i.reportedVersion,reportedReleaseChannel:i.reportedReleaseChannel},t)){o.push(...n.slice(r));break}}Rr({schemaVersion:Be,failures:o})}function kr(){return Ut.join(He.getGlobalMatildaDir(),"telemetry","cli-transport-failures.json")}var Kf="http://localhost:4317";export{fs as a,Zo as b,Dr as c,on as d,ut as e,$r as f,Br as g,dt as h,Eo as i,Ci as j,gn as k,ci as l,si as m,yo as n,Oe as o,To as p,li as q,K as r,Ar as s,Od as t,Pd as u,xn as v,Kd as w,Gd as x,Kf as y,yu as z,Cn as A,Oo as B,Tu as C,bu as D,Ru as E,At as F,me as G,Go as H,$u as I,zu as J,Vo as K,Pn as L,Dn as M,Pt as N,Rs as O,Ms as P,Xc as Q,dr as R,_s as S,Qc as T,Zc as U,Dt as V,pr as W,fr as X,ws as Y,Un as Z,Ln as _,Ds as $,mr as aa,ud as ba,Ns as ca,gd as da,yr as ea,$ as fa,bd as ga,Rd as ha,Md as ia};
21
- /**
22
- * @license
23
- * Copyright 2025 Matilda
24
- * SPDX-License-Identifier: Apache-2.0
25
- */
26
- /**
27
- * @license
28
- * Copyright 2025 Google LLC
29
- * SPDX-License-Identifier: Apache-2.0
30
- */
31
- /**
32
- * @license
33
- * Copyright 2026 Matilda Team
34
- * SPDX-License-Identifier: Apache-2.0
35
- */
36
- /**
37
- * @license
38
- * Copyright 2026 Matilda
39
- * SPDX-License-Identifier: Apache-2.0
40
- */
41
- /**
42
- * @license
43
- * Copyright 2025 Matilda Team
44
- * SPDX-License-Identifier: Apache-2.0
45
- */
46
- /**
47
- * @license
48
- * Copyright 2026 Maincode
49
- * SPDX-License-Identifier: Apache-2.0
50
- *
51
- * Low-level OAuth primitives for core-auth's unified `/api/auth/oauth/*` flow
52
- * (ADR-029): PKCE pair generation, RFC 8414 discovery, the RFC 8628 device
53
- * grant, and refresh. Vendored (as source) from matilda-core's
54
- * `packages/client-sdk/src/auth.ts` and extended to carry the `id_token`
55
- * (display identity) that the higher-level flows need. Node built-ins only —
56
- * no third-party runtime dependencies.
57
- */
58
- /**
59
- * @license
60
- * Copyright 2026 Maincode
61
- * SPDX-License-Identifier: Apache-2.0
62
- *
63
- * File-backed token store + cross-process lock. The store persists a JSON map
64
- * (`{ [key]: value }`) at 0600 so callers can key several credentials in one
65
- * file; the lock is an O_EXCL lockfile that serialises refreshes across
66
- * processes (the guarantee a plaintext read/modify/write can't give).
67
- */
68
- /**
69
- * @license
70
- * Copyright 2026 Maincode
71
- * SPDX-License-Identifier: Apache-2.0
72
- *
73
- * Hardened access-token manager: returns a valid access token, refreshing via
74
- * core-auth's token endpoint when expired or forced. Single-flight within the
75
- * process, serialised across processes by the store's lock, carries a prior
76
- * refresh token forward when the response omits one, and evicts on a terminal
77
- * `invalid_grant` so a dead session doesn't wedge the caller in a refresh loop.
78
- */
79
- /**
80
- * @license
81
- * Copyright 2026 Maincode
82
- * SPDX-License-Identifier: Apache-2.0
83
- *
84
- * Browser login orchestration: PKCE + a loopback capture server, driven off
85
- * discovery metadata. Unlike a bare loopback helper, this emits lifecycle
86
- * events for a UI, honours an AbortSignal, and — instead of serving its own
87
- * HTML — 302-redirects the browser to an app-owned branded landing
88
- * (`successRedirect`). Returns a TokenSet including the `id_token`.
89
- */
90
- /**
91
- * @license
92
- * Copyright 2026 Maincode
93
- * SPDX-License-Identifier: Apache-2.0
94
- *
95
- * Node auth surface for `@maincode-ai/matilda-client-sdk/auth/node`.
96
- * Re-exports the OAuth primitives plus the higher-level login flow, file token
97
- * store, and hardened token manager that the CLI (`packages/core`) and the
98
- * Electron desktop app consume.
99
- */
100
- /**
101
- * @license
102
- * Copyright 2026 Maincode
103
- * SPDX-License-Identifier: Apache-2.0
104
- *
105
- * Matilda account auth for the CLI, backed by the shared client SDK.
106
- *
107
- * The OAuth dance (PKCE, loopback capture, code exchange, refresh, cross-process
108
- * token locking) is owned by `@maincode-ai/matilda-client-sdk/auth/node` — the
109
- * auth team's tested implementation of ADR-029's unified `/api/auth/oauth/*`
110
- * flow. This module keeps ONLY the CLI-specific concerns: which endpoint, the
111
- * on-disk credential shape the rest of the CLI already reads, and surfacing the
112
- * authorize URL to the Ink UI. No PKCE crypto, no loopback server, no token
113
- * exchange lives here anymore (replaced the 391-line hand-rolled beta that hit
114
- * the divergent `/api/auth/cli/*` endpoints and stored tokens in plaintext).
115
- */
116
- /**
117
- * @license
118
- * Copyright 2026 Google LLC
119
- * SPDX-License-Identifier: Apache-2.0
120
- */
@@ -1,3 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{$ as s,J as a,K as b,L as c,M as d,N as e,O as f,P as g,Q as h,R as i,S as j,T as k,U as l,V as m,W as n,X as o,Y as p,Z as q,_ as r,aa as t,ba as u,ca as v,da as w,ea as x,fa as y,ga as z,ha as A}from"./chunk-NBLBE7PE.js";import"./chunk-MGRXOZAG.js";import"./chunk-ZSGBDQXU.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-5ETLURI6.js";import"./chunk-G3F3ZCH2.js";import"./chunk-V4VILMIK.js";import"./chunk-6NXVLJ3X.js";import"./chunk-4UGPARBR.js";import"./chunk-7B65UIHB.js";import"./chunk-QXSBPCBA.js";import"./chunk-LMZBADPW.js";import"./chunk-V6UPUMP3.js";import"./chunk-5B2QERWR.js";import"./chunk-453BANK3.js";import"./chunk-PQZ6HKKW.js";import"./chunk-7ZODGQO6.js";import"./chunk-GT6MSEK4.js";import"./chunk-V2VUANFI.js";import"./chunk-225CZWD7.js";import"./chunk-LBQNFSZ2.js";import"./chunk-DUB7JMQV.js";import"./chunk-ARAB5QTM.js";import"./chunk-ILHNCXBC.js";import"./chunk-LM6OIN4B.js";import"./chunk-RPXRN7E6.js";import"./chunk-RHSUTILA.js";import"./chunk-J3ZCE3TA.js";import"./chunk-POGNX7U3.js";import"./chunk-7E2YCGHS.js";import"./chunk-UM6CLO7D.js";import"./chunk-HEJO7OBH.js";import"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";export{d as MCPDiscoveryState,c as MCPServerStatus,a as MCP_DEFAULT_TIMEOUT_MSEC,e as McpClient,g as addMCPStatusChangeListener,s as connectAndDiscover,y as connectToMcpServer,b as createStreamableHttpCompatibilityFetch,z as createTransport,q as discoverMcpTools,v as discoverPrompts,t as discoverTools,m as getAllMCPServerStatuses,n as getMCPDiscoveryState,k as getMCPServerStatus,l as getMCPServerStderrTail,p as handleAutomaticOAuth,x as hasNetworkTransport,w as invokeMcpPrompt,A as isEnabled,u as listMcpPrompts,f as mcpServerRequiresOAuth,r as populateMcpServerCommand,j as removeMCPServerStatus,h as removeMCPStatusChangeListener,o as setMCPDiscoveryState,i as updateMCPServerStatus};
@@ -1,32 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{A as nt,B as it,Sb as mt,Zb as ct,dd as O,ed as dt,hb as rt,ib as st,jb as at,t as et,tb as P,ub as lt,v as D,x as ot,y as L,z as _}from"./chunk-NBLBE7PE.js";import"./chunk-MGRXOZAG.js";import"./chunk-ZSGBDQXU.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-5ETLURI6.js";import"./chunk-G3F3ZCH2.js";import"./chunk-V4VILMIK.js";import"./chunk-6NXVLJ3X.js";import"./chunk-4UGPARBR.js";import"./chunk-7B65UIHB.js";import"./chunk-QXSBPCBA.js";import"./chunk-LMZBADPW.js";import"./chunk-V6UPUMP3.js";import"./chunk-5B2QERWR.js";import"./chunk-453BANK3.js";import"./chunk-PQZ6HKKW.js";import"./chunk-7ZODGQO6.js";import"./chunk-GT6MSEK4.js";import"./chunk-V2VUANFI.js";import"./chunk-225CZWD7.js";import"./chunk-LBQNFSZ2.js";import"./chunk-DUB7JMQV.js";import"./chunk-ARAB5QTM.js";import"./chunk-ILHNCXBC.js";import"./chunk-LM6OIN4B.js";import"./chunk-RPXRN7E6.js";import"./chunk-RHSUTILA.js";import"./chunk-J3ZCE3TA.js";import{f as q,g as Y,m as Q,n as tt}from"./chunk-POGNX7U3.js";import{G as K,V as Z,d as u}from"./chunk-7E2YCGHS.js";import"./chunk-UM6CLO7D.js";import"./chunk-HEJO7OBH.js";import{b as J}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";J();import{spawn as ut}from"node:child_process";import ft from"node:path";import{randomUUID as kt}from"node:crypto";var p=Z("MONITOR"),xt=1e3,N=1e4,Dt=3e5,U=6e5,pt=80,R=4096,gt=5,ht=1e3;function yt(c){return c.length>pt?c.slice(0,pt-1)+"\u2026":c}var Rt=new Set(["task-notification","task-id","tool-use-id","kind","status","event-count","summary","result"]),It=/<(\/?)([a-zA-Z][a-zA-Z0-9-]*)>/g;function vt(c){let g="";for(let t=0;t<c.length;t++){let n=c.charCodeAt(t);if(n===9){g+=c[t];continue}n<32||n>=128&&n<=159||(g+=c[t])}return g=g.replace(It,(t,n,i)=>Rt.has(String(i).toLowerCase())?n==="/"?`</\u200B${i}>`:`<\u200B${i}>`:t),g}var B=class extends q{constructor(t,n){super(n);this.config=t}callId;setCallId(t){this.callId=t}getDescription(){let t=this.params.description||_(this.params.command).spawnCommand;return`Monitor: ${yt(t)}`}async getDefaultPermission(){if(D().shell!=="bash")return"ask";let t=_(this.params.command).spawnCommand;return await P(t,{cwd:this.params.directory||this.config.getTargetDir(),workspace:this.config.getWorkspaceContext()})?"allow":"ask"}async getConfirmationDetails(t){let n=D(),i=_(this.params.command);if(n.shell==="bash"&&await st(),n.shell!=="bash"||!lt(i.safetyCommand,this.params.directory||this.config.getTargetDir()))return{type:"exec",title:"Monitor",command:i.spawnCommand,rootCommand:n.executable,permissionRules:[],hideAlwaysAllow:!0,onConfirm:async()=>{}};let h=ot(i.safetyCommand),C=[];for(let l of h){let a=!1;try{a=await P(l,{cwd:this.params.directory||this.config.getTargetDir(),workspace:this.config.getWorkspaceContext()})}catch(m){p.warn("AST read-only check failed for monitor sub-command, falling back to ask:",m)}a||C.push(l)}let v=C.length>0?C:h,w=[...new Set(v.map(l=>L(l)).filter(l=>!!l))],r=[];try{let l=[];for(let a of v){let m=await at(a);l.push(...m)}r=[...new Set(l)].map(a=>`Monitor(${a})`)}catch(l){p.warn("Failed to extract monitor command rules:",l),r=[`Monitor(${i.safetyCommand})`]}let d=it(i.safetyCommand,this.params.command),b={type:"exec",title:"Monitor",command:i.spawnCommand,rootCommand:w.join(", ")||(L(i.safetyCommand)??i.spawnCommand),permissionRules:r,onConfirm:async(l,a)=>{}};return d&&(b.warnings=d),b}async execute(t){if(t.aborted)return{llmContent:"Monitor was cancelled before it could start.",returnDisplay:"Monitor cancelled."};let n=_(this.params.command),i=n.spawnCommand;n.strippedTrailingAmp&&p.warn("Stripped trailing & from monitor command \u2014 monitor lifecycle handles backgrounding");let h=vt(this.params.description||i),C=yt(h),v=Math.min(this.params.max_events??xt,N),w=Math.min(this.params.idle_timeout_ms??Dt,U),r=`mon_${kt().replace(/-/g,"").slice(0,16)}`,d=this.config.getMonitorRegistry(),b=rt()??void 0;if(d.getRunning().length>=O)return{llmContent:`Cannot start monitor: maximum concurrent monitors (${O}) reached. Stop an existing monitor first.`,returnDisplay:"Monitor rejected: too many concurrent monitors."};let a=new AbortController,m={monitorId:r,command:i,description:h,status:"running",startTime:Date.now(),abortController:a,toolUseId:this.callId,eventCount:0,lastEventTime:0,maxEvents:v,idleTimeoutMs:w,droppedLines:0,outputFile:dt(this.config.storage.getProjectDir(),this.config.getSessionId(),r),...b?{ownerAgentId:b}:{}},{executable:_t,argsPrefix:Ct}=D(),o;try{o=ut(_t,[...Ct,i],{cwd:this.params.directory||this.config.getTargetDir(),stdio:["ignore","pipe","pipe"],detached:!0,env:{...et(),MATILDA_CODE:"1",TERM:"dumb",PAGER:"cat",...ct()}})}catch(e){return{llmContent:`Monitor failed to start: ${u(e)}`,returnDisplay:`Monitor failed: ${u(e)}`}}m.pid=o.pid;let M=!1,E,I=e=>{E??=e};o.on("error",I);let G={value:""},z={value:""},k=gt,A=Date.now(),$=e=>{let s=vt(e);if(s.length===0||s.trim().length===0)return;let y=Date.now(),T=y-A;if(T<0)p.warn(`Monitor ${r}: clock moved backwards by ${-T}ms, resetting refill timestamp`),A=y;else{let f=Math.floor(T/ht);f>0&&(k=Math.min(gt,k+f),A+=f*ht)}k>0?(k--,d.emitEvent(r,s)):m.droppedLines++},W=()=>{for(let e of[G,z]){let s=e.value.trim();s.length>0&&$(s),e.value=""}},wt=()=>{if(!(M||!o.pid))if(process.platform==="win32")ut("taskkill",["/pid",o.pid.toString(),"/f","/t"],{stdio:"ignore"}).on("error",s=>p.warn(`Monitor taskkill failed for pid ${o.pid}: ${u(s)}`));else{try{process.kill(-o.pid,"SIGTERM")}catch(e){p.warn(`Monitor ${r} SIGTERM failed (pid=${o.pid}): ${u(e)}`)}setTimeout(()=>{if(!M&&o.pid)try{process.kill(-o.pid,"SIGKILL")}catch(e){p.warn(`Monitor ${r} SIGKILL escalation failed (pid=${o.pid}): ${u(e)}`)}},200).unref?.()}},S=()=>{W(),wt()};a.signal.addEventListener("abort",S,{once:!0}),a.signal.aborted&&S();try{d.register(m)}catch(e){return S(),a.signal.removeEventListener("abort",S),o.stdout?.destroy?.(),o.stderr?.destroy?.(),o.removeListener("error",I),o.on("error",()=>{}),{llmContent:`Monitor failed to start: ${u(e)}`,returnDisplay:`Monitor failed: ${u(e)}`}}let j=(e,s)=>{if(m.status!=="running")return;let y=mt(s.toString("utf-8"));if(e.value+=y,!e.value.includes(`
4
- `)&&e.value.length>R){let f=e.value.trim();f.length>0&&$(f.slice(0,R)+"..."),e.value="";return}let T=e.value.split(`
5
- `);e.value=T.pop()??"";for(let f of T){let x=f.trim();if(x.length===0)continue;let St=x.length>R?x.slice(0,R)+"...":x;$(St)}};o.stdout?.on("data",e=>j(G,e)),o.stderr?.on("data",e=>j(z,e));let F=!1,X=()=>{F||(F=!0,W(),a.signal.removeEventListener("abort",S),m.droppedLines>0&&p.info(`Monitor ${r} dropped ${m.droppedLines} lines due to throttling`))},V=null,bt=(e,s)=>{m.status==="running"&&(a.signal.aborted?d.cancel(r):e!==null&&e!==0?d.fail(r,`Exit code ${e}`):s?d.fail(r,`Killed by signal ${s}`):d.complete(r,e))},Mt=(e,s)=>{M=!0,V={code:e,sig:s}},Et=(e,s)=>{M=!0,X();let y=V??{code:e,sig:s};bt(y.code,y.sig)},H=e=>{M=!0,X(),m.status==="running"&&d.fail(r,u(e))};return o.on("exit",Mt),o.on("close",Et),o.on("error",H),o.removeListener("error",I),E?(H(E),{llmContent:`Monitor failed to start: ${u(E)}`,returnDisplay:`Monitor failed: ${u(E)}`}):{llmContent:`Monitor started.
6
- id: ${r}
7
- command: ${i}
8
- description: ${h}
9
- max_events: ${v}
10
- idle_timeout: ${w}ms
11
- Events will be delivered as notifications. The monitor auto-stops after ${v} events or ${w}ms of silence.
12
- To inspect: /tasks (text) or the interactive Background tasks dialog (focus the footer Background tasks pill, then Enter \u2014 detail view + live updates).`,returnDisplay:`Monitor started: ${C} (${r})`}}},Tt=class c extends Y{constructor(t){super(c.Name,tt.MONITOR,`Starts a long-running shell command and streams its stdout/stderr as event notifications back to you.
13
-
14
- Use this tool for:
15
- - Watching log files: \`tail -f /var/log/app.log\`
16
- - Monitoring build output: \`npm run build --watch\`
17
- - Polling for state changes: \`while true; do curl -s http://localhost:8080/health; sleep 1; done\`
18
- - Watching file changes: \`fswatch -r ./src\`
19
-
20
- Each output line from the command becomes a notification event delivered to you. The monitor runs in the background \u2014 you can continue working while it streams events.
21
-
22
- **Auto-stop:** The monitor automatically stops after max_events (default 1000) events or after idle_timeout_ms (default 5 minutes) of silence. The process is killed when the monitor stops.
23
-
24
- **Do NOT use this tool for:**
25
- - One-shot commands (use run_shell_command instead)
26
- - Commands you need the full output from (use run_shell_command instead)
27
- - Commands with no output (use run_shell_command with is_background: true instead)`,"execute",{type:"object",properties:{command:{type:"string",description:"Shell command to run and monitor. Each output line (stdout and stderr) becomes an event notification."},description:{type:"string",description:'Brief description of what this monitor watches (e.g., "webpack build output"). Truncated to 80 characters in display.'},max_events:{type:"number",description:"Stop the monitor after this many events. Default 1000. Max 10000."},idle_timeout_ms:{type:"number",description:"Stop the monitor if no output for this many milliseconds. Default 300000 (5 min). Max 600000."},directory:{type:"string",description:"(OPTIONAL) The absolute path of the directory to run the command in. If not provided, the project root directory is used. Must be within the workspace."}},required:["command"],additionalProperties:!1},!0,!1,!0,!1,"monitor watch tail log stream background");this.config=t}static Name=Q.MONITOR;validateToolParamValues(t){if(typeof t.command!="string"||!_(t.command).analysisCommand)return"Command cannot be empty.";if(nt(t.command))return'Monitor commands must not contain non-final top-level background operators. Remove "&" and let the monitor manage process lifetime.';if(t.max_events!==void 0){if(typeof t.max_events!="number"||!Number.isInteger(t.max_events)||t.max_events<=0)return"max_events must be a positive integer.";if(t.max_events>N)return`max_events cannot exceed ${N}.`}if(t.idle_timeout_ms!==void 0){if(typeof t.idle_timeout_ms!="number"||!Number.isInteger(t.idle_timeout_ms)||t.idle_timeout_ms<=0)return"idle_timeout_ms must be a positive integer.";if(t.idle_timeout_ms>U)return`idle_timeout_ms cannot exceed ${U}ms (10 minutes).`}if(t.directory){if(!ft.isAbsolute(t.directory))return"Directory must be an absolute path.";let n=ft.resolve(t.directory),i=this.config.storage.getUserSkillsDirs();if(K(i,n))return"Explicitly running monitor commands from within the user skills directory is not allowed. Please use absolute paths for command parameter instead.";if(!this.config.getWorkspaceContext().isPathWithinWorkspace(t.directory))return`Directory '${t.directory}' is not within any of the registered workspace directories.`}return null}createInvocation(t){return new B(this.config,t)}toAutoClassifierInput(t){let n={command:t.command};return t.directory&&(n.directory=t.directory),n}};export{Tt as MonitorTool,vt as sanitizeMonitorLine};
28
- /**
29
- * @license
30
- * Copyright 2025 Matilda
31
- * SPDX-License-Identifier: Apache-2.0
32
- */
@@ -1,17 +0,0 @@
1
- // Force strict mode and setup for ESM
2
- "use strict";
3
- import{$b as y,Nb as D,Ob as Y,gb as Q,gc as X,hc as Z,ya as R}from"./chunk-NBLBE7PE.js";import"./chunk-MGRXOZAG.js";import"./chunk-ZSGBDQXU.js";import"./chunk-TXMXCR7D.js";import"./chunk-YULUB745.js";import"./chunk-5ETLURI6.js";import"./chunk-G3F3ZCH2.js";import"./chunk-V4VILMIK.js";import"./chunk-6NXVLJ3X.js";import"./chunk-4UGPARBR.js";import"./chunk-7B65UIHB.js";import"./chunk-QXSBPCBA.js";import"./chunk-LMZBADPW.js";import"./chunk-V6UPUMP3.js";import"./chunk-5B2QERWR.js";import"./chunk-453BANK3.js";import"./chunk-PQZ6HKKW.js";import"./chunk-7ZODGQO6.js";import"./chunk-GT6MSEK4.js";import"./chunk-V2VUANFI.js";import"./chunk-225CZWD7.js";import"./chunk-LBQNFSZ2.js";import"./chunk-DUB7JMQV.js";import{Db as H,l as B,m as k,n as U,o as K,p as q,q as b,r as W,s as j,t as C,u as J,v as V,w,x as M,xa as z,z as G}from"./chunk-ARAB5QTM.js";import"./chunk-ILHNCXBC.js";import"./chunk-LM6OIN4B.js";import"./chunk-RPXRN7E6.js";import"./chunk-RHSUTILA.js";import"./chunk-J3ZCE3TA.js";import{f as $,g as L,m as c,n as x}from"./chunk-POGNX7U3.js";import{A as N,C as T,V as F,z as _}from"./chunk-7E2YCGHS.js";import"./chunk-UM6CLO7D.js";import"./chunk-HEJO7OBH.js";import{b as v}from"./chunk-GZPNIYVZ.js";import"./chunk-OWGSC52X.js";v();import*as E from"node:fs";import*as m from"node:path";var ee=F("NOTEBOOK_EDIT");function g(d,r,t){return ee.debug("prior-read-rejected",{path:d,reason:r,type:t.type,displayMessage:t.displayMessage}),t}var u=class extends Error{constructor(t,e){super(t);this.type=e;this.name="NotebookEditError"}};function te(d,r){if(r==="delete")return"";if(typeof d!="string")throw new u(`new_source is required when edit_mode is "${r}".`,"invalid_tool_params");return d}function I(d,r){return d?q(d,r):`cell-${r}`}function oe(d,r,t){if(!r){if(t==="insert")return-1;throw new u("cell_id is required for replace and delete operations.","invalid_tool_params")}if(W(d,r))throw new u(`Cell ID "${r}" is ambiguous in the rendered notebook. Re-read the notebook and target a stable real cell ID before editing.`,"invalid_tool_params");let e=j(d,r);if(e===-1)throw new u(`Cell with ID "${r}" not found in notebook.`,"notebook_cell_not_found");return e}function ie(d,r,t,e){let o={cell_type:r,metadata:{},source:w(t,e)},i=J(d);return i&&(o.id=i),M(o,r),o}function O(d,r){let t;try{t=k(d)}catch(a){throw new u(a instanceof Error?a.message:String(a),"notebook_invalid_json")}let e=r.edit_mode??"replace",o=te(r.new_source,e),i=b(t),n=oe(t,r.cell_id,e),l=C(t),p=U(d),s=(a,f)=>{let h=e==="insert"||e==="delete";return{...f,updatedContent:K(a,p),requiresReadAfterWrite:h&&!(i&&b(a))}};switch(e){case"insert":{let a=r.cell_type??"code",f=n===-1?0:n+1,h=ie(t,a,o,V(t,f));return t.cells.splice(f,0,h),s(t,{editedCellId:I(h,f),editedCellType:a,language:l,mode:e})}case"delete":{let[a]=t.cells.splice(n,1);return s(t,{editedCellId:I(a,n),editedCellType:a?.cell_type,language:l,mode:e})}case"replace":{let a=t.cells[n];if(!a)throw new u(`Cell index ${n} is out of range.`,"notebook_cell_not_found");let f=r.cell_type??a.cell_type;return a.source=w(o,Array.isArray(a.source)),M(a,f),s(t,{editedCellId:I(a,n),editedCellType:f,language:l,mode:e})}default:throw new u(`Unsupported notebook edit mode: ${e}`,"invalid_tool_params")}}function re(d,r,t){let e,o;try{e=k(r),o=k(d)}catch(i){throw new u(i instanceof Error?i.message:String(i),"notebook_invalid_json")}return{updatedContent:r,editedCellId:t.cell_id??"user-modified-notebook",editedCellType:void 0,language:C(e),mode:t.edit_mode??"replace",requiresReadAfterWrite:!b(o)||!b(e)}}async function A(d,r,t={}){if(d.getFileReadCacheDisabled())return{ok:!0};let e;try{e=await E.promises.stat(r)}catch(i){let n=i?.code;return n==="ENOENT"?t.expectExisting?g(r,"missing-after-read",{ok:!1,type:"file_changed_since_read",rawMessage:`Notebook ${r} disappeared after it was read. Re-read it with the ${c.READ_FILE} tool before editing it.`,displayMessage:`notebook disappeared after last read; re-run ${c.READ_FILE} first.`}):{ok:!0}:g(r,"stat-failed",{ok:!1,type:"prior_read_verification_failed",rawMessage:`Could not stat ${r} to verify prior notebook read (${n??"unknown error"}). Re-read it with the ${c.READ_FILE} tool before editing it.`,displayMessage:`cannot verify prior read of ${r}; re-run ${c.READ_FILE} before editing this notebook.`})}if(e.isDirectory())return g(r,"target-is-directory",{ok:!1,type:"target_is_directory",rawMessage:`${r} is a directory. The NotebookEdit tool only operates on .ipynb files.`,displayMessage:"path is a directory; cannot edit as a notebook."});if(!e.isFile())return g(r,"target-not-regular-file",{ok:!1,type:"target_not_regular_file",rawMessage:`${r} is not a regular file. The NotebookEdit tool only operates on .ipynb files.`,displayMessage:"special file; cannot edit as a notebook."});let o=d.getFileReadCache().check(e);return o.state==="fresh"&&o.entry.lastReadAt!==void 0&&o.entry.lastReadWasFull?{ok:!0}:o.state==="fresh"&&o.entry.lastReadAt!==void 0&&!o.entry.lastReadWasFull?g(r,"truncated-cache-entry",{ok:!1,type:"edit_requires_prior_read",rawMessage:`Notebook ${r} is too large for cell-level editing because its rendered output was truncated when read. Reduce the notebook output size or split the notebook before editing cells.`,displayMessage:"notebook too large for cell-level editing."}):o.state==="stale"?g(r,"stale-cache-entry",{ok:!1,type:"file_changed_since_read",rawMessage:`Notebook ${r} has been modified since you last read it. Re-read it with the ${c.READ_FILE} tool before editing it.`,displayMessage:`notebook changed since last read; re-run ${c.READ_FILE} first.`}):g(r,`cache-${o.state}`,{ok:!1,type:"edit_requires_prior_read",rawMessage:`Notebook ${r} has not been fully read in this session. Use the ${c.READ_FILE} tool first, without offset or limit, before editing cells.`,displayMessage:`${c.READ_FILE} required before editing this notebook.`})}var P=class extends ${constructor(t,e,o){super(e);this.config=t;this.modifyMetadata=o}toolLocations(){return[{path:this.params.notebook_path}]}getDescription(){let t=N(this.params.notebook_path,this.config.getTargetDir()),e=this.params.edit_mode??"replace",o=this.params.cell_id??"beginning";return`${e} notebook cell ${o} in ${_(t)}`}async getDefaultPermission(){return"ask"}async getConfirmationDetails(t){let e=await this.prepareEdit(t),o=m.basename(this.params.notebook_path),i=R(o,e.originalContent,e.updatedContent,"Current","Proposed",D);return{type:"edit",title:`Confirm Notebook Edit: ${_(N(this.params.notebook_path,this.config.getTargetDir()))}`,fileName:o,filePath:this.params.notebook_path,fileDiff:i,originalContent:e.originalContent,newContent:e.updatedContent,onConfirm:async l=>{l==="proceed_always"&&this.config.setApprovalMode("auto-edit")}}}async prepareEdit(t){let e=await A(this.config,this.params.notebook_path);if(!e.ok)throw new y(e.rawMessage,e.type);let o,i=!1,n,l="lf";try{let s=await this.config.getFileSystemService().readTextFile({path:this.params.notebook_path});o=s.content,i=s._meta?.bom??!1,n=s._meta?.encoding,l=s._meta?.lineEnding??X(s.content)}catch(s){throw t.aborted?s:s?.code==="ENOENT"?new y(`Notebook file not found: ${this.params.notebook_path}`,"file_not_found"):new y(`Error reading notebook: ${s instanceof Error?s.message:String(s)}`,"read_content_failure")}let p=await A(this.config,this.params.notebook_path,{expectExisting:!0});if(!p.ok)throw new y(p.rawMessage,p.type);try{return this.modifyMetadata?.modifiedNotebookContent!==void 0?{...re(o,this.modifyMetadata.modifiedNotebookContent,this.params),originalContent:o,bom:i,encoding:n,lineEnding:l}:{...O(o,this.params),originalContent:o,bom:i,encoding:n,lineEnding:l}}catch(s){throw s instanceof u?new y(s.message,s.type):s}}async execute(t){let e;try{e=await this.prepareEdit(t)}catch(o){if(t.aborted)throw o;let i=o instanceof y?o.errorType:"notebook_edit_failure",n=o instanceof Error?o.message:String(o);return{llmContent:n,returnDisplay:`Error: ${n}`,error:{message:n,type:i}}}try{try{await this.config.getFileHistoryService().trackEdit(this.params.notebook_path)}catch{}let o=await A(this.config,this.params.notebook_path,{expectExisting:!0});if(!o.ok)return{llmContent:o.rawMessage,returnDisplay:`Error: ${o.displayMessage}`,error:{message:o.rawMessage,type:o.type}};await this.config.getFileSystemService().writeTextFile({path:this.params.notebook_path,content:e.updatedContent,_meta:{bom:e.bom,encoding:e.encoding,lineEnding:e.lineEnding}}),this.modifyMetadata?.modifiedByUser||Q.getInstance().recordEdit(this.params.notebook_path,e.originalContent,e.updatedContent);try{let a=E.statSync(this.params.notebook_path),f=this.config.getFileReadCache();e.requiresReadAfterWrite?f.invalidate(a):f.recordWrite(this.params.notebook_path,a,{cacheable:!1})}catch(a){ee.warn(`[NotebookEdit] post-write cache update failed for ${this.params.notebook_path}: ${a instanceof Error?a.message:String(a)}`)}let i=m.basename(this.params.notebook_path),n=R(i,e.originalContent,e.updatedContent,"Current","Proposed",D),l=Y(i,e.originalContent,this.modifyMetadata?.aiProposedContent??e.updatedContent,e.updatedContent);z(this.config,new H(S.Name,"update",e.updatedContent.split(`
4
- `).length,G(this.params.notebook_path),".ipynb",e.language));let p={fileDiff:n,fileName:i,originalContent:e.originalContent,newContent:e.updatedContent,diffStat:l},s=this.modifyMetadata?.modifiedNotebookContent!==void 0?`Notebook ${this.params.notebook_path} has been updated. Notebook content was modified by the user before approval; the final saved notebook may differ from the original ${e.mode} cell ${e.editedCellId} proposal.`:`Notebook ${this.params.notebook_path} has been updated. ${e.mode} cell ${e.editedCellId}.${e.mode==="delete"?"":`
5
-
6
- Updated source:
7
-
8
- ---
9
-
10
- ${B(this.params.new_source??"")}`}`;try{let a=await Z(this.config,this.params.notebook_path);a&&(s+=`
11
-
12
- ${a}`)}catch{}return{llmContent:s,returnDisplay:p,resultFilePaths:[this.params.notebook_path]}}catch(o){let i=o instanceof Error?o.message:String(o);return{llmContent:`Error writing notebook: ${i}`,returnDisplay:`Error writing notebook: ${i}`,error:{message:i,type:"file_write_failure"}}}}},S=class d extends L{constructor(t){super(d.Name,x.NOTEBOOK_EDIT,`Edits a Jupyter notebook (.ipynb) safely at the cell level. Use this instead of ${c.EDIT} or ${c.WRITE_FILE} for notebook cells. Supports replacing, inserting, and deleting cells. Always read the notebook first with ${c.READ_FILE}; then use the cell IDs shown in that output.`,"edit",{properties:{notebook_path:{description:"Absolute path to the Jupyter notebook file to edit. Must end with .ipynb.",type:"string"},cell_id:{description:"Target cell ID from read_file output, or cell-N 0-based fallback. Required for replace and delete. For insert, the new cell is inserted after this cell; if omitted, inserted at the beginning.",type:"string"},new_source:{description:"New source content for replace and insert operations. Not required for delete.",type:"string"},cell_type:{description:"Cell type for inserted cells or type conversion on replace.",type:"string",enum:["code","markdown"]},edit_mode:{description:"Notebook edit operation. Defaults to replace.",type:"string",enum:["replace","insert","delete"]}},required:["notebook_path"],additionalProperties:!1,type:"object"});this.config=t}static Name=c.NOTEBOOK_EDIT;modifyMetadataByParams=new WeakMap;modifyMetadataByKey=new Map;validateToolParamValues(t){if(t.notebook_path=T(t.notebook_path.trim()),!t.notebook_path)return"The 'notebook_path' parameter must be non-empty.";if(!m.isAbsolute(t.notebook_path))return`Notebook path must be absolute: ${t.notebook_path}`;if(m.extname(t.notebook_path).toLowerCase()!==".ipynb")return"File must be a Jupyter notebook (.ipynb). Use the edit tool for other file types.";let e=t.edit_mode??"replace";return["replace","insert","delete"].includes(e)?t.cell_type&&!["code","markdown"].includes(t.cell_type)?"cell_type must be 'code' or 'markdown'.":e!=="insert"&&!t.cell_id?"cell_id is required for replace and delete operations.":e!=="delete"&&typeof t.new_source!="string"?`new_source is required when edit_mode is "${e}".`:this.config.getFileService().shouldMatildaIgnoreFile(t.notebook_path)?`File path '${t.notebook_path}' is ignored by .matildaignore pattern(s).`:null:"edit_mode must be 'replace', 'insert', or 'delete'."}createInvocation(t){return new P(this.config,t,this.consumeModifyMetadata(t))}getModifyMetadataKey(t){return JSON.stringify({notebook_path:T(t.notebook_path.trim()),cell_id:t.cell_id,new_source:t.new_source,cell_type:t.cell_type,edit_mode:t.edit_mode})}rememberModifyMetadata(t,e){this.modifyMetadataByParams.set(t,e);let o=this.getModifyMetadataKey(t),i=this.modifyMetadataByKey.get(o)??[];i.push(e),this.modifyMetadataByKey.set(o,i)}consumeModifyMetadata(t){let e=this.modifyMetadataByParams.get(t);if(e)return this.modifyMetadataByParams.delete(t),this.removeQueuedModifyMetadata(t,e),e;let o=this.getModifyMetadataKey(t),i=this.modifyMetadataByKey.get(o),n=i?.shift();return i&&i.length===0&&this.modifyMetadataByKey.delete(o),n}removeQueuedModifyMetadata(t,e){let o=this.getModifyMetadataKey(t),i=this.modifyMetadataByKey.get(o);if(!i)return;let n=i.indexOf(e);n!==-1&&i.splice(n,1),i.length===0&&this.modifyMetadataByKey.delete(o)}getModifyContext(t){let e=new Map,o=async i=>{let n=e.get(i.notebook_path);if(n!==void 0)return n;let{content:l}=await this.config.getFileSystemService().readTextFile({path:i.notebook_path});return e.set(i.notebook_path,l),l};return{getFilePath:i=>i.notebook_path,getCurrentContent:async i=>o(i),getProposedContent:async i=>{let n=await o(i);return O(n,i).updatedContent},createUpdatedParams:(i,n,l)=>{let p=this.modifyMetadataByParams.get(l)?.aiProposedContent;if(p===void 0)try{p=O(i,l).updatedContent}catch{p=n}let s={...l};return this.rememberModifyMetadata(s,{aiProposedContent:p,modifiedByUser:!0,modifiedNotebookContent:n}),s}}}};export{S as NotebookEditTool,O as applyNotebookEdit};
13
- /**
14
- * @license
15
- * Copyright 2026 Matilda Team
16
- * SPDX-License-Identifier: Apache-2.0
17
- */