@kodax-ai/kodax 0.7.74 → 0.7.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +21 -1
  3. package/README_CN.md +17 -1
  4. package/dist/chunks/{agent-2ABIG5NW.js → agent-7X5CFET2.js} +1 -1
  5. package/dist/chunks/argument-completer-3NHIKB4N.js +2 -0
  6. package/dist/chunks/{chunk-XMP66YWG.js → chunk-4PWPNCNK.js} +4 -4
  7. package/dist/chunks/{chunk-C7TZAT3S.js → chunk-7FJNLJLF.js} +9 -9
  8. package/dist/chunks/chunk-COQYLD4U.js +5 -0
  9. package/dist/chunks/{chunk-XXQLPTAN.js → chunk-D3T24FJW.js} +7 -7
  10. package/dist/chunks/{chunk-F7AIEHSS.js → chunk-EI4JBQKL.js} +2 -2
  11. package/dist/chunks/{chunk-KPGVY6PF.js → chunk-HGT6WQ24.js} +4 -4
  12. package/dist/chunks/{chunk-7W6KYJU2.js → chunk-HS3XHF3R.js} +4 -4
  13. package/dist/chunks/{chunk-64M5HOCA.js → chunk-IDCGNQ4H.js} +1 -1
  14. package/dist/chunks/{chunk-5GH3SVI3.js → chunk-KAY2XLCP.js} +21 -21
  15. package/dist/chunks/{chunk-XM724XAA.js → chunk-OD6LVXU6.js} +4 -4
  16. package/dist/chunks/{chunk-VK5QTHS6.js → chunk-OSF3H4RR.js} +3 -3
  17. package/dist/chunks/{chunk-MBAPT2R5.js → chunk-PXKSE54E.js} +1 -1
  18. package/dist/chunks/{chunk-QH56WEHK.js → chunk-RDXRM3UI.js} +1 -1
  19. package/dist/chunks/{chunk-MVCAFD6M.js → chunk-SMT2JSM3.js} +1 -1
  20. package/dist/chunks/{chunk-VPURXE2F.js → chunk-TGMBHGZO.js} +119 -119
  21. package/dist/chunks/{chunk-UJS7JAO6.js → chunk-VWSLC2WO.js} +1 -1
  22. package/dist/chunks/{chunk-GAFFYJU3.js → chunk-Y3AMP22L.js} +12 -12
  23. package/dist/chunks/compaction-config-7J2XE35D.js +2 -0
  24. package/dist/chunks/{construction-bootstrap-BKNPJI7O.js → construction-bootstrap-5F5KF2BZ.js} +1 -1
  25. package/dist/chunks/{dist-EVEJAII2.js → dist-2RA7LSH3.js} +1 -1
  26. package/dist/chunks/{dist-6EK4H7TP.js → dist-URKXBOC6.js} +1 -1
  27. package/dist/chunks/host-RKZ2OGFT.js +2 -0
  28. package/dist/chunks/run-manager-7RM4HEH6.js +2 -0
  29. package/dist/chunks/{utils-GTJLL4GT.js → utils-X3TEH6IO.js} +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/kodax_cli.js +825 -825
  32. package/dist/provider-capabilities.json +35 -7
  33. package/dist/runtime-worker.js +756 -756
  34. package/dist/sdk-a2a.js +1 -1
  35. package/dist/sdk-agent.js +1 -1
  36. package/dist/sdk-coding.js +1 -1
  37. package/dist/sdk-experimental-memory.js +1 -1
  38. package/dist/sdk-llm.js +1 -1
  39. package/dist/sdk-mcp.js +1 -1
  40. package/dist/sdk-media.js +1 -1
  41. package/dist/sdk-repl.js +1 -1
  42. package/dist/sdk-runtime.d.ts +2 -1
  43. package/dist/sdk-runtime.js +1 -1
  44. package/dist/sdk-session.js +1 -1
  45. package/dist/sdk-skills.js +1 -1
  46. package/docs/SDK_EMBEDDER_GUIDE.md +144 -110
  47. package/package.json +1 -1
  48. package/dist/chunks/argument-completer-C45DEO34.js +0 -2
  49. package/dist/chunks/chunk-PP53SIIL.js +0 -5
  50. package/dist/chunks/compaction-config-QYCDOW3Q.js +0 -2
  51. package/dist/chunks/host-KS4TJKWQ.js +0 -2
  52. package/dist/chunks/run-manager-L7MKGQNX.js +0 -2
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as i}from"./chunk-ONUPGMER.js";import{AsyncLocalStorage as qo}from"node:async_hooks";var He=new qo;function Yo(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");return He.run({provider:e,credential:t},n)}i(Yo,"runWithProviderCredential");function Qo(e){let t=He.getStore();return t?.provider===e?t.credential:void 0}i(Qo,"getScopedProviderCredential");function fe(e,t){let n=He.getStore();return n?n.provider===e?n.credential:void 0:t}i(fe,"resolveProviderCredential");function Zo(e){let t=He.getStore()?.credential;return t?Me(e,t,new WeakMap):e}i(Zo,"redactScopedProviderCredential");function Me(e,t,n){if(typeof e=="string")return e.split(t).join("[REDACTED_CREDENTIAL]");if(e===null||typeof e!="object")return e;let o=n.get(e);if(o!==void 0)return o;if(e instanceof Error){let s=new Error(Me(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=Me(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(Me(a,t,n));return s}let r={};n.set(e,r);for(let[s,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let u=s.split(t).join("[REDACTED_CREDENTIAL]");r[u]=Me(a.value,t,n)}return r}i(Me,"redactCredentialValue");var Q=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},R=class extends Q{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Re=class extends Q{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},$t=class extends Q{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Je=class extends R{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Nt=class extends Q{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Lt=32768,er=32e3,tr=64e3,nr=.5;function Ae(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(Ae,"timeoutSecToMs");function or(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(or,"parseTimeoutSecEnvMs");function rr(e){if(!e)return;let t={requestTimeoutMs:Ae(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Ae(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Ae(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Ae(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(rr,"resolveLlmTimeoutConfig");function qe(e,t){return`${e}/${t??""}`}i(qe,"capabilityCacheKey");function Bt(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(Bt,"narrowReasoningProfile");function ir(e,t,n){return e[qe(t,n)]?.rejected??[]}i(ir,"getRejectedEfforts");function sr(e,t,n,o,r,s){let a=qe(t,n),u=e[a],l=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:l,source:r,updatedAt:s}}}i(sr,"addRejectedEffort");function ar(e,t,n){if(!t)return{};let o={...e};return delete o[qe(t,n)],o}i(ar,"removeCacheEntry");function ur(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(l=>typeof l=="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(ur,"sanitizeCapabilityCache");var cr=["off","auto","quick","balanced","deep"],de=["auto","none","low","medium","high"],In={low:6e3,medium:1e4,high:2e4},On=4096,jt=[{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"}],Ft=[{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"}],lr=[{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 Qe(e,t={}){return{...fr(e),...t,reasoningPreset:e}}i(Qe,"createReasoningProfileFromPreset");function fr(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Ft,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:Ft,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:Ft,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:jt,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:[{value:"none"},{value:"low",isUserVisible:!1},{value:"high",isUserVisible:!1},{value:"max",isDefault:!0}],effortAliases:{minimal:"low",minimum:"low",light:"low",medium:"high",xhigh:"max",ultra:"max"},disabledEfforts:["none"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:lr,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:jt,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:jt,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(fr,"createBaseReasoningProfileFromPreset");function Ut(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Ut,"getReasoningCapability");function pe(e){return Ze(e).enabled}i(pe,"isReasoningEnabled");function Ze(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?$e(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":e===void 0?"omitted":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(Ze,"normalizeReasoningRequest");function $e(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($e,"normalizeReasoningEffortValue");function $n(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i($n,"mapLegacyReasoningModeToEffortIntent");function dr(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(dr,"effortToLegacyReasoningMode");function Nn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=$e(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(Nn,"parseReasoningEffortEnv");function Ne(e){let t=Nn(e.envEffort),n=[];De(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),De(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:$n(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),De(n,e.modelDefaultEffort??e.capability?.defaultEffort??Ie(e.capability),"model-default",!1),De(n,e.providerDefaultEffort,"provider-default",!1),De(n,e.fallbackEffort??Oe(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:gr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Ln(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(Ne,"resolveReasoningEffort");function pr(e){let t=e.currentEffort?$e(e.currentEffort):void 0;if(t&&Bn(t,e.capability))return{effectiveEffort:Ye(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??Ie(e.capability)??Kt(e.capability)??Oe(e.capability),o=n&&Ye(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(pr,"resolveReasoningEffortForModelSwitch");function De(e,t,n,o){if(t===void 0)return;let r=$e(t);e.push({value:r,source:n,isExplicit:o})}i(De,"pushEffortCandidate");function gr(e,t){let n=e.find(o=>o.value!=="auto");return n?Ln(n.value,t,n.isExplicit):Ie(t)??Oe(t)}i(gr,"resolveAutoEffectiveEffort");function Ln(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Ie(t)??Kt(t)??Oe(t)??e}if(e==="none")return e;if(Bn(e,t))return Ye(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Ie(t)??Kt(t)??Oe(t)??e}i(Ln,"validateReasoningEffort");function Ye(e,t){return t?.effortAliases?.[e]??e}i(Ye,"applyEffortAlias");function Bn(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=mr(t);return n.length===0?de.includes(e):n.includes(e)||n.includes(Ye(e,t))}i(Bn,"isSupportedReasoningEffort");function mr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(mr,"getSupportedEffortValues");function Ie(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(Ie,"getDefaultPresetValue");function Kt(e){let t=e?.supportedEfforts?.filter(hr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Kt,"getMiddleVisiblePresetValue");function hr(e){return e.isUserVisible!==!1}i(hr,"isUserVisiblePreset");function Oe(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(Oe,"getFallbackEffortForCapability");function yr(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(yr,"getDefaultThinkingDepthForMode");function se(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(se,"effortToThinkingDepth");function ae(e,t,n="unknown"){if(t==="off")return 0;let o={...In,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(ae,"resolveThinkingBudget");function ue(e,t,n=On){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(ue,"clampThinkingBudget");function Wt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(Wt,"mapDepthToOpenAIReasoningEffort");function jn(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):jn(t.cause)}i(jn,"getStatus");function vr(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(vr,"getMessage");var kr=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],Er=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],br=["minimal","none","low","medium","high","xhigh","max"];function xr(e,t){for(let n of br)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(xr,"extractRejectedEffort");function zt(e,t){let n=jn(e);if(n!==400&&n!==422)return null;let o=vr(e);if(!o)return null;let r=kr.some(u=>o.includes(u)),s=Er.some(u=>o.includes(u));if(!r||!s)return null;let a=xr(o,t);return a?{rejectedEffort:a}:null}i(zt,"classifyReasoningEffortRejection");function Fn(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(Fn,"readHeader");function Kn(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(Kn,"parsePositiveNumber");function _r(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(_r,"parseHttpDate");function et(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=Kn(Fn(e,"retry-after-ms"));if(a!==void 0){let m=Math.min(a,r);return{type:"header",waitMs:Math.round(m),source:"retry-after-ms",cappedFromHeader:m!==a}}let u=Fn(e,"retry-after");if(u!==void 0&&u.trim().length>0){let m=Kn(u);if(m!==void 0){let b=m*1e3,d=Math.min(b,r);return{type:"header",waitMs:Math.round(d),source:"retry-after-seconds",cappedFromHeader:d!==b}}let p=_r(u,s);if(p!==void 0){let b=Math.min(p,r);return{type:"header",waitMs:Math.round(b),source:"retry-after-date",cappedFromHeader:b!==p}}}let l=n*Math.pow(2,Math.max(0,t.attempt)),f=Math.min(l,o),g=t.withJitter!==!1?Math.random()*.25*f:0;return{type:"backoff",waitMs:Math.round(f+g),source:"exponential-backoff",attempt:t.attempt}}i(et,"parseRetryAfter");function tt(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(tt,"extractHeadersFromError");import{AsyncLocalStorage as Cr}from"node:async_hooks";var Un=new Cr,Wn=8,zn=32;function Tr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(Tr,"parsePositiveInt");function Pr(){let e=ge()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:Tr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??Wn;return Math.max(1,Math.min(zn,t))}i(Pr,"resolveWorkflowMaxConcurrency");function Sr(e,t){return Un.run(e,t)}i(Sr,"runWithScopedConfig");function ge(){return Un.getStore()}i(ge,"getRunScopedConfig");var ce={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Xn={...ce,multimodalSupport:"image-input"},Le={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Vn={...Le,multimodalSupport:"image-input"};function nt(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(nt,"normalizeCapabilityProfile");function G(e){return{...nt(e)}}i(G,"cloneCapabilityProfile");function wr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(wr,"parseEnvInt");function Mr(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(Mr,"shouldLowerAutoReasoningEffort");function rt(){return new DOMException("Request aborted","AbortError")}i(rt,"abortError");function Rr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(rt()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(rt())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(Rr,"waitForRetryDelay");function Xt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Xt,"normalizeHttpStatus");function Gn(e){if(!e||typeof e!="object")return;let t=e;return Xt(t.status)??Xt(t.statusCode)??Xt(t.code)??Gn(t.cause)}i(Gn,"extractHttpStatus");function Hn(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:Hn(t.cause)}i(Hn,"extractErrorCode");function ot(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(ot,"getErrorMessage");var J=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=ge()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??wr(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 R(`${this.name} does not support non-streaming fallback`)}isConfigured(){return fe(this.name,process.env[this.config.apiKeyEnv])!==void 0}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){let r=o.wireModel?this.config.models?.find(s=>s.id===o.wireModel):void 0;return r?{...r,...o}:o}if(n===this.config.model)return{id:this.config.model}}getWireModelId(t){let n=t??this.config.model;return this.getModelDescriptor(n)?.wireModel??n}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return G(this.config.capabilityProfile??ce)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Ut(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=ot(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported")||n.includes("incompatible"))?!0:this.isServerError(t)}isServerError(t){let n=Gn(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=ot(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=fe(this.name,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 Ze(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=de.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let c=n?`/${n}`:"";throw new R(`${this.name}${c} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${de.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let c=n?`/${n}`:"";throw new R(`${this.name}${c} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(c=>c.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let l=n?`/${n}`:"",f=a.length>0?a.join(", "):de.join(", ");throw new R(`${this.name}${l} 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 R(`${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(Mr(n)){let s=Ne({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=tt(t);if(!n)return;let o=et(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=ot(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=ot(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 l=0;l<o;l++)try{let f=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,f}catch(f){if(this.isContextOverflowError(f)&&!this.maxOutputTokensOverride){let c=this.parseContextOverflow(f);if(c){this.maxOutputTokensOverride=c,r?.(l+1,o,0);continue}}if(this.isRateLimitError(f)){if(l===o-1)throw new Re(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let c=tt(f)??{},g=et(c,{attempt:l,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),m=g.waitMs,p=this.classifyRateLimitReason(f);if(s?.({provider:this.name,waitMs:m,reason:p,source:g.source,attempt:l+1,maxAttempts:o}),r?r(l+1,o,m):s||console.log(`[Rate Limit] Retrying in ${m/1e3}s (${l+1}/${o})...`),n?.aborted||(await Rr(m,n),n?.aborted))throw rt();continue}if(a&&!u){let c=zt(f,a.effort);if(c){a.onRejected?.({provider:this.name,model:a.model,effort:c.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let c=zt(f,a.effort);if(c)throw this.suppressReasoningEffort=!1,new Je(`${this.name} rejected reasoning effort "${c.rejectedEffort}" even after dropping it.`,this.name,c.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 c=Hn(f);throw(c==="ECONNRESET"||c==="EPIPE")&&this.onStaleConnection(),new R(`${this.name} API error: ${f.message}`,this.name)}throw f}throw new Q("Unexpected end of withRateLimit")}};import Br from"@anthropic-ai/sdk";import{parse as Ar}from"partial-json";function me(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=Ar(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(me,"parseToolInputWithSalvageTracked");function Dr(e){return me(e).value}i(Dr,"parseToolInputWithSalvage");var Ir={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":Ir[e.trim().toLowerCase()]??"unknown"}i(Jn,"classifyStopReason");function he(e){let t=Jn(e);return t==="end"||t==="tool"||t==="paused"}i(he,"isCleanStop");async function ye(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 l=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-l,approxTokensSpent:t.approxTokensSpent}}catch(f){return Vt(f,{strategy:e.strategy,durationMs:Date.now()-l,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(ye,"runVerifyCredential");function Or(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(Or,"redactKeyMaterial");function Vt(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=Or(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(Vt,"classifyVerifyError");function Gt(e,t){let n=e[e.length-1];if(n&&ve(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Gt,"insertCacheBoundary");function ve(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(ve,"isCacheBoundary");function Ht(e,t){let n=[];for(let o of e){if(ve(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(Ht,"lowerCacheBoundaries");function Be(e){return e.filter(t=>!ve(t))}i(Be,"stripCacheBoundaries");import{readFile as $r}from"node:fs/promises";import Nr from"node:path";var Lr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function it(e,t){return t??Lr[Nr.extname(e).toLowerCase()]??"image/png"}i(it,"resolveImageMediaType");async function st(e){return(await $r(e)).toString("base64")}i(st,"readImageFileAsBase64");async function qn(e,t){let n=it(e,t),o=await st(e);return`data:${n};base64,${o}`}i(qn,"buildImageDataUrl");var jr="KodaX",Fr="effort-2025-11-24";function Yn(e,t){if(t===void 0||t.length===0)return e;let n={type:"text",text:t},o=e.at(-1);if(o?.role!=="user")return[...e,{role:"user",content:[n]}];let r=typeof o.content=="string"?[{type:"text",text:o.content},n]:[...o.content,n];return[...e.slice(0,-1),{...o,content:r}]}i(Yn,"appendAnthropicEphemeralSuffix");function Kr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":jr}}i(Kr,"getAnthropicCompatDefaultHeaders");function Jt(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(l=>!Number.isFinite(l)||l<0))return{inputTokens:u,outputTokens:a,totalTokens:u+a,cachedReadTokens:s||void 0,cachedWriteTokens:r||void 0}}i(Jt,"normalizeAnthropicUsage");function qt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(qt,"isRecord");function Ur(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Ur,"selectAnthropicOutputEffort");function Qn(e,t){let n=Ur(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...qt(r)?r:{},effort:n}}i(Qn,"applyAnthropicOutputEffort");function Zn(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...qt(o)?o:{},effort:t}}i(Zn,"setAnthropicOutputEffort");function Wr(e){let n=e.output_config;return qt(n)&&typeof n.effort=="string"}i(Wr,"hasAnthropicOutputEffort");var $=class extends J{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=Kr(this.config);return new Br({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&&Wr(t)?{"anthropic-beta":Fr}: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,l=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(u==="kimi-k3"){let f=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!f){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:f?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(n.supportsDisabledThinking===!0||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&&(l.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Zn(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&&(l.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Zn(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)??ae(this.config,se(o.effort),o.taskType),l=this.getEffectiveThinkingBudgetCap(r),f=l!==void 0?Math.min(u,l):u;return ue(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 ye({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}isPromptCacheDisabled(){let t=ge()?.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=Gt([{type:"text",text:t}],"system");return Ht(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 c=t.length-1;c>=0;c--)if(t[c].role==="user"&&(n+=1,n===2)){o=c;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"}},l=[...s.slice(0,-1),u],f=t.slice();return f[o]={...r,content:l},f}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),l=s?.modelOverride??this.config.model,f=this.getWireModelId(l);this.validateExplicitReasoningEffort(u,l);let c=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),g=Yn(this.applyCacheControlToMessages(await this.convertMessages(t,l)),s?.ephemeralSuffix?.content),m=u.enabled?this.getReasoningCapability(l):"none",p=this.getReasoningProfile(l),b=p?["profile","none"]:u.enabled?this.getReasoningFallbackChain(m).filter(_=>_==="native-budget"||_==="native-toggle"||_==="native-adaptive"||_==="none"):["none"],d=!!s?.forcedToolName,T=i(_=>{let S={model:f,max_tokens:c,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:g,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&d&&(S.tool_choice={type:"tool",name:s.forcedToolName}),_!=="none")if(_==="profile"&&p)this.applyReasoningProfile(S,p,u,l,c);else if(_==="native-budget"){let I=ae(this.config,se(u.effort),u.taskType);S.thinking={type:"enabled",budget_tokens:ue(I,c)}}else _==="native-toggle"?S.thinking={type:"enabled"}:_==="native-adaptive"&&(S.thinking={type:"adaptive"},Qn(S,u));return S},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let h=[],v=[],E=[],k,P=null,y="",C="",A="",F="",W="",U="",Y="",te=!1,M,D=Date.now(),V=Date.now(),re,Se;for(let _ of b){for(;!re;)try{let S=T(_);re=await this.client.messages.create(S,this.buildMessageCreateOptions(S,l,a))}catch(S){if(Se=S,d&&this.shouldFallbackForForcedToolChoiceError(S)){d=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let I=_==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:_==="native-budget"?["budget_tokens","thinking"]:_==="native-toggle"?["thinking"]:_==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(S,...I))throw S;break}if(re)break}if(!re)throw Se??new R("All reasoning capability attempts failed without a captured error",this.name);let we=Date.now(),Ge=0,w=0,L=3e4;for await(let _ of re){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let S=Date.now(),I=S-we;if(I>L&&(Ge++,w+=I,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(I/1e3)}s gap before ${_.type}`,{stallCount:Ge,totalStallMs:w,eventType:_.type})),we=S,_.type==="content_block_start"||_.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),_.type==="content_block_start"){D=Date.now();let x=_.content_block;P=x.type,process.env.KODAX_DEBUG_TOOL_STREAM&&x.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:x.type,id:x.id,name:x.name}),x.type==="thinking"?(C="",A=x.signature??""):x.type==="redacted_thinking"?(P="redacted_thinking",F=x.data??""):x.type==="text"?y="":x.type==="tool_use"&&(W=x.id,U=x.name,Y="")}else if(_.type==="content_block_delta"){D=Date.now();let x=_.delta;x.type==="thinking_delta"?(C+=x.thinking??"",s?.onThinkingDelta?.(x.thinking??"")):x.type==="text_delta"?(y+=x.text??"",s?.onTextDelta?.(x.text??"")):x.type==="input_json_delta"&&(Y+=x.partial_json??"",s?.onToolInputDelta?.(U,x.partial_json??"",W?{toolId:W}:void 0))}else if(_.type==="content_block_stop"){if(D=Date.now(),P==="thinking")C&&(E.push({type:"thinking",thinking:C,signature:A}),s?.onThinkingEnd?.(C));else if(P==="redacted_thinking")F&&E.push({type:"redacted_thinking",data:F}),F="";else if(P==="text")y&&h.push({type:"text",text:y});else if(P==="tool_use")if(!W||!U)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(W),name:JSON.stringify(U),input:Y.slice(0,100)});else{let x=me(Y);v.push({type:"tool_use",id:W,name:U,input:x.value,...x.salvaged?{_salvaged:!0,_truncated:!0}:{}})}P=null}else if(_.type==="message_stop"){if(te=!0,D=Date.now(),process.env.KODAX_DEBUG_STREAM){let x=Date.now()-V;this.logStreamDiagnostic(`[Stream] message_stop received after ${x}ms`)}}else if(_.type==="message_delta"){D=Date.now(),k=Jt(_.usage,k);let x=_.delta;x?.stop_reason&&(M=x.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${M}`))}else _.type==="message_start"&&(D=Date.now(),k=Jt(_.message?.usage,k),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!te){let _=Date.now()-V,S=Date.now()-D;if(a?.aborted){let I=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:_,lastEventAge:S,reason:I,textBlocks:h.length,toolBlocks:v.length,thinkingBlocks:E.length}),new DOMException(I,"AbortError")}if(!M){let I=new Error(`Stream incomplete: message_stop event not received. Duration: ${_}ms, Last event: ${S}ms ago. This may indicate a network disconnection or API timeout.`);throw I.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:_,lastEventAge:S,textBlocks:h.length,toolBlocks:v.length,thinkingBlocks:E.length}),I}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:_,lastEventAge:S,stopReason:M,textBlocks:h.length,toolBlocks:v.length,thinkingBlocks:E.length})}let O=he(M)?v.map(({_truncated:_,...S})=>S):v;return{textBlocks:h,toolBlocks:O,thinkingBlocks:E,usage:k,stopReason:M}},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),l=s?.modelOverride??this.config.model,f=this.getWireModelId(l);this.validateExplicitReasoningEffort(u,l);let c=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),g=Yn(this.applyCacheControlToMessages(await this.convertMessages(t,l)),s?.ephemeralSuffix?.content),m=u.enabled?this.getReasoningCapability(l):"none",p=this.getReasoningProfile(l),b=p?["profile","none"]:u.enabled?this.getReasoningFallbackChain(m).filter(y=>y==="native-budget"||y==="native-toggle"||y==="native-adaptive"||y==="none"):["none"],d=!!s?.forcedToolName,T=i(y=>{let C={model:f,max_tokens:c,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:g,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&d&&(C.tool_choice={type:"tool",name:s.forcedToolName}),y!=="none")if(y==="profile"&&p)this.applyReasoningProfile(C,p,u,l,c);else if(y==="native-budget"){let A=ae(this.config,se(u.effort),u.taskType);C.thinking={type:"enabled",budget_tokens:ue(A,c)}}else y==="native-toggle"?C.thinking={type:"enabled"}:y==="native-adaptive"&&(C.thinking={type:"adaptive"},Qn(C,u));return C},"buildRequest"),h,v;for(let y of b){for(;!h;)try{let C=T(y);h=await this.client.messages.create(C,this.buildMessageCreateOptions(C,l,a))}catch(C){if(v=C,d&&this.shouldFallbackForForcedToolChoiceError(C)){d=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let A=y==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:y==="native-budget"?["budget_tokens","thinking"]:y==="native-toggle"?["thinking"]:y==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(C,...A))throw C;break}if(h)break}if(!h)throw v??new R("All reasoning capability attempts failed without a captured error",this.name);let E=[],k=[],P=[];for(let y of h.content)y.type==="text"?(E.push({type:"text",text:y.text}),s?.onTextDelta?.(y.text)):y.type==="thinking"?(P.push({type:"thinking",thinking:y.thinking,signature:y.signature??""}),s?.onThinkingDelta?.(y.thinking),s?.onThinkingEnd?.(y.thinking)):y.type==="redacted_thinking"?P.push({type:"redacted_thinking",data:y.data}):y.type==="tool_use"&&k.push({type:"tool_use",id:y.id,name:y.name,input:typeof y.input=="object"&&y.input!==null?y.input:{}});return{textBlocks:E,toolBlocks:k,thinkingBlocks:P,usage:Jt(h.usage),stopReason:h.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(ve(n))throw new R("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(`
2
+ import{a as i}from"./chunk-ONUPGMER.js";import{AsyncLocalStorage as qo}from"node:async_hooks";var He=new qo;function Yo(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");return He.run({provider:e,credential:t},n)}i(Yo,"runWithProviderCredential");function Qo(e){let t=He.getStore();return t?.provider===e?t.credential:void 0}i(Qo,"getScopedProviderCredential");function fe(e,t){let n=He.getStore();return n?n.provider===e?n.credential:void 0:t}i(fe,"resolveProviderCredential");function Zo(e){let t=He.getStore()?.credential;return t?Me(e,t,new WeakMap):e}i(Zo,"redactScopedProviderCredential");function Me(e,t,n){if(typeof e=="string")return e.split(t).join("[REDACTED_CREDENTIAL]");if(e===null||typeof e!="object")return e;let o=n.get(e);if(o!==void 0)return o;if(e instanceof Error){let s=new Error(Me(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=Me(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(Me(a,t,n));return s}let r={};n.set(e,r);for(let[s,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let u=s.split(t).join("[REDACTED_CREDENTIAL]");r[u]=Me(a.value,t,n)}return r}i(Me,"redactCredentialValue");var Q=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},R=class extends Q{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Re=class extends Q{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},$t=class extends Q{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Je=class extends R{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Nt=class extends Q{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Lt=32768,er=32e3,tr=64e3,nr=.5;function Ae(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(Ae,"timeoutSecToMs");function or(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(or,"parseTimeoutSecEnvMs");function rr(e){if(!e)return;let t={requestTimeoutMs:Ae(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Ae(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Ae(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Ae(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(rr,"resolveLlmTimeoutConfig");function qe(e,t){return`${e}/${t??""}`}i(qe,"capabilityCacheKey");function Bt(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(Bt,"narrowReasoningProfile");function ir(e,t,n){return e[qe(t,n)]?.rejected??[]}i(ir,"getRejectedEfforts");function sr(e,t,n,o,r,s){let a=qe(t,n),u=e[a],l=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:l,source:r,updatedAt:s}}}i(sr,"addRejectedEffort");function ar(e,t,n){if(!t)return{};let o={...e};return delete o[qe(t,n)],o}i(ar,"removeCacheEntry");function ur(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(l=>typeof l=="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(ur,"sanitizeCapabilityCache");var cr=["off","auto","quick","balanced","deep"],de=["auto","none","low","medium","high"],In={low:6e3,medium:1e4,high:2e4},On=4096,jt=[{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"}],Ft=[{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"}],lr=[{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 Qe(e,t={}){return{...fr(e),...t,reasoningPreset:e}}i(Qe,"createReasoningProfileFromPreset");function fr(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Ft,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:Ft,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:Ft,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:jt,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:[{value:"none",description:"Disable thinking"},{value:"low",description:"Low thinking effort"},{value:"high",description:"High thinking effort",isDefault:!0},{value:"max",description:"Maximum thinking effort"}],effortAliases:{minimal:"low",minimum:"low",light:"low",medium:"high",xhigh:"max",ultra:"max"},disabledEfforts:["none"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:lr,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:jt,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:jt,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(fr,"createBaseReasoningProfileFromPreset");function Ut(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Ut,"getReasoningCapability");function pe(e){return Ze(e).enabled}i(pe,"isReasoningEnabled");function Ze(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?$e(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":e===void 0?"omitted":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(Ze,"normalizeReasoningRequest");function $e(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($e,"normalizeReasoningEffortValue");function $n(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i($n,"mapLegacyReasoningModeToEffortIntent");function dr(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(dr,"effortToLegacyReasoningMode");function Nn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=$e(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(Nn,"parseReasoningEffortEnv");function Ne(e){let t=Nn(e.envEffort),n=[];De(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),De(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:$n(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),De(n,e.modelDefaultEffort??e.capability?.defaultEffort??Ie(e.capability),"model-default",!1),De(n,e.providerDefaultEffort,"provider-default",!1),De(n,e.fallbackEffort??Oe(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:gr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Ln(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(Ne,"resolveReasoningEffort");function pr(e){let t=e.currentEffort?$e(e.currentEffort):void 0;if(t&&Bn(t,e.capability))return{effectiveEffort:Ye(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??Ie(e.capability)??Kt(e.capability)??Oe(e.capability),o=n&&Ye(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(pr,"resolveReasoningEffortForModelSwitch");function De(e,t,n,o){if(t===void 0)return;let r=$e(t);e.push({value:r,source:n,isExplicit:o})}i(De,"pushEffortCandidate");function gr(e,t){let n=e.find(o=>o.value!=="auto");return n?Ln(n.value,t,n.isExplicit):Ie(t)??Oe(t)}i(gr,"resolveAutoEffectiveEffort");function Ln(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Ie(t)??Kt(t)??Oe(t)??e}if(e==="none")return e;if(Bn(e,t))return Ye(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Ie(t)??Kt(t)??Oe(t)??e}i(Ln,"validateReasoningEffort");function Ye(e,t){return t?.effortAliases?.[e]??e}i(Ye,"applyEffortAlias");function Bn(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=mr(t);return n.length===0?de.includes(e):n.includes(e)||n.includes(Ye(e,t))}i(Bn,"isSupportedReasoningEffort");function mr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(mr,"getSupportedEffortValues");function Ie(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(Ie,"getDefaultPresetValue");function Kt(e){let t=e?.supportedEfforts?.filter(hr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Kt,"getMiddleVisiblePresetValue");function hr(e){return e.isUserVisible!==!1}i(hr,"isUserVisiblePreset");function Oe(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(Oe,"getFallbackEffortForCapability");function yr(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(yr,"getDefaultThinkingDepthForMode");function se(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(se,"effortToThinkingDepth");function ae(e,t,n="unknown"){if(t==="off")return 0;let o={...In,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(ae,"resolveThinkingBudget");function ue(e,t,n=On){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(ue,"clampThinkingBudget");function Wt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(Wt,"mapDepthToOpenAIReasoningEffort");function jn(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):jn(t.cause)}i(jn,"getStatus");function vr(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(vr,"getMessage");var kr=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],Er=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],br=["minimal","none","low","medium","high","xhigh","max"];function xr(e,t){for(let n of br)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(xr,"extractRejectedEffort");function zt(e,t){let n=jn(e);if(n!==400&&n!==422)return null;let o=vr(e);if(!o)return null;let r=kr.some(u=>o.includes(u)),s=Er.some(u=>o.includes(u));if(!r||!s)return null;let a=xr(o,t);return a?{rejectedEffort:a}:null}i(zt,"classifyReasoningEffortRejection");function Fn(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(Fn,"readHeader");function Kn(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(Kn,"parsePositiveNumber");function _r(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(_r,"parseHttpDate");function et(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=Kn(Fn(e,"retry-after-ms"));if(a!==void 0){let m=Math.min(a,r);return{type:"header",waitMs:Math.round(m),source:"retry-after-ms",cappedFromHeader:m!==a}}let u=Fn(e,"retry-after");if(u!==void 0&&u.trim().length>0){let m=Kn(u);if(m!==void 0){let b=m*1e3,d=Math.min(b,r);return{type:"header",waitMs:Math.round(d),source:"retry-after-seconds",cappedFromHeader:d!==b}}let p=_r(u,s);if(p!==void 0){let b=Math.min(p,r);return{type:"header",waitMs:Math.round(b),source:"retry-after-date",cappedFromHeader:b!==p}}}let l=n*Math.pow(2,Math.max(0,t.attempt)),f=Math.min(l,o),g=t.withJitter!==!1?Math.random()*.25*f:0;return{type:"backoff",waitMs:Math.round(f+g),source:"exponential-backoff",attempt:t.attempt}}i(et,"parseRetryAfter");function tt(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(tt,"extractHeadersFromError");import{AsyncLocalStorage as Cr}from"node:async_hooks";var Un=new Cr,Wn=8,zn=32;function Tr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(Tr,"parsePositiveInt");function Pr(){let e=ge()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:Tr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??Wn;return Math.max(1,Math.min(zn,t))}i(Pr,"resolveWorkflowMaxConcurrency");function wr(e,t){return Un.run(e,t)}i(wr,"runWithScopedConfig");function ge(){return Un.getStore()}i(ge,"getRunScopedConfig");var ce={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Xn={...ce,multimodalSupport:"image-input"},Le={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Vn={...Le,multimodalSupport:"image-input"};function nt(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(nt,"normalizeCapabilityProfile");function G(e){return{...nt(e)}}i(G,"cloneCapabilityProfile");function Sr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(Sr,"parseEnvInt");function Mr(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(Mr,"shouldLowerAutoReasoningEffort");function rt(){return new DOMException("Request aborted","AbortError")}i(rt,"abortError");function Rr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(rt()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(rt())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(Rr,"waitForRetryDelay");function Xt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Xt,"normalizeHttpStatus");function Gn(e){if(!e||typeof e!="object")return;let t=e;return Xt(t.status)??Xt(t.statusCode)??Xt(t.code)??Gn(t.cause)}i(Gn,"extractHttpStatus");function Hn(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:Hn(t.cause)}i(Hn,"extractErrorCode");function ot(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(ot,"getErrorMessage");var J=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=ge()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??Sr(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 R(`${this.name} does not support non-streaming fallback`)}isConfigured(){return fe(this.name,process.env[this.config.apiKeyEnv])!==void 0}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){let r=o.wireModel?this.config.models?.find(s=>s.id===o.wireModel):void 0;return r?{...r,...o}:o}if(n===this.config.model)return{id:this.config.model}}getWireModelId(t){let n=t??this.config.model;return this.getModelDescriptor(n)?.wireModel??n}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return G(this.config.capabilityProfile??ce)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Ut(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=ot(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported")||n.includes("incompatible"))?!0:this.isServerError(t)}isServerError(t){let n=Gn(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=ot(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=fe(this.name,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 Ze(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=de.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let c=n?`/${n}`:"";throw new R(`${this.name}${c} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${de.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let c=n?`/${n}`:"";throw new R(`${this.name}${c} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(c=>c.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let l=n?`/${n}`:"",f=a.length>0?a.join(", "):de.join(", ");throw new R(`${this.name}${l} 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 R(`${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(Mr(n)){let s=Ne({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=tt(t);if(!n)return;let o=et(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=ot(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=ot(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 l=0;l<o;l++)try{let f=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,f}catch(f){if(this.isContextOverflowError(f)&&!this.maxOutputTokensOverride){let c=this.parseContextOverflow(f);if(c){this.maxOutputTokensOverride=c,r?.(l+1,o,0);continue}}if(this.isRateLimitError(f)){if(l===o-1)throw new Re(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let c=tt(f)??{},g=et(c,{attempt:l,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),m=g.waitMs,p=this.classifyRateLimitReason(f);if(s?.({provider:this.name,waitMs:m,reason:p,source:g.source,attempt:l+1,maxAttempts:o}),r?r(l+1,o,m):s||console.log(`[Rate Limit] Retrying in ${m/1e3}s (${l+1}/${o})...`),n?.aborted||(await Rr(m,n),n?.aborted))throw rt();continue}if(a&&!u){let c=zt(f,a.effort);if(c){a.onRejected?.({provider:this.name,model:a.model,effort:c.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let c=zt(f,a.effort);if(c)throw this.suppressReasoningEffort=!1,new Je(`${this.name} rejected reasoning effort "${c.rejectedEffort}" even after dropping it.`,this.name,c.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 c=Hn(f);throw(c==="ECONNRESET"||c==="EPIPE")&&this.onStaleConnection(),new R(`${this.name} API error: ${f.message}`,this.name)}throw f}throw new Q("Unexpected end of withRateLimit")}};import Br from"@anthropic-ai/sdk";import{parse as Ar}from"partial-json";function me(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=Ar(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(me,"parseToolInputWithSalvageTracked");function Dr(e){return me(e).value}i(Dr,"parseToolInputWithSalvage");var Ir={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":Ir[e.trim().toLowerCase()]??"unknown"}i(Jn,"classifyStopReason");function he(e){let t=Jn(e);return t==="end"||t==="tool"||t==="paused"}i(he,"isCleanStop");async function ye(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 l=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-l,approxTokensSpent:t.approxTokensSpent}}catch(f){return Vt(f,{strategy:e.strategy,durationMs:Date.now()-l,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(ye,"runVerifyCredential");function Or(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(Or,"redactKeyMaterial");function Vt(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=Or(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(Vt,"classifyVerifyError");function Gt(e,t){let n=e[e.length-1];if(n&&ve(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Gt,"insertCacheBoundary");function ve(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(ve,"isCacheBoundary");function Ht(e,t){let n=[];for(let o of e){if(ve(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(Ht,"lowerCacheBoundaries");function Be(e){return e.filter(t=>!ve(t))}i(Be,"stripCacheBoundaries");import{readFile as $r}from"node:fs/promises";import Nr from"node:path";var Lr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function it(e,t){return t??Lr[Nr.extname(e).toLowerCase()]??"image/png"}i(it,"resolveImageMediaType");async function st(e){return(await $r(e)).toString("base64")}i(st,"readImageFileAsBase64");async function qn(e,t){let n=it(e,t),o=await st(e);return`data:${n};base64,${o}`}i(qn,"buildImageDataUrl");var jr="KodaX",Fr="effort-2025-11-24";function Yn(e,t){if(t===void 0||t.length===0)return e;let n={type:"text",text:t},o=e.at(-1);if(o?.role!=="user")return[...e,{role:"user",content:[n]}];let r=typeof o.content=="string"?[{type:"text",text:o.content},n]:[...o.content,n];return[...e.slice(0,-1),{...o,content:r}]}i(Yn,"appendAnthropicEphemeralSuffix");function Kr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":jr}}i(Kr,"getAnthropicCompatDefaultHeaders");function Jt(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(l=>!Number.isFinite(l)||l<0))return{inputTokens:u,outputTokens:a,totalTokens:u+a,cachedReadTokens:s||void 0,cachedWriteTokens:r||void 0}}i(Jt,"normalizeAnthropicUsage");function qt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(qt,"isRecord");function Ur(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Ur,"selectAnthropicOutputEffort");function Qn(e,t){let n=Ur(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...qt(r)?r:{},effort:n}}i(Qn,"applyAnthropicOutputEffort");function Zn(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...qt(o)?o:{},effort:t}}i(Zn,"setAnthropicOutputEffort");function Wr(e){let n=e.output_config;return qt(n)&&typeof n.effort=="string"}i(Wr,"hasAnthropicOutputEffort");var $=class extends J{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=Kr(this.config);return new Br({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&&Wr(t)?{"anthropic-beta":Fr}: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,l=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(u==="kimi-k3"){let f=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!f){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:f?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(n.supportsDisabledThinking===!0||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&&(l.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Zn(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&&(l.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Zn(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)??ae(this.config,se(o.effort),o.taskType),l=this.getEffectiveThinkingBudgetCap(r),f=l!==void 0?Math.min(u,l):u;return ue(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 ye({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}isPromptCacheDisabled(){let t=ge()?.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=Gt([{type:"text",text:t}],"system");return Ht(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 c=t.length-1;c>=0;c--)if(t[c].role==="user"&&(n+=1,n===2)){o=c;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"}},l=[...s.slice(0,-1),u],f=t.slice();return f[o]={...r,content:l},f}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),l=s?.modelOverride??this.config.model,f=this.getWireModelId(l);this.validateExplicitReasoningEffort(u,l);let c=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),g=Yn(this.applyCacheControlToMessages(await this.convertMessages(t,l)),s?.ephemeralSuffix?.content),m=u.enabled?this.getReasoningCapability(l):"none",p=this.getReasoningProfile(l),b=p?["profile","none"]:u.enabled?this.getReasoningFallbackChain(m).filter(_=>_==="native-budget"||_==="native-toggle"||_==="native-adaptive"||_==="none"):["none"],d=!!s?.forcedToolName,T=i(_=>{let w={model:f,max_tokens:c,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:g,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&d&&(w.tool_choice={type:"tool",name:s.forcedToolName}),_!=="none")if(_==="profile"&&p)this.applyReasoningProfile(w,p,u,l,c);else if(_==="native-budget"){let I=ae(this.config,se(u.effort),u.taskType);w.thinking={type:"enabled",budget_tokens:ue(I,c)}}else _==="native-toggle"?w.thinking={type:"enabled"}:_==="native-adaptive"&&(w.thinking={type:"adaptive"},Qn(w,u));return w},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let h=[],v=[],E=[],k,P=null,y="",C="",A="",F="",W="",U="",Y="",te=!1,M,D=Date.now(),V=Date.now(),re,we;for(let _ of b){for(;!re;)try{let w=T(_);re=await this.client.messages.create(w,this.buildMessageCreateOptions(w,l,a))}catch(w){if(we=w,d&&this.shouldFallbackForForcedToolChoiceError(w)){d=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let I=_==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:_==="native-budget"?["budget_tokens","thinking"]:_==="native-toggle"?["thinking"]:_==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(w,...I))throw w;break}if(re)break}if(!re)throw we??new R("All reasoning capability attempts failed without a captured error",this.name);let Se=Date.now(),Ge=0,S=0,L=3e4;for await(let _ of re){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let w=Date.now(),I=w-Se;if(I>L&&(Ge++,S+=I,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(I/1e3)}s gap before ${_.type}`,{stallCount:Ge,totalStallMs:S,eventType:_.type})),Se=w,_.type==="content_block_start"||_.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),_.type==="content_block_start"){D=Date.now();let x=_.content_block;P=x.type,process.env.KODAX_DEBUG_TOOL_STREAM&&x.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:x.type,id:x.id,name:x.name}),x.type==="thinking"?(C="",A=x.signature??""):x.type==="redacted_thinking"?(P="redacted_thinking",F=x.data??""):x.type==="text"?y="":x.type==="tool_use"&&(W=x.id,U=x.name,Y="")}else if(_.type==="content_block_delta"){D=Date.now();let x=_.delta;x.type==="thinking_delta"?(C+=x.thinking??"",s?.onThinkingDelta?.(x.thinking??"")):x.type==="text_delta"?(y+=x.text??"",s?.onTextDelta?.(x.text??"")):x.type==="input_json_delta"&&(Y+=x.partial_json??"",s?.onToolInputDelta?.(U,x.partial_json??"",W?{toolId:W}:void 0))}else if(_.type==="content_block_stop"){if(D=Date.now(),P==="thinking")C&&(E.push({type:"thinking",thinking:C,signature:A}),s?.onThinkingEnd?.(C));else if(P==="redacted_thinking")F&&E.push({type:"redacted_thinking",data:F}),F="";else if(P==="text")y&&h.push({type:"text",text:y});else if(P==="tool_use")if(!W||!U)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(W),name:JSON.stringify(U),input:Y.slice(0,100)});else{let x=me(Y);v.push({type:"tool_use",id:W,name:U,input:x.value,...x.salvaged?{_salvaged:!0,_truncated:!0}:{}})}P=null}else if(_.type==="message_stop"){if(te=!0,D=Date.now(),process.env.KODAX_DEBUG_STREAM){let x=Date.now()-V;this.logStreamDiagnostic(`[Stream] message_stop received after ${x}ms`)}}else if(_.type==="message_delta"){D=Date.now(),k=Jt(_.usage,k);let x=_.delta;x?.stop_reason&&(M=x.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${M}`))}else _.type==="message_start"&&(D=Date.now(),k=Jt(_.message?.usage,k),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!te){let _=Date.now()-V,w=Date.now()-D;if(a?.aborted){let I=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:_,lastEventAge:w,reason:I,textBlocks:h.length,toolBlocks:v.length,thinkingBlocks:E.length}),new DOMException(I,"AbortError")}if(!M){let I=new Error(`Stream incomplete: message_stop event not received. Duration: ${_}ms, Last event: ${w}ms ago. This may indicate a network disconnection or API timeout.`);throw I.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:_,lastEventAge:w,textBlocks:h.length,toolBlocks:v.length,thinkingBlocks:E.length}),I}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:_,lastEventAge:w,stopReason:M,textBlocks:h.length,toolBlocks:v.length,thinkingBlocks:E.length})}let O=he(M)?v.map(({_truncated:_,...w})=>w):v;return{textBlocks:h,toolBlocks:O,thinkingBlocks:E,usage:k,stopReason:M}},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),l=s?.modelOverride??this.config.model,f=this.getWireModelId(l);this.validateExplicitReasoningEffort(u,l);let c=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),g=Yn(this.applyCacheControlToMessages(await this.convertMessages(t,l)),s?.ephemeralSuffix?.content),m=u.enabled?this.getReasoningCapability(l):"none",p=this.getReasoningProfile(l),b=p?["profile","none"]:u.enabled?this.getReasoningFallbackChain(m).filter(y=>y==="native-budget"||y==="native-toggle"||y==="native-adaptive"||y==="none"):["none"],d=!!s?.forcedToolName,T=i(y=>{let C={model:f,max_tokens:c,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:g,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&d&&(C.tool_choice={type:"tool",name:s.forcedToolName}),y!=="none")if(y==="profile"&&p)this.applyReasoningProfile(C,p,u,l,c);else if(y==="native-budget"){let A=ae(this.config,se(u.effort),u.taskType);C.thinking={type:"enabled",budget_tokens:ue(A,c)}}else y==="native-toggle"?C.thinking={type:"enabled"}:y==="native-adaptive"&&(C.thinking={type:"adaptive"},Qn(C,u));return C},"buildRequest"),h,v;for(let y of b){for(;!h;)try{let C=T(y);h=await this.client.messages.create(C,this.buildMessageCreateOptions(C,l,a))}catch(C){if(v=C,d&&this.shouldFallbackForForcedToolChoiceError(C)){d=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let A=y==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:y==="native-budget"?["budget_tokens","thinking"]:y==="native-toggle"?["thinking"]:y==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(C,...A))throw C;break}if(h)break}if(!h)throw v??new R("All reasoning capability attempts failed without a captured error",this.name);let E=[],k=[],P=[];for(let y of h.content)y.type==="text"?(E.push({type:"text",text:y.text}),s?.onTextDelta?.(y.text)):y.type==="thinking"?(P.push({type:"thinking",thinking:y.thinking,signature:y.signature??""}),s?.onThinkingDelta?.(y.thinking),s?.onThinkingEnd?.(y.thinking)):y.type==="redacted_thinking"?P.push({type:"redacted_thinking",data:y.data}):y.type==="tool_use"&&k.push({type:"tool_use",id:y.id,name:y.name,input:typeof y.input=="object"&&y.input!==null?y.input:{}});return{textBlocks:E,toolBlocks:k,thinkingBlocks:P,usage:Jt(h.usage),stopReason:h.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(ve(n))throw new R("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
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
4
 
5
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=[],l=[];for(let c of s.content)c.type==="thinking"?!r||typeof c.signature=="string"&&c.signature.length>0?u.push({type:"thinking",thinking:c.thinking,signature:c.signature??""}):c.thinking&&l.push(c.thinking):c.type==="redacted_thinking"&&(r||u.push({type:"redacted_thinking",data:c.data}));l.length>0&&s.role==="assistant"&&u.push({type:"text",text:`<prior_reasoning>
@@ -9,7 +9,7 @@ ${l.join(`
9
9
  </prior_reasoning>`});for(let c of s.content)if(c.type==="tool_result"&&s.role==="user"){let g;if(typeof c.content=="string")g=c.content;else{let m=[];for(let p of c.content)p.type==="text"?m.push({type:"text",text:p.text}):p.type==="image"&&m.push({type:"image",source:{type:"base64",media_type:it(p.path,p.mediaType),data:await st(p.path)}});g=m}u.push({type:"tool_result",tool_use_id:c.tool_use_id,content:g,...c.is_error===!0?{is_error:!0}:{}})}for(let c of s.content)c.type==="tool_use"&&s.role==="assistant"&&u.push({type:"tool_use",id:c.id,name:c.name,input:c.input});for(let c of s.content)c.type==="text"?u.push({type:"text",text:c.text}):c.type==="image"&&s.role==="user"&&u.push({type:"image",source:{type:"base64",media_type:it(c.path,c.mediaType),data:await st(c.path)}});if(a==="assistant"&&this.config.supportsThinking&&!r){let c=u.some(m=>m.type==="tool_use"),g=u.some(m=>m.type==="thinking"||m.type==="redacted_thinking");c&&!g&&u.unshift({type:"thinking",thinking:"...",signature:""})}let f=u.length===0||(a==="assistant"||a==="user")&&u.every(c=>{let g=c;return g.type==="thinking"&&!g.thinking||g.type==="text"&&!g.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 l=u;return l.type!=="tool_use"||!!l.id&&a.has(l.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(u=>{let l=u;return l.type!=="tool_result"||!!l.tool_use_id&&a.has(l.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import zr from"openai";var Xr="KodaX";function eo(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i(eo,"isOpenAIReasoningAttempt");function Vr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Xr}}i(Vr,"getOpenAICompatDefaultHeaders");function Gr(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return Wt(se(e.effort))}}i(Gr,"selectOpenAIReasoningEffort");function to(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(to,"normalizeOpenAIUsage");function Hr(e){return e?e.type==="function"&&"function"in e:!1}i(Hr,"isOpenAIFunctionToolCall");function Jr(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(Jr,"extractOpenAIMessageText");function qr(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(qr,"extractOpenAIMessageReasoning");function at(e){let t=e.role;return typeof t=="string"?t:void 0}i(at,"getWireRole");function Yr(e){if(at(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(Yr,"getAssistantWireToolCalls");function Qr(e){if(at(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}i(Qr,"getToolWireCallId");function Zr(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(Zr,"rewriteAssistantWireToolCalls");var z=class extends J{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=Vr(this.config);return new zr({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 ye({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=Be(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
10
  `):"";a.trim().length>0&&o.push(a)}return{system:o.join(`
11
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=ue(ae(this.config,se(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 l=Gr(o);l&&(r.reasoning_effort=l);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==="kimi-k3"){let l=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!l){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:l?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};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 l=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...l!==void 0?{thinking_budget:l}:{}});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(l=>l.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 l=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...l!==void 0?{budget_tokens:l}:{}};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"profile":return["thinking","reasoning_effort","enable_thinking","thinking_budget","budget_tokens"];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:l,rest:f}=this.normalizeSystemForWire(o,u),c=s?.modelOverride??this.config.model,g=[{role:"system",content:l},...await this.convertMessages(f,c),...s?.ephemeralSuffix?.content?[{role:"user",content:s.ephemeralSuffix.content}]:[]],m=n.map(w=>({type:"function",function:{name:w.name,description:w.description,parameters:w.input_schema}})),p=s?.forcedToolName,b=!!p;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let d=new Map,T="",h="",v,E=!0,k=null,P=Date.now(),y=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(y,c);let C=this.getReasoningProfile(c),A=pe(y)?this.getReasoningCapability(c):"none",F=C?["profile","none"]:pe(y)?this.getReasoningFallbackChain(A).filter(eo):["none"],W={model:c,messages:g,tools:m,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),stream:!0};p&&b&&(W.tool_choice={type:"function",function:{name:p}});let U,Y;for(let w of F){for(;!U;){let L={...W};E&&(L.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(L),this.applyReasoningCapability(L,w,y);try{U=await this.client.chat.completions.create(L,a?{signal:a}:{})}catch(O){if(Y=O,b&&this.shouldFallbackForForcedToolChoiceError(O)){b=!1,delete W.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(E&&this.shouldFallbackForSpecificReasoningError(O,"stream_options","include_usage")){E=!1;continue}if(!this.shouldFallbackForReasoningError(O,...this.getFallbackTerms(w)))throw O;break}}if(U)break}if(!U)throw Y??new R("All reasoning capability attempts failed without a captured error",this.name);let te=Date.now(),M=0,D=0,V=3e4;for await(let w of U){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let L=Date.now(),O=L-te;O>V&&(M++,D+=O,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(O/1e3)}s gap`,{stallCount:M,totalStallMs:D})),te=L,s?.onHeartbeat?.(),v=to(w.usage)??v;let _=w.choices[0],S=_?.delta;if(_?.finish_reason&&(k=_.finish_reason,process.env.KODAX_DEBUG_STREAM)){let x=Date.now()-P;this.logStreamDiagnostic(`[Stream] finish_reason: ${k} after ${x}ms`)}S?.content&&(T+=S.content,s?.onTextDelta?.(S.content));let I=this.extractReasoningDelta(S);if(I&&(h+=I,s?.onThinkingDelta?.(I)),S?.tool_calls)for(let x of S.tool_calls){let ie=d.get(x.index)??{id:"",name:"",arguments:""};x.id&&(ie.id=x.id),x.function?.name&&(ie.name=x.function.name),x.function?.arguments&&(ie.arguments+=x.function.arguments,s?.onToolInputDelta?.(ie.name,x.function.arguments,ie.id?{toolId:ie.id}:void 0)),d.set(x.index,ie)}}if(!k){let w=Date.now()-P;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:w,reason:O,textContentLength:T.length,toolCallsCount:d.size}),new DOMException(O,"AbortError")}let L=new Error(`Stream incomplete: finish_reason not received. Duration: ${w}ms. This may indicate a network disconnection or API timeout.`);throw L.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:w,textContentLength:T.length,toolCallsCount:d.size}),L}let re=T?[{type:"text",text:T}]:[],Se=[],we=[];h&&(we.push({type:"thinking",thinking:h}),s?.onThinkingEnd?.(h));let Ge=he(k??void 0);for(let[,w]of d)if(w.id&&w.name){let L=me(w.arguments),O=L.salvaged?Ge?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Se.push({type:"tool_use",id:w.id,name:w.name,input:L.value,...O})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(w.id),name:JSON.stringify(w.name),argsLength:w.arguments?.length??0});return{textBlocks:re,toolBlocks:Se,thinkingBlocks:we,usage:v,stopReason:k??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:l,rest:f}=this.normalizeSystemForWire(o,u),c=s?.modelOverride??this.config.model,g=[{role:"system",content:l},...await this.convertMessages(f,c),...s?.ephemeralSuffix?.content?[{role:"user",content:s.ephemeralSuffix.content}]:[]],m=n.map(M=>({type:"function",function:{name:M.name,description:M.description,parameters:M.input_schema}})),p=s?.forcedToolName,b=!!p,d=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(d,c);let T=this.getReasoningProfile(c),h=pe(d)?this.getReasoningCapability(c):"none",v=T?["profile","none"]:pe(d)?this.getReasoningFallbackChain(h).filter(eo):["none"],E={model:c,messages:g,tools:m,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c)};p&&b&&(E.tool_choice={type:"function",function:{name:p}});let k,P;for(let M of v){for(;!k;){let D={...E};this.resetReasoningCapabilityParams(D),this.applyReasoningCapability(D,M,d);try{k=await this.client.chat.completions.create(D,a?{signal:a}:{})}catch(V){if(P=V,b&&this.shouldFallbackForForcedToolChoiceError(V)){b=!1,delete E.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(V,...this.getFallbackTerms(M)))throw V;break}}if(k)break}if(!k)throw P??new R("All reasoning capability attempts failed without a captured error",this.name);let y=k.choices[0],C=y?.message,A=Jr(C?.content),F=qr(C),W=he(y?.finish_reason??void 0),U=(C?.tool_calls??[]).filter(Hr).map(M=>{let D=me(M.function.arguments),V=D.salvaged?W?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:M.id,name:M.function.name,input:D.value,...V}});A&&s?.onTextDelta?.(A);let Y=A?[{type:"text",text:A}]:[],te=[];return F&&(te.push({type:"thinking",thinking:F}),s?.onThinkingDelta?.(F),s?.onThinkingEnd?.(F)),{textBlocks:Y,toolBlocks:U,thinkingBlocks:te,usage:to(k.usage),stopReason:y?.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(c=>c.type==="text").map(c=>c.text).join(`
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=ue(ae(this.config,se(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 l=Gr(o);l&&(r.reasoning_effort=l);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==="kimi-k3"){let l=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!l){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:l?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};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 l=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...l!==void 0?{thinking_budget:l}:{}});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(l=>l.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 l=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...l!==void 0?{budget_tokens:l}:{}};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"profile":return["thinking","reasoning_effort","enable_thinking","thinking_budget","budget_tokens"];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:l,rest:f}=this.normalizeSystemForWire(o,u),c=s?.modelOverride??this.config.model,g=[{role:"system",content:l},...await this.convertMessages(f,c),...s?.ephemeralSuffix?.content?[{role:"user",content:s.ephemeralSuffix.content}]:[]],m=n.map(S=>({type:"function",function:{name:S.name,description:S.description,parameters:S.input_schema}})),p=s?.forcedToolName,b=!!p;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let d=new Map,T="",h="",v,E=!0,k=null,P=Date.now(),y=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(y,c);let C=this.getReasoningProfile(c),A=pe(y)?this.getReasoningCapability(c):"none",F=C?["profile","none"]:pe(y)?this.getReasoningFallbackChain(A).filter(eo):["none"],W={model:c,messages:g,tools:m,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),stream:!0};p&&b&&(W.tool_choice={type:"function",function:{name:p}});let U,Y;for(let S of F){for(;!U;){let L={...W};E&&(L.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(L),this.applyReasoningCapability(L,S,y);try{U=await this.client.chat.completions.create(L,a?{signal:a}:{})}catch(O){if(Y=O,b&&this.shouldFallbackForForcedToolChoiceError(O)){b=!1,delete W.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(E&&this.shouldFallbackForSpecificReasoningError(O,"stream_options","include_usage")){E=!1;continue}if(!this.shouldFallbackForReasoningError(O,...this.getFallbackTerms(S)))throw O;break}}if(U)break}if(!U)throw Y??new R("All reasoning capability attempts failed without a captured error",this.name);let te=Date.now(),M=0,D=0,V=3e4;for await(let S of U){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let L=Date.now(),O=L-te;O>V&&(M++,D+=O,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(O/1e3)}s gap`,{stallCount:M,totalStallMs:D})),te=L,s?.onHeartbeat?.(),v=to(S.usage)??v;let _=S.choices[0],w=_?.delta;if(_?.finish_reason&&(k=_.finish_reason,process.env.KODAX_DEBUG_STREAM)){let x=Date.now()-P;this.logStreamDiagnostic(`[Stream] finish_reason: ${k} after ${x}ms`)}w?.content&&(T+=w.content,s?.onTextDelta?.(w.content));let I=this.extractReasoningDelta(w);if(I&&(h+=I,s?.onThinkingDelta?.(I)),w?.tool_calls)for(let x of w.tool_calls){let ie=d.get(x.index)??{id:"",name:"",arguments:""};x.id&&(ie.id=x.id),x.function?.name&&(ie.name=x.function.name),x.function?.arguments&&(ie.arguments+=x.function.arguments,s?.onToolInputDelta?.(ie.name,x.function.arguments,ie.id?{toolId:ie.id}:void 0)),d.set(x.index,ie)}}if(!k){let S=Date.now()-P;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:T.length,toolCallsCount:d.size}),new DOMException(O,"AbortError")}let L=new Error(`Stream incomplete: finish_reason not received. Duration: ${S}ms. This may indicate a network disconnection or API timeout.`);throw L.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:S,textContentLength:T.length,toolCallsCount:d.size}),L}let re=T?[{type:"text",text:T}]:[],we=[],Se=[];h&&(Se.push({type:"thinking",thinking:h}),s?.onThinkingEnd?.(h));let Ge=he(k??void 0);for(let[,S]of d)if(S.id&&S.name){let L=me(S.arguments),O=L.salvaged?Ge?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};we.push({type:"tool_use",id:S.id,name:S.name,input:L.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:re,toolBlocks:we,thinkingBlocks:Se,usage:v,stopReason:k??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:l,rest:f}=this.normalizeSystemForWire(o,u),c=s?.modelOverride??this.config.model,g=[{role:"system",content:l},...await this.convertMessages(f,c),...s?.ephemeralSuffix?.content?[{role:"user",content:s.ephemeralSuffix.content}]:[]],m=n.map(M=>({type:"function",function:{name:M.name,description:M.description,parameters:M.input_schema}})),p=s?.forcedToolName,b=!!p,d=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(d,c);let T=this.getReasoningProfile(c),h=pe(d)?this.getReasoningCapability(c):"none",v=T?["profile","none"]:pe(d)?this.getReasoningFallbackChain(h).filter(eo):["none"],E={model:c,messages:g,tools:m,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c)};p&&b&&(E.tool_choice={type:"function",function:{name:p}});let k,P;for(let M of v){for(;!k;){let D={...E};this.resetReasoningCapabilityParams(D),this.applyReasoningCapability(D,M,d);try{k=await this.client.chat.completions.create(D,a?{signal:a}:{})}catch(V){if(P=V,b&&this.shouldFallbackForForcedToolChoiceError(V)){b=!1,delete E.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(V,...this.getFallbackTerms(M)))throw V;break}}if(k)break}if(!k)throw P??new R("All reasoning capability attempts failed without a captured error",this.name);let y=k.choices[0],C=y?.message,A=Jr(C?.content),F=qr(C),W=he(y?.finish_reason??void 0),U=(C?.tool_calls??[]).filter(Hr).map(M=>{let D=me(M.function.arguments),V=D.salvaged?W?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:M.id,name:M.function.name,input:D.value,...V}});A&&s?.onTextDelta?.(A);let Y=A?[{type:"text",text:A}]:[],te=[];return F&&(te.push({type:"thinking",thinking:F}),s?.onThinkingDelta?.(F),s?.onThinkingEnd?.(F)),{textBlocks:Y,toolBlocks:U,thinkingBlocks:te,usage:to(k.usage),stopReason:y?.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(c=>c.type==="text").map(c=>c.text).join(`
13
13
  `),r=t.filter(c=>c.type==="tool_use").map(c=>({id:c.id,type:"function",function:{name:c.name,arguments:JSON.stringify(c.input??{})}})),s=t.filter(c=>c.type==="thinking"||c.type==="redacted_thinking").map(c=>c.type==="thinking"?c.thinking:"").filter(Boolean).join(`
14
14
 
15
15
  `),a=t.some(c=>c.type==="thinking"||c.type==="redacted_thinking"),u=t.some(c=>c.type==="text");if(!o&&r.length===0&&!a&&!u)return[];let l;o?l=o:r.length>0?l=null:l="...";let f={role:"assistant",content:l};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(`
@@ -60,19 +60,19 @@ public static class KodaXNativeProcessSnapshot {
60
60
  }
61
61
  }
62
62
  }`;function Qt(e){return e.exitCode!==null||e.signalCode!==null}i(Qt,"isExited");function je(e,t){return Qt(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(je,"waitForExit");function oi(e){return new Promise(t=>{let n=ei("taskkill",["/pid",String(e),"/t","/f"],{stdio:"ignore",windowsHide:!0}),o=!1,r=i(a=>{o||(o=!0,clearTimeout(s),t(a))},"finish"),s=setTimeout(()=>{try{n.kill()}catch{}r(!1)},en);s.unref?.(),n.once("exit",a=>r(a===0)),n.once("error",()=>r(!1))})}i(oi,"runTaskkill");function no(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}i(no,"signalPosixPidTree");function Z(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}i(Z,"signalTargetExists");function oo(e){return Z(-e)||Z(e)}i(oo,"isPosixPidTreeAlive");async function ro(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!oo(e))return!0;await new Promise(o=>setTimeout(o,50))}return!oo(e)}i(ro,"waitForPosixPidTreeExit");async function ri(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Z(e))return!0;await new Promise(o=>setTimeout(o,50))}return!Z(e)}i(ri,"waitForWindowsPidExit");async function Yt(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=>!Z(r)))return!0;await new Promise(r=>setTimeout(r,50))}return n.every(r=>!Z(r))}i(Yt,"waitForWindowsPidsExit");function io(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(io,"readWindowsPidListJson");function ii(e){let t=Zt("wmic",["process","where",`ParentProcessId=${e}`,"get","ProcessId","/format:list"],{encoding:"utf8",timeout:en,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(ii,"getWindowsChildPidsViaWmic");function si(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=Zt("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:en,windowsHide:!0});if(!n.error&&n.status===0){let r=io(n.stdout);if(r.length>0)return r}let o=io(n.stdout);return o.length>0?o:ii(e)}i(si,"getWindowsChildPids");function ai(e){let t=["$source = @'",ni,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
63
- `),n=Zt("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:ti,windowsHide:!0});return n.error||n.status!==0?[]:ui(n.stdout,e)}i(ai,"collectWindowsDescendantPidsNative");function ui(e,t){let n=new Map;for(let a of e.split(/\r?\n/)){let[u,l]=a.split(",",2),f=Number(u),c=Number(l);!Number.isFinite(f)||f<=0||!Number.isFinite(c)||n.set(c,[...n.get(c)??[],f])}let o=[],r=[t],s=new Set([t]);for(;r.length>0;){let a=r.shift();if(a===void 0)break;for(let u of n.get(a)??[])s.has(u)||(s.add(u),o.push(u),r.push(u))}return o}i(ui,"collectDescendantsFromProcessRows");function so(e,t=new Set){let n=[];for(let o of si(e))t.has(o)||(t.add(o),n.push(o),n.push(...so(o,t)));return n}i(so,"collectWindowsDescendantPids");async function ut(e,t){try{process.kill(e,t)}catch{return!Z(e)}return ri(e,H)}i(ut,"killWindowsPid");async function Fe(e){if(process.platform==="win32"&&e.pid!==void 0){if(!Qt(e)&&await oi(e.pid)&&await Yt([e.pid],H)){await je(e,H);return}let n=ai(e.pid);n.length===0&&(n=so(e.pid));let o=[...n].reverse(),r=[e.pid,...n];for(let s of o)Z(s)&&await ut(s,"SIGTERM");if(await ut(e.pid,"SIGTERM"),await Yt(r,H)){await je(e,H);return}for(let s of o)Z(s)&&await ut(s,"SIGKILL");await ut(e.pid,"SIGKILL"),await Yt(r,H),await je(e,H);return}if(e.pid!==void 0&&process.platform!=="win32"){if(!no(e.pid,"SIGTERM")||await ro(e.pid,H))return;no(e.pid,"SIGKILL"),await ro(e.pid,H);return}if(!Qt(e)){try{e.kill("SIGTERM")}catch{return}if(!await je(e,H)){try{e.kill("SIGKILL")}catch{}await je(e,H)}}}i(Fe,"killChildProcessTree");var lt=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=ct.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=ci(s,this.options.args??[],{cwd:this.options.cwd??ct.cwd(),stdio:["pipe","pipe","inherit"],detached:ct.platform!=="win32"}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=fi.toWeb(this.agentProcess.stdin),t=li.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=gi(n,t);this.client=new di(()=>({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:pi,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??ct.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&&Fe(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}};function mi(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(mi,"normalizeAcpUsage");function hi(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(hi,"selectAcpReasoningEffort");var ke=class extends J{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 G(Le)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Be(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),l=hi(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=[],c=[],g=t[t.length-1],m="";if(g&&typeof g.content=="string")m=g.content;else if(g&&Array.isArray(g.content)){let E=[];for(let k of g.content)if(k.type==="text")E.push(k.text);else if(k.type==="image"){let P=this.serializeImageBlockToPromptToken(k);P&&E.push(P)}m=E.join(`
63
+ `),n=Zt("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:ti,windowsHide:!0});return n.error||n.status!==0?[]:ui(n.stdout,e)}i(ai,"collectWindowsDescendantPidsNative");function ui(e,t){let n=new Map;for(let a of e.split(/\r?\n/)){let[u,l]=a.split(",",2),f=Number(u),c=Number(l);!Number.isFinite(f)||f<=0||!Number.isFinite(c)||n.set(c,[...n.get(c)??[],f])}let o=[],r=[t],s=new Set([t]);for(;r.length>0;){let a=r.shift();if(a===void 0)break;for(let u of n.get(a)??[])s.has(u)||(s.add(u),o.push(u),r.push(u))}return o}i(ui,"collectDescendantsFromProcessRows");function so(e,t=new Set){let n=[];for(let o of si(e))t.has(o)||(t.add(o),n.push(o),n.push(...so(o,t)));return n}i(so,"collectWindowsDescendantPids");async function ut(e,t){try{process.kill(e,t)}catch{return!Z(e)}return ri(e,H)}i(ut,"killWindowsPid");async function Fe(e){if(process.platform==="win32"&&e.pid!==void 0){if(!Qt(e)&&await oi(e.pid)&&await Yt([e.pid],H)){await je(e,H);return}let n=ai(e.pid);n.length===0&&(n=so(e.pid));let o=[...n].reverse(),r=[e.pid,...n];for(let s of o)Z(s)&&await ut(s,"SIGTERM");if(await ut(e.pid,"SIGTERM"),await Yt(r,H)){await je(e,H);return}for(let s of o)Z(s)&&await ut(s,"SIGKILL");await ut(e.pid,"SIGKILL"),await Yt(r,H),await je(e,H);return}if(e.pid!==void 0&&process.platform!=="win32"){if(!no(e.pid,"SIGTERM")||await ro(e.pid,H))return;no(e.pid,"SIGKILL"),await ro(e.pid,H);return}if(!Qt(e)){try{e.kill("SIGTERM")}catch{return}if(!await je(e,H)){try{e.kill("SIGKILL")}catch{}await je(e,H)}}}i(Fe,"killChildProcessTree");var lt=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=ct.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=ci(s,this.options.args??[],{cwd:this.options.cwd??ct.cwd(),stdio:["pipe","pipe","inherit"],detached:ct.platform!=="win32",windowsHide:!0}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=fi.toWeb(this.agentProcess.stdin),t=li.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=gi(n,t);this.client=new di(()=>({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:pi,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??ct.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&&Fe(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}};function mi(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(mi,"normalizeAcpUsage");function hi(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(hi,"selectAcpReasoningEffort");var ke=class extends J{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 G(Le)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Be(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),l=hi(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=[],c=[],g=t[t.length-1],m="";if(g&&typeof g.content=="string")m=g.content;else if(g&&Array.isArray(g.content)){let E=[];for(let k of g.content)if(k.type==="text")E.push(k.text);else if(k.type==="image"){let P=this.serializeImageBlockToPromptToken(k);P&&E.push(P)}m=E.join(`
64
64
  `)}let p=s?.ephemeralSuffix?.content;p&&(m=m.length>0?`${m}
65
65
 
66
66
  ${p}`:p);let b={...this.acpClientOptions,onSessionUpdate:i(E=>{let k=E.update,P=E.sessionId;if(!("sessionUpdate"in k))return;let y=P?this._activeStreams.get(P):void 0;if(y)switch(k.sessionUpdate){case"agent_message_chunk":if(k.content?.type==="text"){let C=k.content.text;y.output.text+=C,y.streamOptions?.onTextDelta?.(C)}break;case"tool_call":{let C="{}",A=k.arguments??k.parameters;A&&(C=typeof A=="string"?A:JSON.stringify(A)),y.streamOptions?.onToolInputDelta?.(k.title,C);let F=`
67
67
  > [Tool Use] ${k.title}: ${C}
68
68
  `;y.output.text+=F,y.streamOptions?.onTextDelta?.(F);break}case"tool_call_update":if(k.status){let C=`> [Tool Result] ${k.status}
69
69
 
70
- `;y.output.text+=C,y.streamOptions?.onTextDelta?.(C)}break}},"onSessionUpdate")},d=s?.sessionId??"default";this._client||(this._client=new lt(b),await this._client.connect());let T=this._sessionMap.get(d);T||(T=await this._client.createNewSession(),this._sessionMap.set(d,T));let h={text:""};this._activeStreams.set(T,{streamOptions:s,output:h});let v;try{v=await this._client.prompt(m,T,a,{model:s?.modelOverride,reasoningEffort:l})}catch(E){if(!(E instanceof Error&&E.name==="AbortError"))throw E}finally{this._activeStreams.delete(T)}return h.text&&f.push({type:"text",text:h.text}),{textBlocks:f,toolBlocks:c,thinkingBlocks:[],usage:mi(v?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as yi}from"node:child_process";import ft from"node:process";var Ee=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={...ft.env,...this.config.env},s=ft.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=yi(s,n,{cwd:this.config.cwd??ft.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:ft.platform!=="win32"}),u="";a.stderr?.on("data",c=>{u+=c.toString()});let l=!1,f=i(()=>{l||Fe(a)},"abortHandler");t.signal?.addEventListener("abort",f),a.on("exit",()=>{l=!0});try{yield*this.parseOutputStream(a.stdout,t.signal),u.trim()&&console.error(`[CLIExecutor] stderr: ${u.trim()}`)}finally{t.signal?.removeEventListener("abort",f),l||await Fe(a)}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
71
- `);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 vi}from"node:child_process";import ki from"node:process";async function dt(e){try{let t=ki.platform==="win32",n=vi(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(dt,"checkCliCommandInstalled");var pt=class extends Ee{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 dt("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 ao}from"node:stream/web";import{randomUUID as tn}from"node:crypto";function gt(e){let t=new ao,n=new ao,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,u="",l=tn(),f=new AbortController,c=new Map;(async()=>{try{for(;;){let{done:d,value:T}=await o.read();if(d)break;u+=s.decode(T,{stream:!0});let h=u.split(`
70
+ `;y.output.text+=C,y.streamOptions?.onTextDelta?.(C)}break}},"onSessionUpdate")},d=s?.sessionId??"default";this._client||(this._client=new lt(b),await this._client.connect());let T=this._sessionMap.get(d);T||(T=await this._client.createNewSession(),this._sessionMap.set(d,T));let h={text:""};this._activeStreams.set(T,{streamOptions:s,output:h});let v;try{v=await this._client.prompt(m,T,a,{model:s?.modelOverride,reasoningEffort:l})}catch(E){if(!(E instanceof Error&&E.name==="AbortError"))throw E}finally{this._activeStreams.delete(T)}return h.text&&f.push({type:"text",text:h.text}),{textBlocks:f,toolBlocks:c,thinkingBlocks:[],usage:mi(v?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as yi}from"node:child_process";import ft from"node:process";var Ee=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={...ft.env,...this.config.env},s=ft.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=yi(s,n,{cwd:this.config.cwd??ft.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:ft.platform!=="win32",windowsHide:!0}),u="";a.stderr?.on("data",c=>{u+=c.toString()});let l=!1,f=i(()=>{l||Fe(a)},"abortHandler");t.signal?.addEventListener("abort",f),a.on("exit",()=>{l=!0});try{yield*this.parseOutputStream(a.stdout,t.signal),u.trim()&&console.error(`[CLIExecutor] stderr: ${u.trim()}`)}finally{t.signal?.removeEventListener("abort",f),l||await Fe(a)}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
71
+ `);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 vi}from"node:child_process";import ki from"node:process";async function dt(e){try{let t=ki.platform==="win32",n=vi(t?`${e}.cmd`:e,["--version"],{windowsHide:!0});return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}i(dt,"checkCliCommandInstalled");var pt=class extends Ee{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 dt("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 ao}from"node:stream/web";import{randomUUID as tn}from"node:crypto";function gt(e){let t=new ao,n=new ao,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,u="",l=tn(),f=new AbortController,c=new Map;(async()=>{try{for(;;){let{done:d,value:T}=await o.read();if(d)break;u+=s.decode(T,{stream:!0});let h=u.split(`
72
72
  `);u=h.pop()??"";for(let v of h)if(v.trim())try{let E=JSON.parse(v);m(E).catch(k=>{console.error("[PseudoAcpServer] Failed to handle request:",k)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",v)}}}catch(d){console.error("[PseudoAcpServer] Stream read error:",d)}})();let g=i(async d=>{let T=JSON.stringify(d)+`
73
73
  `;await r.write(a.encode(T))},"sendMsg");async function m(d){if(d.method==="initialize")await g({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")l=d.params?.sessionId??tn(),await g({jsonrpc:"2.0",id:d.id,result:{sessionId:l}});else if(d.method==="session/prompt"||d.method==="chat/prompt"){let T=new AbortController,h=d.params.sessionId;c.set(h,T);let v=i(()=>T.abort(),"onGlobalAbort");f.signal.addEventListener("abort",v);let k=await p(h,d.params.prompt,typeof d.params.model=="string"?d.params.model:void 0,typeof d.params.effort=="string"?d.params.effort:void 0,T.signal).finally(()=>{c.delete(h),f.signal.removeEventListener("abort",v)});await g({jsonrpc:"2.0",id:d.id,result:k.usage?{stopReason:k.stopReason,usage:k.usage}:{stopReason:k.stopReason}})}else if(d.method==="session/cancel"||d.method==="chat/cancel"){let T=c.get(d.params.sessionId);T&&T.abort(),d.id!==void 0&&await g({jsonrpc:"2.0",id:d.id,result:{}})}else d.id!==void 0&&await g({jsonrpc:"2.0",id:d.id,result:{}})}i(m,"handleRequest");let p=i(async(d,T,h,v,E)=>{let k=T.find(P=>P.type==="text")?.text??"";try{let P=e.execute({prompt:k,model:h,reasoningEffort:v,sessionId:d==="default"?void 0:d,signal:E});for await(let y of P){let C=b(y);if(C&&await g({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:C}}),y.type==="complete")return{stopReason:E.aborted?"cancelled":"end_turn",usage:y.usage}}return{stopReason:E.aborted?"cancelled":"end_turn"}}catch(P){return E.aborted||P instanceof Error&&P.name==="AbortError"?{stopReason:"cancelled"}:(console.error("[PseudoAcpServer] Error executing prompt:",P),await g({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
74
74
  [Fatal Error: ${P}]
75
75
  `}}}}),{stopReason:"end_turn"})}},"executePrompt"),b=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||tn()};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:`
76
76
  [Error: ${d.message}]
77
- `}};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(gt,"createPseudoAcpServer");import uo from"node:fs";import co from"node:os";import lo from"node:path";var Ei="gpt-5.4",bi="auto-gemini-3",xi=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],_i=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function fo(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(fo,"dedupePreserveOrder");function Ci(){let e=lo.join(co.homedir(),".codex","config.toml");try{return uo.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(Ci,"readCodexConfiguredModel");function Ti(){let e=lo.join(co.homedir(),".gemini","settings.json");try{let t=JSON.parse(uo.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(Ti,"readGeminiConfiguredModel");function be(){return Ci()||Ei}i(be,"getCodexCliDefaultModel");function xe(){return Ti()||bi}i(xe,"getGeminiCliDefaultModel");function Ke(){return fo([be(),...xi])}i(Ke,"getCodexCliKnownModels");function Ue(){return fo([xe(),..._i])}i(Ue,"getGeminiCliKnownModels");var nn=xe(),Pi=Ue(),Si={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},mt=class extends ke{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:nn,models:Pi.filter(t=>t!==nn).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new pt({model:nn});this.acpClientOptions=gt(t)}getCapabilityProfile(){return G(Si)}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 wi(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(wi,"buildReasoningEffortArgs");var ht=class extends Ee{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 dt("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=wi(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 on=be(),Mi=Ke(),yt=class extends ke{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:on,models:Mi.filter(t=>t!==on).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new ht({model:on});this.acpClientOptions=gt(t)}};import{existsSync as ji,readFileSync as Fi}from"node:fs";import Ce from"node:path";import{fileURLToPath as Ki}from"node:url";var po=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],go=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],mo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],ho=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","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"],yo=["native","image-input-native","cli-bridge","image-input-cli-bridge"],vo=["count-tokens","models-list","minimal-message","unsupported"];function ee(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(ee,"isPlainObject");function le(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(le,"requireString");function _e(e,t){if(e!==void 0)return le(e,t)}i(_e,"optionalString");function ne(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(ne,"optionalNumber");function N(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(N,"optionalBoolean");function ko(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)=>le(n,`${t}[${o}]`))}}i(ko,"optionalStringArray");function Ri(e,t){if(e===void 0)return;if(!ee(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=le(r,`${t}.${o}`);return n}i(Ri,"optionalStringMap");function Ai(e,t){if(e!==void 0){if(typeof e!="string"||!ho.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ho.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Ai,"optionalReasoningPreset");function rn(e,t){if(typeof e!="string"||!po.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${po.join(", ")}, got ${JSON.stringify(e)}`);return e}i(rn,"requireReasoningCapability");function Di(e,t){if(typeof e!="string"||!go.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${go.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Di,"requireEffortStrategy");function Ii(e,t){if(e!==void 0){if(typeof e!="string"||!mo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${mo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Ii,"optionalThinkingStrategy");function Eo(e,t){if(e===void 0)return;if(!ee(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Di(e.effortStrategy,`${t}.effortStrategy`),o=Ai(e.reasoningPreset,`${t}.reasoningPreset`),r=Ii(e.thinkingStrategy,`${t}.thinkingStrategy`),s=_e(e.defaultEffort,`${t}.defaultEffort`),a=Ri(e.effortAliases,`${t}.effortAliases`),u=ko(e.disabledEfforts,`${t}.disabledEfforts`),l=ko(e.localRejectEfforts,`${t}.localRejectEfforts`),f=N(e.allowCustomEffort,`${t}.allowCustomEffort`),c=N(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),g=N(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),m=N(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),p=N(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),b=N(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),d=N(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),T=N(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),h={effortStrategy:n};if(o!==void 0&&(h.reasoningPreset=o),r!==void 0&&(h.thinkingStrategy=r),s!==void 0&&(h.defaultEffort=s),a!==void 0&&(h.effortAliases=a),u!==void 0&&(h.disabledEfforts=u),l!==void 0&&(h.localRejectEfforts=l),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);h.supportedEfforts=e.supportedEfforts.map((v,E)=>{if(!ee(v))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${E}] must be an object`);return{value:le(v.value,`${t}.supportedEfforts[${E}].value`),..._e(v.description,`${t}.supportedEfforts[${E}].description`)!==void 0?{description:_e(v.description,`${t}.supportedEfforts[${E}].description`)}:{},...N(v.isDefault,`${t}.supportedEfforts[${E}].isDefault`)!==void 0?{isDefault:N(v.isDefault,`${t}.supportedEfforts[${E}].isDefault`)}:{},...N(v.isUserVisible,`${t}.supportedEfforts[${E}].isUserVisible`)!==void 0?{isUserVisible:N(v.isUserVisible,`${t}.supportedEfforts[${E}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!ee(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let v={};for(let[E,k]of Object.entries(e.budgetByEffort))v[E]=ne(k,`${t}.budgetByEffort.${E}`)??0;h.budgetByEffort=v}return f!==void 0&&(h.allowCustomEffort=f),c!==void 0&&(h.supportsReasoningEffort=c),g!==void 0&&(h.supportsReasoningSummary=g),m!==void 0&&(h.supportsEncryptedReasoningReplay=m),p!==void 0&&(h.supportsAdaptiveThinking=p),b!==void 0&&(h.supportsManualThinkingBudget=b),d!==void 0&&(h.supportsDisabledThinking=d),T!==void 0&&(h.requiresEffortBetaHeader=T),h}i(Eo,"validateReasoningProfile");function bo(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?Eo(n,`${t}.reasoningProfile`):Eo(o,`${t}.reasoningCapabilityV2`)}i(bo,"validateReasoningProfileField");function Oi(e,t){if(typeof e!="string"||!yo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${yo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Oi,"requireProfileName");function $i(e,t){if(typeof e!="string"||!vo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${vo.join(", ")}, got ${JSON.stringify(e)}`);return e}i($i,"requireVerifyStrategy");function Ni(e,t){if(!ee(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=le(e.id,`${t}.id`),o=_e(e.wireModel,`${t}.wireModel`),r=_e(e.displayName,`${t}.displayName`),s=ne(e.contextWindow,`${t}.contextWindow`),a=ne(e.maxOutputTokens,`${t}.maxOutputTokens`),u=ne(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=N(e.replayReasoningContent,`${t}.replayReasoningContent`),f=N(e.strictThinkingSignature,`${t}.strictThinkingSignature`),c=ne(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),g=e.reasoningCapability===void 0?void 0:rn(e.reasoningCapability,`${t}.reasoningCapability`),m=bo(e,t),p={id:n};return o!==void 0&&(p.wireModel=o),r!==void 0&&(p.displayName=r),s!==void 0&&(p.contextWindow=s),a!==void 0&&(p.maxOutputTokens=a),u!==void 0&&(p.thinkingBudgetCap=u),g!==void 0&&(p.reasoningCapability=g),m!==void 0&&(p.reasoningProfile=m),l!==void 0&&(p.replayReasoningContent=l),f!==void 0&&(p.strictThinkingSignature=f),c!==void 0&&(p.streamMaxDurationMs=c),p}i(Ni,"validateModelDescriptor");function Li(e,t){if(e===void 0)return;if(!ee(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=rn(r,`${t}.${o}`);return n}i(Li,"validateModelReasoningCapabilities");function Bi(e,t){if(!ee(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=N(e.cliBridge,`providers.${t}.cliBridge`),o=le(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=rn(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=bo(e,`providers.${t}`),a=Oi(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=$i(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 l=ne(e.contextWindow,`providers.${t}.contextWindow`),f=ne(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),c=ne(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),g=N(e.supportsThinking,`providers.${t}.supportsThinking`),m=Li(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),p=_e(e.model,`providers.${t}.model`);if(n&&(p!==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&&p===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let b;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);b=e.models.map((h,v)=>Ni(h,`providers.${t}.models[${v}]`));let T=new Set([...p===void 0?[]:[p],...b.map(h=>h.id)]);for(let[h,v]of b.entries())if(v.wireModel!==void 0&&!T.has(v.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${h}].wireModel must reference a declared model, got ${JSON.stringify(v.wireModel)}`)}let d={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(d.reasoningProfile=s),p!==void 0&&(d.model=p),b!==void 0&&(d.models=b),l!==void 0&&(d.contextWindow=l),f!==void 0&&(d.maxOutputTokens=f),c!==void 0&&(d.thinkingBudgetCap=c),g!==void 0&&(d.supportsThinking=g),m!==void 0&&(d.modelReasoningCapabilities=m),n&&(d.cliBridge=!0),d}i(Bi,"validateProviderEntry");function xo(e){if(!ee(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=le(e.updatedAt,"updatedAt");if(!ee(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]=Bi(r,o);return{version:1,updatedAt:t,providers:n}}i(xo,"validateProviderCapabilitiesJson");var Ui=Object.freeze({native:ce,"image-input-native":Xn,"cli-bridge":Le,"image-input-cli-bridge":Vn}),vt=null;function Wi(){if(process.env.KODAX_BUNDLED==="true")return Ce.join(Ce.dirname(process.execPath),"provider-capabilities.json");let e=Ce.dirname(Ki(import.meta.url)),t=[Ce.join(e,"provider-capabilities.json"),Ce.join(Ce.dirname(e),"provider-capabilities.json")];for(let n of t)if(ji(n))return n;return t[0]}i(Wi,"resolveJsonPath");function zi(e){if(e.models){for(let t of e.models)t.reasoningProfile&&_o(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&_o(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(zi,"deepFreezeSnapshot");function _o(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(_o,"freezeReasoningProfile");function Xi(e){if(e==="gemini-cli"){let t=xe();return{model:t,models:Ue().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=be();return{model:t,models:Ke().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(Xi,"resolveCliBridgeModels");function Vi(e,t){let n=Ui[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=Xi(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(Vi,"buildSnapshot");function Co(){if(vt)return vt;let e=Wi(),t;try{let r=Fi(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=xo(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=zi(Vi(r,s));return vt=Object.freeze(o),vt}i(Co,"getProviderSnapshots");import Gi from"@anthropic-ai/sdk";var B=Co();function K(e,t={}){let n=B[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 sn=class extends ${static{i(this,"AnthropicProvider")}name="anthropic";config=K("anthropic",{strictThinkingSignature:!0});buildClient(){return new Gi({apiKey:this.getApiKey()})}},an=class extends ${static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=K("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},un=class extends ${static{i(this,"ZaiCodingProvider")}name="zai-coding";config=K("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},cn=class extends ${static{i(this,"KimiCodeProvider")}name="kimi-code";config=K("kimi-code",{baseUrl:"https://api.kimi.com/coding/"})},ln=class extends ${static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=K("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},fn=class extends ${static{i(this,"MimoCodingProvider")}name="mimo-coding";config=K("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},dn=class extends ${static{i(this,"MimoProvider")}name="mimo";config=K("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},pn=class extends ${static{i(this,"ArkCodingProvider")}name="ark-coding";config=K("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},gn=class extends z{static{i(this,"OpenAIProvider")}name="openai";config=K("openai")},mn=class extends z{static{i(this,"DeepSeekProvider")}name="deepseek";config=K("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},hn=class extends z{static{i(this,"KimiProvider")}name="kimi";config=K("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0})},yn=class extends z{static{i(this,"QwenProvider")}name="qwen";config=K("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},vn=class extends ${static{i(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=K("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},kn=class extends z{static{i(this,"ZhipuProvider")}name="zhipu";config=K("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},X={anthropic:i(()=>new sn,"anthropic"),openai:i(()=>new gn,"openai"),deepseek:i(()=>new mn,"deepseek"),kimi:i(()=>new hn,"kimi"),"kimi-code":i(()=>new cn,"kimi-code"),qwen:i(()=>new yn,"qwen"),"qwen-token-plan":i(()=>new vn,"qwen-token-plan"),zhipu:i(()=>new kn,"zhipu"),"zhipu-coding":i(()=>new an,"zhipu-coding"),"zai-coding":i(()=>new un,"zai-coding"),"minimax-coding":i(()=>new ln,"minimax-coding"),"mimo-coding":i(()=>new fn,"mimo-coding"),mimo:i(()=>new dn,"mimo"),"ark-coding":i(()=>new pn,"ark-coding"),"gemini-cli":i(()=>new mt,"gemini-cli"),"codex-cli":i(()=>new yt,"codex-cli")},En=process.env.KODAX_PROVIDER??"zhipu-coding",To=new Map;function Hi(e){if(j(e))return B[e].apiKeyEnv}i(Hi,"resolveApiKeyEnvForProvider");function Po(e){let t=e??En,n=X[t];if(!n)throw new R(`Unknown provider: ${t}. Available: ${Object.keys(X).join(", ")}`,t);let o=Hi(t),r=fe(t,o?process.env[o]:void 0),s=To.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return To.set(t,{apiKey:r,instance:a}),a}i(Po,"getProvider");function So(e){return j(e)?fe(e,process.env[B[e].apiKeyEnv])!==void 0:!1}i(So,"isProviderConfigured");function wo(e){return j(e)?B[e].model:null}i(wo,"getProviderModel");function Mo(e,t){if(!j(e))return"unknown";let n=B[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(Mo,"getProviderConfiguredReasoningCapability");function Ro(e){return j(e)?G(B[e].capabilityProfile):null}i(Ro,"getProviderConfiguredCapabilityProfile");function Ao(){let e=[];for(let t of Object.keys(X)){let n=B[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:G(n.capabilityProfile)})}return e}i(Ao,"getProviderList");function Do(e){let t=B[e];return t?t.models?[t.model,...t.models.map(n=>n.id)]:[t.model]:[]}i(Do,"getProviderModels");function j(e){return e in X}i(j,"isProviderName");function bn(e){return{id:e.model}}i(bn,"makeDefaultDescriptor");function Io(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}i(Io,"resolveWireModelDescriptor");function We(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(We,"effectiveCapabilities");function kt(e){let t=B[e];if(!t)return[];let n=t.models??[],o=n.find(s=>s.id===t.model),r=n.filter(s=>s.id!==t.model);return[o??bn(t),...r].map(s=>Io(t,s))}i(kt,"getProviderModelDescriptors");function Et(e,t){let n=B[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?We(e,n,Io(n,o)):t===n.model?We(e,n,bn(n)):We(e,n,{id:t})}i(Et,"getModelCapabilities");function bt(){let e=[];for(let t of Object.keys(X)){let n=B[t];e.push(We(t,n,bn(n)));for(let o of n.models??[])e.push(We(t,n,o))}return e}i(bt,"listBuiltinModelCapabilities");var Ji=new Set(["compat","sdk"]),qi=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function $o(e){return e.reasoningProfile??e.reasoningCapabilityV2}i($o,"getConfiguredReasoningProfile");function Yi(e){return e==="anthropic"?"count-tokens":"models-list"}i(Yi,"defaultVerifyStrategyForProtocol");function xt(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(xt,"legacyCapabilityFromReasoningProfile");function Qi(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(Qi,"legacyReasoningPresetForProtocol");function Oo(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(Oo,"isSimpleReasoning");function Zi(e,t){if(e==="none")return Qe("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(Zi,"buildReasoningProfileFromSimple");function No(e,t,n,o){let r=Oo(n)?n:void 0,s=n!==void 0&&!Oo(n)?n:void 0;if(o?.supportsThinking===!1)return Qe("none");if(e)return{...e,...s??{}};if(r!==void 0)return Zi(r,o?.protocol??"openai");let a=t??(o?Qi(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?Qe(a,s):void 0}i(No,"resolveCustomReasoningProfile");function _t(e){return No($o(e),e.reasoningPreset,e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(_t,"resolveCustomProviderReasoningProfile");function Cn(e,t,n){return No($o(e),e.reasoningPreset,e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(Cn,"resolveCustomModelReasoningProfile");function es(e,t,n){if(typeof e=="string")return{id:e};let o=Cn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(es,"customModelDescriptorToFull");function ze(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&&!Ji.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(!qi.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(ze,"validateCustomProviderConfig");function ts(e){let t=e.models?.length?e.models.map(s=>es(s,e.protocol,e.supportsThinking)):void 0,n=_t(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??xt(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??Yi(e.protocol)}}i(ts,"buildProviderConfig");function Ct(e){ze(e);let t=ts(e);return e.protocol==="anthropic"?new xn(e.name,t):new _n(e.name,t)}i(Ct,"createCustomProvider");var xn=class extends ${static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},_n=class extends z{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var q=new Map,Tn=new Map,ns=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function Lo(e){return e.reasoningCapability!==void 0&&ns.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(Lo,"hasThinkingReasoningConfig");function os(e){if(e.supportsThinking!==!1)return;let t=Lo(e),n=(e.models??[]).some(o=>typeof o!="string"&&Lo(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(os,"warnOnIgnoredReasoningCapability");function Bo(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(ze(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 X&&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.`),os(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>Ct(r))}q.clear(),Tn.clear();for(let[r,s]of n)q.set(r,s);for(let[r,s]of o)Tn.set(r,s)}i(Bo,"registerCustomProviders");function Tt(e){let t=Tn.get(e);return t?t():void 0}i(Tt,"getCustomProvider");function Pe(e){return q.has(e)}i(Pe,"isCustomProviderName");function Pt(){return[...q.keys()]}i(Pt,"getCustomProviderNames");function jo(){let e=[];for(let[t,n]of q){let o=!!process.env[n.apiKeyEnv],r=_t(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??xt(r)??"none",capabilityProfile:G(n.capabilityProfile??ce),custom:!0})}return e}i(jo,"getCustomProviderList");function Fo(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(Fo,"getCustomProviderModels");function Ko(e,t,n){if(typeof e=="string")return{id:e};let o=Cn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Ko,"customDescriptorToFull");function St(e){let t=q.get(e);if(!t)return;let n=(t.models??[]).map(s=>Ko(s,t.protocol,t.supportsThinking)),o=n.find(s=>s.id===t.model)??{id:t.model},r=n.filter(s=>s.id!==t.model);return[o,...r]}i(St,"getCustomProviderModelDescriptors");function Te(e,t){let n=q.get(e);if(!n)return;let o=t===n.model,r=_t(n),a=(n.models??[]).map(f=>Ko(f,n.protocol,n.supportsThinking)).find(f=>f.id===t)??(o?{id:n.model}:void 0);if(!a)return;let u=n.supportsThinking===!1?r:a.reasoningProfile??r,l=n.supportsThinking===!1?"none":a.reasoningCapability??xt(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(l!=="none"&&l!=="prompt-only"),reasoningCapability:l,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(Te,"getCustomModelCapabilities");function Uo(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(Uo,"getCustomProviderVerifyMetadata");function wt(){let e=[];for(let[t,n]of q){let o=Te(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=Te(t,s);a&&e.push(a)}}return e}i(wt,"listCustomProviderModelCapabilities");var oe=new Map,rs=0;function Pn(e){let t=oe.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(Pn,"getActiveRuntimeProviderRegistration");function is(e){for(let[t,n]of oe){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?oe.delete(t):oe.set(t,o);return}}}i(is,"removeRuntimeProviderRegistration");function Wo(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(j(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(Pe(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++rs}`,name:n,factory:t},r=oe.get(n)??[];return oe.set(n,[...r,o]),()=>{is(o.id)}}i(Wo,"registerModelProvider");function Mt(e){let t=Pn(e);return t?t.factory():void 0}i(Mt,"getRuntimeModelProvider");function Xe(e){return Pn(e)!==void 0}i(Xe,"isRuntimeModelProviderName");function Rt(){return Array.from(oe.keys()).filter(e=>Pn(e)!==void 0)}i(Rt,"getRuntimeModelProviderNames");function zo(){oe.clear()}i(zo,"clearRuntimeModelProviders");function Sn(e){if(j(e))return X[e]();let t=Mt(e);if(t)return t;let n=Tt(e);if(n)return n;let o=Dt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(Sn,"resolveProvider");function At(e){return j(e)||Xe(e)||Pe(e)}i(At,"isKnownProvider");function Dt(){let e=Object.keys(X),t=Rt(),n=Pt();return[...new Set([...e,...t,...n])]}i(Dt,"getAvailableProviderNames");function Ve(e){return j(e)?kt(e):St(e)??[]}i(Ve,"resolveProviderModelDescriptors");function It(e,t){return j(e)?Et(e,t):Te(e,t)}i(It,"resolveModelCapabilities");function Xo(){return[...bt(),...wt()]}i(Xo,"listAllModelCapabilities");function ss(e){if(j(e)){let t=B[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Xe(e))return Uo(e)}i(ss,"getProviderVerifyMetadata");async function Vo(e,t){let n=ss(e);if(!n&&!At(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Dt().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=Sn(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(Vo,"verifyProviderCredential");async function Go(e,t){if(!At(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=Ve(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(Go,"listProviderModels");function as(e){let t=e.model??Ve(e.provider)[0]?.id,n=t?It(e.provider,t)?.reasoningProfile:void 0;if(!n)return{effort:void 0,configuredEffort:void 0,adjusted:!1};let o=e.rejectedEfforts&&e.rejectedEfforts.length>0?Bt(n,e.rejectedEfforts):n,r=Ne({capability:o,sessionEffort:e.desiredEffort}),s=r.effectiveEffort;return s!==void 0&&e.rejectedEfforts?.includes(s)&&(s=void 0),{effort:s,configuredEffort:r.configuredEffort,adjusted:s!==r.configuredEffort}}i(as,"resolveWireEffort");var Ho={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375,cacheReadPer1M:.375,cacheWritePer1M:3.75},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08,cacheReadPer1M:.08,cacheWritePer1M:1}},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:{"kimi-k2.7-code":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.182},"kimi-k2.7-code-highspeed":{inputPer1M:1.82,outputPer1M:7.56,cachePer1M:.364},"kimi-k2.6":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.154},"kimi-k2.5":{inputPer1M:.56,outputPer1M:2.94,cachePer1M:.098}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015},k3:{inputPer1M:.005,outputPer1M:.015},"k3-256k":{inputPer1M:.005,outputPer1M:.015},"kimi-for-coding-highspeed":{inputPer1M:.015,outputPer1M:.045}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},"qwen-token-plan":{"qwen3.8-max-preview":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-plus":{inputPer1M:.005,outputPer1M:.015},"qwen3.6-flash":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015}},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.2":{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-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},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function wn(e,t,n){let o=n?.[e]?.[t];return o||Ho[e]?.[t]}i(wn,"getCostRate");function Mn(e,t,n,o=0,r=0){let s=Math.max(0,t-o-r),a=e.cacheReadPer1M??e.cachePer1M??e.inputPer1M,u=e.cacheWritePer1M??e.cachePer1M??e.inputPer1M,l=s/1e6*e.inputPer1M,f=n/1e6*e.outputPer1M,c=o/1e6*a,g=r/1e6*u;return l+f+c+g}i(Mn,"calculateCost");function us(){return{records:[],retries:[]}}i(us,"createCostTracker");function Rn(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(Rn,"recordRetry");function An(e,t,n){let o=wn(t.provider,t.model,n),r=o?Mn(o,t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens):0,s={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,cost:r,role:t.role};return{records:[...e.records,s],retries:e.retries}}i(An,"recordUsage");function cs(e){let t=0,n=0,o=0,r=0,s=0,a=0,u={},l={};for(let g of e.records){t+=g.cost,n+=g.inputTokens,o+=g.outputTokens,r+=g.cacheReadTokens+g.cacheWriteTokens,s+=g.cacheReadTokens,a+=g.cacheWriteTokens;let m=u[g.provider];u[g.provider]={cost:(m?.cost??0)+g.cost,calls:(m?.calls??0)+1,inputTokens:(m?.inputTokens??0)+g.inputTokens,outputTokens:(m?.outputTokens??0)+g.outputTokens};let p=g.role??"default",b=l[p];l[p]={cost:(b?.cost??0)+g.cost,calls:(b?.calls??0)+1,inputTokens:(b?.inputTokens??0)+g.inputTokens,outputTokens:(b?.outputTokens??0)+g.outputTokens}}let f=0;for(let g of e.retries)f+=g.waitMs;let c=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:c,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:f,byProvider:u,byRole:l}}i(cs,"getSummary");function Ot(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Ot,"formatCost");function ls(e){let t=[];if(t.push(`Session Cost: ${Ot(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}: ${Ot(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}: ${Ot(s.cost)} (${s.calls} calls)`)}return t.join(`
78
- `)}i(ls,"formatCostReport");import{performance as Dn}from"node:perf_hooks";var Jo={inputTokens:0,outputTokens:0,totalTokens:0},fs=3e4;function ds(e){if(!e)return{effort:"none"};let t=new Set(e.localRejectEfforts??[]),n=e.supportedEfforts?.filter(r=>r.isUserVisible!==!1).map(r=>r.value).filter(r=>!t.has(r));if(!t.has("none")&&(e.supportsDisabledThinking===!0||n?.includes("none")))return{effort:"none"};let o=n?.find(r=>r!=="none");return o===void 0?void 0:{effort:o}}i(ds,"resolveDefaultSideQueryReasoning");async function ps(e){let t=new AbortController,n=e.timeoutMs??fs,o=e.costTracker,r=Dn.now(),s,a=0,u=0,l=i(p=>{let b=Math.max(0,Math.round(Dn.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:b,retryCount:a,retryWaitMs:u,...s!==void 0?{firstOutputMs:s,streamMs:Math.max(0,b-s)}:{},terminalPhase:p}},"diagnostics"),f,c=i(p=>{f||(f=p),t.abort()},"recordAbort"),g=setTimeout(()=>c("timeout"),n),m=i(()=>c("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?c("parent"):e.abortSignal.addEventListener("abort",m,{once:!0}));try{let p=await e.provider.stream([...e.messages],[],e.system,e.reasoning??ds(e.provider.getReasoningProfile(e.model)),{modelOverride:e.model,...gs(e.maxOutputTokens)?{maxOutputTokensOverride:e.maxOutputTokens}:{},onTextDelta:i(v=>{v.length>0&&s===void 0&&(s=Math.max(0,Math.round(Dn.now()-r)))},"onTextDelta"),onRetryAfter:i(v=>{a+=1,u+=Math.max(0,v.waitMs),o&&(o=Rn(o,{provider:v.provider,waitMs:v.waitMs,reason:v.reason,source:v.source}))},"onRetryAfter")},t.signal),b=p.usage??Jo,d=p.textBlocks??[],T=p.toolBlocks??[],h=d.map(v=>v.text).join("");return T.length>0?{text:h,usage:b,costTracker:o,stopReason:"error",diagnostics:l("contract_error"),error:new Error(`sideQuery: provider returned ${T.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=An(o,{provider:e.provider.name,model:e.model,inputTokens:b.inputTokens,outputTokens:b.outputTokens,cacheReadTokens:b.cachedReadTokens,cacheWriteTokens:b.cachedWriteTokens,role:e.querySource})),{text:h,usage:b,costTracker:o,stopReason:ms(p.stopReason),diagnostics:l("completed")})}catch(p){let b=p instanceof Error?p:new Error(String(p)),d="error";return t.signal.aborted&&(d=f==="timeout"?"timeout":"aborted"),{text:"",usage:Jo,costTracker:o,stopReason:d,diagnostics:l(s===void 0?"pre_output":"streaming"),error:b}}finally{clearTimeout(g),e.abortSignal&&e.abortSignal.removeEventListener("abort",m)}}i(ps,"sideQuery");function gs(e){return e!==void 0&&Number.isInteger(e)&&e>0}i(gs,"isPositiveInteger");function ms(e){return e==="max_tokens"?"max_tokens":"end_turn"}i(ms,"mapStopReason");export{Yo as a,Qo as b,Zo as c,Q as d,R as e,Re as f,$t as g,Nt as h,Lt as i,er as j,tr as k,nr as l,Ae as m,or as n,rr as o,qe as p,Bt as q,ir as r,sr as s,ar as t,ur as u,cr as v,de as w,In as x,On as y,Ut as z,pe as A,Ze as B,$e as C,$n as D,dr as E,Nn as F,Ne as G,pr as H,yr as I,ae as J,ue as K,Wt as L,et as M,tt as N,Wn as O,zn as P,Pr as Q,Sr as R,ge as S,nt as T,J as U,Dr as V,Jn as W,he as X,ye as Y,Vt as Z,Gt as _,ve as $,Ht as aa,Be as ba,$ as ca,z as da,be as ea,xe as fa,Ke as ga,Ue as ha,B as ia,X as ja,En as ka,Po as la,So as ma,wo as na,Mo as oa,Ro as pa,Ao as qa,Do as ra,j as sa,kt as ta,Et as ua,bt as va,ze as wa,Ct as xa,Bo as ya,Tt as za,Pe as Aa,Pt as Ba,jo as Ca,Fo as Da,St as Ea,Te as Fa,wt as Ga,Wo as Ha,Mt as Ia,Xe as Ja,Rt as Ka,zo as La,Sn as Ma,At as Na,Dt as Oa,Ve as Pa,It as Qa,Xo as Ra,Vo as Sa,Go as Ta,as as Ua,Ho as Va,wn as Wa,Mn as Xa,us as Ya,Rn as Za,An as _a,cs as $a,Ot as ab,ls as bb,ps as cb};
77
+ `}};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(gt,"createPseudoAcpServer");import uo from"node:fs";import co from"node:os";import lo from"node:path";var Ei="gpt-5.4",bi="auto-gemini-3",xi=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],_i=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function fo(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(fo,"dedupePreserveOrder");function Ci(){let e=lo.join(co.homedir(),".codex","config.toml");try{return uo.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(Ci,"readCodexConfiguredModel");function Ti(){let e=lo.join(co.homedir(),".gemini","settings.json");try{let t=JSON.parse(uo.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(Ti,"readGeminiConfiguredModel");function be(){return Ci()||Ei}i(be,"getCodexCliDefaultModel");function xe(){return Ti()||bi}i(xe,"getGeminiCliDefaultModel");function Ke(){return fo([be(),...xi])}i(Ke,"getCodexCliKnownModels");function Ue(){return fo([xe(),..._i])}i(Ue,"getGeminiCliKnownModels");var nn=xe(),Pi=Ue(),wi={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},mt=class extends ke{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:nn,models:Pi.filter(t=>t!==nn).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new pt({model:nn});this.acpClientOptions=gt(t)}getCapabilityProfile(){return G(wi)}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 Si(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(Si,"buildReasoningEffortArgs");var ht=class extends Ee{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 dt("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=Si(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 on=be(),Mi=Ke(),yt=class extends ke{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:on,models:Mi.filter(t=>t!==on).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new ht({model:on});this.acpClientOptions=gt(t)}};import{existsSync as ji,readFileSync as Fi}from"node:fs";import Ce from"node:path";import{fileURLToPath as Ki}from"node:url";var po=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],go=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],mo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],ho=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","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"],yo=["native","image-input-native","cli-bridge","image-input-cli-bridge"],vo=["count-tokens","models-list","minimal-message","unsupported"];function ee(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(ee,"isPlainObject");function le(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(le,"requireString");function _e(e,t){if(e!==void 0)return le(e,t)}i(_e,"optionalString");function ne(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(ne,"optionalNumber");function N(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(N,"optionalBoolean");function ko(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)=>le(n,`${t}[${o}]`))}}i(ko,"optionalStringArray");function Ri(e,t){if(e===void 0)return;if(!ee(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=le(r,`${t}.${o}`);return n}i(Ri,"optionalStringMap");function Ai(e,t){if(e!==void 0){if(typeof e!="string"||!ho.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ho.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Ai,"optionalReasoningPreset");function rn(e,t){if(typeof e!="string"||!po.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${po.join(", ")}, got ${JSON.stringify(e)}`);return e}i(rn,"requireReasoningCapability");function Di(e,t){if(typeof e!="string"||!go.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${go.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Di,"requireEffortStrategy");function Ii(e,t){if(e!==void 0){if(typeof e!="string"||!mo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${mo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Ii,"optionalThinkingStrategy");function Eo(e,t){if(e===void 0)return;if(!ee(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Di(e.effortStrategy,`${t}.effortStrategy`),o=Ai(e.reasoningPreset,`${t}.reasoningPreset`),r=Ii(e.thinkingStrategy,`${t}.thinkingStrategy`),s=_e(e.defaultEffort,`${t}.defaultEffort`),a=Ri(e.effortAliases,`${t}.effortAliases`),u=ko(e.disabledEfforts,`${t}.disabledEfforts`),l=ko(e.localRejectEfforts,`${t}.localRejectEfforts`),f=N(e.allowCustomEffort,`${t}.allowCustomEffort`),c=N(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),g=N(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),m=N(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),p=N(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),b=N(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),d=N(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),T=N(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),h={effortStrategy:n};if(o!==void 0&&(h.reasoningPreset=o),r!==void 0&&(h.thinkingStrategy=r),s!==void 0&&(h.defaultEffort=s),a!==void 0&&(h.effortAliases=a),u!==void 0&&(h.disabledEfforts=u),l!==void 0&&(h.localRejectEfforts=l),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);h.supportedEfforts=e.supportedEfforts.map((v,E)=>{if(!ee(v))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${E}] must be an object`);return{value:le(v.value,`${t}.supportedEfforts[${E}].value`),..._e(v.description,`${t}.supportedEfforts[${E}].description`)!==void 0?{description:_e(v.description,`${t}.supportedEfforts[${E}].description`)}:{},...N(v.isDefault,`${t}.supportedEfforts[${E}].isDefault`)!==void 0?{isDefault:N(v.isDefault,`${t}.supportedEfforts[${E}].isDefault`)}:{},...N(v.isUserVisible,`${t}.supportedEfforts[${E}].isUserVisible`)!==void 0?{isUserVisible:N(v.isUserVisible,`${t}.supportedEfforts[${E}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!ee(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let v={};for(let[E,k]of Object.entries(e.budgetByEffort))v[E]=ne(k,`${t}.budgetByEffort.${E}`)??0;h.budgetByEffort=v}return f!==void 0&&(h.allowCustomEffort=f),c!==void 0&&(h.supportsReasoningEffort=c),g!==void 0&&(h.supportsReasoningSummary=g),m!==void 0&&(h.supportsEncryptedReasoningReplay=m),p!==void 0&&(h.supportsAdaptiveThinking=p),b!==void 0&&(h.supportsManualThinkingBudget=b),d!==void 0&&(h.supportsDisabledThinking=d),T!==void 0&&(h.requiresEffortBetaHeader=T),h}i(Eo,"validateReasoningProfile");function bo(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?Eo(n,`${t}.reasoningProfile`):Eo(o,`${t}.reasoningCapabilityV2`)}i(bo,"validateReasoningProfileField");function Oi(e,t){if(typeof e!="string"||!yo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${yo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Oi,"requireProfileName");function $i(e,t){if(typeof e!="string"||!vo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${vo.join(", ")}, got ${JSON.stringify(e)}`);return e}i($i,"requireVerifyStrategy");function Ni(e,t){if(!ee(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=le(e.id,`${t}.id`),o=_e(e.wireModel,`${t}.wireModel`),r=_e(e.displayName,`${t}.displayName`),s=ne(e.contextWindow,`${t}.contextWindow`),a=ne(e.maxOutputTokens,`${t}.maxOutputTokens`),u=ne(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=N(e.replayReasoningContent,`${t}.replayReasoningContent`),f=N(e.strictThinkingSignature,`${t}.strictThinkingSignature`),c=ne(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),g=e.reasoningCapability===void 0?void 0:rn(e.reasoningCapability,`${t}.reasoningCapability`),m=bo(e,t),p={id:n};return o!==void 0&&(p.wireModel=o),r!==void 0&&(p.displayName=r),s!==void 0&&(p.contextWindow=s),a!==void 0&&(p.maxOutputTokens=a),u!==void 0&&(p.thinkingBudgetCap=u),g!==void 0&&(p.reasoningCapability=g),m!==void 0&&(p.reasoningProfile=m),l!==void 0&&(p.replayReasoningContent=l),f!==void 0&&(p.strictThinkingSignature=f),c!==void 0&&(p.streamMaxDurationMs=c),p}i(Ni,"validateModelDescriptor");function Li(e,t){if(e===void 0)return;if(!ee(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=rn(r,`${t}.${o}`);return n}i(Li,"validateModelReasoningCapabilities");function Bi(e,t){if(!ee(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=N(e.cliBridge,`providers.${t}.cliBridge`),o=le(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=rn(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=bo(e,`providers.${t}`),a=Oi(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=$i(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 l=ne(e.contextWindow,`providers.${t}.contextWindow`),f=ne(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),c=ne(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),g=N(e.supportsThinking,`providers.${t}.supportsThinking`),m=Li(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),p=_e(e.model,`providers.${t}.model`);if(n&&(p!==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&&p===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let b;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);b=e.models.map((h,v)=>Ni(h,`providers.${t}.models[${v}]`));let T=new Set([...p===void 0?[]:[p],...b.map(h=>h.id)]);for(let[h,v]of b.entries())if(v.wireModel!==void 0&&!T.has(v.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${h}].wireModel must reference a declared model, got ${JSON.stringify(v.wireModel)}`)}let d={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(d.reasoningProfile=s),p!==void 0&&(d.model=p),b!==void 0&&(d.models=b),l!==void 0&&(d.contextWindow=l),f!==void 0&&(d.maxOutputTokens=f),c!==void 0&&(d.thinkingBudgetCap=c),g!==void 0&&(d.supportsThinking=g),m!==void 0&&(d.modelReasoningCapabilities=m),n&&(d.cliBridge=!0),d}i(Bi,"validateProviderEntry");function xo(e){if(!ee(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=le(e.updatedAt,"updatedAt");if(!ee(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]=Bi(r,o);return{version:1,updatedAt:t,providers:n}}i(xo,"validateProviderCapabilitiesJson");var Ui=Object.freeze({native:ce,"image-input-native":Xn,"cli-bridge":Le,"image-input-cli-bridge":Vn}),vt=null;function Wi(){if(process.env.KODAX_BUNDLED==="true")return Ce.join(Ce.dirname(process.execPath),"provider-capabilities.json");let e=Ce.dirname(Ki(import.meta.url)),t=[Ce.join(e,"provider-capabilities.json"),Ce.join(Ce.dirname(e),"provider-capabilities.json")];for(let n of t)if(ji(n))return n;return t[0]}i(Wi,"resolveJsonPath");function zi(e){if(e.models){for(let t of e.models)t.reasoningProfile&&_o(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&_o(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(zi,"deepFreezeSnapshot");function _o(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(_o,"freezeReasoningProfile");function Xi(e){if(e==="gemini-cli"){let t=xe();return{model:t,models:Ue().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=be();return{model:t,models:Ke().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(Xi,"resolveCliBridgeModels");function Vi(e,t){let n=Ui[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=Xi(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(Vi,"buildSnapshot");function Co(){if(vt)return vt;let e=Wi(),t;try{let r=Fi(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=xo(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=zi(Vi(r,s));return vt=Object.freeze(o),vt}i(Co,"getProviderSnapshots");import Gi from"@anthropic-ai/sdk";var B=Co();function K(e,t={}){let n=B[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 sn=class extends ${static{i(this,"AnthropicProvider")}name="anthropic";config=K("anthropic",{strictThinkingSignature:!0});buildClient(){return new Gi({apiKey:this.getApiKey()})}},an=class extends ${static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=K("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},un=class extends ${static{i(this,"ZaiCodingProvider")}name="zai-coding";config=K("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},cn=class extends ${static{i(this,"KimiCodeProvider")}name="kimi-code";config=K("kimi-code",{baseUrl:"https://api.kimi.com/coding/"})},ln=class extends ${static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=K("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},fn=class extends ${static{i(this,"MimoCodingProvider")}name="mimo-coding";config=K("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},dn=class extends ${static{i(this,"MimoProvider")}name="mimo";config=K("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},pn=class extends ${static{i(this,"ArkCodingProvider")}name="ark-coding";config=K("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},gn=class extends z{static{i(this,"OpenAIProvider")}name="openai";config=K("openai")},mn=class extends z{static{i(this,"DeepSeekProvider")}name="deepseek";config=K("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},hn=class extends z{static{i(this,"KimiProvider")}name="kimi";config=K("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0})},yn=class extends z{static{i(this,"QwenProvider")}name="qwen";config=K("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},vn=class extends ${static{i(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=K("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},kn=class extends z{static{i(this,"ZhipuProvider")}name="zhipu";config=K("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},X={anthropic:i(()=>new sn,"anthropic"),openai:i(()=>new gn,"openai"),deepseek:i(()=>new mn,"deepseek"),kimi:i(()=>new hn,"kimi"),"kimi-code":i(()=>new cn,"kimi-code"),qwen:i(()=>new yn,"qwen"),"qwen-token-plan":i(()=>new vn,"qwen-token-plan"),zhipu:i(()=>new kn,"zhipu"),"zhipu-coding":i(()=>new an,"zhipu-coding"),"zai-coding":i(()=>new un,"zai-coding"),"minimax-coding":i(()=>new ln,"minimax-coding"),"mimo-coding":i(()=>new fn,"mimo-coding"),mimo:i(()=>new dn,"mimo"),"ark-coding":i(()=>new pn,"ark-coding"),"gemini-cli":i(()=>new mt,"gemini-cli"),"codex-cli":i(()=>new yt,"codex-cli")},En=process.env.KODAX_PROVIDER??"zhipu-coding",To=new Map;function Hi(e){if(j(e))return B[e].apiKeyEnv}i(Hi,"resolveApiKeyEnvForProvider");function Po(e){let t=e??En,n=X[t];if(!n)throw new R(`Unknown provider: ${t}. Available: ${Object.keys(X).join(", ")}`,t);let o=Hi(t),r=fe(t,o?process.env[o]:void 0),s=To.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return To.set(t,{apiKey:r,instance:a}),a}i(Po,"getProvider");function wo(e){return j(e)?fe(e,process.env[B[e].apiKeyEnv])!==void 0:!1}i(wo,"isProviderConfigured");function So(e){return j(e)?B[e].model:null}i(So,"getProviderModel");function Mo(e,t){if(!j(e))return"unknown";let n=B[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(Mo,"getProviderConfiguredReasoningCapability");function Ro(e){return j(e)?G(B[e].capabilityProfile):null}i(Ro,"getProviderConfiguredCapabilityProfile");function Ao(){let e=[];for(let t of Object.keys(X)){let n=B[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:G(n.capabilityProfile)})}return e}i(Ao,"getProviderList");function Do(e){let t=B[e];return t?t.models?[t.model,...t.models.map(n=>n.id)]:[t.model]:[]}i(Do,"getProviderModels");function j(e){return e in X}i(j,"isProviderName");function bn(e){return{id:e.model}}i(bn,"makeDefaultDescriptor");function Io(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}i(Io,"resolveWireModelDescriptor");function We(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(We,"effectiveCapabilities");function kt(e){let t=B[e];if(!t)return[];let n=t.models??[],o=n.find(s=>s.id===t.model),r=n.filter(s=>s.id!==t.model);return[o??bn(t),...r].map(s=>Io(t,s))}i(kt,"getProviderModelDescriptors");function Et(e,t){let n=B[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?We(e,n,Io(n,o)):t===n.model?We(e,n,bn(n)):We(e,n,{id:t})}i(Et,"getModelCapabilities");function bt(){let e=[];for(let t of Object.keys(X)){let n=B[t];e.push(We(t,n,bn(n)));for(let o of n.models??[])e.push(We(t,n,o))}return e}i(bt,"listBuiltinModelCapabilities");var Ji=new Set(["compat","sdk"]),qi=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function $o(e){return e.reasoningProfile??e.reasoningCapabilityV2}i($o,"getConfiguredReasoningProfile");function Yi(e){return e==="anthropic"?"count-tokens":"models-list"}i(Yi,"defaultVerifyStrategyForProtocol");function xt(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(xt,"legacyCapabilityFromReasoningProfile");function Qi(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(Qi,"legacyReasoningPresetForProtocol");function Oo(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(Oo,"isSimpleReasoning");function Zi(e,t){if(e==="none")return Qe("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(Zi,"buildReasoningProfileFromSimple");function No(e,t,n,o){let r=Oo(n)?n:void 0,s=n!==void 0&&!Oo(n)?n:void 0;if(o?.supportsThinking===!1)return Qe("none");if(e)return{...e,...s??{}};if(r!==void 0)return Zi(r,o?.protocol??"openai");let a=t??(o?Qi(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?Qe(a,s):void 0}i(No,"resolveCustomReasoningProfile");function _t(e){return No($o(e),e.reasoningPreset,e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(_t,"resolveCustomProviderReasoningProfile");function Cn(e,t,n){return No($o(e),e.reasoningPreset,e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(Cn,"resolveCustomModelReasoningProfile");function es(e,t,n){if(typeof e=="string")return{id:e};let o=Cn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(es,"customModelDescriptorToFull");function ze(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&&!Ji.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(!qi.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(ze,"validateCustomProviderConfig");function ts(e){let t=e.models?.length?e.models.map(s=>es(s,e.protocol,e.supportsThinking)):void 0,n=_t(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??xt(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??Yi(e.protocol)}}i(ts,"buildProviderConfig");function Ct(e){ze(e);let t=ts(e);return e.protocol==="anthropic"?new xn(e.name,t):new _n(e.name,t)}i(Ct,"createCustomProvider");var xn=class extends ${static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},_n=class extends z{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var q=new Map,Tn=new Map,ns=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function Lo(e){return e.reasoningCapability!==void 0&&ns.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(Lo,"hasThinkingReasoningConfig");function os(e){if(e.supportsThinking!==!1)return;let t=Lo(e),n=(e.models??[]).some(o=>typeof o!="string"&&Lo(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(os,"warnOnIgnoredReasoningCapability");function Bo(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(ze(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 X&&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.`),os(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>Ct(r))}q.clear(),Tn.clear();for(let[r,s]of n)q.set(r,s);for(let[r,s]of o)Tn.set(r,s)}i(Bo,"registerCustomProviders");function Tt(e){let t=Tn.get(e);return t?t():void 0}i(Tt,"getCustomProvider");function Pe(e){return q.has(e)}i(Pe,"isCustomProviderName");function Pt(){return[...q.keys()]}i(Pt,"getCustomProviderNames");function jo(){let e=[];for(let[t,n]of q){let o=!!process.env[n.apiKeyEnv],r=_t(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??xt(r)??"none",capabilityProfile:G(n.capabilityProfile??ce),custom:!0})}return e}i(jo,"getCustomProviderList");function Fo(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(Fo,"getCustomProviderModels");function Ko(e,t,n){if(typeof e=="string")return{id:e};let o=Cn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Ko,"customDescriptorToFull");function wt(e){let t=q.get(e);if(!t)return;let n=(t.models??[]).map(s=>Ko(s,t.protocol,t.supportsThinking)),o=n.find(s=>s.id===t.model)??{id:t.model},r=n.filter(s=>s.id!==t.model);return[o,...r]}i(wt,"getCustomProviderModelDescriptors");function Te(e,t){let n=q.get(e);if(!n)return;let o=t===n.model,r=_t(n),a=(n.models??[]).map(f=>Ko(f,n.protocol,n.supportsThinking)).find(f=>f.id===t)??(o?{id:n.model}:void 0);if(!a)return;let u=n.supportsThinking===!1?r:a.reasoningProfile??r,l=n.supportsThinking===!1?"none":a.reasoningCapability??xt(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(l!=="none"&&l!=="prompt-only"),reasoningCapability:l,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(Te,"getCustomModelCapabilities");function Uo(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(Uo,"getCustomProviderVerifyMetadata");function St(){let e=[];for(let[t,n]of q){let o=Te(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=Te(t,s);a&&e.push(a)}}return e}i(St,"listCustomProviderModelCapabilities");var oe=new Map,rs=0;function Pn(e){let t=oe.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(Pn,"getActiveRuntimeProviderRegistration");function is(e){for(let[t,n]of oe){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?oe.delete(t):oe.set(t,o);return}}}i(is,"removeRuntimeProviderRegistration");function Wo(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(j(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(Pe(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++rs}`,name:n,factory:t},r=oe.get(n)??[];return oe.set(n,[...r,o]),()=>{is(o.id)}}i(Wo,"registerModelProvider");function Mt(e){let t=Pn(e);return t?t.factory():void 0}i(Mt,"getRuntimeModelProvider");function Xe(e){return Pn(e)!==void 0}i(Xe,"isRuntimeModelProviderName");function Rt(){return Array.from(oe.keys()).filter(e=>Pn(e)!==void 0)}i(Rt,"getRuntimeModelProviderNames");function zo(){oe.clear()}i(zo,"clearRuntimeModelProviders");function wn(e){if(j(e))return X[e]();let t=Mt(e);if(t)return t;let n=Tt(e);if(n)return n;let o=Dt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(wn,"resolveProvider");function At(e){return j(e)||Xe(e)||Pe(e)}i(At,"isKnownProvider");function Dt(){let e=Object.keys(X),t=Rt(),n=Pt();return[...new Set([...e,...t,...n])]}i(Dt,"getAvailableProviderNames");function Ve(e){return j(e)?kt(e):wt(e)??[]}i(Ve,"resolveProviderModelDescriptors");function It(e,t){return j(e)?Et(e,t):Te(e,t)}i(It,"resolveModelCapabilities");function Xo(){return[...bt(),...St()]}i(Xo,"listAllModelCapabilities");function ss(e){if(j(e)){let t=B[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Xe(e))return Uo(e)}i(ss,"getProviderVerifyMetadata");async function Vo(e,t){let n=ss(e);if(!n&&!At(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Dt().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=wn(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(Vo,"verifyProviderCredential");async function Go(e,t){if(!At(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=Ve(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(Go,"listProviderModels");function as(e){let t=e.model??Ve(e.provider)[0]?.id,n=t?It(e.provider,t)?.reasoningProfile:void 0;if(!n)return{effort:void 0,configuredEffort:void 0,adjusted:!1};let o=e.rejectedEfforts&&e.rejectedEfforts.length>0?Bt(n,e.rejectedEfforts):n,r=Ne({capability:o,sessionEffort:e.desiredEffort}),s=r.effectiveEffort;return s!==void 0&&e.rejectedEfforts?.includes(s)&&(s=void 0),{effort:s,configuredEffort:r.configuredEffort,adjusted:s!==r.configuredEffort}}i(as,"resolveWireEffort");var Ho={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375,cacheReadPer1M:.375,cacheWritePer1M:3.75},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08,cacheReadPer1M:.08,cacheWritePer1M:1}},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:{"kimi-k2.7-code":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.182},"kimi-k2.7-code-highspeed":{inputPer1M:1.82,outputPer1M:7.56,cachePer1M:.364},"kimi-k2.6":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.154},"kimi-k2.5":{inputPer1M:.56,outputPer1M:2.94,cachePer1M:.098}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015},k3:{inputPer1M:.01,outputPer1M:.03},"k3-256k":{inputPer1M:.005,outputPer1M:.015},"kimi-for-coding-highspeed":{inputPer1M:.015,outputPer1M:.045}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},"qwen-token-plan":{"qwen3.8-max-preview":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-plus":{inputPer1M:.005,outputPer1M:.015},"qwen3.6-flash":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015}},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.2":{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-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},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function Sn(e,t,n){let o=n?.[e]?.[t];return o||Ho[e]?.[t]}i(Sn,"getCostRate");function Mn(e,t,n,o=0,r=0){let s=Math.max(0,t-o-r),a=e.cacheReadPer1M??e.cachePer1M??e.inputPer1M,u=e.cacheWritePer1M??e.cachePer1M??e.inputPer1M,l=s/1e6*e.inputPer1M,f=n/1e6*e.outputPer1M,c=o/1e6*a,g=r/1e6*u;return l+f+c+g}i(Mn,"calculateCost");function us(){return{records:[],retries:[]}}i(us,"createCostTracker");function Rn(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(Rn,"recordRetry");function An(e,t,n){let o=Sn(t.provider,t.model,n),r=o?Mn(o,t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens):0,s={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,cost:r,role:t.role};return{records:[...e.records,s],retries:e.retries}}i(An,"recordUsage");function cs(e){let t=0,n=0,o=0,r=0,s=0,a=0,u={},l={};for(let g of e.records){t+=g.cost,n+=g.inputTokens,o+=g.outputTokens,r+=g.cacheReadTokens+g.cacheWriteTokens,s+=g.cacheReadTokens,a+=g.cacheWriteTokens;let m=u[g.provider];u[g.provider]={cost:(m?.cost??0)+g.cost,calls:(m?.calls??0)+1,inputTokens:(m?.inputTokens??0)+g.inputTokens,outputTokens:(m?.outputTokens??0)+g.outputTokens};let p=g.role??"default",b=l[p];l[p]={cost:(b?.cost??0)+g.cost,calls:(b?.calls??0)+1,inputTokens:(b?.inputTokens??0)+g.inputTokens,outputTokens:(b?.outputTokens??0)+g.outputTokens}}let f=0;for(let g of e.retries)f+=g.waitMs;let c=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:c,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:f,byProvider:u,byRole:l}}i(cs,"getSummary");function Ot(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Ot,"formatCost");function ls(e){let t=[];if(t.push(`Session Cost: ${Ot(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}: ${Ot(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}: ${Ot(s.cost)} (${s.calls} calls)`)}return t.join(`
78
+ `)}i(ls,"formatCostReport");import{performance as Dn}from"node:perf_hooks";var Jo={inputTokens:0,outputTokens:0,totalTokens:0},fs=3e4;function ds(e){if(!e)return{effort:"none"};let t=new Set(e.localRejectEfforts??[]),n=e.supportedEfforts?.filter(r=>r.isUserVisible!==!1).map(r=>r.value).filter(r=>!t.has(r));if(!t.has("none")&&(e.supportsDisabledThinking===!0||n?.includes("none")))return{effort:"none"};let o=n?.find(r=>r!=="none");return o===void 0?void 0:{effort:o}}i(ds,"resolveDefaultSideQueryReasoning");async function ps(e){let t=new AbortController,n=e.timeoutMs??fs,o=e.costTracker,r=Dn.now(),s,a=0,u=0,l=i(p=>{let b=Math.max(0,Math.round(Dn.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:b,retryCount:a,retryWaitMs:u,...s!==void 0?{firstOutputMs:s,streamMs:Math.max(0,b-s)}:{},terminalPhase:p}},"diagnostics"),f,c=i(p=>{f||(f=p),t.abort()},"recordAbort"),g=setTimeout(()=>c("timeout"),n),m=i(()=>c("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?c("parent"):e.abortSignal.addEventListener("abort",m,{once:!0}));try{let p=await e.provider.stream([...e.messages],[],e.system,e.reasoning??ds(e.provider.getReasoningProfile(e.model)),{modelOverride:e.model,...gs(e.maxOutputTokens)?{maxOutputTokensOverride:e.maxOutputTokens}:{},onTextDelta:i(v=>{v.length>0&&s===void 0&&(s=Math.max(0,Math.round(Dn.now()-r)))},"onTextDelta"),onRetryAfter:i(v=>{a+=1,u+=Math.max(0,v.waitMs),o&&(o=Rn(o,{provider:v.provider,waitMs:v.waitMs,reason:v.reason,source:v.source}))},"onRetryAfter")},t.signal),b=p.usage??Jo,d=p.textBlocks??[],T=p.toolBlocks??[],h=d.map(v=>v.text).join("");return T.length>0?{text:h,usage:b,costTracker:o,stopReason:"error",diagnostics:l("contract_error"),error:new Error(`sideQuery: provider returned ${T.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=An(o,{provider:e.provider.name,model:e.model,inputTokens:b.inputTokens,outputTokens:b.outputTokens,cacheReadTokens:b.cachedReadTokens,cacheWriteTokens:b.cachedWriteTokens,role:e.querySource})),{text:h,usage:b,costTracker:o,stopReason:ms(p.stopReason),diagnostics:l("completed")})}catch(p){let b=p instanceof Error?p:new Error(String(p)),d="error";return t.signal.aborted&&(d=f==="timeout"?"timeout":"aborted"),{text:"",usage:Jo,costTracker:o,stopReason:d,diagnostics:l(s===void 0?"pre_output":"streaming"),error:b}}finally{clearTimeout(g),e.abortSignal&&e.abortSignal.removeEventListener("abort",m)}}i(ps,"sideQuery");function gs(e){return e!==void 0&&Number.isInteger(e)&&e>0}i(gs,"isPositiveInteger");function ms(e){return e==="max_tokens"?"max_tokens":"end_turn"}i(ms,"mapStopReason");export{Yo as a,Qo as b,Zo as c,Q as d,R as e,Re as f,$t as g,Nt as h,Lt as i,er as j,tr as k,nr as l,Ae as m,or as n,rr as o,qe as p,Bt as q,ir as r,sr as s,ar as t,ur as u,cr as v,de as w,In as x,On as y,Ut as z,pe as A,Ze as B,$e as C,$n as D,dr as E,Nn as F,Ne as G,pr as H,yr as I,ae as J,ue as K,Wt as L,et as M,tt as N,Wn as O,zn as P,Pr as Q,wr as R,ge as S,nt as T,J as U,Dr as V,Jn as W,he as X,ye as Y,Vt as Z,Gt as _,ve as $,Ht as aa,Be as ba,$ as ca,z as da,be as ea,xe as fa,Ke as ga,Ue as ha,B as ia,X as ja,En as ka,Po as la,wo as ma,So as na,Mo as oa,Ro as pa,Ao as qa,Do as ra,j as sa,kt as ta,Et as ua,bt as va,ze as wa,Ct as xa,Bo as ya,Tt as za,Pe as Aa,Pt as Ba,jo as Ca,Fo as Da,wt as Ea,Te as Fa,St as Ga,Wo as Ha,Mt as Ia,Xe as Ja,Rt as Ka,zo as La,wn as Ma,At as Na,Dt as Oa,Ve as Pa,It as Qa,Xo as Ra,Vo as Sa,Go as Ta,as as Ua,Ho as Va,Sn as Wa,Mn as Xa,us as Ya,Rn as Za,An as _a,cs as $a,Ot as ab,ls as bb,ps as cb};