@kodax-ai/kodax 0.7.96 → 0.7.97-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +85 -62
  3. package/README_CN.md +57 -67
  4. package/config-templates/config.example.jsonc +0 -14
  5. package/dist/chunks/{agent-7N427EVB.js → agent-J7SHFM5N.js} +1 -1
  6. package/dist/chunks/argument-completer-ZJQOWTIS.js +2 -0
  7. package/dist/chunks/{chunk-ABZDFK2X.js → chunk-2GV6MQ4T.js} +14 -14
  8. package/dist/chunks/{chunk-6QI3GOYG.js → chunk-3PS3YEDS.js} +1 -1
  9. package/dist/chunks/chunk-4VJMQDTH.js +417 -0
  10. package/dist/chunks/{chunk-NI7PBPUR.js → chunk-5DSUVP46.js} +1 -1
  11. package/dist/chunks/chunk-5P7RTSZT.js +21 -0
  12. package/dist/chunks/{chunk-XXNR6S4Q.js → chunk-6ZAQKFIM.js} +1 -1
  13. package/dist/chunks/chunk-7V2QBZ73.js +137 -0
  14. package/dist/chunks/{chunk-C7U542KM.js → chunk-F7DHZH6T.js} +1 -1
  15. package/dist/chunks/{chunk-7IMWOR34.js → chunk-HSRYDDPF.js} +1 -1
  16. package/dist/chunks/chunk-K3DQGSQU.js +372 -0
  17. package/dist/chunks/chunk-NO23K2CB.js +2 -0
  18. package/dist/chunks/{chunk-NKT3B3DR.js → chunk-OT5WHAX4.js} +1 -1
  19. package/dist/chunks/{chunk-YEAUDI6U.js → chunk-QGWHJIO4.js} +1 -1
  20. package/dist/chunks/chunk-QOFFAY5C.js +261 -0
  21. package/dist/chunks/{chunk-4PFZ7BEE.js → chunk-QVDTORL3.js} +11 -11
  22. package/dist/chunks/chunk-QZ4B4AWG.js +473 -0
  23. package/dist/chunks/chunk-RXDS6CNA.js +355 -0
  24. package/dist/chunks/{chunk-WV3DJVW4.js → chunk-VDGPJQL7.js} +135 -135
  25. package/dist/chunks/chunk-VEZ4WHPN.js +641 -0
  26. package/dist/chunks/chunk-ZPPAT25E.js +5 -0
  27. package/dist/chunks/chunk-ZQYWDI4O.js +1 -0
  28. package/dist/chunks/chunk-ZS2GUADU.js +498 -0
  29. package/dist/chunks/{chunk-GN2IY5YE.js → chunk-ZTYZYXGV.js} +1 -1
  30. package/dist/chunks/{chunk-EM4XJBTK.js → chunk-ZZQ4GDVU.js} +1 -1
  31. package/dist/chunks/{client-6WZZTTSV.js → client-MXOJ5XUN.js} +1 -1
  32. package/dist/chunks/{compaction-config-ZMEJU4U7.js → compaction-config-5VZSGKBQ.js} +1 -1
  33. package/dist/chunks/{construction-bootstrap-RX4DMHI7.js → construction-bootstrap-U2ZU2WAT.js} +1 -1
  34. package/dist/chunks/dist-CSLNWLOE.js +2 -0
  35. package/dist/chunks/dist-XXMJMJDU.js +2 -0
  36. package/dist/chunks/host-RUXYZFYN.js +2 -0
  37. package/dist/chunks/readline-helpers-JCVULR4C.js +2 -0
  38. package/dist/chunks/run-manager-DRIM5VNE.js +2 -0
  39. package/dist/chunks/utils-MQEBGKIX.js +2 -0
  40. package/dist/index.d.ts +63 -30
  41. package/dist/index.js +10 -6
  42. package/dist/kodax_bootstrap.js +1 -1
  43. package/dist/kodax_cli.js +1745 -1734
  44. package/dist/kodax_resume.js +32 -35
  45. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  46. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  47. package/dist/native/win32-x64/manifest.json +2 -2
  48. package/dist/sandbox-network-broker.js +77 -77
  49. package/dist/sdk-a2a.d.ts +33 -18
  50. package/dist/sdk-a2a.js +8 -9
  51. package/dist/sdk-agent.d.ts +33 -26
  52. package/dist/sdk-agent.js +1 -1
  53. package/dist/sdk-client.d.ts +40 -0
  54. package/dist/sdk-client.js +2 -0
  55. package/dist/sdk-coding.d.ts +87 -499
  56. package/dist/sdk-coding.js +1 -1
  57. package/dist/sdk-experimental-memory.d.ts +3 -4
  58. package/dist/sdk-experimental-memory.js +1 -1
  59. package/dist/sdk-llm.d.ts +11 -9
  60. package/dist/sdk-llm.js +1 -1
  61. package/dist/sdk-mcp.d.ts +3 -3
  62. package/dist/sdk-mcp.js +1 -1
  63. package/dist/sdk-media.d.ts +3 -1
  64. package/dist/sdk-media.js +1 -1
  65. package/dist/sdk-repl.d.ts +317 -70
  66. package/dist/sdk-repl.js +2 -2
  67. package/dist/sdk-runtime.d.ts +580 -452
  68. package/dist/sdk-runtime.js +1 -1
  69. package/dist/sdk-sandbox.js +1 -1
  70. package/dist/sdk-session.d.ts +13 -9
  71. package/dist/sdk-session.js +1 -1
  72. package/dist/sdk-skills.js +1 -1
  73. package/dist/semantic-worker.js +57 -57
  74. package/dist/types-chunks/{base.d-Bt9lhwSV.d.ts → base.d-ZBOdjDUT.d.ts} +2 -1
  75. package/dist/types-chunks/{bash-prefix-extractor.d-DWFIMg0v.d.ts → bash-prefix-extractor.d-DvswAXKS.d.ts} +136 -66
  76. package/dist/types-chunks/{capability-learning.d-gRtO03f6.d.ts → capability-learning.d-B4pxKwP4.d.ts} +1 -1
  77. package/dist/types-chunks/{capability.d-Ch5Vos33.d.ts → capability.d-DOF3r0fJ.d.ts} +1 -1
  78. package/dist/types-chunks/{capsule.d-Dj1n6s0Y.d.ts → capsule.d-B4atvlxE.d.ts} +7 -19
  79. package/dist/types-chunks/client-contract-A1jdk6xz.d.ts +1993 -0
  80. package/dist/types-chunks/{controller.d-C0IM1Tud.d.ts → controller.d-BkUJ_3sl.d.ts} +1 -1
  81. package/dist/types-chunks/{controller.d-J2t1q8Ly.d.ts → controller.d-yyKajPTi.d.ts} +140 -1380
  82. package/dist/types-chunks/{cost-tracker.d-BWI4lFWn.d.ts → cost-tracker.d-BeaenODW.d.ts} +2 -47
  83. package/dist/types-chunks/{history-retrieval.d-CPN5PMBV.d.ts → history-retrieval.d-JdFfkeF3.d.ts} +2 -2
  84. package/dist/types-chunks/{manager.d-rtmywU9M.d.ts → manager.d-C_20XqCV.d.ts} +8 -1
  85. package/dist/types-chunks/manifest.d-Bw2i-zQi.d.ts +18 -0
  86. package/dist/types-chunks/provider-credential-context.d-BH2OaB1b.d.ts +47 -0
  87. package/dist/types-chunks/provider-request-observation.d-jL8T6wVO.d.ts +34 -0
  88. package/dist/types-chunks/{public-api.d-amBop8Nk.d.ts → public-api.d-Cq8ILMte.d.ts} +52 -13
  89. package/dist/types-chunks/{resolver.d-BrwLoWNr.d.ts → resolver.d-DLY01RHx.d.ts} +4 -2
  90. package/dist/types-chunks/{types.d-CSv0_cZC.d.ts → review-inbox.d-BeaLRNHx.d.ts} +251 -3
  91. package/dist/types-chunks/{shell-command-sets.d-oejwpP_7.d.ts → review-packet.d-D4bbTbq3.d.ts} +46 -3
  92. package/dist/types-chunks/{exec-policy.d-BPESl90L.d.ts → run-manager.d-C7Q71rin.d.ts} +385 -62
  93. package/dist/types-chunks/runtime-client-info-CxnlZlW5.d.ts +175 -0
  94. package/dist/types-chunks/{sdk-session-B6XjHNU1.d.ts → sdk-session-BDFjCpDn.d.ts} +12 -4
  95. package/dist/types-chunks/{side-query.d-DHWG1JZg.d.ts → side-query.d-DTrhVd_r.d.ts} +4 -3
  96. package/dist/types-chunks/trusted-repl-entry-vbUM8R6P.d.ts +445 -0
  97. package/dist/types-chunks/{types.d-CtO8mR1s.d.ts → types.d-BJTN-RZr.d.ts} +5 -5
  98. package/dist/types-chunks/{types.d-BrQMB-hy.d.ts → types.d-BjOq57-z.d.ts} +6 -0
  99. package/dist/types-chunks/types.d-o7t9dds4.d.ts +1484 -0
  100. package/dist/types-chunks/{utils.d-DcznBeQ3.d.ts → utils.d-CWiMhFfu.d.ts} +202 -36
  101. package/docs/CLIENT_CONTRACT.md +441 -0
  102. package/docs/SDK_MIGRATION.md +123 -0
  103. package/docs/SPACE_SDK_SEAMS.md +139 -0
  104. package/package.json +10 -5
  105. package/public_docs/README.md +12 -133
  106. package/public_docs/configuration/config-files.md +8 -14
  107. package/public_docs/sdk/embedder-guide.md +494 -420
  108. package/dist/chunks/argument-completer-FAIHW7HZ.js +0 -2
  109. package/dist/chunks/chunk-66XN5AFU.js +0 -417
  110. package/dist/chunks/chunk-7O2AIFNE.js +0 -373
  111. package/dist/chunks/chunk-DSXUXUZG.js +0 -5
  112. package/dist/chunks/chunk-GYO73UYQ.js +0 -275
  113. package/dist/chunks/chunk-HPCS3LZ5.js +0 -324
  114. package/dist/chunks/chunk-HZYRLIOC.js +0 -137
  115. package/dist/chunks/chunk-SC2ELSUS.js +0 -675
  116. package/dist/chunks/chunk-TEUD5VPJ.js +0 -471
  117. package/dist/chunks/chunk-TYZ2ZAYL.js +0 -487
  118. package/dist/chunks/dist-3UCCMCYR.js +0 -2
  119. package/dist/chunks/dist-F5IWZSAY.js +0 -2
  120. package/dist/chunks/host-W2JJ3V3Q.js +0 -2
  121. package/dist/chunks/run-manager-RBWU3EVE.js +0 -2
  122. package/dist/chunks/utils-DJ4ZFJGL.js +0 -2
  123. package/dist/runtime-worker.js +0 -5381
  124. package/dist/types-chunks/review-inbox.d-CTeUIKda.d.ts +0 -225
  125. package/dist/types-chunks/run-manager.d-hm1XgEou.d.ts +0 -94
  126. package/dist/types-chunks/trusted-repl-entry-D0w5M0UZ.d.ts +0 -323
  127. package/dist/types-chunks/types.d-B1l9pWyX.d.ts +0 -146
@@ -0,0 +1,137 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{a as s}from"./chunk-ONUPGMER.js";import{AsyncLocalStorage as Oe}from"node:async_hooks";import{randomUUID as wn}from"node:crypto";var me=new Oe,Ot=new Oe,No=new Oe,Pn=new Oe,jo=new Oe;function Ri(e,t){return jo.run(e,t)}s(Ri,"runWithProviderRequestAttribution");function Fo(){return jo.getStore()}s(Fo,"currentProviderRequestAttribution");var Tn=new Oe;function Mi(e,t){return Tn.run(e,t)}s(Mi,"runWithProviderRequestRoute");function Ai(e,t){return Pn.run(e,t)}s(Ai,"runWithProviderRequestAbortSignal");function Bo(){return Pn.getStore()}s(Bo,"currentProviderRequestAbortSignal");function Ii(e,t){return me.run(e,t)}s(Ii,"runWithProviderRequestObserver");async function Ko(e,t,n,o=!1){let r=me.getStore();if(!r)return n();let i=Ot.getStore();i?.operationFact&&i.attempts===0&&o&&(i.operationFact={...i.operationFact,model:t,wireObservation:"pending"},r(i.operationFact));let a={provider:e,model:t};try{let u=await No.run(a,n);return ke(a,u),u}catch(u){throw ke(a,void 0,u),u}}s(Ko,"observeProviderAttempt");function Uo(e){let t=e!==null&&typeof e=="object"&&"usage"in e?e.usage:void 0;return t!==null&&typeof t=="object"&&"inputTokens"in t&&"outputTokens"in t?t:void 0}s(Uo,"usageFrom");function ke(e,t,n){if(!e.current||e.current.state!=="started")return;let o=Ot.getStore()?.signal?.aborted||Pn.getStore()?.aborted||n instanceof Error&&n.name==="AbortError";e.current={...e.current,state:n===void 0?"succeeded":o?"cancelled":"failed",endedAt:new Date().toISOString(),usage:Uo(t)},me.getStore()?.(e.current)}s(ke,"finishWire");function Dt(e){return async(t,n)=>{let o=me.getStore(),r=Ot.getStore();if(!o||!r)return e(t,n);let i=No.getStore()??(r.wire??={provider:r.provider});i.current?.state==="started"&&ke(i,void 0,new Error("Provider request replaced.")),r.attempts+=1,i.current={requestId:r.attempts===1&&r.operationFact?r.operationFact.requestId:`physical_${wn()}`,logicalRequestId:r.logicalRequestId,provider:i.provider,model:i.model,purpose:r.purpose,attribution:r.attribution,route:Tn.getStore(),attempt:r.attempts,boundary:"physical_attempt",wireObservation:"observed",dispatch:"dispatched",state:"started",startedAt:new Date().toISOString()},o(i.current);try{let a=await e(t,n);return a.ok||ke(i,void 0,new Error("Provider HTTP request failed.")),a}catch(a){throw ke(i,void 0,a),a}}}s(Dt,"observeProviderFetch");async function Wo(e,t,n,o,r,i){if(!me.getStore())return o();let a={provider:e,purpose:t,attribution:n,logicalRequestId:r??`logical_${wn()}`,attempts:0,signal:i};return Ot.run(a,async()=>{let u=new Date().toISOString();a.operationFact={requestId:`request_${wn()}`,logicalRequestId:a.logicalRequestId,provider:e,purpose:t,attribution:n,route:Tn.getStore(),attempt:1,boundary:"provider_operation",wireObservation:"unavailable",dispatch:"unknown",state:"started",startedAt:u},me.getStore()(a.operationFact);try{let c=await o();return a.wire&&ke(a.wire,c),a.attempts===0&&me.getStore()({...a.operationFact,state:"succeeded",endedAt:new Date().toISOString(),usage:Uo(c)}),c}catch(c){throw a.wire&&ke(a.wire,void 0,c),a.attempts===0&&me.getStore()({...a.operationFact,state:i?.aborted?"cancelled":"failed",endedAt:new Date().toISOString()}),c}})}s(Wo,"observeProviderOperation");import{createHash as Oi}from"node:crypto";var ot=new WeakMap,Di=s(e=>ot.get(e),"getRejectedImageHash");function rt(e,t){let n=ot.get(e);return n&&ot.set(t,n),t}s(rt,"inheritRejectedImage");function zo(e,t=0){if(!e||typeof e!="object"||t>3)return"";let n=e;return[n.message,n.param].filter(o=>typeof o=="string").join(" ").slice(0,8192)+zo(n.error,t+1)}s(zo,"details");function Li(e){if(!e||typeof e!="object")return;let t=e,n=t.source,o=t.image_url,r=t.type==="image"&&n?.type==="base64"?n.data:t.type==="image_url"?o?.url?.match(/^data:image\/[^;]+;base64,(.*)$/)?.[1]:void 0;if(typeof r=="string")return Oi("sha256").update(Buffer.from(r,"base64")).digest("hex")}s(Li,"imageHash");function De(e,t){if(!e||typeof e!="object")return;ot.delete(e);let n=zo(e);if(!/image|图片/i.test(n)||!/decod|invalid|unsupported|format|解析|格式|尺寸/i.test(n))return;let o=n.match(/messages(?:\[\d+\]|\.\d+)(?:\.(?:content|source|image_url|url|data)(?:\[\d+\]|\.\d+)*)+/g)??[],r=new Set;for(let i of o){let a=t,u;for(let c of i.replace(/\[(\d+)\]/g,".$1").split(".")){if(!a||typeof a!="object"||!Object.hasOwn(a,c)){u=void 0;break}a=a[c],u=Li(a)??u}if(!u)return;r.add(u)}r.size===1&&ot.set(e,[...r][0])}s(De,"recordRejectedImage");import{AsyncLocalStorage as $i}from"node:async_hooks";var J=new $i,_n=new WeakMap;function Ni(e,t,n){if(!e||!t)throw new Error("Provider credential scope requires non-empty values.");let o=!0,r={kind:"exact",provider:e,credential:t,isActive:s(()=>o,"isActive")};try{let i=J.run(r,n);return Hi(i)?Promise.resolve(i).finally(()=>{o=!1}):(o=!1,i)}catch(i){throw o=!1,i}}s(Ni,"runWithProviderCredential");function ji(e){let t=Xo(e.allowedProviders),n={kind:"lease",allowedProviders:new Set(t),access:e,controller:new AbortController},o={allowedProviders:t,close(r="credential operation completed"){n.controller.signal.aborted||n.controller.abort(new Error(r))}};return _n.set(o,n),o}s(ji,"createProviderCredentialLeaseScope");function Fi(e,t){let n=_n.get(e);if(!n)throw new Error("Unknown provider credential lease scope.");return J.run(n,t)}s(Fi,"runWithProviderCredentialLeaseScope");function Bi(e){return J.run({kind:"deny"},e)}s(Bi,"runWithoutProviderCredentialScope");function Ki(e,t){let n=J.getStore(),o=n?.kind==="lease"?n:n?.kind==="exact"?n.parentLease:void 0;if(!o)return;Lt(o);let r=Xo(e,!0);for(let u of r)if(!o.allowedProviders.has(u))throw new Error(`Parent credential scope does not allow provider ${u}.`);let i={kind:"lease",allowedProviders:new Set(r),access:o.access,controller:new AbortController,parent:o,...t===void 0?{}:{attribution:t}},a={allowedProviders:r,close(u="derived credential operation completed"){i.controller.signal.aborted||i.controller.abort(new Error(u))}};return _n.set(a,i),a}s(Ki,"deriveCurrentProviderCredentialLeaseScope");function Ui(){let e=J.getStore(),t=e?.kind==="lease"?e:e?.kind==="exact"?e.parentLease:void 0;if(t)return Lt(t),Object.freeze([...t.allowedProviders])}s(Ui,"currentProviderCredentialLeaseProviders");async function ie(e,t,n,o,r){let i=Bo();i&&(n=n===void 0?i:AbortSignal.any([n,i])),n?.throwIfAborted();let a=J.getStore(),u=a?.kind==="lease"?a:a?.kind==="exact"?a.parentLease:void 0;return Wo(e,t,Fo()??u?.attribution,()=>Wi(e,t,n,o),r,n)}s(ie,"withProviderRequestCredential");async function Wi(e,t,n,o){let r=J.getStore();if(!r)return o(n);if(r.kind==="deny")throw new Error(`Provider credential scope does not allow provider ${e}.`);if(r.kind==="exact"&&r.provider===e){if(!r.isActive())throw Ho();return o(n)}let i=r.kind==="lease"?r:r.parentLease;if(!i)throw new Error(`Provider credential scope does not allow provider ${e}.`);if(Lt(i),!i.allowedProviders.has(e))throw new Error(`Provider credential scope does not allow provider ${e}.`);let a=new AbortController,u=Xi([n,a.signal,i.controller.signal,i.access.signal]),c=await i.access.acquire(e,t,u,i.attribution);if(Lt(i),!c)throw new Error("Provider credential broker returned no credential.");let d={kind:"exact",provider:e,credential:c,parentLease:i,isActive:s(()=>!a.signal.aborted&&it(i),"isActive")};try{return await J.run(d,async()=>{try{return await o(u)}catch(f){throw st(f,c,new WeakMap)}})}finally{a.abort(new Error("provider request completed"))}}s(Wi,"withProviderRequestCredentialInternal");function zi(e){let t=J.getStore();return t?.kind==="exact"&&t.provider===e&&t.isActive()?t.credential:void 0}s(zi,"getScopedProviderCredential");function xe(e){let t=J.getStore();if(t)return t.kind==="deny"?!1:t.kind==="exact"?t.provider===e?t.isActive():t.parentLease===void 0?!1:it(t.parentLease)&&t.parentLease.allowedProviders.has(e):it(t)&&t.allowedProviders.has(e)}s(xe,"hasScopedProviderCredentialAuthority");function we(){return J.getStore()!==void 0}s(we,"hasProviderCredentialContext");function Le(e,t){let n=J.getStore();if(!n)return t;if(!(n.kind!=="exact"||!n.isActive()))return n.provider===e?n.credential:void 0}s(Le,"resolveProviderCredential");function Cn(e){let t=J.getStore(),n=t?.kind==="exact"&&t.isActive()?t.credential:void 0;return n?st(e,n,new WeakMap):e}s(Cn,"redactScopedProviderCredential");function Xo(e,t=!1){let n=e.map(o=>o.trim());if(!t&&n.length===0||n.some(o=>o.length===0)||new Set(n).size!==n.length)throw new Error("Provider credential lease scope requires non-empty, unique Providers.");return Object.freeze(n)}s(Xo,"normalizeAllowedProviders");function it(e){return!e.controller.signal.aborted&&e.access.signal?.aborted!==!0&&(e.access.isActive?.()??!0)&&(e.parent===void 0||it(e.parent))}s(it,"isLeaseActive");function Lt(e){if(!it(e))throw Ho()}s(Lt,"assertLeaseActive");function Ho(){return new Error("Provider credential lease scope is no longer active.")}s(Ho,"inactiveCredentialScopeError");function Xi(e){let t=e.filter(n=>n!==void 0);return t.length===1?t[0]:AbortSignal.any(t)}s(Xi,"combineAbortSignals");function Hi(e){return typeof e=="object"&&e!==null&&"then"in e&&typeof e.then=="function"}s(Hi,"isPromiseLike");function Vi(e,t,n){let o=e instanceof DOMException?new DOMException(e.message.split(t).join("[REDACTED_CREDENTIAL]"),e.name.split(t).join("[REDACTED_CREDENTIAL]")):new Error;Object.setPrototypeOf(o,Object.getPrototypeOf(e));let r=Object.getOwnPropertyDescriptor(o,"stack")?.get;delete o.stack,n.set(e,o);for(let i of Reflect.ownKeys(e)){let a=Object.getOwnPropertyDescriptor(e,i);if(i==="stack"&&a?.get&&a.get===r&&(a={configurable:a.configurable,enumerable:a.enumerable,writable:!0,value:e.stack}),a===void 0||!("value"in a))continue;let u=typeof i=="string"?i.split(t).join("[REDACTED_CREDENTIAL]"):i;Object.prototype.hasOwnProperty.call(o,u)||Object.defineProperty(o,u,{...a,value:st(a.value,t,n)})}return rt(e,o)}s(Vi,"redactCredentialError");function st(e,t,n){if(typeof e=="string")return e.split(t).join("[REDACTED_CREDENTIAL]");if(e===null||typeof e!="object")return e;let o=n.get(e);if(o!==void 0)return o;if(e instanceof Error)return Vi(e,t,n);if(Array.isArray(e)){let i=[];n.set(e,i);for(let a of e)i.push(st(a,t,n));return i}let r={};n.set(e,r);for(let[i,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let u=i.split(t).join("[REDACTED_CREDENTIAL]");r[u]=st(a.value,t,n)}return r}s(st,"redactCredentialValue");var le=class extends Error{static{s(this,"KodaXError")}code;constructor(t,n="KODAX_ERROR"){super(t),this.code=n,this.name="KodaXError"}},I=class extends le{static{s(this,"KodaXProviderError")}provider;metadata;constructor(t,n,o){super(t,"PROVIDER_ERROR"),this.provider=n,this.metadata=o,this.name="KodaXProviderError"}},$e=class extends I{static{s(this,"KodaXContextOverflowError")}capacity;requestInputReliefTokens=0;constructor(t,n,o){super("Provider request exceeded its context capacity.",n,o),this.capacity=t,this.name="KodaXContextOverflowError"}},at=class extends le{static{s(this,"KodaXRateLimitError")}retryAfter;metadata;constructor(t,n,o){super(t,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.metadata=o,this.name="KodaXRateLimitError"}},ut=class extends le{static{s(this,"KodaXNetworkError")}isTimeout;constructor(t,n=!1){super(t,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},ct=class extends I{static{s(this,"KodaXReasoningEffortRejectedError")}rejectedEffort;model;constructor(t,n,o,r){super(t,n),this.rejectedEffort=o,this.model=r,this.name="KodaXReasoningEffortRejectedError"}},Sn=class extends le{static{s(this,"KodaXToolCallIdError")}constructor(t){super(t,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var Rn=32768,qi=32e3,Gi=64e3,dt="[Tool Error] No result was recorded for this tool call \u2014 its execution status is unknown (the turn may have been cancelled or the provider switched mid-run). Check whether the tool already produced side effects (files written, commits made) before re-issuing it.",Ji=.5;function lt(e,t,n={}){if(e===void 0)return;let o=n.allowZero===!0;if(!Number.isFinite(e)||(o?e<0:e<=0)){let r=o?"a non-negative finite number":"a positive finite number";throw new Error(`${t} must be ${r}`)}return e===0?0:Math.max(1,Math.floor(e*1e3))}s(lt,"timeoutSecToMs");function Yi(e){if(e===void 0||e.trim().length===0)return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return Math.max(1,Math.floor(t*1e3))}s(Yi,"parseTimeoutSecEnvMs");function Qi(e){if(!e)return;let t={requestTimeoutMs:lt(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:lt(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:lt(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:lt(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}s(Qi,"resolveLlmTimeoutConfig");function $t(e,t){return`${e}/${t??""}`}s($t,"capabilityCacheKey");function Mn(e,t){if(t.length===0)return e;let n=new Set(t),o=e.defaultEffort!==void 0&&n.has(e.defaultEffort);return{...e,...o?{defaultEffort:void 0}:{},supportedEfforts:e.supportedEfforts?.filter(r=>!n.has(r.value)),localRejectEfforts:Array.from(new Set([...e.localRejectEfforts??[],...t]))}}s(Mn,"narrowReasoningProfile");function An(e,t,n){return e[$t(t,n)]?.rejected??[]}s(An,"getRejectedEfforts");function In(e,t,n,o,r,i){let a=$t(t,n),u=e[a],c=u?.rejected.includes(o)?u.rejected:[...u?.rejected??[],o];return{...e,[a]:{rejected:c,source:r,updatedAt:i}}}s(In,"addRejectedEffort");function Zi(e,t,n){if(!t)return{};let o={...e};return delete o[$t(t,n)],o}s(Zi,"removeCacheEntry");function es(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,i=Array.isArray(r.rejected)?r.rejected.filter(c=>typeof c=="string"):[],a=r.source==="probed"?"probed":"observed",u=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:i,source:a,updatedAt:u}}return t}s(es,"sanitizeCapabilityCache");var On=["max","xhigh","high","medium","low","minimal"];function Ne(e,t="auto"){if(e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return[void 0];let n=s(d=>e.effortAliases?.[d]??d,"alias"),o=e.supportedEfforts?.map(d=>n(d.value)),r=On.filter(d=>!e.disabledEfforts?.includes(d)&&(!o||o.includes(d))),i=t==="auto"?e.defaultEffort??e.supportedEfforts?.find(d=>d.isDefault)?.value??"max":t,a=n(i),c=i==="none"||e.disabledEfforts?.includes(i)?[...e.supportsDisabledThinking===!1?[]:["none"],...r.slice().reverse()]:[a,...r.filter(d=>On.indexOf(d)>On.indexOf(a))];return[...new Set(c.filter(d=>!e.localRejectEfforts?.includes(d)&&(d==="none"||!o||o.includes(d)||e.allowCustomEffort))),void 0]}s(Ne,"buildReasoningEffortLadder");function he(e){return e?.effortStrategy==="openai-chat-effort"||e?.effortStrategy==="openai-responses-effort"}s(he,"usesReasoningEffortLadder");var ts=["off","auto","quick","balanced","deep"],Fe=["auto","none","low","medium","high"],Vo={low:6e3,medium:1e4,high:2e4},qo=4096,Dn=[{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"}],Ln=[{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"}],ns=[{value:"none",description:"Disable thinking"},{value:"minimal",description:"Disable thinking",isUserVisible:!1},{value:"low",description:"Low reasoning"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning",isDefault:!0},{value:"xhigh",description:"Alias to high"},{value:"max",description:"Maximum reasoning"}],os=[{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 Nt(e,t={}){return{...rs(e),...t,reasoningPreset:e}}s(Nt,"createReasoningProfileFromPreset");function rs(e){switch(e){case"zai-glm-5.3":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:[{value:"none",description:"Maps to low reasoning"},{value:"minimal",description:"Alias to low",isUserVisible:!1},{value:"low",description:"Low reasoning"},{value:"medium",description:"Alias to high"},{value:"high",description:"High reasoning"},{value:"xhigh",description:"Alias to max"},{value:"max",description:"Maximum reasoning",isDefault:!0}],effortAliases:{none:"low",minimal:"low",minimum:"low",light:"low",medium:"high",xhigh:"max",ultra:"max"},disabledEfforts:["none"],supportsReasoningEffort:!0,supportsDisabledThinking:!1};case"zai-glm-5.2":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"max",supportedEfforts:Ln,effortAliases:{low:"high",medium:"high",xhigh:"max"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-flash-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:ns,effortAliases:{medium:"high",xhigh:"high"},disabledEfforts:["none","minimal"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"deepseek-v4-openai":case"deepseek-v4-pro-openai":return{reasoningPreset:e,effortStrategy:"openai-chat-effort",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:Ln,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:Ln,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:Dn,disabledEfforts:["none","minimal"],supportsDisabledThinking:!0};case"kimi-k3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"provider-toggle",defaultEffort:"high",supportedEfforts:[{value:"none",description:"Disable thinking"},{value:"low",description:"Low thinking effort"},{value:"high",description:"High thinking effort",isDefault:!0},{value:"max",description:"Maximum thinking effort"}],effortAliases:{minimal:"low",minimum:"low",light:"low",medium:"high",xhigh:"max",ultra:"max"},disabledEfforts:["none"],supportsReasoningEffort:!0,supportsDisabledThinking:!0};case"kimi-k2.7-code":case"minimax-m2-always":return{reasoningPreset:e,effortStrategy:"prompt-only",defaultEffort:"high",supportedEfforts:os,localRejectEfforts:["none","minimal"]};case"minimax-m3":return{reasoningPreset:e,effortStrategy:"provider-toggle",thinkingStrategy:"anthropic-adaptive",supportedEfforts:Dn,disabledEfforts:["none","minimal"],supportsAdaptiveThinking:!0,supportsDisabledThinking:!0};case"qwen-hybrid-thinking":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"provider-budget",defaultEffort:"medium",supportedEfforts:Dn,budgetByEffort:{low:6e3,medium:1e4,high:16e3,xhigh:24e3,max:32e3},disabledEfforts:["none","minimal"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"claude-adaptive-xhigh":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"xhigh"},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"claude-adaptive-max":return{reasoningPreset:e,effortStrategy:"anthropic-output-effort",thinkingStrategy:"anthropic-adaptive",defaultEffort:"high",supportedEfforts:[{value:"low"},{value:"medium"},{value:"high",isDefault:!0},{value:"max"}],supportsReasoningEffort:!0,supportsAdaptiveThinking:!0};case"anthropic-budget":return{reasoningPreset:e,effortStrategy:"provider-budget",thinkingStrategy:"anthropic-budget",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"}],budgetByEffort:{low:6e3,medium:1e4,high:16e3},disabledEfforts:["none"],supportsManualThinkingBudget:!0,supportsDisabledThinking:!0};case"openai-chat-reasoning":case"openai-responses-reasoning":return{reasoningPreset:e,effortStrategy:e==="openai-chat-reasoning"?"openai-chat-effort":"openai-responses-effort",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],disabledEfforts:["none"],supportsReasoningEffort:!0,supportsReasoningSummary:!0,supportsEncryptedReasoningReplay:!0};case"codex-cli-effort":return{reasoningPreset:e,effortStrategy:"codex-cli-config",defaultEffort:"medium",supportedEfforts:[{value:"none"},{value:"minimal"},{value:"low"},{value:"medium",isDefault:!0},{value:"high"},{value:"xhigh"}],allowCustomEffort:!0,supportsReasoningEffort:!0};case"none":return{reasoningPreset:e,effortStrategy:"none",thinkingStrategy:"none"}}}s(rs,"createBaseReasoningProfileFromPreset");function Nn(e){return e.reasoningCapability?e.reasoningCapability:e.supportsThinking?"native-toggle":"prompt-only"}s(Nn,"getReasoningCapability");function jn(e){return jt(e).enabled}s(jn,"isReasoningEnabled");function jt(e){if(typeof e=="boolean")return{enabled:e,effort:e?"auto":"none",effortSource:"legacy",taskType:"unknown",executionMode:"implementation"};let t=e?.effort?mt(e.effort):void 0,n=t??(e?.enabled===!0?"auto":"none");return{enabled:n!=="none",effort:n,effortSource:t!==void 0?"explicit":e===void 0?"omitted":"legacy",taskType:e?.taskType??"unknown",executionMode:e?.executionMode??"implementation"}}s(jt,"normalizeReasoningRequest");function mt(e){let t=e.trim().toLowerCase();if(!t)throw new Error("Reasoning effort cannot be empty.");if(/\s/.test(t))throw new Error(`Reasoning effort cannot contain whitespace: "${e}".`);return t==="off"?"none":t}s(mt,"normalizeReasoningEffortValue");function Go(e){switch(e){case"off":return"none";case"auto":return"auto";case"quick":return"low";case"balanced":return"medium";case"deep":return"high"}}s(Go,"mapLegacyReasoningModeToEffortIntent");function is(e){switch(e){case"none":return"off";case"auto":return"auto";case"low":return"quick";case"medium":return"balanced";case"high":return"deep";default:return}}s(is,"effortToLegacyReasoningMode");function Jo(e){let t=e?.trim();if(!t)return{kind:"unset"};let n=mt(t);return n==="auto"||n==="unset"?{kind:"clear"}:{kind:"value",value:n}}s(Jo,"parseReasoningEffortEnv");function ht(e){let t=Jo(e.envEffort),n=[];if(ft(n,e.explicitEffort,"explicit",!0),t.kind==="value"&&n.push({value:t.value,source:"env",isExplicit:!0}),ft(n,e.sessionEffort,"session",!1),e.legacyReasoningMode?n.push({value:Go(e.legacyReasoningMode),source:"legacy",isExplicit:!1}):e.thinking!==void 0&&n.push({value:e.thinking?"auto":"none",source:"legacy",isExplicit:!1}),he(e.capability)){let i=n[0]??{value:"auto",source:"fallback",isExplicit:!1},a={...e.capability,defaultEffort:e.modelDefaultEffort??e.capability.defaultEffort??je(e.capability)??e.providerDefaultEffort??e.fallbackEffort},u=Ne(a,i.value)[0];return{configuredEffort:i.value,effectiveEffort:u,source:i.source,isExplicit:i.isExplicit,diagnostics:[]}}ft(n,e.modelDefaultEffort??e.capability?.defaultEffort??je(e.capability),"model-default",!1),ft(n,e.providerDefaultEffort,"provider-default",!1),ft(n,e.fallbackEffort??gt(e.capability),"fallback",!1);let o=n[0]??{value:"none",source:"fallback",isExplicit:!1};if(o.value==="auto")return{configuredEffort:"auto",effectiveEffort:as(n.slice(1),e.capability),source:o.source,isExplicit:o.isExplicit,diagnostics:[]};let r=Yo(o.value,e.capability,o.isExplicit);return{configuredEffort:o.value,effectiveEffort:r,source:o.source,isExplicit:o.isExplicit,diagnostics:[]}}s(ht,"resolveReasoningEffort");function ss(e){let t=e.currentEffort?mt(e.currentEffort):void 0;if(t&&Qo(t,e.capability))return{effectiveEffort:pt(t,e.capability),preserved:!0};let n=e.capability?.defaultEffort??je(e.capability)??$n(e.capability)??gt(e.capability),o=n&&pt(n,e.capability);return t?{effectiveEffort:o,preserved:!1,diagnostic:o?`Effort ${t} is not supported by the selected model; using ${o}.`:`Effort ${t} is not supported by the selected model; clearing effort.`}:{effectiveEffort:o,preserved:!1}}s(ss,"resolveReasoningEffortForModelSwitch");function ft(e,t,n,o){if(t===void 0)return;let r=mt(t);e.push({value:r,source:n,isExplicit:o})}s(ft,"pushEffortCandidate");function as(e,t){let n=e.find(o=>o.value!=="auto");return n?Yo(n.value,t,n.isExplicit):je(t)??gt(t)}s(as,"resolveAutoEffectiveEffort");function Yo(e,t,n){if(t?.localRejectEfforts?.includes(e)){if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return je(t)??$n(t)??gt(t)??e}if(e==="none")return t?.supportsDisabledThinking===!1?pt(e,t):e;if(Qo(e,t))return pt(e,t);if(n)throw new Error(`Unsupported reasoning effort "${e}" for the selected model.`);return je(t)??$n(t)??gt(t)??e}s(Yo,"validateReasoningEffort");function pt(e,t){return t?.effortAliases?.[e]??e}s(pt,"applyEffortAlias");function Qo(e,t){if(t?.localRejectEfforts?.includes(e))return!1;if(e==="auto"||e==="none"||t?.allowCustomEffort===!0)return!0;let n=us(t);return n.length===0?Fe.includes(e):n.includes(e)||n.includes(pt(e,t))}s(Qo,"isSupportedReasoningEffort");function us(e){return e?.supportedEfforts?.map(t=>t.value)??[]}s(us,"getSupportedEffortValues");function je(e){return e?.supportedEfforts?.find(t=>t.isDefault)?.value}s(je,"getDefaultPresetValue");function $n(e){let t=e?.supportedEfforts?.filter(cs).map(n=>n.value);if(!(!t||t.length===0))return t[Math.floor((t.length-1)/2)]}s($n,"getMiddleVisiblePresetValue");function cs(e){return e.isUserVisible!==!1}s(cs,"isUserVisiblePreset");function gt(e){if(!e||e.effortStrategy==="none"||e.effortStrategy==="prompt-only")return"none";if(!(e.effortStrategy==="anthropic-output-effort"&&e.thinkingStrategy==="anthropic-adaptive"))return"medium"}s(gt,"getFallbackEffortForCapability");function ds(e){switch(e){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}s(ds,"getDefaultThinkingDepthForMode");function Pe(e){switch(e){case"none":return"off";case"low":return"low";case void 0:case"medium":case"auto":return"medium";default:return"high"}}s(Pe,"effortToThinkingDepth");function Te(e,t,n="unknown"){if(t==="off")return 0;let o={...Vo,...e.defaultThinkingBudgets??{}},i=e.taskBudgetOverrides?.[n]?.[t]??o[t];return e.thinkingBudgetCap?Math.min(i,e.thinkingBudgetCap):i}s(Te,"resolveThinkingBudget");function _e(e,t,n=qo){let o=Math.max(1024,t-n);return Math.max(1024,Math.min(e,o))}s(_e,"clampThinkingBudget");function Fn(e){switch(e){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}s(Fn,"mapDepthToOpenAIReasoningEffort");import{AsyncLocalStorage as xs}from"node:async_hooks";function Ce(e){let t=Number(e?.replace(/,/g,""));return Number.isSafeInteger(t)&&t>0?t:void 0}s(Ce,"tokens");function Bn(e){let t=/maximum context length is\s*(\d[\d,]*)\s*tokens/i.exec(e),n=/your prompt contains\s+(at least\s+)?(\d[\d,]*)\s+input tokens/i.exec(e);if(t&&n)return{contextWindow:Ce(t[1]),inputTokens:Ce(n[2]),inputTokensKind:n[1]?"lower_bound":"exact"};if(/upper bound|at least/i.test(e))return{contextWindow:Ce(t?.[1]),inputTokensKind:"unknown"};let o=/Input length\s*\((\d[\d,]*)\).*?maximum context length\s*\((\d[\d,]*)\)/i.exec(e)??/prompt (?:is )?too long:\s*(\d[\d,]*)\s*tokens?\s*>\s*(\d[\d,]*)/i.exec(e)??/exceeds?\s+(\d[\d,]*)\s*tokens?\s*上限\s*(\d[\d,]*)/i.exec(e);if(o)return{inputTokens:Ce(o[1]),contextWindow:Ce(o[2]),inputTokensKind:"exact"};let r=/\((\d[\d,]*)\s+in (?:your|the) (?:prompt|messages)/i.exec(e);return{contextWindow:Ce(t?.[1]),inputTokens:Ce(r?.[1]),inputTokensKind:r?"exact":"unknown"}}s(Bn,"parseContextOverflowFacts");function Zo(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):Zo(t.cause)}s(Zo,"getStatus");function ls(e){if(e instanceof Error)return e.message.toLowerCase();if(typeof e=="string")return e.toLowerCase();if(e&&typeof e=="object"){let t=e;return[t.message,t.error,t.detail,t.body].filter(o=>typeof o=="string").join(" ").toLowerCase()}return""}s(ls,"getMessage");var fs=["reasoning_effort","reasoning effort","reasoninglevel","reasoning_level","reasoning.effort","thinking.effort","thinking.type"],ps=["unsupported","not supported","invalid","does not support","is not one of","not allowed","unknown","unexpected","unrecognized"],gs=["minimal","none","low","medium","high","xhigh","max"];function ms(e){let t=`(?:${fs.map(u=>u.replaceAll(".","\\.")).join("|")})`,n=`(?:${ps.join("|")})`,o="['\"`][^'\"`\\n]{0,80}['\"`]",r="[\\s'\"`:]",i=`(?:${r}|\\b(?:value|parameter|field|for|of|the)\\b|${o})*`,a=`(?:${r}|\\b(?:value|parameter|is)\\b|${o})*`;return new RegExp(`${n}${i}${t}\\b|${t}${a}${n}`).test(e)}s(ms,"namesRejectedEffort");function hs(e,t){if(t!==void 0)return t;for(let n of gs)if(new RegExp(`['"\`]${n}['"\`]`).test(e))return n;return t}s(hs,"extractRejectedEffort");function Be(e,t){let n=Zo(e);if(n!==400&&n!==422)return null;let o=ls(e);if(!o)return null;let r=/(?:unknown|unrecognized|unexpected|unsupported|not supported)\s+(?:parameter|field|argument)s?\s*:?\s*['"`]*(reasoning_effort|reasoning\b|thinking\b|enable_thinking|thinking_budget|budget_tokens)/.exec(o)?.[1]??/\b(enable_thinking|thinking_budget|budget_tokens)\b['"`]*\s+(?:is\s+)?(?:unsupported|not supported)/.exec(o)?.[1]??/does not support\s+(?:the\s+)?['"`]*(reasoning_effort|reasoning|thinking)['"`]*\s+(?:parameter|field)/.exec(o)?.[1];if(r)return{rejectedEffort:t??"*",parameterRejected:!0,parameter:r};if(!ms(o))return null;let i=hs(o,t);return i?{rejectedEffort:i}:null}s(Be,"classifyReasoningEffortRejection");function er(e,t){if(!e)return;if(typeof e.get=="function")return e.get(t)??void 0;let n=e,o=t.toLowerCase(),r=n[t]??n[o]??n[o.replace(/\b\w/g,i=>i.toUpperCase())];if(r!==void 0)return Array.isArray(r)?r[0]:r}s(er,"readHeader");function tr(e){if(!e)return;let t=e.trim();if(t.length===0)return;let n=Number(t);if(!(!Number.isFinite(n)||n<=0))return n}s(tr,"parsePositiveNumber");function ys(e,t){if(!e)return;let n=e.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let r=o-t;return r>0?r:void 0}s(ys,"parseHttpDate");function Ft(e,t){let n=t.baseBackoffMs??1e3,o=t.maxBackoffMs??3e4,r=t.maxHeaderWaitMs??12e4,i=t.now?t.now():Date.now(),a=tr(er(e,"retry-after-ms"));if(a!==void 0){let l=Math.min(a,r);return{type:"header",waitMs:Math.round(l),source:"retry-after-ms",cappedFromHeader:l!==a}}let u=er(e,"retry-after");if(u!==void 0&&u.trim().length>0){let l=tr(u);if(l!==void 0){let m=l*1e3,T=Math.min(m,r);return{type:"header",waitMs:Math.round(T),source:"retry-after-seconds",cappedFromHeader:T!==m}}let h=ys(u,i);if(h!==void 0){let m=Math.min(h,r);return{type:"header",waitMs:Math.round(m),source:"retry-after-date",cappedFromHeader:m!==h}}}let c=n*Math.pow(2,Math.max(0,t.attempt)),d=Math.min(c,o),p=t.withJitter!==!1?Math.random()*.25*d:0;return{type:"backoff",waitMs:Math.round(d+p),source:"exponential-backoff",attempt:t.attempt}}s(Ft,"parseRetryAfter");function yt(e){if(!e||typeof e!="object")return;let t=e;return t.headers??t.response?.headers??t.cause?.headers??t.cause?.response?.headers}s(yt,"extractHeadersFromError");import{AsyncLocalStorage as vs}from"node:async_hooks";var nr=new vs,or=8,rr=32;function bs(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}s(bs,"parsePositiveInt");function Es(){let e=vt()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:bs(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??or;return Math.max(1,Math.min(rr,t))}s(Es,"resolveWorkflowMaxConcurrency");function ks(e,t){return nr.run(e,t)}s(ks,"runWithScopedConfig");function vt(){return nr.getStore()}s(vt,"getRunScopedConfig");function se(e){if(e!==void 0)return e;let t=vt()?.disablePromptCache;return t!==void 0?t:process.env.KODAX_DISABLE_PROMPT_CACHE==="1"}s(se,"resolvePromptCacheDisabled");var ae={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},ir={...ae,multimodalSupport:"image-input"},bt={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},sr={...bt,multimodalSupport:"image-input"};function Bt(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}s(Bt,"normalizeCapabilityProfile");function Z(e){return{...Bt(e)}}s(Z,"cloneCapabilityProfile");function ws(e){if(!e)return;let t=parseInt(e,10);return Number.isFinite(t)&&t>0?t:void 0}s(ws,"parseEnvInt");function Ps(e){switch(e.reasoningPreset){case"zai-glm-5.3":case"zai-glm-5.2":case"deepseek-v4-flash-openai":case"deepseek-v4-pro-openai":case"deepseek-v4-openai":case"deepseek-v4-anthropic":case"qwen-hybrid-thinking":return!0;default:break}return e.effortStrategy==="provider-budget"}s(Ps,"shouldLowerAutoReasoningEffort");function Kt(){return new DOMException("Request aborted","AbortError")}s(Kt,"abortError");async function Ts(e){let[t,n]=await Promise.allSettled([import("@anthropic-ai/sdk"),import("openai")]);return t.status==="fulfilled"&&e instanceof t.value.APIUserAbortError||n.status==="fulfilled"&&e instanceof n.value.APIUserAbortError}s(Ts,"isProviderSdkAbortError");function _s(e,t){return e<=0?Promise.resolve():t?.aborted?Promise.reject(Kt()):new Promise((n,o)=>{let r,i=s(()=>{t&&t.removeEventListener("abort",a)},"cleanup"),a=s(()=>{r&&clearTimeout(r),i(),o(Kt())},"onAbort");t&&t.addEventListener("abort",a,{once:!0}),r=setTimeout(()=>{i(),n()},e)})}s(_s,"waitForRetryDelay");function Kn(e){let t=typeof e=="number"&&Number.isInteger(e)?e:typeof e=="string"&&/^\d{3}$/.test(e)?Number(e):void 0;return t!==void 0&&t>=100&&t<=599?t:void 0}s(Kn,"normalizeHttpStatus");function Un(e,t=0){if(!e||typeof e!="object"||t>4)return;let n=e;return Kn(n.status)??Kn(n.statusCode)??Kn(n.code)??Un(n.cause,t+1)}s(Un,"extractHttpStatus");function ar(e,t=0){return!(e instanceof Error)||t>4?!1:e.name==="TimeoutError"||ar(e.cause,t+1)}s(ar,"hasTypedTimeout");function Ut(e,t=0){if(!e||typeof e!="object"||t>4)return"";let n=e;return typeof n.code=="string"?n.code:typeof n.code=="number"&&Number.isSafeInteger(n.code)?String(n.code):Ut(n.cause,t+1)||Ut(n.error,t+1)}s(Ut,"extractErrorCode");function ur(e,t,n=0){if(!e||typeof e!="object"||n>4)return;let o=e;for(let r of t){let i=o[r];if(typeof i=="string"&&/^[\w.:-]{1,200}$/.test(i))return i}return ur(o.cause,t,n+1)}s(ur,"extractDiagnosticString");function Cs(e){let t=ur(e,["requestId","request_id"]);if(t!==void 0)return t;let n=yt(e),o=["x-request-id","request-id","anthropic-request-id","cf-ray"];for(let r of o){let i=n instanceof Headers?n.get(r)??void 0:n?.[r]??n?.[r.replace(/\b\w/g,u=>u.toUpperCase())],a=Array.isArray(i)?i[0]:i;if(typeof a=="string"&&/^[\w.:-]{1,200}$/.test(a))return a}}s(Cs,"extractRequestId");function Ke(e){if(e instanceof Error)return e.message.toLowerCase();if(e&&typeof e=="object"){let t=e.message;if(typeof t=="string")return t.toLowerCase()}return String(e).toLowerCase()}s(Ke,"getErrorMessage");var ue=class{static{s(this,"KodaXBaseProvider")}requestObservationBoundary="provider_operation";activeLegacyRequestOverride=new xs;pendingLegacyMaxOutputTokensOverride;setMaxOutputTokensOverride(t){this.pendingLegacyMaxOutputTokensOverride=t}getEffectiveMaxOutputTokens(t){let n=this.activeLegacyRequestOverride.getStore()?.maxOutputTokensOverride??this.pendingLegacyMaxOutputTokensOverride;if(typeof n=="number"&&Number.isFinite(n)&&n>0)return n;let o=vt()?.maxOutputTokens,r=(typeof o=="number"&&Number.isFinite(o)&&o>0?o:void 0)??ws(process.env.KODAX_MAX_OUTPUT_TOKENS);if(r!==void 0)return r;let i=this.getModelDescriptor(t)?.maxOutputTokens;return i!==void 0?i:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(t){let n=this.getModelDescriptor(t)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(t){let n=this.getModelDescriptor(t)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(t){let n=this.getModelDescriptor(t)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}getProviderSupportsThinking(){return this.config.supportsThinking}getEffectiveThinkingBudgetCap(t){return this.getModelDescriptor(t)?.thinkingBudgetCap??this.config.thinkingBudgetCap}supportsEphemeralSuffix(){return!1}usesPromptCacheAffinity(){return this.config.promptCacheAffinity===!0}supportsNonStreamingFallback(){return!1}async complete(t,n,o,r,i,a){throw new I(`${this.name} does not support non-streaming fallback`,this.name,{failureCode:"protocol_mismatch",stage:"response_stream"})}isConfigured(){let t=xe(this.name);return t!==void 0?t:Le(this.name,process.env[this.config.apiKeyEnv])!==void 0}async verifyCredential(t){return{ok:!1,error:"unsupported",strategy:this.config.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider class "${this.name}" does not implement verifyCredential()`}}getModel(){return this.config.model}getAvailableModels(){return this.config.models?.length?[...new Set([this.config.model,...this.config.models.map(t=>t.id)])]:[this.config.model]}getModelDescriptor(t){let n=t??this.config.model,o=this.config.models?.find(r=>r.id===n);if(o){let r=o.wireModel?this.config.models?.find(i=>i.id===o.wireModel):void 0;return r?{...r,...o}:o}if(n===this.config.model)return{id:this.config.model}}getWireModelId(t){let n=t??this.config.model;return this.getModelDescriptor(n)?.wireModel??n}getWireModel(t){return this.getWireModelId(t)}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return Z(this.config.capabilityProfile??ae)}getConfiguredReasoningCapability(t){let n=this.getModelDescriptor(t);return n?.reasoningCapability?n.reasoningCapability:Nn(this.config)}getReasoningCapability(t){return this.getConfiguredReasoningCapability(t)}getReasoningProfile(t){return this.getModelDescriptor(t)?.reasoningProfile??this.config.reasoningProfile}shouldFallbackForReasoningError(t,...n){if(Be(t,void 0))return!1;let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase(),i=n.map(u=>u.toLowerCase()).some(u=>o.includes(u)),a=o.includes("parameter")||i;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(t,...n){let o=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.map(a=>a.toLowerCase()).some(a=>o.includes(a))?o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported"):!1}shouldFallbackForForcedToolChoiceError(t){let n=Ke(t);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported")||n.includes("incompatible"))?!0:this.isServerError(t)}isServerError(t){let n=Un(t);if(n!==void 0&&n>=500&&n<=599)return!0;let o=Ke(t);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(t){switch(t){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","none"];case"native-adaptive":return["native-adaptive","none"];case"native-toggle":return["native-toggle","none"];default:return["none"]}}getContextWindow(){return this.getEffectiveContextWindow()}getEffectiveContextWindow(t){let n=this.getModelDescriptor(t)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let t=Le(this.name,process.env[this.config.apiKeyEnv]);if(!t)throw new Error(`${this.config.apiKeyEnv} not set`);return t}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...t){this.shouldLogStreamDiagnostics()&&console.error(...t)}normalizeReasoning(t){return jt(t)}validateExplicitReasoningEffort(t,n){if(t.effortSource!=="explicit")return;let o=t.effort;if(!o||o==="auto")return;let r=Fe.includes(o),i=this.getReasoningProfile(n);if(!i){if(o==="none"||r)return;let f=n?`/${n}`:"";throw new I(`${this.name}${f} does not advertise provider-specific reasoning effort "${o}". Supported stable efforts: ${Fe.join(", ")}.`,this.name,{failureCode:"request_build_failed",stage:"request_build"})}if(i.localRejectEfforts?.includes(o)){let f=n?`/${n}`:"";throw new I(`${this.name}${f} does not support reasoning effort "${o}".`,this.name,{failureCode:"request_build_failed",stage:"request_build"})}if(o==="none"||i.disabledEfforts?.includes(o)||i.allowCustomEffort)return;let a=i.supportedEfforts?.map(f=>f.value)??[],u=i.effortAliases?.[o]??o;if(a.includes(o)||a.includes(u)||a.length===0&&r)return;let c=n?`/${n}`:"",d=a.length>0?a.join(", "):Fe.join(", ");throw new I(`${this.name}${c} does not support reasoning effort "${o}". Supported efforts: ${d}.`,this.name,{failureCode:"request_build_failed",stage:"request_build"})}resolveReasoningProfileIntent(t,n,o){let r=t.effort;if(r&&n.localRejectEfforts?.includes(r)){if(t.effortSource==="explicit"){let i=o?`/${o}`:"";throw new I(`${this.name}${i} does not support reasoning effort "${r}".`,this.name,{failureCode:"request_build_failed",stage:"request_build"})}if(n.defaultEffort)return{disabled:!1,effort:n.defaultEffort,requestedEffort:r}}if(!t.enabled||r==="none"||r!==void 0&&n.disabledEfforts?.includes(r))return{disabled:!0,requestedEffort:r};if(!r||r==="auto"){if(Ps(n)){let i=ht({capability:n,explicitEffort:r??"auto"}).effectiveEffort;return i==="none"||i!==void 0&&n.disabledEfforts?.includes(i)?{disabled:!0,effort:i,requestedEffort:r}:{disabled:!1,effort:i,requestedEffort:r}}return{disabled:!1,requestedEffort:r}}return{disabled:!1,effort:n.effortAliases?.[r]??r,requestedEffort:r}}onStaleConnection(){}isRateLimitError(t){if(!(t instanceof Error))return!1;let n=t.message.toLowerCase();return["rate","limit","\u901F\u7387","\u9891\u7387","1302","429","too many","overload","overwhelmed","503","529","busy"].some(o=>n.includes(o))}classifyRateLimitReason(t){let n=t instanceof Error?t.message.toLowerCase():String(t).toLowerCase();return n.includes("overload")||n.includes("overwhelmed")||n.includes("503")||n.includes("529")||n.includes("busy")?"overloaded":"rate-limit"}extractRetryAfterMs(t){let n=yt(t);if(!n)return;let o=Ft(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}providerErrorMetadata(t){let n=Un(t),o=Ut(t),r=Cs(t),i=this.extractRetryAfterMs(t);return{stage:"transport",...n!==void 0?{httpStatus:n}:{},...o!==""&&/^[\w.:-]{1,200}$/.test(o)?{upstreamCode:o}:{},...r!==void 0?{requestId:r}:{},...i!==void 0?{retryAfterMs:i}:{}}}parseContextOverflow(t){let n=Bn(Ke(t));if(n.inputTokensKind!=="exact"||n.inputTokens===void 0||n.contextWindow===void 0)return;let o=n.contextWindow-n.inputTokens-1e3;return o>=3e3?o:void 0}isContextOverflowError(t){let n=Ke(t).toLowerCase();return n.includes("prompt is too long")||n.includes("prompt too long")||n.includes("context length")||n.includes("context_length_exceeded")||n.includes("context window")||n.includes("context limit")||n.includes("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(t,n,o=3,r,i,a){let u=!1,c=this.pendingLegacyMaxOutputTokensOverride;this.pendingLegacyMaxOutputTokensOverride=void 0;let d={...c===void 0?{}:{maxOutputTokensOverride:c},suppressReasoningEffort:!1};for(let f=0;f<o;f++)try{return await this.activeLegacyRequestOverride.run(d.maxOutputTokensOverride===void 0?{}:{maxOutputTokensOverride:d.maxOutputTokensOverride},()=>Ko(this.name,a?.model??this.getModel(),()=>t(d),this.requestObservationBoundary==="physical_attempt"))}catch(p){if(o>1&&this.isContextOverflowError(p)&&d.maxOutputTokensOverride===void 0){let l=this.parseContextOverflow(p),h=d.maxOutputTokensLimit;if(l&&(h===void 0||l<h)){d.maxOutputTokensOverride=l,r?.(f+1,o,0);continue}}if(p instanceof $e)throw p;if(this.isContextOverflowError(p))throw new $e(Bn(Ke(p)),this.name,this.providerErrorMetadata(p));if(this.isRateLimitError(p)){if(f===o-1){let g=Ke(p).trim(),y=g?`
3
+ ${g}`:"",k=this.providerErrorMetadata(p);throw new at(`API rate limit exceeded after ${o} retries. Please wait and try again later.${y}`,k.retryAfterMs??6e4,k)}let l=yt(p)??{},h=Ft(l,{attempt:f,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),m=h.waitMs,T=this.classifyRateLimitReason(p);if(i?.({provider:this.name,waitMs:m,reason:T,source:h.source,attempt:f+1,maxAttempts:o}),r?r(f+1,o,m):i||console.log(`[Rate Limit] Retrying in ${m/1e3}s (${f+1}/${o})...`),n?.aborted||(await _s(m,n),n?.aborted))throw Kt();continue}if(o>1&&a&&!u){let l=Be(p,a.effort);if(l){a.onRejected?.({provider:this.name,model:a.model,effort:l.rejectedEffort}),d.suppressReasoningEffort=!0,u=!0;continue}}if(a&&u){let l=Be(p,a.effort);if(l)throw new ct(`${this.name} rejected reasoning effort "${l.rejectedEffort}" even after dropping it.`,this.name,l.rejectedEffort,a.model)}if(p instanceof Error){if(p.name==="TimeoutError")throw p;if(n?.aborted&&(p.name==="AbortError"||await Ts(p)))throw p.name==="AbortError"?p:new DOMException(p.message||"Request aborted","AbortError");let l=Ut(p);throw(l==="ECONNRESET"||l==="EPIPE")&&this.onStaleConnection(),p instanceof I?p:ar(p)?rt(p,new ut(`${this.name} API error: ${p.message}`,!0)):rt(p,new I(`${this.name} API error: ${p.message}`,this.name,this.providerErrorMetadata(p)))}throw p}throw new le("Unexpected end of withRateLimit")}};import{parse as Ss}from"partial-json";function Ue(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=Ss(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}s(Ue,"parseToolInputWithSalvageTracked");function Rs(e){return Ue(e).value}s(Rs,"parseToolInputWithSalvage");var Ms={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 Wt(e){return e==null?"unknown":Ms[e.trim().toLowerCase()]??"unknown"}s(Wt,"classifyStopReason");function We(e){let t=Wt(e);return t==="end"||t==="tool"||t==="paused"}s(We,"isCleanStop");var As=8e3;async function ze(e){if(e.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let t=e.runners.find(d=>d.strategy===e.strategy);if(!t)return{ok:!1,error:"unsupported",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${e.strategy}" is not implemented for this provider's base class`};if(e.signal?.aborted)return{ok:!1,error:"unknown",strategy:e.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=e.timeoutMs??As,r,i=s(d=>{r||(r=d),n.abort()},"recordAbort"),a=setTimeout(()=>i("timeout"),o),u=s(()=>i("parent"),"onParentAbort");e.signal&&e.signal.addEventListener("abort",u,{once:!0});let c=Date.now();try{return await t.run(n.signal),{ok:!0,strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:t.approxTokensSpent}}catch(d){return Wn(d,{strategy:e.strategy,durationMs:Date.now()-c,approxTokensSpent:0,abortCause:r,providerName:e.providerName})}finally{clearTimeout(a),e.signal&&e.signal.removeEventListener("abort",u)}}s(ze,"runVerifyCredential");function Is(e){return e.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}s(Is,"redactKeyMaterial");function Wn(e,t){let n=Cn(e),o=n,r=o.status??o.statusCode??o.response?.status,i=Is(String(o.message??n)).slice(0,240),a=o.cause?.code??o.code,u=o.constructor?.name??"",c;return t.abortCause==="timeout"?c="timeout":t.abortCause==="parent"?c="unknown":u==="AuthenticationError"||u==="PermissionDeniedError"||r===401||r===403?c="unauthorized":r===429?c="rate_limited":r===400&&t.strategy==="count-tokens"&&t.providerName==="kimi-code"?c="unauthorized":r!==void 0&&r>=500&&r<600?c="server_error":a!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(a)?c="network":/timeout/i.test(i)?c="timeout":c="unknown",{ok:!1,error:c,status:r,message:i,durationMs:t.durationMs,approxTokensSpent:t.approxTokensSpent,strategy:t.strategy}}s(Wn,"classifyVerifyError");function zn(e,t){let n=e[e.length-1];if(n&&Xe(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}s(zn,"insertCacheBoundary");function Xe(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}s(Xe,"isCacheBoundary");function Xn(e,t){let n=[];for(let o of e){if(Xe(o)){if(t==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}s(Xn,"lowerCacheBoundaries");function He(e){return e.filter(t=>!Xe(t))}s(He,"stripCacheBoundaries");import{readFile as Hs,stat as Vs}from"node:fs/promises";import qs from"node:path";import{AsyncLocalStorage as Gs}from"node:async_hooks";import{createHash as fr}from"node:crypto";import{createHash as Os}from"node:crypto";import{AsyncLocalStorage as Ds}from"node:async_hooks";import{existsSync as cr}from"node:fs";import{createRequire as Ls}from"node:module";import dr from"node:path";import{Worker as $s}from"node:worker_threads";var Ns={jpg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp"},lr=10*1024*1024,js=4e7,Fs=1e4,Bs=256,ce=new Map,zt,Ks=Ds.snapshot(),Us=`
4
+ const { parentPort, workerData } = require('node:worker_threads');
5
+ let photon;
6
+ try { photon = require(workerData.modulePath); }
7
+ catch { parentPort.postMessage('unavailable'); }
8
+ if (photon) {
9
+ let image;
10
+ try {
11
+ image = photon.PhotonImage.new_from_byteslice(workerData.bytes);
12
+ parentPort.postMessage(image.get_width() > 0 && image.get_height() > 0 ? 'valid' : 'invalid');
13
+ } catch (error) {
14
+ parentPort.postMessage(/memory|allocation|limit/i.test(String(error)) ? 'unavailable' : 'invalid');
15
+ } finally { if (image) image.free(); }
16
+ }
17
+ `;function Ws(){let e=dr.join(dr.dirname(process.execPath),"image-codec","photon_rs.js");if(process.env.KODAX_BUNDLED==="true")return cr(e)?e:void 0;try{return Ls(import.meta.url).resolve("@silvia-odwyer/photon-node")}catch{return cr(e)?e:void 0}}s(Ws,"codecPath");async function zs(e,t,n){if(n<=0)return{status:"unverified",reason:"processing_limit",mediaType:t};let o=Ws();return o?new Promise(r=>{let i;try{i=new $s(Us,{eval:!0,workerData:{modulePath:o,bytes:e},resourceLimits:{maxOldGenerationSizeMb:128}})}catch{r({status:"unverified",reason:"decoder_unavailable",mediaType:t});return}let a=!1,u=s(d=>{a||(a=!0,clearTimeout(c),i.terminate().then(()=>r(d==="valid"?{status:d,mediaType:t}:d==="invalid"?{status:d}:{status:"unverified",reason:"decoder_unavailable",mediaType:t}),()=>r({status:"unverified",reason:"decoder_unavailable",mediaType:t})))},"finish"),c=setTimeout(()=>u("unavailable"),n);i.once("message",u),i.once("error",()=>u("unavailable")),i.once("exit",()=>u("unavailable"))}):{status:"unverified",reason:"decoder_unavailable",mediaType:t}}s(zs,"decode");async function Xs(e){let t=performance.now()+Fs;if(!e.length)return{status:"invalid"};if(e.length>lr)return{status:"unverified",reason:"processing_limit"};let n;try{({imageSize:n}=await import("image-size"))}catch{return{status:"unverified",reason:"decoder_unavailable"}}let o;try{o=n(e)}catch{return{status:"invalid"}}let r=Ns[o.type??""];if(!r)return{status:"unverified",reason:"unsupported_format"};if(!o.width||!o.height)return{status:"invalid"};if(o.width*o.height>js)return{status:"unverified",reason:"processing_limit",mediaType:r};let i=(zt??Promise.resolve()).then(()=>zs(e,r,t-performance.now())),a=i.then(()=>{},()=>{});return zt=a,a.then(()=>{zt===a&&(zt=void 0)}),i}s(Xs,"inspect");async function Xt(e){if(e.length>lr)return{status:"unverified",reason:"processing_limit"};let t=Os("sha256").update(e).digest("hex"),n=ce.get(t);n||(n=Ks(()=>Xs(Buffer.from(e))),ce.set(t,n),ce.size>Bs&&ce.delete(ce.keys().next().value));try{let o=await n;return ce.get(t)===n&&(o.status==="unverified"?ce.delete(t):ce.set(t,o)),o}catch(o){throw ce.get(t)===n&&ce.delete(t),o}}s(Xt,"validateImageBytes");var Js={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},Hn="[Historical image unavailable: the local attachment file is missing.]",pr="[Image content omitted: this provider does not support inline images in tool results.]",Ys="[Image unavailable: this attachment cannot be decoded. Re-extract or replace this image; other content remains available.]",ee=new Gs;function Qs(e,t,n){return ee.run({images:new WeakMap,signal:t,shouldPrepare:n},e)}s(Qs,"withPreparedImageHistory");function gr(e){return ee.getStore()?.signal?.throwIfAborted(),Vn(Xt(e))}s(gr,"validateImageBytesInRun");function Zs(e,t,n){if(ee.getStore()?.shouldPrepare?.()===!1)return;let o=ee.getStore()?.images;if(!o)return;ee.getStore()?.signal?.throwIfAborted();let r={image:yr(t,e.path,e.mediaType,n)};o.set(e,{path:e.path,mediaType:e.mediaType,result:r,value:Promise.resolve(r)})}s(Zs,"prepareValidatedImageBlock");function ea(e){let t=ee.getStore()?.images.get(e);if(!t||t.path!==e.path||t.mediaType!==e.mediaType||!t.result||!("image"in t.result))return;let n=t.result.image;return t.diagnostic??="placeholder"in n?n:{dataHash:fr("sha256").update(Buffer.from(n.data,"base64")).digest("hex"),mediaType:n.mediaType,...n.notice?{notice:n.notice}:{}},t.diagnostic}s(ea,"getPreparedImageDiagnostic");async function ta(e){let t=await Se(e);if("placeholder"in t)return t;let n=Buffer.from(t.data,"base64");return{validation:await gr(n),dataHash:fr("sha256").update(n).digest("hex")}}s(ta,"inspectPreparedImage");function na(e){if(ee.getStore()?.shouldPrepare?.()===!1)return;let t=ee.getStore()?.images;if(!t)return;let n=[],o=s(r=>{let i=t.get(r);(!i?.result||i.path!==r.path||i.mediaType!==r.mediaType)&&n.push(r)},"collect");for(let r of e)if(typeof r.content!="string"){for(let i of r.content)if(i.type==="image"&&o(i),i.type==="tool_result"&&typeof i.content!="string")for(let a of i.content)a.type==="image"&&o(a)}if(n.length)return(async()=>{for(let r of n)ee.getStore()?.signal?.throwIfAborted(),await Vn(mr(t,r).value)})()}s(na,"prepareHistoryImages");async function Se(e){let t=ee.getStore()?.images;if(!t)return hr(e.path,e.mediaType);ee.getStore()?.signal?.throwIfAborted();let n=mr(t,e),o=await Vn(n.value);if("image"in o)return o.image;throw t.get(e)===n&&t.delete(e),o.error}s(Se,"prepareImageBlock");function Vn(e){let t=ee.getStore()?.signal;return t?(t.throwIfAborted(),new Promise((n,o)=>{let r=s(()=>{t.removeEventListener("abort",r),o(t.reason)},"abort");t.addEventListener("abort",r,{once:!0}),e.then(i=>{t.removeEventListener("abort",r),n(i)},i=>{t.removeEventListener("abort",r),o(i)})})):e}s(Vn,"waitForPreparation");function mr(e,t){let n=e.get(t);return n&&n.path===t.path&&n.mediaType===t.mediaType?n:oa(e,t,hr(t.path,t.mediaType))}s(mr,"prepareEntry");function oa(e,t,n){let o={path:t.path,mediaType:t.mediaType,value:n.then(r=>o.result={image:r},r=>o.result={error:r})};return e.set(t,o),o}s(oa,"rememberEntry");async function hr(e,t){let n;try{n=await Hs(e)}catch(o){let r=o.code;if(r==="ENOENT"||r==="ENOTDIR")return{placeholder:Hn};throw o}return ra(n,e,t)}s(hr,"prepareImageFile");async function ra(e,t,n){let o=await Xt(e);return yr(e,t,n,o)}s(ra,"prepareImageBytes");function yr(e,t,n,o){return o.status==="invalid"?{placeholder:Ys}:{data:e.toString("base64"),mediaType:o.mediaType??ia(t,n),...o.status==="unverified"?{notice:`[Local image validation unavailable (${o.reason}); original image bytes retained.]`}:{}}}s(yr,"serializeValidatedImage");async function vr(e){try{return await Vs(e),!1}catch(t){let n=t.code;return n==="ENOENT"||n==="ENOTDIR"}}s(vr,"isImageFileMissing");function ia(e,t){return t??Js[qs.extname(e).toLowerCase()]??"image/png"}s(ia,"resolveImageMediaType");var sa="KodaX",aa="effort-2025-11-24";async function Gn(e){let{default:t}=await import("@anthropic-ai/sdk");return new t({...e,fetch:Dt(e?.fetch??globalThis.fetch)})}s(Gn,"createAnthropicSdkClient");function br(e,t){if(t===void 0||t.length===0)return e;let n={type:"text",text:t},o=e.at(-1);if(o?.role!=="user")return[...e,{role:"user",content:[n]}];let r=typeof o.content=="string"?[{type:"text",text:o.content},n]:[...o.content,n];return[...e.slice(0,-1),{...o,content:r}]}s(br,"appendAnthropicEphemeralSuffix");function ua(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":sa}}s(ua,"getAnthropicCompatDefaultHeaders");function qn(e,t){if(!e)return t;let n=typeof e.input_tokens=="number",o=typeof e.cache_creation_input_tokens=="number",r=typeof e.cache_read_input_tokens=="number",i=n||o||r,a=n?e.input_tokens:0,u=i?o?e.cache_creation_input_tokens:void 0:t?.cachedWriteTokens,c=i?r?e.cache_read_input_tokens:void 0:t?.cachedReadTokens,d=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,f=i?a+(u??0)+(c??0):t?.inputTokens??0;if(![f,d,u,c].some(p=>p!==void 0&&(!Number.isFinite(p)||p<0)))return{inputTokens:f,outputTokens:d,totalTokens:f+d,...c!==void 0?{cachedReadTokens:c}:{},...u!==void 0?{cachedWriteTokens:u}:{}}}s(qn,"normalizeAnthropicUsage");function Jn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(Jn,"isRecord");function ca(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}s(ca,"selectAnthropicOutputEffort");function Er(e,t){let n=ca(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...Jn(r)?r:{},effort:n}}s(Er,"applyAnthropicOutputEffort");function Ht(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...Jn(o)?o:{},effort:t}}s(Ht,"setAnthropicOutputEffort");function da(e){let n=e.output_config;return Jn(n)&&typeof n.effort=="string"}s(da,"hasAnthropicOutputEffort");var N=class extends ue{static{s(this,"KodaXAnthropicCompatProvider")}requestObservationBoundary="physical_attempt";supportsThinking=!0;_client;_clientPromise;async getClient(){if(we())return this.buildClient();if(this._client)return this._client;let t=this._clientPromise??=Promise.resolve(this.buildClient());try{let n=await t;return this._clientPromise===t&&(this._client=n,this._clientPromise=void 0),this._client??n}catch(n){throw this._clientPromise===t&&(this._clientPromise=void 0),n}}set client(t){this._client=t,this._clientPromise=void 0}buildClient(){let t=ua(this.config);return Gn({apiKey:this.getApiKey(),authToken:null,baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let i=this.getReasoningProfile(n)?.requiresEffortBetaHeader&&da(t)?{"anthropic-beta":aa}:void 0;return{...o?{signal:o}:{},...i?{headers:i}:{}}}applyReasoningProfile(t,n,o,r,i,a){if(a)return;this.validateExplicitReasoningEffort(o,r);let u=this.resolveReasoningProfileIntent(o,n,r),c=n.reasoningPreset,d=t;if(c==="kimi-k2.7-code"||c==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(c==="kimi-k3"){let f=o.effortSource==="omitted"&&o.effort==="none";if(u.disabled&&!f){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:f?n.defaultEffort??"max":u.effort??n.defaultEffort??"max"};return}if(!(c==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(u.disabled){if(c==="zai-glm-5.3"){t.thinking={type:"adaptive"},Ht(t,"low");return}(n.supportsDisabledThinking===!0||c==="zai-glm-5.2"||c==="zai-glm-toggle"||c==="deepseek-v4-anthropic"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||c==="minimax-m3"||c==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(c==="zai-glm-5.2"){t.thinking={type:"enabled"},u.effort&&(d.reasoning_effort=u.effort);return}if(c==="zai-glm-5.3"){t.thinking={type:"adaptive"},Ht(t,u.effort);return}if(c==="deepseek-v4-anthropic"){t.thinking={type:"enabled"},Ht(t,u.effort);return}if(c==="minimax-m3"){t.thinking={type:"adaptive"};return}if(c==="zai-glm-toggle"||c==="deepseek-toggle"||c==="kimi-hybrid-toggle"||c==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},u.effort&&(d.reasoning_effort=u.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},Ht(t,u.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let f=this.resolveReasoningProfileBudget(n,u.effort,o,r,i);t.thinking={type:"enabled",budget_tokens:f}}}}resolveReasoningProfileBudget(t,n,o,r,i){let u=(n?t.budgetByEffort?.[n]:void 0)??Te(this.config,Pe(o.effort),o.taskType),c=this.getEffectiveThinkingBudgetCap(r),d=c!==void 0?Math.min(u,c):u;return _e(d,i)}async verifyCredential(t){let n=this.config.model,o=[{strategy:"count-tokens",approxTokensSpent:0,run:s(r=>ie(this.name,"utility",r,async i=>{await(await this.getClient()).messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:i})}),"run")},{strategy:"models-list",approxTokensSpent:0,run:s(r=>ie(this.name,"utility",r,async i=>{await(await this.getClient()).models.list({},{signal:i})}),"run")},{strategy:"minimal-message",approxTokensSpent:7,run:s(r=>ie(this.name,"utility",r,async i=>{await(await this.getClient()).messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:i})}),"run")}];return ze({strategy:this.config.verifyStrategy??"count-tokens",runners:o,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}applyCacheControlToSystem(t){if(!t.trim()||se())return t;let n=zn([{type:"text",text:t}],"system");return Xn(n,"attach")}applyCacheControlToTools(t){if(t.length===0||se())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||se())return t;let n=-1;for(let d=t.length-1;d>=0;d--)if(t[d].role==="user"){n=d;break}if(n===-1)return t;let o=t[n];if(typeof o.content=="string"){if(o.content.length===0)return t;let d=t.slice();return d[n]={...o,content:[{type:"text",text:o.content,cache_control:{type:"ephemeral"}}]},d}if(o.content.length===0)return t;let r=o.content,a={...r[r.length-1],cache_control:{type:"ephemeral"}},u=[...r.slice(0,-1),a],c=t.slice();return c[n]={...o,content:u},c}supportsEphemeralSuffix(){return!0}async stream(t,n,o,r,i,a){return this.withRateLimit(async u=>{let c=this.normalizeReasoning(r),d=i?.modelOverride??this.config.model,f=this.getWireModelId(d);this.validateExplicitReasoningEffort(c,d);let p=i?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d);u.maxOutputTokensLimit??=p;let l=u.maxOutputTokensOverride??p,h=br(this.applyCacheControlToMessages(await this.convertMessages(t,d)),i?.ephemeralSuffix?.content),m=c.enabled?this.getReasoningCapability(d):"none",T=this.getReasoningProfile(d),g=T?["profile","none"]:c.enabled?this.getReasoningFallbackChain(m).filter(w=>w==="native-budget"||w==="native-toggle"||w==="native-adaptive"||w==="none"):["none"],y=n.length>0&&!!i?.forcedToolName,k=s(w=>{let S={model:f,max_tokens:l,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:h,...n.length>0?{tools:this.applyCacheControlToTools(n)}:{},stream:!0,...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!se()?{metadata:{user_id:i.promptCacheKey}}:{}};if(n.length>0&&i?.forcedToolName&&y&&(S.tool_choice={type:"tool",name:i.forcedToolName}),w!=="none")if(w==="profile"&&T)this.applyReasoningProfile(S,T,c,d,l,u.suppressReasoningEffort);else if(w==="native-budget"){let A=Te(this.config,Pe(c.effort),c.taskType);S.thinking={type:"enabled",budget_tokens:_e(A,l)}}else w==="native-toggle"?S.thinking={type:"enabled"}:w==="native-adaptive"&&(S.thinking={type:"adaptive"},Er(S,c));return S},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let v=[],x=[],P=[],R,E=null,_="",b="",C="",L="",$="",j="",q="",G=!1,F,D=Date.now(),be=Date.now(),X=await this.getClient(),Y,H;for(let w of g){for(;!Y;)try{let S=k(w);Y=await X.messages.create(S,{...this.buildMessageCreateOptions(S,d,a),...i?.singleAttempt?{maxRetries:0}:{}}).catch(A=>{throw De(A,S),A})}catch(S){if(i?.singleAttempt)throw S;if(H=S,y&&this.shouldFallbackForForcedToolChoiceError(S)){y=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let A=w==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:w==="native-budget"?["budget_tokens","thinking"]:w==="native-toggle"?["thinking"]:w==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(S,...A))throw S;break}if(Y)break}if(!Y)throw H??new I("All reasoning capability attempts failed without a captured error",this.name);let K=Date.now(),Ie=0,It=0,O=3e4;for await(let w of Y){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let S=Date.now(),A=S-K;if(A>O&&(Ie++,It+=A,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(A/1e3)}s gap before ${w.type}`,{stallCount:Ie,totalStallMs:It,eventType:w.type})),K=S,w.type==="content_block_start"||w.type==="content_block_stop"?i?.onHeartbeat?.(!0):i?.onHeartbeat?.(),w.type==="content_block_start"){D=Date.now();let M=w.content_block;E=M.type,process.env.KODAX_DEBUG_TOOL_STREAM&&M.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:M.type,id:M.id,name:M.name}),M.type==="thinking"?(b="",C=M.signature??""):M.type==="redacted_thinking"?(E="redacted_thinking",L=M.data??""):M.type==="text"?_="":M.type==="tool_use"&&($=M.id,j=M.name,q="")}else if(w.type==="content_block_delta"){D=Date.now();let M=w.delta;M.type==="thinking_delta"?(b+=M.thinking??"",i?.onThinkingDelta?.(M.thinking??"")):M.type==="text_delta"?(_+=M.text??"",i?.onTextDelta?.(M.text??"")):M.type==="input_json_delta"&&(q+=M.partial_json??"",i?.onToolInputDelta?.(j,M.partial_json??"",$?{toolId:$}:void 0))}else if(w.type==="content_block_stop"){if(D=Date.now(),E==="thinking")b&&(P.push({type:"thinking",thinking:b,signature:C}),i?.onThinkingEnd?.(b));else if(E==="redacted_thinking")L&&P.push({type:"redacted_thinking",data:L}),L="";else if(E==="text")_&&v.push({type:"text",text:_});else if(E==="tool_use")if(!$||!j)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify($),name:JSON.stringify(j),input:q.slice(0,100)});else{let M=Ue(q);x.push({type:"tool_use",id:$,name:j,input:M.value,...M.salvaged?{_salvaged:!0,_truncated:!0}:{}})}E=null}else if(w.type==="message_stop"){if(G=!0,D=Date.now(),process.env.KODAX_DEBUG_STREAM){let M=Date.now()-be;this.logStreamDiagnostic(`[Stream] message_stop received after ${M}ms`)}}else if(w.type==="message_delta"){D=Date.now(),R=qn(w.usage,R);let M=w.delta;M?.stop_reason&&(F=M.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${F}`))}else w.type==="message_start"&&(D=Date.now(),R=qn(w.message?.usage,R),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!G){let w=Date.now()-be,S=Date.now()-D;if(a?.aborted){let A=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:w,lastEventAge:S,reason:A,textBlocks:v.length,toolBlocks:x.length,thinkingBlocks:P.length}),new DOMException(A,"AbortError")}if(!F){let A=new Error(`Stream incomplete: message_stop event not received. Duration: ${w}ms, Last event: ${S}ms ago. This may indicate a network disconnection or API timeout.`);throw A.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:w,lastEventAge:S,textBlocks:v.length,toolBlocks:x.length,thinkingBlocks:P.length}),A}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:w,lastEventAge:S,stopReason:F,textBlocks:v.length,toolBlocks:x.length,thinkingBlocks:P.length})}let Q=We(F)?x.map(({_truncated:w,...S})=>S):x;return{textBlocks:v,toolBlocks:Q,thinkingBlocks:P,usage:R,stopReason:F}},a,i?.singleAttempt?1:3,i?.onRateLimit,i?.onRetryAfter,{model:i?.modelOverride??this.config.model,onRejected:i?.onReasoningEffortRejected})}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,i,a){return this.withRateLimit(async u=>{let c=this.normalizeReasoning(r),d=i?.modelOverride??this.config.model,f=this.getWireModelId(d);this.validateExplicitReasoningEffort(c,d);let p=i?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d);u.maxOutputTokensLimit??=p;let l=u.maxOutputTokensOverride??p,h=br(this.applyCacheControlToMessages(await this.convertMessages(t,d)),i?.ephemeralSuffix?.content),m=c.enabled?this.getReasoningCapability(d):"none",T=this.getReasoningProfile(d),g=T?["profile","none"]:c.enabled?this.getReasoningFallbackChain(m).filter(b=>b==="native-budget"||b==="native-toggle"||b==="native-adaptive"||b==="none"):["none"],y=n.length>0&&!!i?.forcedToolName,k=s(b=>{let C={model:f,max_tokens:l,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t)),messages:h,...n.length>0?{tools:this.applyCacheControlToTools(n)}:{},...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!se()?{metadata:{user_id:i.promptCacheKey}}:{}};if(n.length>0&&i?.forcedToolName&&y&&(C.tool_choice={type:"tool",name:i.forcedToolName}),b!=="none")if(b==="profile"&&T)this.applyReasoningProfile(C,T,c,d,l,u.suppressReasoningEffort);else if(b==="native-budget"){let L=Te(this.config,Pe(c.effort),c.taskType);C.thinking={type:"enabled",budget_tokens:_e(L,l)}}else b==="native-toggle"?C.thinking={type:"enabled"}:b==="native-adaptive"&&(C.thinking={type:"adaptive"},Er(C,c));return C},"buildRequest"),v=await this.getClient(),x,P;for(let b of g){for(;!x;)try{let C=k(b);x=await v.messages.create(C,{...this.buildMessageCreateOptions(C,d,a),...i?.singleAttempt?{maxRetries:0}:{}}).catch(L=>{throw De(L,C),L})}catch(C){if(i?.singleAttempt)throw C;if(P=C,y&&this.shouldFallbackForForcedToolChoiceError(C)){y=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let L=b==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:b==="native-budget"?["budget_tokens","thinking"]:b==="native-toggle"?["thinking"]:b==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(C,...L))throw C;break}if(x)break}if(!x)throw P??new I("All reasoning capability attempts failed without a captured error",this.name);let R=[],E=[],_=[];for(let b of x.content)b.type==="text"?(R.push({type:"text",text:b.text}),i?.onTextDelta?.(b.text)):b.type==="thinking"?(_.push({type:"thinking",thinking:b.thinking,signature:b.signature??""}),i?.onThinkingDelta?.(b.thinking),i?.onThinkingEnd?.(b.thinking)):b.type==="redacted_thinking"?_.push({type:"redacted_thinking",data:b.data}):b.type==="tool_use"&&E.push({type:"tool_use",id:b.id,name:b.name,input:typeof b.input=="object"&&b.input!==null?b.input:{}});return{textBlocks:R,toolBlocks:E,thinkingBlocks:_,usage:qn(x.usage),stopReason:x.stop_reason??void 0}},a,i?.singleAttempt?1:3,i?.onRateLimit,i?.onRetryAfter,{model:i?.modelOverride??this.config.model,onRejected:i?.onReasoningEffortRejected})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(Xe(n))throw new I("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name,{failureCode:"request_build_failed",stage:"request_build"});return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
18
+ `)}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(`
19
+
20
+ `)}async convertMessages(t,n){let o=[],r=this.getEffectiveStrictThinkingSignature(n);for(let i of t.filter(a=>a.role!=="system")){let a=i.role==="user"?"user":"assistant";if(typeof i.content=="string"){o.push({role:a,content:i.content});continue}let u=[];if(a==="assistant"){for(let d of i.content)d.type==="thinking"?!r||typeof d.signature=="string"&&d.signature.length>0?u.push({type:"thinking",thinking:d.thinking,signature:d.signature??""}):d.thinking&&u.push({type:"text",text:`<prior_reasoning>
21
+ ${d.thinking}
22
+ </prior_reasoning>`}):d.type==="redacted_thinking"?r||u.push({type:"redacted_thinking",data:d.data}):d.type==="text"&&u.push({type:"text",text:d.text});for(let d of i.content)d.type==="tool_use"&&u.push({type:"tool_use",id:d.id,name:d.name,input:d.input})}else{for(let d of i.content)if(d.type==="tool_result"&&i.role==="user"){let f;if(typeof d.content=="string")f=d.content;else{let p=[];for(let l of d.content)if(l.type==="text")p.push({type:"text",text:l.text});else if(l.type==="image"){let h=await Se(l);"placeholder"in h?p.push({type:"text",text:h.placeholder}):(h.notice&&p.push({type:"text",text:h.notice}),p.push({type:"image",source:{type:"base64",media_type:h.mediaType,data:h.data}}))}f=p}u.push({type:"tool_result",tool_use_id:d.tool_use_id,content:f,...d.is_error===!0?{is_error:!0}:{}})}for(let d of i.content)if(d.type==="text")u.push({type:"text",text:d.text});else if(d.type==="image"&&i.role==="user"){let f=await Se(d);"placeholder"in f?u.push({type:"text",text:f.placeholder}):(f.notice&&u.push({type:"text",text:f.notice}),u.push({type:"image",source:{type:"base64",media_type:f.mediaType,data:f.data}}))}}if(a==="assistant"&&this.config.supportsThinking&&!r){let d=u.some(p=>p.type==="tool_use"),f=u.some(p=>p.type==="thinking"||p.type==="redacted_thinking");d&&!f&&u.unshift({type:"thinking",thinking:"...",signature:""})}let c=u.length===0||(a==="assistant"||a==="user")&&u.every(d=>{let f=d;return f.type==="thinking"&&!f.thinking||f.type==="text"&&!f.text});o.push({role:i.role,content:c?[{type:"text",text:"..."}]:u})}return this.repairToolCallHistory(o)}repairToolCallHistory(t){let n=[],o=new Set,r=0;for(;r<t.length;){let i=t[r],a=typeof i.content=="string"||!Array.isArray(i.content)?void 0:i.content;if(i.role==="assistant"){let u=[],c=!1;for(let h of a??[]){let m=h;m.type==="tool_use"&&(typeof m.id=="string"&&m.id.trim().length>0?u.push(m.id):c=!0)}if(o=new Set(u),u.length===0){if(c){let h=(a??[]).filter(m=>m.type!=="tool_use"||!!m.id);n.push(h.length===0?{...i,content:[{type:"text",text:"..."}]}:{...i,content:h})}else n.push(i);r+=1;continue}let d=new Map,f=[],p=r+1;for(;p<t.length&&t[p].role!=="assistant";){let h=t[p];if(typeof h.content=="string")f.push({type:"text",text:h.content});else if(Array.isArray(h.content))for(let m of h.content){let T=m;if(T.type==="tool_result"){typeof T.tool_use_id=="string"&&o.has(T.tool_use_id)&&!d.has(T.tool_use_id)&&d.set(T.tool_use_id,m);continue}f.push(m)}p+=1}if(c){let h=(a??[]).filter(m=>m.type!=="tool_use"||!!m.id);n.push(h.length===0?{...i,content:[{type:"text",text:"..."}]}:{...i,content:h})}else n.push(i);let l=u.map(h=>d.get(h)??{type:"tool_result",tool_use_id:h,content:dt,is_error:!0});n.push({role:"user",content:[...l,...f]}),r=p;continue}if(i.role==="user"&&a){let u=a.filter(c=>{let d=c;return d.type!=="tool_result"||typeof d.tool_use_id=="string"&&o.has(d.tool_use_id)});u.length===a.length?n.push(i):u.length>0&&n.push({...i,content:u}),r+=1;continue}n.push(i),r+=1}return n}};function Ve(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>typeof t=="string"?t:t&&typeof t=="object"&&typeof t.text=="string"?t.text:"").join(""):""}s(Ve,"reasoningText");var Et=class{static{s(this,"OpenAIReasoningAccumulator")}text="";reasoning;details=[];append(t,n=!1){if(!t||typeof t!="object")return"";let o=t,r=Array.isArray(o.reasoning_details)?o.reasoning_details.filter(u=>u!==null&&typeof u=="object"&&!Array.isArray(u)):[];for(let[u,c]of r.entries())this.appendDetail(c,n&&u===0);typeof o.reasoning=="string"&&(this.reasoning=(this.reasoning??"")+o.reasoning);let a=r.map(u=>u.type==="reasoning.text"?Ve(u.text):u.type==="reasoning.summary"?Ve(u.summary):"").join("")||Ve(o.reasoning_content)||Ve(o.reasoning);return this.text+=a,a}appendDetail(t,n){let o=n?this.details.at(-1):void 0,r=t.type==="reasoning.text"?"text":t.type==="reasoning.summary"?"summary":void 0,i=typeof t.index=="number"&&o?.index===t.index,a=typeof t.id=="string"&&o?.id===t.id,u=["id","index","signature","format"].some(c=>t[c]!=null&&o?.[c]!=null&&t[c]!==o[c]);if(r&&o&&o.type===t.type&&!u&&(i||a)){let c=Ve(o[r])+Ve(t[r]),d={...o,...structuredClone(t),[r]:c};for(let f of["id","signature","format"])t[f]==null&&o[f]!==void 0&&(d[f]=o[f]);this.details[this.details.length-1]=d}else this.details.push(structuredClone(t))}blocks(t){let n=this.reasoning!==void 0||this.details.length>0;return!this.text&&!n?[]:[{type:"thinking",thinking:this.text,...n?{openaiReasoning:{...t,...this.reasoning!==void 0?{reasoning:this.reasoning}:{},...this.details.length>0?{details:this.details}:{}}}:{}}]}};var la="KodaX";async function fa(e){let{default:t}=await import("openai");return new t({...e,fetch:Dt(e?.fetch??globalThis.fetch)})}s(fa,"createOpenAISdkClient");function pa(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}s(pa,"isOpenAIReasoningAttempt");function ga(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":la}}s(ga,"getOpenAICompatDefaultHeaders");function Yn(e,t){return e==="max_tokens"?{max_tokens:t}:{max_completion_tokens:t}}s(Yn,"serializeOpenAICompatMaxOutputTokens");function kr(e,t){if(!t)return e;let n=e.at(-1);if(n?.role!=="user")return[...e,{role:"user",content:t}];let o=typeof n.content=="string"?n.content.length>0?`${n.content}
23
+
24
+ ${t}`:t:[...n.content,{type:"text",text:t}];return[...e.slice(0,-1),{...n,content:o}]}s(kr,"appendOpenAIEphemeralSuffix");function ma(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return Fn(Pe(e.effort))}}s(ma,"selectOpenAIReasoningEffort");function xr(e){if(!e)return;let t=typeof e.prompt_tokens=="number"?e.prompt_tokens:0,n=typeof e.completion_tokens=="number"?e.completion_tokens:0,o=typeof e.total_tokens=="number"?e.total_tokens:t+n;if([t,n,o].some(i=>!Number.isFinite(i)||i<0)||o<t||o<n)return;let r=typeof e.prompt_tokens_details?.cached_tokens=="number"&&e.prompt_tokens_details.cached_tokens>=0?e.prompt_tokens_details.cached_tokens:typeof e.prompt_cache_hit_tokens=="number"&&e.prompt_cache_hit_tokens>=0?e.prompt_cache_hit_tokens:void 0;return{inputTokens:t,outputTokens:n,totalTokens:o,...r!==void 0?{cachedReadTokens:r}:{}}}s(xr,"normalizeOpenAIUsage");function ha(e){return e?e.type==="function"&&"function"in e:!1}s(ha,"isOpenAIFunctionToolCall");function ya(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>{if(!t||typeof t!="object")return"";let n=Reflect.get(t,"text");if(typeof n=="string")return n;if(n&&typeof n=="object"){let o=Reflect.get(n,"value");return typeof o=="string"?o:""}return""}).filter(Boolean).join(""):""}s(ya,"extractOpenAIMessageText");function kt(e){let t=e.role;return typeof t=="string"?t:void 0}s(kt,"getWireRole");function va(e){if(kt(e)!=="assistant")return;let t=e.tool_calls;if(Array.isArray(t))return t.flatMap(n=>{if(!n||typeof n!="object")return[];let o=n.id;return typeof o=="string"&&o.trim().length>0?[{id:o,value:n}]:[]})}s(va,"getAssistantWireToolCalls");function ba(e){if(kt(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}s(ba,"getToolWireCallId");function Ea(e,t){let n={...e};return t.length>0?(n.tool_calls=t.map(o=>o.value),n):(delete n.tool_calls,(n.content==null||n.content==="")&&(n.content="..."),n)}s(Ea,"rewriteAssistantWireToolCalls");var re=class extends ue{static{s(this,"KodaXOpenAICompatProvider")}requestObservationBoundary="physical_attempt";reasoningRejections={};normalizeReasoning(t){return super.normalizeReasoning(typeof t!="boolean"&&t?.effort===void 0&&t?.enabled===void 0?{...t,effort:"auto"}:t)}reasoningAttempts(t,n){let o=this.getReasoningProfile(n);if(he(o)){let i=t.effortSource==="omitted"?"auto":t.effort;return Ne(o,i).map(a=>({capability:a===void 0?"none":"profile",reasoning:{...t,effort:a??"none",enabled:a!=="none"&&a!==void 0}}))}return this.validateExplicitReasoningEffort(t,n),(o?["profile","none"]:jn(t)?this.getReasoningFallbackChain(this.getReasoningCapability(n)).filter(pa):["none"]).map(i=>({capability:i,reasoning:t}))}skipRejectedReasoning(t,n,o,r){let i=t;if(!["reasoning_effort","reasoning","thinking","extra_body"].some(f=>f in i))return!1;let u=this.sentReasoningEffort(t),c=[...An(this.reasoningRejections,this.name,this.getWireModelId(n)),...o?.rejectedReasoningEfforts??[]];return!c.some(f=>f.startsWith("parameter:")&&this.hasReasoningParameter(t,f.slice(10)))&&!c.includes("*")&&(u===void 0||!c.includes(u))?!1:(r.fallbacks.some(f=>f.effort===u)||r.fallbacks.push({effort:u,reason:"cached-rejection"}),!0)}hasReasoningParameter(t,n){let o=t;return n in o||["thinking","reasoning","extra_body"].some(r=>{let i=o[r];return i!==null&&typeof i=="object"&&n in i})}sentReasoningEffort(t){let n=t,o=n.thinking,r=n.reasoning;return typeof n.reasoning_effort=="string"?n.reasoning_effort:r?.effort??o?.effort??(o?.type==="disabled"?"none":void 0)}recordReasoningRejection(t,n,o,r,i){let a=this.sentReasoningEffort(n),u=Be(t,a);if(!u||u.parameter&&!this.hasReasoningParameter(n,u.parameter)||!u.parameter&&a===void 0)return!1;let c=u.parameterRejected?["budget_tokens","thinking_budget","enable_thinking"].includes(u.parameter??"")?`parameter:${u.parameter}`:"*":u.rejectedEffort;return this.reasoningRejections=In(this.reasoningRejections,this.name,this.getWireModelId(o),c,"observed",new Date().toISOString()),i.fallbacks.push({effort:a,reason:u.parameterRejected?"unsupported-parameter":"unsupported-effort"}),r?.onReasoningEffortRejected?.({provider:this.name,model:o,effort:c}),!0}supportsThinking=!0;_client;_clientPromise;supportsEphemeralSuffix(){return!0}async getClient(){if(we())return this.buildClient();if(this._client)return this._client;let t=this._clientPromise??=Promise.resolve(this.buildClient());try{let n=await t;return this._clientPromise===t&&(this._client=n,this._clientPromise=void 0),this._client??n}catch(n){throw this._clientPromise===t&&(this._clientPromise=void 0),n}}set client(t){this._client=t,this._clientPromise=void 0}buildClient(){let t=ga(this.config);return fa({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...t?{defaultHeaders:t}:{}})}getEffectiveMaxOutputTokensField(t){return this.getModelDescriptor(t)?.maxOutputTokensField??this.config.maxOutputTokensField??"max_completion_tokens"}onStaleConnection(){this._client=void 0}async verifyCredential(t){let n=this.config.model,o=this.getWireModelId(n),r=[{strategy:"models-list",approxTokensSpent:0,run:s(i=>ie(this.name,"utility",i,async a=>{await(await this.getClient()).models.list({signal:a})}),"run")},{strategy:"minimal-message",approxTokensSpent:6,run:s(i=>ie(this.name,"utility",i,async a=>{await(await this.getClient()).chat.completions.create({model:o,...Yn(this.getEffectiveMaxOutputTokensField(n),1),messages:[{role:"user",content:"hi"}]},{signal:a})}),"run")}];return ze({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=He(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(t,n){let o=[];t&&t.trim().length>0&&o.push(t);let r=[];for(let i of n){if(i.role!=="system"){r.push(i);continue}let a=typeof i.content=="string"?i.content:Array.isArray(i.content)?i.content.filter(u=>typeof u=="object"&&u!==null&&u.type==="text"&&typeof u.text=="string").map(u=>u.text).join(`
25
+ `):"";a.trim().length>0&&o.push(a)}return{system:o.join(`
26
+
27
+ `),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.reasoning,delete t.thinking;let n=typeof t.extra_body=="object"&&t.extra_body!==null?{...t.extra_body}:void 0;if(n){if(delete n.enable_thinking,delete n.thinking_budget,delete n.thinking,Object.keys(n).length===0){delete t.extra_body;return}t.extra_body=n}}applyReasoningCapability(t,n,o,r,i,a){if(i||o==="none")return;let u=t,c=_e(Te(this.config,Pe(r.effort),r.taskType),a),d=this.getReasoningProfile(n);if(d){this.applyReasoningProfile(u,d,r,n,c);return}switch(o){case"native-effort":{this.validateExplicitReasoningEffort(r,n);let f=ma(r);f&&(u.reasoning_effort=f);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(u,{enable_thinking:!0,thinking_budget:c}):this.name==="zhipu"&&(u.thinking={type:"enabled",budget_tokens:c});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(u,{enable_thinking:!0}):this.name==="zhipu"&&(u.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,i){he(n)||this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),u=n.reasoningPreset;if(u==="kimi-k2.7-code"||u==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(u==="kimi-k3"){let c=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!c){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:c?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(u==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(u==="qwen-hybrid-thinking"){if(a.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,i);this.appendExtraBody(t,{enable_thinking:!0,...c!==void 0?{thinking_budget:c}:{}});return}if(u==="deepseek-v4-flash-openai"||u==="deepseek-v4-pro-openai"||u==="deepseek-v4-openai"||u==="zai-glm-5.3"||u==="zai-glm-5.2"){if(u==="zai-glm-5.3"&&a.disabled){t.thinking={type:"enabled"},t.reasoning_effort="low";return}t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&(t.reasoning_effort=a.effort);return}if(u==="zai-glm-toggle"||u==="deepseek-toggle"||u==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:a.disabled?"disabled":"enabled"},!a.disabled&&a.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=a.effort);return}if(he(n)){let c=a.disabled?"none":a.effort;if(n.effortStrategy==="openai-responses-effort"){c&&(t.reasoning={effort:c});return}if(a.disabled){n.supportsDisabledThinking!==!1&&(t.reasoning_effort="none");return}a.effort&&(t.reasoning_effort=a.effort);return}if(n.effortStrategy==="provider-budget"){if(a.disabled){t.thinking={type:"disabled"};return}let c=this.resolveReasoningProfileBudget(n,a.effort,r,i);t.thinking={type:"enabled",...c!==void 0?{budget_tokens:c}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:a.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let i=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,a=this.getEffectiveThinkingBudgetCap(o);return a!==void 0?Math.min(i,a):i}async stream(t,n,o,r,i,a){let u=i?.modelOverride??this.config.model,c=this.normalizeReasoning(r),d={provider:this.name,model:u,requestedEffort:c.effortSource==="omitted"?"auto":c.effort??"auto",verified:!1,fallbacks:[]};return this.withRateLimit(async f=>{let p=this.stripCacheBoundariesFromMessages(t),{system:l,rest:h}=this.normalizeSystemForWire(o,p),m=this.getWireModelId(u),T=kr([{role:"system",content:l},...await this.convertMessages(h,u)],i?.ephemeralSuffix?.content),g=n.map(O=>({type:"function",function:{name:O.name,description:O.description,parameters:O.input_schema}})),y=i?.forcedToolName,k=g.length>0&&!!y;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let v=new Map,x="",P=new Et,R,E=!0,_=null,b=Date.now(),C=this.reasoningAttempts(c,u),L=i?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u);f.maxOutputTokensLimit??=L;let $=f.maxOutputTokensOverride??L,j={model:m,messages:T,...g.length>0?{tools:g}:{},...Yn(this.getEffectiveMaxOutputTokensField(u),$),stream:!0,...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!se()?{prompt_cache_key:i.promptCacheKey}:{}};g.length>0&&y&&k&&(j.tool_choice={type:"function",function:{name:y}});let q=await this.getClient(),G,F;for(let{capability:O,reasoning:Q}of C){for(;!G;){let w={...j};if(E&&(w.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(w),this.applyReasoningCapability(w,u,O,Q,f.suppressReasoningEffort,$),this.skipRejectedReasoning(w,u,i,d))break;d.sentEffort=this.sentReasoningEffort(w);try{G=await q.chat.completions.create(w,{...a?{signal:a}:{},...i?.singleAttempt?{maxRetries:0}:{}}).catch(S=>{throw De(S,w),S})}catch(S){let A=this.recordReasoningRejection(S,w,u,i,d);if(i?.singleAttempt)throw S;if(A){F=S;break}if(F=S,k&&this.shouldFallbackForForcedToolChoiceError(S)){k=!1,delete j.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(E&&this.shouldFallbackForSpecificReasoningError(S,"stream_options","include_usage")){E=!1;continue}throw S}}if(G)break}if(!G)throw F??new I("All reasoning capability attempts failed without a captured error",this.name);let D=Date.now(),be=0,X=0,Y=3e4;for await(let O of G){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let Q=Date.now(),w=Q-D;w>Y&&(be++,X+=w,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(w/1e3)}s gap`,{stallCount:be,totalStallMs:X})),D=Q,i?.onHeartbeat?.(),R=xr(O.usage)??R;let S=O.choices[0],A=S?.delta;if(S?.finish_reason&&(_=S.finish_reason,process.env.KODAX_DEBUG_STREAM)){let oe=Date.now()-b;this.logStreamDiagnostic(`[Stream] finish_reason: ${_} after ${oe}ms`)}A?.content&&(x+=A.content,i?.onTextDelta?.(A.content));let M=P.append(A,!0);if(M&&i?.onThinkingDelta?.(M),A?.tool_calls)for(let oe of A.tool_calls){let Ee=v.get(oe.index)??{id:"",name:"",arguments:""};oe.id&&(Ee.id=oe.id),oe.function?.name&&(Ee.name=oe.function.name),oe.function?.arguments&&(Ee.arguments+=oe.function.arguments,i?.onToolInputDelta?.(Ee.name,oe.function.arguments,Ee.id?{toolId:Ee.id}:void 0)),v.set(oe.index,Ee)}}if(!_){let O=Date.now()-b;if(a?.aborted){let w=a.reason instanceof Error?a.reason.message:typeof a.reason=="string"?a.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:O,reason:w,textContentLength:x.length,toolCallsCount:v.size}),new DOMException(w,"AbortError")}let Q=new Error(`Stream incomplete: finish_reason not received. Duration: ${O}ms. This may indicate a network disconnection or API timeout.`);throw Q.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:O,textContentLength:x.length,toolCallsCount:v.size}),Q}let H=x?[{type:"text",text:x}]:[],K=[],Ie=P.blocks({provider:this.name,model:m,baseUrl:this.getBaseUrl()});P.text&&i?.onThinkingEnd?.(P.text);let It=We(_??void 0);for(let[,O]of v)if(O.id&&O.name){let Q=Ue(O.arguments),w=Q.salvaged?It?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};K.push({type:"tool_use",id:O.id,name:O.name,input:Q.value,...w})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(O.id),name:JSON.stringify(O.name),argsLength:O.arguments?.length??0});return d.requestedEffort!=="auto"&&d.requestedEffort!==d.sentEffort&&d.fallbacks.length===0&&d.fallbacks.push({effort:d.requestedEffort,reason:"profile"}),i?.onReasoningResolved?.(d),{textBlocks:H,toolBlocks:K,thinkingBlocks:Ie,usage:R,stopReason:_??void 0,reasoningResolution:d}},a,i?.singleAttempt?1:3,i?.onRateLimit,i?.onRetryAfter)}supportsNonStreamingFallback(){return!0}async complete(t,n,o,r,i,a){let u=i?.modelOverride??this.config.model,c=this.normalizeReasoning(r),d={provider:this.name,model:u,requestedEffort:c.effortSource==="omitted"?"auto":c.effort??"auto",verified:!1,fallbacks:[]};return this.withRateLimit(async f=>{let p=this.stripCacheBoundariesFromMessages(t),{system:l,rest:h}=this.normalizeSystemForWire(o,p),m=this.getWireModelId(u),T=kr([{role:"system",content:l},...await this.convertMessages(h,u)],i?.ephemeralSuffix?.content),g=n.map(X=>({type:"function",function:{name:X.name,description:X.description,parameters:X.input_schema}})),y=i?.forcedToolName,k=g.length>0&&!!y,v=this.reasoningAttempts(c,u),x=i?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u);f.maxOutputTokensLimit??=x;let P=f.maxOutputTokensOverride??x,R={model:m,messages:T,...g.length>0?{tools:g}:{},...Yn(this.getEffectiveMaxOutputTokensField(u),P),...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!se()?{prompt_cache_key:i.promptCacheKey}:{}};g.length>0&&y&&k&&(R.tool_choice={type:"function",function:{name:y}});let E,_,b=await this.getClient();for(let{capability:X,reasoning:Y}of v){for(;!E;){let H={...R};if(this.resetReasoningCapabilityParams(H),this.applyReasoningCapability(H,u,X,Y,f.suppressReasoningEffort,P),this.skipRejectedReasoning(H,u,i,d))break;d.sentEffort=this.sentReasoningEffort(H);try{E=await b.chat.completions.create(H,{...a?{signal:a}:{},...i?.singleAttempt?{maxRetries:0}:{}}).catch(K=>{throw De(K,H),K})}catch(K){let Ie=this.recordReasoningRejection(K,H,u,i,d);if(i?.singleAttempt)throw K;if(Ie){_=K;break}if(_=K,k&&this.shouldFallbackForForcedToolChoiceError(K)){k=!1,delete R.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}throw K}}if(E)break}if(!E)throw _??new I("All reasoning capability attempts failed without a captured error",this.name);let C=E.choices[0],L=C?.message,$=ya(L?.content),j=new Et,q=j.append(L),G=We(C?.finish_reason??void 0),F=(L?.tool_calls??[]).filter(ha).map(X=>{let Y=Ue(X.function.arguments),H=Y.salvaged?G?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:X.id,name:X.function.name,input:Y.value,...H}});$&&i?.onTextDelta?.($);let D=$?[{type:"text",text:$}]:[],be=j.blocks({provider:this.name,model:m,baseUrl:this.getBaseUrl()});return q&&(i?.onThinkingDelta?.(q),i?.onThinkingEnd?.(q)),d.requestedEffort!=="auto"&&d.requestedEffort!==d.sentEffort&&d.fallbacks.length===0&&d.fallbacks.push({effort:d.requestedEffort,reason:"profile"}),i?.onReasoningResolved?.(d),{reasoningResolution:d,textBlocks:D,toolBlocks:F,thinkingBlocks:be,usage:xr(E.usage),stopReason:C?.finish_reason??void 0}},a,i?.singleAttempt?1:3,i?.onRateLimit,i?.onRetryAfter)}serializeAssistantMessage(t,n){let o=t.filter(l=>l.type==="text").map(l=>l.text).join(`
28
+ `),r=t.filter(l=>l.type==="tool_use").map(l=>({id:l.id,type:"function",function:{name:l.name,arguments:JSON.stringify(l.input??{})}})),i=t.filter(l=>l.type==="thinking"||l.type==="redacted_thinking").map(l=>l.type==="thinking"?l.thinking:"").filter(Boolean).join(`
29
+
30
+ `),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 d={role:"assistant",content:c};r.length>0&&(d.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(d.reasoning_content=i||"");let f=t.flatMap(l=>l.type==="thinking"&&l.openaiReasoning?[l.openaiReasoning]:[]).filter(l=>l.provider===this.name&&l.model===this.getWireModelId(n)&&l.baseUrl===this.getBaseUrl()),p=f.flatMap(l=>l.details??[]);return p.length>0&&(d.reasoning_details=p),f.some(l=>l.reasoning!==void 0)&&(d.reasoning=f.map(l=>l.reasoning??"").join("")),[d]}async serializeToolResult(t,n){let o=[],r=[],i=this.getCapabilityProfile().multimodalSupport,a=i==="image-input"||i==="full";if(typeof t.content=="string")o.push(t.content);else for(let c of t.content)if(c.type==="text")o.push(c.text);else if(a){let d=await Se(c);"placeholder"in d?o.push(d.placeholder):(d.notice&&o.push(d.notice),r.push({type:"image_url",image_url:{url:`data:${d.mediaType};base64,${d.data}`}}))}else o.push(await vr(c.path)?Hn:pr);r.length>0&&o.push("[Images from this tool result follow in a user message.]");let u={role:"tool",tool_call_id:t.tool_use_id,content:o.join(`
31
+ `)};return r.length>0&&n.set(u,{role:"user",content:[{type:"text",text:`Images from tool result ${t.tool_use_id}:`},...r]}),u}async serializeUserMessage(t,n){let o=[],r=t.filter(u=>u.type==="text").map(u=>u.text).join(`
32
+ `),i=t.filter(u=>u.type==="image");for(let u of t)u.type==="tool_result"&&o.push(await this.serializeToolResult(u,n));if(i.length===0)return r&&o.push({role:"user",content:r}),o;let a=[];r&&a.push({type:"text",text:r});for(let u of i){let c=await Se(u);"placeholder"in c?a.push({type:"text",text:c.placeholder}):(c.notice&&a.push({type:"text",text:c.notice}),a.push({type:"image_url",image_url:{url:`data:${c.mediaType};base64,${c.data}`}}))}return o.push({role:"user",content:a}),o}serializeSystemMessage(t){if(typeof t=="string")return[{role:"system",content:t}];let n=t.filter(o=>o.type==="text").map(o=>o.text).join(`
33
+ `);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[],r=new Map;for(let i of t){if(i.role==="system"){o.push(...this.serializeSystemMessage(i.content));continue}if(typeof i.content=="string"){o.push({role:i.role,content:i.content});continue}if(i.role==="assistant"){o.push(...this.serializeAssistantMessage(i.content,n));continue}o.push(...await this.serializeUserMessage(i.content,r))}return this.repairToolCallHistory(o,r)}repairToolCallHistory(t,n){let o=[],r=new Set,i=0;for(;i<t.length;){let a=t[i],u=kt(a);if(u==="assistant"){let c=va(a)??[];r=new Set(c.map(h=>h.id));let d=Ea(a,c);if(c.length===0){o.push(d),i+=1;continue}let f=new Map,p=[],l=i+1;for(;l<t.length&&kt(t[l])!=="assistant";){let h=t[l];if(kt(h)==="tool"){let m=ba(h);if(m!==void 0&&r.has(m)&&!f.has(m)){f.set(m,h);let T=n.get(h);T&&p.push(T)}}else p.push(h);l+=1}o.push(d);for(let h of c)o.push(f.get(h.id)??{role:"tool",tool_call_id:h.id,content:dt});o.push(...p),i=l;continue}if(u==="tool"){i+=1;continue}o.push(a),i+=1}return o}};import{spawn as Aa}from"node:child_process";import{Readable as Ia,Writable as Oa}from"node:stream";import Gt from"node:process";import{spawnSync as Vt}from"node:child_process";var ka=2e3,Re=2e3,eo=5e3,fe=Object.freeze({status:"terminated"}),wr=Object.freeze({status:"already-exited"}),U=Object.freeze({status:"unknown"}),Rr=String.raw`
34
+ using System;
35
+ using System.Runtime.InteropServices;
36
+ using System.Text;
37
+ public static class KodaXNativeProcessSnapshot {
38
+ [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
39
+ private struct ProcessEntry32 {
40
+ public uint dwSize;
41
+ public uint cntUsage;
42
+ public uint th32ProcessID;
43
+ public IntPtr th32DefaultHeapID;
44
+ public uint th32ModuleID;
45
+ public uint cntThreads;
46
+ public uint th32ParentProcessID;
47
+ public int pcPriClassBase;
48
+ public uint dwFlags;
49
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
50
+ public string szExeFile;
51
+ }
52
+ [DllImport("kernel32.dll", SetLastError = true)]
53
+ private static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processId);
54
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
55
+ private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
56
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
57
+ private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
58
+ [StructLayout(LayoutKind.Sequential)]
59
+ private struct FileTime {
60
+ public uint Low;
61
+ public uint High;
62
+ }
63
+ [DllImport("kernel32.dll", SetLastError = true)]
64
+ private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
65
+ [DllImport("kernel32.dll", SetLastError = true)]
66
+ private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
67
+ [DllImport("kernel32.dll", SetLastError = true)]
68
+ private static extern bool TerminateProcess(IntPtr process, uint exitCode);
69
+ [DllImport("kernel32.dll")]
70
+ private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
71
+ [DllImport("kernel32.dll")]
72
+ private static extern bool CloseHandle(IntPtr handle);
73
+ private static ulong ReadCreationTime(uint processId) {
74
+ var process = OpenProcess(0x1000, false, processId);
75
+ if (process == IntPtr.Zero) return 0;
76
+ try {
77
+ FileTime creation, exit, kernel, user;
78
+ if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
79
+ return ((ulong)creation.High << 32) | creation.Low;
80
+ } finally {
81
+ CloseHandle(process);
82
+ }
83
+ }
84
+ public static int TerminateExact(uint processId, ulong expectedCreationTime) {
85
+ var process = OpenProcess(0x1001, false, processId);
86
+ if (process == IntPtr.Zero) return 0;
87
+ try {
88
+ FileTime creation, exit, kernel, user;
89
+ if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
90
+ var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
91
+ if (actual != expectedCreationTime) return 2;
92
+ return TerminateProcess(process, 1) ? 1 : 0;
93
+ } finally {
94
+ CloseHandle(process);
95
+ }
96
+ }
97
+ public static string ReadRows() {
98
+ FileTime cutoffTime;
99
+ GetSystemTimeAsFileTime(out cutoffTime);
100
+ var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
101
+ var snapshot = CreateToolhelp32Snapshot(2, 0);
102
+ if (snapshot == new IntPtr(-1)) return string.Empty;
103
+ var rows = new StringBuilder();
104
+ var entry = new ProcessEntry32();
105
+ entry.dwSize = (uint)Marshal.SizeOf(entry);
106
+ try {
107
+ if (!Process32First(snapshot, ref entry)) return string.Empty;
108
+ do {
109
+ var creationTime = ReadCreationTime(entry.th32ProcessID) / 10000;
110
+ if (creationTime == 0 || creationTime <= cutoff) {
111
+ rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append(',').Append(creationTime).Append('\n');
112
+ }
113
+ entry.dwSize = (uint)Marshal.SizeOf(entry);
114
+ } while (Process32Next(snapshot, ref entry));
115
+ return rows.ToString();
116
+ } finally {
117
+ CloseHandle(snapshot);
118
+ }
119
+ }
120
+ }`;function Me(e){return e.exitCode!==null||e.signalCode!==null}s(Me,"isExited");function Qn(e,t){return Me(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=s(u=>{o||(o=!0,clearTimeout(a),e.off("exit",i),e.off("error",i),n(u))},"finish"),i=s(()=>r(!0),"onExit"),a=setTimeout(()=>r(!1),t);a.unref?.(),e.once("exit",i),e.once("error",i)})}s(Qn,"waitForExit");function Pr(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}s(Pr,"signalPosixPidTree");function to(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}s(to,"signalTargetExists");function Tr(e){return to(-e)||to(e)}s(Tr,"isPosixPidTreeAlive");async function _r(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Tr(e))return!0;await new Promise(o=>setTimeout(o,50))}return!Tr(e)}s(_r,"waitForPosixPidTreeExit");function xa(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).flatMap(r=>{if(typeof r!="object"||r===null)return[];let i=r,a=Number(i.pid),u=Number(i.parentPid),c=typeof i.creationTime=="string"?i.creationTime:String(i.creationTime??"0");return!Number.isFinite(a)||a<=0||!Number.isFinite(u)?[]:[{pid:a,parentPid:u,creationTime:/^\d+$/.test(c)?c:"0"}]})}catch{return[]}}s(xa,"parseWindowsProcessSnapshotJson");function wa(e){let t=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.(\d{6})([+-])(\d{3})$/.exec(e);if(!t)return;let[,n,o,r,i,a,u,c,d,f]=t,p=Date.UTC(Number(n),Number(o)-1,Number(r),Number(i),Number(a),Number(u),Number(c.slice(0,3))),l=Number(f)*6e4*(d==="+"?1:-1),h=p-l;if(Number.isFinite(h))return{identity:(BigInt(h)+11644473600000n).toString(),unixMs:h}}s(wa,"parseWmicCreationTime");function Pa(){let e=["$cutoff = [DateTime]::UtcNow","$items = try { @(Get-CimInstance Win32_Process -ErrorAction Stop) } catch { @(Get-WmiObject Win32_Process -ErrorAction Stop) }","$rows = @($items | ForEach-Object {"," $creationTime = '0'"," try {"," $created = $_.CreationDate"," if ($created -isnot [DateTime]) { $created = [System.Management.ManagementDateTimeConverter]::ToDateTime([string]$created) }"," $created = $created.ToUniversalTime()"," if ($created -le $cutoff) { $creationTime = ([long][Math]::Floor($created.ToFileTimeUtc() / 10000)).ToString() }"," } catch {}"," [PSCustomObject]@{ pid = [int]$_.ProcessId; parentPid = [int]$_.ParentProcessId; creationTime = $creationTime }","})","$rows | ConvertTo-Json -Compress"].join(`
121
+ `),t=Vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:eo,windowsHide:!0});if(!t.error&&t.status===0){let i=xa(t.stdout);if(i.length>0)return i}let n=Date.now(),o=Vt("wmic",["process","get","CreationDate,ParentProcessId,ProcessId","/format:list"],{encoding:"utf8",timeout:eo,windowsHide:!0});if(o.error||o.status!==0)return;let r=o.stdout.split(/\r?\n\s*\r?\n/).flatMap(i=>{let a=new Map(i.split(/\r?\n/).flatMap(p=>{let l=p.indexOf("=");return l<0?[]:[[p.slice(0,l),p.slice(l+1)]]})),u=Number(a.get("ProcessId")),c=Number(a.get("ParentProcessId")),d=a.get("CreationDate"),f=d===void 0?void 0:wa(d);return!Number.isFinite(u)||u<=0||!Number.isFinite(c)||f===void 0||f.unixMs>n?[]:[{pid:u,parentPid:c,creationTime:f.identity}]});return r.length>0?r:void 0}s(Pa,"readWindowsProcessSnapshotFallback");function Ta(){let e=["$source = @'",Rr,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
122
+ `),t=Vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:eo,windowsHide:!0});if(!(t.error||t.status!==0))return Mr(t.stdout)}s(Ta,"readWindowsProcessSnapshotNative");function Mr(e){let t=e.split(/\r?\n/).map(o=>o.trim()).filter(Boolean);if(t.some(o=>!/^\d+,\d+,\d+$/.test(o)))return;let n=t.flatMap(o=>{let[r,i,a="0"]=o.split(",",3),u=Number(r),c=Number(i);return!Number.isFinite(u)||u<=0||!Number.isFinite(c)?[]:[{pid:u,parentPid:c,creationTime:a}]});return n.length>0?n:void 0}s(Mr,"parseWindowsNativeProcessRows");function wt(){return Ta()??Pa()}s(wt,"readWindowsProcessSnapshot");function Ar(e,t,n){let o=new Map;for(let u of e)o.set(u.parentPid,[...o.get(u.parentPid)??[],u]);let r=[],i=[{pid:t,...n===void 0?{}:{creationTime:n},ancestryVerified:n!==void 0&&n!=="0"}],a=new Set([t]);for(;i.length>0;){let u=i.shift();if(u===void 0)break;for(let c of o.get(u.pid)??[]){if(a.has(c.pid)||!_a(c.creationTime,u.creationTime))continue;a.add(c.pid);let d=u.ancestryVerified&&c.creationTime!=="0";r.push(d?c:{...c,creationTime:"0"}),i.push({pid:c.pid,creationTime:c.creationTime,ancestryVerified:d})}}return r}s(Ar,"collectDescendantIdentities");function _a(e,t){if(e==="0"||t===void 0||t==="0")return!0;try{return BigInt(e)>=BigInt(t)}catch{return!1}}s(_a,"windowsCreationAtLeast");function Ca(e,t=wt()){if(t===void 0)return;let n=new Set(t.filter(r=>r.creationTime==="0").map(r=>r.pid));if(e.some(r=>n.has(r.pid)))return;let o=new Set(t.filter(r=>r.creationTime!=="0").map(r=>`${r.pid}:${r.creationTime}`));return new Set(e.filter(r=>r.creationTime!=="0").filter(r=>o.has(`${r.pid}:${r.creationTime}`)).map(r=>r.pid))}s(Ca,"currentCapturedWindowsPids");function no(e,t=wt()){if(t===void 0)return;let n=Ca([e.root,...e.descendants],t);if(n!==void 0){if(n.size>0)return!1;if(e.completeTree)return e.uncertainDescendantPids.every(o=>!t.some(r=>r.pid===o))?!0:void 0}}s(no,"capturedWindowsProcessesGone");function Sa(e){return[e.root.pid,...e.descendants.map(t=>t.pid),...e.uncertainDescendantPids].some(to)}s(Sa,"capturedWindowsPidMayBeAlive");async function Cr(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!Sa(e))return no(e)===!0;await new Promise(o=>setTimeout(o,50))}return no(e)===!0}s(Cr,"waitForCapturedWindowsProcessesExit");var Ir="KODAX_TERMINATION_COMPLETED",Or="KODAX_SNAPSHOT_COMPLETED";function Ra(e,t){let n=e.trim().split(/\r?\n/),o=n.indexOf(Ir),r=n.indexOf(Or);return{terminationAttempted:t||o>=0,snapshot:t&&o>=0&&r>o?Mr(n.slice(o+1,r).join(`
123
+ `)):void 0}}s(Ra,"readWindowsTerminationResult");function Sr(e,t=!1){let n=[...e].reverse().flatMap(i=>/^\d+$/.test(i.creationTime)?[`[KodaXNativeProcessSnapshot]::TerminateExact(${i.pid}, [UInt64]${i.creationTime}) | Out-Null`]:[]);if(n.length===0)return{terminationAttempted:!1};let o=["$source = @'",Rr,"'@","Add-Type -TypeDefinition $source",...n,...t?[`[Console]::Out.WriteLine('${Ir}')`,"[Console]::Out.Flush()","[Console]::Out.Write([KodaXNativeProcessSnapshot]::ReadRows())",`[Console]::Out.WriteLine('${Or}')`,"[Console]::Out.Flush()"]:[]].join(`
124
+ `),r=Vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",o],{encoding:"utf8",timeout:ka,windowsHide:!0});return Ra(r.stdout??"",!r.error&&r.status===0)}s(Sr,"terminateCapturedWindowsProcesses");var xt=new WeakMap;function qe(e){if(process.platform!=="win32"||e.pid===void 0)return;let t=xt.get(e),n=wt();if(t!==void 0&&Me(e)){if(n===void 0)return t.root.creationTime;let r=n.find(a=>a.pid===e.pid);if(r!==void 0&&r.creationTime!==t.root.creationTime)return t.root.creationTime;let i=Ar(n,t.root.pid,t.root.creationTime);return xt.set(e,{root:t.root,descendants:i.filter(a=>a.creationTime!=="0"),uncertainDescendantPids:i.filter(a=>a.creationTime==="0").map(a=>a.pid),completeTree:t.completeTree}),t.root.creationTime}let o=n?.find(r=>r.pid===e.pid&&r.creationTime!=="0");if(o===void 0&&n!==void 0&&!Me(e)&&(o=wt()?.find(r=>r.pid===e.pid&&r.creationTime!=="0")),!(o===void 0||Me(e)))return xt.set(e,{root:o,descendants:[],uncertainDescendantPids:[],completeTree:!1}),o.creationTime}s(qe,"rememberChildProcessTree");function Ma(e,t){let n=wt();if(n===void 0)return;let o=n.find(i=>i.pid===e);if(o===void 0||o.creationTime==="0"||o.creationTime!==t)return null;let r=Ar(n,e,o.creationTime);return{root:o,descendants:r.filter(i=>i.creationTime!=="0"),uncertainDescendantPids:r.filter(i=>i.creationTime==="0").map(i=>i.pid),completeTree:!0}}s(Ma,"captureWindowsProcessTree");async function Zn(e){let t=[e.root,...e.descendants],n=Sr(t,e.completeTree);return e.completeTree?n.snapshot!==void 0&&no(e,n.snapshot)===!0||await Cr(e,Re)?fe:n.terminationAttempted?(Sr(t),await Cr(e,Re)?fe:U):U:U}s(Zn,"killCapturedWindowsTree");async function qt(e){let t;if(process.platform==="win32"&&e.pid!==void 0){let n=xt.get(e),o=n===void 0?void 0:Ma(e.pid,n.root.creationTime);o!=null&&xt.set(e,o);let r=o??n;return o===void 0&&r===void 0||Me(e)&&r!==void 0&&!r.completeTree&&r.descendants.length===0?U:(t=o===void 0?r===void 0?U:await Zn(r):o===null?r===void 0?U:await Zn(r):await Zn(o),await Qn(e,Re)?t.status==="unknown"?U:fe:U)}if(e.pid!==void 0&&process.platform!=="win32")return Pr(e.pid,"SIGTERM")?await _r(e.pid,Re)?fe:(Pr(e.pid,"SIGKILL"),await _r(e.pid,Re)?fe:U):wr;if(Me(e))return process.platform==="win32"&&e.pid!==void 0?U:wr;try{e.kill("SIGTERM")}catch{return Me(e)&&t?.status!=="unknown"?fe:U}if(await Qn(e,Re))return t?.status==="unknown"?U:fe;try{e.kill("SIGKILL")}catch{}return await Qn(e,Re)?t?.status==="unknown"?U:fe:U}s(qt,"killChildProcessTree");var de=class extends Error{static{s(this,"AcpTransportClosedError")}constructor(){super("ACP transport closed before the request completed"),this.name="AcpTransportClosedError"}},Jt=class{static{s(this,"AcpClient")}client=null;agentProcess=null;options;constructor(t){this.options=t}async connect(){let{ClientSideConnection:t,PROTOCOL_VERSION:n,ndJsonStream:o}=await import("@agentclientprotocol/sdk"),r,i;if(this.options.inputStream&&this.options.outputStream)r=this.options.inputStream,i=this.options.outputStream;else if(this.options.command){let c=Gt.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Aa(c,this.options.args??[],{cwd:this.options.cwd??Gt.cwd(),stdio:["pipe","pipe","inherit"],detached:Gt.platform!=="win32",windowsHide:!0}),qe(this.agentProcess),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");i=Oa.toWeb(this.agentProcess.stdin),r=Ia.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let a=o(i,r);if(this.client=new t(()=>({sessionUpdate:s(async u=>{this.options.onSessionUpdate?.(u)},"sessionUpdate"),requestPermission:s(async u=>{let c=u.options??[],d=c.find(f=>f.kind==="allow_once"||f.kind==="allow_always")??c[0];return d?{outcome:{outcome:"selected",optionId:d.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),a),this.client.signal.aborted)throw new de;await this.awaitWhileConnected(this.client.initialize({protocolVersion:n,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}}))}async createNewSession(){if(!this.client)throw new Error("Client not connected");if(this.client.signal.aborted)throw new de;return(await this.awaitWhileConnected(this.client.newSession({cwd:this.options.cwd??Gt.cwd(),mcpServers:[]}))).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");if(o?.throwIfAborted(),this.client.signal.aborted)throw new de;let i={sessionId:n,prompt:[{type:"text",text:t}]};r?.model&&(i.model=r.model),r?.reasoningEffort&&(i.effort=r.reasoningEffort);let a=this.client.prompt(i);if(o){let u,c=new Promise((f,p)=>{u=p}),d=s(()=>{this.client?.cancel({sessionId:n}).catch(()=>{});let f=new Error("ACP prompt aborted");f.name="AbortError",u?.(o.reason??f)},"onAbort");o.addEventListener("abort",d,{once:!0}),a=Promise.race([a,c]).finally(()=>{o.removeEventListener("abort",d)})}return await this.awaitWhileConnected(a)}isConnectionOpen(){return this.client!==null&&!this.client.signal.aborted}releaseSession(t){this.options.releaseSession?.(t)}disconnect(){this.agentProcess&&qt(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}async awaitWhileConnected(t){let n=this.client;if(!n||n.signal.aborted)throw t.catch(()=>{}),new de;let o,r=new Promise((i,a)=>{o=s(()=>a(new de),"onClosed"),n.signal.addEventListener("abort",o,{once:!0})});try{return await Promise.race([t,r])}finally{o&&n.signal.removeEventListener("abort",o)}}};function Da(e){if(!e||typeof e!="object")return;let t=e,n=t.inputTokens,o=t.outputTokens,r=t.totalTokens;if([n,o,r].some(l=>typeof l!="number"||!Number.isFinite(l)||l<0))return;let i=n,a=o,u=r;if(u<i||u<a)return;let c=s(l=>typeof l=="number"&&Number.isFinite(l)&&l>=0?l:void 0,"optionalToken"),d=c(t.cachedReadTokens),f=c(t.cachedWriteTokens),p=c(t.thoughtTokens);return{inputTokens:i,outputTokens:a,totalTokens:u,...d!==void 0?{cachedReadTokens:d}:{},...f!==void 0?{cachedWriteTokens:f}:{},...p!==void 0?{thoughtTokens:p}:{}}}s(Da,"normalizeAcpUsage");function La(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}s(La,"selectAcpReasoningEffort");function Dr(e){if(!e?.aborted)return;let t=e.reason;if(!(t===void 0||t instanceof Error&&t.name==="AbortError"))return t}s(Dr,"nonCancellationAbortReason");var ye=class extends ue{static{s(this,"KodaXAcpProvider")}_client=null;_clientConnectPromise=null;_connectingClient=null;_clientGeneration=0;_sessionMap=new Map;_activeStreams=new Map;_activeConversationIds=new Set;async ensureClient(t){if(this._client?.isConnectionOpen())return this._client;if(this._client&&this.invalidateClient(this._client),!this._clientConnectPromise){let n=this._clientGeneration===0?this.acpClientOptions:this.acpClientOptions.recreate?.()??this.acpClientOptions;this._clientGeneration+=1;let o={...n,onSessionUpdate:t},r=new Jt(o);this._connectingClient=r;let i;i=r.connect().then(()=>{if(this._clientConnectPromise!==i||this._connectingClient!==r)throw new Error("ACP client initialization was cancelled");return this._connectingClient=null,this._client=r,r}).catch(a=>{throw this._connectingClient===r&&(this._connectingClient=null,r.disconnect()),a}).finally(()=>{this._clientConnectPromise===i&&(this._clientConnectPromise=null)}),this._clientConnectPromise=i}return await this._clientConnectPromise}invalidateClient(t){this._client===t&&(this._client=null,this._sessionMap.clear(),t.disconnect())}supportsEphemeralSuffix(){return!0}isConfigured(){return!0}async verifyCredential(){return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`CLI-bridge provider "${this.name}" manages credentials in its CLI binary's token store; not verifiable from the KodaX SDK`}}getDiagnosticPromptText(t,n){let o=t.map(a=>Array.isArray(a.content)?{...a,content:He(a.content)}:a),r=o[o.length-1],i="";if(r&&typeof r.content=="string")i=r.content;else if(r&&Array.isArray(r.content)){let a=[];for(let u of r.content)if(u.type==="text")a.push(u.text);else if(u.type==="image"){let c=this.serializeImageBlockToPromptToken(u);c&&a.push(c)}i=a.join(`
125
+ `)}return n?i.length>0?`${i}
126
+
127
+ ${n}`:n:i}getCapabilityProfile(){return Z(bt)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=He(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,i,a){let u=this.normalizeReasoning(r),c=La(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 d=[],f=[],p=i?.ephemeralSuffix?.content,l=this.getDiagnosticPromptText(t,p),h=s(g=>{let y=g.update,k=g.sessionId;if(!("sessionUpdate"in y))return;let v=k?this._activeStreams.get(k):void 0;if(v)switch(y.sessionUpdate){case"agent_message_chunk":if(y.content?.type==="text"){let x=y.content.text;v.output.text+=x,v.streamOptions?.onTextDelta?.(x)}break;case"tool_call":{let x="{}",P=y,R=P.arguments??P.parameters;R&&(x=typeof R=="string"?R:JSON.stringify(R)),v.streamOptions?.onToolInputDelta?.(y.title,x);let E=`
128
+ > [Tool Use] ${y.title}: ${x}
129
+ `;v.output.text+=E,v.streamOptions?.onTextDelta?.(E);break}case"tool_call_update":if(y.status){let x=`> [Tool Result] ${y.status}
130
+
131
+ `;v.output.text+=x,v.streamOptions?.onTextDelta?.(x)}break}},"onSessionUpdate"),m=i?.sessionId,T=await this.ensureClient(h);if(m&&this._activeConversationIds.has(m))throw new Error(`ACP conversation "${m}" already has an active prompt`);m&&this._activeConversationIds.add(m);try{let g=m?this._sessionMap.get(m):void 0;g||(g=await T.createNewSession(),m&&this._sessionMap.set(m,g));let y={text:""};this._activeStreams.set(g,{streamOptions:i,output:y});let k;try{k=await T.prompt(l,g,a,{model:i?.modelOverride,reasoningEffort:c})}catch(v){v instanceof de&&this.invalidateClient(T);let x=Dr(a);if(x!==void 0)throw x;if(!(a?.aborted||v instanceof Error&&v.name==="AbortError"))throw v}finally{this._activeStreams.delete(g),m||T.releaseSession(g)}if(k?.stopReason==="cancelled"){let v=Dr(a);if(v!==void 0)throw v}return y.text&&d.push({type:"text",text:y.text}),{textBlocks:d,toolBlocks:f,thinkingBlocks:[],usage:Da(k?.usage)}}catch(g){throw g instanceof de&&this.invalidateClient(T),g}finally{m&&this._activeConversationIds.delete(m)}}disconnect(){this._clientConnectPromise=null;let t=this._connectingClient;this._connectingClient=null,t?.disconnect(),this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._activeConversationIds.clear(),this._sessionMap.clear()}};import{spawn as $a}from"node:child_process";import Pt from"node:process";var Ge=class{static{s(this,"CLIExecutor")}config;_installedCache=null;constructor(t){this.config=t}async isInstalled(){return this._installedCache!==null?this._installedCache:(this._installedCache=await this.checkInstalled(),this._installedCache)}async*execute(t){let n=this.buildArgs(t),o={...Pt.env,...this.config.env},i=Pt.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=$a(i,n,{cwd:this.config.cwd??Pt.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:Pt.platform!=="win32",windowsHide:!0}),u="";a.stderr?.on("data",E=>{u+=E.toString()});let c=new AbortController,d={},f,p=new Promise(E=>{f=s(()=>E(d),"resolveAbort")});qe(a);let l=s(()=>{if(c.signal.aborted)return;let E=t.signal?.reason;E===void 0?c.abort():c.abort(E)},"forwardExternalAbort");t.signal?.addEventListener("abort",l),t.signal?.aborted&&l();let h=!1,m,T=s(()=>(m||(m=(async()=>{let E={status:"unknown"};for(let _=0;_<3;_+=1){if(qe(a),E=await qt(a),E.status!=="unknown"||h&&!c.signal.aborted)return E;_<2&&await new Promise(b=>setTimeout(b,50))}return E})()),m),"terminateChild"),g=s(()=>{f?.(),h||(T(),a.stdout?.destroy())},"abortHandler");c.signal.addEventListener("abort",g),c.signal.aborted&&g(),a.on("exit",()=>{h=!0,qe(a)});let y=!1,k,v,x=this.config.timeout;x!==void 0&&Number.isFinite(x)&&x>0&&!c.signal.aborted&&(v=setTimeout(()=>{c.signal.aborted||(y=!0,k=new Error(`Provider CLI timed out after ${x}ms`),c.abort(k))},x),v.unref?.());let P=s(async E=>{let _=await Promise.race([E,p]);if(_===d)throw c.signal.reason??k??new Error("Provider CLI execution aborted");return _},"waitForExecution"),R=new Promise((E,_)=>{a.once("error",_),a.once("close",(b,C)=>E({code:b,signal:C}))});try{let E=this.parseOutputStream(a.stdout,c.signal)[Symbol.asyncIterator]();for(;;){let C=await P(E.next());if(C.done)break;yield C.value}if(c.signal.aborted)throw c.signal.reason;let _=await P(R);if(y)throw k??c.signal.reason;let b=u.trim();if(!t.signal?.aborted&&_.code!==0){let C=_.code===null?`signal ${_.signal??"unknown"}`:`code ${_.code}`;throw new Error(`Provider CLI exited with ${C}${b?`: ${b}`:""}`)}b&&console.error(`[CLIExecutor] stderr: ${b}`)}catch(E){throw R.catch(()=>{}),c.signal.aborted?c.signal.reason:E}finally{if(v&&clearTimeout(v),t.signal?.removeEventListener("abort",l),c.signal.removeEventListener("abort",g),Pt.platform==="win32"||m!==void 0||!h){let E=m!==void 0;if((await T()).status==="unknown"&&(E||!h))throw new Error("Provider CLI process-tree termination could not be verified")}}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let i=o.split(`
132
+ `);o=i.pop()??"";for(let a of i){if(!a.trim())continue;let u=this.parseLine(a.trim());u&&(yield u)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as Na}from"node:child_process";import ja from"node:process";async function Yt(e){try{let t=ja.platform==="win32",n=Na(t?`${e}.cmd`:e,["--version"],{windowsHide:!0});return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}s(Yt,"checkCliCommandInstalled");function Qt(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}s(Qt,"finiteNonNegative");function Fa(e){if(!(!e||!Qt(e.input_tokens)||!Qt(e.output_tokens)||!Qt(e.total_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.total_tokens,...Qt(e.cached)?{cachedReadTokens:e.cached}:{}}}s(Fa,"normalizeGeminiUsage");var Zt=class extends Ge{static{s(this,"GeminiCLIExecutor")}model;constructor(t){super({command:"gemini",baseArgs:["--output-format","stream-json","--approval-mode","yolo"],timeout:3e5,...t}),this.model=t?.model??"gemini-2.5-pro"}async checkInstalled(){return Yt("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:Fa(t.stats),raw:t};default:return null}}};import{TransformStream as Lr}from"node:stream/web";import{randomUUID as oo}from"node:crypto";function Tt(e){let t=new Lr,n=new Lr,o=t.readable.getReader(),r=n.writable.getWriter(),i=new TextDecoder,a=new TextEncoder,u="",c=oo(),d=new AbortController,f=new Map,p=new Map;(async()=>{try{for(;;){let{done:g,value:y}=await o.read();if(g)break;u+=i.decode(y,{stream:!0});let k=u.split(`
133
+ `);u=k.pop()??"";for(let v of k)if(v.trim())try{let x=JSON.parse(v);h(x).catch(P=>{console.error("[PseudoAcpServer] Failed to handle request:",P)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",v)}}}catch(g){console.error("[PseudoAcpServer] Stream read error:",g)}})();let l=s(async g=>{let y=JSON.stringify(g)+`
134
+ `;await r.write(a.encode(y))},"sendMsg");async function h(g){if(g.method==="initialize")await l({jsonrpc:"2.0",id:g.id,result:{protocolVersion:g.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(g.method==="session/new"||g.method==="sessions/new")c=g.params?.sessionId??oo(),await l({jsonrpc:"2.0",id:g.id,result:{sessionId:c}});else if(g.method==="session/prompt"||g.method==="chat/prompt"){let y=new AbortController,k=g.params.sessionId;f.set(k,y);let v=s(()=>y.abort(),"onGlobalAbort");d.signal.addEventListener("abort",v);let x=m(k,g.params.prompt,typeof g.params.model=="string"?g.params.model:void 0,typeof g.params.effort=="string"?g.params.effort:void 0,y.signal).finally(()=>{f.delete(k),d.signal.removeEventListener("abort",v)});try{let P=await x;await l({jsonrpc:"2.0",id:g.id,result:P.usage?{stopReason:P.stopReason,usage:P.usage}:{stopReason:P.stopReason}})}catch(P){await l({jsonrpc:"2.0",id:g.id,error:{code:-32e3,message:P instanceof Error?P.message:String(P)}})}}else if(g.method==="session/cancel"||g.method==="chat/cancel"){let y=f.get(g.params.sessionId);y&&y.abort(),g.id!==void 0&&await l({jsonrpc:"2.0",id:g.id,result:{}})}else g.id!==void 0&&await l({jsonrpc:"2.0",id:g.id,result:{}})}s(h,"handleRequest");let m=s(async(g,y,k,v,x)=>{let P=y.find(_=>_.type==="text")?.text??"",R,E=!1;try{let _=e.execute({prompt:P,model:k,reasoningEffort:v,sessionId:p.get(g),signal:x});for await(let b of _){if(b.type==="error")throw new Error(b.message);if(b.type==="complete"&&b.status==="failed")throw new Error("Provider CLI reported a failed completion");b.type==="session_start"&&b.sessionId&&p.set(g,b.sessionId);let C=T(b);C&&await l({jsonrpc:"2.0",method:"session/update",params:{sessionId:g,update:C}}),b.type==="complete"&&(E=!0,R=b.usage)}if(!x.aborted&&!E)throw new Error("Provider CLI ended without a completion event");return{stopReason:x.aborted?"cancelled":"end_turn",...R!==void 0?{usage:R}:{}}}catch(_){if(x.aborted||_ instanceof Error&&_.name==="AbortError")return{stopReason:"cancelled"};throw _}},"executePrompt"),T=s(g=>{switch(g.type){case"message":if(g.role==="assistant"&&g.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:g.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:g.toolName,arguments:g.parameters,status:"running",toolCallId:g.toolId||oo()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:g.toolId,status:g.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
135
+ [Error: ${g.message}]
136
+ `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:s(()=>{d.abort(),f.clear(),p.clear(),o.cancel().catch(()=>{}),r.abort().catch(()=>{})},"abort"),releaseSession:s(g=>{p.delete(g)},"releaseSession"),recreate:s(()=>Tt(e),"recreate"),executor:e}}s(Tt,"createPseudoAcpServer");import $r from"node:fs";import Nr from"node:os";import jr from"node:path";var Ba="gpt-5.4",Ka="auto-gemini-3",Ua=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Wa=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Fr(e){let t=new Set,n=[];for(let o of e){let r=o.trim();if(!r)continue;let i=r.toLowerCase();t.has(i)||(t.add(i),n.push(r))}return n}s(Fr,"dedupePreserveOrder");function za(){let e=jr.join(Nr.homedir(),".codex","config.toml");try{return $r.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}s(za,"readCodexConfiguredModel");function Xa(){let e=jr.join(Nr.homedir(),".gemini","settings.json");try{let t=JSON.parse($r.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}s(Xa,"readGeminiConfiguredModel");function Je(){return za()||Ba}s(Je,"getCodexCliDefaultModel");function Ye(){return Xa()||Ka}s(Ye,"getGeminiCliDefaultModel");function _t(){return Fr([Je(),...Ua])}s(_t,"getCodexCliKnownModels");function Ct(){return Fr([Ye(),...Wa])}s(Ct,"getGeminiCliKnownModels");var ro=Ye(),Ha=Ct(),Va={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},en=class extends ye{static{s(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:ro,models:Ha.filter(t=>t!==ro).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new Zt({model:ro});this.acpClientOptions=Tt(t)}getCapabilityProfile(){return Z(Va)}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 tn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}s(tn,"finiteNonNegative");function qa(e){if(!(!e||!tn(e.input_tokens)||!tn(e.output_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.output_tokens,...tn(e.cached_input_tokens)?{cachedReadTokens:e.cached_input_tokens}:{},...tn(e.cache_write_input_tokens)?{cachedWriteTokens:e.cache_write_input_tokens}:{}}}s(qa,"normalizeCodexUsage");function Ga(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}s(Ga,"buildReasoningEffortArgs");var nn=class extends Ge{static{s(this,"CodexCLIExecutor")}model;constructor(t){super({command:"codex",baseArgs:["exec","--json","--full-auto"],timeout:3e5,...t}),this.model=t?.model??"gpt-5.4"}async checkInstalled(){return Yt("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=Ga(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:qa(t.usage),raw:t};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:t.type,message:t.message??"Unknown error",raw:t};default:return null}}};var io=Je(),Ja=_t(),on=class extends ye{static{s(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:io,models:Ja.filter(t=>t!==io).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new nn({model:io});this.acpClientOptions=Tt(t)}};import{existsSync as su,readFileSync as au}from"node:fs";import Ze from"node:path";import{fileURLToPath as uu}from"node:url";var Br=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Kr=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Ur=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Wr=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],zr=["max_tokens","max_completion_tokens"],Xr=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Hr=["count-tokens","models-list","minimal-message","unsupported"];function pe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}s(pe,"isPlainObject");function Ae(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}s(Ae,"requireString");function Qe(e,t){if(e!==void 0)return Ae(e,t)}s(Qe,"optionalString");function Gr(e,t){if(e!==void 0){if(typeof e!="string"||!zr.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${zr.join(", ")}, got ${JSON.stringify(e)}`);return e}}s(Gr,"optionalMaxOutputTokensField");function ve(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}s(ve,"optionalNumber");function B(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}s(B,"optionalBoolean");function Vr(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)=>Ae(n,`${t}[${o}]`))}}s(Vr,"optionalStringArray");function Ya(e,t){if(e===void 0)return;if(!pe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=Ae(r,`${t}.${o}`);return n}s(Ya,"optionalStringMap");function Qa(e,t){if(e!==void 0){if(typeof e!="string"||!Wr.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Wr.join(", ")}, got ${JSON.stringify(e)}`);return e}}s(Qa,"optionalReasoningPreset");function so(e,t){if(typeof e!="string"||!Br.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Br.join(", ")}, got ${JSON.stringify(e)}`);return e}s(so,"requireReasoningCapability");function Za(e,t){if(typeof e!="string"||!Kr.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Kr.join(", ")}, got ${JSON.stringify(e)}`);return e}s(Za,"requireEffortStrategy");function eu(e,t){if(e!==void 0){if(typeof e!="string"||!Ur.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ur.join(", ")}, got ${JSON.stringify(e)}`);return e}}s(eu,"optionalThinkingStrategy");function qr(e,t){if(e===void 0)return;if(!pe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Za(e.effortStrategy,`${t}.effortStrategy`),o=Qa(e.reasoningPreset,`${t}.reasoningPreset`),r=eu(e.thinkingStrategy,`${t}.thinkingStrategy`),i=Qe(e.defaultEffort,`${t}.defaultEffort`),a=Ya(e.effortAliases,`${t}.effortAliases`),u=Vr(e.disabledEfforts,`${t}.disabledEfforts`),c=Vr(e.localRejectEfforts,`${t}.localRejectEfforts`),d=B(e.allowCustomEffort,`${t}.allowCustomEffort`),f=B(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=B(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),l=B(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),h=B(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),m=B(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),T=B(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),g=B(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),y={effortStrategy:n};if(o!==void 0&&(y.reasoningPreset=o),r!==void 0&&(y.thinkingStrategy=r),i!==void 0&&(y.defaultEffort=i),a!==void 0&&(y.effortAliases=a),u!==void 0&&(y.disabledEfforts=u),c!==void 0&&(y.localRejectEfforts=c),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);y.supportedEfforts=e.supportedEfforts.map((k,v)=>{if(!pe(k))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${v}] must be an object`);return{value:Ae(k.value,`${t}.supportedEfforts[${v}].value`),...Qe(k.description,`${t}.supportedEfforts[${v}].description`)!==void 0?{description:Qe(k.description,`${t}.supportedEfforts[${v}].description`)}:{},...B(k.isDefault,`${t}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:B(k.isDefault,`${t}.supportedEfforts[${v}].isDefault`)}:{},...B(k.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:B(k.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!pe(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let k={};for(let[v,x]of Object.entries(e.budgetByEffort))k[v]=ve(x,`${t}.budgetByEffort.${v}`)??0;y.budgetByEffort=k}return d!==void 0&&(y.allowCustomEffort=d),f!==void 0&&(y.supportsReasoningEffort=f),p!==void 0&&(y.supportsReasoningSummary=p),l!==void 0&&(y.supportsEncryptedReasoningReplay=l),h!==void 0&&(y.supportsAdaptiveThinking=h),m!==void 0&&(y.supportsManualThinkingBudget=m),T!==void 0&&(y.supportsDisabledThinking=T),g!==void 0&&(y.requiresEffortBetaHeader=g),y}s(qr,"validateReasoningProfile");function Jr(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?qr(n,`${t}.reasoningProfile`):qr(o,`${t}.reasoningCapabilityV2`)}s(Jr,"validateReasoningProfileField");function tu(e,t){if(typeof e!="string"||!Xr.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Xr.join(", ")}, got ${JSON.stringify(e)}`);return e}s(tu,"requireProfileName");function nu(e,t){if(typeof e!="string"||!Hr.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Hr.join(", ")}, got ${JSON.stringify(e)}`);return e}s(nu,"requireVerifyStrategy");function ou(e,t){if(!pe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Ae(e.id,`${t}.id`),o=Qe(e.wireModel,`${t}.wireModel`),r=Qe(e.displayName,`${t}.displayName`),i=ve(e.contextWindow,`${t}.contextWindow`),a=ve(e.maxOutputTokens,`${t}.maxOutputTokens`),u=Gr(e.maxOutputTokensField,`${t}.maxOutputTokensField`),c=ve(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),d=B(e.replayReasoningContent,`${t}.replayReasoningContent`),f=B(e.strictThinkingSignature,`${t}.strictThinkingSignature`),p=ve(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),l=e.reasoningCapability===void 0?void 0:so(e.reasoningCapability,`${t}.reasoningCapability`),h=Jr(e,t),m={id:n};return o!==void 0&&(m.wireModel=o),r!==void 0&&(m.displayName=r),i!==void 0&&(m.contextWindow=i),a!==void 0&&(m.maxOutputTokens=a),u!==void 0&&(m.maxOutputTokensField=u),c!==void 0&&(m.thinkingBudgetCap=c),l!==void 0&&(m.reasoningCapability=l),h!==void 0&&(m.reasoningProfile=h),d!==void 0&&(m.replayReasoningContent=d),f!==void 0&&(m.strictThinkingSignature=f),p!==void 0&&(m.streamMaxDurationMs=p),m}s(ou,"validateModelDescriptor");function ru(e,t){if(e===void 0)return;if(!pe(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=so(r,`${t}.${o}`);return n}s(ru,"validateModelReasoningCapabilities");function iu(e,t){if(!pe(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=B(e.cliBridge,`providers.${t}.cliBridge`),o=Ae(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=so(e.reasoningCapability,`providers.${t}.reasoningCapability`),i=Jr(e,`providers.${t}`),a=tu(e.capabilityProfile,`providers.${t}.capabilityProfile`),u=nu(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=ve(e.contextWindow,`providers.${t}.contextWindow`),d=ve(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),f=Gr(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),p=ve(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),l=B(e.supportsThinking,`providers.${t}.supportsThinking`),h=ru(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),m=Qe(e.model,`providers.${t}.model`);if(n&&(m!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&m===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let 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((k,v)=>ou(k,`providers.${t}.models[${v}]`));let y=new Set([...m===void 0?[]:[m],...T.map(k=>k.id)]);for(let[k,v]of T.entries())if(v.wireModel!==void 0&&!y.has(v.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${k}].wireModel must reference a declared model, got ${JSON.stringify(v.wireModel)}`)}let g={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:a,verifyStrategy:u};return i!==void 0&&(g.reasoningProfile=i),m!==void 0&&(g.model=m),T!==void 0&&(g.models=T),c!==void 0&&(g.contextWindow=c),d!==void 0&&(g.maxOutputTokens=d),f!==void 0&&(g.maxOutputTokensField=f),p!==void 0&&(g.thinkingBudgetCap=p),l!==void 0&&(g.supportsThinking=l),h!==void 0&&(g.modelReasoningCapabilities=h),n&&(g.cliBridge=!0),g}s(iu,"validateProviderEntry");function Yr(e){if(!pe(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=Ae(e.updatedAt,"updatedAt");if(!pe(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]=iu(r,o);return{version:1,updatedAt:t,providers:n}}s(Yr,"validateProviderCapabilitiesJson");var cu=Object.freeze({native:ae,"image-input-native":ir,"cli-bridge":bt,"image-input-cli-bridge":sr}),rn=null;function du(){if(process.env.KODAX_BUNDLED==="true")return Ze.join(Ze.dirname(process.execPath),"provider-capabilities.json");let e=Ze.dirname(uu(import.meta.url)),t=[Ze.join(e,"provider-capabilities.json"),Ze.join(Ze.dirname(e),"provider-capabilities.json")];for(let n of t)if(su(n))return n;return t[0]}s(du,"resolveJsonPath");function lu(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Qr(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Qr(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}s(lu,"deepFreezeSnapshot");function Qr(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}s(Qr,"freezeReasoningProfile");function fu(e){if(e==="gemini-cli"){let t=Ye();return{model:t,models:Ct().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=Je();return{model:t,models:_t().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}s(fu,"resolveCliBridgeModels");function pu(e,t){let n=cu[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let r=fu(e),i={model:r.model,models:r.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(i.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(i.supportsThinking=t.supportsThinking),i}let o={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(o.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(o.models=t.models),t.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(o.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(o.maxOutputTokens=t.maxOutputTokens),t.maxOutputTokensField!==void 0&&(o.maxOutputTokensField=t.maxOutputTokensField),t.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(o.supportsThinking=t.supportsThinking),o}s(pu,"buildSnapshot");function Zr(){if(rn)return rn;let e=du(),t;try{let r=au(e,"utf8");t=JSON.parse(r)}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${e}: ${i}`)}let n=Yr(t),o={};for(let[r,i]of Object.entries(n.providers))o[r]=lu(pu(r,i));return rn=Object.freeze(o),rn}s(Zr,"getProviderSnapshots");var W=Zr();function V(e,t={}){let n=W[e];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,maxOutputTokensField:n.maxOutputTokensField,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...t}}s(V,"buildProviderConfig");var ao=class extends N{static{s(this,"AnthropicProvider")}name="anthropic";config=V("anthropic",{strictThinkingSignature:!0});buildClient(){return Gn({apiKey:this.getApiKey()})}},uo=class extends N{static{s(this,"ZhipuCodingProvider")}name="zhipu-coding";config=V("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},co=class extends N{static{s(this,"ZaiCodingProvider")}name="zai-coding";config=V("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},lo=class extends N{static{s(this,"KimiCodeProvider")}name="kimi-code";config=V("kimi-code",{baseUrl:"https://api.kimi.com/coding/",promptCacheAffinity:!0})},fo=class extends N{static{s(this,"MiniMaxCodingProvider")}name="minimax-coding";config=V("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},po=class extends N{static{s(this,"MimoCodingProvider")}name="mimo-coding";config=V("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},go=class extends N{static{s(this,"MimoProvider")}name="mimo";config=V("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},mo=class extends N{static{s(this,"ArkCodingProvider")}name="ark-coding";config=V("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},ho=class extends re{static{s(this,"OpenAIProvider")}name="openai";config=V("openai",{promptCacheAffinity:!0})},yo=class extends N{static{s(this,"DeepSeekProvider")}name="deepseek";config=V("deepseek",{baseUrl:"https://api.deepseek.com/anthropic"})},vo=class extends re{static{s(this,"KimiProvider")}name="kimi";config=V("kimi",{baseUrl:"https://api.moonshot.cn/v1",promptCacheAffinity:!0,replayReasoningContent:!0})},bo=class extends re{static{s(this,"QwenProvider")}name="qwen";config=V("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},Eo=class extends N{static{s(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=V("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},ko=class extends re{static{s(this,"ZhipuProvider")}name="zhipu";config=V("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},te={anthropic:s(()=>new ao,"anthropic"),openai:s(()=>new ho,"openai"),deepseek:s(()=>new yo,"deepseek"),kimi:s(()=>new vo,"kimi"),"kimi-code":s(()=>new lo,"kimi-code"),qwen:s(()=>new bo,"qwen"),"qwen-token-plan":s(()=>new Eo,"qwen-token-plan"),zhipu:s(()=>new ko,"zhipu"),"zhipu-coding":s(()=>new uo,"zhipu-coding"),"zai-coding":s(()=>new co,"zai-coding"),"minimax-coding":s(()=>new fo,"minimax-coding"),"mimo-coding":s(()=>new po,"mimo-coding"),mimo:s(()=>new go,"mimo"),"ark-coding":s(()=>new mo,"ark-coding"),"gemini-cli":s(()=>new en,"gemini-cli"),"codex-cli":s(()=>new on,"codex-cli")},xo=process.env.KODAX_PROVIDER??"zhipu-coding",ei=new Map;function gu(e){if(z(e))return W[e].apiKeyEnv}s(gu,"resolveApiKeyEnvForProvider");function ti(e){let t=e??xo,n=te[t];if(!n)throw new I(`Unknown provider: ${t}. Available: ${Object.keys(te).join(", ")}`,t,{failureCode:"provider_not_registered",stage:"catalog"});if(we())return n();let o=gu(t),r=Le(t,o?process.env[o]:void 0),i=ei.get(t);if(i&&i.apiKey===r)return i.instance;let a=n();return ei.set(t,{apiKey:r,instance:a}),a}s(ti,"getProvider");function ni(e){if(!z(e))return!1;let t=xe(e);return t!==void 0?t:Le(e,process.env[W[e].apiKeyEnv])!==void 0}s(ni,"isProviderConfigured");function oi(e){return z(e)?W[e].model:null}s(oi,"getProviderModel");function ri(e,t){if(!z(e))return"unknown";let n=W[e],o=t??n.model;return n.models?.find(i=>i.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}s(ri,"getProviderConfiguredReasoningCapability");function ii(e){return z(e)?Z(W[e].capabilityProfile):null}s(ii,"getProviderConfiguredCapabilityProfile");function si(){let e=[];for(let t of Object.keys(te)){let n=W[t];e.push({name:t,model:n.model,models:wo(t),configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:Z(n.capabilityProfile)})}return e}s(si,"getProviderList");function wo(e){return et(e).map(t=>t.id)}s(wo,"getProviderModels");function z(e){return e in te}s(z,"isProviderName");function ai(e){return{id:e.model}}s(ai,"makeDefaultDescriptor");function ui(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}s(ui,"resolveWireModelDescriptor");function sn(e,t,n){let o=n.id===t.model;return{provider:e,model:n.id,displayName:n.displayName??n.id,supportsThinking:t.supportsThinking??!1,reasoningCapability:n.reasoningCapability??t.reasoningCapability,reasoningProfile:n.reasoningProfile??t.reasoningProfile,contextWindow:n.contextWindow??t.contextWindow,maxOutputTokens:n.maxOutputTokens??t.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap??t.thinkingBudgetCap,isDefault:o}}s(sn,"effectiveCapabilities");function et(e){let t=W[e];if(!t)return[];let n=t.models??[],o=n.find(i=>i.id===t.model),r=n.filter(i=>i.id!==t.model);return[o??ai(t),...r].map(i=>ui(t,i))}s(et,"getProviderModelDescriptors");function an(e,t){let n=W[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?sn(e,n,ui(n,o)):t===n.model?sn(e,n,ai(n)):sn(e,n,{id:t})}s(an,"getModelCapabilities");function un(){let e=[];for(let t of Object.keys(te)){let n=W[t];for(let o of et(t))e.push(sn(t,n,o))}return e}s(un,"listBuiltinModelCapabilities");var mu=new Set(["compat","sdk"]),hu=new Set(["max_tokens","max_completion_tokens"]),yu=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function Po(e){return e.reasoningProfile??e.reasoningCapabilityV2}s(Po,"getConfiguredReasoningProfile");function vu(e){return e==="anthropic"?"count-tokens":"models-list"}s(vu,"defaultVerifyStrategyForProtocol");function ci(e,t,n){if(t!==void 0){if(typeof t!="string"||!hu.has(t))throw new Error(`Custom provider "${e.name}": ${n} must be "max_tokens" or "max_completion_tokens".`);if(e.protocol!=="openai")throw new Error(`Custom provider "${e.name}": ${n} is only valid for protocol="openai".`)}}s(ci,"validateMaxOutputTokensField");function cn(e){if(e)return e.effortStrategy==="none"?"none":e.effortStrategy==="prompt-only"?"prompt-only":e.thinkingStrategy==="anthropic-adaptive"?"native-adaptive":e.effortStrategy==="provider-budget"?"native-budget":e.effortStrategy==="provider-toggle"?"native-toggle":"native-effort"}s(cn,"legacyCapabilityFromReasoningProfile");function bu(e,t,n){if(n===!1)return"none";switch(t){case"none":case"prompt-only":return"none";case"native-toggle":return e==="anthropic"?"generic-thinking-toggle":void 0;case"native-budget":return e==="anthropic"?"anthropic-budget":"qwen-hybrid-thinking";case"native-effort":return e==="anthropic"?"claude-adaptive-max":"openai-chat-reasoning";case"native-adaptive":return e==="anthropic"?"claude-adaptive-max":void 0;default:return n!==!0?void 0:e==="anthropic"?"generic-thinking-toggle":void 0}}s(bu,"legacyReasoningPresetForProtocol");function di(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}s(di,"isSimpleReasoning");function Eu(e,t){if(e==="none")return Nt("none");let n=s(u=>u==="off"?"none":u,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,i=o.includes("none"),a=o.map(u=>u===r?{value:u,isDefault:!0}:{value:u});return{effortStrategy:t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",...t==="anthropic"?{thinkingStrategy:"provider-toggle"}:{},...r!==void 0?{defaultEffort:r}:{},supportedEfforts:a,...i?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{localRejectEfforts:["none"],supportsDisabledThinking:!1},supportsReasoningEffort:!0}}s(Eu,"buildReasoningProfileFromSimple");function li(e,t,n,o){let r=di(n)?n:void 0,i=n!==void 0&&!di(n)?n:void 0;if(o?.supportsThinking===!1)return Nt("none");if(e)return{...e,...i??{}};if(r!==void 0)return Eu(r,o?.protocol??"openai");let a=t??(o?bu(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return a?Nt(a,i):void 0}s(li,"resolveCustomReasoningProfile");function fi(e,t,n){if(e!=="deepseek-v4-openai")return e;let o=n??t;return o==="deepseek-v4-flash"||o==="deepseek-flash"?"deepseek-v4-flash-openai":o==="deepseek-v4-pro"?"deepseek-v4-pro-openai":e}s(fi,"migrateLegacyDeepSeekPreset");function dn(e){return li(Po(e),fi(e.reasoningPreset,e.model),e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})??(e.protocol==="openai"?{effortStrategy:"openai-chat-effort",allowCustomEffort:!0}:void 0)}s(dn,"resolveCustomProviderReasoningProfile");function Co(e,t,n,o){let r=o==="deepseek-v4-openai"&&Po(e)===void 0&&e.reasoningPreset===void 0&&e.reasoning===void 0&&e.reasoningCapability===void 0;return li(Po(e),fi(e.reasoningPreset??(r?o:void 0),e.id,e.wireModel),e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n})}s(Co,"resolveCustomModelReasoningProfile");function ku(e,t,n,o){let r=typeof e=="string"?{id:e}:e,i=Co(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return i?{...a,reasoningProfile:i}:a}s(ku,"customModelDescriptorToFull");function St(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&&!mu.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.promptCacheAffinity!==void 0&&typeof e.promptCacheAffinity!="boolean")throw new Error(`Custom provider "${e.name}": promptCacheAffinity must be a boolean.`);if(e.imageInput!==void 0&&typeof e.imageInput!="boolean")throw new Error(`Custom provider "${e.name}": imageInput must be a boolean.`);if(ci(e,e.maxOutputTokensField,"maxOutputTokensField"),e.models?.forEach((t,n)=>{typeof t!="string"&&ci(e,t.maxOutputTokensField,`models[${n}].maxOutputTokensField`)}),e.verifyStrategy!==void 0){if(!yu.has(e.verifyStrategy))throw new Error(`Unknown verifyStrategy "${e.verifyStrategy}" for custom provider "${e.name}". Must be one of "count-tokens" | "models-list" | "minimal-message" | "unsupported".`);if(e.protocol==="openai"&&e.verifyStrategy==="count-tokens")throw new Error(`Custom provider "${e.name}": verifyStrategy="count-tokens" requires Anthropic protocol; got protocol="openai". Use "models-list" or "minimal-message" for OpenAI-compat.`)}}s(St,"validateCustomProviderConfig");function ln(e,t){return t!==!0?e:{...e??ae,multimodalSupport:"image-input"}}s(ln,"mergeCapabilityProfileWithImageInput");function xu(e){let t=e.models?.length?e.models.map(i=>ku(i,e.protocol,e.supportsThinking,e.reasoningPreset)):void 0,n=dn(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??cn(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:ln(e.capabilityProfile,e.imageInput),contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,maxOutputTokensField:e.maxOutputTokensField,thinkingBudgetCap:e.thinkingBudgetCap,promptCacheAffinity:e.promptCacheAffinity??!1,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.strictThinkingSignature??!1,streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??vu(e.protocol)}}s(xu,"buildProviderConfig");function fn(e){St(e);let t=xu(e);return e.protocol==="anthropic"?new To(e.name,t):new _o(e.name,t)}s(fn,"createCustomProvider");var To=class extends N{static{s(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},_o=class extends re{static{s(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var ne=new Map,So=new Map,wu=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function pi(e){return e.reasoningCapability!==void 0&&wu.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}s(pi,"hasThinkingReasoningConfig");function Pu(e){if(e.supportsThinking!==!1)return;let t=pi(e),n=(e.models??[]).some(o=>typeof o!="string"&&pi(o));(t||n)&&console.warn(`[kodax] Custom provider "${e.name}": its reasoning config (provider- or per-model reasoningCapability / reasoningProfile / reasoning / reasoningPreset) is ignored because supportsThinking is false (thinking stays off). Set supportsThinking: true to enable thinking, or remove the reasoning config.`)}s(Pu,"warnOnIgnoredReasoningCapability");function gi(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(St(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 te&&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.`),Pu(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>fn(r))}ne.clear(),So.clear();for(let[r,i]of n)ne.set(r,i);for(let[r,i]of o)So.set(r,i)}s(gi,"registerCustomProviders");function pn(e){let t=So.get(e);return t?t():void 0}s(pn,"getCustomProvider");function mi(e){let t=ne.get(e)??[...ne.entries()].find(([n])=>n.toLowerCase()===e.toLowerCase())?.[1];if(t)return Z(ln(t.capabilityProfile,t.imageInput)??ae)}s(mi,"getCustomProviderCapabilityProfile");function nt(e){return ne.has(e)}s(nt,"isCustomProviderName");function Rt(){return[...ne.keys()]}s(Rt,"getCustomProviderNames");function hi(){let e=[];for(let[t,n]of ne){let o=!!process.env[n.apiKeyEnv],r=dn(n),i=(n.models??[]).map(u=>typeof u=="string"?u:u.id),a=n.model&&i.length?[...new Set([n.model,...i])]:[n.model];e.push({name:t,model:n.model,models:a,configured:o,reasoningCapability:n.supportsThinking===!1?"none":n.reasoningCapability??cn(r)??"none",capabilityProfile:Z(ln(n.capabilityProfile,n.imageInput)??ae),custom:!0})}return e}s(hi,"getCustomProviderList");function yi(e){let t=ne.get(e);if(!t)return;let n=(t.models??[]).map(o=>typeof o=="string"?o:o.id);return t.model&&n.length?[...new Set([t.model,...n])]:[t.model]}s(yi,"getCustomProviderModels");function vi(e,t,n,o){let r=typeof e=="string"?{id:e}:e,i=Co(r,t,n,o),a=n===!1&&r.reasoningCapability!==void 0?{...r,reasoningCapability:"none"}:r;return i?{...a,reasoningProfile:i}:a}s(vi,"customDescriptorToFull");function gn(e){let t=ne.get(e);if(!t)return;let n=(t.models??[]).map(i=>vi(i,t.protocol,t.supportsThinking,t.reasoningPreset)),o=n.find(i=>i.id===t.model)??{id:t.model},r=n.filter(i=>i.id!==t.model);return[o,...r]}s(gn,"getCustomProviderModelDescriptors");function tt(e,t){let n=ne.get(e);if(!n)return;let o=t===n.model,r=dn(n),a=(n.models??[]).map(d=>vi(d,n.protocol,n.supportsThinking,n.reasoningPreset)).find(d=>d.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??cn(u)??n.reasoningCapability??"none";return{provider:e,model:a.id,displayName:a.displayName??a.id,supportsThinking:n.supportsThinking??(c!=="none"&&c!=="prompt-only"),reasoningCapability:c,reasoningProfile:u,contextWindow:a.contextWindow??n.contextWindow,maxOutputTokens:a.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:a.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}s(tt,"getCustomModelCapabilities");function Ro(e){let t=ne.get(e);if(!t)return;let n=t.verifyStrategy??(t.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}s(Ro,"getCustomProviderVerifyMetadata");function mn(){let e=[];for(let[t,n]of ne){let o=tt(t,n.model);o&&e.push(o);for(let r of n.models??[]){let i=typeof r=="string"?r:r.id;if(i===n.model)continue;let a=tt(t,i);a&&e.push(a)}}return e}s(mn,"listCustomProviderModelCapabilities");var ge=new Map,Tu=0;function Mo(e){let t=ge.get(e);if(!(!t||t.length===0))return t[t.length-1]}s(Mo,"getActiveRuntimeProviderRegistration");function _u(e){for(let[t,n]of ge){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?ge.delete(t):ge.set(t,o);return}}}s(_u,"removeRuntimeProviderRegistration");function bi(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(z(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(nt(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Tu}`,name:n,factory:t},r=ge.get(n)??[];return ge.set(n,[...r,o]),()=>{_u(o.id)}}s(bi,"registerModelProvider");function hn(e){let t=Mo(e);if(t===void 0)return;let n=t.factory();return t.credentialEnvironmentName??=n.getApiKeyEnv(),n}s(hn,"getRuntimeModelProvider");function Mt(e){return Mo(e)!==void 0}s(Mt,"isRuntimeModelProviderName");function yn(){return Array.from(ge.keys()).filter(e=>Mo(e)!==void 0)}s(yn,"getRuntimeModelProviderNames");function vn(){let e=new Set;for(let t of ge.values())for(let n of t){if(n.credentialEnvironmentName===void 0){let o=n.factory();n.credentialEnvironmentName=o.getApiKeyEnv()}e.add(n.credentialEnvironmentName)}return[...e]}s(vn,"getRuntimeModelProviderCredentialEnvironmentNames");function Ei(){ge.clear()}s(Ei,"clearRuntimeModelProviders");function Ao(e){if(z(e))return te[e]();let t=hn(e);if(t)return t;let n=pn(e);if(n)return n;let o=En();throw new I(`Unknown provider: ${e}. Available: ${o.join(", ")}`,e,{failureCode:"provider_not_registered",stage:"catalog"})}s(Ao,"resolveProvider");function bn(e){return z(e)||Mt(e)||nt(e)}s(bn,"isKnownProvider");function En(){let e=Object.keys(te),t=yn(),n=Rt();return[...new Set([...e,...t,...n])]}s(En,"getAvailableProviderNames");function ki(){let e=new Set;for(let t of Object.values(W))e.add(t.apiKeyEnv);for(let t of Rt()){let n=Ro(t);n!==void 0&&e.add(n.apiKeyEnv)}for(let t of vn())e.add(t);return[...e].sort()}s(ki,"getProviderCredentialEnvironmentNames");function At(e){return z(e)?et(e):gn(e)??[]}s(At,"resolveProviderModelDescriptors");function kn(e,t){return z(e)?an(e,t):tt(e,t)}s(kn,"resolveModelCapabilities");function xi(){return[...un(),...mn()]}s(xi,"listAllModelCapabilities");function Cu(e){if(z(e)){let t=W[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!Mt(e))return Ro(e)}s(Cu,"getProviderVerifyMetadata");async function wi(e,t){let n=Cu(e);if(!n&&!bn(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${En().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)`};let o=xe(e);if(o===!1)return{ok:!1,error:"unconfigured",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Active credential scope does not authorize provider "${e}"`};if(n&&o!==!0&&!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 r;try{r=Ao(e)}catch(i){return{ok:!1,error:"unconfigured",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(i?.message??i).slice(0,240)}}try{return await r.verifyCredential(t)}catch(i){return{ok:!1,error:"unknown",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(i?.message??i).slice(0,240)}}}s(wi,"verifyProviderCredential");async function Pi(e,t){if(!bn(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=At(e);return n.length===0?{ok:!1,source:"failed",error:`Provider "${e}" has no static model list`,durationMs:0}:{ok:!0,source:"static",models:n.map(r=>r.id),durationMs:0}}s(Pi,"listProviderModels");function Su(e){let t=e.model??At(e.provider)[0]?.id,n=t?kn(e.provider,t)?.reasoningProfile:void 0;if(!n)return{effort:void 0,configuredEffort:void 0,adjusted:!1};if(n.effortStrategy==="none"||n.effortStrategy==="prompt-only")return{effort:void 0,configuredEffort:e.desiredEffort??"auto",adjusted:!0};if(he(n)){let a=e.desiredEffort??"auto",u=e.rejectedEfforts?.includes("*")?void 0:Ne(n,a).find(c=>c===void 0||!e.rejectedEfforts?.includes(c));return{effort:u,configuredEffort:a,adjusted:u!==a}}let o=e.rejectedEfforts&&e.rejectedEfforts.length>0?Mn(n,e.rejectedEfforts):n,r=ht({capability:o,sessionEffort:e.desiredEffort}),i=r.effectiveEffort;return i!==void 0&&e.rejectedEfforts?.includes(i)&&(i=void 0),{effort:i,configuredEffort:r.configuredEffort,adjusted:i!==r.configuredEffort}}s(Su,"resolveWireEffort");var Ti={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375,cacheReadPer1M:.375,cacheWritePer1M:3.75},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08,cacheReadPer1M:.08,cacheWritePer1M:1}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-flash":{inputPer1M:.14,outputPer1M:.56,cachePer1M:.0028},"deepseek-v4-pro":{inputPer1M:.63,outputPer1M:1.89,cachePer1M:.021}},kimi:{"kimi-k3":{inputPer1M:2.8,outputPer1M:14,cachePer1M:.28},"kimi-k2.7-code":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.182},"kimi-k2.7-code-highspeed":{inputPer1M:1.82,outputPer1M:7.56,cachePer1M:.364},"kimi-k2.6":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.154},"kimi-k2.5":{inputPer1M:.56,outputPer1M:2.94,cachePer1M:.098}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015},k3:{inputPer1M:.01,outputPer1M:.03},"k3-256k":{inputPer1M:.005,outputPer1M:.015},"kimi-for-coding-highspeed":{inputPer1M:.015,outputPer1M:.045}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},"qwen-token-plan":{"qwen3.8-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.8-max-preview":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-plus":{inputPer1M:.005,outputPer1M:.015},"qwen3.6-flash":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015}},zhipu:{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.3":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function Io(e,t,n){let o=n?.[e]?.[t];return o||Ti[e]?.[t]}s(Io,"getCostRate");function Oo(e,t,n,o=0,r=0){let i=Math.max(0,t-o-r),a=e.cacheReadPer1M??e.cachePer1M??e.inputPer1M,u=e.cacheWritePer1M??e.cachePer1M??e.inputPer1M,c=i/1e6*e.inputPer1M,d=n/1e6*e.outputPer1M,f=o/1e6*a,p=r/1e6*u;return c+d+f+p}s(Oo,"calculateCost");function Ru(){return{records:[],retries:[]}}s(Ru,"createCostTracker");function Do(e,t){let n={timestamp:Date.now(),provider:t.provider,waitMs:t.waitMs,reason:t.reason,source:t.source};return{records:e.records,retries:[...e.retries,n]}}s(Do,"recordRetry");function Lo(e,t,n){let o=Io(t.provider,t.model,n),r=o?Oo(o,t.inputTokens,t.outputTokens,t.cacheReadTokens,t.cacheWriteTokens):0,i={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,cost:r,role:t.role};return{records:[...e.records,i],retries:e.retries}}s(Lo,"recordUsage");function Mu(e){let t=0,n=0,o=0,r=0,i=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,i+=p.cacheReadTokens,a+=p.cacheWriteTokens;let l=u[p.provider];u[p.provider]={cost:(l?.cost??0)+p.cost,calls:(l?.calls??0)+1,inputTokens:(l?.inputTokens??0)+p.inputTokens,outputTokens:(l?.outputTokens??0)+p.outputTokens};let h=p.role??"default",m=c[h];c[h]={cost:(m?.cost??0)+p.cost,calls:(m?.calls??0)+1,inputTokens:(m?.inputTokens??0)+p.inputTokens,outputTokens:(m?.outputTokens??0)+p.outputTokens}}let d=0;for(let p of e.retries)d+=p.waitMs;let f=r>0?i/r:0;return{totalCost:t,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:i,totalCacheWriteTokens:a,cacheHitRate:f,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:d,byProvider:u,byRole:c}}s(Mu,"getSummary");function xn(e){return e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}s(xn,"formatCost");function Au(e){let t=[];if(t.push(`Session Cost: ${xn(e.totalCost)} (${e.callCount} calls)`),t.push(`Tokens: ${e.totalInputTokens.toLocaleString()} in / ${e.totalOutputTokens.toLocaleString()} out`),e.totalCacheTokens>0){let r=(e.cacheHitRate*100).toFixed(0);t.push(`Cache: ${e.totalCacheTokens.toLocaleString()} tokens (${e.totalCacheReadTokens.toLocaleString()} read / ${e.totalCacheWriteTokens.toLocaleString()} write, ${r}% hit rate)`)}if(e.retryCount>0){let r=(e.retryWaitMs/1e3).toFixed(1);t.push(`Retries: ${e.retryCount} (${r}s total wait)`)}t.push("");let n=Object.entries(e.byProvider).sort((r,i)=>i[1].cost-r[1].cost);if(n.length>0){t.push("By Provider:");for(let[r,i]of n)t.push(` ${r}: ${xn(i.cost)} (${i.calls} calls, ${i.inputTokens.toLocaleString()} in / ${i.outputTokens.toLocaleString()} out)`);t.push("")}let o=Object.entries(e.byRole).sort((r,i)=>i[1].cost-r[1].cost);if(o.length>1){t.push("By Role:");for(let[r,i]of o)t.push(` ${r}: ${xn(i.cost)} (${i.calls} calls)`)}return t.join(`
137
+ `)}s(Au,"formatCostReport");import{performance as $o}from"node:perf_hooks";var _i={inputTokens:0,outputTokens:0,totalTokens:0},Iu=3e4,Ou=1024;function Ci(e){if(!e)return{effort:"none"};let t=new Set(e.localRejectEfforts??[]),n=new Set(e.disabledEfforts??[]),o=e.supportedEfforts?.filter(i=>i.isUserVisible!==!1).map(i=>i.value).filter(i=>!t.has(i));if(!t.has("none")&&e.supportsDisabledThinking!==!1&&(e.supportsDisabledThinking===!0||o?.includes("none")))return{effort:"none"};let r=o?.find(i=>{let a=e.effortAliases?.[i]??i;return i!=="none"&&a!=="none"&&!n.has(i)&&!n.has(a)&&!t.has(a)});return r!==void 0?{effort:r}:e.supportsDisabledThinking===!1||t.has("none")?{effort:"auto"}:void 0}s(Ci,"resolveDefaultSideQueryReasoning");function Du(e,t,n,o){if(!o||!Si(e)||!t)return e;let r=n?.effort,i=r==="none"||r!==void 0&&t.disabledEfforts?.includes(r)===!0,a=t.supportsDisabledThinking===!1||t.localRejectEfforts?.includes("none")===!0;return i||!a?e:e+Ou}s(Du,"resolveSideQueryMaxOutputTokens");async function Lu(e){let t=new AbortController,n=e.timeoutMs??Iu,o=e.costTracker,r=$o.now(),i=Buffer.byteLength(e.system,"utf8"),a=Buffer.byteLength(JSON.stringify(e.messages),"utf8"),u,c,d,f=0,p=0,l=s((P,R)=>{let E=Math.max(0,Math.round($o.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:E,systemBytes:i,messageBytes:a,promptBytes:i+a,retryCount:f,retryWaitMs:p,...R!==void 0?R:{},...u!==void 0?{firstUpstreamEventMs:u}:{},...c!==void 0?{firstThinkingDeltaMs:c}:{},...d!==void 0?{firstTextDeltaMs:d,firstOutputMs:d,streamMs:Math.max(0,E-d)}:{},terminalPhase:P}},"diagnostics"),h,m=s(P=>{h||(h=P),t.abort()},"recordAbort"),T=setTimeout(()=>m("timeout"),n),g=s(()=>m("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?m("parent"):e.abortSignal.addEventListener("abort",g,{once:!0}));let y=s(()=>Math.max(0,Math.round($o.now()-r)),"elapsed"),k=s(()=>{u===void 0&&(u=y())},"recordUpstreamEvent"),v,x=new Promise((P,R)=>{v=s(()=>{R(new DOMException(h==="timeout"?"sideQuery timed out":"sideQuery aborted","AbortError"))},"onControllerAbort"),t.signal.aborted?v():t.signal.addEventListener("abort",v,{once:!0})});try{let P=e.provider.getReasoningProfile(e.model),R=e.reasoning??Ci(P),E=Du(e.maxOutputTokens,P,R,e.reasoning===void 0),_=ie(e.provider.name,e.credentialPurpose??"utility",t.signal,F=>e.provider.stream([...e.messages],[],e.system,R,{modelOverride:e.model,...Si(E)?{maxOutputTokensOverride:E}:{},onTextDelta:s(D=>{k(),D.length>0&&d===void 0&&(d=y())},"onTextDelta"),onThinkingDelta:s(D=>{k(),D.length>0&&c===void 0&&(c=y())},"onThinkingDelta"),onHeartbeat:s(()=>k(),"onHeartbeat"),onRetryAfter:s(D=>{k(),f+=1,p+=Math.max(0,D.waitMs),o&&(o=Do(o,{provider:D.provider,waitMs:D.waitMs,reason:D.reason,source:D.source}))},"onRetryAfter")},F)),b=await Promise.race([_,x]),C=b.usage??_i,L=b.textBlocks??[],$=b.toolBlocks??[],j=L.map(F=>F.text).join(""),q={responseBytes:Buffer.byteLength(j,"utf8"),textBlockCount:L.length};if($.length>0)return{text:j,usage:C,costTracker:o,stopReason:"error",diagnostics:l("contract_error",{stopReason:"error",...q}),error:new Error(`sideQuery: provider returned ${$.length} tool_use block(s); sideQuery expects text-only output`)};o&&(o=Lo(o,{provider:e.provider.name,model:e.model,inputTokens:C.inputTokens,outputTokens:C.outputTokens,cacheReadTokens:C.cachedReadTokens,cacheWriteTokens:C.cachedWriteTokens,role:e.querySource}));let G=$u(b.stopReason);return{text:j,usage:C,costTracker:o,stopReason:G,diagnostics:l("completed",{stopReason:G,...q})}}catch(P){let R=P instanceof Error?P:new Error(String(P)),E="error";return t.signal.aborted&&(E=h==="timeout"?"timeout":"aborted"),{text:"",usage:_i,costTracker:o,stopReason:E,diagnostics:l(d!==void 0?"streaming":c!==void 0?"thinking":u!==void 0?"awaiting_text":"pre_output",{stopReason:E}),error:R}}finally{clearTimeout(T),e.abortSignal&&e.abortSignal.removeEventListener("abort",g),v&&t.signal.removeEventListener("abort",v)}}s(Lu,"sideQuery");function Si(e){return e!==void 0&&Number.isInteger(e)&&e>0}s(Si,"isPositiveInteger");function $u(e){return Wt(e)==="truncated"?"max_tokens":"end_turn"}s($u,"mapStopReason");export{Ri as a,Mi as b,Ai as c,Ii as d,Di as e,Ni as f,ji as g,Fi as h,Bi as i,Ki as j,Ui as k,ie as l,zi as m,xe as n,we as o,Cn as p,le as q,I as r,$e as s,at as t,ut as u,ct as v,Sn as w,Rn as x,qi as y,Gi as z,dt as A,Ji as B,lt as C,Yi as D,Qi as E,$t as F,Mn as G,An as H,In as I,Zi as J,es as K,ts as L,Fe as M,Vo as N,qo as O,Nn as P,jn as Q,jt as R,mt as S,Go as T,is as U,Jo as V,ht as W,ss as X,ds as Y,Te as Z,_e as _,Fn as $,Ft as aa,yt as ba,or as ca,rr as da,Es as ea,ks as fa,vt as ga,se as ha,Bt as ia,ue as ja,Rs as ka,Wt as la,We as ma,ze as na,Wn as oa,zn as pa,Xe as qa,Xn as ra,He as sa,Xt as ta,Qs as ua,gr as va,Zs as wa,ea as xa,ta as ya,na as za,N as Aa,re as Ba,ye as Ca,Je as Da,Ye as Ea,_t as Fa,Ct as Ga,W as Ha,te as Ia,xo as Ja,ti as Ka,ni as La,oi as Ma,ri as Na,ii as Oa,si as Pa,wo as Qa,z as Ra,et as Sa,an as Ta,un as Ua,St as Va,fn as Wa,gi as Xa,pn as Ya,mi as Za,nt as _a,Rt as $a,hi as ab,yi as bb,gn as cb,tt as db,mn as eb,bi as fb,hn as gb,Mt as hb,yn as ib,vn as jb,Ei as kb,Ao as lb,bn as mb,En as nb,ki as ob,At as pb,kn as qb,xi as rb,wi as sb,Pi as tb,Su as ub,Ti as vb,Io as wb,Oo as xb,Ru as yb,Do as zb,Lo as Ab,Mu as Bb,xn as Cb,Au as Db,Ci as Eb,Lu as Fb};