@kodax-ai/kodax 0.7.77 → 0.7.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +176 -4
  2. package/README.md +200 -64
  3. package/README_CN.md +153 -49
  4. package/config-templates/config.example.jsonc +114 -32
  5. package/dist/chunks/agent-ASP4MS3X.js +2 -0
  6. package/dist/chunks/argument-completer-JYQ7FX3W.js +2 -0
  7. package/dist/chunks/{chunk-XSA37BVM.js → chunk-2CFHBKRE.js} +1 -1
  8. package/dist/chunks/chunk-35PPHOQ2.js +292 -0
  9. package/dist/chunks/chunk-43QNNDHR.js +29 -0
  10. package/dist/chunks/chunk-5BNQXXGY.js +1 -0
  11. package/dist/chunks/chunk-5GO6FH7L.js +458 -0
  12. package/dist/chunks/{chunk-FSXI4MAV.js → chunk-5NDCSFOP.js} +14 -14
  13. package/dist/chunks/{chunk-3DD4QEBH.js → chunk-6FOJVETH.js} +10 -10
  14. package/dist/chunks/chunk-6XM4B6K2.js +48 -0
  15. package/dist/chunks/chunk-6YZUE6NC.js +240 -0
  16. package/dist/chunks/{chunk-HORNWBYR.js → chunk-7OEBJGHK.js} +1 -1
  17. package/dist/chunks/{chunk-OAMKECRG.js → chunk-KQLQYHWU.js} +205 -200
  18. package/dist/chunks/{chunk-IQT4RPCE.js → chunk-NXO6GWSY.js} +2 -2
  19. package/dist/chunks/chunk-T2XZTLYE.js +316 -0
  20. package/dist/chunks/chunk-TQDBTTIM.js +348 -0
  21. package/dist/chunks/{chunk-FNW2XUL5.js → chunk-UID7BLAB.js} +1 -1
  22. package/dist/chunks/chunk-VAT2QYXM.js +765 -0
  23. package/dist/chunks/chunk-YAZQTC2L.js +5 -0
  24. package/dist/chunks/chunk-YVRYHC4C.js +655 -0
  25. package/dist/chunks/{chunk-EH7AOMJ7.js → chunk-Z3KFRTSB.js} +1 -1
  26. package/dist/chunks/compaction-config-BQSSIWK5.js +2 -0
  27. package/dist/chunks/{construction-bootstrap-RPRL3L7R.js → construction-bootstrap-VQLQGWPY.js} +1 -1
  28. package/dist/chunks/{dist-FDSOIR35.js → dist-BFT5YIGU.js} +1 -1
  29. package/dist/chunks/dist-PCFE24YP.js +2 -0
  30. package/dist/chunks/host-UTFXCYYM.js +2 -0
  31. package/dist/chunks/run-manager-PJU3WIFJ.js +2 -0
  32. package/dist/chunks/utils-SID4HW2Q.js +2 -0
  33. package/dist/index.d.ts +18 -17
  34. package/dist/index.js +6 -6
  35. package/dist/kodax_cli.js +1751 -1352
  36. package/dist/kodax_resume.js +17 -17
  37. package/dist/runtime-worker.js +1680 -1299
  38. package/dist/sandbox-workspace-session.js +563 -0
  39. package/dist/sdk-a2a.d.ts +16 -16
  40. package/dist/sdk-a2a.js +8 -8
  41. package/dist/sdk-agent.d.ts +275 -60
  42. package/dist/sdk-agent.js +1 -1
  43. package/dist/sdk-coding.d.ts +33 -165
  44. package/dist/sdk-coding.js +1 -1
  45. package/dist/sdk-experimental-memory.d.ts +2 -2
  46. package/dist/sdk-experimental-memory.js +1 -1
  47. package/dist/sdk-llm.d.ts +2 -1
  48. package/dist/sdk-llm.js +1 -1
  49. package/dist/sdk-mcp.js +1 -1
  50. package/dist/sdk-media.js +1 -1
  51. package/dist/sdk-repl.d.ts +67 -25
  52. package/dist/sdk-repl.js +2 -2
  53. package/dist/sdk-runtime.d.ts +194 -147
  54. package/dist/sdk-runtime.js +1 -1
  55. package/dist/sdk-sandbox.d.ts +93 -0
  56. package/dist/sdk-sandbox.js +2 -0
  57. package/dist/sdk-session.d.ts +6 -7
  58. package/dist/sdk-session.js +1 -1
  59. package/dist/sdk-skills.d.ts +2 -2
  60. package/dist/sdk-skills.js +1 -1
  61. package/dist/semantic-worker.js +15 -15
  62. package/dist/types-chunks/{bash-prefix-extractor.d-pZdu6qt7.d.ts → bash-prefix-extractor.d-uAe2Oqda.d.ts} +126 -8
  63. package/dist/types-chunks/{capsule.d-CxCm1KZz.d.ts → capsule.d-BlSv9l3V.d.ts} +1 -1
  64. package/dist/types-chunks/{guardrail.d-CJx9RRd3.d.ts → guardrail.d-BRE_ErEj.d.ts} +1 -1
  65. package/dist/types-chunks/{guardrail.d-B0PwAZVR.d.ts → guardrail.d-CXDYRgZ3.d.ts} +200 -34
  66. package/dist/types-chunks/{history-retrieval.d-B__aEN62.d.ts → history-retrieval.d-DtCy7x64.d.ts} +1 -1
  67. package/dist/types-chunks/{integration-config.d-ojG4swOP.d.ts → integration-config.d-BNowXE8k.d.ts} +23 -8
  68. package/dist/types-chunks/{public-api.d--fF88JrC.d.ts → public-api.d-B3AohsxN.d.ts} +36 -7
  69. package/dist/types-chunks/{commands.d-BccESAMV.d.ts → repl.d-Ie_ZXb_U.d.ts} +89 -78
  70. package/dist/types-chunks/{side-query.d-5JvXhuOZ.d.ts → resolver.d-iAQ9ocLB.d.ts} +3 -66
  71. package/dist/types-chunks/{run-manager.d-B47hIqnI.d.ts → run-manager.d-D1twIhF9.d.ts} +1 -1
  72. package/dist/types-chunks/{sdk-session-CLWf8Adb.d.ts → sdk-session-DB9KksIx.d.ts} +2 -2
  73. package/dist/types-chunks/side-query.d-DTuLPcC5.d.ts +77 -0
  74. package/dist/types-chunks/{types-LanCEDj8.d.ts → types-D3g6XUQr.d.ts} +41 -2
  75. package/dist/types-chunks/{types.d-RdWRfUEs.d.ts → types.d-BA-Jwpfs.d.ts} +459 -7
  76. package/dist/types-chunks/{types.d-CODuyyqy.d.ts → types.d-BH0ZkTGf.d.ts} +1 -1
  77. package/dist/types-chunks/{types.d-DCQVBqVn.d.ts → types.d-BbtGlKZu.d.ts} +25 -3
  78. package/dist/types-chunks/{types.d-DCsKM8aT.d.ts → types.d-DVDTIfB_.d.ts} +2 -2
  79. package/dist/types-chunks/{utils.d-CDduqbFw.d.ts → utils.d-CVp6bFl9.d.ts} +22 -6
  80. package/docs/SDK_EMBEDDER_GUIDE.md +399 -55
  81. package/package.json +8 -1
  82. package/dist/chunks/agent-NGSWFE73.js +0 -2
  83. package/dist/chunks/argument-completer-WGGZPEEO.js +0 -2
  84. package/dist/chunks/chunk-27QLRH3D.js +0 -5
  85. package/dist/chunks/chunk-2MQPVY6P.js +0 -770
  86. package/dist/chunks/chunk-6WAPVAGQ.js +0 -74
  87. package/dist/chunks/chunk-AOENDSVN.js +0 -448
  88. package/dist/chunks/chunk-HV2GMZUZ.js +0 -343
  89. package/dist/chunks/chunk-JS2BHGJP.js +0 -158
  90. package/dist/chunks/chunk-ON2WG2LG.js +0 -622
  91. package/dist/chunks/chunk-RUGAAHTF.js +0 -321
  92. package/dist/chunks/chunk-TGCG7U2W.js +0 -37
  93. package/dist/chunks/compaction-config-BE7VYWH6.js +0 -2
  94. package/dist/chunks/dist-ZZBNVTKU.js +0 -2
  95. package/dist/chunks/host-QAKQVC4A.js +0 -2
  96. package/dist/chunks/run-manager-N4UFWA2D.js +0 -2
  97. package/dist/chunks/utils-AUHCI4D5.js +0 -2
  98. package/dist/types-chunks/center-types.d-BBT122uJ.d.ts +0 -91
@@ -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 ar}from"node:async_hooks";var Qe=new ar;function cr(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");return Qe.run({provider:e,credential:t},n)}i(cr,"runWithProviderCredential");function ur(e){let t=Qe.getStore();return t?.provider===e?t.credential:void 0}i(ur,"getScopedProviderCredential");function ge(e,t){let n=Qe.getStore();return n?n.provider===e?n.credential:void 0:t}i(ge,"resolveProviderCredential");function lr(e){let t=Qe.getStore()?.credential;return t?Ie(e,t,new WeakMap):e}i(lr,"redactScopedProviderCredential");function Ie(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(Ie(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=Ie(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(Ie(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 c=s.split(t).join("[REDACTED_CREDENTIAL]");r[c]=Ie(a.value,t,n)}return r}i(Ie,"redactCredentialValue");var ee=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},I=class extends ee{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Oe=class extends ee{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},Kt=class extends ee{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Ze=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"}},Ut=class extends ee{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Wt=32768,dr=32e3,fr=64e3,pr=.5;function Ne(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(Ne,"timeoutSecToMs");function gr(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(gr,"parseTimeoutSecEnvMs");function mr(e){if(!e)return;let t={requestTimeoutMs:Ne(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Ne(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Ne(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Ne(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(mr,"resolveLlmTimeoutConfig");function et(e,t){return`${e}/${t??""}`}i(et,"capabilityCacheKey");function zt(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(zt,"narrowReasoningProfile");function hr(e,t,n){return e[et(t,n)]?.rejected??[]}i(hr,"getRejectedEfforts");function yr(e,t,n,o,r,s){let a=et(t,n),c=e[a],u=c?.rejected.includes(o)?c.rejected:[...c?.rejected??[],o];return{...e,[a]:{rejected:u,source:r,updatedAt:s}}}i(yr,"addRejectedEffort");function vr(e,t,n){if(!t)return{};let o={...e};return delete o[et(t,n)],o}i(vr,"removeCacheEntry");function Er(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(u=>typeof u=="string"):[],a=r.source==="probed"?"probed":"observed",c=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:c}}return t}i(Er,"sanitizeCapabilityCache");var br=["off","auto","quick","balanced","deep"],me=["auto","none","low","medium","high"],Fn={low:6e3,medium:1e4,high:2e4},Kn=4096,Xt=[{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"}],Vt=[{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"}],kr=[{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 nt(e,t={}){return{...Cr(e),...t,reasoningPreset:e}}i(nt,"createReasoningProfileFromPreset");function Cr(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Vt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Vt,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:Vt,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:Xt,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:kr,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:Xt,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:Xt,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(Cr,"createBaseReasoningProfileFromPreset");function Ht(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Ht,"getReasoningCapability");function he(e){return ot(e).enabled}i(he,"isReasoningEnabled");function ot(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?je(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(ot,"normalizeReasoningRequest");function je(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(je,"normalizeReasoningEffortValue");function Un(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Un,"mapLegacyReasoningModeToEffortIntent");function xr(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(xr,"effortToLegacyReasoningMode");function Wn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=je(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(Wn,"parseReasoningEffortEnv");function Fe(e){let t=Wn(e.envEffort),n=[];Le(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Le(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Un(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Le(n,e.modelDefaultEffort??e.capability?.defaultEffort??$e(e.capability),"model-default",!1),Le(n,e.providerDefaultEffort,"provider-default",!1),Le(n,e.fallbackEffort??Be(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:Pr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=zn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(Fe,"resolveReasoningEffort");function _r(e){let t=e.currentEffort?je(e.currentEffort):void 0;if(t&&Xn(t,e.capability))return{effectiveEffort:tt(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??$e(e.capability)??Gt(e.capability)??Be(e.capability),o=n&&tt(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(_r,"resolveReasoningEffortForModelSwitch");function Le(e,t,n,o){if(t===void 0)return;let r=je(t);e.push({value:r,source:n,isExplicit:o})}i(Le,"pushEffortCandidate");function Pr(e,t){let n=e.find(o=>o.value!=="auto");return n?zn(n.value,t,n.isExplicit):$e(t)??Be(t)}i(Pr,"resolveAutoEffectiveEffort");function zn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return $e(t)??Gt(t)??Be(t)??e}if(e==="none")return e;if(Xn(e,t))return tt(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return $e(t)??Gt(t)??Be(t)??e}i(zn,"validateReasoningEffort");function tt(e,t){return t?.effortAliases?.[e]??e}i(tt,"applyEffortAlias");function Xn(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?me.includes(e):n.includes(e)||n.includes(tt(e,t))}i(Xn,"isSupportedReasoningEffort");function wr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(wr,"getSupportedEffortValues");function $e(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i($e,"getDefaultPresetValue");function Gt(e){let t=e?.supportedEfforts?.filter(Tr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Gt,"getMiddleVisiblePresetValue");function Tr(e){return e.isUserVisible!==!1}i(Tr,"isUserVisiblePreset");function Be(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(Be,"getFallbackEffortForCapability");function Sr(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(Sr,"getDefaultThinkingDepthForMode");function ue(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ue,"effortToThinkingDepth");function le(e,t,n="unknown"){if(t==="off")return 0;let o={...Fn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(le,"resolveThinkingBudget");function de(e,t,n=Kn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(de,"clampThinkingBudget");function Jt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(Jt,"mapDepthToOpenAIReasoningEffort");function Vn(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):Vn(t.cause)}i(Vn,"getStatus");function Mr(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(Mr,"getMessage");var Rr=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],Ar=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],Dr=["minimal","none","low","medium","high","xhigh","max"];function Ir(e,t){for(let n of Dr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(Ir,"extractRejectedEffort");function qt(e,t){let n=Vn(e);if(n!==400&&n!==422)return null;let o=Mr(e);if(!o)return null;let r=Rr.some(c=>o.includes(c)),s=Ar.some(c=>o.includes(c));if(!r||!s)return null;let a=Ir(o,t);return a?{rejectedEffort:a}:null}i(qt,"classifyReasoningEffortRejection");function Gn(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(Gn,"readHeader");function Hn(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(Hn,"parsePositiveNumber");function Or(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(Or,"parseHttpDate");function rt(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=Hn(Gn(e,"retry-after-ms"));if(a!==void 0){let h=Math.min(a,r);return{type:"header",waitMs:Math.round(h),source:"retry-after-ms",cappedFromHeader:h!==a}}let c=Gn(e,"retry-after");if(c!==void 0&&c.trim().length>0){let h=Hn(c);if(h!==void 0){let y=h*1e3,C=Math.min(y,r);return{type:"header",waitMs:Math.round(C),source:"retry-after-seconds",cappedFromHeader:C!==y}}let g=Or(c,s);if(g!==void 0){let y=Math.min(g,r);return{type:"header",waitMs:Math.round(y),source:"retry-after-date",cappedFromHeader:y!==g}}}let u=n*Math.pow(2,Math.max(0,t.attempt)),d=Math.min(u,o),p=t.withJitter!==!1?Math.random()*.25*d:0;return{type:"backoff",waitMs:Math.round(d+p),source:"exponential-backoff",attempt:t.attempt}}i(rt,"parseRetryAfter");function it(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(it,"extractHeadersFromError");import{AsyncLocalStorage as Nr}from"node:async_hooks";var Jn=new Nr,qn=8,Yn=32;function Lr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(Lr,"parsePositiveInt");function $r(){let e=Ke()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:Lr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??qn;return Math.max(1,Math.min(Yn,t))}i($r,"resolveWorkflowMaxConcurrency");function Br(e,t){return Jn.run(e,t)}i(Br,"runWithScopedConfig");function Ke(){return Jn.getStore()}i(Ke,"getRunScopedConfig");function J(e){if(e!==void 0)return e;let t=Ke()?.disablePromptCache;return t!==void 0?t:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}i(J,"resolvePromptCacheDisabled");var fe={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Qn={...fe,multimodalSupport:"image-input"},Ue={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Zn={...Ue,multimodalSupport:"image-input"};function st(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(st,"normalizeCapabilityProfile");function G(e){return{...st(e)}}i(G,"cloneCapabilityProfile");function jr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(jr,"parseEnvInt");function Fr(e){switch(e.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(Fr,"shouldLowerAutoReasoningEffort");function ct(){return new DOMException("Request aborted","AbortError")}i(ct,"abortError");function Kr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(ct()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(ct())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(Kr,"waitForRetryDelay");function Yt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Yt,"normalizeHttpStatus");function eo(e){if(!e||typeof e!="object")return;let t=e;return Yt(t.status)??Yt(t.statusCode)??Yt(t.code)??eo(t.cause)}i(eo,"extractHttpStatus");function to(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:to(t.cause)}i(to,"extractErrorCode");function at(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(at,"getErrorMessage");var q=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=Ke()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??jr(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 ge(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 G(this.config.capabilityProfile??fe)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Ht(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(c=>c.toLowerCase()).some(c=>o.includes(c)),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=at(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=eo(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=at(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=ge(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 ot(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=me.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let l=n?`/${n}`:"";throw new I(`${this.name}${l} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${me.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let l=n?`/${n}`:"";throw new I(`${this.name}${l} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(l=>l.value)??[],c=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(c)||a.length===0&&r)return;let u=n?`/${n}`:"",d=a.length>0?a.join(", "):me.join(", ");throw new I(`${this.name}${u} does not support reasoning effort "${o}". Supported efforts: ${d}.`,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(Fr(n)){let s=Fe({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=it(t);if(!n)return;let o=rt(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=at(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,"")),c=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,c-a-1e3)}}}isContextOverflowError(t){let n=at(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 c=!1;this.suppressReasoningEffort=!1;for(let u=0;u<o;u++)try{let d=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,d}catch(d){if(this.isContextOverflowError(d)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(d);if(l){this.maxOutputTokensOverride=l,r?.(u+1,o,0);continue}}if(this.isRateLimitError(d)){if(u===o-1)throw new Oe(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=it(d)??{},p=rt(l,{attempt:u,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),h=p.waitMs,g=this.classifyRateLimitReason(d);if(s?.({provider:this.name,waitMs:h,reason:g,source:p.source,attempt:u+1,maxAttempts:o}),r?r(u+1,o,h):s||console.log(`[Rate Limit] Retrying in ${h/1e3}s (${u+1}/${o})...`),n?.aborted||(await Kr(h,n),n?.aborted))throw ct();continue}if(a&&!c){let l=qt(d,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),this.suppressReasoningEffort=!0,c=!0;continue}}if(a&&c){let l=qt(d,a.effort);if(l)throw this.suppressReasoningEffort=!1,new Ze(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(d instanceof Error){if((d.name==="AbortError"||d.name==="APIUserAbortError")&&n?.aborted)throw d.name==="AbortError"?d:new DOMException(d.message||"Request aborted","AbortError");let l=to(d);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new I(`${this.name} API error: ${d.message}`,this.name)}throw d}throw new ee("Unexpected end of withRateLimit")}};import Yr from"@anthropic-ai/sdk";import{parse as Ur}from"partial-json";function ye(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=Ur(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(ye,"parseToolInputWithSalvageTracked");function Wr(e){return ye(e).value}i(Wr,"parseToolInputWithSalvage");var zr={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 no(e){return e==null?"unknown":zr[e.trim().toLowerCase()]??"unknown"}i(no,"classifyStopReason");function ve(e){let t=no(e);return t==="end"||t==="tool"||t==="paused"}i(ve,"isCleanStop");async function Ee(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(d=>d.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(d=>{r||(r=d),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),c=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",c,{once:!0});let u=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-u,approxTokensSpent:t.approxTokensSpent}}catch(d){return Qt(d,{strategy:e.strategy,durationMs:Date.now()-u,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",c)}}i(Ee,"runVerifyCredential");function Xr(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(Xr,"redactKeyMaterial");function Qt(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=Xr(String(n.message??e)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",c;return t.abortCause==="timeout"?c="timeout":t.abortCause==="parent"?c="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?c="unauthorized":o===429?c="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?c="unauthorized":o!==void 0&&o>=500&&o<600?c="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?c="network":/timeout/i.test(r)?c="timeout":c="unknown",{ok:!1,error:c,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(Qt,"classifyVerifyError");function Zt(e,t){let n=e[e.length-1];if(n&&be(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Zt,"insertCacheBoundary");function be(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(be,"isCacheBoundary");function en(e,t){let n=[];for(let o of e){if(be(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(en,"lowerCacheBoundaries");function ke(e){return e.filter(t=>!be(t))}i(ke,"stripCacheBoundaries");import{readFile as Vr,stat as Gr}from"node:fs/promises";import Hr from"node:path";var Jr={".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.]",oo="[Image content omitted: this provider does not support inline images in tool results.]";async function ro(e){try{return await Gr(e),!1}catch(t){let n=t.code;return n==="ENOENT"||n==="ENOTDIR"}}i(ro,"isImageFileMissing");function ut(e,t){return t??Jr[Hr.extname(e).toLowerCase()]??"image/png"}i(ut,"resolveImageMediaType");async function qr(e){return(await Vr(e)).toString("base64")}i(qr,"readImageFileAsBase64");async function lt(e){try{return await qr(e)}catch(t){let n=t.code;if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}i(lt,"readImageFileAsBase64IfAvailable");async function io(e,t){let n=await lt(e);if(n!==void 0)return`data:${ut(e,t)};base64,${n}`}i(io,"buildImageDataUrlIfAvailable");var Qr="KodaX",Zr="effort-2025-11-24";function so(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(so,"appendAnthropicEphemeralSuffix");function ei(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Qr}}i(ei,"getAnthropicCompatDefaultHeaders");function tn(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,c=s?o?e.cache_creation_input_tokens:void 0:t?.cachedWriteTokens,u=s?r?e.cache_read_input_tokens:void 0:t?.cachedReadTokens,d=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,l=s?a+(c??0)+(u??0):t?.inputTokens??0;if(![l,d,c,u].some(p=>p!==void 0&&(!Number.isFinite(p)||p<0)))return{inputTokens:l,outputTokens:d,totalTokens:l+d,...u!==void 0?{cachedReadTokens:u}:{},...c!==void 0?{cachedWriteTokens:c}:{}}}i(tn,"normalizeAnthropicUsage");function nn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(nn,"isRecord");function ti(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(ti,"selectAnthropicOutputEffort");function ao(e,t){let n=ti(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...nn(r)?r:{},effort:n}}i(ao,"applyAnthropicOutputEffort");function co(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...nn(o)?o:{},effort:t}}i(co,"setAnthropicOutputEffort");function ni(e){let n=e.output_config;return nn(n)&&typeof n.effort=="string"}i(ni,"hasAnthropicOutputEffort");var $=class extends q{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=ei(this.config);return new Yr({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&&ni(t)?{"anthropic-beta":Zr}: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),c=n.reasoningPreset,u=t;if(c==="kimi-k2.7-code"||c==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(c==="kimi-k3"){let d=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!d){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:d?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(c==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(n.supportsDisabledThinking===!0||c==="zai-glm-5.2"||c==="zai-glm-toggle"||c==="deepseek-v4-anthropic"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||c==="minimax-m3"||c==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(c==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(u.reasoning_effort=a.effort);return}if(c==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},co(t,a.effort);return}if(c==="minimax-m3"){t.thinking={type:"adaptive"};return}if(c==="zai-glm-toggle"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||c==="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&&(u.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},co(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let d=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:d}}}}resolveReasoningProfileBudget(t,n,o,r,s){let c=(n?t.budgetByEffort?.[n]:void 0)??le(this.config,ue(o.effort),o.taskType),u=this.getEffectiveThinkingBudgetCap(r),d=u!==void 0?Math.min(c,u):c;return de(d,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 Ee({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}applyCacheControlToSystem(t){if(!t.trim()||J())return t;let n=Zt([{type:"text",text:t}],"system");return en(n,"attach")}applyCacheControlToTools(t){if(t.length===0||J())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||J())return t;let n=-1;for(let d=t.length-1;d>=0;d--)if(t[d].role==="user"){n=d;break}if(n===-1)return t;let o=t[n];if(typeof o.content=="string"){if(o.content.length===0)return t;let d=t.slice();return d[n]={...o,content:[{type:"text",text:o.content,cache_control:{type:"ephemeral"}}]},d}if(o.content.length===0)return t;let r=o.content,a={...r[r.length-1],cache_control:{type:"ephemeral"}},c=[...r.slice(0,-1),a],u=t.slice();return u[n]={...o,content:c},u}supportsEphemeralSuffix(){return!0}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.normalizeReasoning(r),u=s?.modelOverride??this.config.model,d=this.getWireModelId(u);this.validateExplicitReasoningEffort(c,u);let l=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u),p=so(this.applyCacheControlToMessages(await this.convertMessages(t,u)),s?.ephemeralSuffix?.content),h=c.enabled?this.getReasoningCapability(u):"none",g=this.getReasoningProfile(u),y=g?["profile","none"]:c.enabled?this.getReasoningFallbackChain(h).filter(P=>P==="native-budget"||P==="native-toggle"||P==="native-adaptive"||P==="none"):["none"],C=!!s?.forcedToolName,f=i(P=>{let T={model:d,max_tokens:l,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!J()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&C&&(T.tool_choice={type:"tool",name:s.forcedToolName}),P!=="none")if(P==="profile"&&g)this.applyReasoningProfile(T,g,c,u,l);else if(P==="native-budget"){let N=le(this.config,ue(c.effort),c.taskType);T.thinking={type:"enabled",budget_tokens:de(N,l)}}else P==="native-toggle"?T.thinking={type:"enabled"}:P==="native-adaptive"&&(T.thinking={type:"adaptive"},ao(T,c));return T},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let m=[],v=[],E=[],k,w=null,b="",x="",S="",M="",A="",W="",Z="",re=!1,D,O=Date.now(),V=Date.now(),ae,Ae;for(let P of y){for(;!ae;)try{let T=f(P);ae=await this.client.messages.create(T,this.buildMessageCreateOptions(T,u,a))}catch(T){if(Ae=T,C&&this.shouldFallbackForForcedToolChoiceError(T)){C=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let N=P==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:P==="native-budget"?["budget_tokens","thinking"]:P==="native-toggle"?["thinking"]:P==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(T,...N))throw T;break}if(ae)break}if(!ae)throw Ae??new I("All reasoning capability attempts failed without a captured error",this.name);let De=Date.now(),Ye=0,R=0,j=3e4;for await(let P of ae){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let T=Date.now(),N=T-De;if(N>j&&(Ye++,R+=N,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(N/1e3)}s gap before ${P.type}`,{stallCount:Ye,totalStallMs:R,eventType:P.type})),De=T,P.type==="content_block_start"||P.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),P.type==="content_block_start"){O=Date.now();let _=P.content_block;w=_.type,process.env.KODAX_DEBUG_TOOL_STREAM&&_.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:_.type,id:_.id,name:_.name}),_.type==="thinking"?(x="",S=_.signature??""):_.type==="redacted_thinking"?(w="redacted_thinking",M=_.data??""):_.type==="text"?b="":_.type==="tool_use"&&(A=_.id,W=_.name,Z="")}else if(P.type==="content_block_delta"){O=Date.now();let _=P.delta;_.type==="thinking_delta"?(x+=_.thinking??"",s?.onThinkingDelta?.(_.thinking??"")):_.type==="text_delta"?(b+=_.text??"",s?.onTextDelta?.(_.text??"")):_.type==="input_json_delta"&&(Z+=_.partial_json??"",s?.onToolInputDelta?.(W,_.partial_json??"",A?{toolId:A}:void 0))}else if(P.type==="content_block_stop"){if(O=Date.now(),w==="thinking")x&&(E.push({type:"thinking",thinking:x,signature:S}),s?.onThinkingEnd?.(x));else if(w==="redacted_thinking")M&&E.push({type:"redacted_thinking",data:M}),M="";else if(w==="text")b&&m.push({type:"text",text:b});else if(w==="tool_use")if(!A||!W)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(A),name:JSON.stringify(W),input:Z.slice(0,100)});else{let _=ye(Z);v.push({type:"tool_use",id:A,name:W,input:_.value,..._.salvaged?{_salvaged:!0,_truncated:!0}:{}})}w=null}else if(P.type==="message_stop"){if(re=!0,O=Date.now(),process.env.KODAX_DEBUG_STREAM){let _=Date.now()-V;this.logStreamDiagnostic(`[Stream] message_stop received after ${_}ms`)}}else if(P.type==="message_delta"){O=Date.now(),k=tn(P.usage,k);let _=P.delta;_?.stop_reason&&(D=_.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${D}`))}else P.type==="message_start"&&(O=Date.now(),k=tn(P.message?.usage,k),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!re){let P=Date.now()-V,T=Date.now()-O;if(a?.aborted){let N=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:P,lastEventAge:T,reason:N,textBlocks:m.length,toolBlocks:v.length,thinkingBlocks:E.length}),new DOMException(N,"AbortError")}if(!D){let N=new Error(`Stream incomplete: message_stop event not received. Duration: ${P}ms, Last event: ${T}ms ago. This may indicate a network disconnection or API timeout.`);throw N.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:P,lastEventAge:T,textBlocks:m.length,toolBlocks:v.length,thinkingBlocks:E.length}),N}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:P,lastEventAge:T,stopReason:D,textBlocks:m.length,toolBlocks:v.length,thinkingBlocks:E.length})}let L=ve(D)?v.map(({_truncated:P,...T})=>T):v;return{textBlocks:m,toolBlocks:L,thinkingBlocks:E,usage:k,stopReason:D}},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 c=this.normalizeReasoning(r),u=s?.modelOverride??this.config.model,d=this.getWireModelId(u);this.validateExplicitReasoningEffort(c,u);let l=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u),p=so(this.applyCacheControlToMessages(await this.convertMessages(t,u)),s?.ephemeralSuffix?.content),h=c.enabled?this.getReasoningCapability(u):"none",g=this.getReasoningProfile(u),y=g?["profile","none"]:c.enabled?this.getReasoningFallbackChain(h).filter(b=>b==="native-budget"||b==="native-toggle"||b==="native-adaptive"||b==="none"):["none"],C=!!s?.forcedToolName,f=i(b=>{let x={model:d,max_tokens:l,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!J()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&C&&(x.tool_choice={type:"tool",name:s.forcedToolName}),b!=="none")if(b==="profile"&&g)this.applyReasoningProfile(x,g,c,u,l);else if(b==="native-budget"){let S=le(this.config,ue(c.effort),c.taskType);x.thinking={type:"enabled",budget_tokens:de(S,l)}}else b==="native-toggle"?x.thinking={type:"enabled"}:b==="native-adaptive"&&(x.thinking={type:"adaptive"},ao(x,c));return x},"buildRequest"),m,v;for(let b of y){for(;!m;)try{let x=f(b);m=await this.client.messages.create(x,this.buildMessageCreateOptions(x,u,a))}catch(x){if(v=x,C&&this.shouldFallbackForForcedToolChoiceError(x)){C=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let S=b==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:b==="native-budget"?["budget_tokens","thinking"]:b==="native-toggle"?["thinking"]:b==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(x,...S))throw x;break}if(m)break}if(!m)throw v??new I("All reasoning capability attempts failed without a captured error",this.name);let E=[],k=[],w=[];for(let b of m.content)b.type==="text"?(E.push({type:"text",text:b.text}),s?.onTextDelta?.(b.text)):b.type==="thinking"?(w.push({type:"thinking",thinking:b.thinking,signature:b.signature??""}),s?.onThinkingDelta?.(b.thinking),s?.onThinkingEnd?.(b.thinking)):b.type==="redacted_thinking"?w.push({type:"redacted_thinking",data:b.data}):b.type==="tool_use"&&k.push({type:"tool_use",id:b.id,name:b.name,input:typeof b.input=="object"&&b.input!==null?b.input:{}});return{textBlocks:E,toolBlocks:k,thinkingBlocks:w,usage:tn(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(be(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 ar}from"node:async_hooks";var Qe=new ar;function cr(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");return Qe.run({provider:e,credential:t},n)}i(cr,"runWithProviderCredential");function ur(e){let t=Qe.getStore();return t?.provider===e?t.credential:void 0}i(ur,"getScopedProviderCredential");function ge(e,t){let n=Qe.getStore();return n?n.provider===e?n.credential:void 0:t}i(ge,"resolveProviderCredential");function lr(e){let t=Qe.getStore()?.credential;return t?Ie(e,t,new WeakMap):e}i(lr,"redactScopedProviderCredential");function Ie(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(Ie(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=Ie(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(Ie(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 c=s.split(t).join("[REDACTED_CREDENTIAL]");r[c]=Ie(a.value,t,n)}return r}i(Ie,"redactCredentialValue");var ee=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},O=class extends ee{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Oe=class extends ee{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},Kt=class extends ee{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Ze=class extends O{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Ut=class extends ee{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Wt=32768,dr=32e3,fr=64e3,pr=.5;function Ne(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(Ne,"timeoutSecToMs");function gr(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(gr,"parseTimeoutSecEnvMs");function mr(e){if(!e)return;let t={requestTimeoutMs:Ne(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Ne(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Ne(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Ne(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(mr,"resolveLlmTimeoutConfig");function et(e,t){return`${e}/${t??""}`}i(et,"capabilityCacheKey");function zt(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(zt,"narrowReasoningProfile");function hr(e,t,n){return e[et(t,n)]?.rejected??[]}i(hr,"getRejectedEfforts");function yr(e,t,n,o,r,s){let a=et(t,n),c=e[a],u=c?.rejected.includes(o)?c.rejected:[...c?.rejected??[],o];return{...e,[a]:{rejected:u,source:r,updatedAt:s}}}i(yr,"addRejectedEffort");function vr(e,t,n){if(!t)return{};let o={...e};return delete o[et(t,n)],o}i(vr,"removeCacheEntry");function Er(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(u=>typeof u=="string"):[],a=r.source==="probed"?"probed":"observed",c=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:c}}return t}i(Er,"sanitizeCapabilityCache");var br=["off","auto","quick","balanced","deep"],me=["auto","none","low","medium","high"],Fn={low:6e3,medium:1e4,high:2e4},Kn=4096,Xt=[{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"}],Vt=[{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"}],kr=[{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 nt(e,t={}){return{...Cr(e),...t,reasoningPreset:e}}i(nt,"createReasoningProfileFromPreset");function Cr(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Vt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Vt,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:Vt,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:Xt,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:kr,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:Xt,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:Xt,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(Cr,"createBaseReasoningProfileFromPreset");function Ht(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Ht,"getReasoningCapability");function he(e){return ot(e).enabled}i(he,"isReasoningEnabled");function ot(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?je(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(ot,"normalizeReasoningRequest");function je(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(je,"normalizeReasoningEffortValue");function Un(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Un,"mapLegacyReasoningModeToEffortIntent");function xr(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(xr,"effortToLegacyReasoningMode");function Wn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=je(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(Wn,"parseReasoningEffortEnv");function Fe(e){let t=Wn(e.envEffort),n=[];Le(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Le(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Un(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Le(n,e.modelDefaultEffort??e.capability?.defaultEffort??$e(e.capability),"model-default",!1),Le(n,e.providerDefaultEffort,"provider-default",!1),Le(n,e.fallbackEffort??Be(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:Pr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=zn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(Fe,"resolveReasoningEffort");function _r(e){let t=e.currentEffort?je(e.currentEffort):void 0;if(t&&Xn(t,e.capability))return{effectiveEffort:tt(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??$e(e.capability)??Gt(e.capability)??Be(e.capability),o=n&&tt(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(_r,"resolveReasoningEffortForModelSwitch");function Le(e,t,n,o){if(t===void 0)return;let r=je(t);e.push({value:r,source:n,isExplicit:o})}i(Le,"pushEffortCandidate");function Pr(e,t){let n=e.find(o=>o.value!=="auto");return n?zn(n.value,t,n.isExplicit):$e(t)??Be(t)}i(Pr,"resolveAutoEffectiveEffort");function zn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return $e(t)??Gt(t)??Be(t)??e}if(e==="none")return e;if(Xn(e,t))return tt(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return $e(t)??Gt(t)??Be(t)??e}i(zn,"validateReasoningEffort");function tt(e,t){return t?.effortAliases?.[e]??e}i(tt,"applyEffortAlias");function Xn(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?me.includes(e):n.includes(e)||n.includes(tt(e,t))}i(Xn,"isSupportedReasoningEffort");function wr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(wr,"getSupportedEffortValues");function $e(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i($e,"getDefaultPresetValue");function Gt(e){let t=e?.supportedEfforts?.filter(Tr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Gt,"getMiddleVisiblePresetValue");function Tr(e){return e.isUserVisible!==!1}i(Tr,"isUserVisiblePreset");function Be(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(Be,"getFallbackEffortForCapability");function Sr(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(Sr,"getDefaultThinkingDepthForMode");function ue(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ue,"effortToThinkingDepth");function le(e,t,n="unknown"){if(t==="off")return 0;let o={...Fn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(le,"resolveThinkingBudget");function de(e,t,n=Kn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(de,"clampThinkingBudget");function Jt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(Jt,"mapDepthToOpenAIReasoningEffort");function Vn(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):Vn(t.cause)}i(Vn,"getStatus");function Mr(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(Mr,"getMessage");var Rr=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],Ar=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],Dr=["minimal","none","low","medium","high","xhigh","max"];function Ir(e,t){for(let n of Dr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(Ir,"extractRejectedEffort");function qt(e,t){let n=Vn(e);if(n!==400&&n!==422)return null;let o=Mr(e);if(!o)return null;let r=Rr.some(c=>o.includes(c)),s=Ar.some(c=>o.includes(c));if(!r||!s)return null;let a=Ir(o,t);return a?{rejectedEffort:a}:null}i(qt,"classifyReasoningEffortRejection");function Gn(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(Gn,"readHeader");function Hn(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(Hn,"parsePositiveNumber");function Or(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(Or,"parseHttpDate");function rt(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=Hn(Gn(e,"retry-after-ms"));if(a!==void 0){let m=Math.min(a,r);return{type:"header",waitMs:Math.round(m),source:"retry-after-ms",cappedFromHeader:m!==a}}let c=Gn(e,"retry-after");if(c!==void 0&&c.trim().length>0){let m=Hn(c);if(m!==void 0){let b=m*1e3,x=Math.min(b,r);return{type:"header",waitMs:Math.round(x),source:"retry-after-seconds",cappedFromHeader:x!==b}}let h=Or(c,s);if(h!==void 0){let b=Math.min(h,r);return{type:"header",waitMs:Math.round(b),source:"retry-after-date",cappedFromHeader:b!==h}}}let u=n*Math.pow(2,Math.max(0,t.attempt)),d=Math.min(u,o),p=t.withJitter!==!1?Math.random()*.25*d:0;return{type:"backoff",waitMs:Math.round(d+p),source:"exponential-backoff",attempt:t.attempt}}i(rt,"parseRetryAfter");function it(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(it,"extractHeadersFromError");import{AsyncLocalStorage as Nr}from"node:async_hooks";var Jn=new Nr,qn=8,Yn=32;function Lr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(Lr,"parsePositiveInt");function $r(){let e=Ke()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:Lr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??qn;return Math.max(1,Math.min(Yn,t))}i($r,"resolveWorkflowMaxConcurrency");function Br(e,t){return Jn.run(e,t)}i(Br,"runWithScopedConfig");function Ke(){return Jn.getStore()}i(Ke,"getRunScopedConfig");function J(e){if(e!==void 0)return e;let t=Ke()?.disablePromptCache;return t!==void 0?t:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}i(J,"resolvePromptCacheDisabled");var fe={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Qn={...fe,multimodalSupport:"image-input"},Ue={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Zn={...Ue,multimodalSupport:"image-input"};function st(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(st,"normalizeCapabilityProfile");function G(e){return{...st(e)}}i(G,"cloneCapabilityProfile");function jr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(jr,"parseEnvInt");function Fr(e){switch(e.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(Fr,"shouldLowerAutoReasoningEffort");function ct(){return new DOMException("Request aborted","AbortError")}i(ct,"abortError");function Kr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(ct()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(ct())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(Kr,"waitForRetryDelay");function Yt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Yt,"normalizeHttpStatus");function eo(e){if(!e||typeof e!="object")return;let t=e;return Yt(t.status)??Yt(t.statusCode)??Yt(t.code)??eo(t.cause)}i(eo,"extractHttpStatus");function to(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:to(t.cause)}i(to,"extractErrorCode");function at(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(at,"getErrorMessage");var q=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=Ke()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??jr(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 O(`${this.name} does not support non-streaming fallback`)}isConfigured(){return ge(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 G(this.config.capabilityProfile??fe)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Ht(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(c=>c.toLowerCase()).some(c=>o.includes(c)),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=at(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=eo(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=at(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=ge(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 ot(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=me.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let l=n?`/${n}`:"";throw new O(`${this.name}${l} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${me.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let l=n?`/${n}`:"";throw new O(`${this.name}${l} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(l=>l.value)??[],c=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(c)||a.length===0&&r)return;let u=n?`/${n}`:"",d=a.length>0?a.join(", "):me.join(", ");throw new O(`${this.name}${u} does not support reasoning effort "${o}". Supported efforts: ${d}.`,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 O(`${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(Fr(n)){let s=Fe({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=it(t);if(!n)return;let o=rt(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=at(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,"")),c=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,c-a-1e3)}}}isContextOverflowError(t){let n=at(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 c=!1;this.suppressReasoningEffort=!1;for(let u=0;u<o;u++)try{let d=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,d}catch(d){if(this.isContextOverflowError(d)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(d);if(l){this.maxOutputTokensOverride=l,r?.(u+1,o,0);continue}}if(this.isRateLimitError(d)){if(u===o-1)throw new Oe(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=it(d)??{},p=rt(l,{attempt:u,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),m=p.waitMs,h=this.classifyRateLimitReason(d);if(s?.({provider:this.name,waitMs:m,reason:h,source:p.source,attempt:u+1,maxAttempts:o}),r?r(u+1,o,m):s||console.log(`[Rate Limit] Retrying in ${m/1e3}s (${u+1}/${o})...`),n?.aborted||(await Kr(m,n),n?.aborted))throw ct();continue}if(a&&!c){let l=qt(d,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),this.suppressReasoningEffort=!0,c=!0;continue}}if(a&&c){let l=qt(d,a.effort);if(l)throw this.suppressReasoningEffort=!1,new Ze(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(d instanceof Error){if((d.name==="AbortError"||d.name==="APIUserAbortError")&&n?.aborted)throw d.name==="AbortError"?d:new DOMException(d.message||"Request aborted","AbortError");let l=to(d);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new O(`${this.name} API error: ${d.message}`,this.name)}throw d}throw new ee("Unexpected end of withRateLimit")}};import Yr from"@anthropic-ai/sdk";import{parse as Ur}from"partial-json";function ye(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=Ur(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(ye,"parseToolInputWithSalvageTracked");function Wr(e){return ye(e).value}i(Wr,"parseToolInputWithSalvage");var zr={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 no(e){return e==null?"unknown":zr[e.trim().toLowerCase()]??"unknown"}i(no,"classifyStopReason");function ve(e){let t=no(e);return t==="end"||t==="tool"||t==="paused"}i(ve,"isCleanStop");async function Ee(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(d=>d.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(d=>{r||(r=d),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),c=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",c,{once:!0});let u=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-u,approxTokensSpent:t.approxTokensSpent}}catch(d){return Qt(d,{strategy:e.strategy,durationMs:Date.now()-u,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",c)}}i(Ee,"runVerifyCredential");function Xr(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(Xr,"redactKeyMaterial");function Qt(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=Xr(String(n.message??e)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",c;return t.abortCause==="timeout"?c="timeout":t.abortCause==="parent"?c="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?c="unauthorized":o===429?c="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?c="unauthorized":o!==void 0&&o>=500&&o<600?c="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?c="network":/timeout/i.test(r)?c="timeout":c="unknown",{ok:!1,error:c,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(Qt,"classifyVerifyError");function Zt(e,t){let n=e[e.length-1];if(n&&be(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Zt,"insertCacheBoundary");function be(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(be,"isCacheBoundary");function en(e,t){let n=[];for(let o of e){if(be(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(en,"lowerCacheBoundaries");function ke(e){return e.filter(t=>!be(t))}i(ke,"stripCacheBoundaries");import{readFile as Vr,stat as Gr}from"node:fs/promises";import Hr from"node:path";var Jr={".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.]",oo="[Image content omitted: this provider does not support inline images in tool results.]";async function ro(e){try{return await Gr(e),!1}catch(t){let n=t.code;return n==="ENOENT"||n==="ENOTDIR"}}i(ro,"isImageFileMissing");function ut(e,t){return t??Jr[Hr.extname(e).toLowerCase()]??"image/png"}i(ut,"resolveImageMediaType");async function qr(e){return(await Vr(e)).toString("base64")}i(qr,"readImageFileAsBase64");async function lt(e){try{return await qr(e)}catch(t){let n=t.code;if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}i(lt,"readImageFileAsBase64IfAvailable");async function io(e,t){let n=await lt(e);if(n!==void 0)return`data:${ut(e,t)};base64,${n}`}i(io,"buildImageDataUrlIfAvailable");var Qr="KodaX",Zr="effort-2025-11-24";function so(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(so,"appendAnthropicEphemeralSuffix");function ei(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Qr}}i(ei,"getAnthropicCompatDefaultHeaders");function tn(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,c=s?o?e.cache_creation_input_tokens:void 0:t?.cachedWriteTokens,u=s?r?e.cache_read_input_tokens:void 0:t?.cachedReadTokens,d=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,l=s?a+(c??0)+(u??0):t?.inputTokens??0;if(![l,d,c,u].some(p=>p!==void 0&&(!Number.isFinite(p)||p<0)))return{inputTokens:l,outputTokens:d,totalTokens:l+d,...u!==void 0?{cachedReadTokens:u}:{},...c!==void 0?{cachedWriteTokens:c}:{}}}i(tn,"normalizeAnthropicUsage");function nn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(nn,"isRecord");function ti(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(ti,"selectAnthropicOutputEffort");function ao(e,t){let n=ti(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...nn(r)?r:{},effort:n}}i(ao,"applyAnthropicOutputEffort");function co(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...nn(o)?o:{},effort:t}}i(co,"setAnthropicOutputEffort");function ni(e){let n=e.output_config;return nn(n)&&typeof n.effort=="string"}i(ni,"hasAnthropicOutputEffort");var B=class extends q{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=ei(this.config);return new Yr({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&&ni(t)?{"anthropic-beta":Zr}: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),c=n.reasoningPreset,u=t;if(c==="kimi-k2.7-code"||c==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(c==="kimi-k3"){let d=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!d){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:d?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(c==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(n.supportsDisabledThinking===!0||c==="zai-glm-5.2"||c==="zai-glm-toggle"||c==="deepseek-v4-anthropic"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||c==="minimax-m3"||c==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(c==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(u.reasoning_effort=a.effort);return}if(c==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},co(t,a.effort);return}if(c==="minimax-m3"){t.thinking={type:"adaptive"};return}if(c==="zai-glm-toggle"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||c==="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&&(u.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},co(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let d=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:d}}}}resolveReasoningProfileBudget(t,n,o,r,s){let c=(n?t.budgetByEffort?.[n]:void 0)??le(this.config,ue(o.effort),o.taskType),u=this.getEffectiveThinkingBudgetCap(r),d=u!==void 0?Math.min(c,u):c;return de(d,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 Ee({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}applyCacheControlToSystem(t){if(!t.trim()||J())return t;let n=Zt([{type:"text",text:t}],"system");return en(n,"attach")}applyCacheControlToTools(t){if(t.length===0||J())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||J())return t;let n=-1;for(let d=t.length-1;d>=0;d--)if(t[d].role==="user"){n=d;break}if(n===-1)return t;let o=t[n];if(typeof o.content=="string"){if(o.content.length===0)return t;let d=t.slice();return d[n]={...o,content:[{type:"text",text:o.content,cache_control:{type:"ephemeral"}}]},d}if(o.content.length===0)return t;let r=o.content,a={...r[r.length-1],cache_control:{type:"ephemeral"}},c=[...r.slice(0,-1),a],u=t.slice();return u[n]={...o,content:c},u}supportsEphemeralSuffix(){return!0}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.normalizeReasoning(r),u=s?.modelOverride??this.config.model,d=this.getWireModelId(u);this.validateExplicitReasoningEffort(c,u);let l=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u),p=so(this.applyCacheControlToMessages(await this.convertMessages(t,u)),s?.ephemeralSuffix?.content),m=c.enabled?this.getReasoningCapability(u):"none",h=this.getReasoningProfile(u),b=h?["profile","none"]:c.enabled?this.getReasoningFallbackChain(m).filter(w=>w==="native-budget"||w==="native-toggle"||w==="native-adaptive"||w==="none"):["none"],x=!!s?.forcedToolName,f=i(w=>{let M={model:d,max_tokens:l,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!J()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&x&&(M.tool_choice={type:"tool",name:s.forcedToolName}),w!=="none")if(w==="profile"&&h)this.applyReasoningProfile(M,h,c,u,l);else if(w==="native-budget"){let L=le(this.config,ue(c.effort),c.taskType);M.thinking={type:"enabled",budget_tokens:de(L,l)}}else w==="native-toggle"?M.thinking={type:"enabled"}:w==="native-adaptive"&&(M.thinking={type:"adaptive"},ao(M,c));return M},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let g=[],E=[],v=[],C,_=null,y="",k="",T="",S="",R="",A="",Z="",re=!1,I,N=Date.now(),V=Date.now(),ae,Ae;for(let w of b){for(;!ae;)try{let M=f(w);ae=await this.client.messages.create(M,this.buildMessageCreateOptions(M,u,a))}catch(M){if(Ae=M,x&&this.shouldFallbackForForcedToolChoiceError(M)){x=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let L=w==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:w==="native-budget"?["budget_tokens","thinking"]:w==="native-toggle"?["thinking"]:w==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(M,...L))throw M;break}if(ae)break}if(!ae)throw Ae??new O("All reasoning capability attempts failed without a captured error",this.name);let De=Date.now(),Ye=0,D=0,F=3e4;for await(let w of ae){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let M=Date.now(),L=M-De;if(L>F&&(Ye++,D+=L,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(L/1e3)}s gap before ${w.type}`,{stallCount:Ye,totalStallMs:D,eventType:w.type})),De=M,w.type==="content_block_start"||w.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),w.type==="content_block_start"){N=Date.now();let P=w.content_block;_=P.type,process.env.KODAX_DEBUG_TOOL_STREAM&&P.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:P.type,id:P.id,name:P.name}),P.type==="thinking"?(k="",T=P.signature??""):P.type==="redacted_thinking"?(_="redacted_thinking",S=P.data??""):P.type==="text"?y="":P.type==="tool_use"&&(R=P.id,A=P.name,Z="")}else if(w.type==="content_block_delta"){N=Date.now();let P=w.delta;P.type==="thinking_delta"?(k+=P.thinking??"",s?.onThinkingDelta?.(P.thinking??"")):P.type==="text_delta"?(y+=P.text??"",s?.onTextDelta?.(P.text??"")):P.type==="input_json_delta"&&(Z+=P.partial_json??"",s?.onToolInputDelta?.(A,P.partial_json??"",R?{toolId:R}:void 0))}else if(w.type==="content_block_stop"){if(N=Date.now(),_==="thinking")k&&(v.push({type:"thinking",thinking:k,signature:T}),s?.onThinkingEnd?.(k));else if(_==="redacted_thinking")S&&v.push({type:"redacted_thinking",data:S}),S="";else if(_==="text")y&&g.push({type:"text",text:y});else if(_==="tool_use")if(!R||!A)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(R),name:JSON.stringify(A),input:Z.slice(0,100)});else{let P=ye(Z);E.push({type:"tool_use",id:R,name:A,input:P.value,...P.salvaged?{_salvaged:!0,_truncated:!0}:{}})}_=null}else if(w.type==="message_stop"){if(re=!0,N=Date.now(),process.env.KODAX_DEBUG_STREAM){let P=Date.now()-V;this.logStreamDiagnostic(`[Stream] message_stop received after ${P}ms`)}}else if(w.type==="message_delta"){N=Date.now(),C=tn(w.usage,C);let P=w.delta;P?.stop_reason&&(I=P.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${I}`))}else w.type==="message_start"&&(N=Date.now(),C=tn(w.message?.usage,C),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!re){let w=Date.now()-V,M=Date.now()-N;if(a?.aborted){let L=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:w,lastEventAge:M,reason:L,textBlocks:g.length,toolBlocks:E.length,thinkingBlocks:v.length}),new DOMException(L,"AbortError")}if(!I){let L=new Error(`Stream incomplete: message_stop event not received. Duration: ${w}ms, Last event: ${M}ms ago. This may indicate a network disconnection or API timeout.`);throw L.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:w,lastEventAge:M,textBlocks:g.length,toolBlocks:E.length,thinkingBlocks:v.length}),L}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:w,lastEventAge:M,stopReason:I,textBlocks:g.length,toolBlocks:E.length,thinkingBlocks:v.length})}let $=ve(I)?E.map(({_truncated:w,...M})=>M):E;return{textBlocks:g,toolBlocks:$,thinkingBlocks:v,usage:C,stopReason:I}},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 c=this.normalizeReasoning(r),u=s?.modelOverride??this.config.model,d=this.getWireModelId(u);this.validateExplicitReasoningEffort(c,u);let l=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u),p=so(this.applyCacheControlToMessages(await this.convertMessages(t,u)),s?.ephemeralSuffix?.content),m=c.enabled?this.getReasoningCapability(u):"none",h=this.getReasoningProfile(u),b=h?["profile","none"]:c.enabled?this.getReasoningFallbackChain(m).filter(y=>y==="native-budget"||y==="native-toggle"||y==="native-adaptive"||y==="none"):["none"],x=!!s?.forcedToolName,f=i(y=>{let k={model:d,max_tokens:l,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!J()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&x&&(k.tool_choice={type:"tool",name:s.forcedToolName}),y!=="none")if(y==="profile"&&h)this.applyReasoningProfile(k,h,c,u,l);else if(y==="native-budget"){let T=le(this.config,ue(c.effort),c.taskType);k.thinking={type:"enabled",budget_tokens:de(T,l)}}else y==="native-toggle"?k.thinking={type:"enabled"}:y==="native-adaptive"&&(k.thinking={type:"adaptive"},ao(k,c));return k},"buildRequest"),g,E;for(let y of b){for(;!g;)try{let k=f(y);g=await this.client.messages.create(k,this.buildMessageCreateOptions(k,u,a))}catch(k){if(E=k,x&&this.shouldFallbackForForcedToolChoiceError(k)){x=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let T=y==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:y==="native-budget"?["budget_tokens","thinking"]:y==="native-toggle"?["thinking"]:y==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(k,...T))throw k;break}if(g)break}if(!g)throw E??new O("All reasoning capability attempts failed without a captured error",this.name);let v=[],C=[],_=[];for(let y of g.content)y.type==="text"?(v.push({type:"text",text:y.text}),s?.onTextDelta?.(y.text)):y.type==="thinking"?(_.push({type:"thinking",thinking:y.thinking,signature:y.signature??""}),s?.onThinkingDelta?.(y.thinking),s?.onThinkingEnd?.(y.thinking)):y.type==="redacted_thinking"?_.push({type:"redacted_thinking",data:y.data}):y.type==="tool_use"&&C.push({type:"tool_use",id:y.id,name:y.name,input:typeof y.input=="object"&&y.input!==null?y.input:{}});return{textBlocks:v,toolBlocks:C,thinkingBlocks:_,usage:tn(g.usage),stopReason:g.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(be(n))throw new O("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 c=[],u=[];for(let l of s.content)l.type==="thinking"?!r||typeof l.signature=="string"&&l.signature.length>0?c.push({type:"thinking",thinking:l.thinking,signature:l.signature??""}):l.thinking&&u.push(l.thinking):l.type==="redacted_thinking"&&(r||c.push({type:"redacted_thinking",data:l.data}));u.length>0&&s.role==="assistant"&&c.push({type:"text",text:`<prior_reasoning>
6
6
  ${u.join(`
7
7
 
8
8
  `)}
9
- </prior_reasoning>`});for(let l of s.content)if(l.type==="tool_result"&&s.role==="user"){let p;if(typeof l.content=="string")p=l.content;else{let h=[];for(let g of l.content)if(g.type==="text")h.push({type:"text",text:g.text});else if(g.type==="image"){let y=await lt(g.path);y===void 0?h.push({type:"text",text:Ce}):h.push({type:"image",source:{type:"base64",media_type:ut(g.path,g.mediaType),data:y}})}p=h}c.push({type:"tool_result",tool_use_id:l.tool_use_id,content:p,...l.is_error===!0?{is_error:!0}:{}})}for(let l of s.content)l.type==="tool_use"&&s.role==="assistant"&&c.push({type:"tool_use",id:l.id,name:l.name,input:l.input});for(let l of s.content)if(l.type==="text")c.push({type:"text",text:l.text});else if(l.type==="image"&&s.role==="user"){let p=await lt(l.path);p===void 0?c.push({type:"text",text:Ce}):c.push({type:"image",source:{type:"base64",media_type:ut(l.path,l.mediaType),data:p}})}if(a==="assistant"&&this.config.supportsThinking&&!r){let l=c.some(h=>h.type==="tool_use"),p=c.some(h=>h.type==="thinking"||h.type==="redacted_thinking");l&&!p&&c.unshift({type:"thinking",thinking:"...",signature:""})}let d=c.length===0||(a==="assistant"||a==="user")&&c.every(l=>{let p=l;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:d?[{type:"text",text:"..."}]:c})}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 c=a;r==="tool_use"&&c.type==="tool_use"&&c.id&&s.add(c.id),r==="tool_result"&&c.type==="tool_result"&&c.tool_use_id&&s.add(c.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(c=>{let u=c;return u.type!=="tool_use"||!!u.id&&a.has(u.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(c=>{let u=c;return u.type!=="tool_result"||!!u.tool_use_id&&a.has(u.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import oi from"openai";var ri="KodaX";function uo(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i(uo,"isOpenAIReasoningAttempt");function ii(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":ri}}i(ii,"getOpenAICompatDefaultHeaders");function lo(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}
9
+ </prior_reasoning>`});for(let l of s.content)if(l.type==="tool_result"&&s.role==="user"){let p;if(typeof l.content=="string")p=l.content;else{let m=[];for(let h of l.content)if(h.type==="text")m.push({type:"text",text:h.text});else if(h.type==="image"){let b=await lt(h.path);b===void 0?m.push({type:"text",text:Ce}):m.push({type:"image",source:{type:"base64",media_type:ut(h.path,h.mediaType),data:b}})}p=m}c.push({type:"tool_result",tool_use_id:l.tool_use_id,content:p,...l.is_error===!0?{is_error:!0}:{}})}for(let l of s.content)l.type==="tool_use"&&s.role==="assistant"&&c.push({type:"tool_use",id:l.id,name:l.name,input:l.input});for(let l of s.content)if(l.type==="text")c.push({type:"text",text:l.text});else if(l.type==="image"&&s.role==="user"){let p=await lt(l.path);p===void 0?c.push({type:"text",text:Ce}):c.push({type:"image",source:{type:"base64",media_type:ut(l.path,l.mediaType),data:p}})}if(a==="assistant"&&this.config.supportsThinking&&!r){let l=c.some(m=>m.type==="tool_use"),p=c.some(m=>m.type==="thinking"||m.type==="redacted_thinking");l&&!p&&c.unshift({type:"thinking",thinking:"...",signature:""})}let d=c.length===0||(a==="assistant"||a==="user")&&c.every(l=>{let p=l;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:d?[{type:"text",text:"..."}]:c})}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 c=a;r==="tool_use"&&c.type==="tool_use"&&c.id&&s.add(c.id),r==="tool_result"&&c.type==="tool_result"&&c.tool_use_id&&s.add(c.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(c=>{let u=c;return u.type!=="tool_use"||!!u.id&&a.has(u.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(c=>{let u=c;return u.type!=="tool_result"||!!u.tool_use_id&&a.has(u.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import oi from"openai";var ri="KodaX";function uo(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i(uo,"isOpenAIReasoningAttempt");function ii(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":ri}}i(ii,"getOpenAICompatDefaultHeaders");function lo(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
11
  ${t}`:t:[...n.content,{type:"text",text:t}];return[...e.slice(0,-1),{...n,content:o}]}i(lo,"appendOpenAIEphemeralSuffix");function si(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return Jt(ue(e.effort))}}i(si,"selectOpenAIReasoningEffort");function fo(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(fo,"normalizeOpenAIUsage");function ai(e){return e?e.type==="function"&&"function"in e:!1}i(ai,"isOpenAIFunctionToolCall");function ci(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(ci,"extractOpenAIMessageText");function ui(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(ui,"extractOpenAIMessageReasoning");function dt(e){let t=e.role;return typeof t=="string"?t:void 0}i(dt,"getWireRole");function li(e){if(dt(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(li,"getAssistantWireToolCalls");function di(e){if(dt(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}i(di,"getToolWireCallId");function fi(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(fi,"rewriteAssistantWireToolCalls");var z=class extends q{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=ii(this.config);return new oi({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:i(async s=>{await o.chat.completions.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return Ee({strategy:this.config.verifyStrategy??"models-list",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=ke(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(c=>typeof c=="object"&&c!==null&&c.type==="text"&&typeof c.text=="string").map(c=>c.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){if(this.suppressReasoningEffort||n==="none")return;let r=t,s=this.getEffectiveMaxOutputTokens(t.model),a=de(le(this.config,ue(o.effort),o.taskType),s),c=this.getReasoningProfile(t.model);if(c){this.applyReasoningProfile(r,c,o,t.model,a);return}switch(n){case"native-effort":{this.validateExplicitReasoningEffort(o,t.model);let u=si(o);u&&(r.reasoning_effort=u);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0,thinking_budget:a}):this.name==="zhipu"&&(r.thinking={type:"enabled",budget_tokens:a});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0}):this.name==="zhipu"&&(r.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,s){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),c=n.reasoningPreset;if(c==="kimi-k2.7-code"||c==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(c==="kimi-k3"){let u=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!u){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:u?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(c==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(c==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let u=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...u!==void 0?{thinking_budget:u}:{}});return}if(c==="deepseek-v4-openai"||c==="zai-glm-5.2"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(c==="zai-glm-toggle"||c==="deepseek-toggle"||c==="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(u=>u.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 u=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...u!==void 0?{budget_tokens:u}:{}};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 c=this.stripCacheBoundariesFromMessages(t),{system:u,rest:d}=this.normalizeSystemForWire(o,c),l=s?.modelOverride??this.config.model,p=lo([{role:"system",content:u},...await this.convertMessages(d,l)],s?.ephemeralSuffix?.content),h=n.map(R=>({type:"function",function:{name:R.name,description:R.description,parameters:R.input_schema}})),g=s?.forcedToolName,y=!!g;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let C=new Map,f="",m="",v,E=!0,k=null,w=Date.now(),b=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(b,l);let x=this.getReasoningProfile(l),S=he(b)?this.getReasoningCapability(l):"none",M=x?["profile","none"]:he(b)?this.getReasoningFallbackChain(S).filter(uo):["none"],A={model:l,messages:p,tools:h,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!J()?{prompt_cache_key:s.promptCacheKey}:{}};g&&y&&(A.tool_choice={type:"function",function:{name:g}});let W,Z;for(let R of M){for(;!W;){let j={...A};E&&(j.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(j),this.applyReasoningCapability(j,R,b);try{W=await this.client.chat.completions.create(j,a?{signal:a}:{})}catch(L){if(Z=L,y&&this.shouldFallbackForForcedToolChoiceError(L)){y=!1,delete A.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(E&&this.shouldFallbackForSpecificReasoningError(L,"stream_options","include_usage")){E=!1;continue}if(!this.shouldFallbackForReasoningError(L,...this.getFallbackTerms(R)))throw L;break}}if(W)break}if(!W)throw Z??new I("All reasoning capability attempts failed without a captured error",this.name);let re=Date.now(),D=0,O=0,V=3e4;for await(let R of W){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let j=Date.now(),L=j-re;L>V&&(D++,O+=L,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(L/1e3)}s gap`,{stallCount:D,totalStallMs:O})),re=j,s?.onHeartbeat?.(),v=fo(R.usage)??v;let P=R.choices[0],T=P?.delta;if(P?.finish_reason&&(k=P.finish_reason,process.env.KODAX_DEBUG_STREAM)){let _=Date.now()-w;this.logStreamDiagnostic(`[Stream] finish_reason: ${k} after ${_}ms`)}T?.content&&(f+=T.content,s?.onTextDelta?.(T.content));let N=this.extractReasoningDelta(T);if(N&&(m+=N,s?.onThinkingDelta?.(N)),T?.tool_calls)for(let _ of T.tool_calls){let ce=C.get(_.index)??{id:"",name:"",arguments:""};_.id&&(ce.id=_.id),_.function?.name&&(ce.name=_.function.name),_.function?.arguments&&(ce.arguments+=_.function.arguments,s?.onToolInputDelta?.(ce.name,_.function.arguments,ce.id?{toolId:ce.id}:void 0)),C.set(_.index,ce)}}if(!k){let R=Date.now()-w;if(a?.aborted){let L=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:R,reason:L,textContentLength:f.length,toolCallsCount:C.size}),new DOMException(L,"AbortError")}let j=new Error(`Stream incomplete: finish_reason not received. Duration: ${R}ms. This may indicate a network disconnection or API timeout.`);throw j.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:R,textContentLength:f.length,toolCallsCount:C.size}),j}let ae=f?[{type:"text",text:f}]:[],Ae=[],De=[];m&&(De.push({type:"thinking",thinking:m}),s?.onThinkingEnd?.(m));let Ye=ve(k??void 0);for(let[,R]of C)if(R.id&&R.name){let j=ye(R.arguments),L=j.salvaged?Ye?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Ae.push({type:"tool_use",id:R.id,name:R.name,input:j.value,...L})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(R.id),name:JSON.stringify(R.name),argsLength:R.arguments?.length??0});return{textBlocks:ae,toolBlocks:Ae,thinkingBlocks:De,usage:v,stopReason:k??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.stripCacheBoundariesFromMessages(t),{system:u,rest:d}=this.normalizeSystemForWire(o,c),l=s?.modelOverride??this.config.model,p=lo([{role:"system",content:u},...await this.convertMessages(d,l)],s?.ephemeralSuffix?.content),h=n.map(D=>({type:"function",function:{name:D.name,description:D.description,parameters:D.input_schema}})),g=s?.forcedToolName,y=!!g,C=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(C,l);let f=this.getReasoningProfile(l),m=he(C)?this.getReasoningCapability(l):"none",v=f?["profile","none"]:he(C)?this.getReasoningFallbackChain(m).filter(uo):["none"],E={model:l,messages:p,tools:h,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!J()?{prompt_cache_key:s.promptCacheKey}:{}};g&&y&&(E.tool_choice={type:"function",function:{name:g}});let k,w;for(let D of v){for(;!k;){let O={...E};this.resetReasoningCapabilityParams(O),this.applyReasoningCapability(O,D,C);try{k=await this.client.chat.completions.create(O,a?{signal:a}:{})}catch(V){if(w=V,y&&this.shouldFallbackForForcedToolChoiceError(V)){y=!1,delete E.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(V,...this.getFallbackTerms(D)))throw V;break}}if(k)break}if(!k)throw w??new I("All reasoning capability attempts failed without a captured error",this.name);let b=k.choices[0],x=b?.message,S=ci(x?.content),M=ui(x),A=ve(b?.finish_reason??void 0),W=(x?.tool_calls??[]).filter(ai).map(D=>{let O=ye(D.function.arguments),V=O.salvaged?A?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:D.id,name:D.function.name,input:O.value,...V}});S&&s?.onTextDelta?.(S);let Z=S?[{type:"text",text:S}]:[],re=[];return M&&(re.push({type:"thinking",thinking:M}),s?.onThinkingDelta?.(M),s?.onThinkingEnd?.(M)),{textBlocks:Z,toolBlocks:W,thinkingBlocks:re,usage:fo(k.usage),stopReason:b?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(t,n){let o=t.filter(l=>l.type==="text").map(l=>l.text).join(`
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){if(this.suppressReasoningEffort||n==="none")return;let r=t,s=this.getEffectiveMaxOutputTokens(t.model),a=de(le(this.config,ue(o.effort),o.taskType),s),c=this.getReasoningProfile(t.model);if(c){this.applyReasoningProfile(r,c,o,t.model,a);return}switch(n){case"native-effort":{this.validateExplicitReasoningEffort(o,t.model);let u=si(o);u&&(r.reasoning_effort=u);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0,thinking_budget:a}):this.name==="zhipu"&&(r.thinking={type:"enabled",budget_tokens:a});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0}):this.name==="zhipu"&&(r.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,s){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),c=n.reasoningPreset;if(c==="kimi-k2.7-code"||c==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(c==="kimi-k3"){let u=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!u){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:u?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(c==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(c==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let u=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...u!==void 0?{thinking_budget:u}:{}});return}if(c==="deepseek-v4-openai"||c==="zai-glm-5.2"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(c==="zai-glm-toggle"||c==="deepseek-toggle"||c==="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(u=>u.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 u=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...u!==void 0?{budget_tokens:u}:{}};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 c=this.stripCacheBoundariesFromMessages(t),{system:u,rest:d}=this.normalizeSystemForWire(o,c),l=s?.modelOverride??this.config.model,p=lo([{role:"system",content:u},...await this.convertMessages(d,l)],s?.ephemeralSuffix?.content),m=n.map(D=>({type:"function",function:{name:D.name,description:D.description,parameters:D.input_schema}})),h=s?.forcedToolName,b=!!h;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let x=new Map,f="",g="",E,v=!0,C=null,_=Date.now(),y=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(y,l);let k=this.getReasoningProfile(l),T=he(y)?this.getReasoningCapability(l):"none",S=k?["profile","none"]:he(y)?this.getReasoningFallbackChain(T).filter(uo):["none"],R={model:l,messages:p,tools:m,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!J()?{prompt_cache_key:s.promptCacheKey}:{}};h&&b&&(R.tool_choice={type:"function",function:{name:h}});let A,Z;for(let D of S){for(;!A;){let F={...R};v&&(F.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(F),this.applyReasoningCapability(F,D,y);try{A=await this.client.chat.completions.create(F,a?{signal:a}:{})}catch($){if(Z=$,b&&this.shouldFallbackForForcedToolChoiceError($)){b=!1,delete R.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(v&&this.shouldFallbackForSpecificReasoningError($,"stream_options","include_usage")){v=!1;continue}if(!this.shouldFallbackForReasoningError($,...this.getFallbackTerms(D)))throw $;break}}if(A)break}if(!A)throw Z??new O("All reasoning capability attempts failed without a captured error",this.name);let re=Date.now(),I=0,N=0,V=3e4;for await(let D of A){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let F=Date.now(),$=F-re;$>V&&(I++,N+=$,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round($/1e3)}s gap`,{stallCount:I,totalStallMs:N})),re=F,s?.onHeartbeat?.(),E=fo(D.usage)??E;let w=D.choices[0],M=w?.delta;if(w?.finish_reason&&(C=w.finish_reason,process.env.KODAX_DEBUG_STREAM)){let P=Date.now()-_;this.logStreamDiagnostic(`[Stream] finish_reason: ${C} after ${P}ms`)}M?.content&&(f+=M.content,s?.onTextDelta?.(M.content));let L=this.extractReasoningDelta(M);if(L&&(g+=L,s?.onThinkingDelta?.(L)),M?.tool_calls)for(let P of M.tool_calls){let ce=x.get(P.index)??{id:"",name:"",arguments:""};P.id&&(ce.id=P.id),P.function?.name&&(ce.name=P.function.name),P.function?.arguments&&(ce.arguments+=P.function.arguments,s?.onToolInputDelta?.(ce.name,P.function.arguments,ce.id?{toolId:ce.id}:void 0)),x.set(P.index,ce)}}if(!C){let D=Date.now()-_;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:f.length,toolCallsCount:x.size}),new DOMException($,"AbortError")}let F=new Error(`Stream incomplete: finish_reason not received. Duration: ${D}ms. This may indicate a network disconnection or API timeout.`);throw F.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:D,textContentLength:f.length,toolCallsCount:x.size}),F}let ae=f?[{type:"text",text:f}]:[],Ae=[],De=[];g&&(De.push({type:"thinking",thinking:g}),s?.onThinkingEnd?.(g));let Ye=ve(C??void 0);for(let[,D]of x)if(D.id&&D.name){let F=ye(D.arguments),$=F.salvaged?Ye?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Ae.push({type:"tool_use",id:D.id,name:D.name,input:F.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:ae,toolBlocks:Ae,thinkingBlocks:De,usage:E,stopReason:C??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.stripCacheBoundariesFromMessages(t),{system:u,rest:d}=this.normalizeSystemForWire(o,c),l=s?.modelOverride??this.config.model,p=lo([{role:"system",content:u},...await this.convertMessages(d,l)],s?.ephemeralSuffix?.content),m=n.map(I=>({type:"function",function:{name:I.name,description:I.description,parameters:I.input_schema}})),h=s?.forcedToolName,b=!!h,x=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(x,l);let f=this.getReasoningProfile(l),g=he(x)?this.getReasoningCapability(l):"none",E=f?["profile","none"]:he(x)?this.getReasoningFallbackChain(g).filter(uo):["none"],v={model:l,messages:p,tools:m,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!J()?{prompt_cache_key:s.promptCacheKey}:{}};h&&b&&(v.tool_choice={type:"function",function:{name:h}});let C,_;for(let I of E){for(;!C;){let N={...v};this.resetReasoningCapabilityParams(N),this.applyReasoningCapability(N,I,x);try{C=await this.client.chat.completions.create(N,a?{signal:a}:{})}catch(V){if(_=V,b&&this.shouldFallbackForForcedToolChoiceError(V)){b=!1,delete v.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(V,...this.getFallbackTerms(I)))throw V;break}}if(C)break}if(!C)throw _??new O("All reasoning capability attempts failed without a captured error",this.name);let y=C.choices[0],k=y?.message,T=ci(k?.content),S=ui(k),R=ve(y?.finish_reason??void 0),A=(k?.tool_calls??[]).filter(ai).map(I=>{let N=ye(I.function.arguments),V=N.salvaged?R?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:I.id,name:I.function.name,input:N.value,...V}});T&&s?.onTextDelta?.(T);let Z=T?[{type:"text",text:T}]:[],re=[];return S&&(re.push({type:"thinking",thinking:S}),s?.onThinkingDelta?.(S),s?.onThinkingEnd?.(S)),{textBlocks:Z,toolBlocks:A,thinkingBlocks:re,usage:fo(C.usage),stopReason:y?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(t,n){let o=t.filter(l=>l.type==="text").map(l=>l.text).join(`
15
15
  `),r=t.filter(l=>l.type==="tool_use").map(l=>({id:l.id,type:"function",function:{name:l.name,arguments:JSON.stringify(l.input??{})}})),s=t.filter(l=>l.type==="thinking"||l.type==="redacted_thinking").map(l=>l.type==="thinking"?l.thinking:"").filter(Boolean).join(`
16
16
 
17
17
  `),a=t.some(l=>l.type==="thinking"||l.type==="redacted_thinking"),c=t.some(l=>l.type==="text");if(!o&&r.length===0&&!a&&!c)return[];let u;o?u=o:r.length>0?u=null:u="...";let d={role:"assistant",content:u};return r.length>0&&(d.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(d.reasoning_content=s||""),[d]}async serializeUserMessage(t){let n=[],o=t.filter(a=>a.type==="text").map(a=>a.text).join(`
18
18
  `),r=t.filter(a=>a.type==="image");for(let a of t)if(a.type==="tool_result"){let c;if(typeof a.content=="string")c=a.content;else{let u=[];for(let d of a.content){if(d.type==="text"){u.push(d.text);continue}u.push(await ro(d.path)?Ce:oo)}c=u.join(`
19
19
  `)}n.push({role:"tool",tool_call_id:a.tool_use_id,content:c})}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 c=await io(a.path,a.mediaType);c===void 0?s.push({type:"text",text:Ce}):s.push({type:"image_url",image_url:{url:c}})}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=li(r);if(s===void 0){dt(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(h=>h.id)),c=new Set,u=[],d=o+1;for(;d<t.length&&dt(t[d])==="tool";){let h=t[d],g=di(h);g!==void 0&&a.has(g)&&!c.has(g)&&(c.add(g),u.push(h)),d+=1}let l=s.filter(h=>c.has(h.id)),p=l.length===s.length&&s.length>0?r:fi(r,l);n.push(p),l.length>0&&n.push(...u),o=d}return n}};import{spawn as Ci}from"node:child_process";import{Readable as xi,Writable as _i}from"node:stream";import gt from"node:process";import{ClientSideConnection as Pi,PROTOCOL_VERSION as wi,ndJsonStream as Ti}from"@agentclientprotocol/sdk";import{spawn as pi,spawnSync as sn}from"node:child_process";var an=2e3,H=2e3,gi=5e3,mi=String.raw`
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=li(r);if(s===void 0){dt(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(m=>m.id)),c=new Set,u=[],d=o+1;for(;d<t.length&&dt(t[d])==="tool";){let m=t[d],h=di(m);h!==void 0&&a.has(h)&&!c.has(h)&&(c.add(h),u.push(m)),d+=1}let l=s.filter(m=>c.has(m.id)),p=l.length===s.length&&s.length>0?r:fi(r,l);n.push(p),l.length>0&&n.push(...u),o=d}return n}};import{spawn as Ci}from"node:child_process";import{Readable as xi,Writable as _i}from"node:stream";import gt from"node:process";import{ClientSideConnection as Pi,PROTOCOL_VERSION as wi,ndJsonStream as Ti}from"@agentclientprotocol/sdk";import{spawn as pi,spawnSync as sn}from"node:child_process";var an=2e3,H=2e3,gi=5e3,mi=String.raw`
21
21
  using System;
22
22
  using System.Runtime.InteropServices;
23
23
  using System.Text;
@@ -62,17 +62,17 @@ public static class KodaXNativeProcessSnapshot {
62
62
  }
63
63
  }
64
64
  }`;function rn(e){return e.exitCode!==null||e.signalCode!==null}i(rn,"isExited");function We(e,t){return rn(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=i(c=>{o||(o=!0,clearTimeout(a),e.off("exit",s),e.off("error",s),n(c))},"finish"),s=i(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),t);a.unref?.(),e.once("exit",s),e.once("error",s)})}i(We,"waitForExit");function hi(e){return new Promise(t=>{let n=pi("taskkill",["/pid",String(e),"/t","/f"],{stdio:"ignore",windowsHide:!0}),o=!1,r=i(a=>{o||(o=!0,clearTimeout(s),t(a))},"finish"),s=setTimeout(()=>{try{n.kill()}catch{}r(!1)},an);s.unref?.(),n.once("exit",a=>r(a===0)),n.once("error",()=>r(!1))})}i(hi,"runTaskkill");function po(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}i(po,"signalPosixPidTree");function te(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}i(te,"signalTargetExists");function go(e){return te(-e)||te(e)}i(go,"isPosixPidTreeAlive");async function mo(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!go(e))return!0;await new Promise(o=>setTimeout(o,50))}return!go(e)}i(mo,"waitForPosixPidTreeExit");async function yi(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!te(e))return!0;await new Promise(o=>setTimeout(o,50))}return!te(e)}i(yi,"waitForWindowsPidExit");async function on(e,t){let n=[...new Set(e.filter(r=>Number.isFinite(r)&&r>0))];if(n.length===0)return!0;let o=Date.now()+t;for(;Date.now()<o;){if(n.every(r=>!te(r)))return!0;await new Promise(r=>setTimeout(r,50))}return n.every(r=>!te(r))}i(on,"waitForWindowsPidsExit");function ho(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).map(r=>Number(r)).filter(r=>Number.isFinite(r)&&r>0)}catch{return[]}}i(ho,"readWindowsPidListJson");function vi(e){let t=sn("wmic",["process","where",`ParentProcessId=${e}`,"get","ProcessId","/format:list"],{encoding:"utf8",timeout:an,windowsHide:!0});if(t.error||t.status!==0)return[];let n=[],o=/ProcessId=(\d+)/g,r;for(;(r=o.exec(t.stdout))!==null;){let s=Number(r[1]);Number.isFinite(s)&&s>0&&s!==e&&n.push(s)}return n}i(vi,"getWindowsChildPidsViaWmic");function Ei(e){let t=[`$children = Get-CimInstance Win32_Process -Filter "ParentProcessId = ${e}"`,"if ($null -eq $children) { exit 0 }","$children | Select-Object -ExpandProperty ProcessId | ConvertTo-Json -Compress"].join("; "),n=sn("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:an,windowsHide:!0});if(!n.error&&n.status===0){let r=ho(n.stdout);if(r.length>0)return r}let o=ho(n.stdout);return o.length>0?o:vi(e)}i(Ei,"getWindowsChildPids");function bi(e){let t=["$source = @'",mi,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
65
- `),n=sn("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:gi,windowsHide:!0});return n.error||n.status!==0?[]:ki(n.stdout,e)}i(bi,"collectWindowsDescendantPidsNative");function ki(e,t){let n=new Map;for(let a of e.split(/\r?\n/)){let[c,u]=a.split(",",2),d=Number(c),l=Number(u);!Number.isFinite(d)||d<=0||!Number.isFinite(l)||n.set(l,[...n.get(l)??[],d])}let o=[],r=[t],s=new Set([t]);for(;r.length>0;){let a=r.shift();if(a===void 0)break;for(let c of n.get(a)??[])s.has(c)||(s.add(c),o.push(c),r.push(c))}return o}i(ki,"collectDescendantsFromProcessRows");function yo(e,t=new Set){let n=[];for(let o of Ei(e))t.has(o)||(t.add(o),n.push(o),n.push(...yo(o,t)));return n}i(yo,"collectWindowsDescendantPids");async function ft(e,t){try{process.kill(e,t)}catch{return!te(e)}return yi(e,H)}i(ft,"killWindowsPid");async function pt(e){if(process.platform==="win32"&&e.pid!==void 0){if(!rn(e)&&await hi(e.pid)&&await on([e.pid],H)){await We(e,H);return}let n=bi(e.pid);n.length===0&&(n=yo(e.pid));let o=[...n].reverse(),r=[e.pid,...n];for(let s of o)te(s)&&await ft(s,"SIGTERM");if(await ft(e.pid,"SIGTERM"),await on(r,H)){await We(e,H);return}for(let s of o)te(s)&&await ft(s,"SIGKILL");await ft(e.pid,"SIGKILL"),await on(r,H),await We(e,H);return}if(e.pid!==void 0&&process.platform!=="win32"){if(!po(e.pid,"SIGTERM")||await mo(e.pid,H))return;po(e.pid,"SIGKILL"),await mo(e.pid,H);return}if(!rn(e)){try{e.kill("SIGTERM")}catch{return}if(!await We(e,H)){try{e.kill("SIGKILL")}catch{}await We(e,H)}}}i(pt,"killChildProcessTree");var Y=class extends Error{static{i(this,"AcpTransportClosedError")}constructor(){super("ACP transport closed before the request completed"),this.name="AcpTransportClosedError"}},mt=class{static{i(this,"AcpClient")}client=null;agentProcess=null;options;constructor(t){this.options=t}async connect(){let t,n;if(this.options.inputStream&&this.options.outputStream)t=this.options.inputStream,n=this.options.outputStream;else if(this.options.command){let s=gt.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Ci(s,this.options.args??[],{cwd:this.options.cwd??gt.cwd(),stdio:["pipe","pipe","inherit"],detached:gt.platform!=="win32",windowsHide:!0}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=_i.toWeb(this.agentProcess.stdin),t=xi.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=Ti(n,t);if(this.client=new Pi(()=>({sessionUpdate:i(async r=>{this.options.onSessionUpdate?.(r)},"sessionUpdate"),requestPermission:i(async r=>{let s=r.options??[],a=s.find(c=>c.kind==="allow_once"||c.kind==="allow_always")??s[0];return a?{outcome:{outcome:"selected",optionId:a.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),o),this.client.signal.aborted)throw new Y;await this.awaitWhileConnected(this.client.initialize({protocolVersion:wi,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 Y;return(await this.awaitWhileConnected(this.client.newSession({cwd:this.options.cwd??gt.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 Y;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 c,u=new Promise((l,p)=>{c=p}),d=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{});let l=new Error("ACP prompt aborted");l.name="AbortError",c?.(o.reason??l)},"onAbort");o.addEventListener("abort",d,{once:!0}),a=Promise.race([a,u]).finally(()=>{o.removeEventListener("abort",d)})}return await this.awaitWhileConnected(a)}isConnectionOpen(){return this.client!==null&&!this.client.signal.aborted}releaseSession(t){this.options.releaseSession?.(t)}disconnect(){this.agentProcess&&pt(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 Y;let o,r=new Promise((s,a)=>{o=i(()=>a(new Y),"onClosed"),n.signal.addEventListener("abort",o,{once:!0})});try{return await Promise.race([t,r])}finally{o&&n.signal.removeEventListener("abort",o)}}};function Si(e){if(!e||typeof e!="object")return;let t=e,n=t.inputTokens,o=t.outputTokens,r=t.totalTokens;if([n,o,r].some(h=>typeof h!="number"||!Number.isFinite(h)||h<0))return;let s=n,a=o,c=r;if(c<s||c<a)return;let u=i(h=>typeof h=="number"&&Number.isFinite(h)&&h>=0?h:void 0,"optionalToken"),d=u(t.cachedReadTokens),l=u(t.cachedWriteTokens),p=u(t.thoughtTokens);return{inputTokens:s,outputTokens:a,totalTokens:c,...d!==void 0?{cachedReadTokens:d}:{},...l!==void 0?{cachedWriteTokens:l}:{},...p!==void 0?{thoughtTokens:p}:{}}}i(Si,"normalizeAcpUsage");function Mi(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(Mi,"selectAcpReasoningEffort");function vo(e){if(!e?.aborted)return;let t=e.reason;if(!(t===void 0||t instanceof Error&&t.name==="AbortError"))return t}i(vo,"nonCancellationAbortReason");var ie=class extends q{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 mt(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:ke(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 c of r.content)if(c.type==="text")a.push(c.text);else if(c.type==="image"){let u=this.serializeImageBlockToPromptToken(c);u&&a.push(u)}s=a.join(`
65
+ `),n=sn("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:gi,windowsHide:!0});return n.error||n.status!==0?[]:ki(n.stdout,e)}i(bi,"collectWindowsDescendantPidsNative");function ki(e,t){let n=new Map;for(let a of e.split(/\r?\n/)){let[c,u]=a.split(",",2),d=Number(c),l=Number(u);!Number.isFinite(d)||d<=0||!Number.isFinite(l)||n.set(l,[...n.get(l)??[],d])}let o=[],r=[t],s=new Set([t]);for(;r.length>0;){let a=r.shift();if(a===void 0)break;for(let c of n.get(a)??[])s.has(c)||(s.add(c),o.push(c),r.push(c))}return o}i(ki,"collectDescendantsFromProcessRows");function yo(e,t=new Set){let n=[];for(let o of Ei(e))t.has(o)||(t.add(o),n.push(o),n.push(...yo(o,t)));return n}i(yo,"collectWindowsDescendantPids");async function ft(e,t){try{process.kill(e,t)}catch{return!te(e)}return yi(e,H)}i(ft,"killWindowsPid");async function pt(e){if(process.platform==="win32"&&e.pid!==void 0){if(!rn(e)&&await hi(e.pid)&&await on([e.pid],H)){await We(e,H);return}let n=bi(e.pid);n.length===0&&(n=yo(e.pid));let o=[...n].reverse(),r=[e.pid,...n];for(let s of o)te(s)&&await ft(s,"SIGTERM");if(await ft(e.pid,"SIGTERM"),await on(r,H)){await We(e,H);return}for(let s of o)te(s)&&await ft(s,"SIGKILL");await ft(e.pid,"SIGKILL"),await on(r,H),await We(e,H);return}if(e.pid!==void 0&&process.platform!=="win32"){if(!po(e.pid,"SIGTERM")||await mo(e.pid,H))return;po(e.pid,"SIGKILL"),await mo(e.pid,H);return}if(!rn(e)){try{e.kill("SIGTERM")}catch{return}if(!await We(e,H)){try{e.kill("SIGKILL")}catch{}await We(e,H)}}}i(pt,"killChildProcessTree");var Y=class extends Error{static{i(this,"AcpTransportClosedError")}constructor(){super("ACP transport closed before the request completed"),this.name="AcpTransportClosedError"}},mt=class{static{i(this,"AcpClient")}client=null;agentProcess=null;options;constructor(t){this.options=t}async connect(){let t,n;if(this.options.inputStream&&this.options.outputStream)t=this.options.inputStream,n=this.options.outputStream;else if(this.options.command){let s=gt.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Ci(s,this.options.args??[],{cwd:this.options.cwd??gt.cwd(),stdio:["pipe","pipe","inherit"],detached:gt.platform!=="win32",windowsHide:!0}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=_i.toWeb(this.agentProcess.stdin),t=xi.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=Ti(n,t);if(this.client=new Pi(()=>({sessionUpdate:i(async r=>{this.options.onSessionUpdate?.(r)},"sessionUpdate"),requestPermission:i(async r=>{let s=r.options??[],a=s.find(c=>c.kind==="allow_once"||c.kind==="allow_always")??s[0];return a?{outcome:{outcome:"selected",optionId:a.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),o),this.client.signal.aborted)throw new Y;await this.awaitWhileConnected(this.client.initialize({protocolVersion:wi,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 Y;return(await this.awaitWhileConnected(this.client.newSession({cwd:this.options.cwd??gt.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 Y;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 c,u=new Promise((l,p)=>{c=p}),d=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{});let l=new Error("ACP prompt aborted");l.name="AbortError",c?.(o.reason??l)},"onAbort");o.addEventListener("abort",d,{once:!0}),a=Promise.race([a,u]).finally(()=>{o.removeEventListener("abort",d)})}return await this.awaitWhileConnected(a)}isConnectionOpen(){return this.client!==null&&!this.client.signal.aborted}releaseSession(t){this.options.releaseSession?.(t)}disconnect(){this.agentProcess&&pt(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 Y;let o,r=new Promise((s,a)=>{o=i(()=>a(new Y),"onClosed"),n.signal.addEventListener("abort",o,{once:!0})});try{return await Promise.race([t,r])}finally{o&&n.signal.removeEventListener("abort",o)}}};function Si(e){if(!e||typeof e!="object")return;let t=e,n=t.inputTokens,o=t.outputTokens,r=t.totalTokens;if([n,o,r].some(m=>typeof m!="number"||!Number.isFinite(m)||m<0))return;let s=n,a=o,c=r;if(c<s||c<a)return;let u=i(m=>typeof m=="number"&&Number.isFinite(m)&&m>=0?m:void 0,"optionalToken"),d=u(t.cachedReadTokens),l=u(t.cachedWriteTokens),p=u(t.thoughtTokens);return{inputTokens:s,outputTokens:a,totalTokens:c,...d!==void 0?{cachedReadTokens:d}:{},...l!==void 0?{cachedWriteTokens:l}:{},...p!==void 0?{thoughtTokens:p}:{}}}i(Si,"normalizeAcpUsage");function Mi(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(Mi,"selectAcpReasoningEffort");function vo(e){if(!e?.aborted)return;let t=e.reason;if(!(t===void 0||t instanceof Error&&t.name==="AbortError"))return t}i(vo,"nonCancellationAbortReason");var ie=class extends q{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 mt(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:ke(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 c of r.content)if(c.type==="text")a.push(c.text);else if(c.type==="image"){let u=this.serializeImageBlockToPromptToken(c);u&&a.push(u)}s=a.join(`
66
66
  `)}return n?s.length>0?`${s}
67
67
 
68
- ${n}`:n:s}getCapabilityProfile(){return G(Ue)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=ke(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let c=this.normalizeReasoning(r),u=Mi(c);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 d=[],l=[],p=s?.ephemeralSuffix?.content,h=this.getDiagnosticPromptText(t,p),g=i(f=>{let m=f.update,v=f.sessionId;if(!("sessionUpdate"in m))return;let E=v?this._activeStreams.get(v):void 0;if(E)switch(m.sessionUpdate){case"agent_message_chunk":if(m.content?.type==="text"){let k=m.content.text;E.output.text+=k,E.streamOptions?.onTextDelta?.(k)}break;case"tool_call":{let k="{}",w=m,b=w.arguments??w.parameters;b&&(k=typeof b=="string"?b:JSON.stringify(b)),E.streamOptions?.onToolInputDelta?.(m.title,k);let x=`
69
- > [Tool Use] ${m.title}: ${k}
70
- `;E.output.text+=x,E.streamOptions?.onTextDelta?.(x);break}case"tool_call_update":if(m.status){let k=`> [Tool Result] ${m.status}
68
+ ${n}`:n:s}getCapabilityProfile(){return G(Ue)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=ke(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let c=this.normalizeReasoning(r),u=Mi(c);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 d=[],l=[],p=s?.ephemeralSuffix?.content,m=this.getDiagnosticPromptText(t,p),h=i(f=>{let g=f.update,E=f.sessionId;if(!("sessionUpdate"in g))return;let v=E?this._activeStreams.get(E):void 0;if(v)switch(g.sessionUpdate){case"agent_message_chunk":if(g.content?.type==="text"){let C=g.content.text;v.output.text+=C,v.streamOptions?.onTextDelta?.(C)}break;case"tool_call":{let C="{}",_=g,y=_.arguments??_.parameters;y&&(C=typeof y=="string"?y:JSON.stringify(y)),v.streamOptions?.onToolInputDelta?.(g.title,C);let k=`
69
+ > [Tool Use] ${g.title}: ${C}
70
+ `;v.output.text+=k,v.streamOptions?.onTextDelta?.(k);break}case"tool_call_update":if(g.status){let C=`> [Tool Result] ${g.status}
71
71
 
72
- `;E.output.text+=k,E.streamOptions?.onTextDelta?.(k)}break}},"onSessionUpdate"),y=s?.sessionId,C=await this.ensureClient(g);if(y&&this._activeConversationIds.has(y))throw new Error(`ACP conversation "${y}" already has an active prompt`);y&&this._activeConversationIds.add(y);try{let f=y?this._sessionMap.get(y):void 0;f||(f=await C.createNewSession(),y&&this._sessionMap.set(y,f));let m={text:""};this._activeStreams.set(f,{streamOptions:s,output:m});let v;try{v=await C.prompt(h,f,a,{model:s?.modelOverride,reasoningEffort:u})}catch(E){E instanceof Y&&this.invalidateClient(C);let k=vo(a);if(k!==void 0)throw k;if(!(a?.aborted||E instanceof Error&&E.name==="AbortError"))throw E}finally{this._activeStreams.delete(f),y||C.releaseSession(f)}if(v?.stopReason==="cancelled"){let E=vo(a);if(E!==void 0)throw E}return m.text&&d.push({type:"text",text:m.text}),{textBlocks:d,toolBlocks:l,thinkingBlocks:[],usage:Si(v?.usage)}}catch(f){throw f instanceof Y&&this.invalidateClient(C),f}finally{y&&this._activeConversationIds.delete(y)}}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 Ri}from"node:child_process";import ht from"node:process";var xe=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={...ht.env,...this.config.env},s=ht.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=Ri(s,n,{cwd:this.config.cwd??ht.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:ht.platform!=="win32",windowsHide:!0}),c="";a.stderr?.on("data",x=>{c+=x.toString()});let u=new AbortController,d={},l,p=new Promise(x=>{l=i(()=>x(d),"resolveAbort")}),h=i(()=>{if(u.signal.aborted)return;let x=t.signal?.reason;x===void 0?u.abort():u.abort(x)},"forwardExternalAbort");t.signal?.addEventListener("abort",h),t.signal?.aborted&&h();let g=!1,y,C=i(()=>(y||(y=pt(a),y.catch(()=>{})),y),"terminateChild"),f=i(()=>{l?.(),g||(C(),a.stdout?.destroy())},"abortHandler");u.signal.addEventListener("abort",f),u.signal.aborted&&f(),a.on("exit",()=>{g=!0});let m=!1,v,E,k=this.config.timeout;k!==void 0&&Number.isFinite(k)&&k>0&&!u.signal.aborted&&(E=setTimeout(()=>{u.signal.aborted||(m=!0,v=new Error(`Provider CLI timed out after ${k}ms`),u.abort(v))},k),E.unref?.());let w=i(async x=>{let S=await Promise.race([x,p]);if(S===d)throw u.signal.reason??v??new Error("Provider CLI execution aborted");return S},"waitForExecution"),b=new Promise((x,S)=>{a.once("error",S),a.once("close",(M,A)=>x({code:M,signal:A}))});try{let x=this.parseOutputStream(a.stdout,u.signal)[Symbol.asyncIterator]();for(;;){let A=await w(x.next());if(A.done)break;yield A.value}if(u.signal.aborted)throw u.signal.reason;let S=await w(b);if(m)throw v??u.signal.reason;let M=c.trim();if(!t.signal?.aborted&&S.code!==0){let A=S.code===null?`signal ${S.signal??"unknown"}`:`code ${S.code}`;throw new Error(`Provider CLI exited with ${A}${M?`: ${M}`:""}`)}M&&console.error(`[CLIExecutor] stderr: ${M}`)}catch(x){throw b.catch(()=>{}),u.signal.aborted?u.signal.reason:x}finally{E&&clearTimeout(E),t.signal?.removeEventListener("abort",h),u.signal.removeEventListener("abort",f),g||await C()}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
73
- `);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let c=this.parseLine(a.trim());c&&(yield c)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as Ai}from"node:child_process";import Di from"node:process";async function yt(e){try{let t=Di.platform==="win32",n=Ai(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(yt,"checkCliCommandInstalled");function vt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(vt,"finiteNonNegative");function Ii(e){if(!(!e||!vt(e.input_tokens)||!vt(e.output_tokens)||!vt(e.total_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.total_tokens,...vt(e.cached)?{cachedReadTokens:e.cached}:{}}}i(Ii,"normalizeGeminiUsage");var Et=class extends xe{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 yt("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:Ii(t.stats),raw:t};default:return null}}};import{TransformStream as Eo}from"node:stream/web";import{randomUUID as cn}from"node:crypto";function ze(e){let t=new Eo,n=new Eo,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,c="",u=cn(),d=new AbortController,l=new Map,p=new Map;(async()=>{try{for(;;){let{done:f,value:m}=await o.read();if(f)break;c+=s.decode(m,{stream:!0});let v=c.split(`
74
- `);c=v.pop()??"";for(let E of v)if(E.trim())try{let k=JSON.parse(E);g(k).catch(w=>{console.error("[PseudoAcpServer] Failed to handle request:",w)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",E)}}}catch(f){console.error("[PseudoAcpServer] Stream read error:",f)}})();let h=i(async f=>{let m=JSON.stringify(f)+`
75
- `;await r.write(a.encode(m))},"sendMsg");async function g(f){if(f.method==="initialize")await h({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")u=f.params?.sessionId??cn(),await h({jsonrpc:"2.0",id:f.id,result:{sessionId:u}});else if(f.method==="session/prompt"||f.method==="chat/prompt"){let m=new AbortController,v=f.params.sessionId;l.set(v,m);let E=i(()=>m.abort(),"onGlobalAbort");d.signal.addEventListener("abort",E);let k=y(v,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(()=>{l.delete(v),d.signal.removeEventListener("abort",E)});try{let w=await k;await h({jsonrpc:"2.0",id:f.id,result:w.usage?{stopReason:w.stopReason,usage:w.usage}:{stopReason:w.stopReason}})}catch(w){await h({jsonrpc:"2.0",id:f.id,error:{code:-32e3,message:w instanceof Error?w.message:String(w)}})}}else if(f.method==="session/cancel"||f.method==="chat/cancel"){let m=l.get(f.params.sessionId);m&&m.abort(),f.id!==void 0&&await h({jsonrpc:"2.0",id:f.id,result:{}})}else f.id!==void 0&&await h({jsonrpc:"2.0",id:f.id,result:{}})}i(g,"handleRequest");let y=i(async(f,m,v,E,k)=>{let w=m.find(S=>S.type==="text")?.text??"",b,x=!1;try{let S=e.execute({prompt:w,model:v,reasoningEffort:E,sessionId:p.get(f),signal:k});for await(let M of S){if(M.type==="error")throw new Error(M.message);if(M.type==="complete"&&M.status==="failed")throw new Error("Provider CLI reported a failed completion");M.type==="session_start"&&M.sessionId&&p.set(f,M.sessionId);let A=C(M);A&&await h({jsonrpc:"2.0",method:"session/update",params:{sessionId:f,update:A}}),M.type==="complete"&&(x=!0,b=M.usage)}if(!k.aborted&&!x)throw new Error("Provider CLI ended without a completion event");return{stopReason:k.aborted?"cancelled":"end_turn",...b!==void 0?{usage:b}:{}}}catch(S){if(k.aborted||S instanceof Error&&S.name==="AbortError")return{stopReason:"cancelled"};throw S}},"executePrompt"),C=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||cn()};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:`
72
+ `;v.output.text+=C,v.streamOptions?.onTextDelta?.(C)}break}},"onSessionUpdate"),b=s?.sessionId,x=await this.ensureClient(h);if(b&&this._activeConversationIds.has(b))throw new Error(`ACP conversation "${b}" already has an active prompt`);b&&this._activeConversationIds.add(b);try{let f=b?this._sessionMap.get(b):void 0;f||(f=await x.createNewSession(),b&&this._sessionMap.set(b,f));let g={text:""};this._activeStreams.set(f,{streamOptions:s,output:g});let E;try{E=await x.prompt(m,f,a,{model:s?.modelOverride,reasoningEffort:u})}catch(v){v instanceof Y&&this.invalidateClient(x);let C=vo(a);if(C!==void 0)throw C;if(!(a?.aborted||v instanceof Error&&v.name==="AbortError"))throw v}finally{this._activeStreams.delete(f),b||x.releaseSession(f)}if(E?.stopReason==="cancelled"){let v=vo(a);if(v!==void 0)throw v}return g.text&&d.push({type:"text",text:g.text}),{textBlocks:d,toolBlocks:l,thinkingBlocks:[],usage:Si(E?.usage)}}catch(f){throw f instanceof Y&&this.invalidateClient(x),f}finally{b&&this._activeConversationIds.delete(b)}}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 Ri}from"node:child_process";import ht from"node:process";var xe=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={...ht.env,...this.config.env},s=ht.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=Ri(s,n,{cwd:this.config.cwd??ht.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:ht.platform!=="win32",windowsHide:!0}),c="";a.stderr?.on("data",k=>{c+=k.toString()});let u=new AbortController,d={},l,p=new Promise(k=>{l=i(()=>k(d),"resolveAbort")}),m=i(()=>{if(u.signal.aborted)return;let k=t.signal?.reason;k===void 0?u.abort():u.abort(k)},"forwardExternalAbort");t.signal?.addEventListener("abort",m),t.signal?.aborted&&m();let h=!1,b,x=i(()=>(b||(b=pt(a),b.catch(()=>{})),b),"terminateChild"),f=i(()=>{l?.(),h||(x(),a.stdout?.destroy())},"abortHandler");u.signal.addEventListener("abort",f),u.signal.aborted&&f(),a.on("exit",()=>{h=!0});let g=!1,E,v,C=this.config.timeout;C!==void 0&&Number.isFinite(C)&&C>0&&!u.signal.aborted&&(v=setTimeout(()=>{u.signal.aborted||(g=!0,E=new Error(`Provider CLI timed out after ${C}ms`),u.abort(E))},C),v.unref?.());let _=i(async k=>{let T=await Promise.race([k,p]);if(T===d)throw u.signal.reason??E??new Error("Provider CLI execution aborted");return T},"waitForExecution"),y=new Promise((k,T)=>{a.once("error",T),a.once("close",(S,R)=>k({code:S,signal:R}))});try{let k=this.parseOutputStream(a.stdout,u.signal)[Symbol.asyncIterator]();for(;;){let R=await _(k.next());if(R.done)break;yield R.value}if(u.signal.aborted)throw u.signal.reason;let T=await _(y);if(g)throw E??u.signal.reason;let S=c.trim();if(!t.signal?.aborted&&T.code!==0){let R=T.code===null?`signal ${T.signal??"unknown"}`:`code ${T.code}`;throw new Error(`Provider CLI exited with ${R}${S?`: ${S}`:""}`)}S&&console.error(`[CLIExecutor] stderr: ${S}`)}catch(k){throw y.catch(()=>{}),u.signal.aborted?u.signal.reason:k}finally{v&&clearTimeout(v),t.signal?.removeEventListener("abort",m),u.signal.removeEventListener("abort",f),h||await x()}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
73
+ `);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let c=this.parseLine(a.trim());c&&(yield c)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as Ai}from"node:child_process";import Di from"node:process";async function yt(e){try{let t=Di.platform==="win32",n=Ai(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(yt,"checkCliCommandInstalled");function vt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(vt,"finiteNonNegative");function Ii(e){if(!(!e||!vt(e.input_tokens)||!vt(e.output_tokens)||!vt(e.total_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.total_tokens,...vt(e.cached)?{cachedReadTokens:e.cached}:{}}}i(Ii,"normalizeGeminiUsage");var Et=class extends xe{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 yt("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:Ii(t.stats),raw:t};default:return null}}};import{TransformStream as Eo}from"node:stream/web";import{randomUUID as cn}from"node:crypto";function ze(e){let t=new Eo,n=new Eo,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,c="",u=cn(),d=new AbortController,l=new Map,p=new Map;(async()=>{try{for(;;){let{done:f,value:g}=await o.read();if(f)break;c+=s.decode(g,{stream:!0});let E=c.split(`
74
+ `);c=E.pop()??"";for(let v of E)if(v.trim())try{let C=JSON.parse(v);h(C).catch(_=>{console.error("[PseudoAcpServer] Failed to handle request:",_)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",v)}}}catch(f){console.error("[PseudoAcpServer] Stream read error:",f)}})();let m=i(async f=>{let g=JSON.stringify(f)+`
75
+ `;await r.write(a.encode(g))},"sendMsg");async function h(f){if(f.method==="initialize")await m({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")u=f.params?.sessionId??cn(),await m({jsonrpc:"2.0",id:f.id,result:{sessionId:u}});else if(f.method==="session/prompt"||f.method==="chat/prompt"){let g=new AbortController,E=f.params.sessionId;l.set(E,g);let v=i(()=>g.abort(),"onGlobalAbort");d.signal.addEventListener("abort",v);let C=b(E,f.params.prompt,typeof f.params.model=="string"?f.params.model:void 0,typeof f.params.effort=="string"?f.params.effort:void 0,g.signal).finally(()=>{l.delete(E),d.signal.removeEventListener("abort",v)});try{let _=await C;await m({jsonrpc:"2.0",id:f.id,result:_.usage?{stopReason:_.stopReason,usage:_.usage}:{stopReason:_.stopReason}})}catch(_){await m({jsonrpc:"2.0",id:f.id,error:{code:-32e3,message:_ instanceof Error?_.message:String(_)}})}}else if(f.method==="session/cancel"||f.method==="chat/cancel"){let g=l.get(f.params.sessionId);g&&g.abort(),f.id!==void 0&&await m({jsonrpc:"2.0",id:f.id,result:{}})}else f.id!==void 0&&await m({jsonrpc:"2.0",id:f.id,result:{}})}i(h,"handleRequest");let b=i(async(f,g,E,v,C)=>{let _=g.find(T=>T.type==="text")?.text??"",y,k=!1;try{let T=e.execute({prompt:_,model:E,reasoningEffort:v,sessionId:p.get(f),signal:C});for await(let S of T){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=x(S);R&&await m({jsonrpc:"2.0",method:"session/update",params:{sessionId:f,update:R}}),S.type==="complete"&&(k=!0,y=S.usage)}if(!C.aborted&&!k)throw new Error("Provider CLI ended without a completion event");return{stopReason:C.aborted?"cancelled":"end_turn",...y!==void 0?{usage:y}:{}}}catch(T){if(C.aborted||T instanceof Error&&T.name==="AbortError")return{stopReason:"cancelled"};throw T}},"executePrompt"),x=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||cn()};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:`
76
76
  [Error: ${f.message}]
77
- `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{d.abort(),l.clear(),p.clear(),o.cancel().catch(()=>{}),r.abort().catch(()=>{})},"abort"),releaseSession:i(f=>{p.delete(f)},"releaseSession"),recreate:i(()=>ze(e),"recreate"),executor:e}}i(ze,"createPseudoAcpServer");import bo from"node:fs";import ko from"node:os";import Co from"node:path";var Oi="gpt-5.4",Ni="auto-gemini-3",Li=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],$i=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function xo(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(xo,"dedupePreserveOrder");function Bi(){let e=Co.join(ko.homedir(),".codex","config.toml");try{return bo.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(Bi,"readCodexConfiguredModel");function ji(){let e=Co.join(ko.homedir(),".gemini","settings.json");try{let t=JSON.parse(bo.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(ji,"readGeminiConfiguredModel");function _e(){return Bi()||Oi}i(_e,"getCodexCliDefaultModel");function Pe(){return ji()||Ni}i(Pe,"getGeminiCliDefaultModel");function Xe(){return xo([_e(),...Li])}i(Xe,"getCodexCliKnownModels");function Ve(){return xo([Pe(),...$i])}i(Ve,"getGeminiCliKnownModels");var un=Pe(),Fi=Ve(),Ki={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},bt=class extends ie{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:un,models:Fi.filter(t=>t!==un).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new Et({model:un});this.acpClientOptions=ze(t)}getCapabilityProfile(){return G(Ki)}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 kt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(kt,"finiteNonNegative");function Ui(e){if(!(!e||!kt(e.input_tokens)||!kt(e.output_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.output_tokens,...kt(e.cached_input_tokens)?{cachedReadTokens:e.cached_input_tokens}:{},...kt(e.cache_write_input_tokens)?{cachedWriteTokens:e.cache_write_input_tokens}:{}}}i(Ui,"normalizeCodexUsage");function Wi(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(Wi,"buildReasoningEffortArgs");var Ct=class extends xe{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 yt("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=Wi(t.reasoningEffort);return t.sessionId?["exec","resume",t.sessionId,...n,...o,t.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,t.prompt]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=Date.now();switch(t.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:t.thread_id??"",model:this.model,raw:t};case"item.completed":return t.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:t.item.text??"",raw:t}:t.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:t.item.id,toolName:"Bash",parameters:{command:t.item.command},raw:t}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:Ui(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 ln=_e(),zi=Xe(),xt=class extends ie{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:ln,models:zi.filter(t=>t!==ln).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new Ct({model:ln});this.acpClientOptions=ze(t)}};import{existsSync as es,readFileSync as ts}from"node:fs";import Te from"node:path";import{fileURLToPath as ns}from"node:url";var _o=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Po=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],wo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],To=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],So=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Mo=["count-tokens","models-list","minimal-message","unsupported"];function ne(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(ne,"isPlainObject");function pe(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(pe,"requireString");function we(e,t){if(e!==void 0)return pe(e,t)}i(we,"optionalString");function se(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(se,"optionalNumber");function B(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(B,"optionalBoolean");function Ro(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)=>pe(n,`${t}[${o}]`))}}i(Ro,"optionalStringArray");function Xi(e,t){if(e===void 0)return;if(!ne(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=pe(r,`${t}.${o}`);return n}i(Xi,"optionalStringMap");function Vi(e,t){if(e!==void 0){if(typeof e!="string"||!To.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${To.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Vi,"optionalReasoningPreset");function dn(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(dn,"requireReasoningCapability");function Gi(e,t){if(typeof e!="string"||!Po.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Po.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Gi,"requireEffortStrategy");function Hi(e,t){if(e!==void 0){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(Hi,"optionalThinkingStrategy");function Ao(e,t){if(e===void 0)return;if(!ne(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Gi(e.effortStrategy,`${t}.effortStrategy`),o=Vi(e.reasoningPreset,`${t}.reasoningPreset`),r=Hi(e.thinkingStrategy,`${t}.thinkingStrategy`),s=we(e.defaultEffort,`${t}.defaultEffort`),a=Xi(e.effortAliases,`${t}.effortAliases`),c=Ro(e.disabledEfforts,`${t}.disabledEfforts`),u=Ro(e.localRejectEfforts,`${t}.localRejectEfforts`),d=B(e.allowCustomEffort,`${t}.allowCustomEffort`),l=B(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=B(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),h=B(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),g=B(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),y=B(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),C=B(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),f=B(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),c!==void 0&&(m.disabledEfforts=c),u!==void 0&&(m.localRejectEfforts=u),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((v,E)=>{if(!ne(v))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${E}] must be an object`);return{value:pe(v.value,`${t}.supportedEfforts[${E}].value`),...we(v.description,`${t}.supportedEfforts[${E}].description`)!==void 0?{description:we(v.description,`${t}.supportedEfforts[${E}].description`)}:{},...B(v.isDefault,`${t}.supportedEfforts[${E}].isDefault`)!==void 0?{isDefault:B(v.isDefault,`${t}.supportedEfforts[${E}].isDefault`)}:{},...B(v.isUserVisible,`${t}.supportedEfforts[${E}].isUserVisible`)!==void 0?{isUserVisible:B(v.isUserVisible,`${t}.supportedEfforts[${E}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!ne(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let v={};for(let[E,k]of Object.entries(e.budgetByEffort))v[E]=se(k,`${t}.budgetByEffort.${E}`)??0;m.budgetByEffort=v}return d!==void 0&&(m.allowCustomEffort=d),l!==void 0&&(m.supportsReasoningEffort=l),p!==void 0&&(m.supportsReasoningSummary=p),h!==void 0&&(m.supportsEncryptedReasoningReplay=h),g!==void 0&&(m.supportsAdaptiveThinking=g),y!==void 0&&(m.supportsManualThinkingBudget=y),C!==void 0&&(m.supportsDisabledThinking=C),f!==void 0&&(m.requiresEffortBetaHeader=f),m}i(Ao,"validateReasoningProfile");function Do(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?Ao(n,`${t}.reasoningProfile`):Ao(o,`${t}.reasoningCapabilityV2`)}i(Do,"validateReasoningProfileField");function Ji(e,t){if(typeof e!="string"||!So.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${So.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Ji,"requireProfileName");function qi(e,t){if(typeof e!="string"||!Mo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Mo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(qi,"requireVerifyStrategy");function Yi(e,t){if(!ne(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=pe(e.id,`${t}.id`),o=we(e.wireModel,`${t}.wireModel`),r=we(e.displayName,`${t}.displayName`),s=se(e.contextWindow,`${t}.contextWindow`),a=se(e.maxOutputTokens,`${t}.maxOutputTokens`),c=se(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),u=B(e.replayReasoningContent,`${t}.replayReasoningContent`),d=B(e.strictThinkingSignature,`${t}.strictThinkingSignature`),l=se(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),p=e.reasoningCapability===void 0?void 0:dn(e.reasoningCapability,`${t}.reasoningCapability`),h=Do(e,t),g={id:n};return o!==void 0&&(g.wireModel=o),r!==void 0&&(g.displayName=r),s!==void 0&&(g.contextWindow=s),a!==void 0&&(g.maxOutputTokens=a),c!==void 0&&(g.thinkingBudgetCap=c),p!==void 0&&(g.reasoningCapability=p),h!==void 0&&(g.reasoningProfile=h),u!==void 0&&(g.replayReasoningContent=u),d!==void 0&&(g.strictThinkingSignature=d),l!==void 0&&(g.streamMaxDurationMs=l),g}i(Yi,"validateModelDescriptor");function Qi(e,t){if(e===void 0)return;if(!ne(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=dn(r,`${t}.${o}`);return n}i(Qi,"validateModelReasoningCapabilities");function Zi(e,t){if(!ne(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=B(e.cliBridge,`providers.${t}.cliBridge`),o=pe(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=dn(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=Do(e,`providers.${t}`),a=Ji(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=qi(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&c!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${c}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let u=se(e.contextWindow,`providers.${t}.contextWindow`),d=se(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),l=se(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),p=B(e.supportsThinking,`providers.${t}.supportsThinking`),h=Qi(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),g=we(e.model,`providers.${t}.model`);if(n&&(g!==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&&g===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let y;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);y=e.models.map((m,v)=>Yi(m,`providers.${t}.models[${v}]`));let f=new Set([...g===void 0?[]:[g],...y.map(m=>m.id)]);for(let[m,v]of y.entries())if(v.wireModel!==void 0&&!f.has(v.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${m}].wireModel must reference a declared model, got ${JSON.stringify(v.wireModel)}`)}let C={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:c};return s!==void 0&&(C.reasoningProfile=s),g!==void 0&&(C.model=g),y!==void 0&&(C.models=y),u!==void 0&&(C.contextWindow=u),d!==void 0&&(C.maxOutputTokens=d),l!==void 0&&(C.thinkingBudgetCap=l),p!==void 0&&(C.supportsThinking=p),h!==void 0&&(C.modelReasoningCapabilities=h),n&&(C.cliBridge=!0),C}i(Zi,"validateProviderEntry");function Io(e){if(!ne(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=pe(e.updatedAt,"updatedAt");if(!ne(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]=Zi(r,o);return{version:1,updatedAt:t,providers:n}}i(Io,"validateProviderCapabilitiesJson");var os=Object.freeze({native:fe,"image-input-native":Qn,"cli-bridge":Ue,"image-input-cli-bridge":Zn}),_t=null;function rs(){if(process.env.KODAX_BUNDLED==="true")return Te.join(Te.dirname(process.execPath),"provider-capabilities.json");let e=Te.dirname(ns(import.meta.url)),t=[Te.join(e,"provider-capabilities.json"),Te.join(Te.dirname(e),"provider-capabilities.json")];for(let n of t)if(es(n))return n;return t[0]}i(rs,"resolveJsonPath");function is(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Oo(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Oo(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(is,"deepFreezeSnapshot");function Oo(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(Oo,"freezeReasoningProfile");function ss(e){if(e==="gemini-cli"){let t=Pe();return{model:t,models:Ve().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=_e();return{model:t,models:Xe().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(ss,"resolveCliBridgeModels");function as(e,t){let n=os[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=ss(e),s={model:r.model,models:r.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let o={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(o.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(o.models=t.models),t.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(o.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(o.maxOutputTokens=t.maxOutputTokens),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}i(as,"buildSnapshot");function No(){if(_t)return _t;let e=rs(),t;try{let r=ts(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=Io(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=is(as(r,s));return _t=Object.freeze(o),_t}i(No,"getProviderSnapshots");import cs from"@anthropic-ai/sdk";var F=No();function U(e,t={}){let n=F[e];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...t}}i(U,"buildProviderConfig");var fn=class extends ${static{i(this,"AnthropicProvider")}name="anthropic";config=U("anthropic",{strictThinkingSignature:!0});buildClient(){return new cs({apiKey:this.getApiKey()})}},pn=class extends ${static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=U("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},gn=class extends ${static{i(this,"ZaiCodingProvider")}name="zai-coding";config=U("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},mn=class extends ${static{i(this,"KimiCodeProvider")}name="kimi-code";config=U("kimi-code",{baseUrl:"https://api.kimi.com/coding/",promptCacheAffinity:!0})},hn=class extends ${static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=U("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},yn=class extends ${static{i(this,"MimoCodingProvider")}name="mimo-coding";config=U("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},vn=class extends ${static{i(this,"MimoProvider")}name="mimo";config=U("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},En=class extends ${static{i(this,"ArkCodingProvider")}name="ark-coding";config=U("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},bn=class extends z{static{i(this,"OpenAIProvider")}name="openai";config=U("openai",{promptCacheAffinity:!0})},kn=class extends z{static{i(this,"DeepSeekProvider")}name="deepseek";config=U("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},Cn=class extends z{static{i(this,"KimiProvider")}name="kimi";config=U("kimi",{baseUrl:"https://api.moonshot.cn/v1",promptCacheAffinity:!0,replayReasoningContent:!0})},xn=class extends z{static{i(this,"QwenProvider")}name="qwen";config=U("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},_n=class extends ${static{i(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=U("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},Pn=class extends z{static{i(this,"ZhipuProvider")}name="zhipu";config=U("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},X={anthropic:i(()=>new fn,"anthropic"),openai:i(()=>new bn,"openai"),deepseek:i(()=>new kn,"deepseek"),kimi:i(()=>new Cn,"kimi"),"kimi-code":i(()=>new mn,"kimi-code"),qwen:i(()=>new xn,"qwen"),"qwen-token-plan":i(()=>new _n,"qwen-token-plan"),zhipu:i(()=>new Pn,"zhipu"),"zhipu-coding":i(()=>new pn,"zhipu-coding"),"zai-coding":i(()=>new gn,"zai-coding"),"minimax-coding":i(()=>new hn,"minimax-coding"),"mimo-coding":i(()=>new yn,"mimo-coding"),mimo:i(()=>new vn,"mimo"),"ark-coding":i(()=>new En,"ark-coding"),"gemini-cli":i(()=>new bt,"gemini-cli"),"codex-cli":i(()=>new xt,"codex-cli")},wn=process.env.KODAX_PROVIDER??"zhipu-coding",Lo=new Map;function us(e){if(K(e))return F[e].apiKeyEnv}i(us,"resolveApiKeyEnvForProvider");function $o(e){let t=e??wn,n=X[t];if(!n)throw new I(`Unknown provider: ${t}. Available: ${Object.keys(X).join(", ")}`,t);let o=us(t),r=ge(t,o?process.env[o]:void 0),s=Lo.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return Lo.set(t,{apiKey:r,instance:a}),a}i($o,"getProvider");function Bo(e){return K(e)?ge(e,process.env[F[e].apiKeyEnv])!==void 0:!1}i(Bo,"isProviderConfigured");function jo(e){return K(e)?F[e].model:null}i(jo,"getProviderModel");function Fo(e,t){if(!K(e))return"unknown";let n=F[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(Fo,"getProviderConfiguredReasoningCapability");function Ko(e){return K(e)?G(F[e].capabilityProfile):null}i(Ko,"getProviderConfiguredCapabilityProfile");function Uo(){let e=[];for(let t of Object.keys(X)){let n=F[t];e.push({name:t,model:n.model,models:Tn(t),configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:G(n.capabilityProfile)})}return e}i(Uo,"getProviderList");function Tn(e){return Se(e).map(t=>t.id)}i(Tn,"getProviderModels");function K(e){return e in X}i(K,"isProviderName");function Wo(e){return{id:e.model}}i(Wo,"makeDefaultDescriptor");function zo(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}i(zo,"resolveWireModelDescriptor");function Pt(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(Pt,"effectiveCapabilities");function Se(e){let t=F[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??Wo(t),...r].map(s=>zo(t,s))}i(Se,"getProviderModelDescriptors");function wt(e,t){let n=F[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?Pt(e,n,zo(n,o)):t===n.model?Pt(e,n,Wo(n)):Pt(e,n,{id:t})}i(wt,"getModelCapabilities");function Tt(){let e=[];for(let t of Object.keys(X)){let n=F[t];for(let o of Se(t))e.push(Pt(t,n,o))}return e}i(Tt,"listBuiltinModelCapabilities");var ls=new Set(["compat","sdk"]),ds=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Vo(e){return e.reasoningProfile??e.reasoningCapabilityV2}i(Vo,"getConfiguredReasoningProfile");function fs(e){return e==="anthropic"?"count-tokens":"models-list"}i(fs,"defaultVerifyStrategyForProtocol");function St(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(St,"legacyCapabilityFromReasoningProfile");function ps(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(ps,"legacyReasoningPresetForProtocol");function Xo(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(Xo,"isSimpleReasoning");function gs(e,t){if(e==="none")return nt("none");let n=i(c=>c==="off"?"none":c,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,s=o.includes("none"),a=o.map(c=>c===r?{value:c,isDefault:!0}:{value:c});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...s?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{},supportsReasoningEffort:!0}}i(gs,"buildReasoningProfileFromSimple");function Go(e,t,n,o){let r=Xo(n)?n:void 0,s=n!==void 0&&!Xo(n)?n:void 0;if(o?.supportsThinking===!1)return nt("none");if(e)return{...e,...s??{}};if(r!==void 0)return gs(r,o?.protocol??"openai");let a=t??(o?ps(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?nt(a,s):void 0}i(Go,"resolveCustomReasoningProfile");function Mt(e){return Go(Vo(e),e.reasoningPreset,e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(Mt,"resolveCustomProviderReasoningProfile");function Rn(e,t,n){return Go(Vo(e),e.reasoningPreset,e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(Rn,"resolveCustomModelReasoningProfile");function ms(e,t,n){if(typeof e=="string")return{id:e};let o=Rn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(ms,"customModelDescriptorToFull");function Ge(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&&!ls.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(e.verifyStrategy!==void 0){if(!ds.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(Ge,"validateCustomProviderConfig");function hs(e){let t=e.models?.length?e.models.map(s=>ms(s,e.protocol,e.supportsThinking)):void 0,n=Mt(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??St(n)??"none",r=e.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:e.apiKeyEnv,model:e.model,baseUrl:e.baseUrl,models:t,userAgentMode:e.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:e.capabilityProfile,contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,thinkingBudgetCap:e.thinkingBudgetCap,promptCacheAffinity:e.promptCacheAffinity??!1,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??fs(e.protocol)}}i(hs,"buildProviderConfig");function Rt(e){Ge(e);let t=hs(e);return e.protocol==="anthropic"?new Sn(e.name,t):new Mn(e.name,t)}i(Rt,"createCustomProvider");var Sn=class extends ${static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},Mn=class extends z{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var Q=new Map,An=new Map,ys=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function Ho(e){return e.reasoningCapability!==void 0&&ys.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(Ho,"hasThinkingReasoningConfig");function vs(e){if(e.supportsThinking!==!1)return;let t=Ho(e),n=(e.models??[]).some(o=>typeof o!="string"&&Ho(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(vs,"warnOnIgnoredReasoningCapability");function Jo(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(Ge(r),t.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in X&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),vs(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>Rt(r))}Q.clear(),An.clear();for(let[r,s]of n)Q.set(r,s);for(let[r,s]of o)An.set(r,s)}i(Jo,"registerCustomProviders");function At(e){let t=An.get(e);return t?t():void 0}i(At,"getCustomProvider");function Re(e){return Q.has(e)}i(Re,"isCustomProviderName");function He(){return[...Q.keys()]}i(He,"getCustomProviderNames");function qo(){let e=[];for(let[t,n]of Q){let o=!!process.env[n.apiKeyEnv],r=Mt(n),s=(n.models??[]).map(c=>typeof c=="string"?c:c.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??St(r)??"none",capabilityProfile:G(n.capabilityProfile??fe),custom:!0})}return e}i(qo,"getCustomProviderList");function Yo(e){let t=Q.get(e);if(!t)return;let n=(t.models??[]).map(o=>typeof o=="string"?o:o.id);return t.model&&n.length?[...new Set([t.model,...n])]:[t.model]}i(Yo,"getCustomProviderModels");function Qo(e,t,n){if(typeof e=="string")return{id:e};let o=Rn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Qo,"customDescriptorToFull");function Dt(e){let t=Q.get(e);if(!t)return;let n=(t.models??[]).map(s=>Qo(s,t.protocol,t.supportsThinking)),o=n.find(s=>s.id===t.model)??{id:t.model},r=n.filter(s=>s.id!==t.model);return[o,...r]}i(Dt,"getCustomProviderModelDescriptors");function Me(e,t){let n=Q.get(e);if(!n)return;let o=t===n.model,r=Mt(n),a=(n.models??[]).map(d=>Qo(d,n.protocol,n.supportsThinking)).find(d=>d.id===t)??(o?{id:n.model}:void 0);if(!a)return;let c=n.supportsThinking===!1?r:a.reasoningProfile??r,u=n.supportsThinking===!1?"none":a.reasoningCapability??St(c)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(u!=="none"&&u!=="prompt-only"),reasoningCapability:u,reasoningProfile:c,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(Me,"getCustomModelCapabilities");function Dn(e){let t=Q.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}i(Dn,"getCustomProviderVerifyMetadata");function It(){let e=[];for(let[t,n]of Q){let o=Me(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=Me(t,s);a&&e.push(a)}}return e}i(It,"listCustomProviderModelCapabilities");var oe=new Map,Es=0;function In(e){let t=oe.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(In,"getActiveRuntimeProviderRegistration");function bs(e){for(let[t,n]of oe){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?oe.delete(t):oe.set(t,o);return}}}i(bs,"removeRuntimeProviderRegistration");function Zo(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(K(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(Re(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Es}`,name:n,factory:t},r=oe.get(n)??[];return oe.set(n,[...r,o]),()=>{bs(o.id)}}i(Zo,"registerModelProvider");function Ot(e){let t=In(e);if(t===void 0)return;let n=t.factory();return t.credentialEnvironmentName??=n.getApiKeyEnv(),n}i(Ot,"getRuntimeModelProvider");function Je(e){return In(e)!==void 0}i(Je,"isRuntimeModelProviderName");function Nt(){return Array.from(oe.keys()).filter(e=>In(e)!==void 0)}i(Nt,"getRuntimeModelProviderNames");function Lt(){let e=new Set;for(let t of oe.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(Lt,"getRuntimeModelProviderCredentialEnvironmentNames");function er(){oe.clear()}i(er,"clearRuntimeModelProviders");function On(e){if(K(e))return X[e]();let t=Ot(e);if(t)return t;let n=At(e);if(n)return n;let o=Bt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(On,"resolveProvider");function $t(e){return K(e)||Je(e)||Re(e)}i($t,"isKnownProvider");function Bt(){let e=Object.keys(X),t=Nt(),n=He();return[...new Set([...e,...t,...n])]}i(Bt,"getAvailableProviderNames");function tr(){let e=new Set;for(let t of Object.values(F))e.add(t.apiKeyEnv);for(let t of He()){let n=Dn(t);n!==void 0&&e.add(n.apiKeyEnv)}for(let t of Lt())e.add(t);return[...e].sort()}i(tr,"getProviderCredentialEnvironmentNames");function qe(e){return K(e)?Se(e):Dt(e)??[]}i(qe,"resolveProviderModelDescriptors");function jt(e,t){return K(e)?wt(e,t):Me(e,t)}i(jt,"resolveModelCapabilities");function nr(){return[...Tt(),...It()]}i(nr,"listAllModelCapabilities");function ks(e){if(K(e)){let t=F[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Je(e))return Dn(e)}i(ks,"getProviderVerifyMetadata");async function or(e,t){let n=ks(e);if(!n&&!$t(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Bt().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=On(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(or,"verifyProviderCredential");async function rr(e,t){if(!$t(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=qe(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(rr,"listProviderModels");function Cs(e){let t=e.model??qe(e.provider)[0]?.id,n=t?jt(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?zt(n,e.rejectedEfforts):n,r=Fe({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(Cs,"resolveWireEffort");var ir={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375,cacheReadPer1M:.375,cacheWritePer1M:3.75},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08,cacheReadPer1M:.08,cacheWritePer1M:1}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-v4-flash":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.028},"deepseek-v4-pro":{inputPer1M:1.68,outputPer1M:3.36,cachePer1M:.14}},kimi:{"kimi-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-preview":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-plus":{inputPer1M:.005,outputPer1M:.015},"qwen3.6-flash":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015}},zhipu:{"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function Nn(e,t,n){let o=n?.[e]?.[t];return o||ir[e]?.[t]}i(Nn,"getCostRate");function Ln(e,t,n,o=0,r=0){let s=Math.max(0,t-o-r),a=e.cacheReadPer1M??e.cachePer1M??e.inputPer1M,c=e.cacheWritePer1M??e.cachePer1M??e.inputPer1M,u=s/1e6*e.inputPer1M,d=n/1e6*e.outputPer1M,l=o/1e6*a,p=r/1e6*c;return u+d+l+p}i(Ln,"calculateCost");function xs(){return{records:[],retries:[]}}i(xs,"createCostTracker");function $n(e,t){let n={timestamp:Date.now(),provider:t.provider,waitMs:t.waitMs,reason:t.reason,source:t.source};return{records:e.records,retries:[...e.retries,n]}}i($n,"recordRetry");function Bn(e,t,n){let o=Nn(t.provider,t.model,n),r=o?Ln(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(Bn,"recordUsage");function _s(e){let t=0,n=0,o=0,r=0,s=0,a=0,c={},u={};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 h=c[p.provider];c[p.provider]={cost:(h?.cost??0)+p.cost,calls:(h?.calls??0)+1,inputTokens:(h?.inputTokens??0)+p.inputTokens,outputTokens:(h?.outputTokens??0)+p.outputTokens};let g=p.role??"default",y=u[g];u[g]={cost:(y?.cost??0)+p.cost,calls:(y?.calls??0)+1,inputTokens:(y?.inputTokens??0)+p.inputTokens,outputTokens:(y?.outputTokens??0)+p.outputTokens}}let d=0;for(let p of e.retries)d+=p.waitMs;let l=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:l,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:d,byProvider:c,byRole:u}}i(_s,"getSummary");function Ft(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Ft,"formatCost");function Ps(e){let t=[];if(t.push(`Session Cost: ${Ft(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}: ${Ft(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}: ${Ft(s.cost)} (${s.calls} calls)`)}return t.join(`
78
- `)}i(Ps,"formatCostReport");import{performance as jn}from"node:perf_hooks";var sr={inputTokens:0,outputTokens:0,totalTokens:0},ws=3e4;function Ts(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(Ts,"resolveDefaultSideQueryReasoning");async function Ss(e){let t=new AbortController,n=e.timeoutMs??ws,o=e.costTracker,r=jn.now(),s,a=0,c=0,u=i(g=>{let y=Math.max(0,Math.round(jn.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:y,retryCount:a,retryWaitMs:c,...s!==void 0?{firstOutputMs:s,streamMs:Math.max(0,y-s)}:{},terminalPhase:g}},"diagnostics"),d,l=i(g=>{d||(d=g),t.abort()},"recordAbort"),p=setTimeout(()=>l("timeout"),n),h=i(()=>l("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?l("parent"):e.abortSignal.addEventListener("abort",h,{once:!0}));try{let g=await e.provider.stream([...e.messages],[],e.system,e.reasoning??Ts(e.provider.getReasoningProfile(e.model)),{modelOverride:e.model,...Ms(e.maxOutputTokens)?{maxOutputTokensOverride:e.maxOutputTokens}:{},onTextDelta:i(v=>{v.length>0&&s===void 0&&(s=Math.max(0,Math.round(jn.now()-r)))},"onTextDelta"),onRetryAfter:i(v=>{a+=1,c+=Math.max(0,v.waitMs),o&&(o=$n(o,{provider:v.provider,waitMs:v.waitMs,reason:v.reason,source:v.source}))},"onRetryAfter")},t.signal),y=g.usage??sr,C=g.textBlocks??[],f=g.toolBlocks??[],m=C.map(v=>v.text).join("");return f.length>0?{text:m,usage:y,costTracker:o,stopReason:"error",diagnostics:u("contract_error"),error:new Error(`sideQuery: provider returned ${f.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=Bn(o,{provider:e.provider.name,model:e.model,inputTokens:y.inputTokens,outputTokens:y.outputTokens,cacheReadTokens:y.cachedReadTokens,cacheWriteTokens:y.cachedWriteTokens,role:e.querySource})),{text:m,usage:y,costTracker:o,stopReason:Rs(g.stopReason),diagnostics:u("completed")})}catch(g){let y=g instanceof Error?g:new Error(String(g)),C="error";return t.signal.aborted&&(C=d==="timeout"?"timeout":"aborted"),{text:"",usage:sr,costTracker:o,stopReason:C,diagnostics:u(s===void 0?"pre_output":"streaming"),error:y}}finally{clearTimeout(p),e.abortSignal&&e.abortSignal.removeEventListener("abort",h)}}i(Ss,"sideQuery");function Ms(e){return e!==void 0&&Number.isInteger(e)&&e>0}i(Ms,"isPositiveInteger");function Rs(e){return e==="max_tokens"?"max_tokens":"end_turn"}i(Rs,"mapStopReason");export{cr as a,ur as b,lr as c,ee as d,I as e,Oe as f,Kt as g,Ut as h,Wt as i,dr as j,fr as k,pr as l,Ne as m,gr as n,mr as o,et as p,zt as q,hr as r,yr as s,vr as t,Er as u,br as v,me as w,Fn as x,Kn as y,Ht as z,he as A,ot as B,je as C,Un as D,xr as E,Wn as F,Fe as G,_r as H,Sr as I,le as J,de as K,Jt as L,rt as M,it as N,qn as O,Yn as P,$r as Q,Br as R,Ke as S,J as T,st as U,q as V,Wr as W,no as X,ve as Y,Ee as Z,Qt as _,Zt as $,be as aa,en as ba,ke as ca,$ as da,z as ea,ie as fa,_e as ga,Pe as ha,Xe as ia,Ve as ja,F as ka,X as la,wn as ma,$o as na,Bo as oa,jo as pa,Fo as qa,Ko as ra,Uo as sa,Tn as ta,K as ua,Se as va,wt as wa,Tt as xa,Ge as ya,Rt as za,Jo as Aa,At as Ba,Re as Ca,He as Da,qo as Ea,Yo as Fa,Dt as Ga,Me as Ha,It as Ia,Zo as Ja,Ot as Ka,Je as La,Nt as Ma,Lt as Na,er as Oa,On as Pa,$t as Qa,Bt as Ra,tr as Sa,qe as Ta,jt as Ua,nr as Va,or as Wa,rr as Xa,Cs as Ya,ir as Za,Nn as _a,Ln as $a,xs as ab,$n as bb,Bn as cb,_s as db,Ft as eb,Ps as fb,Ss as gb};
77
+ `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{d.abort(),l.clear(),p.clear(),o.cancel().catch(()=>{}),r.abort().catch(()=>{})},"abort"),releaseSession:i(f=>{p.delete(f)},"releaseSession"),recreate:i(()=>ze(e),"recreate"),executor:e}}i(ze,"createPseudoAcpServer");import bo from"node:fs";import ko from"node:os";import Co from"node:path";var Oi="gpt-5.4",Ni="auto-gemini-3",Li=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],$i=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function xo(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(xo,"dedupePreserveOrder");function Bi(){let e=Co.join(ko.homedir(),".codex","config.toml");try{return bo.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(Bi,"readCodexConfiguredModel");function ji(){let e=Co.join(ko.homedir(),".gemini","settings.json");try{let t=JSON.parse(bo.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(ji,"readGeminiConfiguredModel");function _e(){return Bi()||Oi}i(_e,"getCodexCliDefaultModel");function Pe(){return ji()||Ni}i(Pe,"getGeminiCliDefaultModel");function Xe(){return xo([_e(),...Li])}i(Xe,"getCodexCliKnownModels");function Ve(){return xo([Pe(),...$i])}i(Ve,"getGeminiCliKnownModels");var un=Pe(),Fi=Ve(),Ki={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},bt=class extends ie{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:un,models:Fi.filter(t=>t!==un).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new Et({model:un});this.acpClientOptions=ze(t)}getCapabilityProfile(){return G(Ki)}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 kt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(kt,"finiteNonNegative");function Ui(e){if(!(!e||!kt(e.input_tokens)||!kt(e.output_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.output_tokens,...kt(e.cached_input_tokens)?{cachedReadTokens:e.cached_input_tokens}:{},...kt(e.cache_write_input_tokens)?{cachedWriteTokens:e.cache_write_input_tokens}:{}}}i(Ui,"normalizeCodexUsage");function Wi(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(Wi,"buildReasoningEffortArgs");var Ct=class extends xe{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 yt("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=Wi(t.reasoningEffort);return t.sessionId?["exec","resume",t.sessionId,...n,...o,t.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,t.prompt]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=Date.now();switch(t.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:t.thread_id??"",model:this.model,raw:t};case"item.completed":return t.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:t.item.text??"",raw:t}:t.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:t.item.id,toolName:"Bash",parameters:{command:t.item.command},raw:t}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:Ui(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 ln=_e(),zi=Xe(),xt=class extends ie{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:ln,models:zi.filter(t=>t!==ln).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new Ct({model:ln});this.acpClientOptions=ze(t)}};import{existsSync as es,readFileSync as ts}from"node:fs";import Te from"node:path";import{fileURLToPath as ns}from"node:url";var _o=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Po=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],wo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],To=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],So=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Mo=["count-tokens","models-list","minimal-message","unsupported"];function ne(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(ne,"isPlainObject");function pe(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(pe,"requireString");function we(e,t){if(e!==void 0)return pe(e,t)}i(we,"optionalString");function se(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(se,"optionalNumber");function j(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(j,"optionalBoolean");function Ro(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)=>pe(n,`${t}[${o}]`))}}i(Ro,"optionalStringArray");function Xi(e,t){if(e===void 0)return;if(!ne(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=pe(r,`${t}.${o}`);return n}i(Xi,"optionalStringMap");function Vi(e,t){if(e!==void 0){if(typeof e!="string"||!To.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${To.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Vi,"optionalReasoningPreset");function dn(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(dn,"requireReasoningCapability");function Gi(e,t){if(typeof e!="string"||!Po.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Po.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Gi,"requireEffortStrategy");function Hi(e,t){if(e!==void 0){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(Hi,"optionalThinkingStrategy");function Ao(e,t){if(e===void 0)return;if(!ne(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Gi(e.effortStrategy,`${t}.effortStrategy`),o=Vi(e.reasoningPreset,`${t}.reasoningPreset`),r=Hi(e.thinkingStrategy,`${t}.thinkingStrategy`),s=we(e.defaultEffort,`${t}.defaultEffort`),a=Xi(e.effortAliases,`${t}.effortAliases`),c=Ro(e.disabledEfforts,`${t}.disabledEfforts`),u=Ro(e.localRejectEfforts,`${t}.localRejectEfforts`),d=j(e.allowCustomEffort,`${t}.allowCustomEffort`),l=j(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=j(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),m=j(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),h=j(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),b=j(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),x=j(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),f=j(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),g={effortStrategy:n};if(o!==void 0&&(g.reasoningPreset=o),r!==void 0&&(g.thinkingStrategy=r),s!==void 0&&(g.defaultEffort=s),a!==void 0&&(g.effortAliases=a),c!==void 0&&(g.disabledEfforts=c),u!==void 0&&(g.localRejectEfforts=u),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);g.supportedEfforts=e.supportedEfforts.map((E,v)=>{if(!ne(E))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${v}] must be an object`);return{value:pe(E.value,`${t}.supportedEfforts[${v}].value`),...we(E.description,`${t}.supportedEfforts[${v}].description`)!==void 0?{description:we(E.description,`${t}.supportedEfforts[${v}].description`)}:{},...j(E.isDefault,`${t}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:j(E.isDefault,`${t}.supportedEfforts[${v}].isDefault`)}:{},...j(E.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:j(E.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!ne(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let E={};for(let[v,C]of Object.entries(e.budgetByEffort))E[v]=se(C,`${t}.budgetByEffort.${v}`)??0;g.budgetByEffort=E}return d!==void 0&&(g.allowCustomEffort=d),l!==void 0&&(g.supportsReasoningEffort=l),p!==void 0&&(g.supportsReasoningSummary=p),m!==void 0&&(g.supportsEncryptedReasoningReplay=m),h!==void 0&&(g.supportsAdaptiveThinking=h),b!==void 0&&(g.supportsManualThinkingBudget=b),x!==void 0&&(g.supportsDisabledThinking=x),f!==void 0&&(g.requiresEffortBetaHeader=f),g}i(Ao,"validateReasoningProfile");function Do(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?Ao(n,`${t}.reasoningProfile`):Ao(o,`${t}.reasoningCapabilityV2`)}i(Do,"validateReasoningProfileField");function Ji(e,t){if(typeof e!="string"||!So.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${So.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Ji,"requireProfileName");function qi(e,t){if(typeof e!="string"||!Mo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Mo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(qi,"requireVerifyStrategy");function Yi(e,t){if(!ne(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=pe(e.id,`${t}.id`),o=we(e.wireModel,`${t}.wireModel`),r=we(e.displayName,`${t}.displayName`),s=se(e.contextWindow,`${t}.contextWindow`),a=se(e.maxOutputTokens,`${t}.maxOutputTokens`),c=se(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),u=j(e.replayReasoningContent,`${t}.replayReasoningContent`),d=j(e.strictThinkingSignature,`${t}.strictThinkingSignature`),l=se(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),p=e.reasoningCapability===void 0?void 0:dn(e.reasoningCapability,`${t}.reasoningCapability`),m=Do(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),c!==void 0&&(h.thinkingBudgetCap=c),p!==void 0&&(h.reasoningCapability=p),m!==void 0&&(h.reasoningProfile=m),u!==void 0&&(h.replayReasoningContent=u),d!==void 0&&(h.strictThinkingSignature=d),l!==void 0&&(h.streamMaxDurationMs=l),h}i(Yi,"validateModelDescriptor");function Qi(e,t){if(e===void 0)return;if(!ne(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=dn(r,`${t}.${o}`);return n}i(Qi,"validateModelReasoningCapabilities");function Zi(e,t){if(!ne(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=j(e.cliBridge,`providers.${t}.cliBridge`),o=pe(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=dn(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=Do(e,`providers.${t}`),a=Ji(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=qi(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&c!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${c}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let u=se(e.contextWindow,`providers.${t}.contextWindow`),d=se(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),l=se(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),p=j(e.supportsThinking,`providers.${t}.supportsThinking`),m=Qi(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),h=we(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 b;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);b=e.models.map((g,E)=>Yi(g,`providers.${t}.models[${E}]`));let f=new Set([...h===void 0?[]:[h],...b.map(g=>g.id)]);for(let[g,E]of b.entries())if(E.wireModel!==void 0&&!f.has(E.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${g}].wireModel must reference a declared model, got ${JSON.stringify(E.wireModel)}`)}let x={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:c};return s!==void 0&&(x.reasoningProfile=s),h!==void 0&&(x.model=h),b!==void 0&&(x.models=b),u!==void 0&&(x.contextWindow=u),d!==void 0&&(x.maxOutputTokens=d),l!==void 0&&(x.thinkingBudgetCap=l),p!==void 0&&(x.supportsThinking=p),m!==void 0&&(x.modelReasoningCapabilities=m),n&&(x.cliBridge=!0),x}i(Zi,"validateProviderEntry");function Io(e){if(!ne(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=pe(e.updatedAt,"updatedAt");if(!ne(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]=Zi(r,o);return{version:1,updatedAt:t,providers:n}}i(Io,"validateProviderCapabilitiesJson");var os=Object.freeze({native:fe,"image-input-native":Qn,"cli-bridge":Ue,"image-input-cli-bridge":Zn}),_t=null;function rs(){if(process.env.KODAX_BUNDLED==="true")return Te.join(Te.dirname(process.execPath),"provider-capabilities.json");let e=Te.dirname(ns(import.meta.url)),t=[Te.join(e,"provider-capabilities.json"),Te.join(Te.dirname(e),"provider-capabilities.json")];for(let n of t)if(es(n))return n;return t[0]}i(rs,"resolveJsonPath");function is(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Oo(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Oo(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(is,"deepFreezeSnapshot");function Oo(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(Oo,"freezeReasoningProfile");function ss(e){if(e==="gemini-cli"){let t=Pe();return{model:t,models:Ve().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=_e();return{model:t,models:Xe().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(ss,"resolveCliBridgeModels");function as(e,t){let n=os[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=ss(e),s={model:r.model,models:r.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let o={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(o.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(o.models=t.models),t.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(o.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(o.maxOutputTokens=t.maxOutputTokens),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}i(as,"buildSnapshot");function No(){if(_t)return _t;let e=rs(),t;try{let r=ts(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=Io(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=is(as(r,s));return _t=Object.freeze(o),_t}i(No,"getProviderSnapshots");import cs from"@anthropic-ai/sdk";var K=No();function W(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,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...t}}i(W,"buildProviderConfig");var fn=class extends B{static{i(this,"AnthropicProvider")}name="anthropic";config=W("anthropic",{strictThinkingSignature:!0});buildClient(){return new cs({apiKey:this.getApiKey()})}},pn=class extends B{static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=W("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},gn=class extends B{static{i(this,"ZaiCodingProvider")}name="zai-coding";config=W("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},mn=class extends B{static{i(this,"KimiCodeProvider")}name="kimi-code";config=W("kimi-code",{baseUrl:"https://api.kimi.com/coding/",promptCacheAffinity:!0})},hn=class extends B{static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=W("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},yn=class extends B{static{i(this,"MimoCodingProvider")}name="mimo-coding";config=W("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},vn=class extends B{static{i(this,"MimoProvider")}name="mimo";config=W("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},En=class extends B{static{i(this,"ArkCodingProvider")}name="ark-coding";config=W("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},bn=class extends z{static{i(this,"OpenAIProvider")}name="openai";config=W("openai",{promptCacheAffinity:!0})},kn=class extends z{static{i(this,"DeepSeekProvider")}name="deepseek";config=W("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},Cn=class extends z{static{i(this,"KimiProvider")}name="kimi";config=W("kimi",{baseUrl:"https://api.moonshot.cn/v1",promptCacheAffinity:!0,replayReasoningContent:!0})},xn=class extends z{static{i(this,"QwenProvider")}name="qwen";config=W("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},_n=class extends B{static{i(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=W("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},Pn=class extends z{static{i(this,"ZhipuProvider")}name="zhipu";config=W("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},X={anthropic:i(()=>new fn,"anthropic"),openai:i(()=>new bn,"openai"),deepseek:i(()=>new kn,"deepseek"),kimi:i(()=>new Cn,"kimi"),"kimi-code":i(()=>new mn,"kimi-code"),qwen:i(()=>new xn,"qwen"),"qwen-token-plan":i(()=>new _n,"qwen-token-plan"),zhipu:i(()=>new Pn,"zhipu"),"zhipu-coding":i(()=>new pn,"zhipu-coding"),"zai-coding":i(()=>new gn,"zai-coding"),"minimax-coding":i(()=>new hn,"minimax-coding"),"mimo-coding":i(()=>new yn,"mimo-coding"),mimo:i(()=>new vn,"mimo"),"ark-coding":i(()=>new En,"ark-coding"),"gemini-cli":i(()=>new bt,"gemini-cli"),"codex-cli":i(()=>new xt,"codex-cli")},wn=process.env.KODAX_PROVIDER??"zhipu-coding",Lo=new Map;function us(e){if(U(e))return K[e].apiKeyEnv}i(us,"resolveApiKeyEnvForProvider");function $o(e){let t=e??wn,n=X[t];if(!n)throw new O(`Unknown provider: ${t}. Available: ${Object.keys(X).join(", ")}`,t);let o=us(t),r=ge(t,o?process.env[o]:void 0),s=Lo.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return Lo.set(t,{apiKey:r,instance:a}),a}i($o,"getProvider");function Bo(e){return U(e)?ge(e,process.env[K[e].apiKeyEnv])!==void 0:!1}i(Bo,"isProviderConfigured");function jo(e){return U(e)?K[e].model:null}i(jo,"getProviderModel");function Fo(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(Fo,"getProviderConfiguredReasoningCapability");function Ko(e){return U(e)?G(K[e].capabilityProfile):null}i(Ko,"getProviderConfiguredCapabilityProfile");function Uo(){let e=[];for(let t of Object.keys(X)){let n=K[t];e.push({name:t,model:n.model,models:Tn(t),configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:G(n.capabilityProfile)})}return e}i(Uo,"getProviderList");function Tn(e){return Se(e).map(t=>t.id)}i(Tn,"getProviderModels");function U(e){return e in X}i(U,"isProviderName");function Wo(e){return{id:e.model}}i(Wo,"makeDefaultDescriptor");function zo(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}i(zo,"resolveWireModelDescriptor");function Pt(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(Pt,"effectiveCapabilities");function Se(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??Wo(t),...r].map(s=>zo(t,s))}i(Se,"getProviderModelDescriptors");function wt(e,t){let n=K[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?Pt(e,n,zo(n,o)):t===n.model?Pt(e,n,Wo(n)):Pt(e,n,{id:t})}i(wt,"getModelCapabilities");function Tt(){let e=[];for(let t of Object.keys(X)){let n=K[t];for(let o of Se(t))e.push(Pt(t,n,o))}return e}i(Tt,"listBuiltinModelCapabilities");var ls=new Set(["compat","sdk"]),ds=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Vo(e){return e.reasoningProfile??e.reasoningCapabilityV2}i(Vo,"getConfiguredReasoningProfile");function fs(e){return e==="anthropic"?"count-tokens":"models-list"}i(fs,"defaultVerifyStrategyForProtocol");function St(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(St,"legacyCapabilityFromReasoningProfile");function ps(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(ps,"legacyReasoningPresetForProtocol");function Xo(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(Xo,"isSimpleReasoning");function gs(e,t){if(e==="none")return nt("none");let n=i(c=>c==="off"?"none":c,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,s=o.includes("none"),a=o.map(c=>c===r?{value:c,isDefault:!0}:{value:c});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...s?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{},supportsReasoningEffort:!0}}i(gs,"buildReasoningProfileFromSimple");function Go(e,t,n,o){let r=Xo(n)?n:void 0,s=n!==void 0&&!Xo(n)?n:void 0;if(o?.supportsThinking===!1)return nt("none");if(e)return{...e,...s??{}};if(r!==void 0)return gs(r,o?.protocol??"openai");let a=t??(o?ps(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?nt(a,s):void 0}i(Go,"resolveCustomReasoningProfile");function Mt(e){return Go(Vo(e),e.reasoningPreset,e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(Mt,"resolveCustomProviderReasoningProfile");function Rn(e,t,n){return Go(Vo(e),e.reasoningPreset,e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(Rn,"resolveCustomModelReasoningProfile");function ms(e,t,n){if(typeof e=="string")return{id:e};let o=Rn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(ms,"customModelDescriptorToFull");function Ge(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&&!ls.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(e.verifyStrategy!==void 0){if(!ds.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(Ge,"validateCustomProviderConfig");function hs(e){let t=e.models?.length?e.models.map(s=>ms(s,e.protocol,e.supportsThinking)):void 0,n=Mt(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??St(n)??"none",r=e.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:e.apiKeyEnv,model:e.model,baseUrl:e.baseUrl,models:t,userAgentMode:e.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:e.capabilityProfile,contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,thinkingBudgetCap:e.thinkingBudgetCap,promptCacheAffinity:e.promptCacheAffinity??!1,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??fs(e.protocol)}}i(hs,"buildProviderConfig");function Rt(e){Ge(e);let t=hs(e);return e.protocol==="anthropic"?new Sn(e.name,t):new Mn(e.name,t)}i(Rt,"createCustomProvider");var Sn=class extends B{static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},Mn=class extends z{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var Q=new Map,An=new Map,ys=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function Ho(e){return e.reasoningCapability!==void 0&&ys.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(Ho,"hasThinkingReasoningConfig");function vs(e){if(e.supportsThinking!==!1)return;let t=Ho(e),n=(e.models??[]).some(o=>typeof o!="string"&&Ho(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(vs,"warnOnIgnoredReasoningCapability");function Jo(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(Ge(r),t.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in X&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),vs(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>Rt(r))}Q.clear(),An.clear();for(let[r,s]of n)Q.set(r,s);for(let[r,s]of o)An.set(r,s)}i(Jo,"registerCustomProviders");function At(e){let t=An.get(e);return t?t():void 0}i(At,"getCustomProvider");function Re(e){return Q.has(e)}i(Re,"isCustomProviderName");function He(){return[...Q.keys()]}i(He,"getCustomProviderNames");function qo(){let e=[];for(let[t,n]of Q){let o=!!process.env[n.apiKeyEnv],r=Mt(n),s=(n.models??[]).map(c=>typeof c=="string"?c:c.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??St(r)??"none",capabilityProfile:G(n.capabilityProfile??fe),custom:!0})}return e}i(qo,"getCustomProviderList");function Yo(e){let t=Q.get(e);if(!t)return;let n=(t.models??[]).map(o=>typeof o=="string"?o:o.id);return t.model&&n.length?[...new Set([t.model,...n])]:[t.model]}i(Yo,"getCustomProviderModels");function Qo(e,t,n){if(typeof e=="string")return{id:e};let o=Rn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Qo,"customDescriptorToFull");function Dt(e){let t=Q.get(e);if(!t)return;let n=(t.models??[]).map(s=>Qo(s,t.protocol,t.supportsThinking)),o=n.find(s=>s.id===t.model)??{id:t.model},r=n.filter(s=>s.id!==t.model);return[o,...r]}i(Dt,"getCustomProviderModelDescriptors");function Me(e,t){let n=Q.get(e);if(!n)return;let o=t===n.model,r=Mt(n),a=(n.models??[]).map(d=>Qo(d,n.protocol,n.supportsThinking)).find(d=>d.id===t)??(o?{id:n.model}:void 0);if(!a)return;let c=n.supportsThinking===!1?r:a.reasoningProfile??r,u=n.supportsThinking===!1?"none":a.reasoningCapability??St(c)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(u!=="none"&&u!=="prompt-only"),reasoningCapability:u,reasoningProfile:c,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(Me,"getCustomModelCapabilities");function Dn(e){let t=Q.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}i(Dn,"getCustomProviderVerifyMetadata");function It(){let e=[];for(let[t,n]of Q){let o=Me(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=Me(t,s);a&&e.push(a)}}return e}i(It,"listCustomProviderModelCapabilities");var oe=new Map,Es=0;function In(e){let t=oe.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(In,"getActiveRuntimeProviderRegistration");function bs(e){for(let[t,n]of oe){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?oe.delete(t):oe.set(t,o);return}}}i(bs,"removeRuntimeProviderRegistration");function Zo(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(Re(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Es}`,name:n,factory:t},r=oe.get(n)??[];return oe.set(n,[...r,o]),()=>{bs(o.id)}}i(Zo,"registerModelProvider");function Ot(e){let t=In(e);if(t===void 0)return;let n=t.factory();return t.credentialEnvironmentName??=n.getApiKeyEnv(),n}i(Ot,"getRuntimeModelProvider");function Je(e){return In(e)!==void 0}i(Je,"isRuntimeModelProviderName");function Nt(){return Array.from(oe.keys()).filter(e=>In(e)!==void 0)}i(Nt,"getRuntimeModelProviderNames");function Lt(){let e=new Set;for(let t of oe.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(Lt,"getRuntimeModelProviderCredentialEnvironmentNames");function er(){oe.clear()}i(er,"clearRuntimeModelProviders");function On(e){if(U(e))return X[e]();let t=Ot(e);if(t)return t;let n=At(e);if(n)return n;let o=Bt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(On,"resolveProvider");function $t(e){return U(e)||Je(e)||Re(e)}i($t,"isKnownProvider");function Bt(){let e=Object.keys(X),t=Nt(),n=He();return[...new Set([...e,...t,...n])]}i(Bt,"getAvailableProviderNames");function tr(){let e=new Set;for(let t of Object.values(K))e.add(t.apiKeyEnv);for(let t of He()){let n=Dn(t);n!==void 0&&e.add(n.apiKeyEnv)}for(let t of Lt())e.add(t);return[...e].sort()}i(tr,"getProviderCredentialEnvironmentNames");function qe(e){return U(e)?Se(e):Dt(e)??[]}i(qe,"resolveProviderModelDescriptors");function jt(e,t){return U(e)?wt(e,t):Me(e,t)}i(jt,"resolveModelCapabilities");function nr(){return[...Tt(),...It()]}i(nr,"listAllModelCapabilities");function ks(e){if(U(e)){let t=K[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Je(e))return Dn(e)}i(ks,"getProviderVerifyMetadata");async function or(e,t){let n=ks(e);if(!n&&!$t(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Bt().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=On(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(or,"verifyProviderCredential");async function rr(e,t){if(!$t(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=qe(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(rr,"listProviderModels");function Cs(e){let t=e.model??qe(e.provider)[0]?.id,n=t?jt(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?zt(n,e.rejectedEfforts):n,r=Fe({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(Cs,"resolveWireEffort");var ir={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375,cacheReadPer1M:.375,cacheWritePer1M:3.75},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08,cacheReadPer1M:.08,cacheWritePer1M:1}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-v4-flash":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.028},"deepseek-v4-pro":{inputPer1M:1.68,outputPer1M:3.36,cachePer1M:.14}},kimi:{"kimi-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-preview":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-plus":{inputPer1M:.005,outputPer1M:.015},"qwen3.6-flash":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015}},zhipu:{"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function Nn(e,t,n){let o=n?.[e]?.[t];return o||ir[e]?.[t]}i(Nn,"getCostRate");function Ln(e,t,n,o=0,r=0){let s=Math.max(0,t-o-r),a=e.cacheReadPer1M??e.cachePer1M??e.inputPer1M,c=e.cacheWritePer1M??e.cachePer1M??e.inputPer1M,u=s/1e6*e.inputPer1M,d=n/1e6*e.outputPer1M,l=o/1e6*a,p=r/1e6*c;return u+d+l+p}i(Ln,"calculateCost");function xs(){return{records:[],retries:[]}}i(xs,"createCostTracker");function $n(e,t){let n={timestamp:Date.now(),provider:t.provider,waitMs:t.waitMs,reason:t.reason,source:t.source};return{records:e.records,retries:[...e.retries,n]}}i($n,"recordRetry");function Bn(e,t,n){let o=Nn(t.provider,t.model,n),r=o?Ln(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(Bn,"recordUsage");function _s(e){let t=0,n=0,o=0,r=0,s=0,a=0,c={},u={};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 m=c[p.provider];c[p.provider]={cost:(m?.cost??0)+p.cost,calls:(m?.calls??0)+1,inputTokens:(m?.inputTokens??0)+p.inputTokens,outputTokens:(m?.outputTokens??0)+p.outputTokens};let h=p.role??"default",b=u[h];u[h]={cost:(b?.cost??0)+p.cost,calls:(b?.calls??0)+1,inputTokens:(b?.inputTokens??0)+p.inputTokens,outputTokens:(b?.outputTokens??0)+p.outputTokens}}let d=0;for(let p of e.retries)d+=p.waitMs;let l=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:l,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:d,byProvider:c,byRole:u}}i(_s,"getSummary");function Ft(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Ft,"formatCost");function Ps(e){let t=[];if(t.push(`Session Cost: ${Ft(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}: ${Ft(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}: ${Ft(s.cost)} (${s.calls} calls)`)}return t.join(`
78
+ `)}i(Ps,"formatCostReport");import{performance as jn}from"node:perf_hooks";var sr={inputTokens:0,outputTokens:0,totalTokens:0},ws=3e4;function Ts(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(Ts,"resolveDefaultSideQueryReasoning");async function Ss(e){let t=new AbortController,n=e.timeoutMs??ws,o=e.costTracker,r=jn.now(),s=Buffer.byteLength(e.system,"utf8"),a=Buffer.byteLength(JSON.stringify(e.messages),"utf8"),c,u,d,l=0,p=0,m=i(_=>{let y=Math.max(0,Math.round(jn.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:y,systemBytes:s,messageBytes:a,promptBytes:s+a,retryCount:l,retryWaitMs:p,...c!==void 0?{firstUpstreamEventMs:c}:{},...u!==void 0?{firstThinkingDeltaMs:u}:{},...d!==void 0?{firstTextDeltaMs:d,firstOutputMs:d,streamMs:Math.max(0,y-d)}:{},terminalPhase:_}},"diagnostics"),h,b=i(_=>{h||(h=_),t.abort()},"recordAbort"),x=setTimeout(()=>b("timeout"),n),f=i(()=>b("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?b("parent"):e.abortSignal.addEventListener("abort",f,{once:!0}));let g=i(()=>Math.max(0,Math.round(jn.now()-r)),"elapsed"),E=i(()=>{c===void 0&&(c=g())},"recordUpstreamEvent"),v,C=new Promise((_,y)=>{v=i(()=>{y(new DOMException(h==="timeout"?"sideQuery timed out":"sideQuery aborted","AbortError"))},"onControllerAbort"),t.signal.aborted?v():t.signal.addEventListener("abort",v,{once:!0})});try{let _=e.provider.stream([...e.messages],[],e.system,e.reasoning??Ts(e.provider.getReasoningProfile(e.model)),{modelOverride:e.model,...Ms(e.maxOutputTokens)?{maxOutputTokensOverride:e.maxOutputTokens}:{},onTextDelta:i(A=>{E(),A.length>0&&d===void 0&&(d=g())},"onTextDelta"),onThinkingDelta:i(A=>{E(),A.length>0&&u===void 0&&(u=g())},"onThinkingDelta"),onHeartbeat:i(()=>E(),"onHeartbeat"),onRetryAfter:i(A=>{E(),l+=1,p+=Math.max(0,A.waitMs),o&&(o=$n(o,{provider:A.provider,waitMs:A.waitMs,reason:A.reason,source:A.source}))},"onRetryAfter")},t.signal),y=await Promise.race([_,C]),k=y.usage??sr,T=y.textBlocks??[],S=y.toolBlocks??[],R=T.map(A=>A.text).join("");return S.length>0?{text:R,usage:k,costTracker:o,stopReason:"error",diagnostics:m("contract_error"),error:new Error(`sideQuery: provider returned ${S.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=Bn(o,{provider:e.provider.name,model:e.model,inputTokens:k.inputTokens,outputTokens:k.outputTokens,cacheReadTokens:k.cachedReadTokens,cacheWriteTokens:k.cachedWriteTokens,role:e.querySource})),{text:R,usage:k,costTracker:o,stopReason:Rs(y.stopReason),diagnostics:m("completed")})}catch(_){let y=_ instanceof Error?_:new Error(String(_)),k="error";return t.signal.aborted&&(k=h==="timeout"?"timeout":"aborted"),{text:"",usage:sr,costTracker:o,stopReason:k,diagnostics:m(d!==void 0?"streaming":u!==void 0?"thinking":c!==void 0?"awaiting_text":"pre_output"),error:y}}finally{clearTimeout(x),e.abortSignal&&e.abortSignal.removeEventListener("abort",f),v&&t.signal.removeEventListener("abort",v)}}i(Ss,"sideQuery");function Ms(e){return e!==void 0&&Number.isInteger(e)&&e>0}i(Ms,"isPositiveInteger");function Rs(e){return e==="max_tokens"?"max_tokens":"end_turn"}i(Rs,"mapStopReason");export{cr as a,ur as b,lr as c,ee as d,O as e,Oe as f,Kt as g,Ut as h,Wt as i,dr as j,fr as k,pr as l,Ne as m,gr as n,mr as o,et as p,zt as q,hr as r,yr as s,vr as t,Er as u,br as v,me as w,Fn as x,Kn as y,Ht as z,he as A,ot as B,je as C,Un as D,xr as E,Wn as F,Fe as G,_r as H,Sr as I,le as J,de as K,Jt as L,rt as M,it as N,qn as O,Yn as P,$r as Q,Br as R,Ke as S,J as T,st as U,q as V,Wr as W,no as X,ve as Y,Ee as Z,Qt as _,Zt as $,be as aa,en as ba,ke as ca,B as da,z as ea,ie as fa,_e as ga,Pe as ha,Xe as ia,Ve as ja,K as ka,X as la,wn as ma,$o as na,Bo as oa,jo as pa,Fo as qa,Ko as ra,Uo as sa,Tn as ta,U as ua,Se as va,wt as wa,Tt as xa,Ge as ya,Rt as za,Jo as Aa,At as Ba,Re as Ca,He as Da,qo as Ea,Yo as Fa,Dt as Ga,Me as Ha,It as Ia,Zo as Ja,Ot as Ka,Je as La,Nt as Ma,Lt as Na,er as Oa,On as Pa,$t as Qa,Bt as Ra,tr as Sa,qe as Ta,jt as Ua,nr as Va,or as Wa,rr as Xa,Cs as Ya,ir as Za,Nn as _a,Ln as $a,xs as ab,$n as bb,Bn as cb,_s as db,Ft as eb,Ps as fb,Ss as gb};