@kodax-ai/kodax 0.7.57 → 0.7.59

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 (77) hide show
  1. package/CHANGELOG.md +2032 -1920
  2. package/README.md +1228 -1219
  3. package/README_CN.md +647 -638
  4. package/dist/chunks/agent-QQCRBU4C.js +2 -0
  5. package/dist/chunks/argument-completer-7Q2T4YWA.js +2 -0
  6. package/dist/chunks/{chunk-LZKGOR2C.js → chunk-2UUOFT3Z.js} +1 -1
  7. package/dist/chunks/chunk-5GPJ6MB5.js +405 -0
  8. package/dist/chunks/chunk-BEXLPFFB.js +7 -0
  9. package/dist/chunks/chunk-D6QVXQNI.js +1 -0
  10. package/dist/chunks/chunk-D7RENPQQ.js +322 -0
  11. package/dist/chunks/chunk-PRIBJN5E.js +683 -0
  12. package/dist/chunks/chunk-S4GVQO3W.js +31 -0
  13. package/dist/chunks/chunk-SDSLWDAZ.js +17 -0
  14. package/dist/chunks/chunk-SVEJFERZ.js +326 -0
  15. package/dist/chunks/chunk-TBXP7FEG.js +52 -0
  16. package/dist/chunks/chunk-UA744TZM.js +2 -0
  17. package/dist/chunks/{chunk-YSVPF6SN.js → chunk-UXQILGRX.js} +262 -259
  18. package/dist/chunks/{chunk-4SHP3M67.js → chunk-YADBB5GN.js} +1 -1
  19. package/dist/chunks/chunk-Z23LK3IV.js +310 -0
  20. package/dist/chunks/chunk-Z3ZXV3DZ.js +18 -0
  21. package/dist/chunks/compaction-config-GQIPCVFD.js +2 -0
  22. package/dist/chunks/{construction-bootstrap-55B7Q5RX.js → construction-bootstrap-YON4ZEMO.js} +1 -1
  23. package/dist/chunks/dist-73L4OYPD.js +2 -0
  24. package/dist/chunks/dist-EZXBR6NW.js +2 -0
  25. package/dist/chunks/host-LO6ZNTMV.js +2 -0
  26. package/dist/chunks/paste-4THGP5XW.js +2 -0
  27. package/dist/chunks/run-manager-HTLXKU66.js +2 -0
  28. package/dist/chunks/utils-5XVW33SY.js +2 -0
  29. package/dist/index.d.ts +15 -14
  30. package/dist/index.js +2 -2
  31. package/dist/kodax_cli.js +1222 -1047
  32. package/dist/provider-capabilities.json +971 -986
  33. package/dist/sdk-agent.d.ts +156 -14
  34. package/dist/sdk-agent.js +1 -1
  35. package/dist/sdk-coding.d.ts +253 -188
  36. package/dist/sdk-coding.js +1 -1
  37. package/dist/sdk-llm.d.ts +66 -43
  38. package/dist/sdk-llm.js +1 -1
  39. package/dist/sdk-mcp.js +1 -1
  40. package/dist/sdk-media.d.ts +18 -2
  41. package/dist/sdk-media.js +1 -1
  42. package/dist/sdk-repl.d.ts +21 -22
  43. package/dist/sdk-repl.js +2 -2
  44. package/dist/sdk-session.d.ts +8 -7
  45. package/dist/sdk-session.js +1 -1
  46. package/dist/sdk-skills.d.ts +4 -231
  47. package/dist/sdk-skills.js +1 -1
  48. package/dist/types-chunks/{base.d-BnjQrSVf.d.ts → base.d-BA9Doaj_.d.ts} +3 -3
  49. package/dist/types-chunks/{bash-prefix-extractor.d-BgvMbfq6.d.ts → bash-prefix-extractor.d-BNdpV4Cf.d.ts} +515 -69
  50. package/dist/types-chunks/capability-learning.d-DRV80ISB.d.ts +29 -0
  51. package/dist/types-chunks/{cost-tracker.d-wRtyEW9d.d.ts → cost-tracker.d-CBLk1fiD.d.ts} +24 -2
  52. package/dist/types-chunks/{guardrail.d-C1DhxnvC.d.ts → guardrail.d-CNdKuSD_.d.ts} +4 -4
  53. package/dist/types-chunks/{process.d-BZncyzEj.d.ts → process.d-BOrAxjvM.d.ts} +188 -15
  54. package/dist/types-chunks/{resolver.d-ZvKQgl0X.d.ts → resolver.d-DFAKKUvt.d.ts} +87 -4
  55. package/dist/types-chunks/{capsule.d-DwJp5r63.d.ts → run-manager.d-CsJC9zYf.d.ts} +113 -5
  56. package/dist/types-chunks/{sdk-session-DAScB0rW.d.ts → sdk-session-ByZlwgdM.d.ts} +83 -9
  57. package/dist/types-chunks/{storage.d-CPvn9qI0.d.ts → storage.d-DHL3XpAL.d.ts} +2 -2
  58. package/dist/types-chunks/{guardrail.d-BP3yyr6u.d.ts → types.d-CE_Ter29.d.ts} +125 -3
  59. package/dist/types-chunks/{types.d-6VOXvF88.d.ts → types.d-Ci5YPFEh.d.ts} +39 -5
  60. package/dist/types-chunks/types.d-vJExiRje.d.ts +232 -0
  61. package/dist/types-chunks/{utils.d-CpgVIjYZ.d.ts → utils.d-D9FHU4wB.d.ts} +84 -6
  62. package/package.json +2 -2
  63. package/dist/chunks/agent-EHWQZA4C.js +0 -2
  64. package/dist/chunks/argument-completer-AYDAYGKL.js +0 -2
  65. package/dist/chunks/chunk-3WWPJGPQ.js +0 -2
  66. package/dist/chunks/chunk-KN6IJMTB.js +0 -636
  67. package/dist/chunks/chunk-MJFPFRGK.js +0 -423
  68. package/dist/chunks/chunk-N2N2W3AQ.js +0 -584
  69. package/dist/chunks/chunk-PCPFLPS4.js +0 -5
  70. package/dist/chunks/chunk-TCLSPUTR.js +0 -31
  71. package/dist/chunks/chunk-VACH6QWN.js +0 -315
  72. package/dist/chunks/compaction-config-TLDMFMZO.js +0 -2
  73. package/dist/chunks/dist-IE4HVWP7.js +0 -2
  74. package/dist/chunks/dist-IKOK2MJQ.js +0 -2
  75. package/dist/chunks/paste-WTL2XN7P.js +0 -2
  76. package/dist/chunks/utils-EJ2VCRTC.js +0 -2
  77. package/dist/types-chunks/types.d-D8WcfrOD.d.ts +0 -143
@@ -0,0 +1,31 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{a as i}from"./chunk-V4WSBIXB.js";var Q=class extends Error{static{i(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},M=class extends Q{static{i(this,"KodaXProviderError")}provider;constructor(t,n){super(t,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},Pe=class extends Q{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(t,n){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},At=class extends Q{static{i(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},Xe=class extends M{static{i(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Dt=class extends Q{static{i(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Ot=32768,Uo=32e3,Wo=64e3,zo=.5;function Re(e,t,n={}){if(e===void 0)return;let o=n.allowZero===!0;if(!Number.isFinite(e)||(o?e<0:e<=0)){let r=o?"a non-negative finite number":"a positive finite number";throw new Error(`${t} must be ${r}`)}return e===0?0:Math.max(1,Math.floor(e*1e3))}i(Re,"timeoutSecToMs");function Xo(e){if(e===void 0||e.trim().length===0)return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return Math.max(1,Math.floor(t*1e3))}i(Xo,"parseTimeoutSecEnvMs");function Vo(e){if(!e)return;let t={requestTimeoutMs:Re(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Re(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Re(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Re(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}i(Vo,"resolveLlmTimeoutConfig");function Ve(e,t){return`${e}/${t??""}`}i(Ve,"capabilityCacheKey");function It(e,t){if(t.length===0)return e;let n=new Set(t),o=e.defaultEffort!==void 0&&n.has(e.defaultEffort);return{...e,...o?{defaultEffort:void 0}:{},supportedEfforts:e.supportedEfforts?.filter(r=>!n.has(r.value)),localRejectEfforts:Array.from(new Set([...e.localRejectEfforts??[],...t]))}}i(It,"narrowReasoningProfile");function Go(e,t,n){return e[Ve(t,n)]?.rejected??[]}i(Go,"getRejectedEfforts");function Ho(e,t,n,o,r,s){let a=Ve(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:s}}}i(Ho,"addRejectedEffort");function Jo(e,t,n){if(!t)return{};let o={...e};return delete o[Ve(t,n)],o}i(Jo,"removeCacheEntry");function qo(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,s=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:s,source:a,updatedAt:u}}return t}i(qo,"sanitizeCapabilityCache");var Yo=["off","auto","quick","balanced","deep"],le=["auto","none","low","medium","high"],Pn={low:6e3,medium:1e4,high:2e4},Rn=4096,$t=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Enable thinking"},{value:"medium",description:"Enable thinking",isDefault:!0},{value:"high",description:"Enable thinking"},{value:"xhigh",description:"Enable thinking"},{value:"max",description:"Enable thinking"}],Bt=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Alias to high"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning"}],Qo=[{value:"low",description:"Thinking is always on"},{value:"medium",description:"Thinking is always on"},{value:"high",description:"Thinking is always on",isDefault:!0},{value:"xhigh",description:"Thinking is always on"},{value:"max",description:"Thinking is always on"}];function He(e,t={}){return{...Zo(e),...t,reasoningPreset:e}}i(He,"createReasoningProfileFromPreset");function Zo(e){switch(e){case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-anthropic":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Bt,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"zai-glm-toggle":case"deepseek-toggle":case"kimi-hybrid-toggle":case"mimo-v2.5-toggle":case"generic-thinking-toggle":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",supportedEfforts:$t,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:Qo,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:$t,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:$t,budgetByEffort:{low:6e3,medium:1e4,high:16e3,xhigh:24e3,max:32e3},disabledEfforts:["none","minimal"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"claude-adaptive-xhigh":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"xhigh"},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"claude-adaptive-max":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"anthropic-budget":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"anthropic-budget",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"}],budgetByEffort:{low:6e3,medium:1e4,high:16e3},disabledEfforts:["none"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"openai-chat-reasoning":case"openai-responses-reasoning":return{reasoningPreset:e,effortStrategy:e==="openai-chat-reasoning"?"openai-chat-effort":"openai-responses-effort",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],disabledEfforts:["none"],supportsReasoningEffort:!0,supportsReasoningSummary:!0,supportsEncryptedReasoningReplay:!0};case"codex-cli-effort":return{reasoningPreset:e,effortStrategy:"codex-cli-config",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],allowCustomEffort:!0,supportsReasoningEffort:!0};case"none":return{reasoningPreset:e,effortStrategy:"none",thinkingStrategy:"none"}}}i(Zo,"createBaseReasoningProfileFromPreset");function Nt(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}i(Nt,"getReasoningCapability");function fe(e){return Je(e).enabled}i(fe,"isReasoningEnabled");function Je(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?Ae(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}i(Je,"normalizeReasoningRequest");function Ae(e){let t=e.trim().toLowerCase();if(!t)throw new Error("Reasoning effort cannot be empty.");if(/\s/.test(t))throw new Error(`Reasoning effort cannot contain whitespace: "${e}".`);return t==="off"?"none":t}i(Ae,"normalizeReasoningEffortValue");function Sn(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}i(Sn,"mapLegacyReasoningModeToEffortIntent");function er(e){switch(e){case"none":return"off";case"auto":return"auto";case"low":return"quick";case"medium":return"balanced";case"high":return"deep";default:return}}i(er,"effortToLegacyReasoningMode");function wn(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=Ae(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}i(wn,"parseReasoningEffortEnv");function De(e){let t=wn(e.envEffort),n=[];Se(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),Se(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Sn(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),Se(n,e.modelDefaultEffort??e.capability?.defaultEffort??we(e.capability),"model-default",!1),Se(n,e.providerDefaultEffort,"provider-default",!1),Se(n,e.fallbackEffort??Me(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:nr(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Mn(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}i(De,"resolveReasoningEffort");function tr(e){let t=e.currentEffort?Ae(e.currentEffort):void 0;if(t&&An(t,e.capability))return{effectiveEffort:Ge(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??we(e.capability)??Lt(e.capability)??Me(e.capability),o=n&&Ge(n,e.capability);return t?{effectiveEffort:o,preserved:!1,diagnostic:o?`Effort ${t} is not supported by the selected model; using ${o}.`:`Effort ${t} is not supported by the selected model; clearing effort.`}:{effectiveEffort:o,preserved:!1}}i(tr,"resolveReasoningEffortForModelSwitch");function Se(e,t,n,o){if(t===void 0)return;let r=Ae(t);e.push({value:r,source:n,isExplicit:o})}i(Se,"pushEffortCandidate");function nr(e,t){let n=e.find(o=>o.value!=="auto");return n?Mn(n.value,t,n.isExplicit):we(t)??Me(t)}i(nr,"resolveAutoEffectiveEffort");function Mn(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}if(e==="none")return e;if(An(e,t))return Ge(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return we(t)??Lt(t)??Me(t)??e}i(Mn,"validateReasoningEffort");function Ge(e,t){return t?.effortAliases?.[e]??e}i(Ge,"applyEffortAlias");function An(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=or(t);return n.length===0?le.includes(e):n.includes(e)||n.includes(Ge(e,t))}i(An,"isSupportedReasoningEffort");function or(e){return e?.supportedEfforts?.map(t=>t.value)??[]}i(or,"getSupportedEffortValues");function we(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}i(we,"getDefaultPresetValue");function Lt(e){let t=e?.supportedEfforts?.filter(rr).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}i(Lt,"getMiddleVisiblePresetValue");function rr(e){return e.isUserVisible!==!1}i(rr,"isUserVisiblePreset");function Me(e){if(!e||e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return"none";if(!(e.effortStrategy==="anthropic-output-effort"&&e.thinkingStrategy==="anthropic-adaptive"))return"medium"}i(Me,"getFallbackEffortForCapability");function ir(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(ir,"getDefaultThinkingDepthForMode");function ie(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}i(ie,"effortToThinkingDepth");function se(e,t,n="unknown"){if(t==="off")return 0;let o={...Pn,...e.defaultThinkingBudgets??{}},s=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(s,e.thinkingBudgetCap):s}i(se,"resolveThinkingBudget");function ae(e,t,n=Rn){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}i(ae,"clampThinkingBudget");function jt(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(jt,"mapDepthToOpenAIReasoningEffort");function Dn(e){if(!e||typeof e!="object")return;let t=e,n=t.status??t.statusCode??t.code;return typeof n=="number"&&Number.isInteger(n)?n:typeof n=="string"&&/^\d{3}$/.test(n)?Number(n):Dn(t.cause)}i(Dn,"getStatus");function sr(e){if(e instanceof Error)return e.message.toLowerCase();if(typeof e=="string")return e.toLowerCase();if(e&&typeof e=="object"){let t=e;return[t.message,t.error,t.detail,t.body].filter(o=>typeof o=="string").join(" ").toLowerCase()}return""}i(sr,"getMessage");var ar=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","thinking"],ur=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],cr=["minimal","none","low","medium","high","xhigh","max"];function lr(e,t){for(let n of cr)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}i(lr,"extractRejectedEffort");function Ft(e,t){let n=Dn(e);if(n!==400&&n!==422)return null;let o=sr(e);if(!o)return null;let r=ar.some(u=>o.includes(u)),s=ur.some(u=>o.includes(u));if(!r||!s)return null;let a=lr(o,t);return a?{rejectedEffort:a}:null}i(Ft,"classifyReasoningEffortRejection");function On(e,t){if(!e)return;if(typeof e.get=="function")return e.get(t)??void 0;let n=e,o=t.toLowerCase(),r=n[t]??n[o]??n[o.replace(/\b\w/g,s=>s.toUpperCase())];if(r!==void 0)return Array.isArray(r)?r[0]:r}i(On,"readHeader");function In(e){if(!e)return;let t=e.trim();if(t.length===0)return;let n=Number(t);if(!(!Number.isFinite(n)||n<=0))return n}i(In,"parsePositiveNumber");function fr(e,t){if(!e)return;let n=e.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let r=o-t;return r>0?r:void 0}i(fr,"parseHttpDate");function qe(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,s=t.now?t.now():Date.now(),a=In(On(e,"retry-after-ms"));if(a!==void 0){let g=Math.min(a,r);return{type:"header",waitMs:Math.round(g),source:"retry-after-ms",cappedFromHeader:g!==a}}let u=On(e,"retry-after");if(u!==void 0&&u.trim().length>0){let g=In(u);if(g!==void 0){let T=g*1e3,d=Math.min(T,r);return{type:"header",waitMs:Math.round(d),source:"retry-after-seconds",cappedFromHeader:d!==T}}let y=fr(u,s);if(y!==void 0){let T=Math.min(y,r);return{type:"header",waitMs:Math.round(T),source:"retry-after-date",cappedFromHeader:T!==y}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),f=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*f:0;return{type:"backoff",waitMs:Math.round(f+p),source:"exponential-backoff",attempt:t.attempt}}i(qe,"parseRetryAfter");function Ye(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}i(Ye,"extractHeadersFromError");import{AsyncLocalStorage as dr}from"node:async_hooks";var $n=new dr,Bn=8,Ln=32;function pr(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}i(pr,"parsePositiveInt");function gr(){let e=de()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:pr(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??Bn;return Math.max(1,Math.min(Ln,t))}i(gr,"resolveWorkflowMaxConcurrency");function mr(e,t){return $n.run(e,t)}i(mr,"runWithScopedConfig");function de(){return $n.getStore()}i(de,"getRunScopedConfig");var ue={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Nn={...ue,multimodalSupport:"image-input"},Oe={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},jn={...Oe,multimodalSupport:"image-input"};function Qe(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}i(Qe,"normalizeCapabilityProfile");function V(e){return{...Qe(e)}}i(V,"cloneCapabilityProfile");function hr(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}i(hr,"parseEnvInt");function yr(e){switch(e.reasoningPreset){case"zai-glm-5.2":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}i(yr,"shouldLowerAutoReasoningEffort");function et(){return new DOMException("Request aborted","AbortError")}i(et,"abortError");function vr(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(et()):new Promise((n,o)=>{let r,s=i(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=i(()=>{r&&clearTimeout(r),s(),o(et())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{s(),n()},e)})}i(vr,"waitForRetryDelay");function Kt(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"&&/^\d{3}$/.test(e))return Number(e)}i(Kt,"normalizeHttpStatus");function Fn(e){if(!e||typeof e!="object")return;let t=e;return Kt(t.status)??Kt(t.statusCode)??Kt(t.code)??Fn(t.cause)}i(Fn,"extractHttpStatus");function Kn(e){if(!e||typeof e!="object")return"";let t=e;return typeof t.code=="string"?t.code:Kn(t.cause)}i(Kn,"extractErrorCode");function Ze(e){if(e instanceof Error)return e.message.toLowerCase();if(e&&typeof e=="object"){let t=e.message;if(typeof t=="string")return t.toLowerCase()}return String(e).toLowerCase()}i(Ze,"getErrorMessage");var H=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;suppressReasoningEffort=!1;setMaxOutputTokensOverride(t){this.maxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=de()?.maxOutputTokens,o=(typeof n=="number"&&Number.isFinite(n)&&n>0?n:void 0)??hr(process.env.KODAX_MAX_OUTPUT_TOKENS);if(o!==void 0)return o;let r=this.getModelDescriptor(t)?.maxOutputTokens;return r!==void 0?r:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(t){let n=this.getModelDescriptor(t)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(t){let n=this.getModelDescriptor(t)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(t){let n=this.getModelDescriptor(t)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,s,a){throw new M(`${this.name} does not support non-streaming fallback`)}isConfigured(){return!!process.env[this.config.apiKeyEnv]}async verifyCredential(t){return{ok:!1,error:"unsupported",strategy:this.config.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider class "${this.name}" does not implement verifyCredential()`}}getModel(){return this.config.model}getAvailableModels(){return this.config.models?.length?[...new Set([this.config.model,...this.config.models.map(t=>t.id)])]:[this.config.model]}getModelDescriptor(t){let n=t??this.config.model,o=this.config.models?.find(r=>r.id===n);if(o)return o;if(n===this.config.model)return{id:this.config.model}}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return V(this.config.capabilityProfile??ue)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Nt(this.config)}getReasoningCapability(t){return this.getConfiguredReasoningCapability(t)}getReasoningProfile(t){return this.getModelDescriptor(t)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase(),s=n.map(u=>u.toLowerCase()).some(u=>o.includes(u)),a=o.includes("parameter")||s;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.map(a=>a.toLowerCase()).some(a=>o.includes(a))?o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported"):!1}shouldFallbackForForcedToolChoiceError(t){let n=Ze(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported"))?!0:this.isServerError(t)}isServerError(t){let n=Fn(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Ze(t);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(t){switch(t){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","none"];case"native-adaptive":return["native-adaptive","none"];case"native-toggle":return["native-toggle","none"];default:return["none"]}}getContextWindow(){return this.getEffectiveContextWindow()}getEffectiveContextWindow(t){let n=this.getModelDescriptor(t)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let t=process.env[this.config.apiKeyEnv];if(!t)throw new Error(`${this.config.apiKeyEnv} not set`);return t}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...t){this.shouldLogStreamDiagnostics()&&console.error(...t)}normalizeReasoning(t){return Je(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=le.includes(o),s=this.getReasoningProfile(n);if(!s){if(o==="none"||r)return;let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${le.join(", ")}.`,this.name)}if(s.localRejectEfforts?.includes(o)){let l=n?`/${n}`:"";throw new M(`${this.name}${l} does not support reasoning effort "${o}".`,this.name)}if(o==="none"||s.disabledEfforts?.includes(o)||s.allowCustomEffort)return;let a=s.supportedEfforts?.map(l=>l.value)??[],u=s.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",f=a.length>0?a.join(", "):le.join(", ");throw new M(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${f}.`,this.name)}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.effortSource==="explicit"){let s=o?`/${o}`:"";throw new M(`${this.name}${s} does not support reasoning effort "${r}".`,this.name)}if(n.defaultEffort)return{disabled:!1,effort:n.defaultEffort,requestedEffort:r}}if(!t.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(yr(n)){let s=De({capability:n,explicitEffort:r??"auto"}).effectiveEffort;return s==="none"||s!==void 0&&n.disabledEfforts?.includes(s)?{disabled:!0,effort:s,requestedEffort:r}:{disabled:!1,effort:s,requestedEffort:r}}return{disabled:!1,requestedEffort:r}}return{disabled:!1,effort:n.effortAliases?.[r]??r,requestedEffort:r}}onStaleConnection(){}isRateLimitError(t){if(!(t instanceof Error))return!1;let n=t.message.toLowerCase();return["rate","limit","\u901F\u7387","\u9891\u7387","1302","429","too many","overload","overwhelmed","503","529","busy"].some(o=>n.includes(o))}classifyRateLimitReason(t){let n=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.includes("overload")||n.includes("overwhelmed")||n.includes("503")||n.includes("529")||n.includes("busy")?"overloaded":"rate-limit"}extractRetryAfterMs(t){let n=Ye(t);if(!n)return;let o=qe(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(t){let n=Ze(t),o=[{regex:/(\d[\d,]*)\s*tokens?.*?(\d[\d,]*)\s*(?:maximum|limit|context)/i,inputGroup:1,limitGroup:2},{regex:/maximum.*?(\d[\d,]*)\s*tokens?.*?requested.*?(\d[\d,]*)/i,inputGroup:2,limitGroup:1},{regex:/exceeds?\s+.*?(\d[\d,]*)\s*.*?(?:limit|max|context|上限).*?(\d[\d,]*)/i,inputGroup:1,limitGroup:2}];for(let r of o){let s=n.match(r.regex);if(s){let a=Number(s[r.inputGroup].replace(/,/g,"")),u=Number(s[r.limitGroup].replace(/,/g,""));return Math.max(3e3,u-a-1e3)}}}isContextOverflowError(t){let n=Ze(t);return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,s,a){let u=!1;this.suppressReasoningEffort=!1;for(let c=0;c<o;c++)try{let f=await t();return this.maxOutputTokensOverride=void 0,this.suppressReasoningEffort=!1,f}catch(f){if(this.isContextOverflowError(f)&&!this.maxOutputTokensOverride){let l=this.parseContextOverflow(f);if(l){this.maxOutputTokensOverride=l,r?.(c+1,o,0);continue}}if(this.isRateLimitError(f)){if(c===o-1)throw new Pe(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let l=Ye(f)??{},p=qe(l,{attempt:c,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),g=p.waitMs,y=this.classifyRateLimitReason(f);if(s?.({provider:this.name,waitMs:g,reason:y,source:p.source,attempt:c+1,maxAttempts:o}),r?r(c+1,o,g):s||console.log(`[Rate Limit] Retrying in ${g/1e3}s (${c+1}/${o})...`),n?.aborted||(await vr(g,n),n?.aborted))throw et();continue}if(a&&!u){let l=Ft(f,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),this.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let l=Ft(f,a.effort);if(l)throw this.suppressReasoningEffort=!1,new Xe(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(f instanceof Error){if((f.name==="AbortError"||f.name==="APIUserAbortError")&&n?.aborted)throw f.name==="AbortError"?f:new DOMException(f.message||"Request aborted","AbortError");let l=Kn(f);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),new M(`${this.name} API error: ${f.message}`,this.name)}throw f}throw new Q("Unexpected end of withRateLimit")}};import Pr from"@anthropic-ai/sdk";import{parse as kr}from"partial-json";function pe(e){if(!e)return{value:{},salvaged:!1};try{let t=JSON.parse(e);return{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!1}}catch{}try{let t=kr(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}i(pe,"parseToolInputWithSalvageTracked");function br(e){return pe(e).value}i(br,"parseToolInputWithSalvage");var Er={max_tokens:"truncated",length:"truncated",model_context_window_exceeded:"truncated",end_turn:"end",stop:"end",stop_sequence:"end",tool_use:"tool",tool_calls:"tool",function_call:"tool",pause_turn:"paused",refusal:"refused",content_filter:"refused"};function Un(e){return e==null?"unknown":Er[e.trim().toLowerCase()]??"unknown"}i(Un,"classifyStopReason");function ge(e){let t=Un(e);return t==="end"||t==="tool"||t==="paused"}i(ge,"isCleanStop");async function me(e){if(e.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let t=e.runners.find(f=>f.strategy===e.strategy);if(!t)return{ok:!1,error:"unsupported",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${e.strategy}" is not implemented for this provider's base class`};if(e.signal?.aborted)return{ok:!1,error:"unknown",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=e.timeoutMs??8e3,r,s=i(f=>{r||(r=f),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),u=i(()=>s("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(f){return Ut(f,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}i(me,"runVerifyCredential");function xr(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}i(xr,"redactKeyMaterial");function Ut(e,t){let n=e,o=n.status??n.statusCode??n.response?.status,r=xr(String(n.message??e)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",u;return t.abortCause==="timeout"?u="timeout":t.abortCause==="parent"?u="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?u="unauthorized":o===429?u="rate_limited":o===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?u="unauthorized":o!==void 0&&o>=500&&o<600?u="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?u="network":/timeout/i.test(r)?u="timeout":u="unknown",{ok:!1,error:u,status:o,message:r,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}i(Ut,"classifyVerifyError");function Wt(e,t){let n=e[e.length-1];if(n&&he(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}i(Wt,"insertCacheBoundary");function he(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}i(he,"isCacheBoundary");function zt(e,t){let n=[];for(let o of e){if(he(o)){if(t==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}i(zt,"lowerCacheBoundaries");function Ie(e){return e.filter(t=>!he(t))}i(Ie,"stripCacheBoundaries");import{readFile as _r}from"node:fs/promises";import Tr from"node:path";var Cr={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function tt(e,t){return t??Cr[Tr.extname(e).toLowerCase()]??"image/png"}i(tt,"resolveImageMediaType");async function nt(e){return(await _r(e)).toString("base64")}i(nt,"readImageFileAsBase64");async function Wn(e,t){let n=tt(e,t),o=await nt(e);return`data:${n};base64,${o}`}i(Wn,"buildImageDataUrl");var Rr="KodaX",Sr="effort-2025-11-24";function wr(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Rr}}i(wr,"getAnthropicCompatDefaultHeaders");function Xt(e,t){if(!e)return t;let n=e.input_tokens!==void 0&&e.input_tokens!==null||e.cache_creation_input_tokens!==void 0&&e.cache_creation_input_tokens!==null||e.cache_read_input_tokens!==void 0&&e.cache_read_input_tokens!==null,o=typeof e.input_tokens=="number"?e.input_tokens:n?0:t?.inputTokens??0,r=typeof e.cache_creation_input_tokens=="number"?e.cache_creation_input_tokens:n?0:t?.cachedWriteTokens??0,s=typeof e.cache_read_input_tokens=="number"?e.cache_read_input_tokens:n?0:t?.cachedReadTokens??0,a=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,u=n?o+r+s:t?.inputTokens??0;if(![u,a].some(c=>!Number.isFinite(c)||c<0))return{inputTokens:u,outputTokens:a,totalTokens:u+a,cachedReadTokens:s||void 0,cachedWriteTokens:r||void 0}}i(Xt,"normalizeAnthropicUsage");function Vt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Vt,"isRecord");function Mr(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}i(Mr,"selectAnthropicOutputEffort");function zn(e,t){let n=Mr(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...Vt(r)?r:{},effort:n}}i(zn,"applyAnthropicOutputEffort");function Xn(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...Vt(o)?o:{},effort:t}}i(Xn,"setAnthropicOutputEffort");function Ar(e){let n=e.output_config;return Vt(n)&&typeof n.effort=="string"}i(Ar,"hasAnthropicOutputEffort");var B=class extends H{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=wr(this.config);return new Pr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let s=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&Ar(t)?{"anthropic-beta":Sr}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}applyReasoningProfile(t,n,o,r,s){if(this.suppressReasoningEffort)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset,c=t;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){(u==="zai-glm-5.2"||u==="zai-glm-toggle"||u==="deepseek-v4-anthropic"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="minimax-m3"||u==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(u==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(u==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Xn(t,a.effort);return}if(u==="minimax-m3"){t.thinking={type:"adaptive"};return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||u==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(c.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Xn(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let f=this.resolveReasoningProfileBudget(n,a.effort,o,r,s);t.thinking={type:"enabled",budget_tokens:f}}}}resolveReasoningProfileBudget(t,n,o,r,s){let u=(n?t.budgetByEffort?.[n]:void 0)??se(this.config,ie(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),f=c!==void 0?Math.min(u,c):u;return ae(f,s)}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"count-tokens",approxTokensSpent:0,run:i(async s=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")},{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({},{signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:i(async s=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return me({strategy:this.config.verifyStrategy??"count-tokens",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}isPromptCacheDisabled(){let t=de()?.disablePromptCache;return t===!0?!0:t===!1?!1:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}applyCacheControlToSystem(t){if(!t.trim()||this.isPromptCacheDisabled())return t;let n=Wt([{type:"text",text:t}],"system");return zt(n,"attach")}applyCacheControlToTools(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=t.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}applyCacheControlToMessages(t){if(t.length===0||this.isPromptCacheDisabled())return t;let n=0,o=-1;for(let l=t.length-1;l>=0;l--)if(t[l].role==="user"&&(n+=1,n===2)){o=l;break}if(o===-1)return t;let r=t[o];if(typeof r.content=="string"||r.content.length===0)return t;let s=r.content,u={...s[s.length-1],cache_control:{type:"ephemeral"}},c=[...s.slice(0,-1),u],f=t.slice();return f[o]={...r,content:c},f}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(_=>_==="native-budget"||_==="native-toggle"||_==="native-adaptive"||_==="none"):["none"],T=!!s?.forcedToolName,d=i(_=>{let P={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&T&&(P.tool_choice={type:"tool",name:s.forcedToolName}),_!=="none")if(_==="profile"&&g)this.applyReasoningProfile(P,g,u,c,f);else if(_==="native-budget"){let D=se(this.config,ie(u.effort),u.taskType);P.thinking={type:"enabled",budget_tokens:ae(D,f)}}else _==="native-toggle"?P.thinking={type:"enabled"}:_==="native-adaptive"&&(P.thinking={type:"adaptive"},zn(P,u));return P},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let b=[],k=[],v=[],h,C=null,m="",E="",w="",j="",U="",F="",Y="",ee=!1,R,A=Date.now(),X=Date.now(),oe,Te;for(let _ of y){for(;!oe;)try{let P=d(_);oe=await this.client.messages.create(P,this.buildMessageCreateOptions(P,c,a))}catch(P){if(Te=P,T&&this.shouldFallbackForForcedToolChoiceError(P)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let D=_==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:_==="native-budget"?["budget_tokens","thinking"]:_==="native-toggle"?["thinking"]:_==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(P,...D))throw P;break}if(oe)break}if(!oe)throw Te??new M("All reasoning capability attempts failed without a captured error",this.name);let Ce=Date.now(),ze=0,S=0,$=3e4;for await(let _ of oe){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let P=Date.now(),D=P-Ce;if(D>$&&(ze++,S+=D,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(D/1e3)}s gap before ${_.type}`,{stallCount:ze,totalStallMs:S,eventType:_.type})),Ce=P,_.type==="content_block_start"||_.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),_.type==="content_block_start"){A=Date.now();let x=_.content_block;C=x.type,process.env.KODAX_DEBUG_TOOL_STREAM&&x.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:x.type,id:x.id,name:x.name}),x.type==="thinking"?(E="",w=x.signature??""):x.type==="redacted_thinking"?(C="redacted_thinking",j=x.data??""):x.type==="text"?m="":x.type==="tool_use"&&(U=x.id,F=x.name,Y="")}else if(_.type==="content_block_delta"){A=Date.now();let x=_.delta;x.type==="thinking_delta"?(E+=x.thinking??"",s?.onThinkingDelta?.(x.thinking??"")):x.type==="text_delta"?(m+=x.text??"",s?.onTextDelta?.(x.text??"")):x.type==="input_json_delta"&&(Y+=x.partial_json??"",s?.onToolInputDelta?.(F,x.partial_json??"",U?{toolId:U}:void 0))}else if(_.type==="content_block_stop"){if(A=Date.now(),C==="thinking")E&&(v.push({type:"thinking",thinking:E,signature:w}),s?.onThinkingEnd?.(E));else if(C==="redacted_thinking")j&&v.push({type:"redacted_thinking",data:j}),j="";else if(C==="text")m&&b.push({type:"text",text:m});else if(C==="tool_use")if(!U||!F)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(U),name:JSON.stringify(F),input:Y.slice(0,100)});else{let x=pe(Y);k.push({type:"tool_use",id:U,name:F,input:x.value,...x.salvaged?{_salvaged:!0,_truncated:!0}:{}})}C=null}else if(_.type==="message_stop"){if(ee=!0,A=Date.now(),process.env.KODAX_DEBUG_STREAM){let x=Date.now()-X;this.logStreamDiagnostic(`[Stream] message_stop received after ${x}ms`)}}else if(_.type==="message_delta"){A=Date.now(),h=Xt(_.usage,h);let x=_.delta;x?.stop_reason&&(R=x.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${R}`))}else _.type==="message_start"&&(A=Date.now(),h=Xt(_.message?.usage,h),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!ee){let _=Date.now()-X,P=Date.now()-A;if(a?.aborted){let D=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:_,lastEventAge:P,reason:D,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),new DOMException(D,"AbortError")}if(!R){let D=new Error(`Stream incomplete: message_stop event not received. Duration: ${_}ms, Last event: ${P}ms ago. This may indicate a network disconnection or API timeout.`);throw D.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:_,lastEventAge:P,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length}),D}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:_,lastEventAge:P,stopReason:R,textBlocks:b.length,toolBlocks:k.length,thinkingBlocks:v.length})}let O=ge(R)?k.map(({_truncated:_,...P})=>P):k;return{textBlocks:b,toolBlocks:O,thinkingBlocks:v,usage:h,stopReason:R}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.normalizeReasoning(r),c=s?.modelOverride??this.config.model;this.validateExplicitReasoningEffort(u,c);let f=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(c),l=this.applyCacheControlToMessages(await this.convertMessages(t,c)),p=u.enabled?this.getReasoningCapability(c):"none",g=this.getReasoningProfile(c),y=g?["profile","none"]:u.enabled?this.getReasoningFallbackChain(p).filter(m=>m==="native-budget"||m==="native-toggle"||m==="native-adaptive"||m==="none"):["none"],T=!!s?.forcedToolName,d=i(m=>{let E={model:c,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:l,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&T&&(E.tool_choice={type:"tool",name:s.forcedToolName}),m!=="none")if(m==="profile"&&g)this.applyReasoningProfile(E,g,u,c,f);else if(m==="native-budget"){let w=se(this.config,ie(u.effort),u.taskType);E.thinking={type:"enabled",budget_tokens:ae(w,f)}}else m==="native-toggle"?E.thinking={type:"enabled"}:m==="native-adaptive"&&(E.thinking={type:"adaptive"},zn(E,u));return E},"buildRequest"),b,k;for(let m of y){for(;!b;)try{let E=d(m);b=await this.client.messages.create(E,this.buildMessageCreateOptions(E,c,a))}catch(E){if(k=E,T&&this.shouldFallbackForForcedToolChoiceError(E)){T=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let w=m==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:m==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(E,...w))throw E;break}if(b)break}if(!b)throw k??new M("All reasoning capability attempts failed without a captured error",this.name);let v=[],h=[],C=[];for(let m of b.content)m.type==="text"?(v.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(C.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?C.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&h.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:v,toolBlocks:h,thinkingBlocks:C,usage:Xt(b.usage),stopReason:b.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(he(n))throw new M("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name);return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
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 y of l.content)y.type==="text"?g.push({type:"text",text:y.text}):y.type==="image"&&g.push({type:"image",source:{type:"base64",media_type:tt(y.path,y.mediaType),data:await nt(y.path)}});p=g}u.push({type:"tool_result",tool_use_id:l.tool_use_id,content:p,...l.is_error===!0?{is_error:!0}:{}})}for(let l of s.content)l.type==="tool_use"&&s.role==="assistant"&&u.push({type:"tool_use",id:l.id,name:l.name,input:l.input});for(let l of s.content)l.type==="text"?u.push({type:"text",text:l.text}):l.type==="image"&&s.role==="user"&&u.push({type:"image",source:{type:"base64",media_type:tt(l.path,l.mediaType),data:await nt(l.path)}});if(a==="assistant"&&this.config.supportsThinking&&!r){let l=u.some(g=>g.type==="tool_use"),p=u.some(g=>g.type==="thinking"||g.type==="redacted_thinking");l&&!p&&u.unshift({type:"thinking",thinking:"...",signature:""})}let f=u.length===0||(a==="assistant"||a==="user")&&u.every(l=>{let p=l;return p.type==="thinking"&&!p.thinking||p.type==="text"&&!p.text});o.push({role:s.role,content:f?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=i((o,r)=>{let s=new Set;if(!o||typeof o.content=="string"||!Array.isArray(o.content))return s;for(let a of o.content){let u=a;r==="tool_use"&&u.type==="tool_use"&&u.id&&s.add(u.id),r==="tool_result"&&u.type==="tool_result"&&u.tool_use_id&&s.add(u.tool_use_id)}return s},"collectIds");return t.map((o,r)=>{if(typeof o.content=="string"||!Array.isArray(o.content))return o;let s=o.content;if(o.role==="assistant"){let a=n(t[r+1],"tool_result");s=s.filter(u=>{let c=u;return c.type!=="tool_use"||!!c.id&&a.has(c.id)})}else if(o.role==="user"){let a=n(t[r-1],"tool_use");s=s.filter(u=>{let c=u;return c.type!=="tool_result"||!!c.tool_use_id&&a.has(c.tool_use_id)})}return s.length===o.content.length?o:s.length===0?{...o,content:[{type:"text",text:"..."}]}:{...o,content:s}})}};import Dr from"openai";var Or="KodaX";function Ir(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}i(Ir,"isOpenAIReasoningAttempt");function $r(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Or}}i($r,"getOpenAICompatDefaultHeaders");function Br(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return jt(ie(e.effort))}}i(Br,"selectOpenAIReasoningEffort");function Vn(e){if(!e)return;let t=typeof e.prompt_tokens=="number"?e.prompt_tokens:0,n=typeof e.completion_tokens=="number"?e.completion_tokens:0,o=typeof e.total_tokens=="number"?e.total_tokens:t+n;if([t,n,o].some(s=>!Number.isFinite(s)||s<0)||o<t||o<n)return;let r=typeof e.prompt_tokens_details?.cached_tokens=="number"&&e.prompt_tokens_details.cached_tokens>=0?e.prompt_tokens_details.cached_tokens:typeof e.prompt_cache_hit_tokens=="number"&&e.prompt_cache_hit_tokens>=0?e.prompt_cache_hit_tokens:void 0;return{inputTokens:t,outputTokens:n,totalTokens:o,...r!==void 0?{cachedReadTokens:r}:{}}}i(Vn,"normalizeOpenAIUsage");function Lr(e){return e?e.type==="function"&&"function"in e:!1}i(Lr,"isOpenAIFunctionToolCall");function Nr(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>{if(!t||typeof t!="object")return"";let n=Reflect.get(t,"text");if(typeof n=="string")return n;if(n&&typeof n=="object"){let o=Reflect.get(n,"value");return typeof o=="string"?o:""}return""}).filter(Boolean).join(""):""}i(Nr,"extractOpenAIMessageText");function jr(e){if(!e||typeof e!="object")return"";let t=Reflect.get(e,"reasoning_content");return typeof t=="string"?t:Array.isArray(t)?t.map(n=>typeof n=="string"?n:n&&typeof n=="object"&&"text"in n&&typeof n.text=="string"?n.text:"").join(""):""}i(jr,"extractOpenAIMessageReasoning");function ot(e){let t=e.role;return typeof t=="string"?t:void 0}i(ot,"getWireRole");function Fr(e){if(ot(e)!=="assistant")return;let t=e.tool_calls;if(Array.isArray(t))return t.flatMap(n=>{if(!n||typeof n!="object")return[];let o=n.id;return typeof o=="string"&&o.trim().length>0?[{id:o,value:n}]:[]})}i(Fr,"getAssistantWireToolCalls");function Kr(e){if(ot(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}i(Kr,"getToolWireCallId");function Ur(e,t){let n={...e};return t.length>0?(n.tool_calls=t.map(o=>o.value),n):(delete n.tool_calls,(n.content==null||n.content==="")&&(n.content="..."),n)}i(Ur,"rewriteAssistantWireToolCalls");var W=class extends H{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(t){this._client=t}buildClient(){let t=$r(this.config);return new Dr({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}async verifyCredential(t){let n=this.config.model,o=this.client,r=[{strategy:"models-list",approxTokensSpent:0,run:i(async s=>{await o.models.list({signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:i(async s=>{await o.chat.completions.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return me({strategy:this.config.verifyStrategy??"models-list",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Ie(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(t,n){let o=[];t&&t.trim().length>0&&o.push(t);let r=[];for(let s of n){if(s.role!=="system"){r.push(s);continue}let a=typeof s.content=="string"?s.content:Array.isArray(s.content)?s.content.filter(u=>typeof u=="object"&&u!==null&&u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
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=Br(o);c&&(r.reasoning_effort=c);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0,thinking_budget:a}):this.name==="zhipu"&&(r.thinking={type:"enabled",budget_tokens:a});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0}):this.name==="zhipu"&&(r.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,s){this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(u==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);this.appendExtraBody(t,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-openai"||u==="zai-glm-5.2"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="openai-chat-effort"){if(a.disabled){n.supportedEfforts?.some(c=>c.value==="none")&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,s);t.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let s=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(s,a):s}getFallbackTerms(t){switch(t){case"native-budget":return["thinking_budget","budget_tokens","thinking"];case"native-effort":return["reasoning_effort"];case"native-toggle":return["enable_thinking","thinking"];default:return[]}}async stream(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:f}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(f,l)],g=n.map(S=>({type:"function",function:{name:S.name,description:S.description,parameters:S.input_schema}})),y=s?.forcedToolName,T=!!y;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let d=new Map,b="",k="",v,h=!0,C=null,m=Date.now(),E=this.normalizeReasoning(r),w=fe(E)?this.getReasoningCapability(l):"none",j=fe(E)?this.getReasoningFallbackChain(w).filter(Ir):["none"],U={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l),stream:!0};y&&T&&(U.tool_choice={type:"function",function:{name:y}});let F,Y;for(let S of j){for(;!F;){let $={...U};h&&($.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams($),this.applyReasoningCapability($,S,E);try{F=await this.client.chat.completions.create($,a?{signal:a}:{})}catch(O){if(Y=O,T&&this.shouldFallbackForForcedToolChoiceError(O)){T=!1,delete U.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(h&&this.shouldFallbackForSpecificReasoningError(O,"stream_options","include_usage")){h=!1;continue}if(!this.shouldFallbackForReasoningError(O,...this.getFallbackTerms(S)))throw O;break}}if(F)break}if(!F)throw Y??new M("All reasoning capability attempts failed without a captured error",this.name);let ee=Date.now(),R=0,A=0,X=3e4;for await(let S of F){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let $=Date.now(),O=$-ee;O>X&&(R++,A+=O,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(O/1e3)}s gap`,{stallCount:R,totalStallMs:A})),ee=$,s?.onHeartbeat?.(),v=Vn(S.usage)??v;let _=S.choices[0],P=_?.delta;if(_?.finish_reason&&(C=_.finish_reason,process.env.KODAX_DEBUG_STREAM)){let x=Date.now()-m;this.logStreamDiagnostic(`[Stream] finish_reason: ${C} after ${x}ms`)}P?.content&&(b+=P.content,s?.onTextDelta?.(P.content));let D=this.extractReasoningDelta(P);if(D&&(k+=D,s?.onThinkingDelta?.(D)),P?.tool_calls)for(let x of P.tool_calls){let re=d.get(x.index)??{id:"",name:"",arguments:""};x.id&&(re.id=x.id),x.function?.name&&(re.name=x.function.name),x.function?.arguments&&(re.arguments+=x.function.arguments,s?.onToolInputDelta?.(re.name,x.function.arguments,re.id?{toolId:re.id}:void 0)),d.set(x.index,re)}}if(!C){let S=Date.now()-m;if(a?.aborted){let O=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:S,reason:O,textContentLength:b.length,toolCallsCount:d.size}),new DOMException(O,"AbortError")}let $=new Error(`Stream incomplete: finish_reason not received. Duration: ${S}ms. This may indicate a network disconnection or API timeout.`);throw $.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:S,textContentLength:b.length,toolCallsCount:d.size}),$}let oe=b?[{type:"text",text:b}]:[],Te=[],Ce=[];k&&(Ce.push({type:"thinking",thinking:k}),s?.onThinkingEnd?.(k));let ze=ge(C??void 0);for(let[,S]of d)if(S.id&&S.name){let $=pe(S.arguments),O=$.salvaged?ze?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};Te.push({type:"tool_use",id:S.id,name:S.name,input:$.value,...O})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(S.id),name:JSON.stringify(S.name),argsLength:S.arguments?.length??0});return{textBlocks:oe,toolBlocks:Te,thinkingBlocks:Ce,usage:v,stopReason:C??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,s,a){return this.withRateLimit(async()=>{let u=this.stripCacheBoundariesFromMessages(t),{system:c,rest:f}=this.normalizeSystemForWire(o,u),l=s?.modelOverride??this.config.model,p=[{role:"system",content:c},...await this.convertMessages(f,l)],g=n.map(R=>({type:"function",function:{name:R.name,description:R.description,parameters:R.input_schema}})),y=s?.forcedToolName,T=!!y,d=this.normalizeReasoning(r),b=fe(d)?this.getReasoningCapability(l):"none",k=fe(d)?this.getReasoningFallbackChain(b).filter(R=>R==="native-budget"||R==="native-effort"||R==="native-toggle"||R==="none"):["none"],v={model:l,messages:p,tools:g,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(l)};y&&T&&(v.tool_choice={type:"function",function:{name:y}});let h,C;for(let R of k){for(;!h;){let A={...v};this.resetReasoningCapabilityParams(A),this.applyReasoningCapability(A,R,d);try{h=await this.client.chat.completions.create(A,a?{signal:a}:{})}catch(X){if(C=X,T&&this.shouldFallbackForForcedToolChoiceError(X)){T=!1,delete v.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(X,...this.getFallbackTerms(R)))throw X;break}}if(h)break}if(!h)throw C??new M("All reasoning capability attempts failed without a captured error",this.name);let m=h.choices[0],E=m?.message,w=Nr(E?.content),j=jr(E),U=ge(m?.finish_reason??void 0),F=(E?.tool_calls??[]).filter(Lr).map(R=>{let A=pe(R.function.arguments),X=A.salvaged?U?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:R.id,name:R.function.name,input:A.value,...X}});w&&s?.onTextDelta?.(w);let Y=w?[{type:"text",text:w}]:[],ee=[];return j&&(ee.push({type:"thinking",thinking:j}),s?.onThinkingDelta?.(j),s?.onThinkingEnd?.(j)),{textBlocks:Y,toolBlocks:F,thinkingBlocks:ee,usage:Vn(h.usage),stopReason:m?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter,{model:s?.modelOverride??this.config.model,onRejected:s?.onReasoningEffortRejected})}extractReasoningDelta(t){let n=t?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(t,n){let o=t.filter(l=>l.type==="text").map(l=>l.text).join(`
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 Wn(a.path,a.mediaType)}});return n.push({role:"user",content:s}),n}serializeSystemMessage(t){if(typeof t=="string")return[{role:"system",content:t}];let n=t.filter(o=>o.type==="text").map(o=>o.text).join(`
18
+ `);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[];for(let r of t){if(r.role==="system"){o.push(...this.serializeSystemMessage(r.content));continue}if(typeof r.content=="string"){o.push({role:r.role,content:r.content});continue}if(r.role==="assistant"){o.push(...this.serializeAssistantMessage(r.content,n));continue}o.push(...await this.serializeUserMessage(r.content))}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=[],o=0;for(;o<t.length;){let r=t[o],s=Fr(r);if(s===void 0){ot(r)!=="tool"&&n.push(r),o+=1;continue}let a=new Set(s.map(g=>g.id)),u=new Set,c=[],f=o+1;for(;f<t.length&&ot(t[f])==="tool";){let g=t[f],y=Kr(g);y!==void 0&&a.has(y)&&!u.has(y)&&(u.add(y),c.push(g)),f+=1}let l=s.filter(g=>u.has(g.id)),p=l.length===s.length&&s.length>0?r:Ur(r,l);n.push(p),l.length>0&&n.push(...c),o=f}return n}};import{spawn as Gr}from"node:child_process";import{Readable as Hr,Writable as Jr}from"node:stream";import it from"node:process";import{ClientSideConnection as qr,PROTOCOL_VERSION as Yr,ndJsonStream as Qr}from"@agentclientprotocol/sdk";import{spawn as Wr,spawnSync as Qn}from"node:child_process";var Jt=2e3,G=2e3;function Ht(e){return e.exitCode!==null||e.signalCode!==null}i(Ht,"isExited");function $e(e,t){return Ht(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=i(u=>{o||(o=!0,clearTimeout(a),e.off("exit",s),e.off("error",s),n(u))},"finish"),s=i(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),t);a.unref?.(),e.once("exit",s),e.once("error",s)})}i($e,"waitForExit");function Gn(e){return new Promise(t=>{let n=Wr("taskkill",["/pid",String(e),"/t","/f"],{stdio:"ignore",windowsHide:!0}),o=!1,r=i(()=>{o||(o=!0,clearTimeout(s),t())},"finish"),s=setTimeout(()=>{try{n.kill()}catch{}r()},Jt);s.unref?.(),n.once("exit",r),n.once("error",r)})}i(Gn,"runTaskkill");function Hn(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}i(Hn,"signalPosixPidTree");function J(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}i(J,"signalTargetExists");function Jn(e){return J(-e)||J(e)}i(Jn,"isPosixPidTreeAlive");async function qn(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Jn(e))return!0;await new Promise(o=>setTimeout(o,50))}return!Jn(e)}i(qn,"waitForPosixPidTreeExit");async function zr(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!J(e))return!0;await new Promise(o=>setTimeout(o,50))}return!J(e)}i(zr,"waitForWindowsPidExit");async function Gt(e,t){let n=[...new Set(e.filter(r=>Number.isFinite(r)&&r>0))];if(n.length===0)return!0;let o=Date.now()+t;for(;Date.now()<o;){if(n.every(r=>!J(r)))return!0;await new Promise(r=>setTimeout(r,50))}return n.every(r=>!J(r))}i(Gt,"waitForWindowsPidsExit");function Yn(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).map(r=>Number(r)).filter(r=>Number.isFinite(r)&&r>0)}catch{return[]}}i(Yn,"readWindowsPidListJson");function Xr(e){let t=Qn("wmic",["process","where",`ParentProcessId=${e}`,"get","ProcessId","/format:list"],{encoding:"utf8",timeout:Jt,windowsHide:!0});if(t.error||t.status!==0)return[];let n=[],o=/ProcessId=(\d+)/g,r;for(;(r=o.exec(t.stdout))!==null;){let s=Number(r[1]);Number.isFinite(s)&&s>0&&s!==e&&n.push(s)}return n}i(Xr,"getWindowsChildPidsViaWmic");function Vr(e){let t=[`$children = Get-CimInstance Win32_Process -Filter "ParentProcessId = ${e}"`,"if ($null -eq $children) { exit 0 }","$children | Select-Object -ExpandProperty ProcessId | ConvertTo-Json -Compress"].join("; "),n=Qn("powershell.exe",["-NoProfile","-NonInteractive","-Command",t],{encoding:"utf8",timeout:Jt,windowsHide:!0});if(!n.error&&n.status===0){let r=Yn(n.stdout);if(r.length>0)return r}let o=Yn(n.stdout);return o.length>0?o:Xr(e)}i(Vr,"getWindowsChildPids");function Zn(e,t=new Set){let n=[];for(let o of Vr(e))t.has(o)||(t.add(o),n.push(o),n.push(...Zn(o,t)));return n}i(Zn,"collectWindowsDescendantPids");async function rt(e,t){try{process.kill(e,t)}catch{return!J(e)}return zr(e,G)}i(rt,"killWindowsPid");async function Be(e){if(process.platform==="win32"&&e.pid!==void 0){let t=Zn(e.pid),n=[...t].reverse(),o=[e.pid,...t];Ht(e)||await Gn(e.pid);for(let r of n)J(r)&&await Gn(r);if(await Gt(o,G)){await $e(e,G);return}for(let r of n)J(r)&&await rt(r,"SIGTERM");if(await rt(e.pid,"SIGTERM"),await Gt(o,G)){await $e(e,G);return}for(let r of n)J(r)&&await rt(r,"SIGKILL");await rt(e.pid,"SIGKILL"),await Gt(o,G),await $e(e,G);return}if(e.pid!==void 0&&process.platform!=="win32"){if(!Hn(e.pid,"SIGTERM")||await qn(e.pid,G))return;Hn(e.pid,"SIGKILL"),await qn(e.pid,G);return}if(!Ht(e)){try{e.kill("SIGTERM")}catch{return}if(!await $e(e,G)){try{e.kill("SIGKILL")}catch{}await $e(e,G)}}}i(Be,"killChildProcessTree");var st=class{static{i(this,"AcpClient")}client=null;agentProcess=null;options;constructor(t){this.options=t}async connect(){let t,n;if(this.options.inputStream&&this.options.outputStream)t=this.options.inputStream,n=this.options.outputStream;else if(this.options.command){let s=it.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Gr(s,this.options.args??[],{cwd:this.options.cwd??it.cwd(),stdio:["pipe","pipe","inherit"],detached:it.platform!=="win32"}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=Jr.toWeb(this.agentProcess.stdin),t=Hr.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=Qr(n,t);this.client=new qr(()=>({sessionUpdate:i(async r=>{this.options.onSessionUpdate?.(r)},"sessionUpdate"),requestPermission:i(async r=>{let s=r.options??[],a=s.find(u=>u.kind==="allow_once"||u.kind==="allow_always")??s[0];return a?{outcome:{outcome:"selected",optionId:a.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),o),await this.client.initialize({protocolVersion:Yr,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}})}async createNewSession(){if(!this.client)throw new Error("Client not connected");return(await this.client.newSession({cwd:this.options.cwd??it.cwd(),mcpServers:[]})).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");let s={sessionId:n,prompt:[{type:"text",text:t}]};r?.model&&(s.model=r.model),r?.reasoningEffort&&(s.effort=r.reasoningEffort);let a=this.client.prompt(s);if(o){let u=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{})},"onAbort");o.addEventListener("abort",u),a=a.finally(()=>{o.removeEventListener("abort",u)})}return await a}disconnect(){this.agentProcess&&Be(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}};function Zr(e){if(!e||typeof e!="object")return;let t=e,n=typeof t.inputTokens=="number"?t.inputTokens:0,o=typeof t.outputTokens=="number"?t.outputTokens:0,r=typeof t.totalTokens=="number"?t.totalTokens:n+o;if(![n,o,r].some(s=>!Number.isFinite(s)||s<0)&&!(r<n||r<o))return{inputTokens:n,outputTokens:o,totalTokens:r,cachedReadTokens:typeof t.cachedReadTokens=="number"?t.cachedReadTokens:void 0,cachedWriteTokens:typeof t.cachedWriteTokens=="number"?t.cachedWriteTokens:void 0,thoughtTokens:typeof t.thoughtTokens=="number"?t.thoughtTokens:void 0}}i(Zr,"normalizeAcpUsage");function ei(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}i(ei,"selectAcpReasoningEffort");var ye=class extends H{static{i(this,"KodaXAcpProvider")}_client=null;_sessionMap=new Map;_activeStreams=new Map;isConfigured(){return!0}async verifyCredential(){return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`CLI-bridge provider "${this.name}" manages credentials in its CLI binary's token store; not verifiable from the KodaX SDK`}}getCapabilityProfile(){return V(Oe)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Ie(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,s,a){let u=this.normalizeReasoning(r),c=ei(u);if(t=this.stripCacheBoundariesFromMessages(t),this.acpClientOptions.executor&&typeof this.acpClientOptions.executor.isInstalled=="function"&&!await this.acpClientOptions.executor.isInstalled())throw new Error(`${this.name} requires a local CLI environment, but the CLI was not found or is not configured correctly.`);let f=[],l=[],p=t[t.length-1],g="";if(p&&typeof p.content=="string")g=p.content;else if(p&&Array.isArray(p.content)){let v=[];for(let h of p.content)if(h.type==="text")v.push(h.text);else if(h.type==="image"){let C=this.serializeImageBlockToPromptToken(h);C&&v.push(C)}g=v.join(`
19
+ `)}let y={...this.acpClientOptions,onSessionUpdate:i(v=>{let h=v.update,C=v.sessionId;if(!("sessionUpdate"in h))return;let m=C?this._activeStreams.get(C):void 0;if(m)switch(h.sessionUpdate){case"agent_message_chunk":if(h.content?.type==="text"){let E=h.content.text;m.output.text+=E,m.streamOptions?.onTextDelta?.(E)}break;case"tool_call":{let E="{}",w=h.arguments??h.parameters;w&&(E=typeof w=="string"?w:JSON.stringify(w)),m.streamOptions?.onToolInputDelta?.(h.title,E);let j=`
20
+ > [Tool Use] ${h.title}: ${E}
21
+ `;m.output.text+=j,m.streamOptions?.onTextDelta?.(j);break}case"tool_call_update":if(h.status){let E=`> [Tool Result] ${h.status}
22
+
23
+ `;m.output.text+=E,m.streamOptions?.onTextDelta?.(E)}break}},"onSessionUpdate")},T=s?.sessionId??"default";this._client||(this._client=new st(y),await this._client.connect());let d=this._sessionMap.get(T);d||(d=await this._client.createNewSession(),this._sessionMap.set(T,d));let b={text:""};this._activeStreams.set(d,{streamOptions:s,output:b});let k;try{k=await this._client.prompt(g,d,a,{model:s?.modelOverride,reasoningEffort:c})}catch(v){if(!(v instanceof Error&&v.name==="AbortError"))throw v}finally{this._activeStreams.delete(d)}return b.text&&f.push({type:"text",text:b.text}),{textBlocks:f,toolBlocks:l,thinkingBlocks:[],usage:Zr(k?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as ti}from"node:child_process";import at from"node:process";var ve=class{static{i(this,"CLIExecutor")}config;_installedCache=null;constructor(t){this.config=t}async isInstalled(){return this._installedCache!==null?this._installedCache:(this._installedCache=await this.checkInstalled(),this._installedCache)}async*execute(t){let n=this.buildArgs(t),o={...at.env,...this.config.env},s=at.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=ti(s,n,{cwd:this.config.cwd??at.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:at.platform!=="win32"}),u="";a.stderr?.on("data",l=>{u+=l.toString()});let c=!1,f=i(()=>{c||Be(a)},"abortHandler");t.signal?.addEventListener("abort",f),a.on("exit",()=>{c=!0});try{yield*this.parseOutputStream(a.stdout,t.signal),u.trim()&&console.error(`[CLIExecutor] stderr: ${u.trim()}`)}finally{t.signal?.removeEventListener("abort",f),c||await Be(a)}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let s=o.split(`
24
+ `);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let u=this.parseLine(a.trim());u&&(yield u)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as ni}from"node:child_process";import oi from"node:process";async function ut(e){try{let t=oi.platform==="win32",n=ni(t?`${e}.cmd`:e,["--version"]);return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}i(ut,"checkCliCommandInstalled");var ct=class extends ve{static{i(this,"GeminiCLIExecutor")}model;constructor(t){super({command:"gemini",baseArgs:["--output-format","stream-json","--approval-mode","yolo"],timeout:3e5,...t}),this.model=t?.model??"gemini-2.5-pro"}async checkInstalled(){return ut("gemini")}buildArgs(t){let n=["-m",t.model??this.model];return t.sessionId?(n.push("-r",t.sessionId),n.push(t.prompt)):n.push("-p",t.prompt),[...n,...this.config.baseArgs]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=t.timestamp?Date.parse(t.timestamp):Date.now();switch(t.type){case"init":return{type:"session_start",timestamp:n,sessionId:t.session_id??"",model:t.model??this.model,raw:t};case"message":return{type:"message",timestamp:n,role:t.role,content:t.content??"",delta:t.delta,raw:t};case"tool_use":return{type:"tool_use",timestamp:n,toolId:t.tool_id??"",toolName:t.tool_name??"",parameters:t.parameters??{},raw:t};case"tool_result":return{type:"tool_result",timestamp:n,toolId:t.tool_id??"",status:t.status==="success"?"success":"error",output:t.output??"",raw:t};case"error":return{type:"error",timestamp:n,errorType:"error",message:t.message??"Unknown error",raw:t};case"result":return{type:"complete",timestamp:n,status:t.status==="success"?"success":"failed",usage:t.stats?{inputTokens:t.stats.input_tokens??0,outputTokens:t.stats.output_tokens??0,totalTokens:t.stats.total_tokens??0}:void 0,raw:t};default:return null}}};import{TransformStream as eo}from"node:stream/web";import{randomUUID as qt}from"node:crypto";function lt(e){let t=new eo,n=new eo,o=t.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,u="",c=qt(),f=new AbortController,l=new Map;(async()=>{try{for(;;){let{done:d,value:b}=await o.read();if(d)break;u+=s.decode(b,{stream:!0});let k=u.split(`
25
+ `);u=k.pop()??"";for(let v of k)if(v.trim())try{let h=JSON.parse(v);g(h).catch(C=>{console.error("[PseudoAcpServer] Failed to handle request:",C)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",v)}}}catch(d){console.error("[PseudoAcpServer] Stream read error:",d)}})();let p=i(async d=>{let b=JSON.stringify(d)+`
26
+ `;await r.write(a.encode(b))},"sendMsg");async function g(d){if(d.method==="initialize")await p({jsonrpc:"2.0",id:d.id,result:{protocolVersion:d.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(d.method==="session/new"||d.method==="sessions/new")c=d.params?.sessionId??qt(),await p({jsonrpc:"2.0",id:d.id,result:{sessionId:c}});else if(d.method==="session/prompt"||d.method==="chat/prompt"){let b=new AbortController,k=d.params.sessionId;l.set(k,b);let v=i(()=>b.abort(),"onGlobalAbort");f.signal.addEventListener("abort",v);let C=await y(k,d.params.prompt,typeof d.params.model=="string"?d.params.model:void 0,typeof d.params.effort=="string"?d.params.effort:void 0,b.signal).finally(()=>{l.delete(k),f.signal.removeEventListener("abort",v)});await p({jsonrpc:"2.0",id:d.id,result:C.usage?{stopReason:C.stopReason,usage:C.usage}:{stopReason:C.stopReason}})}else if(d.method==="session/cancel"||d.method==="chat/cancel"){let b=l.get(d.params.sessionId);b&&b.abort(),d.id!==void 0&&await p({jsonrpc:"2.0",id:d.id,result:{}})}else d.id!==void 0&&await p({jsonrpc:"2.0",id:d.id,result:{}})}i(g,"handleRequest");let y=i(async(d,b,k,v,h)=>{let C=b.find(m=>m.type==="text")?.text??"";try{let m=e.execute({prompt:C,model:k,reasoningEffort:v,sessionId:d==="default"?void 0:d,signal:h});for await(let E of m){let w=T(E);if(w&&await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:w}}),E.type==="complete")return{stopReason:h.aborted?"cancelled":"end_turn",usage:E.usage}}return{stopReason:h.aborted?"cancelled":"end_turn"}}catch(m){return h.aborted||m instanceof Error&&m.name==="AbortError"?{stopReason:"cancelled"}:(console.error("[PseudoAcpServer] Error executing prompt:",m),await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:d,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
27
+ [Fatal Error: ${m}]
28
+ `}}}}),{stopReason:"end_turn"})}},"executePrompt"),T=i(d=>{switch(d.type){case"message":if(d.role==="assistant"&&d.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:d.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:d.toolName,arguments:d.parameters,status:"running",toolCallId:d.toolId||qt()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:d.toolId,status:d.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
29
+ [Error: ${d.message}]
30
+ `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:i(()=>{f.abort(),t.readable.cancel().catch(()=>{}),n.writable.abort().catch(()=>{})},"abort"),executor:e}}i(lt,"createPseudoAcpServer");import to from"node:fs";import no from"node:os";import oo from"node:path";var ri="gpt-5.4",ii="auto-gemini-3",si=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ai=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function ro(e){let t=new Set,n=[];for(let o of e){let r=o.trim();if(!r)continue;let s=r.toLowerCase();t.has(s)||(t.add(s),n.push(r))}return n}i(ro,"dedupePreserveOrder");function ui(){let e=oo.join(no.homedir(),".codex","config.toml");try{return to.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(ui,"readCodexConfiguredModel");function ci(){let e=oo.join(no.homedir(),".gemini","settings.json");try{let t=JSON.parse(to.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}i(ci,"readGeminiConfiguredModel");function ke(){return ui()||ri}i(ke,"getCodexCliDefaultModel");function be(){return ci()||ii}i(be,"getGeminiCliDefaultModel");function Le(){return ro([ke(),...si])}i(Le,"getCodexCliKnownModels");function Ne(){return ro([be(),...ai])}i(Ne,"getGeminiCliKnownModels");var Yt=be(),li=Ne(),fi={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},ft=class extends ye{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:Yt,models:li.filter(t=>t!==Yt).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new ct({model:Yt});this.acpClientOptions=lt(t)}getCapabilityProfile(){return V(fi)}serializeImageBlockToPromptToken(t){return/\s/.test(t.path)?(console.warn(`[gemini-cli] Image path contains whitespace and cannot be safely passed via @<path> syntax \u2014 dropping image block. Path: ${JSON.stringify(t.path)}`),null):`@${t.path}`}};function di(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}i(di,"buildReasoningEffortArgs");var dt=class extends ve{static{i(this,"CodexCLIExecutor")}model;constructor(t){super({command:"codex",baseArgs:["exec","--json","--full-auto"],timeout:3e5,...t}),this.model=t?.model??"gpt-5.4"}async checkInstalled(){return ut("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=di(t.reasoningEffort);return t.sessionId?["exec","resume",t.sessionId,...n,...o,t.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,t.prompt]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=Date.now();switch(t.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:t.thread_id??"",model:this.model,raw:t};case"item.completed":return t.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:t.item.text??"",raw:t}:t.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:t.item.id,toolName:"Bash",parameters:{command:t.item.command},raw:t}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:t.usage?{inputTokens:t.usage.input_tokens,outputTokens:t.usage.output_tokens,totalTokens:t.usage.input_tokens+t.usage.output_tokens}:void 0,raw:t};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:t.type,message:t.message??"Unknown error",raw:t};default:return null}}};var Qt=ke(),pi=Le(),pt=class extends ye{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:Qt,models:pi.filter(t=>t!==Qt).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new dt({model:Qt});this.acpClientOptions=lt(t)}};import{existsSync as _i,readFileSync as Ti}from"node:fs";import Ee from"node:path";import{fileURLToPath as Ci}from"node:url";var io=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],so=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","provider-budget","provider-toggle","prompt-only","none"],ao=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],uo=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],co=["native","image-input-native","cli-bridge","image-input-cli-bridge"],lo=["count-tokens","models-list","minimal-message","unsupported"];function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Z,"isPlainObject");function ce(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}i(ce,"requireString");function je(e,t){if(e!==void 0)return ce(e,t)}i(je,"optionalString");function te(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}i(te,"optionalNumber");function I(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}i(I,"optionalBoolean");function fo(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,o)=>ce(n,`${t}[${o}]`))}}i(fo,"optionalStringArray");function gi(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=ce(r,`${t}.${o}`);return n}i(gi,"optionalStringMap");function mi(e,t){if(e!==void 0){if(typeof e!="string"||!uo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${uo.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(mi,"optionalReasoningPreset");function Zt(e,t){if(typeof e!="string"||!io.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${io.join(", ")}, got ${JSON.stringify(e)}`);return e}i(Zt,"requireReasoningCapability");function hi(e,t){if(typeof e!="string"||!so.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${so.join(", ")}, got ${JSON.stringify(e)}`);return e}i(hi,"requireEffortStrategy");function yi(e,t){if(e!==void 0){if(typeof e!="string"||!ao.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ao.join(", ")}, got ${JSON.stringify(e)}`);return e}}i(yi,"optionalThinkingStrategy");function po(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=hi(e.effortStrategy,`${t}.effortStrategy`),o=mi(e.reasoningPreset,`${t}.reasoningPreset`),r=yi(e.thinkingStrategy,`${t}.thinkingStrategy`),s=je(e.defaultEffort,`${t}.defaultEffort`),a=gi(e.effortAliases,`${t}.effortAliases`),u=fo(e.disabledEfforts,`${t}.disabledEfforts`),c=fo(e.localRejectEfforts,`${t}.localRejectEfforts`),f=I(e.allowCustomEffort,`${t}.allowCustomEffort`),l=I(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=I(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),g=I(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),y=I(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),T=I(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),d=I(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),b=I(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),k={effortStrategy:n};if(o!==void 0&&(k.reasoningPreset=o),r!==void 0&&(k.thinkingStrategy=r),s!==void 0&&(k.defaultEffort=s),a!==void 0&&(k.effortAliases=a),u!==void 0&&(k.disabledEfforts=u),c!==void 0&&(k.localRejectEfforts=c),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);k.supportedEfforts=e.supportedEfforts.map((v,h)=>{if(!Z(v))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${h}] must be an object`);return{value:ce(v.value,`${t}.supportedEfforts[${h}].value`),...je(v.description,`${t}.supportedEfforts[${h}].description`)!==void 0?{description:je(v.description,`${t}.supportedEfforts[${h}].description`)}:{},...I(v.isDefault,`${t}.supportedEfforts[${h}].isDefault`)!==void 0?{isDefault:I(v.isDefault,`${t}.supportedEfforts[${h}].isDefault`)}:{},...I(v.isUserVisible,`${t}.supportedEfforts[${h}].isUserVisible`)!==void 0?{isUserVisible:I(v.isUserVisible,`${t}.supportedEfforts[${h}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!Z(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let v={};for(let[h,C]of Object.entries(e.budgetByEffort))v[h]=te(C,`${t}.budgetByEffort.${h}`)??0;k.budgetByEffort=v}return f!==void 0&&(k.allowCustomEffort=f),l!==void 0&&(k.supportsReasoningEffort=l),p!==void 0&&(k.supportsReasoningSummary=p),g!==void 0&&(k.supportsEncryptedReasoningReplay=g),y!==void 0&&(k.supportsAdaptiveThinking=y),T!==void 0&&(k.supportsManualThinkingBudget=T),d!==void 0&&(k.supportsDisabledThinking=d),b!==void 0&&(k.requiresEffortBetaHeader=b),k}i(po,"validateReasoningProfile");function go(e,t){let n=e.reasoningProfile,o=e.reasoningCapabilityV2;if(n!==void 0&&o!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?po(n,`${t}.reasoningProfile`):po(o,`${t}.reasoningCapabilityV2`)}i(go,"validateReasoningProfileField");function vi(e,t){if(typeof e!="string"||!co.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${co.join(", ")}, got ${JSON.stringify(e)}`);return e}i(vi,"requireProfileName");function ki(e,t){if(typeof e!="string"||!lo.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${lo.join(", ")}, got ${JSON.stringify(e)}`);return e}i(ki,"requireVerifyStrategy");function bi(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ce(e.id,`${t}.id`),o=je(e.displayName,`${t}.displayName`),r=te(e.contextWindow,`${t}.contextWindow`),s=te(e.maxOutputTokens,`${t}.maxOutputTokens`),a=te(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),u=I(e.replayReasoningContent,`${t}.replayReasoningContent`),c=I(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=te(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),l=e.reasoningCapability===void 0?void 0:Zt(e.reasoningCapability,`${t}.reasoningCapability`),p=go(e,t),g={id:n};return o!==void 0&&(g.displayName=o),r!==void 0&&(g.contextWindow=r),s!==void 0&&(g.maxOutputTokens=s),a!==void 0&&(g.thinkingBudgetCap=a),l!==void 0&&(g.reasoningCapability=l),p!==void 0&&(g.reasoningProfile=p),u!==void 0&&(g.replayReasoningContent=u),c!==void 0&&(g.strictThinkingSignature=c),f!==void 0&&(g.streamMaxDurationMs=f),g}i(bi,"validateModelDescriptor");function Ei(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=Zt(r,`${t}.${o}`);return n}i(Ei,"validateModelReasoningCapabilities");function xi(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=I(e.cliBridge,`providers.${t}.cliBridge`),o=ce(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=Zt(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=go(e,`providers.${t}`),a=vi(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=ki(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&u!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${u}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=te(e.contextWindow,`providers.${t}.contextWindow`),f=te(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),l=te(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),p=I(e.supportsThinking,`providers.${t}.supportsThinking`),g=Ei(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),y=je(e.model,`providers.${t}.model`);if(n&&(y!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&y===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let T;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);T=e.models.map((b,k)=>bi(b,`providers.${t}.models[${k}]`))}let d={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return s!==void 0&&(d.reasoningProfile=s),y!==void 0&&(d.model=y),T!==void 0&&(d.models=T),c!==void 0&&(d.contextWindow=c),f!==void 0&&(d.maxOutputTokens=f),l!==void 0&&(d.thinkingBudgetCap=l),p!==void 0&&(d.supportsThinking=p),g!==void 0&&(d.modelReasoningCapabilities=g),n&&(d.cliBridge=!0),d}i(xi,"validateProviderEntry");function mo(e){if(!Z(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=ce(e.updatedAt,"updatedAt");if(!Z(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,r]of Object.entries(e.providers))n[o]=xi(r,o);return{version:1,updatedAt:t,providers:n}}i(mo,"validateProviderCapabilitiesJson");var Pi=Object.freeze({native:ue,"image-input-native":Nn,"cli-bridge":Oe,"image-input-cli-bridge":jn}),gt=null;function Ri(){if(process.env.KODAX_BUNDLED==="true")return Ee.join(Ee.dirname(process.execPath),"provider-capabilities.json");let e=Ee.dirname(Ci(import.meta.url)),t=[Ee.join(e,"provider-capabilities.json"),Ee.join(Ee.dirname(e),"provider-capabilities.json")];for(let n of t)if(_i(n))return n;return t[0]}i(Ri,"resolveJsonPath");function Si(e){if(e.models){for(let t of e.models)t.reasoningProfile&&ho(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&ho(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}i(Si,"deepFreezeSnapshot");function ho(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}i(ho,"freezeReasoningProfile");function wi(e){if(e==="gemini-cli"){let t=be();return{model:t,models:Ne().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=ke();return{model:t,models:Le().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}i(wi,"resolveCliBridgeModels");function Mi(e,t){let n=Pi[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=wi(e),s={model:r.model,models:r.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let o={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(o.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(o.models=t.models),t.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(o.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(o.maxOutputTokens=t.maxOutputTokens),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}i(Mi,"buildSnapshot");function yo(){if(gt)return gt;let e=Ri(),t;try{let r=Ti(e,"utf8");t=JSON.parse(r)}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let n=mo(t),o={};for(let[r,s]of Object.entries(n.providers))o[r]=Si(Mi(r,s));return gt=Object.freeze(o),gt}i(yo,"getProviderSnapshots");import Ai from"@anthropic-ai/sdk";var L=yo();function K(e,t={}){let n=L[e];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...t}}i(K,"buildProviderConfig");var en=class extends B{static{i(this,"AnthropicProvider")}name="anthropic";config=K("anthropic",{strictThinkingSignature:!0});buildClient(){return new Ai({apiKey:this.getApiKey()})}},tn=class extends B{static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=K("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},nn=class extends B{static{i(this,"ZaiCodingProvider")}name="zai-coding";config=K("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},on=class extends B{static{i(this,"KimiCodeProvider")}name="kimi-code";config=K("kimi-code",{baseUrl:"https://api.kimi.com/coding/"})},rn=class extends B{static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=K("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},sn=class extends B{static{i(this,"MimoCodingProvider")}name="mimo-coding";config=K("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},an=class extends B{static{i(this,"MimoProvider")}name="mimo";config=K("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},un=class extends B{static{i(this,"ArkCodingProvider")}name="ark-coding";config=K("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},cn=class extends W{static{i(this,"OpenAIProvider")}name="openai";config=K("openai")},ln=class extends W{static{i(this,"DeepSeekProvider")}name="deepseek";config=K("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},fn=class extends W{static{i(this,"KimiProvider")}name="kimi";config=K("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0})},dn=class extends W{static{i(this,"QwenProvider")}name="qwen";config=K("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},pn=class extends W{static{i(this,"ZhipuProvider")}name="zhipu";config=K("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},z={anthropic:i(()=>new en,"anthropic"),openai:i(()=>new cn,"openai"),deepseek:i(()=>new ln,"deepseek"),kimi:i(()=>new fn,"kimi"),"kimi-code":i(()=>new on,"kimi-code"),qwen:i(()=>new dn,"qwen"),zhipu:i(()=>new pn,"zhipu"),"zhipu-coding":i(()=>new tn,"zhipu-coding"),"zai-coding":i(()=>new nn,"zai-coding"),"minimax-coding":i(()=>new rn,"minimax-coding"),"mimo-coding":i(()=>new sn,"mimo-coding"),mimo:i(()=>new an,"mimo"),"ark-coding":i(()=>new un,"ark-coding"),"gemini-cli":i(()=>new ft,"gemini-cli"),"codex-cli":i(()=>new pt,"codex-cli")},gn=process.env.KODAX_PROVIDER??"zhipu-coding",vo=new Map;function Di(e){if(N(e))return L[e].apiKeyEnv}i(Di,"resolveApiKeyEnvForProvider");function ko(e){let t=e??gn,n=z[t];if(!n)throw new M(`Unknown provider: ${t}. Available: ${Object.keys(z).join(", ")}`,t);let o=Di(t),r=o?process.env[o]:void 0,s=vo.get(t);if(s&&s.apiKey===r)return s.instance;let a=n();return vo.set(t,{apiKey:r,instance:a}),a}i(ko,"getProvider");function bo(e){return N(e)?!!process.env[L[e].apiKeyEnv]:!1}i(bo,"isProviderConfigured");function Eo(e){return N(e)?L[e].model:null}i(Eo,"getProviderModel");function xo(e,t){if(!N(e))return"unknown";let n=L[e],o=t??n.model;return n.models?.find(s=>s.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(xo,"getProviderConfiguredReasoningCapability");function _o(e){return N(e)?V(L[e].capabilityProfile):null}i(_o,"getProviderConfiguredCapabilityProfile");function To(){let e=[];for(let t of Object.keys(z)){let n=L[t];e.push({name:t,model:n.model,models:n.models?[n.model,...n.models.map(o=>o.id)]:[n.model],configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:V(n.capabilityProfile)})}return e}i(To,"getProviderList");function Co(e){let t=L[e];return t?t.models?[t.model,...t.models.map(n=>n.id)]:[t.model]:[]}i(Co,"getProviderModels");function N(e){return e in z}i(N,"isProviderName");function mn(e){return{id:e.model}}i(mn,"makeDefaultDescriptor");function Fe(e,t,n){let o=n.id===t.model;return{provider:e,model:n.id,displayName:n.displayName??n.id,supportsThinking:t.supportsThinking??!1,reasoningCapability:n.reasoningCapability??t.reasoningCapability,reasoningProfile:n.reasoningProfile??t.reasoningProfile,contextWindow:n.contextWindow??t.contextWindow,maxOutputTokens:n.maxOutputTokens??t.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap??t.thinkingBudgetCap,isDefault:o}}i(Fe,"effectiveCapabilities");function mt(e){let t=L[e];if(!t)return[];let n=t.models??[],o=n.find(s=>s.id===t.model),r=n.filter(s=>s.id!==t.model);return[o??mn(t),...r]}i(mt,"getProviderModelDescriptors");function ht(e,t){let n=L[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?Fe(e,n,o):t===n.model?Fe(e,n,mn(n)):Fe(e,n,{id:t})}i(ht,"getModelCapabilities");function yt(){let e=[];for(let t of Object.keys(z)){let n=L[t];e.push(Fe(t,n,mn(n)));for(let o of n.models??[])e.push(Fe(t,n,o))}return e}i(yt,"listBuiltinModelCapabilities");var Oi=new Set(["compat","sdk"]),Ii=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Ro(e){return e.reasoningProfile??e.reasoningCapabilityV2}i(Ro,"getConfiguredReasoningProfile");function $i(e){return e==="anthropic"?"count-tokens":"models-list"}i($i,"defaultVerifyStrategyForProtocol");function vt(e){if(e)return e.effortStrategy==="none"?"none":e.effortStrategy==="prompt-only"?"prompt-only":e.thinkingStrategy==="anthropic-adaptive"?"native-adaptive":e.effortStrategy==="provider-budget"?"native-budget":e.effortStrategy==="provider-toggle"?"native-toggle":"native-effort"}i(vt,"legacyCapabilityFromReasoningProfile");function Bi(e,t,n){if(n===!1)return"none";switch(t){case"none":case"prompt-only":return"none";case"native-toggle":return e==="anthropic"?"generic-thinking-toggle":void 0;case"native-budget":return e==="anthropic"?"anthropic-budget":"qwen-hybrid-thinking";case"native-effort":return e==="anthropic"?"claude-adaptive-max":"openai-chat-reasoning";case"native-adaptive":return e==="anthropic"?"claude-adaptive-max":void 0;default:return n!==!0?void 0:e==="anthropic"?"generic-thinking-toggle":void 0}}i(Bi,"legacyReasoningPresetForProtocol");function Po(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}i(Po,"isSimpleReasoning");function Li(e,t){if(e==="none")return He("none");let n=i(u=>u==="off"?"none":u,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,s=o.includes("none"),a=o.map(u=>u===r?{value:u,isDefault:!0}:{value:u});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",thinkingStrategy:"provider-toggle",...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...s?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{},supportsReasoningEffort:!0}}i(Li,"buildReasoningProfileFromSimple");function So(e,t,n,o){let r=Po(n)?n:void 0,s=n!==void 0&&!Po(n)?n:void 0;if(o?.supportsThinking===!1)return He("none");if(e)return{...e,...s??{}};if(r!==void 0)return Li(r,o?.protocol??"openai");let a=t??(o?Bi(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?He(a,s):void 0}i(So,"resolveCustomReasoningProfile");function kt(e){return So(Ro(e),e.reasoningPreset,e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})}i(kt,"resolveCustomProviderReasoningProfile");function vn(e,t,n){return So(Ro(e),e.reasoningPreset,e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}i(vn,"resolveCustomModelReasoningProfile");function Ni(e,t,n){if(typeof e=="string")return{id:e};let o=vn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Ni,"customModelDescriptorToFull");function Ke(e){if(!e.name||!e.baseUrl||!e.apiKeyEnv||!e.model)throw new Error(`Custom provider requires name, baseUrl, apiKeyEnv, and model. Got: ${JSON.stringify({name:e.name,baseUrl:e.baseUrl,apiKeyEnv:e.apiKeyEnv,model:e.model})}`);if(e.protocol!=="anthropic"&&e.protocol!=="openai")throw new Error(`Unknown protocol "${e.protocol}" for custom provider "${e.name}". Must be "anthropic" or "openai".`);if(e.userAgentMode!==void 0&&!Oi.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.verifyStrategy!==void 0){if(!Ii.has(e.verifyStrategy))throw new Error(`Unknown verifyStrategy "${e.verifyStrategy}" for custom provider "${e.name}". Must be one of "count-tokens" | "models-list" | "minimal-message" | "unsupported".`);if(e.protocol==="openai"&&e.verifyStrategy==="count-tokens")throw new Error(`Custom provider "${e.name}": verifyStrategy="count-tokens" requires Anthropic protocol; got protocol="openai". Use "models-list" or "minimal-message" for OpenAI-compat.`)}}i(Ke,"validateCustomProviderConfig");function ji(e){let t=e.models?.length?e.models.map(s=>Ni(s,e.protocol,e.supportsThinking)):void 0,n=kt(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??vt(n)??"none",r=e.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:e.apiKeyEnv,model:e.model,baseUrl:e.baseUrl,models:t,userAgentMode:e.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:e.capabilityProfile,contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,thinkingBudgetCap:e.thinkingBudgetCap,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??$i(e.protocol)}}i(ji,"buildProviderConfig");function bt(e){Ke(e);let t=ji(e);return e.protocol==="anthropic"?new hn(e.name,t):new yn(e.name,t)}i(bt,"createCustomProvider");var hn=class extends B{static{i(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},yn=class extends W{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var q=new Map,kn=new Map,Fi=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function wo(e){return e.reasoningCapability!==void 0&&Fi.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}i(wo,"hasThinkingReasoningConfig");function Ki(e){if(e.supportsThinking!==!1)return;let t=wo(e),n=(e.models??[]).some(o=>typeof o!="string"&&wo(o));(t||n)&&console.warn(`[kodax] Custom provider "${e.name}": its reasoning config (provider- or per-model reasoningCapability / reasoningProfile / reasoning / reasoningPreset) is ignored because supportsThinking is false (thinking stays off). Set supportsThinking: true to enable thinking, or remove the reasoning config.`)}i(Ki,"warnOnIgnoredReasoningCapability");function Mo(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(Ke(r),t.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in z&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),Ki(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>bt(r))}q.clear(),kn.clear();for(let[r,s]of n)q.set(r,s);for(let[r,s]of o)kn.set(r,s)}i(Mo,"registerCustomProviders");function Et(e){let t=kn.get(e);return t?t():void 0}i(Et,"getCustomProvider");function _e(e){return q.has(e)}i(_e,"isCustomProviderName");function xt(){return[...q.keys()]}i(xt,"getCustomProviderNames");function Ao(){let e=[];for(let[t,n]of q){let o=!!process.env[n.apiKeyEnv],r=kt(n),s=(n.models??[]).map(u=>typeof u=="string"?u:u.id),a=n.model&&s.length?[...new Set([n.model,...s])]:[n.model];e.push({name:t,model:n.model,models:a,configured:o,reasoningCapability:n.supportsThinking===!1?"none":n.reasoningCapability??vt(r)??"none",capabilityProfile:V(n.capabilityProfile??ue),custom:!0})}return e}i(Ao,"getCustomProviderList");function Do(e){let t=q.get(e);if(!t)return;let n=(t.models??[]).map(o=>typeof o=="string"?o:o.id);return t.model&&n.length?[...new Set([t.model,...n])]:[t.model]}i(Do,"getCustomProviderModels");function Oo(e,t,n){if(typeof e=="string")return{id:e};let o=vn(e,t,n),r=n===!1&&e.reasoningCapability!==void 0?{...e,reasoningCapability:"none"}:e;return o?{...r,reasoningProfile:o}:r}i(Oo,"customDescriptorToFull");function _t(e){let t=q.get(e);if(!t)return;let n=(t.models??[]).map(s=>Oo(s,t.protocol,t.supportsThinking)),o=n.find(s=>s.id===t.model)??{id:t.model},r=n.filter(s=>s.id!==t.model);return[o,...r]}i(_t,"getCustomProviderModelDescriptors");function xe(e,t){let n=q.get(e);if(!n)return;let o=t===n.model,r=kt(n),a=(n.models??[]).map(f=>Oo(f,n.protocol,n.supportsThinking)).find(f=>f.id===t)??(o?{id:n.model}:void 0);if(!a)return;let u=n.supportsThinking===!1?r:a.reasoningProfile??r,c=n.supportsThinking===!1?"none":a.reasoningCapability??vt(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(c!=="none"&&c!=="prompt-only"),reasoningCapability:c,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(xe,"getCustomModelCapabilities");function Io(e){let t=q.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}i(Io,"getCustomProviderVerifyMetadata");function Tt(){let e=[];for(let[t,n]of q){let o=xe(t,n.model);o&&e.push(o);for(let r of n.models??[]){let s=typeof r=="string"?r:r.id;if(s===n.model)continue;let a=xe(t,s);a&&e.push(a)}}return e}i(Tt,"listCustomProviderModelCapabilities");var ne=new Map,Ui=0;function bn(e){let t=ne.get(e);if(!(!t||t.length===0))return t[t.length-1]}i(bn,"getActiveRuntimeProviderRegistration");function Wi(e){for(let[t,n]of ne){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?ne.delete(t):ne.set(t,o);return}}}i(Wi,"removeRuntimeProviderRegistration");function $o(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(N(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(_e(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Ui}`,name:n,factory:t},r=ne.get(n)??[];return ne.set(n,[...r,o]),()=>{Wi(o.id)}}i($o,"registerModelProvider");function Ct(e){let t=bn(e);return t?t.factory():void 0}i(Ct,"getRuntimeModelProvider");function Ue(e){return bn(e)!==void 0}i(Ue,"isRuntimeModelProviderName");function Pt(){return Array.from(ne.keys()).filter(e=>bn(e)!==void 0)}i(Pt,"getRuntimeModelProviderNames");function Bo(){ne.clear()}i(Bo,"clearRuntimeModelProviders");function En(e){if(N(e))return z[e]();let t=Ct(e);if(t)return t;let n=Et(e);if(n)return n;let o=St();throw new Error(`Unknown provider: ${e}. Available: ${o.join(", ")}`)}i(En,"resolveProvider");function Rt(e){return N(e)||Ue(e)||_e(e)}i(Rt,"isKnownProvider");function St(){let e=Object.keys(z),t=Pt(),n=xt();return[...new Set([...e,...t,...n])]}i(St,"getAvailableProviderNames");function We(e){return N(e)?mt(e):_t(e)??[]}i(We,"resolveProviderModelDescriptors");function wt(e,t){return N(e)?ht(e,t):xe(e,t)}i(wt,"resolveModelCapabilities");function Lo(){return[...yt(),...Tt()]}i(Lo,"listAllModelCapabilities");function zi(e){if(N(e)){let t=L[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Ue(e))return Io(e)}i(zi,"getProviderVerifyMetadata");async function No(e,t){let n=zi(e);if(!n&&!Rt(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${St().join(", ")}`};if(n?.verifyStrategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider "${e}" does not support credential verification (cli-bridge or strategy marked unsupported)`};if(n&&!process.env[n.apiKeyEnv])return{ok:!1,error:"unconfigured",strategy:n.verifyStrategy,durationMs:0,approxTokensSpent:0,message:`Environment variable "${n.apiKeyEnv}" is not set for provider "${e}"`};let o;try{o=En(e)}catch(r){return{ok:!1,error:"unconfigured",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(r?.message??r).slice(0,240)}}try{return await o.verifyCredential(t)}catch(r){return{ok:!1,error:"unknown",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(r?.message??r).slice(0,240)}}}i(No,"verifyProviderCredential");async function jo(e,t){if(!Rt(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=We(e);return n.length===0?{ok:!1,source:"failed",error:`Provider "${e}" has no static model list`,durationMs:0}:{ok:!0,source:"static",models:n.map(r=>r.id),durationMs:0}}i(jo,"listProviderModels");function Xi(e){let t=e.model??We(e.provider)[0]?.id,n=t?wt(e.provider,t)?.reasoningProfile:void 0;if(!n)return{effort:void 0,configuredEffort:void 0,adjusted:!1};let o=e.rejectedEfforts&&e.rejectedEfforts.length>0?It(n,e.rejectedEfforts):n,r=De({capability:o,sessionEffort:e.desiredEffort}),s=r.effectiveEffort;return s!==void 0&&e.rejectedEfforts?.includes(s)&&(s=void 0),{effort:s,configuredEffort:r.configuredEffort,adjusted:s!==r.configuredEffort}}i(Xi,"resolveWireEffort");var Fo={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-v4-flash":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.028},"deepseek-v4-pro":{inputPer1M:1.68,outputPer1M:3.36,cachePer1M:.14}},kimi:{"k2.5":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},zhipu:{"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function xn(e,t,n){let o=n?.[e]?.[t];return o||Fo[e]?.[t]}i(xn,"getCostRate");function _n(e,t,n,o=0){let r=t/1e6*e.inputPer1M,s=n/1e6*e.outputPer1M,a=e.cachePer1M?o/1e6*e.cachePer1M:0;return r+s+a}i(_n,"calculateCost");function Vi(){return{records:[],retries:[]}}i(Vi,"createCostTracker");function Tn(e,t){let n={timestamp:Date.now(),provider:t.provider,waitMs:t.waitMs,reason:t.reason,source:t.source};return{records:e.records,retries:[...e.retries,n]}}i(Tn,"recordRetry");function Cn(e,t,n){let o=xn(t.provider,t.model,n),r=(t.cacheReadTokens??0)+(t.cacheWriteTokens??0),s=o?_n(o,t.inputTokens,t.outputTokens,r):0,a={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,cost:s,role:t.role};return{records:[...e.records,a],retries:e.retries}}i(Cn,"recordUsage");function Gi(e){let t=0,n=0,o=0,r=0,s=0,a=0,u={},c={};for(let p of e.records){t+=p.cost,n+=p.inputTokens,o+=p.outputTokens,r+=p.cacheReadTokens+p.cacheWriteTokens,s+=p.cacheReadTokens,a+=p.cacheWriteTokens;let g=u[p.provider];u[p.provider]={cost:(g?.cost??0)+p.cost,calls:(g?.calls??0)+1,inputTokens:(g?.inputTokens??0)+p.inputTokens,outputTokens:(g?.outputTokens??0)+p.outputTokens};let y=p.role??"default",T=c[y];c[y]={cost:(T?.cost??0)+p.cost,calls:(T?.calls??0)+1,inputTokens:(T?.inputTokens??0)+p.inputTokens,outputTokens:(T?.outputTokens??0)+p.outputTokens}}let f=0;for(let p of e.retries)f+=p.waitMs;let l=r>0?s/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:l,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:f,byProvider:u,byRole:c}}i(Gi,"getSummary");function Mt(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}i(Mt,"formatCost");function Hi(e){let t=[];if(t.push(`Session Cost: ${Mt(e.totalCost)} (${e.callCount} calls)`),t.push(`Tokens: ${e.totalInputTokens.toLocaleString()} in / ${e.totalOutputTokens.toLocaleString()} out`),e.totalCacheTokens>0){let r=(e.cacheHitRate*100).toFixed(0);t.push(`Cache: ${e.totalCacheTokens.toLocaleString()} tokens (${e.totalCacheReadTokens.toLocaleString()} read / ${e.totalCacheWriteTokens.toLocaleString()} write, ${r}% hit rate)`)}if(e.retryCount>0){let r=(e.retryWaitMs/1e3).toFixed(1);t.push(`Retries: ${e.retryCount} (${r}s total wait)`)}t.push("");let n=Object.entries(e.byProvider).sort((r,s)=>s[1].cost-r[1].cost);if(n.length>0){t.push("By Provider:");for(let[r,s]of n)t.push(` ${r}: ${Mt(s.cost)} (${s.calls} calls, ${s.inputTokens.toLocaleString()} in / ${s.outputTokens.toLocaleString()} out)`);t.push("")}let o=Object.entries(e.byRole).sort((r,s)=>s[1].cost-r[1].cost);if(o.length>1){t.push("By Role:");for(let[r,s]of o)t.push(` ${r}: ${Mt(s.cost)} (${s.calls} calls)`)}return t.join(`
31
+ `)}i(Hi,"formatCostReport");var Ko={inputTokens:0,outputTokens:0,totalTokens:0},Ji=3e4;async function qi(e){let t=new AbortController,n=e.timeoutMs??Ji,o=e.costTracker,r,s=i(c=>{r||(r=c),t.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),n),u=i(()=>s("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?s("parent"):e.abortSignal.addEventListener("abort",u,{once:!0}));try{let c=await e.provider.stream([...e.messages],[],e.system,e.reasoning??{effort:"none"},{modelOverride:e.model,onRetryAfter:i(y=>{o&&(o=Tn(o,{provider:y.provider,waitMs:y.waitMs,reason:y.reason,source:y.source}))},"onRetryAfter")},t.signal),f=c.usage??Ko,l=c.textBlocks??[],p=c.toolBlocks??[],g=l.map(y=>y.text).join("");return p.length>0?{text:g,usage:f,costTracker:o,stopReason:"error",error:new Error(`sideQuery: provider returned ${p.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=Cn(o,{provider:e.provider.name,model:e.model,inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cachedReadTokens,cacheWriteTokens:f.cachedWriteTokens,role:e.querySource})),{text:g,usage:f,costTracker:o,stopReason:Yi(c.stopReason)})}catch(c){let f=c instanceof Error?c:new Error(String(c)),l="error";return t.signal.aborted&&(l=r==="timeout"?"timeout":"aborted"),{text:"",usage:Ko,costTracker:o,stopReason:l,error:f}}finally{clearTimeout(a),e.abortSignal&&e.abortSignal.removeEventListener("abort",u)}}i(qi,"sideQuery");function Yi(e){return e==="max_tokens"?"max_tokens":"end_turn"}i(Yi,"mapStopReason");export{Q as a,M as b,Pe as c,At as d,Dt as e,Ot as f,Uo as g,Wo as h,zo as i,Re as j,Xo as k,Vo as l,Ve as m,It as n,Go as o,Ho as p,Jo as q,qo as r,Yo as s,le as t,Pn as u,Rn as v,Nt as w,fe as x,Je as y,Ae as z,Sn as A,er as B,wn as C,De as D,tr as E,ir as F,se as G,ae as H,jt as I,qe as J,Ye as K,Bn as L,Ln as M,gr as N,mr as O,de as P,Qe as Q,H as R,br as S,Un as T,ge as U,me as V,Ut as W,Wt as X,he as Y,zt as Z,Ie as _,B as $,W as aa,ke as ba,be as ca,Le as da,Ne as ea,L as fa,z as ga,gn as ha,ko as ia,bo as ja,Eo as ka,xo as la,_o as ma,To as na,Co as oa,N as pa,mt as qa,ht as ra,yt as sa,Ke as ta,bt as ua,Mo as va,Et as wa,_e as xa,xt as ya,Ao as za,Do as Aa,_t as Ba,xe as Ca,Tt as Da,$o as Ea,Ct as Fa,Ue as Ga,Pt as Ha,Bo as Ia,En as Ja,Rt as Ka,St as La,We as Ma,wt as Na,Lo as Oa,No as Pa,jo as Qa,Xi as Ra,Fo as Sa,xn as Ta,_n as Ua,Vi as Va,Tn as Wa,Cn as Xa,Gi as Ya,Mt as Za,Hi as _a,qi as $a};
@@ -0,0 +1,17 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{t as W,z as q}from"./chunk-Z3ZXV3DZ.js";import{Da as _,Ea as I}from"./chunk-SVEJFERZ.js";import{$a as v,Ja as b,j as k,k as x}from"./chunk-S4GVQO3W.js";import{$d as R,Qc as S,Rc as E,Wc as T,ae as w,ce as A,de as O,ee as g}from"./chunk-PRIBJN5E.js";import{a as i}from"./chunk-V4WSBIXB.js";import{join as Ae}from"node:path";var L=["You generate KodaX Dynamic Workflow scripts.","Return JSON only. Do not wrap the answer in prose.","For simple tasks that do not benefit from multiple agents, return:",'{"action":"decline","reason":"..."}',"For complex tasks, return:",'{"action":"generate","manifest":{...},"source":"async function run(wf, args) { ... }","approvalSummary":"..."}',"Generated source may only coordinate agents through wf and args.","Generated source must return displayable final text for the user.","Never use import, require, process, fs, child_process, network APIs, shell commands, or direct file access."].join(`
3
+ `),$=12e4,B="KODAX_WORKFLOW_GENERATION_TIMEOUT_SEC",U="KODAX_WORKFLOW_GENERATION_TIMEOUT_MS",J=64,H=2,V=2e3,X=[{name:"default"},{name:"variant-results",finalText:i((e,t)=>`Variant smoke child report from ${e} (${t}).`,"finalText"),synthesizeText:"Variant smoke synthesis report."},{name:"unverified-success",status:i(()=>"completed_unverified","status"),finalText:i(e=>`Smoke result for ${e}: completed with verification warnings.`,"finalText"),synthesizeText:"Smoke synthesis: completed with verification warnings."},{name:"empty-args-rerun",args:i(()=>({}),"args")}],Q=["- classify-and-act: first classify a mixed request, then route to the right worker behavior.","- fan-out-and-synthesize: split independent areas, files, hypotheses, reviewers, or perspectives; run them with wf.parallel, then wf.synthesize.","- adversarial-verification: produce or inspect a candidate, then have an independent verifier attack assumptions, evidence, and edge cases.","- generate-and-filter: ask several generators for distinct candidates, then filter/dedupe/rank before synthesis.","- tournament: compare competing approaches or answers and use synthesis as the judge.","- loop-until-done: run bounded follow-up rounds when findings should drive the next prompt.","- review or audit combines fan-out-and-synthesize with adversarial-verification: fan independent reviewers out across the dimensions, then pipe each finding straight into a verifier that tries to refute it before synthesis. A review with no verification stage ships findings a single reviewer's blind spot would have hidden."],Y=[{id:"import",pattern:/\bimport\s*(?:\(|['"*{]|\w+\s+from\b)/},{id:"require",pattern:/\brequire\s*\(/},{id:"process",pattern:/\bprocess\s*(?:\.|\[)/},{id:"fs",pattern:/\b(?:node:)?fs\b/},{id:"child_process",pattern:/\bchild_process\b/},{id:"shell",pattern:/\b(?:exec|spawn|execFile)\s*\(/},{id:"fetch",pattern:/\bfetch\s*\(/},{id:"Deno",pattern:/\bDeno\s*(?:\.|\[)/},{id:"Bun",pattern:/\bBun\s*(?:\.|\[)/},{id:"globalThis-index",pattern:/\bglobalThis\s*\[/}];function Z(e=process.env,t){let n=k(t?.workflow?.generationTimeoutSec,"timeouts.workflow.generationTimeoutSec");if(n!==void 0)return n;let r=x(e[B]);if(r!==void 0)return r;let s=e[U];if(s===void 0||s.trim().length===0)return $;let o=Number(s);return!Number.isFinite(o)||o<=0?$:Math.floor(o)}i(Z,"resolveWorkflowGenerationTimeoutMs");function ee(e,t){if(typeof e!="object"||e===null)throw new Error(`${t} must be an object`);return e}i(ee,"readRecord");function M(e,t){let n=e[t];if(typeof n!="string"||n.trim().length===0)throw new Error(`workflow generation ${t} must be a non-empty string`);return n}i(M,"readNonEmptyString");function te(e){let t=e.trim(),n=/^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(t);if(n?.[1])return n[1].trim();let r=t.indexOf("{"),s=t.lastIndexOf("}");if(r>=0&&s>r)return t.slice(r,s+1);throw new Error("workflow generation output did not contain a JSON object")}i(te,"extractJsonText");function ne(e){let t=te(e);return ee(JSON.parse(t),"workflow generation output")}i(ne,"parseGenerationJson");function re(e){if(typeof e=="string"){let n=e.trim();return n.length>0?n:void 0}if(typeof e!="object"||e===null)return;let t=e;for(let n of["name","id","title","phase"]){let r=t[n];if(typeof r=="string"&&r.trim().length>0)return r.trim()}}i(re,"normalizePhaseEntry");function se(e){return e.split(/(?:->|\u2192|,|\n)/).map(t=>t.trim()).filter(t=>t.length>0)}i(se,"splitPhaseString");function oe(e){if(typeof e!="object"||e===null)return e;let t=e,n=t.phases,r;if(Array.isArray(n)){let s=n.map(re);s.every(o=>o!==void 0)&&(r=s)}else if(typeof n=="string"){let s=se(n);s.length>0&&(r=s)}return r?{...t,phases:r}:e}i(oe,"normalizeGeneratedManifestCandidate");function ie(e){return e.match(/\bwf\.(?:runAgent|spawnAgent|synthesize)\s*\(/g)?.length??0}i(ie,"estimateDirectAgentCalls");function ae(e,t){let n=e.maxConcurrency*Math.max(1,e.phases.length)+2,r=ie(t)+2,s=Math.min(J,Math.max(e.maxAgents,n,r));return s>e.maxAgents?{...e,maxAgents:s}:e}i(ae,"reserveGeneratedWorkflowAgentCapacity");function m(e){let t="",n=0,r=["code"],s=[0];for(;n<e.length;){let o=e[n],l=e[n+1];if(r[r.length-1]==="template"){if(o==="\\"){t+=" ",n+=2;continue}if(o==="`"){t+=" ",n+=1,r.pop(),s.pop();continue}if(o==="$"&&l==="{"){t+=" ",n+=2,r.push("code"),s.push(0);continue}t+=o===`
4
+ `?`
5
+ `:" ",n+=1;continue}if(o==="/"&&l==="/"){for(t+=" ",n+=2;n<e.length&&e[n]!==`
6
+ `;)t+=" ",n+=1;continue}if(o==="/"&&l==="*"){for(t+=" ",n+=2;n<e.length;){if(e[n]==="*"&&e[n+1]==="/"){t+=" ",n+=2;break}t+=e[n]===`
7
+ `?`
8
+ `:" ",n+=1}continue}if(o==='"'||o==="'"){let c=o;for(t+=" ",n+=1;n<e.length;){let f=e[n];if(t+=f===`
9
+ `?`
10
+ `:" ",n+=1,f==="\\"){n<e.length&&(t+=e[n]===`
11
+ `?`
12
+ `:" ",n+=1);continue}if(f===c)break}continue}if(o==="`"){t+=" ",n+=1,r.push("template"),s.push(0);continue}if(o==="{"){s[s.length-1]+=1,t+=o,n+=1;continue}if(o==="}"){if(s[s.length-1]>0){s[s.length-1]-=1,t+=o,n+=1;continue}if(r.length>1){t+=" ",n+=1,r.pop(),s.pop();continue}t+=o,n+=1;continue}t+=o??"",n+=1}return t}i(m,"stripGeneratedSourceLiterals");function le(e,t){for(let n=t+1;n<e.length;n+=1){let r=e[n];if(r==="\\"){n+=1;continue}if(r==="`")return!1;if(r==="$"&&e[n+1]==="{")return!0}return!1}i(le,"templateLiteralHasExpression");function ce(e){let t=m(e),n=/\bwf\s*\.\s*(wait|snapshot|send|stop)\s*\(/g,r;for(;(r=n.exec(t))!==null;){let s=r[1];if(!s)continue;let o=t.indexOf("(",r.index);if(o<0)continue;let l=o+1;for(;/\s/.test(e[l]??"");)l+=1;let c=e[l];if(!(c==="`"&&le(e,l))&&(c==='"'||c==="'"||c==="`"))return{method:s}}}i(ce,"findLiteralWorkflowTaskTarget");function C(e){return e!==void 0&&/[A-Za-z0-9_$]/.test(e)}i(C,"isIdentifierPart");function j(e){let t=m(e),n=/\basync\s+function\s+run\s*\([^)]*\)\s*\{/.exec(t);if(!n)return;let r=t.indexOf("{",n.index);if(r<0)return;let s=0;for(let o=r;o<t.length;o+=1){let l=t[o];if(l==="{"&&(s+=1),l==="}"&&(s-=1,s===0))return{start:r+1,end:o}}}i(j,"findRunBodyRange");function P(e,t){let n=m(e),r=1;for(let s=t.start;s<t.end;s+=1){let o=n[s];if(o==="{"){r+=1;continue}if(o==="}"){r-=1;continue}if(r===1&&n.startsWith("return",s)&&!C(n[s-1])&&!C(n[s+6])){let l=s+6,c=0;for(let f=l;f<t.end;f+=1){let p=n[f];if((p==="("||p==="["||p==="{")&&(c+=1),(p===")"||p==="]"||p==="}")&&(c-=1),c===0&&(p===";"||p===`
13
+ `||p==="\r"))return e.slice(l,f).trim()}return e.slice(l,t.end).trim()}}}i(P,"findTopLevelReturnExpression");function F(e){let t=j(e);if(t)return P(e,t)}i(F,"findOuterRunReturnExpression");function ue(e){let t=j(e);if(!t)return[];let n=m(e),r=[],s=t.start,o=1;for(let c=t.start;c<t.end;c+=1){let f=n[c];if(f==="{"||f==="("||f==="["){o+=1;continue}if(f==="}"||f===")"||f==="]"){o-=1;continue}if(f===";"&&o===1){let p=e.slice(s,c+1).trim();p&&r.push(p),s=c+1}}let l=e.slice(s,t.end).trim();return l&&r.push(l),r}i(ue,"findOuterRunStatements");function fe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}i(fe,"escapeRegExp");function de(e,t){let n=/^[A-Za-z_$][A-Za-z0-9_$]*$/.exec(t.trim())?.[0];if(!n)return!1;let r=fe(n),s=new RegExp(`^\\s*(?:const|let|var)\\s+${r}\\s*=\\s*(?:await\\s+)?wf\\s*\\.\\s*artifact\\b`),o=new RegExp(`^\\s*${r}\\s*=\\s*(?:await\\s+)?wf\\s*\\.\\s*artifact\\b`);return ue(e).some(l=>s.test(l)||o.test(l))}i(de,"isReturnedArtifactHandle");function N(e,t,n,r){let s=0;for(let o=t;o<e.length;o+=1){let l=e[o];if(l===n&&(s+=1),l===r&&(s-=1,s===0))return o}}i(N,"findMatchingDelimiter");function pe(e,t,n){let r=0;for(let s=t;s<n;s+=1){let o=e[s];if(o==="("||o==="["||o==="{"){r+=1;continue}if(o===")"||o==="]"||o==="}"){r-=1;continue}if(o===","&&r===0)return s}}i(pe,"findTopLevelComma");function he(e){let t=m(e),n=/^\s*(?:await\s+)?wf\s*\.\s*phase\s*\(/.exec(t);if(!n)return;let r=t.indexOf("(",n.index);if(r<0)return;let s=N(t,r,"(",")");if(s===void 0)return;let o=pe(t,r+1,s);if(o===void 0)return;let l=e.slice(o+1,s).trim(),c=m(l),f=c.indexOf("=>");if(f<0)return;let p=f+2,a=c.slice(p).search(/\S/);if(a<0)return;let u=p+a;if(c[u]!=="{")return l.slice(u).trim();let d=N(c,u,"{","}");if(d!==void 0)return P(l,{start:u+1,end:d})}i(he,"findPhaseCallbackReturnExpression");function D(e,t){return new RegExp(`^(?:await\\s+)?wf\\s*\\.\\s*${t}\\b`).test(e.trim())}i(D,"isDirectWorkflowCall");function G(e,t){let n=t.trim();if(/^(?:undefined|null|void\s+0|\{\s*\}|\[\s*\]|''|""|``)$/.test(n)||D(n,"artifact")||de(e,n))return!1;if(D(n,"phase")){let r=he(n);return r!==void 0&&G(n,r)}return!0}i(G,"isDisplayableReturnExpression");function me(e){let t=F(e);return t?G(e,t):!1}i(me,"hasDisplayableRunReturn");function we(e){try{A(e,{filename:"generated-workflow.js",requireAsyncRun:!0,checkSourcePolicy:!1})}catch(t){let n=t instanceof Error?t.message:String(t),s=/Unexpected (identifier|string|token|end of input)|Invalid or unexpected token/i.test(n)?" \u2014 a prompt string likely has an unescaped quote or apostrophe; wrap that string in double quotes or backticks, or escape the quote, then retry":"";throw new Error(`workflow generation source has invalid JavaScript syntax: ${n}${s}`)}}i(we,"assertGeneratedWorkflowSyntax");function ge(e){let t=0,n=new Map,r=[],s=i(a=>{t+=1;let u=`smoke-task-${t}-${Math.random().toString(36).slice(2,8)}`;return n.set(u,a),{taskId:u,name:a}},"nextHandle"),o=i((a,u)=>{if(n.has(u))return;throw[...n.entries()].find(h=>h[1]===u)?new Error(`wf.${a}("${u}") used an agent name, but workflow task APIs require the taskId returned by spawnAgent/runAgent. Store the handle/result and pass handle.taskId or result.taskId. wf.runAgent already returns the completed result; wf.parallel returns the array of results.`):new Error(`wf.${a}("${u}") references an unknown workflow task id`)},"assertKnownTaskId"),l=i(a=>{for(let u of a.evidenceRefs??[]){if(u.startsWith("file:")||u.startsWith("diff:")||u.startsWith("finding:"))continue;if(u.startsWith("task_id:")){let h=u.slice(8).trim();if(h.length===0)throw new Error(`wf.runAgent("${a.name}") evidenceRefs contains empty task_id: reference`);o("evidenceRefs",h);continue}throw[...n.entries()].find(h=>h[1]===u)?new Error(`wf.runAgent("${a.name}") evidenceRefs contains agent name "${u}". Use "task_id:" + result.taskId from the child result.`):new Error(`wf.runAgent("${a.name}") evidenceRefs contains unsupported ref "${u}". Use file:, diff:, finding:, or task_id:<id>.`)}},"assertEvidenceRefs"),c=i((a,u)=>{o("wait",a);let d=n.get(a)??u??a,h=e.status?.(d,a)??"completed";return{taskId:a,name:d,status:h,finalText:e.finalText?.(d,a)??`Smoke result for ${d}: completed, done, verified.`}},"resultFor"),f=i((a,u)=>{o(a,u);let d=n.get(u)??u;return{taskId:u,name:d,status:"completed",lastText:`Smoke snapshot for ${d}`}},"snapshotFor");return{api:{runId:"run-smoke",args:void 0,budget:{total:null,spent:i(()=>0,"spent"),remaining:i(()=>1/0,"remaining")},phase:i(async(a,u)=>u(),"phase"),spawnAgent:i(async a=>(l(a),s(a.name)),"spawnAgent"),runAgent:i(async a=>{l(a);let u=s(a.name),d=c(u.taskId,a.name);if(d.status==="failed"||d.status==="stopped")throw new Error(`workflow task ${d.name} (${d.taskId}) ${d.status}`);return d},"runAgent"),wait:i(async a=>c(a),"wait"),snapshot:i(async a=>f("snapshot",a),"snapshot"),output:i(async a=>f("output",a),"output"),send:i(async a=>{o("send",a)},"send"),stop:i(async a=>{o("stop",a)},"stop"),parallel:i(async a=>Promise.all(a.map(u=>u())),"parallel"),synthesize:i(async()=>({text:e.synthesizeText??"Smoke synthesis: completed, done, verified."}),"synthesize"),artifact:i(async a=>(r.push(a),{name:a}),"artifact"),log:i(()=>{},"log")},artifactCount:i(()=>r.length,"artifactCount")}}i(ge,"createSmokeWorkflowApi");function ke(e,t){if(t>0)return!0;if(typeof e=="string")return e.trim().length>0;if(e==null)return!1;if(typeof e!="object")return!0;if(Array.isArray(e))return e.length>0;let n=e,r=!1,s=n.synthesis;if(typeof s=="string"&&(r=!0,s.trim().length>0))return!0;if(s&&typeof s=="object"){r=!0;let o=s.text;if(typeof o=="string"&&o.trim().length>0)return!0}for(let o of["summary","report","text","result"]){let l=n[o];if(l!==void 0&&(r=!0),typeof l=="string"&&l.trim().length>0)return!0}return r&&Object.keys(n).every(o=>o==="synthesis"||o==="summary"||o==="report"||o==="text"||o==="result")?!1:Object.keys(n).length>0}i(ke,"isSmokeResultDisplayable");async function ye(e){for(let t of X)try{let n=ge(t),r=await O({source:e.source,wf:n.api,args:t.args?.(e.request)??{request:e.request},filename:"generated-workflow-smoke.js",timeoutMs:V});if(!ke(r,n.artifactCount()))throw new Error("run() returned no displayable result or artifact")}catch(n){let r=n instanceof Error?n.message:String(n);throw new Error(`workflow generation source failed safe smoke validation (${t.name}): ${r}`)}}i(ye,"assertGeneratedWorkflowSmoke");function y(e){if(e.trim().length===0)throw new Error("workflow generation source must be non-empty");if(!/\basync\s+function\s+run\s*\(/.test(e))throw new Error("workflow generation source must define async function run(wf, args)");we(e);let t=m(e);for(let r of Y)if(r.pattern.test(t))throw new Error(`forbidden generated workflow token: ${r.id}`);if(/\.\s*output\b/.test(t))throw/\bwf\s*\.\s*output\s*\(/.test(t)?new Error("workflow generation source must use wf.snapshot(taskId) instead of legacy wf.output(taskId)"):new Error("workflow generation source must use finalText/text instead of non-existent .output");let n=ce(e);if(n)throw new Error(`workflow generation source must pass taskId variables to wf.${n.method}(...) instead of string literals; use handle.taskId from wf.spawnAgent(...) or result.taskId from wf.runAgent(...).`);for(let r of t.split(/\r?\n/)){let s=r.search(/\bwf\.artifact\s*\(/);if(s>=0&&!/\b(?:await|return)\b/.test(r.slice(0,s)))throw new Error("workflow generation source must await wf.artifact(...)")}if(!me(e)){let r=F(e),s=r===void 0?"no top-level `return` was found in run() \u2014 a return inside a wf.phase(...) callback does not count":`the top-level return \`${r.slice(0,80)}\` is not displayable \u2014 do not return undefined/null/{}, a bare wf.artifact(...) write, or a wf.phase(...) without a displayable callback return`;throw new Error(`workflow generation source outer run function must return displayable final text (${s})`)}return e}i(y,"validateGeneratedWorkflowSource");function xe(e){let t=e?.trim();return t?["","Referenced skill instructions (authoritative):",t,"","Skill handling requirements:","- Treat the referenced skill instructions above as binding requirements for this workflow generation.","- Preserve skill-specific file layout, naming, and process requirements in child-agent prompts that do the work.",'- Do not replace concrete skill requirements with vague paths such as "or similar"; choose paths from the skill or instruct the child to invoke the skill before acting.']:[]}i(xe,"buildReferencedSkillPromptSection");function z(e,t){return["Task request:",e,...xe(t),"","Available WorkflowApi calls:","- wf.phase(name, async () => ...)","- wf.spawnAgent({ name, prompt, readOnly, modelHint, isolation, evidenceRefs, verification, outputSchema })","- wf.runAgent({ name, prompt, readOnly, modelHint, isolation, evidenceRefs, verification, outputSchema })","- wf.wait(taskId), wf.snapshot(taskId), wf.send(taskId, content), wf.stop(taskId, reason)","- wf.parallel([() => promise], { concurrency })","- wf.synthesize({ inputs, rubric }); inputs may be an array of materials, one already-formatted string, or a named object of materials","- wf.artifact(name, value), wf.log({ message, data })","- Return shapes: wf.runAgent/wf.wait return { taskId, name, status, finalText, structured?, digest?, verification?, usage }; wf.snapshot returns { taskId, name, status, lastText? }; wf.synthesize returns { text }; wf.artifact returns { name, path? }.","- When a spawn declared outputSchema (a JSON-Schema subset of type/enum/required/properties/items/additionalProperties), its parsed and validated object comes back on result.structured, not on the top-level result.","- Read your declared fields off result.structured, for example result.structured.findings. Reading them off the top-level result, or inventing top-level fields like result.findings or result.summary after declaring outputSchema, yields undefined and an empty report, because the validated object lives only on result.structured.","- Task identity rule: taskId is the opaque result.taskId/handle.taskId value, never the agent name string. Do not hardcode task IDs or pass string literals to wf.wait/wf.snapshot/wf.send/wf.stop; pass handle.taskId or result.taskId variables.","- Important naming trap: never use anyVariable.output in generated source. Agent results use finalText; synthesis results use text; task snapshots use lastText.","- Always await asynchronous workflow calls, especially wf.artifact(...), before returning.",'- Treat args as optional rerun input. Read request text with a fallback such as String(args.request || "the original request") or bake stable request context into child prompts.',"- For fan-out, prefer wf.parallel with thunks that call wf.runAgent; if using wf.spawnAgent, always wait or stop each handle so maxConcurrency capacity can release.","- Correct fan-out result pattern: const results = await wf.parallel([...].map((item) => () => wf.runAgent({...})), { concurrency }); then use results[n].finalText or results.map((r) => r.finalText). Do not call wf.wait after wf.runAgent.","- Keep intermediate findings in local variables and pass their finalText/text values forward; artifacts are durable outputs, not mutable args.","- File-writing/implementation requests are not report-only workflows. If the user asks to create, update, land, implement, or write project files, set manifest.readOnly=false, use readOnly:false child agents for the writing phases, give exact target paths in the prompt, and include verification:{ requiresMutation:true, requiredChangedPaths:[...], rejectPreparatoryFinalText:true } whenever target paths are knowable.","- Never put placeholder paths such as vNEXT.md or TODO.md in requiredChangedPaths. If the exact path is not knowable, omit requiredChangedPaths and keep requiresMutation:true.","- A write child must not ask the user to confirm routine filenames or version numbers already inferable from the request/context; it should choose the minimal project-consistent target paths, write them, and report what changed.",'- Prefer shared-cwd for write children. Do not set isolation:"worktree" for writing phases unless the workflow has an explicit merge-back strategy; isolated write evidence is not a delivered project change.',"- The outer run function must return displayable final text, preferably { synthesis: finalText }. Returning only inside a wf.phase callback is invalid. Artifact-only or empty returns are invalid.",'- Also await wf.artifact("final-report", { summary/report/text: finalText }) for durable inspection when a final report is produced.','- For multi-line prompts, rubrics, or report templates inside source, use JavaScript template literals (`...`) or arrays joined with "\\n"; never place raw newlines inside single-quoted or double-quoted strings.',"- Do not ask child agents to emit special transcript marker blocks. KodaX derives child-agent transcript digests after each child finishes; child prompts should focus on the actual work product and final report.","","Minimal source field-usage example; use it for result fields/syntax, not as the default workflow shape:","async function run(wf, args) {",' const first = await wf.runAgent({ name: "first-pass", prompt: String(args.request || ""), readOnly: true });',' const second = await wf.runAgent({ name: "second-pass", prompt: first.finalText, readOnly: true });',' const synthesis = await wf.synthesize({ inputs: [first.finalText, second.finalText], rubric: "Synthesize a final answer." });'," const finalText = synthesis.text;",' await wf.artifact("final-report", { report: finalText });'," return { synthesis: finalText };","}","","Structured-output example; when a child must return machine-readable fields (e.g. a reviewer panel), declare outputSchema and read the fields off result.structured:","async function run(wf, args) {",' const schema = { type: "object", additionalProperties: false, required: ["findings"], properties: { findings: { type: "array", items: { type: "string" } } } };',' const reviewer = await wf.runAgent({ name: "reviewer", prompt: String(args.request || ""), readOnly: true, outputSchema: schema });'," const findings = reviewer && reviewer.structured ? reviewer.structured.findings : [];",' const synthesis = await wf.synthesize({ inputs: findings, rubric: "Rank and dedupe the findings." });'," return { synthesis: synthesis.text };","}","","Canonical write-and-verify pattern for requests that must land project files:","async function run(wf, args) {",' const request = String(args.request || "Implement the requested project change.");'," const targetPaths = Array.isArray(args.targetPaths) ? args.targetPaths.map(String).filter(Boolean) : [];"," const writer = await wf.runAgent({",' name: "implementation-writer",'," prompt: [",' "Implement the requested project change in the real workspace.",',' "Use project conventions, write the files, and do not stop at a plan.",',' targetPaths.length ? "Target paths: " + targetPaths.join(", ") : "Choose the minimal project-consistent target paths.",'," request",' ].join("\\n"),'," readOnly: false,"," verification: {"," requiresMutation: true,"," ...(targetPaths.length ? { requiredChangedPaths: targetPaths } : {}),"," rejectPreparatoryFinalText: true"," }"," });"," const finalText = writer.finalText;",' await wf.artifact("final-report", { report: finalText, verification: writer.verification });'," return { synthesis: finalText, verification: writer.verification };","}","",`Supported pattern ids: ${R.join(", ")}`,"","Pattern selection guidance:",...Q,"- Complex multi-part work should normally include at least two work phases plus a final wf.synthesize barrier.","- Do not collapse independent investigation, verification, ranking, generation/filtering, or iteration into one child agent.","- A generated workflow with only one child agent is appropriate only when the request has one indivisible work product; otherwise decline simple tasks or generate a richer pattern.",'- Use evidenceRefs when one child reviews another child result; reference child results as "task_id:" + result.taskId, never as bare agent names. Use modelHint:"deep" for verifiers, judges, and synthesis-critical workers.',"","Manifest requirements:","- name, description, phases, readOnly, maxAgents, maxConcurrency, optional plannedAgents, optional tokenBudget",'- phases must be a JSON array of non-empty string literals, for example ["investigate","verify","synthesize"]; never return phase objects or a single string',"- maxAgents and maxConcurrency must be positive JSON integers","- plannedAgents is the best estimate of how many child agents this script will normally launch; it is for progress display and must be no larger than maxAgents","- maxAgents is a lifetime total cap for every wf.runAgent, wf.spawnAgent, and wf.synthesize call in the whole run, not the parallel lane count; reserve enough for all phases plus synthesis","- Do not set tokenBudget unless the user explicitly asks for a token/resource budget; omit it for normal complex work","- readOnly must be a JSON boolean","- optional mayUseWorktree when child prompts need isolated worktrees","- patterns must use only supported ids","- Use the same natural language as the task request for manifest description, approvalSummary, child agent prompts, synthesis rubric, and artifact text unless the user explicitly asks otherwise","","Return JSON only."].join(`
14
+ `)}i(z,"buildWorkflowGenerationUserPrompt");async function be(e,t){let n=_(e),r=I(e);if(n.length===0&&r.length===0)return;let s=t.context?.gitRoot??t.context?.executionCwd??process.cwd(),o=t.context?.executionCwd??s,l=S(s);l.size===0&&await E(s);let c={workingDirectory:o,projectRoot:s,environment:{},executeDynamicContext:t.skillDynamicContext?.execute,disableDynamicContext:t.skillDynamicContext?.disable},f=[...n,...r.filter(a=>!n.includes(a)&&l.has(a))];if(f.length===0)return;let p=[];for(let a of n)if(!l.has(a)){let u=l.list().map(d=>d.name).sort().join(", ");throw new Error(`workflow generation referenced unknown skill "${a}". Available skills: ${u||"(none)"}`)}for(let a of f){let u=await l.loadFull(a),d=await T(u,"",c);if(d.disableModelInvocation)throw new Error(`workflow generation referenced disabled skill "${a}"`);p.push(d.content)}return p.join(`
15
+
16
+ `)}i(be,"buildWorkflowGenerationSkillContext");function ve(e){let t=["- Replace result.output from wf.runAgent(...) or wf.wait(...) with result.finalText.","- Replace result.output from wf.synthesize(...) with result.text.",'- Replace hardcoded wf.wait("...")/wf.snapshot("...")/wf.send("...", ...)/wf.stop("...", ...) calls with handle.taskId/result.taskId variables.','- Replace wf.wait("agent-name") after wf.runAgent(...) with captured runAgent/parallel results; wf.wait only accepts taskId values from spawnAgent handles.',"- Preserve the existing phase, fan-out, cross-review, and synthesis topology unless that topology itself is invalid; fix API usage instead of collapsing the workflow.","- Keep the outer run() return displayable, such as { synthesis: finalText }.",'- Fix generated JavaScript harness errors, including ReferenceError, wrong wf.* argument shapes, and multi-line prompts/rubrics that need template literals or "\\n".'];return(/\bwf\s*\.\s*output\s*\(/.test(e.previousOutput)||e.error.includes("wf.snapshot(taskId)"))&&t.splice(2,0,"- Replace wf.output(taskId) with wf.snapshot(taskId) for in-flight task snapshots."),[z(e.request,e.skillContext),"","Your previous output failed KodaX workflow validation.",`Repair attempt: ${e.attempt} of ${e.maxAttempts}.`,`Validation error: ${e.error}`,"","Common contract fixes:",...t,"","Previous output:",e.previousOutput,"","Return corrected JSON only. Keep the same task intent, but make the manifest and source valid."].join(`
17
+ `)}i(ve,"buildWorkflowGenerationRepairPrompt");function Se(e){return/(?:token\s*(?:budget|limit|cap)|budget\s*(?:for|of)?\s*tokens?|\b\d+(?:\.\d+)?\s*(?:k|m)?\s*tokens?\b|\d+(?:\.\d+)?\s*(?:k|m)?\s*令牌|(?:tokens?|令牌).{0,12}(?:预算|上限|限制)|(?:预算|上限|限制).{0,12}(?:tokens?|令牌))/i.test(e)}i(Se,"requestExplicitlyMentionsTokenBudget");function Ee(e,t){if(e.tokenBudget===void 0||t===void 0||Se(t))return e;let{tokenBudget:n,...r}=e;return r}i(Ee,"stripImplicitTokenBudget");function Te(e,t={}){let n=ne(e),r=n.action;if(r==="decline")return{kind:"declined",reason:M(n,"reason"),rawText:e};if(r!=="generate")throw new Error('workflow generation action must be "generate" or "decline"');let s=y(M(n,"source")),o=Ee(ae(w(oe(n.manifest)),s),t.request),l=typeof n.approvalSummary=="string"&&n.approvalSummary.trim().length>0?n.approvalSummary:o.description;return{kind:"generated",manifest:o,source:s,module:g({manifest:o,source:s}),scriptSnapshot:{manifest:o,source:s},approvalSummary:l,rawText:e}}i(Te,"parseWorkflowGeneration");async function Re(e){let t=e.request.trim();if(!t)return{kind:"declined",reason:"Workflow request is empty.",rawText:""};let n=H+1,r=z(t,e.skillContext),s="";for(let o=1;o<=n;o+=1){let l=await e.generateText({system:L,prompt:r,...e.signal?{signal:e.signal}:{}});try{let c=Te(l,{request:t});return c.kind==="generated"&&await ye({source:c.source,request:t}),c}catch(c){if(s=c instanceof Error?c.message:String(c),o>=n)break;r=ve({request:t,...e.skillContext?{skillContext:e.skillContext}:{},previousOutput:l,error:s,attempt:o+1,maxAttempts:n})}}throw new Error(`workflow generation did not produce a valid workflow after ${n} attempts. Last validation error: ${s}`)}i(Re,"generateWorkflow");async function K(e){let t=b(e.options.provider),n=e.options.modelOverride??e.options.model??t.getModel(),r=e.options.effort?.trim();if(e.timeoutMs!==void 0&&e.timeoutSec!==void 0)throw new Error("workflow generation timeoutSec and timeoutMs cannot both be set");let s=e.timeoutMs??k(e.timeoutSec,"workflow generation timeoutSec")??Z(process.env,e.options.timeouts),o=e.skillContext??await be(e.request,e.options);return Re({request:e.request,...o?{skillContext:o}:{},...e.signal?{signal:e.signal}:{},generateText:i(async l=>{let c=[{role:"user",content:l.prompt}],f=await v({provider:t,model:n,system:l.system,messages:c,querySource:"workflow-generation",timeoutMs:s,...r?{reasoning:{effort:r}}:{},...l.signal?{abortSignal:l.signal}:{}});if(!f.text.trim()){let p=f.error?`: ${f.error.message}`:"",a=f.stopReason==="timeout"?` after ${s}ms`:"";throw new Error(`workflow generation failed (${f.stopReason}${a})${p}`)}return f.text},"generateText")})}i(K,"generateWorkflowFromOptions");async function Oe(e){let t=e.source;if(t.kind==="saved")return{module:t.module};if(t.kind==="inline"){let s=w(t.manifest);return y(t.source),{module:g({manifest:s,source:t.source}),scriptSnapshot:{manifest:s,source:t.source}}}let r=await(e.generateWorkflow??K)({request:t.request,options:e.options});return r.kind==="declined"?{declined:r.reason}:{module:r.module,scriptSnapshot:r.scriptSnapshot}}i(Oe,"resolveModule");async function Fe(e){let t=await Oe(e);if("declined"in t)return{kind:"declined",reason:t.declined};let{module:n,scriptSnapshot:r}=t,s=e.now??(()=>Date.now()),o=e.runId??`run-${s().toString(36)}`,l=Ae(e.runsBaseDir,o),c=e.manager??q(),f=W(n,e.options.workflowHostPolicy),p=c.startFromOptions({module:n,args:e.args,options:e.options,runId:o,runDir:l,...r?{scriptSnapshot:r}:{},...e.resumeFromRunDir?{resumeFromRunDir:e.resumeFromRunDir}:{},...e.processMetadata?{processMetadata:e.processMetadata}:{},...e.approval?{approval:e.approval}:{},...e.onEvent?{onEvent:e.onEvent}:{},...e.signal?{signal:e.signal}:{}});return{kind:"started",runId:o,runDir:l,module:n,managed:p,approvalSummary:f,...r?{scriptSnapshot:r}:{}}}i(Fe,"startManagedWorkflow");export{L as a,$ as b,Z as c,y as d,z as e,be as f,Te as g,Re as h,K as i,Fe as j};