@kodax-ai/kodax 0.7.70 → 0.7.71

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