@kodax-ai/kodax 0.7.57 → 0.7.59

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 (77) hide show
  1. package/CHANGELOG.md +2032 -1920
  2. package/README.md +1228 -1219
  3. package/README_CN.md +647 -638
  4. package/dist/chunks/agent-QQCRBU4C.js +2 -0
  5. package/dist/chunks/argument-completer-7Q2T4YWA.js +2 -0
  6. package/dist/chunks/{chunk-LZKGOR2C.js → chunk-2UUOFT3Z.js} +1 -1
  7. package/dist/chunks/chunk-5GPJ6MB5.js +405 -0
  8. package/dist/chunks/chunk-BEXLPFFB.js +7 -0
  9. package/dist/chunks/chunk-D6QVXQNI.js +1 -0
  10. package/dist/chunks/chunk-D7RENPQQ.js +322 -0
  11. package/dist/chunks/chunk-PRIBJN5E.js +683 -0
  12. package/dist/chunks/chunk-S4GVQO3W.js +31 -0
  13. package/dist/chunks/chunk-SDSLWDAZ.js +17 -0
  14. package/dist/chunks/chunk-SVEJFERZ.js +326 -0
  15. package/dist/chunks/chunk-TBXP7FEG.js +52 -0
  16. package/dist/chunks/chunk-UA744TZM.js +2 -0
  17. package/dist/chunks/{chunk-YSVPF6SN.js → chunk-UXQILGRX.js} +262 -259
  18. package/dist/chunks/{chunk-4SHP3M67.js → chunk-YADBB5GN.js} +1 -1
  19. package/dist/chunks/chunk-Z23LK3IV.js +310 -0
  20. package/dist/chunks/chunk-Z3ZXV3DZ.js +18 -0
  21. package/dist/chunks/compaction-config-GQIPCVFD.js +2 -0
  22. package/dist/chunks/{construction-bootstrap-55B7Q5RX.js → construction-bootstrap-YON4ZEMO.js} +1 -1
  23. package/dist/chunks/dist-73L4OYPD.js +2 -0
  24. package/dist/chunks/dist-EZXBR6NW.js +2 -0
  25. package/dist/chunks/host-LO6ZNTMV.js +2 -0
  26. package/dist/chunks/paste-4THGP5XW.js +2 -0
  27. package/dist/chunks/run-manager-HTLXKU66.js +2 -0
  28. package/dist/chunks/utils-5XVW33SY.js +2 -0
  29. package/dist/index.d.ts +15 -14
  30. package/dist/index.js +2 -2
  31. package/dist/kodax_cli.js +1222 -1047
  32. package/dist/provider-capabilities.json +971 -986
  33. package/dist/sdk-agent.d.ts +156 -14
  34. package/dist/sdk-agent.js +1 -1
  35. package/dist/sdk-coding.d.ts +253 -188
  36. package/dist/sdk-coding.js +1 -1
  37. package/dist/sdk-llm.d.ts +66 -43
  38. package/dist/sdk-llm.js +1 -1
  39. package/dist/sdk-mcp.js +1 -1
  40. package/dist/sdk-media.d.ts +18 -2
  41. package/dist/sdk-media.js +1 -1
  42. package/dist/sdk-repl.d.ts +21 -22
  43. package/dist/sdk-repl.js +2 -2
  44. package/dist/sdk-session.d.ts +8 -7
  45. package/dist/sdk-session.js +1 -1
  46. package/dist/sdk-skills.d.ts +4 -231
  47. package/dist/sdk-skills.js +1 -1
  48. package/dist/types-chunks/{base.d-BnjQrSVf.d.ts → base.d-BA9Doaj_.d.ts} +3 -3
  49. package/dist/types-chunks/{bash-prefix-extractor.d-BgvMbfq6.d.ts → bash-prefix-extractor.d-BNdpV4Cf.d.ts} +515 -69
  50. package/dist/types-chunks/capability-learning.d-DRV80ISB.d.ts +29 -0
  51. package/dist/types-chunks/{cost-tracker.d-wRtyEW9d.d.ts → cost-tracker.d-CBLk1fiD.d.ts} +24 -2
  52. package/dist/types-chunks/{guardrail.d-C1DhxnvC.d.ts → guardrail.d-CNdKuSD_.d.ts} +4 -4
  53. package/dist/types-chunks/{process.d-BZncyzEj.d.ts → process.d-BOrAxjvM.d.ts} +188 -15
  54. package/dist/types-chunks/{resolver.d-ZvKQgl0X.d.ts → resolver.d-DFAKKUvt.d.ts} +87 -4
  55. package/dist/types-chunks/{capsule.d-DwJp5r63.d.ts → run-manager.d-CsJC9zYf.d.ts} +113 -5
  56. package/dist/types-chunks/{sdk-session-DAScB0rW.d.ts → sdk-session-ByZlwgdM.d.ts} +83 -9
  57. package/dist/types-chunks/{storage.d-CPvn9qI0.d.ts → storage.d-DHL3XpAL.d.ts} +2 -2
  58. package/dist/types-chunks/{guardrail.d-BP3yyr6u.d.ts → types.d-CE_Ter29.d.ts} +125 -3
  59. package/dist/types-chunks/{types.d-6VOXvF88.d.ts → types.d-Ci5YPFEh.d.ts} +39 -5
  60. package/dist/types-chunks/types.d-vJExiRje.d.ts +232 -0
  61. package/dist/types-chunks/{utils.d-CpgVIjYZ.d.ts → utils.d-D9FHU4wB.d.ts} +84 -6
  62. package/package.json +2 -2
  63. package/dist/chunks/agent-EHWQZA4C.js +0 -2
  64. package/dist/chunks/argument-completer-AYDAYGKL.js +0 -2
  65. package/dist/chunks/chunk-3WWPJGPQ.js +0 -2
  66. package/dist/chunks/chunk-KN6IJMTB.js +0 -636
  67. package/dist/chunks/chunk-MJFPFRGK.js +0 -423
  68. package/dist/chunks/chunk-N2N2W3AQ.js +0 -584
  69. package/dist/chunks/chunk-PCPFLPS4.js +0 -5
  70. package/dist/chunks/chunk-TCLSPUTR.js +0 -31
  71. package/dist/chunks/chunk-VACH6QWN.js +0 -315
  72. package/dist/chunks/compaction-config-TLDMFMZO.js +0 -2
  73. package/dist/chunks/dist-IE4HVWP7.js +0 -2
  74. package/dist/chunks/dist-IKOK2MJQ.js +0 -2
  75. package/dist/chunks/paste-WTL2XN7P.js +0 -2
  76. package/dist/chunks/utils-EJ2VCRTC.js +0 -2
  77. package/dist/types-chunks/types.d-D8WcfrOD.d.ts +0 -143
@@ -1,5 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{C as M,R as h}from"./chunk-TCLSPUTR.js";import{Na as D}from"./chunk-N2N2W3AQ.js";import{a as r}from"./chunk-V4WSBIXB.js";var m=class extends Error{static{r(this,"KodaXMediaError")}code;detail;cause;constructor(t,i,o={}){super(i),this.name="KodaXMediaError",this.code=t,this.detail=o.detail,this.cause=o.cause}},p=class extends m{static{r(this,"ImageResizeError")}constructor(t,i={}){super(i.code??"IMAGE_TOO_LARGE",t,i),this.name="ImageResizeError"}};import v from"node:path";var G={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},B={".3gp":"video/3gpp",".3gpp":"video/3gpp",".avi":"video/x-msvideo",".flv":"video/x-flv",".mov":"video/quicktime",".mp4":"video/mp4",".mpeg":"video/mpeg",".mpg":"video/mpeg",".webm":"video/webm",".wmv":"video/x-ms-wmv"};function x(e){return G[v.extname(e).toLowerCase()]}r(x,"inferImageMediaType");function S(e){return B[v.extname(e).toLowerCase()]}r(S,"inferVideoMediaType");function Y(e,t={}){let i=t.mediaType??x(e);return{kind:"image",path:e,...i?{mediaType:i}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}r(Y,"createImageArtifactFromPath");function z(e,t={}){if(t.mediaType!==void 0&&t.mimeType!==void 0&&t.mediaType!==t.mimeType)throw new m("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${t.mediaType} != ${t.mimeType}.`);return{kind:"file",path:e,...t.mediaType?{mediaType:t.mediaType}:{},...t.mimeType?{mimeType:t.mimeType}:{},...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}r(z,"createFileArtifactFromPath");function V(e,t={}){let i=t.mediaType??S(e);if(!i)throw new m("UNSUPPORTED_MEDIA_TYPE",`Cannot infer video media type from path: ${e}.`);return{kind:"video",path:e,mediaType:i,...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}r(V,"createVideoArtifactFromPath");import{Jimp as q}from"jimp";var k=2e3,b=Math.floor(3.75*1024*1024),W=[80,60,40];async function E(e,t={}){let i=t.maxDimension??k,o=t.targetBytes??b;if(e.length===0)throw new p("Empty image buffer.",{code:"IMAGE_DECODE_FAILED"});let a;try{a=await q.read(e)}catch(s){let g=s instanceof Error?s.message:String(s);throw new p(`Failed to decode image: ${g}`,{code:"IMAGE_DECODE_FAILED",cause:s})}let{width:n,height:d}=a.bitmap,c=Math.max(n,d);if(c>i){let s=i/c;a.resize({w:Math.max(1,Math.round(n*s)),h:Math.max(1,Math.round(d*s))})}let u=a.bitmap.width,T=a.bitmap.height;if(t.preferMediaType!=="image/jpeg"){let s=await a.getBuffer("image/png");if(s.length<=o)return{buffer:Buffer.from(s),mediaType:"image/png",width:u,height:T}}for(let s of W){let g=await a.getBuffer("image/jpeg",{quality:s});if(g.length<=o)return{buffer:Buffer.from(g),mediaType:"image/jpeg",width:u,height:T}}if(t.preferMediaType==="image/jpeg"){let s=await a.getBuffer("image/png");if(s.length<=o)return{buffer:Buffer.from(s),mediaType:"image/png",width:u,height:T}}throw new p(`Image still exceeds budget (${o} bytes raw) after PNG and JPEG q40 compression. Try a smaller image or take a fresh screenshot of a smaller region.`,{code:"IMAGE_TOO_LARGE"})}r(E,"normalizePastedImage");import{spawn as R}from"node:child_process";import{mkdtemp as H,readFile as J,rm as Z}from"node:fs/promises";import{tmpdir as Q}from"node:os";import O from"node:path";var U=5e3;async function $(){switch(process.platform){case"darwin":return te();case"win32":return ie();case"linux":return re();default:throw new m("UNSUPPORTED_PLATFORM",`Clipboard image fallback is not supported on platform "${process.platform}".`)}}r($,"readClipboardImage");async function ee(e={}){let t=await $();return t?E(t,e):null}r(ee,"readAndNormalizeClipboardImage");async function C(e){let t=await H(O.join(Q(),"kodax-clip-")),i=O.join(t,"clip.png");try{return await e(i)}finally{await Z(t,{recursive:!0,force:!0}).catch(o=>{})}}r(C,"runWithTempPng");async function te(){return C(async e=>{let t=`set png_data to (the clipboard as \xABclass PNGf\xBB)
3
- set fh to open for access POSIX file "${e.replace(/"/g,'\\"')}" with write permission
4
- write png_data to fh
5
- close access fh`;return await K("osascript",["-e",t])?F(e):null})}r(te,"readMacClipboard");async function ie(){return C(async e=>{let t=["Add-Type -AssemblyName System.Drawing | Out-Null","$img = Get-Clipboard -Format Image","if ($null -eq $img) { exit 1 }",`$img.Save('${e.replace(/'/g,"''")}', [System.Drawing.Imaging.ImageFormat]::Png)`].join("; ");return await K("powershell",["-NoProfile","-Command",t])?F(e):null})}r(ie,"readWinClipboard");async function re(){return await N("wl-paste",["--type","image/png"])??N("xclip",["-selection","clipboard","-t","image/png","-o"])}r(re,"readLinuxClipboard");async function F(e){try{let t=await J(e);return t.length>0?t:null}catch(t){return null}}r(F,"readNonEmptyFile");function K(e,t){return new Promise(i=>{let o=!1,a=R(e,[...t],{stdio:"ignore"}),n=setTimeout(()=>{o||(o=!0,a.kill(),i(!1))},U);a.once("error",()=>{o||(o=!0,clearTimeout(n),i(!1))}),a.once("exit",d=>{o||(o=!0,clearTimeout(n),i(d===0))})})}r(K,"runCommand");function N(e,t){return new Promise(i=>{let o=!1,a=[],n=R(e,[...t],{stdio:["ignore","pipe","ignore"]}),d=setTimeout(()=>{o||(o=!0,n.kill(),i(null))},U);n.stdout?.on("data",c=>a.push(c)),n.once("error",()=>{o||(o=!0,clearTimeout(d),i(null))}),n.once("exit",c=>{if(o)return;if(o=!0,clearTimeout(d),c!==0){i(null);return}let u=Buffer.concat(a);i(u.length>0?u:null)})})}r(N,"collectStdoutBytes");import{createHash as ae}from"node:crypto";import{mkdir as oe,readdir as ne,stat as me,unlink as de,writeFile as se}from"node:fs/promises";import{tmpdir as ce}from"node:os";import y from"node:path";var X="KODAX_PASTE_TMP_DIR",L=1440*60*1e3;function j(){return process.env[X]??y.join(ce(),"kodax-paste")}r(j,"resolvePasteTmpDir");function pe(e){let t=e?.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return t&&t.length>0?t:"paste"}r(pe,"sanitizeFileNamePrefix");async function ue(e,t={}){let i=t.directory??j();await oe(i,{recursive:!0});let o=e.mediaType==="image/jpeg"?".jpg":".png",a=ae("sha256").update(e.buffer).digest("hex").slice(0,16),n=`${pe(t.fileNamePrefix)}-${a}${o}`,d=y.join(i,n);return await se(d,e.buffer),{type:"image",path:d,mediaType:e.mediaType}}r(ue,"persistImageAsBlock");async function fe(e=Date.now()){let t=j(),i;try{i=await ne(t)}catch(n){return 0}let o=e-L,a=0;return await Promise.all(i.filter(n=>n.startsWith("paste-")).map(async n=>{let d=y.join(t,n);try{(await me(d)).mtimeMs<o&&(await de(d),a+=1)}catch(c){}})),a}r(fe,"prunePasteTmpDir");var f=["image/png","image/jpeg","image/webp","image/gif"],l=["video/mp4","video/mpeg","video/quicktime","video/x-msvideo","video/x-flv","video/webm","video/x-ms-wmv","video/3gpp"],le=[],ge=new Set(["anthropic","openai"]),Te=new Set(["kimi-code/kimi-for-coding","kimi/kimi-k2.5","kimi/kimi-k2.6","kimi/kimi-k2.7-code","minimax-coding/minimax-m3","minimax/minimax-m3","mimo-coding/mimo-v2.5","mimo/mimo-v2.5"]);function _(e){return{nativeSupported:!1,sdkSupported:!1,status:"unsupported",mediaTypes:[],maxCount:0,reason:e}}r(_,"unsupported");function he(e){return{nativeSupported:!0,sdkSupported:!0,status:"supported",mediaTypes:f,nativeMediaTypes:f,reason:e}}r(he,"supportedImage");function Ee(e){return{nativeSupported:!0,sdkSupported:!1,status:"provider-native-unwired",mediaTypes:[],nativeMediaTypes:l,maxCount:0,reason:e}}r(Ee,"nativeVideoUnwired");function ye(e){return e.trim().toLowerCase()}r(ye,"normalizeProvider");function _e(e){return h[e]?.model}r(_e,"resolveProviderDefaultModel");function we(e,t){if(!t)return;let i=t.trim().toLowerCase();if(e==="kimi"){if(i==="k2.5")return"kimi-k2.5";if(i==="k2.6")return"kimi-k2.6";if(i==="k2.7-code")return"kimi-k2.7-code"}return(e==="minimax-coding"||e==="minimax")&&i==="minimax-m3"?"minimax-m3":i}r(we,"normalizeModel");function Ie(e){if(!ge.has(e))return!1;let t=h[e];return t?M(t.capabilityProfile).multimodalSupport!=="none":!1}r(Ie,"hasOfficialImageSupport");function Pe(e,t){let i=we(e,t);if(!i)return!1;let o=`${e}/${i}`;return Te.has(o)}r(Pe,"hasSourceBackedNativeMedia");function Ae(e,t,i){if(i)return"source-backed";if(t){if(e==="openai")return"openai-official";if(e==="anthropic")return"anthropic-official"}}r(Ae,"resolveImageCapabilityRoute");function Me(e){switch(e){case"openai-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but OpenAI requires non-animated GIF semantics.";case"anthropic-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but Anthropic uses only the first frame of animated GIFs.";case"source-backed":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif; animated-GIF interpretation is provider-owned."}}r(Me,"imageCapabilityReason");function w(e){let t=ye(e.provider),i=e.model?.trim()||_e(t),o=Ie(t),a=Pe(t,i),n=Ae(t,o,a),d=n!==void 0,c=a;return{text:!0,image:d?he(Me(n)):_("No verified KodaX image-input route for this provider/model."),video:c?Ee("Model route is native-video capable, but KodaX SDK video sending is not wired yet. Reject or downgrade before send."):_("No verified native video route for this provider/model."),file:_("File artifact contract is stable, but KodaX SDK file sending/extraction is not wired yet. Reject or downgrade before send.")}}r(w,"getModelInputCapabilities");function De(e){return f.includes(e)}r(De,"isKnownImageMediaType");function ve(e){return l.includes(e)}r(ve,"isKnownVideoMediaType");function I(e){return`${e.provider}${e.model?`/${e.model}`:""}`}r(I,"routeLabel");function P(e){return e.reason?`${e.status}: ${e.reason}`:e.status}r(P,"capabilityDetail");function A(e,t){if(e.length===0)return;let i=w(t);for(let o of e){let a=o;if(a.kind==="image"){if(!i.image.nativeSupported||!i.image.sdkSupported)throw new m("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume image artifacts: ${I(t)}.`,{detail:P(i.image)});if(typeof a.mediaType=="string"&&!De(a.mediaType))throw new m("UNSUPPORTED_MEDIA_TYPE",`Unsupported image media type: ${a.mediaType}.`);continue}throw a.kind==="video"?typeof a.mediaType!="string"||!ve(a.mediaType)?new m("UNSUPPORTED_MEDIA_TYPE",`Unsupported video media type: ${String(a.mediaType)}.`,{detail:`Supported video media types: ${l.join(", ")}`}):new m("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume video artifacts through this SDK runtime: ${I(t)}.`,{detail:P(i.video)}):a.kind==="file"?typeof a.mediaType=="string"&&typeof a.mimeType=="string"&&a.mediaType!==a.mimeType?new m("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${a.mediaType} != ${a.mimeType}.`):new m("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume file artifacts through this SDK runtime: ${I(t)}.`,{detail:P(i.file)}):new m("MODEL_INPUT_UNSUPPORTED",`Unsupported input artifact kind: ${String(a.kind)}.`)}}r(A,"validateInputArtifactsForModel");function xe(e){return A(e.inputArtifacts??[],e),D().enqueue({priority:e.priority??"user",mode:"prompt",content:e.content,agentId:e.agentId,inputArtifacts:e.inputArtifacts})}r(xe,"enqueueWithArtifacts");export{m as a,p as b,x as c,S as d,Y as e,z as f,V as g,k as h,b as i,E as j,$ as k,ee as l,X as m,L as n,ue as o,fe as p,f as q,l as r,le as s,w as t,A as u,xe as v};
@@ -1,31 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as i}from"./chunk-V4WSBIXB.js";var Y=class extends Error{static{i(this,"KodaXError")}code;constructor(e,n="KODAX_ERROR"){super(e),this.code=n,this.name="KodaXError"}},M=class extends Y{static{i(this,"KodaXProviderError")}provider;constructor(e,n){super(e,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},_e=class extends Y{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(e,n){super(e,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},xt=class extends Y{static{i(this,"KodaXNetworkError")}isTimeout;constructor(e,n=!1){super(e,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Fe=class extends M{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(e,n,o,r){super(e,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},_t=class extends Y{static{i(this,"KodaXToolCallIdError")}constructor(e){super(e,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Tt=32768,Ao=32e3,Do=64e3,Oo=.5;var Io=["off","auto","quick","balanced","deep"],ce=["auto","none","low","medium","high"],kn={low:6e3,medium:1e4,high:2e4},bn=4096,Ct=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Enable thinking"},{value:"medium",description:"Enable thinking",isDefault:!0},{value:"high",description:"Enable thinking"},{value:"xhigh",description:"Enable thinking"},{value:"max",description:"Enable thinking"}],Pt=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Alias to high"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning"}],$o=[{value:"low",description:"Thinking is always on"},{value:"medium",description:"Thinking is always on"},{value:"high",description:"Thinking is always on",isDefault:!0},{value:"xhigh",description:"Thinking is always on"},{value:"max",description:"Thinking is always on"}];function Rt(t,e={}){return{...Bo(t),...e,reasoningPreset:t}}i(Rt,"createReasoningProfileFromPreset");function Bo(t){switch(t){case"zai-glm-5.2":return{reasoningPreset:t,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Pt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":return{reasoningPreset:t,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Pt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-anthropic":return{reasoningPreset:t,effortStrategy:"anthropic-output-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Pt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"zai-glm-toggle":case"deepseek-toggle":case"kimi-hybrid-toggle":case"mimo-v2.5-toggle":case"generic-thinking-toggle":return{reasoningPreset:t,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",supportedEfforts:Ct,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:t,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:$o,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:t,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:Ct,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:t,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:Ct,budgetByEffort:{low:6e3,medium:1e4,high:16e3,xhigh:24e3,max:32e3},disabledEfforts:["none","minimal"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"claude-adaptive-xhigh":return{reasoningPreset:t,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"xhigh"},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"claude-adaptive-max":return{reasoningPreset:t,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"anthropic-budget":return{reasoningPreset:t,effortStrategy:"provider-budget",thinkingStrategy:"anthropic-budget",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"}],budgetByEffort:{low:6e3,medium:1e4,high:16e3},disabledEfforts:["none"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"openai-chat-reasoning":case"openai-responses-reasoning":return{reasoningPreset:t,effortStrategy:t==="openai-chat-reasoning"?"openai-chat-effort":"openai-responses-effort",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],disabledEfforts:["none"],supportsReasoningEffort:!0,supportsReasoningSummary:!0,supportsEncryptedReasoningReplay:!0};case"codex-cli-effort":return{reasoningPreset:t,effortStrategy:"codex-cli-config",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],allowCustomEffort:!0,supportsReasoningEffort:!0};case"none":return{reasoningPreset:t,effortStrategy:"none",thinkingStrategy:"none"}}}i(Bo,"createBaseReasoningProfileFromPreset");function St(t){return t.reasoningCapability?t.reasoningCapability:t.supportsThinking?"native-toggle":"prompt-only"}i(St,"getReasoningCapability");function le(t){return Ke(t).enabled}i(le,"isReasoningEnabled");function Ke(t){if(typeof t=="boolean")return{enabled:t,effort:t?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let e=t?.effort?we(t.effort):void 0,n=e??(t?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:e!==void 0?"explicit":"legacy",taskType:t?.taskType??"unknown",executionMode:t?.executionMode??"implementation"}}i(Ke,"normalizeReasoningRequest");function we(t){let e=t.trim().toLowerCase();if(!e)throw new Error("Reasoning effort cannot be empty.");if(/\s/.test(e))throw new Error(`Reasoning effort cannot contain whitespace: "${t}".`);return e==="off"?"none":e}i(we,"normalizeReasoningEffortValue");function En(t){switch(t){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(En,"mapLegacyReasoningModeToEffortIntent");function Lo(t){switch(t){case"none":return"off";case"auto":return"auto";case"low":return"quick";case"medium":return"balanced";case"high":return"deep";default:return}}i(Lo,"effortToLegacyReasoningMode");function xn(t){let e=t?.trim();if(!e)return{kind:"unset"};let n=we(e);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(xn,"parseReasoningEffortEnv");function Mt(t){let e=xn(t.envEffort),n=[];Te(n,t.explicitEffort,"explicit",!0),e.kind==="value"&&n.push({value:e.value,source:"env",isExplicit:!0}),Te(n,t.sessionEffort,"session",!1),t.legacyReasoningMode?n.push({value:En(t.legacyReasoningMode),source:"legacy",isExplicit:!1}):t.thinking!==void 0&&n.push({value:t.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Te(n,t.modelDefaultEffort??t.capability?.defaultEffort??Ce(t.capability),"model-default",!1),Te(n,t.providerDefaultEffort,"provider-default",!1),Te(n,t.fallbackEffort??Pe(t.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:Fo(n.slice(1),t.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=_n(o.value,t.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(Mt,"resolveReasoningEffort");function No(t){let e=t.currentEffort?we(t.currentEffort):void 0;if(e&&Tn(e,t.capability))return{effectiveEffort:je(e,t.capability),preserved:!0};let n=t.capability?.defaultEffort??Ce(t.capability)??wt(t.capability)??Pe(t.capability),o=n&&je(n,t.capability);return e?{effectiveEffort:o,preserved:!1,diagnostic:o?`Effort ${e} is not supported by the selected model; using ${o}.`:`Effort ${e} is not supported by the selected model; clearing effort.`}:{effectiveEffort:o,preserved:!1}}i(No,"resolveReasoningEffortForModelSwitch");function Te(t,e,n,o){if(e===void 0)return;let r=we(e);t.push({value:r,source:n,isExplicit:o})}i(Te,"pushEffortCandidate");function Fo(t,e){let n=t.find(o=>o.value!=="auto");return n?_n(n.value,e,n.isExplicit):Ce(e)??Pe(e)}i(Fo,"resolveAutoEffectiveEffort");function _n(t,e,n){if(e?.localRejectEfforts?.includes(t)){if(n)throw new Error(`Unsupported reasoning effort "${t}" for the selected model.`);return Ce(e)??wt(e)??Pe(e)??t}if(t==="none")return t;if(Tn(t,e))return je(t,e);if(n)throw new Error(`Unsupported reasoning effort "${t}" for the selected model.`);return Ce(e)??wt(e)??Pe(e)??t}i(_n,"validateReasoningEffort");function je(t,e){return e?.effortAliases?.[t]??t}i(je,"applyEffortAlias");function Tn(t,e){if(e?.localRejectEfforts?.includes(t))return!1;if(t==="auto"||t==="none"||e?.allowCustomEffort===!0)return!0;let n=jo(e);return n.length===0?ce.includes(t):n.includes(t)||n.includes(je(t,e))}i(Tn,"isSupportedReasoningEffort");function jo(t){return t?.supportedEfforts?.map(e=>e.value)??[]}i(jo,"getSupportedEffortValues");function Ce(t){return t?.supportedEfforts?.find(e=>e.isDefault)?.value}i(Ce,"getDefaultPresetValue");function wt(t){let e=t?.supportedEfforts?.filter(Ko).map(n=>n.value);if(!(!e||e.length===0))return e[Math.floor((e.length-1)/2)]}i(wt,"getMiddleVisiblePresetValue");function Ko(t){return t.isUserVisible!==!1}i(Ko,"isUserVisiblePreset");function Pe(t){if(!t||t.effortStrategy==="none"||t.effortStrategy==="prompt-only")return"none";if(!(t.effortStrategy==="anthropic-output-effort"&&t.thinkingStrategy==="anthropic-adaptive"))return"medium"}i(Pe,"getFallbackEffortForCapability");function Uo(t){switch(t){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(Uo,"getDefaultThinkingDepthForMode");function re(t){switch(t){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(re,"effortToThinkingDepth");function ie(t,e,n="unknown"){if(e==="off")return 0;let o={...kn,...t.defaultThinkingBudgets??{}},s=t.taskBudgetOverrides?.[n]?.[e]??o[e];return t.thinkingBudgetCap?Math.min(s,t.thinkingBudgetCap):s}i(ie,"resolveThinkingBudget");function se(t,e,n=bn){let o=Math.max(1024,e-n);return Math.max(1024,Math.min(t,o))}i(se,"clampThinkingBudget");function At(t){switch(t){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(At,"mapDepthToOpenAIReasoningEffort");function Cn(t){if(!t||typeof t!="object")return;let e=t,n=e.status??e.statusCode??e.code;return typeof n=="number"&&Number.isInteger(n)?n:typeof n=="string"&&/^\d{3}$/.test(n)?Number(n):Cn(e.cause)}i(Cn,"getStatus");function zo(t){if(t instanceof Error)return t.message.toLowerCase();if(typeof t=="string")return t.toLowerCase();if(t&&typeof t=="object"){let e=t;return[e.message,e.error,e.detail,e.body].filter(o=>typeof o=="string").join(" ").toLowerCase()}return""}i(zo,"getMessage");var Wo=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],Xo=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],Vo=["minimal","none","low","medium","high","xhigh","max"];function Go(t,e){for(let n of Vo)if(new RegExp(`['"\`]${n}['"\`]`).test(t))return n;return e}i(Go,"extractRejectedEffort");function Dt(t,e){let n=Cn(t);if(n!==400&&n!==422)return null;let o=zo(t);if(!o)return null;let r=Wo.some(u=>o.includes(u)),s=Xo.some(u=>o.includes(u));if(!r||!s)return null;let a=Go(o,e);return a?{rejectedEffort:a}:null}i(Dt,"classifyReasoningEffortRejection");function Pn(t,e){if(!t)return;if(typeof t.get=="function")return t.get(e)??void 0;let n=t,o=e.toLowerCase(),r=n[e]??n[o]??n[o.replace(/\b\w/g,s=>s.toUpperCase())];if(r!==void 0)return Array.isArray(r)?r[0]:r}i(Pn,"readHeader");function wn(t){if(!t)return;let e=t.trim();if(e.length===0)return;let n=Number(e);if(!(!Number.isFinite(n)||n<=0))return n}i(wn,"parsePositiveNumber");function Ho(t,e){if(!t)return;let n=t.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let r=o-e;return r>0?r:void 0}i(Ho,"parseHttpDate");function Ue(t,e){let n=e.baseBackoffMs??1e3,o=e.maxBackoffMs??3e4,r=e.maxHeaderWaitMs??12e4,s=e.now?e.now():Date.now(),a=wn(Pn(t,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=Pn(t,"retry-after");if(u!==void 0&&u.trim().length>0){let g=wn(u);if(g!==void 0){let T=g*1e3,f=Math.min(T,r);return{type:"header",waitMs:Math.round(f),source:"retry-after-seconds",cappedFromHeader:f!==T}}let y=Ho(u,s);if(y!==void 0){let T=Math.min(y,r);return{type:"header",waitMs:Math.round(T),source:"retry-after-date",cappedFromHeader:T!==y}}}let c=n*Math.pow(2,Math.max(0,e.attempt)),d=Math.min(c,o),p=e.withJitter!==!1?Math.random()*.25*d:0;return{type:"backoff",waitMs:Math.round(d+p),source:"exponential-backoff",attempt:e.attempt}}i(Ue,"parseRetryAfter");function ze(t){if(!t||typeof t!="object")return;let e=t;return e.headers??e.response?.headers??e.cause?.headers??e.cause?.response?.headers}i(ze,"extractHeadersFromError");var ae={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Rn={...ae,multimodalSupport:"image-input"},Re={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Sn={...Re,multimodalSupport:"image-input"};function We(t){return{transport:t.transport,conversationSemantics:t.conversationSemantics,mcpSupport:t.mcpSupport,contextFidelity:t.contextFidelity??"full",toolCallingFidelity:t.toolCallingFidelity??"full",sessionSupport:t.sessionSupport??"full",longRunningSupport:t.longRunningSupport??"full",multimodalSupport:t.multimodalSupport??"none",evidenceSupport:t.evidenceSupport??"full"}}i(We,"normalizeCapabilityProfile");function X(t){return{...We(t)}}i(X,"cloneCapabilityProfile");function Jo(t){if(!t)return;let e=parseInt(t,10);return Number.isFinite(e)&&e>0?e:void 0}i(Jo,"parseEnvInt");function qo(t){switch(t.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return t.effortStrategy==="provider-budget"}i(qo,"shouldLowerAutoReasoningEffort");function Ve(){return new DOMException("Request aborted","AbortError")}i(Ve,"abortError");function Yo(t,e){return t<=0?Promise.resolve():e?.aborted?Promise.reject(Ve()):new Promise((n,o)=>{let r,s=i(()=>{e&&e.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(Ve())},"onAbort");e&&e.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},t)})}i(Yo,"waitForRetryDelay");function Ot(t){if(typeof t=="number"&&Number.isInteger(t))return t;if(typeof t=="string"&&/^\d{3}$/.test(t))return Number(t)}i(Ot,"normalizeHttpStatus");function Mn(t){if(!t||typeof t!="object")return;let e=t;return Ot(e.status)??Ot(e.statusCode)??Ot(e.code)??Mn(e.cause)}i(Mn,"extractHttpStatus");function An(t){if(!t||typeof t!="object")return"";let e=t;return typeof e.code=="string"?e.code:An(e.cause)}i(An,"extractErrorCode");function Xe(t){if(t instanceof Error)return t.message.toLowerCase();if(t&&typeof t=="object"){let e=t.message;if(typeof e=="string")return e.toLowerCase()}return String(t).toLowerCase()}i(Xe,"getErrorMessage");var H=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;suppressReasoningEffort=!1;setMaxOutputTokensOverride(e){this.maxOutputTokensOverride=e}getEffectiveMaxOutputTokens(e){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=Jo(process.env.KODAX_MAX_OUTPUT_TOKENS);if(n!==void 0)return n;let o=this.getModelDescriptor(e)?.maxOutputTokens;return o!==void 0?o:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(e){let n=this.getModelDescriptor(e)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(e){let n=this.getModelDescriptor(e)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(e){let n=this.getModelDescriptor(e)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getEffectiveThinkingBudgetCap(e){return this.getModelDescriptor(e)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsNonStreamingFallback(){return!1}async complete(e,n,o,r,s,a){throw new M(`${this.name} does not support non-streaming fallback`)}isConfigured(){return!!process.env[this.config.apiKeyEnv]}async verifyCredential(e){return{ok:!1,error:"unsupported",strategy:this.config.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider class "${this.name}" does not implement verifyCredential()`}}getModel(){return this.config.model}getAvailableModels(){return this.config.models?.length?[...new Set([this.config.model,...this.config.models.map(e=>e.id)])]:[this.config.model]}getModelDescriptor(e){let n=e??this.config.model,o=this.config.models?.find(r=>r.id===n);if(o)return o;if(n===this.config.model)return{id:this.config.model}}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return X(this.config.capabilityProfile??ae)}getConfiguredReasoningCapability(e){let n=this.getModelDescriptor(e);return n?.reasoningCapability?n.reasoningCapability:St(this.config)}getReasoningCapability(e){return this.getConfiguredReasoningCapability(e)}getReasoningProfile(e){return this.getModelDescriptor(e)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(e,...n){let o=e instanceof Error?e.message.toLowerCase():String(e).toLowerCase(),s=n.map(u=>u.toLowerCase()).some(u=>o.includes(u)),a=o.includes("parameter")||s;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(e,...n){let o=e instanceof Error?e.message.toLowerCase():String(e).toLowerCase();return n.map(a=>a.toLowerCase()).some(a=>o.includes(a))?o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported"):!1}shouldFallbackForForcedToolChoiceError(e){let n=Xe(e);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported"))?!0:this.isServerError(e)}isServerError(e){let n=Mn(e);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Xe(e);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(e){switch(e){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","none"];case"native-adaptive":return["native-adaptive","none"];case"native-toggle":return["native-toggle","none"];default:return["none"]}}getContextWindow(){return this.getEffectiveContextWindow()}getEffectiveContextWindow(e){let n=this.getModelDescriptor(e)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let e=process.env[this.config.apiKeyEnv];if(!e)throw new Error(`${this.config.apiKeyEnv} not set`);return e}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...e){this.shouldLogStreamDiagnostics()&&console.error(...e)}normalizeReasoning(e){return Ke(e)}validateExplicitReasoningEffort(e,n){if(e.effortSource!=="explicit")return;let o=e.effort;if(!o||o==="auto")return;let r=ce.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${ce.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(l=>l.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",d=a.length>0?a.join(", "):ce.join(", ");throw new M(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${d}.`,this.name)}resolveReasoningProfileIntent(e,n,o){let r=e.effort;if(r&&n.localRejectEfforts?.includes(r)){if(e.effortSource==="explicit"){let s=o?`/${o}`:"";throw new M(`${this.name}${s} does not support reasoning effort "${r}".`,this.name)}if(n.defaultEffort)return{disabled:!1,effort:n.defaultEffort,requestedEffort:r}}if(!e.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(qo(n)){let s=Mt({capability:n,explicitEffort:r??"auto"}).effectiveEffort;return s==="none"||s!==void 0&&n.disabledEfforts?.includes(s)?{disabled:!0,effort:s,requestedEffort:r}:{disabled:!1,effort:s,requestedEffort:r}}return{disabled:!1,requestedEffort:r}}return{disabled:!1,effort:n.effortAliases?.[r]??r,requestedEffort:r}}onStaleConnection(){}isRateLimitError(e){if(!(e instanceof Error))return!1;let n=e.message.toLowerCase();return["rate","limit","\u901F\u7387","\u9891\u7387","1302","429","too many","overload","overwhelmed","503","529","busy"].some(o=>n.includes(o))}classifyRateLimitReason(e){let n=e instanceof Error?e.message.toLowerCase():String(e).toLowerCase();return n.includes("overload")||n.includes("overwhelmed")||n.includes("503")||n.includes("529")||n.includes("busy")?"overloaded":"rate-limit"}extractRetryAfterMs(e){let n=ze(e);if(!n)return;let o=Ue(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(e){let n=Xe(e),o=[{regex:/(\d[\d,]*)\s*tokens?.*?(\d[\d,]*)\s*(?:maximum|limit|context)/i,inputGroup:1,limitGroup:2},{regex:/maximum.*?(\d[\d,]*)\s*tokens?.*?requested.*?(\d[\d,]*)/i,inputGroup:2,limitGroup:1},{regex:/exceeds?\s+.*?(\d[\d,]*)\s*.*?(?:limit|max|context|上限).*?(\d[\d,]*)/i,inputGroup:1,limitGroup:2}];for(let r of o){let s=n.match(r.regex);if(s){let a=Number(s[r.inputGroup].replace(/,/g,"")),u=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,u-a-1e3)}}}isContextOverflowError(e){let n=Xe(e);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(e,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let d=await e();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,d}catch(d){if(this.isContextOverflowError(d)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(d);if(l){this.maxOutputTokensOverride=l,r?.(c+1,o,0);continue}}if(this.isRateLimitError(d)){if(c===o-1)throw new _e(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=ze(d)??{},p=Ue(l,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,y=this.classifyRateLimitReason(d);if(s?.({provider:this.name,waitMs:g,reason:y,source:p.source,attempt:c+1,maxAttempts:o}),r?r(c+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${c+1}/${o})...`),n?.aborted||(await Yo(g,n),n?.aborted))throw Ve();continue}if(a&&!u){let l=Dt(d,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let l=Dt(d,a.effort);if(l)throw this.suppressReasoningEffort=!1,new Fe(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(d instanceof Error){if((d.name==="AbortError"||d.name==="APIUserAbortError")&&n?.aborted)throw d.name==="AbortError"?d:new DOMException(d.message||"Request aborted","AbortError");let l=An(d);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new M(`${this.name} API error: ${d.message}`,this.name)}throw d}throw new Y("Unexpected end of withRateLimit")}};import or from"@anthropic-ai/sdk";import{parse as Qo}from"partial-json";function fe(t){if(!t)return{};try{let e=JSON.parse(t);return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{}try{let e=Qo(t);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",t.length),e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}i(fe,"parseToolInputWithSalvage");async function de(t){if(t.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let e=t.runners.find(d=>d.strategy===t.strategy);if(!e)return{ok:!1,error:"unsupported",strategy:t.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${t.strategy}" is not implemented for this provider's base class`};if(t.signal?.aborted)return{ok:!1,error:"unknown",strategy:t.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=t.timeoutMs??8e3,r,s=i(d=>{r||(r=d),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");t.signal&&t.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await e.run(n.signal),{ok:!0,strategy:t.strategy,durationMs:Date.now()-c,approxTokensSpent:e.approxTokensSpent}}catch(d){return It(d,{strategy:t.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:t.providerName})}finally{clearTimeout(a),t.signal&&t.signal.removeEventListener("abort",u)}}i(de,"runVerifyCredential");function Zo(t){return t.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(Zo,"redactKeyMaterial");function It(t,e){let n=t,o=n.status??n.statusCode??n.response?.status,r=Zo(String(n.message??t)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",u;return e.abortCause==="timeout"?u="timeout":e.abortCause==="parent"?u="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?u="unauthorized":o===429?u="rate_limited":o===400&&e.strategy==="count-tokens"&&e.providerName==="kimi-code"?u="unauthorized":o!==void 0&&o>=500&&o<600?u="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?u="network":/timeout/i.test(r)?u="timeout":u="unknown",{ok:!1,error:u,status:o,message:r,durationMs:e.durationMs,approxTokensSpent:e.approxTokensSpent,strategy:e.strategy}}i(It,"classifyVerifyError");function $t(t,e){let n=t[t.length-1];if(n&&pe(n)&&n.hint===e)return t;let o=e?{type:"cache-boundary",hint:e}:{type:"cache-boundary"};return[...t,o]}i($t,"insertCacheBoundary");function pe(t){if(typeof t!="object"||t===null||t.type!=="cache-boundary")return!1;let e=Object.keys(t);return e.length<=2&&e.every(n=>n==="type"||n==="hint")}i(pe,"isCacheBoundary");function Bt(t,e){let n=[];for(let o of t){if(pe(o)){if(e==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}i(Bt,"lowerCacheBoundaries");function Se(t){return t.filter(e=>!pe(e))}i(Se,"stripCacheBoundaries");import{readFile as er}from"node:fs/promises";import tr from"node:path";var nr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function Ge(t,e){return e??nr[tr.extname(t).toLowerCase()]??"image/png"}i(Ge,"resolveImageMediaType");async function He(t){return(await er(t)).toString("base64")}i(He,"readImageFileAsBase64");async function Dn(t,e){let n=Ge(t,e),o=await He(t);return`data:${n};base64,${o}`}i(Dn,"buildImageDataUrl");var rr="KodaX",ir="effort-2025-11-24";function sr(t){return t.userAgentMode==="sdk"?void 0:{"User-Agent":rr}}i(sr,"getAnthropicCompatDefaultHeaders");function Lt(t,e){if(!t)return e;let n=t.input_tokens!==void 0&&t.input_tokens!==null||t.cache_creation_input_tokens!==void 0&&t.cache_creation_input_tokens!==null||t.cache_read_input_tokens!==void 0&&t.cache_read_input_tokens!==null,o=typeof t.input_tokens=="number"?t.input_tokens:n?0:e?.inputTokens??0,r=typeof t.cache_creation_input_tokens=="number"?t.cache_creation_input_tokens:n?0:e?.cachedWriteTokens??0,s=typeof t.cache_read_input_tokens=="number"?t.cache_read_input_tokens:n?0:e?.cachedReadTokens??0,a=typeof t.output_tokens=="number"?t.output_tokens:e?.outputTokens??0,u=n?o+r+s:e?.inputTokens??0;if(![u,a].some(c=>!Number.isFinite(c)||c<0))return{inputTokens:u,outputTokens:a,totalTokens:u+a,cachedReadTokens:s||void 0,cachedWriteTokens:r||void 0}}i(Lt,"normalizeAnthropicUsage");function Nt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}i(Nt,"isRecord");function ar(t){if(!(!t.enabled||t.effort==="auto"||t.effort==="none"))return t.effort}i(ar,"selectAnthropicOutputEffort");function On(t,e){let n=ar(e);if(!n)return;let o=t,r=o.output_config;o.output_config={...Nt(r)?r:{},effort:n}}i(On,"applyAnthropicOutputEffort");function In(t,e){if(!e)return;let n=t,o=n.output_config;n.output_config={...Nt(o)?o:{},effort:e}}i(In,"setAnthropicOutputEffort");function ur(t){let n=t.output_config;return Nt(n)&&typeof n.effort=="string"}i(ur,"hasAnthropicOutputEffort");var I=class extends H{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(e){this._client=e}buildClient(){let e=sr(this.config);return new or({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...e?{defaultHeaders:e}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(e,n,o){let s=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&ur(e)?{"anthropic-beta":ir}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(e,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=e;if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only"||u==="kimi-k2.7-code"||u==="minimax-m2-always")){if(a.disabled){(u==="zai-glm-5.2"||u==="zai-glm-toggle"||u==="deepseek-v4-anthropic"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="minimax-m3"||u==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(e.thinking={type:"disabled"});return}if(u==="zai-glm-5.2"){e.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){e.thinking={type:"enabled"},In(e,a.effort);return}if(u==="minimax-m3"){e.thinking={type:"adaptive"};return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){e.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){e.thinking={type:"adaptive"},In(e,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let d=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);e.thinking={type:"enabled",budget_tokens:d}}}}resolveReasoningProfileBudget(e,n,o,r,s){let u=(n?e.budgetByEffort?.[n]:void 0)??ie(this.config,re(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),d=c!==void 0?Math.min(u,c):u;return se(d,s)}async verifyCredential(e){let n=this.config.model,o=this.client,r=[{strategy:"count-tokens",approxTokensSpent:0,run:i(async s=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")},{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({},{signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:i(async s=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return de({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:e?.timeoutMs,signal:e?.signal,providerName:this.name})}applyCacheControlToSystem(e){if(!e.trim()||process.env.KODAX_DISABLE_PROMPT_CACHE==="1")return e;let n=$t([{type:"text",text:e}],"system");return Bt(n,"attach")}applyCacheControlToTools(e){if(e.length===0||process.env.KODAX_DISABLE_PROMPT_CACHE==="1")return e;let n=e.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}async stream(e,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let d=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=await this.convertMessages(e,c),p=u.enabled?this.getReasoningCapability(c):"none",g=u.enabled?this.getReasoningFallbackChain(p).filter(b=>b==="native-budget"||b==="native-toggle"||b==="native-adaptive"||b==="none"):["none"],y=!!s?.forcedToolName,T=i(b=>{let P={model:c,max_tokens:d,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,e)),messages:l,tools:this.applyCacheControlToTools(n),stream:!0};s?.forcedToolName&&y&&(P.tool_choice={type:"tool",name:s.forcedToolName});let A=this.getReasoningProfile(c);if(A)this.applyReasoningProfile(P,A,u,c,d);else if(b==="native-budget"){let _=ie(this.config,re(u.effort),u.taskType);P.thinking={type:"enabled",budget_tokens:se(_,d)}}else b==="native-toggle"?P.thinking={type:"enabled"}:b==="native-adaptive"&&(P.thinking={type:"adaptive"},On(P,u));return P},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let f=[],x=[],k=[],v,h=null,m="",E="",C="",S="",D="",z="",F="",Z=!1,w,L=Date.now(),G=Date.now(),ne,Ne;for(let b of g){for(;!ne;)try{let P=T(b);ne=await this.client.messages.create(P,this.buildMessageCreateOptions(P,c,a))}catch(P){if(Ne=P,y&&this.shouldFallbackForForcedToolChoiceError(P)){y=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let A=b==="native-budget"?["budget_tokens","thinking"]:b==="native-toggle"?["thinking"]:b==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(P,...A))throw P;break}if(ne)break}if(!ne)throw Ne??new M("All reasoning capability attempts failed without a captured error",this.name);let Ee=Date.now(),xe=0,R=0,j=3e4;for await(let b of ne){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let P=Date.now(),A=P-Ee;if(A>j&&(xe++,R+=A,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(A/1e3)}s gap before ${b.type}`,{stallCount:xe,totalStallMs:R,eventType:b.type})),Ee=P,b.type==="content_block_start"||b.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),b.type==="content_block_start"){L=Date.now();let _=b.content_block;h=_.type,process.env.KODAX_DEBUG_TOOL_STREAM&&_.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:_.type,id:_.id,name:_.name}),_.type==="thinking"?(E="",C=_.signature??""):_.type==="redacted_thinking"?(h="redacted_thinking",S=_.data??""):_.type==="text"?m="":_.type==="tool_use"&&(D=_.id,z=_.name,F="")}else if(b.type==="content_block_delta"){L=Date.now();let _=b.delta;_.type==="thinking_delta"?(E+=_.thinking??"",s?.onThinkingDelta?.(_.thinking??"")):_.type==="text_delta"?(m+=_.text??"",s?.onTextDelta?.(_.text??"")):_.type==="input_json_delta"&&(F+=_.partial_json??"",s?.onToolInputDelta?.(z,_.partial_json??"",D?{toolId:D}:void 0))}else if(b.type==="content_block_stop")L=Date.now(),h==="thinking"?E&&(k.push({type:"thinking",thinking:E,signature:C}),s?.onThinkingEnd?.(E)):h==="redacted_thinking"?(S&&k.push({type:"redacted_thinking",data:S}),S=""):h==="text"?m&&f.push({type:"text",text:m}):h==="tool_use"&&(!D||!z?console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(D),name:JSON.stringify(z),input:F.slice(0,100)}):x.push({type:"tool_use",id:D,name:z,input:fe(F)})),h=null;else if(b.type==="message_stop"){if(Z=!0,L=Date.now(),process.env.KODAX_DEBUG_STREAM){let _=Date.now()-G;this.logStreamDiagnostic(`[Stream] message_stop received after ${_}ms`)}}else if(b.type==="message_delta"){L=Date.now(),v=Lt(b.usage,v);let _=b.delta;_?.stop_reason&&(w=_.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${w}`))}else b.type==="message_start"&&(L=Date.now(),v=Lt(b.message?.usage,v),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!Z){let b=Date.now()-G,P=Date.now()-L;if(a?.aborted){let _=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:b,lastEventAge:P,reason:_,textBlocks:f.length,toolBlocks:x.length,thinkingBlocks:k.length}),new DOMException(_,"AbortError")}let A=new Error(`Stream incomplete: message_stop event not received. Duration: ${b}ms, Last event: ${P}ms ago. This may indicate a network disconnection or API timeout.`);throw A.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:b,lastEventAge:P,textBlocks:f.length,toolBlocks:x.length,thinkingBlocks:k.length}),A}return{textBlocks:f,toolBlocks:x,thinkingBlocks:k,usage:v,stopReason:w}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(e,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let d=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=await this.convertMessages(e,c),p=u.enabled?this.getReasoningCapability(c):"none",g=u.enabled?this.getReasoningFallbackChain(p).filter(m=>m==="native-budget"||m==="native-toggle"||m==="native-adaptive"||m==="none"):["none"],y=!!s?.forcedToolName,T=i(m=>{let E={model:c,max_tokens:d,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,e)),messages:l,tools:this.applyCacheControlToTools(n)};s?.forcedToolName&&y&&(E.tool_choice={type:"tool",name:s.forcedToolName});let C=this.getReasoningProfile(c);if(C)this.applyReasoningProfile(E,C,u,c,d);else if(m==="native-budget"){let S=ie(this.config,re(u.effort),u.taskType);E.thinking={type:"enabled",budget_tokens:se(S,d)}}else m==="native-toggle"?E.thinking={type:"enabled"}:m==="native-adaptive"&&(E.thinking={type:"adaptive"},On(E,u));return E},"buildRequest"),f,x;for(let m of g){for(;!f;)try{let E=T(m);f=await this.client.messages.create(E,this.buildMessageCreateOptions(E,c,a))}catch(E){if(x=E,y&&this.shouldFallbackForForcedToolChoiceError(E)){y=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let C=m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:m==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(E,...C))throw E;break}if(f)break}if(!f)throw x??new M("All reasoning capability attempts failed without a captured error",this.name);let k=[],v=[],h=[];for(let m of f.content)m.type==="text"?(k.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(h.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?h.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&v.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:k,toolBlocks:v,thinkingBlocks:h,usage:Lt(f.usage),stopReason:f.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}serializeSystemMessageContent(e){if(typeof e=="string")return e.trim();for(let n of e)if(pe(n))throw new M("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name);return e.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
3
- `)}buildSystemPrompt(e,n){let o=n.filter(r=>r.role==="system").map(r=>this.serializeSystemMessageContent(r.content)).filter(Boolean);return[e,...o].filter(r=>typeof r=="string"&&r.trim().length>0).join(`
4
-
5
- `)}async convertMessages(e,n){let o=[],r=this.getEffectiveStrictThinkingSignature(n);for(let s of e.filter(a=>a.role!=="system")){let a=s.role==="user"?"user":"assistant";if(typeof s.content=="string"){o.push({role:a,content:s.content});continue}let u=[],c=[];for(let l of s.content)l.type==="thinking"?!r||typeof l.signature=="string"&&l.signature.length>0?u.push({type:"thinking",thinking:l.thinking,signature:l.signature??""}):l.thinking&&c.push(l.thinking):l.type==="redacted_thinking"&&(r||u.push({type:"redacted_thinking",data:l.data}));c.length>0&&s.role==="assistant"&&u.push({type:"text",text:`<prior_reasoning>
6
- ${c.join(`
7
-
8
- `)}
9
- </prior_reasoning>`});for(let l of s.content)if(l.type==="tool_result"&&s.role==="user"){let p;if(typeof l.content=="string")p=l.content;else{let g=[];for(let y of l.content)y.type==="text"?g.push({type:"text",text:y.text}):y.type==="image"&&g.push({type:"image",source:{type:"base64",media_type:Ge(y.path,y.mediaType),data:await He(y.path)}});p=g}u.push({type:"tool_result",tool_use_id:l.tool_use_id,content:p,...l.is_error===!0?{is_error:!0}:{}})}for(let l of s.content)l.type==="tool_use"&&s.role==="assistant"&&u.push({type:"tool_use",id:l.id,name:l.name,input:l.input});for(let l of s.content)l.type==="text"?u.push({type:"text",text:l.text}):l.type==="image"&&s.role==="user"&&u.push({type:"image",source:{type:"base64",media_type:Ge(l.path,l.mediaType),data:await He(l.path)}});if(a==="assistant"&&this.config.supportsThinking&&!r){let l=u.some(g=>g.type==="tool_use"),p=u.some(g=>g.type==="thinking"||g.type==="redacted_thinking");l&&!p&&u.unshift({type:"thinking",thinking:"...",signature:""})}let d=u.length===0||(a==="assistant"||a==="user")&&u.every(l=>{let p=l;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:d?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(e){let n=i((o,r)=>{let s=new Set;if(!o||typeof o.content=="string"||!Array.isArray(o.content))return s;for(let a of o.content){let u=a;r==="tool_use"&&u.type==="tool_use"&&u.id&&s.add(u.id),r==="tool_result"&&u.type==="tool_result"&&u.tool_use_id&&s.add(u.tool_use_id)}return s},"collectIds");return e.map((o,r)=>{if(typeof o.content=="string"||!Array.isArray(o.content))return o;let s=o.content;if(o.role==="assistant"){let a=n(e[r+1],"tool_result");s=s.filter(u=>{let c=u;return c.type!=="tool_use"||!!c.id&&a.has(c.id)})}else if(o.role==="user"){let a=n(e[r-1],"tool_use");s=s.filter(u=>{let c=u;return c.type!=="tool_result"||!!c.tool_use_id&&a.has(c.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import cr from"openai";var lr="KodaX";function fr(t){return t==="native-budget"||t==="native-effort"||t==="native-toggle"||t==="none"}i(fr,"isOpenAIReasoningAttempt");function dr(t){return t.userAgentMode==="sdk"?void 0:{"User-Agent":lr}}i(dr,"getOpenAICompatDefaultHeaders");function pr(t){if(t.effort!=="none"){if(t.effort&&t.effort!=="auto")return t.effort;if(!(t.effort==="auto"&&t.effortSource==="explicit"))return At(re(t.effort))}}i(pr,"selectOpenAIReasoningEffort");function $n(t){if(!t)return;let e=typeof t.prompt_tokens=="number"?t.prompt_tokens:0,n=typeof t.completion_tokens=="number"?t.completion_tokens:0,o=typeof t.total_tokens=="number"?t.total_tokens:e+n;if([e,n,o].some(s=>!Number.isFinite(s)||s<0)||o<e||o<n)return;let r=typeof t.prompt_tokens_details?.cached_tokens=="number"&&t.prompt_tokens_details.cached_tokens>=0?t.prompt_tokens_details.cached_tokens:typeof t.prompt_cache_hit_tokens=="number"&&t.prompt_cache_hit_tokens>=0?t.prompt_cache_hit_tokens:void 0;return{inputTokens:e,outputTokens:n,totalTokens:o,...r!==void 0?{cachedReadTokens:r}:{}}}i($n,"normalizeOpenAIUsage");function gr(t){return t?t.type==="function"&&"function"in t:!1}i(gr,"isOpenAIFunctionToolCall");function mr(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object")return"";let n=Reflect.get(e,"text");if(typeof n=="string")return n;if(n&&typeof n=="object"){let o=Reflect.get(n,"value");return typeof o=="string"?o:""}return""}).filter(Boolean).join(""):""}i(mr,"extractOpenAIMessageText");function hr(t){if(!t||typeof t!="object")return"";let e=Reflect.get(t,"reasoning_content");return typeof e=="string"?e:Array.isArray(e)?e.map(n=>typeof n=="string"?n:n&&typeof n=="object"&&"text"in n&&typeof n.text=="string"?n.text:"").join(""):""}i(hr,"extractOpenAIMessageReasoning");function Je(t){let e=t.role;return typeof e=="string"?e:void 0}i(Je,"getWireRole");function yr(t){if(Je(t)!=="assistant")return;let e=t.tool_calls;if(Array.isArray(e))return e.flatMap(n=>{if(!n||typeof n!="object")return[];let o=n.id;return typeof o=="string"&&o.trim().length>0?[{id:o,value:n}]:[]})}i(yr,"getAssistantWireToolCalls");function vr(t){if(Je(t)!=="tool")return;let e=t.tool_call_id;return typeof e=="string"&&e.trim().length>0?e:void 0}i(vr,"getToolWireCallId");function kr(t,e){let n={...t};return e.length>0?(n.tool_calls=e.map(o=>o.value),n):(delete n.tool_calls,(n.content==null||n.content==="")&&(n.content="..."),n)}i(kr,"rewriteAssistantWireToolCalls");var K=class extends H{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(e){this._client=e}buildClient(){let e=dr(this.config);return new cr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...e?{defaultHeaders:e}:{}})}onStaleConnection(){this._client=void 0}async verifyCredential(e){let n=this.config.model,o=this.client,r=[{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:i(async s=>{await o.chat.completions.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return de({strategy:this.config.verifyStrategy??"models-list",runners:r,timeoutMs:e?.timeoutMs,signal:e?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(e){return e.map(n=>{if(typeof n.content=="string")return n;let o=Se(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(e,n){let o=[];e&&e.trim().length>0&&o.push(e);let r=[];for(let s of n){if(s.role!=="system"){r.push(s);continue}let a=typeof s.content=="string"?s.content:Array.isArray(s.content)?s.content.filter(u=>typeof u=="object"&&u!==null&&u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
10
- `):"";a.trim().length>0&&o.push(a)}return{system:o.join(`
11
-
12
- `),rest:r}}appendExtraBody(e,n){let o=typeof e.extra_body=="object"&&e.extra_body!==null?e.extra_body:{};e.extra_body={...o,...n}}resetReasoningCapabilityParams(e){delete e.reasoning_effort,delete e.thinking;let n=typeof e.extra_body=="object"&&e.extra_body!==null?{...e.extra_body}:void 0;if(n){if(delete n.enable_thinking,delete n.thinking_budget,delete n.thinking,Object.keys(n).length===0){delete e.extra_body;return}e.extra_body=n}}applyReasoningCapability(e,n,o){if(this.suppressReasoningEffort)return;let r=e,s=this.getEffectiveMaxOutputTokens(e.model),a=se(ie(this.config,re(o.effort),o.taskType),s),u=this.getReasoningProfile(e.model);if(u){this.applyReasoningProfile(r,u,o,e.model,a);return}switch(n){case"native-effort":{this.validateExplicitReasoningEffort(o,e.model);let c=pr(o);c&&(r.reasoning_effort=c);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0,thinking_budget:a}):this.name==="zhipu"&&(r.thinking={type:"enabled",budget_tokens:a});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0}):this.name==="zhipu"&&(r.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(e,n,o,r,s){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset;if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only"||u==="kimi-k2.7-code")){if(u==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(e,{enable_thinking:!1});return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(e,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-openai"||u==="zai-glm-5.2"){e.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(e.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){e.thinking={type:a.disabled?"disabled":"enabled"};return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(c=>c.value==="none")&&(e.reasoning_effort="none");return}a.effort&&(e.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){e.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);e.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(e.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(e,n,o,r){if(!e.supportsManualThinkingBudget&&e.effortStrategy!=="provider-budget")return;let s=n&&e.budgetByEffort?.[n]!==void 0?e.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(s,a):s}getFallbackTerms(e){switch(e){case"native-budget":return["thinking_budget","budget_tokens","thinking"];case"native-effort":return["reasoning_effort"];case"native-toggle":return["enable_thinking","thinking"];default:return[]}}async stream(e,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(e),{system:c,rest:d}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(d,l)],g=n.map(R=>({type:"function",function:{name:R.name,description:R.description,parameters:R.input_schema}})),y=s?.forcedToolName,T=!!y;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let f=new Map,x="",k="",v,h=!0,m=null,E=Date.now(),C=this.normalizeReasoning(r),S=le(C)?this.getReasoningCapability(l):"none",D=le(C)?this.getReasoningFallbackChain(S).filter(fr):["none"],z={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),stream:!0};y&&T&&(z.tool_choice={type:"function",function:{name:y}});let F,Z;for(let R of D){for(;!F;){let j={...z};h&&(j.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(j),this.applyReasoningCapability(j,R,C);try{F=await this.client.chat.completions.create(j,a?{signal:a}:{})}catch(b){if(Z=b,T&&this.shouldFallbackForForcedToolChoiceError(b)){T=!1,delete z.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(h&&this.shouldFallbackForSpecificReasoningError(b,"stream_options","include_usage")){h=!1;continue}if(!this.shouldFallbackForReasoningError(b,...this.getFallbackTerms(R)))throw b;break}}if(F)break}if(!F)throw Z??new M("All reasoning capability attempts failed without a captured error",this.name);let w=Date.now(),L=0,G=0,ne=3e4;for await(let R of F){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let j=Date.now(),b=j-w;b>ne&&(L++,G+=b,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(b/1e3)}s gap`,{stallCount:L,totalStallMs:G})),w=j,s?.onHeartbeat?.(),v=$n(R.usage)??v;let P=R.choices[0],A=P?.delta;if(P?.finish_reason&&(m=P.finish_reason,process.env.KODAX_DEBUG_STREAM)){let W=Date.now()-E;this.logStreamDiagnostic(`[Stream] finish_reason: ${m} after ${W}ms`)}A?.content&&(x+=A.content,s?.onTextDelta?.(A.content));let _=this.extractReasoningDelta(A);if(_&&(k+=_,s?.onThinkingDelta?.(_)),A?.tool_calls)for(let W of A.tool_calls){let oe=f.get(W.index)??{id:"",name:"",arguments:""};W.id&&(oe.id=W.id),W.function?.name&&(oe.name=W.function.name),W.function?.arguments&&(oe.arguments+=W.function.arguments,s?.onToolInputDelta?.(oe.name,W.function.arguments,oe.id?{toolId:oe.id}:void 0)),f.set(W.index,oe)}}if(!m){let R=Date.now()-E;if(a?.aborted){let b=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:R,reason:b,textContentLength:x.length,toolCallsCount:f.size}),new DOMException(b,"AbortError")}let j=new Error(`Stream incomplete: finish_reason not received. Duration: ${R}ms. This may indicate a network disconnection or API timeout.`);throw j.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:R,textContentLength:x.length,toolCallsCount:f.size}),j}let Ne=x?[{type:"text",text:x}]:[],Ee=[],xe=[];k&&(xe.push({type:"thinking",thinking:k}),s?.onThinkingEnd?.(k));for(let[,R]of f)R.id&&R.name&&Ee.push({type:"tool_use",id:R.id,name:R.name,input:fe(R.arguments)});return{textBlocks:Ne,toolBlocks:Ee,thinkingBlocks:xe,usage:v,stopReason:m??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(e,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(e),{system:c,rest:d}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(d,l)],g=n.map(w=>({type:"function",function:{name:w.name,description:w.description,parameters:w.input_schema}})),y=s?.forcedToolName,T=!!y,f=this.normalizeReasoning(r),x=le(f)?this.getReasoningCapability(l):"none",k=le(f)?this.getReasoningFallbackChain(x).filter(w=>w==="native-budget"||w==="native-effort"||w==="native-toggle"||w==="none"):["none"],v={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l)};y&&T&&(v.tool_choice={type:"function",function:{name:y}});let h,m;for(let w of k){for(;!h;){let L={...v};this.resetReasoningCapabilityParams(L),this.applyReasoningCapability(L,w,f);try{h=await this.client.chat.completions.create(L,a?{signal:a}:{})}catch(G){if(m=G,T&&this.shouldFallbackForForcedToolChoiceError(G)){T=!1,delete v.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(G,...this.getFallbackTerms(w)))throw G;break}}if(h)break}if(!h)throw m??new M("All reasoning capability attempts failed without a captured error",this.name);let E=h.choices[0],C=E?.message,S=mr(C?.content),D=hr(C),z=(C?.tool_calls??[]).filter(gr).map(w=>({type:"tool_use",id:w.id,name:w.function.name,input:fe(w.function.arguments)}));S&&s?.onTextDelta?.(S);let F=S?[{type:"text",text:S}]:[],Z=[];return D&&(Z.push({type:"thinking",thinking:D}),s?.onThinkingDelta?.(D),s?.onThinkingEnd?.(D)),{textBlocks:F,toolBlocks:z,thinkingBlocks:Z,usage:$n(h.usage),stopReason:E?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(e){let n=e?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(e,n){let o=e.filter(l=>l.type==="text").map(l=>l.text).join(`
13
- `),r=e.filter(l=>l.type==="tool_use").map(l=>({id:l.id,type:"function",function:{name:l.name,arguments:JSON.stringify(l.input??{})}})),s=e.filter(l=>l.type==="thinking"||l.type==="redacted_thinking").map(l=>l.type==="thinking"?l.thinking:"").filter(Boolean).join(`
14
-
15
- `),a=e.some(l=>l.type==="thinking"||l.type==="redacted_thinking"),u=e.some(l=>l.type==="text");if(!o&&r.length===0&&!a&&!u)return[];let c;o?c=o:r.length>0?c=null:c="...";let d={role:"assistant",content:c};return r.length>0&&(d.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(d.reasoning_content=s||""),[d]}async serializeUserMessage(e){let n=[],o=e.filter(a=>a.type==="text").map(a=>a.text).join(`
16
- `),r=e.filter(a=>a.type==="image");for(let a of e)if(a.type==="tool_result"){let u;typeof a.content=="string"?u=a.content:u=a.content.map(c=>c.type==="text"?c.text:`[Image at ${c.path}${c.mediaType?` (${c.mediaType})`:""}] (provider does not support image content in tool_result; if the image was previously visible to you in the conversation, refer to it directly via native vision)`).join(`
17
- `),n.push({role:"tool",tool_call_id:a.tool_use_id,content:u})}if(r.length===0)return o&&n.push({role:"user",content:o}),n;let s=[];o&&s.push({type:"text",text:o});for(let a of r)s.push({type:"image_url",image_url:{url:await Dn(a.path,a.mediaType)}});return n.push({role:"user",content:s}),n}serializeSystemMessage(e){if(typeof e=="string")return[{role:"system",content:e}];let n=e.filter(o=>o.type==="text").map(o=>o.text).join(`
18
- `);return n?[{role:"system",content:n}]:[]}async convertMessages(e,n){let o=[];for(let r of e){if(r.role==="system"){o.push(...this.serializeSystemMessage(r.content));continue}if(typeof r.content=="string"){o.push({role:r.role,content:r.content});continue}if(r.role==="assistant"){o.push(...this.serializeAssistantMessage(r.content,n));continue}o.push(...await this.serializeUserMessage(r.content))}return this.repairToolCallHistory(o)}repairToolCallHistory(e){let n=[],o=0;for(;o<e.length;){let r=e[o],s=yr(r);if(s===void 0){Je(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(g=>g.id)),u=new Set,c=[],d=o+1;for(;d<e.length&&Je(e[d])==="tool";){let g=e[d],y=vr(g);y!==void 0&&a.has(y)&&!u.has(y)&&(u.add(y),c.push(g)),d+=1}let l=s.filter(g=>u.has(g.id)),p=l.length===s.length&&s.length>0?r:kr(r,l);n.push(p),l.length>0&&n.push(...c),o=d}return n}};import{spawn as Tr}from"node:child_process";import{Readable as Cr,Writable as Pr}from"node:stream";import Ye from"node:process";import{ClientSideConnection as wr,PROTOCOL_VERSION as Rr,ndJsonStream as Sr}from"@agentclientprotocol/sdk";import{spawn as br,spawnSync as Kn}from"node:child_process";var Kt=2e3,V=2e3;function jt(t){return t.exitCode!==null||t.signalCode!==null}i(jt,"isExited");function Me(t,e){return jt(t)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=i(u=>{o||(o=!0,clearTimeout(a),t.off("exit",s),t.off("error",s),n(u))},"finish"),s=i(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),e);a.unref?.(),t.once("exit",s),t.once("error",s)})}i(Me,"waitForExit");function Bn(t){return new Promise(e=>{let n=br("taskkill",["/pid",String(t),"/t","/f"],{stdio:"ignore",windowsHide:!0}),o=!1,r=i(()=>{o||(o=!0,clearTimeout(s),e())},"finish"),s=setTimeout(()=>{try{n.kill()}catch{}r()},Kt);s.unref?.(),n.once("exit",r),n.once("error",r)})}i(Bn,"runTaskkill");function Ln(t,e){let n=!1;try{process.kill(-t,e),n=!0}catch{}try{process.kill(t,e),n=!0}catch{}return n}i(Ln,"signalPosixPidTree");function J(t){try{return process.kill(t,0),!0}catch(e){return e.code!=="ESRCH"}}i(J,"signalTargetExists");function Nn(t){return J(-t)||J(t)}i(Nn,"isPosixPidTreeAlive");async function Fn(t,e){let n=Date.now()+e;for(;Date.now()<n;){if(!Nn(t))return!0;await new Promise(o=>setTimeout(o,50))}return!Nn(t)}i(Fn,"waitForPosixPidTreeExit");async function Er(t,e){let n=Date.now()+e;for(;Date.now()<n;){if(!J(t))return!0;await new Promise(o=>setTimeout(o,50))}return!J(t)}i(Er,"waitForWindowsPidExit");async function Ft(t,e){let n=[...new Set(t.filter(r=>Number.isFinite(r)&&r>0))];if(n.length===0)return!0;let o=Date.now()+e;for(;Date.now()<o;){if(n.every(r=>!J(r)))return!0;await new Promise(r=>setTimeout(r,50))}return n.every(r=>!J(r))}i(Ft,"waitForWindowsPidsExit");function jn(t){let e=t.trim();if(!e)return[];try{let n=JSON.parse(e);return(Array.isArray(n)?n:[n]).map(r=>Number(r)).filter(r=>Number.isFinite(r)&&r>0)}catch{return[]}}i(jn,"readWindowsPidListJson");function xr(t){let e=Kn("wmic",["process","where",`ParentProcessId=${t}`,"get","ProcessId","/format:list"],{encoding:"utf8",timeout:Kt,windowsHide:!0});if(e.error||e.status!==0)return[];let n=[],o=/ProcessId=(\d+)/g,r;for(;(r=o.exec(e.stdout))!==null;){let s=Number(r[1]);Number.isFinite(s)&&s>0&&s!==t&&n.push(s)}return n}i(xr,"getWindowsChildPidsViaWmic");function _r(t){let e=[`$children = Get-CimInstance Win32_Process -Filter "ParentProcessId = ${t}"`,"if ($null -eq $children) { exit 0 }","$children | Select-Object -ExpandProperty ProcessId | ConvertTo-Json -Compress"].join("; "),n=Kn("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:Kt,windowsHide:!0});if(!n.error&&n.status===0){let r=jn(n.stdout);if(r.length>0)return r}let o=jn(n.stdout);return o.length>0?o:xr(t)}i(_r,"getWindowsChildPids");function Un(t,e=new Set){let n=[];for(let o of _r(t))e.has(o)||(e.add(o),n.push(o),n.push(...Un(o,e)));return n}i(Un,"collectWindowsDescendantPids");async function qe(t,e){try{process.kill(t,e)}catch{return!J(t)}return Er(t,V)}i(qe,"killWindowsPid");async function Ae(t){if(process.platform==="win32"&&t.pid!==void 0){let e=Un(t.pid),n=[...e].reverse(),o=[t.pid,...e];jt(t)||await Bn(t.pid);for(let r of n)J(r)&&await Bn(r);if(await Ft(o,V)){await Me(t,V);return}for(let r of n)J(r)&&await qe(r,"SIGTERM");if(await qe(t.pid,"SIGTERM"),await Ft(o,V)){await Me(t,V);return}for(let r of n)J(r)&&await qe(r,"SIGKILL");await qe(t.pid,"SIGKILL"),await Ft(o,V),await Me(t,V);return}if(t.pid!==void 0&&process.platform!=="win32"){if(!Ln(t.pid,"SIGTERM")||await Fn(t.pid,V))return;Ln(t.pid,"SIGKILL"),await Fn(t.pid,V);return}if(!jt(t)){try{t.kill("SIGTERM")}catch{return}if(!await Me(t,V)){try{t.kill("SIGKILL")}catch{}await Me(t,V)}}}i(Ae,"killChildProcessTree");var Qe=class{static{i(this,"AcpClient")}client=null;agentProcess=null;options;constructor(e){this.options=e}async connect(){let e,n;if(this.options.inputStream&&this.options.outputStream)e=this.options.inputStream,n=this.options.outputStream;else if(this.options.command){let s=Ye.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Tr(s,this.options.args??[],{cwd:this.options.cwd??Ye.cwd(),stdio:["pipe","pipe","inherit"],detached:Ye.platform!=="win32"}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=Pr.toWeb(this.agentProcess.stdin),e=Cr.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=Sr(n,e);this.client=new wr(()=>({sessionUpdate:i(async r=>{this.options.onSessionUpdate?.(r)},"sessionUpdate"),requestPermission:i(async r=>{let s=r.options??[],a=s.find(u=>u.kind==="allow_once"||u.kind==="allow_always")??s[0];return a?{outcome:{outcome:"selected",optionId:a.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),o),await this.client.initialize({protocolVersion:Rr,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}})}async createNewSession(){if(!this.client)throw new Error("Client not connected");return(await this.client.newSession({cwd:this.options.cwd??Ye.cwd(),mcpServers:[]})).sessionId}async prompt(e,n,o,r){if(!this.client)throw new Error("Client not connected");let s={sessionId:n,prompt:[{type:"text",text:e}]};r?.model&&(s.model=r.model),r?.reasoningEffort&&(s.effort=r.reasoningEffort);let a=this.client.prompt(s);if(o){let u=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{})},"onAbort");o.addEventListener("abort",u),a=a.finally(()=>{o.removeEventListener("abort",u)})}return await a}disconnect(){this.agentProcess&&Ae(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}};function Mr(t){if(!t||typeof t!="object")return;let e=t,n=typeof e.inputTokens=="number"?e.inputTokens:0,o=typeof e.outputTokens=="number"?e.outputTokens:0,r=typeof e.totalTokens=="number"?e.totalTokens:n+o;if(![n,o,r].some(s=>!Number.isFinite(s)||s<0)&&!(r<n||r<o))return{inputTokens:n,outputTokens:o,totalTokens:r,cachedReadTokens:typeof e.cachedReadTokens=="number"?e.cachedReadTokens:void 0,cachedWriteTokens:typeof e.cachedWriteTokens=="number"?e.cachedWriteTokens:void 0,thoughtTokens:typeof e.thoughtTokens=="number"?e.thoughtTokens:void 0}}i(Mr,"normalizeAcpUsage");function Ar(t){if(t.effort==="none")return"none";if(!(!t.enabled||t.effort==="auto"))return t.effort}i(Ar,"selectAcpReasoningEffort");var ge=class extends H{static{i(this,"KodaXAcpProvider")}_client=null;_sessionMap=new Map;_activeStreams=new Map;isConfigured(){return!0}async verifyCredential(){return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`CLI-bridge provider "${this.name}" manages credentials in its CLI binary's token store; not verifiable from the KodaX SDK`}}getCapabilityProfile(){return X(Re)}serializeImageBlockToPromptToken(e){return null}stripCacheBoundariesFromMessages(e){return e.map(n=>{if(typeof n.content=="string")return n;let o=Se(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(e,n,o,r,s,a){let u=this.normalizeReasoning(r),c=Ar(u);if(e=this.stripCacheBoundariesFromMessages(e),this.acpClientOptions.executor&&typeof this.acpClientOptions.executor.isInstalled=="function"&&!await this.acpClientOptions.executor.isInstalled())throw new Error(`${this.name} requires a local CLI environment, but the CLI was not found or is not configured correctly.`);let d=[],l=[],p=e[e.length-1],g="";if(p&&typeof p.content=="string")g=p.content;else if(p&&Array.isArray(p.content)){let v=[];for(let h of p.content)if(h.type==="text")v.push(h.text);else if(h.type==="image"){let m=this.serializeImageBlockToPromptToken(h);m&&v.push(m)}g=v.join(`
19
- `)}let y={...this.acpClientOptions,onSessionUpdate:i(v=>{let h=v.update,m=v.sessionId;if(!("sessionUpdate"in h))return;let E=m?this._activeStreams.get(m):void 0;if(E)switch(h.sessionUpdate){case"agent_message_chunk":if(h.content?.type==="text"){let C=h.content.text;E.output.text+=C,E.streamOptions?.onTextDelta?.(C)}break;case"tool_call":{let C="{}",S=h.arguments??h.parameters;S&&(C=typeof S=="string"?S:JSON.stringify(S)),E.streamOptions?.onToolInputDelta?.(h.title,C);let D=`
20
- > [Tool Use] ${h.title}: ${C}
21
- `;E.output.text+=D,E.streamOptions?.onTextDelta?.(D);break}case"tool_call_update":if(h.status){let C=`> [Tool Result] ${h.status}
22
-
23
- `;E.output.text+=C,E.streamOptions?.onTextDelta?.(C)}break}},"onSessionUpdate")},T=s?.sessionId??"default";this._client||(this._client=new Qe(y),await this._client.connect());let f=this._sessionMap.get(T);f||(f=await this._client.createNewSession(),this._sessionMap.set(T,f));let x={text:""};this._activeStreams.set(f,{streamOptions:s,output:x});let k;try{k=await this._client.prompt(g,f,a,{model:s?.modelOverride,reasoningEffort:c})}catch(v){if(!(v instanceof Error&&v.name==="AbortError"))throw v}finally{this._activeStreams.delete(f)}return x.text&&d.push({type:"text",text:x.text}),{textBlocks:d,toolBlocks:l,thinkingBlocks:[],usage:Mr(k?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as Dr}from"node:child_process";import Ze from"node:process";var me=class{static{i(this,"CLIExecutor")}config;_installedCache=null;constructor(e){this.config=e}async isInstalled(){return this._installedCache!==null?this._installedCache:(this._installedCache=await this.checkInstalled(),this._installedCache)}async*execute(e){let n=this.buildArgs(e),o={...Ze.env,...this.config.env},s=Ze.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=Dr(s,n,{cwd:this.config.cwd??Ze.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:Ze.platform!=="win32"}),u="";a.stderr?.on("data",l=>{u+=l.toString()});let c=!1,d=i(()=>{c||Ae(a)},"abortHandler");e.signal?.addEventListener("abort",d),a.on("exit",()=>{c=!0});try{yield*this.parseOutputStream(a.stdout,e.signal),u.trim()&&console.error(`[CLIExecutor] stderr: ${u.trim()}`)}finally{e.signal?.removeEventListener("abort",d),c||await Ae(a)}}async*parseOutputStream(e,n){let o="";for await(let r of e){if(n?.aborted)break;o+=r.toString();let s=o.split(`
24
- `);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let u=this.parseLine(a.trim());u&&(yield u)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as Or}from"node:child_process";import Ir from"node:process";async function et(t){try{let e=Ir.platform==="win32",n=Or(e?`${t}.cmd`:t,["--version"]);return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}i(et,"checkCliCommandInstalled");var tt=class extends me{static{i(this,"GeminiCLIExecutor")}model;constructor(e){super({command:"gemini",baseArgs:["--output-format","stream-json","--approval-mode","yolo"],timeout:3e5,...e}),this.model=e?.model??"gemini-2.5-pro"}async checkInstalled(){return et("gemini")}buildArgs(e){let n=["-m",e.model??this.model];return e.sessionId?(n.push("-r",e.sessionId),n.push(e.prompt)):n.push("-p",e.prompt),[...n,...this.config.baseArgs]}parseLine(e){if(!e.startsWith("{"))return null;try{let n=JSON.parse(e);return this.convertEvent(n)}catch{return null}}convertEvent(e){let n=e.timestamp?Date.parse(e.timestamp):Date.now();switch(e.type){case"init":return{type:"session_start",timestamp:n,sessionId:e.session_id??"",model:e.model??this.model,raw:e};case"message":return{type:"message",timestamp:n,role:e.role,content:e.content??"",delta:e.delta,raw:e};case"tool_use":return{type:"tool_use",timestamp:n,toolId:e.tool_id??"",toolName:e.tool_name??"",parameters:e.parameters??{},raw:e};case"tool_result":return{type:"tool_result",timestamp:n,toolId:e.tool_id??"",status:e.status==="success"?"success":"error",output:e.output??"",raw:e};case"error":return{type:"error",timestamp:n,errorType:"error",message:e.message??"Unknown error",raw:e};case"result":return{type:"complete",timestamp:n,status:e.status==="success"?"success":"failed",usage:e.stats?{inputTokens:e.stats.input_tokens??0,outputTokens:e.stats.output_tokens??0,totalTokens:e.stats.total_tokens??0}:void 0,raw:e};default:return null}}};import{TransformStream as zn}from"node:stream/web";import{randomUUID as Ut}from"node:crypto";function nt(t){let e=new zn,n=new zn,o=e.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,u="",c=Ut(),d=new AbortController,l=new Map;(async()=>{try{for(;;){let{done:f,value:x}=await o.read();if(f)break;u+=s.decode(x,{stream:!0});let k=u.split(`
25
- `);u=k.pop()??"";for(let v of k)if(v.trim())try{let h=JSON.parse(v);g(h).catch(m=>{console.error("[PseudoAcpServer] Failed to handle request:",m)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",v)}}}catch(f){console.error("[PseudoAcpServer] Stream read error:",f)}})();let p=i(async f=>{let x=JSON.stringify(f)+`
26
- `;await r.write(a.encode(x))},"sendMsg");async function g(f){if(f.method==="initialize")await p({jsonrpc:"2.0",id:f.id,result:{protocolVersion:f.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(f.method==="session/new"||f.method==="sessions/new")c=f.params?.sessionId??Ut(),await p({jsonrpc:"2.0",id:f.id,result:{sessionId:c}});else if(f.method==="session/prompt"||f.method==="chat/prompt"){let x=new AbortController,k=f.params.sessionId;l.set(k,x);let v=i(()=>x.abort(),"onGlobalAbort");d.signal.addEventListener("abort",v);let m=await y(k,f.params.prompt,typeof f.params.model=="string"?f.params.model:void 0,typeof f.params.effort=="string"?f.params.effort:void 0,x.signal).finally(()=>{l.delete(k),d.signal.removeEventListener("abort",v)});await p({jsonrpc:"2.0",id:f.id,result:m.usage?{stopReason:m.stopReason,usage:m.usage}:{stopReason:m.stopReason}})}else if(f.method==="session/cancel"||f.method==="chat/cancel"){let x=l.get(f.params.sessionId);x&&x.abort(),f.id!==void 0&&await p({jsonrpc:"2.0",id:f.id,result:{}})}else f.id!==void 0&&await p({jsonrpc:"2.0",id:f.id,result:{}})}i(g,"handleRequest");let y=i(async(f,x,k,v,h)=>{let m=x.find(E=>E.type==="text")?.text??"";try{let E=t.execute({prompt:m,model:k,reasoningEffort:v,sessionId:f==="default"?void 0:f,signal:h});for await(let C of E){let S=T(C);if(S&&await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:f,update:S}}),C.type==="complete")return{stopReason:h.aborted?"cancelled":"end_turn",usage:C.usage}}return{stopReason:h.aborted?"cancelled":"end_turn"}}catch(E){return h.aborted||E instanceof Error&&E.name==="AbortError"?{stopReason:"cancelled"}:(console.error("[PseudoAcpServer] Error executing prompt:",E),await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:f,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
27
- [Fatal Error: ${E}]
28
- `}}}}),{stopReason:"end_turn"})}},"executePrompt"),T=i(f=>{switch(f.type){case"message":if(f.role==="assistant"&&f.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:f.toolName,arguments:f.parameters,status:"running",toolCallId:f.toolId||Ut()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:f.toolId,status:f.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
29
- [Error: ${f.message}]
30
- `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:e.writable,abort:i(()=>{d.abort(),e.readable.cancel().catch(()=>{}),n.writable.abort().catch(()=>{})},"abort"),executor:t}}i(nt,"createPseudoAcpServer");import Wn from"node:fs";import Xn from"node:os";import Vn from"node:path";var $r="gpt-5.4",Br="auto-gemini-3",Lr=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Nr=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Gn(t){let e=new Set,n=[];for(let o of t){let r=o.trim();if(!r)continue;let s=r.toLowerCase();e.has(s)||(e.add(s),n.push(r))}return n}i(Gn,"dedupePreserveOrder");function Fr(){let t=Vn.join(Xn.homedir(),".codex","config.toml");try{return Wn.readFileSync(t,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(Fr,"readCodexConfiguredModel");function jr(){let t=Vn.join(Xn.homedir(),".gemini","settings.json");try{let e=JSON.parse(Wn.readFileSync(t,"utf8")),n=typeof e.model=="string"?e.model.trim():"";return n||(typeof e.general?.model=="string"?e.general.model.trim():"")||null}catch{return null}}i(jr,"readGeminiConfiguredModel");function he(){return Fr()||$r}i(he,"getCodexCliDefaultModel");function ye(){return jr()||Br}i(ye,"getGeminiCliDefaultModel");function De(){return Gn([he(),...Lr])}i(De,"getCodexCliKnownModels");function Oe(){return Gn([ye(),...Nr])}i(Oe,"getGeminiCliKnownModels");var zt=ye(),Kr=Oe(),Ur={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},ot=class extends ge{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:zt,models:Kr.filter(e=>e!==zt).map(e=>({id:e,displayName:e})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let e=new tt({model:zt});this.acpClientOptions=nt(e)}getCapabilityProfile(){return X(Ur)}serializeImageBlockToPromptToken(e){return/\s/.test(e.path)?(console.warn(`[gemini-cli] Image path contains whitespace and cannot be safely passed via @<path> syntax \u2014 dropping image block. Path: ${JSON.stringify(e.path)}`),null):`@${e.path}`}};function zr(t){return!t||t==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(t)}`]}i(zr,"buildReasoningEffortArgs");var rt=class extends me{static{i(this,"CodexCLIExecutor")}model;constructor(e){super({command:"codex",baseArgs:["exec","--json","--full-auto"],timeout:3e5,...e}),this.model=e?.model??"gpt-5.4"}async checkInstalled(){return et("codex")}buildArgs(e){this.model=e.model??this.model;let n=e.model?["-m",e.model]:[],o=zr(e.reasoningEffort);return e.sessionId?["exec","resume",e.sessionId,...n,...o,e.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,e.prompt]}parseLine(e){if(!e.startsWith("{"))return null;try{let n=JSON.parse(e);return this.convertEvent(n)}catch{return null}}convertEvent(e){let n=Date.now();switch(e.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:e.thread_id??"",model:this.model,raw:e};case"item.completed":return e.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:e.item.text??"",raw:e}:e.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:e.item.id,toolName:"Bash",parameters:{command:e.item.command},raw:e}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:e.usage?{inputTokens:e.usage.input_tokens,outputTokens:e.usage.output_tokens,totalTokens:e.usage.input_tokens+e.usage.output_tokens}:void 0,raw:e};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:e.type,message:e.message??"Unknown error",raw:e};default:return null}}};var Wt=he(),Wr=De(),it=class extends ge{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:Wt,models:Wr.filter(e=>e!==Wt).map(e=>({id:e,displayName:e})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let e=new rt({model:Wt});this.acpClientOptions=nt(e)}};import{existsSync as ei,readFileSync as ti}from"node:fs";import ve from"node:path";import{fileURLToPath as ni}from"node:url";var Hn=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Jn=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","provider-budget","provider-toggle","prompt-only","none"],qn=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Yn=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Qn=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Zn=["count-tokens","models-list","minimal-message","unsupported"];function Q(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}i(Q,"isPlainObject");function ue(t,e){if(typeof t!="string"||t.length===0)throw new Error(`provider-capabilities.json: ${e} must be a non-empty string`);return t}i(ue,"requireString");function Ie(t,e){if(t!==void 0)return ue(t,e)}i(Ie,"optionalString");function ee(t,e){if(t!==void 0){if(typeof t!="number"||!Number.isFinite(t)||t<0)throw new Error(`provider-capabilities.json: ${e} must be a non-negative finite number`);return t}}i(ee,"optionalNumber");function O(t,e){if(t!==void 0){if(typeof t!="boolean")throw new Error(`provider-capabilities.json: ${e} must be a boolean`);return t}}i(O,"optionalBoolean");function eo(t,e){if(t!==void 0){if(!Array.isArray(t))throw new Error(`provider-capabilities.json: ${e} must be an array`);return t.map((n,o)=>ue(n,`${e}[${o}]`))}}i(eo,"optionalStringArray");function Xr(t,e){if(t===void 0)return;if(!Q(t))throw new Error(`provider-capabilities.json: ${e} must be an object`);let n={};for(let[o,r]of Object.entries(t))n[o]=ue(r,`${e}.${o}`);return n}i(Xr,"optionalStringMap");function Vr(t,e){if(t!==void 0){if(typeof t!="string"||!Yn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${Yn.join(", ")}, got ${JSON.stringify(t)}`);return t}}i(Vr,"optionalReasoningPreset");function Xt(t,e){if(typeof t!="string"||!Hn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${Hn.join(", ")}, got ${JSON.stringify(t)}`);return t}i(Xt,"requireReasoningCapability");function Gr(t,e){if(typeof t!="string"||!Jn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${Jn.join(", ")}, got ${JSON.stringify(t)}`);return t}i(Gr,"requireEffortStrategy");function Hr(t,e){if(t!==void 0){if(typeof t!="string"||!qn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${qn.join(", ")}, got ${JSON.stringify(t)}`);return t}}i(Hr,"optionalThinkingStrategy");function to(t,e){if(t===void 0)return;if(!Q(t))throw new Error(`provider-capabilities.json: ${e} must be an object`);let n=Gr(t.effortStrategy,`${e}.effortStrategy`),o=Vr(t.reasoningPreset,`${e}.reasoningPreset`),r=Hr(t.thinkingStrategy,`${e}.thinkingStrategy`),s=Ie(t.defaultEffort,`${e}.defaultEffort`),a=Xr(t.effortAliases,`${e}.effortAliases`),u=eo(t.disabledEfforts,`${e}.disabledEfforts`),c=eo(t.localRejectEfforts,`${e}.localRejectEfforts`),d=O(t.allowCustomEffort,`${e}.allowCustomEffort`),l=O(t.supportsReasoningEffort,`${e}.supportsReasoningEffort`),p=O(t.supportsReasoningSummary,`${e}.supportsReasoningSummary`),g=O(t.supportsEncryptedReasoningReplay,`${e}.supportsEncryptedReasoningReplay`),y=O(t.supportsAdaptiveThinking,`${e}.supportsAdaptiveThinking`),T=O(t.supportsManualThinkingBudget,`${e}.supportsManualThinkingBudget`),f=O(t.supportsDisabledThinking,`${e}.supportsDisabledThinking`),x=O(t.requiresEffortBetaHeader,`${e}.requiresEffortBetaHeader`),k={effortStrategy:n};if(o!==void 0&&(k.reasoningPreset=o),r!==void 0&&(k.thinkingStrategy=r),s!==void 0&&(k.defaultEffort=s),a!==void 0&&(k.effortAliases=a),u!==void 0&&(k.disabledEfforts=u),c!==void 0&&(k.localRejectEfforts=c),t.supportedEfforts!==void 0){if(!Array.isArray(t.supportedEfforts))throw new Error(`provider-capabilities.json: ${e}.supportedEfforts must be an array`);k.supportedEfforts=t.supportedEfforts.map((v,h)=>{if(!Q(v))throw new Error(`provider-capabilities.json: ${e}.supportedEfforts[${h}] must be an object`);return{value:ue(v.value,`${e}.supportedEfforts[${h}].value`),...Ie(v.description,`${e}.supportedEfforts[${h}].description`)!==void 0?{description:Ie(v.description,`${e}.supportedEfforts[${h}].description`)}:{},...O(v.isDefault,`${e}.supportedEfforts[${h}].isDefault`)!==void 0?{isDefault:O(v.isDefault,`${e}.supportedEfforts[${h}].isDefault`)}:{},...O(v.isUserVisible,`${e}.supportedEfforts[${h}].isUserVisible`)!==void 0?{isUserVisible:O(v.isUserVisible,`${e}.supportedEfforts[${h}].isUserVisible`)}:{}}})}if(t.budgetByEffort!==void 0){if(!Q(t.budgetByEffort))throw new Error(`provider-capabilities.json: ${e}.budgetByEffort must be an object`);let v={};for(let[h,m]of Object.entries(t.budgetByEffort))v[h]=ee(m,`${e}.budgetByEffort.${h}`)??0;k.budgetByEffort=v}return d!==void 0&&(k.allowCustomEffort=d),l!==void 0&&(k.supportsReasoningEffort=l),p!==void 0&&(k.supportsReasoningSummary=p),g!==void 0&&(k.supportsEncryptedReasoningReplay=g),y!==void 0&&(k.supportsAdaptiveThinking=y),T!==void 0&&(k.supportsManualThinkingBudget=T),f!==void 0&&(k.supportsDisabledThinking=f),x!==void 0&&(k.requiresEffortBetaHeader=x),k}i(to,"validateReasoningProfile");function no(t,e){let n=t.reasoningProfile,o=t.reasoningCapabilityV2;if(n!==void 0&&o!==void 0)throw new Error(`provider-capabilities.json: ${e} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?to(n,`${e}.reasoningProfile`):to(o,`${e}.reasoningCapabilityV2`)}i(no,"validateReasoningProfileField");function Jr(t,e){if(typeof t!="string"||!Qn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${Qn.join(", ")}, got ${JSON.stringify(t)}`);return t}i(Jr,"requireProfileName");function qr(t,e){if(typeof t!="string"||!Zn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${Zn.join(", ")}, got ${JSON.stringify(t)}`);return t}i(qr,"requireVerifyStrategy");function Yr(t,e){if(!Q(t))throw new Error(`provider-capabilities.json: ${e} must be an object`);let n=ue(t.id,`${e}.id`),o=Ie(t.displayName,`${e}.displayName`),r=ee(t.contextWindow,`${e}.contextWindow`),s=ee(t.maxOutputTokens,`${e}.maxOutputTokens`),a=ee(t.thinkingBudgetCap,`${e}.thinkingBudgetCap`),u=O(t.replayReasoningContent,`${e}.replayReasoningContent`),c=O(t.strictThinkingSignature,`${e}.strictThinkingSignature`),d=ee(t.streamMaxDurationMs,`${e}.streamMaxDurationMs`),l=t.reasoningCapability===void 0?void 0:Xt(t.reasoningCapability,`${e}.reasoningCapability`),p=no(t,e),g={id:n};return o!==void 0&&(g.displayName=o),r!==void 0&&(g.contextWindow=r),s!==void 0&&(g.maxOutputTokens=s),a!==void 0&&(g.thinkingBudgetCap=a),l!==void 0&&(g.reasoningCapability=l),p!==void 0&&(g.reasoningProfile=p),u!==void 0&&(g.replayReasoningContent=u),c!==void 0&&(g.strictThinkingSignature=c),d!==void 0&&(g.streamMaxDurationMs=d),g}i(Yr,"validateModelDescriptor");function Qr(t,e){if(t===void 0)return;if(!Q(t))throw new Error(`provider-capabilities.json: ${e} must be an object`);let n={};for(let[o,r]of Object.entries(t))n[o]=Xt(r,`${e}.${o}`);return n}i(Qr,"validateModelReasoningCapabilities");function Zr(t,e){if(!Q(t))throw new Error(`provider-capabilities.json: providers.${e} must be an object`);let n=O(t.cliBridge,`providers.${e}.cliBridge`),o=ue(t.apiKeyEnv,`providers.${e}.apiKeyEnv`),r=Xt(t.reasoningCapability,`providers.${e}.reasoningCapability`),s=no(t,`providers.${e}`),a=Jr(t.capabilityProfile,`providers.${e}.capabilityProfile`),u=qr(t.verifyStrategy,`providers.${e}.verifyStrategy`);if(n&&u!=="unsupported")throw new Error(`provider-capabilities.json: providers.${e} is a cliBridge entry but verifyStrategy="${u}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=ee(t.contextWindow,`providers.${e}.contextWindow`),d=ee(t.maxOutputTokens,`providers.${e}.maxOutputTokens`),l=ee(t.thinkingBudgetCap,`providers.${e}.thinkingBudgetCap`),p=O(t.supportsThinking,`providers.${e}.supportsThinking`),g=Qr(t.modelReasoningCapabilities,`providers.${e}.modelReasoningCapabilities`),y=Ie(t.model,`providers.${e}.model`);if(n&&(y!==void 0||t.models!==void 0))throw new Error(`provider-capabilities.json: providers.${e} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&y===void 0)throw new Error(`provider-capabilities.json: providers.${e}.model is required (only cliBridge entries may omit)`);let T;if(t.models!==void 0){if(!Array.isArray(t.models))throw new Error(`provider-capabilities.json: providers.${e}.models must be an array`);T=t.models.map((x,k)=>Yr(x,`providers.${e}.models[${k}]`))}let f={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(f.reasoningProfile=s),y!==void 0&&(f.model=y),T!==void 0&&(f.models=T),c!==void 0&&(f.contextWindow=c),d!==void 0&&(f.maxOutputTokens=d),l!==void 0&&(f.thinkingBudgetCap=l),p!==void 0&&(f.supportsThinking=p),g!==void 0&&(f.modelReasoningCapabilities=g),n&&(f.cliBridge=!0),f}i(Zr,"validateProviderEntry");function oo(t){if(!Q(t))throw new Error("provider-capabilities.json: root must be an object");if(t.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(t.version)}`);let e=ue(t.updatedAt,"updatedAt");if(!Q(t.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,r]of Object.entries(t.providers))n[o]=Zr(r,o);return{version:1,updatedAt:e,providers:n}}i(oo,"validateProviderCapabilitiesJson");var oi=Object.freeze({native:ae,"image-input-native":Rn,"cli-bridge":Re,"image-input-cli-bridge":Sn}),st=null;function ri(){if(process.env.KODAX_BUNDLED==="true")return ve.join(ve.dirname(process.execPath),"provider-capabilities.json");let t=ve.dirname(ni(import.meta.url)),e=[ve.join(t,"provider-capabilities.json"),ve.join(ve.dirname(t),"provider-capabilities.json")];for(let n of e)if(ei(n))return n;return e[0]}i(ri,"resolveJsonPath");function ii(t){if(t.models){for(let e of t.models)e.reasoningProfile&&ro(e.reasoningProfile);for(let e of t.models)Object.freeze(e);Object.freeze(t.models)}return t.reasoningProfile&&ro(t.reasoningProfile),t.modelReasoningCapabilities&&Object.freeze(t.modelReasoningCapabilities),Object.freeze(t)}i(ii,"deepFreezeSnapshot");function ro(t){if(t.supportedEfforts){for(let e of t.supportedEfforts)Object.freeze(e);Object.freeze(t.supportedEfforts)}t.budgetByEffort&&Object.freeze(t.budgetByEffort),t.effortAliases&&Object.freeze(t.effortAliases),t.disabledEfforts&&Object.freeze(t.disabledEfforts),t.localRejectEfforts&&Object.freeze(t.localRejectEfforts),Object.freeze(t)}i(ro,"freezeReasoningProfile");function si(t){if(t==="gemini-cli"){let e=ye();return{model:e,models:Oe().filter(n=>n!==e).map(n=>({id:n}))}}if(t==="codex-cli"){let e=he();return{model:e,models:De().filter(n=>n!==e).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${t}'`)}i(si,"resolveCliBridgeModels");function ai(t,e){let n=oi[e.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${e.capabilityProfile}' for provider '${t}'`);if(e.cliBridge){let r=si(t),s={model:r.model,models:r.models,apiKeyEnv:e.apiKeyEnv,reasoningCapability:e.reasoningCapability,capabilityProfile:n,verifyStrategy:e.verifyStrategy};return e.reasoningProfile!==void 0&&(s.reasoningProfile=e.reasoningProfile),e.supportsThinking!==void 0&&(s.supportsThinking=e.supportsThinking),s}let o={model:e.model,apiKeyEnv:e.apiKeyEnv,reasoningCapability:e.reasoningCapability,capabilityProfile:n,verifyStrategy:e.verifyStrategy};return e.reasoningProfile!==void 0&&(o.reasoningProfile=e.reasoningProfile),e.models!==void 0&&(o.models=e.models),e.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=e.modelReasoningCapabilities),e.contextWindow!==void 0&&(o.contextWindow=e.contextWindow),e.maxOutputTokens!==void 0&&(o.maxOutputTokens=e.maxOutputTokens),e.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=e.thinkingBudgetCap),e.supportsThinking!==void 0&&(o.supportsThinking=e.supportsThinking),o}i(ai,"buildSnapshot");function io(){if(st)return st;let t=ri(),e;try{let r=ti(t,"utf8");e=JSON.parse(r)}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${t}: ${s}`)}let n=oo(e),o={};for(let[r,s]of Object.entries(n.providers))o[r]=ii(ai(r,s));return st=Object.freeze(o),st}i(io,"getProviderSnapshots");import ui from"@anthropic-ai/sdk";var $=io();function N(t,e={}){let n=$[t];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...e}}i(N,"buildProviderConfig");var Vt=class extends I{static{i(this,"AnthropicProvider")}name="anthropic";config=N("anthropic",{strictThinkingSignature:!0});buildClient(){return new ui({apiKey:this.getApiKey()})}},Gt=class extends I{static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=N("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},Ht=class extends I{static{i(this,"ZaiCodingProvider")}name="zai-coding";config=N("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},Jt=class extends I{static{i(this,"KimiCodeProvider")}name="kimi-code";config=N("kimi-code",{baseUrl:"https://api.kimi.com/coding/"})},qt=class extends I{static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=N("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},Yt=class extends I{static{i(this,"MimoCodingProvider")}name="mimo-coding";config=N("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},Qt=class extends I{static{i(this,"MimoProvider")}name="mimo";config=N("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},Zt=class extends I{static{i(this,"ArkCodingProvider")}name="ark-coding";config=N("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},en=class extends K{static{i(this,"OpenAIProvider")}name="openai";config=N("openai")},tn=class extends K{static{i(this,"DeepSeekProvider")}name="deepseek";config=N("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},nn=class extends K{static{i(this,"KimiProvider")}name="kimi";config=N("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0})},on=class extends K{static{i(this,"QwenProvider")}name="qwen";config=N("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},rn=class extends K{static{i(this,"ZhipuProvider")}name="zhipu";config=N("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},U={anthropic:i(()=>new Vt,"anthropic"),openai:i(()=>new en,"openai"),deepseek:i(()=>new tn,"deepseek"),kimi:i(()=>new nn,"kimi"),"kimi-code":i(()=>new Jt,"kimi-code"),qwen:i(()=>new on,"qwen"),zhipu:i(()=>new rn,"zhipu"),"zhipu-coding":i(()=>new Gt,"zhipu-coding"),"zai-coding":i(()=>new Ht,"zai-coding"),"minimax-coding":i(()=>new qt,"minimax-coding"),"mimo-coding":i(()=>new Yt,"mimo-coding"),mimo:i(()=>new Qt,"mimo"),"ark-coding":i(()=>new Zt,"ark-coding"),"gemini-cli":i(()=>new ot,"gemini-cli"),"codex-cli":i(()=>new it,"codex-cli")},sn=process.env.KODAX_PROVIDER??"zhipu-coding",so=new Map;function ci(t){if(B(t))return $[t].apiKeyEnv}i(ci,"resolveApiKeyEnvForProvider");function ao(t){let e=t??sn,n=U[e];if(!n)throw new M(`Unknown provider: ${e}. Available: ${Object.keys(U).join(", ")}`,e);let o=ci(e),r=o?process.env[o]:void 0,s=so.get(e);if(s&&s.apiKey===r)return s.instance;let a=n();return so.set(e,{apiKey:r,instance:a}),a}i(ao,"getProvider");function uo(t){return B(t)?!!process.env[$[t].apiKeyEnv]:!1}i(uo,"isProviderConfigured");function co(t){return B(t)?$[t].model:null}i(co,"getProviderModel");function lo(t,e){if(!B(t))return"unknown";let n=$[t],o=e??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(lo,"getProviderConfiguredReasoningCapability");function fo(t){return B(t)?X($[t].capabilityProfile):null}i(fo,"getProviderConfiguredCapabilityProfile");function po(){let t=[];for(let e of Object.keys(U)){let n=$[e];t.push({name:e,model:n.model,models:n.models?[n.model,...n.models.map(o=>o.id)]:[n.model],configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:X(n.capabilityProfile)})}return t}i(po,"getProviderList");function go(t){let e=$[t];return e?e.models?[e.model,...e.models.map(n=>n.id)]:[e.model]:[]}i(go,"getProviderModels");function B(t){return t in U}i(B,"isProviderName");function an(t){return{id:t.model}}i(an,"makeDefaultDescriptor");function $e(t,e,n){let o=n.id===e.model;return{provider:t,model:n.id,displayName:n.displayName??n.id,supportsThinking:e.supportsThinking??!1,reasoningCapability:n.reasoningCapability??e.reasoningCapability,reasoningProfile:n.reasoningProfile??e.reasoningProfile,contextWindow:n.contextWindow??e.contextWindow,maxOutputTokens:n.maxOutputTokens??e.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap??e.thinkingBudgetCap,isDefault:o}}i($e,"effectiveCapabilities");function at(t){let e=$[t];return e?[an(e),...e.models??[]]:[]}i(at,"getProviderModelDescriptors");function ut(t,e){let n=$[t];if(!n)return;if(e===n.model)return $e(t,n,an(n));let o=n.models?.find(r=>r.id===e);return o?$e(t,n,o):$e(t,n,{id:e})}i(ut,"getModelCapabilities");function ct(){let t=[];for(let e of Object.keys(U)){let n=$[e];t.push($e(e,n,an(n)));for(let o of n.models??[])t.push($e(e,n,o))}return t}i(ct,"listBuiltinModelCapabilities");var li=new Set(["compat","sdk"]),fi=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function ho(t){return t.reasoningProfile??t.reasoningCapabilityV2}i(ho,"getConfiguredReasoningProfile");function di(t){return t==="anthropic"?"count-tokens":"models-list"}i(di,"defaultVerifyStrategyForProtocol");function lt(t){if(t)return t.effortStrategy==="none"?"none":t.effortStrategy==="prompt-only"?"prompt-only":t.thinkingStrategy==="anthropic-adaptive"?"native-adaptive":t.effortStrategy==="provider-budget"?"native-budget":t.effortStrategy==="provider-toggle"?"native-toggle":"native-effort"}i(lt,"legacyCapabilityFromReasoningProfile");function pi(t,e,n){if(n===!1)return"none";switch(e){case"none":case"prompt-only":return"none";case"native-toggle":return"generic-thinking-toggle";case"native-budget":return t==="anthropic"?"anthropic-budget":"qwen-hybrid-thinking";case"native-effort":return t==="anthropic"?"claude-adaptive-max":"openai-chat-reasoning";case"native-adaptive":return t==="anthropic"?"claude-adaptive-max":"generic-thinking-toggle";default:return n===!0?"generic-thinking-toggle":void 0}}i(pi,"legacyReasoningPresetForProtocol");function mo(t){return t==="none"||typeof t=="object"&&t!==null&&Array.isArray(t.efforts)}i(mo,"isSimpleReasoning");function gi(t,e){if(t==="none")return Rt("none");let n=i(u=>u==="off"?"none":u,"toWire"),o=t.efforts.map(n),r=t.default?n(t.default):void 0,s=o.includes("none"),a=o.map(u=>u===r?{value:u,isDefault:!0}:{value:u});return{effortStrategy:e==="anthropic"?"anthropic-output-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...s?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{},supportsReasoningEffort:!0}}i(gi,"buildReasoningProfileFromSimple");function yo(t,e,n,o){let r=mo(n)?n:void 0,s=n!==void 0&&!mo(n)?n:void 0;if(t)return{...t,...s??{}};if(r!==void 0)return gi(r,o?.protocol??"openai");let a=e??(o?pi(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?Rt(a,s):void 0}i(yo,"resolveCustomReasoningProfile");function ft(t){return yo(ho(t),t.reasoningPreset,t.reasoning,{protocol:t.protocol,reasoningCapability:t.reasoningCapability,supportsThinking:t.supportsThinking})}i(ft,"resolveCustomProviderReasoningProfile");function ln(t,e){return yo(ho(t),t.reasoningPreset,t.reasoning,{protocol:e,reasoningCapability:t.reasoningCapability})}i(ln,"resolveCustomModelReasoningProfile");function mi(t,e){if(typeof t=="string")return{id:t};let n=ln(t,e);return n?{...t,reasoningProfile:n}:t}i(mi,"customModelDescriptorToFull");function Be(t){if(!t.name||!t.baseUrl||!t.apiKeyEnv||!t.model)throw new Error(`Custom provider requires name, baseUrl, apiKeyEnv, and model. Got: ${JSON.stringify({name:t.name,baseUrl:t.baseUrl,apiKeyEnv:t.apiKeyEnv,model:t.model})}`);if(t.protocol!=="anthropic"&&t.protocol!=="openai")throw new Error(`Unknown protocol "${t.protocol}" for custom provider "${t.name}". Must be "anthropic" or "openai".`);if(t.userAgentMode!==void 0&&!li.has(t.userAgentMode))throw new Error(`Unknown userAgentMode "${t.userAgentMode}" for custom provider "${t.name}". Must be "compat" or "sdk".`);if(t.verifyStrategy!==void 0){if(!fi.has(t.verifyStrategy))throw new Error(`Unknown verifyStrategy "${t.verifyStrategy}" for custom provider "${t.name}". Must be one of "count-tokens" | "models-list" | "minimal-message" | "unsupported".`);if(t.protocol==="openai"&&t.verifyStrategy==="count-tokens")throw new Error(`Custom provider "${t.name}": verifyStrategy="count-tokens" requires Anthropic protocol; got protocol="openai". Use "models-list" or "minimal-message" for OpenAI-compat.`)}}i(Be,"validateCustomProviderConfig");function hi(t){let e=t.models?.length?t.models.map(s=>mi(s,t.protocol)):void 0,n=ft(t),o=t.reasoningCapability??lt(n)??(t.supportsThinking?"native-toggle":"none"),r=t.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:t.apiKeyEnv,model:t.model,baseUrl:t.baseUrl,models:e,userAgentMode:t.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:t.capabilityProfile,contextWindow:t.contextWindow,maxOutputTokens:t.maxOutputTokens,thinkingBudgetCap:t.thinkingBudgetCap,replayReasoningContent:t.replayReasoningContent??!1,strictThinkingSignature:t.strictThinkingSignature??!1,streamMaxDurationMs:t.streamMaxDurationMs,verifyStrategy:t.verifyStrategy??di(t.protocol)}}i(hi,"buildProviderConfig");function dt(t){Be(t);let e=hi(t);return t.protocol==="anthropic"?new un(t.name,e):new cn(t.name,e)}i(dt,"createCustomProvider");var un=class extends I{static{i(this,"DynamicAnthropicProvider")}name;config;constructor(e,n){super(),this.name=e,this.config=n}},cn=class extends K{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(e,n){super(),this.name=e,this.config=n}};var q=new Map,fn=new Map;function vo(t){let e=new Set,n=new Map,o=new Map;for(let r of t){if(Be(r),e.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in U&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),e.add(r.name),n.set(r.name,r),o.set(r.name,()=>dt(r))}q.clear(),fn.clear();for(let[r,s]of n)q.set(r,s);for(let[r,s]of o)fn.set(r,s)}i(vo,"registerCustomProviders");function pt(t){let e=fn.get(t);return e?e():void 0}i(pt,"getCustomProvider");function be(t){return q.has(t)}i(be,"isCustomProviderName");function gt(){return[...q.keys()]}i(gt,"getCustomProviderNames");function ko(){let t=[];for(let[e,n]of q){let o=!!process.env[n.apiKeyEnv],r=ft(n),s=(n.models??[]).map(u=>typeof u=="string"?u:u.id),a=n.model&&s.length?[...new Set([n.model,...s])]:[n.model];t.push({name:e,model:n.model,models:a,configured:o,reasoningCapability:n.reasoningCapability??lt(r)??"none",capabilityProfile:X(n.capabilityProfile??ae),custom:!0})}return t}i(ko,"getCustomProviderList");function bo(t){let e=q.get(t);if(!e)return;let n=(e.models??[]).map(o=>typeof o=="string"?o:o.id);return e.model&&n.length?[...new Set([e.model,...n])]:[e.model]}i(bo,"getCustomProviderModels");function Eo(t,e){if(typeof t=="string")return{id:t};let n=ln(t,e);return n?{...t,reasoningProfile:n}:t}i(Eo,"customDescriptorToFull");function mt(t){let e=q.get(t);if(!e)return;let n={id:e.model},o=(e.models??[]).map(r=>Eo(r,e.protocol)).filter(r=>r.id!==e.model);return[n,...o]}i(mt,"getCustomProviderModelDescriptors");function ke(t,e){let n=q.get(t);if(!n)return;let o=e===n.model,r=ft(n),s=o?{id:n.model}:(n.models??[]).map(c=>Eo(c,n.protocol)).find(c=>c.id===e);if(!s)return;let a=s.reasoningProfile??r,u=s.reasoningCapability??lt(a)??n.reasoningCapability??"none";return{provider:t,model:s.id,displayName:s.displayName??s.id,supportsThinking:n.supportsThinking??(u!=="none"&&u!=="prompt-only"),reasoningCapability:u,reasoningProfile:a,contextWindow:s.contextWindow??n.contextWindow,maxOutputTokens:s.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:s.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(ke,"getCustomModelCapabilities");function xo(t){let e=q.get(t);if(!e)return;let n=e.verifyStrategy??(e.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:e.apiKeyEnv,verifyStrategy:n}}i(xo,"getCustomProviderVerifyMetadata");function ht(){let t=[];for(let[e,n]of q){let o=ke(e,n.model);o&&t.push(o);for(let r of n.models??[]){let s=typeof r=="string"?r:r.id;if(s===n.model)continue;let a=ke(e,s);a&&t.push(a)}}return t}i(ht,"listCustomProviderModelCapabilities");var te=new Map,yi=0;function dn(t){let e=te.get(t);if(!(!e||e.length===0))return e[e.length-1]}i(dn,"getActiveRuntimeProviderRegistration");function vi(t){for(let[e,n]of te){let o=n.filter(r=>r.id!==t);if(o.length!==n.length){o.length===0?te.delete(e):te.set(e,o);return}}}i(vi,"removeRuntimeProviderRegistration");function _o(t,e){let n=t.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(B(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(be(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++yi}`,name:n,factory:e},r=te.get(n)??[];return te.set(n,[...r,o]),()=>{vi(o.id)}}i(_o,"registerModelProvider");function yt(t){let e=dn(t);return e?e.factory():void 0}i(yt,"getRuntimeModelProvider");function Le(t){return dn(t)!==void 0}i(Le,"isRuntimeModelProviderName");function vt(){return Array.from(te.keys()).filter(t=>dn(t)!==void 0)}i(vt,"getRuntimeModelProviderNames");function To(){te.clear()}i(To,"clearRuntimeModelProviders");function pn(t){if(B(t))return U[t]();let e=yt(t);if(e)return e;let n=pt(t);if(n)return n;let o=bt();throw new Error(`Unknown provider: ${t}. Available: ${o.join(", ")}`)}i(pn,"resolveProvider");function kt(t){return B(t)||Le(t)||be(t)}i(kt,"isKnownProvider");function bt(){let t=Object.keys(U),e=vt(),n=gt();return[...new Set([...t,...e,...n])]}i(bt,"getAvailableProviderNames");function gn(t){return B(t)?at(t):mt(t)??[]}i(gn,"resolveProviderModelDescriptors");function Co(t,e){return B(t)?ut(t,e):ke(t,e)}i(Co,"resolveModelCapabilities");function Po(){return[...ct(),...ht()]}i(Po,"listAllModelCapabilities");function ki(t){if(B(t)){let e=$[t];return{apiKeyEnv:e.apiKeyEnv,verifyStrategy:e.verifyStrategy}}if(!Le(t))return xo(t)}i(ki,"getProviderVerifyMetadata");async function wo(t,e){let n=ki(t);if(!n&&!kt(t))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${t}". Available: ${bt().join(", ")}`};if(n?.verifyStrategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider "${t}" does not support credential verification (cli-bridge or strategy marked unsupported)`};if(n&&!process.env[n.apiKeyEnv])return{ok:!1,error:"unconfigured",strategy:n.verifyStrategy,durationMs:0,approxTokensSpent:0,message:`Environment variable "${n.apiKeyEnv}" is not set for provider "${t}"`};let o;try{o=pn(t)}catch(r){return{ok:!1,error:"unconfigured",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(r?.message??r).slice(0,240)}}try{return await o.verifyCredential(e)}catch(r){return{ok:!1,error:"unknown",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(r?.message??r).slice(0,240)}}}i(wo,"verifyProviderCredential");async function Ro(t,e){if(!kt(t))return{ok:!1,source:"failed",error:`Unknown provider: "${t}"`,durationMs:0};let n=gn(t);return n.length===0?{ok:!1,source:"failed",error:`Provider "${t}" has no static model list`,durationMs:0}:{ok:!0,source:"static",models:n.map(r=>r.id),durationMs:0}}i(Ro,"listProviderModels");var bi={max_tokens:"truncated",length:"truncated",model_context_window_exceeded:"truncated",end_turn:"end",stop:"end",stop_sequence:"end",tool_use:"tool",tool_calls:"tool",function_call:"tool",pause_turn:"paused",refusal:"refused",content_filter:"refused"};function Ei(t){return t==null?"unknown":bi[t.trim().toLowerCase()]??"unknown"}i(Ei,"classifyStopReason");var So={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-v4-flash":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.028},"deepseek-v4-pro":{inputPer1M:1.68,outputPer1M:3.36,cachePer1M:.14}},kimi:{"k2.5":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},zhipu:{"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.1":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"glm-4.7":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v3.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function mn(t,e,n){let o=n?.[t]?.[e];return o||So[t]?.[e]}i(mn,"getCostRate");function hn(t,e,n,o=0){let r=e/1e6*t.inputPer1M,s=n/1e6*t.outputPer1M,a=t.cachePer1M?o/1e6*t.cachePer1M:0;return r+s+a}i(hn,"calculateCost");function xi(){return{records:[],retries:[]}}i(xi,"createCostTracker");function yn(t,e){let n={timestamp:Date.now(),provider:e.provider,waitMs:e.waitMs,reason:e.reason,source:e.source};return{records:t.records,retries:[...t.retries,n]}}i(yn,"recordRetry");function vn(t,e,n){let o=mn(e.provider,e.model,n),r=(e.cacheReadTokens??0)+(e.cacheWriteTokens??0),s=o?hn(o,e.inputTokens,e.outputTokens,r):0,a={timestamp:Date.now(),provider:e.provider,model:e.model,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens??0,cacheWriteTokens:e.cacheWriteTokens??0,cost:s,role:e.role};return{records:[...t.records,a],retries:t.retries}}i(vn,"recordUsage");function _i(t){let e=0,n=0,o=0,r=0,s=0,a=0,u={},c={};for(let p of t.records){e+=p.cost,n+=p.inputTokens,o+=p.outputTokens,r+=p.cacheReadTokens+p.cacheWriteTokens,s+=p.cacheReadTokens,a+=p.cacheWriteTokens;let g=u[p.provider];u[p.provider]={cost:(g?.cost??0)+p.cost,calls:(g?.calls??0)+1,inputTokens:(g?.inputTokens??0)+p.inputTokens,outputTokens:(g?.outputTokens??0)+p.outputTokens};let y=p.role??"default",T=c[y];c[y]={cost:(T?.cost??0)+p.cost,calls:(T?.calls??0)+1,inputTokens:(T?.inputTokens??0)+p.inputTokens,outputTokens:(T?.outputTokens??0)+p.outputTokens}}let d=0;for(let p of t.retries)d+=p.waitMs;let l=r>0?s/r:0;return{totalCost:e,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:l,callCount:t.records.length,retryCount:t.retries.length,retryWaitMs:d,byProvider:u,byRole:c}}i(_i,"getSummary");function Et(t){return t<.01?`$${t.toFixed(4)}`:t<1?`$${t.toFixed(3)}`:`$${t.toFixed(2)}`}i(Et,"formatCost");function Ti(t){let e=[];if(e.push(`Session Cost: ${Et(t.totalCost)} (${t.callCount} calls)`),e.push(`Tokens: ${t.totalInputTokens.toLocaleString()} in / ${t.totalOutputTokens.toLocaleString()} out`),t.totalCacheTokens>0){let r=(t.cacheHitRate*100).toFixed(0);e.push(`Cache: ${t.totalCacheTokens.toLocaleString()} tokens (${t.totalCacheReadTokens.toLocaleString()} read / ${t.totalCacheWriteTokens.toLocaleString()} write, ${r}% hit rate)`)}if(t.retryCount>0){let r=(t.retryWaitMs/1e3).toFixed(1);e.push(`Retries: ${t.retryCount} (${r}s total wait)`)}e.push("");let n=Object.entries(t.byProvider).sort((r,s)=>s[1].cost-r[1].cost);if(n.length>0){e.push("By Provider:");for(let[r,s]of n)e.push(` ${r}: ${Et(s.cost)} (${s.calls} calls, ${s.inputTokens.toLocaleString()} in / ${s.outputTokens.toLocaleString()} out)`);e.push("")}let o=Object.entries(t.byRole).sort((r,s)=>s[1].cost-r[1].cost);if(o.length>1){e.push("By Role:");for(let[r,s]of o)e.push(` ${r}: ${Et(s.cost)} (${s.calls} calls)`)}return e.join(`
31
- `)}i(Ti,"formatCostReport");var Mo={inputTokens:0,outputTokens:0,totalTokens:0},Ci=3e4;async function Pi(t){let e=new AbortController,n=t.timeoutMs??Ci,o=t.costTracker,r,s=i(c=>{r||(r=c),e.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),n),u=i(()=>s("parent"),"onParentAbort");t.abortSignal&&(t.abortSignal.aborted?s("parent"):t.abortSignal.addEventListener("abort",u,{once:!0}));try{let c=await t.provider.stream([...t.messages],[],t.system,t.reasoning??{effort:"none"},{modelOverride:t.model,onRetryAfter:i(y=>{o&&(o=yn(o,{provider:y.provider,waitMs:y.waitMs,reason:y.reason,source:y.source}))},"onRetryAfter")},e.signal),d=c.usage??Mo,l=c.textBlocks??[],p=c.toolBlocks??[],g=l.map(y=>y.text).join("");return p.length>0?{text:g,usage:d,costTracker:o,stopReason:"error",error:new Error(`sideQuery: provider returned ${p.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=vn(o,{provider:t.provider.name,model:t.model,inputTokens:d.inputTokens,outputTokens:d.outputTokens,cacheReadTokens:d.cachedReadTokens,cacheWriteTokens:d.cachedWriteTokens,role:t.querySource})),{text:g,usage:d,costTracker:o,stopReason:wi(c.stopReason)})}catch(c){let d=c instanceof Error?c:new Error(String(c)),l="error";return e.signal.aborted&&(l=r==="timeout"?"timeout":"aborted"),{text:"",usage:Mo,costTracker:o,stopReason:l,error:d}}finally{clearTimeout(a),t.abortSignal&&t.abortSignal.removeEventListener("abort",u)}}i(Pi,"sideQuery");function wi(t){return t==="max_tokens"?"max_tokens":"end_turn"}i(wi,"mapStopReason");export{Y as a,M as b,_e as c,xt as d,_t as e,Tt as f,Ao as g,Do as h,Oo as i,Io as j,ce as k,kn as l,bn as m,St as n,le as o,Ke as p,we as q,En as r,Lo as s,xn as t,Mt as u,No as v,Uo as w,ie as x,se as y,At as z,Ue as A,ze as B,We as C,H as D,fe as E,de as F,It as G,$t as H,pe as I,Bt as J,Se as K,I as L,K as M,he as N,ye as O,De as P,Oe as Q,$ as R,U as S,sn as T,ao as U,uo as V,co as W,lo as X,fo as Y,po as Z,go as _,B as $,at as aa,ut as ba,ct as ca,Be as da,dt as ea,vo as fa,pt as ga,be as ha,gt as ia,ko as ja,bo as ka,mt as la,ke as ma,ht as na,_o as oa,yt as pa,Le as qa,vt as ra,To as sa,pn as ta,kt as ua,bt as va,gn as wa,Co as xa,Po as ya,wo as za,Ro as Aa,Ei as Ba,So as Ca,mn as Da,hn as Ea,xi as Fa,yn as Ga,vn as Ha,_i as Ia,Et as Ja,Ti as Ka,Pi as La};