@kodax-ai/kodax 0.7.95 → 0.7.96-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +178 -1
- package/LICENSE +158 -158
- package/README.md +149 -24
- package/README_CN.md +117 -24
- package/config-templates/config.example.jsonc +2 -1
- package/config-templates/integrations/a2a.example.jsonc +91 -91
- package/config-templates/integrations/extensions.example.jsonc +7 -7
- package/config-templates/integrations/mcp.example.jsonc +16 -16
- package/dist/builtin/code-review/SKILL.md +82 -82
- package/dist/builtin/git-workflow/SKILL.md +84 -84
- package/dist/builtin/skill-creator/SKILL.md +127 -127
- package/dist/builtin/skill-creator/agents/analyzer.md +12 -12
- package/dist/builtin/skill-creator/agents/comparator.md +13 -13
- package/dist/builtin/skill-creator/agents/grader.md +13 -13
- package/dist/builtin/skill-creator/references/schemas.md +227 -227
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.d.ts +46 -46
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +208 -208
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +46 -46
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +286 -286
- package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +62 -62
- package/dist/builtin/skill-creator/scripts/compare-runs.js +330 -330
- package/dist/builtin/skill-creator/scripts/generate-review.d.ts +33 -33
- package/dist/builtin/skill-creator/scripts/generate-review.js +414 -414
- package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +73 -73
- package/dist/builtin/skill-creator/scripts/grade-evals.js +402 -402
- package/dist/builtin/skill-creator/scripts/improve-description.d.ts +23 -23
- package/dist/builtin/skill-creator/scripts/improve-description.js +160 -160
- package/dist/builtin/skill-creator/scripts/init-skill.d.ts +14 -14
- package/dist/builtin/skill-creator/scripts/init-skill.js +155 -155
- package/dist/builtin/skill-creator/scripts/install-skill.d.ts +29 -29
- package/dist/builtin/skill-creator/scripts/install-skill.js +173 -173
- package/dist/builtin/skill-creator/scripts/package-skill.d.ts +38 -38
- package/dist/builtin/skill-creator/scripts/package-skill.js +121 -121
- package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +8 -8
- package/dist/builtin/skill-creator/scripts/quick-validate.js +163 -163
- package/dist/builtin/skill-creator/scripts/run-eval.d.ts +66 -66
- package/dist/builtin/skill-creator/scripts/run-eval.js +353 -353
- package/dist/builtin/skill-creator/scripts/run-loop.d.ts +49 -49
- package/dist/builtin/skill-creator/scripts/run-loop.js +242 -242
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.d.ts +58 -58
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +224 -224
- package/dist/builtin/tdd/SKILL.md +56 -56
- package/dist/chunks/agent-4FABF6WK.js +2 -0
- package/dist/chunks/argument-completer-72VHB2VL.js +2 -0
- package/dist/chunks/{chunk-7JXA3533.js → chunk-4OIQZWA5.js} +223 -226
- package/dist/chunks/{chunk-BNVSKIAB.js → chunk-6BVF3HZ7.js} +136 -136
- package/dist/chunks/chunk-7JZZIFZH.js +501 -0
- package/dist/chunks/chunk-AC7Z2OIY.js +2 -0
- package/dist/chunks/{chunk-JS452J2F.js → chunk-C4KYZAFU.js} +2 -2
- package/dist/chunks/chunk-CHUPIWIF.js +251 -0
- package/dist/chunks/{chunk-C4DTUKTR.js → chunk-GYUU7XLH.js} +5 -4
- package/dist/chunks/{chunk-OK4AXDC5.js → chunk-HAX55GOQ.js} +1 -1
- package/dist/chunks/chunk-JKTJCGO2.js +418 -0
- package/dist/chunks/{chunk-O743AJ5V.js → chunk-LQYETRFK.js} +171 -175
- package/dist/chunks/{chunk-2PEDBGKN.js → chunk-LTUZTQ6W.js} +1 -1
- package/dist/chunks/chunk-LYWDUSKO.js +2 -0
- package/dist/chunks/chunk-NGH6T4FD.js +92 -0
- package/dist/chunks/{chunk-SRIJX5ZP.js → chunk-NVRWCSA5.js} +1 -1
- package/dist/chunks/chunk-O4DS7RIQ.js +384 -0
- package/dist/chunks/chunk-ORXU6OWZ.js +2 -0
- package/dist/chunks/chunk-POTW3O65.js +124 -0
- package/dist/chunks/{chunk-2TM3W3GK.js → chunk-RIQSS56Y.js} +1 -1
- package/dist/chunks/chunk-U27XKEN5.js +407 -0
- package/dist/chunks/{chunk-6ABQJUK6.js → chunk-XUX6OUCA.js} +2 -2
- package/dist/chunks/{client-JDOS3YJR.js → client-4C456K4O.js} +1 -1
- package/dist/chunks/compaction-config-3VQRDFF4.js +2 -0
- package/dist/chunks/{construction-bootstrap-YCWHHUYO.js → construction-bootstrap-AHN7EDGG.js} +1 -1
- package/dist/chunks/dist-BCBQXAGI.js +2 -0
- package/dist/chunks/dist-QK2YDWU6.js +2 -0
- package/dist/chunks/host-VIHV7ADG.js +2 -0
- package/dist/chunks/run-manager-NBVMU3KV.js +2 -0
- package/dist/chunks/utils-MEJZ2IGI.js +2 -0
- package/dist/index.d.ts +22 -21
- package/dist/index.js +7 -7
- package/dist/kodax_bootstrap.js +26 -26
- package/dist/kodax_cli.js +1905 -1882
- package/dist/native/darwin-arm64/LICENSE-APACHE.txt +13 -0
- package/dist/native/darwin-arm64/kodax-text-transaction.node +0 -0
- package/dist/native/darwin-arm64/manifest.json +16 -0
- package/dist/native/darwin-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/darwin-x64/kodax-text-transaction.node +0 -0
- package/dist/native/darwin-x64/manifest.json +16 -0
- package/dist/native/linux-arm64/LICENSE-APACHE.txt +13 -0
- package/dist/native/linux-arm64/kodax-text-transaction.node +0 -0
- package/dist/native/linux-arm64/manifest.json +16 -0
- package/dist/native/linux-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/linux-x64/kodax-text-transaction.node +0 -0
- package/dist/native/linux-x64/manifest.json +16 -0
- package/dist/native/win32-x64/LICENSE-APACHE.txt +13 -0
- package/dist/native/win32-x64/NOTICE-windows-sandbox.txt +8 -0
- package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
- package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
- package/dist/native/win32-x64/manifest.json +30 -0
- package/dist/provider-capabilities.json +108 -2
- package/dist/runtime-worker.js +1745 -1727
- package/dist/sandbox-network-broker.js +1715 -0
- package/dist/sdk-a2a.d.ts +13 -12
- package/dist/sdk-a2a.js +1 -1
- package/dist/sdk-agent.d.ts +27 -18
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +107 -58
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +4 -4
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +9 -10
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +25 -17
- package/dist/sdk-repl.js +1 -1
- package/dist/sdk-runtime.d.ts +41 -17
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.d.ts +17 -3
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +8 -7
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +61 -61
- package/dist/types-chunks/{base.d-vopO1rml.d.ts → base.d-COo8E2dk.d.ts} +18 -27
- package/dist/types-chunks/{bash-prefix-extractor.d-B2rxNI4L.d.ts → bash-prefix-extractor.d-DQOlA8cy.d.ts} +72 -52
- package/dist/types-chunks/{capability-learning.d-CE1tm29C.d.ts → capability-learning.d-lRPgA3Or.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-Y7QRS4J2.d.ts → capsule.d-0zxsgXg_.d.ts} +3 -3
- package/dist/types-chunks/{controller.d-BR-UVeUR.d.ts → controller.d-BTtyIIC1.d.ts} +1 -1
- package/dist/types-chunks/{controller.d-C5noq5-w.d.ts → controller.d-C7tXUcXo.d.ts} +2 -2
- package/dist/types-chunks/{guardrail.d-DqHD-61O.d.ts → guardrail.d-DKTyEHJa.d.ts} +5 -5
- package/dist/types-chunks/{history-retrieval.d-CKU8zmt_.d.ts → history-retrieval.d-CHnL99S7.d.ts} +2 -2
- package/dist/types-chunks/{public-api.d-D7fXaWW8.d.ts → public-api.d-Dx3L3W4Z.d.ts} +7 -4
- package/dist/types-chunks/{repl.d-BYDb14s6.d.ts → repl.d-mO01olIa.d.ts} +5 -5
- package/dist/types-chunks/{resolver.d-CwHUwbdE.d.ts → resolver.d-DlXPjeyx.d.ts} +38 -6
- package/dist/types-chunks/{review-inbox.d-BSgFewyj.d.ts → review-inbox.d-WDSe1nze.d.ts} +1 -1
- package/dist/types-chunks/{run-manager.d-BVJSntpS.d.ts → run-manager.d-DENbbzgR.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-CqEG84oP.d.ts → sdk-session-DYHGXXH4.d.ts} +3 -3
- package/dist/types-chunks/{shell-command-sets.d-DqaaBwhU.d.ts → shell-command-sets.d-CjFqS4dp.d.ts} +1 -1
- package/dist/types-chunks/{side-query.d-iH0P9ASy.d.ts → side-query.d-j8A3sFv_.d.ts} +2 -2
- package/dist/types-chunks/{types.d-rUOjXych.d.ts → types.d-BbZjR0Wr.d.ts} +1 -1
- package/dist/types-chunks/{types.d-CaTXAW_Q.d.ts → types.d-BkTIKdH6.d.ts} +2 -2
- package/dist/types-chunks/{types.d-C5xQEFcj.d.ts → types.d-DncLrpu_.d.ts} +4 -4
- package/dist/types-chunks/{types.d-CK9A9rpP.d.ts → types.d-Xy0f3x4i.d.ts} +9 -0
- package/dist/types-chunks/{utils.d-CWUyLiXo.d.ts → utils.d-CnxefMos.d.ts} +6 -6
- package/package.json +10 -3
- package/public_docs/README.md +130 -0
- package/public_docs/configuration/sandbox.md +289 -0
- package/public_docs/sdk/embedder-guide.md +6674 -0
- package/scripts/kodax-bin.cjs +28 -28
- package/scripts/production-env.cjs +25 -25
- package/dist/chunks/agent-XXZMXKKA.js +0 -2
- package/dist/chunks/argument-completer-KCYDGTQW.js +0 -2
- package/dist/chunks/chunk-77PNP27P.js +0 -92
- package/dist/chunks/chunk-7QBWHCIZ.js +0 -2
- package/dist/chunks/chunk-BHE66SP3.js +0 -123
- package/dist/chunks/chunk-BR2OSB2I.js +0 -722
- package/dist/chunks/chunk-DSMONSVB.js +0 -407
- package/dist/chunks/chunk-Q5VRWSKG.js +0 -418
- package/dist/chunks/chunk-XWRPOGJN.js +0 -4
- package/dist/chunks/chunk-Y5VIQBT6.js +0 -383
- package/dist/chunks/compaction-config-EGS4577X.js +0 -2
- package/dist/chunks/dist-ITTXQHRJ.js +0 -2
- package/dist/chunks/dist-KFYN3OKD.js +0 -2
- package/dist/chunks/host-VAYADIPW.js +0 -2
- package/dist/chunks/run-manager-52IJZMZJ.js +0 -2
- package/dist/chunks/utils-P7PBSL3R.js +0 -2
- package/dist/sandbox-workspace-session.js +0 -1705
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{a as X}from"./chunk-LYWDUSKO.js";import{G as K,h as p,o as g,z as x}from"./chunk-U27XKEN5.js";import{Gc as u,ib as d}from"./chunk-JKTJCGO2.js";import{l as c}from"./chunk-4OIQZWA5.js";import{a as n}from"./chunk-ONUPGMER.js";function s(t){if(t.context?.trustedTextMutationHost!==void 0)return t;let e=t.context?.gitRoot??t.context?.executionCwd??process.cwd(),a=t.context?.executionCwd??e,r=X(()=>[e,a,...t.context?.workspaceSandboxRoots?.list()??[]],o=>c(o,a));return{...t,context:{...t.context,trustedTextMutationHost:r}}}n(s,"withTrustedTextMutationHost");function f(t,e){return u(s(t),e)}n(f,"runKodaX");function A(t,e){return p(s(t),e)}n(A,"startKodaX");function l(t,e){return x(s(t),e)}n(l,"runManagedTask");function y(t){let e=t.runAgent??u,a=t.createOptions;return K({...t,createOptions:n((r,o,i)=>s(a?.(r,o,i)??i),"createOptions"),runAgent:n((r,o)=>e(s(r),o),"runAgent")})}n(y,"createKodaXTaskRunner");function m(t={}){let e=d(t),a=e.substrateExecutor;return Object.freeze({...e,substrateExecutor:n(((r,o,i,O)=>{let k=i?.presetOptions??{};return a(r,o,{...i,presetOptions:s(k)},O)}),"substrateExecutor")})}n(m,"createDefaultCodingAgent");var T=class extends g{static{n(this,"KodaXClient")}constructor(e){super(s(e))}};export{f as a,A as b,l as c,y as d,m as e,T as f};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{a as s}from"./chunk-ONUPGMER.js";import{AsyncLocalStorage as Rr}from"node:async_hooks";var dt=new Rr;function Ar(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");return dt.run({provider:e,credential:t},n)}s(Ar,"runWithProviderCredential");function Or(e){let t=dt.getStore();return t?.provider===e?t.credential:void 0}s(Or,"getScopedProviderCredential");function ke(e,t){let n=dt.getStore();return n?n.provider===e?n.credential:void 0:t}s(ke,"resolveProviderCredential");function Ir(e){let t=dt.getStore()?.credential;return t?Be(e,t,new WeakMap):e}s(Ir,"redactScopedProviderCredential");function Be(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 i=new Error(Be(e.message,t,n));return n.set(e,i),i.name=e.name,e.stack!==void 0&&(i.stack=Be(e.stack,t,n)),i}if(Array.isArray(e)){let i=[];n.set(e,i);for(let a of e)i.push(Be(a,t,n));return i}let r={};n.set(e,r);for(let[i,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let u=i.split(t).join("[REDACTED_CREDENTIAL]");r[u]=Be(a.value,t,n)}return r}s(Be,"redactCredentialValue");var ie=class extends Error{static{s(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},I=class extends ie{static{s(this,"KodaXProviderError")}provider;metadata;constructor(t,n,o){super(t,"PROVIDER_ERROR"),this.provider=n,this.metadata=o,this.name="KodaXProviderError"}},je=class extends ie{static{s(this,"KodaXRateLimitError")}retryAfter;metadata;constructor(t,n,o){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.metadata=o,this.name="KodaXRateLimitError"}},Zt=class extends ie{static{s(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Ke=class extends I{static{s(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},en=class extends ie{static{s(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var tn=32768,Dr=32e3,Nr=64e3,Lr=.5;function Ue(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))}s(Ue,"timeoutSecToMs");function $r(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))}s($r,"parseTimeoutSecEnvMs");function Fr(e){if(!e)return;let t={requestTimeoutMs:Ue(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Ue(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Ue(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Ue(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}s(Fr,"resolveLlmTimeoutConfig");function lt(e,t){return`${e}/${t??""}`}s(lt,"capabilityCacheKey");function nn(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]))}}s(nn,"narrowReasoningProfile");function Br(e,t,n){return e[lt(t,n)]?.rejected??[]}s(Br,"getRejectedEfforts");function jr(e,t,n,o,r,i){let a=lt(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:i}}}s(jr,"addRejectedEffort");function Kr(e,t,n){if(!t)return{};let o={...e};return delete o[lt(t,n)],o}s(Kr,"removeCacheEntry");function Ur(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,i=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:i,source:a,updatedAt:u}}return t}s(Ur,"sanitizeCapabilityCache");var Wr=["off","auto","quick","balanced","deep"],be=["auto","none","low","medium","high"],oo={low:6e3,medium:1e4,high:2e4},ro=4096,on=[{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"}],rn=[{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"}],zr=[{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"}],Xr=[{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 ft(e,t={}){return{...Vr(e),...t,reasoningPreset:e}}s(ft,"createReasoningProfileFromPreset");function Vr(e){switch(e){case"zai-glm-5.3":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:[{value:"none",description:"Maps to low reasoning"},{value:"minimal",description:"Alias to low",isUserVisible:!1},{value:"low",description:"Low reasoning"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning"},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning",isDefault:!0}],effortAliases:{none:"low",minimal:"low",minimum:"low",light:"low",medium:"high",xhigh:"max",ultra:"max"},disabledEfforts:["none"],supportsReasoningEffort:!0,supportsDisabledThinking:!1};case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:rn,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:zr,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:rn,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:rn,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:on,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:Xr,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:on,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:on,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"}}}s(Vr,"createBaseReasoningProfileFromPreset");function an(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}s(an,"getReasoningCapability");function Ee(e){return pt(e).enabled}s(Ee,"isReasoningEnabled");function pt(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?He(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"}}s(pt,"normalizeReasoningRequest");function He(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}s(He,"normalizeReasoningEffortValue");function io(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}s(io,"mapLegacyReasoningModeToEffortIntent");function Hr(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}}s(Hr,"effortToLegacyReasoningMode");function so(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=He(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}s(so,"parseReasoningEffortEnv");function Ge(e){let t=so(e.envEffort),n=[];We(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),We(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:io(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),We(n,e.modelDefaultEffort??e.capability?.defaultEffort??Xe(e.capability),"model-default",!1),We(n,e.providerDefaultEffort,"provider-default",!1),We(n,e.fallbackEffort??Ve(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:qr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=ao(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}s(Ge,"resolveReasoningEffort");function Gr(e){let t=e.currentEffort?He(e.currentEffort):void 0;if(t&&uo(t,e.capability))return{effectiveEffort:ze(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??Xe(e.capability)??sn(e.capability)??Ve(e.capability),o=n&&ze(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}}s(Gr,"resolveReasoningEffortForModelSwitch");function We(e,t,n,o){if(t===void 0)return;let r=He(t);e.push({value:r,source:n,isExplicit:o})}s(We,"pushEffortCandidate");function qr(e,t){let n=e.find(o=>o.value!=="auto");return n?ao(n.value,t,n.isExplicit):Xe(t)??Ve(t)}s(qr,"resolveAutoEffectiveEffort");function ao(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Xe(t)??sn(t)??Ve(t)??e}if(e==="none")return t?.supportsDisabledThinking===!1?ze(e,t):e;if(uo(e,t))return ze(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return Xe(t)??sn(t)??Ve(t)??e}s(ao,"validateReasoningEffort");function ze(e,t){return t?.effortAliases?.[e]??e}s(ze,"applyEffortAlias");function uo(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=Jr(t);return n.length===0?be.includes(e):n.includes(e)||n.includes(ze(e,t))}s(uo,"isSupportedReasoningEffort");function Jr(e){return e?.supportedEfforts?.map(t=>t.value)??[]}s(Jr,"getSupportedEffortValues");function Xe(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}s(Xe,"getDefaultPresetValue");function sn(e){let t=e?.supportedEfforts?.filter(Yr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}s(sn,"getMiddleVisiblePresetValue");function Yr(e){return e.isUserVisible!==!1}s(Yr,"isUserVisiblePreset");function Ve(e){if(!e||e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return"none";if(!(e.effortStrategy==="anthropic-output-effort"&&e.thinkingStrategy==="anthropic-adaptive"))return"medium"}s(Ve,"getFallbackEffortForCapability");function Qr(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}s(Qr,"getDefaultThinkingDepthForMode");function pe(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}s(pe,"effortToThinkingDepth");function ge(e,t,n="unknown"){if(t==="off")return 0;let o={...oo,...e.defaultThinkingBudgets??{}},i=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(i,e.thinkingBudgetCap):i}s(ge,"resolveThinkingBudget");function me(e,t,n=ro){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}s(me,"clampThinkingBudget");function un(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}s(un,"mapDepthToOpenAIReasoningEffort");import{AsyncLocalStorage as ci}from"node:async_hooks";function co(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):co(t.cause)}s(co,"getStatus");function Zr(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""}s(Zr,"getMessage");var ei=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],ti=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],ni=["minimal","none","low","medium","high","xhigh","max"];function oi(e,t){for(let n of ni)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}s(oi,"extractRejectedEffort");function cn(e,t){let n=co(e);if(n!==400&&n!==422)return null;let o=Zr(e);if(!o)return null;let r=ei.some(u=>o.includes(u)),i=ti.some(u=>o.includes(u));if(!r||!i)return null;let a=oi(o,t);return a?{rejectedEffort:a}:null}s(cn,"classifyReasoningEffortRejection");function lo(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,i=>i.toUpperCase())];if(r!==void 0)return Array.isArray(r)?r[0]:r}s(lo,"readHeader");function fo(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}s(fo,"parsePositiveNumber");function ri(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}s(ri,"parseHttpDate");function gt(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,i=t.now?t.now():Date.now(),a=fo(lo(e,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=lo(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=fo(u);if(g!==void 0){let m=g*1e3,_=Math.min(m,r);return{type:"header",waitMs:Math.round(_),source:"retry-after-seconds",cappedFromHeader:_!==m}}let k=ri(u,i);if(k!==void 0){let m=Math.min(k,r);return{type:"header",waitMs:Math.round(m),source:"retry-after-date",cappedFromHeader:m!==k}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),l=Math.min(c,o),f=t.withJitter!==!1?Math.random()*.25*l:0;return{type:"backoff",waitMs:Math.round(l+f),source:"exponential-backoff",attempt:t.attempt}}s(gt,"parseRetryAfter");function qe(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}s(qe,"extractHeadersFromError");import{AsyncLocalStorage as ii}from"node:async_hooks";var po=new ii,go=8,mo=32;function si(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}s(si,"parsePositiveInt");function ai(){let e=Je()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:si(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??go;return Math.max(1,Math.min(mo,t))}s(ai,"resolveWorkflowMaxConcurrency");function ui(e,t){return po.run(e,t)}s(ui,"runWithScopedConfig");function Je(){return po.getStore()}s(Je,"getRunScopedConfig");function ee(e){if(e!==void 0)return e;let t=Je()?.disablePromptCache;return t!==void 0?t:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}s(ee,"resolvePromptCacheDisabled");var te={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},ho={...te,multimodalSupport:"image-input"},Ye={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},yo={...Ye,multimodalSupport:"image-input"};function mt(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"}}s(mt,"normalizeCapabilityProfile");function G(e){return{...mt(e)}}s(G,"cloneCapabilityProfile");function di(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}s(di,"parseEnvInt");function li(e){switch(e.reasoningPreset){case"zai-glm-5.3":case"zai-glm-5.2":case"deepseek-v4-flash-openai":case"deepseek-v4-pro-openai":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}s(li,"shouldLowerAutoReasoningEffort");function ht(){return new DOMException("Request aborted","AbortError")}s(ht,"abortError");async function fi(e){let[t,n]=await Promise.allSettled([import("@anthropic-ai/sdk"),import("openai")]);return t.status==="fulfilled"&&e instanceof t.value.APIUserAbortError||n.status==="fulfilled"&&e instanceof n.value.APIUserAbortError}s(fi,"isProviderSdkAbortError");function pi(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(ht()):new Promise((n,o)=>{let r,i=s(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=s(()=>{r&&clearTimeout(r),i(),o(ht())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{i(),n()},e)})}s(pi,"waitForRetryDelay");function dn(e){let t=typeof e=="number"&&Number.isInteger(e)?e:typeof e=="string"&&/^\d{3}$/.test(e)?Number(e):void 0;return t!==void 0&&t>=100&&t<=599?t:void 0}s(dn,"normalizeHttpStatus");function ln(e,t=0){if(!e||typeof e!="object"||t>4)return;let n=e;return dn(n.status)??dn(n.statusCode)??dn(n.code)??ln(n.cause,t+1)}s(ln,"extractHttpStatus");function fn(e,t=0){if(!e||typeof e!="object"||t>4)return"";let n=e;return typeof n.code=="string"?n.code:fn(n.cause,t+1)}s(fn,"extractErrorCode");function vo(e,t,n=0){if(!e||typeof e!="object"||n>4)return;let o=e;for(let r of t){let i=o[r];if(typeof i=="string"&&/^[\w.:-]{1,200}$/.test(i))return i}return vo(o.cause,t,n+1)}s(vo,"extractDiagnosticString");function gi(e){let t=vo(e,["requestId","request_id"]);if(t!==void 0)return t;let n=qe(e),o=["x-request-id","request-id","anthropic-request-id","cf-ray"];for(let r of o){let i=n instanceof Headers?n.get(r)??void 0:n?.[r]??n?.[r.replace(/\b\w/g,u=>u.toUpperCase())],a=Array.isArray(i)?i[0]:i;if(typeof a=="string"&&/^[\w.:-]{1,200}$/.test(a))return a}}s(gi,"extractRequestId");function Qe(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()}s(Qe,"getErrorMessage");var ne=class{static{s(this,"KodaXBaseProvider")}activeLegacyRequestOverride=new ci;pendingLegacyMaxOutputTokensOverride;setMaxOutputTokensOverride(t){this.pendingLegacyMaxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){let n=this.activeLegacyRequestOverride.getStore()?.maxOutputTokensOverride??this.pendingLegacyMaxOutputTokensOverride;if(typeof n=="number"&&Number.isFinite(n)&&n>0)return n;let o=Je()?.maxOutputTokens,r=(typeof o=="number"&&Number.isFinite(o)&&o>0?o:void 0)??di(process.env.KODAX_MAX_OUTPUT_TOKENS);if(r!==void 0)return r;let i=this.getModelDescriptor(t)?.maxOutputTokens;return i!==void 0?i: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,i,a){throw new I(`${this.name} does not support non-streaming fallback`,this.name,{failureCode:"protocol_mismatch",stage:"response_stream"})}isConfigured(){return ke(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(i=>i.id===o.wireModel):void 0;return r?{...r,...o}:o}if(n===this.config.model)return{id:this.config.model}}getWireModelId(t){let n=t??this.config.model;return this.getModelDescriptor(n)?.wireModel??n}getWireModel(t){return this.getWireModelId(t)}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return G(this.config.capabilityProfile??te)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:an(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(),i=n.map(u=>u.toLowerCase()).some(u=>o.includes(u)),a=o.includes("parameter")||i;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=Qe(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=ln(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Qe(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=ke(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 pt(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=be.includes(o),i=this.getReasoningProfile(n);if(!i){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: ${be.join(", ")}.`,this.name,{failureCode:"request_build_failed",stage:"request_build"})}if(i.localRejectEfforts?.includes(o)){let d=n?`/${n}`:"";throw new I(`${this.name}${d} does not support reasoning effort "${o}".`,this.name,{failureCode:"request_build_failed",stage:"request_build"})}if(o==="none"||i.disabledEfforts?.includes(o)||i.allowCustomEffort)return;let a=i.supportedEfforts?.map(d=>d.value)??[],u=i.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",l=a.length>0?a.join(", "):be.join(", ");throw new I(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${l}.`,this.name,{failureCode:"request_build_failed",stage:"request_build"})}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.effortSource==="explicit"){let i=o?`/${o}`:"";throw new I(`${this.name}${i} does not support reasoning effort "${r}".`,this.name,{failureCode:"request_build_failed",stage:"request_build"})}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(li(n)){let i=Ge({capability:n,explicitEffort:r??"auto"}).effectiveEffort;return i==="none"||i!==void 0&&n.disabledEfforts?.includes(i)?{disabled:!0,effort:i,requestedEffort:r}:{disabled:!1,effort:i,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=qe(t);if(!n)return;let o=gt(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}providerErrorMetadata(t){let n=ln(t),o=fn(t),r=gi(t),i=this.extractRetryAfterMs(t);return{stage:"transport",...n!==void 0?{httpStatus:n}:{},...o!==""&&/^[\w.:-]{1,200}$/.test(o)?{upstreamCode:o}:{},...r!==void 0?{requestId:r}:{},...i!==void 0?{retryAfterMs:i}:{}}}parseContextOverflow(t){let n=Qe(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 i=n.match(r.regex);if(i){let a=Number(i[r.inputGroup].replace(/,/g,"")),u=Number(i[r.limitGroup].replace(/,/g,""));return Math.max(3e3,u-a-1e3)}}}isContextOverflowError(t){let n=Qe(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,i,a){let u=!1,c=this.pendingLegacyMaxOutputTokensOverride;this.pendingLegacyMaxOutputTokensOverride=void 0;let l={...c===void 0?{}:{maxOutputTokensOverride:c},suppressReasoningEffort:!1};for(let d=0;d<o;d++)try{return await this.activeLegacyRequestOverride.run(l.maxOutputTokensOverride===void 0?{}:{maxOutputTokensOverride:l.maxOutputTokensOverride},()=>t(l))}catch(f){if(this.isContextOverflowError(f)&&l.maxOutputTokensOverride===void 0){let g=this.parseContextOverflow(f),k=l.maxOutputTokensLimit;if(g&&(k===void 0||g<k)){l.maxOutputTokensOverride=g,r?.(d+1,o,0);continue}}if(this.isRateLimitError(f)){if(d===o-1){let p=Qe(f).trim(),h=p?`
|
|
3
|
+
${p}`:"",b=this.providerErrorMetadata(f);throw new je(`API rate limit exceeded after ${o} retries. Please wait and try again later.${h}`,b.retryAfterMs??6e4,b)}let g=qe(f)??{},k=gt(g,{attempt:d,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),m=k.waitMs,_=this.classifyRateLimitReason(f);if(i?.({provider:this.name,waitMs:m,reason:_,source:k.source,attempt:d+1,maxAttempts:o}),r?r(d+1,o,m):i||console.log(`[Rate Limit] Retrying in ${m/1e3}s (${d+1}/${o})...`),n?.aborted||(await pi(m,n),n?.aborted))throw ht();continue}if(a&&!u){let g=cn(f,a.effort);if(g){a.onRejected?.({provider:this.name,model:a.model,effort:g.rejectedEffort}),l.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let g=cn(f,a.effort);if(g)throw new Ke(`${this.name} rejected reasoning effort "${g.rejectedEffort}" even after dropping it.`,this.name,g.rejectedEffort,a.model)}if(f instanceof Error){if(n?.aborted&&(f.name==="AbortError"||await fi(f)))throw f.name==="AbortError"?f:new DOMException(f.message||"Request aborted","AbortError");let g=fn(f);throw(g==="ECONNRESET"||g==="EPIPE")&&this.onStaleConnection(),f instanceof I?f:new I(`${this.name} API error: ${f.message}`,this.name,this.providerErrorMetadata(f))}throw f}throw new ie("Unexpected end of withRateLimit")}};import{parse as mi}from"partial-json";function Te(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=mi(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}}}s(Te,"parseToolInputWithSalvageTracked");function hi(e){return Te(e).value}s(hi,"parseToolInputWithSalvage");var yi={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 yt(e){return e==null?"unknown":yi[e.trim().toLowerCase()]??"unknown"}s(yt,"classifyStopReason");function xe(e){let t=yt(e);return t==="end"||t==="tool"||t==="paused"}s(xe,"isCleanStop");async function Ce(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,i=s(l=>{r||(r=l),n.abort()},"recordAbort"),a=setTimeout(()=>i("timeout"),o),u=s(()=>i("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(l){return pn(l,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}s(Ce,"runVerifyCredential");function vi(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}s(vi,"redactKeyMaterial");function pn(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=vi(String(n.message??e)).slice(0,240),i=n.cause?.code??n.code,a=n.constructor?.name??"",u;return t.abortCause==="timeout"?u="timeout":t.abortCause==="parent"?u="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?u="unauthorized":o===429?u="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?u="unauthorized":o!==void 0&&o>=500&&o<600?u="server_error":i!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(i)?u="network":/timeout/i.test(r)?u="timeout":u="unknown",{ok:!1,error:u,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}s(pn,"classifyVerifyError");function gn(e,t){let n=e[e.length-1];if(n&&Pe(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}s(gn,"insertCacheBoundary");function Pe(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")}s(Pe,"isCacheBoundary");function mn(e,t){let n=[];for(let o of e){if(Pe(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}s(mn,"lowerCacheBoundaries");function _e(e){return e.filter(t=>!Pe(t))}s(_e,"stripCacheBoundaries");import{readFile as ki,stat as bi}from"node:fs/promises";import Ei from"node:path";var Ti={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},we="[Historical image unavailable: the local attachment file is missing.]",ko="[Image content omitted: this provider does not support inline images in tool results.]";async function bo(e){try{return await bi(e),!1}catch(t){let n=t.code;return n==="ENOENT"||n==="ENOTDIR"}}s(bo,"isImageFileMissing");function vt(e,t){return t??Ti[Ei.extname(e).toLowerCase()]??"image/png"}s(vt,"resolveImageMediaType");async function xi(e){return(await ki(e)).toString("base64")}s(xi,"readImageFileAsBase64");async function kt(e){try{return await xi(e)}catch(t){let n=t.code;if(n==="ENOENT"||n==="ENOTDIR")return;throw t}}s(kt,"readImageFileAsBase64IfAvailable");async function Eo(e,t){let n=await kt(e);if(n!==void 0)return`data:${vt(e,t)};base64,${n}`}s(Eo,"buildImageDataUrlIfAvailable");var Ci="KodaX",Pi="effort-2025-11-24";async function yn(e){let{default:t}=await import("@anthropic-ai/sdk");return new t(e)}s(yn,"createAnthropicSdkClient");function To(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}]}s(To,"appendAnthropicEphemeralSuffix");function _i(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Ci}}s(_i,"getAnthropicCompatDefaultHeaders");function hn(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",i=n||o||r,a=n?e.input_tokens:0,u=i?o?e.cache_creation_input_tokens:void 0:t?.cachedWriteTokens,c=i?r?e.cache_read_input_tokens:void 0:t?.cachedReadTokens,l=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,d=i?a+(u??0)+(c??0):t?.inputTokens??0;if(![d,l,u,c].some(f=>f!==void 0&&(!Number.isFinite(f)||f<0)))return{inputTokens:d,outputTokens:l,totalTokens:d+l,...c!==void 0?{cachedReadTokens:c}:{},...u!==void 0?{cachedWriteTokens:u}:{}}}s(hn,"normalizeAnthropicUsage");function vn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(vn,"isRecord");function wi(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}s(wi,"selectAnthropicOutputEffort");function xo(e,t){let n=wi(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...vn(r)?r:{},effort:n}}s(xo,"applyAnthropicOutputEffort");function bt(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...vn(o)?o:{},effort:t}}s(bt,"setAnthropicOutputEffort");function Mi(e){let n=e.output_config;return vn(n)&&typeof n.effort=="string"}s(Mi,"hasAnthropicOutputEffort");var B=class extends ne{static{s(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;_clientPromise;async getClient(){if(this._client)return this._client;let t=this._clientPromise??=Promise.resolve(this.buildClient());try{let n=await t;return this._clientPromise===t&&(this._client=n,this._clientPromise=void 0),this._client??n}catch(n){throw this._clientPromise===t&&(this._clientPromise=void 0),n}}set client(t){this._client=t,this._clientPromise=void 0}buildClient(){let t=_i(this.config);return yn({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let i=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&Mi(t)?{"anthropic-beta":Pi}:void 0;return{...o?{signal:o}:{},...i?{headers:i}:{}}}applyReasoningProfile(t,n,o,r,i,a){if(a)return;this.validateExplicitReasoningEffort(o,r);let u=this.resolveReasoningProfileIntent(o,n,r),c=n.reasoningPreset,l=t;if(c==="kimi-k2.7-code"||c==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(c==="kimi-k3"){let d=o.effortSource==="omitted"&&o.effort==="none";if(u.disabled&&!d){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:d?n.defaultEffort??"max":u.effort??n.defaultEffort??"max"};return}if(!(c==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(u.disabled){if(c==="zai-glm-5.3"){t.thinking={type:"adaptive"},bt(t,"low");return}(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"},u.effort&&(l.reasoning_effort=u.effort);return}if(c==="zai-glm-5.3"){t.thinking={type:"adaptive"},bt(t,u.effort);return}if(c==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},bt(t,u.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"},u.effort&&(l.reasoning_effort=u.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},bt(t,u.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let d=this.resolveReasoningProfileBudget(n,u.effort,o,r,i);t.thinking={type:"enabled",budget_tokens:d}}}}resolveReasoningProfileBudget(t,n,o,r,i){let u=(n?t.budgetByEffort?.[n]:void 0)??ge(this.config,pe(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),l=c!==void 0?Math.min(u,c):u;return me(l,i)}async verifyCredential(t){let n=this.config.model,o=await this.getClient(),r=[{strategy:"count-tokens",approxTokensSpent:0,run:s(async i=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:i})},"run")},{strategy:"models-list",approxTokensSpent:0,run:s(async i=>{await o.models.list({},{signal:i})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:s(async i=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:i})},"run")}];return Ce({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}applyCacheControlToSystem(t){if(!t.trim()||ee())return t;let n=gn([{type:"text",text:t}],"system");return mn(n,"attach")}applyCacheControlToTools(t){if(t.length===0||ee())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||ee())return t;let n=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"){n=l;break}if(n===-1)return t;let o=t[n];if(typeof o.content=="string"){if(o.content.length===0)return t;let l=t.slice();return l[n]={...o,content:[{type:"text",text:o.content,cache_control:{type:"ephemeral"}}]},l}if(o.content.length===0)return t;let r=o.content,a={...r[r.length-1],cache_control:{type:"ephemeral"}},u=[...r.slice(0,-1),a],c=t.slice();return c[n]={...o,content:u},c}supportsEphemeralSuffix(){return!0}async stream(t,n,o,r,i,a){return this.withRateLimit(async u=>{let c=this.normalizeReasoning(r),l=i?.modelOverride??this.config.model,d=this.getWireModelId(l);this.validateExplicitReasoningEffort(c,l);let f=i?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l);u.maxOutputTokensLimit??=f;let g=u.maxOutputTokensOverride??f,k=To(this.applyCacheControlToMessages(await this.convertMessages(t,l)),i?.ephemeralSuffix?.content),m=c.enabled?this.getReasoningCapability(l):"none",_=this.getReasoningProfile(l),p=_?["profile","none"]:c.enabled?this.getReasoningFallbackChain(m).filter(x=>x==="native-budget"||x==="native-toggle"||x==="native-adaptive"||x==="none"):["none"],h=!!i?.forcedToolName,b=s(x=>{let w={model:d,max_tokens:g,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:k,tools:this.applyCacheControlToTools(n),stream:!0,...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!ee()?{metadata:{user_id:i.promptCacheKey}}:{}};if(i?.forcedToolName&&h&&(w.tool_choice={type:"tool",name:i.forcedToolName}),x!=="none")if(x==="profile"&&_)this.applyReasoningProfile(w,_,c,l,g,u.suppressReasoningEffort);else if(x==="native-budget"){let L=ge(this.config,pe(c.effort),c.taskType);w.thinking={type:"enabled",budget_tokens:me(L,g)}}else x==="native-toggle"?w.thinking={type:"enabled"}:x==="native-adaptive"&&(w.thinking={type:"adaptive"},xo(w,c));return w},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let y=[],T=[],C=[],M,E=null,P="",v="",S="",D="",$="",N="",F="",re=!1,A,H=Date.now(),ue=Date.now(),K=await this.getClient(),U,Q;for(let x of p){for(;!U;)try{let w=b(x);U=await K.messages.create(w,this.buildMessageCreateOptions(w,l,a))}catch(w){if(Q=w,h&&this.shouldFallbackForForcedToolChoiceError(w)){h=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let L=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(w,...L))throw w;break}if(U)break}if(!U)throw Q??new I("All reasoning capability attempts failed without a captured error",this.name);let ct=Date.now(),$e=0,Fe=0,Yt=3e4;for await(let x of U){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let w=Date.now(),L=w-ct;if(L>Yt&&($e++,Fe+=L,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(L/1e3)}s gap before ${x.type}`,{stallCount:$e,totalStallMs:Fe,eventType:x.type})),ct=w,x.type==="content_block_start"||x.type==="content_block_stop"?i?.onHeartbeat?.(!0):i?.onHeartbeat?.(),x.type==="content_block_start"){H=Date.now();let R=x.content_block;E=R.type,process.env.KODAX_DEBUG_TOOL_STREAM&&R.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:R.type,id:R.id,name:R.name}),R.type==="thinking"?(v="",S=R.signature??""):R.type==="redacted_thinking"?(E="redacted_thinking",D=R.data??""):R.type==="text"?P="":R.type==="tool_use"&&($=R.id,N=R.name,F="")}else if(x.type==="content_block_delta"){H=Date.now();let R=x.delta;R.type==="thinking_delta"?(v+=R.thinking??"",i?.onThinkingDelta?.(R.thinking??"")):R.type==="text_delta"?(P+=R.text??"",i?.onTextDelta?.(R.text??"")):R.type==="input_json_delta"&&(F+=R.partial_json??"",i?.onToolInputDelta?.(N,R.partial_json??"",$?{toolId:$}:void 0))}else if(x.type==="content_block_stop"){if(H=Date.now(),E==="thinking")v&&(C.push({type:"thinking",thinking:v,signature:S}),i?.onThinkingEnd?.(v));else if(E==="redacted_thinking")D&&C.push({type:"redacted_thinking",data:D}),D="";else if(E==="text")P&&y.push({type:"text",text:P});else if(E==="tool_use")if(!$||!N)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify($),name:JSON.stringify(N),input:F.slice(0,100)});else{let R=Te(F);T.push({type:"tool_use",id:$,name:N,input:R.value,...R.salvaged?{_salvaged:!0,_truncated:!0}:{}})}E=null}else if(x.type==="message_stop"){if(re=!0,H=Date.now(),process.env.KODAX_DEBUG_STREAM){let R=Date.now()-ue;this.logStreamDiagnostic(`[Stream] message_stop received after ${R}ms`)}}else if(x.type==="message_delta"){H=Date.now(),M=hn(x.usage,M);let R=x.delta;R?.stop_reason&&(A=R.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${A}`))}else x.type==="message_start"&&(H=Date.now(),M=hn(x.message?.usage,M),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!re){let x=Date.now()-ue,w=Date.now()-H;if(a?.aborted){let L=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:x,lastEventAge:w,reason:L,textBlocks:y.length,toolBlocks:T.length,thinkingBlocks:C.length}),new DOMException(L,"AbortError")}if(!A){let L=new Error(`Stream incomplete: message_stop event not received. Duration: ${x}ms, Last event: ${w}ms ago. This may indicate a network disconnection or API timeout.`);throw L.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:x,lastEventAge:w,textBlocks:y.length,toolBlocks:T.length,thinkingBlocks:C.length}),L}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:x,lastEventAge:w,stopReason:A,textBlocks:y.length,toolBlocks:T.length,thinkingBlocks:C.length})}let O=xe(A)?T.map(({_truncated:x,...w})=>w):T;return{textBlocks:y,toolBlocks:O,thinkingBlocks:C,usage:M,stopReason:A}},a,3,i?.onRateLimit,i?.onRetryAfter,{model:i?.modelOverride??this.config.model,onRejected:i?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,i,a){return this.withRateLimit(async u=>{let c=this.normalizeReasoning(r),l=i?.modelOverride??this.config.model,d=this.getWireModelId(l);this.validateExplicitReasoningEffort(c,l);let f=i?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l);u.maxOutputTokensLimit??=f;let g=u.maxOutputTokensOverride??f,k=To(this.applyCacheControlToMessages(await this.convertMessages(t,l)),i?.ephemeralSuffix?.content),m=c.enabled?this.getReasoningCapability(l):"none",_=this.getReasoningProfile(l),p=_?["profile","none"]:c.enabled?this.getReasoningFallbackChain(m).filter(v=>v==="native-budget"||v==="native-toggle"||v==="native-adaptive"||v==="none"):["none"],h=!!i?.forcedToolName,b=s(v=>{let S={model:d,max_tokens:g,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:k,tools:this.applyCacheControlToTools(n),...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!ee()?{metadata:{user_id:i.promptCacheKey}}:{}};if(i?.forcedToolName&&h&&(S.tool_choice={type:"tool",name:i.forcedToolName}),v!=="none")if(v==="profile"&&_)this.applyReasoningProfile(S,_,c,l,g,u.suppressReasoningEffort);else if(v==="native-budget"){let D=ge(this.config,pe(c.effort),c.taskType);S.thinking={type:"enabled",budget_tokens:me(D,g)}}else v==="native-toggle"?S.thinking={type:"enabled"}:v==="native-adaptive"&&(S.thinking={type:"adaptive"},xo(S,c));return S},"buildRequest"),y=await this.getClient(),T,C;for(let v of p){for(;!T;)try{let S=b(v);T=await y.messages.create(S,this.buildMessageCreateOptions(S,l,a))}catch(S){if(C=S,h&&this.shouldFallbackForForcedToolChoiceError(S)){h=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let D=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(S,...D))throw S;break}if(T)break}if(!T)throw C??new I("All reasoning capability attempts failed without a captured error",this.name);let M=[],E=[],P=[];for(let v of T.content)v.type==="text"?(M.push({type:"text",text:v.text}),i?.onTextDelta?.(v.text)):v.type==="thinking"?(P.push({type:"thinking",thinking:v.thinking,signature:v.signature??""}),i?.onThinkingDelta?.(v.thinking),i?.onThinkingEnd?.(v.thinking)):v.type==="redacted_thinking"?P.push({type:"redacted_thinking",data:v.data}):v.type==="tool_use"&&E.push({type:"tool_use",id:v.id,name:v.name,input:typeof v.input=="object"&&v.input!==null?v.input:{}});return{textBlocks:M,toolBlocks:E,thinkingBlocks:P,usage:hn(T.usage),stopReason:T.stop_reason??void 0}},a,3,i?.onRateLimit,i?.onRetryAfter,{model:i?.modelOverride??this.config.model,onRejected:i?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(Pe(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,{failureCode:"request_build_failed",stage:"request_build"});return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
|
|
4
|
+
`)}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(`
|
|
5
|
+
|
|
6
|
+
`)}async convertMessages(t,n){let o=[],r=this.getEffectiveStrictThinkingSignature(n);for(let i of t.filter(a=>a.role!=="system")){let a=i.role==="user"?"user":"assistant";if(typeof i.content=="string"){o.push({role:a,content:i.content});continue}let u=[],c=[];for(let d of i.content)d.type==="thinking"?!r||typeof d.signature=="string"&&d.signature.length>0?u.push({type:"thinking",thinking:d.thinking,signature:d.signature??""}):d.thinking&&c.push(d.thinking):d.type==="redacted_thinking"&&(r||u.push({type:"redacted_thinking",data:d.data}));c.length>0&&i.role==="assistant"&&u.push({type:"text",text:`<prior_reasoning>
|
|
7
|
+
${c.join(`
|
|
8
|
+
|
|
9
|
+
`)}
|
|
10
|
+
</prior_reasoning>`});for(let d of i.content)if(d.type==="tool_result"&&i.role==="user"){let f;if(typeof d.content=="string")f=d.content;else{let g=[];for(let k of d.content)if(k.type==="text")g.push({type:"text",text:k.text});else if(k.type==="image"){let m=await kt(k.path);m===void 0?g.push({type:"text",text:we}):g.push({type:"image",source:{type:"base64",media_type:vt(k.path,k.mediaType),data:m}})}f=g}u.push({type:"tool_result",tool_use_id:d.tool_use_id,content:f,...d.is_error===!0?{is_error:!0}:{}})}for(let d of i.content)d.type==="tool_use"&&i.role==="assistant"&&u.push({type:"tool_use",id:d.id,name:d.name,input:d.input});for(let d of i.content)if(d.type==="text")u.push({type:"text",text:d.text});else if(d.type==="image"&&i.role==="user"){let f=await kt(d.path);f===void 0?u.push({type:"text",text:we}):u.push({type:"image",source:{type:"base64",media_type:vt(d.path,d.mediaType),data:f}})}if(a==="assistant"&&this.config.supportsThinking&&!r){let d=u.some(g=>g.type==="tool_use"),f=u.some(g=>g.type==="thinking"||g.type==="redacted_thinking");d&&!f&&u.unshift({type:"thinking",thinking:"...",signature:""})}let l=u.length===0||(a==="assistant"||a==="user")&&u.every(d=>{let f=d;return f.type==="thinking"&&!f.thinking||f.type==="text"&&!f.text});o.push({role:i.role,content:l?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=s((o,r)=>{let i=new Set;if(!o||typeof o.content=="string"||!Array.isArray(o.content))return i;for(let a of o.content){let u=a;r==="tool_use"&&u.type==="tool_use"&&u.id&&i.add(u.id),r==="tool_result"&&u.type==="tool_result"&&u.tool_use_id&&i.add(u.tool_use_id)}return i},"collectIds");return t.map((o,r)=>{if(typeof o.content=="string"||!Array.isArray(o.content))return o;let i=o.content;if(o.role==="assistant"){let a=n(t[r+1],"tool_result");i=i.filter(u=>{let c=u;return c.type!=="tool_use"||!!c.id&&a.has(c.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");i=i.filter(u=>{let c=u;return c.type!=="tool_result"||!!c.tool_use_id&&a.has(c.tool_use_id)})}return i.length===o.content.length?o:i.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:i}})}};var Si="KodaX";async function Ri(e){let{default:t}=await import("openai");return new t(e)}s(Ri,"createOpenAISdkClient");function Co(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}s(Co,"isOpenAIReasoningAttempt");function Ai(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Si}}s(Ai,"getOpenAICompatDefaultHeaders");function kn(e,t){return e==="max_tokens"?{max_tokens:t}:{max_completion_tokens:t}}s(kn,"serializeOpenAICompatMaxOutputTokens");function Po(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}
|
|
11
|
+
|
|
12
|
+
${t}`:t:[...n.content,{type:"text",text:t}];return[...e.slice(0,-1),{...n,content:o}]}s(Po,"appendOpenAIEphemeralSuffix");function Oi(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return un(pe(e.effort))}}s(Oi,"selectOpenAIReasoningEffort");function _o(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(i=>!Number.isFinite(i)||i<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}:{}}}s(_o,"normalizeOpenAIUsage");function Ii(e){return e?e.type==="function"&&"function"in e:!1}s(Ii,"isOpenAIFunctionToolCall");function Di(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(""):""}s(Di,"extractOpenAIMessageText");function Ni(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(""):""}s(Ni,"extractOpenAIMessageReasoning");function Et(e){let t=e.role;return typeof t=="string"?t:void 0}s(Et,"getWireRole");function Li(e){if(Et(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}]:[]})}s(Li,"getAssistantWireToolCalls");function $i(e){if(Et(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}s($i,"getToolWireCallId");function Fi(e,t){let n={...e};return t.length>0?(n.tool_calls=t.map(o=>o.value),n):(delete n.tool_calls,(n.content==null||n.content==="")&&(n.content="..."),n)}s(Fi,"rewriteAssistantWireToolCalls");var q=class extends ne{static{s(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;_clientPromise;supportsEphemeralSuffix(){return!0}async getClient(){if(this._client)return this._client;let t=this._clientPromise??=Promise.resolve(this.buildClient());try{let n=await t;return this._clientPromise===t&&(this._client=n,this._clientPromise=void 0),this._client??n}catch(n){throw this._clientPromise===t&&(this._clientPromise=void 0),n}}set client(t){this._client=t,this._clientPromise=void 0}buildClient(){let t=Ai(this.config);return Ri({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=await this.getClient(),i=[{strategy:"models-list",approxTokensSpent:0,run:s(async a=>{await r.models.list({signal:a})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:s(async a=>{await r.chat.completions.create({model:o,...kn(this.getEffectiveMaxOutputTokensField(n),1),messages:[{role:"user",content:"hi"}]},{signal:a})},"run")}];return Ce({strategy:this.config.verifyStrategy??"models-list",runners:i,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=_e(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 i of n){if(i.role!=="system"){r.push(i);continue}let a=typeof i.content=="string"?i.content:Array.isArray(i.content)?i.content.filter(u=>typeof u=="object"&&u!==null&&u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
|
|
13
|
+
`):"";a.trim().length>0&&o.push(a)}return{system:o.join(`
|
|
14
|
+
|
|
15
|
+
`),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,i,a){if(i||o==="none")return;let u=t,c=me(ge(this.config,pe(r.effort),r.taskType),a),l=this.getReasoningProfile(n);if(l){this.applyReasoningProfile(u,l,r,n,c);return}switch(o){case"native-effort":{this.validateExplicitReasoningEffort(r,n);let d=Oi(r);d&&(u.reasoning_effort=d);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(u,{enable_thinking:!0,thinking_budget:c}):this.name==="zhipu"&&(u.thinking={type:"enabled",budget_tokens:c});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(u,{enable_thinking:!0}):this.name==="zhipu"&&(u.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,i){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(u==="kimi-k3"){let c=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!c){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:c?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(u==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,i);this.appendExtraBody(t,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-flash-openai"||u==="deepseek-v4-pro-openai"||u==="deepseek-v4-openai"||u==="zai-glm-5.3"||u==="zai-glm-5.2"){if(u==="zai-glm-5.3"&&a.disabled){t.thinking={type:"enabled"},t.reasoning_effort="low";return}t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(c=>c.value==="none")&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,i);t.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let i=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(i,a):i}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,i,a){return this.withRateLimit(async u=>{let c=this.stripCacheBoundariesFromMessages(t),{system:l,rest:d}=this.normalizeSystemForWire(o,c),f=i?.modelOverride??this.config.model,g=this.getWireModelId(f),k=Po([{role:"system",content:l},...await this.convertMessages(d,f)],i?.ephemeralSuffix?.content),m=n.map(O=>({type:"function",function:{name:O.name,description:O.description,parameters:O.input_schema}})),_=i?.forcedToolName,p=!!_;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let h=new Map,b="",y="",T,C=!0,M=null,E=Date.now(),P=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(P,f);let v=this.getReasoningProfile(f),S=Ee(P)?this.getReasoningCapability(f):"none",D=v?["profile","none"]:Ee(P)?this.getReasoningFallbackChain(S).filter(Co):["none"],$=i?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(f);u.maxOutputTokensLimit??=$;let N=u.maxOutputTokensOverride??$,F={model:g,messages:k,tools:m,...kn(this.getEffectiveMaxOutputTokensField(f),N),stream:!0,...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!ee()?{prompt_cache_key:i.promptCacheKey}:{}};_&&p&&(F.tool_choice={type:"function",function:{name:_}});let re=await this.getClient(),A,H;for(let O of D){for(;!A;){let x={...F};C&&(x.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(x),this.applyReasoningCapability(x,f,O,P,u.suppressReasoningEffort,N);try{A=await re.chat.completions.create(x,a?{signal:a}:{})}catch(w){if(H=w,p&&this.shouldFallbackForForcedToolChoiceError(w)){p=!1,delete F.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(C&&this.shouldFallbackForSpecificReasoningError(w,"stream_options","include_usage")){C=!1;continue}if(!this.shouldFallbackForReasoningError(w,...this.getFallbackTerms(O)))throw w;break}}if(A)break}if(!A)throw H??new I("All reasoning capability attempts failed without a captured error",this.name);let ue=Date.now(),K=0,U=0,Q=3e4;for await(let O of A){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let x=Date.now(),w=x-ue;w>Q&&(K++,U+=w,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(w/1e3)}s gap`,{stallCount:K,totalStallMs:U})),ue=x,i?.onHeartbeat?.(),T=_o(O.usage)??T;let L=O.choices[0],R=L?.delta;if(L?.finish_reason&&(M=L.finish_reason,process.env.KODAX_DEBUG_STREAM)){let Z=Date.now()-E;this.logStreamDiagnostic(`[Stream] finish_reason: ${M} after ${Z}ms`)}R?.content&&(b+=R.content,i?.onTextDelta?.(R.content));let Qt=this.extractReasoningDelta(R);if(Qt&&(y+=Qt,i?.onThinkingDelta?.(Qt)),R?.tool_calls)for(let Z of R.tool_calls){let fe=h.get(Z.index)??{id:"",name:"",arguments:""};Z.id&&(fe.id=Z.id),Z.function?.name&&(fe.name=Z.function.name),Z.function?.arguments&&(fe.arguments+=Z.function.arguments,i?.onToolInputDelta?.(fe.name,Z.function.arguments,fe.id?{toolId:fe.id}:void 0)),h.set(Z.index,fe)}}if(!M){let O=Date.now()-E;if(a?.aborted){let w=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:O,reason:w,textContentLength:b.length,toolCallsCount:h.size}),new DOMException(w,"AbortError")}let x=new Error(`Stream incomplete: finish_reason not received. Duration: ${O}ms. This may indicate a network disconnection or API timeout.`);throw x.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:O,textContentLength:b.length,toolCallsCount:h.size}),x}let ct=b?[{type:"text",text:b}]:[],$e=[],Fe=[];y&&(Fe.push({type:"thinking",thinking:y}),i?.onThinkingEnd?.(y));let Yt=xe(M??void 0);for(let[,O]of h)if(O.id&&O.name){let x=Te(O.arguments),w=x.salvaged?Yt?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};$e.push({type:"tool_use",id:O.id,name:O.name,input:x.value,...w})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(O.id),name:JSON.stringify(O.name),argsLength:O.arguments?.length??0});return{textBlocks:ct,toolBlocks:$e,thinkingBlocks:Fe,usage:T,stopReason:M??void 0}},a,3,i?.onRateLimit,i?.onRetryAfter,{model:i?.modelOverride??this.config.model,onRejected:i?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,i,a){return this.withRateLimit(async u=>{let c=this.stripCacheBoundariesFromMessages(t),{system:l,rest:d}=this.normalizeSystemForWire(o,c),f=i?.modelOverride??this.config.model,g=this.getWireModelId(f),k=Po([{role:"system",content:l},...await this.convertMessages(d,f)],i?.ephemeralSuffix?.content),m=n.map(K=>({type:"function",function:{name:K.name,description:K.description,parameters:K.input_schema}})),_=i?.forcedToolName,p=!!_,h=this.normalizeReasoning(r);this.validateExplicitReasoningEffort(h,f);let b=this.getReasoningProfile(f),y=Ee(h)?this.getReasoningCapability(f):"none",T=b?["profile","none"]:Ee(h)?this.getReasoningFallbackChain(y).filter(Co):["none"],C=i?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(f);u.maxOutputTokensLimit??=C;let M=u.maxOutputTokensOverride??C,E={model:g,messages:k,tools:m,...kn(this.getEffectiveMaxOutputTokensField(f),M),...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!ee()?{prompt_cache_key:i.promptCacheKey}:{}};_&&p&&(E.tool_choice={type:"function",function:{name:_}});let P,v,S=await this.getClient();for(let K of T){for(;!P;){let U={...E};this.resetReasoningCapabilityParams(U),this.applyReasoningCapability(U,f,K,h,u.suppressReasoningEffort,M);try{P=await S.chat.completions.create(U,a?{signal:a}:{})}catch(Q){if(v=Q,p&&this.shouldFallbackForForcedToolChoiceError(Q)){p=!1,delete E.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(Q,...this.getFallbackTerms(K)))throw Q;break}}if(P)break}if(!P)throw v??new I("All reasoning capability attempts failed without a captured error",this.name);let D=P.choices[0],$=D?.message,N=Di($?.content),F=Ni($),re=xe(D?.finish_reason??void 0),A=($?.tool_calls??[]).filter(Ii).map(K=>{let U=Te(K.function.arguments),Q=U.salvaged?re?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:K.id,name:K.function.name,input:U.value,...Q}});N&&i?.onTextDelta?.(N);let H=N?[{type:"text",text:N}]:[],ue=[];return F&&(ue.push({type:"thinking",thinking:F}),i?.onThinkingDelta?.(F),i?.onThinkingEnd?.(F)),{textBlocks:H,toolBlocks:A,thinkingBlocks:ue,usage:_o(P.usage),stopReason:D?.finish_reason??void 0}},a,3,i?.onRateLimit,i?.onRetryAfter,{model:i?.modelOverride??this.config.model,onRejected:i?.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(`
|
|
16
|
+
`),r=t.filter(d=>d.type==="tool_use").map(d=>({id:d.id,type:"function",function:{name:d.name,arguments:JSON.stringify(d.input??{})}})),i=t.filter(d=>d.type==="thinking"||d.type==="redacted_thinking").map(d=>d.type==="thinking"?d.thinking:"").filter(Boolean).join(`
|
|
17
|
+
|
|
18
|
+
`),a=t.some(d=>d.type==="thinking"||d.type==="redacted_thinking"),u=t.some(d=>d.type==="text");if(!o&&r.length===0&&!a&&!u)return[];let c;o?c=o:r.length>0?c=null:c="...";let l={role:"assistant",content:c};return r.length>0&&(l.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(l.reasoning_content=i||""),[l]}async serializeUserMessage(t){let n=[],o=t.filter(a=>a.type==="text").map(a=>a.text).join(`
|
|
19
|
+
`),r=t.filter(a=>a.type==="image");for(let a of t)if(a.type==="tool_result"){let u;if(typeof a.content=="string")u=a.content;else{let c=[];for(let l of a.content){if(l.type==="text"){c.push(l.text);continue}c.push(await bo(l.path)?we:ko)}u=c.join(`
|
|
20
|
+
`)}n.push({role:"tool",tool_call_id:a.tool_use_id,content:u})}if(r.length===0)return o&&n.push({role:"user",content:o}),n;let i=[];o&&i.push({type:"text",text:o});for(let a of r){let u=await Eo(a.path,a.mediaType);u===void 0?i.push({type:"text",text:we}):i.push({type:"image_url",image_url:{url:u}})}return n.push({role:"user",content:i}),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(`
|
|
21
|
+
`);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],i=Li(r);if(i===void 0){Et(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(i.map(g=>g.id)),u=new Set,c=[],l=o+1;for(;l<t.length&&Et(t[l])==="tool";){let g=t[l],k=$i(g);k!==void 0&&a.has(k)&&!u.has(k)&&(u.add(k),c.push(g)),l+=1}let d=i.filter(g=>u.has(g.id)),f=d.length===i.length&&i.length>0?r:Fi(r,d);n.push(f),d.length>0&&n.push(...c),o=l}return n}};import{spawn as Gi}from"node:child_process";import{Readable as qi,Writable as Ji}from"node:stream";import Ct from"node:process";import{spawnSync as Tt}from"node:child_process";var Bi=2e3,he=2e3,Tn=5e3,ce=Object.freeze({status:"terminated"}),wo=Object.freeze({status:"already-exited"}),W=Object.freeze({status:"unknown"}),Do=String.raw`
|
|
22
|
+
using System;
|
|
23
|
+
using System.Runtime.InteropServices;
|
|
24
|
+
using System.Text;
|
|
25
|
+
public static class KodaXNativeProcessSnapshot {
|
|
26
|
+
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
|
27
|
+
private struct ProcessEntry32 {
|
|
28
|
+
public uint dwSize;
|
|
29
|
+
public uint cntUsage;
|
|
30
|
+
public uint th32ProcessID;
|
|
31
|
+
public IntPtr th32DefaultHeapID;
|
|
32
|
+
public uint th32ModuleID;
|
|
33
|
+
public uint cntThreads;
|
|
34
|
+
public uint th32ParentProcessID;
|
|
35
|
+
public int pcPriClassBase;
|
|
36
|
+
public uint dwFlags;
|
|
37
|
+
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
|
|
38
|
+
public string szExeFile;
|
|
39
|
+
}
|
|
40
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
41
|
+
private static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processId);
|
|
42
|
+
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
43
|
+
private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
|
|
44
|
+
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
45
|
+
private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
|
|
46
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
47
|
+
private struct FileTime {
|
|
48
|
+
public uint Low;
|
|
49
|
+
public uint High;
|
|
50
|
+
}
|
|
51
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
52
|
+
private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
|
|
53
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
54
|
+
private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
|
|
55
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
56
|
+
private static extern bool TerminateProcess(IntPtr process, uint exitCode);
|
|
57
|
+
[DllImport("kernel32.dll")]
|
|
58
|
+
private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
|
|
59
|
+
[DllImport("kernel32.dll")]
|
|
60
|
+
private static extern bool CloseHandle(IntPtr handle);
|
|
61
|
+
private static ulong ReadCreationTime(uint processId) {
|
|
62
|
+
var process = OpenProcess(0x1000, false, processId);
|
|
63
|
+
if (process == IntPtr.Zero) return 0;
|
|
64
|
+
try {
|
|
65
|
+
FileTime creation, exit, kernel, user;
|
|
66
|
+
if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
|
|
67
|
+
return ((ulong)creation.High << 32) | creation.Low;
|
|
68
|
+
} finally {
|
|
69
|
+
CloseHandle(process);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
public static int TerminateExact(uint processId, ulong expectedCreationTime) {
|
|
73
|
+
var process = OpenProcess(0x1001, false, processId);
|
|
74
|
+
if (process == IntPtr.Zero) return 0;
|
|
75
|
+
try {
|
|
76
|
+
FileTime creation, exit, kernel, user;
|
|
77
|
+
if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
|
|
78
|
+
var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
|
|
79
|
+
if (actual != expectedCreationTime) return 2;
|
|
80
|
+
return TerminateProcess(process, 1) ? 1 : 0;
|
|
81
|
+
} finally {
|
|
82
|
+
CloseHandle(process);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
public static string ReadRows() {
|
|
86
|
+
FileTime cutoffTime;
|
|
87
|
+
GetSystemTimeAsFileTime(out cutoffTime);
|
|
88
|
+
var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
|
|
89
|
+
var snapshot = CreateToolhelp32Snapshot(2, 0);
|
|
90
|
+
if (snapshot == new IntPtr(-1)) return string.Empty;
|
|
91
|
+
var rows = new StringBuilder();
|
|
92
|
+
var entry = new ProcessEntry32();
|
|
93
|
+
entry.dwSize = (uint)Marshal.SizeOf(entry);
|
|
94
|
+
try {
|
|
95
|
+
if (!Process32First(snapshot, ref entry)) return string.Empty;
|
|
96
|
+
do {
|
|
97
|
+
var creationTime = ReadCreationTime(entry.th32ProcessID) / 10000;
|
|
98
|
+
if (creationTime == 0 || creationTime <= cutoff) {
|
|
99
|
+
rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append(',').Append(creationTime).Append('\n');
|
|
100
|
+
}
|
|
101
|
+
entry.dwSize = (uint)Marshal.SizeOf(entry);
|
|
102
|
+
} while (Process32Next(snapshot, ref entry));
|
|
103
|
+
return rows.ToString();
|
|
104
|
+
} finally {
|
|
105
|
+
CloseHandle(snapshot);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}`;function ye(e){return e.exitCode!==null||e.signalCode!==null}s(ye,"isExited");function bn(e,t){return ye(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=s(u=>{o||(o=!0,clearTimeout(a),e.off("exit",i),e.off("error",i),n(u))},"finish"),i=s(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),t);a.unref?.(),e.once("exit",i),e.once("error",i)})}s(bn,"waitForExit");function Mo(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}s(Mo,"signalPosixPidTree");function xn(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}s(xn,"signalTargetExists");function So(e){return xn(-e)||xn(e)}s(So,"isPosixPidTreeAlive");async function Ro(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!So(e))return!0;await new Promise(o=>setTimeout(o,50))}return!So(e)}s(Ro,"waitForPosixPidTreeExit");function ji(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 i=r,a=Number(i.pid),u=Number(i.parentPid),c=typeof i.creationTime=="string"?i.creationTime:String(i.creationTime??"0");return!Number.isFinite(a)||a<=0||!Number.isFinite(u)?[]:[{pid:a,parentPid:u,creationTime:/^\d+$/.test(c)?c:"0"}]})}catch{return[]}}s(ji,"parseWindowsProcessSnapshotJson");function Ki(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,i,a,u,c,l,d]=t,f=Date.UTC(Number(n),Number(o)-1,Number(r),Number(i),Number(a),Number(u),Number(c.slice(0,3))),g=Number(d)*6e4*(l==="+"?1:-1),k=f-g;if(Number.isFinite(k))return{identity:(BigInt(k)+11644473600000n).toString(),unixMs:k}}s(Ki,"parseWmicCreationTime");function Ui(){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(`
|
|
109
|
+
`),t=Tt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:Tn,windowsHide:!0});if(!t.error&&t.status===0){let i=ji(t.stdout);if(i.length>0)return i}let n=Date.now(),o=Tt("wmic",["process","get","CreationDate,ParentProcessId,ProcessId","/format:list"],{encoding:"utf8",timeout:Tn,windowsHide:!0});if(o.error||o.status!==0)return;let r=o.stdout.split(/\r?\n\s*\r?\n/).flatMap(i=>{let a=new Map(i.split(/\r?\n/).flatMap(f=>{let g=f.indexOf("=");return g<0?[]:[[f.slice(0,g),f.slice(g+1)]]})),u=Number(a.get("ProcessId")),c=Number(a.get("ParentProcessId")),l=a.get("CreationDate"),d=l===void 0?void 0:Ki(l);return!Number.isFinite(u)||u<=0||!Number.isFinite(c)||d===void 0||d.unixMs>n?[]:[{pid:u,parentPid:c,creationTime:d.identity}]});return r.length>0?r:void 0}s(Ui,"readWindowsProcessSnapshotFallback");function Wi(){let e=["$source = @'",Do,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
|
|
110
|
+
`),t=Tt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:Tn,windowsHide:!0});if(t.error||t.status!==0)return;let n=t.stdout.split(/\r?\n/).flatMap(o=>{let[r,i,a="0"]=o.split(",",3),u=Number(r),c=Number(i);return!Number.isFinite(u)||u<=0||!Number.isFinite(c)?[]:[{pid:u,parentPid:c,creationTime:a}]});return n.length>0?n:void 0}s(Wi,"readWindowsProcessSnapshotNative");function et(){return Wi()??Ui()}s(et,"readWindowsProcessSnapshot");function No(e,t,n){let o=new Map;for(let u of e)o.set(u.parentPid,[...o.get(u.parentPid)??[],u]);let r=[],i=[{pid:t,...n===void 0?{}:{creationTime:n},ancestryVerified:n!==void 0&&n!=="0"}],a=new Set([t]);for(;i.length>0;){let u=i.shift();if(u===void 0)break;for(let c of o.get(u.pid)??[]){if(a.has(c.pid)||!zi(c.creationTime,u.creationTime))continue;a.add(c.pid);let l=u.ancestryVerified&&c.creationTime!=="0";r.push(l?c:{...c,creationTime:"0"}),i.push({pid:c.pid,creationTime:c.creationTime,ancestryVerified:l})}}return r}s(No,"collectDescendantIdentities");function zi(e,t){if(e==="0"||t===void 0||t==="0")return!0;try{return BigInt(e)>=BigInt(t)}catch{return!1}}s(zi,"windowsCreationAtLeast");function Xi(e,t=et()){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))}s(Xi,"currentCapturedWindowsPids");function Ao(e){let t=et();if(t===void 0)return;let n=Xi([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}}s(Ao,"capturedWindowsProcessesGone");function Vi(e){return[e.root.pid,...e.descendants.map(t=>t.pid),...e.uncertainDescendantPids].some(xn)}s(Vi,"capturedWindowsPidMayBeAlive");async function Oo(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Vi(e))return Ao(e)===!0;await new Promise(o=>setTimeout(o,50))}return Ao(e)===!0}s(Oo,"waitForCapturedWindowsProcessesExit");function Io(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 = @'",Do,"'@","Add-Type -TypeDefinition $source",...t].join(`
|
|
111
|
+
`),o=Tt("powershell.exe",["-NoProfile","-NonInteractive","-Command",n],{encoding:"utf8",timeout:Bi,windowsHide:!0});return!o.error&&o.status===0}s(Io,"terminateCapturedWindowsProcesses");var Ze=new WeakMap;function Me(e){if(process.platform!=="win32"||e.pid===void 0)return;let t=Ze.get(e),n=et();if(t!==void 0&&ye(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 i=No(n,t.root.pid,t.root.creationTime);return Ze.set(e,{root:t.root,descendants:i.filter(a=>a.creationTime!=="0"),uncertainDescendantPids:i.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&&!ye(e)&&(o=et()?.find(r=>r.pid===e.pid&&r.creationTime!=="0")),!(o===void 0||ye(e)))return Ze.set(e,{root:o,descendants:[],uncertainDescendantPids:[],completeTree:!1}),o.creationTime}s(Me,"rememberChildProcessTree");function Hi(e,t){let n=et();if(n===void 0)return;let o=n.find(i=>i.pid===e);if(o===void 0||o.creationTime==="0"||o.creationTime!==t)return null;let r=No(n,e,o.creationTime);return{root:o,descendants:r.filter(i=>i.creationTime!=="0"),uncertainDescendantPids:r.filter(i=>i.creationTime==="0").map(i=>i.pid),completeTree:!0}}s(Hi,"captureWindowsProcessTree");async function En(e){let t=[e.root,...e.descendants],n=Io(t);return e.completeTree?await Oo(e,he)?ce:n?(Io(t),await Oo(e,he)?ce:W):W:W}s(En,"killCapturedWindowsTree");async function xt(e){let t;if(process.platform==="win32"&&e.pid!==void 0){let n=Ze.get(e),o=n===void 0?void 0:Hi(e.pid,n.root.creationTime);o!=null&&Ze.set(e,o);let r=o??n;return o===void 0&&r===void 0||ye(e)&&r!==void 0&&!r.completeTree&&r.descendants.length===0?W:(t=o===void 0?r===void 0?W:await En(r):o===null?r===void 0?W:await En(r):await En(o),await bn(e,he)?t.status==="unknown"?W:ce:W)}if(e.pid!==void 0&&process.platform!=="win32")return Mo(e.pid,"SIGTERM")?await Ro(e.pid,he)?ce:(Mo(e.pid,"SIGKILL"),await Ro(e.pid,he)?ce:W):wo;if(ye(e))return process.platform==="win32"&&e.pid!==void 0?W:wo;try{e.kill("SIGTERM")}catch{return ye(e)&&t?.status!=="unknown"?ce:W}if(await bn(e,he))return t?.status==="unknown"?W:ce;try{e.kill("SIGKILL")}catch{}return await bn(e,he)?t?.status==="unknown"?W:ce:W}s(xt,"killChildProcessTree");var oe=class extends Error{static{s(this,"AcpTransportClosedError")}constructor(){super("ACP transport closed before the request completed"),this.name="AcpTransportClosedError"}},Pt=class{static{s(this,"AcpClient")}client=null;agentProcess=null;options;constructor(t){this.options=t}async connect(){let{ClientSideConnection:t,PROTOCOL_VERSION:n,ndJsonStream:o}=await import("@agentclientprotocol/sdk"),r,i;if(this.options.inputStream&&this.options.outputStream)r=this.options.inputStream,i=this.options.outputStream;else if(this.options.command){let c=Ct.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Gi(c,this.options.args??[],{cwd:this.options.cwd??Ct.cwd(),stdio:["pipe","pipe","inherit"],detached:Ct.platform!=="win32",windowsHide:!0}),Me(this.agentProcess),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");i=Ji.toWeb(this.agentProcess.stdin),r=qi.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let a=o(i,r);if(this.client=new t(()=>({sessionUpdate:s(async u=>{this.options.onSessionUpdate?.(u)},"sessionUpdate"),requestPermission:s(async u=>{let c=u.options??[],l=c.find(d=>d.kind==="allow_once"||d.kind==="allow_always")??c[0];return l?{outcome:{outcome:"selected",optionId:l.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),a),this.client.signal.aborted)throw new oe;await this.awaitWhileConnected(this.client.initialize({protocolVersion:n,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}}))}async createNewSession(){if(!this.client)throw new Error("Client not connected");if(this.client.signal.aborted)throw new oe;return(await this.awaitWhileConnected(this.client.newSession({cwd:this.options.cwd??Ct.cwd(),mcpServers:[]}))).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");if(o?.throwIfAborted(),this.client.signal.aborted)throw new oe;let i={sessionId:n,prompt:[{type:"text",text:t}]};r?.model&&(i.model=r.model),r?.reasoningEffort&&(i.effort=r.reasoningEffort);let a=this.client.prompt(i);if(o){let u,c=new Promise((d,f)=>{u=f}),l=s(()=>{this.client?.cancel({sessionId:n}).catch(()=>{});let d=new Error("ACP prompt aborted");d.name="AbortError",u?.(o.reason??d)},"onAbort");o.addEventListener("abort",l,{once:!0}),a=Promise.race([a,c]).finally(()=>{o.removeEventListener("abort",l)})}return await this.awaitWhileConnected(a)}isConnectionOpen(){return this.client!==null&&!this.client.signal.aborted}releaseSession(t){this.options.releaseSession?.(t)}disconnect(){this.agentProcess&&xt(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 oe;let o,r=new Promise((i,a)=>{o=s(()=>a(new oe),"onClosed"),n.signal.addEventListener("abort",o,{once:!0})});try{return await Promise.race([t,r])}finally{o&&n.signal.removeEventListener("abort",o)}}};function Yi(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 i=n,a=o,u=r;if(u<i||u<a)return;let c=s(g=>typeof g=="number"&&Number.isFinite(g)&&g>=0?g:void 0,"optionalToken"),l=c(t.cachedReadTokens),d=c(t.cachedWriteTokens),f=c(t.thoughtTokens);return{inputTokens:i,outputTokens:a,totalTokens:u,...l!==void 0?{cachedReadTokens:l}:{},...d!==void 0?{cachedWriteTokens:d}:{},...f!==void 0?{thoughtTokens:f}:{}}}s(Yi,"normalizeAcpUsage");function Qi(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}s(Qi,"selectAcpReasoningEffort");function Lo(e){if(!e?.aborted)return;let t=e.reason;if(!(t===void 0||t instanceof Error&&t.name==="AbortError"))return t}s(Lo,"nonCancellationAbortReason");var de=class extends ne{static{s(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 Pt(o);this._connectingClient=r;let i;i=r.connect().then(()=>{if(this._clientConnectPromise!==i||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===i&&(this._clientConnectPromise=null)}),this._clientConnectPromise=i}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:_e(a.content)}:a),r=o[o.length-1],i="";if(r&&typeof r.content=="string")i=r.content;else if(r&&Array.isArray(r.content)){let a=[];for(let u of r.content)if(u.type==="text")a.push(u.text);else if(u.type==="image"){let c=this.serializeImageBlockToPromptToken(u);c&&a.push(c)}i=a.join(`
|
|
112
|
+
`)}return n?i.length>0?`${i}
|
|
113
|
+
|
|
114
|
+
${n}`:n:i}getCapabilityProfile(){return G(Ye)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=_e(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,i,a){let u=this.normalizeReasoning(r),c=Qi(u);if(t=this.stripCacheBoundariesFromMessages(t),this.acpClientOptions.executor&&typeof this.acpClientOptions.executor.isInstalled=="function"&&!await this.acpClientOptions.executor.isInstalled())throw new Error(`${this.name} requires a local CLI environment, but the CLI was not found or is not configured correctly.`);let l=[],d=[],f=i?.ephemeralSuffix?.content,g=this.getDiagnosticPromptText(t,f),k=s(p=>{let h=p.update,b=p.sessionId;if(!("sessionUpdate"in h))return;let y=b?this._activeStreams.get(b):void 0;if(y)switch(h.sessionUpdate){case"agent_message_chunk":if(h.content?.type==="text"){let T=h.content.text;y.output.text+=T,y.streamOptions?.onTextDelta?.(T)}break;case"tool_call":{let T="{}",C=h,M=C.arguments??C.parameters;M&&(T=typeof M=="string"?M:JSON.stringify(M)),y.streamOptions?.onToolInputDelta?.(h.title,T);let E=`
|
|
115
|
+
> [Tool Use] ${h.title}: ${T}
|
|
116
|
+
`;y.output.text+=E,y.streamOptions?.onTextDelta?.(E);break}case"tool_call_update":if(h.status){let T=`> [Tool Result] ${h.status}
|
|
117
|
+
|
|
118
|
+
`;y.output.text+=T,y.streamOptions?.onTextDelta?.(T)}break}},"onSessionUpdate"),m=i?.sessionId,_=await this.ensureClient(k);if(m&&this._activeConversationIds.has(m))throw new Error(`ACP conversation "${m}" already has an active prompt`);m&&this._activeConversationIds.add(m);try{let p=m?this._sessionMap.get(m):void 0;p||(p=await _.createNewSession(),m&&this._sessionMap.set(m,p));let h={text:""};this._activeStreams.set(p,{streamOptions:i,output:h});let b;try{b=await _.prompt(g,p,a,{model:i?.modelOverride,reasoningEffort:c})}catch(y){y instanceof oe&&this.invalidateClient(_);let T=Lo(a);if(T!==void 0)throw T;if(!(a?.aborted||y instanceof Error&&y.name==="AbortError"))throw y}finally{this._activeStreams.delete(p),m||_.releaseSession(p)}if(b?.stopReason==="cancelled"){let y=Lo(a);if(y!==void 0)throw y}return h.text&&l.push({type:"text",text:h.text}),{textBlocks:l,toolBlocks:d,thinkingBlocks:[],usage:Yi(b?.usage)}}catch(p){throw p instanceof oe&&this.invalidateClient(_),p}finally{m&&this._activeConversationIds.delete(m)}}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 Zi}from"node:child_process";import tt from"node:process";var Se=class{static{s(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={...tt.env,...this.config.env},i=tt.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=Zi(i,n,{cwd:this.config.cwd??tt.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:tt.platform!=="win32",windowsHide:!0}),u="";a.stderr?.on("data",E=>{u+=E.toString()});let c=new AbortController,l={},d,f=new Promise(E=>{d=s(()=>E(l),"resolveAbort")});Me(a);let g=s(()=>{if(c.signal.aborted)return;let E=t.signal?.reason;E===void 0?c.abort():c.abort(E)},"forwardExternalAbort");t.signal?.addEventListener("abort",g),t.signal?.aborted&&g();let k=!1,m,_=s(()=>(m||(m=(async()=>{let E={status:"unknown"};for(let P=0;P<3;P+=1){if(Me(a),E=await xt(a),E.status!=="unknown"||k&&!c.signal.aborted)return E;P<2&&await new Promise(v=>setTimeout(v,50))}return E})()),m),"terminateChild"),p=s(()=>{d?.(),k||(_(),a.stdout?.destroy())},"abortHandler");c.signal.addEventListener("abort",p),c.signal.aborted&&p(),a.on("exit",()=>{k=!0,Me(a)});let h=!1,b,y,T=this.config.timeout;T!==void 0&&Number.isFinite(T)&&T>0&&!c.signal.aborted&&(y=setTimeout(()=>{c.signal.aborted||(h=!0,b=new Error(`Provider CLI timed out after ${T}ms`),c.abort(b))},T),y.unref?.());let C=s(async E=>{let P=await Promise.race([E,f]);if(P===l)throw c.signal.reason??b??new Error("Provider CLI execution aborted");return P},"waitForExecution"),M=new Promise((E,P)=>{a.once("error",P),a.once("close",(v,S)=>E({code:v,signal:S}))});try{let E=this.parseOutputStream(a.stdout,c.signal)[Symbol.asyncIterator]();for(;;){let S=await C(E.next());if(S.done)break;yield S.value}if(c.signal.aborted)throw c.signal.reason;let P=await C(M);if(h)throw b??c.signal.reason;let v=u.trim();if(!t.signal?.aborted&&P.code!==0){let S=P.code===null?`signal ${P.signal??"unknown"}`:`code ${P.code}`;throw new Error(`Provider CLI exited with ${S}${v?`: ${v}`:""}`)}v&&console.error(`[CLIExecutor] stderr: ${v}`)}catch(E){throw M.catch(()=>{}),c.signal.aborted?c.signal.reason:E}finally{if(y&&clearTimeout(y),t.signal?.removeEventListener("abort",g),c.signal.removeEventListener("abort",p),tt.platform==="win32"||m!==void 0||!k){let E=m!==void 0;if((await _()).status==="unknown"&&(E||!k))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 i=o.split(`
|
|
119
|
+
`);o=i.pop()??"";for(let a of i){if(!a.trim())continue;let u=this.parseLine(a.trim());u&&(yield u)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as es}from"node:child_process";import ts from"node:process";async function _t(e){try{let t=ts.platform==="win32",n=es(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}}s(_t,"checkCliCommandInstalled");function wt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}s(wt,"finiteNonNegative");function ns(e){if(!(!e||!wt(e.input_tokens)||!wt(e.output_tokens)||!wt(e.total_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.total_tokens,...wt(e.cached)?{cachedReadTokens:e.cached}:{}}}s(ns,"normalizeGeminiUsage");var Mt=class extends Se{static{s(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 _t("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:ns(t.stats),raw:t};default:return null}}};import{TransformStream as $o}from"node:stream/web";import{randomUUID as Cn}from"node:crypto";function nt(e){let t=new $o,n=new $o,o=t.readable.getReader(),r=n.writable.getWriter(),i=new TextDecoder,a=new TextEncoder,u="",c=Cn(),l=new AbortController,d=new Map,f=new Map;(async()=>{try{for(;;){let{done:p,value:h}=await o.read();if(p)break;u+=i.decode(h,{stream:!0});let b=u.split(`
|
|
120
|
+
`);u=b.pop()??"";for(let y of b)if(y.trim())try{let T=JSON.parse(y);k(T).catch(C=>{console.error("[PseudoAcpServer] Failed to handle request:",C)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",y)}}}catch(p){console.error("[PseudoAcpServer] Stream read error:",p)}})();let g=s(async p=>{let h=JSON.stringify(p)+`
|
|
121
|
+
`;await r.write(a.encode(h))},"sendMsg");async function k(p){if(p.method==="initialize")await g({jsonrpc:"2.0",id:p.id,result:{protocolVersion:p.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(p.method==="session/new"||p.method==="sessions/new")c=p.params?.sessionId??Cn(),await g({jsonrpc:"2.0",id:p.id,result:{sessionId:c}});else if(p.method==="session/prompt"||p.method==="chat/prompt"){let h=new AbortController,b=p.params.sessionId;d.set(b,h);let y=s(()=>h.abort(),"onGlobalAbort");l.signal.addEventListener("abort",y);let T=m(b,p.params.prompt,typeof p.params.model=="string"?p.params.model:void 0,typeof p.params.effort=="string"?p.params.effort:void 0,h.signal).finally(()=>{d.delete(b),l.signal.removeEventListener("abort",y)});try{let C=await T;await g({jsonrpc:"2.0",id:p.id,result:C.usage?{stopReason:C.stopReason,usage:C.usage}:{stopReason:C.stopReason}})}catch(C){await g({jsonrpc:"2.0",id:p.id,error:{code:-32e3,message:C instanceof Error?C.message:String(C)}})}}else if(p.method==="session/cancel"||p.method==="chat/cancel"){let h=d.get(p.params.sessionId);h&&h.abort(),p.id!==void 0&&await g({jsonrpc:"2.0",id:p.id,result:{}})}else p.id!==void 0&&await g({jsonrpc:"2.0",id:p.id,result:{}})}s(k,"handleRequest");let m=s(async(p,h,b,y,T)=>{let C=h.find(P=>P.type==="text")?.text??"",M,E=!1;try{let P=e.execute({prompt:C,model:b,reasoningEffort:y,sessionId:f.get(p),signal:T});for await(let v of P){if(v.type==="error")throw new Error(v.message);if(v.type==="complete"&&v.status==="failed")throw new Error("Provider CLI reported a failed completion");v.type==="session_start"&&v.sessionId&&f.set(p,v.sessionId);let S=_(v);S&&await g({jsonrpc:"2.0",method:"session/update",params:{sessionId:p,update:S}}),v.type==="complete"&&(E=!0,M=v.usage)}if(!T.aborted&&!E)throw new Error("Provider CLI ended without a completion event");return{stopReason:T.aborted?"cancelled":"end_turn",...M!==void 0?{usage:M}:{}}}catch(P){if(T.aborted||P instanceof Error&&P.name==="AbortError")return{stopReason:"cancelled"};throw P}},"executePrompt"),_=s(p=>{switch(p.type){case"message":if(p.role==="assistant"&&p.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:p.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:p.toolName,arguments:p.parameters,status:"running",toolCallId:p.toolId||Cn()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:p.toolId,status:p.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
|
|
122
|
+
[Error: ${p.message}]
|
|
123
|
+
`}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:s(()=>{l.abort(),d.clear(),f.clear(),o.cancel().catch(()=>{}),r.abort().catch(()=>{})},"abort"),releaseSession:s(p=>{f.delete(p)},"releaseSession"),recreate:s(()=>nt(e),"recreate"),executor:e}}s(nt,"createPseudoAcpServer");import Fo from"node:fs";import Bo from"node:os";import jo from"node:path";var os="gpt-5.4",rs="auto-gemini-3",is=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ss=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Ko(e){let t=new Set,n=[];for(let o of e){let r=o.trim();if(!r)continue;let i=r.toLowerCase();t.has(i)||(t.add(i),n.push(r))}return n}s(Ko,"dedupePreserveOrder");function as(){let e=jo.join(Bo.homedir(),".codex","config.toml");try{return Fo.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}s(as,"readCodexConfiguredModel");function us(){let e=jo.join(Bo.homedir(),".gemini","settings.json");try{let t=JSON.parse(Fo.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}}s(us,"readGeminiConfiguredModel");function Re(){return as()||os}s(Re,"getCodexCliDefaultModel");function Ae(){return us()||rs}s(Ae,"getGeminiCliDefaultModel");function ot(){return Ko([Re(),...is])}s(ot,"getCodexCliKnownModels");function rt(){return Ko([Ae(),...ss])}s(rt,"getGeminiCliKnownModels");var Pn=Ae(),cs=rt(),ds={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},St=class extends de{static{s(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:Pn,models:cs.filter(t=>t!==Pn).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new Mt({model:Pn});this.acpClientOptions=nt(t)}getCapabilityProfile(){return G(ds)}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 Rt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}s(Rt,"finiteNonNegative");function ls(e){if(!(!e||!Rt(e.input_tokens)||!Rt(e.output_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.output_tokens,...Rt(e.cached_input_tokens)?{cachedReadTokens:e.cached_input_tokens}:{},...Rt(e.cache_write_input_tokens)?{cachedWriteTokens:e.cache_write_input_tokens}:{}}}s(ls,"normalizeCodexUsage");function fs(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}s(fs,"buildReasoningEffortArgs");var At=class extends Se{static{s(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 _t("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=fs(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:ls(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 _n=Re(),ps=ot(),Ot=class extends de{static{s(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:_n,models:ps.filter(t=>t!==_n).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new At({model:_n});this.acpClientOptions=nt(t)}};import{existsSync as xs,readFileSync as Cs}from"node:fs";import Ie from"node:path";import{fileURLToPath as Ps}from"node:url";var Uo=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Wo=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],zo=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Xo=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Vo=["max_tokens","max_completion_tokens"],Ho=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Go=["count-tokens","models-list","minimal-message","unsupported"];function se(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(se,"isPlainObject");function ve(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}s(ve,"requireString");function Oe(e,t){if(e!==void 0)return ve(e,t)}s(Oe,"optionalString");function Yo(e,t){if(e!==void 0){if(typeof e!="string"||!Vo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Vo.join(", ")}, got ${JSON.stringify(e)}`);return e}}s(Yo,"optionalMaxOutputTokensField");function le(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}}s(le,"optionalNumber");function j(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}s(j,"optionalBoolean");function qo(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)=>ve(n,`${t}[${o}]`))}}s(qo,"optionalStringArray");function gs(e,t){if(e===void 0)return;if(!se(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=ve(r,`${t}.${o}`);return n}s(gs,"optionalStringMap");function ms(e,t){if(e!==void 0){if(typeof e!="string"||!Xo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Xo.join(", ")}, got ${JSON.stringify(e)}`);return e}}s(ms,"optionalReasoningPreset");function wn(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}s(wn,"requireReasoningCapability");function hs(e,t){if(typeof e!="string"||!Wo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Wo.join(", ")}, got ${JSON.stringify(e)}`);return e}s(hs,"requireEffortStrategy");function ys(e,t){if(e!==void 0){if(typeof e!="string"||!zo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${zo.join(", ")}, got ${JSON.stringify(e)}`);return e}}s(ys,"optionalThinkingStrategy");function Jo(e,t){if(e===void 0)return;if(!se(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=hs(e.effortStrategy,`${t}.effortStrategy`),o=ms(e.reasoningPreset,`${t}.reasoningPreset`),r=ys(e.thinkingStrategy,`${t}.thinkingStrategy`),i=Oe(e.defaultEffort,`${t}.defaultEffort`),a=gs(e.effortAliases,`${t}.effortAliases`),u=qo(e.disabledEfforts,`${t}.disabledEfforts`),c=qo(e.localRejectEfforts,`${t}.localRejectEfforts`),l=j(e.allowCustomEffort,`${t}.allowCustomEffort`),d=j(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),f=j(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),g=j(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),k=j(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),m=j(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),_=j(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),p=j(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),h={effortStrategy:n};if(o!==void 0&&(h.reasoningPreset=o),r!==void 0&&(h.thinkingStrategy=r),i!==void 0&&(h.defaultEffort=i),a!==void 0&&(h.effortAliases=a),u!==void 0&&(h.disabledEfforts=u),c!==void 0&&(h.localRejectEfforts=c),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);h.supportedEfforts=e.supportedEfforts.map((b,y)=>{if(!se(b))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${y}] must be an object`);return{value:ve(b.value,`${t}.supportedEfforts[${y}].value`),...Oe(b.description,`${t}.supportedEfforts[${y}].description`)!==void 0?{description:Oe(b.description,`${t}.supportedEfforts[${y}].description`)}:{},...j(b.isDefault,`${t}.supportedEfforts[${y}].isDefault`)!==void 0?{isDefault:j(b.isDefault,`${t}.supportedEfforts[${y}].isDefault`)}:{},...j(b.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)!==void 0?{isUserVisible:j(b.isUserVisible,`${t}.supportedEfforts[${y}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!se(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let b={};for(let[y,T]of Object.entries(e.budgetByEffort))b[y]=le(T,`${t}.budgetByEffort.${y}`)??0;h.budgetByEffort=b}return l!==void 0&&(h.allowCustomEffort=l),d!==void 0&&(h.supportsReasoningEffort=d),f!==void 0&&(h.supportsReasoningSummary=f),g!==void 0&&(h.supportsEncryptedReasoningReplay=g),k!==void 0&&(h.supportsAdaptiveThinking=k),m!==void 0&&(h.supportsManualThinkingBudget=m),_!==void 0&&(h.supportsDisabledThinking=_),p!==void 0&&(h.requiresEffortBetaHeader=p),h}s(Jo,"validateReasoningProfile");function Qo(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?Jo(n,`${t}.reasoningProfile`):Jo(o,`${t}.reasoningCapabilityV2`)}s(Qo,"validateReasoningProfileField");function vs(e,t){if(typeof e!="string"||!Ho.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ho.join(", ")}, got ${JSON.stringify(e)}`);return e}s(vs,"requireProfileName");function ks(e,t){if(typeof e!="string"||!Go.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Go.join(", ")}, got ${JSON.stringify(e)}`);return e}s(ks,"requireVerifyStrategy");function bs(e,t){if(!se(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ve(e.id,`${t}.id`),o=Oe(e.wireModel,`${t}.wireModel`),r=Oe(e.displayName,`${t}.displayName`),i=le(e.contextWindow,`${t}.contextWindow`),a=le(e.maxOutputTokens,`${t}.maxOutputTokens`),u=Yo(e.maxOutputTokensField,`${t}.maxOutputTokensField`),c=le(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=j(e.replayReasoningContent,`${t}.replayReasoningContent`),d=j(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=le(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),g=e.reasoningCapability===void 0?void 0:wn(e.reasoningCapability,`${t}.reasoningCapability`),k=Qo(e,t),m={id:n};return o!==void 0&&(m.wireModel=o),r!==void 0&&(m.displayName=r),i!==void 0&&(m.contextWindow=i),a!==void 0&&(m.maxOutputTokens=a),u!==void 0&&(m.maxOutputTokensField=u),c!==void 0&&(m.thinkingBudgetCap=c),g!==void 0&&(m.reasoningCapability=g),k!==void 0&&(m.reasoningProfile=k),l!==void 0&&(m.replayReasoningContent=l),d!==void 0&&(m.strictThinkingSignature=d),f!==void 0&&(m.streamMaxDurationMs=f),m}s(bs,"validateModelDescriptor");function Es(e,t){if(e===void 0)return;if(!se(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=wn(r,`${t}.${o}`);return n}s(Es,"validateModelReasoningCapabilities");function Ts(e,t){if(!se(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=j(e.cliBridge,`providers.${t}.cliBridge`),o=ve(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=wn(e.reasoningCapability,`providers.${t}.reasoningCapability`),i=Qo(e,`providers.${t}`),a=vs(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=ks(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&u!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${u}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=le(e.contextWindow,`providers.${t}.contextWindow`),l=le(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),d=Yo(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),f=le(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),g=j(e.supportsThinking,`providers.${t}.supportsThinking`),k=Es(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),m=Oe(e.model,`providers.${t}.model`);if(n&&(m!==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&&m===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)=>bs(b,`providers.${t}.models[${y}]`));let h=new Set([...m===void 0?[]:[m],..._.map(b=>b.id)]);for(let[b,y]of _.entries())if(y.wireModel!==void 0&&!h.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 p={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return i!==void 0&&(p.reasoningProfile=i),m!==void 0&&(p.model=m),_!==void 0&&(p.models=_),c!==void 0&&(p.contextWindow=c),l!==void 0&&(p.maxOutputTokens=l),d!==void 0&&(p.maxOutputTokensField=d),f!==void 0&&(p.thinkingBudgetCap=f),g!==void 0&&(p.supportsThinking=g),k!==void 0&&(p.modelReasoningCapabilities=k),n&&(p.cliBridge=!0),p}s(Ts,"validateProviderEntry");function Zo(e){if(!se(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=ve(e.updatedAt,"updatedAt");if(!se(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]=Ts(r,o);return{version:1,updatedAt:t,providers:n}}s(Zo,"validateProviderCapabilitiesJson");var _s=Object.freeze({native:te,"image-input-native":ho,"cli-bridge":Ye,"image-input-cli-bridge":yo}),It=null;function ws(){if(process.env.KODAX_BUNDLED==="true")return Ie.join(Ie.dirname(process.execPath),"provider-capabilities.json");let e=Ie.dirname(Ps(import.meta.url)),t=[Ie.join(e,"provider-capabilities.json"),Ie.join(Ie.dirname(e),"provider-capabilities.json")];for(let n of t)if(xs(n))return n;return t[0]}s(ws,"resolveJsonPath");function Ms(e){if(e.models){for(let t of e.models)t.reasoningProfile&&er(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&er(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}s(Ms,"deepFreezeSnapshot");function er(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)}s(er,"freezeReasoningProfile");function Ss(e){if(e==="gemini-cli"){let t=Ae();return{model:t,models:rt().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=Re();return{model:t,models:ot().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}s(Ss,"resolveCliBridgeModels");function Rs(e,t){let n=_s[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=Ss(e),i={model:r.model,models:r.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(i.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(i.supportsThinking=t.supportsThinking),i}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}s(Rs,"buildSnapshot");function tr(){if(It)return It;let e=ws(),t;try{let r=Cs(e,"utf8");t=JSON.parse(r)}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${e}: ${i}`)}let n=Zo(t),o={};for(let[r,i]of Object.entries(n.providers))o[r]=Ms(Rs(r,i));return It=Object.freeze(o),It}s(tr,"getProviderSnapshots");var z=tr();function V(e,t={}){let n=z[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}}s(V,"buildProviderConfig");var Mn=class extends B{static{s(this,"AnthropicProvider")}name="anthropic";config=V("anthropic",{strictThinkingSignature:!0});buildClient(){return yn({apiKey:this.getApiKey()})}},Sn=class extends B{static{s(this,"ZhipuCodingProvider")}name="zhipu-coding";config=V("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},Rn=class extends B{static{s(this,"ZaiCodingProvider")}name="zai-coding";config=V("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},An=class extends B{static{s(this,"KimiCodeProvider")}name="kimi-code";config=V("kimi-code",{baseUrl:"https://api.kimi.com/coding/",promptCacheAffinity:!0})},On=class extends B{static{s(this,"MiniMaxCodingProvider")}name="minimax-coding";config=V("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},In=class extends B{static{s(this,"MimoCodingProvider")}name="mimo-coding";config=V("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},Dn=class extends B{static{s(this,"MimoProvider")}name="mimo";config=V("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},Nn=class extends B{static{s(this,"ArkCodingProvider")}name="ark-coding";config=V("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},Ln=class extends q{static{s(this,"OpenAIProvider")}name="openai";config=V("openai",{promptCacheAffinity:!0})},$n=class extends q{static{s(this,"DeepSeekProvider")}name="deepseek";config=V("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},Fn=class extends q{static{s(this,"KimiProvider")}name="kimi";config=V("kimi",{baseUrl:"https://api.moonshot.cn/v1",promptCacheAffinity:!0,replayReasoningContent:!0})},Bn=class extends q{static{s(this,"QwenProvider")}name="qwen";config=V("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},jn=class extends B{static{s(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=V("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},Kn=class extends q{static{s(this,"ZhipuProvider")}name="zhipu";config=V("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},J={anthropic:s(()=>new Mn,"anthropic"),openai:s(()=>new Ln,"openai"),deepseek:s(()=>new $n,"deepseek"),kimi:s(()=>new Fn,"kimi"),"kimi-code":s(()=>new An,"kimi-code"),qwen:s(()=>new Bn,"qwen"),"qwen-token-plan":s(()=>new jn,"qwen-token-plan"),zhipu:s(()=>new Kn,"zhipu"),"zhipu-coding":s(()=>new Sn,"zhipu-coding"),"zai-coding":s(()=>new Rn,"zai-coding"),"minimax-coding":s(()=>new On,"minimax-coding"),"mimo-coding":s(()=>new In,"mimo-coding"),mimo:s(()=>new Dn,"mimo"),"ark-coding":s(()=>new Nn,"ark-coding"),"gemini-cli":s(()=>new St,"gemini-cli"),"codex-cli":s(()=>new Ot,"codex-cli")},Un=process.env.KODAX_PROVIDER??"zhipu-coding",nr=new Map;function As(e){if(X(e))return z[e].apiKeyEnv}s(As,"resolveApiKeyEnvForProvider");function or(e){let t=e??Un,n=J[t];if(!n)throw new I(`Unknown provider: ${t}. Available: ${Object.keys(J).join(", ")}`,t,{failureCode:"provider_not_registered",stage:"catalog"});let o=As(t),r=ke(t,o?process.env[o]:void 0),i=nr.get(t);if(i&&i.apiKey===r)return i.instance;let a=n();return nr.set(t,{apiKey:r,instance:a}),a}s(or,"getProvider");function rr(e){return X(e)?ke(e,process.env[z[e].apiKeyEnv])!==void 0:!1}s(rr,"isProviderConfigured");function ir(e){return X(e)?z[e].model:null}s(ir,"getProviderModel");function sr(e,t){if(!X(e))return"unknown";let n=z[e],o=t??n.model;return n.models?.find(i=>i.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}s(sr,"getProviderConfiguredReasoningCapability");function ar(e){return X(e)?G(z[e].capabilityProfile):null}s(ar,"getProviderConfiguredCapabilityProfile");function ur(){let e=[];for(let t of Object.keys(J)){let n=z[t];e.push({name:t,model:n.model,models:Wn(t),configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:G(n.capabilityProfile)})}return e}s(ur,"getProviderList");function Wn(e){return De(e).map(t=>t.id)}s(Wn,"getProviderModels");function X(e){return e in J}s(X,"isProviderName");function cr(e){return{id:e.model}}s(cr,"makeDefaultDescriptor");function dr(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}s(dr,"resolveWireModelDescriptor");function Dt(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}}s(Dt,"effectiveCapabilities");function De(e){let t=z[e];if(!t)return[];let n=t.models??[],o=n.find(i=>i.id===t.model),r=n.filter(i=>i.id!==t.model);return[o??cr(t),...r].map(i=>dr(t,i))}s(De,"getProviderModelDescriptors");function Nt(e,t){let n=z[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?Dt(e,n,dr(n,o)):t===n.model?Dt(e,n,cr(n)):Dt(e,n,{id:t})}s(Nt,"getModelCapabilities");function Lt(){let e=[];for(let t of Object.keys(J)){let n=z[t];for(let o of De(t))e.push(Dt(t,n,o))}return e}s(Lt,"listBuiltinModelCapabilities");var Os=new Set(["compat","sdk"]),Is=new Set(["max_tokens","max_completion_tokens"]),Ds=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function zn(e){return e.reasoningProfile??e.reasoningCapabilityV2}s(zn,"getConfiguredReasoningProfile");function Ns(e){return e==="anthropic"?"count-tokens":"models-list"}s(Ns,"defaultVerifyStrategyForProtocol");function lr(e,t,n){if(t!==void 0){if(typeof t!="string"||!Is.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".`)}}s(lr,"validateMaxOutputTokensField");function $t(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"}s($t,"legacyCapabilityFromReasoningProfile");function Ls(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}}s(Ls,"legacyReasoningPresetForProtocol");function fr(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}s(fr,"isSimpleReasoning");function $s(e,t){if(e==="none")return ft("none");let n=s(u=>u==="off"?"none":u,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,i=o.includes("none"),a=o.map(u=>u===r?{value:u,isDefault:!0}:{value:u});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...i?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{localRejectEfforts:["none"],supportsDisabledThinking:!1},supportsReasoningEffort:!0}}s($s,"buildReasoningProfileFromSimple");function pr(e,t,n,o){let r=fr(n)?n:void 0,i=n!==void 0&&!fr(n)?n:void 0;if(o?.supportsThinking===!1)return ft("none");if(e)return{...e,...i??{}};if(r!==void 0)return $s(r,o?.protocol??"openai");let a=t??(o?Ls(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?ft(a,i):void 0}s(pr,"resolveCustomReasoningProfile");function gr(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}s(gr,"migrateLegacyDeepSeekPreset");function Ft(e){return pr(zn(e),gr(e.reasoningPreset,e.model),e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}s(Ft,"resolveCustomProviderReasoningProfile");function Hn(e,t,n,o){let r=o==="deepseek-v4-openai"&&zn(e)===void 0&&e.reasoningPreset===void 0&&e.reasoning===void 0&&e.reasoningCapability===void 0;return pr(zn(e),gr(e.reasoningPreset??(r?o:void 0),e.id,e.wireModel),e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}s(Hn,"resolveCustomModelReasoningProfile");function Fs(e,t,n,o){let r=typeof e=="string"?{id:e}:e,i=Hn(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return i?{...a,reasoningProfile:i}:a}s(Fs,"customModelDescriptorToFull");function it(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&&!Os.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.promptCacheAffinity!==void 0&&typeof e.promptCacheAffinity!="boolean")throw new Error(`Custom provider "${e.name}": promptCacheAffinity must be a boolean.`);if(e.imageInput!==void 0&&typeof e.imageInput!="boolean")throw new Error(`Custom provider "${e.name}": imageInput must be a boolean.`);if(lr(e,e.maxOutputTokensField,"maxOutputTokensField"),e.models?.forEach((t,n)=>{typeof t!="string"&&lr(e,t.maxOutputTokensField,`models[${n}].maxOutputTokensField`)}),e.verifyStrategy!==void 0){if(!Ds.has(e.verifyStrategy))throw new Error(`Unknown verifyStrategy "${e.verifyStrategy}" for custom provider "${e.name}". Must be one of "count-tokens" | "models-list" | "minimal-message" | "unsupported".`);if(e.protocol==="openai"&&e.verifyStrategy==="count-tokens")throw new Error(`Custom provider "${e.name}": verifyStrategy="count-tokens" requires Anthropic protocol; got protocol="openai". Use "models-list" or "minimal-message" for OpenAI-compat.`)}}s(it,"validateCustomProviderConfig");function Bt(e,t){return t!==!0?e:{...e??te,multimodalSupport:"image-input"}}s(Bt,"mergeCapabilityProfileWithImageInput");function Bs(e){let t=e.models?.length?e.models.map(i=>Fs(i,e.protocol,e.supportsThinking,e.reasoningPreset)):void 0,n=Ft(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??$t(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:Bt(e.capabilityProfile,e.imageInput),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??Ns(e.protocol)}}s(Bs,"buildProviderConfig");function jt(e){it(e);let t=Bs(e);return e.protocol==="anthropic"?new Xn(e.name,t):new Vn(e.name,t)}s(jt,"createCustomProvider");var Xn=class extends B{static{s(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},Vn=class extends q{static{s(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var Y=new Map,Gn=new Map,js=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function mr(e){return e.reasoningCapability!==void 0&&js.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}s(mr,"hasThinkingReasoningConfig");function Ks(e){if(e.supportsThinking!==!1)return;let t=mr(e),n=(e.models??[]).some(o=>typeof o!="string"&&mr(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.`)}s(Ks,"warnOnIgnoredReasoningCapability");function hr(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(it(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 J&&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.`),Ks(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>jt(r))}Y.clear(),Gn.clear();for(let[r,i]of n)Y.set(r,i);for(let[r,i]of o)Gn.set(r,i)}s(hr,"registerCustomProviders");function Kt(e){let t=Gn.get(e);return t?t():void 0}s(Kt,"getCustomProvider");function yr(e){let t=Y.get(e)??[...Y.entries()].find(([n])=>n.toLowerCase()===e.toLowerCase())?.[1];if(t)return G(Bt(t.capabilityProfile,t.imageInput)??te)}s(yr,"getCustomProviderCapabilityProfile");function Le(e){return Y.has(e)}s(Le,"isCustomProviderName");function st(){return[...Y.keys()]}s(st,"getCustomProviderNames");function vr(){let e=[];for(let[t,n]of Y){let o=!!process.env[n.apiKeyEnv],r=Ft(n),i=(n.models??[]).map(u=>typeof u=="string"?u:u.id),a=n.model&&i.length?[...new Set([n.model,...i])]:[n.model];e.push({name:t,model:n.model,models:a,configured:o,reasoningCapability:n.supportsThinking===!1?"none":n.reasoningCapability??$t(r)??"none",capabilityProfile:G(Bt(n.capabilityProfile,n.imageInput)??te),custom:!0})}return e}s(vr,"getCustomProviderList");function kr(e){let t=Y.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]}s(kr,"getCustomProviderModels");function br(e,t,n,o){let r=typeof e=="string"?{id:e}:e,i=Hn(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return i?{...a,reasoningProfile:i}:a}s(br,"customDescriptorToFull");function Ut(e){let t=Y.get(e);if(!t)return;let n=(t.models??[]).map(i=>br(i,t.protocol,t.supportsThinking,t.reasoningPreset)),o=n.find(i=>i.id===t.model)??{id:t.model},r=n.filter(i=>i.id!==t.model);return[o,...r]}s(Ut,"getCustomProviderModelDescriptors");function Ne(e,t){let n=Y.get(e);if(!n)return;let o=t===n.model,r=Ft(n),a=(n.models??[]).map(l=>br(l,n.protocol,n.supportsThinking,n.reasoningPreset)).find(l=>l.id===t)??(o?{id:n.model}:void 0);if(!a)return;let u=n.supportsThinking===!1?r:a.reasoningProfile??r,c=n.supportsThinking===!1?"none":a.reasoningCapability??$t(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(c!=="none"&&c!=="prompt-only"),reasoningCapability:c,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}s(Ne,"getCustomModelCapabilities");function qn(e){let t=Y.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}s(qn,"getCustomProviderVerifyMetadata");function Wt(){let e=[];for(let[t,n]of Y){let o=Ne(t,n.model);o&&e.push(o);for(let r of n.models??[]){let i=typeof r=="string"?r:r.id;if(i===n.model)continue;let a=Ne(t,i);a&&e.push(a)}}return e}s(Wt,"listCustomProviderModelCapabilities");var ae=new Map,Us=0;function Jn(e){let t=ae.get(e);if(!(!t||t.length===0))return t[t.length-1]}s(Jn,"getActiveRuntimeProviderRegistration");function Ws(e){for(let[t,n]of ae){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?ae.delete(t):ae.set(t,o);return}}}s(Ws,"removeRuntimeProviderRegistration");function Er(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(X(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(Le(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Us}`,name:n,factory:t},r=ae.get(n)??[];return ae.set(n,[...r,o]),()=>{Ws(o.id)}}s(Er,"registerModelProvider");function zt(e){let t=Jn(e);if(t===void 0)return;let n=t.factory();return t.credentialEnvironmentName??=n.getApiKeyEnv(),n}s(zt,"getRuntimeModelProvider");function at(e){return Jn(e)!==void 0}s(at,"isRuntimeModelProviderName");function Xt(){return Array.from(ae.keys()).filter(e=>Jn(e)!==void 0)}s(Xt,"getRuntimeModelProviderNames");function Vt(){let e=new Set;for(let t of ae.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]}s(Vt,"getRuntimeModelProviderCredentialEnvironmentNames");function Tr(){ae.clear()}s(Tr,"clearRuntimeModelProviders");function Yn(e){if(X(e))return J[e]();let t=zt(e);if(t)return t;let n=Kt(e);if(n)return n;let o=Gt();throw new I(`Unknown provider: ${e}. Available: ${o.join(", ")}`,e,{failureCode:"provider_not_registered",stage:"catalog"})}s(Yn,"resolveProvider");function Ht(e){return X(e)||at(e)||Le(e)}s(Ht,"isKnownProvider");function Gt(){let e=Object.keys(J),t=Xt(),n=st();return[...new Set([...e,...t,...n])]}s(Gt,"getAvailableProviderNames");function xr(){let e=new Set;for(let t of Object.values(z))e.add(t.apiKeyEnv);for(let t of st()){let n=qn(t);n!==void 0&&e.add(n.apiKeyEnv)}for(let t of Vt())e.add(t);return[...e].sort()}s(xr,"getProviderCredentialEnvironmentNames");function ut(e){return X(e)?De(e):Ut(e)??[]}s(ut,"resolveProviderModelDescriptors");function qt(e,t){return X(e)?Nt(e,t):Ne(e,t)}s(qt,"resolveModelCapabilities");function Cr(){return[...Lt(),...Wt()]}s(Cr,"listAllModelCapabilities");function zs(e){if(X(e)){let t=z[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!at(e))return qn(e)}s(zs,"getProviderVerifyMetadata");async function Pr(e,t){let n=zs(e);if(!n&&!Ht(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Gt().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=Yn(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)}}}s(Pr,"verifyProviderCredential");async function _r(e,t){if(!Ht(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=ut(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}}s(_r,"listProviderModels");function Xs(e){let t=e.model??ut(e.provider)[0]?.id,n=t?qt(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?nn(n,e.rejectedEfforts):n,r=Ge({capability:o,sessionEffort:e.desiredEffort}),i=r.effectiveEffort;return i!==void 0&&e.rejectedEfforts?.includes(i)&&(i=void 0),{effort:i,configuredEffort:r.configuredEffort,adjusted:i!==r.configuredEffort}}s(Xs,"resolveWireEffort");var wr={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},"deepseek-v4-flash-vision-exp":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.0028}},kimi:{"kimi-k3":{inputPer1M:2.8,outputPer1M:14,cachePer1M:.28},"kimi-k2.7-code":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.182},"kimi-k2.7-code-highspeed":{inputPer1M:1.82,outputPer1M:7.56,cachePer1M:.364},"kimi-k2.6":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.154},"kimi-k2.5":{inputPer1M:.56,outputPer1M:2.94,cachePer1M:.098}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015},k3:{inputPer1M:.01,outputPer1M:.03},"k3-256k":{inputPer1M:.005,outputPer1M:.015},"kimi-for-coding-highspeed":{inputPer1M:.015,outputPer1M:.045}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},"qwen-token-plan":{"qwen3.8-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.8-max-preview":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-plus":{inputPer1M:.005,outputPer1M:.015},"qwen3.6-flash":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015}},zhipu:{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.3":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function Qn(e,t,n){let o=n?.[e]?.[t];return o||wr[e]?.[t]}s(Qn,"getCostRate");function Zn(e,t,n,o=0,r=0){let i=Math.max(0,t-o-r),a=e.cacheReadPer1M??e.cachePer1M??e.inputPer1M,u=e.cacheWritePer1M??e.cachePer1M??e.inputPer1M,c=i/1e6*e.inputPer1M,l=n/1e6*e.outputPer1M,d=o/1e6*a,f=r/1e6*u;return c+l+d+f}s(Zn,"calculateCost");function Vs(){return{records:[],retries:[]}}s(Vs,"createCostTracker");function eo(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]}}s(eo,"recordRetry");function to(e,t,n){let o=Qn(t.provider,t.model,n),r=o?Zn(o,t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens):0,i={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,i],retries:e.retries}}s(to,"recordUsage");function Hs(e){let t=0,n=0,o=0,r=0,i=0,a=0,u={},c={};for(let f of e.records){t+=f.cost,n+=f.inputTokens,o+=f.outputTokens,r+=f.cacheReadTokens+f.cacheWriteTokens,i+=f.cacheReadTokens,a+=f.cacheWriteTokens;let g=u[f.provider];u[f.provider]={cost:(g?.cost??0)+f.cost,calls:(g?.calls??0)+1,inputTokens:(g?.inputTokens??0)+f.inputTokens,outputTokens:(g?.outputTokens??0)+f.outputTokens};let k=f.role??"default",m=c[k];c[k]={cost:(m?.cost??0)+f.cost,calls:(m?.calls??0)+1,inputTokens:(m?.inputTokens??0)+f.inputTokens,outputTokens:(m?.outputTokens??0)+f.outputTokens}}let l=0;for(let f of e.retries)l+=f.waitMs;let d=r>0?i/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:i,totalCacheWriteTokens:a,cacheHitRate:d,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:l,byProvider:u,byRole:c}}s(Hs,"getSummary");function Jt(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}s(Jt,"formatCost");function Gs(e){let t=[];if(t.push(`Session Cost: ${Jt(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,i)=>i[1].cost-r[1].cost);if(n.length>0){t.push("By Provider:");for(let[r,i]of n)t.push(` ${r}: ${Jt(i.cost)} (${i.calls} calls, ${i.inputTokens.toLocaleString()} in / ${i.outputTokens.toLocaleString()} out)`);t.push("")}let o=Object.entries(e.byRole).sort((r,i)=>i[1].cost-r[1].cost);if(o.length>1){t.push("By Role:");for(let[r,i]of o)t.push(` ${r}: ${Jt(i.cost)} (${i.calls} calls)`)}return t.join(`
|
|
124
|
+
`)}s(Gs,"formatCostReport");import{performance as no}from"node:perf_hooks";var Mr={inputTokens:0,outputTokens:0,totalTokens:0},qs=3e4,Js=1024;function Ys(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}}s(Ys,"resolveDefaultSideQueryReasoning");function Qs(e,t,n,o){if(!o||!Sr(e)||!t)return e;let r=n?.effort,i=r==="none"||r!==void 0&&t.disabledEfforts?.includes(r)===!0,a=t.supportsDisabledThinking===!1||t.localRejectEfforts?.includes("none")===!0;return i||!a?e:e+Js}s(Qs,"resolveSideQueryMaxOutputTokens");async function Zs(e){let t=new AbortController,n=e.timeoutMs??qs,o=e.costTracker,r=no.now(),i=Buffer.byteLength(e.system,"utf8"),a=Buffer.byteLength(JSON.stringify(e.messages),"utf8"),u,c,l,d=0,f=0,g=s((C,M)=>{let E=Math.max(0,Math.round(no.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:E,systemBytes:i,messageBytes:a,promptBytes:i+a,retryCount:d,retryWaitMs:f,...M!==void 0?M:{},...u!==void 0?{firstUpstreamEventMs:u}:{},...c!==void 0?{firstThinkingDeltaMs:c}:{},...l!==void 0?{firstTextDeltaMs:l,firstOutputMs:l,streamMs:Math.max(0,E-l)}:{},terminalPhase:C}},"diagnostics"),k,m=s(C=>{k||(k=C),t.abort()},"recordAbort"),_=setTimeout(()=>m("timeout"),n),p=s(()=>m("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?m("parent"):e.abortSignal.addEventListener("abort",p,{once:!0}));let h=s(()=>Math.max(0,Math.round(no.now()-r)),"elapsed"),b=s(()=>{u===void 0&&(u=h())},"recordUpstreamEvent"),y,T=new Promise((C,M)=>{y=s(()=>{M(new DOMException(k==="timeout"?"sideQuery timed out":"sideQuery aborted","AbortError"))},"onControllerAbort"),t.signal.aborted?y():t.signal.addEventListener("abort",y,{once:!0})});try{let C=e.provider.getReasoningProfile(e.model),M=e.reasoning??Ys(C),E=Qs(e.maxOutputTokens,C,M,e.reasoning===void 0),P=e.provider.stream([...e.messages],[],e.system,M,{modelOverride:e.model,...Sr(E)?{maxOutputTokensOverride:E}:{},onTextDelta:s(A=>{b(),A.length>0&&l===void 0&&(l=h())},"onTextDelta"),onThinkingDelta:s(A=>{b(),A.length>0&&c===void 0&&(c=h())},"onThinkingDelta"),onHeartbeat:s(()=>b(),"onHeartbeat"),onRetryAfter:s(A=>{b(),d+=1,f+=Math.max(0,A.waitMs),o&&(o=eo(o,{provider:A.provider,waitMs:A.waitMs,reason:A.reason,source:A.source}))},"onRetryAfter")},t.signal),v=await Promise.race([P,T]),S=v.usage??Mr,D=v.textBlocks??[],$=v.toolBlocks??[],N=D.map(A=>A.text).join(""),F={responseBytes:Buffer.byteLength(N,"utf8"),textBlockCount:D.length};if($.length>0)return{text:N,usage:S,costTracker:o,stopReason:"error",diagnostics:g("contract_error",{stopReason:"error",...F}),error:new Error(`sideQuery: provider returned ${$.length} tool_use block(s); sideQuery expects text-only output`)};o&&(o=to(o,{provider:e.provider.name,model:e.model,inputTokens:S.inputTokens,outputTokens:S.outputTokens,cacheReadTokens:S.cachedReadTokens,cacheWriteTokens:S.cachedWriteTokens,role:e.querySource}));let re=ea(v.stopReason);return{text:N,usage:S,costTracker:o,stopReason:re,diagnostics:g("completed",{stopReason:re,...F})}}catch(C){let M=C instanceof Error?C:new Error(String(C)),E="error";return t.signal.aborted&&(E=k==="timeout"?"timeout":"aborted"),{text:"",usage:Mr,costTracker:o,stopReason:E,diagnostics:g(l!==void 0?"streaming":c!==void 0?"thinking":u!==void 0?"awaiting_text":"pre_output",{stopReason:E}),error:M}}finally{clearTimeout(_),e.abortSignal&&e.abortSignal.removeEventListener("abort",p),y&&t.signal.removeEventListener("abort",y)}}s(Zs,"sideQuery");function Sr(e){return e!==void 0&&Number.isInteger(e)&&e>0}s(Sr,"isPositiveInteger");function ea(e){return yt(e)==="truncated"?"max_tokens":"end_turn"}s(ea,"mapStopReason");export{Ar as a,Or as b,Ir as c,ie as d,I as e,je as f,Zt as g,Ke as h,en as i,tn as j,Dr as k,Nr as l,Lr as m,Ue as n,$r as o,Fr as p,lt as q,nn as r,Br as s,jr as t,Kr as u,Ur as v,Wr as w,be as x,oo as y,ro as z,an as A,Ee as B,pt as C,He as D,io as E,Hr as F,so as G,Ge as H,Gr as I,Qr as J,ge as K,me as L,un as M,gt as N,qe as O,go as P,mo as Q,ai as R,ui as S,Je as T,ee as U,mt as V,ne as W,hi as X,yt as Y,xe as Z,Ce as _,pn as $,gn as aa,Pe as ba,mn as ca,_e as da,B as ea,q as fa,de as ga,Re as ha,Ae as ia,ot as ja,rt as ka,z as la,J as ma,Un as na,or as oa,rr as pa,ir as qa,sr as ra,ar as sa,ur as ta,Wn as ua,X as va,De as wa,Nt as xa,Lt as ya,it as za,jt as Aa,hr as Ba,Kt as Ca,yr as Da,Le as Ea,st as Fa,vr as Ga,kr as Ha,Ut as Ia,Ne as Ja,Wt as Ka,Er as La,zt as Ma,at as Na,Xt as Oa,Vt as Pa,Tr as Qa,Yn as Ra,Ht as Sa,Gt as Ta,xr as Ua,ut as Va,qt as Wa,Cr as Xa,Pr as Ya,_r as Za,Xs as _a,wr as $a,Qn as ab,Zn as bb,Vs as cb,eo as db,to as eb,Hs as fb,Jt as gb,Gs as hb,Zs as ib};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{D,J as F}from"./chunk-
|
|
2
|
+
import{D,J as F}from"./chunk-C4KYZAFU.js";import{p as q,q as j,r as N,s as C,wa as P}from"./chunk-4OIQZWA5.js";import{Ra as E,ib as O,n as v,o as T}from"./chunk-POTW3O65.js";import{Bg as _,Cg as b,Dg as x,Nd as W,Od as M,Td as I,wg as $,xg as k,yg as y}from"./chunk-6BVF3HZ7.js";import{a as o}from"./chunk-ONUPGMER.js";import{join as Le}from"node:path";var ae=["You generate KodaX Dynamic Workflow scripts.","Return JSON only. Do not wrap the answer in prose.","For simple tasks that do not benefit from multiple agents, return:",'{"action":"decline","reason":"..."}',"For complex tasks, return:",'{"action":"generate","manifest":{...},"source":"async function run(wf, args) { ... }","approvalSummary":"..."}',"Generated source may only coordinate agents through wf and args.","Generated source must return displayable final text for the user.","Never use import, require, process, fs, child_process, network APIs, shell commands, or direct file access."].join(`
|
|
3
3
|
`),G=12e4,le="KODAX_WORKFLOW_GENERATION_TIMEOUT_SEC",ce="KODAX_WORKFLOW_GENERATION_TIMEOUT_MS",ue=64,fe=2,de=2e3,pe=[{name:"default"},{name:"variant-results",finalText:o((e,n)=>`Variant smoke child report from ${e} (${n}).`,"finalText"),synthesizeText:"Variant smoke synthesis report."},{name:"unverified-success",status:o(()=>"completed_unverified","status"),finalText:o(e=>`Smoke result for ${e}: completed with verification warnings.`,"finalText"),synthesizeText:"Smoke synthesis: completed with verification warnings."},{name:"empty-args-rerun",args:o(()=>({}),"args")}],me=[{id:"import",pattern:/\bimport\s*(?:\(|['"*{]|\w+\s+from\b)/},{id:"require",pattern:/\brequire\s*\(/},{id:"process",pattern:/\bprocess\s*(?:\.|\[)/},{id:"fs",pattern:/\b(?:node:)?fs\b/},{id:"child_process",pattern:/\bchild_process\b/},{id:"shell",pattern:/\b(?:exec|spawn|execFile)\s*\(/},{id:"fetch",pattern:/\bfetch\s*\(/},{id:"Deno",pattern:/\bDeno\s*(?:\.|\[)/},{id:"Bun",pattern:/\bBun\s*(?:\.|\[)/},{id:"globalThis-index",pattern:/\bglobalThis\s*\[/}];function we(e=process.env,n){let t=v(n?.workflow?.generationTimeoutSec,"timeouts.workflow.generationTimeoutSec");if(t!==void 0)return t;let r=T(e[le]);if(r!==void 0)return r;let s=e[ce];if(s===void 0||s.trim().length===0)return G;let i=Number(s);return!Number.isFinite(i)||i<=0?G:Math.floor(i)}o(we,"resolveWorkflowGenerationTimeoutMs");function he(e,n){if(typeof e!="object"||e===null)throw new Error(`${n} must be an object`);return e}o(he,"readRecord");function K(e,n){let t=e[n];if(typeof t!="string"||t.trim().length===0)throw new Error(`workflow generation ${n} must be a non-empty string`);return t}o(K,"readNonEmptyString");function ge(e){let n=e.trim(),t=/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(n);if(t?.[1])return t[1].trim();let r=n.indexOf("{"),s=n.lastIndexOf("}");if(r>=0&&s>r)return n.slice(r,s+1);throw new Error("workflow generation output did not contain a JSON object")}o(ge,"extractJsonText");function ke(e){let n=ge(e);return he(JSON.parse(n),"workflow generation output")}o(ke,"parseGenerationJson");function ye(e){if(typeof e=="string"){let t=e.trim();return t.length>0?t:void 0}if(typeof e!="object"||e===null)return;let n=e;for(let t of["name","id","title","phase"]){let r=n[t];if(typeof r=="string"&&r.trim().length>0)return r.trim()}}o(ye,"normalizePhaseEntry");function be(e){return e.split(/(?:->|\u2192|,|\n)/).map(n=>n.trim()).filter(n=>n.length>0)}o(be,"splitPhaseString");function xe(e){if(typeof e!="object"||e===null)return e;let n=e,t=n.phases,r;if(Array.isArray(t)){let s=t.map(ye);s.every(i=>i!==void 0)&&(r=s)}else if(typeof t=="string"){let s=be(t);s.length>0&&(r=s)}return r?{...n,phases:r}:e}o(xe,"normalizeGeneratedManifestCandidate");function ve(e){return e.match(/\bwf\.(?:runAgent|spawnAgent|synthesize)\s*\(/g)?.length??0}o(ve,"estimateDirectAgentCalls");function Se(e,n){let t=e.maxConcurrency*Math.max(1,e.phases.length)+2,r=ve(n)+2,s=Math.min(ue,Math.max(e.maxAgents,t,r));return s>e.maxAgents?{...e,maxAgents:s}:e}o(Se,"reserveGeneratedWorkflowAgentCapacity");function w(e){let n="",t=0,r=["code"],s=[0];for(;t<e.length;){let i=e[t],a=e[t+1];if(r[r.length-1]==="template"){if(i==="\\"){n+=" ",t+=2;continue}if(i==="`"){n+=" ",t+=1,r.pop(),s.pop();continue}if(i==="$"&&a==="{"){n+=" ",t+=2,r.push("code"),s.push(0);continue}n+=i===`
|
|
4
4
|
`?`
|
|
5
5
|
`:" ",t+=1;continue}if(i==="/"&&a==="/"){for(n+=" ",t+=2;t<e.length&&e[t]!==`
|