@kodax-ai/kodax 0.7.57 → 0.7.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2004 -1920
- package/README.md +31 -25
- package/README_CN.md +22 -15
- package/dist/chunks/agent-YJNC2755.js +2 -0
- package/dist/chunks/argument-completer-QGBNXTYJ.js +2 -0
- package/dist/chunks/chunk-526OILYL.js +2 -0
- package/dist/chunks/{chunk-LZKGOR2C.js → chunk-6AU6EPO6.js} +1 -1
- package/dist/chunks/chunk-73Z7BK5H.js +15 -0
- package/dist/chunks/chunk-7QB55SYG.js +326 -0
- package/dist/chunks/chunk-CQ6EQG7E.js +322 -0
- package/dist/chunks/{chunk-4SHP3M67.js → chunk-CV6JHPEO.js} +1 -1
- package/dist/chunks/chunk-D6QVXQNI.js +1 -0
- package/dist/chunks/chunk-HS2K74I4.js +31 -0
- package/dist/chunks/chunk-NKHXRN7G.js +403 -0
- package/dist/chunks/chunk-OBPB5BQ6.js +310 -0
- package/dist/chunks/chunk-P4VF3JEP.js +7 -0
- package/dist/chunks/chunk-PIQWODWN.js +18 -0
- package/dist/chunks/{chunk-YSVPF6SN.js → chunk-QHWXPJEG.js} +268 -264
- package/dist/chunks/chunk-XXEIFNBE.js +52 -0
- package/dist/chunks/chunk-ZZDC75H4.js +681 -0
- package/dist/chunks/compaction-config-OPMRZSAK.js +2 -0
- package/dist/chunks/{construction-bootstrap-55B7Q5RX.js → construction-bootstrap-CIXFH5SE.js} +1 -1
- package/dist/chunks/dist-JSE7NICF.js +2 -0
- package/dist/chunks/dist-SDNQOW52.js +2 -0
- package/dist/chunks/host-H7FQMMRC.js +2 -0
- package/dist/chunks/paste-Y4DVUWSM.js +2 -0
- package/dist/chunks/run-manager-4H5HWMVW.js +2 -0
- package/dist/chunks/utils-FLVVQHM7.js +2 -0
- package/dist/index.d.ts +14 -14
- package/dist/index.js +2 -2
- package/dist/kodax_cli.js +1206 -1036
- package/dist/sdk-agent.d.ts +153 -12
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +186 -186
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-llm.d.ts +66 -43
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +18 -2
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +20 -22
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-session.d.ts +7 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/types-chunks/{base.d-BnjQrSVf.d.ts → base.d-BA9Doaj_.d.ts} +3 -3
- package/dist/types-chunks/{bash-prefix-extractor.d-BgvMbfq6.d.ts → bash-prefix-extractor.d-D3cddmyV.d.ts} +490 -69
- package/dist/types-chunks/capability-learning.d-DRV80ISB.d.ts +29 -0
- package/dist/types-chunks/{cost-tracker.d-wRtyEW9d.d.ts → cost-tracker.d-CBLk1fiD.d.ts} +24 -2
- package/dist/types-chunks/{guardrail.d-C1DhxnvC.d.ts → guardrail.d-iK7FwMdW.d.ts} +4 -4
- package/dist/types-chunks/{process.d-BZncyzEj.d.ts → process.d-DHow2y2G.d.ts} +169 -14
- package/dist/types-chunks/{resolver.d-ZvKQgl0X.d.ts → resolver.d-DDOfVYDr.d.ts} +31 -2
- package/dist/types-chunks/{capsule.d-DwJp5r63.d.ts → run-manager.d-ByDcJc5g.d.ts} +113 -5
- package/dist/types-chunks/{sdk-session-DAScB0rW.d.ts → sdk-session-21Tt3N_x.d.ts} +72 -9
- package/dist/types-chunks/{storage.d-CPvn9qI0.d.ts → storage.d-BsZrBPYu.d.ts} +2 -2
- package/dist/types-chunks/{types.d-6VOXvF88.d.ts → types.d-Ci5YPFEh.d.ts} +39 -5
- package/dist/types-chunks/{guardrail.d-BP3yyr6u.d.ts → types.d-D4ZA8LJV.d.ts} +125 -3
- package/dist/types-chunks/{utils.d-CpgVIjYZ.d.ts → utils.d-BURxOxFd.d.ts} +83 -6
- package/package.json +2 -2
- package/dist/chunks/agent-EHWQZA4C.js +0 -2
- package/dist/chunks/argument-completer-AYDAYGKL.js +0 -2
- package/dist/chunks/chunk-3WWPJGPQ.js +0 -2
- package/dist/chunks/chunk-KN6IJMTB.js +0 -636
- package/dist/chunks/chunk-MJFPFRGK.js +0 -423
- package/dist/chunks/chunk-N2N2W3AQ.js +0 -584
- package/dist/chunks/chunk-PCPFLPS4.js +0 -5
- package/dist/chunks/chunk-TCLSPUTR.js +0 -31
- package/dist/chunks/chunk-VACH6QWN.js +0 -315
- package/dist/chunks/compaction-config-TLDMFMZO.js +0 -2
- package/dist/chunks/dist-IE4HVWP7.js +0 -2
- package/dist/chunks/dist-IKOK2MJQ.js +0 -2
- package/dist/chunks/paste-WTL2XN7P.js +0 -2
- package/dist/chunks/utils-EJ2VCRTC.js +0 -2
- package/dist/types-chunks/types.d-D8WcfrOD.d.ts +0 -143
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{b as i,j as c,k as d,o as l}from"./chunk-
|
|
2
|
+
import{b as i,j as c,k as d,o as l}from"./chunk-P4VF3JEP.js";import{a as t}from"./chunk-V4WSBIXB.js";var b="\x1B[?2004h",P="\x1B[?2004l",f=!1,a=!1;function T(){if(!a)try{process.stdout.write(b),a=!0}catch{}}t(T,"enableBracketedPasteMode");function g(){if(a)try{process.stdout.write(P)}catch{}finally{a=!1}}t(g,"disableBracketedPasteMode");function h(){return a}t(h,"isBracketedPasteModeEnabled");function _(){if(f)return;f=!0;let e=t(()=>g(),"handler");process.once("beforeExit",e),process.once("exit",e),process.once("SIGINT",()=>{e(),process.kill(process.pid,"SIGINT")}),process.once("SIGTERM",()=>{e(),process.kill(process.pid,"SIGTERM")}),process.once("uncaughtException",r=>{throw e(),r})}t(_,"installBracketedPasteShutdownGuard");import{readFile as R}from"node:fs/promises";var y=/\.(png|jpe?g|gif|webp|bmp)$/i;async function N(e){if(e.length===0)return process.platform==="darwin"?I():{kind:"text",text:""};let r=k(e);return r.length>0?G(r,e):{kind:"text",text:e}}t(N,"handleBracketedPaste");async function z(){return I()}t(z,"triggerExplicitClipboardImage");async function I(){let e;try{e=await d()}catch(r){return{kind:"error",message:`Failed to read clipboard image: ${m(r)}`}}return e?E(e):{kind:"noop"}}t(I,"readClipboardAsImagesOutcome");async function G(e,r){let o=[],s=[];for(let p of e){let u;try{u=await R(p)}catch(x){s.push(`Failed to read ${p}: ${m(x)}`);continue}let n=await E(u);n.kind==="images"?o.push(...n.blocks):n.kind==="error"&&s.push(n.message)}return o.length===0?s.length>0?{kind:"error",message:s.join("; ")}:{kind:"text",text:r}:{kind:"images",blocks:o}}t(G,"readImagePathsAsOutcome");async function E(e){try{let r=await c(e);return{kind:"images",blocks:[await l(r)]}}catch(r){return r instanceof i?{kind:"error",message:r.message}:{kind:"error",message:`Failed to process pasted image: ${m(r)}`}}}t(E,"decodeBufferToOutcome");function k(e){return e.split(/ (?=\/|[A-Za-z]:\\)/).filter(o=>y.test(o.trim()))}t(k,"extractImagePaths");function m(e){return e instanceof Error?e.message:String(e)}t(m,"describeError");export{T as a,g as b,h as c,_ as d,N as e,z as f,k as g};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{a as i}from"./chunk-V4WSBIXB.js";var Q=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},M=class extends Q{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Pe=class extends Q{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},St=class extends Q{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},We=class extends M{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},wt=class extends Q{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Mt=32768,Ko=32e3,Uo=64e3,Wo=.5;function Re(e,t,n={}){if(e===void 0)return;let o=n.allowZero===!0;if(!Number.isFinite(e)||(o?e<0:e<=0)){let r=o?"a non-negative finite number":"a positive finite number";throw new Error(`${t} must be ${r}`)}return e===0?0:Math.max(1,Math.floor(e*1e3))}i(Re,"timeoutSecToMs");function zo(e){if(e===void 0||e.trim().length===0)return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return Math.max(1,Math.floor(t*1e3))}i(zo,"parseTimeoutSecEnvMs");function Xo(e){if(!e)return;let t={requestTimeoutMs:Re(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Re(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Re(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Re(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Xo,"resolveLlmTimeoutConfig");function ze(e,t){return`${e}/${t??""}`}i(ze,"capabilityCacheKey");function Vo(e,t){if(t.length===0)return e;let n=new Set(t),o=e.defaultEffort!==void 0&&n.has(e.defaultEffort);return{...e,...o?{defaultEffort:void 0}:{},supportedEfforts:e.supportedEfforts?.filter(r=>!n.has(r.value)),localRejectEfforts:Array.from(new Set([...e.localRejectEfforts??[],...t]))}}i(Vo,"narrowReasoningProfile");function Go(e,t,n){return e[ze(t,n)]?.rejected??[]}i(Go,"getRejectedEfforts");function Ho(e,t,n,o,r,s){let a=ze(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:s}}}i(Ho,"addRejectedEffort");function Jo(e,t,n){if(!t)return{};let o={...e};return delete o[ze(t,n)],o}i(Jo,"removeCacheEntry");function qo(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:u}}return t}i(qo,"sanitizeCapabilityCache");var Yo=["off","auto","quick","balanced","deep"],le=["auto","none","low","medium","high"],Tn={low:6e3,medium:1e4,high:2e4},Cn=4096,At=[{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"}],Dt=[{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"}],Qo=[{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 Ve(e,t={}){return{...Zo(e),...t,reasoningPreset:e}}i(Ve,"createReasoningProfileFromPreset");function Zo(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Dt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Dt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-anthropic":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Dt,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:e,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",supportedEfforts:At,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:Qo,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:At,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:At,budgetByEffort:{low:6e3,medium:1e4,high:16e3,xhigh:24e3,max:32e3},disabledEfforts:["none","minimal"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"claude-adaptive-xhigh":return{reasoningPreset:e,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:e,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:e,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:e,effortStrategy:e==="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:e,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:e,effortStrategy:"none",thinkingStrategy:"none"}}}i(Zo,"createBaseReasoningProfileFromPreset");function It(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(It,"getReasoningCapability");function fe(e){return Ge(e).enabled}i(fe,"isReasoningEnabled");function Ge(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?Ae(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(Ge,"normalizeReasoningRequest");function Ae(e){let t=e.trim().toLowerCase();if(!t)throw new Error("Reasoning effort cannot be empty.");if(/\s/.test(t))throw new Error(`Reasoning effort cannot contain whitespace: "${e}".`);return t==="off"?"none":t}i(Ae,"normalizeReasoningEffortValue");function Pn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Pn,"mapLegacyReasoningModeToEffortIntent");function er(e){switch(e){case"none":return"off";case"auto":return"auto";case"low":return"quick";case"medium":return"balanced";case"high":return"deep";default:return}}i(er,"effortToLegacyReasoningMode");function Rn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=Ae(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(Rn,"parseReasoningEffortEnv");function $t(e){let t=Rn(e.envEffort),n=[];Se(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Se(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Pn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Se(n,e.modelDefaultEffort??e.capability?.defaultEffort??we(e.capability),"model-default",!1),Se(n,e.providerDefaultEffort,"provider-default",!1),Se(n,e.fallbackEffort??Me(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:nr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Sn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i($t,"resolveReasoningEffort");function tr(e){let t=e.currentEffort?Ae(e.currentEffort):void 0;if(t&&wn(t,e.capability))return{effectiveEffort:Xe(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??we(e.capability)??Ot(e.capability)??Me(e.capability),o=n&&Xe(n,e.capability);return t?{effectiveEffort:o,preserved:!1,diagnostic:o?`Effort ${t} is not supported by the selected model; using ${o}.`:`Effort ${t} is not supported by the selected model; clearing effort.`}:{effectiveEffort:o,preserved:!1}}i(tr,"resolveReasoningEffortForModelSwitch");function Se(e,t,n,o){if(t===void 0)return;let r=Ae(t);e.push({value:r,source:n,isExplicit:o})}i(Se,"pushEffortCandidate");function nr(e,t){let n=e.find(o=>o.value!=="auto");return n?Sn(n.value,t,n.isExplicit):we(t)??Me(t)}i(nr,"resolveAutoEffectiveEffort");function Sn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Ot(t)??Me(t)??e}if(e==="none")return e;if(wn(e,t))return Xe(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Ot(t)??Me(t)??e}i(Sn,"validateReasoningEffort");function Xe(e,t){return t?.effortAliases?.[e]??e}i(Xe,"applyEffortAlias");function wn(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=or(t);return n.length===0?le.includes(e):n.includes(e)||n.includes(Xe(e,t))}i(wn,"isSupportedReasoningEffort");function or(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(or,"getSupportedEffortValues");function we(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(we,"getDefaultPresetValue");function Ot(e){let t=e?.supportedEfforts?.filter(rr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Ot,"getMiddleVisiblePresetValue");function rr(e){return e.isUserVisible!==!1}i(rr,"isUserVisiblePreset");function Me(e){if(!e||e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return"none";if(!(e.effortStrategy==="anthropic-output-effort"&&e.thinkingStrategy==="anthropic-adaptive"))return"medium"}i(Me,"getFallbackEffortForCapability");function ir(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(ir,"getDefaultThinkingDepthForMode");function ie(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ie,"effortToThinkingDepth");function se(e,t,n="unknown"){if(t==="off")return 0;let o={...Tn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(se,"resolveThinkingBudget");function ae(e,t,n=Cn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(ae,"clampThinkingBudget");function Bt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(Bt,"mapDepthToOpenAIReasoningEffort");function Mn(e){if(!e||typeof e!="object")return;let t=e,n=t.status??t.statusCode??t.code;return typeof n=="number"&&Number.isInteger(n)?n:typeof n=="string"&&/^\d{3}$/.test(n)?Number(n):Mn(t.cause)}i(Mn,"getStatus");function sr(e){if(e instanceof Error)return e.message.toLowerCase();if(typeof e=="string")return e.toLowerCase();if(e&&typeof e=="object"){let t=e;return[t.message,t.error,t.detail,t.body].filter(o=>typeof o=="string").join(" ").toLowerCase()}return""}i(sr,"getMessage");var ar=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],ur=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],cr=["minimal","none","low","medium","high","xhigh","max"];function lr(e,t){for(let n of cr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(lr,"extractRejectedEffort");function Lt(e,t){let n=Mn(e);if(n!==400&&n!==422)return null;let o=sr(e);if(!o)return null;let r=ar.some(u=>o.includes(u)),s=ur.some(u=>o.includes(u));if(!r||!s)return null;let a=lr(o,t);return a?{rejectedEffort:a}:null}i(Lt,"classifyReasoningEffortRejection");function An(e,t){if(!e)return;if(typeof e.get=="function")return e.get(t)??void 0;let n=e,o=t.toLowerCase(),r=n[t]??n[o]??n[o.replace(/\b\w/g,s=>s.toUpperCase())];if(r!==void 0)return Array.isArray(r)?r[0]:r}i(An,"readHeader");function Dn(e){if(!e)return;let t=e.trim();if(t.length===0)return;let n=Number(t);if(!(!Number.isFinite(n)||n<=0))return n}i(Dn,"parsePositiveNumber");function fr(e,t){if(!e)return;let n=e.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let r=o-t;return r>0?r:void 0}i(fr,"parseHttpDate");function He(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=Dn(An(e,"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=An(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=Dn(u);if(g!==void 0){let T=g*1e3,d=Math.min(T,r);return{type:"header",waitMs:Math.round(d),source:"retry-after-seconds",cappedFromHeader:d!==T}}let y=fr(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,t.attempt)),f=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*f:0;return{type:"backoff",waitMs:Math.round(f+p),source:"exponential-backoff",attempt:t.attempt}}i(He,"parseRetryAfter");function Je(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(Je,"extractHeadersFromError");import{AsyncLocalStorage as dr}from"node:async_hooks";var On=new dr,In=8,$n=32;function pr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(pr,"parsePositiveInt");function gr(){let e=de()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:pr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??In;return Math.max(1,Math.min($n,t))}i(gr,"resolveWorkflowMaxConcurrency");function mr(e,t){return On.run(e,t)}i(mr,"runWithScopedConfig");function de(){return On.getStore()}i(de,"getRunScopedConfig");var ue={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Bn={...ue,multimodalSupport:"image-input"},De={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Ln={...De,multimodalSupport:"image-input"};function qe(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}i(qe,"normalizeCapabilityProfile");function V(e){return{...qe(e)}}i(V,"cloneCapabilityProfile");function hr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(hr,"parseEnvInt");function yr(e){switch(e.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(yr,"shouldLowerAutoReasoningEffort");function Qe(){return new DOMException("Request aborted","AbortError")}i(Qe,"abortError");function vr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(Qe()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(Qe())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(vr,"waitForRetryDelay");function Nt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Nt,"normalizeHttpStatus");function Nn(e){if(!e||typeof e!="object")return;let t=e;return Nt(t.status)??Nt(t.statusCode)??Nt(t.code)??Nn(t.cause)}i(Nn,"extractHttpStatus");function Fn(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:Fn(t.cause)}i(Fn,"extractErrorCode");function Ye(e){if(e instanceof Error)return e.message.toLowerCase();if(e&&typeof e=="object"){let t=e.message;if(typeof t=="string")return t.toLowerCase()}return String(e).toLowerCase()}i(Ye,"getErrorMessage");var H=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;suppressReasoningEffort=!1;setMaxOutputTokensOverride(t){this.maxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=de()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??hr(process.env.KODAX_MAX_OUTPUT_TOKENS);if(o!==void 0)return o;let r=this.getModelDescriptor(t)?.maxOutputTokens;return r!==void 0?r:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(t){let n=this.getModelDescriptor(t)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(t){let n=this.getModelDescriptor(t)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(t){let n=this.getModelDescriptor(t)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsNonStreamingFallback(){return!1}async complete(t,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(t){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(t=>t.id)])]:[this.config.model]}getModelDescriptor(t){let n=t??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 V(this.config.capabilityProfile??ue)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:It(this.config)}getReasoningCapability(t){return this.getConfiguredReasoningCapability(t)}getReasoningProfile(t){return this.getModelDescriptor(t)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).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(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).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(t){let n=Ye(t);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(t)}isServerError(t){let n=Nn(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Ye(t);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(t){switch(t){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(t){let n=this.getModelDescriptor(t)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let t=process.env[this.config.apiKeyEnv];if(!t)throw new Error(`${this.config.apiKeyEnv} not set`);return t}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...t){this.shouldLogStreamDiagnostics()&&console.error(...t)}normalizeReasoning(t){return Ge(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=le.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: ${le.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}`:"",f=a.length>0?a.join(", "):le.join(", ");throw new M(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${f}.`,this.name)}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.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(!t.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(yr(n)){let s=$t({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(t){if(!(t instanceof Error))return!1;let n=t.message.toLowerCase();return["rate","limit","\u901F\u7387","\u9891\u7387","1302","429","too many","overload","overwhelmed","503","529","busy"].some(o=>n.includes(o))}classifyRateLimitReason(t){let n=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.includes("overload")||n.includes("overwhelmed")||n.includes("503")||n.includes("529")||n.includes("busy")?"overloaded":"rate-limit"}extractRetryAfterMs(t){let n=Je(t);if(!n)return;let o=He(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=Ye(t),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(t){let n=Ye(t);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(t,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let f=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,f}catch(f){if(this.isContextOverflowError(f)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(f);if(l){this.maxOutputTokensOverride=l,r?.(c+1,o,0);continue}}if(this.isRateLimitError(f)){if(c===o-1)throw new Pe(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=Je(f)??{},p=He(l,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,y=this.classifyRateLimitReason(f);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 vr(g,n),n?.aborted))throw Qe();continue}if(a&&!u){let l=Lt(f,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=Lt(f,a.effort);if(l)throw this.suppressReasoningEffort=!1,new We(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(f instanceof Error){if((f.name==="AbortError"||f.name==="APIUserAbortError")&&n?.aborted)throw f.name==="AbortError"?f:new DOMException(f.message||"Request aborted","AbortError");let l=Fn(f);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new M(`${this.name} API error: ${f.message}`,this.name)}throw f}throw new Q("Unexpected end of withRateLimit")}};import Pr from"@anthropic-ai/sdk";import{parse as kr}from"partial-json";function pe(e){if(!e)return{value:{},salvaged:!1};try{let t=JSON.parse(e);return{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!1}}catch{}try{let t=kr(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}i(pe,"parseToolInputWithSalvageTracked");function br(e){return pe(e).value}i(br,"parseToolInputWithSalvage");var Er={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 jn(e){return e==null?"unknown":Er[e.trim().toLowerCase()]??"unknown"}i(jn,"classifyStopReason");function ge(e){let t=jn(e);return t==="end"||t==="tool"||t==="paused"}i(ge,"isCleanStop");async function me(e){if(e.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let t=e.runners.find(f=>f.strategy===e.strategy);if(!t)return{ok:!1,error:"unsupported",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${e.strategy}" is not implemented for this provider's base class`};if(e.signal?.aborted)return{ok:!1,error:"unknown",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=e.timeoutMs??8e3,r,s=i(f=>{r||(r=f),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(f){return Ft(f,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(me,"runVerifyCredential");function _r(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(_r,"redactKeyMaterial");function Ft(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=_r(String(n.message??e)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",u;return t.abortCause==="timeout"?u="timeout":t.abortCause==="parent"?u="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?u="unauthorized":o===429?u="rate_limited":o===400&&t.strategy==="count-tokens"&&t.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:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(Ft,"classifyVerifyError");function jt(e,t){let n=e[e.length-1];if(n&&he(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(jt,"insertCacheBoundary");function he(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}i(he,"isCacheBoundary");function Kt(e,t){let n=[];for(let o of e){if(he(o)){if(t==="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(Kt,"lowerCacheBoundaries");function Oe(e){return e.filter(t=>!he(t))}i(Oe,"stripCacheBoundaries");import{readFile as xr}from"node:fs/promises";import Tr from"node:path";var Cr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function Ze(e,t){return t??Cr[Tr.extname(e).toLowerCase()]??"image/png"}i(Ze,"resolveImageMediaType");async function et(e){return(await xr(e)).toString("base64")}i(et,"readImageFileAsBase64");async function Kn(e,t){let n=Ze(e,t),o=await et(e);return`data:${n};base64,${o}`}i(Kn,"buildImageDataUrl");var Rr="KodaX",Sr="effort-2025-11-24";function wr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Rr}}i(wr,"getAnthropicCompatDefaultHeaders");function Ut(e,t){if(!e)return t;let n=e.input_tokens!==void 0&&e.input_tokens!==null||e.cache_creation_input_tokens!==void 0&&e.cache_creation_input_tokens!==null||e.cache_read_input_tokens!==void 0&&e.cache_read_input_tokens!==null,o=typeof e.input_tokens=="number"?e.input_tokens:n?0:t?.inputTokens??0,r=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:n?0:t?.cachedWriteTokens??0,s=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:n?0:t?.cachedReadTokens??0,a=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,u=n?o+r+s:t?.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(Ut,"normalizeAnthropicUsage");function Wt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Wt,"isRecord");function Mr(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Mr,"selectAnthropicOutputEffort");function Un(e,t){let n=Mr(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...Wt(r)?r:{},effort:n}}i(Un,"applyAnthropicOutputEffort");function Wn(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...Wt(o)?o:{},effort:t}}i(Wn,"setAnthropicOutputEffort");function Ar(e){let n=e.output_config;return Wt(n)&&typeof n.effort=="string"}i(Ar,"hasAnthropicOutputEffort");var B=class extends H{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=wr(this.config);return new Pr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let s=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&Ar(t)?{"anthropic-beta":Sr}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){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")&&(t.thinking={type:"disabled"});return}if(u==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Wn(t,a.effort);return}if(u==="minimax-m3"){t.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"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Wn(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let f=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:f}}}}resolveReasoningProfileBudget(t,n,o,r,s){let u=(n?t.budgetByEffort?.[n]:void 0)??se(this.config,ie(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),f=c!==void 0?Math.min(u,c):u;return ae(f,s)}async verifyCredential(t){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 me({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}isPromptCacheDisabled(){let t=de()?.disablePromptCache;return t===!0?!0:t===!1?!1:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}applyCacheControlToSystem(t){if(!t.trim()||this.isPromptCacheDisabled())return t;let n=jt([{type:"text",text:t}],"system");return Kt(n,"attach")}applyCacheControlToTools(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=t.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}applyCacheControlToMessages(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=0,o=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"&&(n+=1,n===2)){o=l;break}if(o===-1)return t;let r=t[o];if(typeof r.content=="string"||r.content.length===0)return t;let s=r.content,u={...s[s.length-1],cache_control:{type:"ephemeral"}},c=[...s.slice(0,-1),u],f=t.slice();return f[o]={...r,content:c},f}async stream(t,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 f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(x=>x==="native-budget"||x==="native-toggle"||x==="native-adaptive"||x==="none"):["none"],T=!!s?.forcedToolName,d=i(x=>{let P={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&T&&(P.tool_choice={type:"tool",name:s.forcedToolName}),x!=="none")if(x==="profile"&&g)this.applyReasoningProfile(P,g,u,c,f);else if(x==="native-budget"){let D=se(this.config,ie(u.effort),u.taskType);P.thinking={type:"enabled",budget_tokens:ae(D,f)}}else x==="native-toggle"?P.thinking={type:"enabled"}:x==="native-adaptive"&&(P.thinking={type:"adaptive"},Un(P,u));return P},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let b=[],k=[],v=[],h,C=null,m="",E="",w="",F="",U="",j="",Y="",ee=!1,R,A=Date.now(),X=Date.now(),oe,Te;for(let x of y){for(;!oe;)try{let P=d(x);oe=await this.client.messages.create(P,this.buildMessageCreateOptions(P,c,a))}catch(P){if(Te=P,T&&this.shouldFallbackForForcedToolChoiceError(P)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let D=x==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:x==="native-budget"?["budget_tokens","thinking"]:x==="native-toggle"?["thinking"]:x==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(P,...D))throw P;break}if(oe)break}if(!oe)throw Te??new M("All reasoning capability attempts failed without a captured error",this.name);let Ce=Date.now(),Ue=0,S=0,$=3e4;for await(let x of oe){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let P=Date.now(),D=P-Ce;if(D>$&&(Ue++,S+=D,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(D/1e3)}s gap before ${x.type}`,{stallCount:Ue,totalStallMs:S,eventType:x.type})),Ce=P,x.type==="content_block_start"||x.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),x.type==="content_block_start"){A=Date.now();let _=x.content_block;C=_.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="",w=_.signature??""):_.type==="redacted_thinking"?(C="redacted_thinking",F=_.data??""):_.type==="text"?m="":_.type==="tool_use"&&(U=_.id,j=_.name,Y="")}else if(x.type==="content_block_delta"){A=Date.now();let _=x.delta;_.type==="thinking_delta"?(E+=_.thinking??"",s?.onThinkingDelta?.(_.thinking??"")):_.type==="text_delta"?(m+=_.text??"",s?.onTextDelta?.(_.text??"")):_.type==="input_json_delta"&&(Y+=_.partial_json??"",s?.onToolInputDelta?.(j,_.partial_json??"",U?{toolId:U}:void 0))}else if(x.type==="content_block_stop"){if(A=Date.now(),C==="thinking")E&&(v.push({type:"thinking",thinking:E,signature:w}),s?.onThinkingEnd?.(E));else if(C==="redacted_thinking")F&&v.push({type:"redacted_thinking",data:F}),F="";else if(C==="text")m&&b.push({type:"text",text:m});else if(C==="tool_use")if(!U||!j)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(U),name:JSON.stringify(j),input:Y.slice(0,100)});else{let _=pe(Y);k.push({type:"tool_use",id:U,name:j,input:_.value,..._.salvaged?{_salvaged:!0,_truncated:!0}:{}})}C=null}else if(x.type==="message_stop"){if(ee=!0,A=Date.now(),process.env.KODAX_DEBUG_STREAM){let _=Date.now()-X;this.logStreamDiagnostic(`[Stream] message_stop received after ${_}ms`)}}else if(x.type==="message_delta"){A=Date.now(),h=Ut(x.usage,h);let _=x.delta;_?.stop_reason&&(R=_.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${R}`))}else x.type==="message_start"&&(A=Date.now(),h=Ut(x.message?.usage,h),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!ee){let x=Date.now()-X,P=Date.now()-A;if(a?.aborted){let D=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:x,lastEventAge:P,reason:D,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),new DOMException(D,"AbortError")}if(!R){let D=new Error(`Stream incomplete: message_stop event not received. Duration: ${x}ms, Last event: ${P}ms ago. This may indicate a network disconnection or API timeout.`);throw D.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:x,lastEventAge:P,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),D}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:x,lastEventAge:P,stopReason:R,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length})}let O=ge(R)?k.map(({_truncated:x,...P})=>P):k;return{textBlocks:b,toolBlocks:O,thinkingBlocks:v,usage:h,stopReason:R}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,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 f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(m=>m==="native-budget"||m==="native-toggle"||m==="native-adaptive"||m==="none"):["none"],T=!!s?.forcedToolName,d=i(m=>{let E={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&T&&(E.tool_choice={type:"tool",name:s.forcedToolName}),m!=="none")if(m==="profile"&&g)this.applyReasoningProfile(E,g,u,c,f);else if(m==="native-budget"){let w=se(this.config,ie(u.effort),u.taskType);E.thinking={type:"enabled",budget_tokens:ae(w,f)}}else m==="native-toggle"?E.thinking={type:"enabled"}:m==="native-adaptive"&&(E.thinking={type:"adaptive"},Un(E,u));return E},"buildRequest"),b,k;for(let m of y){for(;!b;)try{let E=d(m);b=await this.client.messages.create(E,this.buildMessageCreateOptions(E,c,a))}catch(E){if(k=E,T&&this.shouldFallbackForForcedToolChoiceError(E)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let w=m==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:m==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(E,...w))throw E;break}if(b)break}if(!b)throw k??new M("All reasoning capability attempts failed without a captured error",this.name);let v=[],h=[],C=[];for(let m of b.content)m.type==="text"?(v.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(C.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?C.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&h.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:v,toolBlocks:h,thinkingBlocks:C,usage:Ut(b.usage),stopReason:b.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(he(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 t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
|
|
3
|
+
`)}buildSystemPrompt(t,n){let o=n.filter(r=>r.role==="system").map(r=>this.serializeSystemMessageContent(r.content)).filter(Boolean);return[t,...o].filter(r=>typeof r=="string"&&r.trim().length>0).join(`
|
|
4
|
+
|
|
5
|
+
`)}async convertMessages(t,n){let o=[],r=this.getEffectiveStrictThinkingSignature(n);for(let s of t.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:Ze(y.path,y.mediaType),data:await et(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:Ze(l.path,l.mediaType),data:await et(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 f=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:f?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){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 t.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(t[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(t[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 Dr from"openai";var Or="KodaX";function Ir(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i(Ir,"isOpenAIReasoningAttempt");function $r(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Or}}i($r,"getOpenAICompatDefaultHeaders");function Br(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return Bt(ie(e.effort))}}i(Br,"selectOpenAIReasoningEffort");function zn(e){if(!e)return;let t=typeof e.prompt_tokens=="number"?e.prompt_tokens:0,n=typeof e.completion_tokens=="number"?e.completion_tokens:0,o=typeof e.total_tokens=="number"?e.total_tokens:t+n;if([t,n,o].some(s=>!Number.isFinite(s)||s<0)||o<t||o<n)return;let r=typeof e.prompt_tokens_details?.cached_tokens=="number"&&e.prompt_tokens_details.cached_tokens>=0?e.prompt_tokens_details.cached_tokens:typeof e.prompt_cache_hit_tokens=="number"&&e.prompt_cache_hit_tokens>=0?e.prompt_cache_hit_tokens:void 0;return{inputTokens:t,outputTokens:n,totalTokens:o,...r!==void 0?{cachedReadTokens:r}:{}}}i(zn,"normalizeOpenAIUsage");function Lr(e){return e?e.type==="function"&&"function"in e:!1}i(Lr,"isOpenAIFunctionToolCall");function Nr(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>{if(!t||typeof t!="object")return"";let n=Reflect.get(t,"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(Nr,"extractOpenAIMessageText");function Fr(e){if(!e||typeof e!="object")return"";let t=Reflect.get(e,"reasoning_content");return typeof t=="string"?t:Array.isArray(t)?t.map(n=>typeof n=="string"?n:n&&typeof n=="object"&&"text"in n&&typeof n.text=="string"?n.text:"").join(""):""}i(Fr,"extractOpenAIMessageReasoning");function tt(e){let t=e.role;return typeof t=="string"?t:void 0}i(tt,"getWireRole");function jr(e){if(tt(e)!=="assistant")return;let t=e.tool_calls;if(Array.isArray(t))return t.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(jr,"getAssistantWireToolCalls");function Kr(e){if(tt(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}i(Kr,"getToolWireCallId");function Ur(e,t){let n={...e};return t.length>0?(n.tool_calls=t.map(o=>o.value),n):(delete n.tool_calls,(n.content==null||n.content==="")&&(n.content="..."),n)}i(Ur,"rewriteAssistantWireToolCalls");var W=class extends H{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=$r(this.config);return new Dr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}async verifyCredential(t){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 me({strategy:this.config.verifyStrategy??"models-list",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Oe(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(t,n){let o=[];t&&t.trim().length>0&&o.push(t);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(t,n){let o=typeof t.extra_body=="object"&&t.extra_body!==null?t.extra_body:{};t.extra_body={...o,...n}}resetReasoningCapabilityParams(t){delete t.reasoning_effort,delete t.thinking;let n=typeof t.extra_body=="object"&&t.extra_body!==null?{...t.extra_body}:void 0;if(n){if(delete n.enable_thinking,delete n.thinking_budget,delete n.thinking,Object.keys(n).length===0){delete t.extra_body;return}t.extra_body=n}}applyReasoningCapability(t,n,o){if(this.suppressReasoningEffort||n==="none")return;let r=t,s=this.getEffectiveMaxOutputTokens(t.model),a=ae(se(this.config,ie(o.effort),o.taskType),s),u=this.getReasoningProfile(t.model);if(u){this.applyReasoningProfile(r,u,o,t.model,a);return}switch(n){case"native-effort":{this.validateExplicitReasoningEffort(o,t.model);let c=Br(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(t,n,o,r,s){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(u==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-openai"||u==="zai-glm-5.2"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(c=>c.value==="none")&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let s=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(s,a):s}getFallbackTerms(t){switch(t){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(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:f}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(f,l)],g=n.map(S=>({type:"function",function:{name:S.name,description:S.description,parameters:S.input_schema}})),y=s?.forcedToolName,T=!!y;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let d=new Map,b="",k="",v,h=!0,C=null,m=Date.now(),E=this.normalizeReasoning(r),w=fe(E)?this.getReasoningCapability(l):"none",F=fe(E)?this.getReasoningFallbackChain(w).filter(Ir):["none"],U={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),stream:!0};y&&T&&(U.tool_choice={type:"function",function:{name:y}});let j,Y;for(let S of F){for(;!j;){let $={...U};h&&($.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams($),this.applyReasoningCapability($,S,E);try{j=await this.client.chat.completions.create($,a?{signal:a}:{})}catch(O){if(Y=O,T&&this.shouldFallbackForForcedToolChoiceError(O)){T=!1,delete U.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(h&&this.shouldFallbackForSpecificReasoningError(O,"stream_options","include_usage")){h=!1;continue}if(!this.shouldFallbackForReasoningError(O,...this.getFallbackTerms(S)))throw O;break}}if(j)break}if(!j)throw Y??new M("All reasoning capability attempts failed without a captured error",this.name);let ee=Date.now(),R=0,A=0,X=3e4;for await(let S of j){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let $=Date.now(),O=$-ee;O>X&&(R++,A+=O,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(O/1e3)}s gap`,{stallCount:R,totalStallMs:A})),ee=$,s?.onHeartbeat?.(),v=zn(S.usage)??v;let x=S.choices[0],P=x?.delta;if(x?.finish_reason&&(C=x.finish_reason,process.env.KODAX_DEBUG_STREAM)){let _=Date.now()-m;this.logStreamDiagnostic(`[Stream] finish_reason: ${C} after ${_}ms`)}P?.content&&(b+=P.content,s?.onTextDelta?.(P.content));let D=this.extractReasoningDelta(P);if(D&&(k+=D,s?.onThinkingDelta?.(D)),P?.tool_calls)for(let _ of P.tool_calls){let re=d.get(_.index)??{id:"",name:"",arguments:""};_.id&&(re.id=_.id),_.function?.name&&(re.name=_.function.name),_.function?.arguments&&(re.arguments+=_.function.arguments,s?.onToolInputDelta?.(re.name,_.function.arguments,re.id?{toolId:re.id}:void 0)),d.set(_.index,re)}}if(!C){let S=Date.now()-m;if(a?.aborted){let O=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:S,reason:O,textContentLength:b.length,toolCallsCount:d.size}),new DOMException(O,"AbortError")}let $=new Error(`Stream incomplete: finish_reason not received. Duration: ${S}ms. This may indicate a network disconnection or API timeout.`);throw $.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:S,textContentLength:b.length,toolCallsCount:d.size}),$}let oe=b?[{type:"text",text:b}]:[],Te=[],Ce=[];k&&(Ce.push({type:"thinking",thinking:k}),s?.onThinkingEnd?.(k));let Ue=ge(C??void 0);for(let[,S]of d)if(S.id&&S.name){let $=pe(S.arguments),O=$.salvaged?Ue?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Te.push({type:"tool_use",id:S.id,name:S.name,input:$.value,...O})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(S.id),name:JSON.stringify(S.name),argsLength:S.arguments?.length??0});return{textBlocks:oe,toolBlocks:Te,thinkingBlocks:Ce,usage:v,stopReason:C??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:f}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(f,l)],g=n.map(R=>({type:"function",function:{name:R.name,description:R.description,parameters:R.input_schema}})),y=s?.forcedToolName,T=!!y,d=this.normalizeReasoning(r),b=fe(d)?this.getReasoningCapability(l):"none",k=fe(d)?this.getReasoningFallbackChain(b).filter(R=>R==="native-budget"||R==="native-effort"||R==="native-toggle"||R==="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,C;for(let R of k){for(;!h;){let A={...v};this.resetReasoningCapabilityParams(A),this.applyReasoningCapability(A,R,d);try{h=await this.client.chat.completions.create(A,a?{signal:a}:{})}catch(X){if(C=X,T&&this.shouldFallbackForForcedToolChoiceError(X)){T=!1,delete v.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(X,...this.getFallbackTerms(R)))throw X;break}}if(h)break}if(!h)throw C??new M("All reasoning capability attempts failed without a captured error",this.name);let m=h.choices[0],E=m?.message,w=Nr(E?.content),F=Fr(E),U=ge(m?.finish_reason??void 0),j=(E?.tool_calls??[]).filter(Lr).map(R=>{let A=pe(R.function.arguments),X=A.salvaged?U?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:R.id,name:R.function.name,input:A.value,...X}});w&&s?.onTextDelta?.(w);let Y=w?[{type:"text",text:w}]:[],ee=[];return F&&(ee.push({type:"thinking",thinking:F}),s?.onThinkingDelta?.(F),s?.onThinkingEnd?.(F)),{textBlocks:Y,toolBlocks:j,thinkingBlocks:ee,usage:zn(h.usage),stopReason:m?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.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(t,n){let o=t.filter(l=>l.type==="text").map(l=>l.text).join(`
|
|
13
|
+
`),r=t.filter(l=>l.type==="tool_use").map(l=>({id:l.id,type:"function",function:{name:l.name,arguments:JSON.stringify(l.input??{})}})),s=t.filter(l=>l.type==="thinking"||l.type==="redacted_thinking").map(l=>l.type==="thinking"?l.thinking:"").filter(Boolean).join(`
|
|
14
|
+
|
|
15
|
+
`),a=t.some(l=>l.type==="thinking"||l.type==="redacted_thinking"),u=t.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 f={role:"assistant",content:c};return r.length>0&&(f.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(f.reasoning_content=s||""),[f]}async serializeUserMessage(t){let n=[],o=t.filter(a=>a.type==="text").map(a=>a.text).join(`
|
|
16
|
+
`),r=t.filter(a=>a.type==="image");for(let a of t)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 Kn(a.path,a.mediaType)}});return n.push({role:"user",content:s}),n}serializeSystemMessage(t){if(typeof t=="string")return[{role:"system",content:t}];let n=t.filter(o=>o.type==="text").map(o=>o.text).join(`
|
|
18
|
+
`);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[];for(let r of t){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(t){let n=[],o=0;for(;o<t.length;){let r=t[o],s=jr(r);if(s===void 0){tt(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(g=>g.id)),u=new Set,c=[],f=o+1;for(;f<t.length&&tt(t[f])==="tool";){let g=t[f],y=Kr(g);y!==void 0&&a.has(y)&&!u.has(y)&&(u.add(y),c.push(g)),f+=1}let l=s.filter(g=>u.has(g.id)),p=l.length===s.length&&s.length>0?r:Ur(r,l);n.push(p),l.length>0&&n.push(...c),o=f}return n}};import{spawn as Gr}from"node:child_process";import{Readable as Hr,Writable as Jr}from"node:stream";import ot from"node:process";import{ClientSideConnection as qr,PROTOCOL_VERSION as Yr,ndJsonStream as Qr}from"@agentclientprotocol/sdk";import{spawn as Wr,spawnSync as qn}from"node:child_process";var Vt=2e3,G=2e3;function Xt(e){return e.exitCode!==null||e.signalCode!==null}i(Xt,"isExited");function Ie(e,t){return Xt(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=i(u=>{o||(o=!0,clearTimeout(a),e.off("exit",s),e.off("error",s),n(u))},"finish"),s=i(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),t);a.unref?.(),e.once("exit",s),e.once("error",s)})}i(Ie,"waitForExit");function Xn(e){return new Promise(t=>{let n=Wr("taskkill",["/pid",String(e),"/t","/f"],{stdio:"ignore",windowsHide:!0}),o=!1,r=i(()=>{o||(o=!0,clearTimeout(s),t())},"finish"),s=setTimeout(()=>{try{n.kill()}catch{}r()},Vt);s.unref?.(),n.once("exit",r),n.once("error",r)})}i(Xn,"runTaskkill");function Vn(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}i(Vn,"signalPosixPidTree");function J(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}i(J,"signalTargetExists");function Gn(e){return J(-e)||J(e)}i(Gn,"isPosixPidTreeAlive");async function Hn(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Gn(e))return!0;await new Promise(o=>setTimeout(o,50))}return!Gn(e)}i(Hn,"waitForPosixPidTreeExit");async function zr(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!J(e))return!0;await new Promise(o=>setTimeout(o,50))}return!J(e)}i(zr,"waitForWindowsPidExit");async function zt(e,t){let n=[...new Set(e.filter(r=>Number.isFinite(r)&&r>0))];if(n.length===0)return!0;let o=Date.now()+t;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(zt,"waitForWindowsPidsExit");function Jn(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).map(r=>Number(r)).filter(r=>Number.isFinite(r)&&r>0)}catch{return[]}}i(Jn,"readWindowsPidListJson");function Xr(e){let t=qn("wmic",["process","where",`ParentProcessId=${e}`,"get","ProcessId","/format:list"],{encoding:"utf8",timeout:Vt,windowsHide:!0});if(t.error||t.status!==0)return[];let n=[],o=/ProcessId=(\d+)/g,r;for(;(r=o.exec(t.stdout))!==null;){let s=Number(r[1]);Number.isFinite(s)&&s>0&&s!==e&&n.push(s)}return n}i(Xr,"getWindowsChildPidsViaWmic");function Vr(e){let t=[`$children = Get-CimInstance Win32_Process -Filter "ParentProcessId = ${e}"`,"if ($null -eq $children) { exit 0 }","$children | Select-Object -ExpandProperty ProcessId | ConvertTo-Json -Compress"].join("; "),n=qn("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:Vt,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(e)}i(Vr,"getWindowsChildPids");function Yn(e,t=new Set){let n=[];for(let o of Vr(e))t.has(o)||(t.add(o),n.push(o),n.push(...Yn(o,t)));return n}i(Yn,"collectWindowsDescendantPids");async function nt(e,t){try{process.kill(e,t)}catch{return!J(e)}return zr(e,G)}i(nt,"killWindowsPid");async function $e(e){if(process.platform==="win32"&&e.pid!==void 0){let t=Yn(e.pid),n=[...t].reverse(),o=[e.pid,...t];Xt(e)||await Xn(e.pid);for(let r of n)J(r)&&await Xn(r);if(await zt(o,G)){await Ie(e,G);return}for(let r of n)J(r)&&await nt(r,"SIGTERM");if(await nt(e.pid,"SIGTERM"),await zt(o,G)){await Ie(e,G);return}for(let r of n)J(r)&&await nt(r,"SIGKILL");await nt(e.pid,"SIGKILL"),await zt(o,G),await Ie(e,G);return}if(e.pid!==void 0&&process.platform!=="win32"){if(!Vn(e.pid,"SIGTERM")||await Hn(e.pid,G))return;Vn(e.pid,"SIGKILL"),await Hn(e.pid,G);return}if(!Xt(e)){try{e.kill("SIGTERM")}catch{return}if(!await Ie(e,G)){try{e.kill("SIGKILL")}catch{}await Ie(e,G)}}}i($e,"killChildProcessTree");var rt=class{static{i(this,"AcpClient")}client=null;agentProcess=null;options;constructor(t){this.options=t}async connect(){let t,n;if(this.options.inputStream&&this.options.outputStream)t=this.options.inputStream,n=this.options.outputStream;else if(this.options.command){let s=ot.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Gr(s,this.options.args??[],{cwd:this.options.cwd??ot.cwd(),stdio:["pipe","pipe","inherit"],detached:ot.platform!=="win32"}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=Jr.toWeb(this.agentProcess.stdin),t=Hr.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=Qr(n,t);this.client=new qr(()=>({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:Yr,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??ot.cwd(),mcpServers:[]})).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");let s={sessionId:n,prompt:[{type:"text",text:t}]};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&&$e(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}};function Zr(e){if(!e||typeof e!="object")return;let t=e,n=typeof t.inputTokens=="number"?t.inputTokens:0,o=typeof t.outputTokens=="number"?t.outputTokens:0,r=typeof t.totalTokens=="number"?t.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 t.cachedReadTokens=="number"?t.cachedReadTokens:void 0,cachedWriteTokens:typeof t.cachedWriteTokens=="number"?t.cachedWriteTokens:void 0,thoughtTokens:typeof t.thoughtTokens=="number"?t.thoughtTokens:void 0}}i(Zr,"normalizeAcpUsage");function ei(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(ei,"selectAcpReasoningEffort");var ye=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 V(De)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Oe(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let u=this.normalizeReasoning(r),c=ei(u);if(t=this.stripCacheBoundariesFromMessages(t),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 f=[],l=[],p=t[t.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 C=this.serializeImageBlockToPromptToken(h);C&&v.push(C)}g=v.join(`
|
|
19
|
+
`)}let y={...this.acpClientOptions,onSessionUpdate:i(v=>{let h=v.update,C=v.sessionId;if(!("sessionUpdate"in h))return;let m=C?this._activeStreams.get(C):void 0;if(m)switch(h.sessionUpdate){case"agent_message_chunk":if(h.content?.type==="text"){let E=h.content.text;m.output.text+=E,m.streamOptions?.onTextDelta?.(E)}break;case"tool_call":{let E="{}",w=h.arguments??h.parameters;w&&(E=typeof w=="string"?w:JSON.stringify(w)),m.streamOptions?.onToolInputDelta?.(h.title,E);let F=`
|
|
20
|
+
> [Tool Use] ${h.title}: ${E}
|
|
21
|
+
`;m.output.text+=F,m.streamOptions?.onTextDelta?.(F);break}case"tool_call_update":if(h.status){let E=`> [Tool Result] ${h.status}
|
|
22
|
+
|
|
23
|
+
`;m.output.text+=E,m.streamOptions?.onTextDelta?.(E)}break}},"onSessionUpdate")},T=s?.sessionId??"default";this._client||(this._client=new rt(y),await this._client.connect());let d=this._sessionMap.get(T);d||(d=await this._client.createNewSession(),this._sessionMap.set(T,d));let b={text:""};this._activeStreams.set(d,{streamOptions:s,output:b});let k;try{k=await this._client.prompt(g,d,a,{model:s?.modelOverride,reasoningEffort:c})}catch(v){if(!(v instanceof Error&&v.name==="AbortError"))throw v}finally{this._activeStreams.delete(d)}return b.text&&f.push({type:"text",text:b.text}),{textBlocks:f,toolBlocks:l,thinkingBlocks:[],usage:Zr(k?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as ti}from"node:child_process";import it from"node:process";var ve=class{static{i(this,"CLIExecutor")}config;_installedCache=null;constructor(t){this.config=t}async isInstalled(){return this._installedCache!==null?this._installedCache:(this._installedCache=await this.checkInstalled(),this._installedCache)}async*execute(t){let n=this.buildArgs(t),o={...it.env,...this.config.env},s=it.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=ti(s,n,{cwd:this.config.cwd??it.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:it.platform!=="win32"}),u="";a.stderr?.on("data",l=>{u+=l.toString()});let c=!1,f=i(()=>{c||$e(a)},"abortHandler");t.signal?.addEventListener("abort",f),a.on("exit",()=>{c=!0});try{yield*this.parseOutputStream(a.stdout,t.signal),u.trim()&&console.error(`[CLIExecutor] stderr: ${u.trim()}`)}finally{t.signal?.removeEventListener("abort",f),c||await $e(a)}}async*parseOutputStream(t,n){let o="";for await(let r of t){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 ni}from"node:child_process";import oi from"node:process";async function st(e){try{let t=oi.platform==="win32",n=ni(t?`${e}.cmd`:e,["--version"]);return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}i(st,"checkCliCommandInstalled");var at=class extends ve{static{i(this,"GeminiCLIExecutor")}model;constructor(t){super({command:"gemini",baseArgs:["--output-format","stream-json","--approval-mode","yolo"],timeout:3e5,...t}),this.model=t?.model??"gemini-2.5-pro"}async checkInstalled(){return st("gemini")}buildArgs(t){let n=["-m",t.model??this.model];return t.sessionId?(n.push("-r",t.sessionId),n.push(t.prompt)):n.push("-p",t.prompt),[...n,...this.config.baseArgs]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=t.timestamp?Date.parse(t.timestamp):Date.now();switch(t.type){case"init":return{type:"session_start",timestamp:n,sessionId:t.session_id??"",model:t.model??this.model,raw:t};case"message":return{type:"message",timestamp:n,role:t.role,content:t.content??"",delta:t.delta,raw:t};case"tool_use":return{type:"tool_use",timestamp:n,toolId:t.tool_id??"",toolName:t.tool_name??"",parameters:t.parameters??{},raw:t};case"tool_result":return{type:"tool_result",timestamp:n,toolId:t.tool_id??"",status:t.status==="success"?"success":"error",output:t.output??"",raw:t};case"error":return{type:"error",timestamp:n,errorType:"error",message:t.message??"Unknown error",raw:t};case"result":return{type:"complete",timestamp:n,status:t.status==="success"?"success":"failed",usage:t.stats?{inputTokens:t.stats.input_tokens??0,outputTokens:t.stats.output_tokens??0,totalTokens:t.stats.total_tokens??0}:void 0,raw:t};default:return null}}};import{TransformStream as Qn}from"node:stream/web";import{randomUUID as Gt}from"node:crypto";function ut(e){let t=new Qn,n=new Qn,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,u="",c=Gt(),f=new AbortController,l=new Map;(async()=>{try{for(;;){let{done:d,value:b}=await o.read();if(d)break;u+=s.decode(b,{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(C=>{console.error("[PseudoAcpServer] Failed to handle request:",C)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",v)}}}catch(d){console.error("[PseudoAcpServer] Stream read error:",d)}})();let p=i(async d=>{let b=JSON.stringify(d)+`
|
|
26
|
+
`;await r.write(a.encode(b))},"sendMsg");async function g(d){if(d.method==="initialize")await p({jsonrpc:"2.0",id:d.id,result:{protocolVersion:d.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(d.method==="session/new"||d.method==="sessions/new")c=d.params?.sessionId??Gt(),await p({jsonrpc:"2.0",id:d.id,result:{sessionId:c}});else if(d.method==="session/prompt"||d.method==="chat/prompt"){let b=new AbortController,k=d.params.sessionId;l.set(k,b);let v=i(()=>b.abort(),"onGlobalAbort");f.signal.addEventListener("abort",v);let C=await y(k,d.params.prompt,typeof d.params.model=="string"?d.params.model:void 0,typeof d.params.effort=="string"?d.params.effort:void 0,b.signal).finally(()=>{l.delete(k),f.signal.removeEventListener("abort",v)});await p({jsonrpc:"2.0",id:d.id,result:C.usage?{stopReason:C.stopReason,usage:C.usage}:{stopReason:C.stopReason}})}else if(d.method==="session/cancel"||d.method==="chat/cancel"){let b=l.get(d.params.sessionId);b&&b.abort(),d.id!==void 0&&await p({jsonrpc:"2.0",id:d.id,result:{}})}else d.id!==void 0&&await p({jsonrpc:"2.0",id:d.id,result:{}})}i(g,"handleRequest");let y=i(async(d,b,k,v,h)=>{let C=b.find(m=>m.type==="text")?.text??"";try{let m=e.execute({prompt:C,model:k,reasoningEffort:v,sessionId:d==="default"?void 0:d,signal:h});for await(let E of m){let w=T(E);if(w&&await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:w}}),E.type==="complete")return{stopReason:h.aborted?"cancelled":"end_turn",usage:E.usage}}return{stopReason:h.aborted?"cancelled":"end_turn"}}catch(m){return h.aborted||m instanceof Error&&m.name==="AbortError"?{stopReason:"cancelled"}:(console.error("[PseudoAcpServer] Error executing prompt:",m),await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
|
|
27
|
+
[Fatal Error: ${m}]
|
|
28
|
+
`}}}}),{stopReason:"end_turn"})}},"executePrompt"),T=i(d=>{switch(d.type){case"message":if(d.role==="assistant"&&d.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:d.toolName,arguments:d.parameters,status:"running",toolCallId:d.toolId||Gt()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:d.toolId,status:d.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
|
|
29
|
+
[Error: ${d.message}]
|
|
30
|
+
`}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{f.abort(),t.readable.cancel().catch(()=>{}),n.writable.abort().catch(()=>{})},"abort"),executor:e}}i(ut,"createPseudoAcpServer");import Zn from"node:fs";import eo from"node:os";import to from"node:path";var ri="gpt-5.4",ii="auto-gemini-3",si=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ai=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function no(e){let t=new Set,n=[];for(let o of e){let r=o.trim();if(!r)continue;let s=r.toLowerCase();t.has(s)||(t.add(s),n.push(r))}return n}i(no,"dedupePreserveOrder");function ui(){let e=to.join(eo.homedir(),".codex","config.toml");try{return Zn.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(ui,"readCodexConfiguredModel");function ci(){let e=to.join(eo.homedir(),".gemini","settings.json");try{let t=JSON.parse(Zn.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}i(ci,"readGeminiConfiguredModel");function ke(){return ui()||ri}i(ke,"getCodexCliDefaultModel");function be(){return ci()||ii}i(be,"getGeminiCliDefaultModel");function Be(){return no([ke(),...si])}i(Be,"getCodexCliKnownModels");function Le(){return no([be(),...ai])}i(Le,"getGeminiCliKnownModels");var Ht=be(),li=Le(),fi={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},ct=class extends ye{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:Ht,models:li.filter(t=>t!==Ht).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new at({model:Ht});this.acpClientOptions=ut(t)}getCapabilityProfile(){return V(fi)}serializeImageBlockToPromptToken(t){return/\s/.test(t.path)?(console.warn(`[gemini-cli] Image path contains whitespace and cannot be safely passed via @<path> syntax \u2014 dropping image block. Path: ${JSON.stringify(t.path)}`),null):`@${t.path}`}};function di(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(di,"buildReasoningEffortArgs");var lt=class extends ve{static{i(this,"CodexCLIExecutor")}model;constructor(t){super({command:"codex",baseArgs:["exec","--json","--full-auto"],timeout:3e5,...t}),this.model=t?.model??"gpt-5.4"}async checkInstalled(){return st("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=di(t.reasoningEffort);return t.sessionId?["exec","resume",t.sessionId,...n,...o,t.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,t.prompt]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=Date.now();switch(t.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:t.thread_id??"",model:this.model,raw:t};case"item.completed":return t.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:t.item.text??"",raw:t}:t.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:t.item.id,toolName:"Bash",parameters:{command:t.item.command},raw:t}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:t.usage?{inputTokens:t.usage.input_tokens,outputTokens:t.usage.output_tokens,totalTokens:t.usage.input_tokens+t.usage.output_tokens}:void 0,raw:t};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:t.type,message:t.message??"Unknown error",raw:t};default:return null}}};var Jt=ke(),pi=Be(),ft=class extends ye{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:Jt,models:pi.filter(t=>t!==Jt).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new lt({model:Jt});this.acpClientOptions=ut(t)}};import{existsSync as xi,readFileSync as Ti}from"node:fs";import Ee from"node:path";import{fileURLToPath as Ci}from"node:url";var oo=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],ro=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","provider-budget","provider-toggle","prompt-only","none"],io=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],so=["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"],ao=["native","image-input-native","cli-bridge","image-input-cli-bridge"],uo=["count-tokens","models-list","minimal-message","unsupported"];function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Z,"isPlainObject");function ce(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}i(ce,"requireString");function Ne(e,t){if(e!==void 0)return ce(e,t)}i(Ne,"optionalString");function te(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}i(te,"optionalNumber");function I(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(I,"optionalBoolean");function co(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,o)=>ce(n,`${t}[${o}]`))}}i(co,"optionalStringArray");function gi(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=ce(r,`${t}.${o}`);return n}i(gi,"optionalStringMap");function mi(e,t){if(e!==void 0){if(typeof e!="string"||!so.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${so.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(mi,"optionalReasoningPreset");function qt(e,t){if(typeof e!="string"||!oo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${oo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(qt,"requireReasoningCapability");function hi(e,t){if(typeof e!="string"||!ro.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ro.join(", ")}, got ${JSON.stringify(e)}`);return e}i(hi,"requireEffortStrategy");function yi(e,t){if(e!==void 0){if(typeof e!="string"||!io.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${io.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(yi,"optionalThinkingStrategy");function lo(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=hi(e.effortStrategy,`${t}.effortStrategy`),o=mi(e.reasoningPreset,`${t}.reasoningPreset`),r=yi(e.thinkingStrategy,`${t}.thinkingStrategy`),s=Ne(e.defaultEffort,`${t}.defaultEffort`),a=gi(e.effortAliases,`${t}.effortAliases`),u=co(e.disabledEfforts,`${t}.disabledEfforts`),c=co(e.localRejectEfforts,`${t}.localRejectEfforts`),f=I(e.allowCustomEffort,`${t}.allowCustomEffort`),l=I(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=I(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),g=I(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),y=I(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),T=I(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),d=I(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),b=I(e.requiresEffortBetaHeader,`${t}.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),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);k.supportedEfforts=e.supportedEfforts.map((v,h)=>{if(!Z(v))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${h}] must be an object`);return{value:ce(v.value,`${t}.supportedEfforts[${h}].value`),...Ne(v.description,`${t}.supportedEfforts[${h}].description`)!==void 0?{description:Ne(v.description,`${t}.supportedEfforts[${h}].description`)}:{},...I(v.isDefault,`${t}.supportedEfforts[${h}].isDefault`)!==void 0?{isDefault:I(v.isDefault,`${t}.supportedEfforts[${h}].isDefault`)}:{},...I(v.isUserVisible,`${t}.supportedEfforts[${h}].isUserVisible`)!==void 0?{isUserVisible:I(v.isUserVisible,`${t}.supportedEfforts[${h}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!Z(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let v={};for(let[h,C]of Object.entries(e.budgetByEffort))v[h]=te(C,`${t}.budgetByEffort.${h}`)??0;k.budgetByEffort=v}return f!==void 0&&(k.allowCustomEffort=f),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),d!==void 0&&(k.supportsDisabledThinking=d),b!==void 0&&(k.requiresEffortBetaHeader=b),k}i(lo,"validateReasoningProfile");function fo(e,t){let n=e.reasoningProfile,o=e.reasoningCapabilityV2;if(n!==void 0&&o!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?lo(n,`${t}.reasoningProfile`):lo(o,`${t}.reasoningCapabilityV2`)}i(fo,"validateReasoningProfileField");function vi(e,t){if(typeof e!="string"||!ao.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ao.join(", ")}, got ${JSON.stringify(e)}`);return e}i(vi,"requireProfileName");function ki(e,t){if(typeof e!="string"||!uo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${uo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ki,"requireVerifyStrategy");function bi(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ce(e.id,`${t}.id`),o=Ne(e.displayName,`${t}.displayName`),r=te(e.contextWindow,`${t}.contextWindow`),s=te(e.maxOutputTokens,`${t}.maxOutputTokens`),a=te(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),u=I(e.replayReasoningContent,`${t}.replayReasoningContent`),c=I(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=te(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),l=e.reasoningCapability===void 0?void 0:qt(e.reasoningCapability,`${t}.reasoningCapability`),p=fo(e,t),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),f!==void 0&&(g.streamMaxDurationMs=f),g}i(bi,"validateModelDescriptor");function Ei(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=qt(r,`${t}.${o}`);return n}i(Ei,"validateModelReasoningCapabilities");function _i(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=I(e.cliBridge,`providers.${t}.cliBridge`),o=ce(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=qt(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=fo(e,`providers.${t}`),a=vi(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=ki(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&u!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${u}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=te(e.contextWindow,`providers.${t}.contextWindow`),f=te(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),l=te(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),p=I(e.supportsThinking,`providers.${t}.supportsThinking`),g=Ei(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),y=Ne(e.model,`providers.${t}.model`);if(n&&(y!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} 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.${t}.model is required (only cliBridge entries may omit)`);let T;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);T=e.models.map((b,k)=>bi(b,`providers.${t}.models[${k}]`))}let d={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(d.reasoningProfile=s),y!==void 0&&(d.model=y),T!==void 0&&(d.models=T),c!==void 0&&(d.contextWindow=c),f!==void 0&&(d.maxOutputTokens=f),l!==void 0&&(d.thinkingBudgetCap=l),p!==void 0&&(d.supportsThinking=p),g!==void 0&&(d.modelReasoningCapabilities=g),n&&(d.cliBridge=!0),d}i(_i,"validateProviderEntry");function po(e){if(!Z(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=ce(e.updatedAt,"updatedAt");if(!Z(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,r]of Object.entries(e.providers))n[o]=_i(r,o);return{version:1,updatedAt:t,providers:n}}i(po,"validateProviderCapabilitiesJson");var Pi=Object.freeze({native:ue,"image-input-native":Bn,"cli-bridge":De,"image-input-cli-bridge":Ln}),dt=null;function Ri(){if(process.env.KODAX_BUNDLED==="true")return Ee.join(Ee.dirname(process.execPath),"provider-capabilities.json");let e=Ee.dirname(Ci(import.meta.url)),t=[Ee.join(e,"provider-capabilities.json"),Ee.join(Ee.dirname(e),"provider-capabilities.json")];for(let n of t)if(xi(n))return n;return t[0]}i(Ri,"resolveJsonPath");function Si(e){if(e.models){for(let t of e.models)t.reasoningProfile&&go(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&go(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(Si,"deepFreezeSnapshot");function go(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}i(go,"freezeReasoningProfile");function wi(e){if(e==="gemini-cli"){let t=be();return{model:t,models:Le().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=ke();return{model:t,models:Be().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(wi,"resolveCliBridgeModels");function Mi(e,t){let n=Pi[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=wi(e),s={model:r.model,models:r.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let o={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(o.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(o.models=t.models),t.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(o.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(o.maxOutputTokens=t.maxOutputTokens),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}i(Mi,"buildSnapshot");function mo(){if(dt)return dt;let e=Ri(),t;try{let r=Ti(e,"utf8");t=JSON.parse(r)}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let n=po(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=Si(Mi(r,s));return dt=Object.freeze(o),dt}i(mo,"getProviderSnapshots");import Ai from"@anthropic-ai/sdk";var L=mo();function K(e,t={}){let n=L[e];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,...t}}i(K,"buildProviderConfig");var Yt=class extends B{static{i(this,"AnthropicProvider")}name="anthropic";config=K("anthropic",{strictThinkingSignature:!0});buildClient(){return new Ai({apiKey:this.getApiKey()})}},Qt=class extends B{static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=K("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},Zt=class extends B{static{i(this,"ZaiCodingProvider")}name="zai-coding";config=K("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},en=class extends B{static{i(this,"KimiCodeProvider")}name="kimi-code";config=K("kimi-code",{baseUrl:"https://api.kimi.com/coding/"})},tn=class extends B{static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=K("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},nn=class extends B{static{i(this,"MimoCodingProvider")}name="mimo-coding";config=K("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},on=class extends B{static{i(this,"MimoProvider")}name="mimo";config=K("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},rn=class extends B{static{i(this,"ArkCodingProvider")}name="ark-coding";config=K("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},sn=class extends W{static{i(this,"OpenAIProvider")}name="openai";config=K("openai")},an=class extends W{static{i(this,"DeepSeekProvider")}name="deepseek";config=K("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},un=class extends W{static{i(this,"KimiProvider")}name="kimi";config=K("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0})},cn=class extends W{static{i(this,"QwenProvider")}name="qwen";config=K("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},ln=class extends W{static{i(this,"ZhipuProvider")}name="zhipu";config=K("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},z={anthropic:i(()=>new Yt,"anthropic"),openai:i(()=>new sn,"openai"),deepseek:i(()=>new an,"deepseek"),kimi:i(()=>new un,"kimi"),"kimi-code":i(()=>new en,"kimi-code"),qwen:i(()=>new cn,"qwen"),zhipu:i(()=>new ln,"zhipu"),"zhipu-coding":i(()=>new Qt,"zhipu-coding"),"zai-coding":i(()=>new Zt,"zai-coding"),"minimax-coding":i(()=>new tn,"minimax-coding"),"mimo-coding":i(()=>new nn,"mimo-coding"),mimo:i(()=>new on,"mimo"),"ark-coding":i(()=>new rn,"ark-coding"),"gemini-cli":i(()=>new ct,"gemini-cli"),"codex-cli":i(()=>new ft,"codex-cli")},fn=process.env.KODAX_PROVIDER??"zhipu-coding",ho=new Map;function Di(e){if(N(e))return L[e].apiKeyEnv}i(Di,"resolveApiKeyEnvForProvider");function yo(e){let t=e??fn,n=z[t];if(!n)throw new M(`Unknown provider: ${t}. Available: ${Object.keys(z).join(", ")}`,t);let o=Di(t),r=o?process.env[o]:void 0,s=ho.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return ho.set(t,{apiKey:r,instance:a}),a}i(yo,"getProvider");function vo(e){return N(e)?!!process.env[L[e].apiKeyEnv]:!1}i(vo,"isProviderConfigured");function ko(e){return N(e)?L[e].model:null}i(ko,"getProviderModel");function bo(e,t){if(!N(e))return"unknown";let n=L[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(bo,"getProviderConfiguredReasoningCapability");function Eo(e){return N(e)?V(L[e].capabilityProfile):null}i(Eo,"getProviderConfiguredCapabilityProfile");function _o(){let e=[];for(let t of Object.keys(z)){let n=L[t];e.push({name:t,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:V(n.capabilityProfile)})}return e}i(_o,"getProviderList");function xo(e){let t=L[e];return t?t.models?[t.model,...t.models.map(n=>n.id)]:[t.model]:[]}i(xo,"getProviderModels");function N(e){return e in z}i(N,"isProviderName");function dn(e){return{id:e.model}}i(dn,"makeDefaultDescriptor");function Fe(e,t,n){let o=n.id===t.model;return{provider:e,model:n.id,displayName:n.displayName??n.id,supportsThinking:t.supportsThinking??!1,reasoningCapability:n.reasoningCapability??t.reasoningCapability,reasoningProfile:n.reasoningProfile??t.reasoningProfile,contextWindow:n.contextWindow??t.contextWindow,maxOutputTokens:n.maxOutputTokens??t.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap??t.thinkingBudgetCap,isDefault:o}}i(Fe,"effectiveCapabilities");function pt(e){let t=L[e];return t?[dn(t),...t.models??[]]:[]}i(pt,"getProviderModelDescriptors");function gt(e,t){let n=L[e];if(!n)return;if(t===n.model)return Fe(e,n,dn(n));let o=n.models?.find(r=>r.id===t);return o?Fe(e,n,o):Fe(e,n,{id:t})}i(gt,"getModelCapabilities");function mt(){let e=[];for(let t of Object.keys(z)){let n=L[t];e.push(Fe(t,n,dn(n)));for(let o of n.models??[])e.push(Fe(t,n,o))}return e}i(mt,"listBuiltinModelCapabilities");var Oi=new Set(["compat","sdk"]),Ii=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Co(e){return e.reasoningProfile??e.reasoningCapabilityV2}i(Co,"getConfiguredReasoningProfile");function $i(e){return e==="anthropic"?"count-tokens":"models-list"}i($i,"defaultVerifyStrategyForProtocol");function ht(e){if(e)return e.effortStrategy==="none"?"none":e.effortStrategy==="prompt-only"?"prompt-only":e.thinkingStrategy==="anthropic-adaptive"?"native-adaptive":e.effortStrategy==="provider-budget"?"native-budget":e.effortStrategy==="provider-toggle"?"native-toggle":"native-effort"}i(ht,"legacyCapabilityFromReasoningProfile");function Bi(e,t,n){if(n===!1)return"none";switch(t){case"none":case"prompt-only":return"none";case"native-toggle":return e==="anthropic"?"generic-thinking-toggle":void 0;case"native-budget":return e==="anthropic"?"anthropic-budget":"qwen-hybrid-thinking";case"native-effort":return e==="anthropic"?"claude-adaptive-max":"openai-chat-reasoning";case"native-adaptive":return e==="anthropic"?"claude-adaptive-max":void 0;default:return n!==!0?void 0:e==="anthropic"?"generic-thinking-toggle":void 0}}i(Bi,"legacyReasoningPresetForProtocol");function To(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(To,"isSimpleReasoning");function Li(e,t){if(e==="none")return Ve("none");let n=i(u=>u==="off"?"none":u,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,s=o.includes("none"),a=o.map(u=>u===r?{value:u,isDefault:!0}:{value:u});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...s?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{},supportsReasoningEffort:!0}}i(Li,"buildReasoningProfileFromSimple");function Po(e,t,n,o){let r=To(n)?n:void 0,s=n!==void 0&&!To(n)?n:void 0;if(o?.supportsThinking===!1)return Ve("none");if(e)return{...e,...s??{}};if(r!==void 0)return Li(r,o?.protocol??"openai");let a=t??(o?Bi(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?Ve(a,s):void 0}i(Po,"resolveCustomReasoningProfile");function yt(e){return Po(Co(e),e.reasoningPreset,e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(yt,"resolveCustomProviderReasoningProfile");function mn(e,t,n){return Po(Co(e),e.reasoningPreset,e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(mn,"resolveCustomModelReasoningProfile");function Ni(e,t,n){if(typeof e=="string")return{id:e};let o=mn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Ni,"customModelDescriptorToFull");function je(e){if(!e.name||!e.baseUrl||!e.apiKeyEnv||!e.model)throw new Error(`Custom provider requires name, baseUrl, apiKeyEnv, and model. Got: ${JSON.stringify({name:e.name,baseUrl:e.baseUrl,apiKeyEnv:e.apiKeyEnv,model:e.model})}`);if(e.protocol!=="anthropic"&&e.protocol!=="openai")throw new Error(`Unknown protocol "${e.protocol}" for custom provider "${e.name}". Must be "anthropic" or "openai".`);if(e.userAgentMode!==void 0&&!Oi.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.verifyStrategy!==void 0){if(!Ii.has(e.verifyStrategy))throw new Error(`Unknown verifyStrategy "${e.verifyStrategy}" for custom provider "${e.name}". Must be one of "count-tokens" | "models-list" | "minimal-message" | "unsupported".`);if(e.protocol==="openai"&&e.verifyStrategy==="count-tokens")throw new Error(`Custom provider "${e.name}": verifyStrategy="count-tokens" requires Anthropic protocol; got protocol="openai". Use "models-list" or "minimal-message" for OpenAI-compat.`)}}i(je,"validateCustomProviderConfig");function Fi(e){let t=e.models?.length?e.models.map(s=>Ni(s,e.protocol,e.supportsThinking)):void 0,n=yt(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??ht(n)??"none",r=e.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:e.apiKeyEnv,model:e.model,baseUrl:e.baseUrl,models:t,userAgentMode:e.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:e.capabilityProfile,contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,thinkingBudgetCap:e.thinkingBudgetCap,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??$i(e.protocol)}}i(Fi,"buildProviderConfig");function vt(e){je(e);let t=Fi(e);return e.protocol==="anthropic"?new pn(e.name,t):new gn(e.name,t)}i(vt,"createCustomProvider");var pn=class extends B{static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},gn=class extends W{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var q=new Map,hn=new Map,ji=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function Ro(e){return e.reasoningCapability!==void 0&&ji.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(Ro,"hasThinkingReasoningConfig");function Ki(e){if(e.supportsThinking!==!1)return;let t=Ro(e),n=(e.models??[]).some(o=>typeof o!="string"&&Ro(o));(t||n)&&console.warn(`[kodax] Custom provider "${e.name}": its reasoning config (provider- or per-model reasoningCapability / reasoningProfile / reasoning / reasoningPreset) is ignored because supportsThinking is false (thinking stays off). Set supportsThinking: true to enable thinking, or remove the reasoning config.`)}i(Ki,"warnOnIgnoredReasoningCapability");function So(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(je(r),t.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in z&&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.`),Ki(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>vt(r))}q.clear(),hn.clear();for(let[r,s]of n)q.set(r,s);for(let[r,s]of o)hn.set(r,s)}i(So,"registerCustomProviders");function kt(e){let t=hn.get(e);return t?t():void 0}i(kt,"getCustomProvider");function xe(e){return q.has(e)}i(xe,"isCustomProviderName");function bt(){return[...q.keys()]}i(bt,"getCustomProviderNames");function wo(){let e=[];for(let[t,n]of q){let o=!!process.env[n.apiKeyEnv],r=yt(n),s=(n.models??[]).map(u=>typeof u=="string"?u:u.id),a=n.model&&s.length?[...new Set([n.model,...s])]:[n.model];e.push({name:t,model:n.model,models:a,configured:o,reasoningCapability:n.supportsThinking===!1?"none":n.reasoningCapability??ht(r)??"none",capabilityProfile:V(n.capabilityProfile??ue),custom:!0})}return e}i(wo,"getCustomProviderList");function Mo(e){let t=q.get(e);if(!t)return;let n=(t.models??[]).map(o=>typeof o=="string"?o:o.id);return t.model&&n.length?[...new Set([t.model,...n])]:[t.model]}i(Mo,"getCustomProviderModels");function Ao(e,t,n){if(typeof e=="string")return{id:e};let o=mn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Ao,"customDescriptorToFull");function Et(e){let t=q.get(e);if(!t)return;let n={id:t.model},o=(t.models??[]).map(r=>Ao(r,t.protocol,t.supportsThinking)).filter(r=>r.id!==t.model);return[n,...o]}i(Et,"getCustomProviderModelDescriptors");function _e(e,t){let n=q.get(e);if(!n)return;let o=t===n.model,r=yt(n),s=o?{id:n.model}:(n.models??[]).map(c=>Ao(c,n.protocol,n.supportsThinking)).find(c=>c.id===t);if(!s)return;let a=n.supportsThinking===!1?r:s.reasoningProfile??r,u=n.supportsThinking===!1?"none":s.reasoningCapability??ht(a)??n.reasoningCapability??"none";return{provider:e,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(_e,"getCustomModelCapabilities");function Do(e){let t=q.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}i(Do,"getCustomProviderVerifyMetadata");function _t(){let e=[];for(let[t,n]of q){let o=_e(t,n.model);o&&e.push(o);for(let r of n.models??[]){let s=typeof r=="string"?r:r.id;if(s===n.model)continue;let a=_e(t,s);a&&e.push(a)}}return e}i(_t,"listCustomProviderModelCapabilities");var ne=new Map,Ui=0;function yn(e){let t=ne.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(yn,"getActiveRuntimeProviderRegistration");function Wi(e){for(let[t,n]of ne){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?ne.delete(t):ne.set(t,o);return}}}i(Wi,"removeRuntimeProviderRegistration");function Oo(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(N(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(xe(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Ui}`,name:n,factory:t},r=ne.get(n)??[];return ne.set(n,[...r,o]),()=>{Wi(o.id)}}i(Oo,"registerModelProvider");function xt(e){let t=yn(e);return t?t.factory():void 0}i(xt,"getRuntimeModelProvider");function Ke(e){return yn(e)!==void 0}i(Ke,"isRuntimeModelProviderName");function Tt(){return Array.from(ne.keys()).filter(e=>yn(e)!==void 0)}i(Tt,"getRuntimeModelProviderNames");function Io(){ne.clear()}i(Io,"clearRuntimeModelProviders");function vn(e){if(N(e))return z[e]();let t=xt(e);if(t)return t;let n=kt(e);if(n)return n;let o=Pt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(vn,"resolveProvider");function Ct(e){return N(e)||Ke(e)||xe(e)}i(Ct,"isKnownProvider");function Pt(){let e=Object.keys(z),t=Tt(),n=bt();return[...new Set([...e,...t,...n])]}i(Pt,"getAvailableProviderNames");function kn(e){return N(e)?pt(e):Et(e)??[]}i(kn,"resolveProviderModelDescriptors");function $o(e,t){return N(e)?gt(e,t):_e(e,t)}i($o,"resolveModelCapabilities");function Bo(){return[...mt(),..._t()]}i(Bo,"listAllModelCapabilities");function zi(e){if(N(e)){let t=L[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Ke(e))return Do(e)}i(zi,"getProviderVerifyMetadata");async function Lo(e,t){let n=zi(e);if(!n&&!Ct(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Pt().join(", ")}`};if(n?.verifyStrategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider "${e}" 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 "${e}"`};let o;try{o=vn(e)}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(t)}catch(r){return{ok:!1,error:"unknown",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(r?.message??r).slice(0,240)}}}i(Lo,"verifyProviderCredential");async function No(e,t){if(!Ct(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=kn(e);return n.length===0?{ok:!1,source:"failed",error:`Provider "${e}" has no static model list`,durationMs:0}:{ok:!0,source:"static",models:n.map(r=>r.id),durationMs:0}}i(No,"listProviderModels");var Fo={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 bn(e,t,n){let o=n?.[e]?.[t];return o||Fo[e]?.[t]}i(bn,"getCostRate");function En(e,t,n,o=0){let r=t/1e6*e.inputPer1M,s=n/1e6*e.outputPer1M,a=e.cachePer1M?o/1e6*e.cachePer1M:0;return r+s+a}i(En,"calculateCost");function Xi(){return{records:[],retries:[]}}i(Xi,"createCostTracker");function _n(e,t){let n={timestamp:Date.now(),provider:t.provider,waitMs:t.waitMs,reason:t.reason,source:t.source};return{records:e.records,retries:[...e.retries,n]}}i(_n,"recordRetry");function xn(e,t,n){let o=bn(t.provider,t.model,n),r=(t.cacheReadTokens??0)+(t.cacheWriteTokens??0),s=o?En(o,t.inputTokens,t.outputTokens,r):0,a={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,cost:s,role:t.role};return{records:[...e.records,a],retries:e.retries}}i(xn,"recordUsage");function Vi(e){let t=0,n=0,o=0,r=0,s=0,a=0,u={},c={};for(let p of e.records){t+=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 f=0;for(let p of e.retries)f+=p.waitMs;let l=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:l,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:f,byProvider:u,byRole:c}}i(Vi,"getSummary");function Rt(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Rt,"formatCost");function Gi(e){let t=[];if(t.push(`Session Cost: ${Rt(e.totalCost)} (${e.callCount} calls)`),t.push(`Tokens: ${e.totalInputTokens.toLocaleString()} in / ${e.totalOutputTokens.toLocaleString()} out`),e.totalCacheTokens>0){let r=(e.cacheHitRate*100).toFixed(0);t.push(`Cache: ${e.totalCacheTokens.toLocaleString()} tokens (${e.totalCacheReadTokens.toLocaleString()} read / ${e.totalCacheWriteTokens.toLocaleString()} write, ${r}% hit rate)`)}if(e.retryCount>0){let r=(e.retryWaitMs/1e3).toFixed(1);t.push(`Retries: ${e.retryCount} (${r}s total wait)`)}t.push("");let n=Object.entries(e.byProvider).sort((r,s)=>s[1].cost-r[1].cost);if(n.length>0){t.push("By Provider:");for(let[r,s]of n)t.push(` ${r}: ${Rt(s.cost)} (${s.calls} calls, ${s.inputTokens.toLocaleString()} in / ${s.outputTokens.toLocaleString()} out)`);t.push("")}let o=Object.entries(e.byRole).sort((r,s)=>s[1].cost-r[1].cost);if(o.length>1){t.push("By Role:");for(let[r,s]of o)t.push(` ${r}: ${Rt(s.cost)} (${s.calls} calls)`)}return t.join(`
|
|
31
|
+
`)}i(Gi,"formatCostReport");var jo={inputTokens:0,outputTokens:0,totalTokens:0},Hi=3e4;async function Ji(e){let t=new AbortController,n=e.timeoutMs??Hi,o=e.costTracker,r,s=i(c=>{r||(r=c),t.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),n),u=i(()=>s("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?s("parent"):e.abortSignal.addEventListener("abort",u,{once:!0}));try{let c=await e.provider.stream([...e.messages],[],e.system,e.reasoning??{effort:"none"},{modelOverride:e.model,onRetryAfter:i(y=>{o&&(o=_n(o,{provider:y.provider,waitMs:y.waitMs,reason:y.reason,source:y.source}))},"onRetryAfter")},t.signal),f=c.usage??jo,l=c.textBlocks??[],p=c.toolBlocks??[],g=l.map(y=>y.text).join("");return p.length>0?{text:g,usage:f,costTracker:o,stopReason:"error",error:new Error(`sideQuery: provider returned ${p.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=xn(o,{provider:e.provider.name,model:e.model,inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cachedReadTokens,cacheWriteTokens:f.cachedWriteTokens,role:e.querySource})),{text:g,usage:f,costTracker:o,stopReason:qi(c.stopReason)})}catch(c){let f=c instanceof Error?c:new Error(String(c)),l="error";return t.signal.aborted&&(l=r==="timeout"?"timeout":"aborted"),{text:"",usage:jo,costTracker:o,stopReason:l,error:f}}finally{clearTimeout(a),e.abortSignal&&e.abortSignal.removeEventListener("abort",u)}}i(Ji,"sideQuery");function qi(e){return e==="max_tokens"?"max_tokens":"end_turn"}i(qi,"mapStopReason");export{Q as a,M as b,Pe as c,St as d,wt as e,Mt as f,Ko as g,Uo as h,Wo as i,Re as j,zo as k,Xo as l,ze as m,Vo as n,Go as o,Ho as p,Jo as q,qo as r,Yo as s,le as t,Tn as u,Cn as v,It as w,fe as x,Ge as y,Ae as z,Pn as A,er as B,Rn as C,$t as D,tr as E,ir as F,se as G,ae as H,Bt as I,He as J,Je as K,In as L,$n as M,gr as N,mr as O,de as P,qe as Q,H as R,br as S,jn as T,ge as U,me as V,Ft as W,jt as X,he as Y,Kt as Z,Oe as _,B as $,W as aa,ke as ba,be as ca,Be as da,Le as ea,L as fa,z as ga,fn as ha,yo as ia,vo as ja,ko as ka,bo as la,Eo as ma,_o as na,xo as oa,N as pa,pt as qa,gt as ra,mt as sa,je as ta,vt as ua,So as va,kt as wa,xe as xa,bt as ya,wo as za,Mo as Aa,Et as Ba,_e as Ca,_t as Da,Oo as Ea,xt as Fa,Ke as Ga,Tt as Ha,Io as Ia,vn as Ja,Ct as Ka,Pt as La,kn as Ma,$o as Na,Bo as Oa,Lo as Pa,No as Qa,Fo as Ra,bn as Sa,En as Ta,Xi as Ua,_n as Va,xn as Wa,Vi as Xa,Rt as Ya,Gi as Za,Ji as _a};
|