@kodax-ai/kodax 0.7.66 → 0.7.68

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 (82) hide show
  1. package/CHANGELOG.md +180 -3
  2. package/README.md +51 -16
  3. package/README_CN.md +34 -13
  4. package/dist/chunks/agent-DATNZOBK.js +2 -0
  5. package/dist/chunks/argument-completer-X7MMM7Y6.js +2 -0
  6. package/dist/chunks/chunk-5GL55MOH.js +36 -0
  7. package/dist/chunks/chunk-67XJ4YUA.js +703 -0
  8. package/dist/chunks/chunk-C4SBXBWH.js +346 -0
  9. package/dist/chunks/{chunk-ALS32RNZ.js → chunk-CC4BVVE7.js} +9 -9
  10. package/dist/chunks/{chunk-VS4CDDEF.js → chunk-CTHUX5ZH.js} +221 -221
  11. package/dist/chunks/{chunk-YRBNXFHY.js → chunk-HFM2D5BP.js} +1 -1
  12. package/dist/chunks/chunk-HLBHSA2B.js +325 -0
  13. package/dist/chunks/{chunk-O7N22GJ3.js → chunk-K2NCKRVY.js} +16 -14
  14. package/dist/chunks/chunk-KGAI32VS.js +22 -0
  15. package/dist/chunks/{chunk-QAQ2HNXD.js → chunk-KIQRCGVR.js} +126 -112
  16. package/dist/chunks/chunk-MP52BDK5.js +15 -0
  17. package/dist/chunks/chunk-O5OJQFPY.js +307 -0
  18. package/dist/chunks/chunk-OIELNE6Z.js +56 -0
  19. package/dist/chunks/chunk-PEGSHZAA.js +5 -0
  20. package/dist/chunks/chunk-TOGESFRN.js +2 -0
  21. package/dist/chunks/compaction-config-BXEDHIQP.js +2 -0
  22. package/dist/chunks/{construction-bootstrap-3XDS2D5K.js → construction-bootstrap-PYWJHO35.js} +1 -1
  23. package/dist/chunks/dist-76PJHNSG.js +2 -0
  24. package/dist/chunks/{dist-4PXB7U22.js → dist-HTDJRAD6.js} +1 -1
  25. package/dist/chunks/host-UAXIDZ6V.js +2 -0
  26. package/dist/chunks/run-manager-UCXB4G22.js +2 -0
  27. package/dist/chunks/utils-S63V5UCM.js +2 -0
  28. package/dist/index.d.ts +19 -16
  29. package/dist/index.js +6 -6
  30. package/dist/kodax_cli.js +1292 -1255
  31. package/dist/runtime-worker.js +1196 -1153
  32. package/dist/sdk-agent.d.ts +143 -18
  33. package/dist/sdk-agent.js +1 -1
  34. package/dist/sdk-coding.d.ts +281 -20
  35. package/dist/sdk-coding.js +1 -1
  36. package/dist/sdk-experimental-memory.d.ts +618 -0
  37. package/dist/sdk-experimental-memory.js +2 -0
  38. package/dist/sdk-llm.d.ts +6 -6
  39. package/dist/sdk-llm.js +1 -1
  40. package/dist/sdk-mcp.js +1 -1
  41. package/dist/sdk-media.d.ts +1 -1
  42. package/dist/sdk-repl.d.ts +26 -17
  43. package/dist/sdk-repl.js +2 -2
  44. package/dist/sdk-runtime.d.ts +102 -14
  45. package/dist/sdk-runtime.js +1 -1
  46. package/dist/sdk-session.d.ts +6 -6
  47. package/dist/sdk-session.js +1 -1
  48. package/dist/sdk-skills.js +1 -1
  49. package/dist/semantic-worker.js +12 -12
  50. package/dist/types-chunks/{base.d-DalIRhbb.d.ts → base.d-C8mXDhLL.d.ts} +1 -1
  51. package/dist/types-chunks/{bash-prefix-extractor.d-BjkITAva.d.ts → bash-prefix-extractor.d-Dm-T865v.d.ts} +67 -12
  52. package/dist/types-chunks/{capability-learning.d-BQB0M70w.d.ts → capability-learning.d-BLEmCib0.d.ts} +1 -1
  53. package/dist/types-chunks/{capsule.d-hVhPNkHd.d.ts → capsule.d-CzaamUUv.d.ts} +5 -5
  54. package/dist/types-chunks/{commands.d-C3B1TdGM.d.ts → commands.d-DxKjVSNU.d.ts} +4 -4
  55. package/dist/types-chunks/{guardrail.d-wk-s0psS.d.ts → guardrail.d-CPDfZyJp.d.ts} +3 -3
  56. package/dist/types-chunks/{guardrail.d-C_Siraua.d.ts → guardrail.d-D7r6zVSR.d.ts} +1 -1
  57. package/dist/types-chunks/{public-api.d-jtREVfEq.d.ts → public-api.d-BcKbBy1E.d.ts} +12 -7
  58. package/dist/types-chunks/{resolver.d-CGkfRULj.d.ts → resolver.d-DmBnoilY.d.ts} +2 -2
  59. package/dist/types-chunks/{run-manager.d-CFknOfo1.d.ts → run-manager.d-CSj7_kWk.d.ts} +1 -1
  60. package/dist/types-chunks/{sdk-session-CLqyfAmf.d.ts → sdk-session-C6nDgyh8.d.ts} +4 -4
  61. package/dist/types-chunks/{types.d-Bp4Lm1jv.d.ts → types.d-CO_ZkmOd.d.ts} +6 -1
  62. package/dist/types-chunks/{types.d-CUN_bZU7.d.ts → types.d-CzscbsG0.d.ts} +4 -4
  63. package/dist/types-chunks/{process.d-CY2g03Mb.d.ts → types.d-D2frCRaY.d.ts} +505 -10
  64. package/dist/types-chunks/{types.d-BMLxKV69.d.ts → types.d-D9FKbAmf.d.ts} +2 -2
  65. package/dist/types-chunks/{utils.d-C1rpoeDh.d.ts → utils.d-DOXxnOnI.d.ts} +9 -5
  66. package/docs/SDK_EMBEDDER_GUIDE.md +3179 -0
  67. package/package.json +6 -1
  68. package/dist/chunks/agent-KER4WDNO.js +0 -2
  69. package/dist/chunks/argument-completer-HK3MHA3K.js +0 -2
  70. package/dist/chunks/chunk-3HKBBY74.js +0 -339
  71. package/dist/chunks/chunk-AKBH2EEE.js +0 -8
  72. package/dist/chunks/chunk-MHRN2LQV.js +0 -328
  73. package/dist/chunks/chunk-NBQW7PNZ.js +0 -18
  74. package/dist/chunks/chunk-QJVZZSEO.js +0 -56
  75. package/dist/chunks/chunk-TLJGOKBT.js +0 -729
  76. package/dist/chunks/chunk-WBBEJIAY.js +0 -306
  77. package/dist/chunks/chunk-WMIZCY2J.js +0 -2
  78. package/dist/chunks/compaction-config-7GMUFNPB.js +0 -2
  79. package/dist/chunks/dist-4YAYT2TO.js +0 -2
  80. package/dist/chunks/host-KG3456QP.js +0 -2
  81. package/dist/chunks/run-manager-6CAH3KTA.js +0 -2
  82. package/dist/chunks/utils-OT5ENFUL.js +0 -2
@@ -1,31 +1,33 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as i}from"./chunk-ONUPGMER.js";var Q=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},M=class extends Q{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Pe=class extends Q{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},At=class extends Q{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Xe=class extends M{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Dt=class extends Q{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Ot=32768,Uo=32e3,Wo=64e3,zo=.5;function Re(e,t,n={}){if(e===void 0)return;let o=n.allowZero===!0;if(!Number.isFinite(e)||(o?e<0:e<=0)){let r=o?"a non-negative finite number":"a positive finite number";throw new Error(`${t} must be ${r}`)}return e===0?0:Math.max(1,Math.floor(e*1e3))}i(Re,"timeoutSecToMs");function Xo(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(Xo,"parseTimeoutSecEnvMs");function Vo(e){if(!e)return;let t={requestTimeoutMs:Re(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Re(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Re(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Re(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Vo,"resolveLlmTimeoutConfig");function Ve(e,t){return`${e}/${t??""}`}i(Ve,"capabilityCacheKey");function It(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(It,"narrowReasoningProfile");function Go(e,t,n){return e[Ve(t,n)]?.rejected??[]}i(Go,"getRejectedEfforts");function Ho(e,t,n,o,r,s){let a=Ve(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:s}}}i(Ho,"addRejectedEffort");function Jo(e,t,n){if(!t)return{};let o={...e};return delete o[Ve(t,n)],o}i(Jo,"removeCacheEntry");function qo(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:u}}return t}i(qo,"sanitizeCapabilityCache");var Yo=["off","auto","quick","balanced","deep"],le=["auto","none","low","medium","high"],Pn={low:6e3,medium:1e4,high:2e4},Rn=4096,$t=[{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"}],Bt=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Alias to high"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning"}],Qo=[{value:"low",description:"Thinking is always on"},{value:"medium",description:"Thinking is always on"},{value:"high",description:"Thinking is always on",isDefault:!0},{value:"xhigh",description:"Thinking is always on"},{value:"max",description:"Thinking is always on"}];function He(e,t={}){return{...Zo(e),...t,reasoningPreset:e}}i(He,"createReasoningProfileFromPreset");function Zo(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Bt,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:Bt,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:Bt,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:$t,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:Qo,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:$t,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:$t,budgetByEffort:{low:6e3,medium:1e4,high:16e3,xhigh:24e3,max:32e3},disabledEfforts:["none","minimal"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"claude-adaptive-xhigh":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"xhigh"},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"claude-adaptive-max":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"anthropic-budget":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"anthropic-budget",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"}],budgetByEffort:{low:6e3,medium:1e4,high:16e3},disabledEfforts:["none"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"openai-chat-reasoning":case"openai-responses-reasoning":return{reasoningPreset:e,effortStrategy:e==="openai-chat-reasoning"?"openai-chat-effort":"openai-responses-effort",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],disabledEfforts:["none"],supportsReasoningEffort:!0,supportsReasoningSummary:!0,supportsEncryptedReasoningReplay:!0};case"codex-cli-effort":return{reasoningPreset:e,effortStrategy:"codex-cli-config",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],allowCustomEffort:!0,supportsReasoningEffort:!0};case"none":return{reasoningPreset:e,effortStrategy:"none",thinkingStrategy:"none"}}}i(Zo,"createBaseReasoningProfileFromPreset");function Nt(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Nt,"getReasoningCapability");function fe(e){return Je(e).enabled}i(fe,"isReasoningEnabled");function Je(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?Ae(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(Je,"normalizeReasoningRequest");function Ae(e){let t=e.trim().toLowerCase();if(!t)throw new Error("Reasoning effort cannot be empty.");if(/\s/.test(t))throw new Error(`Reasoning effort cannot contain whitespace: "${e}".`);return t==="off"?"none":t}i(Ae,"normalizeReasoningEffortValue");function Sn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Sn,"mapLegacyReasoningModeToEffortIntent");function er(e){switch(e){case"none":return"off";case"auto":return"auto";case"low":return"quick";case"medium":return"balanced";case"high":return"deep";default:return}}i(er,"effortToLegacyReasoningMode");function wn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=Ae(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(wn,"parseReasoningEffortEnv");function De(e){let t=wn(e.envEffort),n=[];Se(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Se(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Sn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Se(n,e.modelDefaultEffort??e.capability?.defaultEffort??we(e.capability),"model-default",!1),Se(n,e.providerDefaultEffort,"provider-default",!1),Se(n,e.fallbackEffort??Me(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:nr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Mn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(De,"resolveReasoningEffort");function tr(e){let t=e.currentEffort?Ae(e.currentEffort):void 0;if(t&&An(t,e.capability))return{effectiveEffort:Ge(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??we(e.capability)??Lt(e.capability)??Me(e.capability),o=n&&Ge(n,e.capability);return t?{effectiveEffort:o,preserved:!1,diagnostic:o?`Effort ${t} is not supported by the selected model; using ${o}.`:`Effort ${t} is not supported by the selected model; clearing effort.`}:{effectiveEffort:o,preserved:!1}}i(tr,"resolveReasoningEffortForModelSwitch");function Se(e,t,n,o){if(t===void 0)return;let r=Ae(t);e.push({value:r,source:n,isExplicit:o})}i(Se,"pushEffortCandidate");function nr(e,t){let n=e.find(o=>o.value!=="auto");return n?Mn(n.value,t,n.isExplicit):we(t)??Me(t)}i(nr,"resolveAutoEffectiveEffort");function Mn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}if(e==="none")return e;if(An(e,t))return Ge(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}i(Mn,"validateReasoningEffort");function Ge(e,t){return t?.effortAliases?.[e]??e}i(Ge,"applyEffortAlias");function An(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=or(t);return n.length===0?le.includes(e):n.includes(e)||n.includes(Ge(e,t))}i(An,"isSupportedReasoningEffort");function or(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(or,"getSupportedEffortValues");function we(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(we,"getDefaultPresetValue");function Lt(e){let t=e?.supportedEfforts?.filter(rr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Lt,"getMiddleVisiblePresetValue");function rr(e){return e.isUserVisible!==!1}i(rr,"isUserVisiblePreset");function Me(e){if(!e||e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return"none";if(!(e.effortStrategy==="anthropic-output-effort"&&e.thinkingStrategy==="anthropic-adaptive"))return"medium"}i(Me,"getFallbackEffortForCapability");function ir(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(ir,"getDefaultThinkingDepthForMode");function ie(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ie,"effortToThinkingDepth");function se(e,t,n="unknown"){if(t==="off")return 0;let o={...Pn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(se,"resolveThinkingBudget");function ae(e,t,n=Rn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(ae,"clampThinkingBudget");function jt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(jt,"mapDepthToOpenAIReasoningEffort");function Dn(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):Dn(t.cause)}i(Dn,"getStatus");function sr(e){if(e instanceof Error)return e.message.toLowerCase();if(typeof e=="string")return e.toLowerCase();if(e&&typeof e=="object"){let t=e;return[t.message,t.error,t.detail,t.body].filter(o=>typeof o=="string").join(" ").toLowerCase()}return""}i(sr,"getMessage");var ar=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],ur=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],cr=["minimal","none","low","medium","high","xhigh","max"];function lr(e,t){for(let n of cr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(lr,"extractRejectedEffort");function Ft(e,t){let n=Dn(e);if(n!==400&&n!==422)return null;let o=sr(e);if(!o)return null;let r=ar.some(u=>o.includes(u)),s=ur.some(u=>o.includes(u));if(!r||!s)return null;let a=lr(o,t);return a?{rejectedEffort:a}:null}i(Ft,"classifyReasoningEffortRejection");function On(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(On,"readHeader");function In(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(In,"parsePositiveNumber");function fr(e,t){if(!e)return;let n=e.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let r=o-t;return r>0?r:void 0}i(fr,"parseHttpDate");function qe(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=In(On(e,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=On(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=In(u);if(g!==void 0){let T=g*1e3,d=Math.min(T,r);return{type:"header",waitMs:Math.round(d),source:"retry-after-seconds",cappedFromHeader:d!==T}}let y=fr(u,s);if(y!==void 0){let T=Math.min(y,r);return{type:"header",waitMs:Math.round(T),source:"retry-after-date",cappedFromHeader:T!==y}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),f=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*f:0;return{type:"backoff",waitMs:Math.round(f+p),source:"exponential-backoff",attempt:t.attempt}}i(qe,"parseRetryAfter");function Ye(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(Ye,"extractHeadersFromError");import{AsyncLocalStorage as dr}from"node:async_hooks";var $n=new dr,Bn=8,Ln=32;function pr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(pr,"parsePositiveInt");function gr(){let e=de()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:pr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??Bn;return Math.max(1,Math.min(Ln,t))}i(gr,"resolveWorkflowMaxConcurrency");function mr(e,t){return $n.run(e,t)}i(mr,"runWithScopedConfig");function de(){return $n.getStore()}i(de,"getRunScopedConfig");var ue={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Nn={...ue,multimodalSupport:"image-input"},Oe={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},jn={...Oe,multimodalSupport:"image-input"};function Qe(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}i(Qe,"normalizeCapabilityProfile");function V(e){return{...Qe(e)}}i(V,"cloneCapabilityProfile");function hr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(hr,"parseEnvInt");function yr(e){switch(e.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(yr,"shouldLowerAutoReasoningEffort");function et(){return new DOMException("Request aborted","AbortError")}i(et,"abortError");function vr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(et()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(et())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(vr,"waitForRetryDelay");function Kt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Kt,"normalizeHttpStatus");function Fn(e){if(!e||typeof e!="object")return;let t=e;return Kt(t.status)??Kt(t.statusCode)??Kt(t.code)??Fn(t.cause)}i(Fn,"extractHttpStatus");function Kn(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:Kn(t.cause)}i(Kn,"extractErrorCode");function Ze(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(Ze,"getErrorMessage");var H=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;suppressReasoningEffort=!1;setMaxOutputTokensOverride(t){this.maxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=de()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??hr(process.env.KODAX_MAX_OUTPUT_TOKENS);if(o!==void 0)return o;let r=this.getModelDescriptor(t)?.maxOutputTokens;return r!==void 0?r:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(t){let n=this.getModelDescriptor(t)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(t){let n=this.getModelDescriptor(t)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(t){let n=this.getModelDescriptor(t)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,s,a){throw new M(`${this.name} does not support non-streaming fallback`)}isConfigured(){return!!process.env[this.config.apiKeyEnv]}async verifyCredential(t){return{ok:!1,error:"unsupported",strategy:this.config.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider class "${this.name}" does not implement verifyCredential()`}}getModel(){return this.config.model}getAvailableModels(){return this.config.models?.length?[...new Set([this.config.model,...this.config.models.map(t=>t.id)])]:[this.config.model]}getModelDescriptor(t){let n=t??this.config.model,o=this.config.models?.find(r=>r.id===n);if(o)return o;if(n===this.config.model)return{id:this.config.model}}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return V(this.config.capabilityProfile??ue)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Nt(this.config)}getReasoningCapability(t){return this.getConfiguredReasoningCapability(t)}getReasoningProfile(t){return this.getModelDescriptor(t)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase(),s=n.map(u=>u.toLowerCase()).some(u=>o.includes(u)),a=o.includes("parameter")||s;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.map(a=>a.toLowerCase()).some(a=>o.includes(a))?o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported"):!1}shouldFallbackForForcedToolChoiceError(t){let n=Ze(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported"))?!0:this.isServerError(t)}isServerError(t){let n=Fn(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Ze(t);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(t){switch(t){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","none"];case"native-adaptive":return["native-adaptive","none"];case"native-toggle":return["native-toggle","none"];default:return["none"]}}getContextWindow(){return this.getEffectiveContextWindow()}getEffectiveContextWindow(t){let n=this.getModelDescriptor(t)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let t=process.env[this.config.apiKeyEnv];if(!t)throw new Error(`${this.config.apiKeyEnv} not set`);return t}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...t){this.shouldLogStreamDiagnostics()&&console.error(...t)}normalizeReasoning(t){return Je(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=le.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${le.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(l=>l.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",f=a.length>0?a.join(", "):le.join(", ");throw new M(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${f}.`,this.name)}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.effortSource==="explicit"){let s=o?`/${o}`:"";throw new M(`${this.name}${s} does not support reasoning effort "${r}".`,this.name)}if(n.defaultEffort)return{disabled:!1,effort:n.defaultEffort,requestedEffort:r}}if(!t.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(yr(n)){let s=De({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=Ye(t);if(!n)return;let o=qe(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=Ze(t),o=[{regex:/(\d[\d,]*)\s*tokens?.*?(\d[\d,]*)\s*(?:maximum|limit|context)/i,inputGroup:1,limitGroup:2},{regex:/maximum.*?(\d[\d,]*)\s*tokens?.*?requested.*?(\d[\d,]*)/i,inputGroup:2,limitGroup:1},{regex:/exceeds?\s+.*?(\d[\d,]*)\s*.*?(?:limit|max|context|上限).*?(\d[\d,]*)/i,inputGroup:1,limitGroup:2}];for(let r of o){let s=n.match(r.regex);if(s){let a=Number(s[r.inputGroup].replace(/,/g,"")),u=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,u-a-1e3)}}}isContextOverflowError(t){let n=Ze(t);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let f=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,f}catch(f){if(this.isContextOverflowError(f)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(f);if(l){this.maxOutputTokensOverride=l,r?.(c+1,o,0);continue}}if(this.isRateLimitError(f)){if(c===o-1)throw new Pe(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=Ye(f)??{},p=qe(l,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,y=this.classifyRateLimitReason(f);if(s?.({provider:this.name,waitMs:g,reason:y,source:p.source,attempt:c+1,maxAttempts:o}),r?r(c+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${c+1}/${o})...`),n?.aborted||(await vr(g,n),n?.aborted))throw et();continue}if(a&&!u){let l=Ft(f,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let l=Ft(f,a.effort);if(l)throw this.suppressReasoningEffort=!1,new Xe(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(f instanceof Error){if((f.name==="AbortError"||f.name==="APIUserAbortError")&&n?.aborted)throw f.name==="AbortError"?f:new DOMException(f.message||"Request aborted","AbortError");let l=Kn(f);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new M(`${this.name} API error: ${f.message}`,this.name)}throw f}throw new Q("Unexpected end of withRateLimit")}};import Pr from"@anthropic-ai/sdk";import{parse as kr}from"partial-json";function pe(e){if(!e)return{value:{},salvaged:!1};try{let t=JSON.parse(e);return{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!1}}catch{}try{let t=kr(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}i(pe,"parseToolInputWithSalvageTracked");function br(e){return pe(e).value}i(br,"parseToolInputWithSalvage");var Er={max_tokens:"truncated",length:"truncated",model_context_window_exceeded:"truncated",end_turn:"end",stop:"end",stop_sequence:"end",tool_use:"tool",tool_calls:"tool",function_call:"tool",pause_turn:"paused",refusal:"refused",content_filter:"refused"};function Un(e){return e==null?"unknown":Er[e.trim().toLowerCase()]??"unknown"}i(Un,"classifyStopReason");function ge(e){let t=Un(e);return t==="end"||t==="tool"||t==="paused"}i(ge,"isCleanStop");async function me(e){if(e.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let t=e.runners.find(f=>f.strategy===e.strategy);if(!t)return{ok:!1,error:"unsupported",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${e.strategy}" is not implemented for this provider's base class`};if(e.signal?.aborted)return{ok:!1,error:"unknown",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=e.timeoutMs??8e3,r,s=i(f=>{r||(r=f),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(f){return Ut(f,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(me,"runVerifyCredential");function xr(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(xr,"redactKeyMaterial");function Ut(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??"",u;return t.abortCause==="timeout"?u="timeout":t.abortCause==="parent"?u="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?u="unauthorized":o===429?u="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?u="unauthorized":o!==void 0&&o>=500&&o<600?u="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?u="network":/timeout/i.test(r)?u="timeout":u="unknown",{ok:!1,error:u,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(Ut,"classifyVerifyError");function Wt(e,t){let n=e[e.length-1];if(n&&he(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Wt,"insertCacheBoundary");function he(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}i(he,"isCacheBoundary");function zt(e,t){let n=[];for(let o of e){if(he(o)){if(t==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}i(zt,"lowerCacheBoundaries");function Ie(e){return e.filter(t=>!he(t))}i(Ie,"stripCacheBoundaries");import{readFile as _r}from"node:fs/promises";import Tr from"node:path";var Cr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function tt(e,t){return t??Cr[Tr.extname(e).toLowerCase()]??"image/png"}i(tt,"resolveImageMediaType");async function nt(e){return(await _r(e)).toString("base64")}i(nt,"readImageFileAsBase64");async function Wn(e,t){let n=tt(e,t),o=await nt(e);return`data:${n};base64,${o}`}i(Wn,"buildImageDataUrl");var Rr="KodaX",Sr="effort-2025-11-24";function wr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Rr}}i(wr,"getAnthropicCompatDefaultHeaders");function Xt(e,t){if(!e)return t;let n=e.input_tokens!==void 0&&e.input_tokens!==null||e.cache_creation_input_tokens!==void 0&&e.cache_creation_input_tokens!==null||e.cache_read_input_tokens!==void 0&&e.cache_read_input_tokens!==null,o=typeof e.input_tokens=="number"?e.input_tokens:n?0:t?.inputTokens??0,r=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:n?0:t?.cachedWriteTokens??0,s=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:n?0:t?.cachedReadTokens??0,a=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,u=n?o+r+s:t?.inputTokens??0;if(![u,a].some(c=>!Number.isFinite(c)||c<0))return{inputTokens:u,outputTokens:a,totalTokens:u+a,cachedReadTokens:s||void 0,cachedWriteTokens:r||void 0}}i(Xt,"normalizeAnthropicUsage");function Vt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Vt,"isRecord");function Mr(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Mr,"selectAnthropicOutputEffort");function zn(e,t){let n=Mr(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...Vt(r)?r:{},effort:n}}i(zn,"applyAnthropicOutputEffort");function Xn(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...Vt(o)?o:{},effort:t}}i(Xn,"setAnthropicOutputEffort");function Ar(e){let n=e.output_config;return Vt(n)&&typeof n.effort=="string"}i(Ar,"hasAnthropicOutputEffort");var B=class extends H{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=wr(this.config);return new Pr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let s=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&Ar(t)?{"anthropic-beta":Sr}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(u==="zai-glm-5.2"||u==="zai-glm-toggle"||u==="deepseek-v4-anthropic"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="minimax-m3"||u==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(u==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Xn(t,a.effort);return}if(u==="minimax-m3"){t.thinking={type:"adaptive"};return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Xn(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let f=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:f}}}}resolveReasoningProfileBudget(t,n,o,r,s){let u=(n?t.budgetByEffort?.[n]:void 0)??se(this.config,ie(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),f=c!==void 0?Math.min(u,c):u;return ae(f,s)}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"count-tokens",approxTokensSpent:0,run:i(async s=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")},{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({},{signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:i(async s=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return me({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}isPromptCacheDisabled(){let t=de()?.disablePromptCache;return t===!0?!0:t===!1?!1:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}applyCacheControlToSystem(t){if(!t.trim()||this.isPromptCacheDisabled())return t;let n=Wt([{type:"text",text:t}],"system");return zt(n,"attach")}applyCacheControlToTools(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=t.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}applyCacheControlToMessages(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=0,o=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"&&(n+=1,n===2)){o=l;break}if(o===-1)return t;let r=t[o];if(typeof r.content=="string"||r.content.length===0)return t;let s=r.content,u={...s[s.length-1],cache_control:{type:"ephemeral"}},c=[...s.slice(0,-1),u],f=t.slice();return f[o]={...r,content:c},f}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(_=>_==="native-budget"||_==="native-toggle"||_==="native-adaptive"||_==="none"):["none"],T=!!s?.forcedToolName,d=i(_=>{let P={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&T&&(P.tool_choice={type:"tool",name:s.forcedToolName}),_!=="none")if(_==="profile"&&g)this.applyReasoningProfile(P,g,u,c,f);else if(_==="native-budget"){let D=se(this.config,ie(u.effort),u.taskType);P.thinking={type:"enabled",budget_tokens:ae(D,f)}}else _==="native-toggle"?P.thinking={type:"enabled"}:_==="native-adaptive"&&(P.thinking={type:"adaptive"},zn(P,u));return P},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let b=[],k=[],v=[],h,C=null,m="",E="",w="",j="",U="",F="",Y="",ee=!1,R,A=Date.now(),X=Date.now(),oe,Te;for(let _ of y){for(;!oe;)try{let P=d(_);oe=await this.client.messages.create(P,this.buildMessageCreateOptions(P,c,a))}catch(P){if(Te=P,T&&this.shouldFallbackForForcedToolChoiceError(P)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let D=_==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:_==="native-budget"?["budget_tokens","thinking"]:_==="native-toggle"?["thinking"]:_==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(P,...D))throw P;break}if(oe)break}if(!oe)throw Te??new M("All reasoning capability attempts failed without a captured error",this.name);let Ce=Date.now(),ze=0,S=0,$=3e4;for await(let _ of oe){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let P=Date.now(),D=P-Ce;if(D>$&&(ze++,S+=D,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(D/1e3)}s gap before ${_.type}`,{stallCount:ze,totalStallMs:S,eventType:_.type})),Ce=P,_.type==="content_block_start"||_.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),_.type==="content_block_start"){A=Date.now();let x=_.content_block;C=x.type,process.env.KODAX_DEBUG_TOOL_STREAM&&x.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:x.type,id:x.id,name:x.name}),x.type==="thinking"?(E="",w=x.signature??""):x.type==="redacted_thinking"?(C="redacted_thinking",j=x.data??""):x.type==="text"?m="":x.type==="tool_use"&&(U=x.id,F=x.name,Y="")}else if(_.type==="content_block_delta"){A=Date.now();let x=_.delta;x.type==="thinking_delta"?(E+=x.thinking??"",s?.onThinkingDelta?.(x.thinking??"")):x.type==="text_delta"?(m+=x.text??"",s?.onTextDelta?.(x.text??"")):x.type==="input_json_delta"&&(Y+=x.partial_json??"",s?.onToolInputDelta?.(F,x.partial_json??"",U?{toolId:U}:void 0))}else if(_.type==="content_block_stop"){if(A=Date.now(),C==="thinking")E&&(v.push({type:"thinking",thinking:E,signature:w}),s?.onThinkingEnd?.(E));else if(C==="redacted_thinking")j&&v.push({type:"redacted_thinking",data:j}),j="";else if(C==="text")m&&b.push({type:"text",text:m});else if(C==="tool_use")if(!U||!F)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(U),name:JSON.stringify(F),input:Y.slice(0,100)});else{let x=pe(Y);k.push({type:"tool_use",id:U,name:F,input:x.value,...x.salvaged?{_salvaged:!0,_truncated:!0}:{}})}C=null}else if(_.type==="message_stop"){if(ee=!0,A=Date.now(),process.env.KODAX_DEBUG_STREAM){let x=Date.now()-X;this.logStreamDiagnostic(`[Stream] message_stop received after ${x}ms`)}}else if(_.type==="message_delta"){A=Date.now(),h=Xt(_.usage,h);let x=_.delta;x?.stop_reason&&(R=x.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${R}`))}else _.type==="message_start"&&(A=Date.now(),h=Xt(_.message?.usage,h),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!ee){let _=Date.now()-X,P=Date.now()-A;if(a?.aborted){let D=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:_,lastEventAge:P,reason:D,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),new DOMException(D,"AbortError")}if(!R){let D=new Error(`Stream incomplete: message_stop event not received. Duration: ${_}ms, Last event: ${P}ms ago. This may indicate a network disconnection or API timeout.`);throw D.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:_,lastEventAge:P,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),D}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:_,lastEventAge:P,stopReason:R,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length})}let O=ge(R)?k.map(({_truncated:_,...P})=>P):k;return{textBlocks:b,toolBlocks:O,thinkingBlocks:v,usage:h,stopReason:R}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(m=>m==="native-budget"||m==="native-toggle"||m==="native-adaptive"||m==="none"):["none"],T=!!s?.forcedToolName,d=i(m=>{let E={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&T&&(E.tool_choice={type:"tool",name:s.forcedToolName}),m!=="none")if(m==="profile"&&g)this.applyReasoningProfile(E,g,u,c,f);else if(m==="native-budget"){let w=se(this.config,ie(u.effort),u.taskType);E.thinking={type:"enabled",budget_tokens:ae(w,f)}}else m==="native-toggle"?E.thinking={type:"enabled"}:m==="native-adaptive"&&(E.thinking={type:"adaptive"},zn(E,u));return E},"buildRequest"),b,k;for(let m of y){for(;!b;)try{let E=d(m);b=await this.client.messages.create(E,this.buildMessageCreateOptions(E,c,a))}catch(E){if(k=E,T&&this.shouldFallbackForForcedToolChoiceError(E)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let w=m==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:m==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(E,...w))throw E;break}if(b)break}if(!b)throw k??new M("All reasoning capability attempts failed without a captured error",this.name);let v=[],h=[],C=[];for(let m of b.content)m.type==="text"?(v.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(C.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?C.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&h.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:v,toolBlocks:h,thinkingBlocks:C,usage:Xt(b.usage),stopReason:b.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(he(n))throw new M("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name);return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
2
+ import{a as i}from"./chunk-ONUPGMER.js";var Q=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},M=class extends Q{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Pe=class extends Q{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},At=class extends Q{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Xe=class extends M{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Dt=class extends Q{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Ot=32768,Wo=32e3,zo=64e3,Xo=.5;function Se(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(Se,"timeoutSecToMs");function Vo(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(Vo,"parseTimeoutSecEnvMs");function Go(e){if(!e)return;let t={requestTimeoutMs:Se(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Se(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Se(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Se(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Go,"resolveLlmTimeoutConfig");function Ve(e,t){return`${e}/${t??""}`}i(Ve,"capabilityCacheKey");function It(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(It,"narrowReasoningProfile");function Ho(e,t,n){return e[Ve(t,n)]?.rejected??[]}i(Ho,"getRejectedEfforts");function Jo(e,t,n,o,r,s){let a=Ve(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:s}}}i(Jo,"addRejectedEffort");function qo(e,t,n){if(!t)return{};let o={...e};return delete o[Ve(t,n)],o}i(qo,"removeCacheEntry");function Yo(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:u}}return t}i(Yo,"sanitizeCapabilityCache");var Qo=["off","auto","quick","balanced","deep"],le=["auto","none","low","medium","high"],Pn={low:6e3,medium:1e4,high:2e4},Sn=4096,$t=[{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"}],Bt=[{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"}],Zo=[{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 He(e,t={}){return{...er(e),...t,reasoningPreset:e}}i(He,"createReasoningProfileFromPreset");function er(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Bt,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:Bt,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:Bt,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:$t,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:Zo,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:$t,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:$t,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(er,"createBaseReasoningProfileFromPreset");function Nt(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Nt,"getReasoningCapability");function fe(e){return Je(e).enabled}i(fe,"isReasoningEnabled");function Je(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?Ae(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(Je,"normalizeReasoningRequest");function Ae(e){let t=e.trim().toLowerCase();if(!t)throw new Error("Reasoning effort cannot be empty.");if(/\s/.test(t))throw new Error(`Reasoning effort cannot contain whitespace: "${e}".`);return t==="off"?"none":t}i(Ae,"normalizeReasoningEffortValue");function Rn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Rn,"mapLegacyReasoningModeToEffortIntent");function tr(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(tr,"effortToLegacyReasoningMode");function wn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=Ae(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(wn,"parseReasoningEffortEnv");function De(e){let t=wn(e.envEffort),n=[];Re(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Re(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Rn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Re(n,e.modelDefaultEffort??e.capability?.defaultEffort??we(e.capability),"model-default",!1),Re(n,e.providerDefaultEffort,"provider-default",!1),Re(n,e.fallbackEffort??Me(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:or(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Mn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(De,"resolveReasoningEffort");function nr(e){let t=e.currentEffort?Ae(e.currentEffort):void 0;if(t&&An(t,e.capability))return{effectiveEffort:Ge(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??we(e.capability)??Lt(e.capability)??Me(e.capability),o=n&&Ge(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(nr,"resolveReasoningEffortForModelSwitch");function Re(e,t,n,o){if(t===void 0)return;let r=Ae(t);e.push({value:r,source:n,isExplicit:o})}i(Re,"pushEffortCandidate");function or(e,t){let n=e.find(o=>o.value!=="auto");return n?Mn(n.value,t,n.isExplicit):we(t)??Me(t)}i(or,"resolveAutoEffectiveEffort");function Mn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}if(e==="none")return e;if(An(e,t))return Ge(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}i(Mn,"validateReasoningEffort");function Ge(e,t){return t?.effortAliases?.[e]??e}i(Ge,"applyEffortAlias");function An(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=rr(t);return n.length===0?le.includes(e):n.includes(e)||n.includes(Ge(e,t))}i(An,"isSupportedReasoningEffort");function rr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(rr,"getSupportedEffortValues");function we(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(we,"getDefaultPresetValue");function Lt(e){let t=e?.supportedEfforts?.filter(ir).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Lt,"getMiddleVisiblePresetValue");function ir(e){return e.isUserVisible!==!1}i(ir,"isUserVisiblePreset");function Me(e){if(!e||e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return"none";if(!(e.effortStrategy==="anthropic-output-effort"&&e.thinkingStrategy==="anthropic-adaptive"))return"medium"}i(Me,"getFallbackEffortForCapability");function 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 ie(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ie,"effortToThinkingDepth");function se(e,t,n="unknown"){if(t==="off")return 0;let o={...Pn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(se,"resolveThinkingBudget");function ae(e,t,n=Sn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(ae,"clampThinkingBudget");function jt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(jt,"mapDepthToOpenAIReasoningEffort");function Dn(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):Dn(t.cause)}i(Dn,"getStatus");function ar(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(ar,"getMessage");var ur=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],cr=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],lr=["minimal","none","low","medium","high","xhigh","max"];function fr(e,t){for(let n of lr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(fr,"extractRejectedEffort");function Ft(e,t){let n=Dn(e);if(n!==400&&n!==422)return null;let o=ar(e);if(!o)return null;let r=ur.some(u=>o.includes(u)),s=cr.some(u=>o.includes(u));if(!r||!s)return null;let a=fr(o,t);return a?{rejectedEffort:a}:null}i(Ft,"classifyReasoningEffortRejection");function On(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(On,"readHeader");function In(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(In,"parsePositiveNumber");function dr(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(dr,"parseHttpDate");function qe(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=In(On(e,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=On(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=In(u);if(g!==void 0){let C=g*1e3,d=Math.min(C,r);return{type:"header",waitMs:Math.round(d),source:"retry-after-seconds",cappedFromHeader:d!==C}}let h=dr(u,s);if(h!==void 0){let C=Math.min(h,r);return{type:"header",waitMs:Math.round(C),source:"retry-after-date",cappedFromHeader:C!==h}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),f=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*f:0;return{type:"backoff",waitMs:Math.round(f+p),source:"exponential-backoff",attempt:t.attempt}}i(qe,"parseRetryAfter");function Ye(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(Ye,"extractHeadersFromError");import{AsyncLocalStorage as pr}from"node:async_hooks";var $n=new pr,Bn=8,Ln=32;function gr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(gr,"parsePositiveInt");function mr(){let e=de()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:gr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??Bn;return Math.max(1,Math.min(Ln,t))}i(mr,"resolveWorkflowMaxConcurrency");function hr(e,t){return $n.run(e,t)}i(hr,"runWithScopedConfig");function de(){return $n.getStore()}i(de,"getRunScopedConfig");var ue={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Nn={...ue,multimodalSupport:"image-input"},Oe={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},jn={...Oe,multimodalSupport:"image-input"};function Qe(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}i(Qe,"normalizeCapabilityProfile");function V(e){return{...Qe(e)}}i(V,"cloneCapabilityProfile");function yr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(yr,"parseEnvInt");function vr(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(vr,"shouldLowerAutoReasoningEffort");function et(){return new DOMException("Request aborted","AbortError")}i(et,"abortError");function kr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(et()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(et())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(kr,"waitForRetryDelay");function Kt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Kt,"normalizeHttpStatus");function Fn(e){if(!e||typeof e!="object")return;let t=e;return Kt(t.status)??Kt(t.statusCode)??Kt(t.code)??Fn(t.cause)}i(Fn,"extractHttpStatus");function Kn(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:Kn(t.cause)}i(Kn,"extractErrorCode");function Ze(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(Ze,"getErrorMessage");var H=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;suppressReasoningEffort=!1;setMaxOutputTokensOverride(t){this.maxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=de()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??yr(process.env.KODAX_MAX_OUTPUT_TOKENS);if(o!==void 0)return o;let r=this.getModelDescriptor(t)?.maxOutputTokens;return r!==void 0?r:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(t){let n=this.getModelDescriptor(t)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(t){let n=this.getModelDescriptor(t)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(t){let n=this.getModelDescriptor(t)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,s,a){throw new M(`${this.name} does not support non-streaming fallback`)}isConfigured(){return!!process.env[this.config.apiKeyEnv]}async verifyCredential(t){return{ok:!1,error:"unsupported",strategy:this.config.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider class "${this.name}" does not implement verifyCredential()`}}getModel(){return this.config.model}getAvailableModels(){return this.config.models?.length?[...new Set([this.config.model,...this.config.models.map(t=>t.id)])]:[this.config.model]}getModelDescriptor(t){let n=t??this.config.model,o=this.config.models?.find(r=>r.id===n);if(o)return o;if(n===this.config.model)return{id:this.config.model}}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return V(this.config.capabilityProfile??ue)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Nt(this.config)}getReasoningCapability(t){return this.getConfiguredReasoningCapability(t)}getReasoningProfile(t){return this.getModelDescriptor(t)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase(),s=n.map(u=>u.toLowerCase()).some(u=>o.includes(u)),a=o.includes("parameter")||s;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.map(a=>a.toLowerCase()).some(a=>o.includes(a))?o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported"):!1}shouldFallbackForForcedToolChoiceError(t){let n=Ze(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported"))?!0:this.isServerError(t)}isServerError(t){let n=Fn(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Ze(t);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(t){switch(t){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","none"];case"native-adaptive":return["native-adaptive","none"];case"native-toggle":return["native-toggle","none"];default:return["none"]}}getContextWindow(){return this.getEffectiveContextWindow()}getEffectiveContextWindow(t){let n=this.getModelDescriptor(t)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let t=process.env[this.config.apiKeyEnv];if(!t)throw new Error(`${this.config.apiKeyEnv} not set`);return t}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...t){this.shouldLogStreamDiagnostics()&&console.error(...t)}normalizeReasoning(t){return Je(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=le.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${le.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(l=>l.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",f=a.length>0?a.join(", "):le.join(", ");throw new M(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${f}.`,this.name)}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.effortSource==="explicit"){let s=o?`/${o}`:"";throw new M(`${this.name}${s} does not support reasoning effort "${r}".`,this.name)}if(n.defaultEffort)return{disabled:!1,effort:n.defaultEffort,requestedEffort:r}}if(!t.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(vr(n)){let s=De({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=Ye(t);if(!n)return;let o=qe(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=Ze(t),o=[{regex:/(\d[\d,]*)\s*tokens?.*?(\d[\d,]*)\s*(?:maximum|limit|context)/i,inputGroup:1,limitGroup:2},{regex:/maximum.*?(\d[\d,]*)\s*tokens?.*?requested.*?(\d[\d,]*)/i,inputGroup:2,limitGroup:1},{regex:/exceeds?\s+.*?(\d[\d,]*)\s*.*?(?:limit|max|context|上限).*?(\d[\d,]*)/i,inputGroup:1,limitGroup:2}];for(let r of o){let s=n.match(r.regex);if(s){let a=Number(s[r.inputGroup].replace(/,/g,"")),u=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,u-a-1e3)}}}isContextOverflowError(t){let n=Ze(t);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let f=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,f}catch(f){if(this.isContextOverflowError(f)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(f);if(l){this.maxOutputTokensOverride=l,r?.(c+1,o,0);continue}}if(this.isRateLimitError(f)){if(c===o-1)throw new Pe(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=Ye(f)??{},p=qe(l,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,h=this.classifyRateLimitReason(f);if(s?.({provider:this.name,waitMs:g,reason:h,source:p.source,attempt:c+1,maxAttempts:o}),r?r(c+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${c+1}/${o})...`),n?.aborted||(await kr(g,n),n?.aborted))throw et();continue}if(a&&!u){let l=Ft(f,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let l=Ft(f,a.effort);if(l)throw this.suppressReasoningEffort=!1,new Xe(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(f instanceof Error){if((f.name==="AbortError"||f.name==="APIUserAbortError")&&n?.aborted)throw f.name==="AbortError"?f:new DOMException(f.message||"Request aborted","AbortError");let l=Kn(f);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new M(`${this.name} API error: ${f.message}`,this.name)}throw f}throw new Q("Unexpected end of withRateLimit")}};import Sr from"@anthropic-ai/sdk";import{parse as br}from"partial-json";function pe(e){if(!e)return{value:{},salvaged:!1};try{let t=JSON.parse(e);return{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!1}}catch{}try{let t=br(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}i(pe,"parseToolInputWithSalvageTracked");function Er(e){return pe(e).value}i(Er,"parseToolInputWithSalvage");var xr={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 Un(e){return e==null?"unknown":xr[e.trim().toLowerCase()]??"unknown"}i(Un,"classifyStopReason");function ge(e){let t=Un(e);return t==="end"||t==="tool"||t==="paused"}i(ge,"isCleanStop");async function me(e){if(e.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let t=e.runners.find(f=>f.strategy===e.strategy);if(!t)return{ok:!1,error:"unsupported",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${e.strategy}" is not implemented for this provider's base class`};if(e.signal?.aborted)return{ok:!1,error:"unknown",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=e.timeoutMs??8e3,r,s=i(f=>{r||(r=f),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(f){return Ut(f,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(me,"runVerifyCredential");function _r(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(_r,"redactKeyMaterial");function Ut(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=_r(String(n.message??e)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",u;return t.abortCause==="timeout"?u="timeout":t.abortCause==="parent"?u="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?u="unauthorized":o===429?u="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?u="unauthorized":o!==void 0&&o>=500&&o<600?u="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?u="network":/timeout/i.test(r)?u="timeout":u="unknown",{ok:!1,error:u,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(Ut,"classifyVerifyError");function Wt(e,t){let n=e[e.length-1];if(n&&he(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Wt,"insertCacheBoundary");function he(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}i(he,"isCacheBoundary");function zt(e,t){let n=[];for(let o of e){if(he(o)){if(t==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}i(zt,"lowerCacheBoundaries");function Ie(e){return e.filter(t=>!he(t))}i(Ie,"stripCacheBoundaries");import{readFile as Tr}from"node:fs/promises";import Cr from"node:path";var Pr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function tt(e,t){return t??Pr[Cr.extname(e).toLowerCase()]??"image/png"}i(tt,"resolveImageMediaType");async function nt(e){return(await Tr(e)).toString("base64")}i(nt,"readImageFileAsBase64");async function Wn(e,t){let n=tt(e,t),o=await nt(e);return`data:${n};base64,${o}`}i(Wn,"buildImageDataUrl");var Rr="KodaX",wr="effort-2025-11-24";function zn(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(zn,"appendAnthropicEphemeralSuffix");function Mr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Rr}}i(Mr,"getAnthropicCompatDefaultHeaders");function Xt(e,t){if(!e)return t;let n=e.input_tokens!==void 0&&e.input_tokens!==null||e.cache_creation_input_tokens!==void 0&&e.cache_creation_input_tokens!==null||e.cache_read_input_tokens!==void 0&&e.cache_read_input_tokens!==null,o=typeof e.input_tokens=="number"?e.input_tokens:n?0:t?.inputTokens??0,r=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:n?0:t?.cachedWriteTokens??0,s=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:n?0:t?.cachedReadTokens??0,a=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,u=n?o+r+s:t?.inputTokens??0;if(![u,a].some(c=>!Number.isFinite(c)||c<0))return{inputTokens:u,outputTokens:a,totalTokens:u+a,cachedReadTokens:s||void 0,cachedWriteTokens:r||void 0}}i(Xt,"normalizeAnthropicUsage");function Vt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Vt,"isRecord");function Ar(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Ar,"selectAnthropicOutputEffort");function Xn(e,t){let n=Ar(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...Vt(r)?r:{},effort:n}}i(Xn,"applyAnthropicOutputEffort");function Vn(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...Vt(o)?o:{},effort:t}}i(Vn,"setAnthropicOutputEffort");function Dr(e){let n=e.output_config;return Vt(n)&&typeof n.effort=="string"}i(Dr,"hasAnthropicOutputEffort");var N=class extends H{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=Mr(this.config);return new Sr({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&&Dr(t)?{"anthropic-beta":wr}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(u==="zai-glm-5.2"||u==="zai-glm-toggle"||u==="deepseek-v4-anthropic"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="minimax-m3"||u==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(u==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Vn(t,a.effort);return}if(u==="minimax-m3"){t.thinking={type:"adaptive"};return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Vn(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let f=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:f}}}}resolveReasoningProfileBudget(t,n,o,r,s){let u=(n?t.budgetByEffort?.[n]:void 0)??se(this.config,ie(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),f=c!==void 0?Math.min(u,c):u;return ae(f,s)}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"count-tokens",approxTokensSpent:0,run:i(async s=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")},{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({},{signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:i(async s=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return me({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}isPromptCacheDisabled(){let t=de()?.disablePromptCache;return t===!0?!0:t===!1?!1:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}applyCacheControlToSystem(t){if(!t.trim()||this.isPromptCacheDisabled())return t;let n=Wt([{type:"text",text:t}],"system");return zt(n,"attach")}applyCacheControlToTools(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=t.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}applyCacheControlToMessages(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=0,o=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"&&(n+=1,n===2)){o=l;break}if(o===-1)return t;let r=t[o];if(typeof r.content=="string"||r.content.length===0)return t;let s=r.content,u={...s[s.length-1],cache_control:{type:"ephemeral"}},c=[...s.slice(0,-1),u],f=t.slice();return f[o]={...r,content:c},f}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=zn(this.applyCacheControlToMessages(await this.convertMessages(t,c)),s?.ephemeralSuffix?.content),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),h=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(_=>_==="native-budget"||_==="native-toggle"||_==="native-adaptive"||_==="none"):["none"],C=!!s?.forcedToolName,d=i(_=>{let P={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&C&&(P.tool_choice={type:"tool",name:s.forcedToolName}),_!=="none")if(_==="profile"&&g)this.applyReasoningProfile(P,g,u,c,f);else if(_==="native-budget"){let D=se(this.config,ie(u.effort),u.taskType);P.thinking={type:"enabled",budget_tokens:ae(D,f)}}else _==="native-toggle"?P.thinking={type:"enabled"}:_==="native-adaptive"&&(P.thinking={type:"adaptive"},Xn(P,u));return P},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let b=[],v=[],T=[],y,k=null,m="",x="",S="",O="",B="",K="",Y="",ee=!1,R,A=Date.now(),X=Date.now(),oe,Te;for(let _ of h){for(;!oe;)try{let P=d(_);oe=await this.client.messages.create(P,this.buildMessageCreateOptions(P,c,a))}catch(P){if(Te=P,C&&this.shouldFallbackForForcedToolChoiceError(P)){C=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let D=_==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:_==="native-budget"?["budget_tokens","thinking"]:_==="native-toggle"?["thinking"]:_==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(P,...D))throw P;break}if(oe)break}if(!oe)throw Te??new M("All reasoning capability attempts failed without a captured error",this.name);let Ce=Date.now(),ze=0,w=0,L=3e4;for await(let _ of oe){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let P=Date.now(),D=P-Ce;if(D>L&&(ze++,w+=D,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(D/1e3)}s gap before ${_.type}`,{stallCount:ze,totalStallMs:w,eventType:_.type})),Ce=P,_.type==="content_block_start"||_.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),_.type==="content_block_start"){A=Date.now();let E=_.content_block;k=E.type,process.env.KODAX_DEBUG_TOOL_STREAM&&E.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:E.type,id:E.id,name:E.name}),E.type==="thinking"?(x="",S=E.signature??""):E.type==="redacted_thinking"?(k="redacted_thinking",O=E.data??""):E.type==="text"?m="":E.type==="tool_use"&&(B=E.id,K=E.name,Y="")}else if(_.type==="content_block_delta"){A=Date.now();let E=_.delta;E.type==="thinking_delta"?(x+=E.thinking??"",s?.onThinkingDelta?.(E.thinking??"")):E.type==="text_delta"?(m+=E.text??"",s?.onTextDelta?.(E.text??"")):E.type==="input_json_delta"&&(Y+=E.partial_json??"",s?.onToolInputDelta?.(K,E.partial_json??"",B?{toolId:B}:void 0))}else if(_.type==="content_block_stop"){if(A=Date.now(),k==="thinking")x&&(T.push({type:"thinking",thinking:x,signature:S}),s?.onThinkingEnd?.(x));else if(k==="redacted_thinking")O&&T.push({type:"redacted_thinking",data:O}),O="";else if(k==="text")m&&b.push({type:"text",text:m});else if(k==="tool_use")if(!B||!K)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(B),name:JSON.stringify(K),input:Y.slice(0,100)});else{let E=pe(Y);v.push({type:"tool_use",id:B,name:K,input:E.value,...E.salvaged?{_salvaged:!0,_truncated:!0}:{}})}k=null}else if(_.type==="message_stop"){if(ee=!0,A=Date.now(),process.env.KODAX_DEBUG_STREAM){let E=Date.now()-X;this.logStreamDiagnostic(`[Stream] message_stop received after ${E}ms`)}}else if(_.type==="message_delta"){A=Date.now(),y=Xt(_.usage,y);let E=_.delta;E?.stop_reason&&(R=E.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${R}`))}else _.type==="message_start"&&(A=Date.now(),y=Xt(_.message?.usage,y),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!ee){let _=Date.now()-X,P=Date.now()-A;if(a?.aborted){let D=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:_,lastEventAge:P,reason:D,textBlocks:b.length,toolBlocks:v.length,thinkingBlocks:T.length}),new DOMException(D,"AbortError")}if(!R){let D=new Error(`Stream incomplete: message_stop event not received. Duration: ${_}ms, Last event: ${P}ms ago. This may indicate a network disconnection or API timeout.`);throw D.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:_,lastEventAge:P,textBlocks:b.length,toolBlocks:v.length,thinkingBlocks:T.length}),D}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:_,lastEventAge:P,stopReason:R,textBlocks:b.length,toolBlocks:v.length,thinkingBlocks:T.length})}let I=ge(R)?v.map(({_truncated:_,...P})=>P):v;return{textBlocks:b,toolBlocks:I,thinkingBlocks:T,usage:y,stopReason:R}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=zn(this.applyCacheControlToMessages(await this.convertMessages(t,c)),s?.ephemeralSuffix?.content),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),h=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(m=>m==="native-budget"||m==="native-toggle"||m==="native-adaptive"||m==="none"):["none"],C=!!s?.forcedToolName,d=i(m=>{let x={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&C&&(x.tool_choice={type:"tool",name:s.forcedToolName}),m!=="none")if(m==="profile"&&g)this.applyReasoningProfile(x,g,u,c,f);else if(m==="native-budget"){let S=se(this.config,ie(u.effort),u.taskType);x.thinking={type:"enabled",budget_tokens:ae(S,f)}}else m==="native-toggle"?x.thinking={type:"enabled"}:m==="native-adaptive"&&(x.thinking={type:"adaptive"},Xn(x,u));return x},"buildRequest"),b,v;for(let m of h){for(;!b;)try{let x=d(m);b=await this.client.messages.create(x,this.buildMessageCreateOptions(x,c,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=m==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:m==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(x,...S))throw x;break}if(b)break}if(!b)throw v??new M("All reasoning capability attempts failed without a captured error",this.name);let T=[],y=[],k=[];for(let m of b.content)m.type==="text"?(T.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(k.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?k.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&y.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:T,toolBlocks:y,thinkingBlocks:k,usage:Xt(b.usage),stopReason:b.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(he(n))throw new M("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name);return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
3
3
  `)}buildSystemPrompt(t,n){let o=n.filter(r=>r.role==="system").map(r=>this.serializeSystemMessageContent(r.content)).filter(Boolean);return[t,...o].filter(r=>typeof r=="string"&&r.trim().length>0).join(`
4
4
 
5
5
  `)}async convertMessages(t,n){let o=[],r=this.getEffectiveStrictThinkingSignature(n);for(let s of t.filter(a=>a.role!=="system")){let a=s.role==="user"?"user":"assistant";if(typeof s.content=="string"){o.push({role:a,content:s.content});continue}let u=[],c=[];for(let l of s.content)l.type==="thinking"?!r||typeof l.signature=="string"&&l.signature.length>0?u.push({type:"thinking",thinking:l.thinking,signature:l.signature??""}):l.thinking&&c.push(l.thinking):l.type==="redacted_thinking"&&(r||u.push({type:"redacted_thinking",data:l.data}));c.length>0&&s.role==="assistant"&&u.push({type:"text",text:`<prior_reasoning>
6
6
  ${c.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 g=[];for(let y of l.content)y.type==="text"?g.push({type:"text",text:y.text}):y.type==="image"&&g.push({type:"image",source:{type:"base64",media_type:tt(y.path,y.mediaType),data:await nt(y.path)}});p=g}u.push({type:"tool_result",tool_use_id:l.tool_use_id,content:p,...l.is_error===!0?{is_error:!0}:{}})}for(let l of s.content)l.type==="tool_use"&&s.role==="assistant"&&u.push({type:"tool_use",id:l.id,name:l.name,input:l.input});for(let l of s.content)l.type==="text"?u.push({type:"text",text:l.text}):l.type==="image"&&s.role==="user"&&u.push({type:"image",source:{type:"base64",media_type:tt(l.path,l.mediaType),data:await nt(l.path)}});if(a==="assistant"&&this.config.supportsThinking&&!r){let l=u.some(g=>g.type==="tool_use"),p=u.some(g=>g.type==="thinking"||g.type==="redacted_thinking");l&&!p&&u.unshift({type:"thinking",thinking:"...",signature:""})}let f=u.length===0||(a==="assistant"||a==="user")&&u.every(l=>{let p=l;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:f?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=i((o,r)=>{let s=new Set;if(!o||typeof o.content=="string"||!Array.isArray(o.content))return s;for(let a of o.content){let u=a;r==="tool_use"&&u.type==="tool_use"&&u.id&&s.add(u.id),r==="tool_result"&&u.type==="tool_result"&&u.tool_use_id&&s.add(u.tool_use_id)}return s},"collectIds");return t.map((o,r)=>{if(typeof o.content=="string"||!Array.isArray(o.content))return o;let s=o.content;if(o.role==="assistant"){let a=n(t[r+1],"tool_result");s=s.filter(u=>{let c=u;return c.type!=="tool_use"||!!c.id&&a.has(c.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(u=>{let c=u;return c.type!=="tool_result"||!!c.tool_use_id&&a.has(c.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import Dr from"openai";var Or="KodaX";function Ir(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i(Ir,"isOpenAIReasoningAttempt");function $r(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Or}}i($r,"getOpenAICompatDefaultHeaders");function Br(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return jt(ie(e.effort))}}i(Br,"selectOpenAIReasoningEffort");function Vn(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(Vn,"normalizeOpenAIUsage");function Lr(e){return e?e.type==="function"&&"function"in e:!1}i(Lr,"isOpenAIFunctionToolCall");function Nr(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>{if(!t||typeof t!="object")return"";let n=Reflect.get(t,"text");if(typeof n=="string")return n;if(n&&typeof n=="object"){let o=Reflect.get(n,"value");return typeof o=="string"?o:""}return""}).filter(Boolean).join(""):""}i(Nr,"extractOpenAIMessageText");function jr(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(jr,"extractOpenAIMessageReasoning");function ot(e){let t=e.role;return typeof t=="string"?t:void 0}i(ot,"getWireRole");function Fr(e){if(ot(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(Fr,"getAssistantWireToolCalls");function Kr(e){if(ot(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}i(Kr,"getToolWireCallId");function Ur(e,t){let n={...e};return t.length>0?(n.tool_calls=t.map(o=>o.value),n):(delete n.tool_calls,(n.content==null||n.content==="")&&(n.content="..."),n)}i(Ur,"rewriteAssistantWireToolCalls");var W=class extends H{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=$r(this.config);return new Dr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:i(async s=>{await o.chat.completions.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return me({strategy:this.config.verifyStrategy??"models-list",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Ie(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(t,n){let o=[];t&&t.trim().length>0&&o.push(t);let r=[];for(let s of n){if(s.role!=="system"){r.push(s);continue}let a=typeof s.content=="string"?s.content:Array.isArray(s.content)?s.content.filter(u=>typeof u=="object"&&u!==null&&u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
9
+ </prior_reasoning>`});for(let l of s.content)if(l.type==="tool_result"&&s.role==="user"){let p;if(typeof l.content=="string")p=l.content;else{let g=[];for(let h of l.content)h.type==="text"?g.push({type:"text",text:h.text}):h.type==="image"&&g.push({type:"image",source:{type:"base64",media_type:tt(h.path,h.mediaType),data:await nt(h.path)}});p=g}u.push({type:"tool_result",tool_use_id:l.tool_use_id,content:p,...l.is_error===!0?{is_error:!0}:{}})}for(let l of s.content)l.type==="tool_use"&&s.role==="assistant"&&u.push({type:"tool_use",id:l.id,name:l.name,input:l.input});for(let l of s.content)l.type==="text"?u.push({type:"text",text:l.text}):l.type==="image"&&s.role==="user"&&u.push({type:"image",source:{type:"base64",media_type:tt(l.path,l.mediaType),data:await nt(l.path)}});if(a==="assistant"&&this.config.supportsThinking&&!r){let l=u.some(g=>g.type==="tool_use"),p=u.some(g=>g.type==="thinking"||g.type==="redacted_thinking");l&&!p&&u.unshift({type:"thinking",thinking:"...",signature:""})}let f=u.length===0||(a==="assistant"||a==="user")&&u.every(l=>{let p=l;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:f?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=i((o,r)=>{let s=new Set;if(!o||typeof o.content=="string"||!Array.isArray(o.content))return s;for(let a of o.content){let u=a;r==="tool_use"&&u.type==="tool_use"&&u.id&&s.add(u.id),r==="tool_result"&&u.type==="tool_result"&&u.tool_use_id&&s.add(u.tool_use_id)}return s},"collectIds");return t.map((o,r)=>{if(typeof o.content=="string"||!Array.isArray(o.content))return o;let s=o.content;if(o.role==="assistant"){let a=n(t[r+1],"tool_result");s=s.filter(u=>{let c=u;return c.type!=="tool_use"||!!c.id&&a.has(c.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(u=>{let c=u;return c.type!=="tool_result"||!!c.tool_use_id&&a.has(c.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import Or from"openai";var Ir="KodaX";function $r(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i($r,"isOpenAIReasoningAttempt");function Br(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Ir}}i(Br,"getOpenAICompatDefaultHeaders");function Lr(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return jt(ie(e.effort))}}i(Lr,"selectOpenAIReasoningEffort");function Gn(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(Gn,"normalizeOpenAIUsage");function Nr(e){return e?e.type==="function"&&"function"in e:!1}i(Nr,"isOpenAIFunctionToolCall");function jr(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>{if(!t||typeof t!="object")return"";let n=Reflect.get(t,"text");if(typeof n=="string")return n;if(n&&typeof n=="object"){let o=Reflect.get(n,"value");return typeof o=="string"?o:""}return""}).filter(Boolean).join(""):""}i(jr,"extractOpenAIMessageText");function Fr(e){if(!e||typeof e!="object")return"";let t=Reflect.get(e,"reasoning_content");return typeof t=="string"?t:Array.isArray(t)?t.map(n=>typeof n=="string"?n:n&&typeof n=="object"&&"text"in n&&typeof n.text=="string"?n.text:"").join(""):""}i(Fr,"extractOpenAIMessageReasoning");function ot(e){let t=e.role;return typeof t=="string"?t:void 0}i(ot,"getWireRole");function Kr(e){if(ot(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(Kr,"getAssistantWireToolCalls");function Ur(e){if(ot(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}i(Ur,"getToolWireCallId");function Wr(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(Wr,"rewriteAssistantWireToolCalls");var W=class extends H{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=Br(this.config);return new Or({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:i(async s=>{await o.chat.completions.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return me({strategy:this.config.verifyStrategy??"models-list",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Ie(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(t,n){let o=[];t&&t.trim().length>0&&o.push(t);let r=[];for(let s of n){if(s.role!=="system"){r.push(s);continue}let a=typeof s.content=="string"?s.content:Array.isArray(s.content)?s.content.filter(u=>typeof u=="object"&&u!==null&&u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
10
10
  `):"";a.trim().length>0&&o.push(a)}return{system:o.join(`
11
11
 
12
- `),rest:r}}appendExtraBody(t,n){let o=typeof t.extra_body=="object"&&t.extra_body!==null?t.extra_body:{};t.extra_body={...o,...n}}resetReasoningCapabilityParams(t){delete t.reasoning_effort,delete t.thinking;let n=typeof t.extra_body=="object"&&t.extra_body!==null?{...t.extra_body}:void 0;if(n){if(delete n.enable_thinking,delete n.thinking_budget,delete n.thinking,Object.keys(n).length===0){delete t.extra_body;return}t.extra_body=n}}applyReasoningCapability(t,n,o){if(this.suppressReasoningEffort||n==="none")return;let r=t,s=this.getEffectiveMaxOutputTokens(t.model),a=ae(se(this.config,ie(o.effort),o.taskType),s),u=this.getReasoningProfile(t.model);if(u){this.applyReasoningProfile(r,u,o,t.model,a);return}switch(n){case"native-effort":{this.validateExplicitReasoningEffort(o,t.model);let c=Br(o);c&&(r.reasoning_effort=c);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0,thinking_budget:a}):this.name==="zhipu"&&(r.thinking={type:"enabled",budget_tokens:a});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0}):this.name==="zhipu"&&(r.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,s){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(u==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-openai"||u==="zai-glm-5.2"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(c=>c.value==="none")&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let s=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(s,a):s}getFallbackTerms(t){switch(t){case"native-budget":return["thinking_budget","budget_tokens","thinking"];case"native-effort":return["reasoning_effort"];case"native-toggle":return["enable_thinking","thinking"];default:return[]}}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:f}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(f,l)],g=n.map(S=>({type:"function",function:{name:S.name,description:S.description,parameters:S.input_schema}})),y=s?.forcedToolName,T=!!y;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let d=new Map,b="",k="",v,h=!0,C=null,m=Date.now(),E=this.normalizeReasoning(r),w=fe(E)?this.getReasoningCapability(l):"none",j=fe(E)?this.getReasoningFallbackChain(w).filter(Ir):["none"],U={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),stream:!0};y&&T&&(U.tool_choice={type:"function",function:{name:y}});let F,Y;for(let S of j){for(;!F;){let $={...U};h&&($.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams($),this.applyReasoningCapability($,S,E);try{F=await this.client.chat.completions.create($,a?{signal:a}:{})}catch(O){if(Y=O,T&&this.shouldFallbackForForcedToolChoiceError(O)){T=!1,delete U.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(h&&this.shouldFallbackForSpecificReasoningError(O,"stream_options","include_usage")){h=!1;continue}if(!this.shouldFallbackForReasoningError(O,...this.getFallbackTerms(S)))throw O;break}}if(F)break}if(!F)throw Y??new M("All reasoning capability attempts failed without a captured error",this.name);let ee=Date.now(),R=0,A=0,X=3e4;for await(let S of F){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let $=Date.now(),O=$-ee;O>X&&(R++,A+=O,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(O/1e3)}s gap`,{stallCount:R,totalStallMs:A})),ee=$,s?.onHeartbeat?.(),v=Vn(S.usage)??v;let _=S.choices[0],P=_?.delta;if(_?.finish_reason&&(C=_.finish_reason,process.env.KODAX_DEBUG_STREAM)){let x=Date.now()-m;this.logStreamDiagnostic(`[Stream] finish_reason: ${C} after ${x}ms`)}P?.content&&(b+=P.content,s?.onTextDelta?.(P.content));let D=this.extractReasoningDelta(P);if(D&&(k+=D,s?.onThinkingDelta?.(D)),P?.tool_calls)for(let x of P.tool_calls){let re=d.get(x.index)??{id:"",name:"",arguments:""};x.id&&(re.id=x.id),x.function?.name&&(re.name=x.function.name),x.function?.arguments&&(re.arguments+=x.function.arguments,s?.onToolInputDelta?.(re.name,x.function.arguments,re.id?{toolId:re.id}:void 0)),d.set(x.index,re)}}if(!C){let S=Date.now()-m;if(a?.aborted){let O=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:S,reason:O,textContentLength:b.length,toolCallsCount:d.size}),new DOMException(O,"AbortError")}let $=new Error(`Stream incomplete: finish_reason not received. Duration: ${S}ms. This may indicate a network disconnection or API timeout.`);throw $.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:S,textContentLength:b.length,toolCallsCount:d.size}),$}let oe=b?[{type:"text",text:b}]:[],Te=[],Ce=[];k&&(Ce.push({type:"thinking",thinking:k}),s?.onThinkingEnd?.(k));let ze=ge(C??void 0);for(let[,S]of d)if(S.id&&S.name){let $=pe(S.arguments),O=$.salvaged?ze?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Te.push({type:"tool_use",id:S.id,name:S.name,input:$.value,...O})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(S.id),name:JSON.stringify(S.name),argsLength:S.arguments?.length??0});return{textBlocks:oe,toolBlocks:Te,thinkingBlocks:Ce,usage:v,stopReason:C??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:f}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(f,l)],g=n.map(R=>({type:"function",function:{name:R.name,description:R.description,parameters:R.input_schema}})),y=s?.forcedToolName,T=!!y,d=this.normalizeReasoning(r),b=fe(d)?this.getReasoningCapability(l):"none",k=fe(d)?this.getReasoningFallbackChain(b).filter(R=>R==="native-budget"||R==="native-effort"||R==="native-toggle"||R==="none"):["none"],v={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l)};y&&T&&(v.tool_choice={type:"function",function:{name:y}});let h,C;for(let R of k){for(;!h;){let A={...v};this.resetReasoningCapabilityParams(A),this.applyReasoningCapability(A,R,d);try{h=await this.client.chat.completions.create(A,a?{signal:a}:{})}catch(X){if(C=X,T&&this.shouldFallbackForForcedToolChoiceError(X)){T=!1,delete v.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(X,...this.getFallbackTerms(R)))throw X;break}}if(h)break}if(!h)throw C??new M("All reasoning capability attempts failed without a captured error",this.name);let m=h.choices[0],E=m?.message,w=Nr(E?.content),j=jr(E),U=ge(m?.finish_reason??void 0),F=(E?.tool_calls??[]).filter(Lr).map(R=>{let A=pe(R.function.arguments),X=A.salvaged?U?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:R.id,name:R.function.name,input:A.value,...X}});w&&s?.onTextDelta?.(w);let Y=w?[{type:"text",text:w}]:[],ee=[];return j&&(ee.push({type:"thinking",thinking:j}),s?.onThinkingDelta?.(j),s?.onThinkingEnd?.(j)),{textBlocks:Y,toolBlocks:F,thinkingBlocks:ee,usage:Vn(h.usage),stopReason:m?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(t,n){let o=t.filter(l=>l.type==="text").map(l=>l.text).join(`
12
+ `),rest:r}}appendExtraBody(t,n){let o=typeof t.extra_body=="object"&&t.extra_body!==null?t.extra_body:{};t.extra_body={...o,...n}}resetReasoningCapabilityParams(t){delete t.reasoning_effort,delete t.thinking;let n=typeof t.extra_body=="object"&&t.extra_body!==null?{...t.extra_body}:void 0;if(n){if(delete n.enable_thinking,delete n.thinking_budget,delete n.thinking,Object.keys(n).length===0){delete t.extra_body;return}t.extra_body=n}}applyReasoningCapability(t,n,o){if(this.suppressReasoningEffort||n==="none")return;let r=t,s=this.getEffectiveMaxOutputTokens(t.model),a=ae(se(this.config,ie(o.effort),o.taskType),s),u=this.getReasoningProfile(t.model);if(u){this.applyReasoningProfile(r,u,o,t.model,a);return}switch(n){case"native-effort":{this.validateExplicitReasoningEffort(o,t.model);let c=Lr(o);c&&(r.reasoning_effort=c);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0,thinking_budget:a}):this.name==="zhipu"&&(r.thinking={type:"enabled",budget_tokens:a});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0}):this.name==="zhipu"&&(r.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,s){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(u==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-openai"||u==="zai-glm-5.2"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(c=>c.value==="none")&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let s=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(s,a):s}getFallbackTerms(t){switch(t){case"native-budget":return["thinking_budget","budget_tokens","thinking"];case"native-effort":return["reasoning_effort"];case"native-toggle":return["enable_thinking","thinking"];default:return[]}}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:f}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(f,l),...s?.ephemeralSuffix?.content?[{role:"user",content:s.ephemeralSuffix.content}]:[]],g=n.map(w=>({type:"function",function:{name:w.name,description:w.description,parameters:w.input_schema}})),h=s?.forcedToolName,C=!!h;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let d=new Map,b="",v="",T,y=!0,k=null,m=Date.now(),x=this.normalizeReasoning(r),S=fe(x)?this.getReasoningCapability(l):"none",O=fe(x)?this.getReasoningFallbackChain(S).filter($r):["none"],B={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),stream:!0};h&&C&&(B.tool_choice={type:"function",function:{name:h}});let K,Y;for(let w of O){for(;!K;){let L={...B};y&&(L.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(L),this.applyReasoningCapability(L,w,x);try{K=await this.client.chat.completions.create(L,a?{signal:a}:{})}catch(I){if(Y=I,C&&this.shouldFallbackForForcedToolChoiceError(I)){C=!1,delete B.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(y&&this.shouldFallbackForSpecificReasoningError(I,"stream_options","include_usage")){y=!1;continue}if(!this.shouldFallbackForReasoningError(I,...this.getFallbackTerms(w)))throw I;break}}if(K)break}if(!K)throw Y??new M("All reasoning capability attempts failed without a captured error",this.name);let ee=Date.now(),R=0,A=0,X=3e4;for await(let w of K){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let L=Date.now(),I=L-ee;I>X&&(R++,A+=I,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(I/1e3)}s gap`,{stallCount:R,totalStallMs:A})),ee=L,s?.onHeartbeat?.(),T=Gn(w.usage)??T;let _=w.choices[0],P=_?.delta;if(_?.finish_reason&&(k=_.finish_reason,process.env.KODAX_DEBUG_STREAM)){let E=Date.now()-m;this.logStreamDiagnostic(`[Stream] finish_reason: ${k} after ${E}ms`)}P?.content&&(b+=P.content,s?.onTextDelta?.(P.content));let D=this.extractReasoningDelta(P);if(D&&(v+=D,s?.onThinkingDelta?.(D)),P?.tool_calls)for(let E of P.tool_calls){let re=d.get(E.index)??{id:"",name:"",arguments:""};E.id&&(re.id=E.id),E.function?.name&&(re.name=E.function.name),E.function?.arguments&&(re.arguments+=E.function.arguments,s?.onToolInputDelta?.(re.name,E.function.arguments,re.id?{toolId:re.id}:void 0)),d.set(E.index,re)}}if(!k){let w=Date.now()-m;if(a?.aborted){let I=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:w,reason:I,textContentLength:b.length,toolCallsCount:d.size}),new DOMException(I,"AbortError")}let L=new Error(`Stream incomplete: finish_reason not received. Duration: ${w}ms. This may indicate a network disconnection or API timeout.`);throw L.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:w,textContentLength:b.length,toolCallsCount:d.size}),L}let oe=b?[{type:"text",text:b}]:[],Te=[],Ce=[];v&&(Ce.push({type:"thinking",thinking:v}),s?.onThinkingEnd?.(v));let ze=ge(k??void 0);for(let[,w]of d)if(w.id&&w.name){let L=pe(w.arguments),I=L.salvaged?ze?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Te.push({type:"tool_use",id:w.id,name:w.name,input:L.value,...I})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(w.id),name:JSON.stringify(w.name),argsLength:w.arguments?.length??0});return{textBlocks:oe,toolBlocks:Te,thinkingBlocks:Ce,usage:T,stopReason:k??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:f}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(f,l),...s?.ephemeralSuffix?.content?[{role:"user",content:s.ephemeralSuffix.content}]:[]],g=n.map(R=>({type:"function",function:{name:R.name,description:R.description,parameters:R.input_schema}})),h=s?.forcedToolName,C=!!h,d=this.normalizeReasoning(r),b=fe(d)?this.getReasoningCapability(l):"none",v=fe(d)?this.getReasoningFallbackChain(b).filter(R=>R==="native-budget"||R==="native-effort"||R==="native-toggle"||R==="none"):["none"],T={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l)};h&&C&&(T.tool_choice={type:"function",function:{name:h}});let y,k;for(let R of v){for(;!y;){let A={...T};this.resetReasoningCapabilityParams(A),this.applyReasoningCapability(A,R,d);try{y=await this.client.chat.completions.create(A,a?{signal:a}:{})}catch(X){if(k=X,C&&this.shouldFallbackForForcedToolChoiceError(X)){C=!1,delete T.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(X,...this.getFallbackTerms(R)))throw X;break}}if(y)break}if(!y)throw k??new M("All reasoning capability attempts failed without a captured error",this.name);let m=y.choices[0],x=m?.message,S=jr(x?.content),O=Fr(x),B=ge(m?.finish_reason??void 0),K=(x?.tool_calls??[]).filter(Nr).map(R=>{let A=pe(R.function.arguments),X=A.salvaged?B?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:R.id,name:R.function.name,input:A.value,...X}});S&&s?.onTextDelta?.(S);let Y=S?[{type:"text",text:S}]:[],ee=[];return O&&(ee.push({type:"thinking",thinking:O}),s?.onThinkingDelta?.(O),s?.onThinkingEnd?.(O)),{textBlocks:Y,toolBlocks:K,thinkingBlocks:ee,usage:Gn(y.usage),stopReason:m?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(t,n){let o=t.filter(l=>l.type==="text").map(l=>l.text).join(`
13
13
  `),r=t.filter(l=>l.type==="tool_use").map(l=>({id:l.id,type:"function",function:{name:l.name,arguments:JSON.stringify(l.input??{})}})),s=t.filter(l=>l.type==="thinking"||l.type==="redacted_thinking").map(l=>l.type==="thinking"?l.thinking:"").filter(Boolean).join(`
14
14
 
15
15
  `),a=t.some(l=>l.type==="thinking"||l.type==="redacted_thinking"),u=t.some(l=>l.type==="text");if(!o&&r.length===0&&!a&&!u)return[];let c;o?c=o:r.length>0?c=null:c="...";let f={role:"assistant",content:c};return r.length>0&&(f.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(f.reasoning_content=s||""),[f]}async serializeUserMessage(t){let n=[],o=t.filter(a=>a.type==="text").map(a=>a.text).join(`
16
16
  `),r=t.filter(a=>a.type==="image");for(let a of t)if(a.type==="tool_result"){let u;typeof a.content=="string"?u=a.content:u=a.content.map(c=>c.type==="text"?c.text:`[Image at ${c.path}${c.mediaType?` (${c.mediaType})`:""}] (provider does not support image content in tool_result; if the image was previously visible to you in the conversation, refer to it directly via native vision)`).join(`
17
17
  `),n.push({role:"tool",tool_call_id:a.tool_use_id,content:u})}if(r.length===0)return o&&n.push({role:"user",content:o}),n;let s=[];o&&s.push({type:"text",text:o});for(let a of r)s.push({type:"image_url",image_url:{url:await Wn(a.path,a.mediaType)}});return n.push({role:"user",content:s}),n}serializeSystemMessage(t){if(typeof t=="string")return[{role:"system",content:t}];let n=t.filter(o=>o.type==="text").map(o=>o.text).join(`
18
- `);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[];for(let r of t){if(r.role==="system"){o.push(...this.serializeSystemMessage(r.content));continue}if(typeof r.content=="string"){o.push({role:r.role,content:r.content});continue}if(r.role==="assistant"){o.push(...this.serializeAssistantMessage(r.content,n));continue}o.push(...await this.serializeUserMessage(r.content))}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=[],o=0;for(;o<t.length;){let r=t[o],s=Fr(r);if(s===void 0){ot(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(g=>g.id)),u=new Set,c=[],f=o+1;for(;f<t.length&&ot(t[f])==="tool";){let g=t[f],y=Kr(g);y!==void 0&&a.has(y)&&!u.has(y)&&(u.add(y),c.push(g)),f+=1}let l=s.filter(g=>u.has(g.id)),p=l.length===s.length&&s.length>0?r:Ur(r,l);n.push(p),l.length>0&&n.push(...c),o=f}return n}};import{spawn as Gr}from"node:child_process";import{Readable as Hr,Writable as Jr}from"node:stream";import it from"node:process";import{ClientSideConnection as qr,PROTOCOL_VERSION as Yr,ndJsonStream as Qr}from"@agentclientprotocol/sdk";import{spawn as Wr,spawnSync as Qn}from"node:child_process";var Jt=2e3,G=2e3;function Ht(e){return e.exitCode!==null||e.signalCode!==null}i(Ht,"isExited");function $e(e,t){return Ht(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=i(u=>{o||(o=!0,clearTimeout(a),e.off("exit",s),e.off("error",s),n(u))},"finish"),s=i(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),t);a.unref?.(),e.once("exit",s),e.once("error",s)})}i($e,"waitForExit");function Gn(e){return new Promise(t=>{let n=Wr("taskkill",["/pid",String(e),"/t","/f"],{stdio:"ignore",windowsHide:!0}),o=!1,r=i(()=>{o||(o=!0,clearTimeout(s),t())},"finish"),s=setTimeout(()=>{try{n.kill()}catch{}r()},Jt);s.unref?.(),n.once("exit",r),n.once("error",r)})}i(Gn,"runTaskkill");function Hn(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}i(Hn,"signalPosixPidTree");function J(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}i(J,"signalTargetExists");function Jn(e){return J(-e)||J(e)}i(Jn,"isPosixPidTreeAlive");async function qn(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Jn(e))return!0;await new Promise(o=>setTimeout(o,50))}return!Jn(e)}i(qn,"waitForPosixPidTreeExit");async function zr(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!J(e))return!0;await new Promise(o=>setTimeout(o,50))}return!J(e)}i(zr,"waitForWindowsPidExit");async function Gt(e,t){let n=[...new Set(e.filter(r=>Number.isFinite(r)&&r>0))];if(n.length===0)return!0;let o=Date.now()+t;for(;Date.now()<o;){if(n.every(r=>!J(r)))return!0;await new Promise(r=>setTimeout(r,50))}return n.every(r=>!J(r))}i(Gt,"waitForWindowsPidsExit");function Yn(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(Yn,"readWindowsPidListJson");function Xr(e){let t=Qn("wmic",["process","where",`ParentProcessId=${e}`,"get","ProcessId","/format:list"],{encoding:"utf8",timeout:Jt,windowsHide:!0});if(t.error||t.status!==0)return[];let n=[],o=/ProcessId=(\d+)/g,r;for(;(r=o.exec(t.stdout))!==null;){let s=Number(r[1]);Number.isFinite(s)&&s>0&&s!==e&&n.push(s)}return n}i(Xr,"getWindowsChildPidsViaWmic");function Vr(e){let t=[`$children = Get-CimInstance Win32_Process -Filter "ParentProcessId = ${e}"`,"if ($null -eq $children) { exit 0 }","$children | Select-Object -ExpandProperty ProcessId | ConvertTo-Json -Compress"].join("; "),n=Qn("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:Jt,windowsHide:!0});if(!n.error&&n.status===0){let r=Yn(n.stdout);if(r.length>0)return r}let o=Yn(n.stdout);return o.length>0?o:Xr(e)}i(Vr,"getWindowsChildPids");function Zn(e,t=new Set){let n=[];for(let o of Vr(e))t.has(o)||(t.add(o),n.push(o),n.push(...Zn(o,t)));return n}i(Zn,"collectWindowsDescendantPids");async function rt(e,t){try{process.kill(e,t)}catch{return!J(e)}return zr(e,G)}i(rt,"killWindowsPid");async function Be(e){if(process.platform==="win32"&&e.pid!==void 0){let t=Zn(e.pid),n=[...t].reverse(),o=[e.pid,...t];Ht(e)||await Gn(e.pid);for(let r of n)J(r)&&await Gn(r);if(await Gt(o,G)){await $e(e,G);return}for(let r of n)J(r)&&await rt(r,"SIGTERM");if(await rt(e.pid,"SIGTERM"),await Gt(o,G)){await $e(e,G);return}for(let r of n)J(r)&&await rt(r,"SIGKILL");await rt(e.pid,"SIGKILL"),await Gt(o,G),await $e(e,G);return}if(e.pid!==void 0&&process.platform!=="win32"){if(!Hn(e.pid,"SIGTERM")||await qn(e.pid,G))return;Hn(e.pid,"SIGKILL"),await qn(e.pid,G);return}if(!Ht(e)){try{e.kill("SIGTERM")}catch{return}if(!await $e(e,G)){try{e.kill("SIGKILL")}catch{}await $e(e,G)}}}i(Be,"killChildProcessTree");var st=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=it.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Gr(s,this.options.args??[],{cwd:this.options.cwd??it.cwd(),stdio:["pipe","pipe","inherit"],detached:it.platform!=="win32"}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=Jr.toWeb(this.agentProcess.stdin),t=Hr.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=Qr(n,t);this.client=new qr(()=>({sessionUpdate:i(async r=>{this.options.onSessionUpdate?.(r)},"sessionUpdate"),requestPermission:i(async r=>{let s=r.options??[],a=s.find(u=>u.kind==="allow_once"||u.kind==="allow_always")??s[0];return a?{outcome:{outcome:"selected",optionId:a.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),o),await this.client.initialize({protocolVersion:Yr,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}})}async createNewSession(){if(!this.client)throw new Error("Client not connected");return(await this.client.newSession({cwd:this.options.cwd??it.cwd(),mcpServers:[]})).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");let s={sessionId:n,prompt:[{type:"text",text:t}]};r?.model&&(s.model=r.model),r?.reasoningEffort&&(s.effort=r.reasoningEffort);let a=this.client.prompt(s);if(o){let u=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{})},"onAbort");o.addEventListener("abort",u),a=a.finally(()=>{o.removeEventListener("abort",u)})}return await a}disconnect(){this.agentProcess&&Be(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}};function Zr(e){if(!e||typeof e!="object")return;let t=e,n=typeof t.inputTokens=="number"?t.inputTokens:0,o=typeof t.outputTokens=="number"?t.outputTokens:0,r=typeof t.totalTokens=="number"?t.totalTokens:n+o;if(![n,o,r].some(s=>!Number.isFinite(s)||s<0)&&!(r<n||r<o))return{inputTokens:n,outputTokens:o,totalTokens:r,cachedReadTokens:typeof t.cachedReadTokens=="number"?t.cachedReadTokens:void 0,cachedWriteTokens:typeof t.cachedWriteTokens=="number"?t.cachedWriteTokens:void 0,thoughtTokens:typeof t.thoughtTokens=="number"?t.thoughtTokens:void 0}}i(Zr,"normalizeAcpUsage");function ei(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(ei,"selectAcpReasoningEffort");var ye=class extends H{static{i(this,"KodaXAcpProvider")}_client=null;_sessionMap=new Map;_activeStreams=new Map;isConfigured(){return!0}async verifyCredential(){return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`CLI-bridge provider "${this.name}" manages credentials in its CLI binary's token store; not verifiable from the KodaX SDK`}}getCapabilityProfile(){return V(Oe)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Ie(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let u=this.normalizeReasoning(r),c=ei(u);if(t=this.stripCacheBoundariesFromMessages(t),this.acpClientOptions.executor&&typeof this.acpClientOptions.executor.isInstalled=="function"&&!await this.acpClientOptions.executor.isInstalled())throw new Error(`${this.name} requires a local CLI environment, but the CLI was not found or is not configured correctly.`);let f=[],l=[],p=t[t.length-1],g="";if(p&&typeof p.content=="string")g=p.content;else if(p&&Array.isArray(p.content)){let v=[];for(let h of p.content)if(h.type==="text")v.push(h.text);else if(h.type==="image"){let C=this.serializeImageBlockToPromptToken(h);C&&v.push(C)}g=v.join(`
19
- `)}let y={...this.acpClientOptions,onSessionUpdate:i(v=>{let h=v.update,C=v.sessionId;if(!("sessionUpdate"in h))return;let m=C?this._activeStreams.get(C):void 0;if(m)switch(h.sessionUpdate){case"agent_message_chunk":if(h.content?.type==="text"){let E=h.content.text;m.output.text+=E,m.streamOptions?.onTextDelta?.(E)}break;case"tool_call":{let E="{}",w=h.arguments??h.parameters;w&&(E=typeof w=="string"?w:JSON.stringify(w)),m.streamOptions?.onToolInputDelta?.(h.title,E);let j=`
20
- > [Tool Use] ${h.title}: ${E}
21
- `;m.output.text+=j,m.streamOptions?.onTextDelta?.(j);break}case"tool_call_update":if(h.status){let E=`> [Tool Result] ${h.status}
18
+ `);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[];for(let r of t){if(r.role==="system"){o.push(...this.serializeSystemMessage(r.content));continue}if(typeof r.content=="string"){o.push({role:r.role,content:r.content});continue}if(r.role==="assistant"){o.push(...this.serializeAssistantMessage(r.content,n));continue}o.push(...await this.serializeUserMessage(r.content))}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=[],o=0;for(;o<t.length;){let r=t[o],s=Kr(r);if(s===void 0){ot(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(g=>g.id)),u=new Set,c=[],f=o+1;for(;f<t.length&&ot(t[f])==="tool";){let g=t[f],h=Ur(g);h!==void 0&&a.has(h)&&!u.has(h)&&(u.add(h),c.push(g)),f+=1}let l=s.filter(g=>u.has(g.id)),p=l.length===s.length&&s.length>0?r:Wr(r,l);n.push(p),l.length>0&&n.push(...c),o=f}return n}};import{spawn as Hr}from"node:child_process";import{Readable as Jr,Writable as qr}from"node:stream";import it from"node:process";import{ClientSideConnection as Yr,PROTOCOL_VERSION as Qr,ndJsonStream as Zr}from"@agentclientprotocol/sdk";import{spawn as zr,spawnSync as Zn}from"node:child_process";var Jt=2e3,G=2e3;function Ht(e){return e.exitCode!==null||e.signalCode!==null}i(Ht,"isExited");function $e(e,t){return Ht(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=i(u=>{o||(o=!0,clearTimeout(a),e.off("exit",s),e.off("error",s),n(u))},"finish"),s=i(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),t);a.unref?.(),e.once("exit",s),e.once("error",s)})}i($e,"waitForExit");function Hn(e){return new Promise(t=>{let n=zr("taskkill",["/pid",String(e),"/t","/f"],{stdio:"ignore",windowsHide:!0}),o=!1,r=i(()=>{o||(o=!0,clearTimeout(s),t())},"finish"),s=setTimeout(()=>{try{n.kill()}catch{}r()},Jt);s.unref?.(),n.once("exit",r),n.once("error",r)})}i(Hn,"runTaskkill");function Jn(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}i(Jn,"signalPosixPidTree");function J(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}i(J,"signalTargetExists");function qn(e){return J(-e)||J(e)}i(qn,"isPosixPidTreeAlive");async function Yn(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!qn(e))return!0;await new Promise(o=>setTimeout(o,50))}return!qn(e)}i(Yn,"waitForPosixPidTreeExit");async function Xr(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!J(e))return!0;await new Promise(o=>setTimeout(o,50))}return!J(e)}i(Xr,"waitForWindowsPidExit");async function Gt(e,t){let n=[...new Set(e.filter(r=>Number.isFinite(r)&&r>0))];if(n.length===0)return!0;let o=Date.now()+t;for(;Date.now()<o;){if(n.every(r=>!J(r)))return!0;await new Promise(r=>setTimeout(r,50))}return n.every(r=>!J(r))}i(Gt,"waitForWindowsPidsExit");function Qn(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(Qn,"readWindowsPidListJson");function Vr(e){let t=Zn("wmic",["process","where",`ParentProcessId=${e}`,"get","ProcessId","/format:list"],{encoding:"utf8",timeout:Jt,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(Vr,"getWindowsChildPidsViaWmic");function Gr(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=Zn("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:Jt,windowsHide:!0});if(!n.error&&n.status===0){let r=Qn(n.stdout);if(r.length>0)return r}let o=Qn(n.stdout);return o.length>0?o:Vr(e)}i(Gr,"getWindowsChildPids");function eo(e,t=new Set){let n=[];for(let o of Gr(e))t.has(o)||(t.add(o),n.push(o),n.push(...eo(o,t)));return n}i(eo,"collectWindowsDescendantPids");async function rt(e,t){try{process.kill(e,t)}catch{return!J(e)}return Xr(e,G)}i(rt,"killWindowsPid");async function Be(e){if(process.platform==="win32"&&e.pid!==void 0){let t=eo(e.pid),n=[...t].reverse(),o=[e.pid,...t];Ht(e)||await Hn(e.pid);for(let r of n)J(r)&&await Hn(r);if(await Gt(o,G)){await $e(e,G);return}for(let r of n)J(r)&&await rt(r,"SIGTERM");if(await rt(e.pid,"SIGTERM"),await Gt(o,G)){await $e(e,G);return}for(let r of n)J(r)&&await rt(r,"SIGKILL");await rt(e.pid,"SIGKILL"),await Gt(o,G),await $e(e,G);return}if(e.pid!==void 0&&process.platform!=="win32"){if(!Jn(e.pid,"SIGTERM")||await Yn(e.pid,G))return;Jn(e.pid,"SIGKILL"),await Yn(e.pid,G);return}if(!Ht(e)){try{e.kill("SIGTERM")}catch{return}if(!await $e(e,G)){try{e.kill("SIGKILL")}catch{}await $e(e,G)}}}i(Be,"killChildProcessTree");var st=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=it.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Hr(s,this.options.args??[],{cwd:this.options.cwd??it.cwd(),stdio:["pipe","pipe","inherit"],detached:it.platform!=="win32"}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=qr.toWeb(this.agentProcess.stdin),t=Jr.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=Zr(n,t);this.client=new Yr(()=>({sessionUpdate:i(async r=>{this.options.onSessionUpdate?.(r)},"sessionUpdate"),requestPermission:i(async r=>{let s=r.options??[],a=s.find(u=>u.kind==="allow_once"||u.kind==="allow_always")??s[0];return a?{outcome:{outcome:"selected",optionId:a.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),o),await this.client.initialize({protocolVersion:Qr,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}})}async createNewSession(){if(!this.client)throw new Error("Client not connected");return(await this.client.newSession({cwd:this.options.cwd??it.cwd(),mcpServers:[]})).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");let s={sessionId:n,prompt:[{type:"text",text:t}]};r?.model&&(s.model=r.model),r?.reasoningEffort&&(s.effort=r.reasoningEffort);let a=this.client.prompt(s);if(o){let u=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{})},"onAbort");o.addEventListener("abort",u),a=a.finally(()=>{o.removeEventListener("abort",u)})}return await a}disconnect(){this.agentProcess&&Be(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}};function ei(e){if(!e||typeof e!="object")return;let t=e,n=typeof t.inputTokens=="number"?t.inputTokens:0,o=typeof t.outputTokens=="number"?t.outputTokens:0,r=typeof t.totalTokens=="number"?t.totalTokens:n+o;if(![n,o,r].some(s=>!Number.isFinite(s)||s<0)&&!(r<n||r<o))return{inputTokens:n,outputTokens:o,totalTokens:r,cachedReadTokens:typeof t.cachedReadTokens=="number"?t.cachedReadTokens:void 0,cachedWriteTokens:typeof t.cachedWriteTokens=="number"?t.cachedWriteTokens:void 0,thoughtTokens:typeof t.thoughtTokens=="number"?t.thoughtTokens:void 0}}i(ei,"normalizeAcpUsage");function ti(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(ti,"selectAcpReasoningEffort");var ye=class extends H{static{i(this,"KodaXAcpProvider")}_client=null;_sessionMap=new Map;_activeStreams=new Map;isConfigured(){return!0}async verifyCredential(){return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`CLI-bridge provider "${this.name}" manages credentials in its CLI binary's token store; not verifiable from the KodaX SDK`}}getCapabilityProfile(){return V(Oe)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Ie(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let u=this.normalizeReasoning(r),c=ti(u);if(t=this.stripCacheBoundariesFromMessages(t),this.acpClientOptions.executor&&typeof this.acpClientOptions.executor.isInstalled=="function"&&!await this.acpClientOptions.executor.isInstalled())throw new Error(`${this.name} requires a local CLI environment, but the CLI was not found or is not configured correctly.`);let f=[],l=[],p=t[t.length-1],g="";if(p&&typeof p.content=="string")g=p.content;else if(p&&Array.isArray(p.content)){let y=[];for(let k of p.content)if(k.type==="text")y.push(k.text);else if(k.type==="image"){let m=this.serializeImageBlockToPromptToken(k);m&&y.push(m)}g=y.join(`
19
+ `)}let h=s?.ephemeralSuffix?.content;h&&(g=g.length>0?`${g}
22
20
 
23
- `;m.output.text+=E,m.streamOptions?.onTextDelta?.(E)}break}},"onSessionUpdate")},T=s?.sessionId??"default";this._client||(this._client=new st(y),await this._client.connect());let d=this._sessionMap.get(T);d||(d=await this._client.createNewSession(),this._sessionMap.set(T,d));let b={text:""};this._activeStreams.set(d,{streamOptions:s,output:b});let k;try{k=await this._client.prompt(g,d,a,{model:s?.modelOverride,reasoningEffort:c})}catch(v){if(!(v instanceof Error&&v.name==="AbortError"))throw v}finally{this._activeStreams.delete(d)}return b.text&&f.push({type:"text",text:b.text}),{textBlocks:f,toolBlocks:l,thinkingBlocks:[],usage:Zr(k?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as ti}from"node:child_process";import at from"node:process";var ve=class{static{i(this,"CLIExecutor")}config;_installedCache=null;constructor(t){this.config=t}async isInstalled(){return this._installedCache!==null?this._installedCache:(this._installedCache=await this.checkInstalled(),this._installedCache)}async*execute(t){let n=this.buildArgs(t),o={...at.env,...this.config.env},s=at.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=ti(s,n,{cwd:this.config.cwd??at.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:at.platform!=="win32"}),u="";a.stderr?.on("data",l=>{u+=l.toString()});let c=!1,f=i(()=>{c||Be(a)},"abortHandler");t.signal?.addEventListener("abort",f),a.on("exit",()=>{c=!0});try{yield*this.parseOutputStream(a.stdout,t.signal),u.trim()&&console.error(`[CLIExecutor] stderr: ${u.trim()}`)}finally{t.signal?.removeEventListener("abort",f),c||await Be(a)}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
24
- `);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let u=this.parseLine(a.trim());u&&(yield u)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as ni}from"node:child_process";import oi from"node:process";async function ut(e){try{let t=oi.platform==="win32",n=ni(t?`${e}.cmd`:e,["--version"]);return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}i(ut,"checkCliCommandInstalled");var ct=class extends ve{static{i(this,"GeminiCLIExecutor")}model;constructor(t){super({command:"gemini",baseArgs:["--output-format","stream-json","--approval-mode","yolo"],timeout:3e5,...t}),this.model=t?.model??"gemini-2.5-pro"}async checkInstalled(){return ut("gemini")}buildArgs(t){let n=["-m",t.model??this.model];return t.sessionId?(n.push("-r",t.sessionId),n.push(t.prompt)):n.push("-p",t.prompt),[...n,...this.config.baseArgs]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=t.timestamp?Date.parse(t.timestamp):Date.now();switch(t.type){case"init":return{type:"session_start",timestamp:n,sessionId:t.session_id??"",model:t.model??this.model,raw:t};case"message":return{type:"message",timestamp:n,role:t.role,content:t.content??"",delta:t.delta,raw:t};case"tool_use":return{type:"tool_use",timestamp:n,toolId:t.tool_id??"",toolName:t.tool_name??"",parameters:t.parameters??{},raw:t};case"tool_result":return{type:"tool_result",timestamp:n,toolId:t.tool_id??"",status:t.status==="success"?"success":"error",output:t.output??"",raw:t};case"error":return{type:"error",timestamp:n,errorType:"error",message:t.message??"Unknown error",raw:t};case"result":return{type:"complete",timestamp:n,status:t.status==="success"?"success":"failed",usage:t.stats?{inputTokens:t.stats.input_tokens??0,outputTokens:t.stats.output_tokens??0,totalTokens:t.stats.total_tokens??0}:void 0,raw:t};default:return null}}};import{TransformStream as eo}from"node:stream/web";import{randomUUID as qt}from"node:crypto";function lt(e){let t=new eo,n=new eo,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,u="",c=qt(),f=new AbortController,l=new Map;(async()=>{try{for(;;){let{done:d,value:b}=await o.read();if(d)break;u+=s.decode(b,{stream:!0});let k=u.split(`
25
- `);u=k.pop()??"";for(let v of k)if(v.trim())try{let h=JSON.parse(v);g(h).catch(C=>{console.error("[PseudoAcpServer] Failed to handle request:",C)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",v)}}}catch(d){console.error("[PseudoAcpServer] Stream read error:",d)}})();let p=i(async d=>{let b=JSON.stringify(d)+`
26
- `;await r.write(a.encode(b))},"sendMsg");async function g(d){if(d.method==="initialize")await p({jsonrpc:"2.0",id:d.id,result:{protocolVersion:d.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(d.method==="session/new"||d.method==="sessions/new")c=d.params?.sessionId??qt(),await p({jsonrpc:"2.0",id:d.id,result:{sessionId:c}});else if(d.method==="session/prompt"||d.method==="chat/prompt"){let b=new AbortController,k=d.params.sessionId;l.set(k,b);let v=i(()=>b.abort(),"onGlobalAbort");f.signal.addEventListener("abort",v);let C=await y(k,d.params.prompt,typeof d.params.model=="string"?d.params.model:void 0,typeof d.params.effort=="string"?d.params.effort:void 0,b.signal).finally(()=>{l.delete(k),f.signal.removeEventListener("abort",v)});await p({jsonrpc:"2.0",id:d.id,result:C.usage?{stopReason:C.stopReason,usage:C.usage}:{stopReason:C.stopReason}})}else if(d.method==="session/cancel"||d.method==="chat/cancel"){let b=l.get(d.params.sessionId);b&&b.abort(),d.id!==void 0&&await p({jsonrpc:"2.0",id:d.id,result:{}})}else d.id!==void 0&&await p({jsonrpc:"2.0",id:d.id,result:{}})}i(g,"handleRequest");let y=i(async(d,b,k,v,h)=>{let C=b.find(m=>m.type==="text")?.text??"";try{let m=e.execute({prompt:C,model:k,reasoningEffort:v,sessionId:d==="default"?void 0:d,signal:h});for await(let E of m){let w=T(E);if(w&&await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:w}}),E.type==="complete")return{stopReason:h.aborted?"cancelled":"end_turn",usage:E.usage}}return{stopReason:h.aborted?"cancelled":"end_turn"}}catch(m){return h.aborted||m instanceof Error&&m.name==="AbortError"?{stopReason:"cancelled"}:(console.error("[PseudoAcpServer] Error executing prompt:",m),await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
21
+ ${h}`:h);let C={...this.acpClientOptions,onSessionUpdate:i(y=>{let k=y.update,m=y.sessionId;if(!("sessionUpdate"in k))return;let x=m?this._activeStreams.get(m):void 0;if(x)switch(k.sessionUpdate){case"agent_message_chunk":if(k.content?.type==="text"){let S=k.content.text;x.output.text+=S,x.streamOptions?.onTextDelta?.(S)}break;case"tool_call":{let S="{}",O=k.arguments??k.parameters;O&&(S=typeof O=="string"?O:JSON.stringify(O)),x.streamOptions?.onToolInputDelta?.(k.title,S);let B=`
22
+ > [Tool Use] ${k.title}: ${S}
23
+ `;x.output.text+=B,x.streamOptions?.onTextDelta?.(B);break}case"tool_call_update":if(k.status){let S=`> [Tool Result] ${k.status}
24
+
25
+ `;x.output.text+=S,x.streamOptions?.onTextDelta?.(S)}break}},"onSessionUpdate")},d=s?.sessionId??"default";this._client||(this._client=new st(C),await this._client.connect());let b=this._sessionMap.get(d);b||(b=await this._client.createNewSession(),this._sessionMap.set(d,b));let v={text:""};this._activeStreams.set(b,{streamOptions:s,output:v});let T;try{T=await this._client.prompt(g,b,a,{model:s?.modelOverride,reasoningEffort:c})}catch(y){if(!(y instanceof Error&&y.name==="AbortError"))throw y}finally{this._activeStreams.delete(b)}return v.text&&f.push({type:"text",text:v.text}),{textBlocks:f,toolBlocks:l,thinkingBlocks:[],usage:ei(T?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as ni}from"node:child_process";import at from"node:process";var ve=class{static{i(this,"CLIExecutor")}config;_installedCache=null;constructor(t){this.config=t}async isInstalled(){return this._installedCache!==null?this._installedCache:(this._installedCache=await this.checkInstalled(),this._installedCache)}async*execute(t){let n=this.buildArgs(t),o={...at.env,...this.config.env},s=at.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=ni(s,n,{cwd:this.config.cwd??at.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:at.platform!=="win32"}),u="";a.stderr?.on("data",l=>{u+=l.toString()});let c=!1,f=i(()=>{c||Be(a)},"abortHandler");t.signal?.addEventListener("abort",f),a.on("exit",()=>{c=!0});try{yield*this.parseOutputStream(a.stdout,t.signal),u.trim()&&console.error(`[CLIExecutor] stderr: ${u.trim()}`)}finally{t.signal?.removeEventListener("abort",f),c||await Be(a)}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
26
+ `);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let u=this.parseLine(a.trim());u&&(yield u)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as oi}from"node:child_process";import ri from"node:process";async function ut(e){try{let t=ri.platform==="win32",n=oi(t?`${e}.cmd`:e,["--version"]);return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}i(ut,"checkCliCommandInstalled");var ct=class extends ve{static{i(this,"GeminiCLIExecutor")}model;constructor(t){super({command:"gemini",baseArgs:["--output-format","stream-json","--approval-mode","yolo"],timeout:3e5,...t}),this.model=t?.model??"gemini-2.5-pro"}async checkInstalled(){return ut("gemini")}buildArgs(t){let n=["-m",t.model??this.model];return t.sessionId?(n.push("-r",t.sessionId),n.push(t.prompt)):n.push("-p",t.prompt),[...n,...this.config.baseArgs]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=t.timestamp?Date.parse(t.timestamp):Date.now();switch(t.type){case"init":return{type:"session_start",timestamp:n,sessionId:t.session_id??"",model:t.model??this.model,raw:t};case"message":return{type:"message",timestamp:n,role:t.role,content:t.content??"",delta:t.delta,raw:t};case"tool_use":return{type:"tool_use",timestamp:n,toolId:t.tool_id??"",toolName:t.tool_name??"",parameters:t.parameters??{},raw:t};case"tool_result":return{type:"tool_result",timestamp:n,toolId:t.tool_id??"",status:t.status==="success"?"success":"error",output:t.output??"",raw:t};case"error":return{type:"error",timestamp:n,errorType:"error",message:t.message??"Unknown error",raw:t};case"result":return{type:"complete",timestamp:n,status:t.status==="success"?"success":"failed",usage:t.stats?{inputTokens:t.stats.input_tokens??0,outputTokens:t.stats.output_tokens??0,totalTokens:t.stats.total_tokens??0}:void 0,raw:t};default:return null}}};import{TransformStream as to}from"node:stream/web";import{randomUUID as qt}from"node:crypto";function lt(e){let t=new to,n=new to,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,u="",c=qt(),f=new AbortController,l=new Map;(async()=>{try{for(;;){let{done:d,value:b}=await o.read();if(d)break;u+=s.decode(b,{stream:!0});let v=u.split(`
27
+ `);u=v.pop()??"";for(let T of v)if(T.trim())try{let y=JSON.parse(T);g(y).catch(k=>{console.error("[PseudoAcpServer] Failed to handle request:",k)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",T)}}}catch(d){console.error("[PseudoAcpServer] Stream read error:",d)}})();let p=i(async d=>{let b=JSON.stringify(d)+`
28
+ `;await r.write(a.encode(b))},"sendMsg");async function g(d){if(d.method==="initialize")await p({jsonrpc:"2.0",id:d.id,result:{protocolVersion:d.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(d.method==="session/new"||d.method==="sessions/new")c=d.params?.sessionId??qt(),await p({jsonrpc:"2.0",id:d.id,result:{sessionId:c}});else if(d.method==="session/prompt"||d.method==="chat/prompt"){let b=new AbortController,v=d.params.sessionId;l.set(v,b);let T=i(()=>b.abort(),"onGlobalAbort");f.signal.addEventListener("abort",T);let k=await h(v,d.params.prompt,typeof d.params.model=="string"?d.params.model:void 0,typeof d.params.effort=="string"?d.params.effort:void 0,b.signal).finally(()=>{l.delete(v),f.signal.removeEventListener("abort",T)});await p({jsonrpc:"2.0",id:d.id,result:k.usage?{stopReason:k.stopReason,usage:k.usage}:{stopReason:k.stopReason}})}else if(d.method==="session/cancel"||d.method==="chat/cancel"){let b=l.get(d.params.sessionId);b&&b.abort(),d.id!==void 0&&await p({jsonrpc:"2.0",id:d.id,result:{}})}else d.id!==void 0&&await p({jsonrpc:"2.0",id:d.id,result:{}})}i(g,"handleRequest");let h=i(async(d,b,v,T,y)=>{let k=b.find(m=>m.type==="text")?.text??"";try{let m=e.execute({prompt:k,model:v,reasoningEffort:T,sessionId:d==="default"?void 0:d,signal:y});for await(let x of m){let S=C(x);if(S&&await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:S}}),x.type==="complete")return{stopReason:y.aborted?"cancelled":"end_turn",usage:x.usage}}return{stopReason:y.aborted?"cancelled":"end_turn"}}catch(m){return y.aborted||m instanceof Error&&m.name==="AbortError"?{stopReason:"cancelled"}:(console.error("[PseudoAcpServer] Error executing prompt:",m),await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
27
29
  [Fatal Error: ${m}]
28
- `}}}}),{stopReason:"end_turn"})}},"executePrompt"),T=i(d=>{switch(d.type){case"message":if(d.role==="assistant"&&d.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:d.toolName,arguments:d.parameters,status:"running",toolCallId:d.toolId||qt()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:d.toolId,status:d.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
30
+ `}}}}),{stopReason:"end_turn"})}},"executePrompt"),C=i(d=>{switch(d.type){case"message":if(d.role==="assistant"&&d.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:d.toolName,arguments:d.parameters,status:"running",toolCallId:d.toolId||qt()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:d.toolId,status:d.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
29
31
  [Error: ${d.message}]
30
- `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{f.abort(),t.readable.cancel().catch(()=>{}),n.writable.abort().catch(()=>{})},"abort"),executor:e}}i(lt,"createPseudoAcpServer");import to from"node:fs";import no from"node:os";import oo from"node:path";var ri="gpt-5.4",ii="auto-gemini-3",si=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ai=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function ro(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(ro,"dedupePreserveOrder");function ui(){let e=oo.join(no.homedir(),".codex","config.toml");try{return to.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(ui,"readCodexConfiguredModel");function ci(){let e=oo.join(no.homedir(),".gemini","settings.json");try{let t=JSON.parse(to.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}i(ci,"readGeminiConfiguredModel");function ke(){return ui()||ri}i(ke,"getCodexCliDefaultModel");function be(){return ci()||ii}i(be,"getGeminiCliDefaultModel");function Le(){return ro([ke(),...si])}i(Le,"getCodexCliKnownModels");function Ne(){return ro([be(),...ai])}i(Ne,"getGeminiCliKnownModels");var Yt=be(),li=Ne(),fi={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},ft=class extends ye{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:Yt,models:li.filter(t=>t!==Yt).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new ct({model:Yt});this.acpClientOptions=lt(t)}getCapabilityProfile(){return V(fi)}serializeImageBlockToPromptToken(t){return/\s/.test(t.path)?(console.warn(`[gemini-cli] Image path contains whitespace and cannot be safely passed via @<path> syntax \u2014 dropping image block. Path: ${JSON.stringify(t.path)}`),null):`@${t.path}`}};function di(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(di,"buildReasoningEffortArgs");var dt=class extends ve{static{i(this,"CodexCLIExecutor")}model;constructor(t){super({command:"codex",baseArgs:["exec","--json","--full-auto"],timeout:3e5,...t}),this.model=t?.model??"gpt-5.4"}async checkInstalled(){return ut("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=di(t.reasoningEffort);return t.sessionId?["exec","resume",t.sessionId,...n,...o,t.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,t.prompt]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=Date.now();switch(t.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:t.thread_id??"",model:this.model,raw:t};case"item.completed":return t.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:t.item.text??"",raw:t}:t.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:t.item.id,toolName:"Bash",parameters:{command:t.item.command},raw:t}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:t.usage?{inputTokens:t.usage.input_tokens,outputTokens:t.usage.output_tokens,totalTokens:t.usage.input_tokens+t.usage.output_tokens}:void 0,raw:t};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:t.type,message:t.message??"Unknown error",raw:t};default:return null}}};var Qt=ke(),pi=Le(),pt=class extends ye{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:Qt,models:pi.filter(t=>t!==Qt).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new dt({model:Qt});this.acpClientOptions=lt(t)}};import{existsSync as _i,readFileSync as Ti}from"node:fs";import Ee from"node:path";import{fileURLToPath as Ci}from"node:url";var io=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],so=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","provider-budget","provider-toggle","prompt-only","none"],ao=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],uo=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],co=["native","image-input-native","cli-bridge","image-input-cli-bridge"],lo=["count-tokens","models-list","minimal-message","unsupported"];function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Z,"isPlainObject");function ce(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}i(ce,"requireString");function je(e,t){if(e!==void 0)return ce(e,t)}i(je,"optionalString");function te(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}i(te,"optionalNumber");function I(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(I,"optionalBoolean");function fo(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,o)=>ce(n,`${t}[${o}]`))}}i(fo,"optionalStringArray");function gi(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=ce(r,`${t}.${o}`);return n}i(gi,"optionalStringMap");function mi(e,t){if(e!==void 0){if(typeof e!="string"||!uo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${uo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(mi,"optionalReasoningPreset");function Zt(e,t){if(typeof e!="string"||!io.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${io.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Zt,"requireReasoningCapability");function hi(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(hi,"requireEffortStrategy");function yi(e,t){if(e!==void 0){if(typeof e!="string"||!ao.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ao.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(yi,"optionalThinkingStrategy");function po(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=hi(e.effortStrategy,`${t}.effortStrategy`),o=mi(e.reasoningPreset,`${t}.reasoningPreset`),r=yi(e.thinkingStrategy,`${t}.thinkingStrategy`),s=je(e.defaultEffort,`${t}.defaultEffort`),a=gi(e.effortAliases,`${t}.effortAliases`),u=fo(e.disabledEfforts,`${t}.disabledEfforts`),c=fo(e.localRejectEfforts,`${t}.localRejectEfforts`),f=I(e.allowCustomEffort,`${t}.allowCustomEffort`),l=I(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=I(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),g=I(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),y=I(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),T=I(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),d=I(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),b=I(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),k={effortStrategy:n};if(o!==void 0&&(k.reasoningPreset=o),r!==void 0&&(k.thinkingStrategy=r),s!==void 0&&(k.defaultEffort=s),a!==void 0&&(k.effortAliases=a),u!==void 0&&(k.disabledEfforts=u),c!==void 0&&(k.localRejectEfforts=c),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);k.supportedEfforts=e.supportedEfforts.map((v,h)=>{if(!Z(v))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${h}] must be an object`);return{value:ce(v.value,`${t}.supportedEfforts[${h}].value`),...je(v.description,`${t}.supportedEfforts[${h}].description`)!==void 0?{description:je(v.description,`${t}.supportedEfforts[${h}].description`)}:{},...I(v.isDefault,`${t}.supportedEfforts[${h}].isDefault`)!==void 0?{isDefault:I(v.isDefault,`${t}.supportedEfforts[${h}].isDefault`)}:{},...I(v.isUserVisible,`${t}.supportedEfforts[${h}].isUserVisible`)!==void 0?{isUserVisible:I(v.isUserVisible,`${t}.supportedEfforts[${h}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!Z(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let v={};for(let[h,C]of Object.entries(e.budgetByEffort))v[h]=te(C,`${t}.budgetByEffort.${h}`)??0;k.budgetByEffort=v}return f!==void 0&&(k.allowCustomEffort=f),l!==void 0&&(k.supportsReasoningEffort=l),p!==void 0&&(k.supportsReasoningSummary=p),g!==void 0&&(k.supportsEncryptedReasoningReplay=g),y!==void 0&&(k.supportsAdaptiveThinking=y),T!==void 0&&(k.supportsManualThinkingBudget=T),d!==void 0&&(k.supportsDisabledThinking=d),b!==void 0&&(k.requiresEffortBetaHeader=b),k}i(po,"validateReasoningProfile");function go(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?po(n,`${t}.reasoningProfile`):po(o,`${t}.reasoningCapabilityV2`)}i(go,"validateReasoningProfileField");function vi(e,t){if(typeof e!="string"||!co.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${co.join(", ")}, got ${JSON.stringify(e)}`);return e}i(vi,"requireProfileName");function ki(e,t){if(typeof e!="string"||!lo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${lo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ki,"requireVerifyStrategy");function bi(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ce(e.id,`${t}.id`),o=je(e.displayName,`${t}.displayName`),r=te(e.contextWindow,`${t}.contextWindow`),s=te(e.maxOutputTokens,`${t}.maxOutputTokens`),a=te(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),u=I(e.replayReasoningContent,`${t}.replayReasoningContent`),c=I(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=te(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),l=e.reasoningCapability===void 0?void 0:Zt(e.reasoningCapability,`${t}.reasoningCapability`),p=go(e,t),g={id:n};return o!==void 0&&(g.displayName=o),r!==void 0&&(g.contextWindow=r),s!==void 0&&(g.maxOutputTokens=s),a!==void 0&&(g.thinkingBudgetCap=a),l!==void 0&&(g.reasoningCapability=l),p!==void 0&&(g.reasoningProfile=p),u!==void 0&&(g.replayReasoningContent=u),c!==void 0&&(g.strictThinkingSignature=c),f!==void 0&&(g.streamMaxDurationMs=f),g}i(bi,"validateModelDescriptor");function Ei(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=Zt(r,`${t}.${o}`);return n}i(Ei,"validateModelReasoningCapabilities");function xi(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=I(e.cliBridge,`providers.${t}.cliBridge`),o=ce(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=Zt(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=go(e,`providers.${t}`),a=vi(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=ki(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&u!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${u}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=te(e.contextWindow,`providers.${t}.contextWindow`),f=te(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),l=te(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),p=I(e.supportsThinking,`providers.${t}.supportsThinking`),g=Ei(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),y=je(e.model,`providers.${t}.model`);if(n&&(y!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&y===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let T;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);T=e.models.map((b,k)=>bi(b,`providers.${t}.models[${k}]`))}let d={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(d.reasoningProfile=s),y!==void 0&&(d.model=y),T!==void 0&&(d.models=T),c!==void 0&&(d.contextWindow=c),f!==void 0&&(d.maxOutputTokens=f),l!==void 0&&(d.thinkingBudgetCap=l),p!==void 0&&(d.supportsThinking=p),g!==void 0&&(d.modelReasoningCapabilities=g),n&&(d.cliBridge=!0),d}i(xi,"validateProviderEntry");function mo(e){if(!Z(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=ce(e.updatedAt,"updatedAt");if(!Z(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,r]of Object.entries(e.providers))n[o]=xi(r,o);return{version:1,updatedAt:t,providers:n}}i(mo,"validateProviderCapabilitiesJson");var Pi=Object.freeze({native:ue,"image-input-native":Nn,"cli-bridge":Oe,"image-input-cli-bridge":jn}),gt=null;function Ri(){if(process.env.KODAX_BUNDLED==="true")return Ee.join(Ee.dirname(process.execPath),"provider-capabilities.json");let e=Ee.dirname(Ci(import.meta.url)),t=[Ee.join(e,"provider-capabilities.json"),Ee.join(Ee.dirname(e),"provider-capabilities.json")];for(let n of t)if(_i(n))return n;return t[0]}i(Ri,"resolveJsonPath");function Si(e){if(e.models){for(let t of e.models)t.reasoningProfile&&ho(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&ho(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(Si,"deepFreezeSnapshot");function ho(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(ho,"freezeReasoningProfile");function wi(e){if(e==="gemini-cli"){let t=be();return{model:t,models:Ne().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=ke();return{model:t,models:Le().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(wi,"resolveCliBridgeModels");function Mi(e,t){let n=Pi[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=wi(e),s={model:r.model,models:r.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let o={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(o.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(o.models=t.models),t.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(o.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(o.maxOutputTokens=t.maxOutputTokens),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}i(Mi,"buildSnapshot");function yo(){if(gt)return gt;let e=Ri(),t;try{let r=Ti(e,"utf8");t=JSON.parse(r)}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let n=mo(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=Si(Mi(r,s));return gt=Object.freeze(o),gt}i(yo,"getProviderSnapshots");import Ai from"@anthropic-ai/sdk";var L=yo();function K(e,t={}){let n=L[e];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...t}}i(K,"buildProviderConfig");var en=class extends B{static{i(this,"AnthropicProvider")}name="anthropic";config=K("anthropic",{strictThinkingSignature:!0});buildClient(){return new Ai({apiKey:this.getApiKey()})}},tn=class extends B{static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=K("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},nn=class extends B{static{i(this,"ZaiCodingProvider")}name="zai-coding";config=K("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},on=class extends B{static{i(this,"KimiCodeProvider")}name="kimi-code";config=K("kimi-code",{baseUrl:"https://api.kimi.com/coding/"})},rn=class extends B{static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=K("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},sn=class extends B{static{i(this,"MimoCodingProvider")}name="mimo-coding";config=K("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},an=class extends B{static{i(this,"MimoProvider")}name="mimo";config=K("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},un=class extends B{static{i(this,"ArkCodingProvider")}name="ark-coding";config=K("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},cn=class extends W{static{i(this,"OpenAIProvider")}name="openai";config=K("openai")},ln=class extends W{static{i(this,"DeepSeekProvider")}name="deepseek";config=K("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},fn=class extends W{static{i(this,"KimiProvider")}name="kimi";config=K("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0})},dn=class extends W{static{i(this,"QwenProvider")}name="qwen";config=K("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},pn=class extends W{static{i(this,"ZhipuProvider")}name="zhipu";config=K("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},z={anthropic:i(()=>new en,"anthropic"),openai:i(()=>new cn,"openai"),deepseek:i(()=>new ln,"deepseek"),kimi:i(()=>new fn,"kimi"),"kimi-code":i(()=>new on,"kimi-code"),qwen:i(()=>new dn,"qwen"),zhipu:i(()=>new pn,"zhipu"),"zhipu-coding":i(()=>new tn,"zhipu-coding"),"zai-coding":i(()=>new nn,"zai-coding"),"minimax-coding":i(()=>new rn,"minimax-coding"),"mimo-coding":i(()=>new sn,"mimo-coding"),mimo:i(()=>new an,"mimo"),"ark-coding":i(()=>new un,"ark-coding"),"gemini-cli":i(()=>new ft,"gemini-cli"),"codex-cli":i(()=>new pt,"codex-cli")},gn=process.env.KODAX_PROVIDER??"zhipu-coding",vo=new Map;function Di(e){if(N(e))return L[e].apiKeyEnv}i(Di,"resolveApiKeyEnvForProvider");function ko(e){let t=e??gn,n=z[t];if(!n)throw new M(`Unknown provider: ${t}. Available: ${Object.keys(z).join(", ")}`,t);let o=Di(t),r=o?process.env[o]:void 0,s=vo.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return vo.set(t,{apiKey:r,instance:a}),a}i(ko,"getProvider");function bo(e){return N(e)?!!process.env[L[e].apiKeyEnv]:!1}i(bo,"isProviderConfigured");function Eo(e){return N(e)?L[e].model:null}i(Eo,"getProviderModel");function xo(e,t){if(!N(e))return"unknown";let n=L[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(xo,"getProviderConfiguredReasoningCapability");function _o(e){return N(e)?V(L[e].capabilityProfile):null}i(_o,"getProviderConfiguredCapabilityProfile");function To(){let e=[];for(let t of Object.keys(z)){let n=L[t];e.push({name:t,model:n.model,models:n.models?[n.model,...n.models.map(o=>o.id)]:[n.model],configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:V(n.capabilityProfile)})}return e}i(To,"getProviderList");function Co(e){let t=L[e];return t?t.models?[t.model,...t.models.map(n=>n.id)]:[t.model]:[]}i(Co,"getProviderModels");function N(e){return e in z}i(N,"isProviderName");function mn(e){return{id:e.model}}i(mn,"makeDefaultDescriptor");function Fe(e,t,n){let o=n.id===t.model;return{provider:e,model:n.id,displayName:n.displayName??n.id,supportsThinking:t.supportsThinking??!1,reasoningCapability:n.reasoningCapability??t.reasoningCapability,reasoningProfile:n.reasoningProfile??t.reasoningProfile,contextWindow:n.contextWindow??t.contextWindow,maxOutputTokens:n.maxOutputTokens??t.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap??t.thinkingBudgetCap,isDefault:o}}i(Fe,"effectiveCapabilities");function mt(e){let t=L[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??mn(t),...r]}i(mt,"getProviderModelDescriptors");function ht(e,t){let n=L[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?Fe(e,n,o):t===n.model?Fe(e,n,mn(n)):Fe(e,n,{id:t})}i(ht,"getModelCapabilities");function yt(){let e=[];for(let t of Object.keys(z)){let n=L[t];e.push(Fe(t,n,mn(n)));for(let o of n.models??[])e.push(Fe(t,n,o))}return e}i(yt,"listBuiltinModelCapabilities");var Oi=new Set(["compat","sdk"]),Ii=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Ro(e){return e.reasoningProfile??e.reasoningCapabilityV2}i(Ro,"getConfiguredReasoningProfile");function $i(e){return e==="anthropic"?"count-tokens":"models-list"}i($i,"defaultVerifyStrategyForProtocol");function vt(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(vt,"legacyCapabilityFromReasoningProfile");function Bi(e,t,n){if(n===!1)return"none";switch(t){case"none":case"prompt-only":return"none";case"native-toggle":return e==="anthropic"?"generic-thinking-toggle":void 0;case"native-budget":return e==="anthropic"?"anthropic-budget":"qwen-hybrid-thinking";case"native-effort":return e==="anthropic"?"claude-adaptive-max":"openai-chat-reasoning";case"native-adaptive":return e==="anthropic"?"claude-adaptive-max":void 0;default:return n!==!0?void 0:e==="anthropic"?"generic-thinking-toggle":void 0}}i(Bi,"legacyReasoningPresetForProtocol");function Po(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(Po,"isSimpleReasoning");function Li(e,t){if(e==="none")return He("none");let n=i(u=>u==="off"?"none":u,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,s=o.includes("none"),a=o.map(u=>u===r?{value:u,isDefault:!0}:{value:u});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...s?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{},supportsReasoningEffort:!0}}i(Li,"buildReasoningProfileFromSimple");function So(e,t,n,o){let r=Po(n)?n:void 0,s=n!==void 0&&!Po(n)?n:void 0;if(o?.supportsThinking===!1)return He("none");if(e)return{...e,...s??{}};if(r!==void 0)return Li(r,o?.protocol??"openai");let a=t??(o?Bi(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?He(a,s):void 0}i(So,"resolveCustomReasoningProfile");function kt(e){return So(Ro(e),e.reasoningPreset,e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(kt,"resolveCustomProviderReasoningProfile");function vn(e,t,n){return So(Ro(e),e.reasoningPreset,e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(vn,"resolveCustomModelReasoningProfile");function Ni(e,t,n){if(typeof e=="string")return{id:e};let o=vn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Ni,"customModelDescriptorToFull");function Ke(e){if(!e.name||!e.baseUrl||!e.apiKeyEnv||!e.model)throw new Error(`Custom provider requires name, baseUrl, apiKeyEnv, and model. Got: ${JSON.stringify({name:e.name,baseUrl:e.baseUrl,apiKeyEnv:e.apiKeyEnv,model:e.model})}`);if(e.protocol!=="anthropic"&&e.protocol!=="openai")throw new Error(`Unknown protocol "${e.protocol}" for custom provider "${e.name}". Must be "anthropic" or "openai".`);if(e.userAgentMode!==void 0&&!Oi.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.verifyStrategy!==void 0){if(!Ii.has(e.verifyStrategy))throw new Error(`Unknown verifyStrategy "${e.verifyStrategy}" for custom provider "${e.name}". Must be one of "count-tokens" | "models-list" | "minimal-message" | "unsupported".`);if(e.protocol==="openai"&&e.verifyStrategy==="count-tokens")throw new Error(`Custom provider "${e.name}": verifyStrategy="count-tokens" requires Anthropic protocol; got protocol="openai". Use "models-list" or "minimal-message" for OpenAI-compat.`)}}i(Ke,"validateCustomProviderConfig");function ji(e){let t=e.models?.length?e.models.map(s=>Ni(s,e.protocol,e.supportsThinking)):void 0,n=kt(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??vt(n)??"none",r=e.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:e.apiKeyEnv,model:e.model,baseUrl:e.baseUrl,models:t,userAgentMode:e.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:e.capabilityProfile,contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,thinkingBudgetCap:e.thinkingBudgetCap,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??$i(e.protocol)}}i(ji,"buildProviderConfig");function bt(e){Ke(e);let t=ji(e);return e.protocol==="anthropic"?new hn(e.name,t):new yn(e.name,t)}i(bt,"createCustomProvider");var hn=class extends B{static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},yn=class extends W{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var q=new Map,kn=new Map,Fi=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function wo(e){return e.reasoningCapability!==void 0&&Fi.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(wo,"hasThinkingReasoningConfig");function Ki(e){if(e.supportsThinking!==!1)return;let t=wo(e),n=(e.models??[]).some(o=>typeof o!="string"&&wo(o));(t||n)&&console.warn(`[kodax] Custom provider "${e.name}": its reasoning config (provider- or per-model reasoningCapability / reasoningProfile / reasoning / reasoningPreset) is ignored because supportsThinking is false (thinking stays off). Set supportsThinking: true to enable thinking, or remove the reasoning config.`)}i(Ki,"warnOnIgnoredReasoningCapability");function Mo(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(Ke(r),t.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in z&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),Ki(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>bt(r))}q.clear(),kn.clear();for(let[r,s]of n)q.set(r,s);for(let[r,s]of o)kn.set(r,s)}i(Mo,"registerCustomProviders");function Et(e){let t=kn.get(e);return t?t():void 0}i(Et,"getCustomProvider");function _e(e){return q.has(e)}i(_e,"isCustomProviderName");function xt(){return[...q.keys()]}i(xt,"getCustomProviderNames");function Ao(){let e=[];for(let[t,n]of q){let o=!!process.env[n.apiKeyEnv],r=kt(n),s=(n.models??[]).map(u=>typeof u=="string"?u:u.id),a=n.model&&s.length?[...new Set([n.model,...s])]:[n.model];e.push({name:t,model:n.model,models:a,configured:o,reasoningCapability:n.supportsThinking===!1?"none":n.reasoningCapability??vt(r)??"none",capabilityProfile:V(n.capabilityProfile??ue),custom:!0})}return e}i(Ao,"getCustomProviderList");function Do(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(Do,"getCustomProviderModels");function Oo(e,t,n){if(typeof e=="string")return{id:e};let o=vn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Oo,"customDescriptorToFull");function _t(e){let t=q.get(e);if(!t)return;let n=(t.models??[]).map(s=>Oo(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(_t,"getCustomProviderModelDescriptors");function xe(e,t){let n=q.get(e);if(!n)return;let o=t===n.model,r=kt(n),a=(n.models??[]).map(f=>Oo(f,n.protocol,n.supportsThinking)).find(f=>f.id===t)??(o?{id:n.model}:void 0);if(!a)return;let u=n.supportsThinking===!1?r:a.reasoningProfile??r,c=n.supportsThinking===!1?"none":a.reasoningCapability??vt(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(c!=="none"&&c!=="prompt-only"),reasoningCapability:c,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(xe,"getCustomModelCapabilities");function Io(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(Io,"getCustomProviderVerifyMetadata");function Tt(){let e=[];for(let[t,n]of q){let o=xe(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=xe(t,s);a&&e.push(a)}}return e}i(Tt,"listCustomProviderModelCapabilities");var ne=new Map,Ui=0;function bn(e){let t=ne.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(bn,"getActiveRuntimeProviderRegistration");function Wi(e){for(let[t,n]of ne){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?ne.delete(t):ne.set(t,o);return}}}i(Wi,"removeRuntimeProviderRegistration");function $o(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(N(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(_e(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Ui}`,name:n,factory:t},r=ne.get(n)??[];return ne.set(n,[...r,o]),()=>{Wi(o.id)}}i($o,"registerModelProvider");function Ct(e){let t=bn(e);return t?t.factory():void 0}i(Ct,"getRuntimeModelProvider");function Ue(e){return bn(e)!==void 0}i(Ue,"isRuntimeModelProviderName");function Pt(){return Array.from(ne.keys()).filter(e=>bn(e)!==void 0)}i(Pt,"getRuntimeModelProviderNames");function Bo(){ne.clear()}i(Bo,"clearRuntimeModelProviders");function En(e){if(N(e))return z[e]();let t=Ct(e);if(t)return t;let n=Et(e);if(n)return n;let o=St();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(En,"resolveProvider");function Rt(e){return N(e)||Ue(e)||_e(e)}i(Rt,"isKnownProvider");function St(){let e=Object.keys(z),t=Pt(),n=xt();return[...new Set([...e,...t,...n])]}i(St,"getAvailableProviderNames");function We(e){return N(e)?mt(e):_t(e)??[]}i(We,"resolveProviderModelDescriptors");function wt(e,t){return N(e)?ht(e,t):xe(e,t)}i(wt,"resolveModelCapabilities");function Lo(){return[...yt(),...Tt()]}i(Lo,"listAllModelCapabilities");function zi(e){if(N(e)){let t=L[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Ue(e))return Io(e)}i(zi,"getProviderVerifyMetadata");async function No(e,t){let n=zi(e);if(!n&&!Rt(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${St().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=En(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(No,"verifyProviderCredential");async function jo(e,t){if(!Rt(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=We(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(jo,"listProviderModels");function Xi(e){let t=e.model??We(e.provider)[0]?.id,n=t?wt(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?It(n,e.rejectedEfforts):n,r=De({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(Xi,"resolveWireEffort");var Fo={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-v4-flash":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.028},"deepseek-v4-pro":{inputPer1M:1.68,outputPer1M:3.36,cachePer1M:.14}},kimi:{"k2.5":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},zhipu:{"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function xn(e,t,n){let o=n?.[e]?.[t];return o||Fo[e]?.[t]}i(xn,"getCostRate");function _n(e,t,n,o=0){let r=t/1e6*e.inputPer1M,s=n/1e6*e.outputPer1M,a=e.cachePer1M?o/1e6*e.cachePer1M:0;return r+s+a}i(_n,"calculateCost");function Vi(){return{records:[],retries:[]}}i(Vi,"createCostTracker");function Tn(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(Tn,"recordRetry");function Cn(e,t,n){let o=xn(t.provider,t.model,n),r=(t.cacheReadTokens??0)+(t.cacheWriteTokens??0),s=o?_n(o,t.inputTokens,t.outputTokens,r):0,a={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,cost:s,role:t.role};return{records:[...e.records,a],retries:e.retries}}i(Cn,"recordUsage");function Gi(e){let t=0,n=0,o=0,r=0,s=0,a=0,u={},c={};for(let p of e.records){t+=p.cost,n+=p.inputTokens,o+=p.outputTokens,r+=p.cacheReadTokens+p.cacheWriteTokens,s+=p.cacheReadTokens,a+=p.cacheWriteTokens;let g=u[p.provider];u[p.provider]={cost:(g?.cost??0)+p.cost,calls:(g?.calls??0)+1,inputTokens:(g?.inputTokens??0)+p.inputTokens,outputTokens:(g?.outputTokens??0)+p.outputTokens};let y=p.role??"default",T=c[y];c[y]={cost:(T?.cost??0)+p.cost,calls:(T?.calls??0)+1,inputTokens:(T?.inputTokens??0)+p.inputTokens,outputTokens:(T?.outputTokens??0)+p.outputTokens}}let f=0;for(let p of e.retries)f+=p.waitMs;let l=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:l,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:f,byProvider:u,byRole:c}}i(Gi,"getSummary");function Mt(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Mt,"formatCost");function Hi(e){let t=[];if(t.push(`Session Cost: ${Mt(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}: ${Mt(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}: ${Mt(s.cost)} (${s.calls} calls)`)}return t.join(`
31
- `)}i(Hi,"formatCostReport");var Ko={inputTokens:0,outputTokens:0,totalTokens:0},Ji=3e4;async function qi(e){let t=new AbortController,n=e.timeoutMs??Ji,o=e.costTracker,r,s=i(c=>{r||(r=c),t.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),n),u=i(()=>s("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?s("parent"):e.abortSignal.addEventListener("abort",u,{once:!0}));try{let c=await e.provider.stream([...e.messages],[],e.system,e.reasoning??{effort:"none"},{modelOverride:e.model,onRetryAfter:i(y=>{o&&(o=Tn(o,{provider:y.provider,waitMs:y.waitMs,reason:y.reason,source:y.source}))},"onRetryAfter")},t.signal),f=c.usage??Ko,l=c.textBlocks??[],p=c.toolBlocks??[],g=l.map(y=>y.text).join("");return p.length>0?{text:g,usage:f,costTracker:o,stopReason:"error",error:new Error(`sideQuery: provider returned ${p.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=Cn(o,{provider:e.provider.name,model:e.model,inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cachedReadTokens,cacheWriteTokens:f.cachedWriteTokens,role:e.querySource})),{text:g,usage:f,costTracker:o,stopReason:Yi(c.stopReason)})}catch(c){let f=c instanceof Error?c:new Error(String(c)),l="error";return t.signal.aborted&&(l=r==="timeout"?"timeout":"aborted"),{text:"",usage:Ko,costTracker:o,stopReason:l,error:f}}finally{clearTimeout(a),e.abortSignal&&e.abortSignal.removeEventListener("abort",u)}}i(qi,"sideQuery");function Yi(e){return e==="max_tokens"?"max_tokens":"end_turn"}i(Yi,"mapStopReason");export{Q as a,M as b,Pe as c,At as d,Dt as e,Ot as f,Uo as g,Wo as h,zo as i,Re as j,Xo as k,Vo as l,Ve as m,It as n,Go as o,Ho as p,Jo as q,qo as r,Yo as s,le as t,Pn as u,Rn as v,Nt as w,fe as x,Je as y,Ae as z,Sn as A,er as B,wn as C,De as D,tr as E,ir as F,se as G,ae as H,jt as I,qe as J,Ye as K,Bn as L,Ln as M,gr as N,mr as O,de as P,Qe as Q,H as R,br as S,Un as T,ge as U,me as V,Ut as W,Wt as X,he as Y,zt as Z,Ie as _,B as $,W as aa,ke as ba,be as ca,Le as da,Ne as ea,L as fa,z as ga,gn as ha,ko as ia,bo as ja,Eo as ka,xo as la,_o as ma,To as na,Co as oa,N as pa,mt as qa,ht as ra,yt as sa,Ke as ta,bt as ua,Mo as va,Et as wa,_e as xa,xt as ya,Ao as za,Do as Aa,_t as Ba,xe as Ca,Tt as Da,$o as Ea,Ct as Fa,Ue as Ga,Pt as Ha,Bo as Ia,En as Ja,Rt as Ka,St as La,We as Ma,wt as Na,Lo as Oa,No as Pa,jo as Qa,Xi as Ra,Fo as Sa,xn as Ta,_n as Ua,Vi as Va,Tn as Wa,Cn as Xa,Gi as Ya,Mt as Za,Hi as _a,qi as $a};
32
+ `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{f.abort(),t.readable.cancel().catch(()=>{}),n.writable.abort().catch(()=>{})},"abort"),executor:e}}i(lt,"createPseudoAcpServer");import no from"node:fs";import oo from"node:os";import ro from"node:path";var ii="gpt-5.4",si="auto-gemini-3",ai=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ui=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function io(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(io,"dedupePreserveOrder");function ci(){let e=ro.join(oo.homedir(),".codex","config.toml");try{return no.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(ci,"readCodexConfiguredModel");function li(){let e=ro.join(oo.homedir(),".gemini","settings.json");try{let t=JSON.parse(no.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(li,"readGeminiConfiguredModel");function ke(){return ci()||ii}i(ke,"getCodexCliDefaultModel");function be(){return li()||si}i(be,"getGeminiCliDefaultModel");function Le(){return io([ke(),...ai])}i(Le,"getCodexCliKnownModels");function Ne(){return io([be(),...ui])}i(Ne,"getGeminiCliKnownModels");var Yt=be(),fi=Ne(),di={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},ft=class extends ye{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:Yt,models:fi.filter(t=>t!==Yt).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new ct({model:Yt});this.acpClientOptions=lt(t)}getCapabilityProfile(){return V(di)}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 pi(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(pi,"buildReasoningEffortArgs");var dt=class extends ve{static{i(this,"CodexCLIExecutor")}model;constructor(t){super({command:"codex",baseArgs:["exec","--json","--full-auto"],timeout:3e5,...t}),this.model=t?.model??"gpt-5.4"}async checkInstalled(){return ut("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=pi(t.reasoningEffort);return t.sessionId?["exec","resume",t.sessionId,...n,...o,t.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,t.prompt]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=Date.now();switch(t.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:t.thread_id??"",model:this.model,raw:t};case"item.completed":return t.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:t.item.text??"",raw:t}:t.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:t.item.id,toolName:"Bash",parameters:{command:t.item.command},raw:t}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:t.usage?{inputTokens:t.usage.input_tokens,outputTokens:t.usage.output_tokens,totalTokens:t.usage.input_tokens+t.usage.output_tokens}:void 0,raw:t};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:t.type,message:t.message??"Unknown error",raw:t};default:return null}}};var Qt=ke(),gi=Le(),pt=class extends ye{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:Qt,models:gi.filter(t=>t!==Qt).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new dt({model:Qt});this.acpClientOptions=lt(t)}};import{existsSync as Ti,readFileSync as Ci}from"node:fs";import Ee from"node:path";import{fileURLToPath as Pi}from"node:url";var so=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],ao=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","provider-budget","provider-toggle","prompt-only","none"],uo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],co=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],lo=["native","image-input-native","cli-bridge","image-input-cli-bridge"],fo=["count-tokens","models-list","minimal-message","unsupported"];function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Z,"isPlainObject");function ce(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}i(ce,"requireString");function je(e,t){if(e!==void 0)return ce(e,t)}i(je,"optionalString");function te(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}i(te,"optionalNumber");function $(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i($,"optionalBoolean");function po(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,o)=>ce(n,`${t}[${o}]`))}}i(po,"optionalStringArray");function mi(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=ce(r,`${t}.${o}`);return n}i(mi,"optionalStringMap");function hi(e,t){if(e!==void 0){if(typeof e!="string"||!co.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${co.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(hi,"optionalReasoningPreset");function Zt(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(Zt,"requireReasoningCapability");function yi(e,t){if(typeof e!="string"||!ao.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ao.join(", ")}, got ${JSON.stringify(e)}`);return e}i(yi,"requireEffortStrategy");function vi(e,t){if(e!==void 0){if(typeof e!="string"||!uo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${uo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(vi,"optionalThinkingStrategy");function go(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=yi(e.effortStrategy,`${t}.effortStrategy`),o=hi(e.reasoningPreset,`${t}.reasoningPreset`),r=vi(e.thinkingStrategy,`${t}.thinkingStrategy`),s=je(e.defaultEffort,`${t}.defaultEffort`),a=mi(e.effortAliases,`${t}.effortAliases`),u=po(e.disabledEfforts,`${t}.disabledEfforts`),c=po(e.localRejectEfforts,`${t}.localRejectEfforts`),f=$(e.allowCustomEffort,`${t}.allowCustomEffort`),l=$(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=$(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),g=$(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),h=$(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),C=$(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),d=$(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),b=$(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),v={effortStrategy:n};if(o!==void 0&&(v.reasoningPreset=o),r!==void 0&&(v.thinkingStrategy=r),s!==void 0&&(v.defaultEffort=s),a!==void 0&&(v.effortAliases=a),u!==void 0&&(v.disabledEfforts=u),c!==void 0&&(v.localRejectEfforts=c),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);v.supportedEfforts=e.supportedEfforts.map((T,y)=>{if(!Z(T))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${y}] must be an object`);return{value:ce(T.value,`${t}.supportedEfforts[${y}].value`),...je(T.description,`${t}.supportedEfforts[${y}].description`)!==void 0?{description:je(T.description,`${t}.supportedEfforts[${y}].description`)}:{},...$(T.isDefault,`${t}.supportedEfforts[${y}].isDefault`)!==void 0?{isDefault:$(T.isDefault,`${t}.supportedEfforts[${y}].isDefault`)}:{},...$(T.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)!==void 0?{isUserVisible:$(T.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!Z(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let T={};for(let[y,k]of Object.entries(e.budgetByEffort))T[y]=te(k,`${t}.budgetByEffort.${y}`)??0;v.budgetByEffort=T}return f!==void 0&&(v.allowCustomEffort=f),l!==void 0&&(v.supportsReasoningEffort=l),p!==void 0&&(v.supportsReasoningSummary=p),g!==void 0&&(v.supportsEncryptedReasoningReplay=g),h!==void 0&&(v.supportsAdaptiveThinking=h),C!==void 0&&(v.supportsManualThinkingBudget=C),d!==void 0&&(v.supportsDisabledThinking=d),b!==void 0&&(v.requiresEffortBetaHeader=b),v}i(go,"validateReasoningProfile");function mo(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?go(n,`${t}.reasoningProfile`):go(o,`${t}.reasoningCapabilityV2`)}i(mo,"validateReasoningProfileField");function ki(e,t){if(typeof e!="string"||!lo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${lo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ki,"requireProfileName");function bi(e,t){if(typeof e!="string"||!fo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${fo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(bi,"requireVerifyStrategy");function Ei(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ce(e.id,`${t}.id`),o=je(e.displayName,`${t}.displayName`),r=te(e.contextWindow,`${t}.contextWindow`),s=te(e.maxOutputTokens,`${t}.maxOutputTokens`),a=te(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),u=$(e.replayReasoningContent,`${t}.replayReasoningContent`),c=$(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=te(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),l=e.reasoningCapability===void 0?void 0:Zt(e.reasoningCapability,`${t}.reasoningCapability`),p=mo(e,t),g={id:n};return o!==void 0&&(g.displayName=o),r!==void 0&&(g.contextWindow=r),s!==void 0&&(g.maxOutputTokens=s),a!==void 0&&(g.thinkingBudgetCap=a),l!==void 0&&(g.reasoningCapability=l),p!==void 0&&(g.reasoningProfile=p),u!==void 0&&(g.replayReasoningContent=u),c!==void 0&&(g.strictThinkingSignature=c),f!==void 0&&(g.streamMaxDurationMs=f),g}i(Ei,"validateModelDescriptor");function xi(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=Zt(r,`${t}.${o}`);return n}i(xi,"validateModelReasoningCapabilities");function _i(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=$(e.cliBridge,`providers.${t}.cliBridge`),o=ce(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=Zt(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=mo(e,`providers.${t}`),a=ki(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=bi(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&u!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${u}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=te(e.contextWindow,`providers.${t}.contextWindow`),f=te(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),l=te(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),p=$(e.supportsThinking,`providers.${t}.supportsThinking`),g=xi(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),h=je(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 C;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);C=e.models.map((b,v)=>Ei(b,`providers.${t}.models[${v}]`))}let d={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(d.reasoningProfile=s),h!==void 0&&(d.model=h),C!==void 0&&(d.models=C),c!==void 0&&(d.contextWindow=c),f!==void 0&&(d.maxOutputTokens=f),l!==void 0&&(d.thinkingBudgetCap=l),p!==void 0&&(d.supportsThinking=p),g!==void 0&&(d.modelReasoningCapabilities=g),n&&(d.cliBridge=!0),d}i(_i,"validateProviderEntry");function ho(e){if(!Z(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=ce(e.updatedAt,"updatedAt");if(!Z(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,r]of Object.entries(e.providers))n[o]=_i(r,o);return{version:1,updatedAt:t,providers:n}}i(ho,"validateProviderCapabilitiesJson");var Si=Object.freeze({native:ue,"image-input-native":Nn,"cli-bridge":Oe,"image-input-cli-bridge":jn}),gt=null;function Ri(){if(process.env.KODAX_BUNDLED==="true")return Ee.join(Ee.dirname(process.execPath),"provider-capabilities.json");let e=Ee.dirname(Pi(import.meta.url)),t=[Ee.join(e,"provider-capabilities.json"),Ee.join(Ee.dirname(e),"provider-capabilities.json")];for(let n of t)if(Ti(n))return n;return t[0]}i(Ri,"resolveJsonPath");function wi(e){if(e.models){for(let t of e.models)t.reasoningProfile&&yo(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&yo(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(wi,"deepFreezeSnapshot");function yo(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(yo,"freezeReasoningProfile");function Mi(e){if(e==="gemini-cli"){let t=be();return{model:t,models:Ne().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=ke();return{model:t,models:Le().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(Mi,"resolveCliBridgeModels");function Ai(e,t){let n=Si[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=Mi(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(Ai,"buildSnapshot");function vo(){if(gt)return gt;let e=Ri(),t;try{let r=Ci(e,"utf8");t=JSON.parse(r)}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let n=ho(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=wi(Ai(r,s));return gt=Object.freeze(o),gt}i(vo,"getProviderSnapshots");import Di from"@anthropic-ai/sdk";var j=vo();function U(e,t={}){let n=j[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 en=class extends N{static{i(this,"AnthropicProvider")}name="anthropic";config=U("anthropic",{strictThinkingSignature:!0});buildClient(){return new Di({apiKey:this.getApiKey()})}},tn=class extends N{static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=U("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},nn=class extends N{static{i(this,"ZaiCodingProvider")}name="zai-coding";config=U("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},on=class extends N{static{i(this,"KimiCodeProvider")}name="kimi-code";config=U("kimi-code",{baseUrl:"https://api.kimi.com/coding/"})},rn=class extends N{static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=U("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},sn=class extends N{static{i(this,"MimoCodingProvider")}name="mimo-coding";config=U("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},an=class extends N{static{i(this,"MimoProvider")}name="mimo";config=U("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},un=class extends N{static{i(this,"ArkCodingProvider")}name="ark-coding";config=U("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},cn=class extends W{static{i(this,"OpenAIProvider")}name="openai";config=U("openai")},ln=class extends W{static{i(this,"DeepSeekProvider")}name="deepseek";config=U("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},fn=class extends W{static{i(this,"KimiProvider")}name="kimi";config=U("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0})},dn=class extends W{static{i(this,"QwenProvider")}name="qwen";config=U("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},pn=class extends W{static{i(this,"ZhipuProvider")}name="zhipu";config=U("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},z={anthropic:i(()=>new en,"anthropic"),openai:i(()=>new cn,"openai"),deepseek:i(()=>new ln,"deepseek"),kimi:i(()=>new fn,"kimi"),"kimi-code":i(()=>new on,"kimi-code"),qwen:i(()=>new dn,"qwen"),zhipu:i(()=>new pn,"zhipu"),"zhipu-coding":i(()=>new tn,"zhipu-coding"),"zai-coding":i(()=>new nn,"zai-coding"),"minimax-coding":i(()=>new rn,"minimax-coding"),"mimo-coding":i(()=>new sn,"mimo-coding"),mimo:i(()=>new an,"mimo"),"ark-coding":i(()=>new un,"ark-coding"),"gemini-cli":i(()=>new ft,"gemini-cli"),"codex-cli":i(()=>new pt,"codex-cli")},gn=process.env.KODAX_PROVIDER??"zhipu-coding",ko=new Map;function Oi(e){if(F(e))return j[e].apiKeyEnv}i(Oi,"resolveApiKeyEnvForProvider");function bo(e){let t=e??gn,n=z[t];if(!n)throw new M(`Unknown provider: ${t}. Available: ${Object.keys(z).join(", ")}`,t);let o=Oi(t),r=o?process.env[o]:void 0,s=ko.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return ko.set(t,{apiKey:r,instance:a}),a}i(bo,"getProvider");function Eo(e){return F(e)?!!process.env[j[e].apiKeyEnv]:!1}i(Eo,"isProviderConfigured");function xo(e){return F(e)?j[e].model:null}i(xo,"getProviderModel");function _o(e,t){if(!F(e))return"unknown";let n=j[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(_o,"getProviderConfiguredReasoningCapability");function To(e){return F(e)?V(j[e].capabilityProfile):null}i(To,"getProviderConfiguredCapabilityProfile");function Co(){let e=[];for(let t of Object.keys(z)){let n=j[t];e.push({name:t,model:n.model,models:n.models?[n.model,...n.models.map(o=>o.id)]:[n.model],configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:V(n.capabilityProfile)})}return e}i(Co,"getProviderList");function Po(e){let t=j[e];return t?t.models?[t.model,...t.models.map(n=>n.id)]:[t.model]:[]}i(Po,"getProviderModels");function F(e){return e in z}i(F,"isProviderName");function mn(e){return{id:e.model}}i(mn,"makeDefaultDescriptor");function Fe(e,t,n){let o=n.id===t.model;return{provider:e,model:n.id,displayName:n.displayName??n.id,supportsThinking:t.supportsThinking??!1,reasoningCapability:n.reasoningCapability??t.reasoningCapability,reasoningProfile:n.reasoningProfile??t.reasoningProfile,contextWindow:n.contextWindow??t.contextWindow,maxOutputTokens:n.maxOutputTokens??t.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap??t.thinkingBudgetCap,isDefault:o}}i(Fe,"effectiveCapabilities");function mt(e){let t=j[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??mn(t),...r]}i(mt,"getProviderModelDescriptors");function ht(e,t){let n=j[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?Fe(e,n,o):t===n.model?Fe(e,n,mn(n)):Fe(e,n,{id:t})}i(ht,"getModelCapabilities");function yt(){let e=[];for(let t of Object.keys(z)){let n=j[t];e.push(Fe(t,n,mn(n)));for(let o of n.models??[])e.push(Fe(t,n,o))}return e}i(yt,"listBuiltinModelCapabilities");var Ii=new Set(["compat","sdk"]),$i=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Ro(e){return e.reasoningProfile??e.reasoningCapabilityV2}i(Ro,"getConfiguredReasoningProfile");function Bi(e){return e==="anthropic"?"count-tokens":"models-list"}i(Bi,"defaultVerifyStrategyForProtocol");function vt(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(vt,"legacyCapabilityFromReasoningProfile");function Li(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(Li,"legacyReasoningPresetForProtocol");function So(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(So,"isSimpleReasoning");function Ni(e,t){if(e==="none")return He("none");let n=i(u=>u==="off"?"none":u,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,s=o.includes("none"),a=o.map(u=>u===r?{value:u,isDefault:!0}:{value:u});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...s?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{},supportsReasoningEffort:!0}}i(Ni,"buildReasoningProfileFromSimple");function wo(e,t,n,o){let r=So(n)?n:void 0,s=n!==void 0&&!So(n)?n:void 0;if(o?.supportsThinking===!1)return He("none");if(e)return{...e,...s??{}};if(r!==void 0)return Ni(r,o?.protocol??"openai");let a=t??(o?Li(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?He(a,s):void 0}i(wo,"resolveCustomReasoningProfile");function kt(e){return wo(Ro(e),e.reasoningPreset,e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(kt,"resolveCustomProviderReasoningProfile");function vn(e,t,n){return wo(Ro(e),e.reasoningPreset,e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(vn,"resolveCustomModelReasoningProfile");function ji(e,t,n){if(typeof e=="string")return{id:e};let o=vn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(ji,"customModelDescriptorToFull");function Ke(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&&!Ii.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.verifyStrategy!==void 0){if(!$i.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(Ke,"validateCustomProviderConfig");function Fi(e){let t=e.models?.length?e.models.map(s=>ji(s,e.protocol,e.supportsThinking)):void 0,n=kt(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??vt(n)??"none",r=e.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:e.apiKeyEnv,model:e.model,baseUrl:e.baseUrl,models:t,userAgentMode:e.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:e.capabilityProfile,contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,thinkingBudgetCap:e.thinkingBudgetCap,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??Bi(e.protocol)}}i(Fi,"buildProviderConfig");function bt(e){Ke(e);let t=Fi(e);return e.protocol==="anthropic"?new hn(e.name,t):new yn(e.name,t)}i(bt,"createCustomProvider");var hn=class extends N{static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},yn=class extends W{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var q=new Map,kn=new Map,Ki=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function Mo(e){return e.reasoningCapability!==void 0&&Ki.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(Mo,"hasThinkingReasoningConfig");function Ui(e){if(e.supportsThinking!==!1)return;let t=Mo(e),n=(e.models??[]).some(o=>typeof o!="string"&&Mo(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(Ui,"warnOnIgnoredReasoningCapability");function Ao(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(Ke(r),t.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in z&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),Ui(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>bt(r))}q.clear(),kn.clear();for(let[r,s]of n)q.set(r,s);for(let[r,s]of o)kn.set(r,s)}i(Ao,"registerCustomProviders");function Et(e){let t=kn.get(e);return t?t():void 0}i(Et,"getCustomProvider");function _e(e){return q.has(e)}i(_e,"isCustomProviderName");function xt(){return[...q.keys()]}i(xt,"getCustomProviderNames");function Do(){let e=[];for(let[t,n]of q){let o=!!process.env[n.apiKeyEnv],r=kt(n),s=(n.models??[]).map(u=>typeof u=="string"?u:u.id),a=n.model&&s.length?[...new Set([n.model,...s])]:[n.model];e.push({name:t,model:n.model,models:a,configured:o,reasoningCapability:n.supportsThinking===!1?"none":n.reasoningCapability??vt(r)??"none",capabilityProfile:V(n.capabilityProfile??ue),custom:!0})}return e}i(Do,"getCustomProviderList");function Oo(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(Oo,"getCustomProviderModels");function Io(e,t,n){if(typeof e=="string")return{id:e};let o=vn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Io,"customDescriptorToFull");function _t(e){let t=q.get(e);if(!t)return;let n=(t.models??[]).map(s=>Io(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(_t,"getCustomProviderModelDescriptors");function xe(e,t){let n=q.get(e);if(!n)return;let o=t===n.model,r=kt(n),a=(n.models??[]).map(f=>Io(f,n.protocol,n.supportsThinking)).find(f=>f.id===t)??(o?{id:n.model}:void 0);if(!a)return;let u=n.supportsThinking===!1?r:a.reasoningProfile??r,c=n.supportsThinking===!1?"none":a.reasoningCapability??vt(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(c!=="none"&&c!=="prompt-only"),reasoningCapability:c,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(xe,"getCustomModelCapabilities");function $o(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($o,"getCustomProviderVerifyMetadata");function Tt(){let e=[];for(let[t,n]of q){let o=xe(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=xe(t,s);a&&e.push(a)}}return e}i(Tt,"listCustomProviderModelCapabilities");var ne=new Map,Wi=0;function bn(e){let t=ne.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(bn,"getActiveRuntimeProviderRegistration");function zi(e){for(let[t,n]of ne){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?ne.delete(t):ne.set(t,o);return}}}i(zi,"removeRuntimeProviderRegistration");function Bo(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(F(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(_e(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Wi}`,name:n,factory:t},r=ne.get(n)??[];return ne.set(n,[...r,o]),()=>{zi(o.id)}}i(Bo,"registerModelProvider");function Ct(e){let t=bn(e);return t?t.factory():void 0}i(Ct,"getRuntimeModelProvider");function Ue(e){return bn(e)!==void 0}i(Ue,"isRuntimeModelProviderName");function Pt(){return Array.from(ne.keys()).filter(e=>bn(e)!==void 0)}i(Pt,"getRuntimeModelProviderNames");function Lo(){ne.clear()}i(Lo,"clearRuntimeModelProviders");function En(e){if(F(e))return z[e]();let t=Ct(e);if(t)return t;let n=Et(e);if(n)return n;let o=Rt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(En,"resolveProvider");function St(e){return F(e)||Ue(e)||_e(e)}i(St,"isKnownProvider");function Rt(){let e=Object.keys(z),t=Pt(),n=xt();return[...new Set([...e,...t,...n])]}i(Rt,"getAvailableProviderNames");function We(e){return F(e)?mt(e):_t(e)??[]}i(We,"resolveProviderModelDescriptors");function wt(e,t){return F(e)?ht(e,t):xe(e,t)}i(wt,"resolveModelCapabilities");function No(){return[...yt(),...Tt()]}i(No,"listAllModelCapabilities");function Xi(e){if(F(e)){let t=j[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Ue(e))return $o(e)}i(Xi,"getProviderVerifyMetadata");async function jo(e,t){let n=Xi(e);if(!n&&!St(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Rt().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=En(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(jo,"verifyProviderCredential");async function Fo(e,t){if(!St(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=We(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(Fo,"listProviderModels");function Vi(e){let t=e.model??We(e.provider)[0]?.id,n=t?wt(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?It(n,e.rejectedEfforts):n,r=De({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(Vi,"resolveWireEffort");var Ko={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-v4-flash":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.028},"deepseek-v4-pro":{inputPer1M:1.68,outputPer1M:3.36,cachePer1M:.14}},kimi:{"k2.5":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},zhipu:{"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function xn(e,t,n){let o=n?.[e]?.[t];return o||Ko[e]?.[t]}i(xn,"getCostRate");function _n(e,t,n,o=0){let r=t/1e6*e.inputPer1M,s=n/1e6*e.outputPer1M,a=e.cachePer1M?o/1e6*e.cachePer1M:0;return r+s+a}i(_n,"calculateCost");function Gi(){return{records:[],retries:[]}}i(Gi,"createCostTracker");function Tn(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(Tn,"recordRetry");function Cn(e,t,n){let o=xn(t.provider,t.model,n),r=(t.cacheReadTokens??0)+(t.cacheWriteTokens??0),s=o?_n(o,t.inputTokens,t.outputTokens,r):0,a={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,cost:s,role:t.role};return{records:[...e.records,a],retries:e.retries}}i(Cn,"recordUsage");function Hi(e){let t=0,n=0,o=0,r=0,s=0,a=0,u={},c={};for(let p of e.records){t+=p.cost,n+=p.inputTokens,o+=p.outputTokens,r+=p.cacheReadTokens+p.cacheWriteTokens,s+=p.cacheReadTokens,a+=p.cacheWriteTokens;let g=u[p.provider];u[p.provider]={cost:(g?.cost??0)+p.cost,calls:(g?.calls??0)+1,inputTokens:(g?.inputTokens??0)+p.inputTokens,outputTokens:(g?.outputTokens??0)+p.outputTokens};let h=p.role??"default",C=c[h];c[h]={cost:(C?.cost??0)+p.cost,calls:(C?.calls??0)+1,inputTokens:(C?.inputTokens??0)+p.inputTokens,outputTokens:(C?.outputTokens??0)+p.outputTokens}}let f=0;for(let p of e.retries)f+=p.waitMs;let l=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:l,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:f,byProvider:u,byRole:c}}i(Hi,"getSummary");function Mt(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Mt,"formatCost");function Ji(e){let t=[];if(t.push(`Session Cost: ${Mt(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}: ${Mt(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}: ${Mt(s.cost)} (${s.calls} calls)`)}return t.join(`
33
+ `)}i(Ji,"formatCostReport");var Uo={inputTokens:0,outputTokens:0,totalTokens:0},qi=3e4;async function Yi(e){let t=new AbortController,n=e.timeoutMs??qi,o=e.costTracker,r,s=i(c=>{r||(r=c),t.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),n),u=i(()=>s("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?s("parent"):e.abortSignal.addEventListener("abort",u,{once:!0}));try{let c=await e.provider.stream([...e.messages],[],e.system,e.reasoning??{effort:"none"},{modelOverride:e.model,onRetryAfter:i(h=>{o&&(o=Tn(o,{provider:h.provider,waitMs:h.waitMs,reason:h.reason,source:h.source}))},"onRetryAfter")},t.signal),f=c.usage??Uo,l=c.textBlocks??[],p=c.toolBlocks??[],g=l.map(h=>h.text).join("");return p.length>0?{text:g,usage:f,costTracker:o,stopReason:"error",error:new Error(`sideQuery: provider returned ${p.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=Cn(o,{provider:e.provider.name,model:e.model,inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cachedReadTokens,cacheWriteTokens:f.cachedWriteTokens,role:e.querySource})),{text:g,usage:f,costTracker:o,stopReason:Qi(c.stopReason)})}catch(c){let f=c instanceof Error?c:new Error(String(c)),l="error";return t.signal.aborted&&(l=r==="timeout"?"timeout":"aborted"),{text:"",usage:Uo,costTracker:o,stopReason:l,error:f}}finally{clearTimeout(a),e.abortSignal&&e.abortSignal.removeEventListener("abort",u)}}i(Yi,"sideQuery");function Qi(e){return e==="max_tokens"?"max_tokens":"end_turn"}i(Qi,"mapStopReason");export{Q as a,M as b,Pe as c,At as d,Dt as e,Ot as f,Wo as g,zo as h,Xo as i,Se as j,Vo as k,Go as l,Ve as m,It as n,Ho as o,Jo as p,qo as q,Yo as r,Qo as s,le as t,Pn as u,Sn as v,Nt as w,fe as x,Je as y,Ae as z,Rn as A,tr as B,wn as C,De as D,nr as E,sr as F,se as G,ae as H,jt as I,qe as J,Ye as K,Bn as L,Ln as M,mr as N,hr as O,de as P,Qe as Q,H as R,Er as S,Un as T,ge as U,me as V,Ut as W,Wt as X,he as Y,zt as Z,Ie as _,N as $,W as aa,ke as ba,be as ca,Le as da,Ne as ea,j as fa,z as ga,gn as ha,bo as ia,Eo as ja,xo as ka,_o as la,To as ma,Co as na,Po as oa,F as pa,mt as qa,ht as ra,yt as sa,Ke as ta,bt as ua,Ao as va,Et as wa,_e as xa,xt as ya,Do as za,Oo as Aa,_t as Ba,xe as Ca,Tt as Da,Bo as Ea,Ct as Fa,Ue as Ga,Pt as Ha,Lo as Ia,En as Ja,St as Ka,Rt as La,We as Ma,wt as Na,No as Oa,jo as Pa,Fo as Qa,Vi as Ra,Ko as Sa,xn as Ta,_n as Ua,Gi as Va,Tn as Wa,Cn as Xa,Hi as Ya,Mt as Za,Ji as _a,Yi as $a};