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