@kodax-ai/kodax 0.7.78 → 0.7.80

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 (126) hide show
  1. package/CHANGELOG.md +3556 -3197
  2. package/README.md +371 -277
  3. package/README_CN.md +295 -215
  4. package/config-templates/config.example.jsonc +24 -2
  5. package/config-templates/integrations/a2a.example.jsonc +23 -7
  6. package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +2 -1
  7. package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +1 -0
  8. package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +4 -3
  9. package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +1 -0
  10. package/dist/builtin/skill-creator/scripts/compare-runs.js +4 -3
  11. package/dist/builtin/skill-creator/scripts/generate-review.js +2 -1
  12. package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +1 -0
  13. package/dist/builtin/skill-creator/scripts/grade-evals.js +4 -3
  14. package/dist/builtin/skill-creator/scripts/improve-description.js +2 -1
  15. package/dist/builtin/skill-creator/scripts/init-skill.d.ts +1 -0
  16. package/dist/builtin/skill-creator/scripts/init-skill.js +4 -3
  17. package/dist/builtin/skill-creator/scripts/install-skill.d.ts +1 -0
  18. package/dist/builtin/skill-creator/scripts/install-skill.js +4 -3
  19. package/dist/builtin/skill-creator/scripts/package-skill.d.ts +1 -0
  20. package/dist/builtin/skill-creator/scripts/package-skill.js +4 -3
  21. package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +1 -0
  22. package/dist/builtin/skill-creator/scripts/quick-validate.js +4 -3
  23. package/dist/builtin/skill-creator/scripts/run-eval.d.ts +1 -0
  24. package/dist/builtin/skill-creator/scripts/run-eval.js +4 -3
  25. package/dist/builtin/skill-creator/scripts/run-loop.js +2 -1
  26. package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +2 -1
  27. package/dist/builtin/skill-creator/scripts/utils.d.ts +3 -0
  28. package/dist/builtin/skill-creator/scripts/utils.js +5 -1
  29. package/dist/chunks/agent-5PHGNFW3.js +2 -0
  30. package/dist/chunks/argument-completer-FXRZFMTC.js +2 -0
  31. package/dist/chunks/chunk-6UENDY33.js +89 -0
  32. package/dist/chunks/{chunk-6FOJVETH.js → chunk-BWX4YZX3.js} +7 -7
  33. package/dist/chunks/chunk-CDCCTM5I.js +278 -0
  34. package/dist/chunks/chunk-CEB5FDND.js +810 -0
  35. package/dist/chunks/{chunk-2CFHBKRE.js → chunk-E7C4DRD2.js} +2 -2
  36. package/dist/chunks/chunk-EVXIJPZ6.js +218 -0
  37. package/dist/chunks/chunk-FQ7NVMSU.js +319 -0
  38. package/dist/chunks/chunk-GC4JBMBS.js +385 -0
  39. package/dist/chunks/{chunk-Z3KFRTSB.js → chunk-HTVLCHWH.js} +1 -1
  40. package/dist/chunks/chunk-IHPH3444.js +655 -0
  41. package/dist/chunks/{chunk-YAZQTC2L.js → chunk-KHEFUT6O.js} +1 -1
  42. package/dist/chunks/{chunk-7OEBJGHK.js → chunk-PMKAG4SZ.js} +1 -1
  43. package/dist/chunks/chunk-RPF5RGWZ.js +479 -0
  44. package/dist/chunks/{chunk-UID7BLAB.js → chunk-RXXKDR6Y.js} +1 -1
  45. package/dist/chunks/chunk-T5U4OP2N.js +292 -0
  46. package/dist/chunks/chunk-TRNAWSXP.js +123 -0
  47. package/dist/chunks/chunk-UZSHBQER.js +30 -0
  48. package/dist/chunks/{chunk-TQDBTTIM.js → chunk-VECRQTSD.js} +44 -44
  49. package/dist/chunks/compaction-config-6J6XCBJS.js +2 -0
  50. package/dist/chunks/{construction-bootstrap-VQLQGWPY.js → construction-bootstrap-KPCAE3VN.js} +1 -1
  51. package/dist/chunks/dist-RWEVZOFK.js +2 -0
  52. package/dist/chunks/{dist-BFT5YIGU.js → dist-WWL2DNIJ.js} +1 -1
  53. package/dist/chunks/host-OGS2R5J4.js +2 -0
  54. package/dist/chunks/run-manager-2YMM3BOT.js +2 -0
  55. package/dist/chunks/{utils-SID4HW2Q.js → utils-2YHRUZYC.js} +1 -1
  56. package/dist/index.d.ts +21 -20
  57. package/dist/index.js +4 -4
  58. package/dist/kodax_bootstrap.js +2 -1
  59. package/dist/kodax_cli.js +1850 -1476
  60. package/dist/kodax_resume.js +570 -34
  61. package/dist/provider-capabilities.json +85 -50
  62. package/dist/runtime-worker.js +1737 -1369
  63. package/dist/sandbox-workspace-session.js +285 -19
  64. package/dist/sdk-a2a.d.ts +19 -13
  65. package/dist/sdk-a2a.js +8 -8
  66. package/dist/sdk-agent.d.ts +80 -150
  67. package/dist/sdk-agent.js +1 -1
  68. package/dist/sdk-coding.d.ts +186 -66
  69. package/dist/sdk-coding.js +1 -1
  70. package/dist/sdk-experimental-memory.d.ts +3 -3
  71. package/dist/sdk-experimental-memory.js +1 -1
  72. package/dist/sdk-llm.d.ts +7 -7
  73. package/dist/sdk-llm.js +1 -1
  74. package/dist/sdk-mcp.d.ts +1 -1
  75. package/dist/sdk-mcp.js +1 -1
  76. package/dist/sdk-media.d.ts +1 -1
  77. package/dist/sdk-media.js +1 -1
  78. package/dist/sdk-repl.d.ts +31 -213
  79. package/dist/sdk-repl.js +2 -2
  80. package/dist/sdk-runtime.d.ts +230 -31
  81. package/dist/sdk-runtime.js +1 -1
  82. package/dist/sdk-sandbox.js +1 -1
  83. package/dist/sdk-session.d.ts +8 -8
  84. package/dist/sdk-session.js +1 -1
  85. package/dist/sdk-skills.js +1 -1
  86. package/dist/semantic-worker.js +283 -18
  87. package/dist/types-chunks/{base.d-4e74xDdy.d.ts → base.d-DxG0m09Z.d.ts} +1 -1
  88. package/dist/types-chunks/{bash-prefix-extractor.d-uAe2Oqda.d.ts → bash-prefix-extractor.d-DStqKIlu.d.ts} +31 -8
  89. package/dist/types-chunks/{capability-learning.d-CVsdHw4j.d.ts → capability-learning.d-iPSiAmc_.d.ts} +1 -1
  90. package/dist/types-chunks/{capsule.d-BlSv9l3V.d.ts → capsule.d-BuFJaYxA.d.ts} +14 -21
  91. package/dist/types-chunks/{types.d-BA-Jwpfs.d.ts → controller.d-C2aHqzHj.d.ts} +344 -11
  92. package/dist/types-chunks/{guardrail.d-CXDYRgZ3.d.ts → guardrail.d-DM-OK0m3.d.ts} +187 -116
  93. package/dist/types-chunks/{history-retrieval.d-DtCy7x64.d.ts → history-retrieval.d-DImTKgO6.d.ts} +16 -3
  94. package/dist/types-chunks/{oauth-login.d-Bgb4rdLN.d.ts → oauth-login.d-6i-vidxv.d.ts} +6 -2
  95. package/dist/types-chunks/{public-api.d-B3AohsxN.d.ts → public-api.d-CewTvUKV.d.ts} +335 -38
  96. package/dist/types-chunks/{repl.d-Ie_ZXb_U.d.ts → repl.d-DvXQtgr7.d.ts} +5 -5
  97. package/dist/types-chunks/{resolver.d-iAQ9ocLB.d.ts → resolver.d-C9IW4fmU.d.ts} +5 -2
  98. package/dist/types-chunks/{run-manager.d-D1twIhF9.d.ts → run-manager.d-C6ahvZqK.d.ts} +1 -1
  99. package/dist/types-chunks/{sdk-session-DB9KksIx.d.ts → sdk-session-C59RUrri.d.ts} +3 -3
  100. package/dist/types-chunks/shell-command-sets.d-Dp4UvPLL.d.ts +297 -0
  101. package/dist/types-chunks/{side-query.d-DTuLPcC5.d.ts → side-query.d-CP1LiRiH.d.ts} +8 -2
  102. package/dist/types-chunks/{types-D3g6XUQr.d.ts → types-Bf3Y3mW-.d.ts} +1 -1
  103. package/dist/types-chunks/{types.d-BH0ZkTGf.d.ts → types.d-BzpPDBPV.d.ts} +2 -2
  104. package/dist/types-chunks/{types.d-DIpZJKUl.d.ts → types.d-CgrXrFrq.d.ts} +16 -2
  105. package/dist/types-chunks/{types.d-DVDTIfB_.d.ts → types.d-yuJzE82x.d.ts} +4 -4
  106. package/dist/types-chunks/{utils.d-CVp6bFl9.d.ts → utils.d-BpACJmzt.d.ts} +24 -6
  107. package/docs/SDK_EMBEDDER_GUIDE.md +1148 -598
  108. package/package.json +6 -3
  109. package/dist/chunks/agent-ASP4MS3X.js +0 -2
  110. package/dist/chunks/argument-completer-JYQ7FX3W.js +0 -2
  111. package/dist/chunks/chunk-35PPHOQ2.js +0 -292
  112. package/dist/chunks/chunk-43QNNDHR.js +0 -29
  113. package/dist/chunks/chunk-5GO6FH7L.js +0 -458
  114. package/dist/chunks/chunk-5NDCSFOP.js +0 -78
  115. package/dist/chunks/chunk-6XM4B6K2.js +0 -48
  116. package/dist/chunks/chunk-6YZUE6NC.js +0 -240
  117. package/dist/chunks/chunk-KQLQYHWU.js +0 -386
  118. package/dist/chunks/chunk-NXO6GWSY.js +0 -46
  119. package/dist/chunks/chunk-T2XZTLYE.js +0 -316
  120. package/dist/chunks/chunk-VAT2QYXM.js +0 -765
  121. package/dist/chunks/chunk-YVRYHC4C.js +0 -655
  122. package/dist/chunks/compaction-config-BQSSIWK5.js +0 -2
  123. package/dist/chunks/dist-PCFE24YP.js +0 -2
  124. package/dist/chunks/host-UTFXCYYM.js +0 -2
  125. package/dist/chunks/run-manager-PJU3WIFJ.js +0 -2
  126. package/dist/types-chunks/guardrail.d-BRE_ErEj.d.ts +0 -156
@@ -0,0 +1,123 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{a as i}from"./chunk-ONUPGMER.js";import{AsyncLocalStorage as xr}from"node:async_hooks";var ot=new xr;function Cr(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");return ot.run({provider:e,credential:t},n)}i(Cr,"runWithProviderCredential");function _r(e){let t=ot.getStore();return t?.provider===e?t.credential:void 0}i(_r,"getScopedProviderCredential");function he(e,t){let n=ot.getStore();return n?n.provider===e?n.credential:void 0:t}i(he,"resolveProviderCredential");function Pr(e){let t=ot.getStore()?.credential;return t?$e(e,t,new WeakMap):e}i(Pr,"redactScopedProviderCredential");function $e(e,t,n){if(typeof e=="string")return e.split(t).join("[REDACTED_CREDENTIAL]");if(e===null||typeof e!="object")return e;let o=n.get(e);if(o!==void 0)return o;if(e instanceof Error){let s=new Error($e(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=$e(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push($e(a,t,n));return s}let r={};n.set(e,r);for(let[s,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let c=s.split(t).join("[REDACTED_CREDENTIAL]");r[c]=$e(a.value,t,n)}return r}i($e,"redactCredentialValue");var ne=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},I=class extends ne{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Le=class extends ne{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},Gt=class extends ne{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},rt=class extends I{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Jt=class extends ne{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var qt=32768,wr=32e3,Sr=64e3,Mr=.5;function Fe(e,t,n={}){if(e===void 0)return;let o=n.allowZero===!0;if(!Number.isFinite(e)||(o?e<0:e<=0)){let r=o?"a non-negative finite number":"a positive finite number";throw new Error(`${t} must be ${r}`)}return e===0?0:Math.max(1,Math.floor(e*1e3))}i(Fe,"timeoutSecToMs");function Rr(e){if(e===void 0||e.trim().length===0)return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return Math.max(1,Math.floor(t*1e3))}i(Rr,"parseTimeoutSecEnvMs");function Ar(e){if(!e)return;let t={requestTimeoutMs:Fe(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Fe(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Fe(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Fe(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Ar,"resolveLlmTimeoutConfig");function it(e,t){return`${e}/${t??""}`}i(it,"capabilityCacheKey");function Yt(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(Yt,"narrowReasoningProfile");function Dr(e,t,n){return e[it(t,n)]?.rejected??[]}i(Dr,"getRejectedEfforts");function Ir(e,t,n,o,r,s){let a=it(t,n),c=e[a],u=c?.rejected.includes(o)?c.rejected:[...c?.rejected??[],o];return{...e,[a]:{rejected:u,source:r,updatedAt:s}}}i(Ir,"addRejectedEffort");function Or(e,t,n){if(!t)return{};let o={...e};return delete o[it(t,n)],o}i(Or,"removeCacheEntry");function Nr(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(u=>typeof u=="string"):[],a=r.source==="probed"?"probed":"observed",c=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:c}}return t}i(Nr,"sanitizeCapabilityCache");var $r=["off","auto","quick","balanced","deep"],ye=["auto","none","low","medium","high"],Jn={low:6e3,medium:1e4,high:2e4},qn=4096,Qt=[{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"}],Zt=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Alias to high"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning"}],Lr=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Low reasoning"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to high"},{value:"max",description:"Maximum reasoning"}],Fr=[{value:"low",description:"Thinking is always on"},{value:"medium",description:"Thinking is always on"},{value:"high",description:"Thinking is always on",isDefault:!0},{value:"xhigh",description:"Thinking is always on"},{value:"max",description:"Thinking is always on"}];function at(e,t={}){return{...Br(e),...t,reasoningPreset:e}}i(at,"createReasoningProfileFromPreset");function Br(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Zt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-flash-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Lr,effortAliases:{medium:"high",xhigh:"high"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":case"deepseek-v4-pro-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Zt,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:Zt,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:Qt,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:[{value:"none",description:"Disable thinking"},{value:"low",description:"Low thinking effort"},{value:"high",description:"High thinking effort",isDefault:!0},{value:"max",description:"Maximum thinking effort"}],effortAliases:{minimal:"low",minimum:"low",light:"low",medium:"high",xhigh:"max",ultra:"max"},disabledEfforts:["none"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:Fr,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:Qt,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:Qt,budgetByEffort:{low:6e3,medium:1e4,high:16e3,xhigh:24e3,max:32e3},disabledEfforts:["none","minimal"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"claude-adaptive-xhigh":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"xhigh"},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"claude-adaptive-max":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"anthropic-budget":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"anthropic-budget",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"}],budgetByEffort:{low:6e3,medium:1e4,high:16e3},disabledEfforts:["none"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"openai-chat-reasoning":case"openai-responses-reasoning":return{reasoningPreset:e,effortStrategy:e==="openai-chat-reasoning"?"openai-chat-effort":"openai-responses-effort",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],disabledEfforts:["none"],supportsReasoningEffort:!0,supportsReasoningSummary:!0,supportsEncryptedReasoningReplay:!0};case"codex-cli-effort":return{reasoningPreset:e,effortStrategy:"codex-cli-config",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],allowCustomEffort:!0,supportsReasoningEffort:!0};case"none":return{reasoningPreset:e,effortStrategy:"none",thinkingStrategy:"none"}}}i(Br,"createBaseReasoningProfileFromPreset");function tn(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(tn,"getReasoningCapability");function ve(e){return ct(e).enabled}i(ve,"isReasoningEnabled");function ct(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?Ue(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":e===void 0?"omitted":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(ct,"normalizeReasoningRequest");function Ue(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(Ue,"normalizeReasoningEffortValue");function Yn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Yn,"mapLegacyReasoningModeToEffortIntent");function jr(e){switch(e){case"none":return"off";case"auto":return"auto";case"low":return"quick";case"medium":return"balanced";case"high":return"deep";default:return}}i(jr,"effortToLegacyReasoningMode");function Qn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=Ue(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(Qn,"parseReasoningEffortEnv");function We(e){let t=Qn(e.envEffort),n=[];Be(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Be(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Yn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Be(n,e.modelDefaultEffort??e.capability?.defaultEffort??je(e.capability),"model-default",!1),Be(n,e.providerDefaultEffort,"provider-default",!1),Be(n,e.fallbackEffort??Ke(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:Ur(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Zn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(We,"resolveReasoningEffort");function Kr(e){let t=e.currentEffort?Ue(e.currentEffort):void 0;if(t&&eo(t,e.capability))return{effectiveEffort:st(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??je(e.capability)??en(e.capability)??Ke(e.capability),o=n&&st(n,e.capability);return t?{effectiveEffort:o,preserved:!1,diagnostic:o?`Effort ${t} is not supported by the selected model; using ${o}.`:`Effort ${t} is not supported by the selected model; clearing effort.`}:{effectiveEffort:o,preserved:!1}}i(Kr,"resolveReasoningEffortForModelSwitch");function Be(e,t,n,o){if(t===void 0)return;let r=Ue(t);e.push({value:r,source:n,isExplicit:o})}i(Be,"pushEffortCandidate");function Ur(e,t){let n=e.find(o=>o.value!=="auto");return n?Zn(n.value,t,n.isExplicit):je(t)??Ke(t)}i(Ur,"resolveAutoEffectiveEffort");function Zn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return je(t)??en(t)??Ke(t)??e}if(e==="none")return e;if(eo(e,t))return st(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return je(t)??en(t)??Ke(t)??e}i(Zn,"validateReasoningEffort");function st(e,t){return t?.effortAliases?.[e]??e}i(st,"applyEffortAlias");function eo(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=Wr(t);return n.length===0?ye.includes(e):n.includes(e)||n.includes(st(e,t))}i(eo,"isSupportedReasoningEffort");function Wr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(Wr,"getSupportedEffortValues");function je(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(je,"getDefaultPresetValue");function en(e){let t=e?.supportedEfforts?.filter(zr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(en,"getMiddleVisiblePresetValue");function zr(e){return e.isUserVisible!==!1}i(zr,"isUserVisiblePreset");function Ke(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(Ke,"getFallbackEffortForCapability");function Xr(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(Xr,"getDefaultThinkingDepthForMode");function ue(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ue,"effortToThinkingDepth");function de(e,t,n="unknown"){if(t==="off")return 0;let o={...Jn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(de,"resolveThinkingBudget");function le(e,t,n=qn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(le,"clampThinkingBudget");function nn(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(nn,"mapDepthToOpenAIReasoningEffort");function to(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):to(t.cause)}i(to,"getStatus");function Vr(e){if(e instanceof Error)return e.message.toLowerCase();if(typeof e=="string")return e.toLowerCase();if(e&&typeof e=="object"){let t=e;return[t.message,t.error,t.detail,t.body].filter(o=>typeof o=="string").join(" ").toLowerCase()}return""}i(Vr,"getMessage");var Hr=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],Gr=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],Jr=["minimal","none","low","medium","high","xhigh","max"];function qr(e,t){for(let n of Jr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(qr,"extractRejectedEffort");function on(e,t){let n=to(e);if(n!==400&&n!==422)return null;let o=Vr(e);if(!o)return null;let r=Hr.some(c=>o.includes(c)),s=Gr.some(c=>o.includes(c));if(!r||!s)return null;let a=qr(o,t);return a?{rejectedEffort:a}:null}i(on,"classifyReasoningEffortRejection");function no(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(no,"readHeader");function oo(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(oo,"parsePositiveNumber");function Yr(e,t){if(!e)return;let n=e.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let r=o-t;return r>0?r:void 0}i(Yr,"parseHttpDate");function ut(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=oo(no(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 c=no(e,"retry-after");if(c!==void 0&&c.trim().length>0){let g=oo(c);if(g!==void 0){let h=g*1e3,_=Math.min(h,r);return{type:"header",waitMs:Math.round(_),source:"retry-after-seconds",cappedFromHeader:_!==h}}let E=Yr(c,s);if(E!==void 0){let h=Math.min(E,r);return{type:"header",waitMs:Math.round(h),source:"retry-after-date",cappedFromHeader:h!==E}}}let u=n*Math.pow(2,Math.max(0,t.attempt)),l=Math.min(u,o),p=t.withJitter!==!1?Math.random()*.25*l:0;return{type:"backoff",waitMs:Math.round(l+p),source:"exponential-backoff",attempt:t.attempt}}i(ut,"parseRetryAfter");function dt(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(dt,"extractHeadersFromError");import{AsyncLocalStorage as Qr}from"node:async_hooks";var ro=new Qr,io=8,so=32;function Zr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(Zr,"parsePositiveInt");function ei(){let e=ze()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:Zr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??io;return Math.max(1,Math.min(so,t))}i(ei,"resolveWorkflowMaxConcurrency");function ti(e,t){return ro.run(e,t)}i(ti,"runWithScopedConfig");function ze(){return ro.getStore()}i(ze,"getRunScopedConfig");function Q(e){if(e!==void 0)return e;let t=ze()?.disablePromptCache;return t!==void 0?t:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}i(Q,"resolvePromptCacheDisabled");var fe={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},ao={...fe,multimodalSupport:"image-input"},Xe={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},co={...Xe,multimodalSupport:"image-input"};function lt(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}i(lt,"normalizeCapabilityProfile");function Y(e){return{...lt(e)}}i(Y,"cloneCapabilityProfile");function ni(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(ni,"parseEnvInt");function oi(e){switch(e.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-flash-openai":case"deepseek-v4-pro-openai":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(oi,"shouldLowerAutoReasoningEffort");function pt(){return new DOMException("Request aborted","AbortError")}i(pt,"abortError");function ri(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(pt()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(pt())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(ri,"waitForRetryDelay");function rn(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(rn,"normalizeHttpStatus");function uo(e){if(!e||typeof e!="object")return;let t=e;return rn(t.status)??rn(t.statusCode)??rn(t.code)??uo(t.cause)}i(uo,"extractHttpStatus");function lo(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:lo(t.cause)}i(lo,"extractErrorCode");function ft(e){if(e instanceof Error)return e.message.toLowerCase();if(e&&typeof e=="object"){let t=e.message;if(typeof t=="string")return t.toLowerCase()}return String(e).toLowerCase()}i(ft,"getErrorMessage");var Z=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;suppressReasoningEffort=!1;setMaxOutputTokensOverride(t){this.maxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=ze()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??ni(process.env.KODAX_MAX_OUTPUT_TOKENS);if(o!==void 0)return o;let r=this.getModelDescriptor(t)?.maxOutputTokens;return r!==void 0?r:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(t){let n=this.getModelDescriptor(t)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(t){let n=this.getModelDescriptor(t)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(t){let n=this.getModelDescriptor(t)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getProviderSupportsThinking(){return this.config.supportsThinking}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsEphemeralSuffix(){return!1}usesPromptCacheAffinity(){return this.config.promptCacheAffinity===!0}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,s,a){throw new I(`${this.name} does not support non-streaming fallback`)}isConfigured(){return he(this.name,process.env[this.config.apiKeyEnv])!==void 0}async verifyCredential(t){return{ok:!1,error:"unsupported",strategy:this.config.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider class "${this.name}" does not implement verifyCredential()`}}getModel(){return this.config.model}getAvailableModels(){return this.config.models?.length?[...new Set([this.config.model,...this.config.models.map(t=>t.id)])]:[this.config.model]}getModelDescriptor(t){let n=t??this.config.model,o=this.config.models?.find(r=>r.id===n);if(o){let r=o.wireModel?this.config.models?.find(s=>s.id===o.wireModel):void 0;return r?{...r,...o}:o}if(n===this.config.model)return{id:this.config.model}}getWireModelId(t){let n=t??this.config.model;return this.getModelDescriptor(n)?.wireModel??n}getWireModel(t){return this.getWireModelId(t)}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return Y(this.config.capabilityProfile??fe)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:tn(this.config)}getReasoningCapability(t){return this.getConfiguredReasoningCapability(t)}getReasoningProfile(t){return this.getModelDescriptor(t)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase(),s=n.map(c=>c.toLowerCase()).some(c=>o.includes(c)),a=o.includes("parameter")||s;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.map(a=>a.toLowerCase()).some(a=>o.includes(a))?o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported"):!1}shouldFallbackForForcedToolChoiceError(t){let n=ft(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported")||n.includes("incompatible"))?!0:this.isServerError(t)}isServerError(t){let n=uo(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=ft(t);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(t){switch(t){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","none"];case"native-adaptive":return["native-adaptive","none"];case"native-toggle":return["native-toggle","none"];default:return["none"]}}getContextWindow(){return this.getEffectiveContextWindow()}getEffectiveContextWindow(t){let n=this.getModelDescriptor(t)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let t=he(this.name,process.env[this.config.apiKeyEnv]);if(!t)throw new Error(`${this.config.apiKeyEnv} not set`);return t}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...t){this.shouldLogStreamDiagnostics()&&console.error(...t)}normalizeReasoning(t){return ct(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=ye.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let d=n?`/${n}`:"";throw new I(`${this.name}${d} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${ye.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let d=n?`/${n}`:"";throw new I(`${this.name}${d} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(d=>d.value)??[],c=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(c)||a.length===0&&r)return;let u=n?`/${n}`:"",l=a.length>0?a.join(", "):ye.join(", ");throw new I(`${this.name}${u} does not support reasoning effort "${o}". Supported efforts: ${l}.`,this.name)}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.effortSource==="explicit"){let s=o?`/${o}`:"";throw new I(`${this.name}${s} does not support reasoning effort "${r}".`,this.name)}if(n.defaultEffort)return{disabled:!1,effort:n.defaultEffort,requestedEffort:r}}if(!t.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(oi(n)){let s=We({capability:n,explicitEffort:r??"auto"}).effectiveEffort;return s==="none"||s!==void 0&&n.disabledEfforts?.includes(s)?{disabled:!0,effort:s,requestedEffort:r}:{disabled:!1,effort:s,requestedEffort:r}}return{disabled:!1,requestedEffort:r}}return{disabled:!1,effort:n.effortAliases?.[r]??r,requestedEffort:r}}onStaleConnection(){}isRateLimitError(t){if(!(t instanceof Error))return!1;let n=t.message.toLowerCase();return["rate","limit","\u901F\u7387","\u9891\u7387","1302","429","too many","overload","overwhelmed","503","529","busy"].some(o=>n.includes(o))}classifyRateLimitReason(t){let n=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.includes("overload")||n.includes("overwhelmed")||n.includes("503")||n.includes("529")||n.includes("busy")?"overloaded":"rate-limit"}extractRetryAfterMs(t){let n=dt(t);if(!n)return;let o=ut(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=ft(t),o=[{regex:/(\d[\d,]*)\s*tokens?.*?(\d[\d,]*)\s*(?:maximum|limit|context)/i,inputGroup:1,limitGroup:2},{regex:/maximum.*?(\d[\d,]*)\s*tokens?.*?requested.*?(\d[\d,]*)/i,inputGroup:2,limitGroup:1},{regex:/exceeds?\s+.*?(\d[\d,]*)\s*.*?(?:limit|max|context|上限).*?(\d[\d,]*)/i,inputGroup:1,limitGroup:2}];for(let r of o){let s=n.match(r.regex);if(s){let a=Number(s[r.inputGroup].replace(/,/g,"")),c=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,c-a-1e3)}}}isContextOverflowError(t){let n=ft(t);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,s,a){let c=!1;this.suppressReasoningEffort=!1;for(let u=0;u<o;u++)try{let l=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,l}catch(l){if(this.isContextOverflowError(l)&&!this.maxOutputTokensOverride){let d=this.parseContextOverflow(l);if(d){this.maxOutputTokensOverride=d,r?.(u+1,o,0);continue}}if(this.isRateLimitError(l)){if(u===o-1)throw new Le(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let d=dt(l)??{},p=ut(d,{attempt:u,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,E=this.classifyRateLimitReason(l);if(s?.({provider:this.name,waitMs:g,reason:E,source:p.source,attempt:u+1,maxAttempts:o}),r?r(u+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${u+1}/${o})...`),n?.aborted||(await ri(g,n),n?.aborted))throw pt();continue}if(a&&!c){let d=on(l,a.effort);if(d){a.onRejected?.({provider:this.name,model:a.model,effort:d.rejectedEffort}),this.suppressReasoningEffort=!0,c=!0;continue}}if(a&&c){let d=on(l,a.effort);if(d)throw this.suppressReasoningEffort=!1,new rt(`${this.name} rejected reasoning effort "${d.rejectedEffort}" even after dropping it.`,this.name,d.rejectedEffort,a.model)}if(l instanceof Error){if((l.name==="AbortError"||l.name==="APIUserAbortError")&&n?.aborted)throw l.name==="AbortError"?l:new DOMException(l.message||"Request aborted","AbortError");let d=lo(l);throw(d==="ECONNRESET"||d==="EPIPE")&&this.onStaleConnection(),new I(`${this.name} API error: ${l.message}`,this.name)}throw l}throw new ne("Unexpected end of withRateLimit")}};import gi from"@anthropic-ai/sdk";import{parse as ii}from"partial-json";function ke(e){if(!e)return{value:{},salvaged:!1};try{let t=JSON.parse(e);return{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!1}}catch{}try{let t=ii(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}i(ke,"parseToolInputWithSalvageTracked");function si(e){return ke(e).value}i(si,"parseToolInputWithSalvage");var ai={max_tokens:"truncated",length:"truncated",model_context_window_exceeded:"truncated",end_turn:"end",stop:"end",stop_sequence:"end",tool_use:"tool",tool_calls:"tool",function_call:"tool",pause_turn:"paused",refusal:"refused",content_filter:"refused"};function gt(e){return e==null?"unknown":ai[e.trim().toLowerCase()]??"unknown"}i(gt,"classifyStopReason");function Ee(e){let t=gt(e);return t==="end"||t==="tool"||t==="paused"}i(Ee,"isCleanStop");async function be(e){if(e.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let t=e.runners.find(l=>l.strategy===e.strategy);if(!t)return{ok:!1,error:"unsupported",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${e.strategy}" is not implemented for this provider's base class`};if(e.signal?.aborted)return{ok:!1,error:"unknown",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=e.timeoutMs??8e3,r,s=i(l=>{r||(r=l),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),c=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",c,{once:!0});let u=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-u,approxTokensSpent:t.approxTokensSpent}}catch(l){return sn(l,{strategy:e.strategy,durationMs:Date.now()-u,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",c)}}i(be,"runVerifyCredential");function ci(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(ci,"redactKeyMaterial");function sn(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=ci(String(n.message??e)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",c;return t.abortCause==="timeout"?c="timeout":t.abortCause==="parent"?c="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?c="unauthorized":o===429?c="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?c="unauthorized":o!==void 0&&o>=500&&o<600?c="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?c="network":/timeout/i.test(r)?c="timeout":c="unknown",{ok:!1,error:c,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(sn,"classifyVerifyError");function an(e,t){let n=e[e.length-1];if(n&&Te(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(an,"insertCacheBoundary");function Te(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}i(Te,"isCacheBoundary");function cn(e,t){let n=[];for(let o of e){if(Te(o)){if(t==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}i(cn,"lowerCacheBoundaries");function xe(e){return e.filter(t=>!Te(t))}i(xe,"stripCacheBoundaries");import{readFile as ui,stat as di}from"node:fs/promises";import li from"node:path";var fi={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},Ce="[Historical image unavailable: the local attachment file is missing.]",fo="[Image content omitted: this provider does not support inline images in tool results.]";async function po(e){try{return await di(e),!1}catch(t){let n=t.code;return n==="ENOENT"||n==="ENOTDIR"}}i(po,"isImageFileMissing");function mt(e,t){return t??fi[li.extname(e).toLowerCase()]??"image/png"}i(mt,"resolveImageMediaType");async function pi(e){return(await ui(e)).toString("base64")}i(pi,"readImageFileAsBase64");async function ht(e){try{return await pi(e)}catch(t){let n=t.code;if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}i(ht,"readImageFileAsBase64IfAvailable");async function go(e,t){let n=await ht(e);if(n!==void 0)return`data:${mt(e,t)};base64,${n}`}i(go,"buildImageDataUrlIfAvailable");var mi="KodaX",hi="effort-2025-11-24";function mo(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(mo,"appendAnthropicEphemeralSuffix");function yi(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":mi}}i(yi,"getAnthropicCompatDefaultHeaders");function un(e,t){if(!e)return t;let n=typeof e.input_tokens=="number",o=typeof e.cache_creation_input_tokens=="number",r=typeof e.cache_read_input_tokens=="number",s=n||o||r,a=n?e.input_tokens:0,c=s?o?e.cache_creation_input_tokens:void 0:t?.cachedWriteTokens,u=s?r?e.cache_read_input_tokens:void 0:t?.cachedReadTokens,l=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,d=s?a+(c??0)+(u??0):t?.inputTokens??0;if(![d,l,c,u].some(p=>p!==void 0&&(!Number.isFinite(p)||p<0)))return{inputTokens:d,outputTokens:l,totalTokens:d+l,...u!==void 0?{cachedReadTokens:u}:{},...c!==void 0?{cachedWriteTokens:c}:{}}}i(un,"normalizeAnthropicUsage");function dn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(dn,"isRecord");function vi(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(vi,"selectAnthropicOutputEffort");function ho(e,t){let n=vi(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...dn(r)?r:{},effort:n}}i(ho,"applyAnthropicOutputEffort");function yo(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...dn(o)?o:{},effort:t}}i(yo,"setAnthropicOutputEffort");function ki(e){let n=e.output_config;return dn(n)&&typeof n.effort=="string"}i(ki,"hasAnthropicOutputEffort");var $=class extends Z{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=yi(this.config);return new gi({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let s=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&ki(t)?{"anthropic-beta":hi}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),c=n.reasoningPreset,u=t;if(c==="kimi-k2.7-code"||c==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(c==="kimi-k3"){let l=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!l){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:l?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(c==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(n.supportsDisabledThinking===!0||c==="zai-glm-5.2"||c==="zai-glm-toggle"||c==="deepseek-v4-anthropic"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||c==="minimax-m3"||c==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(c==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(u.reasoning_effort=a.effort);return}if(c==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},yo(t,a.effort);return}if(c==="minimax-m3"){t.thinking={type:"adaptive"};return}if(c==="zai-glm-toggle"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||c==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(u.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},yo(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let l=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:l}}}}resolveReasoningProfileBudget(t,n,o,r,s){let c=(n?t.budgetByEffort?.[n]:void 0)??de(this.config,ue(o.effort),o.taskType),u=this.getEffectiveThinkingBudgetCap(r),l=u!==void 0?Math.min(c,u):c;return le(l,s)}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"count-tokens",approxTokensSpent:0,run:i(async s=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")},{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({},{signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:i(async s=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return be({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}applyCacheControlToSystem(t){if(!t.trim()||Q())return t;let n=an([{type:"text",text:t}],"system");return cn(n,"attach")}applyCacheControlToTools(t){if(t.length===0||Q())return t;let n=t.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}applyCacheControlToMessages(t){if(t.length===0||Q())return t;let n=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"){n=l;break}if(n===-1)return t;let o=t[n];if(typeof o.content=="string"){if(o.content.length===0)return t;let l=t.slice();return l[n]={...o,content:[{type:"text",text:o.content,cache_control:{type:"ephemeral"}}]},l}if(o.content.length===0)return t;let r=o.content,a={...r[r.length-1],cache_control:{type:"ephemeral"}},c=[...r.slice(0,-1),a],u=t.slice();return u[n]={...o,content:c},u}supportsEphemeralSuffix(){return!0}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.normalizeReasoning(r),u=s?.modelOverride??this.config.model,l=this.getWireModelId(u);this.validateExplicitReasoningEffort(c,u);let d=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u),p=mo(this.applyCacheControlToMessages(await this.convertMessages(t,u)),s?.ephemeralSuffix?.content),g=c.enabled?this.getReasoningCapability(u):"none",E=this.getReasoningProfile(u),h=E?["profile","none"]:c.enabled?this.getReasoningFallbackChain(g).filter(x=>x==="native-budget"||x==="native-toggle"||x==="native-adaptive"||x==="none"):["none"],_=!!s?.forcedToolName,f=i(x=>{let P={model:l,max_tokens:d,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&_&&(P.tool_choice={type:"tool",name:s.forcedToolName}),x!=="none")if(x==="profile"&&E)this.applyReasoningProfile(P,E,c,u,d);else if(x==="native-budget"){let O=de(this.config,ue(c.effort),c.taskType);P.thinking={type:"enabled",budget_tokens:le(O,d)}}else x==="native-toggle"?P.thinking={type:"enabled"}:x==="native-adaptive"&&(P.thinking={type:"adaptive"},ho(P,c));return P},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let m=[],b=[],y=[],C,T=null,v="",k="",S="",M="",R="",F="",V="",W=!1,z,N=Date.now(),A=Date.now(),B,J;for(let x of h){for(;!B;)try{let P=f(x);B=await this.client.messages.create(P,this.buildMessageCreateOptions(P,u,a))}catch(P){if(J=P,_&&this.shouldFallbackForForcedToolChoiceError(P)){_=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let O=x==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:x==="native-budget"?["budget_tokens","thinking"]:x==="native-toggle"?["thinking"]:x==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(P,...O))throw P;break}if(B)break}if(!B)throw J??new I("All reasoning capability attempts failed without a captured error",this.name);let nt=Date.now(),Oe=0,Ne=0,Vt=3e4;for await(let x of B){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let P=Date.now(),O=P-nt;if(O>Vt&&(Oe++,Ne+=O,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(O/1e3)}s gap before ${x.type}`,{stallCount:Oe,totalStallMs:Ne,eventType:x.type})),nt=P,x.type==="content_block_start"||x.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),x.type==="content_block_start"){N=Date.now();let w=x.content_block;T=w.type,process.env.KODAX_DEBUG_TOOL_STREAM&&w.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:w.type,id:w.id,name:w.name}),w.type==="thinking"?(k="",S=w.signature??""):w.type==="redacted_thinking"?(T="redacted_thinking",M=w.data??""):w.type==="text"?v="":w.type==="tool_use"&&(R=w.id,F=w.name,V="")}else if(x.type==="content_block_delta"){N=Date.now();let w=x.delta;w.type==="thinking_delta"?(k+=w.thinking??"",s?.onThinkingDelta?.(w.thinking??"")):w.type==="text_delta"?(v+=w.text??"",s?.onTextDelta?.(w.text??"")):w.type==="input_json_delta"&&(V+=w.partial_json??"",s?.onToolInputDelta?.(F,w.partial_json??"",R?{toolId:R}:void 0))}else if(x.type==="content_block_stop"){if(N=Date.now(),T==="thinking")k&&(y.push({type:"thinking",thinking:k,signature:S}),s?.onThinkingEnd?.(k));else if(T==="redacted_thinking")M&&y.push({type:"redacted_thinking",data:M}),M="";else if(T==="text")v&&m.push({type:"text",text:v});else if(T==="tool_use")if(!R||!F)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(R),name:JSON.stringify(F),input:V.slice(0,100)});else{let w=ke(V);b.push({type:"tool_use",id:R,name:F,input:w.value,...w.salvaged?{_salvaged:!0,_truncated:!0}:{}})}T=null}else if(x.type==="message_stop"){if(W=!0,N=Date.now(),process.env.KODAX_DEBUG_STREAM){let w=Date.now()-A;this.logStreamDiagnostic(`[Stream] message_stop received after ${w}ms`)}}else if(x.type==="message_delta"){N=Date.now(),C=un(x.usage,C);let w=x.delta;w?.stop_reason&&(z=w.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${z}`))}else x.type==="message_start"&&(N=Date.now(),C=un(x.message?.usage,C),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!W){let x=Date.now()-A,P=Date.now()-N;if(a?.aborted){let O=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:x,lastEventAge:P,reason:O,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length}),new DOMException(O,"AbortError")}if(!z){let O=new Error(`Stream incomplete: message_stop event not received. Duration: ${x}ms, Last event: ${P}ms ago. This may indicate a network disconnection or API timeout.`);throw O.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:x,lastEventAge:P,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length}),O}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:x,lastEventAge:P,stopReason:z,textBlocks:m.length,toolBlocks:b.length,thinkingBlocks:y.length})}let D=Ee(z)?b.map(({_truncated:x,...P})=>P):b;return{textBlocks:m,toolBlocks:D,thinkingBlocks:y,usage:C,stopReason:z}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.normalizeReasoning(r),u=s?.modelOverride??this.config.model,l=this.getWireModelId(u);this.validateExplicitReasoningEffort(c,u);let d=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u),p=mo(this.applyCacheControlToMessages(await this.convertMessages(t,u)),s?.ephemeralSuffix?.content),g=c.enabled?this.getReasoningCapability(u):"none",E=this.getReasoningProfile(u),h=E?["profile","none"]:c.enabled?this.getReasoningFallbackChain(g).filter(v=>v==="native-budget"||v==="native-toggle"||v==="native-adaptive"||v==="none"):["none"],_=!!s?.forcedToolName,f=i(v=>{let k={model:l,max_tokens:d,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:p,tools:this.applyCacheControlToTools(n),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{metadata:{user_id:s.promptCacheKey}}:{}};if(s?.forcedToolName&&_&&(k.tool_choice={type:"tool",name:s.forcedToolName}),v!=="none")if(v==="profile"&&E)this.applyReasoningProfile(k,E,c,u,d);else if(v==="native-budget"){let S=de(this.config,ue(c.effort),c.taskType);k.thinking={type:"enabled",budget_tokens:le(S,d)}}else v==="native-toggle"?k.thinking={type:"enabled"}:v==="native-adaptive"&&(k.thinking={type:"adaptive"},ho(k,c));return k},"buildRequest"),m,b;for(let v of h){for(;!m;)try{let k=f(v);m=await this.client.messages.create(k,this.buildMessageCreateOptions(k,u,a))}catch(k){if(b=k,_&&this.shouldFallbackForForcedToolChoiceError(k)){_=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let S=v==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:v==="native-budget"?["budget_tokens","thinking"]:v==="native-toggle"?["thinking"]:v==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(k,...S))throw k;break}if(m)break}if(!m)throw b??new I("All reasoning capability attempts failed without a captured error",this.name);let y=[],C=[],T=[];for(let v of m.content)v.type==="text"?(y.push({type:"text",text:v.text}),s?.onTextDelta?.(v.text)):v.type==="thinking"?(T.push({type:"thinking",thinking:v.thinking,signature:v.signature??""}),s?.onThinkingDelta?.(v.thinking),s?.onThinkingEnd?.(v.thinking)):v.type==="redacted_thinking"?T.push({type:"redacted_thinking",data:v.data}):v.type==="tool_use"&&C.push({type:"tool_use",id:v.id,name:v.name,input:typeof v.input=="object"&&v.input!==null?v.input:{}});return{textBlocks:y,toolBlocks:C,thinkingBlocks:T,usage:un(m.usage),stopReason:m.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(Te(n))throw new I("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name);return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
3
+ `)}buildSystemPrompt(t,n){let o=n.filter(r=>r.role==="system").map(r=>this.serializeSystemMessageContent(r.content)).filter(Boolean);return[t,...o].filter(r=>typeof r=="string"&&r.trim().length>0).join(`
4
+
5
+ `)}async convertMessages(t,n){let o=[],r=this.getEffectiveStrictThinkingSignature(n);for(let s of t.filter(a=>a.role!=="system")){let a=s.role==="user"?"user":"assistant";if(typeof s.content=="string"){o.push({role:a,content:s.content});continue}let c=[],u=[];for(let d of s.content)d.type==="thinking"?!r||typeof d.signature=="string"&&d.signature.length>0?c.push({type:"thinking",thinking:d.thinking,signature:d.signature??""}):d.thinking&&u.push(d.thinking):d.type==="redacted_thinking"&&(r||c.push({type:"redacted_thinking",data:d.data}));u.length>0&&s.role==="assistant"&&c.push({type:"text",text:`<prior_reasoning>
6
+ ${u.join(`
7
+
8
+ `)}
9
+ </prior_reasoning>`});for(let d of s.content)if(d.type==="tool_result"&&s.role==="user"){let p;if(typeof d.content=="string")p=d.content;else{let g=[];for(let E of d.content)if(E.type==="text")g.push({type:"text",text:E.text});else if(E.type==="image"){let h=await ht(E.path);h===void 0?g.push({type:"text",text:Ce}):g.push({type:"image",source:{type:"base64",media_type:mt(E.path,E.mediaType),data:h}})}p=g}c.push({type:"tool_result",tool_use_id:d.tool_use_id,content:p,...d.is_error===!0?{is_error:!0}:{}})}for(let d of s.content)d.type==="tool_use"&&s.role==="assistant"&&c.push({type:"tool_use",id:d.id,name:d.name,input:d.input});for(let d of s.content)if(d.type==="text")c.push({type:"text",text:d.text});else if(d.type==="image"&&s.role==="user"){let p=await ht(d.path);p===void 0?c.push({type:"text",text:Ce}):c.push({type:"image",source:{type:"base64",media_type:mt(d.path,d.mediaType),data:p}})}if(a==="assistant"&&this.config.supportsThinking&&!r){let d=c.some(g=>g.type==="tool_use"),p=c.some(g=>g.type==="thinking"||g.type==="redacted_thinking");d&&!p&&c.unshift({type:"thinking",thinking:"...",signature:""})}let l=c.length===0||(a==="assistant"||a==="user")&&c.every(d=>{let p=d;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:l?[{type:"text",text:"..."}]:c})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=i((o,r)=>{let s=new Set;if(!o||typeof o.content=="string"||!Array.isArray(o.content))return s;for(let a of o.content){let c=a;r==="tool_use"&&c.type==="tool_use"&&c.id&&s.add(c.id),r==="tool_result"&&c.type==="tool_result"&&c.tool_use_id&&s.add(c.tool_use_id)}return s},"collectIds");return t.map((o,r)=>{if(typeof o.content=="string"||!Array.isArray(o.content))return o;let s=o.content;if(o.role==="assistant"){let a=n(t[r+1],"tool_result");s=s.filter(c=>{let u=c;return u.type!=="tool_use"||!!u.id&&a.has(u.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(c=>{let u=c;return u.type!=="tool_result"||!!u.tool_use_id&&a.has(u.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import Ei from"openai";var bi="KodaX";function vo(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i(vo,"isOpenAIReasoningAttempt");function Ti(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":bi}}i(Ti,"getOpenAICompatDefaultHeaders");function ln(e,t){return e==="max_tokens"?{max_tokens:t}:{max_completion_tokens:t}}i(ln,"serializeOpenAICompatMaxOutputTokens");function ko(e,t){if(!t)return e;let n=e.at(-1);if(n?.role!=="user")return[...e,{role:"user",content:t}];let o=typeof n.content=="string"?n.content.length>0?`${n.content}
10
+
11
+ ${t}`:t:[...n.content,{type:"text",text:t}];return[...e.slice(0,-1),{...n,content:o}]}i(ko,"appendOpenAIEphemeralSuffix");function xi(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return nn(ue(e.effort))}}i(xi,"selectOpenAIReasoningEffort");function Eo(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(Eo,"normalizeOpenAIUsage");function Ci(e){return e?e.type==="function"&&"function"in e:!1}i(Ci,"isOpenAIFunctionToolCall");function _i(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(_i,"extractOpenAIMessageText");function Pi(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(Pi,"extractOpenAIMessageReasoning");function yt(e){let t=e.role;return typeof t=="string"?t:void 0}i(yt,"getWireRole");function wi(e){if(yt(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(wi,"getAssistantWireToolCalls");function Si(e){if(yt(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}i(Si,"getToolWireCallId");function Mi(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(Mi,"rewriteAssistantWireToolCalls");var H=class extends Z{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;supportsEphemeralSuffix(){return!0}get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=Ti(this.config);return new Ei({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}getEffectiveMaxOutputTokensField(t){return this.getModelDescriptor(t)?.maxOutputTokensField??this.config.maxOutputTokensField??"max_completion_tokens"}onStaleConnection(){this._client=void 0}async verifyCredential(t){let n=this.config.model,o=this.getWireModelId(n),r=this.client,s=[{strategy:"models-list",approxTokensSpent:0,run:i(async a=>{await r.models.list({signal:a})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:i(async a=>{await r.chat.completions.create({model:o,...ln(this.getEffectiveMaxOutputTokensField(n),1),messages:[{role:"user",content:"hi"}]},{signal:a})},"run")}];return be({strategy:this.config.verifyStrategy??"models-list",runners:s,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=xe(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(t,n){let o=[];t&&t.trim().length>0&&o.push(t);let r=[];for(let s of n){if(s.role!=="system"){r.push(s);continue}let a=typeof s.content=="string"?s.content:Array.isArray(s.content)?s.content.filter(c=>typeof c=="object"&&c!==null&&c.type==="text"&&typeof c.text=="string").map(c=>c.text).join(`
12
+ `):"";a.trim().length>0&&o.push(a)}return{system:o.join(`
13
+
14
+ `),rest:r}}appendExtraBody(t,n){let o=typeof t.extra_body=="object"&&t.extra_body!==null?t.extra_body:{};t.extra_body={...o,...n}}resetReasoningCapabilityParams(t){delete t.reasoning_effort,delete t.thinking;let n=typeof t.extra_body=="object"&&t.extra_body!==null?{...t.extra_body}:void 0;if(n){if(delete n.enable_thinking,delete n.thinking_budget,delete n.thinking,Object.keys(n).length===0){delete t.extra_body;return}t.extra_body=n}}applyReasoningCapability(t,n,o,r){if(this.suppressReasoningEffort||o==="none")return;let s=t,a=this.getEffectiveMaxOutputTokens(n),c=le(de(this.config,ue(r.effort),r.taskType),a),u=this.getReasoningProfile(n);if(u){this.applyReasoningProfile(s,u,r,n,c);return}switch(o){case"native-effort":{this.validateExplicitReasoningEffort(r,n);let l=xi(r);l&&(s.reasoning_effort=l);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(s,{enable_thinking:!0,thinking_budget:c}):this.name==="zhipu"&&(s.thinking={type:"enabled",budget_tokens:c});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(s,{enable_thinking:!0}):this.name==="zhipu"&&(s.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,s){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),c=n.reasoningPreset;if(c==="kimi-k2.7-code"||c==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(c==="kimi-k3"){let u=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!u){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:u?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(c==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(c==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let u=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...u!==void 0?{thinking_budget:u}:{}});return}if(c==="deepseek-v4-flash-openai"||c==="deepseek-v4-pro-openai"||c==="deepseek-v4-openai"||c==="zai-glm-5.2"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(c==="zai-glm-toggle"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(u=>u.value==="none")&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let u=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...u!==void 0?{budget_tokens:u}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let s=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(s,a):s}getFallbackTerms(t){switch(t){case"profile":return["thinking","reasoning_effort","enable_thinking","thinking_budget","budget_tokens"];case"native-budget":return["thinking_budget","budget_tokens","thinking"];case"native-effort":return["reasoning_effort"];case"native-toggle":return["enable_thinking","thinking"];default:return[]}}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.stripCacheBoundariesFromMessages(t),{system:u,rest:l}=this.normalizeSystemForWire(o,c),d=s?.modelOverride??this.config.model,p=this.getWireModelId(d),g=ko([{role:"system",content:u},...await this.convertMessages(l,d)],s?.ephemeralSuffix?.content),E=n.map(D=>({type:"function",function:{name:D.name,description:D.description,parameters:D.input_schema}})),h=s?.forcedToolName,_=!!h;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let f=new Map,m="",b="",y,C=!0,T=null,v=Date.now(),k=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(k,d);let S=this.getReasoningProfile(d),M=ve(k)?this.getReasoningCapability(d):"none",R=S?["profile","none"]:ve(k)?this.getReasoningFallbackChain(M).filter(vo):["none"],F=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d),V={model:p,messages:g,tools:E,...ln(this.getEffectiveMaxOutputTokensField(d),F),stream:!0,...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{prompt_cache_key:s.promptCacheKey}:{}};h&&_&&(V.tool_choice={type:"function",function:{name:h}});let W,z;for(let D of R){for(;!W;){let x={...V};C&&(x.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(x),this.applyReasoningCapability(x,d,D,k);try{W=await this.client.chat.completions.create(x,a?{signal:a}:{})}catch(P){if(z=P,_&&this.shouldFallbackForForcedToolChoiceError(P)){_=!1,delete V.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(C&&this.shouldFallbackForSpecificReasoningError(P,"stream_options","include_usage")){C=!1;continue}if(!this.shouldFallbackForReasoningError(P,...this.getFallbackTerms(D)))throw P;break}}if(W)break}if(!W)throw z??new I("All reasoning capability attempts failed without a captured error",this.name);let N=Date.now(),A=0,B=0,J=3e4;for await(let D of W){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let x=Date.now(),P=x-N;P>J&&(A++,B+=P,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(P/1e3)}s gap`,{stallCount:A,totalStallMs:B})),N=x,s?.onHeartbeat?.(),y=Eo(D.usage)??y;let O=D.choices[0],w=O?.delta;if(O?.finish_reason&&(T=O.finish_reason,process.env.KODAX_DEBUG_STREAM)){let q=Date.now()-v;this.logStreamDiagnostic(`[Stream] finish_reason: ${T} after ${q}ms`)}w?.content&&(m+=w.content,s?.onTextDelta?.(w.content));let Ht=this.extractReasoningDelta(w);if(Ht&&(b+=Ht,s?.onThinkingDelta?.(Ht)),w?.tool_calls)for(let q of w.tool_calls){let ce=f.get(q.index)??{id:"",name:"",arguments:""};q.id&&(ce.id=q.id),q.function?.name&&(ce.name=q.function.name),q.function?.arguments&&(ce.arguments+=q.function.arguments,s?.onToolInputDelta?.(ce.name,q.function.arguments,ce.id?{toolId:ce.id}:void 0)),f.set(q.index,ce)}}if(!T){let D=Date.now()-v;if(a?.aborted){let P=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:D,reason:P,textContentLength:m.length,toolCallsCount:f.size}),new DOMException(P,"AbortError")}let x=new Error(`Stream incomplete: finish_reason not received. Duration: ${D}ms. This may indicate a network disconnection or API timeout.`);throw x.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:D,textContentLength:m.length,toolCallsCount:f.size}),x}let nt=m?[{type:"text",text:m}]:[],Oe=[],Ne=[];b&&(Ne.push({type:"thinking",thinking:b}),s?.onThinkingEnd?.(b));let Vt=Ee(T??void 0);for(let[,D]of f)if(D.id&&D.name){let x=ke(D.arguments),P=x.salvaged?Vt?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Oe.push({type:"tool_use",id:D.id,name:D.name,input:x.value,...P})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(D.id),name:JSON.stringify(D.name),argsLength:D.arguments?.length??0});return{textBlocks:nt,toolBlocks:Oe,thinkingBlocks:Ne,usage:y,stopReason:T??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.stripCacheBoundariesFromMessages(t),{system:u,rest:l}=this.normalizeSystemForWire(o,c),d=s?.modelOverride??this.config.model,p=this.getWireModelId(d),g=ko([{role:"system",content:u},...await this.convertMessages(l,d)],s?.ephemeralSuffix?.content),E=n.map(A=>({type:"function",function:{name:A.name,description:A.description,parameters:A.input_schema}})),h=s?.forcedToolName,_=!!h,f=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(f,d);let m=this.getReasoningProfile(d),b=ve(f)?this.getReasoningCapability(d):"none",y=m?["profile","none"]:ve(f)?this.getReasoningFallbackChain(b).filter(vo):["none"],C=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d),T={model:p,messages:g,tools:E,...ln(this.getEffectiveMaxOutputTokensField(d),C),...this.config.promptCacheAffinity===!0&&s?.promptCacheKey&&!Q()?{prompt_cache_key:s.promptCacheKey}:{}};h&&_&&(T.tool_choice={type:"function",function:{name:h}});let v,k;for(let A of y){for(;!v;){let B={...T};this.resetReasoningCapabilityParams(B),this.applyReasoningCapability(B,d,A,f);try{v=await this.client.chat.completions.create(B,a?{signal:a}:{})}catch(J){if(k=J,_&&this.shouldFallbackForForcedToolChoiceError(J)){_=!1,delete T.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(J,...this.getFallbackTerms(A)))throw J;break}}if(v)break}if(!v)throw k??new I("All reasoning capability attempts failed without a captured error",this.name);let S=v.choices[0],M=S?.message,R=_i(M?.content),F=Pi(M),V=Ee(S?.finish_reason??void 0),W=(M?.tool_calls??[]).filter(Ci).map(A=>{let B=ke(A.function.arguments),J=B.salvaged?V?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:A.id,name:A.function.name,input:B.value,...J}});R&&s?.onTextDelta?.(R);let z=R?[{type:"text",text:R}]:[],N=[];return F&&(N.push({type:"thinking",thinking:F}),s?.onThinkingDelta?.(F),s?.onThinkingEnd?.(F)),{textBlocks:z,toolBlocks:W,thinkingBlocks:N,usage:Eo(v.usage),stopReason:S?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(t,n){let o=t.filter(d=>d.type==="text").map(d=>d.text).join(`
15
+ `),r=t.filter(d=>d.type==="tool_use").map(d=>({id:d.id,type:"function",function:{name:d.name,arguments:JSON.stringify(d.input??{})}})),s=t.filter(d=>d.type==="thinking"||d.type==="redacted_thinking").map(d=>d.type==="thinking"?d.thinking:"").filter(Boolean).join(`
16
+
17
+ `),a=t.some(d=>d.type==="thinking"||d.type==="redacted_thinking"),c=t.some(d=>d.type==="text");if(!o&&r.length===0&&!a&&!c)return[];let u;o?u=o:r.length>0?u=null:u="...";let l={role:"assistant",content:u};return r.length>0&&(l.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(l.reasoning_content=s||""),[l]}async serializeUserMessage(t){let n=[],o=t.filter(a=>a.type==="text").map(a=>a.text).join(`
18
+ `),r=t.filter(a=>a.type==="image");for(let a of t)if(a.type==="tool_result"){let c;if(typeof a.content=="string")c=a.content;else{let u=[];for(let l of a.content){if(l.type==="text"){u.push(l.text);continue}u.push(await po(l.path)?Ce:fo)}c=u.join(`
19
+ `)}n.push({role:"tool",tool_call_id:a.tool_use_id,content:c})}if(r.length===0)return o&&n.push({role:"user",content:o}),n;let s=[];o&&s.push({type:"text",text:o});for(let a of r){let c=await go(a.path,a.mediaType);c===void 0?s.push({type:"text",text:Ce}):s.push({type:"image_url",image_url:{url:c}})}return n.push({role:"user",content:s}),n}serializeSystemMessage(t){if(typeof t=="string")return[{role:"system",content:t}];let n=t.filter(o=>o.type==="text").map(o=>o.text).join(`
20
+ `);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[];for(let r of t){if(r.role==="system"){o.push(...this.serializeSystemMessage(r.content));continue}if(typeof r.content=="string"){o.push({role:r.role,content:r.content});continue}if(r.role==="assistant"){o.push(...this.serializeAssistantMessage(r.content,n));continue}o.push(...await this.serializeUserMessage(r.content))}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=[],o=0;for(;o<t.length;){let r=t[o],s=wi(r);if(s===void 0){yt(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(g=>g.id)),c=new Set,u=[],l=o+1;for(;l<t.length&&yt(t[l])==="tool";){let g=t[l],E=Si(g);E!==void 0&&a.has(E)&&!c.has(E)&&(c.add(E),u.push(g)),l+=1}let d=s.filter(g=>c.has(g.id)),p=d.length===s.length&&s.length>0?r:Mi(r,d);n.push(p),d.length>0&&n.push(...u),o=l}return n}};import{spawn as Bi}from"node:child_process";import{Readable as ji,Writable as Ki}from"node:stream";import Et from"node:process";import{ClientSideConnection as Ui,PROTOCOL_VERSION as Wi,ndJsonStream as zi}from"@agentclientprotocol/sdk";import{spawnSync as vt}from"node:child_process";var Ri=2e3,pe=2e3,gn=5e3,ie=Object.freeze({status:"terminated"}),bo=Object.freeze({status:"already-exited"}),j=Object.freeze({status:"unknown"}),So=String.raw`
21
+ using System;
22
+ using System.Runtime.InteropServices;
23
+ using System.Text;
24
+ public static class KodaXNativeProcessSnapshot {
25
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
26
+ private struct ProcessEntry32 {
27
+ public uint dwSize;
28
+ public uint cntUsage;
29
+ public uint th32ProcessID;
30
+ public IntPtr th32DefaultHeapID;
31
+ public uint th32ModuleID;
32
+ public uint cntThreads;
33
+ public uint th32ParentProcessID;
34
+ public int pcPriClassBase;
35
+ public uint dwFlags;
36
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
37
+ public string szExeFile;
38
+ }
39
+ [DllImport("kernel32.dll", SetLastError = true)]
40
+ private static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processId);
41
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
42
+ private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
43
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
44
+ private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
45
+ [StructLayout(LayoutKind.Sequential)]
46
+ private struct FileTime {
47
+ public uint Low;
48
+ public uint High;
49
+ }
50
+ [DllImport("kernel32.dll", SetLastError = true)]
51
+ private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
52
+ [DllImport("kernel32.dll", SetLastError = true)]
53
+ private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
54
+ [DllImport("kernel32.dll", SetLastError = true)]
55
+ private static extern bool TerminateProcess(IntPtr process, uint exitCode);
56
+ [DllImport("kernel32.dll")]
57
+ private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
58
+ [DllImport("kernel32.dll")]
59
+ private static extern bool CloseHandle(IntPtr handle);
60
+ private static ulong ReadCreationTime(uint processId) {
61
+ var process = OpenProcess(0x1000, false, processId);
62
+ if (process == IntPtr.Zero) return 0;
63
+ try {
64
+ FileTime creation, exit, kernel, user;
65
+ if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
66
+ return ((ulong)creation.High << 32) | creation.Low;
67
+ } finally {
68
+ CloseHandle(process);
69
+ }
70
+ }
71
+ public static int TerminateExact(uint processId, ulong expectedCreationTime) {
72
+ var process = OpenProcess(0x1001, false, processId);
73
+ if (process == IntPtr.Zero) return 0;
74
+ try {
75
+ FileTime creation, exit, kernel, user;
76
+ if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
77
+ var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
78
+ if (actual != expectedCreationTime) return 2;
79
+ return TerminateProcess(process, 1) ? 1 : 0;
80
+ } finally {
81
+ CloseHandle(process);
82
+ }
83
+ }
84
+ public static string ReadRows() {
85
+ FileTime cutoffTime;
86
+ GetSystemTimeAsFileTime(out cutoffTime);
87
+ var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
88
+ var snapshot = CreateToolhelp32Snapshot(2, 0);
89
+ if (snapshot == new IntPtr(-1)) return string.Empty;
90
+ var rows = new StringBuilder();
91
+ var entry = new ProcessEntry32();
92
+ entry.dwSize = (uint)Marshal.SizeOf(entry);
93
+ try {
94
+ if (!Process32First(snapshot, ref entry)) return string.Empty;
95
+ do {
96
+ var creationTime = ReadCreationTime(entry.th32ProcessID) / 10000;
97
+ if (creationTime == 0 || creationTime <= cutoff) {
98
+ rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append(',').Append(creationTime).Append('\n');
99
+ }
100
+ entry.dwSize = (uint)Marshal.SizeOf(entry);
101
+ } while (Process32Next(snapshot, ref entry));
102
+ return rows.ToString();
103
+ } finally {
104
+ CloseHandle(snapshot);
105
+ }
106
+ }
107
+ }`;function ge(e){return e.exitCode!==null||e.signalCode!==null}i(ge,"isExited");function fn(e,t){return ge(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=i(c=>{o||(o=!0,clearTimeout(a),e.off("exit",s),e.off("error",s),n(c))},"finish"),s=i(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),t);a.unref?.(),e.once("exit",s),e.once("error",s)})}i(fn,"waitForExit");function To(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}i(To,"signalPosixPidTree");function mn(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}i(mn,"signalTargetExists");function xo(e){return mn(-e)||mn(e)}i(xo,"isPosixPidTreeAlive");async function Co(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!xo(e))return!0;await new Promise(o=>setTimeout(o,50))}return!xo(e)}i(Co,"waitForPosixPidTreeExit");function Ai(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).flatMap(r=>{if(typeof r!="object"||r===null)return[];let s=r,a=Number(s.pid),c=Number(s.parentPid),u=typeof s.creationTime=="string"?s.creationTime:String(s.creationTime??"0");return!Number.isFinite(a)||a<=0||!Number.isFinite(c)?[]:[{pid:a,parentPid:c,creationTime:/^\d+$/.test(u)?u:"0"}]})}catch{return[]}}i(Ai,"parseWindowsProcessSnapshotJson");function Di(e){let t=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.(\d{6})([+-])(\d{3})$/.exec(e);if(!t)return;let[,n,o,r,s,a,c,u,l,d]=t,p=Date.UTC(Number(n),Number(o)-1,Number(r),Number(s),Number(a),Number(c),Number(u.slice(0,3))),g=Number(d)*6e4*(l==="+"?1:-1),E=p-g;if(Number.isFinite(E))return{identity:(BigInt(E)+11644473600000n).toString(),unixMs:E}}i(Di,"parseWmicCreationTime");function Ii(){let e=["$cutoff = [DateTime]::UtcNow","$items = try { @(Get-CimInstance Win32_Process -ErrorAction Stop) } catch { @(Get-WmiObject Win32_Process -ErrorAction Stop) }","$rows = @($items | ForEach-Object {"," $creationTime = '0'"," try {"," $created = $_.CreationDate"," if ($created -isnot [DateTime]) { $created = [System.Management.ManagementDateTimeConverter]::ToDateTime([string]$created) }"," $created = $created.ToUniversalTime()"," if ($created -le $cutoff) { $creationTime = ([long][Math]::Floor($created.ToFileTimeUtc() / 10000)).ToString() }"," } catch {}"," [PSCustomObject]@{ pid = [int]$_.ProcessId; parentPid = [int]$_.ParentProcessId; creationTime = $creationTime }","})","$rows | ConvertTo-Json -Compress"].join(`
108
+ `),t=vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:gn,windowsHide:!0});if(!t.error&&t.status===0){let s=Ai(t.stdout);if(s.length>0)return s}let n=Date.now(),o=vt("wmic",["process","get","CreationDate,ParentProcessId,ProcessId","/format:list"],{encoding:"utf8",timeout:gn,windowsHide:!0});if(o.error||o.status!==0)return;let r=o.stdout.split(/\r?\n\s*\r?\n/).flatMap(s=>{let a=new Map(s.split(/\r?\n/).flatMap(p=>{let g=p.indexOf("=");return g<0?[]:[[p.slice(0,g),p.slice(g+1)]]})),c=Number(a.get("ProcessId")),u=Number(a.get("ParentProcessId")),l=a.get("CreationDate"),d=l===void 0?void 0:Di(l);return!Number.isFinite(c)||c<=0||!Number.isFinite(u)||d===void 0||d.unixMs>n?[]:[{pid:c,parentPid:u,creationTime:d.identity}]});return r.length>0?r:void 0}i(Ii,"readWindowsProcessSnapshotFallback");function Oi(){let e=["$source = @'",So,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
109
+ `),t=vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:gn,windowsHide:!0});if(t.error||t.status!==0)return;let n=t.stdout.split(/\r?\n/).flatMap(o=>{let[r,s,a="0"]=o.split(",",3),c=Number(r),u=Number(s);return!Number.isFinite(c)||c<=0||!Number.isFinite(u)?[]:[{pid:c,parentPid:u,creationTime:a}]});return n.length>0?n:void 0}i(Oi,"readWindowsProcessSnapshotNative");function He(){return Oi()??Ii()}i(He,"readWindowsProcessSnapshot");function Mo(e,t,n){let o=new Map;for(let c of e)o.set(c.parentPid,[...o.get(c.parentPid)??[],c]);let r=[],s=[{pid:t,...n===void 0?{}:{creationTime:n},ancestryVerified:n!==void 0&&n!=="0"}],a=new Set([t]);for(;s.length>0;){let c=s.shift();if(c===void 0)break;for(let u of o.get(c.pid)??[]){if(a.has(u.pid)||!Ni(u.creationTime,c.creationTime))continue;a.add(u.pid);let l=c.ancestryVerified&&u.creationTime!=="0";r.push(l?u:{...u,creationTime:"0"}),s.push({pid:u.pid,creationTime:u.creationTime,ancestryVerified:l})}}return r}i(Mo,"collectDescendantIdentities");function Ni(e,t){if(e==="0"||t===void 0||t==="0")return!0;try{return BigInt(e)>=BigInt(t)}catch{return!1}}i(Ni,"windowsCreationAtLeast");function $i(e,t=He()){if(t===void 0)return;let n=new Set(t.filter(r=>r.creationTime==="0").map(r=>r.pid));if(e.some(r=>n.has(r.pid)))return;let o=new Set(t.filter(r=>r.creationTime!=="0").map(r=>`${r.pid}:${r.creationTime}`));return new Set(e.filter(r=>r.creationTime!=="0").filter(r=>o.has(`${r.pid}:${r.creationTime}`)).map(r=>r.pid))}i($i,"currentCapturedWindowsPids");function _o(e){let t=He();if(t===void 0)return;let n=$i([e.root,...e.descendants],t);if(n!==void 0){if(n.size>0)return!1;if(e.completeTree)return e.uncertainDescendantPids.every(o=>!t.some(r=>r.pid===o))?!0:void 0}}i(_o,"capturedWindowsProcessesGone");function Li(e){return[e.root.pid,...e.descendants.map(t=>t.pid),...e.uncertainDescendantPids].some(mn)}i(Li,"capturedWindowsPidMayBeAlive");async function Po(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Li(e))return _o(e)===!0;await new Promise(o=>setTimeout(o,50))}return _o(e)===!0}i(Po,"waitForCapturedWindowsProcessesExit");function wo(e){let t=[...e].reverse().flatMap(r=>/^\d+$/.test(r.creationTime)?[`[KodaXNativeProcessSnapshot]::TerminateExact(${r.pid}, [UInt64]${r.creationTime}) | Out-Null`]:[]);if(t.length===0)return!1;let n=["$source = @'",So,"'@","Add-Type -TypeDefinition $source",...t].join(`
110
+ `),o=vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",timeout:Ri,windowsHide:!0});return!o.error&&o.status===0}i(wo,"terminateCapturedWindowsProcesses");var Ve=new WeakMap;function _e(e){if(process.platform!=="win32"||e.pid===void 0)return;let t=Ve.get(e),n=He();if(t!==void 0&&ge(e)){if(n===void 0)return t.root.creationTime;let r=n.find(a=>a.pid===e.pid);if(r!==void 0&&r.creationTime!==t.root.creationTime)return t.root.creationTime;let s=Mo(n,t.root.pid,t.root.creationTime);return Ve.set(e,{root:t.root,descendants:s.filter(a=>a.creationTime!=="0"),uncertainDescendantPids:s.filter(a=>a.creationTime==="0").map(a=>a.pid),completeTree:t.completeTree}),t.root.creationTime}let o=n?.find(r=>r.pid===e.pid&&r.creationTime!=="0");if(o===void 0&&n!==void 0&&!ge(e)&&(o=He()?.find(r=>r.pid===e.pid&&r.creationTime!=="0")),!(o===void 0||ge(e)))return Ve.set(e,{root:o,descendants:[],uncertainDescendantPids:[],completeTree:!1}),o.creationTime}i(_e,"rememberChildProcessTree");function Fi(e,t){let n=He();if(n===void 0)return;let o=n.find(s=>s.pid===e);if(o===void 0||o.creationTime==="0"||o.creationTime!==t)return null;let r=Mo(n,e,o.creationTime);return{root:o,descendants:r.filter(s=>s.creationTime!=="0"),uncertainDescendantPids:r.filter(s=>s.creationTime==="0").map(s=>s.pid),completeTree:!0}}i(Fi,"captureWindowsProcessTree");async function pn(e){let t=[e.root,...e.descendants],n=wo(t);return e.completeTree?await Po(e,pe)?ie:n?(wo(t),await Po(e,pe)?ie:j):j:j}i(pn,"killCapturedWindowsTree");async function kt(e){let t;if(process.platform==="win32"&&e.pid!==void 0){let n=Ve.get(e),o=n===void 0?void 0:Fi(e.pid,n.root.creationTime);o!=null&&Ve.set(e,o);let r=o??n;return o===void 0&&r===void 0||ge(e)&&r!==void 0&&!r.completeTree&&r.descendants.length===0?j:(t=o===void 0?r===void 0?j:await pn(r):o===null?r===void 0?j:await pn(r):await pn(o),await fn(e,pe)?t.status==="unknown"?j:ie:j)}if(e.pid!==void 0&&process.platform!=="win32")return To(e.pid,"SIGTERM")?await Co(e.pid,pe)?ie:(To(e.pid,"SIGKILL"),await Co(e.pid,pe)?ie:j):bo;if(ge(e))return process.platform==="win32"&&e.pid!==void 0?j:bo;try{e.kill("SIGTERM")}catch{return ge(e)&&t?.status!=="unknown"?ie:j}if(await fn(e,pe))return t?.status==="unknown"?j:ie;try{e.kill("SIGKILL")}catch{}return await fn(e,pe)?t?.status==="unknown"?j:ie:j}i(kt,"killChildProcessTree");var ee=class extends Error{static{i(this,"AcpTransportClosedError")}constructor(){super("ACP transport closed before the request completed"),this.name="AcpTransportClosedError"}},bt=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=Et.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Bi(s,this.options.args??[],{cwd:this.options.cwd??Et.cwd(),stdio:["pipe","pipe","inherit"],detached:Et.platform!=="win32",windowsHide:!0}),_e(this.agentProcess),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=Ki.toWeb(this.agentProcess.stdin),t=ji.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=zi(n,t);if(this.client=new Ui(()=>({sessionUpdate:i(async r=>{this.options.onSessionUpdate?.(r)},"sessionUpdate"),requestPermission:i(async r=>{let s=r.options??[],a=s.find(c=>c.kind==="allow_once"||c.kind==="allow_always")??s[0];return a?{outcome:{outcome:"selected",optionId:a.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),o),this.client.signal.aborted)throw new ee;await this.awaitWhileConnected(this.client.initialize({protocolVersion:Wi,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}}))}async createNewSession(){if(!this.client)throw new Error("Client not connected");if(this.client.signal.aborted)throw new ee;return(await this.awaitWhileConnected(this.client.newSession({cwd:this.options.cwd??Et.cwd(),mcpServers:[]}))).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");if(o?.throwIfAborted(),this.client.signal.aborted)throw new ee;let s={sessionId:n,prompt:[{type:"text",text:t}]};r?.model&&(s.model=r.model),r?.reasoningEffort&&(s.effort=r.reasoningEffort);let a=this.client.prompt(s);if(o){let c,u=new Promise((d,p)=>{c=p}),l=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{});let d=new Error("ACP prompt aborted");d.name="AbortError",c?.(o.reason??d)},"onAbort");o.addEventListener("abort",l,{once:!0}),a=Promise.race([a,u]).finally(()=>{o.removeEventListener("abort",l)})}return await this.awaitWhileConnected(a)}isConnectionOpen(){return this.client!==null&&!this.client.signal.aborted}releaseSession(t){this.options.releaseSession?.(t)}disconnect(){this.agentProcess&&kt(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}async awaitWhileConnected(t){let n=this.client;if(!n||n.signal.aborted)throw t.catch(()=>{}),new ee;let o,r=new Promise((s,a)=>{o=i(()=>a(new ee),"onClosed"),n.signal.addEventListener("abort",o,{once:!0})});try{return await Promise.race([t,r])}finally{o&&n.signal.removeEventListener("abort",o)}}};function Xi(e){if(!e||typeof e!="object")return;let t=e,n=t.inputTokens,o=t.outputTokens,r=t.totalTokens;if([n,o,r].some(g=>typeof g!="number"||!Number.isFinite(g)||g<0))return;let s=n,a=o,c=r;if(c<s||c<a)return;let u=i(g=>typeof g=="number"&&Number.isFinite(g)&&g>=0?g:void 0,"optionalToken"),l=u(t.cachedReadTokens),d=u(t.cachedWriteTokens),p=u(t.thoughtTokens);return{inputTokens:s,outputTokens:a,totalTokens:c,...l!==void 0?{cachedReadTokens:l}:{},...d!==void 0?{cachedWriteTokens:d}:{},...p!==void 0?{thoughtTokens:p}:{}}}i(Xi,"normalizeAcpUsage");function Vi(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(Vi,"selectAcpReasoningEffort");function Ro(e){if(!e?.aborted)return;let t=e.reason;if(!(t===void 0||t instanceof Error&&t.name==="AbortError"))return t}i(Ro,"nonCancellationAbortReason");var se=class extends Z{static{i(this,"KodaXAcpProvider")}_client=null;_clientConnectPromise=null;_connectingClient=null;_clientGeneration=0;_sessionMap=new Map;_activeStreams=new Map;_activeConversationIds=new Set;async ensureClient(t){if(this._client?.isConnectionOpen())return this._client;if(this._client&&this.invalidateClient(this._client),!this._clientConnectPromise){let n=this._clientGeneration===0?this.acpClientOptions:this.acpClientOptions.recreate?.()??this.acpClientOptions;this._clientGeneration+=1;let o={...n,onSessionUpdate:t},r=new bt(o);this._connectingClient=r;let s;s=r.connect().then(()=>{if(this._clientConnectPromise!==s||this._connectingClient!==r)throw new Error("ACP client initialization was cancelled");return this._connectingClient=null,this._client=r,r}).catch(a=>{throw this._connectingClient===r&&(this._connectingClient=null,r.disconnect()),a}).finally(()=>{this._clientConnectPromise===s&&(this._clientConnectPromise=null)}),this._clientConnectPromise=s}return await this._clientConnectPromise}invalidateClient(t){this._client===t&&(this._client=null,this._sessionMap.clear(),t.disconnect())}supportsEphemeralSuffix(){return!0}isConfigured(){return!0}async verifyCredential(){return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`CLI-bridge provider "${this.name}" manages credentials in its CLI binary's token store; not verifiable from the KodaX SDK`}}getDiagnosticPromptText(t,n){let o=t.map(a=>Array.isArray(a.content)?{...a,content:xe(a.content)}:a),r=o[o.length-1],s="";if(r&&typeof r.content=="string")s=r.content;else if(r&&Array.isArray(r.content)){let a=[];for(let c of r.content)if(c.type==="text")a.push(c.text);else if(c.type==="image"){let u=this.serializeImageBlockToPromptToken(c);u&&a.push(u)}s=a.join(`
111
+ `)}return n?s.length>0?`${s}
112
+
113
+ ${n}`:n:s}getCapabilityProfile(){return Y(Xe)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=xe(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let c=this.normalizeReasoning(r),u=Vi(c);if(t=this.stripCacheBoundariesFromMessages(t),this.acpClientOptions.executor&&typeof this.acpClientOptions.executor.isInstalled=="function"&&!await this.acpClientOptions.executor.isInstalled())throw new Error(`${this.name} requires a local CLI environment, but the CLI was not found or is not configured correctly.`);let l=[],d=[],p=s?.ephemeralSuffix?.content,g=this.getDiagnosticPromptText(t,p),E=i(f=>{let m=f.update,b=f.sessionId;if(!("sessionUpdate"in m))return;let y=b?this._activeStreams.get(b):void 0;if(y)switch(m.sessionUpdate){case"agent_message_chunk":if(m.content?.type==="text"){let C=m.content.text;y.output.text+=C,y.streamOptions?.onTextDelta?.(C)}break;case"tool_call":{let C="{}",T=m,v=T.arguments??T.parameters;v&&(C=typeof v=="string"?v:JSON.stringify(v)),y.streamOptions?.onToolInputDelta?.(m.title,C);let k=`
114
+ > [Tool Use] ${m.title}: ${C}
115
+ `;y.output.text+=k,y.streamOptions?.onTextDelta?.(k);break}case"tool_call_update":if(m.status){let C=`> [Tool Result] ${m.status}
116
+
117
+ `;y.output.text+=C,y.streamOptions?.onTextDelta?.(C)}break}},"onSessionUpdate"),h=s?.sessionId,_=await this.ensureClient(E);if(h&&this._activeConversationIds.has(h))throw new Error(`ACP conversation "${h}" already has an active prompt`);h&&this._activeConversationIds.add(h);try{let f=h?this._sessionMap.get(h):void 0;f||(f=await _.createNewSession(),h&&this._sessionMap.set(h,f));let m={text:""};this._activeStreams.set(f,{streamOptions:s,output:m});let b;try{b=await _.prompt(g,f,a,{model:s?.modelOverride,reasoningEffort:u})}catch(y){y instanceof ee&&this.invalidateClient(_);let C=Ro(a);if(C!==void 0)throw C;if(!(a?.aborted||y instanceof Error&&y.name==="AbortError"))throw y}finally{this._activeStreams.delete(f),h||_.releaseSession(f)}if(b?.stopReason==="cancelled"){let y=Ro(a);if(y!==void 0)throw y}return m.text&&l.push({type:"text",text:m.text}),{textBlocks:l,toolBlocks:d,thinkingBlocks:[],usage:Xi(b?.usage)}}catch(f){throw f instanceof ee&&this.invalidateClient(_),f}finally{h&&this._activeConversationIds.delete(h)}}disconnect(){this._clientConnectPromise=null;let t=this._connectingClient;this._connectingClient=null,t?.disconnect(),this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._activeConversationIds.clear(),this._sessionMap.clear()}};import{spawn as Hi}from"node:child_process";import Ge from"node:process";var Pe=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={...Ge.env,...this.config.env},s=Ge.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=Hi(s,n,{cwd:this.config.cwd??Ge.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:Ge.platform!=="win32",windowsHide:!0}),c="";a.stderr?.on("data",k=>{c+=k.toString()});let u=new AbortController,l={},d,p=new Promise(k=>{d=i(()=>k(l),"resolveAbort")});_e(a);let g=i(()=>{if(u.signal.aborted)return;let k=t.signal?.reason;k===void 0?u.abort():u.abort(k)},"forwardExternalAbort");t.signal?.addEventListener("abort",g),t.signal?.aborted&&g();let E=!1,h,_=i(()=>(h||(h=(async()=>{let k={status:"unknown"};for(let S=0;S<3;S+=1){if(_e(a),k=await kt(a),k.status!=="unknown"||E&&!u.signal.aborted)return k;S<2&&await new Promise(M=>setTimeout(M,50))}return k})()),h),"terminateChild"),f=i(()=>{d?.(),E||(_(),a.stdout?.destroy())},"abortHandler");u.signal.addEventListener("abort",f),u.signal.aborted&&f(),a.on("exit",()=>{E=!0,_e(a)});let m=!1,b,y,C=this.config.timeout;C!==void 0&&Number.isFinite(C)&&C>0&&!u.signal.aborted&&(y=setTimeout(()=>{u.signal.aborted||(m=!0,b=new Error(`Provider CLI timed out after ${C}ms`),u.abort(b))},C),y.unref?.());let T=i(async k=>{let S=await Promise.race([k,p]);if(S===l)throw u.signal.reason??b??new Error("Provider CLI execution aborted");return S},"waitForExecution"),v=new Promise((k,S)=>{a.once("error",S),a.once("close",(M,R)=>k({code:M,signal:R}))});try{let k=this.parseOutputStream(a.stdout,u.signal)[Symbol.asyncIterator]();for(;;){let R=await T(k.next());if(R.done)break;yield R.value}if(u.signal.aborted)throw u.signal.reason;let S=await T(v);if(m)throw b??u.signal.reason;let M=c.trim();if(!t.signal?.aborted&&S.code!==0){let R=S.code===null?`signal ${S.signal??"unknown"}`:`code ${S.code}`;throw new Error(`Provider CLI exited with ${R}${M?`: ${M}`:""}`)}M&&console.error(`[CLIExecutor] stderr: ${M}`)}catch(k){throw v.catch(()=>{}),u.signal.aborted?u.signal.reason:k}finally{if(y&&clearTimeout(y),t.signal?.removeEventListener("abort",g),u.signal.removeEventListener("abort",f),Ge.platform==="win32"||h!==void 0||!E){let k=h!==void 0;if((await _()).status==="unknown"&&(k||!E))throw new Error("Provider CLI process-tree termination could not be verified")}}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
118
+ `);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let c=this.parseLine(a.trim());c&&(yield c)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as Gi}from"node:child_process";import Ji from"node:process";async function Tt(e){try{let t=Ji.platform==="win32",n=Gi(t?`${e}.cmd`:e,["--version"],{windowsHide:!0});return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}i(Tt,"checkCliCommandInstalled");function xt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(xt,"finiteNonNegative");function qi(e){if(!(!e||!xt(e.input_tokens)||!xt(e.output_tokens)||!xt(e.total_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.total_tokens,...xt(e.cached)?{cachedReadTokens:e.cached}:{}}}i(qi,"normalizeGeminiUsage");var Ct=class extends Pe{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 Tt("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:qi(t.stats),raw:t};default:return null}}};import{TransformStream as Ao}from"node:stream/web";import{randomUUID as hn}from"node:crypto";function Je(e){let t=new Ao,n=new Ao,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,c="",u=hn(),l=new AbortController,d=new Map,p=new Map;(async()=>{try{for(;;){let{done:f,value:m}=await o.read();if(f)break;c+=s.decode(m,{stream:!0});let b=c.split(`
119
+ `);c=b.pop()??"";for(let y of b)if(y.trim())try{let C=JSON.parse(y);E(C).catch(T=>{console.error("[PseudoAcpServer] Failed to handle request:",T)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",y)}}}catch(f){console.error("[PseudoAcpServer] Stream read error:",f)}})();let g=i(async f=>{let m=JSON.stringify(f)+`
120
+ `;await r.write(a.encode(m))},"sendMsg");async function E(f){if(f.method==="initialize")await g({jsonrpc:"2.0",id:f.id,result:{protocolVersion:f.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(f.method==="session/new"||f.method==="sessions/new")u=f.params?.sessionId??hn(),await g({jsonrpc:"2.0",id:f.id,result:{sessionId:u}});else if(f.method==="session/prompt"||f.method==="chat/prompt"){let m=new AbortController,b=f.params.sessionId;d.set(b,m);let y=i(()=>m.abort(),"onGlobalAbort");l.signal.addEventListener("abort",y);let C=h(b,f.params.prompt,typeof f.params.model=="string"?f.params.model:void 0,typeof f.params.effort=="string"?f.params.effort:void 0,m.signal).finally(()=>{d.delete(b),l.signal.removeEventListener("abort",y)});try{let T=await C;await g({jsonrpc:"2.0",id:f.id,result:T.usage?{stopReason:T.stopReason,usage:T.usage}:{stopReason:T.stopReason}})}catch(T){await g({jsonrpc:"2.0",id:f.id,error:{code:-32e3,message:T instanceof Error?T.message:String(T)}})}}else if(f.method==="session/cancel"||f.method==="chat/cancel"){let m=d.get(f.params.sessionId);m&&m.abort(),f.id!==void 0&&await g({jsonrpc:"2.0",id:f.id,result:{}})}else f.id!==void 0&&await g({jsonrpc:"2.0",id:f.id,result:{}})}i(E,"handleRequest");let h=i(async(f,m,b,y,C)=>{let T=m.find(S=>S.type==="text")?.text??"",v,k=!1;try{let S=e.execute({prompt:T,model:b,reasoningEffort:y,sessionId:p.get(f),signal:C});for await(let M of S){if(M.type==="error")throw new Error(M.message);if(M.type==="complete"&&M.status==="failed")throw new Error("Provider CLI reported a failed completion");M.type==="session_start"&&M.sessionId&&p.set(f,M.sessionId);let R=_(M);R&&await g({jsonrpc:"2.0",method:"session/update",params:{sessionId:f,update:R}}),M.type==="complete"&&(k=!0,v=M.usage)}if(!C.aborted&&!k)throw new Error("Provider CLI ended without a completion event");return{stopReason:C.aborted?"cancelled":"end_turn",...v!==void 0?{usage:v}:{}}}catch(S){if(C.aborted||S instanceof Error&&S.name==="AbortError")return{stopReason:"cancelled"};throw S}},"executePrompt"),_=i(f=>{switch(f.type){case"message":if(f.role==="assistant"&&f.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:f.toolName,arguments:f.parameters,status:"running",toolCallId:f.toolId||hn()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:f.toolId,status:f.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
121
+ [Error: ${f.message}]
122
+ `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{l.abort(),d.clear(),p.clear(),o.cancel().catch(()=>{}),r.abort().catch(()=>{})},"abort"),releaseSession:i(f=>{p.delete(f)},"releaseSession"),recreate:i(()=>Je(e),"recreate"),executor:e}}i(Je,"createPseudoAcpServer");import Do from"node:fs";import Io from"node:os";import Oo from"node:path";var Yi="gpt-5.4",Qi="auto-gemini-3",Zi=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],es=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function No(e){let t=new Set,n=[];for(let o of e){let r=o.trim();if(!r)continue;let s=r.toLowerCase();t.has(s)||(t.add(s),n.push(r))}return n}i(No,"dedupePreserveOrder");function ts(){let e=Oo.join(Io.homedir(),".codex","config.toml");try{return Do.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(ts,"readCodexConfiguredModel");function ns(){let e=Oo.join(Io.homedir(),".gemini","settings.json");try{let t=JSON.parse(Do.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}i(ns,"readGeminiConfiguredModel");function we(){return ts()||Yi}i(we,"getCodexCliDefaultModel");function Se(){return ns()||Qi}i(Se,"getGeminiCliDefaultModel");function qe(){return No([we(),...Zi])}i(qe,"getCodexCliKnownModels");function Ye(){return No([Se(),...es])}i(Ye,"getGeminiCliKnownModels");var yn=Se(),os=Ye(),rs={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},_t=class extends se{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:yn,models:os.filter(t=>t!==yn).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new Ct({model:yn});this.acpClientOptions=Je(t)}getCapabilityProfile(){return Y(rs)}serializeImageBlockToPromptToken(t){return/\s/.test(t.path)?(console.warn(`[gemini-cli] Image path contains whitespace and cannot be safely passed via @<path> syntax \u2014 dropping image block. Path: ${JSON.stringify(t.path)}`),null):`@${t.path}`}};function Pt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}i(Pt,"finiteNonNegative");function is(e){if(!(!e||!Pt(e.input_tokens)||!Pt(e.output_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.output_tokens,...Pt(e.cached_input_tokens)?{cachedReadTokens:e.cached_input_tokens}:{},...Pt(e.cache_write_input_tokens)?{cachedWriteTokens:e.cache_write_input_tokens}:{}}}i(is,"normalizeCodexUsage");function ss(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(ss,"buildReasoningEffortArgs");var wt=class extends Pe{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 Tt("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=ss(t.reasoningEffort);return t.sessionId?["exec","resume",t.sessionId,...n,...o,t.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,t.prompt]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=Date.now();switch(t.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:t.thread_id??"",model:this.model,raw:t};case"item.completed":return t.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:t.item.text??"",raw:t}:t.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:t.item.id,toolName:"Bash",parameters:{command:t.item.command},raw:t}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:is(t.usage),raw:t};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:t.type,message:t.message??"Unknown error",raw:t};default:return null}}};var vn=we(),as=qe(),St=class extends se{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:vn,models:as.filter(t=>t!==vn).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new wt({model:vn});this.acpClientOptions=Je(t)}};import{existsSync as ys,readFileSync as vs}from"node:fs";import Re from"node:path";import{fileURLToPath as ks}from"node:url";var $o=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Lo=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Fo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Bo=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],jo=["max_tokens","max_completion_tokens"],Ko=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Uo=["count-tokens","models-list","minimal-message","unsupported"];function oe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(oe,"isPlainObject");function me(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}i(me,"requireString");function Me(e,t){if(e!==void 0)return me(e,t)}i(Me,"optionalString");function Xo(e,t){if(e!==void 0){if(typeof e!="string"||!jo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${jo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(Xo,"optionalMaxOutputTokensField");function ae(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}i(ae,"optionalNumber");function L(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(L,"optionalBoolean");function Wo(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,o)=>me(n,`${t}[${o}]`))}}i(Wo,"optionalStringArray");function cs(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=me(r,`${t}.${o}`);return n}i(cs,"optionalStringMap");function us(e,t){if(e!==void 0){if(typeof e!="string"||!Bo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Bo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(us,"optionalReasoningPreset");function kn(e,t){if(typeof e!="string"||!$o.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${$o.join(", ")}, got ${JSON.stringify(e)}`);return e}i(kn,"requireReasoningCapability");function ds(e,t){if(typeof e!="string"||!Lo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Lo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ds,"requireEffortStrategy");function ls(e,t){if(e!==void 0){if(typeof e!="string"||!Fo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Fo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(ls,"optionalThinkingStrategy");function zo(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ds(e.effortStrategy,`${t}.effortStrategy`),o=us(e.reasoningPreset,`${t}.reasoningPreset`),r=ls(e.thinkingStrategy,`${t}.thinkingStrategy`),s=Me(e.defaultEffort,`${t}.defaultEffort`),a=cs(e.effortAliases,`${t}.effortAliases`),c=Wo(e.disabledEfforts,`${t}.disabledEfforts`),u=Wo(e.localRejectEfforts,`${t}.localRejectEfforts`),l=L(e.allowCustomEffort,`${t}.allowCustomEffort`),d=L(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=L(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),g=L(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),E=L(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),h=L(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),_=L(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),f=L(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),m={effortStrategy:n};if(o!==void 0&&(m.reasoningPreset=o),r!==void 0&&(m.thinkingStrategy=r),s!==void 0&&(m.defaultEffort=s),a!==void 0&&(m.effortAliases=a),c!==void 0&&(m.disabledEfforts=c),u!==void 0&&(m.localRejectEfforts=u),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);m.supportedEfforts=e.supportedEfforts.map((b,y)=>{if(!oe(b))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${y}] must be an object`);return{value:me(b.value,`${t}.supportedEfforts[${y}].value`),...Me(b.description,`${t}.supportedEfforts[${y}].description`)!==void 0?{description:Me(b.description,`${t}.supportedEfforts[${y}].description`)}:{},...L(b.isDefault,`${t}.supportedEfforts[${y}].isDefault`)!==void 0?{isDefault:L(b.isDefault,`${t}.supportedEfforts[${y}].isDefault`)}:{},...L(b.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)!==void 0?{isUserVisible:L(b.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!oe(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let b={};for(let[y,C]of Object.entries(e.budgetByEffort))b[y]=ae(C,`${t}.budgetByEffort.${y}`)??0;m.budgetByEffort=b}return l!==void 0&&(m.allowCustomEffort=l),d!==void 0&&(m.supportsReasoningEffort=d),p!==void 0&&(m.supportsReasoningSummary=p),g!==void 0&&(m.supportsEncryptedReasoningReplay=g),E!==void 0&&(m.supportsAdaptiveThinking=E),h!==void 0&&(m.supportsManualThinkingBudget=h),_!==void 0&&(m.supportsDisabledThinking=_),f!==void 0&&(m.requiresEffortBetaHeader=f),m}i(zo,"validateReasoningProfile");function Vo(e,t){let n=e.reasoningProfile,o=e.reasoningCapabilityV2;if(n!==void 0&&o!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?zo(n,`${t}.reasoningProfile`):zo(o,`${t}.reasoningCapabilityV2`)}i(Vo,"validateReasoningProfileField");function fs(e,t){if(typeof e!="string"||!Ko.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ko.join(", ")}, got ${JSON.stringify(e)}`);return e}i(fs,"requireProfileName");function ps(e,t){if(typeof e!="string"||!Uo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Uo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ps,"requireVerifyStrategy");function gs(e,t){if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=me(e.id,`${t}.id`),o=Me(e.wireModel,`${t}.wireModel`),r=Me(e.displayName,`${t}.displayName`),s=ae(e.contextWindow,`${t}.contextWindow`),a=ae(e.maxOutputTokens,`${t}.maxOutputTokens`),c=Xo(e.maxOutputTokensField,`${t}.maxOutputTokensField`),u=ae(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=L(e.replayReasoningContent,`${t}.replayReasoningContent`),d=L(e.strictThinkingSignature,`${t}.strictThinkingSignature`),p=ae(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),g=e.reasoningCapability===void 0?void 0:kn(e.reasoningCapability,`${t}.reasoningCapability`),E=Vo(e,t),h={id:n};return o!==void 0&&(h.wireModel=o),r!==void 0&&(h.displayName=r),s!==void 0&&(h.contextWindow=s),a!==void 0&&(h.maxOutputTokens=a),c!==void 0&&(h.maxOutputTokensField=c),u!==void 0&&(h.thinkingBudgetCap=u),g!==void 0&&(h.reasoningCapability=g),E!==void 0&&(h.reasoningProfile=E),l!==void 0&&(h.replayReasoningContent=l),d!==void 0&&(h.strictThinkingSignature=d),p!==void 0&&(h.streamMaxDurationMs=p),h}i(gs,"validateModelDescriptor");function ms(e,t){if(e===void 0)return;if(!oe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=kn(r,`${t}.${o}`);return n}i(ms,"validateModelReasoningCapabilities");function hs(e,t){if(!oe(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=L(e.cliBridge,`providers.${t}.cliBridge`),o=me(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=kn(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=Vo(e,`providers.${t}`),a=fs(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=ps(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&c!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${c}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let u=ae(e.contextWindow,`providers.${t}.contextWindow`),l=ae(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),d=Xo(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),p=ae(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),g=L(e.supportsThinking,`providers.${t}.supportsThinking`),E=ms(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),h=Me(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 _;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);_=e.models.map((b,y)=>gs(b,`providers.${t}.models[${y}]`));let m=new Set([...h===void 0?[]:[h],..._.map(b=>b.id)]);for(let[b,y]of _.entries())if(y.wireModel!==void 0&&!m.has(y.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${b}].wireModel must reference a declared model, got ${JSON.stringify(y.wireModel)}`)}let f={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:c};return s!==void 0&&(f.reasoningProfile=s),h!==void 0&&(f.model=h),_!==void 0&&(f.models=_),u!==void 0&&(f.contextWindow=u),l!==void 0&&(f.maxOutputTokens=l),d!==void 0&&(f.maxOutputTokensField=d),p!==void 0&&(f.thinkingBudgetCap=p),g!==void 0&&(f.supportsThinking=g),E!==void 0&&(f.modelReasoningCapabilities=E),n&&(f.cliBridge=!0),f}i(hs,"validateProviderEntry");function Ho(e){if(!oe(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=me(e.updatedAt,"updatedAt");if(!oe(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,r]of Object.entries(e.providers))n[o]=hs(r,o);return{version:1,updatedAt:t,providers:n}}i(Ho,"validateProviderCapabilitiesJson");var Es=Object.freeze({native:fe,"image-input-native":ao,"cli-bridge":Xe,"image-input-cli-bridge":co}),Mt=null;function bs(){if(process.env.KODAX_BUNDLED==="true")return Re.join(Re.dirname(process.execPath),"provider-capabilities.json");let e=Re.dirname(ks(import.meta.url)),t=[Re.join(e,"provider-capabilities.json"),Re.join(Re.dirname(e),"provider-capabilities.json")];for(let n of t)if(ys(n))return n;return t[0]}i(bs,"resolveJsonPath");function Ts(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Go(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Go(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(Ts,"deepFreezeSnapshot");function Go(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}i(Go,"freezeReasoningProfile");function xs(e){if(e==="gemini-cli"){let t=Se();return{model:t,models:Ye().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=we();return{model:t,models:qe().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(xs,"resolveCliBridgeModels");function Cs(e,t){let n=Es[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=xs(e),s={model:r.model,models:r.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let o={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(o.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(o.models=t.models),t.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(o.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(o.maxOutputTokens=t.maxOutputTokens),t.maxOutputTokensField!==void 0&&(o.maxOutputTokensField=t.maxOutputTokensField),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}i(Cs,"buildSnapshot");function Jo(){if(Mt)return Mt;let e=bs(),t;try{let r=vs(e,"utf8");t=JSON.parse(r)}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let n=Ho(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=Ts(Cs(r,s));return Mt=Object.freeze(o),Mt}i(Jo,"getProviderSnapshots");import _s from"@anthropic-ai/sdk";var K=Jo();function X(e,t={}){let n=K[e];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,maxOutputTokensField:n.maxOutputTokensField,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...t}}i(X,"buildProviderConfig");var En=class extends ${static{i(this,"AnthropicProvider")}name="anthropic";config=X("anthropic",{strictThinkingSignature:!0});buildClient(){return new _s({apiKey:this.getApiKey()})}},bn=class extends ${static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=X("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},Tn=class extends ${static{i(this,"ZaiCodingProvider")}name="zai-coding";config=X("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},xn=class extends ${static{i(this,"KimiCodeProvider")}name="kimi-code";config=X("kimi-code",{baseUrl:"https://api.kimi.com/coding/",promptCacheAffinity:!0})},Cn=class extends ${static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=X("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},_n=class extends ${static{i(this,"MimoCodingProvider")}name="mimo-coding";config=X("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},Pn=class extends ${static{i(this,"MimoProvider")}name="mimo";config=X("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},wn=class extends ${static{i(this,"ArkCodingProvider")}name="ark-coding";config=X("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},Sn=class extends H{static{i(this,"OpenAIProvider")}name="openai";config=X("openai",{promptCacheAffinity:!0})},Mn=class extends H{static{i(this,"DeepSeekProvider")}name="deepseek";config=X("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},Rn=class extends H{static{i(this,"KimiProvider")}name="kimi";config=X("kimi",{baseUrl:"https://api.moonshot.cn/v1",promptCacheAffinity:!0,replayReasoningContent:!0})},An=class extends H{static{i(this,"QwenProvider")}name="qwen";config=X("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},Dn=class extends ${static{i(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=X("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},In=class extends H{static{i(this,"ZhipuProvider")}name="zhipu";config=X("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},G={anthropic:i(()=>new En,"anthropic"),openai:i(()=>new Sn,"openai"),deepseek:i(()=>new Mn,"deepseek"),kimi:i(()=>new Rn,"kimi"),"kimi-code":i(()=>new xn,"kimi-code"),qwen:i(()=>new An,"qwen"),"qwen-token-plan":i(()=>new Dn,"qwen-token-plan"),zhipu:i(()=>new In,"zhipu"),"zhipu-coding":i(()=>new bn,"zhipu-coding"),"zai-coding":i(()=>new Tn,"zai-coding"),"minimax-coding":i(()=>new Cn,"minimax-coding"),"mimo-coding":i(()=>new _n,"mimo-coding"),mimo:i(()=>new Pn,"mimo"),"ark-coding":i(()=>new wn,"ark-coding"),"gemini-cli":i(()=>new _t,"gemini-cli"),"codex-cli":i(()=>new St,"codex-cli")},On=process.env.KODAX_PROVIDER??"zhipu-coding",qo=new Map;function Ps(e){if(U(e))return K[e].apiKeyEnv}i(Ps,"resolveApiKeyEnvForProvider");function Yo(e){let t=e??On,n=G[t];if(!n)throw new I(`Unknown provider: ${t}. Available: ${Object.keys(G).join(", ")}`,t);let o=Ps(t),r=he(t,o?process.env[o]:void 0),s=qo.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return qo.set(t,{apiKey:r,instance:a}),a}i(Yo,"getProvider");function Qo(e){return U(e)?he(e,process.env[K[e].apiKeyEnv])!==void 0:!1}i(Qo,"isProviderConfigured");function Zo(e){return U(e)?K[e].model:null}i(Zo,"getProviderModel");function er(e,t){if(!U(e))return"unknown";let n=K[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(er,"getProviderConfiguredReasoningCapability");function tr(e){return U(e)?Y(K[e].capabilityProfile):null}i(tr,"getProviderConfiguredCapabilityProfile");function nr(){let e=[];for(let t of Object.keys(G)){let n=K[t];e.push({name:t,model:n.model,models:Nn(t),configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:Y(n.capabilityProfile)})}return e}i(nr,"getProviderList");function Nn(e){return Ae(e).map(t=>t.id)}i(Nn,"getProviderModels");function U(e){return e in G}i(U,"isProviderName");function or(e){return{id:e.model}}i(or,"makeDefaultDescriptor");function rr(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}i(rr,"resolveWireModelDescriptor");function Rt(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(Rt,"effectiveCapabilities");function Ae(e){let t=K[e];if(!t)return[];let n=t.models??[],o=n.find(s=>s.id===t.model),r=n.filter(s=>s.id!==t.model);return[o??or(t),...r].map(s=>rr(t,s))}i(Ae,"getProviderModelDescriptors");function At(e,t){let n=K[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?Rt(e,n,rr(n,o)):t===n.model?Rt(e,n,or(n)):Rt(e,n,{id:t})}i(At,"getModelCapabilities");function Dt(){let e=[];for(let t of Object.keys(G)){let n=K[t];for(let o of Ae(t))e.push(Rt(t,n,o))}return e}i(Dt,"listBuiltinModelCapabilities");var ws=new Set(["compat","sdk"]),Ss=new Set(["max_tokens","max_completion_tokens"]),Ms=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function $n(e){return e.reasoningProfile??e.reasoningCapabilityV2}i($n,"getConfiguredReasoningProfile");function Rs(e){return e==="anthropic"?"count-tokens":"models-list"}i(Rs,"defaultVerifyStrategyForProtocol");function ir(e,t,n){if(t!==void 0){if(typeof t!="string"||!Ss.has(t))throw new Error(`Custom provider "${e.name}": ${n} must be "max_tokens" or "max_completion_tokens".`);if(e.protocol!=="openai")throw new Error(`Custom provider "${e.name}": ${n} is only valid for protocol="openai".`)}}i(ir,"validateMaxOutputTokensField");function It(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(It,"legacyCapabilityFromReasoningProfile");function As(e,t,n){if(n===!1)return"none";switch(t){case"none":case"prompt-only":return"none";case"native-toggle":return e==="anthropic"?"generic-thinking-toggle":void 0;case"native-budget":return e==="anthropic"?"anthropic-budget":"qwen-hybrid-thinking";case"native-effort":return e==="anthropic"?"claude-adaptive-max":"openai-chat-reasoning";case"native-adaptive":return e==="anthropic"?"claude-adaptive-max":void 0;default:return n!==!0?void 0:e==="anthropic"?"generic-thinking-toggle":void 0}}i(As,"legacyReasoningPresetForProtocol");function sr(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(sr,"isSimpleReasoning");function Ds(e,t){if(e==="none")return at("none");let n=i(c=>c==="off"?"none":c,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,s=o.includes("none"),a=o.map(c=>c===r?{value:c,isDefault:!0}:{value:c});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...s?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{localRejectEfforts:["none"],supportsDisabledThinking:!1},supportsReasoningEffort:!0}}i(Ds,"buildReasoningProfileFromSimple");function ar(e,t,n,o){let r=sr(n)?n:void 0,s=n!==void 0&&!sr(n)?n:void 0;if(o?.supportsThinking===!1)return at("none");if(e)return{...e,...s??{}};if(r!==void 0)return Ds(r,o?.protocol??"openai");let a=t??(o?As(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?at(a,s):void 0}i(ar,"resolveCustomReasoningProfile");function cr(e,t,n){if(e!=="deepseek-v4-openai")return e;let o=n??t;return o==="deepseek-v4-flash"?"deepseek-v4-flash-openai":o==="deepseek-v4-pro"?"deepseek-v4-pro-openai":e}i(cr,"migrateLegacyDeepSeekPreset");function Ot(e){return ar($n(e),cr(e.reasoningPreset,e.model),e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(Ot,"resolveCustomProviderReasoningProfile");function Bn(e,t,n,o){let r=o==="deepseek-v4-openai"&&$n(e)===void 0&&e.reasoningPreset===void 0&&e.reasoning===void 0&&e.reasoningCapability===void 0;return ar($n(e),cr(e.reasoningPreset??(r?o:void 0),e.id,e.wireModel),e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(Bn,"resolveCustomModelReasoningProfile");function Is(e,t,n,o){let r=typeof e=="string"?{id:e}:e,s=Bn(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return s?{...a,reasoningProfile:s}:a}i(Is,"customModelDescriptorToFull");function Qe(e){if(!e.name||!e.baseUrl||!e.apiKeyEnv||!e.model)throw new Error(`Custom provider requires name, baseUrl, apiKeyEnv, and model. Got: ${JSON.stringify({name:e.name,baseUrl:e.baseUrl,apiKeyEnv:e.apiKeyEnv,model:e.model})}`);if(e.protocol!=="anthropic"&&e.protocol!=="openai")throw new Error(`Unknown protocol "${e.protocol}" for custom provider "${e.name}". Must be "anthropic" or "openai".`);if(e.userAgentMode!==void 0&&!ws.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.promptCacheAffinity!==void 0&&typeof e.promptCacheAffinity!="boolean")throw new Error(`Custom provider "${e.name}": promptCacheAffinity must be a boolean.`);if(ir(e,e.maxOutputTokensField,"maxOutputTokensField"),e.models?.forEach((t,n)=>{typeof t!="string"&&ir(e,t.maxOutputTokensField,`models[${n}].maxOutputTokensField`)}),e.verifyStrategy!==void 0){if(!Ms.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(Qe,"validateCustomProviderConfig");function Os(e){let t=e.models?.length?e.models.map(s=>Is(s,e.protocol,e.supportsThinking,e.reasoningPreset)):void 0,n=Ot(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??It(n)??"none",r=e.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:e.apiKeyEnv,model:e.model,baseUrl:e.baseUrl,models:t,userAgentMode:e.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:e.capabilityProfile,contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,maxOutputTokensField:e.maxOutputTokensField,thinkingBudgetCap:e.thinkingBudgetCap,promptCacheAffinity:e.promptCacheAffinity??!1,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??Rs(e.protocol)}}i(Os,"buildProviderConfig");function Nt(e){Qe(e);let t=Os(e);return e.protocol==="anthropic"?new Ln(e.name,t):new Fn(e.name,t)}i(Nt,"createCustomProvider");var Ln=class extends ${static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},Fn=class extends H{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var te=new Map,jn=new Map,Ns=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function ur(e){return e.reasoningCapability!==void 0&&Ns.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(ur,"hasThinkingReasoningConfig");function $s(e){if(e.supportsThinking!==!1)return;let t=ur(e),n=(e.models??[]).some(o=>typeof o!="string"&&ur(o));(t||n)&&console.warn(`[kodax] Custom provider "${e.name}": its reasoning config (provider- or per-model reasoningCapability / reasoningProfile / reasoning / reasoningPreset) is ignored because supportsThinking is false (thinking stays off). Set supportsThinking: true to enable thinking, or remove the reasoning config.`)}i($s,"warnOnIgnoredReasoningCapability");function dr(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(Qe(r),t.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in G&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),$s(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>Nt(r))}te.clear(),jn.clear();for(let[r,s]of n)te.set(r,s);for(let[r,s]of o)jn.set(r,s)}i(dr,"registerCustomProviders");function $t(e){let t=jn.get(e);return t?t():void 0}i($t,"getCustomProvider");function Ie(e){return te.has(e)}i(Ie,"isCustomProviderName");function Ze(){return[...te.keys()]}i(Ze,"getCustomProviderNames");function lr(){let e=[];for(let[t,n]of te){let o=!!process.env[n.apiKeyEnv],r=Ot(n),s=(n.models??[]).map(c=>typeof c=="string"?c:c.id),a=n.model&&s.length?[...new Set([n.model,...s])]:[n.model];e.push({name:t,model:n.model,models:a,configured:o,reasoningCapability:n.supportsThinking===!1?"none":n.reasoningCapability??It(r)??"none",capabilityProfile:Y(n.capabilityProfile??fe),custom:!0})}return e}i(lr,"getCustomProviderList");function fr(e){let t=te.get(e);if(!t)return;let n=(t.models??[]).map(o=>typeof o=="string"?o:o.id);return t.model&&n.length?[...new Set([t.model,...n])]:[t.model]}i(fr,"getCustomProviderModels");function pr(e,t,n,o){let r=typeof e=="string"?{id:e}:e,s=Bn(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return s?{...a,reasoningProfile:s}:a}i(pr,"customDescriptorToFull");function Lt(e){let t=te.get(e);if(!t)return;let n=(t.models??[]).map(s=>pr(s,t.protocol,t.supportsThinking,t.reasoningPreset)),o=n.find(s=>s.id===t.model)??{id:t.model},r=n.filter(s=>s.id!==t.model);return[o,...r]}i(Lt,"getCustomProviderModelDescriptors");function De(e,t){let n=te.get(e);if(!n)return;let o=t===n.model,r=Ot(n),a=(n.models??[]).map(l=>pr(l,n.protocol,n.supportsThinking,n.reasoningPreset)).find(l=>l.id===t)??(o?{id:n.model}:void 0);if(!a)return;let c=n.supportsThinking===!1?r:a.reasoningProfile??r,u=n.supportsThinking===!1?"none":a.reasoningCapability??It(c)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(u!=="none"&&u!=="prompt-only"),reasoningCapability:u,reasoningProfile:c,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(De,"getCustomModelCapabilities");function Kn(e){let t=te.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}i(Kn,"getCustomProviderVerifyMetadata");function Ft(){let e=[];for(let[t,n]of te){let o=De(t,n.model);o&&e.push(o);for(let r of n.models??[]){let s=typeof r=="string"?r:r.id;if(s===n.model)continue;let a=De(t,s);a&&e.push(a)}}return e}i(Ft,"listCustomProviderModelCapabilities");var re=new Map,Ls=0;function Un(e){let t=re.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(Un,"getActiveRuntimeProviderRegistration");function Fs(e){for(let[t,n]of re){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?re.delete(t):re.set(t,o);return}}}i(Fs,"removeRuntimeProviderRegistration");function gr(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(U(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(Ie(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Ls}`,name:n,factory:t},r=re.get(n)??[];return re.set(n,[...r,o]),()=>{Fs(o.id)}}i(gr,"registerModelProvider");function Bt(e){let t=Un(e);if(t===void 0)return;let n=t.factory();return t.credentialEnvironmentName??=n.getApiKeyEnv(),n}i(Bt,"getRuntimeModelProvider");function et(e){return Un(e)!==void 0}i(et,"isRuntimeModelProviderName");function jt(){return Array.from(re.keys()).filter(e=>Un(e)!==void 0)}i(jt,"getRuntimeModelProviderNames");function Kt(){let e=new Set;for(let t of re.values())for(let n of t){if(n.credentialEnvironmentName===void 0){let o=n.factory();n.credentialEnvironmentName=o.getApiKeyEnv()}e.add(n.credentialEnvironmentName)}return[...e]}i(Kt,"getRuntimeModelProviderCredentialEnvironmentNames");function mr(){re.clear()}i(mr,"clearRuntimeModelProviders");function Wn(e){if(U(e))return G[e]();let t=Bt(e);if(t)return t;let n=$t(e);if(n)return n;let o=Wt();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(Wn,"resolveProvider");function Ut(e){return U(e)||et(e)||Ie(e)}i(Ut,"isKnownProvider");function Wt(){let e=Object.keys(G),t=jt(),n=Ze();return[...new Set([...e,...t,...n])]}i(Wt,"getAvailableProviderNames");function hr(){let e=new Set;for(let t of Object.values(K))e.add(t.apiKeyEnv);for(let t of Ze()){let n=Kn(t);n!==void 0&&e.add(n.apiKeyEnv)}for(let t of Kt())e.add(t);return[...e].sort()}i(hr,"getProviderCredentialEnvironmentNames");function tt(e){return U(e)?Ae(e):Lt(e)??[]}i(tt,"resolveProviderModelDescriptors");function zt(e,t){return U(e)?At(e,t):De(e,t)}i(zt,"resolveModelCapabilities");function yr(){return[...Dt(),...Ft()]}i(yr,"listAllModelCapabilities");function Bs(e){if(U(e)){let t=K[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!et(e))return Kn(e)}i(Bs,"getProviderVerifyMetadata");async function vr(e,t){let n=Bs(e);if(!n&&!Ut(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Wt().join(", ")}`};if(n?.verifyStrategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider "${e}" does not support credential verification (cli-bridge or strategy marked unsupported)`};if(n&&!process.env[n.apiKeyEnv])return{ok:!1,error:"unconfigured",strategy:n.verifyStrategy,durationMs:0,approxTokensSpent:0,message:`Environment variable "${n.apiKeyEnv}" is not set for provider "${e}"`};let o;try{o=Wn(e)}catch(r){return{ok:!1,error:"unconfigured",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(r?.message??r).slice(0,240)}}try{return await o.verifyCredential(t)}catch(r){return{ok:!1,error:"unknown",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(r?.message??r).slice(0,240)}}}i(vr,"verifyProviderCredential");async function kr(e,t){if(!Ut(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=tt(e);return n.length===0?{ok:!1,source:"failed",error:`Provider "${e}" has no static model list`,durationMs:0}:{ok:!0,source:"static",models:n.map(r=>r.id),durationMs:0}}i(kr,"listProviderModels");function js(e){let t=e.model??tt(e.provider)[0]?.id,n=t?zt(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?Yt(n,e.rejectedEfforts):n,r=We({capability:o,sessionEffort:e.desiredEffort}),s=r.effectiveEffort;return s!==void 0&&e.rejectedEfforts?.includes(s)&&(s=void 0),{effort:s,configuredEffort:r.configuredEffort,adjusted:s!==r.configuredEffort}}i(js,"resolveWireEffort");var Er={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375,cacheReadPer1M:.375,cacheWritePer1M:3.75},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08,cacheReadPer1M:.08,cacheWritePer1M:1}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-v4-flash":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.0028},"deepseek-v4-pro":{inputPer1M:.435,outputPer1M:.87,cachePer1M:.003625}},kimi:{"kimi-k3":{inputPer1M:2.8,outputPer1M:14,cachePer1M:.28},"kimi-k2.7-code":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.182},"kimi-k2.7-code-highspeed":{inputPer1M:1.82,outputPer1M:7.56,cachePer1M:.364},"kimi-k2.6":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.154},"kimi-k2.5":{inputPer1M:.56,outputPer1M:2.94,cachePer1M:.098}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015},k3:{inputPer1M:.01,outputPer1M:.03},"k3-256k":{inputPer1M:.005,outputPer1M:.015},"kimi-for-coding-highspeed":{inputPer1M:.015,outputPer1M:.045}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},"qwen-token-plan":{"qwen3.8-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.8-max-preview":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-plus":{inputPer1M:.005,outputPer1M:.015},"qwen3.6-flash":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015}},zhipu:{"glm-5":{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 zn(e,t,n){let o=n?.[e]?.[t];return o||Er[e]?.[t]}i(zn,"getCostRate");function Xn(e,t,n,o=0,r=0){let s=Math.max(0,t-o-r),a=e.cacheReadPer1M??e.cachePer1M??e.inputPer1M,c=e.cacheWritePer1M??e.cachePer1M??e.inputPer1M,u=s/1e6*e.inputPer1M,l=n/1e6*e.outputPer1M,d=o/1e6*a,p=r/1e6*c;return u+l+d+p}i(Xn,"calculateCost");function Ks(){return{records:[],retries:[]}}i(Ks,"createCostTracker");function Vn(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(Vn,"recordRetry");function Hn(e,t,n){let o=zn(t.provider,t.model,n),r=o?Xn(o,t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens):0,s={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,cost:r,role:t.role};return{records:[...e.records,s],retries:e.retries}}i(Hn,"recordUsage");function Us(e){let t=0,n=0,o=0,r=0,s=0,a=0,c={},u={};for(let p of e.records){t+=p.cost,n+=p.inputTokens,o+=p.outputTokens,r+=p.cacheReadTokens+p.cacheWriteTokens,s+=p.cacheReadTokens,a+=p.cacheWriteTokens;let g=c[p.provider];c[p.provider]={cost:(g?.cost??0)+p.cost,calls:(g?.calls??0)+1,inputTokens:(g?.inputTokens??0)+p.inputTokens,outputTokens:(g?.outputTokens??0)+p.outputTokens};let E=p.role??"default",h=u[E];u[E]={cost:(h?.cost??0)+p.cost,calls:(h?.calls??0)+1,inputTokens:(h?.inputTokens??0)+p.inputTokens,outputTokens:(h?.outputTokens??0)+p.outputTokens}}let l=0;for(let p of e.retries)l+=p.waitMs;let d=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:d,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:l,byProvider:c,byRole:u}}i(Us,"getSummary");function Xt(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Xt,"formatCost");function Ws(e){let t=[];if(t.push(`Session Cost: ${Xt(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}: ${Xt(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}: ${Xt(s.cost)} (${s.calls} calls)`)}return t.join(`
123
+ `)}i(Ws,"formatCostReport");import{performance as Gn}from"node:perf_hooks";var br={inputTokens:0,outputTokens:0,totalTokens:0},zs=3e4,Xs=1024;function Vs(e){if(!e)return{effort:"none"};let t=new Set(e.localRejectEfforts??[]),n=e.supportedEfforts?.filter(r=>r.isUserVisible!==!1).map(r=>r.value).filter(r=>!t.has(r));if(!t.has("none")&&(e.supportsDisabledThinking===!0||n?.includes("none")))return{effort:"none"};let o=n?.find(r=>r!=="none");return o===void 0?void 0:{effort:o}}i(Vs,"resolveDefaultSideQueryReasoning");function Hs(e,t,n,o){if(!o||!Tr(e)||!t)return e;let r=n?.effort,s=r==="none"||r!==void 0&&t.disabledEfforts?.includes(r)===!0,a=t.supportsDisabledThinking===!1||t.localRejectEfforts?.includes("none")===!0;return s||!a?e:e+Xs}i(Hs,"resolveSideQueryMaxOutputTokens");async function Gs(e){let t=new AbortController,n=e.timeoutMs??zs,o=e.costTracker,r=Gn.now(),s=Buffer.byteLength(e.system,"utf8"),a=Buffer.byteLength(JSON.stringify(e.messages),"utf8"),c,u,l,d=0,p=0,g=i((T,v)=>{let k=Math.max(0,Math.round(Gn.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:k,systemBytes:s,messageBytes:a,promptBytes:s+a,retryCount:d,retryWaitMs:p,...v!==void 0?v:{},...c!==void 0?{firstUpstreamEventMs:c}:{},...u!==void 0?{firstThinkingDeltaMs:u}:{},...l!==void 0?{firstTextDeltaMs:l,firstOutputMs:l,streamMs:Math.max(0,k-l)}:{},terminalPhase:T}},"diagnostics"),E,h=i(T=>{E||(E=T),t.abort()},"recordAbort"),_=setTimeout(()=>h("timeout"),n),f=i(()=>h("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?h("parent"):e.abortSignal.addEventListener("abort",f,{once:!0}));let m=i(()=>Math.max(0,Math.round(Gn.now()-r)),"elapsed"),b=i(()=>{c===void 0&&(c=m())},"recordUpstreamEvent"),y,C=new Promise((T,v)=>{y=i(()=>{v(new DOMException(E==="timeout"?"sideQuery timed out":"sideQuery aborted","AbortError"))},"onControllerAbort"),t.signal.aborted?y():t.signal.addEventListener("abort",y,{once:!0})});try{let T=e.provider.getReasoningProfile(e.model),v=e.reasoning??Vs(T),k=Hs(e.maxOutputTokens,T,v,e.reasoning===void 0),S=e.provider.stream([...e.messages],[],e.system,v,{modelOverride:e.model,...Tr(k)?{maxOutputTokensOverride:k}:{},onTextDelta:i(A=>{b(),A.length>0&&l===void 0&&(l=m())},"onTextDelta"),onThinkingDelta:i(A=>{b(),A.length>0&&u===void 0&&(u=m())},"onThinkingDelta"),onHeartbeat:i(()=>b(),"onHeartbeat"),onRetryAfter:i(A=>{b(),d+=1,p+=Math.max(0,A.waitMs),o&&(o=Vn(o,{provider:A.provider,waitMs:A.waitMs,reason:A.reason,source:A.source}))},"onRetryAfter")},t.signal),M=await Promise.race([S,C]),R=M.usage??br,F=M.textBlocks??[],V=M.toolBlocks??[],W=F.map(A=>A.text).join(""),z={responseBytes:Buffer.byteLength(W,"utf8"),textBlockCount:F.length};if(V.length>0)return{text:W,usage:R,costTracker:o,stopReason:"error",diagnostics:g("contract_error",{stopReason:"error",...z}),error:new Error(`sideQuery: provider returned ${V.length} tool_use block(s); sideQuery expects text-only output`)};o&&(o=Hn(o,{provider:e.provider.name,model:e.model,inputTokens:R.inputTokens,outputTokens:R.outputTokens,cacheReadTokens:R.cachedReadTokens,cacheWriteTokens:R.cachedWriteTokens,role:e.querySource}));let N=Js(M.stopReason);return{text:W,usage:R,costTracker:o,stopReason:N,diagnostics:g("completed",{stopReason:N,...z})}}catch(T){let v=T instanceof Error?T:new Error(String(T)),k="error";return t.signal.aborted&&(k=E==="timeout"?"timeout":"aborted"),{text:"",usage:br,costTracker:o,stopReason:k,diagnostics:g(l!==void 0?"streaming":u!==void 0?"thinking":c!==void 0?"awaiting_text":"pre_output",{stopReason:k}),error:v}}finally{clearTimeout(_),e.abortSignal&&e.abortSignal.removeEventListener("abort",f),y&&t.signal.removeEventListener("abort",y)}}i(Gs,"sideQuery");function Tr(e){return e!==void 0&&Number.isInteger(e)&&e>0}i(Tr,"isPositiveInteger");function Js(e){return gt(e)==="truncated"?"max_tokens":"end_turn"}i(Js,"mapStopReason");export{Cr as a,_r as b,Pr as c,ne as d,I as e,Le as f,Gt as g,Jt as h,qt as i,wr as j,Sr as k,Mr as l,Fe as m,Rr as n,Ar as o,it as p,Yt as q,Dr as r,Ir as s,Or as t,Nr as u,$r as v,ye as w,Jn as x,qn as y,tn as z,ve as A,ct as B,Ue as C,Yn as D,jr as E,Qn as F,We as G,Kr as H,Xr as I,de as J,le as K,nn as L,ut as M,dt as N,io as O,so as P,ei as Q,ti as R,ze as S,Q as T,lt as U,Z as V,si as W,gt as X,Ee as Y,be as Z,sn as _,an as $,Te as aa,cn as ba,xe as ca,$ as da,H as ea,se as fa,we as ga,Se as ha,qe as ia,Ye as ja,K as ka,G as la,On as ma,Yo as na,Qo as oa,Zo as pa,er as qa,tr as ra,nr as sa,Nn as ta,U as ua,Ae as va,At as wa,Dt as xa,Qe as ya,Nt as za,dr as Aa,$t as Ba,Ie as Ca,Ze as Da,lr as Ea,fr as Fa,Lt as Ga,De as Ha,Ft as Ia,gr as Ja,Bt as Ka,et as La,jt as Ma,Kt as Na,mr as Oa,Wn as Pa,Ut as Qa,Wt as Ra,hr as Sa,tt as Ta,zt as Ua,yr as Va,vr as Wa,kr as Xa,js as Ya,Er as Za,zn as _a,Xn as $a,Ks as ab,Vn as bb,Hn as cb,Us as db,Xt as eb,Ws as fb,Gs as gb};