@kodax-ai/kodax 0.7.87 → 0.7.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +95 -0
- package/README.md +29 -12
- package/README_CN.md +7 -3
- package/dist/chunks/agent-AKCXT573.js +2 -0
- package/dist/chunks/argument-completer-BJGY57H2.js +2 -0
- package/dist/chunks/{chunk-U44C5STU.js → chunk-4Y6OSDZE.js} +1 -1
- package/dist/chunks/{chunk-XH7UM4GO.js → chunk-5247AKGN.js} +3 -3
- package/dist/chunks/{chunk-DB4O33RR.js → chunk-5UBP47VJ.js} +223 -220
- package/dist/chunks/{chunk-ITP7J5HX.js → chunk-72H6JNPN.js} +142 -142
- package/dist/chunks/chunk-A63MGLH6.js +415 -0
- package/dist/chunks/{chunk-ZQNOEKOB.js → chunk-BOMSVUJS.js} +2 -2
- package/dist/chunks/{chunk-4OLXWSCQ.js → chunk-CQHLFQSU.js} +254 -254
- package/dist/chunks/chunk-GL6GVYF4.js +320 -0
- package/dist/chunks/{chunk-XKLVC7F6.js → chunk-IFD6TUQU.js} +1 -1
- package/dist/chunks/{chunk-JS4RSF4B.js → chunk-O2ZV775M.js} +1 -1
- package/dist/chunks/chunk-PROPMIT4.js +2 -0
- package/dist/chunks/{chunk-YB7YVAPL.js → chunk-QQBFQCMF.js} +4 -4
- package/dist/chunks/{chunk-BCYJIACJ.js → chunk-S74F7MFN.js} +124 -124
- package/dist/chunks/{chunk-ASFCAPIG.js → chunk-SOIIBADK.js} +2 -2
- package/dist/chunks/{chunk-SKELDH3G.js → chunk-UNEC2WXJ.js} +17 -17
- package/dist/chunks/{chunk-7XTUXMAI.js → chunk-W2LRTZBJ.js} +37 -34
- package/dist/chunks/{chunk-GRJ7NKWP.js → chunk-W5RPVR3O.js} +1 -1
- package/dist/chunks/client-ZXBSEDS4.js +2 -0
- package/dist/chunks/compaction-config-HVHPJ6CS.js +2 -0
- package/dist/chunks/{construction-bootstrap-YTFOT4M2.js → construction-bootstrap-WF6KQ7XV.js} +1 -1
- package/dist/chunks/dist-BCT3UNMA.js +2 -0
- package/dist/chunks/{dist-X55TWIK4.js → dist-WILA35IA.js} +1 -1
- package/dist/chunks/host-V6ENYZAQ.js +2 -0
- package/dist/chunks/run-manager-ZOV7EKTZ.js +2 -0
- package/dist/chunks/utils-BEWYGEMB.js +2 -0
- package/dist/index.d.ts +26 -26
- package/dist/index.js +5 -5
- package/dist/kodax_bootstrap.js +1 -1
- package/dist/kodax_cli.js +1564 -1555
- package/dist/kodax_resume.js +35 -826
- package/dist/provider-capabilities.json +1156 -1118
- package/dist/runtime-worker.js +1346 -1339
- package/dist/sandbox-workspace-session.js +261 -261
- package/dist/sdk-a2a.d.ts +20 -18
- package/dist/sdk-a2a.js +9 -9
- package/dist/sdk-agent.d.ts +23 -22
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +65 -38
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +6 -6
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +8 -8
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.d.ts +4 -4
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +21 -21
- package/dist/sdk-repl.js +1 -1
- package/dist/sdk-runtime.d.ts +28 -21
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +10 -10
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.d.ts +2 -2
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +59 -59
- package/dist/types-chunks/{base.d-vopO1rml.d.ts → base.d-JjF6aKsh.d.ts} +1 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-B36OQwNA.d.ts → bash-prefix-extractor.d-BLlhCRI-.d.ts} +33 -9
- package/dist/types-chunks/{capability-learning.d-CE1tm29C.d.ts → capability-learning.d-BAxy0mfx.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-DEncDNzD.d.ts → capsule.d-Cw4UlPTC.d.ts} +5 -5
- package/dist/types-chunks/{config.d-CJy1WENT.d.ts → config.d-CTPaqsD-.d.ts} +1 -1
- package/dist/types-chunks/{controller.d-Dif9pbC9.d.ts → controller.d-1tydJm7c.d.ts} +11 -4
- package/dist/types-chunks/{controller.d-C1YdP_pQ.d.ts → controller.d-BvwWz6yP.d.ts} +1 -1
- package/dist/types-chunks/{cost-tracker.d-BeaenODW.d.ts → cost-tracker.d-MTAt6N7b.d.ts} +1 -1
- package/dist/types-chunks/{guardrail.d-DhpnJv4Y.d.ts → guardrail.d-DqWHIgt6.d.ts} +15 -9
- package/dist/types-chunks/{history-retrieval.d-YJQpQt7h.d.ts → history-retrieval.d-ia-4iJpw.d.ts} +2 -2
- package/dist/types-chunks/{integration-config.d-BNowXE8k.d.ts → integration-config.d-BHoiz-WZ.d.ts} +3 -3
- package/dist/types-chunks/{manager.d-B67TmPO1.d.ts → manager.d-D_1fqveb.d.ts} +3 -3
- package/dist/types-chunks/{oauth-login.d-6i-vidxv.d.ts → oauth-login.d-Cz9OpSmz.d.ts} +3 -3
- package/dist/types-chunks/{public-api.d-D4q3WxKq.d.ts → public-api.d-CMZa4JPa.d.ts} +12 -7
- package/dist/types-chunks/{repl.d-D4ye29Kk.d.ts → repl.d-Byu2osV-.d.ts} +7 -7
- package/dist/types-chunks/{resolver.d-RyPo99tB.d.ts → resolver.d-bKttRr1V.d.ts} +4 -4
- package/dist/types-chunks/{review-inbox.d-C1_xZ-yg.d.ts → review-inbox.d-D3T-RxRs.d.ts} +3 -3
- package/dist/types-chunks/{run-manager.d-D30IvnwV.d.ts → run-manager.d-D0aKe12e.d.ts} +2 -2
- package/dist/types-chunks/{sdk-session-DIU6sHa2.d.ts → sdk-session-BEM7yvJB.d.ts} +3 -3
- package/dist/types-chunks/{shell-command-sets.d-rIHkZ_VR.d.ts → shell-command-sets.d-_SHjU3KP.d.ts} +2 -2
- package/dist/types-chunks/{side-query.d-iH0P9ASy.d.ts → side-query.d-DNes6rHA.d.ts} +3 -3
- package/dist/types-chunks/{types-PHjfwebT.d.ts → types-D8OiIEwA.d.ts} +1 -1
- package/dist/types-chunks/{types.d-BSPlmJqf.d.ts → types.d-BEMcUOng.d.ts} +1 -1
- package/dist/types-chunks/{types.d-COhAF5Xo.d.ts → types.d-B_IFJlti.d.ts} +3 -3
- package/dist/types-chunks/{types.d-Bz5Y-PD9.d.ts → types.d-BqK7eZ5u.d.ts} +6 -6
- package/dist/types-chunks/{types.d-CK9A9rpP.d.ts → types.d-Cv09EdJR.d.ts} +1 -1
- package/dist/types-chunks/{types.d-sW-OqiFt.d.ts → types.d-DeokRBs7.d.ts} +34 -3
- package/dist/types-chunks/{utils.d-B65ozSTV.d.ts → utils.d-0h1NTEsX.d.ts} +8 -8
- package/package.json +2 -2
- package/dist/chunks/agent-Z64QF7KG.js +0 -2
- package/dist/chunks/argument-completer-HIJBXRUT.js +0 -2
- package/dist/chunks/chunk-3PGNESV3.js +0 -415
- package/dist/chunks/chunk-UWKM3HNY.js +0 -319
- package/dist/chunks/compaction-config-E4TFBCDJ.js +0 -2
- package/dist/chunks/dist-M3JV4PNA.js +0 -2
- package/dist/chunks/host-SJHHJBPB.js +0 -2
- package/dist/chunks/run-manager-T5QGWNON.js +0 -2
- package/dist/chunks/utils-2FHVIO6X.js +0 -2
|
@@ -1,23 +1,23 @@
|
|
|
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 xr}from"node:async_hooks";var rt=new xr;function Cr(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");return rt.run({provider:e,credential:t},n)}i(Cr,"runWithProviderCredential");function Pr(e){let t=rt.getStore();return t?.provider===e?t.credential:void 0}i(Pr,"getScopedProviderCredential");function he(e,t){let n=rt.getStore();return n?n.provider===e?n.credential:void 0:t}i(he,"resolveProviderCredential");function _r(e){let t=rt.getStore()?.credential;return t?$e(e,t,new WeakMap):e}i(_r,"redactScopedProviderCredential");function $e(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($e(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=$e(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push($e(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]=$e(a.value,t,n)}return r}i($e,"redactCredentialValue");var ne=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},I=class extends ne{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Le=class extends ne{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},Jt=class extends ne{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},it=class extends I{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},qt=class extends ne{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Yt=32768,wr=32e3,Mr=64e3,Sr=.5;function Fe(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(Fe,"timeoutSecToMs");function Rr(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(Rr,"parseTimeoutSecEnvMs");function Ar(e){if(!e)return;let t={requestTimeoutMs:Fe(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Fe(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Fe(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Fe(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Ar,"resolveLlmTimeoutConfig");function st(e,t){return`${e}/${t??""}`}i(st,"capabilityCacheKey");function Qt(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(Qt,"narrowReasoningProfile");function Dr(e,t,n){return e[st(t,n)]?.rejected??[]}i(Dr,"getRejectedEfforts");function Ir(e,t,n,o,r,s){let a=st(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:s}}}i(Ir,"addRejectedEffort");function Or(e,t,n){if(!t)return{};let o={...e};return delete o[st(t,n)],o}i(Or,"removeCacheEntry");function Nr(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:u}}return t}i(Nr,"sanitizeCapabilityCache");var $r=["off","auto","quick","balanced","deep"],ye=["auto","none","low","medium","high"],qn={low:6e3,medium:1e4,high:2e4},Yn=4096,Zt=[{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"}],en=[{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:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Low reasoning"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to high"},{value:"max",description:"Maximum reasoning"}],Fr=[{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 at(e,t={}){return{...Br(e),...t,reasoningPreset:e}}i(at,"createReasoningProfileFromPreset");function Br(e){switch(e){case"zai-glm-5.3":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:[{value:"none",description:"Maps to low reasoning"},{value:"minimal",description:"Alias to low",isUserVisible:!1},{value:"low",description:"Low reasoning"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning"},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning",isDefault:!0}],effortAliases:{none:"low",minimal:"low",minimum:"low",light:"low",medium:"high",xhigh:"max",ultra:"max"},disabledEfforts:["none"],supportsReasoningEffort:!0,supportsDisabledThinking:!1};case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:en,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-flash-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Lr,effortAliases:{medium:"high",xhigh:"high"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":case"deepseek-v4-pro-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:en,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:en,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:Zt,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:Fr,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:Zt,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:Zt,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(Br,"createBaseReasoningProfileFromPreset");function nn(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(nn,"getReasoningCapability");function ve(e){return ut(e).enabled}i(ve,"isReasoningEnabled");function ut(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?We(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(ut,"normalizeReasoningRequest");function We(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(We,"normalizeReasoningEffortValue");function Qn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Qn,"mapLegacyReasoningModeToEffortIntent");function jr(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(jr,"effortToLegacyReasoningMode");function Zn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=We(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(Zn,"parseReasoningEffortEnv");function ze(e){let t=Zn(e.envEffort),n=[];Be(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Be(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Qn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Be(n,e.modelDefaultEffort??e.capability?.defaultEffort??Ke(e.capability),"model-default",!1),Be(n,e.providerDefaultEffort,"provider-default",!1),Be(n,e.fallbackEffort??Ue(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:Ur(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=eo(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(ze,"resolveReasoningEffort");function Kr(e){let t=e.currentEffort?We(e.currentEffort):void 0;if(t&&to(t,e.capability))return{effectiveEffort:je(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??Ke(e.capability)??tn(e.capability)??Ue(e.capability),o=n&&je(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(Kr,"resolveReasoningEffortForModelSwitch");function Be(e,t,n,o){if(t===void 0)return;let r=We(t);e.push({value:r,source:n,isExplicit:o})}i(Be,"pushEffortCandidate");function Ur(e,t){let n=e.find(o=>o.value!=="auto");return n?eo(n.value,t,n.isExplicit):Ke(t)??Ue(t)}i(Ur,"resolveAutoEffectiveEffort");function eo(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Ke(t)??tn(t)??Ue(t)??e}if(e==="none")return t?.supportsDisabledThinking===!1?je(e,t):e;if(to(e,t))return je(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Ke(t)??tn(t)??Ue(t)??e}i(eo,"validateReasoningEffort");function je(e,t){return t?.effortAliases?.[e]??e}i(je,"applyEffortAlias");function to(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=Wr(t);return n.length===0?ye.includes(e):n.includes(e)||n.includes(je(e,t))}i(to,"isSupportedReasoningEffort");function Wr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(Wr,"getSupportedEffortValues");function Ke(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(Ke,"getDefaultPresetValue");function tn(e){let t=e?.supportedEfforts?.filter(zr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(tn,"getMiddleVisiblePresetValue");function zr(e){return e.isUserVisible!==!1}i(zr,"isUserVisiblePreset");function Ue(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(Ue,"getFallbackEffortForCapability");function Xr(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(Xr,"getDefaultThinkingDepthForMode");function ce(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ce,"effortToThinkingDepth");function de(e,t,n="unknown"){if(t==="off")return 0;let o={...qn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(de,"resolveThinkingBudget");function le(e,t,n=Yn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(le,"clampThinkingBudget");function on(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(on,"mapDepthToOpenAIReasoningEffort");function no(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):no(t.cause)}i(no,"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 Hr=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],Gr=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],Jr=["minimal","none","low","medium","high","xhigh","max"];function qr(e,t){for(let n of Jr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(qr,"extractRejectedEffort");function rn(e,t){let n=no(e);if(n!==400&&n!==422)return null;let o=Vr(e);if(!o)return null;let r=Hr.some(u=>o.includes(u)),s=Gr.some(u=>o.includes(u));if(!r||!s)return null;let a=qr(o,t);return a?{rejectedEffort:a}:null}i(rn,"classifyReasoningEffortRejection");function oo(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(oo,"readHeader");function ro(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(ro,"parsePositiveNumber");function Yr(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(Yr,"parseHttpDate");function ct(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=ro(oo(e,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=oo(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=ro(u);if(g!==void 0){let h=g*1e3,P=Math.min(h,r);return{type:"header",waitMs:Math.round(P),source:"retry-after-seconds",cappedFromHeader:P!==h}}let E=Yr(u,s);if(E!==void 0){let h=Math.min(E,r);return{type:"header",waitMs:Math.round(h),source:"retry-after-date",cappedFromHeader:h!==E}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),l=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*l:0;return{type:"backoff",waitMs:Math.round(l+p),source:"exponential-backoff",attempt:t.attempt}}i(ct,"parseRetryAfter");function dt(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(dt,"extractHeadersFromError");import{AsyncLocalStorage as Qr}from"node:async_hooks";var io=new Qr,so=8,ao=32;function Zr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(Zr,"parsePositiveInt");function ei(){let e=Xe()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:Zr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??so;return Math.max(1,Math.min(ao,t))}i(ei,"resolveWorkflowMaxConcurrency");function ti(e,t){return io.run(e,t)}i(ti,"runWithScopedConfig");function Xe(){return io.getStore()}i(Xe,"getRunScopedConfig");function Q(e){if(e!==void 0)return e;let t=Xe()?.disablePromptCache;return t!==void 0?t:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}i(Q,"resolvePromptCacheDisabled");var fe={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},uo={...fe,multimodalSupport:"image-input"},Ve={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},co={...Ve,multimodalSupport:"image-input"};function lt(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(lt,"normalizeCapabilityProfile");function Y(e){return{...lt(e)}}i(Y,"cloneCapabilityProfile");function ni(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(ni,"parseEnvInt");function oi(e){switch(e.reasoningPreset){case"zai-glm-5.3":case"zai-glm-5.2":case"deepseek-v4-flash-openai":case"deepseek-v4-pro-openai":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(oi,"shouldLowerAutoReasoningEffort");function pt(){return new DOMException("Request aborted","AbortError")}i(pt,"abortError");function ri(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(pt()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(pt())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(ri,"waitForRetryDelay");function sn(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(sn,"normalizeHttpStatus");function lo(e){if(!e||typeof e!="object")return;let t=e;return sn(t.status)??sn(t.statusCode)??sn(t.code)??lo(t.cause)}i(lo,"extractHttpStatus");function fo(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:fo(t.cause)}i(fo,"extractErrorCode");function ft(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(ft,"getErrorMessage");var Z=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=Xe()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??ni(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}getProviderSupportsThinking(){return this.config.supportsThinking}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsEphemeralSuffix(){return!1}usesPromptCacheAffinity(){return this.config.promptCacheAffinity===!0}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,s,a){throw new I(`${this.name} does not support non-streaming fallback`)}isConfigured(){return he(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}getWireModel(t){return this.getWireModelId(t)}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return Y(this.config.capabilityProfile??fe)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:nn(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=ft(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=lo(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=ft(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=he(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 ut(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=ye.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let d=n?`/${n}`:"";throw new I(`${this.name}${d} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${ye.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let d=n?`/${n}`:"";throw new I(`${this.name}${d} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(d=>d.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",l=a.length>0?a.join(", "):ye.join(", ");throw new I(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${l}.`,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 I(`${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(oi(n)){let s=ze({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=dt(t);if(!n)return;let o=ct(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=ft(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=ft(t);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let l=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,l}catch(l){if(this.isContextOverflowError(l)&&!this.maxOutputTokensOverride){let d=this.parseContextOverflow(l);if(d){this.maxOutputTokensOverride=d,r?.(c+1,o,0);continue}}if(this.isRateLimitError(l)){if(c===o-1)throw new Le(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let d=dt(l)??{},p=ct(d,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,E=this.classifyRateLimitReason(l);if(s?.({provider:this.name,waitMs:g,reason:E,source:p.source,attempt:c+1,maxAttempts:o}),r?r(c+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${c+1}/${o})...`),n?.aborted||(await ri(g,n),n?.aborted))throw pt();continue}if(a&&!u){let d=rn(l,a.effort);if(d){a.onRejected?.({provider:this.name,model:a.model,effort:d.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let d=rn(l,a.effort);if(d)throw this.suppressReasoningEffort=!1,new it(`${this.name} rejected reasoning effort "${d.rejectedEffort}" even after dropping it.`,this.name,d.rejectedEffort,a.model)}if(l instanceof Error){if((l.name==="AbortError"||l.name==="APIUserAbortError")&&n?.aborted)throw l.name==="AbortError"?l:new DOMException(l.message||"Request aborted","AbortError");let d=fo(l);throw(d==="ECONNRESET"||d==="EPIPE")&&this.onStaleConnection(),new I(`${this.name} API error: ${l.message}`,this.name)}throw l}throw new ne("Unexpected end of withRateLimit")}};import gi from"@anthropic-ai/sdk";import{parse as ii}from"partial-json";function ke(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=ii(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(ke,"parseToolInputWithSalvageTracked");function si(e){return ke(e).value}i(si,"parseToolInputWithSalvage");var ai={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 gt(e){return e==null?"unknown":ai[e.trim().toLowerCase()]??"unknown"}i(gt,"classifyStopReason");function Ee(e){let t=gt(e);return t==="end"||t==="tool"||t==="paused"}i(Ee,"isCleanStop");async function be(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(l=>l.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(l=>{r||(r=l),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(l){return an(l,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(be,"runVerifyCredential");function ui(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(ui,"redactKeyMaterial");function an(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=ui(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(an,"classifyVerifyError");function un(e,t){let n=e[e.length-1];if(n&&Te(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(un,"insertCacheBoundary");function Te(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(Te,"isCacheBoundary");function cn(e,t){let n=[];for(let o of e){if(Te(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(cn,"lowerCacheBoundaries");function xe(e){return e.filter(t=>!Te(t))}i(xe,"stripCacheBoundaries");import{readFile as ci,stat as di}from"node:fs/promises";import li from"node:path";var fi={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},Ce="[Historical image unavailable: the local attachment file is missing.]",po="[Image content omitted: this provider does not support inline images in tool results.]";async function go(e){try{return await di(e),!1}catch(t){let n=t.code;return n==="ENOENT"||n==="ENOTDIR"}}i(go,"isImageFileMissing");function mt(e,t){return t??fi[li.extname(e).toLowerCase()]??"image/png"}i(mt,"resolveImageMediaType");async function pi(e){return(await ci(e)).toString("base64")}i(pi,"readImageFileAsBase64");async function ht(e){try{return await pi(e)}catch(t){let n=t.code;if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}i(ht,"readImageFileAsBase64IfAvailable");async function mo(e,t){let n=await ht(e);if(n!==void 0)return`data:${mt(e,t)};base64,${n}`}i(mo,"buildImageDataUrlIfAvailable");var mi="KodaX",hi="effort-2025-11-24";function ho(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(ho,"appendAnthropicEphemeralSuffix");function yi(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":mi}}i(yi,"getAnthropicCompatDefaultHeaders");function dn(e,t){if(!e)return t;let n=typeof e.input_tokens=="number",o=typeof e.cache_creation_input_tokens=="number",r=typeof e.cache_read_input_tokens=="number",s=n||o||r,a=n?e.input_tokens:0,u=s?o?e.cache_creation_input_tokens:void 0:t?.cachedWriteTokens,c=s?r?e.cache_read_input_tokens:void 0:t?.cachedReadTokens,l=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,d=s?a+(u??0)+(c??0):t?.inputTokens??0;if(![d,l,u,c].some(p=>p!==void 0&&(!Number.isFinite(p)||p<0)))return{inputTokens:d,outputTokens:l,totalTokens:d+l,...c!==void 0?{cachedReadTokens:c}:{},...u!==void 0?{cachedWriteTokens:u}:{}}}i(dn,"normalizeAnthropicUsage");function ln(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(ln,"isRecord");function vi(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(vi,"selectAnthropicOutputEffort");function yo(e,t){let n=vi(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...ln(r)?r:{},effort:n}}i(yo,"applyAnthropicOutputEffort");function yt(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...ln(o)?o:{},effort:t}}i(yt,"setAnthropicOutputEffort");function ki(e){let n=e.output_config;return ln(n)&&typeof n.effort=="string"}i(ki,"hasAnthropicOutputEffort");var $=class extends Z{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=yi(this.config);return new gi({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&&ki(t)?{"anthropic-beta":hi}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(u==="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(a.disabled){if(u==="zai-glm-5.3"){t.thinking={type:"adaptive"},yt(t,"low");return}(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&&(c.reasoning_effort=a.effort);return}if(u==="zai-glm-5.3"){t.thinking={type:"adaptive"},yt(t,a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},yt(t,a.effort);return}if(u==="minimax-m3"){t.thinking={type:"adaptive"};return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},yt(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let l=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:l}}}}resolveReasoningProfileBudget(t,n,o,r,s){let u=(n?t.budgetByEffort?.[n]:void 0)??de(this.config,ce(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),l=c!==void 0?Math.min(u,c):u;return le(l,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 be({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}applyCacheControlToSystem(t){if(!t.trim()||Q())return t;let n=un([{type:"text",text:t}],"system");return cn(n,"attach")}applyCacheControlToTools(t){if(t.length===0||Q())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||Q())return t;let n=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"){n=l;break}if(n===-1)return t;let o=t[n];if(typeof o.content=="string"){if(o.content.length===0)return t;let l=t.slice();return l[n]={...o,content:[{type:"text",text:o.content,cache_control:{type:"ephemeral"}}]},l}if(o.content.length===0)return t;let r=o.content,a={...r[r.length-1],cache_control:{type:"ephemeral"}},u=[...r.slice(0,-1),a],c=t.slice();return c[n]={...o,content:u},c}supportsEphemeralSuffix(){return!0}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model,l=this.getWireModelId(c);this.validateExplicitReasoningEffort(u,c);let d=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),p=ho(this.applyCacheControlToMessages(await this.convertMessages(t,c)),s?.ephemeralSuffix?.content),g=u.enabled?this.getReasoningCapability(c):"none",E=this.getReasoningProfile(c),h=E?["profile","none"]:u.enabled?this.getReasoningFallbackChain(g).filter(x=>x==="native-budget"||x==="native-toggle"||x==="native-adaptive"||x==="none"):["none"],P=!!s?.forcedToolName,f=i(x=>{let _={model:l,max_tokens:d,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&P&&(_.tool_choice={type:"tool",name:s.forcedToolName}),x!=="none")if(x==="profile"&&E)this.applyReasoningProfile(_,E,u,c,d);else if(x==="native-budget"){let O=de(this.config,ce(u.effort),u.taskType);_.thinking={type:"enabled",budget_tokens:le(O,d)}}else x==="native-toggle"?_.thinking={type:"enabled"}:x==="native-adaptive"&&(_.thinking={type:"adaptive"},yo(_,u));return _},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let m=[],b=[],y=[],C,T=null,v="",k="",M="",S="",R="",F="",V="",W=!1,z,N=Date.now(),A=Date.now(),B,J;for(let x of h){for(;!B;)try{let _=f(x);B=await this.client.messages.create(_,this.buildMessageCreateOptions(_,c,a))}catch(_){if(J=_,P&&this.shouldFallbackForForcedToolChoiceError(_)){P=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let O=x==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:x==="native-budget"?["budget_tokens","thinking"]:x==="native-toggle"?["thinking"]:x==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(_,...O))throw _;break}if(B)break}if(!B)throw J??new I("All reasoning capability attempts failed without a captured error",this.name);let ot=Date.now(),Oe=0,Ne=0,Ht=3e4;for await(let x of B){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let _=Date.now(),O=_-ot;if(O>Ht&&(Oe++,Ne+=O,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(O/1e3)}s gap before ${x.type}`,{stallCount:Oe,totalStallMs:Ne,eventType:x.type})),ot=_,x.type==="content_block_start"||x.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),x.type==="content_block_start"){N=Date.now();let w=x.content_block;T=w.type,process.env.KODAX_DEBUG_TOOL_STREAM&&w.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:w.type,id:w.id,name:w.name}),w.type==="thinking"?(k="",M=w.signature??""):w.type==="redacted_thinking"?(T="redacted_thinking",S=w.data??""):w.type==="text"?v="":w.type==="tool_use"&&(R=w.id,F=w.name,V="")}else if(x.type==="content_block_delta"){N=Date.now();let w=x.delta;w.type==="thinking_delta"?(k+=w.thinking??"",s?.onThinkingDelta?.(w.thinking??"")):w.type==="text_delta"?(v+=w.text??"",s?.onTextDelta?.(w.text??"")):w.type==="input_json_delta"&&(V+=w.partial_json??"",s?.onToolInputDelta?.(F,w.partial_json??"",R?{toolId:R}:void 0))}else if(x.type==="content_block_stop"){if(N=Date.now(),T==="thinking")k&&(y.push({type:"thinking",thinking:k,signature:M}),s?.onThinkingEnd?.(k));else if(T==="redacted_thinking")S&&y.push({type:"redacted_thinking",data:S}),S="";else if(T==="text")v&&m.push({type:"text",text:v});else if(T==="tool_use")if(!R||!F)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(R),name:JSON.stringify(F),input:V.slice(0,100)});else{let w=ke(V);b.push({type:"tool_use",id:R,name:F,input:w.value,...w.salvaged?{_salvaged:!0,_truncated:!0}:{}})}T=null}else if(x.type==="message_stop"){if(W=!0,N=Date.now(),process.env.KODAX_DEBUG_STREAM){let w=Date.now()-A;this.logStreamDiagnostic(`[Stream] message_stop received after ${w}ms`)}}else if(x.type==="message_delta"){N=Date.now(),C=dn(x.usage,C);let w=x.delta;w?.stop_reason&&(z=w.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${z}`))}else x.type==="message_start"&&(N=Date.now(),C=dn(x.message?.usage,C),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!W){let x=Date.now()-A,_=Date.now()-N;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 message_stop:",{duration:x,lastEventAge:_,reason:O,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length}),new DOMException(O,"AbortError")}if(!z){let O=new Error(`Stream incomplete: message_stop event not received. Duration: ${x}ms, Last event: ${_}ms ago. This may indicate a network disconnection or API timeout.`);throw O.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:x,lastEventAge:_,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length}),O}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:x,lastEventAge:_,stopReason:z,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length})}let D=Ee(z)?b.map(({_truncated:x,..._})=>_):b;return{textBlocks:m,toolBlocks:D,thinkingBlocks:y,usage:C,stopReason:z}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model,l=this.getWireModelId(c);this.validateExplicitReasoningEffort(u,c);let d=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),p=ho(this.applyCacheControlToMessages(await this.convertMessages(t,c)),s?.ephemeralSuffix?.content),g=u.enabled?this.getReasoningCapability(c):"none",E=this.getReasoningProfile(c),h=E?["profile","none"]:u.enabled?this.getReasoningFallbackChain(g).filter(v=>v==="native-budget"||v==="native-toggle"||v==="native-adaptive"||v==="none"):["none"],P=!!s?.forcedToolName,f=i(v=>{let k={model:l,max_tokens:d,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&P&&(k.tool_choice={type:"tool",name:s.forcedToolName}),v!=="none")if(v==="profile"&&E)this.applyReasoningProfile(k,E,u,c,d);else if(v==="native-budget"){let M=de(this.config,ce(u.effort),u.taskType);k.thinking={type:"enabled",budget_tokens:le(M,d)}}else v==="native-toggle"?k.thinking={type:"enabled"}:v==="native-adaptive"&&(k.thinking={type:"adaptive"},yo(k,u));return k},"buildRequest"),m,b;for(let v of h){for(;!m;)try{let k=f(v);m=await this.client.messages.create(k,this.buildMessageCreateOptions(k,c,a))}catch(k){if(b=k,P&&this.shouldFallbackForForcedToolChoiceError(k)){P=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let M=v==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:v==="native-budget"?["budget_tokens","thinking"]:v==="native-toggle"?["thinking"]:v==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(k,...M))throw k;break}if(m)break}if(!m)throw b??new I("All reasoning capability attempts failed without a captured error",this.name);let y=[],C=[],T=[];for(let v of m.content)v.type==="text"?(y.push({type:"text",text:v.text}),s?.onTextDelta?.(v.text)):v.type==="thinking"?(T.push({type:"thinking",thinking:v.thinking,signature:v.signature??""}),s?.onThinkingDelta?.(v.thinking),s?.onThinkingEnd?.(v.thinking)):v.type==="redacted_thinking"?T.push({type:"redacted_thinking",data:v.data}):v.type==="tool_use"&&C.push({type:"tool_use",id:v.id,name:v.name,input:typeof v.input=="object"&&v.input!==null?v.input:{}});return{textBlocks:y,toolBlocks:C,thinkingBlocks:T,usage:dn(m.usage),stopReason:m.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(Te(n))throw new I("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 Cr}from"node:async_hooks";var rt=new Cr;function Pr(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");return rt.run({provider:e,credential:t},n)}i(Pr,"runWithProviderCredential");function _r(e){let t=rt.getStore();return t?.provider===e?t.credential:void 0}i(_r,"getScopedProviderCredential");function he(e,t){let n=rt.getStore();return n?n.provider===e?n.credential:void 0:t}i(he,"resolveProviderCredential");function wr(e){let t=rt.getStore()?.credential;return t?$e(e,t,new WeakMap):e}i(wr,"redactScopedProviderCredential");function $e(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($e(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=$e(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push($e(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]=$e(a.value,t,n)}return r}i($e,"redactCredentialValue");var ne=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},I=class extends ne{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Le=class extends ne{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},Jt=class extends ne{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},it=class extends I{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},qt=class extends ne{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Yt=32768,Mr=32e3,Sr=64e3,Rr=.5;function Fe(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(Fe,"timeoutSecToMs");function Ar(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(Ar,"parseTimeoutSecEnvMs");function Dr(e){if(!e)return;let t={requestTimeoutMs:Fe(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Fe(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Fe(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Fe(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Dr,"resolveLlmTimeoutConfig");function st(e,t){return`${e}/${t??""}`}i(st,"capabilityCacheKey");function Qt(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(Qt,"narrowReasoningProfile");function Ir(e,t,n){return e[st(t,n)]?.rejected??[]}i(Ir,"getRejectedEfforts");function Or(e,t,n,o,r,s){let a=st(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:s}}}i(Or,"addRejectedEffort");function Nr(e,t,n){if(!t)return{};let o={...e};return delete o[st(t,n)],o}i(Nr,"removeCacheEntry");function $r(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:u}}return t}i($r,"sanitizeCapabilityCache");var Lr=["off","auto","quick","balanced","deep"],ye=["auto","none","low","medium","high"],Yn={low:6e3,medium:1e4,high:2e4},Qn=4096,Zt=[{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"}],en=[{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"}],Fr=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Low reasoning"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to high"},{value:"max",description:"Maximum reasoning"}],Br=[{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 at(e,t={}){return{...jr(e),...t,reasoningPreset:e}}i(at,"createReasoningProfileFromPreset");function jr(e){switch(e){case"zai-glm-5.3":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:[{value:"none",description:"Maps to low reasoning"},{value:"minimal",description:"Alias to low",isUserVisible:!1},{value:"low",description:"Low reasoning"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning"},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning",isDefault:!0}],effortAliases:{none:"low",minimal:"low",minimum:"low",light:"low",medium:"high",xhigh:"max",ultra:"max"},disabledEfforts:["none"],supportsReasoningEffort:!0,supportsDisabledThinking:!1};case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:en,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-flash-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Fr,effortAliases:{medium:"high",xhigh:"high"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":case"deepseek-v4-pro-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:en,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:en,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:Zt,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:Br,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:Zt,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:Zt,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(jr,"createBaseReasoningProfileFromPreset");function nn(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(nn,"getReasoningCapability");function ve(e){return ut(e).enabled}i(ve,"isReasoningEnabled");function ut(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?We(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(ut,"normalizeReasoningRequest");function We(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(We,"normalizeReasoningEffortValue");function Zn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Zn,"mapLegacyReasoningModeToEffortIntent");function Kr(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(Kr,"effortToLegacyReasoningMode");function eo(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=We(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(eo,"parseReasoningEffortEnv");function ze(e){let t=eo(e.envEffort),n=[];Be(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Be(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Zn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Be(n,e.modelDefaultEffort??e.capability?.defaultEffort??Ke(e.capability),"model-default",!1),Be(n,e.providerDefaultEffort,"provider-default",!1),Be(n,e.fallbackEffort??Ue(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:Wr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=to(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(ze,"resolveReasoningEffort");function Ur(e){let t=e.currentEffort?We(e.currentEffort):void 0;if(t&&no(t,e.capability))return{effectiveEffort:je(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??Ke(e.capability)??tn(e.capability)??Ue(e.capability),o=n&&je(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(Ur,"resolveReasoningEffortForModelSwitch");function Be(e,t,n,o){if(t===void 0)return;let r=We(t);e.push({value:r,source:n,isExplicit:o})}i(Be,"pushEffortCandidate");function Wr(e,t){let n=e.find(o=>o.value!=="auto");return n?to(n.value,t,n.isExplicit):Ke(t)??Ue(t)}i(Wr,"resolveAutoEffectiveEffort");function to(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Ke(t)??tn(t)??Ue(t)??e}if(e==="none")return t?.supportsDisabledThinking===!1?je(e,t):e;if(no(e,t))return je(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Ke(t)??tn(t)??Ue(t)??e}i(to,"validateReasoningEffort");function je(e,t){return t?.effortAliases?.[e]??e}i(je,"applyEffortAlias");function no(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=zr(t);return n.length===0?ye.includes(e):n.includes(e)||n.includes(je(e,t))}i(no,"isSupportedReasoningEffort");function zr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(zr,"getSupportedEffortValues");function Ke(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(Ke,"getDefaultPresetValue");function tn(e){let t=e?.supportedEfforts?.filter(Xr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(tn,"getMiddleVisiblePresetValue");function Xr(e){return e.isUserVisible!==!1}i(Xr,"isUserVisiblePreset");function Ue(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(Ue,"getFallbackEffortForCapability");function Vr(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(Vr,"getDefaultThinkingDepthForMode");function ce(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ce,"effortToThinkingDepth");function de(e,t,n="unknown"){if(t==="off")return 0;let o={...Yn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(de,"resolveThinkingBudget");function le(e,t,n=Qn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(le,"clampThinkingBudget");function on(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(on,"mapDepthToOpenAIReasoningEffort");function oo(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):oo(t.cause)}i(oo,"getStatus");function Hr(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(Hr,"getMessage");var Gr=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],Jr=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],qr=["minimal","none","low","medium","high","xhigh","max"];function Yr(e,t){for(let n of qr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(Yr,"extractRejectedEffort");function rn(e,t){let n=oo(e);if(n!==400&&n!==422)return null;let o=Hr(e);if(!o)return null;let r=Gr.some(u=>o.includes(u)),s=Jr.some(u=>o.includes(u));if(!r||!s)return null;let a=Yr(o,t);return a?{rejectedEffort:a}:null}i(rn,"classifyReasoningEffortRejection");function ro(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(ro,"readHeader");function io(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(io,"parsePositiveNumber");function Qr(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(Qr,"parseHttpDate");function ct(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=io(ro(e,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=ro(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=io(u);if(g!==void 0){let h=g*1e3,P=Math.min(h,r);return{type:"header",waitMs:Math.round(P),source:"retry-after-seconds",cappedFromHeader:P!==h}}let E=Qr(u,s);if(E!==void 0){let h=Math.min(E,r);return{type:"header",waitMs:Math.round(h),source:"retry-after-date",cappedFromHeader:h!==E}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),l=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*l:0;return{type:"backoff",waitMs:Math.round(l+p),source:"exponential-backoff",attempt:t.attempt}}i(ct,"parseRetryAfter");function dt(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(dt,"extractHeadersFromError");import{AsyncLocalStorage as Zr}from"node:async_hooks";var so=new Zr,ao=8,uo=32;function ei(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(ei,"parsePositiveInt");function ti(){let e=Xe()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:ei(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??ao;return Math.max(1,Math.min(uo,t))}i(ti,"resolveWorkflowMaxConcurrency");function ni(e,t){return so.run(e,t)}i(ni,"runWithScopedConfig");function Xe(){return so.getStore()}i(Xe,"getRunScopedConfig");function Q(e){if(e!==void 0)return e;let t=Xe()?.disablePromptCache;return t!==void 0?t:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}i(Q,"resolvePromptCacheDisabled");var fe={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},co={...fe,multimodalSupport:"image-input"},Ve={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},lo={...Ve,multimodalSupport:"image-input"};function lt(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(lt,"normalizeCapabilityProfile");function Y(e){return{...lt(e)}}i(Y,"cloneCapabilityProfile");function oi(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(oi,"parseEnvInt");function ri(e){switch(e.reasoningPreset){case"zai-glm-5.3":case"zai-glm-5.2":case"deepseek-v4-flash-openai":case"deepseek-v4-pro-openai":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(ri,"shouldLowerAutoReasoningEffort");function pt(){return new DOMException("Request aborted","AbortError")}i(pt,"abortError");function ii(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(pt()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(pt())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(ii,"waitForRetryDelay");function sn(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(sn,"normalizeHttpStatus");function fo(e){if(!e||typeof e!="object")return;let t=e;return sn(t.status)??sn(t.statusCode)??sn(t.code)??fo(t.cause)}i(fo,"extractHttpStatus");function po(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:po(t.cause)}i(po,"extractErrorCode");function ft(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(ft,"getErrorMessage");var Z=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=Xe()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??oi(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}getProviderSupportsThinking(){return this.config.supportsThinking}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsEphemeralSuffix(){return!1}usesPromptCacheAffinity(){return this.config.promptCacheAffinity===!0}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,s,a){throw new I(`${this.name} does not support non-streaming fallback`)}isConfigured(){return he(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}getWireModel(t){return this.getWireModelId(t)}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return Y(this.config.capabilityProfile??fe)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:nn(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=ft(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=fo(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=ft(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=he(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 ut(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=ye.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let d=n?`/${n}`:"";throw new I(`${this.name}${d} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${ye.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let d=n?`/${n}`:"";throw new I(`${this.name}${d} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(d=>d.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",l=a.length>0?a.join(", "):ye.join(", ");throw new I(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${l}.`,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 I(`${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(ri(n)){let s=ze({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=dt(t);if(!n)return;let o=ct(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=ft(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=ft(t);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let l=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,l}catch(l){if(this.isContextOverflowError(l)&&!this.maxOutputTokensOverride){let d=this.parseContextOverflow(l);if(d){this.maxOutputTokensOverride=d,r?.(c+1,o,0);continue}}if(this.isRateLimitError(l)){if(c===o-1)throw new Le(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let d=dt(l)??{},p=ct(d,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,E=this.classifyRateLimitReason(l);if(s?.({provider:this.name,waitMs:g,reason:E,source:p.source,attempt:c+1,maxAttempts:o}),r?r(c+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${c+1}/${o})...`),n?.aborted||(await ii(g,n),n?.aborted))throw pt();continue}if(a&&!u){let d=rn(l,a.effort);if(d){a.onRejected?.({provider:this.name,model:a.model,effort:d.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let d=rn(l,a.effort);if(d)throw this.suppressReasoningEffort=!1,new it(`${this.name} rejected reasoning effort "${d.rejectedEffort}" even after dropping it.`,this.name,d.rejectedEffort,a.model)}if(l instanceof Error){if((l.name==="AbortError"||l.name==="APIUserAbortError")&&n?.aborted)throw l.name==="AbortError"?l:new DOMException(l.message||"Request aborted","AbortError");let d=po(l);throw(d==="ECONNRESET"||d==="EPIPE")&&this.onStaleConnection(),new I(`${this.name} API error: ${l.message}`,this.name)}throw l}throw new ne("Unexpected end of withRateLimit")}};import{createRequire as mi}from"node:module";import{parse as si}from"partial-json";function ke(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=si(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(ke,"parseToolInputWithSalvageTracked");function ai(e){return ke(e).value}i(ai,"parseToolInputWithSalvage");var ui={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 gt(e){return e==null?"unknown":ui[e.trim().toLowerCase()]??"unknown"}i(gt,"classifyStopReason");function Ee(e){let t=gt(e);return t==="end"||t==="tool"||t==="paused"}i(Ee,"isCleanStop");async function be(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(l=>l.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(l=>{r||(r=l),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(l){return an(l,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(be,"runVerifyCredential");function ci(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(ci,"redactKeyMaterial");function an(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=ci(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(an,"classifyVerifyError");function un(e,t){let n=e[e.length-1];if(n&&Te(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(un,"insertCacheBoundary");function Te(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(Te,"isCacheBoundary");function cn(e,t){let n=[];for(let o of e){if(Te(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(cn,"lowerCacheBoundaries");function xe(e){return e.filter(t=>!Te(t))}i(xe,"stripCacheBoundaries");import{readFile as di,stat as li}from"node:fs/promises";import fi from"node:path";var pi={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},Ce="[Historical image unavailable: the local attachment file is missing.]",go="[Image content omitted: this provider does not support inline images in tool results.]";async function mo(e){try{return await li(e),!1}catch(t){let n=t.code;return n==="ENOENT"||n==="ENOTDIR"}}i(mo,"isImageFileMissing");function mt(e,t){return t??pi[fi.extname(e).toLowerCase()]??"image/png"}i(mt,"resolveImageMediaType");async function gi(e){return(await di(e)).toString("base64")}i(gi,"readImageFileAsBase64");async function ht(e){try{return await gi(e)}catch(t){let n=t.code;if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}i(ht,"readImageFileAsBase64IfAvailable");async function ho(e,t){let n=await ht(e);if(n!==void 0)return`data:${mt(e,t)};base64,${n}`}i(ho,"buildImageDataUrlIfAvailable");var hi="KodaX",yi="effort-2025-11-24",vi=mi(import.meta.url);function ln(e){let t=vi("@anthropic-ai/sdk");return new t.default(e)}i(ln,"createAnthropicSdkClient");function yo(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(yo,"appendAnthropicEphemeralSuffix");function ki(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":hi}}i(ki,"getAnthropicCompatDefaultHeaders");function dn(e,t){if(!e)return t;let n=typeof e.input_tokens=="number",o=typeof e.cache_creation_input_tokens=="number",r=typeof e.cache_read_input_tokens=="number",s=n||o||r,a=n?e.input_tokens:0,u=s?o?e.cache_creation_input_tokens:void 0:t?.cachedWriteTokens,c=s?r?e.cache_read_input_tokens:void 0:t?.cachedReadTokens,l=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,d=s?a+(u??0)+(c??0):t?.inputTokens??0;if(![d,l,u,c].some(p=>p!==void 0&&(!Number.isFinite(p)||p<0)))return{inputTokens:d,outputTokens:l,totalTokens:d+l,...c!==void 0?{cachedReadTokens:c}:{},...u!==void 0?{cachedWriteTokens:u}:{}}}i(dn,"normalizeAnthropicUsage");function fn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(fn,"isRecord");function Ei(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Ei,"selectAnthropicOutputEffort");function vo(e,t){let n=Ei(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...fn(r)?r:{},effort:n}}i(vo,"applyAnthropicOutputEffort");function yt(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...fn(o)?o:{},effort:t}}i(yt,"setAnthropicOutputEffort");function bi(e){let n=e.output_config;return fn(n)&&typeof n.effort=="string"}i(bi,"hasAnthropicOutputEffort");var $=class extends Z{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=ki(this.config);return ln({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&&bi(t)?{"anthropic-beta":yi}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(u==="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(a.disabled){if(u==="zai-glm-5.3"){t.thinking={type:"adaptive"},yt(t,"low");return}(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&&(c.reasoning_effort=a.effort);return}if(u==="zai-glm-5.3"){t.thinking={type:"adaptive"},yt(t,a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},yt(t,a.effort);return}if(u==="minimax-m3"){t.thinking={type:"adaptive"};return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},yt(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let l=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:l}}}}resolveReasoningProfileBudget(t,n,o,r,s){let u=(n?t.budgetByEffort?.[n]:void 0)??de(this.config,ce(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),l=c!==void 0?Math.min(u,c):u;return le(l,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 be({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}applyCacheControlToSystem(t){if(!t.trim()||Q())return t;let n=un([{type:"text",text:t}],"system");return cn(n,"attach")}applyCacheControlToTools(t){if(t.length===0||Q())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||Q())return t;let n=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"){n=l;break}if(n===-1)return t;let o=t[n];if(typeof o.content=="string"){if(o.content.length===0)return t;let l=t.slice();return l[n]={...o,content:[{type:"text",text:o.content,cache_control:{type:"ephemeral"}}]},l}if(o.content.length===0)return t;let r=o.content,a={...r[r.length-1],cache_control:{type:"ephemeral"}},u=[...r.slice(0,-1),a],c=t.slice();return c[n]={...o,content:u},c}supportsEphemeralSuffix(){return!0}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model,l=this.getWireModelId(c);this.validateExplicitReasoningEffort(u,c);let d=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),p=yo(this.applyCacheControlToMessages(await this.convertMessages(t,c)),s?.ephemeralSuffix?.content),g=u.enabled?this.getReasoningCapability(c):"none",E=this.getReasoningProfile(c),h=E?["profile","none"]:u.enabled?this.getReasoningFallbackChain(g).filter(x=>x==="native-budget"||x==="native-toggle"||x==="native-adaptive"||x==="none"):["none"],P=!!s?.forcedToolName,f=i(x=>{let _={model:l,max_tokens:d,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&P&&(_.tool_choice={type:"tool",name:s.forcedToolName}),x!=="none")if(x==="profile"&&E)this.applyReasoningProfile(_,E,u,c,d);else if(x==="native-budget"){let O=de(this.config,ce(u.effort),u.taskType);_.thinking={type:"enabled",budget_tokens:le(O,d)}}else x==="native-toggle"?_.thinking={type:"enabled"}:x==="native-adaptive"&&(_.thinking={type:"adaptive"},vo(_,u));return _},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let m=[],b=[],y=[],C,T=null,v="",k="",M="",S="",R="",F="",V="",W=!1,z,N=Date.now(),A=Date.now(),B,J;for(let x of h){for(;!B;)try{let _=f(x);B=await this.client.messages.create(_,this.buildMessageCreateOptions(_,c,a))}catch(_){if(J=_,P&&this.shouldFallbackForForcedToolChoiceError(_)){P=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let O=x==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:x==="native-budget"?["budget_tokens","thinking"]:x==="native-toggle"?["thinking"]:x==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(_,...O))throw _;break}if(B)break}if(!B)throw J??new I("All reasoning capability attempts failed without a captured error",this.name);let ot=Date.now(),Oe=0,Ne=0,Ht=3e4;for await(let x of B){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let _=Date.now(),O=_-ot;if(O>Ht&&(Oe++,Ne+=O,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(O/1e3)}s gap before ${x.type}`,{stallCount:Oe,totalStallMs:Ne,eventType:x.type})),ot=_,x.type==="content_block_start"||x.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),x.type==="content_block_start"){N=Date.now();let w=x.content_block;T=w.type,process.env.KODAX_DEBUG_TOOL_STREAM&&w.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:w.type,id:w.id,name:w.name}),w.type==="thinking"?(k="",M=w.signature??""):w.type==="redacted_thinking"?(T="redacted_thinking",S=w.data??""):w.type==="text"?v="":w.type==="tool_use"&&(R=w.id,F=w.name,V="")}else if(x.type==="content_block_delta"){N=Date.now();let w=x.delta;w.type==="thinking_delta"?(k+=w.thinking??"",s?.onThinkingDelta?.(w.thinking??"")):w.type==="text_delta"?(v+=w.text??"",s?.onTextDelta?.(w.text??"")):w.type==="input_json_delta"&&(V+=w.partial_json??"",s?.onToolInputDelta?.(F,w.partial_json??"",R?{toolId:R}:void 0))}else if(x.type==="content_block_stop"){if(N=Date.now(),T==="thinking")k&&(y.push({type:"thinking",thinking:k,signature:M}),s?.onThinkingEnd?.(k));else if(T==="redacted_thinking")S&&y.push({type:"redacted_thinking",data:S}),S="";else if(T==="text")v&&m.push({type:"text",text:v});else if(T==="tool_use")if(!R||!F)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(R),name:JSON.stringify(F),input:V.slice(0,100)});else{let w=ke(V);b.push({type:"tool_use",id:R,name:F,input:w.value,...w.salvaged?{_salvaged:!0,_truncated:!0}:{}})}T=null}else if(x.type==="message_stop"){if(W=!0,N=Date.now(),process.env.KODAX_DEBUG_STREAM){let w=Date.now()-A;this.logStreamDiagnostic(`[Stream] message_stop received after ${w}ms`)}}else if(x.type==="message_delta"){N=Date.now(),C=dn(x.usage,C);let w=x.delta;w?.stop_reason&&(z=w.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${z}`))}else x.type==="message_start"&&(N=Date.now(),C=dn(x.message?.usage,C),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!W){let x=Date.now()-A,_=Date.now()-N;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 message_stop:",{duration:x,lastEventAge:_,reason:O,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length}),new DOMException(O,"AbortError")}if(!z){let O=new Error(`Stream incomplete: message_stop event not received. Duration: ${x}ms, Last event: ${_}ms ago. This may indicate a network disconnection or API timeout.`);throw O.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:x,lastEventAge:_,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length}),O}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:x,lastEventAge:_,stopReason:z,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length})}let D=Ee(z)?b.map(({_truncated:x,..._})=>_):b;return{textBlocks:m,toolBlocks:D,thinkingBlocks:y,usage:C,stopReason:z}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model,l=this.getWireModelId(c);this.validateExplicitReasoningEffort(u,c);let d=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),p=yo(this.applyCacheControlToMessages(await this.convertMessages(t,c)),s?.ephemeralSuffix?.content),g=u.enabled?this.getReasoningCapability(c):"none",E=this.getReasoningProfile(c),h=E?["profile","none"]:u.enabled?this.getReasoningFallbackChain(g).filter(v=>v==="native-budget"||v==="native-toggle"||v==="native-adaptive"||v==="none"):["none"],P=!!s?.forcedToolName,f=i(v=>{let k={model:l,max_tokens:d,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&P&&(k.tool_choice={type:"tool",name:s.forcedToolName}),v!=="none")if(v==="profile"&&E)this.applyReasoningProfile(k,E,u,c,d);else if(v==="native-budget"){let M=de(this.config,ce(u.effort),u.taskType);k.thinking={type:"enabled",budget_tokens:le(M,d)}}else v==="native-toggle"?k.thinking={type:"enabled"}:v==="native-adaptive"&&(k.thinking={type:"adaptive"},vo(k,u));return k},"buildRequest"),m,b;for(let v of h){for(;!m;)try{let k=f(v);m=await this.client.messages.create(k,this.buildMessageCreateOptions(k,c,a))}catch(k){if(b=k,P&&this.shouldFallbackForForcedToolChoiceError(k)){P=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let M=v==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:v==="native-budget"?["budget_tokens","thinking"]:v==="native-toggle"?["thinking"]:v==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(k,...M))throw k;break}if(m)break}if(!m)throw b??new I("All reasoning capability attempts failed without a captured error",this.name);let y=[],C=[],T=[];for(let v of m.content)v.type==="text"?(y.push({type:"text",text:v.text}),s?.onTextDelta?.(v.text)):v.type==="thinking"?(T.push({type:"thinking",thinking:v.thinking,signature:v.signature??""}),s?.onThinkingDelta?.(v.thinking),s?.onThinkingEnd?.(v.thinking)):v.type==="redacted_thinking"?T.push({type:"redacted_thinking",data:v.data}):v.type==="tool_use"&&C.push({type:"tool_use",id:v.id,name:v.name,input:typeof v.input=="object"&&v.input!==null?v.input:{}});return{textBlocks:y,toolBlocks:C,thinkingBlocks:T,usage:dn(m.usage),stopReason:m.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(Te(n))throw new I("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=[],c=[];for(let d of s.content)d.type==="thinking"?!r||typeof d.signature=="string"&&d.signature.length>0?u.push({type:"thinking",thinking:d.thinking,signature:d.signature??""}):d.thinking&&c.push(d.thinking):d.type==="redacted_thinking"&&(r||u.push({type:"redacted_thinking",data:d.data}));c.length>0&&s.role==="assistant"&&u.push({type:"text",text:`<prior_reasoning>
|
|
6
6
|
${c.join(`
|
|
7
7
|
|
|
8
8
|
`)}
|
|
9
|
-
</prior_reasoning>`});for(let d of s.content)if(d.type==="tool_result"&&s.role==="user"){let p;if(typeof d.content=="string")p=d.content;else{let g=[];for(let E of d.content)if(E.type==="text")g.push({type:"text",text:E.text});else if(E.type==="image"){let h=await ht(E.path);h===void 0?g.push({type:"text",text:Ce}):g.push({type:"image",source:{type:"base64",media_type:mt(E.path,E.mediaType),data:h}})}p=g}u.push({type:"tool_result",tool_use_id:d.tool_use_id,content:p,...d.is_error===!0?{is_error:!0}:{}})}for(let d of s.content)d.type==="tool_use"&&s.role==="assistant"&&u.push({type:"tool_use",id:d.id,name:d.name,input:d.input});for(let d of s.content)if(d.type==="text")u.push({type:"text",text:d.text});else if(d.type==="image"&&s.role==="user"){let p=await ht(d.path);p===void 0?u.push({type:"text",text:Ce}):u.push({type:"image",source:{type:"base64",media_type:mt(d.path,d.mediaType),data:p}})}if(a==="assistant"&&this.config.supportsThinking&&!r){let d=u.some(g=>g.type==="tool_use"),p=u.some(g=>g.type==="thinking"||g.type==="redacted_thinking");d&&!p&&u.unshift({type:"thinking",thinking:"...",signature:""})}let l=u.length===0||(a==="assistant"||a==="user")&&u.every(d=>{let p=d;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:l?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=i((o,r)=>{let s=new Set;if(!o||typeof o.content=="string"||!Array.isArray(o.content))return s;for(let a of o.content){let u=a;r==="tool_use"&&u.type==="tool_use"&&u.id&&s.add(u.id),r==="tool_result"&&u.type==="tool_result"&&u.tool_use_id&&s.add(u.tool_use_id)}return s},"collectIds");return t.map((o,r)=>{if(typeof o.content=="string"||!Array.isArray(o.content))return o;let s=o.content;if(o.role==="assistant"){let a=n(t[r+1],"tool_result");s=s.filter(u=>{let c=u;return c.type!=="tool_use"||!!c.id&&a.has(c.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(u=>{let c=u;return c.type!=="tool_result"||!!c.tool_use_id&&a.has(c.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import
|
|
9
|
+
</prior_reasoning>`});for(let d of s.content)if(d.type==="tool_result"&&s.role==="user"){let p;if(typeof d.content=="string")p=d.content;else{let g=[];for(let E of d.content)if(E.type==="text")g.push({type:"text",text:E.text});else if(E.type==="image"){let h=await ht(E.path);h===void 0?g.push({type:"text",text:Ce}):g.push({type:"image",source:{type:"base64",media_type:mt(E.path,E.mediaType),data:h}})}p=g}u.push({type:"tool_result",tool_use_id:d.tool_use_id,content:p,...d.is_error===!0?{is_error:!0}:{}})}for(let d of s.content)d.type==="tool_use"&&s.role==="assistant"&&u.push({type:"tool_use",id:d.id,name:d.name,input:d.input});for(let d of s.content)if(d.type==="text")u.push({type:"text",text:d.text});else if(d.type==="image"&&s.role==="user"){let p=await ht(d.path);p===void 0?u.push({type:"text",text:Ce}):u.push({type:"image",source:{type:"base64",media_type:mt(d.path,d.mediaType),data:p}})}if(a==="assistant"&&this.config.supportsThinking&&!r){let d=u.some(g=>g.type==="tool_use"),p=u.some(g=>g.type==="thinking"||g.type==="redacted_thinking");d&&!p&&u.unshift({type:"thinking",thinking:"...",signature:""})}let l=u.length===0||(a==="assistant"||a==="user")&&u.every(d=>{let p=d;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:l?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=i((o,r)=>{let s=new Set;if(!o||typeof o.content=="string"||!Array.isArray(o.content))return s;for(let a of o.content){let u=a;r==="tool_use"&&u.type==="tool_use"&&u.id&&s.add(u.id),r==="tool_result"&&u.type==="tool_result"&&u.tool_use_id&&s.add(u.tool_use_id)}return s},"collectIds");return t.map((o,r)=>{if(typeof o.content=="string"||!Array.isArray(o.content))return o;let s=o.content;if(o.role==="assistant"){let a=n(t[r+1],"tool_result");s=s.filter(u=>{let c=u;return c.type!=="tool_use"||!!c.id&&a.has(c.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(u=>{let c=u;return c.type!=="tool_result"||!!c.tool_use_id&&a.has(c.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import{createRequire as Ti}from"node:module";var xi="KodaX",Ci=Ti(import.meta.url);function Pi(e){let t=Ci("openai");return new t.default(e)}i(Pi,"createOpenAISdkClient");function ko(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i(ko,"isOpenAIReasoningAttempt");function _i(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":xi}}i(_i,"getOpenAICompatDefaultHeaders");function pn(e,t){return e==="max_tokens"?{max_tokens:t}:{max_completion_tokens:t}}i(pn,"serializeOpenAICompatMaxOutputTokens");function Eo(e,t){if(!t)return e;let n=e.at(-1);if(n?.role!=="user")return[...e,{role:"user",content:t}];let o=typeof n.content=="string"?n.content.length>0?`${n.content}
|
|
10
10
|
|
|
11
|
-
${t}`:t:[...n.content,{type:"text",text:t}];return[...e.slice(0,-1),{...n,content:o}]}i(
|
|
11
|
+
${t}`:t:[...n.content,{type:"text",text:t}];return[...e.slice(0,-1),{...n,content:o}]}i(Eo,"appendOpenAIEphemeralSuffix");function wi(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return on(ce(e.effort))}}i(wi,"selectOpenAIReasoningEffort");function bo(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(bo,"normalizeOpenAIUsage");function Mi(e){return e?e.type==="function"&&"function"in e:!1}i(Mi,"isOpenAIFunctionToolCall");function Si(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(Si,"extractOpenAIMessageText");function Ri(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(Ri,"extractOpenAIMessageReasoning");function vt(e){let t=e.role;return typeof t=="string"?t:void 0}i(vt,"getWireRole");function Ai(e){if(vt(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(Ai,"getAssistantWireToolCalls");function Di(e){if(vt(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}i(Di,"getToolWireCallId");function Ii(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(Ii,"rewriteAssistantWireToolCalls");var H=class extends Z{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;supportsEphemeralSuffix(){return!0}get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=_i(this.config);return Pi({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}getEffectiveMaxOutputTokensField(t){return this.getModelDescriptor(t)?.maxOutputTokensField??this.config.maxOutputTokensField??"max_completion_tokens"}onStaleConnection(){this._client=void 0}async verifyCredential(t){let n=this.config.model,o=this.getWireModelId(n),r=this.client,s=[{strategy:"models-list",approxTokensSpent:0,run:i(async a=>{await r.models.list({signal:a})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:i(async a=>{await r.chat.completions.create({model:o,...pn(this.getEffectiveMaxOutputTokensField(n),1),messages:[{role:"user",content:"hi"}]},{signal:a})},"run")}];return be({strategy:this.config.verifyStrategy??"models-list",runners:s,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=xe(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(`
|
|
12
12
|
`):"";a.trim().length>0&&o.push(a)}return{system:o.join(`
|
|
13
13
|
|
|
14
|
-
`),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,r){if(this.suppressReasoningEffort||o==="none")return;let s=t,a=this.getEffectiveMaxOutputTokens(n),u=le(de(this.config,ce(r.effort),r.taskType),a),c=this.getReasoningProfile(n);if(c){this.applyReasoningProfile(s,c,r,n,u);return}switch(o){case"native-effort":{this.validateExplicitReasoningEffort(r,n);let l=xi(r);l&&(s.reasoning_effort=l);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(s,{enable_thinking:!0,thinking_budget:u}):this.name==="zhipu"&&(s.thinking={type:"enabled",budget_tokens:u});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(s,{enable_thinking:!0}):this.name==="zhipu"&&(s.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 c=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!c){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:c?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 c=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-flash-openai"||u==="deepseek-v4-pro-openai"||u==="deepseek-v4-openai"||u==="zai-glm-5.3"||u==="zai-glm-5.2"){if(u==="zai-glm-5.3"&&a.disabled){t.thinking={type:"enabled"},t.reasoning_effort="low";return}t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(c=>c.value==="none")&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let s=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(s,a):s}getFallbackTerms(t){switch(t){case"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:c,rest:l}=this.normalizeSystemForWire(o,u),d=s?.modelOverride??this.config.model,p=this.getWireModelId(d),g=ko([{role:"system",content:c},...await this.convertMessages(l,d)],s?.ephemeralSuffix?.content),E=n.map(D=>({type:"function",function:{name:D.name,description:D.description,parameters:D.input_schema}})),h=s?.forcedToolName,P=!!h;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let f=new Map,m="",b="",y,C=!0,T=null,v=Date.now(),k=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(k,d);let M=this.getReasoningProfile(d),S=ve(k)?this.getReasoningCapability(d):"none",R=M?["profile","none"]:ve(k)?this.getReasoningFallbackChain(S).filter(vo):["none"],F=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d),V={model:p,messages:g,tools:E,...fn(this.getEffectiveMaxOutputTokensField(d),F),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{prompt_cache_key:s.promptCacheKey}:{}};h&&P&&(V.tool_choice={type:"function",function:{name:h}});let W,z;for(let D of R){for(;!W;){let x={...V};C&&(x.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(x),this.applyReasoningCapability(x,d,D,k);try{W=await this.client.chat.completions.create(x,a?{signal:a}:{})}catch(_){if(z=_,P&&this.shouldFallbackForForcedToolChoiceError(_)){P=!1,delete V.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(C&&this.shouldFallbackForSpecificReasoningError(_,"stream_options","include_usage")){C=!1;continue}if(!this.shouldFallbackForReasoningError(_,...this.getFallbackTerms(D)))throw _;break}}if(W)break}if(!W)throw z??new I("All reasoning capability attempts failed without a captured error",this.name);let N=Date.now(),A=0,B=0,J=3e4;for await(let D of W){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let x=Date.now(),_=x-N;_>J&&(A++,B+=_,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(_/1e3)}s gap`,{stallCount:A,totalStallMs:B})),N=x,s?.onHeartbeat?.(),y=Eo(D.usage)??y;let O=D.choices[0],w=O?.delta;if(O?.finish_reason&&(T=O.finish_reason,process.env.KODAX_DEBUG_STREAM)){let q=Date.now()-v;this.logStreamDiagnostic(`[Stream] finish_reason: ${T} after ${q}ms`)}w?.content&&(m+=w.content,s?.onTextDelta?.(w.content));let Gt=this.extractReasoningDelta(w);if(Gt&&(b+=Gt,s?.onThinkingDelta?.(Gt)),w?.tool_calls)for(let q of w.tool_calls){let ue=f.get(q.index)??{id:"",name:"",arguments:""};q.id&&(ue.id=q.id),q.function?.name&&(ue.name=q.function.name),q.function?.arguments&&(ue.arguments+=q.function.arguments,s?.onToolInputDelta?.(ue.name,q.function.arguments,ue.id?{toolId:ue.id}:void 0)),f.set(q.index,ue)}}if(!T){let D=Date.now()-v;if(a?.aborted){let _=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:D,reason:_,textContentLength:m.length,toolCallsCount:f.size}),new DOMException(_,"AbortError")}let x=new Error(`Stream incomplete: finish_reason not received. Duration: ${D}ms. This may indicate a network disconnection or API timeout.`);throw x.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:D,textContentLength:m.length,toolCallsCount:f.size}),x}let ot=m?[{type:"text",text:m}]:[],Oe=[],Ne=[];b&&(Ne.push({type:"thinking",thinking:b}),s?.onThinkingEnd?.(b));let Ht=Ee(T??void 0);for(let[,D]of f)if(D.id&&D.name){let x=ke(D.arguments),_=x.salvaged?Ht?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Oe.push({type:"tool_use",id:D.id,name:D.name,input:x.value,..._})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(D.id),name:JSON.stringify(D.name),argsLength:D.arguments?.length??0});return{textBlocks:ot,toolBlocks:Oe,thinkingBlocks:Ne,usage:y,stopReason:T??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:l}=this.normalizeSystemForWire(o,u),d=s?.modelOverride??this.config.model,p=this.getWireModelId(d),g=ko([{role:"system",content:c},...await this.convertMessages(l,d)],s?.ephemeralSuffix?.content),E=n.map(A=>({type:"function",function:{name:A.name,description:A.description,parameters:A.input_schema}})),h=s?.forcedToolName,P=!!h,f=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(f,d);let m=this.getReasoningProfile(d),b=ve(f)?this.getReasoningCapability(d):"none",y=m?["profile","none"]:ve(f)?this.getReasoningFallbackChain(b).filter(vo):["none"],C=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d),T={model:p,messages:g,tools:E,...fn(this.getEffectiveMaxOutputTokensField(d),C),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{prompt_cache_key:s.promptCacheKey}:{}};h&&P&&(T.tool_choice={type:"function",function:{name:h}});let v,k;for(let A of y){for(;!v;){let B={...T};this.resetReasoningCapabilityParams(B),this.applyReasoningCapability(B,d,A,f);try{v=await this.client.chat.completions.create(B,a?{signal:a}:{})}catch(J){if(k=J,P&&this.shouldFallbackForForcedToolChoiceError(J)){P=!1,delete T.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(J,...this.getFallbackTerms(A)))throw J;break}}if(v)break}if(!v)throw k??new I("All reasoning capability attempts failed without a captured error",this.name);let M=v.choices[0],S=M?.message,R=Pi(S?.content),F=_i(S),V=Ee(M?.finish_reason??void 0),W=(S?.tool_calls??[]).filter(Ci).map(A=>{let B=ke(A.function.arguments),J=B.salvaged?V?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:A.id,name:A.function.name,input:B.value,...J}});R&&s?.onTextDelta?.(R);let z=R?[{type:"text",text:R}]:[],N=[];return F&&(N.push({type:"thinking",thinking:F}),s?.onThinkingDelta?.(F),s?.onThinkingEnd?.(F)),{textBlocks:z,toolBlocks:W,thinkingBlocks:N,usage:Eo(v.usage),stopReason:M?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(t,n){let o=t.filter(d=>d.type==="text").map(d=>d.text).join(`
|
|
14
|
+
`),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,r){if(this.suppressReasoningEffort||o==="none")return;let s=t,a=this.getEffectiveMaxOutputTokens(n),u=le(de(this.config,ce(r.effort),r.taskType),a),c=this.getReasoningProfile(n);if(c){this.applyReasoningProfile(s,c,r,n,u);return}switch(o){case"native-effort":{this.validateExplicitReasoningEffort(r,n);let l=wi(r);l&&(s.reasoning_effort=l);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(s,{enable_thinking:!0,thinking_budget:u}):this.name==="zhipu"&&(s.thinking={type:"enabled",budget_tokens:u});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(s,{enable_thinking:!0}):this.name==="zhipu"&&(s.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 c=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!c){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:c?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 c=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-flash-openai"||u==="deepseek-v4-pro-openai"||u==="deepseek-v4-openai"||u==="zai-glm-5.3"||u==="zai-glm-5.2"){if(u==="zai-glm-5.3"&&a.disabled){t.thinking={type:"enabled"},t.reasoning_effort="low";return}t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(c=>c.value==="none")&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let s=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(s,a):s}getFallbackTerms(t){switch(t){case"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:c,rest:l}=this.normalizeSystemForWire(o,u),d=s?.modelOverride??this.config.model,p=this.getWireModelId(d),g=Eo([{role:"system",content:c},...await this.convertMessages(l,d)],s?.ephemeralSuffix?.content),E=n.map(D=>({type:"function",function:{name:D.name,description:D.description,parameters:D.input_schema}})),h=s?.forcedToolName,P=!!h;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let f=new Map,m="",b="",y,C=!0,T=null,v=Date.now(),k=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(k,d);let M=this.getReasoningProfile(d),S=ve(k)?this.getReasoningCapability(d):"none",R=M?["profile","none"]:ve(k)?this.getReasoningFallbackChain(S).filter(ko):["none"],F=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d),V={model:p,messages:g,tools:E,...pn(this.getEffectiveMaxOutputTokensField(d),F),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{prompt_cache_key:s.promptCacheKey}:{}};h&&P&&(V.tool_choice={type:"function",function:{name:h}});let W,z;for(let D of R){for(;!W;){let x={...V};C&&(x.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(x),this.applyReasoningCapability(x,d,D,k);try{W=await this.client.chat.completions.create(x,a?{signal:a}:{})}catch(_){if(z=_,P&&this.shouldFallbackForForcedToolChoiceError(_)){P=!1,delete V.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(C&&this.shouldFallbackForSpecificReasoningError(_,"stream_options","include_usage")){C=!1;continue}if(!this.shouldFallbackForReasoningError(_,...this.getFallbackTerms(D)))throw _;break}}if(W)break}if(!W)throw z??new I("All reasoning capability attempts failed without a captured error",this.name);let N=Date.now(),A=0,B=0,J=3e4;for await(let D of W){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let x=Date.now(),_=x-N;_>J&&(A++,B+=_,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(_/1e3)}s gap`,{stallCount:A,totalStallMs:B})),N=x,s?.onHeartbeat?.(),y=bo(D.usage)??y;let O=D.choices[0],w=O?.delta;if(O?.finish_reason&&(T=O.finish_reason,process.env.KODAX_DEBUG_STREAM)){let q=Date.now()-v;this.logStreamDiagnostic(`[Stream] finish_reason: ${T} after ${q}ms`)}w?.content&&(m+=w.content,s?.onTextDelta?.(w.content));let Gt=this.extractReasoningDelta(w);if(Gt&&(b+=Gt,s?.onThinkingDelta?.(Gt)),w?.tool_calls)for(let q of w.tool_calls){let ue=f.get(q.index)??{id:"",name:"",arguments:""};q.id&&(ue.id=q.id),q.function?.name&&(ue.name=q.function.name),q.function?.arguments&&(ue.arguments+=q.function.arguments,s?.onToolInputDelta?.(ue.name,q.function.arguments,ue.id?{toolId:ue.id}:void 0)),f.set(q.index,ue)}}if(!T){let D=Date.now()-v;if(a?.aborted){let _=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:D,reason:_,textContentLength:m.length,toolCallsCount:f.size}),new DOMException(_,"AbortError")}let x=new Error(`Stream incomplete: finish_reason not received. Duration: ${D}ms. This may indicate a network disconnection or API timeout.`);throw x.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:D,textContentLength:m.length,toolCallsCount:f.size}),x}let ot=m?[{type:"text",text:m}]:[],Oe=[],Ne=[];b&&(Ne.push({type:"thinking",thinking:b}),s?.onThinkingEnd?.(b));let Ht=Ee(T??void 0);for(let[,D]of f)if(D.id&&D.name){let x=ke(D.arguments),_=x.salvaged?Ht?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Oe.push({type:"tool_use",id:D.id,name:D.name,input:x.value,..._})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(D.id),name:JSON.stringify(D.name),argsLength:D.arguments?.length??0});return{textBlocks:ot,toolBlocks:Oe,thinkingBlocks:Ne,usage:y,stopReason:T??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:l}=this.normalizeSystemForWire(o,u),d=s?.modelOverride??this.config.model,p=this.getWireModelId(d),g=Eo([{role:"system",content:c},...await this.convertMessages(l,d)],s?.ephemeralSuffix?.content),E=n.map(A=>({type:"function",function:{name:A.name,description:A.description,parameters:A.input_schema}})),h=s?.forcedToolName,P=!!h,f=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(f,d);let m=this.getReasoningProfile(d),b=ve(f)?this.getReasoningCapability(d):"none",y=m?["profile","none"]:ve(f)?this.getReasoningFallbackChain(b).filter(ko):["none"],C=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d),T={model:p,messages:g,tools:E,...pn(this.getEffectiveMaxOutputTokensField(d),C),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{prompt_cache_key:s.promptCacheKey}:{}};h&&P&&(T.tool_choice={type:"function",function:{name:h}});let v,k;for(let A of y){for(;!v;){let B={...T};this.resetReasoningCapabilityParams(B),this.applyReasoningCapability(B,d,A,f);try{v=await this.client.chat.completions.create(B,a?{signal:a}:{})}catch(J){if(k=J,P&&this.shouldFallbackForForcedToolChoiceError(J)){P=!1,delete T.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(J,...this.getFallbackTerms(A)))throw J;break}}if(v)break}if(!v)throw k??new I("All reasoning capability attempts failed without a captured error",this.name);let M=v.choices[0],S=M?.message,R=Si(S?.content),F=Ri(S),V=Ee(M?.finish_reason??void 0),W=(S?.tool_calls??[]).filter(Mi).map(A=>{let B=ke(A.function.arguments),J=B.salvaged?V?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:A.id,name:A.function.name,input:B.value,...J}});R&&s?.onTextDelta?.(R);let z=R?[{type:"text",text:R}]:[],N=[];return F&&(N.push({type:"thinking",thinking:F}),s?.onThinkingDelta?.(F),s?.onThinkingEnd?.(F)),{textBlocks:z,toolBlocks:W,thinkingBlocks:N,usage:bo(v.usage),stopReason:M?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(t,n){let o=t.filter(d=>d.type==="text").map(d=>d.text).join(`
|
|
15
15
|
`),r=t.filter(d=>d.type==="tool_use").map(d=>({id:d.id,type:"function",function:{name:d.name,arguments:JSON.stringify(d.input??{})}})),s=t.filter(d=>d.type==="thinking"||d.type==="redacted_thinking").map(d=>d.type==="thinking"?d.thinking:"").filter(Boolean).join(`
|
|
16
16
|
|
|
17
17
|
`),a=t.some(d=>d.type==="thinking"||d.type==="redacted_thinking"),u=t.some(d=>d.type==="text");if(!o&&r.length===0&&!a&&!u)return[];let c;o?c=o:r.length>0?c=null:c="...";let l={role:"assistant",content:c};return r.length>0&&(l.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(l.reasoning_content=s||""),[l]}async serializeUserMessage(t){let n=[],o=t.filter(a=>a.type==="text").map(a=>a.text).join(`
|
|
18
|
-
`),r=t.filter(a=>a.type==="image");for(let a of t)if(a.type==="tool_result"){let u;if(typeof a.content=="string")u=a.content;else{let c=[];for(let l of a.content){if(l.type==="text"){c.push(l.text);continue}c.push(await
|
|
19
|
-
`)}n.push({role:"tool",tool_call_id:a.tool_use_id,content:u})}if(r.length===0)return o&&n.push({role:"user",content:o}),n;let s=[];o&&s.push({type:"text",text:o});for(let a of r){let u=await
|
|
20
|
-
`);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[];for(let r of t){if(r.role==="system"){o.push(...this.serializeSystemMessage(r.content));continue}if(typeof r.content=="string"){o.push({role:r.role,content:r.content});continue}if(r.role==="assistant"){o.push(...this.serializeAssistantMessage(r.content,n));continue}o.push(...await this.serializeUserMessage(r.content))}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=[],o=0;for(;o<t.length;){let r=t[o],s=
|
|
18
|
+
`),r=t.filter(a=>a.type==="image");for(let a of t)if(a.type==="tool_result"){let u;if(typeof a.content=="string")u=a.content;else{let c=[];for(let l of a.content){if(l.type==="text"){c.push(l.text);continue}c.push(await mo(l.path)?Ce:go)}u=c.join(`
|
|
19
|
+
`)}n.push({role:"tool",tool_call_id:a.tool_use_id,content:u})}if(r.length===0)return o&&n.push({role:"user",content:o}),n;let s=[];o&&s.push({type:"text",text:o});for(let a of r){let u=await ho(a.path,a.mediaType);u===void 0?s.push({type:"text",text:Ce}):s.push({type:"image_url",image_url:{url:u}})}return n.push({role:"user",content:s}),n}serializeSystemMessage(t){if(typeof t=="string")return[{role:"system",content:t}];let n=t.filter(o=>o.type==="text").map(o=>o.text).join(`
|
|
20
|
+
`);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[];for(let r of t){if(r.role==="system"){o.push(...this.serializeSystemMessage(r.content));continue}if(typeof r.content=="string"){o.push({role:r.role,content:r.content});continue}if(r.role==="assistant"){o.push(...this.serializeAssistantMessage(r.content,n));continue}o.push(...await this.serializeUserMessage(r.content))}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=[],o=0;for(;o<t.length;){let r=t[o],s=Ai(r);if(s===void 0){vt(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(g=>g.id)),u=new Set,c=[],l=o+1;for(;l<t.length&&vt(t[l])==="tool";){let g=t[l],E=Di(g);E!==void 0&&a.has(E)&&!u.has(E)&&(u.add(E),c.push(g)),l+=1}let d=s.filter(g=>u.has(g.id)),p=d.length===s.length&&s.length>0?r:Ii(r,d);n.push(p),d.length>0&&n.push(...c),o=l}return n}};import{spawn as Wi}from"node:child_process";import{Readable as zi,Writable as Xi}from"node:stream";import bt from"node:process";import{spawnSync as kt}from"node:child_process";var Oi=2e3,pe=2e3,hn=5e3,ie=Object.freeze({status:"terminated"}),To=Object.freeze({status:"already-exited"}),j=Object.freeze({status:"unknown"}),So=String.raw`
|
|
21
21
|
using System;
|
|
22
22
|
using System.Runtime.InteropServices;
|
|
23
23
|
using System.Text;
|
|
@@ -104,20 +104,20 @@ public static class KodaXNativeProcessSnapshot {
|
|
|
104
104
|
CloseHandle(snapshot);
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
}`;function ge(e){return e.exitCode!==null||e.signalCode!==null}i(ge,"isExited");function
|
|
108
|
-
`),t=kt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:
|
|
109
|
-
`),t=kt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:
|
|
110
|
-
`),o=kt("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",timeout:
|
|
107
|
+
}`;function ge(e){return e.exitCode!==null||e.signalCode!==null}i(ge,"isExited");function gn(e,t){return ge(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(gn,"waitForExit");function xo(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}i(xo,"signalPosixPidTree");function yn(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}i(yn,"signalTargetExists");function Co(e){return yn(-e)||yn(e)}i(Co,"isPosixPidTreeAlive");async function Po(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Co(e))return!0;await new Promise(o=>setTimeout(o,50))}return!Co(e)}i(Po,"waitForPosixPidTreeExit");function Ni(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).flatMap(r=>{if(typeof r!="object"||r===null)return[];let s=r,a=Number(s.pid),u=Number(s.parentPid),c=typeof s.creationTime=="string"?s.creationTime:String(s.creationTime??"0");return!Number.isFinite(a)||a<=0||!Number.isFinite(u)?[]:[{pid:a,parentPid:u,creationTime:/^\d+$/.test(c)?c:"0"}]})}catch{return[]}}i(Ni,"parseWindowsProcessSnapshotJson");function $i(e){let t=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.(\d{6})([+-])(\d{3})$/.exec(e);if(!t)return;let[,n,o,r,s,a,u,c,l,d]=t,p=Date.UTC(Number(n),Number(o)-1,Number(r),Number(s),Number(a),Number(u),Number(c.slice(0,3))),g=Number(d)*6e4*(l==="+"?1:-1),E=p-g;if(Number.isFinite(E))return{identity:(BigInt(E)+11644473600000n).toString(),unixMs:E}}i($i,"parseWmicCreationTime");function Li(){let e=["$cutoff = [DateTime]::UtcNow","$items = try { @(Get-CimInstance Win32_Process -ErrorAction Stop) } catch { @(Get-WmiObject Win32_Process -ErrorAction Stop) }","$rows = @($items | ForEach-Object {"," $creationTime = '0'"," try {"," $created = $_.CreationDate"," if ($created -isnot [DateTime]) { $created = [System.Management.ManagementDateTimeConverter]::ToDateTime([string]$created) }"," $created = $created.ToUniversalTime()"," if ($created -le $cutoff) { $creationTime = ([long][Math]::Floor($created.ToFileTimeUtc() / 10000)).ToString() }"," } catch {}"," [PSCustomObject]@{ pid = [int]$_.ProcessId; parentPid = [int]$_.ParentProcessId; creationTime = $creationTime }","})","$rows | ConvertTo-Json -Compress"].join(`
|
|
108
|
+
`),t=kt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:hn,windowsHide:!0});if(!t.error&&t.status===0){let s=Ni(t.stdout);if(s.length>0)return s}let n=Date.now(),o=kt("wmic",["process","get","CreationDate,ParentProcessId,ProcessId","/format:list"],{encoding:"utf8",timeout:hn,windowsHide:!0});if(o.error||o.status!==0)return;let r=o.stdout.split(/\r?\n\s*\r?\n/).flatMap(s=>{let a=new Map(s.split(/\r?\n/).flatMap(p=>{let g=p.indexOf("=");return g<0?[]:[[p.slice(0,g),p.slice(g+1)]]})),u=Number(a.get("ProcessId")),c=Number(a.get("ParentProcessId")),l=a.get("CreationDate"),d=l===void 0?void 0:$i(l);return!Number.isFinite(u)||u<=0||!Number.isFinite(c)||d===void 0||d.unixMs>n?[]:[{pid:u,parentPid:c,creationTime:d.identity}]});return r.length>0?r:void 0}i(Li,"readWindowsProcessSnapshotFallback");function Fi(){let e=["$source = @'",So,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
|
|
109
|
+
`),t=kt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:hn,windowsHide:!0});if(t.error||t.status!==0)return;let n=t.stdout.split(/\r?\n/).flatMap(o=>{let[r,s,a="0"]=o.split(",",3),u=Number(r),c=Number(s);return!Number.isFinite(u)||u<=0||!Number.isFinite(c)?[]:[{pid:u,parentPid:c,creationTime:a}]});return n.length>0?n:void 0}i(Fi,"readWindowsProcessSnapshotNative");function Ge(){return Fi()??Li()}i(Ge,"readWindowsProcessSnapshot");function Ro(e,t,n){let o=new Map;for(let u of e)o.set(u.parentPid,[...o.get(u.parentPid)??[],u]);let r=[],s=[{pid:t,...n===void 0?{}:{creationTime:n},ancestryVerified:n!==void 0&&n!=="0"}],a=new Set([t]);for(;s.length>0;){let u=s.shift();if(u===void 0)break;for(let c of o.get(u.pid)??[]){if(a.has(c.pid)||!Bi(c.creationTime,u.creationTime))continue;a.add(c.pid);let l=u.ancestryVerified&&c.creationTime!=="0";r.push(l?c:{...c,creationTime:"0"}),s.push({pid:c.pid,creationTime:c.creationTime,ancestryVerified:l})}}return r}i(Ro,"collectDescendantIdentities");function Bi(e,t){if(e==="0"||t===void 0||t==="0")return!0;try{return BigInt(e)>=BigInt(t)}catch{return!1}}i(Bi,"windowsCreationAtLeast");function ji(e,t=Ge()){if(t===void 0)return;let n=new Set(t.filter(r=>r.creationTime==="0").map(r=>r.pid));if(e.some(r=>n.has(r.pid)))return;let o=new Set(t.filter(r=>r.creationTime!=="0").map(r=>`${r.pid}:${r.creationTime}`));return new Set(e.filter(r=>r.creationTime!=="0").filter(r=>o.has(`${r.pid}:${r.creationTime}`)).map(r=>r.pid))}i(ji,"currentCapturedWindowsPids");function _o(e){let t=Ge();if(t===void 0)return;let n=ji([e.root,...e.descendants],t);if(n!==void 0){if(n.size>0)return!1;if(e.completeTree)return e.uncertainDescendantPids.every(o=>!t.some(r=>r.pid===o))?!0:void 0}}i(_o,"capturedWindowsProcessesGone");function Ki(e){return[e.root.pid,...e.descendants.map(t=>t.pid),...e.uncertainDescendantPids].some(yn)}i(Ki,"capturedWindowsPidMayBeAlive");async function wo(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Ki(e))return _o(e)===!0;await new Promise(o=>setTimeout(o,50))}return _o(e)===!0}i(wo,"waitForCapturedWindowsProcessesExit");function Mo(e){let t=[...e].reverse().flatMap(r=>/^\d+$/.test(r.creationTime)?[`[KodaXNativeProcessSnapshot]::TerminateExact(${r.pid}, [UInt64]${r.creationTime}) | Out-Null`]:[]);if(t.length===0)return!1;let n=["$source = @'",So,"'@","Add-Type -TypeDefinition $source",...t].join(`
|
|
110
|
+
`),o=kt("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",timeout:Oi,windowsHide:!0});return!o.error&&o.status===0}i(Mo,"terminateCapturedWindowsProcesses");var He=new WeakMap;function Pe(e){if(process.platform!=="win32"||e.pid===void 0)return;let t=He.get(e),n=Ge();if(t!==void 0&&ge(e)){if(n===void 0)return t.root.creationTime;let r=n.find(a=>a.pid===e.pid);if(r!==void 0&&r.creationTime!==t.root.creationTime)return t.root.creationTime;let s=Ro(n,t.root.pid,t.root.creationTime);return He.set(e,{root:t.root,descendants:s.filter(a=>a.creationTime!=="0"),uncertainDescendantPids:s.filter(a=>a.creationTime==="0").map(a=>a.pid),completeTree:t.completeTree}),t.root.creationTime}let o=n?.find(r=>r.pid===e.pid&&r.creationTime!=="0");if(o===void 0&&n!==void 0&&!ge(e)&&(o=Ge()?.find(r=>r.pid===e.pid&&r.creationTime!=="0")),!(o===void 0||ge(e)))return He.set(e,{root:o,descendants:[],uncertainDescendantPids:[],completeTree:!1}),o.creationTime}i(Pe,"rememberChildProcessTree");function Ui(e,t){let n=Ge();if(n===void 0)return;let o=n.find(s=>s.pid===e);if(o===void 0||o.creationTime==="0"||o.creationTime!==t)return null;let r=Ro(n,e,o.creationTime);return{root:o,descendants:r.filter(s=>s.creationTime!=="0"),uncertainDescendantPids:r.filter(s=>s.creationTime==="0").map(s=>s.pid),completeTree:!0}}i(Ui,"captureWindowsProcessTree");async function mn(e){let t=[e.root,...e.descendants],n=Mo(t);return e.completeTree?await wo(e,pe)?ie:n?(Mo(t),await wo(e,pe)?ie:j):j:j}i(mn,"killCapturedWindowsTree");async function Et(e){let t;if(process.platform==="win32"&&e.pid!==void 0){let n=He.get(e),o=n===void 0?void 0:Ui(e.pid,n.root.creationTime);o!=null&&He.set(e,o);let r=o??n;return o===void 0&&r===void 0||ge(e)&&r!==void 0&&!r.completeTree&&r.descendants.length===0?j:(t=o===void 0?r===void 0?j:await mn(r):o===null?r===void 0?j:await mn(r):await mn(o),await gn(e,pe)?t.status==="unknown"?j:ie:j)}if(e.pid!==void 0&&process.platform!=="win32")return xo(e.pid,"SIGTERM")?await Po(e.pid,pe)?ie:(xo(e.pid,"SIGKILL"),await Po(e.pid,pe)?ie:j):To;if(ge(e))return process.platform==="win32"&&e.pid!==void 0?j:To;try{e.kill("SIGTERM")}catch{return ge(e)&&t?.status!=="unknown"?ie:j}if(await gn(e,pe))return t?.status==="unknown"?j:ie;try{e.kill("SIGKILL")}catch{}return await gn(e,pe)?t?.status==="unknown"?j:ie:j}i(Et,"killChildProcessTree");var ee=class extends Error{static{i(this,"AcpTransportClosedError")}constructor(){super("ACP transport closed before the request completed"),this.name="AcpTransportClosedError"}},Tt=class{static{i(this,"AcpClient")}client=null;agentProcess=null;options;constructor(t){this.options=t}async connect(){let{ClientSideConnection:t,PROTOCOL_VERSION:n,ndJsonStream:o}=await import("@agentclientprotocol/sdk"),r,s;if(this.options.inputStream&&this.options.outputStream)r=this.options.inputStream,s=this.options.outputStream;else if(this.options.command){let c=bt.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Wi(c,this.options.args??[],{cwd:this.options.cwd??bt.cwd(),stdio:["pipe","pipe","inherit"],detached:bt.platform!=="win32",windowsHide:!0}),Pe(this.agentProcess),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");s=Xi.toWeb(this.agentProcess.stdin),r=zi.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let a=o(s,r);if(this.client=new t(()=>({sessionUpdate:i(async u=>{this.options.onSessionUpdate?.(u)},"sessionUpdate"),requestPermission:i(async u=>{let c=u.options??[],l=c.find(d=>d.kind==="allow_once"||d.kind==="allow_always")??c[0];return l?{outcome:{outcome:"selected",optionId:l.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),a),this.client.signal.aborted)throw new ee;await this.awaitWhileConnected(this.client.initialize({protocolVersion:n,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}}))}async createNewSession(){if(!this.client)throw new Error("Client not connected");if(this.client.signal.aborted)throw new ee;return(await this.awaitWhileConnected(this.client.newSession({cwd:this.options.cwd??bt.cwd(),mcpServers:[]}))).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");if(o?.throwIfAborted(),this.client.signal.aborted)throw new ee;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,c=new Promise((d,p)=>{u=p}),l=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{});let d=new Error("ACP prompt aborted");d.name="AbortError",u?.(o.reason??d)},"onAbort");o.addEventListener("abort",l,{once:!0}),a=Promise.race([a,c]).finally(()=>{o.removeEventListener("abort",l)})}return await this.awaitWhileConnected(a)}isConnectionOpen(){return this.client!==null&&!this.client.signal.aborted}releaseSession(t){this.options.releaseSession?.(t)}disconnect(){this.agentProcess&&Et(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}async awaitWhileConnected(t){let n=this.client;if(!n||n.signal.aborted)throw t.catch(()=>{}),new ee;let o,r=new Promise((s,a)=>{o=i(()=>a(new ee),"onClosed"),n.signal.addEventListener("abort",o,{once:!0})});try{return await Promise.race([t,r])}finally{o&&n.signal.removeEventListener("abort",o)}}};function Vi(e){if(!e||typeof e!="object")return;let t=e,n=t.inputTokens,o=t.outputTokens,r=t.totalTokens;if([n,o,r].some(g=>typeof g!="number"||!Number.isFinite(g)||g<0))return;let s=n,a=o,u=r;if(u<s||u<a)return;let c=i(g=>typeof g=="number"&&Number.isFinite(g)&&g>=0?g:void 0,"optionalToken"),l=c(t.cachedReadTokens),d=c(t.cachedWriteTokens),p=c(t.thoughtTokens);return{inputTokens:s,outputTokens:a,totalTokens:u,...l!==void 0?{cachedReadTokens:l}:{},...d!==void 0?{cachedWriteTokens:d}:{},...p!==void 0?{thoughtTokens:p}:{}}}i(Vi,"normalizeAcpUsage");function Hi(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(Hi,"selectAcpReasoningEffort");function Ao(e){if(!e?.aborted)return;let t=e.reason;if(!(t===void 0||t instanceof Error&&t.name==="AbortError"))return t}i(Ao,"nonCancellationAbortReason");var se=class extends Z{static{i(this,"KodaXAcpProvider")}_client=null;_clientConnectPromise=null;_connectingClient=null;_clientGeneration=0;_sessionMap=new Map;_activeStreams=new Map;_activeConversationIds=new Set;async ensureClient(t){if(this._client?.isConnectionOpen())return this._client;if(this._client&&this.invalidateClient(this._client),!this._clientConnectPromise){let n=this._clientGeneration===0?this.acpClientOptions:this.acpClientOptions.recreate?.()??this.acpClientOptions;this._clientGeneration+=1;let o={...n,onSessionUpdate:t},r=new Tt(o);this._connectingClient=r;let s;s=r.connect().then(()=>{if(this._clientConnectPromise!==s||this._connectingClient!==r)throw new Error("ACP client initialization was cancelled");return this._connectingClient=null,this._client=r,r}).catch(a=>{throw this._connectingClient===r&&(this._connectingClient=null,r.disconnect()),a}).finally(()=>{this._clientConnectPromise===s&&(this._clientConnectPromise=null)}),this._clientConnectPromise=s}return await this._clientConnectPromise}invalidateClient(t){this._client===t&&(this._client=null,this._sessionMap.clear(),t.disconnect())}supportsEphemeralSuffix(){return!0}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`}}getDiagnosticPromptText(t,n){let o=t.map(a=>Array.isArray(a.content)?{...a,content:xe(a.content)}:a),r=o[o.length-1],s="";if(r&&typeof r.content=="string")s=r.content;else if(r&&Array.isArray(r.content)){let a=[];for(let u of r.content)if(u.type==="text")a.push(u.text);else if(u.type==="image"){let c=this.serializeImageBlockToPromptToken(u);c&&a.push(c)}s=a.join(`
|
|
111
111
|
`)}return n?s.length>0?`${s}
|
|
112
112
|
|
|
113
|
-
${n}`:n:s}getCapabilityProfile(){return Y(Ve)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=xe(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let u=this.normalizeReasoning(r),c=
|
|
113
|
+
${n}`:n:s}getCapabilityProfile(){return Y(Ve)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=xe(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let u=this.normalizeReasoning(r),c=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 l=[],d=[],p=s?.ephemeralSuffix?.content,g=this.getDiagnosticPromptText(t,p),E=i(f=>{let m=f.update,b=f.sessionId;if(!("sessionUpdate"in m))return;let y=b?this._activeStreams.get(b):void 0;if(y)switch(m.sessionUpdate){case"agent_message_chunk":if(m.content?.type==="text"){let C=m.content.text;y.output.text+=C,y.streamOptions?.onTextDelta?.(C)}break;case"tool_call":{let C="{}",T=m,v=T.arguments??T.parameters;v&&(C=typeof v=="string"?v:JSON.stringify(v)),y.streamOptions?.onToolInputDelta?.(m.title,C);let k=`
|
|
114
114
|
> [Tool Use] ${m.title}: ${C}
|
|
115
115
|
`;y.output.text+=k,y.streamOptions?.onTextDelta?.(k);break}case"tool_call_update":if(m.status){let C=`> [Tool Result] ${m.status}
|
|
116
116
|
|
|
117
|
-
`;y.output.text+=C,y.streamOptions?.onTextDelta?.(C)}break}},"onSessionUpdate"),h=s?.sessionId,P=await this.ensureClient(E);if(h&&this._activeConversationIds.has(h))throw new Error(`ACP conversation "${h}" already has an active prompt`);h&&this._activeConversationIds.add(h);try{let f=h?this._sessionMap.get(h):void 0;f||(f=await P.createNewSession(),h&&this._sessionMap.set(h,f));let m={text:""};this._activeStreams.set(f,{streamOptions:s,output:m});let b;try{b=await P.prompt(g,f,a,{model:s?.modelOverride,reasoningEffort:c})}catch(y){y instanceof ee&&this.invalidateClient(P);let C=
|
|
118
|
-
`);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
|
|
117
|
+
`;y.output.text+=C,y.streamOptions?.onTextDelta?.(C)}break}},"onSessionUpdate"),h=s?.sessionId,P=await this.ensureClient(E);if(h&&this._activeConversationIds.has(h))throw new Error(`ACP conversation "${h}" already has an active prompt`);h&&this._activeConversationIds.add(h);try{let f=h?this._sessionMap.get(h):void 0;f||(f=await P.createNewSession(),h&&this._sessionMap.set(h,f));let m={text:""};this._activeStreams.set(f,{streamOptions:s,output:m});let b;try{b=await P.prompt(g,f,a,{model:s?.modelOverride,reasoningEffort:c})}catch(y){y instanceof ee&&this.invalidateClient(P);let C=Ao(a);if(C!==void 0)throw C;if(!(a?.aborted||y instanceof Error&&y.name==="AbortError"))throw y}finally{this._activeStreams.delete(f),h||P.releaseSession(f)}if(b?.stopReason==="cancelled"){let y=Ao(a);if(y!==void 0)throw y}return m.text&&l.push({type:"text",text:m.text}),{textBlocks:l,toolBlocks:d,thinkingBlocks:[],usage:Vi(b?.usage)}}catch(f){throw f instanceof ee&&this.invalidateClient(P),f}finally{h&&this._activeConversationIds.delete(h)}}disconnect(){this._clientConnectPromise=null;let t=this._connectingClient;this._connectingClient=null,t?.disconnect(),this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._activeConversationIds.clear(),this._sessionMap.clear()}};import{spawn as Gi}from"node:child_process";import Je from"node:process";var _e=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={...Je.env,...this.config.env},s=Je.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=Gi(s,n,{cwd:this.config.cwd??Je.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:Je.platform!=="win32",windowsHide:!0}),u="";a.stderr?.on("data",k=>{u+=k.toString()});let c=new AbortController,l={},d,p=new Promise(k=>{d=i(()=>k(l),"resolveAbort")});Pe(a);let g=i(()=>{if(c.signal.aborted)return;let k=t.signal?.reason;k===void 0?c.abort():c.abort(k)},"forwardExternalAbort");t.signal?.addEventListener("abort",g),t.signal?.aborted&&g();let E=!1,h,P=i(()=>(h||(h=(async()=>{let k={status:"unknown"};for(let M=0;M<3;M+=1){if(Pe(a),k=await Et(a),k.status!=="unknown"||E&&!c.signal.aborted)return k;M<2&&await new Promise(S=>setTimeout(S,50))}return k})()),h),"terminateChild"),f=i(()=>{d?.(),E||(P(),a.stdout?.destroy())},"abortHandler");c.signal.addEventListener("abort",f),c.signal.aborted&&f(),a.on("exit",()=>{E=!0,Pe(a)});let m=!1,b,y,C=this.config.timeout;C!==void 0&&Number.isFinite(C)&&C>0&&!c.signal.aborted&&(y=setTimeout(()=>{c.signal.aborted||(m=!0,b=new Error(`Provider CLI timed out after ${C}ms`),c.abort(b))},C),y.unref?.());let T=i(async k=>{let M=await Promise.race([k,p]);if(M===l)throw c.signal.reason??b??new Error("Provider CLI execution aborted");return M},"waitForExecution"),v=new Promise((k,M)=>{a.once("error",M),a.once("close",(S,R)=>k({code:S,signal:R}))});try{let k=this.parseOutputStream(a.stdout,c.signal)[Symbol.asyncIterator]();for(;;){let R=await T(k.next());if(R.done)break;yield R.value}if(c.signal.aborted)throw c.signal.reason;let M=await T(v);if(m)throw b??c.signal.reason;let S=u.trim();if(!t.signal?.aborted&&M.code!==0){let R=M.code===null?`signal ${M.signal??"unknown"}`:`code ${M.code}`;throw new Error(`Provider CLI exited with ${R}${S?`: ${S}`:""}`)}S&&console.error(`[CLIExecutor] stderr: ${S}`)}catch(k){throw v.catch(()=>{}),c.signal.aborted?c.signal.reason:k}finally{if(y&&clearTimeout(y),t.signal?.removeEventListener("abort",g),c.signal.removeEventListener("abort",f),Je.platform==="win32"||h!==void 0||!E){let k=h!==void 0;if((await P()).status==="unknown"&&(k||!E))throw new Error("Provider CLI process-tree termination could not be verified")}}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
|
|
118
|
+
`);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 Ji}from"node:child_process";import qi from"node:process";async function xt(e){try{let t=qi.platform==="win32",n=Ji(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(xt,"checkCliCommandInstalled");function Ct(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(Ct,"finiteNonNegative");function Yi(e){if(!(!e||!Ct(e.input_tokens)||!Ct(e.output_tokens)||!Ct(e.total_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.total_tokens,...Ct(e.cached)?{cachedReadTokens:e.cached}:{}}}i(Yi,"normalizeGeminiUsage");var Pt=class extends _e{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 xt("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:Yi(t.stats),raw:t};default:return null}}};import{TransformStream as Do}from"node:stream/web";import{randomUUID as vn}from"node:crypto";function qe(e){let t=new Do,n=new Do,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,u="",c=vn(),l=new AbortController,d=new Map,p=new Map;(async()=>{try{for(;;){let{done:f,value:m}=await o.read();if(f)break;u+=s.decode(m,{stream:!0});let b=u.split(`
|
|
119
119
|
`);u=b.pop()??"";for(let y of b)if(y.trim())try{let C=JSON.parse(y);E(C).catch(T=>{console.error("[PseudoAcpServer] Failed to handle request:",T)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",y)}}}catch(f){console.error("[PseudoAcpServer] Stream read error:",f)}})();let g=i(async f=>{let m=JSON.stringify(f)+`
|
|
120
|
-
`;await r.write(a.encode(m))},"sendMsg");async function E(f){if(f.method==="initialize")await g({jsonrpc:"2.0",id:f.id,result:{protocolVersion:f.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(f.method==="session/new"||f.method==="sessions/new")c=f.params?.sessionId??
|
|
120
|
+
`;await r.write(a.encode(m))},"sendMsg");async function E(f){if(f.method==="initialize")await g({jsonrpc:"2.0",id:f.id,result:{protocolVersion:f.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(f.method==="session/new"||f.method==="sessions/new")c=f.params?.sessionId??vn(),await g({jsonrpc:"2.0",id:f.id,result:{sessionId:c}});else if(f.method==="session/prompt"||f.method==="chat/prompt"){let m=new AbortController,b=f.params.sessionId;d.set(b,m);let y=i(()=>m.abort(),"onGlobalAbort");l.signal.addEventListener("abort",y);let C=h(b,f.params.prompt,typeof f.params.model=="string"?f.params.model:void 0,typeof f.params.effort=="string"?f.params.effort:void 0,m.signal).finally(()=>{d.delete(b),l.signal.removeEventListener("abort",y)});try{let T=await C;await g({jsonrpc:"2.0",id:f.id,result:T.usage?{stopReason:T.stopReason,usage:T.usage}:{stopReason:T.stopReason}})}catch(T){await g({jsonrpc:"2.0",id:f.id,error:{code:-32e3,message:T instanceof Error?T.message:String(T)}})}}else if(f.method==="session/cancel"||f.method==="chat/cancel"){let m=d.get(f.params.sessionId);m&&m.abort(),f.id!==void 0&&await g({jsonrpc:"2.0",id:f.id,result:{}})}else f.id!==void 0&&await g({jsonrpc:"2.0",id:f.id,result:{}})}i(E,"handleRequest");let h=i(async(f,m,b,y,C)=>{let T=m.find(M=>M.type==="text")?.text??"",v,k=!1;try{let M=e.execute({prompt:T,model:b,reasoningEffort:y,sessionId:p.get(f),signal:C});for await(let S of M){if(S.type==="error")throw new Error(S.message);if(S.type==="complete"&&S.status==="failed")throw new Error("Provider CLI reported a failed completion");S.type==="session_start"&&S.sessionId&&p.set(f,S.sessionId);let R=P(S);R&&await g({jsonrpc:"2.0",method:"session/update",params:{sessionId:f,update:R}}),S.type==="complete"&&(k=!0,v=S.usage)}if(!C.aborted&&!k)throw new Error("Provider CLI ended without a completion event");return{stopReason:C.aborted?"cancelled":"end_turn",...v!==void 0?{usage:v}:{}}}catch(M){if(C.aborted||M instanceof Error&&M.name==="AbortError")return{stopReason:"cancelled"};throw M}},"executePrompt"),P=i(f=>{switch(f.type){case"message":if(f.role==="assistant"&&f.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:f.toolName,arguments:f.parameters,status:"running",toolCallId:f.toolId||vn()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:f.toolId,status:f.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
|
|
121
121
|
[Error: ${f.message}]
|
|
122
|
-
`}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{l.abort(),d.clear(),p.clear(),o.cancel().catch(()=>{}),r.abort().catch(()=>{})},"abort"),releaseSession:i(f=>{p.delete(f)},"releaseSession"),recreate:i(()=>qe(e),"recreate"),executor:e}}i(qe,"createPseudoAcpServer");import Do from"node:fs";import Io from"node:os";import Oo from"node:path";var Yi="gpt-5.4",Qi="auto-gemini-3",Zi=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],es=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function No(e){let t=new Set,n=[];for(let o of e){let r=o.trim();if(!r)continue;let s=r.toLowerCase();t.has(s)||(t.add(s),n.push(r))}return n}i(No,"dedupePreserveOrder");function ts(){let e=Oo.join(Io.homedir(),".codex","config.toml");try{return Do.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(ts,"readCodexConfiguredModel");function ns(){let e=Oo.join(Io.homedir(),".gemini","settings.json");try{let t=JSON.parse(Do.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(ns,"readGeminiConfiguredModel");function we(){return ts()||Yi}i(we,"getCodexCliDefaultModel");function Me(){return ns()||Qi}i(Me,"getGeminiCliDefaultModel");function Ye(){return No([we(),...Zi])}i(Ye,"getCodexCliKnownModels");function Qe(){return No([Me(),...es])}i(Qe,"getGeminiCliKnownModels");var vn=Me(),os=Qe(),rs={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},_t=class extends se{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:vn,models:os.filter(t=>t!==vn).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new Pt({model:vn});this.acpClientOptions=qe(t)}getCapabilityProfile(){return Y(rs)}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 wt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(wt,"finiteNonNegative");function is(e){if(!(!e||!wt(e.input_tokens)||!wt(e.output_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.output_tokens,...wt(e.cached_input_tokens)?{cachedReadTokens:e.cached_input_tokens}:{},...wt(e.cache_write_input_tokens)?{cachedWriteTokens:e.cache_write_input_tokens}:{}}}i(is,"normalizeCodexUsage");function ss(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(ss,"buildReasoningEffortArgs");var Mt=class extends _e{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 xt("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=ss(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:is(t.usage),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 kn=we(),as=Ye(),St=class extends se{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:kn,models:as.filter(t=>t!==kn).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new Mt({model:kn});this.acpClientOptions=qe(t)}};import{existsSync as ys,readFileSync as vs}from"node:fs";import Re from"node:path";import{fileURLToPath as ks}from"node:url";var $o=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Lo=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Fo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Bo=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","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"],jo=["max_tokens","max_completion_tokens"],Ko=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Uo=["count-tokens","models-list","minimal-message","unsupported"];function oe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(oe,"isPlainObject");function me(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(me,"requireString");function Se(e,t){if(e!==void 0)return me(e,t)}i(Se,"optionalString");function Xo(e,t){if(e!==void 0){if(typeof e!="string"||!jo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${jo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Xo,"optionalMaxOutputTokensField");function ae(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(ae,"optionalNumber");function L(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(L,"optionalBoolean");function Wo(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)=>me(n,`${t}[${o}]`))}}i(Wo,"optionalStringArray");function us(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=me(r,`${t}.${o}`);return n}i(us,"optionalStringMap");function cs(e,t){if(e!==void 0){if(typeof e!="string"||!Bo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Bo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(cs,"optionalReasoningPreset");function En(e,t){if(typeof e!="string"||!$o.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${$o.join(", ")}, got ${JSON.stringify(e)}`);return e}i(En,"requireReasoningCapability");function ds(e,t){if(typeof e!="string"||!Lo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Lo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ds,"requireEffortStrategy");function ls(e,t){if(e!==void 0){if(typeof e!="string"||!Fo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Fo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(ls,"optionalThinkingStrategy");function zo(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ds(e.effortStrategy,`${t}.effortStrategy`),o=cs(e.reasoningPreset,`${t}.reasoningPreset`),r=ls(e.thinkingStrategy,`${t}.thinkingStrategy`),s=Se(e.defaultEffort,`${t}.defaultEffort`),a=us(e.effortAliases,`${t}.effortAliases`),u=Wo(e.disabledEfforts,`${t}.disabledEfforts`),c=Wo(e.localRejectEfforts,`${t}.localRejectEfforts`),l=L(e.allowCustomEffort,`${t}.allowCustomEffort`),d=L(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=L(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),g=L(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),E=L(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),h=L(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),P=L(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),f=L(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),m={effortStrategy:n};if(o!==void 0&&(m.reasoningPreset=o),r!==void 0&&(m.thinkingStrategy=r),s!==void 0&&(m.defaultEffort=s),a!==void 0&&(m.effortAliases=a),u!==void 0&&(m.disabledEfforts=u),c!==void 0&&(m.localRejectEfforts=c),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);m.supportedEfforts=e.supportedEfforts.map((b,y)=>{if(!oe(b))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${y}] must be an object`);return{value:me(b.value,`${t}.supportedEfforts[${y}].value`),...Se(b.description,`${t}.supportedEfforts[${y}].description`)!==void 0?{description:Se(b.description,`${t}.supportedEfforts[${y}].description`)}:{},...L(b.isDefault,`${t}.supportedEfforts[${y}].isDefault`)!==void 0?{isDefault:L(b.isDefault,`${t}.supportedEfforts[${y}].isDefault`)}:{},...L(b.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)!==void 0?{isUserVisible:L(b.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!oe(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let b={};for(let[y,C]of Object.entries(e.budgetByEffort))b[y]=ae(C,`${t}.budgetByEffort.${y}`)??0;m.budgetByEffort=b}return l!==void 0&&(m.allowCustomEffort=l),d!==void 0&&(m.supportsReasoningEffort=d),p!==void 0&&(m.supportsReasoningSummary=p),g!==void 0&&(m.supportsEncryptedReasoningReplay=g),E!==void 0&&(m.supportsAdaptiveThinking=E),h!==void 0&&(m.supportsManualThinkingBudget=h),P!==void 0&&(m.supportsDisabledThinking=P),f!==void 0&&(m.requiresEffortBetaHeader=f),m}i(zo,"validateReasoningProfile");function Vo(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?zo(n,`${t}.reasoningProfile`):zo(o,`${t}.reasoningCapabilityV2`)}i(Vo,"validateReasoningProfileField");function fs(e,t){if(typeof e!="string"||!Ko.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ko.join(", ")}, got ${JSON.stringify(e)}`);return e}i(fs,"requireProfileName");function ps(e,t){if(typeof e!="string"||!Uo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Uo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ps,"requireVerifyStrategy");function gs(e,t){if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=me(e.id,`${t}.id`),o=Se(e.wireModel,`${t}.wireModel`),r=Se(e.displayName,`${t}.displayName`),s=ae(e.contextWindow,`${t}.contextWindow`),a=ae(e.maxOutputTokens,`${t}.maxOutputTokens`),u=Xo(e.maxOutputTokensField,`${t}.maxOutputTokensField`),c=ae(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=L(e.replayReasoningContent,`${t}.replayReasoningContent`),d=L(e.strictThinkingSignature,`${t}.strictThinkingSignature`),p=ae(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),g=e.reasoningCapability===void 0?void 0:En(e.reasoningCapability,`${t}.reasoningCapability`),E=Vo(e,t),h={id:n};return o!==void 0&&(h.wireModel=o),r!==void 0&&(h.displayName=r),s!==void 0&&(h.contextWindow=s),a!==void 0&&(h.maxOutputTokens=a),u!==void 0&&(h.maxOutputTokensField=u),c!==void 0&&(h.thinkingBudgetCap=c),g!==void 0&&(h.reasoningCapability=g),E!==void 0&&(h.reasoningProfile=E),l!==void 0&&(h.replayReasoningContent=l),d!==void 0&&(h.strictThinkingSignature=d),p!==void 0&&(h.streamMaxDurationMs=p),h}i(gs,"validateModelDescriptor");function ms(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=En(r,`${t}.${o}`);return n}i(ms,"validateModelReasoningCapabilities");function hs(e,t){if(!oe(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=L(e.cliBridge,`providers.${t}.cliBridge`),o=me(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=En(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=Vo(e,`providers.${t}`),a=fs(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=ps(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&u!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${u}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=ae(e.contextWindow,`providers.${t}.contextWindow`),l=ae(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),d=Xo(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),p=ae(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),g=L(e.supportsThinking,`providers.${t}.supportsThinking`),E=ms(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),h=Se(e.model,`providers.${t}.model`);if(n&&(h!==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&&h===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let P;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);P=e.models.map((b,y)=>gs(b,`providers.${t}.models[${y}]`));let m=new Set([...h===void 0?[]:[h],...P.map(b=>b.id)]);for(let[b,y]of P.entries())if(y.wireModel!==void 0&&!m.has(y.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${b}].wireModel must reference a declared model, got ${JSON.stringify(y.wireModel)}`)}let f={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(f.reasoningProfile=s),h!==void 0&&(f.model=h),P!==void 0&&(f.models=P),c!==void 0&&(f.contextWindow=c),l!==void 0&&(f.maxOutputTokens=l),d!==void 0&&(f.maxOutputTokensField=d),p!==void 0&&(f.thinkingBudgetCap=p),g!==void 0&&(f.supportsThinking=g),E!==void 0&&(f.modelReasoningCapabilities=E),n&&(f.cliBridge=!0),f}i(hs,"validateProviderEntry");function Ho(e){if(!oe(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=me(e.updatedAt,"updatedAt");if(!oe(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]=hs(r,o);return{version:1,updatedAt:t,providers:n}}i(Ho,"validateProviderCapabilitiesJson");var Es=Object.freeze({native:fe,"image-input-native":uo,"cli-bridge":Ve,"image-input-cli-bridge":co}),Rt=null;function bs(){if(process.env.KODAX_BUNDLED==="true")return Re.join(Re.dirname(process.execPath),"provider-capabilities.json");let e=Re.dirname(ks(import.meta.url)),t=[Re.join(e,"provider-capabilities.json"),Re.join(Re.dirname(e),"provider-capabilities.json")];for(let n of t)if(ys(n))return n;return t[0]}i(bs,"resolveJsonPath");function Ts(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Go(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Go(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(Ts,"deepFreezeSnapshot");function Go(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}i(Go,"freezeReasoningProfile");function xs(e){if(e==="gemini-cli"){let t=Me();return{model:t,models:Qe().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=we();return{model:t,models:Ye().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(xs,"resolveCliBridgeModels");function Cs(e,t){let n=Es[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=xs(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.maxOutputTokensField!==void 0&&(o.maxOutputTokensField=t.maxOutputTokensField),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}i(Cs,"buildSnapshot");function Jo(){if(Rt)return Rt;let e=bs(),t;try{let r=vs(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=Ho(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=Ts(Cs(r,s));return Rt=Object.freeze(o),Rt}i(Jo,"getProviderSnapshots");import Ps from"@anthropic-ai/sdk";var K=Jo();function X(e,t={}){let n=K[e];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,maxOutputTokensField:n.maxOutputTokensField,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...t}}i(X,"buildProviderConfig");var bn=class extends ${static{i(this,"AnthropicProvider")}name="anthropic";config=X("anthropic",{strictThinkingSignature:!0});buildClient(){return new Ps({apiKey:this.getApiKey()})}},Tn=class extends ${static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=X("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},xn=class extends ${static{i(this,"ZaiCodingProvider")}name="zai-coding";config=X("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},Cn=class extends ${static{i(this,"KimiCodeProvider")}name="kimi-code";config=X("kimi-code",{baseUrl:"https://api.kimi.com/coding/",promptCacheAffinity:!0})},Pn=class extends ${static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=X("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},_n=class extends ${static{i(this,"MimoCodingProvider")}name="mimo-coding";config=X("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},wn=class extends ${static{i(this,"MimoProvider")}name="mimo";config=X("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},Mn=class extends ${static{i(this,"ArkCodingProvider")}name="ark-coding";config=X("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},Sn=class extends H{static{i(this,"OpenAIProvider")}name="openai";config=X("openai",{promptCacheAffinity:!0})},Rn=class extends H{static{i(this,"DeepSeekProvider")}name="deepseek";config=X("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},An=class extends H{static{i(this,"KimiProvider")}name="kimi";config=X("kimi",{baseUrl:"https://api.moonshot.cn/v1",promptCacheAffinity:!0,replayReasoningContent:!0})},Dn=class extends H{static{i(this,"QwenProvider")}name="qwen";config=X("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},In=class extends ${static{i(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=X("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},On=class extends H{static{i(this,"ZhipuProvider")}name="zhipu";config=X("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},G={anthropic:i(()=>new bn,"anthropic"),openai:i(()=>new Sn,"openai"),deepseek:i(()=>new Rn,"deepseek"),kimi:i(()=>new An,"kimi"),"kimi-code":i(()=>new Cn,"kimi-code"),qwen:i(()=>new Dn,"qwen"),"qwen-token-plan":i(()=>new In,"qwen-token-plan"),zhipu:i(()=>new On,"zhipu"),"zhipu-coding":i(()=>new Tn,"zhipu-coding"),"zai-coding":i(()=>new xn,"zai-coding"),"minimax-coding":i(()=>new Pn,"minimax-coding"),"mimo-coding":i(()=>new _n,"mimo-coding"),mimo:i(()=>new wn,"mimo"),"ark-coding":i(()=>new Mn,"ark-coding"),"gemini-cli":i(()=>new _t,"gemini-cli"),"codex-cli":i(()=>new St,"codex-cli")},Nn=process.env.KODAX_PROVIDER??"zhipu-coding",qo=new Map;function _s(e){if(U(e))return K[e].apiKeyEnv}i(_s,"resolveApiKeyEnvForProvider");function Yo(e){let t=e??Nn,n=G[t];if(!n)throw new I(`Unknown provider: ${t}. Available: ${Object.keys(G).join(", ")}`,t);let o=_s(t),r=he(t,o?process.env[o]:void 0),s=qo.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return qo.set(t,{apiKey:r,instance:a}),a}i(Yo,"getProvider");function Qo(e){return U(e)?he(e,process.env[K[e].apiKeyEnv])!==void 0:!1}i(Qo,"isProviderConfigured");function Zo(e){return U(e)?K[e].model:null}i(Zo,"getProviderModel");function er(e,t){if(!U(e))return"unknown";let n=K[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(er,"getProviderConfiguredReasoningCapability");function tr(e){return U(e)?Y(K[e].capabilityProfile):null}i(tr,"getProviderConfiguredCapabilityProfile");function nr(){let e=[];for(let t of Object.keys(G)){let n=K[t];e.push({name:t,model:n.model,models:$n(t),configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:Y(n.capabilityProfile)})}return e}i(nr,"getProviderList");function $n(e){return Ae(e).map(t=>t.id)}i($n,"getProviderModels");function U(e){return e in G}i(U,"isProviderName");function or(e){return{id:e.model}}i(or,"makeDefaultDescriptor");function rr(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}i(rr,"resolveWireModelDescriptor");function At(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(At,"effectiveCapabilities");function Ae(e){let t=K[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??or(t),...r].map(s=>rr(t,s))}i(Ae,"getProviderModelDescriptors");function Dt(e,t){let n=K[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?At(e,n,rr(n,o)):t===n.model?At(e,n,or(n)):At(e,n,{id:t})}i(Dt,"getModelCapabilities");function It(){let e=[];for(let t of Object.keys(G)){let n=K[t];for(let o of Ae(t))e.push(At(t,n,o))}return e}i(It,"listBuiltinModelCapabilities");var ws=new Set(["compat","sdk"]),Ms=new Set(["max_tokens","max_completion_tokens"]),Ss=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Ln(e){return e.reasoningProfile??e.reasoningCapabilityV2}i(Ln,"getConfiguredReasoningProfile");function Rs(e){return e==="anthropic"?"count-tokens":"models-list"}i(Rs,"defaultVerifyStrategyForProtocol");function ir(e,t,n){if(t!==void 0){if(typeof t!="string"||!Ms.has(t))throw new Error(`Custom provider "${e.name}": ${n} must be "max_tokens" or "max_completion_tokens".`);if(e.protocol!=="openai")throw new Error(`Custom provider "${e.name}": ${n} is only valid for protocol="openai".`)}}i(ir,"validateMaxOutputTokensField");function Ot(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(Ot,"legacyCapabilityFromReasoningProfile");function As(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(As,"legacyReasoningPresetForProtocol");function sr(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(sr,"isSimpleReasoning");function Ds(e,t){if(e==="none")return at("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}:{localRejectEfforts:["none"],supportsDisabledThinking:!1},supportsReasoningEffort:!0}}i(Ds,"buildReasoningProfileFromSimple");function ar(e,t,n,o){let r=sr(n)?n:void 0,s=n!==void 0&&!sr(n)?n:void 0;if(o?.supportsThinking===!1)return at("none");if(e)return{...e,...s??{}};if(r!==void 0)return Ds(r,o?.protocol??"openai");let a=t??(o?As(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?at(a,s):void 0}i(ar,"resolveCustomReasoningProfile");function ur(e,t,n){if(e!=="deepseek-v4-openai")return e;let o=n??t;return o==="deepseek-v4-flash"?"deepseek-v4-flash-openai":o==="deepseek-v4-pro"?"deepseek-v4-pro-openai":e}i(ur,"migrateLegacyDeepSeekPreset");function Nt(e){return ar(Ln(e),ur(e.reasoningPreset,e.model),e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(Nt,"resolveCustomProviderReasoningProfile");function jn(e,t,n,o){let r=o==="deepseek-v4-openai"&&Ln(e)===void 0&&e.reasoningPreset===void 0&&e.reasoning===void 0&&e.reasoningCapability===void 0;return ar(Ln(e),ur(e.reasoningPreset??(r?o:void 0),e.id,e.wireModel),e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(jn,"resolveCustomModelReasoningProfile");function Is(e,t,n,o){let r=typeof e=="string"?{id:e}:e,s=jn(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return s?{...a,reasoningProfile:s}:a}i(Is,"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&&!ws.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.promptCacheAffinity!==void 0&&typeof e.promptCacheAffinity!="boolean")throw new Error(`Custom provider "${e.name}": promptCacheAffinity must be a boolean.`);if(ir(e,e.maxOutputTokensField,"maxOutputTokensField"),e.models?.forEach((t,n)=>{typeof t!="string"&&ir(e,t.maxOutputTokensField,`models[${n}].maxOutputTokensField`)}),e.verifyStrategy!==void 0){if(!Ss.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 Os(e){let t=e.models?.length?e.models.map(s=>Is(s,e.protocol,e.supportsThinking,e.reasoningPreset)):void 0,n=Nt(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??Ot(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,maxOutputTokensField:e.maxOutputTokensField,thinkingBudgetCap:e.thinkingBudgetCap,promptCacheAffinity:e.promptCacheAffinity??!1,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??Rs(e.protocol)}}i(Os,"buildProviderConfig");function $t(e){Ze(e);let t=Os(e);return e.protocol==="anthropic"?new Fn(e.name,t):new Bn(e.name,t)}i($t,"createCustomProvider");var Fn=class extends ${static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},Bn=class extends H{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var te=new Map,Kn=new Map,Ns=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function cr(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(cr,"hasThinkingReasoningConfig");function $s(e){if(e.supportsThinking!==!1)return;let t=cr(e),n=(e.models??[]).some(o=>typeof o!="string"&&cr(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($s,"warnOnIgnoredReasoningCapability");function dr(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 G&&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.`),$s(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>$t(r))}te.clear(),Kn.clear();for(let[r,s]of n)te.set(r,s);for(let[r,s]of o)Kn.set(r,s)}i(dr,"registerCustomProviders");function Lt(e){let t=Kn.get(e);return t?t():void 0}i(Lt,"getCustomProvider");function Ie(e){return te.has(e)}i(Ie,"isCustomProviderName");function et(){return[...te.keys()]}i(et,"getCustomProviderNames");function lr(){let e=[];for(let[t,n]of te){let o=!!process.env[n.apiKeyEnv],r=Nt(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??Ot(r)??"none",capabilityProfile:Y(n.capabilityProfile??fe),custom:!0})}return e}i(lr,"getCustomProviderList");function fr(e){let t=te.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(fr,"getCustomProviderModels");function pr(e,t,n,o){let r=typeof e=="string"?{id:e}:e,s=jn(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return s?{...a,reasoningProfile:s}:a}i(pr,"customDescriptorToFull");function Ft(e){let t=te.get(e);if(!t)return;let n=(t.models??[]).map(s=>pr(s,t.protocol,t.supportsThinking,t.reasoningPreset)),o=n.find(s=>s.id===t.model)??{id:t.model},r=n.filter(s=>s.id!==t.model);return[o,...r]}i(Ft,"getCustomProviderModelDescriptors");function De(e,t){let n=te.get(e);if(!n)return;let o=t===n.model,r=Nt(n),a=(n.models??[]).map(l=>pr(l,n.protocol,n.supportsThinking,n.reasoningPreset)).find(l=>l.id===t)??(o?{id:n.model}:void 0);if(!a)return;let u=n.supportsThinking===!1?r:a.reasoningProfile??r,c=n.supportsThinking===!1?"none":a.reasoningCapability??Ot(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(c!=="none"&&c!=="prompt-only"),reasoningCapability:c,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(De,"getCustomModelCapabilities");function Un(e){let t=te.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}i(Un,"getCustomProviderVerifyMetadata");function Bt(){let e=[];for(let[t,n]of te){let o=De(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=De(t,s);a&&e.push(a)}}return e}i(Bt,"listCustomProviderModelCapabilities");var re=new Map,Ls=0;function Wn(e){let t=re.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(Wn,"getActiveRuntimeProviderRegistration");function Fs(e){for(let[t,n]of re){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?re.delete(t):re.set(t,o);return}}}i(Fs,"removeRuntimeProviderRegistration");function gr(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(U(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(Ie(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Ls}`,name:n,factory:t},r=re.get(n)??[];return re.set(n,[...r,o]),()=>{Fs(o.id)}}i(gr,"registerModelProvider");function jt(e){let t=Wn(e);if(t===void 0)return;let n=t.factory();return t.credentialEnvironmentName??=n.getApiKeyEnv(),n}i(jt,"getRuntimeModelProvider");function tt(e){return Wn(e)!==void 0}i(tt,"isRuntimeModelProviderName");function Kt(){return Array.from(re.keys()).filter(e=>Wn(e)!==void 0)}i(Kt,"getRuntimeModelProviderNames");function Ut(){let e=new Set;for(let t of re.values())for(let n of t){if(n.credentialEnvironmentName===void 0){let o=n.factory();n.credentialEnvironmentName=o.getApiKeyEnv()}e.add(n.credentialEnvironmentName)}return[...e]}i(Ut,"getRuntimeModelProviderCredentialEnvironmentNames");function mr(){re.clear()}i(mr,"clearRuntimeModelProviders");function zn(e){if(U(e))return G[e]();let t=jt(e);if(t)return t;let n=Lt(e);if(n)return n;let o=zt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(zn,"resolveProvider");function Wt(e){return U(e)||tt(e)||Ie(e)}i(Wt,"isKnownProvider");function zt(){let e=Object.keys(G),t=Kt(),n=et();return[...new Set([...e,...t,...n])]}i(zt,"getAvailableProviderNames");function hr(){let e=new Set;for(let t of Object.values(K))e.add(t.apiKeyEnv);for(let t of et()){let n=Un(t);n!==void 0&&e.add(n.apiKeyEnv)}for(let t of Ut())e.add(t);return[...e].sort()}i(hr,"getProviderCredentialEnvironmentNames");function nt(e){return U(e)?Ae(e):Ft(e)??[]}i(nt,"resolveProviderModelDescriptors");function Xt(e,t){return U(e)?Dt(e,t):De(e,t)}i(Xt,"resolveModelCapabilities");function yr(){return[...It(),...Bt()]}i(yr,"listAllModelCapabilities");function Bs(e){if(U(e)){let t=K[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!tt(e))return Un(e)}i(Bs,"getProviderVerifyMetadata");async function vr(e,t){let n=Bs(e);if(!n&&!Wt(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${zt().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=zn(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(vr,"verifyProviderCredential");async function kr(e,t){if(!Wt(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=nt(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(kr,"listProviderModels");function js(e){let t=e.model??nt(e.provider)[0]?.id,n=t?Xt(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?Qt(n,e.rejectedEfforts):n,r=ze({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(js,"resolveWireEffort");var Er={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:.0028},"deepseek-v4-pro":{inputPer1M:.435,outputPer1M:.87,cachePer1M:.003625}},kimi:{"kimi-k3":{inputPer1M:2.8,outputPer1M:14,cachePer1M:.28},"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":{inputPer1M:.005,outputPer1M:.015},"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.3":{inputPer1M:.05,outputPer1M:.1},"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"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.3":{inputPer1M:.05,outputPer1M:.1},"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 Xn(e,t,n){let o=n?.[e]?.[t];return o||Er[e]?.[t]}i(Xn,"getCostRate");function Vn(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,c=s/1e6*e.inputPer1M,l=n/1e6*e.outputPer1M,d=o/1e6*a,p=r/1e6*u;return c+l+d+p}i(Vn,"calculateCost");function Ks(){return{records:[],retries:[]}}i(Ks,"createCostTracker");function Hn(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(Hn,"recordRetry");function Gn(e,t,n){let o=Xn(t.provider,t.model,n),r=o?Vn(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(Gn,"recordUsage");function Us(e){let t=0,n=0,o=0,r=0,s=0,a=0,u={},c={};for(let p of e.records){t+=p.cost,n+=p.inputTokens,o+=p.outputTokens,r+=p.cacheReadTokens+p.cacheWriteTokens,s+=p.cacheReadTokens,a+=p.cacheWriteTokens;let g=u[p.provider];u[p.provider]={cost:(g?.cost??0)+p.cost,calls:(g?.calls??0)+1,inputTokens:(g?.inputTokens??0)+p.inputTokens,outputTokens:(g?.outputTokens??0)+p.outputTokens};let E=p.role??"default",h=c[E];c[E]={cost:(h?.cost??0)+p.cost,calls:(h?.calls??0)+1,inputTokens:(h?.inputTokens??0)+p.inputTokens,outputTokens:(h?.outputTokens??0)+p.outputTokens}}let l=0;for(let p of e.retries)l+=p.waitMs;let d=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:d,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:l,byProvider:u,byRole:c}}i(Us,"getSummary");function Vt(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Vt,"formatCost");function Ws(e){let t=[];if(t.push(`Session Cost: ${Vt(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}: ${Vt(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}: ${Vt(s.cost)} (${s.calls} calls)`)}return t.join(`
|
|
123
|
-
`)}i(Ws,"formatCostReport");import{performance as
|
|
122
|
+
`}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{l.abort(),d.clear(),p.clear(),o.cancel().catch(()=>{}),r.abort().catch(()=>{})},"abort"),releaseSession:i(f=>{p.delete(f)},"releaseSession"),recreate:i(()=>qe(e),"recreate"),executor:e}}i(qe,"createPseudoAcpServer");import Io from"node:fs";import Oo from"node:os";import No from"node:path";var Qi="gpt-5.4",Zi="auto-gemini-3",es=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ts=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function $o(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($o,"dedupePreserveOrder");function ns(){let e=No.join(Oo.homedir(),".codex","config.toml");try{return Io.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(ns,"readCodexConfiguredModel");function os(){let e=No.join(Oo.homedir(),".gemini","settings.json");try{let t=JSON.parse(Io.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(os,"readGeminiConfiguredModel");function we(){return ns()||Qi}i(we,"getCodexCliDefaultModel");function Me(){return os()||Zi}i(Me,"getGeminiCliDefaultModel");function Ye(){return $o([we(),...es])}i(Ye,"getCodexCliKnownModels");function Qe(){return $o([Me(),...ts])}i(Qe,"getGeminiCliKnownModels");var kn=Me(),rs=Qe(),is={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},_t=class extends se{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:kn,models:rs.filter(t=>t!==kn).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new Pt({model:kn});this.acpClientOptions=qe(t)}getCapabilityProfile(){return Y(is)}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 wt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(wt,"finiteNonNegative");function ss(e){if(!(!e||!wt(e.input_tokens)||!wt(e.output_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.output_tokens,...wt(e.cached_input_tokens)?{cachedReadTokens:e.cached_input_tokens}:{},...wt(e.cache_write_input_tokens)?{cachedWriteTokens:e.cache_write_input_tokens}:{}}}i(ss,"normalizeCodexUsage");function as(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(as,"buildReasoningEffortArgs");var Mt=class extends _e{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 xt("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=as(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:ss(t.usage),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 En=we(),us=Ye(),St=class extends se{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:En,models:us.filter(t=>t!==En).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new Mt({model:En});this.acpClientOptions=qe(t)}};import{existsSync as vs,readFileSync as ks}from"node:fs";import Re from"node:path";import{fileURLToPath as Es}from"node:url";var Lo=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Fo=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Bo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],jo=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","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"],Ko=["max_tokens","max_completion_tokens"],Uo=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Wo=["count-tokens","models-list","minimal-message","unsupported"];function oe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(oe,"isPlainObject");function me(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(me,"requireString");function Se(e,t){if(e!==void 0)return me(e,t)}i(Se,"optionalString");function Vo(e,t){if(e!==void 0){if(typeof e!="string"||!Ko.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ko.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Vo,"optionalMaxOutputTokensField");function ae(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(ae,"optionalNumber");function L(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(L,"optionalBoolean");function zo(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)=>me(n,`${t}[${o}]`))}}i(zo,"optionalStringArray");function cs(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=me(r,`${t}.${o}`);return n}i(cs,"optionalStringMap");function ds(e,t){if(e!==void 0){if(typeof e!="string"||!jo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${jo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(ds,"optionalReasoningPreset");function bn(e,t){if(typeof e!="string"||!Lo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Lo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(bn,"requireReasoningCapability");function ls(e,t){if(typeof e!="string"||!Fo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Fo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ls,"requireEffortStrategy");function fs(e,t){if(e!==void 0){if(typeof e!="string"||!Bo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Bo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(fs,"optionalThinkingStrategy");function Xo(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ls(e.effortStrategy,`${t}.effortStrategy`),o=ds(e.reasoningPreset,`${t}.reasoningPreset`),r=fs(e.thinkingStrategy,`${t}.thinkingStrategy`),s=Se(e.defaultEffort,`${t}.defaultEffort`),a=cs(e.effortAliases,`${t}.effortAliases`),u=zo(e.disabledEfforts,`${t}.disabledEfforts`),c=zo(e.localRejectEfforts,`${t}.localRejectEfforts`),l=L(e.allowCustomEffort,`${t}.allowCustomEffort`),d=L(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=L(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),g=L(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),E=L(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),h=L(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),P=L(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),f=L(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),m={effortStrategy:n};if(o!==void 0&&(m.reasoningPreset=o),r!==void 0&&(m.thinkingStrategy=r),s!==void 0&&(m.defaultEffort=s),a!==void 0&&(m.effortAliases=a),u!==void 0&&(m.disabledEfforts=u),c!==void 0&&(m.localRejectEfforts=c),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);m.supportedEfforts=e.supportedEfforts.map((b,y)=>{if(!oe(b))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${y}] must be an object`);return{value:me(b.value,`${t}.supportedEfforts[${y}].value`),...Se(b.description,`${t}.supportedEfforts[${y}].description`)!==void 0?{description:Se(b.description,`${t}.supportedEfforts[${y}].description`)}:{},...L(b.isDefault,`${t}.supportedEfforts[${y}].isDefault`)!==void 0?{isDefault:L(b.isDefault,`${t}.supportedEfforts[${y}].isDefault`)}:{},...L(b.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)!==void 0?{isUserVisible:L(b.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!oe(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let b={};for(let[y,C]of Object.entries(e.budgetByEffort))b[y]=ae(C,`${t}.budgetByEffort.${y}`)??0;m.budgetByEffort=b}return l!==void 0&&(m.allowCustomEffort=l),d!==void 0&&(m.supportsReasoningEffort=d),p!==void 0&&(m.supportsReasoningSummary=p),g!==void 0&&(m.supportsEncryptedReasoningReplay=g),E!==void 0&&(m.supportsAdaptiveThinking=E),h!==void 0&&(m.supportsManualThinkingBudget=h),P!==void 0&&(m.supportsDisabledThinking=P),f!==void 0&&(m.requiresEffortBetaHeader=f),m}i(Xo,"validateReasoningProfile");function Ho(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?Xo(n,`${t}.reasoningProfile`):Xo(o,`${t}.reasoningCapabilityV2`)}i(Ho,"validateReasoningProfileField");function ps(e,t){if(typeof e!="string"||!Uo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Uo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ps,"requireProfileName");function gs(e,t){if(typeof e!="string"||!Wo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Wo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(gs,"requireVerifyStrategy");function ms(e,t){if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=me(e.id,`${t}.id`),o=Se(e.wireModel,`${t}.wireModel`),r=Se(e.displayName,`${t}.displayName`),s=ae(e.contextWindow,`${t}.contextWindow`),a=ae(e.maxOutputTokens,`${t}.maxOutputTokens`),u=Vo(e.maxOutputTokensField,`${t}.maxOutputTokensField`),c=ae(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=L(e.replayReasoningContent,`${t}.replayReasoningContent`),d=L(e.strictThinkingSignature,`${t}.strictThinkingSignature`),p=ae(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),g=e.reasoningCapability===void 0?void 0:bn(e.reasoningCapability,`${t}.reasoningCapability`),E=Ho(e,t),h={id:n};return o!==void 0&&(h.wireModel=o),r!==void 0&&(h.displayName=r),s!==void 0&&(h.contextWindow=s),a!==void 0&&(h.maxOutputTokens=a),u!==void 0&&(h.maxOutputTokensField=u),c!==void 0&&(h.thinkingBudgetCap=c),g!==void 0&&(h.reasoningCapability=g),E!==void 0&&(h.reasoningProfile=E),l!==void 0&&(h.replayReasoningContent=l),d!==void 0&&(h.strictThinkingSignature=d),p!==void 0&&(h.streamMaxDurationMs=p),h}i(ms,"validateModelDescriptor");function hs(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=bn(r,`${t}.${o}`);return n}i(hs,"validateModelReasoningCapabilities");function ys(e,t){if(!oe(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=L(e.cliBridge,`providers.${t}.cliBridge`),o=me(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=bn(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=Ho(e,`providers.${t}`),a=ps(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=gs(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&u!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${u}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=ae(e.contextWindow,`providers.${t}.contextWindow`),l=ae(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),d=Vo(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),p=ae(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),g=L(e.supportsThinking,`providers.${t}.supportsThinking`),E=hs(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),h=Se(e.model,`providers.${t}.model`);if(n&&(h!==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&&h===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let P;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);P=e.models.map((b,y)=>ms(b,`providers.${t}.models[${y}]`));let m=new Set([...h===void 0?[]:[h],...P.map(b=>b.id)]);for(let[b,y]of P.entries())if(y.wireModel!==void 0&&!m.has(y.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${b}].wireModel must reference a declared model, got ${JSON.stringify(y.wireModel)}`)}let f={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(f.reasoningProfile=s),h!==void 0&&(f.model=h),P!==void 0&&(f.models=P),c!==void 0&&(f.contextWindow=c),l!==void 0&&(f.maxOutputTokens=l),d!==void 0&&(f.maxOutputTokensField=d),p!==void 0&&(f.thinkingBudgetCap=p),g!==void 0&&(f.supportsThinking=g),E!==void 0&&(f.modelReasoningCapabilities=E),n&&(f.cliBridge=!0),f}i(ys,"validateProviderEntry");function Go(e){if(!oe(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=me(e.updatedAt,"updatedAt");if(!oe(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]=ys(r,o);return{version:1,updatedAt:t,providers:n}}i(Go,"validateProviderCapabilitiesJson");var bs=Object.freeze({native:fe,"image-input-native":co,"cli-bridge":Ve,"image-input-cli-bridge":lo}),Rt=null;function Ts(){if(process.env.KODAX_BUNDLED==="true")return Re.join(Re.dirname(process.execPath),"provider-capabilities.json");let e=Re.dirname(Es(import.meta.url)),t=[Re.join(e,"provider-capabilities.json"),Re.join(Re.dirname(e),"provider-capabilities.json")];for(let n of t)if(vs(n))return n;return t[0]}i(Ts,"resolveJsonPath");function xs(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Jo(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Jo(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(xs,"deepFreezeSnapshot");function Jo(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(Jo,"freezeReasoningProfile");function Cs(e){if(e==="gemini-cli"){let t=Me();return{model:t,models:Qe().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=we();return{model:t,models:Ye().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(Cs,"resolveCliBridgeModels");function Ps(e,t){let n=bs[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=Cs(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.maxOutputTokensField!==void 0&&(o.maxOutputTokensField=t.maxOutputTokensField),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}i(Ps,"buildSnapshot");function qo(){if(Rt)return Rt;let e=Ts(),t;try{let r=ks(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=Go(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=xs(Ps(r,s));return Rt=Object.freeze(o),Rt}i(qo,"getProviderSnapshots");var K=qo();function X(e,t={}){let n=K[e];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,maxOutputTokensField:n.maxOutputTokensField,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...t}}i(X,"buildProviderConfig");var Tn=class extends ${static{i(this,"AnthropicProvider")}name="anthropic";config=X("anthropic",{strictThinkingSignature:!0});buildClient(){return ln({apiKey:this.getApiKey()})}},xn=class extends ${static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=X("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},Cn=class extends ${static{i(this,"ZaiCodingProvider")}name="zai-coding";config=X("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},Pn=class extends ${static{i(this,"KimiCodeProvider")}name="kimi-code";config=X("kimi-code",{baseUrl:"https://api.kimi.com/coding/",promptCacheAffinity:!0})},_n=class extends ${static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=X("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},wn=class extends ${static{i(this,"MimoCodingProvider")}name="mimo-coding";config=X("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},Mn=class extends ${static{i(this,"MimoProvider")}name="mimo";config=X("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},Sn=class extends ${static{i(this,"ArkCodingProvider")}name="ark-coding";config=X("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},Rn=class extends H{static{i(this,"OpenAIProvider")}name="openai";config=X("openai",{promptCacheAffinity:!0})},An=class extends H{static{i(this,"DeepSeekProvider")}name="deepseek";config=X("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},Dn=class extends H{static{i(this,"KimiProvider")}name="kimi";config=X("kimi",{baseUrl:"https://api.moonshot.cn/v1",promptCacheAffinity:!0,replayReasoningContent:!0})},In=class extends H{static{i(this,"QwenProvider")}name="qwen";config=X("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},On=class extends ${static{i(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=X("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},Nn=class extends H{static{i(this,"ZhipuProvider")}name="zhipu";config=X("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},G={anthropic:i(()=>new Tn,"anthropic"),openai:i(()=>new Rn,"openai"),deepseek:i(()=>new An,"deepseek"),kimi:i(()=>new Dn,"kimi"),"kimi-code":i(()=>new Pn,"kimi-code"),qwen:i(()=>new In,"qwen"),"qwen-token-plan":i(()=>new On,"qwen-token-plan"),zhipu:i(()=>new Nn,"zhipu"),"zhipu-coding":i(()=>new xn,"zhipu-coding"),"zai-coding":i(()=>new Cn,"zai-coding"),"minimax-coding":i(()=>new _n,"minimax-coding"),"mimo-coding":i(()=>new wn,"mimo-coding"),mimo:i(()=>new Mn,"mimo"),"ark-coding":i(()=>new Sn,"ark-coding"),"gemini-cli":i(()=>new _t,"gemini-cli"),"codex-cli":i(()=>new St,"codex-cli")},$n=process.env.KODAX_PROVIDER??"zhipu-coding",Yo=new Map;function _s(e){if(U(e))return K[e].apiKeyEnv}i(_s,"resolveApiKeyEnvForProvider");function Qo(e){let t=e??$n,n=G[t];if(!n)throw new I(`Unknown provider: ${t}. Available: ${Object.keys(G).join(", ")}`,t);let o=_s(t),r=he(t,o?process.env[o]:void 0),s=Yo.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return Yo.set(t,{apiKey:r,instance:a}),a}i(Qo,"getProvider");function Zo(e){return U(e)?he(e,process.env[K[e].apiKeyEnv])!==void 0:!1}i(Zo,"isProviderConfigured");function er(e){return U(e)?K[e].model:null}i(er,"getProviderModel");function tr(e,t){if(!U(e))return"unknown";let n=K[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(tr,"getProviderConfiguredReasoningCapability");function nr(e){return U(e)?Y(K[e].capabilityProfile):null}i(nr,"getProviderConfiguredCapabilityProfile");function or(){let e=[];for(let t of Object.keys(G)){let n=K[t];e.push({name:t,model:n.model,models:Ln(t),configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:Y(n.capabilityProfile)})}return e}i(or,"getProviderList");function Ln(e){return Ae(e).map(t=>t.id)}i(Ln,"getProviderModels");function U(e){return e in G}i(U,"isProviderName");function rr(e){return{id:e.model}}i(rr,"makeDefaultDescriptor");function ir(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}i(ir,"resolveWireModelDescriptor");function At(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(At,"effectiveCapabilities");function Ae(e){let t=K[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??rr(t),...r].map(s=>ir(t,s))}i(Ae,"getProviderModelDescriptors");function Dt(e,t){let n=K[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?At(e,n,ir(n,o)):t===n.model?At(e,n,rr(n)):At(e,n,{id:t})}i(Dt,"getModelCapabilities");function It(){let e=[];for(let t of Object.keys(G)){let n=K[t];for(let o of Ae(t))e.push(At(t,n,o))}return e}i(It,"listBuiltinModelCapabilities");var ws=new Set(["compat","sdk"]),Ms=new Set(["max_tokens","max_completion_tokens"]),Ss=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Fn(e){return e.reasoningProfile??e.reasoningCapabilityV2}i(Fn,"getConfiguredReasoningProfile");function Rs(e){return e==="anthropic"?"count-tokens":"models-list"}i(Rs,"defaultVerifyStrategyForProtocol");function sr(e,t,n){if(t!==void 0){if(typeof t!="string"||!Ms.has(t))throw new Error(`Custom provider "${e.name}": ${n} must be "max_tokens" or "max_completion_tokens".`);if(e.protocol!=="openai")throw new Error(`Custom provider "${e.name}": ${n} is only valid for protocol="openai".`)}}i(sr,"validateMaxOutputTokensField");function Ot(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(Ot,"legacyCapabilityFromReasoningProfile");function As(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(As,"legacyReasoningPresetForProtocol");function ar(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(ar,"isSimpleReasoning");function Ds(e,t){if(e==="none")return at("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}:{localRejectEfforts:["none"],supportsDisabledThinking:!1},supportsReasoningEffort:!0}}i(Ds,"buildReasoningProfileFromSimple");function ur(e,t,n,o){let r=ar(n)?n:void 0,s=n!==void 0&&!ar(n)?n:void 0;if(o?.supportsThinking===!1)return at("none");if(e)return{...e,...s??{}};if(r!==void 0)return Ds(r,o?.protocol??"openai");let a=t??(o?As(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?at(a,s):void 0}i(ur,"resolveCustomReasoningProfile");function cr(e,t,n){if(e!=="deepseek-v4-openai")return e;let o=n??t;return o==="deepseek-v4-flash"?"deepseek-v4-flash-openai":o==="deepseek-v4-pro"?"deepseek-v4-pro-openai":e}i(cr,"migrateLegacyDeepSeekPreset");function Nt(e){return ur(Fn(e),cr(e.reasoningPreset,e.model),e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(Nt,"resolveCustomProviderReasoningProfile");function Kn(e,t,n,o){let r=o==="deepseek-v4-openai"&&Fn(e)===void 0&&e.reasoningPreset===void 0&&e.reasoning===void 0&&e.reasoningCapability===void 0;return ur(Fn(e),cr(e.reasoningPreset??(r?o:void 0),e.id,e.wireModel),e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(Kn,"resolveCustomModelReasoningProfile");function Is(e,t,n,o){let r=typeof e=="string"?{id:e}:e,s=Kn(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return s?{...a,reasoningProfile:s}:a}i(Is,"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&&!ws.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.promptCacheAffinity!==void 0&&typeof e.promptCacheAffinity!="boolean")throw new Error(`Custom provider "${e.name}": promptCacheAffinity must be a boolean.`);if(sr(e,e.maxOutputTokensField,"maxOutputTokensField"),e.models?.forEach((t,n)=>{typeof t!="string"&&sr(e,t.maxOutputTokensField,`models[${n}].maxOutputTokensField`)}),e.verifyStrategy!==void 0){if(!Ss.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 Os(e){let t=e.models?.length?e.models.map(s=>Is(s,e.protocol,e.supportsThinking,e.reasoningPreset)):void 0,n=Nt(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??Ot(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,maxOutputTokensField:e.maxOutputTokensField,thinkingBudgetCap:e.thinkingBudgetCap,promptCacheAffinity:e.promptCacheAffinity??!1,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??Rs(e.protocol)}}i(Os,"buildProviderConfig");function $t(e){Ze(e);let t=Os(e);return e.protocol==="anthropic"?new Bn(e.name,t):new jn(e.name,t)}i($t,"createCustomProvider");var Bn=class extends ${static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},jn=class extends H{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var te=new Map,Un=new Map,Ns=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function dr(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(dr,"hasThinkingReasoningConfig");function $s(e){if(e.supportsThinking!==!1)return;let t=dr(e),n=(e.models??[]).some(o=>typeof o!="string"&&dr(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($s,"warnOnIgnoredReasoningCapability");function lr(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 G&&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.`),$s(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>$t(r))}te.clear(),Un.clear();for(let[r,s]of n)te.set(r,s);for(let[r,s]of o)Un.set(r,s)}i(lr,"registerCustomProviders");function Lt(e){let t=Un.get(e);return t?t():void 0}i(Lt,"getCustomProvider");function Ie(e){return te.has(e)}i(Ie,"isCustomProviderName");function et(){return[...te.keys()]}i(et,"getCustomProviderNames");function fr(){let e=[];for(let[t,n]of te){let o=!!process.env[n.apiKeyEnv],r=Nt(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??Ot(r)??"none",capabilityProfile:Y(n.capabilityProfile??fe),custom:!0})}return e}i(fr,"getCustomProviderList");function pr(e){let t=te.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(pr,"getCustomProviderModels");function gr(e,t,n,o){let r=typeof e=="string"?{id:e}:e,s=Kn(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return s?{...a,reasoningProfile:s}:a}i(gr,"customDescriptorToFull");function Ft(e){let t=te.get(e);if(!t)return;let n=(t.models??[]).map(s=>gr(s,t.protocol,t.supportsThinking,t.reasoningPreset)),o=n.find(s=>s.id===t.model)??{id:t.model},r=n.filter(s=>s.id!==t.model);return[o,...r]}i(Ft,"getCustomProviderModelDescriptors");function De(e,t){let n=te.get(e);if(!n)return;let o=t===n.model,r=Nt(n),a=(n.models??[]).map(l=>gr(l,n.protocol,n.supportsThinking,n.reasoningPreset)).find(l=>l.id===t)??(o?{id:n.model}:void 0);if(!a)return;let u=n.supportsThinking===!1?r:a.reasoningProfile??r,c=n.supportsThinking===!1?"none":a.reasoningCapability??Ot(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(c!=="none"&&c!=="prompt-only"),reasoningCapability:c,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(De,"getCustomModelCapabilities");function Wn(e){let t=te.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}i(Wn,"getCustomProviderVerifyMetadata");function Bt(){let e=[];for(let[t,n]of te){let o=De(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=De(t,s);a&&e.push(a)}}return e}i(Bt,"listCustomProviderModelCapabilities");var re=new Map,Ls=0;function zn(e){let t=re.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(zn,"getActiveRuntimeProviderRegistration");function Fs(e){for(let[t,n]of re){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?re.delete(t):re.set(t,o);return}}}i(Fs,"removeRuntimeProviderRegistration");function mr(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(U(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(Ie(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Ls}`,name:n,factory:t},r=re.get(n)??[];return re.set(n,[...r,o]),()=>{Fs(o.id)}}i(mr,"registerModelProvider");function jt(e){let t=zn(e);if(t===void 0)return;let n=t.factory();return t.credentialEnvironmentName??=n.getApiKeyEnv(),n}i(jt,"getRuntimeModelProvider");function tt(e){return zn(e)!==void 0}i(tt,"isRuntimeModelProviderName");function Kt(){return Array.from(re.keys()).filter(e=>zn(e)!==void 0)}i(Kt,"getRuntimeModelProviderNames");function Ut(){let e=new Set;for(let t of re.values())for(let n of t){if(n.credentialEnvironmentName===void 0){let o=n.factory();n.credentialEnvironmentName=o.getApiKeyEnv()}e.add(n.credentialEnvironmentName)}return[...e]}i(Ut,"getRuntimeModelProviderCredentialEnvironmentNames");function hr(){re.clear()}i(hr,"clearRuntimeModelProviders");function Xn(e){if(U(e))return G[e]();let t=jt(e);if(t)return t;let n=Lt(e);if(n)return n;let o=zt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(Xn,"resolveProvider");function Wt(e){return U(e)||tt(e)||Ie(e)}i(Wt,"isKnownProvider");function zt(){let e=Object.keys(G),t=Kt(),n=et();return[...new Set([...e,...t,...n])]}i(zt,"getAvailableProviderNames");function yr(){let e=new Set;for(let t of Object.values(K))e.add(t.apiKeyEnv);for(let t of et()){let n=Wn(t);n!==void 0&&e.add(n.apiKeyEnv)}for(let t of Ut())e.add(t);return[...e].sort()}i(yr,"getProviderCredentialEnvironmentNames");function nt(e){return U(e)?Ae(e):Ft(e)??[]}i(nt,"resolveProviderModelDescriptors");function Xt(e,t){return U(e)?Dt(e,t):De(e,t)}i(Xt,"resolveModelCapabilities");function vr(){return[...It(),...Bt()]}i(vr,"listAllModelCapabilities");function Bs(e){if(U(e)){let t=K[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!tt(e))return Wn(e)}i(Bs,"getProviderVerifyMetadata");async function kr(e,t){let n=Bs(e);if(!n&&!Wt(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${zt().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=Xn(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(kr,"verifyProviderCredential");async function Er(e,t){if(!Wt(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=nt(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(Er,"listProviderModels");function js(e){let t=e.model??nt(e.provider)[0]?.id,n=t?Xt(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?Qt(n,e.rejectedEfforts):n,r=ze({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(js,"resolveWireEffort");var br={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:.0028},"deepseek-v4-pro":{inputPer1M:.435,outputPer1M:.87,cachePer1M:.003625}},kimi:{"kimi-k3":{inputPer1M:2.8,outputPer1M:14,cachePer1M:.28},"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":{inputPer1M:.005,outputPer1M:.015},"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.3":{inputPer1M:.05,outputPer1M:.1},"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"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.3":{inputPer1M:.05,outputPer1M:.1},"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.3":{inputPer1M:.005,outputPer1M:.015},"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 Vn(e,t,n){let o=n?.[e]?.[t];return o||br[e]?.[t]}i(Vn,"getCostRate");function Hn(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,c=s/1e6*e.inputPer1M,l=n/1e6*e.outputPer1M,d=o/1e6*a,p=r/1e6*u;return c+l+d+p}i(Hn,"calculateCost");function Ks(){return{records:[],retries:[]}}i(Ks,"createCostTracker");function Gn(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(Gn,"recordRetry");function Jn(e,t,n){let o=Vn(t.provider,t.model,n),r=o?Hn(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(Jn,"recordUsage");function Us(e){let t=0,n=0,o=0,r=0,s=0,a=0,u={},c={};for(let p of e.records){t+=p.cost,n+=p.inputTokens,o+=p.outputTokens,r+=p.cacheReadTokens+p.cacheWriteTokens,s+=p.cacheReadTokens,a+=p.cacheWriteTokens;let g=u[p.provider];u[p.provider]={cost:(g?.cost??0)+p.cost,calls:(g?.calls??0)+1,inputTokens:(g?.inputTokens??0)+p.inputTokens,outputTokens:(g?.outputTokens??0)+p.outputTokens};let E=p.role??"default",h=c[E];c[E]={cost:(h?.cost??0)+p.cost,calls:(h?.calls??0)+1,inputTokens:(h?.inputTokens??0)+p.inputTokens,outputTokens:(h?.outputTokens??0)+p.outputTokens}}let l=0;for(let p of e.retries)l+=p.waitMs;let d=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:d,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:l,byProvider:u,byRole:c}}i(Us,"getSummary");function Vt(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Vt,"formatCost");function Ws(e){let t=[];if(t.push(`Session Cost: ${Vt(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}: ${Vt(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}: ${Vt(s.cost)} (${s.calls} calls)`)}return t.join(`
|
|
123
|
+
`)}i(Ws,"formatCostReport");import{performance as qn}from"node:perf_hooks";var Tr={inputTokens:0,outputTokens:0,totalTokens:0},zs=3e4,Xs=1024;function Vs(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(Vs,"resolveDefaultSideQueryReasoning");function Hs(e,t,n,o){if(!o||!xr(e)||!t)return e;let r=n?.effort,s=r==="none"||r!==void 0&&t.disabledEfforts?.includes(r)===!0,a=t.supportsDisabledThinking===!1||t.localRejectEfforts?.includes("none")===!0;return s||!a?e:e+Xs}i(Hs,"resolveSideQueryMaxOutputTokens");async function Gs(e){let t=new AbortController,n=e.timeoutMs??zs,o=e.costTracker,r=qn.now(),s=Buffer.byteLength(e.system,"utf8"),a=Buffer.byteLength(JSON.stringify(e.messages),"utf8"),u,c,l,d=0,p=0,g=i((T,v)=>{let k=Math.max(0,Math.round(qn.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:k,systemBytes:s,messageBytes:a,promptBytes:s+a,retryCount:d,retryWaitMs:p,...v!==void 0?v:{},...u!==void 0?{firstUpstreamEventMs:u}:{},...c!==void 0?{firstThinkingDeltaMs:c}:{},...l!==void 0?{firstTextDeltaMs:l,firstOutputMs:l,streamMs:Math.max(0,k-l)}:{},terminalPhase:T}},"diagnostics"),E,h=i(T=>{E||(E=T),t.abort()},"recordAbort"),P=setTimeout(()=>h("timeout"),n),f=i(()=>h("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?h("parent"):e.abortSignal.addEventListener("abort",f,{once:!0}));let m=i(()=>Math.max(0,Math.round(qn.now()-r)),"elapsed"),b=i(()=>{u===void 0&&(u=m())},"recordUpstreamEvent"),y,C=new Promise((T,v)=>{y=i(()=>{v(new DOMException(E==="timeout"?"sideQuery timed out":"sideQuery aborted","AbortError"))},"onControllerAbort"),t.signal.aborted?y():t.signal.addEventListener("abort",y,{once:!0})});try{let T=e.provider.getReasoningProfile(e.model),v=e.reasoning??Vs(T),k=Hs(e.maxOutputTokens,T,v,e.reasoning===void 0),M=e.provider.stream([...e.messages],[],e.system,v,{modelOverride:e.model,...xr(k)?{maxOutputTokensOverride:k}:{},onTextDelta:i(A=>{b(),A.length>0&&l===void 0&&(l=m())},"onTextDelta"),onThinkingDelta:i(A=>{b(),A.length>0&&c===void 0&&(c=m())},"onThinkingDelta"),onHeartbeat:i(()=>b(),"onHeartbeat"),onRetryAfter:i(A=>{b(),d+=1,p+=Math.max(0,A.waitMs),o&&(o=Gn(o,{provider:A.provider,waitMs:A.waitMs,reason:A.reason,source:A.source}))},"onRetryAfter")},t.signal),S=await Promise.race([M,C]),R=S.usage??Tr,F=S.textBlocks??[],V=S.toolBlocks??[],W=F.map(A=>A.text).join(""),z={responseBytes:Buffer.byteLength(W,"utf8"),textBlockCount:F.length};if(V.length>0)return{text:W,usage:R,costTracker:o,stopReason:"error",diagnostics:g("contract_error",{stopReason:"error",...z}),error:new Error(`sideQuery: provider returned ${V.length} tool_use block(s); sideQuery expects text-only output`)};o&&(o=Jn(o,{provider:e.provider.name,model:e.model,inputTokens:R.inputTokens,outputTokens:R.outputTokens,cacheReadTokens:R.cachedReadTokens,cacheWriteTokens:R.cachedWriteTokens,role:e.querySource}));let N=Js(S.stopReason);return{text:W,usage:R,costTracker:o,stopReason:N,diagnostics:g("completed",{stopReason:N,...z})}}catch(T){let v=T instanceof Error?T:new Error(String(T)),k="error";return t.signal.aborted&&(k=E==="timeout"?"timeout":"aborted"),{text:"",usage:Tr,costTracker:o,stopReason:k,diagnostics:g(l!==void 0?"streaming":c!==void 0?"thinking":u!==void 0?"awaiting_text":"pre_output",{stopReason:k}),error:v}}finally{clearTimeout(P),e.abortSignal&&e.abortSignal.removeEventListener("abort",f),y&&t.signal.removeEventListener("abort",y)}}i(Gs,"sideQuery");function xr(e){return e!==void 0&&Number.isInteger(e)&&e>0}i(xr,"isPositiveInteger");function Js(e){return gt(e)==="truncated"?"max_tokens":"end_turn"}i(Js,"mapStopReason");export{Pr as a,_r as b,wr as c,ne as d,I as e,Le as f,Jt as g,qt as h,Yt as i,Mr as j,Sr as k,Rr as l,Fe as m,Ar as n,Dr as o,st as p,Qt as q,Ir as r,Or as s,Nr as t,$r as u,Lr as v,ye as w,Yn as x,Qn as y,nn as z,ve as A,ut as B,We as C,Zn as D,Kr as E,eo as F,ze as G,Ur as H,Vr as I,de as J,le as K,on as L,ct as M,dt as N,ao as O,uo as P,ti as Q,ni as R,Xe as S,Q as T,lt as U,Z as V,ai as W,gt as X,Ee as Y,be as Z,an as _,un as $,Te as aa,cn as ba,xe as ca,$ as da,H as ea,se as fa,we as ga,Me as ha,Ye as ia,Qe as ja,K as ka,G as la,$n as ma,Qo as na,Zo as oa,er as pa,tr as qa,nr as ra,or as sa,Ln as ta,U as ua,Ae as va,Dt as wa,It as xa,Ze as ya,$t as za,lr as Aa,Lt as Ba,Ie as Ca,et as Da,fr as Ea,pr as Fa,Ft as Ga,De as Ha,Bt as Ia,mr as Ja,jt as Ka,tt as La,Kt as Ma,Ut as Na,hr as Oa,Xn as Pa,Wt as Qa,zt as Ra,yr as Sa,nt as Ta,Xt as Ua,vr as Va,kr as Wa,Er as Xa,js as Ya,br as Za,Vn as _a,Hn as $a,Ks as ab,Gn as bb,Jn as cb,Us as db,Vt as eb,Ws as fb,Gs as gb};
|