@kodax-ai/kodax 0.7.51 → 0.7.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1838 -1800
- package/README.md +6 -0
- package/README_CN.md +4 -0
- package/dist/chunks/{agent-EFA7BSE7.js → agent-DZ37KWZI.js} +1 -1
- package/dist/chunks/argument-completer-OFPM36IZ.js +2 -0
- package/dist/chunks/{chunk-JJTUBNQX.js → chunk-5YQDGVDB.js} +1 -1
- package/dist/chunks/chunk-67HVIUEO.js +307 -0
- package/dist/chunks/chunk-CLIRXPAJ.js +425 -0
- package/dist/chunks/{chunk-CCZMQE3Q.js → chunk-D4MGMUDL.js} +1 -1
- package/dist/chunks/chunk-LE6STNVN.js +31 -0
- package/dist/chunks/{chunk-WQTVG2T5.js → chunk-OQL4ISVD.js} +170 -170
- package/dist/chunks/{chunk-ODVA5VTE.js → chunk-RFE5EC7W.js} +215 -215
- package/dist/chunks/{chunk-HMATTIU6.js → chunk-XFCAXDSD.js} +2 -2
- package/dist/chunks/{compaction-config-UBPCNGC2.js → compaction-config-OF2T45MC.js} +1 -1
- package/dist/chunks/{construction-bootstrap-WY5MDXRX.js → construction-bootstrap-JIE7LYNN.js} +1 -1
- package/dist/chunks/dist-BOHLKKR5.js +2 -0
- package/dist/chunks/{dist-B73FQEAA.js → dist-Z6U7TWKJ.js} +1 -1
- package/dist/chunks/{utils-HVOJRR5C.js → utils-AB4DNRZC.js} +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.js +1 -1
- package/dist/kodax_cli.js +991 -932
- package/dist/sdk-agent.d.ts +8 -8
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +12 -12
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-llm.d.ts +3 -3
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-repl.d.ts +47 -12
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-session.d.ts +5 -5
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/types-chunks/{base.d-GZ6jvICS.d.ts → base.d-BBNUF9nz.d.ts} +1 -0
- package/dist/types-chunks/{bash-prefix-extractor.d-DTOiDMlG.d.ts → bash-prefix-extractor.d-BpNoRkSD.d.ts} +57 -4
- package/dist/types-chunks/{capsule.d-CXGdLGAn.d.ts → capsule.d-CNonpwAZ.d.ts} +3 -3
- package/dist/types-chunks/{guardrail.d-D47yu9AO.d.ts → guardrail.d-B18oO1gt.d.ts} +3 -3
- package/dist/types-chunks/{process.d-B8kEBnQD.d.ts → process.d-Bj82oJhD.d.ts} +1 -1
- package/dist/types-chunks/{resolver.d-D75XFRH2.d.ts → resolver.d-CCX9NXWP.d.ts} +2 -1
- package/dist/types-chunks/{sdk-session-BKQJN9oH.d.ts → sdk-session-BkaGuIC6.d.ts} +4 -4
- package/dist/types-chunks/{storage.d-BN1xIn8R.d.ts → storage.d-BUIiD4gq.d.ts} +2 -2
- package/dist/types-chunks/{types.d-DQ_hdN70.d.ts → types.d-D4jL-gAA.d.ts} +1 -1
- package/dist/types-chunks/{utils.d-ZfRDo-kX.d.ts → utils.d-B3fwJEMd.d.ts} +26 -20
- package/package.json +2 -2
- package/dist/chunks/argument-completer-MAJVHSE7.js +0 -2
- package/dist/chunks/chunk-E3HENKTX.js +0 -420
- package/dist/chunks/chunk-FAIGYAEX.js +0 -301
- package/dist/chunks/chunk-PEWH3AAL.js +0 -31
- package/dist/chunks/dist-BTWS2ENP.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{tb as k,vb as D}from"./chunk-WQTVG2T5.js";import{U as S,V as w,W as L,X as I,Y as O,Z as h,ea as x,fa as m,ia as b,sa as A}from"./chunk-PEWH3AAL.js";import{va as R}from"./chunk-HMATTIU6.js";import{a as o}from"./chunk-V4WSBIXB.js";import s from"fs";import c from"path";import{exec as H,spawnSync as z}from"child_process";import{promisify as U}from"util";import{fileURLToPath as q}from"url";var E="en";function G(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}o(G,"detectSystemLocale");function T(e){if(!e||e==="auto"){E=G();return}E=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}o(T,"setLocale");var M={en:{"dialog.confirm":"[Confirm]","dialog.select":"[Select]","dialog.input":"[Input]","confirm.instruction.basic":"Press (y) yes, (n) no","confirm.instruction.always":"Press (y) yes, (a) always yes for this tool, (n) no","confirm.instruction.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","confirm.result.denied":"Denied","tool.bash.title":"Execute bash command?","tool.shell.title":"Execute shell command?","tool.write.title":"Write to file?","tool.edit.title":"Edit file?","tool.generic.title":"Execute {tool}?","field.reason":"Reason","field.intent":"Intent","field.target":"Target","field.scope":"Scope","field.risk":"Risk","field.summary":"Summary","intent.read":"Read project files","intent.delete":"Delete files","intent.deps":"Modify dependencies or environment","intent.modify":"Modify files","intent.execute":"Execute command","intent.write_file":"Write file","intent.edit_file":"Edit file","intent.use_tool":"Use {tool}","risk.destructive":"Destructive change","risk.deps":"May change dependencies or local tools","risk.modify":"May modify files","risk.unknown":"Command effects depend on its arguments","risk.network":"May access network","scope.outside":"Outside project","scope.protected":"Protected path","waiting.confirm":"Waiting: approval required","waiting.select":"Waiting: choose an option","waiting.input":"Waiting: answer the prompt","placeholder.confirm":"Respond to the approval prompt above...","placeholder.select":"Choose an option above...","placeholder.input":"Answer the prompt above...","placeholder.busy":"Agent is busy...","placeholder.queue":"Queue a follow-up for the next round...","placeholder.idle":"Type a message...","select.choice":"Choice:","select.type_number":"(type a number)","select.more":"{count} more choices...","select.more_above":"\u2191 {count} more above","select.more_below":"\u2193 {count} more below","select.confirm_hint":"Press Enter to confirm, Esc to cancel","select.navigate_hint":"Use \u2191\u2193 to navigate, Enter to confirm, Esc to cancel","select.multiselect_hint":"Use \u2191\u2193 to navigate, Space to toggle, Enter to confirm, Esc to cancel","select.multiselect_empty":"Select at least one option with Space before confirming.","select.back_prev":"\u2190 Back to previous question","input.default":"Default:","input.value":"Value:","input.type_response":"(type your response)","managed.completed":"Task completed","managed.completed.blocked":"Task blocked","managed.completed.continuation":"Task needs continuation",cancelled:"[Cancelled] Operation cancelled by user"},zh:{"dialog.confirm":"[\u786E\u8BA4]","dialog.select":"[\u9009\u62E9]","dialog.input":"[\u8F93\u5165]","confirm.instruction.basic":"\u6309 (y) \u786E\u8BA4, (n) \u62D2\u7EDD","confirm.instruction.always":"\u6309 (y) \u786E\u8BA4, (a) \u59CB\u7EC8\u5141\u8BB8\u6B64\u5DE5\u5177, (n) \u62D2\u7EDD","confirm.instruction.protected":"\u6309 (y) \u786E\u8BA4, (n) \u53D6\u6D88 (\u53D7\u4FDD\u62A4\u8DEF\u5F84)","confirm.result.approved":"\u5DF2\u6279\u51C6","confirm.result.approved_always":"\u5DF2\u6279\u51C6 (\u59CB\u7EC8\u5141\u8BB8)","confirm.result.denied":"\u5DF2\u62D2\u7EDD","tool.bash.title":"\u6267\u884C bash \u547D\u4EE4\uFF1F","tool.shell.title":"\u6267\u884C shell \u547D\u4EE4\uFF1F","tool.write.title":"\u5199\u5165\u6587\u4EF6\uFF1F","tool.edit.title":"\u7F16\u8F91\u6587\u4EF6\uFF1F","tool.generic.title":"\u6267\u884C {tool}\uFF1F","field.reason":"\u539F\u56E0","field.intent":"\u610F\u56FE","field.target":"\u76EE\u6807","field.scope":"\u8303\u56F4","field.risk":"\u98CE\u9669","field.summary":"\u6458\u8981","intent.read":"\u8BFB\u53D6\u9879\u76EE\u6587\u4EF6","intent.delete":"\u5220\u9664\u6587\u4EF6","intent.deps":"\u4FEE\u6539\u4F9D\u8D56\u6216\u73AF\u5883","intent.modify":"\u4FEE\u6539\u6587\u4EF6","intent.execute":"\u6267\u884C\u547D\u4EE4","intent.write_file":"\u5199\u5165\u6587\u4EF6","intent.edit_file":"\u7F16\u8F91\u6587\u4EF6","intent.use_tool":"\u4F7F\u7528 {tool}","risk.destructive":"\u7834\u574F\u6027\u53D8\u66F4","risk.deps":"\u53EF\u80FD\u4FEE\u6539\u4F9D\u8D56\u6216\u672C\u5730\u5DE5\u5177","risk.modify":"\u53EF\u80FD\u4FEE\u6539\u6587\u4EF6","risk.unknown":"\u547D\u4EE4\u6548\u679C\u53D6\u51B3\u4E8E\u53C2\u6570","risk.network":"\u53EF\u80FD\u8BBF\u95EE\u7F51\u7EDC","scope.outside":"\u9879\u76EE\u5916\u90E8","scope.protected":"\u53D7\u4FDD\u62A4\u8DEF\u5F84","waiting.confirm":"\u7B49\u5F85\u4E2D\uFF1A\u9700\u8981\u5BA1\u6279","waiting.select":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u9009\u62E9","waiting.input":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u56DE\u7B54","placeholder.confirm":"\u8BF7\u56DE\u5E94\u4E0A\u65B9\u7684\u5BA1\u6279\u63D0\u793A...","placeholder.select":"\u8BF7\u5728\u4E0A\u65B9\u9009\u62E9\u4E00\u4E2A\u9009\u9879...","placeholder.input":"\u8BF7\u56DE\u7B54\u4E0A\u65B9\u7684\u63D0\u793A...","placeholder.busy":"\u667A\u80FD\u4F53\u6B63\u5728\u5DE5\u4F5C\u4E2D...","placeholder.queue":"\u6392\u961F\u7B49\u5F85\u4E0B\u4E00\u8F6E\u8DDF\u8FDB...","placeholder.idle":"\u8F93\u5165\u6D88\u606F...","select.choice":"\u9009\u9879\uFF1A","select.type_number":"(\u8F93\u5165\u7F16\u53F7)","select.more":"\u8FD8\u6709 {count} \u4E2A\u9009\u9879...","select.more_above":"\u2191 \u4E0A\u65B9\u8FD8\u6709 {count} \u4E2A","select.more_below":"\u2193 \u4E0B\u65B9\u8FD8\u6709 {count} \u4E2A","select.confirm_hint":"\u6309 Enter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.navigate_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0C\u7A7A\u683C \u5207\u6362\u9009\u4E2D\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_empty":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u9009\u9879\u3002","select.back_prev":"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u9898","input.default":"\u9ED8\u8BA4\u503C\uFF1A","input.value":"\u503C\uFF1A","input.type_response":"(\u8F93\u5165\u4F60\u7684\u56DE\u7B54)","managed.completed":"\u4EFB\u52A1\u5B8C\u6210","managed.completed.blocked":"\u4EFB\u52A1\u53D7\u963B","managed.completed.continuation":"\u4EFB\u52A1\u9700\u8981\u7EE7\u7EED",cancelled:"[\u5DF2\u53D6\u6D88] \u64CD\u4F5C\u5DF2\u88AB\u7528\u6237\u53D6\u6D88"}};function ve(e,t){let i=M[E][e]??M.en[e]??e;if(t)for(let[r,u]of Object.entries(t))i=i.replace(`{${r}}`,String(u));return i}o(ve,"t");var W=U(H),X=R(),Ie=c.join(X,"sessions"),l=c.join(X,"config.json"),Oe=60,a=null,_=!1,J="dumb";function Q(e){let t=c.basename(e).toLowerCase(),n="__KODAX_SHELL_ENV_START__",i=`printf '%s\\0' '${n}'; env -0`;return t==="fish"?{args:["-i","-c",i],sentinel:n}:{args:t==="bash"||t==="zsh"?["-ic",i]:["-lc",i],sentinel:n}}o(Q,"buildShellEnvCommand");function Y(e,t){let n=`${t}\0`,i=e.lastIndexOf(n);if(i===-1)return{};let r=e.slice(i+n.length),u={};for(let p of r.split("\0")){if(!p)continue;let d=p.indexOf("=");d<=0||(u[p.slice(0,d)]=p.slice(d+1))}return u}o(Y,"parseNullDelimitedShellEnv");function Z(e={}){let t=e.env??process.env;if((e.platform??process.platform)==="win32"||t.KODAX_DISABLE_SHELL_ENV_HYDRATION==="1")return!1;let i=e.shell??t.SHELL;if(!i||!c.isAbsolute(i))return!1;let{args:r,sentinel:u}=Q(i),p=e.run??z,d={...t,TERM:J},f=p(i,r,{encoding:"utf8",env:d,maxBuffer:1024*1024,timeout:5e3,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});if(f.status!==0||!f.stdout)return!1;let j=typeof f.stdout=="string"?f.stdout:f.stdout.toString("utf8"),B=Y(j,u),C=!1;for(let[y,V]of Object.entries(B))y!=="TERM"&&t[y]===void 0&&(t[y]=V,C=!0);return C}o(Z,"hydrateProcessEnvFromShell");function ee(){if(!_){_=!0;try{Z()}catch{}}}o(ee,"ensureShellEnvironmentHydrated");function xe(){_=!1}o(xe,"resetShellEnvironmentHydrationForTesting");function te(e){x(e.customProviders??[])}o(te,"registerConfiguredCustomProviders");function $(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0);return t.length>0?t:[]}o($,"normalizeConfiguredExtensions");function ne(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{s.mkdirSync(c.dirname(l),{recursive:!0}),s.writeFileSync(l,JSON.stringify(t,null,2))}catch{}return t}o(ne,"migrateLegacyPermissionModeInConfig");function ie(e){if(e.permissionMode!=="auto-in-project")return e;try{let t=s.readFileSync(l,"utf-8"),n=t.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t&&s.writeFileSync(l,n)}catch{}return{...e,permissionMode:"auto"}}o(ie,"migrateAutoInProjectAliasInConfig");function oe(){if(a)return a;let e="0.7.51";if(e)return a=e,a;let t=c.join(c.dirname(q(import.meta.url)),"../../package.json");if(s.existsSync(t))try{return a=JSON.parse(s.readFileSync(t,"utf-8")).version??"0.0.0",a??"0.0.0"}catch{}return a="0.0.0",a}o(oe,"getVersion");var Ae=oe();function Re(e){return w(e)}o(Re,"getProviderModel");function P(e,t){let n=new Set(e.map(r=>r.toLowerCase())),i=[...e];for(let r of t)n.has(r.toLowerCase())||i.push(r);return i}o(P,"mergeModels");function re(e,t){t||(t=v().providerModels);let n=t?.[e];if(n&&n.length>0){try{let i=h(e);if(i.length>0)return P(n,i)}catch{}try{let i=m(e);if(i)return P(n,i.getAvailableModels())}catch{}return n}try{let i=h(e);if(i.length>0)return i}catch{}try{let i=m(e);if(i)return i.getAvailableModels()}catch{}return[]}o(re,"getProviderAvailableModels");function se(e,t){let n=L(e,t);if(n!=="unknown")return n;try{let i=m(e);if(i)return i.getReasoningCapability(t)}catch{}return"unknown"}o(se,"getProviderReasoningCapability");function ae(e){let t=I(e);if(t)return t;try{return b().find(i=>i.name===e)?.capabilityProfile??null}catch{return null}}o(ae,"getProviderCapabilityProfile");function F(e,t){let n=ae(e),i=se(e,t);if(n)return{capabilityProfile:n,reasoningCapability:i};try{let r=A(e);return{capabilityProfile:r.getCapabilityProfile(),reasoningCapability:r.getReasoningCapability(t)}}catch{return null}}o(F,"getProviderCapabilityMetadata");function ke(e,t){let n=F(e,t);return n?k({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}o(ke,"getProviderCapabilitySnapshot");function ce(e,t,n,i){let r=F(e,t);return r?D({providerName:e,model:t,capabilityProfile:r.capabilityProfile,reasoningCapability:r.reasoningCapability==="unknown"?void 0:r.reasoningCapability,reasoningMode:n,hints:i}):null}o(ce,"getProviderPolicyDecision");function De(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"forwards only the latest user message":"preserves full conversation history",i=e.mcpSupport==="native"?"MCP available":"MCP unavailable";return`${t}; ${n}; ${i}`}o(De,"describeProviderCapabilitySummary");function Me(e){switch(e){case"native-budget":return"B";case"native-effort":return"E";case"native-toggle":return"T";case"native-adaptive":return"A";default:return"-"}}o(Me,"formatReasoningCapabilityShort");function le(e){switch(e){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";default:return"none"}}o(le,"describeReasoningCapabilityControl");function Te(e,t){if(e==="off")return"Reasoning disabled";switch(t){case"native-budget":return"Uses native thinking budget control";case"native-effort":return"Uses native reasoning effort control";case"native-toggle":return"Uses provider-native thinking toggle only";case"native-adaptive":return"Model adaptively decides thinking depth (Opus 4.7+)";case"none":return"Runs without native reasoning parameters";case"prompt-only":return"Uses prompt overlays only; no native reasoning parameter";default:return"Runs without native reasoning parameters"}}o(Te,"describeReasoningExecution");function Ne(e){let t=[];e||(e=v().providerModels);for(let n of O())t.push({name:n.name,model:n.model,models:re(n.name,e),configured:n.capabilityProfile.transport==="cli-bridge"?!0:n.configured,reasoningCapability:n.reasoningCapability,capabilityProfile:n.capabilityProfile});try{let n=b().map(i=>({...i,models:(()=>{let r=e?.[i.name];return r&&r.length>0?P(r,i.models):i.models})()}));t.push(...n)}catch{}return t}o(Ne,"getProviderList");function Ke(e){if(S(e))return!0;try{return m(e)?.isConfigured()??!1}catch{return!1}}o(Ke,"isProviderConfigured");function v(){try{if(s.existsSync(l)){let e=JSON.parse(s.readFileSync(l,"utf-8")),t=e.reasoningCeiling??e.reasoningMode;return ie(ne({...e,reasoningMode:t,extensions:$(e.extensions)}))}}catch{}return{}}o(v,"loadConfig");function ue(e){e.streamIdleTimeoutMs&&!process.env.KODAX_STREAM_IDLE_TIMEOUT_MS&&(process.env.KODAX_STREAM_IDLE_TIMEOUT_MS=String(e.streamIdleTimeoutMs))}o(ue,"applyResilienceRuntimeEnv");function pe(e){e.repoIntelligenceMode&&!process.env.KODAX_REPO_INTELLIGENCE_MODE&&(process.env.KODAX_REPO_INTELLIGENCE_MODE=e.repoIntelligenceMode),e.repointelEndpoint&&!process.env.KODAX_REPOINTEL_ENDPOINT&&(process.env.KODAX_REPOINTEL_ENDPOINT=e.repointelEndpoint),e.repointelBin&&!process.env.KODAX_REPOINTEL_BIN&&(process.env.KODAX_REPOINTEL_BIN=e.repointelBin),e.repoIntelligenceTrace===!0&&!process.env.KODAX_REPO_INTELLIGENCE_TRACE&&(process.env.KODAX_REPO_INTELLIGENCE_TRACE="1")}o(pe,"applyRepoIntelligenceRuntimeEnv");function de(e){e.verifierLog===!0&&!process.env.KODAX_VERIFIER_LOG&&(process.env.KODAX_VERIFIER_LOG="1")}o(de,"applyVerifierRuntimeEnv");function fe(e){e.stallLog===!0&&!process.env.KODAX_STALL_LOG&&(process.env.KODAX_STALL_LOG="1")}o(fe,"applyStallSidecarRuntimeEnv");function me(e){let t=e.fallbackProviders?.filter(n=>n.trim().length>0)??[];t.length>0&&!process.env.KODAX_FALLBACK_PROVIDERS&&(process.env.KODAX_FALLBACK_PROVIDERS=t.join(","))}o(me,"applyFallbackRuntimeEnv");function Xe(){ee();let e=v();return ue(e),pe(e),de(e),fe(e),me(e),te(e),T(e.locale),e}o(Xe,"prepareRuntimeConfig");function $e(e){let n={...v(),...e},i=$(n.extensions);i!==void 0&&(n.extensions=i);for(let r of Object.keys(e))e[r]===void 0&&delete n[r];s.mkdirSync(c.dirname(l),{recursive:!0}),s.writeFileSync(l,JSON.stringify(n,null,2))}o($e,"saveConfig");async function Fe(e){try{let{stdout:t}=await W("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}o(Fe,"getGitRoot");function ge(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}o(ge,"formatProviderSourceKind");function je(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"latest-user-message only":"full conversation history";return[`Source: ${ge(e.sourceKind)}`,`Transport: ${t}`,`Conversation semantics: ${n}`,`Context fidelity: ${e.contextFidelity}`,`Tool calling: ${e.toolCallingFidelity}`,`Session behavior: ${e.sessionSupport}`,`Long-running support: ${e.longRunningSupport}`,`Evidence-heavy flows: ${e.evidenceSupport}`,`Multimodal support: ${e.multimodalSupport}`,`MCP support: ${e.mcpSupport}`,`Reasoning control: ${le(e.reasoningCapability)}`]}o(je,"formatProviderCapabilityDetailLines");function Be(e,t,n){return[{label:"General coding",hints:{}},{label:"Evidence-heavy review",hints:{evidenceHeavy:!0}},{label:"Long-running task",hints:{longRunning:!0}}].map(r=>({label:r.label,decision:ce(e,t,n,r.hints)})).filter(r=>r.decision!==null)}o(Be,"getProviderCommonPolicyScenarios");var N=.5,K=0,g={locked:!1,queue:[]};async function Ve(e){for(;g.locked;)await new Promise(t=>g.queue.push(t));g.locked=!0;try{let t=(Date.now()-K)/1e3;t<N&&await new Promise(i=>setTimeout(i,(N-t)*1e3));let n=await e();return K=Date.now(),n}finally{g.locked=!1;let t=g.queue.shift();t&&t()}}o(Ve,"rateLimitedCall");export{ve as a,X as b,Ie as c,l as d,Oe as e,Z as f,xe as g,te as h,oe as i,Ae as j,Re as k,re as l,se as m,ae as n,ke as o,ce as p,De as q,Me as r,le as s,Te as t,Ne as u,Ke as v,v as w,Xe as x,$e as y,Fe as z,ge as A,je as B,Be as C,Ve as D};
|
|
2
|
+
import{ub as k,wb as D}from"./chunk-OQL4ISVD.js";import{U as S,V as w,W as L,X as I,Y as O,Z as h,ea as x,fa as m,ia as b,sa as A}from"./chunk-LE6STNVN.js";import{va as R}from"./chunk-XFCAXDSD.js";import{a as o}from"./chunk-V4WSBIXB.js";import s from"fs";import c from"path";import{exec as H,spawnSync as z}from"child_process";import{promisify as U}from"util";import{fileURLToPath as q}from"url";var E="en";function G(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}o(G,"detectSystemLocale");function T(e){if(!e||e==="auto"){E=G();return}E=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}o(T,"setLocale");var M={en:{"dialog.confirm":"[Confirm]","dialog.select":"[Select]","dialog.input":"[Input]","confirm.instruction.basic":"Press (y) yes, (n) no","confirm.instruction.always":"Press (y) yes, (a) always yes for this tool, (n) no","confirm.instruction.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","confirm.result.denied":"Denied","tool.bash.title":"Execute bash command?","tool.shell.title":"Execute shell command?","tool.write.title":"Write to file?","tool.edit.title":"Edit file?","tool.generic.title":"Execute {tool}?","field.reason":"Reason","field.intent":"Intent","field.target":"Target","field.scope":"Scope","field.risk":"Risk","field.summary":"Summary","intent.read":"Read project files","intent.delete":"Delete files","intent.deps":"Modify dependencies or environment","intent.modify":"Modify files","intent.execute":"Execute command","intent.write_file":"Write file","intent.edit_file":"Edit file","intent.use_tool":"Use {tool}","risk.destructive":"Destructive change","risk.deps":"May change dependencies or local tools","risk.modify":"May modify files","risk.unknown":"Command effects depend on its arguments","risk.network":"May access network","scope.outside":"Outside project","scope.protected":"Protected path","waiting.confirm":"Waiting: approval required","waiting.select":"Waiting: choose an option","waiting.input":"Waiting: answer the prompt","placeholder.confirm":"Respond to the approval prompt above...","placeholder.select":"Choose an option above...","placeholder.input":"Answer the prompt above...","placeholder.busy":"Agent is busy...","placeholder.queue":"Queue a follow-up for the next round...","placeholder.idle":"Type a message...","select.choice":"Choice:","select.type_number":"(type a number)","select.more":"{count} more choices...","select.more_above":"\u2191 {count} more above","select.more_below":"\u2193 {count} more below","select.confirm_hint":"Press Enter to confirm, Esc to cancel","select.navigate_hint":"Use \u2191\u2193 to navigate, Enter to confirm, Esc to cancel","select.multiselect_hint":"Use \u2191\u2193 to navigate, Space to toggle, Enter to confirm, Esc to cancel","select.multiselect_empty":"Select at least one option with Space before confirming.","select.back_prev":"\u2190 Back to previous question","input.default":"Default:","input.value":"Value:","input.type_response":"(type your response)","managed.completed":"Task completed","managed.completed.blocked":"Task blocked","managed.completed.continuation":"Task needs continuation",cancelled:"[Cancelled] Operation cancelled by user"},zh:{"dialog.confirm":"[\u786E\u8BA4]","dialog.select":"[\u9009\u62E9]","dialog.input":"[\u8F93\u5165]","confirm.instruction.basic":"\u6309 (y) \u786E\u8BA4, (n) \u62D2\u7EDD","confirm.instruction.always":"\u6309 (y) \u786E\u8BA4, (a) \u59CB\u7EC8\u5141\u8BB8\u6B64\u5DE5\u5177, (n) \u62D2\u7EDD","confirm.instruction.protected":"\u6309 (y) \u786E\u8BA4, (n) \u53D6\u6D88 (\u53D7\u4FDD\u62A4\u8DEF\u5F84)","confirm.result.approved":"\u5DF2\u6279\u51C6","confirm.result.approved_always":"\u5DF2\u6279\u51C6 (\u59CB\u7EC8\u5141\u8BB8)","confirm.result.denied":"\u5DF2\u62D2\u7EDD","tool.bash.title":"\u6267\u884C bash \u547D\u4EE4\uFF1F","tool.shell.title":"\u6267\u884C shell \u547D\u4EE4\uFF1F","tool.write.title":"\u5199\u5165\u6587\u4EF6\uFF1F","tool.edit.title":"\u7F16\u8F91\u6587\u4EF6\uFF1F","tool.generic.title":"\u6267\u884C {tool}\uFF1F","field.reason":"\u539F\u56E0","field.intent":"\u610F\u56FE","field.target":"\u76EE\u6807","field.scope":"\u8303\u56F4","field.risk":"\u98CE\u9669","field.summary":"\u6458\u8981","intent.read":"\u8BFB\u53D6\u9879\u76EE\u6587\u4EF6","intent.delete":"\u5220\u9664\u6587\u4EF6","intent.deps":"\u4FEE\u6539\u4F9D\u8D56\u6216\u73AF\u5883","intent.modify":"\u4FEE\u6539\u6587\u4EF6","intent.execute":"\u6267\u884C\u547D\u4EE4","intent.write_file":"\u5199\u5165\u6587\u4EF6","intent.edit_file":"\u7F16\u8F91\u6587\u4EF6","intent.use_tool":"\u4F7F\u7528 {tool}","risk.destructive":"\u7834\u574F\u6027\u53D8\u66F4","risk.deps":"\u53EF\u80FD\u4FEE\u6539\u4F9D\u8D56\u6216\u672C\u5730\u5DE5\u5177","risk.modify":"\u53EF\u80FD\u4FEE\u6539\u6587\u4EF6","risk.unknown":"\u547D\u4EE4\u6548\u679C\u53D6\u51B3\u4E8E\u53C2\u6570","risk.network":"\u53EF\u80FD\u8BBF\u95EE\u7F51\u7EDC","scope.outside":"\u9879\u76EE\u5916\u90E8","scope.protected":"\u53D7\u4FDD\u62A4\u8DEF\u5F84","waiting.confirm":"\u7B49\u5F85\u4E2D\uFF1A\u9700\u8981\u5BA1\u6279","waiting.select":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u9009\u62E9","waiting.input":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u56DE\u7B54","placeholder.confirm":"\u8BF7\u56DE\u5E94\u4E0A\u65B9\u7684\u5BA1\u6279\u63D0\u793A...","placeholder.select":"\u8BF7\u5728\u4E0A\u65B9\u9009\u62E9\u4E00\u4E2A\u9009\u9879...","placeholder.input":"\u8BF7\u56DE\u7B54\u4E0A\u65B9\u7684\u63D0\u793A...","placeholder.busy":"\u667A\u80FD\u4F53\u6B63\u5728\u5DE5\u4F5C\u4E2D...","placeholder.queue":"\u6392\u961F\u7B49\u5F85\u4E0B\u4E00\u8F6E\u8DDF\u8FDB...","placeholder.idle":"\u8F93\u5165\u6D88\u606F...","select.choice":"\u9009\u9879\uFF1A","select.type_number":"(\u8F93\u5165\u7F16\u53F7)","select.more":"\u8FD8\u6709 {count} \u4E2A\u9009\u9879...","select.more_above":"\u2191 \u4E0A\u65B9\u8FD8\u6709 {count} \u4E2A","select.more_below":"\u2193 \u4E0B\u65B9\u8FD8\u6709 {count} \u4E2A","select.confirm_hint":"\u6309 Enter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.navigate_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0C\u7A7A\u683C \u5207\u6362\u9009\u4E2D\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_empty":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u9009\u9879\u3002","select.back_prev":"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u9898","input.default":"\u9ED8\u8BA4\u503C\uFF1A","input.value":"\u503C\uFF1A","input.type_response":"(\u8F93\u5165\u4F60\u7684\u56DE\u7B54)","managed.completed":"\u4EFB\u52A1\u5B8C\u6210","managed.completed.blocked":"\u4EFB\u52A1\u53D7\u963B","managed.completed.continuation":"\u4EFB\u52A1\u9700\u8981\u7EE7\u7EED",cancelled:"[\u5DF2\u53D6\u6D88] \u64CD\u4F5C\u5DF2\u88AB\u7528\u6237\u53D6\u6D88"}};function ve(e,t){let i=M[E][e]??M.en[e]??e;if(t)for(let[r,u]of Object.entries(t))i=i.replace(`{${r}}`,String(u));return i}o(ve,"t");var W=U(H),X=R(),Ie=c.join(X,"sessions"),l=c.join(X,"config.json"),Oe=60,a=null,_=!1,J="dumb";function Q(e){let t=c.basename(e).toLowerCase(),n="__KODAX_SHELL_ENV_START__",i=`printf '%s\\0' '${n}'; env -0`;return t==="fish"?{args:["-i","-c",i],sentinel:n}:{args:t==="bash"||t==="zsh"?["-ic",i]:["-lc",i],sentinel:n}}o(Q,"buildShellEnvCommand");function Y(e,t){let n=`${t}\0`,i=e.lastIndexOf(n);if(i===-1)return{};let r=e.slice(i+n.length),u={};for(let p of r.split("\0")){if(!p)continue;let d=p.indexOf("=");d<=0||(u[p.slice(0,d)]=p.slice(d+1))}return u}o(Y,"parseNullDelimitedShellEnv");function Z(e={}){let t=e.env??process.env;if((e.platform??process.platform)==="win32"||t.KODAX_DISABLE_SHELL_ENV_HYDRATION==="1")return!1;let i=e.shell??t.SHELL;if(!i||!c.isAbsolute(i))return!1;let{args:r,sentinel:u}=Q(i),p=e.run??z,d={...t,TERM:J},f=p(i,r,{encoding:"utf8",env:d,maxBuffer:1024*1024,timeout:5e3,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});if(f.status!==0||!f.stdout)return!1;let j=typeof f.stdout=="string"?f.stdout:f.stdout.toString("utf8"),B=Y(j,u),C=!1;for(let[y,V]of Object.entries(B))y!=="TERM"&&t[y]===void 0&&(t[y]=V,C=!0);return C}o(Z,"hydrateProcessEnvFromShell");function ee(){if(!_){_=!0;try{Z()}catch{}}}o(ee,"ensureShellEnvironmentHydrated");function xe(){_=!1}o(xe,"resetShellEnvironmentHydrationForTesting");function te(e){x(e.customProviders??[])}o(te,"registerConfiguredCustomProviders");function $(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0);return t.length>0?t:[]}o($,"normalizeConfiguredExtensions");function ne(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{s.mkdirSync(c.dirname(l),{recursive:!0}),s.writeFileSync(l,JSON.stringify(t,null,2))}catch{}return t}o(ne,"migrateLegacyPermissionModeInConfig");function ie(e){if(e.permissionMode!=="auto-in-project")return e;try{let t=s.readFileSync(l,"utf-8"),n=t.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t&&s.writeFileSync(l,n)}catch{}return{...e,permissionMode:"auto"}}o(ie,"migrateAutoInProjectAliasInConfig");function oe(){if(a)return a;let e="0.7.53";if(e)return a=e,a;let t=c.join(c.dirname(q(import.meta.url)),"../../package.json");if(s.existsSync(t))try{return a=JSON.parse(s.readFileSync(t,"utf-8")).version??"0.0.0",a??"0.0.0"}catch{}return a="0.0.0",a}o(oe,"getVersion");var Ae=oe();function Re(e){return w(e)}o(Re,"getProviderModel");function P(e,t){let n=new Set(e.map(r=>r.toLowerCase())),i=[...e];for(let r of t)n.has(r.toLowerCase())||i.push(r);return i}o(P,"mergeModels");function re(e,t){t||(t=v().providerModels);let n=t?.[e];if(n&&n.length>0){try{let i=h(e);if(i.length>0)return P(n,i)}catch{}try{let i=m(e);if(i)return P(n,i.getAvailableModels())}catch{}return n}try{let i=h(e);if(i.length>0)return i}catch{}try{let i=m(e);if(i)return i.getAvailableModels()}catch{}return[]}o(re,"getProviderAvailableModels");function se(e,t){let n=L(e,t);if(n!=="unknown")return n;try{let i=m(e);if(i)return i.getReasoningCapability(t)}catch{}return"unknown"}o(se,"getProviderReasoningCapability");function ae(e){let t=I(e);if(t)return t;try{return b().find(i=>i.name===e)?.capabilityProfile??null}catch{return null}}o(ae,"getProviderCapabilityProfile");function F(e,t){let n=ae(e),i=se(e,t);if(n)return{capabilityProfile:n,reasoningCapability:i};try{let r=A(e);return{capabilityProfile:r.getCapabilityProfile(),reasoningCapability:r.getReasoningCapability(t)}}catch{return null}}o(F,"getProviderCapabilityMetadata");function ke(e,t){let n=F(e,t);return n?k({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}o(ke,"getProviderCapabilitySnapshot");function ce(e,t,n,i){let r=F(e,t);return r?D({providerName:e,model:t,capabilityProfile:r.capabilityProfile,reasoningCapability:r.reasoningCapability==="unknown"?void 0:r.reasoningCapability,reasoningMode:n,hints:i}):null}o(ce,"getProviderPolicyDecision");function De(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"forwards only the latest user message":"preserves full conversation history",i=e.mcpSupport==="native"?"MCP available":"MCP unavailable";return`${t}; ${n}; ${i}`}o(De,"describeProviderCapabilitySummary");function Me(e){switch(e){case"native-budget":return"B";case"native-effort":return"E";case"native-toggle":return"T";case"native-adaptive":return"A";default:return"-"}}o(Me,"formatReasoningCapabilityShort");function le(e){switch(e){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";default:return"none"}}o(le,"describeReasoningCapabilityControl");function Te(e,t){if(e==="off")return"Reasoning disabled";switch(t){case"native-budget":return"Uses native thinking budget control";case"native-effort":return"Uses native reasoning effort control";case"native-toggle":return"Uses provider-native thinking toggle only";case"native-adaptive":return"Model adaptively decides thinking depth (Opus 4.7+)";case"none":return"Runs without native reasoning parameters";case"prompt-only":return"Uses prompt overlays only; no native reasoning parameter";default:return"Runs without native reasoning parameters"}}o(Te,"describeReasoningExecution");function Ne(e){let t=[];e||(e=v().providerModels);for(let n of O())t.push({name:n.name,model:n.model,models:re(n.name,e),configured:n.capabilityProfile.transport==="cli-bridge"?!0:n.configured,reasoningCapability:n.reasoningCapability,capabilityProfile:n.capabilityProfile});try{let n=b().map(i=>({...i,models:(()=>{let r=e?.[i.name];return r&&r.length>0?P(r,i.models):i.models})()}));t.push(...n)}catch{}return t}o(Ne,"getProviderList");function Ke(e){if(S(e))return!0;try{return m(e)?.isConfigured()??!1}catch{return!1}}o(Ke,"isProviderConfigured");function v(){try{if(s.existsSync(l)){let e=JSON.parse(s.readFileSync(l,"utf-8")),t=e.reasoningCeiling??e.reasoningMode;return ie(ne({...e,reasoningMode:t,extensions:$(e.extensions)}))}}catch{}return{}}o(v,"loadConfig");function ue(e){e.streamIdleTimeoutMs&&!process.env.KODAX_STREAM_IDLE_TIMEOUT_MS&&(process.env.KODAX_STREAM_IDLE_TIMEOUT_MS=String(e.streamIdleTimeoutMs))}o(ue,"applyResilienceRuntimeEnv");function pe(e){e.repoIntelligenceMode&&!process.env.KODAX_REPO_INTELLIGENCE_MODE&&(process.env.KODAX_REPO_INTELLIGENCE_MODE=e.repoIntelligenceMode),e.repointelEndpoint&&!process.env.KODAX_REPOINTEL_ENDPOINT&&(process.env.KODAX_REPOINTEL_ENDPOINT=e.repointelEndpoint),e.repointelBin&&!process.env.KODAX_REPOINTEL_BIN&&(process.env.KODAX_REPOINTEL_BIN=e.repointelBin),e.repoIntelligenceTrace===!0&&!process.env.KODAX_REPO_INTELLIGENCE_TRACE&&(process.env.KODAX_REPO_INTELLIGENCE_TRACE="1")}o(pe,"applyRepoIntelligenceRuntimeEnv");function de(e){e.verifierLog===!0&&!process.env.KODAX_VERIFIER_LOG&&(process.env.KODAX_VERIFIER_LOG="1")}o(de,"applyVerifierRuntimeEnv");function fe(e){e.stallLog===!0&&!process.env.KODAX_STALL_LOG&&(process.env.KODAX_STALL_LOG="1")}o(fe,"applyStallSidecarRuntimeEnv");function me(e){let t=e.fallbackProviders?.filter(n=>n.trim().length>0)??[];t.length>0&&!process.env.KODAX_FALLBACK_PROVIDERS&&(process.env.KODAX_FALLBACK_PROVIDERS=t.join(","))}o(me,"applyFallbackRuntimeEnv");function Xe(){ee();let e=v();return ue(e),pe(e),de(e),fe(e),me(e),te(e),T(e.locale),e}o(Xe,"prepareRuntimeConfig");function $e(e){let n={...v(),...e},i=$(n.extensions);i!==void 0&&(n.extensions=i);for(let r of Object.keys(e))e[r]===void 0&&delete n[r];s.mkdirSync(c.dirname(l),{recursive:!0}),s.writeFileSync(l,JSON.stringify(n,null,2))}o($e,"saveConfig");async function Fe(e){try{let{stdout:t}=await W("git rev-parse --show-toplevel",{cwd:e});return t.trim()}catch{return null}}o(Fe,"getGitRoot");function ge(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}o(ge,"formatProviderSourceKind");function je(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"latest-user-message only":"full conversation history";return[`Source: ${ge(e.sourceKind)}`,`Transport: ${t}`,`Conversation semantics: ${n}`,`Context fidelity: ${e.contextFidelity}`,`Tool calling: ${e.toolCallingFidelity}`,`Session behavior: ${e.sessionSupport}`,`Long-running support: ${e.longRunningSupport}`,`Evidence-heavy flows: ${e.evidenceSupport}`,`Multimodal support: ${e.multimodalSupport}`,`MCP support: ${e.mcpSupport}`,`Reasoning control: ${le(e.reasoningCapability)}`]}o(je,"formatProviderCapabilityDetailLines");function Be(e,t,n){return[{label:"General coding",hints:{}},{label:"Evidence-heavy review",hints:{evidenceHeavy:!0}},{label:"Long-running task",hints:{longRunning:!0}}].map(r=>({label:r.label,decision:ce(e,t,n,r.hints)})).filter(r=>r.decision!==null)}o(Be,"getProviderCommonPolicyScenarios");var N=.5,K=0,g={locked:!1,queue:[]};async function Ve(e){for(;g.locked;)await new Promise(t=>g.queue.push(t));g.locked=!0;try{let t=(Date.now()-K)/1e3;t<N&&await new Promise(i=>setTimeout(i,(N-t)*1e3));let n=await e();return K=Date.now(),n}finally{g.locked=!1;let t=g.queue.shift();t&&t()}}o(Ve,"rateLimitedCall");export{ve as a,X as b,Ie as c,l as d,Oe as e,Z as f,xe as g,te as h,oe as i,Ae as j,Re as k,re as l,se as m,ae as n,ke as o,ce as p,De as q,Me as r,le as s,Te as t,Ne as u,Ke as v,v as w,Xe as x,$e as y,Fe as z,ge as A,je as B,Be as C,Ve as D};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{a as r}from"./chunk-V4WSBIXB.js";var Y=class extends Error{static{r(this,"KodaXError")}code;constructor(e,n="KODAX_ERROR"){super(e),this.code=n,this.name="KodaXError"}},R=class extends Y{static{r(this,"KodaXProviderError")}provider;constructor(e,n){super(e,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},ke=class extends Y{static{r(this,"KodaXRateLimitError")}retryAfter;constructor(e,n){super(e,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},ft=class extends Y{static{r(this,"KodaXNetworkError")}isTimeout;constructor(e,n=!1){super(e,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},mt=class extends Y{static{r(this,"KodaXToolCallIdError")}constructor(e){super(e,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var gt=32768,so=32e3,ao=64e3,co=.5;var lo=["off","auto","quick","balanced","deep"],cn={low:6e3,medium:1e4,high:2e4},ln=4096;function ht(t){return t.reasoningCapability?t.reasoningCapability:t.supportsThinking?"native-toggle":"prompt-only"}r(ht,"getReasoningCapability");function oe(t){return Re(t).enabled}r(oe,"isReasoningEnabled");function Re(t){if(typeof t=="boolean")return{enabled:t,mode:t?"auto":"off",depth:t?"medium":"off",taskType:"unknown",executionMode:"implementation"};let e=t?.mode??"off",n=t?.depth??un(e),o=t?.enabled??(e!=="off"&&n!=="off");return{enabled:o&&e!=="off"&&n!=="off",mode:e,depth:o?n:"off",taskType:t?.taskType??"unknown",executionMode:t?.executionMode??"implementation"}}r(Re,"normalizeReasoningRequest");function un(t){switch(t){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}r(un,"getDefaultThinkingDepthForMode");function ie(t,e,n="unknown"){if(e==="off")return 0;let o={...cn,...t.defaultThinkingBudgets??{}},s=t.taskBudgetOverrides?.[n]?.[e]??o[e];return t.thinkingBudgetCap?Math.min(s,t.thinkingBudgetCap):s}r(ie,"resolveThinkingBudget");function re(t,e,n=ln){let o=Math.max(1024,e-n);return Math.max(1024,Math.min(t,o))}r(re,"clampThinkingBudget");function yt(t){switch(t){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}r(yt,"mapDepthToOpenAIReasoningEffort");import Ae from"fs";import uo from"os";import bt from"path";var vt=null;function po(t){return t==="budget"||t==="effort"||t==="toggle"||t==="adaptive"||t==="none"}r(po,"isReasoningOverride");function fo(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let e=t.providerReasoningOverrides;return e===void 0?!0:!e||typeof e!="object"||Array.isArray(e)?!1:Object.values(e).every(po)}r(fo,"isStoredConfig");function mo(){return process.env.KODAX_HOME??bt.join(uo.homedir(),".kodax")}r(mo,"getKodaxDir");function dn(){return process.env.KODAX_CONFIG_FILE??bt.join(mo(),"config.json")}r(dn,"getConfigFilePath");function kt(t,e){return vt={filePath:t,config:e},e}r(kt,"updateStoredConfigCache");function go(t){let e=JSON.parse(Ae.readFileSync(t,"utf-8"));return fo(e)?e:{}}r(go,"readStoredConfigFromDisk");function _t(t){switch(t){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";case"none":return"none";default:return}}r(_t,"reasoningCapabilityToOverride");function Ct(t){switch(t){case"budget":return"native-budget";case"effort":return"native-effort";case"toggle":return"native-toggle";case"adaptive":return"native-adaptive";default:return"none"}}r(Ct,"reasoningOverrideToCapability");function se(t,e,n){return[t,e.baseUrl??"",n??e.model].join("|")}r(se,"buildReasoningOverrideKey");function xt(){let t=dn();if(vt?.filePath===t)return vt.config;try{if(Ae.existsSync(t))return kt(t,go(t))}catch{}return kt(t,{})}r(xt,"loadStoredConfig");function pn(t){let e=dn();try{Ae.mkdirSync(bt.dirname(e),{recursive:!0}),Ae.writeFileSync(e,JSON.stringify(t,null,2)),kt(e,t)}catch(n){process.env.KODAX_DEBUG_OVERRIDES&&console.error("[ReasoningOverride] Failed to save config:",n)}}r(pn,"saveStoredConfig");function Oe(t,e,n){let o=xt(),i=se(t,e,n);return o.providerReasoningOverrides?.[i]}r(Oe,"loadReasoningOverride");function Tt(t,e,n,o){let i=xt(),s=se(t,e,o);i.providerReasoningOverrides={...i.providerReasoningOverrides??{},[s]:n},pn(i)}r(Tt,"saveReasoningOverride");function ho(t,e,n){let o=xt(),i=se(t,e,n);if(!o.providerReasoningOverrides?.[i])return;let s={...o.providerReasoningOverrides};delete s[i],o.providerReasoningOverrides=Object.keys(s).length>0?s:void 0,pn(o)}r(ho,"clearReasoningOverride");function fn(t,e){if(!t)return;if(typeof t.get=="function")return t.get(e)??void 0;let n=t,o=e.toLowerCase(),i=n[e]??n[o]??n[o.replace(/\b\w/g,s=>s.toUpperCase())];if(i!==void 0)return Array.isArray(i)?i[0]:i}r(fn,"readHeader");function mn(t){if(!t)return;let e=t.trim();if(e.length===0)return;let n=Number(e);if(!(!Number.isFinite(n)||n<=0))return n}r(mn,"parsePositiveNumber");function yo(t,e){if(!t)return;let n=t.trim();if(n.length===0)return;let o=Date.parse(n);if(!Number.isFinite(o))return;let i=o-e;return i>0?i:void 0}r(yo,"parseHttpDate");function De(t,e){let n=e.baseBackoffMs??1e3,o=e.maxBackoffMs??3e4,i=e.maxHeaderWaitMs??12e4,s=e.now?e.now():Date.now(),a=mn(fn(t,"retry-after-ms"));if(a!==void 0){let y=Math.min(a,i);return{type:"header",waitMs:Math.round(y),source:"retry-after-ms",cappedFromHeader:y!==a}}let c=fn(t,"retry-after");if(c!==void 0&&c.trim().length>0){let y=mn(c);if(y!==void 0){let b=y*1e3,p=Math.min(b,i);return{type:"header",waitMs:Math.round(p),source:"retry-after-seconds",cappedFromHeader:p!==b}}let g=yo(c,s);if(g!==void 0){let b=Math.min(g,i);return{type:"header",waitMs:Math.round(b),source:"retry-after-date",cappedFromHeader:b!==g}}}let d=n*Math.pow(2,Math.max(0,e.attempt)),l=Math.min(d,o),f=e.withJitter!==!1?Math.random()*.25*l:0;return{type:"backoff",waitMs:Math.round(l+f),source:"exponential-backoff",attempt:e.attempt}}r(De,"parseRetryAfter");function Ie(t){if(!t||typeof t!="object")return;let e=t;return e.headers??e.response?.headers??e.cause?.headers??e.cause?.response?.headers}r(Ie,"extractHeadersFromError");var te={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},gn={...te,multimodalSupport:"image-input"},be={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},hn={...be,multimodalSupport:"image-input"};function Ne(t){return{transport:t.transport,conversationSemantics:t.conversationSemantics,mcpSupport:t.mcpSupport,contextFidelity:t.contextFidelity??"full",toolCallingFidelity:t.toolCallingFidelity??"full",sessionSupport:t.sessionSupport??"full",longRunningSupport:t.longRunningSupport??"full",multimodalSupport:t.multimodalSupport??"none",evidenceSupport:t.evidenceSupport??"full"}}r(Ne,"normalizeCapabilityProfile");function X(t){return{...Ne(t)}}r(X,"cloneCapabilityProfile");function vo(t){if(!t)return;let e=parseInt(t,10);return Number.isFinite(e)&&e>0?e:void 0}r(vo,"parseEnvInt");function Le(){return new DOMException("Request aborted","AbortError")}r(Le,"abortError");function ko(t,e){return t<=0?Promise.resolve():e?.aborted?Promise.reject(Le()):new Promise((n,o)=>{let i,s=r(()=>{e&&e.removeEventListener("abort",a)},"cleanup"),a=r(()=>{i&&clearTimeout(i),s(),o(Le())},"onAbort");e&&e.addEventListener("abort",a,{once:!0}),i=setTimeout(()=>{s(),n()},t)})}r(ko,"waitForRetryDelay");function Et(t){if(typeof t=="number"&&Number.isInteger(t))return t;if(typeof t=="string"&&/^\d{3}$/.test(t))return Number(t)}r(Et,"normalizeHttpStatus");function vn(t){if(!t||typeof t!="object")return;let e=t;return Et(e.status)??Et(e.statusCode)??Et(e.code)??vn(e.cause)}r(vn,"extractHttpStatus");function yn(t){return t instanceof Error?t.message.toLowerCase():String(t).toLowerCase()}r(yn,"getErrorMessage");var G=class{static{r(this,"KodaXBaseProvider")}maxOutputTokensOverride;setMaxOutputTokensOverride(e){this.maxOutputTokensOverride=e}getEffectiveMaxOutputTokens(e){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=vo(process.env.KODAX_MAX_OUTPUT_TOKENS);if(n!==void 0)return n;let o=this.getModelDescriptor(e)?.maxOutputTokens;return o!==void 0?o:this.config.maxOutputTokens??32768}getStreamMaxDurationMs(e){let n=this.getModelDescriptor(e)?.streamMaxDurationMs;return n!==void 0?n:this.config.streamMaxDurationMs}getEffectiveReplayReasoningContent(e){let n=this.getModelDescriptor(e)?.replayReasoningContent;return n!==void 0?n:this.config.replayReasoningContent??!1}getEffectiveStrictThinkingSignature(e){let n=this.getModelDescriptor(e)?.strictThinkingSignature;return n!==void 0?n:this.config.strictThinkingSignature??!1}supportsNonStreamingFallback(){return!1}async complete(e,n,o,i,s,a){throw new R(`${this.name} does not support non-streaming fallback`)}isConfigured(){return!!process.env[this.config.apiKeyEnv]}async verifyCredential(e){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(e=>e.id)])]:[this.config.model]}getModelDescriptor(e){let n=e??this.config.model,o=this.config.models?.find(i=>i.id===n);if(o)return o;if(n===this.config.model)return{id:this.config.model}}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return X(this.config.capabilityProfile??te)}getConfiguredReasoningCapability(e){let n=this.getModelDescriptor(e);return n?.reasoningCapability?n.reasoningCapability:ht(this.config)}getReasoningCapability(e){let n=Oe(this.name,this.config,e);return n?Ct(n):this.getConfiguredReasoningCapability(e)}getReasoningOverride(e){return Oe(this.name,this.config,e)}getReasoningOverrideKey(e){return se(this.name,this.config,e)}persistReasoningCapabilityOverride(e,n){let o=_t(e);o&&Tt(this.name,this.config,o,n)}shouldFallbackForReasoningError(e,...n){let o=e instanceof Error?e.message.toLowerCase():String(e).toLowerCase(),s=n.map(c=>c.toLowerCase()).some(c=>o.includes(c)),a=o.includes("parameter")||s;return o.includes("unknown parameter")||o.includes("invalid parameter")||o.includes("unsupported")&&a}shouldFallbackForSpecificReasoningError(e,...n){let o=e instanceof Error?e.message.toLowerCase():String(e).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(e){let n=yn(e);return(n.includes("tool_choice")||n.includes("tool choice")||n.includes("toolchoice"))&&(n.includes("unknown parameter")||n.includes("invalid parameter")||n.includes("unsupported"))?!0:this.isServerError(e)}isServerError(e){let n=vn(e);if(n!==void 0&&n>=500&&n<=599)return!0;let o=yn(e);return o.includes("internal server error")||o.includes("server error")}getReasoningFallbackChain(e){switch(e){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(e){let n=this.getModelDescriptor(e)?.contextWindow;return n!==void 0?n:this.config.contextWindow??2e5}getApiKey(){let e=process.env[this.config.apiKeyEnv];if(!e)throw new Error(`${this.config.apiKeyEnv} not set`);return e}shouldLogStreamDiagnostics(){return!!process.env.KODAX_DEBUG_STREAM}logStreamDiagnostic(...e){this.shouldLogStreamDiagnostics()&&console.error(...e)}normalizeReasoning(e){return Re(e)}onStaleConnection(){}isRateLimitError(e){if(!(e instanceof Error))return!1;let n=e.message.toLowerCase();return["rate","limit","\u901F\u7387","\u9891\u7387","1302","429","too many","overload","overwhelmed","503","529","busy"].some(o=>n.includes(o))}classifyRateLimitReason(e){let n=e instanceof Error?e.message.toLowerCase():String(e).toLowerCase();return n.includes("overload")||n.includes("overwhelmed")||n.includes("503")||n.includes("529")||n.includes("busy")?"overloaded":"rate-limit"}extractRetryAfterMs(e){let n=Ie(e);if(!n)return;let o=De(n,{attempt:0,withJitter:!1});return o.type==="header"?o.waitMs:void 0}parseContextOverflow(e){let n=String(e?.message??""),o=[/(\d[\d,]*)\s*tokens?.*?(\d[\d,]*)\s*(?:maximum|limit|context)/i,/maximum.*?(\d[\d,]*)\s*tokens?.*?requested.*?(\d[\d,]*)/i,/exceeds?\s+.*?(\d[\d,]*)\s*.*?(?:limit|max|上限).*?(\d[\d,]*)/i];for(let i of o){let s=n.match(i);if(s){let a=Number(s[1].replace(/,/g,"")),c=Number(s[2].replace(/,/g,"")),d=Math.min(a,c),l=Math.max(a,c);return Math.max(3e3,l-d-1e3)}}}isContextOverflowError(e){let n=String(e?.message??"").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("\u4E0A\u4E0B\u6587\u957F\u5EA6")}async withRateLimit(e,n,o=3,i,s){for(let a=0;a<o;a++)try{let c=await e();return this.maxOutputTokensOverride=void 0,c}catch(c){if(this.isContextOverflowError(c)&&!this.maxOutputTokensOverride){let d=this.parseContextOverflow(c);if(d){this.maxOutputTokensOverride=d,i?.(a+1,o,0);continue}}if(this.isRateLimitError(c)){if(a===o-1)throw new ke(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let d=Ie(c)??{},l=De(d,{attempt:a,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),u=l.waitMs,f=this.classifyRateLimitReason(c);if(s?.({provider:this.name,waitMs:u,reason:f,source:l.source,attempt:a+1,maxAttempts:o}),i?i(a+1,o,u):s||console.log(`[Rate Limit] Retrying in ${u/1e3}s (${a+1}/${o})...`),n?.aborted||(await ko(u,n),n?.aborted))throw Le();continue}if(c instanceof Error){if((c.name==="AbortError"||c.name==="APIUserAbortError")&&n?.aborted)throw c.name==="AbortError"?c:new DOMException(c.message||"Request aborted","AbortError");let d=c?.cause?.code??c?.code??"";throw(d==="ECONNRESET"||d==="EPIPE")&&this.onStaleConnection(),new R(`${this.name} API error: ${c.message}`,this.name)}throw c}throw new Y("Unexpected end of withRateLimit")}};import Eo from"@anthropic-ai/sdk";import{parse as bo}from"partial-json";function ae(t){if(!t)return{};try{let e=JSON.parse(t);return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{}try{let e=bo(t);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",t.length),e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{return{}}}r(ae,"parseToolInputWithSalvage");async function ce(t){if(t.strategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:"Provider does not support credential verification"};let e=t.runners.find(l=>l.strategy===t.strategy);if(!e)return{ok:!1,error:"unsupported",strategy:t.strategy,durationMs:0,approxTokensSpent:0,message:`verifyStrategy="${t.strategy}" is not implemented for this provider's base class`};if(t.signal?.aborted)return{ok:!1,error:"unknown",strategy:t.strategy,durationMs:0,approxTokensSpent:0,message:"caller aborted before verifyCredential started"};let n=new AbortController,o=t.timeoutMs??8e3,i,s=r(l=>{i||(i=l),n.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),o),c=r(()=>s("parent"),"onParentAbort");t.signal&&t.signal.addEventListener("abort",c,{once:!0});let d=Date.now();try{return await e.run(n.signal),{ok:!0,strategy:t.strategy,durationMs:Date.now()-d,approxTokensSpent:e.approxTokensSpent}}catch(l){return wt(l,{strategy:t.strategy,durationMs:Date.now()-d,approxTokensSpent:0,abortCause:i,providerName:t.providerName})}finally{clearTimeout(a),t.signal&&t.signal.removeEventListener("abort",c)}}r(ce,"runVerifyCredential");function _o(t){return t.replace(/\bsk-[A-Za-z0-9_-]{6,}/g,"sk-***")}r(_o,"redactKeyMaterial");function wt(t,e){let n=t,o=n.status??n.statusCode??n.response?.status,i=_o(String(n.message??t)).slice(0,240),s=n.cause?.code??n.code,a=n.constructor?.name??"",c;return e.abortCause==="timeout"?c="timeout":e.abortCause==="parent"?c="unknown":a==="AuthenticationError"||a==="PermissionDeniedError"||o===401||o===403?c="unauthorized":o===429?c="rate_limited":o===400&&e.strategy==="count-tokens"&&e.providerName==="kimi-code"?c="unauthorized":o!==void 0&&o>=500&&o<600?c="server_error":s!==void 0&&/ENOTFOUND|ECONNREFUSED|ECONNRESET|EAI_AGAIN|EPIPE|ETIMEDOUT|ENETUNREACH|ENETDOWN|EHOSTUNREACH/i.test(s)?c="network":/timeout/i.test(i)?c="timeout":c="unknown",{ok:!1,error:c,status:o,message:i,durationMs:e.durationMs,approxTokensSpent:e.approxTokensSpent,strategy:e.strategy}}r(wt,"classifyVerifyError");function Mt(t,e){let n=t[t.length-1];if(n&&le(n)&&n.hint===e)return t;let o=e?{type:"cache-boundary",hint:e}:{type:"cache-boundary"};return[...t,o]}r(Mt,"insertCacheBoundary");function le(t){if(typeof t!="object"||t===null||t.type!=="cache-boundary")return!1;let e=Object.keys(t);return e.length<=2&&e.every(n=>n==="type"||n==="hint")}r(le,"isCacheBoundary");function Pt(t,e){let n=[];for(let o of t){if(le(o)){if(e==="attach"&&n.length>0){let i=n[n.length-1];n[n.length-1]={...i,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}r(Pt,"lowerCacheBoundaries");function _e(t){return t.filter(e=>!le(e))}r(_e,"stripCacheBoundaries");import{readFile as Co}from"node:fs/promises";import xo from"node:path";var To={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function Be(t,e){return e??To[xo.extname(t).toLowerCase()]??"image/png"}r(Be,"resolveImageMediaType");async function Fe(t){return(await Co(t)).toString("base64")}r(Fe,"readImageFileAsBase64");async function kn(t,e){let n=Be(t,e),o=await Fe(t);return`data:${n};base64,${o}`}r(kn,"buildImageDataUrl");var wo="KodaX";function Mo(t){return t.userAgentMode==="sdk"?void 0:{"User-Agent":wo}}r(Mo,"getAnthropicCompatDefaultHeaders");function St(t,e){if(!t)return e;let n=t.input_tokens!==void 0&&t.input_tokens!==null||t.cache_creation_input_tokens!==void 0&&t.cache_creation_input_tokens!==null||t.cache_read_input_tokens!==void 0&&t.cache_read_input_tokens!==null,o=typeof t.input_tokens=="number"?t.input_tokens:n?0:e?.inputTokens??0,i=typeof t.cache_creation_input_tokens=="number"?t.cache_creation_input_tokens:n?0:e?.cachedWriteTokens??0,s=typeof t.cache_read_input_tokens=="number"?t.cache_read_input_tokens:n?0:e?.cachedReadTokens??0,a=typeof t.output_tokens=="number"?t.output_tokens:e?.outputTokens??0,c=n?o+i+s:e?.inputTokens??0;if(![c,a].some(d=>!Number.isFinite(d)||d<0))return{inputTokens:c,outputTokens:a,totalTokens:c+a,cachedReadTokens:s||void 0,cachedWriteTokens:i||void 0}}r(St,"normalizeAnthropicUsage");var I=class extends G{static{r(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(e){this._client=e}buildClient(){let e=Mo(this.config);return new Eo({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...e?{defaultHeaders:e}:{}})}onStaleConnection(){this._client=void 0}async verifyCredential(e){let n=this.config.model,o=this.client,i=[{strategy:"count-tokens",approxTokensSpent:0,run:r(async s=>{await o.messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")},{strategy:"models-list",approxTokensSpent:0,run:r(async s=>{await o.models.list({},{signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:7,run:r(async s=>{await o.messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return ce({strategy:this.config.verifyStrategy??"count-tokens",runners:i,timeoutMs:e?.timeoutMs,signal:e?.signal,providerName:this.name})}applyCacheControlToSystem(e){if(!e.trim()||process.env.KODAX_DISABLE_PROMPT_CACHE==="1")return e;let n=Mt([{type:"text",text:e}],"system");return Pt(n,"attach")}applyCacheControlToTools(e){if(e.length===0||process.env.KODAX_DISABLE_PROMPT_CACHE==="1")return e;let n=e.slice(),o=n[n.length-1];return n[n.length-1]={...o,cache_control:{type:"ephemeral"}},n}async stream(e,n,o,i,s,a){return this.withRateLimit(async()=>{let c=this.normalizeReasoning(i),d=s?.modelOverride??this.config.model,l=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d),u=await this.convertMessages(e,d),f=c.enabled?this.getReasoningCapability(d):"none",y=c.enabled?this.getReasoningFallbackChain(f).filter(h=>h==="native-budget"||h==="native-toggle"||h==="native-adaptive"||h==="none"):["none"],g=!!s?.forcedToolName,b=r(h=>{let M={model:d,max_tokens:l,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,e)),messages:u,tools:this.applyCacheControlToTools(n),stream:!0};if(s?.forcedToolName&&g&&(M.tool_choice={type:"tool",name:s.forcedToolName}),h==="native-budget"){let S=ie(this.config,c.depth,c.taskType);M.thinking={type:"enabled",budget_tokens:re(S,l)}}else h==="native-toggle"?M.thinking={type:"enabled"}:h==="native-adaptive"&&(M.thinking={type:"adaptive"});return M},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let p=[],v=[],k=[],x,_=null,m="",T="",P="",L="",N="",j="",B="",q=!1,w,D=Date.now(),V=Date.now(),Z,Se;for(let h of y){for(;!Z;)try{Z=await this.client.messages.create(b(h),a?{signal:a}:{}),h!==f&&this.persistReasoningCapabilityOverride(h,d)}catch(M){if(Se=M,g&&this.shouldFallbackForForcedToolChoiceError(M)){g=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let S=h==="native-budget"?["budget_tokens","thinking"]:h==="native-toggle"?["thinking"]:h==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(M,...S))throw M;break}if(Z)break}if(!Z)throw Se??new R("All reasoning capability attempts failed without a captured error",this.name);let ye=Date.now(),ve=0,E=0,F=3e4;for await(let h of Z){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let M=Date.now(),S=M-ye;if(S>F&&(ve++,E+=S,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(S/1e3)}s gap before ${h.type}`,{stallCount:ve,totalStallMs:E,eventType:h.type})),ye=M,h.type==="content_block_start"||h.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),h.type==="content_block_start"){D=Date.now();let C=h.content_block;_=C.type,process.env.KODAX_DEBUG_TOOL_STREAM&&C.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:C.type,id:C.id,name:C.name}),C.type==="thinking"?(T="",P=C.signature??""):C.type==="redacted_thinking"?(_="redacted_thinking",L=C.data??""):C.type==="text"?m="":C.type==="tool_use"&&(N=C.id,j=C.name,B="")}else if(h.type==="content_block_delta"){D=Date.now();let C=h.delta;C.type==="thinking_delta"?(T+=C.thinking??"",s?.onThinkingDelta?.(C.thinking??"")):C.type==="text_delta"?(m+=C.text??"",s?.onTextDelta?.(C.text??"")):C.type==="input_json_delta"&&(B+=C.partial_json??"",s?.onToolInputDelta?.(j,C.partial_json??"",N?{toolId:N}:void 0))}else if(h.type==="content_block_stop")D=Date.now(),_==="thinking"?T&&(k.push({type:"thinking",thinking:T,signature:P}),s?.onThinkingEnd?.(T)):_==="redacted_thinking"?(L&&k.push({type:"redacted_thinking",data:L}),L=""):_==="text"?m&&p.push({type:"text",text:m}):_==="tool_use"&&(!N||!j?console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(N),name:JSON.stringify(j),input:B.slice(0,100)}):v.push({type:"tool_use",id:N,name:j,input:ae(B)})),_=null;else if(h.type==="message_stop"){if(q=!0,D=Date.now(),process.env.KODAX_DEBUG_STREAM){let C=Date.now()-V;this.logStreamDiagnostic(`[Stream] message_stop received after ${C}ms`)}}else if(h.type==="message_delta"){D=Date.now(),x=St(h.usage,x);let C=h.delta;C?.stop_reason&&(w=C.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${w}`))}else h.type==="message_start"&&(D=Date.now(),x=St(h.message?.usage,x),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!q){let h=Date.now()-V,M=Date.now()-D;if(a?.aborted){let C=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:h,lastEventAge:M,reason:C,textBlocks:p.length,toolBlocks:v.length,thinkingBlocks:k.length}),new DOMException(C,"AbortError")}let S=new Error(`Stream incomplete: message_stop event not received. Duration: ${h}ms, Last event: ${M}ms ago. This may indicate a network disconnection or API timeout.`);throw S.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:h,lastEventAge:M,textBlocks:p.length,toolBlocks:v.length,thinkingBlocks:k.length}),S}return{textBlocks:p,toolBlocks:v,thinkingBlocks:k,usage:x,stopReason:w}},a,3,s?.onRateLimit,s?.onRetryAfter)}supportsNonStreamingFallback(){return!0}async complete(e,n,o,i,s,a){return this.withRateLimit(async()=>{let c=this.normalizeReasoning(i),d=s?.modelOverride??this.config.model,l=s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(d),u=await this.convertMessages(e,d),f=c.enabled?this.getReasoningCapability(d):"none",y=c.enabled?this.getReasoningFallbackChain(f).filter(m=>m==="native-budget"||m==="native-toggle"||m==="native-adaptive"||m==="none"):["none"],g=!!s?.forcedToolName,b=r(m=>{let T={model:d,max_tokens:l,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,e)),messages:u,tools:this.applyCacheControlToTools(n)};if(s?.forcedToolName&&g&&(T.tool_choice={type:"tool",name:s.forcedToolName}),m==="native-budget"){let P=ie(this.config,c.depth,c.taskType);T.thinking={type:"enabled",budget_tokens:re(P,l)}}else m==="native-toggle"?T.thinking={type:"enabled"}:m==="native-adaptive"&&(T.thinking={type:"adaptive"});return T},"buildRequest"),p,v;for(let m of y){for(;!p;)try{p=await this.client.messages.create(b(m),a?{signal:a}:{}),m!==f&&this.persistReasoningCapabilityOverride(m,d)}catch(T){if(v=T,g&&this.shouldFallbackForForcedToolChoiceError(T)){g=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let P=m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:m==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(T,...P))throw T;break}if(p)break}if(!p)throw v??new R("All reasoning capability attempts failed without a captured error",this.name);let k=[],x=[],_=[];for(let m of p.content)m.type==="text"?(k.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(_.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?_.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&x.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:k,toolBlocks:x,thinkingBlocks:_,usage:St(p.usage),stopReason:p.stop_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter)}serializeSystemMessageContent(e){if(typeof e=="string")return e.trim();for(let n of e)if(le(n))throw new R("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name);return e.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
|
|
3
|
+
`)}buildSystemPrompt(e,n){let o=n.filter(i=>i.role==="system").map(i=>this.serializeSystemMessageContent(i.content)).filter(Boolean);return[e,...o].filter(i=>typeof i=="string"&&i.trim().length>0).join(`
|
|
4
|
+
|
|
5
|
+
`)}async convertMessages(e,n){let o=[],i=this.getEffectiveStrictThinkingSignature(n);for(let s of e.filter(a=>a.role!=="system")){let a=s.role==="user"?"user":"assistant";if(typeof s.content=="string"){o.push({role:a,content:s.content});continue}let c=[],d=[];for(let u of s.content)u.type==="thinking"?!i||typeof u.signature=="string"&&u.signature.length>0?c.push({type:"thinking",thinking:u.thinking,signature:u.signature??""}):u.thinking&&d.push(u.thinking):u.type==="redacted_thinking"&&(i||c.push({type:"redacted_thinking",data:u.data}));d.length>0&&s.role==="assistant"&&c.push({type:"text",text:`<prior_reasoning>
|
|
6
|
+
${d.join(`
|
|
7
|
+
|
|
8
|
+
`)}
|
|
9
|
+
</prior_reasoning>`});for(let u of s.content)if(u.type==="tool_result"&&s.role==="user"){let f;if(typeof u.content=="string")f=u.content;else{let y=[];for(let g of u.content)g.type==="text"?y.push({type:"text",text:g.text}):g.type==="image"&&y.push({type:"image",source:{type:"base64",media_type:Be(g.path,g.mediaType),data:await Fe(g.path)}});f=y}c.push({type:"tool_result",tool_use_id:u.tool_use_id,content:f,...u.is_error===!0?{is_error:!0}:{}})}for(let u of s.content)u.type==="tool_use"&&s.role==="assistant"&&c.push({type:"tool_use",id:u.id,name:u.name,input:u.input});for(let u of s.content)u.type==="text"?c.push({type:"text",text:u.text}):u.type==="image"&&s.role==="user"&&c.push({type:"image",source:{type:"base64",media_type:Be(u.path,u.mediaType),data:await Fe(u.path)}});if(a==="assistant"&&this.config.supportsThinking&&!i){let u=c.some(y=>y.type==="tool_use"),f=c.some(y=>y.type==="thinking"||y.type==="redacted_thinking");u&&!f&&c.unshift({type:"thinking",thinking:"...",signature:""})}let l=c.length===0||a==="assistant"&&c.every(u=>{let f=u;return f.type==="thinking"&&!f.thinking||f.type==="text"&&!f.text});o.push({role:s.role,content:l?[{type:"text",text:"..."}]:c})}return o}};import Po from"openai";var So="KodaX";function Ro(t){return t.userAgentMode==="sdk"?void 0:{"User-Agent":So}}r(Ro,"getOpenAICompatDefaultHeaders");function bn(t){if(!t)return;let e=typeof t.prompt_tokens=="number"?t.prompt_tokens:0,n=typeof t.completion_tokens=="number"?t.completion_tokens:0,o=typeof t.total_tokens=="number"?t.total_tokens:e+n;if([e,n,o].some(s=>!Number.isFinite(s)||s<0)||o<e||o<n)return;let i=typeof t.prompt_tokens_details?.cached_tokens=="number"&&t.prompt_tokens_details.cached_tokens>=0?t.prompt_tokens_details.cached_tokens:typeof t.prompt_cache_hit_tokens=="number"&&t.prompt_cache_hit_tokens>=0?t.prompt_cache_hit_tokens:void 0;return{inputTokens:e,outputTokens:n,totalTokens:o,...i!==void 0?{cachedReadTokens:i}:{}}}r(bn,"normalizeOpenAIUsage");function Ao(t){return t?t.type==="function"&&"function"in t:!1}r(Ao,"isOpenAIFunctionToolCall");function Oo(t){return typeof t=="string"?t:Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object")return"";let n=Reflect.get(e,"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(""):""}r(Oo,"extractOpenAIMessageText");function Do(t){if(!t||typeof t!="object")return"";let e=Reflect.get(t,"reasoning_content");return typeof e=="string"?e:Array.isArray(e)?e.map(n=>typeof n=="string"?n:n&&typeof n=="object"&&"text"in n&&typeof n.text=="string"?n.text:"").join(""):""}r(Do,"extractOpenAIMessageReasoning");function Ke(t){let e=t.role;return typeof e=="string"?e:void 0}r(Ke,"getWireRole");function Io(t){if(Ke(t)!=="assistant")return;let e=t.tool_calls;if(Array.isArray(e))return e.flatMap(n=>{if(!n||typeof n!="object")return[];let o=n.id;return typeof o=="string"&&o.trim().length>0?[{id:o,value:n}]:[]})}r(Io,"getAssistantWireToolCalls");function No(t){if(Ke(t)!=="tool")return;let e=t.tool_call_id;return typeof e=="string"&&e.trim().length>0?e:void 0}r(No,"getToolWireCallId");function Lo(t,e){let n={...t};return e.length>0?(n.tool_calls=e.map(o=>o.value),n):(delete n.tool_calls,(n.content==null||n.content==="")&&(n.content="..."),n)}r(Lo,"rewriteAssistantWireToolCalls");var K=class extends G{static{r(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;_client;get client(){return this._client??=this.buildClient()}set client(e){this._client=e}buildClient(){let e=Ro(this.config);return new Po({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...e?{defaultHeaders:e}:{}})}onStaleConnection(){this._client=void 0}async verifyCredential(e){let n=this.config.model,o=this.client,i=[{strategy:"models-list",approxTokensSpent:0,run:r(async s=>{await o.models.list({signal:s})},"run")},{strategy:"minimal-message",approxTokensSpent:6,run:r(async s=>{await o.chat.completions.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:s})},"run")}];return ce({strategy:this.config.verifyStrategy??"models-list",runners:i,timeoutMs:e?.timeoutMs,signal:e?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(e){return e.map(n=>{if(typeof n.content=="string")return n;let o=_e(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(e,n){let o=[];e&&e.trim().length>0&&o.push(e);let i=[];for(let s of n){if(s.role!=="system"){i.push(s);continue}let a=typeof s.content=="string"?s.content:Array.isArray(s.content)?s.content.filter(c=>typeof c=="object"&&c!==null&&c.type==="text"&&typeof c.text=="string").map(c=>c.text).join(`
|
|
10
|
+
`):"";a.trim().length>0&&o.push(a)}return{system:o.join(`
|
|
11
|
+
|
|
12
|
+
`),rest:i}}appendExtraBody(e,n){let o=typeof e.extra_body=="object"&&e.extra_body!==null?e.extra_body:{};e.extra_body={...o,...n}}resetReasoningCapabilityParams(e){delete e.reasoning_effort,delete e.thinking;let n=typeof e.extra_body=="object"&&e.extra_body!==null?{...e.extra_body}:void 0;if(n){if(delete n.enable_thinking,delete n.thinking_budget,delete n.thinking,Object.keys(n).length===0){delete e.extra_body;return}e.extra_body=n}}applyReasoningCapability(e,n,o){let i=e,s=this.getEffectiveMaxOutputTokens(e.model),a=re(ie(this.config,o.depth,o.taskType),s);switch(n){case"native-effort":{let c=yt(o.depth);c&&(i.reasoning_effort=c);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(i,{enable_thinking:!0,thinking_budget:a}):this.name==="zhipu"&&(i.thinking={type:"enabled",budget_tokens:a});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(i,{enable_thinking:!0}):this.name==="zhipu"&&(i.thinking={type:"enabled"});break}default:break}}getFallbackTerms(e){switch(e){case"native-budget":return["thinking_budget","budget_tokens","thinking"];case"native-effort":return["reasoning_effort"];case"native-toggle":return["enable_thinking","thinking"];default:return[]}}async stream(e,n,o,i,s,a){return this.withRateLimit(async()=>{let c=this.stripCacheBoundariesFromMessages(e),{system:d,rest:l}=this.normalizeSystemForWire(o,c),u=s?.modelOverride??this.config.model,f=[{role:"system",content:d},...await this.convertMessages(l,u)],y=n.map(E=>({type:"function",function:{name:E.name,description:E.description,parameters:E.input_schema}})),g=s?.forcedToolName,b=!!g;if(a?.aborted)throw new DOMException("Request aborted","AbortError");let p=new Map,v="",k="",x,_=!0,m=null,T=Date.now(),P=this.normalizeReasoning(i),L=oe(P)?this.getReasoningCapability(u):"none",N=oe(P)?this.getReasoningFallbackChain(L).filter(E=>E==="native-budget"||E==="native-effort"||E==="native-toggle"||E==="none"):["none"],j={model:u,messages:f,tools:y,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u),stream:!0};g&&b&&(j.tool_choice={type:"function",function:{name:g}});let B,q;for(let E of N){for(;!B;){let F={...j};_&&(F.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(F),this.applyReasoningCapability(F,E,P);try{B=await this.client.chat.completions.create(F,a?{signal:a}:{}),E!==L&&this.persistReasoningCapabilityOverride(E,u)}catch(h){if(q=h,b&&this.shouldFallbackForForcedToolChoiceError(h)){b=!1,delete j.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(_&&this.shouldFallbackForSpecificReasoningError(h,"stream_options","include_usage")){_=!1;continue}if(!this.shouldFallbackForReasoningError(h,...this.getFallbackTerms(E)))throw h;break}}if(B)break}if(!B)throw q??new R("All reasoning capability attempts failed without a captured error",this.name);let w=Date.now(),D=0,V=0,Z=3e4;for await(let E of B){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let F=Date.now(),h=F-w;h>Z&&(D++,V+=h,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(h/1e3)}s gap`,{stallCount:D,totalStallMs:V})),w=F,s?.onHeartbeat?.(),x=bn(E.usage)??x;let M=E.choices[0],S=M?.delta;if(M?.finish_reason&&(m=M.finish_reason,process.env.KODAX_DEBUG_STREAM)){let W=Date.now()-T;this.logStreamDiagnostic(`[Stream] finish_reason: ${m} after ${W}ms`)}S?.content&&(v+=S.content,s?.onTextDelta?.(S.content));let C=this.extractReasoningDelta(S);if(C&&(k+=C,s?.onThinkingDelta?.(C)),S?.tool_calls)for(let W of S.tool_calls){let ee=p.get(W.index)??{id:"",name:"",arguments:""};W.id&&(ee.id=W.id),W.function?.name&&(ee.name=W.function.name),W.function?.arguments&&(ee.arguments+=W.function.arguments,s?.onToolInputDelta?.(ee.name,W.function.arguments,ee.id?{toolId:ee.id}:void 0)),p.set(W.index,ee)}}if(!m){let E=Date.now()-T;if(a?.aborted){let h=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:E,reason:h,textContentLength:v.length,toolCallsCount:p.size}),new DOMException(h,"AbortError")}let F=new Error(`Stream incomplete: finish_reason not received. Duration: ${E}ms. This may indicate a network disconnection or API timeout.`);throw F.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:E,textContentLength:v.length,toolCallsCount:p.size}),F}let Se=v?[{type:"text",text:v}]:[],ye=[],ve=[];k&&(ve.push({type:"thinking",thinking:k}),s?.onThinkingEnd?.(k));for(let[,E]of p)E.id&&E.name&&ye.push({type:"tool_use",id:E.id,name:E.name,input:ae(E.arguments)});return{textBlocks:Se,toolBlocks:ye,thinkingBlocks:ve,usage:x,stopReason:m??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter)}supportsNonStreamingFallback(){return!0}async complete(e,n,o,i,s,a){return this.withRateLimit(async()=>{let c=this.stripCacheBoundariesFromMessages(e),{system:d,rest:l}=this.normalizeSystemForWire(o,c),u=s?.modelOverride??this.config.model,f=[{role:"system",content:d},...await this.convertMessages(l,u)],y=n.map(w=>({type:"function",function:{name:w.name,description:w.description,parameters:w.input_schema}})),g=s?.forcedToolName,b=!!g,p=this.normalizeReasoning(i),v=oe(p)?this.getReasoningCapability(u):"none",k=oe(p)?this.getReasoningFallbackChain(v).filter(w=>w==="native-budget"||w==="native-effort"||w==="native-toggle"||w==="none"):["none"],x={model:u,messages:f,tools:y,max_completion_tokens:s?.maxOutputTokensOverride??this.getEffectiveMaxOutputTokens(u)};g&&b&&(x.tool_choice={type:"function",function:{name:g}});let _,m;for(let w of k){for(;!_;){let D={...x};this.resetReasoningCapabilityParams(D),this.applyReasoningCapability(D,w,p);try{_=await this.client.chat.completions.create(D,a?{signal:a}:{}),w!==v&&this.persistReasoningCapabilityOverride(w,u)}catch(V){if(m=V,b&&this.shouldFallbackForForcedToolChoiceError(V)){b=!1,delete x.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(!this.shouldFallbackForReasoningError(V,...this.getFallbackTerms(w)))throw V;break}}if(_)break}if(!_)throw m??new R("All reasoning capability attempts failed without a captured error",this.name);let T=_.choices[0],P=T?.message,L=Oo(P?.content),N=Do(P),j=(P?.tool_calls??[]).filter(Ao).map(w=>({type:"tool_use",id:w.id,name:w.function.name,input:ae(w.function.arguments)}));L&&s?.onTextDelta?.(L);let B=L?[{type:"text",text:L}]:[],q=[];return N&&(q.push({type:"thinking",thinking:N}),s?.onThinkingDelta?.(N),s?.onThinkingEnd?.(N)),{textBlocks:B,toolBlocks:j,thinkingBlocks:q,usage:bn(_.usage),stopReason:T?.finish_reason??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter)}extractReasoningDelta(e){let n=e?.reasoning_content;return typeof n=="string"?n:Array.isArray(n)?n.map(o=>typeof o=="string"?o:typeof o=="object"&&o!==null&&"text"in o&&typeof o.text=="string"?o.text:"").join(""):""}serializeAssistantMessage(e,n){let o=e.filter(l=>l.type==="text").map(l=>l.text).join(`
|
|
13
|
+
`),i=e.filter(l=>l.type==="tool_use").map(l=>({id:l.id,type:"function",function:{name:l.name,arguments:JSON.stringify(l.input??{})}})),s=e.filter(l=>l.type==="thinking"||l.type==="redacted_thinking").map(l=>l.type==="thinking"?l.thinking:"").filter(Boolean).join(`
|
|
14
|
+
|
|
15
|
+
`),a=e.some(l=>l.type==="thinking"||l.type==="redacted_thinking");if(!o&&i.length===0&&!a)return[];let c;o?c=o:i.length>0?c=null:c="...";let d={role:"assistant",content:c};return i.length>0&&(d.tool_calls=i),this.getEffectiveReplayReasoningContent(n)&&(d.reasoning_content=s||""),[d]}async serializeUserMessage(e){let n=[],o=e.filter(a=>a.type==="text").map(a=>a.text).join(`
|
|
16
|
+
`),i=e.filter(a=>a.type==="image");for(let a of e)if(a.type==="tool_result"){let c;typeof a.content=="string"?c=a.content:c=a.content.map(d=>d.type==="text"?d.text:`[Image at ${d.path}${d.mediaType?` (${d.mediaType})`:""}] (provider does not support image content in tool_result; if the image was previously visible to you in the conversation, refer to it directly via native vision)`).join(`
|
|
17
|
+
`),n.push({role:"tool",tool_call_id:a.tool_use_id,content:c})}if(i.length===0)return o&&n.push({role:"user",content:o}),n;let s=[];o&&s.push({type:"text",text:o});for(let a of i)s.push({type:"image_url",image_url:{url:await kn(a.path,a.mediaType)}});return n.push({role:"user",content:s}),n}serializeSystemMessage(e){if(typeof e=="string")return[{role:"system",content:e}];let n=e.filter(o=>o.type==="text").map(o=>o.text).join(`
|
|
18
|
+
`);return n?[{role:"system",content:n}]:[]}async convertMessages(e,n){let o=[];for(let i of e){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))}return this.repairToolCallHistory(o)}repairToolCallHistory(e){let n=[],o=0;for(;o<e.length;){let i=e[o],s=Io(i);if(s===void 0){Ke(i)!=="tool"&&n.push(i),o+=1;continue}let a=new Set(s.map(y=>y.id)),c=new Set,d=[],l=o+1;for(;l<e.length&&Ke(e[l])==="tool";){let y=e[l],g=No(y);g!==void 0&&a.has(g)&&!c.has(g)&&(c.add(g),d.push(y)),l+=1}let u=s.filter(y=>c.has(y.id)),f=u.length===s.length&&s.length>0?i:Lo(i,u);n.push(f),u.length>0&&n.push(...d),o=l}return n}};import{spawn as Uo}from"node:child_process";import{Readable as jo,Writable as Wo}from"node:stream";import Ue from"node:process";import{ClientSideConnection as Xo,PROTOCOL_VERSION as zo,ndJsonStream as Vo}from"@agentclientprotocol/sdk";import{spawn as Bo,spawnSync as wn}from"node:child_process";var Ot=2e3,z=2e3;function At(t){return t.exitCode!==null||t.signalCode!==null}r(At,"isExited");function Ce(t,e){return At(t)?Promise.resolve(!0):new Promise(n=>{let o=!1,i=r(c=>{o||(o=!0,clearTimeout(a),t.off("exit",s),t.off("error",s),n(c))},"finish"),s=r(()=>i(!0),"onExit"),a=setTimeout(()=>i(!1),e);a.unref?.(),t.once("exit",s),t.once("error",s)})}r(Ce,"waitForExit");function _n(t){return new Promise(e=>{let n=Bo("taskkill",["/pid",String(t),"/t","/f"],{stdio:"ignore",windowsHide:!0}),o=!1,i=r(()=>{o||(o=!0,clearTimeout(s),e())},"finish"),s=setTimeout(()=>{try{n.kill()}catch{}i()},Ot);s.unref?.(),n.once("exit",i),n.once("error",i)})}r(_n,"runTaskkill");function Cn(t,e){let n=!1;try{process.kill(-t,e),n=!0}catch{}try{process.kill(t,e),n=!0}catch{}return n}r(Cn,"signalPosixPidTree");function H(t){try{return process.kill(t,0),!0}catch(e){return e.code!=="ESRCH"}}r(H,"signalTargetExists");function xn(t){return H(-t)||H(t)}r(xn,"isPosixPidTreeAlive");async function Tn(t,e){let n=Date.now()+e;for(;Date.now()<n;){if(!xn(t))return!0;await new Promise(o=>setTimeout(o,50))}return!xn(t)}r(Tn,"waitForPosixPidTreeExit");async function Fo(t,e){let n=Date.now()+e;for(;Date.now()<n;){if(!H(t))return!0;await new Promise(o=>setTimeout(o,50))}return!H(t)}r(Fo,"waitForWindowsPidExit");async function Rt(t,e){let n=[...new Set(t.filter(i=>Number.isFinite(i)&&i>0))];if(n.length===0)return!0;let o=Date.now()+e;for(;Date.now()<o;){if(n.every(i=>!H(i)))return!0;await new Promise(i=>setTimeout(i,50))}return n.every(i=>!H(i))}r(Rt,"waitForWindowsPidsExit");function En(t){let e=t.trim();if(!e)return[];try{let n=JSON.parse(e);return(Array.isArray(n)?n:[n]).map(i=>Number(i)).filter(i=>Number.isFinite(i)&&i>0)}catch{return[]}}r(En,"readWindowsPidListJson");function Ko(t){let e=wn("wmic",["process","where",`ParentProcessId=${t}`,"get","ProcessId","/format:list"],{encoding:"utf8",timeout:Ot,windowsHide:!0});if(e.error||e.status!==0)return[];let n=[],o=/ProcessId=(\d+)/g,i;for(;(i=o.exec(e.stdout))!==null;){let s=Number(i[1]);Number.isFinite(s)&&s>0&&s!==t&&n.push(s)}return n}r(Ko,"getWindowsChildPidsViaWmic");function $o(t){let e=[`$children = Get-CimInstance Win32_Process -Filter "ParentProcessId = ${t}"`,"if ($null -eq $children) { exit 0 }","$children | Select-Object -ExpandProperty ProcessId | ConvertTo-Json -Compress"].join("; "),n=wn("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:Ot,windowsHide:!0});if(!n.error&&n.status===0){let i=En(n.stdout);if(i.length>0)return i}let o=En(n.stdout);return o.length>0?o:Ko(t)}r($o,"getWindowsChildPids");function Mn(t,e=new Set){let n=[];for(let o of $o(t))e.has(o)||(e.add(o),n.push(o),n.push(...Mn(o,e)));return n}r(Mn,"collectWindowsDescendantPids");async function $e(t,e){try{process.kill(t,e)}catch{return!H(t)}return Fo(t,z)}r($e,"killWindowsPid");async function xe(t){if(process.platform==="win32"&&t.pid!==void 0){let e=Mn(t.pid),n=[...e].reverse(),o=[t.pid,...e];At(t)||await _n(t.pid);for(let i of n)H(i)&&await _n(i);if(await Rt(o,z)){await Ce(t,z);return}for(let i of n)H(i)&&await $e(i,"SIGTERM");if(await $e(t.pid,"SIGTERM"),await Rt(o,z)){await Ce(t,z);return}for(let i of n)H(i)&&await $e(i,"SIGKILL");await $e(t.pid,"SIGKILL"),await Rt(o,z),await Ce(t,z);return}if(t.pid!==void 0&&process.platform!=="win32"){if(!Cn(t.pid,"SIGTERM")||await Tn(t.pid,z))return;Cn(t.pid,"SIGKILL"),await Tn(t.pid,z);return}if(!At(t)){try{t.kill("SIGTERM")}catch{return}if(!await Ce(t,z)){try{t.kill("SIGKILL")}catch{}await Ce(t,z)}}}r(xe,"killChildProcessTree");var je=class{static{r(this,"AcpClient")}client=null;agentProcess=null;options;constructor(e){this.options=e}async connect(){let e,n;if(this.options.inputStream&&this.options.outputStream)e=this.options.inputStream,n=this.options.outputStream;else if(this.options.command){let s=Ue.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Uo(s,this.options.args??[],{cwd:this.options.cwd??Ue.cwd(),stdio:["pipe","pipe","inherit"],detached:Ue.platform!=="win32"}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=Wo.toWeb(this.agentProcess.stdin),e=jo.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=Vo(n,e);this.client=new Xo(()=>({sessionUpdate:r(async i=>{this.options.onSessionUpdate?.(i)},"sessionUpdate"),requestPermission:r(async i=>{let s=i.options??[],a=s.find(c=>c.kind==="allow_once"||c.kind==="allow_always")??s[0];return a?{outcome:{outcome:"selected",optionId:a.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),o),await this.client.initialize({protocolVersion:zo,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}})}async createNewSession(){if(!this.client)throw new Error("Client not connected");return(await this.client.newSession({cwd:this.options.cwd??Ue.cwd(),mcpServers:[]})).sessionId}async prompt(e,n,o,i){if(!this.client)throw new Error("Client not connected");let s={sessionId:n,prompt:[{type:"text",text:e}]};i?.model&&(s.model=i.model);let a=this.client.prompt(s);if(o){let c=r(()=>{this.client?.cancel({sessionId:n}).catch(()=>{})},"onAbort");o.addEventListener("abort",c),a=a.finally(()=>{o.removeEventListener("abort",c)})}return await a}disconnect(){this.agentProcess&&xe(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}};function Go(t){if(!t||typeof t!="object")return;let e=t,n=typeof e.inputTokens=="number"?e.inputTokens:0,o=typeof e.outputTokens=="number"?e.outputTokens:0,i=typeof e.totalTokens=="number"?e.totalTokens:n+o;if(![n,o,i].some(s=>!Number.isFinite(s)||s<0)&&!(i<n||i<o))return{inputTokens:n,outputTokens:o,totalTokens:i,cachedReadTokens:typeof e.cachedReadTokens=="number"?e.cachedReadTokens:void 0,cachedWriteTokens:typeof e.cachedWriteTokens=="number"?e.cachedWriteTokens:void 0,thoughtTokens:typeof e.thoughtTokens=="number"?e.thoughtTokens:void 0}}r(Go,"normalizeAcpUsage");var ue=class extends G{static{r(this,"KodaXAcpProvider")}_client=null;_sessionMap=new Map;_activeStreams=new Map;isConfigured(){return!0}async verifyCredential(){return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`CLI-bridge provider "${this.name}" manages credentials in its CLI binary's token store; not verifiable from the KodaX SDK`}}getCapabilityProfile(){return X(be)}serializeImageBlockToPromptToken(e){return null}stripCacheBoundariesFromMessages(e){return e.map(n=>{if(typeof n.content=="string")return n;let o=_e(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(e,n,o,i,s,a){if(e=this.stripCacheBoundariesFromMessages(e),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 c=[],d=[],l=e[e.length-1],u="";if(l&&typeof l.content=="string")u=l.content;else if(l&&Array.isArray(l.content)){let v=[];for(let k of l.content)if(k.type==="text")v.push(k.text);else if(k.type==="image"){let x=this.serializeImageBlockToPromptToken(k);x&&v.push(x)}u=v.join(`
|
|
19
|
+
`)}let f={...this.acpClientOptions,onSessionUpdate:r(v=>{let k=v.update,x=v.sessionId;if(!("sessionUpdate"in k))return;let _=x?this._activeStreams.get(x):void 0;if(_)switch(k.sessionUpdate){case"agent_message_chunk":if(k.content?.type==="text"){let m=k.content.text;_.output.text+=m,_.streamOptions?.onTextDelta?.(m)}break;case"tool_call":{let m="{}",T=k.arguments??k.parameters;T&&(m=typeof T=="string"?T:JSON.stringify(T)),_.streamOptions?.onToolInputDelta?.(k.title,m);let P=`
|
|
20
|
+
> [Tool Use] ${k.title}: ${m}
|
|
21
|
+
`;_.output.text+=P,_.streamOptions?.onTextDelta?.(P);break}case"tool_call_update":if(k.status){let m=`> [Tool Result] ${k.status}
|
|
22
|
+
|
|
23
|
+
`;_.output.text+=m,_.streamOptions?.onTextDelta?.(m)}break}},"onSessionUpdate")},y=s?.sessionId??"default";this._client||(this._client=new je(f),await this._client.connect());let g=this._sessionMap.get(y);g||(g=await this._client.createNewSession(),this._sessionMap.set(y,g));let b={text:""};this._activeStreams.set(g,{streamOptions:s,output:b});let p;try{p=await this._client.prompt(u,g,a,{model:s?.modelOverride})}catch(v){if(!(v instanceof Error&&v.name==="AbortError"))throw v}finally{this._activeStreams.delete(g)}return b.text&&c.push({type:"text",text:b.text}),{textBlocks:c,toolBlocks:d,thinkingBlocks:[],usage:Go(p?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as Ho}from"node:child_process";import We from"node:process";var de=class{static{r(this,"CLIExecutor")}config;_installedCache=null;constructor(e){this.config=e}async isInstalled(){return this._installedCache!==null?this._installedCache:(this._installedCache=await this.checkInstalled(),this._installedCache)}async*execute(e){let n=this.buildArgs(e),o={...We.env,...this.config.env},s=We.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=Ho(s,n,{cwd:this.config.cwd??We.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:We.platform!=="win32"}),c="";a.stderr?.on("data",u=>{c+=u.toString()});let d=!1,l=r(()=>{d||xe(a)},"abortHandler");e.signal?.addEventListener("abort",l),a.on("exit",()=>{d=!0});try{yield*this.parseOutputStream(a.stdout,e.signal),c.trim()&&console.error(`[CLIExecutor] stderr: ${c.trim()}`)}finally{e.signal?.removeEventListener("abort",l),d||await xe(a)}}async*parseOutputStream(e,n){let o="";for await(let i of e){if(n?.aborted)break;o+=i.toString();let s=o.split(`
|
|
24
|
+
`);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let c=this.parseLine(a.trim());c&&(yield c)}}if(o.trim()&&!n?.aborted){let i=this.parseLine(o.trim());i&&(yield i)}}};import{spawn as Jo}from"node:child_process";import Yo from"node:process";async function Xe(t){try{let e=Yo.platform==="win32",n=Jo(e?`${t}.cmd`:t,["--version"]);return await new Promise(o=>{n.on("close",i=>o(i===0)),n.on("error",()=>o(!1))})}catch{return!1}}r(Xe,"checkCliCommandInstalled");var ze=class extends de{static{r(this,"GeminiCLIExecutor")}model;constructor(e){super({command:"gemini",baseArgs:["--output-format","stream-json","--approval-mode","yolo"],timeout:3e5,...e}),this.model=e?.model??"gemini-2.5-pro"}async checkInstalled(){return Xe("gemini")}buildArgs(e){let n=["-m",e.model??this.model];return e.sessionId?(n.push("-r",e.sessionId),n.push(e.prompt)):n.push("-p",e.prompt),[...n,...this.config.baseArgs]}parseLine(e){if(!e.startsWith("{"))return null;try{let n=JSON.parse(e);return this.convertEvent(n)}catch{return null}}convertEvent(e){let n=e.timestamp?Date.parse(e.timestamp):Date.now();switch(e.type){case"init":return{type:"session_start",timestamp:n,sessionId:e.session_id??"",model:e.model??this.model,raw:e};case"message":return{type:"message",timestamp:n,role:e.role,content:e.content??"",delta:e.delta,raw:e};case"tool_use":return{type:"tool_use",timestamp:n,toolId:e.tool_id??"",toolName:e.tool_name??"",parameters:e.parameters??{},raw:e};case"tool_result":return{type:"tool_result",timestamp:n,toolId:e.tool_id??"",status:e.status==="success"?"success":"error",output:e.output??"",raw:e};case"error":return{type:"error",timestamp:n,errorType:"error",message:e.message??"Unknown error",raw:e};case"result":return{type:"complete",timestamp:n,status:e.status==="success"?"success":"failed",usage:e.stats?{inputTokens:e.stats.input_tokens??0,outputTokens:e.stats.output_tokens??0,totalTokens:e.stats.total_tokens??0}:void 0,raw:e};default:return null}}};import{TransformStream as Pn}from"node:stream/web";import{randomUUID as Dt}from"node:crypto";function Ve(t){let e=new Pn,n=new Pn,o=e.readable.getReader(),i=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,c="",d=Dt(),l=new AbortController,u=new Map;(async()=>{try{for(;;){let{done:p,value:v}=await o.read();if(p)break;c+=s.decode(v,{stream:!0});let k=c.split(`
|
|
25
|
+
`);c=k.pop()??"";for(let x of k)if(x.trim())try{let _=JSON.parse(x);y(_).catch(m=>{console.error("[PseudoAcpServer] Failed to handle request:",m)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",x)}}}catch(p){console.error("[PseudoAcpServer] Stream read error:",p)}})();let f=r(async p=>{let v=JSON.stringify(p)+`
|
|
26
|
+
`;await i.write(a.encode(v))},"sendMsg");async function y(p){if(p.method==="initialize")await f({jsonrpc:"2.0",id:p.id,result:{protocolVersion:p.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(p.method==="session/new"||p.method==="sessions/new")d=p.params?.sessionId??Dt(),await f({jsonrpc:"2.0",id:p.id,result:{sessionId:d}});else if(p.method==="session/prompt"||p.method==="chat/prompt"){let v=new AbortController,k=p.params.sessionId;u.set(k,v);let x=r(()=>v.abort(),"onGlobalAbort");l.signal.addEventListener("abort",x);let m=await g(k,p.params.prompt,typeof p.params.model=="string"?p.params.model:void 0,v.signal).finally(()=>{u.delete(k),l.signal.removeEventListener("abort",x)});await f({jsonrpc:"2.0",id:p.id,result:m.usage?{stopReason:m.stopReason,usage:m.usage}:{stopReason:m.stopReason}})}else if(p.method==="session/cancel"||p.method==="chat/cancel"){let v=u.get(p.params.sessionId);v&&v.abort(),p.id!==void 0&&await f({jsonrpc:"2.0",id:p.id,result:{}})}else p.id!==void 0&&await f({jsonrpc:"2.0",id:p.id,result:{}})}r(y,"handleRequest");let g=r(async(p,v,k,x)=>{let _=v.find(m=>m.type==="text")?.text??"";try{let m=t.execute({prompt:_,model:k,sessionId:p==="default"?void 0:p,signal:x});for await(let T of m){let P=b(T);if(P&&await f({jsonrpc:"2.0",method:"session/update",params:{sessionId:p,update:P}}),T.type==="complete")return{stopReason:x.aborted?"cancelled":"end_turn",usage:T.usage}}return{stopReason:x.aborted?"cancelled":"end_turn"}}catch(m){return x.aborted||m instanceof Error&&m.name==="AbortError"?{stopReason:"cancelled"}:(console.error("[PseudoAcpServer] Error executing prompt:",m),await f({jsonrpc:"2.0",method:"session/update",params:{sessionId:p,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
|
|
27
|
+
[Fatal Error: ${m}]
|
|
28
|
+
`}}}}),{stopReason:"end_turn"})}},"executePrompt"),b=r(p=>{switch(p.type){case"message":if(p.role==="assistant"&&p.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:p.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:p.toolName,arguments:p.parameters,status:"running",toolCallId:p.toolId||Dt()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:p.toolId,status:p.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
|
|
29
|
+
[Error: ${p.message}]
|
|
30
|
+
`}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:e.writable,abort:r(()=>{l.abort(),e.readable.cancel().catch(()=>{}),n.writable.abort().catch(()=>{})},"abort"),executor:t}}r(Ve,"createPseudoAcpServer");import Sn from"node:fs";import Rn from"node:os";import An from"node:path";var qo="gpt-5.4",Qo="auto-gemini-3",Zo=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ei=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function On(t){let e=new Set,n=[];for(let o of t){let i=o.trim();if(!i)continue;let s=i.toLowerCase();e.has(s)||(e.add(s),n.push(i))}return n}r(On,"dedupePreserveOrder");function ti(){let t=An.join(Rn.homedir(),".codex","config.toml");try{return Sn.readFileSync(t,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}r(ti,"readCodexConfiguredModel");function ni(){let t=An.join(Rn.homedir(),".gemini","settings.json");try{let e=JSON.parse(Sn.readFileSync(t,"utf8")),n=typeof e.model=="string"?e.model.trim():"";return n||(typeof e.general?.model=="string"?e.general.model.trim():"")||null}catch{return null}}r(ni,"readGeminiConfiguredModel");function pe(){return ti()||qo}r(pe,"getCodexCliDefaultModel");function fe(){return ni()||Qo}r(fe,"getGeminiCliDefaultModel");function Te(){return On([pe(),...Zo])}r(Te,"getCodexCliKnownModels");function Ee(){return On([fe(),...ei])}r(Ee,"getGeminiCliKnownModels");var It=fe(),oi=Ee(),ii={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},Ge=class extends ue{static{r(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:It,models:oi.filter(e=>e!==It).map(e=>({id:e,displayName:e})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let e=new ze({model:It});this.acpClientOptions=Ve(e)}getCapabilityProfile(){return X(ii)}serializeImageBlockToPromptToken(e){return/\s/.test(e.path)?(console.warn(`[gemini-cli] Image path contains whitespace and cannot be safely passed via @<path> syntax \u2014 dropping image block. Path: ${JSON.stringify(e.path)}`),null):`@${e.path}`}};var He=class extends de{static{r(this,"CodexCLIExecutor")}model;constructor(e){super({command:"codex",baseArgs:["exec","--json","--full-auto"],timeout:3e5,...e}),this.model=e?.model??"gpt-5.4"}async checkInstalled(){return Xe("codex")}buildArgs(e){this.model=e.model??this.model;let n=e.model?["-m",e.model]:[];return e.sessionId?["exec","resume",e.sessionId,...n,e.prompt,...this.config.baseArgs.filter(o=>o!=="exec")]:[...this.config.baseArgs,...n,e.prompt]}parseLine(e){if(!e.startsWith("{"))return null;try{let n=JSON.parse(e);return this.convertEvent(n)}catch{return null}}convertEvent(e){let n=Date.now();switch(e.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:e.thread_id??"",model:this.model,raw:e};case"item.completed":return e.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:e.item.text??"",raw:e}:e.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:e.item.id,toolName:"Bash",parameters:{command:e.item.command},raw:e}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:e.usage?{inputTokens:e.usage.input_tokens,outputTokens:e.usage.output_tokens,totalTokens:e.usage.input_tokens+e.usage.output_tokens}:void 0,raw:e};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:e.type,message:e.message??"Unknown error",raw:e};default:return null}}};var Nt=pe(),ri=Te(),Je=class extends ue{static{r(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:Nt,models:ri.filter(e=>e!==Nt).map(e=>({id:e,displayName:e})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let e=new He({model:Nt});this.acpClientOptions=Ve(e)}};import{existsSync as di,readFileSync as pi}from"node:fs";import me from"node:path";import{fileURLToPath as fi}from"node:url";var Dn=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],In=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Nn=["count-tokens","models-list","minimal-message","unsupported"];function we(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}r(we,"isPlainObject");function qe(t,e){if(typeof t!="string"||t.length===0)throw new Error(`provider-capabilities.json: ${e} must be a non-empty string`);return t}r(qe,"requireString");function Ln(t,e){if(t!==void 0)return qe(t,e)}r(Ln,"optionalString");function ne(t,e){if(t!==void 0){if(typeof t!="number"||!Number.isFinite(t)||t<0)throw new Error(`provider-capabilities.json: ${e} must be a non-negative finite number`);return t}}r(ne,"optionalNumber");function Ye(t,e){if(t!==void 0){if(typeof t!="boolean")throw new Error(`provider-capabilities.json: ${e} must be a boolean`);return t}}r(Ye,"optionalBoolean");function Lt(t,e){if(typeof t!="string"||!Dn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${Dn.join(", ")}, got ${JSON.stringify(t)}`);return t}r(Lt,"requireReasoningCapability");function si(t,e){if(typeof t!="string"||!In.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${In.join(", ")}, got ${JSON.stringify(t)}`);return t}r(si,"requireProfileName");function ai(t,e){if(typeof t!="string"||!Nn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${Nn.join(", ")}, got ${JSON.stringify(t)}`);return t}r(ai,"requireVerifyStrategy");function ci(t,e){if(!we(t))throw new Error(`provider-capabilities.json: ${e} must be an object`);let n=qe(t.id,`${e}.id`),o=Ln(t.displayName,`${e}.displayName`),i=ne(t.contextWindow,`${e}.contextWindow`),s=ne(t.maxOutputTokens,`${e}.maxOutputTokens`),a=ne(t.thinkingBudgetCap,`${e}.thinkingBudgetCap`),c=Ye(t.replayReasoningContent,`${e}.replayReasoningContent`),d=Ye(t.strictThinkingSignature,`${e}.strictThinkingSignature`),l=ne(t.streamMaxDurationMs,`${e}.streamMaxDurationMs`),u=t.reasoningCapability===void 0?void 0:Lt(t.reasoningCapability,`${e}.reasoningCapability`),f={id:n};return o!==void 0&&(f.displayName=o),i!==void 0&&(f.contextWindow=i),s!==void 0&&(f.maxOutputTokens=s),a!==void 0&&(f.thinkingBudgetCap=a),u!==void 0&&(f.reasoningCapability=u),c!==void 0&&(f.replayReasoningContent=c),d!==void 0&&(f.strictThinkingSignature=d),l!==void 0&&(f.streamMaxDurationMs=l),f}r(ci,"validateModelDescriptor");function li(t,e){if(t===void 0)return;if(!we(t))throw new Error(`provider-capabilities.json: ${e} must be an object`);let n={};for(let[o,i]of Object.entries(t))n[o]=Lt(i,`${e}.${o}`);return n}r(li,"validateModelReasoningCapabilities");function ui(t,e){if(!we(t))throw new Error(`provider-capabilities.json: providers.${e} must be an object`);let n=Ye(t.cliBridge,`providers.${e}.cliBridge`),o=qe(t.apiKeyEnv,`providers.${e}.apiKeyEnv`),i=Lt(t.reasoningCapability,`providers.${e}.reasoningCapability`),s=si(t.capabilityProfile,`providers.${e}.capabilityProfile`),a=ai(t.verifyStrategy,`providers.${e}.verifyStrategy`);if(n&&a!=="unsupported")throw new Error(`provider-capabilities.json: providers.${e} is a cliBridge entry but verifyStrategy="${a}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let c=ne(t.contextWindow,`providers.${e}.contextWindow`),d=ne(t.maxOutputTokens,`providers.${e}.maxOutputTokens`),l=ne(t.thinkingBudgetCap,`providers.${e}.thinkingBudgetCap`),u=Ye(t.supportsThinking,`providers.${e}.supportsThinking`),f=li(t.modelReasoningCapabilities,`providers.${e}.modelReasoningCapabilities`),y=Ln(t.model,`providers.${e}.model`);if(n&&(y!==void 0||t.models!==void 0))throw new Error(`provider-capabilities.json: providers.${e} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&y===void 0)throw new Error(`provider-capabilities.json: providers.${e}.model is required (only cliBridge entries may omit)`);let g;if(t.models!==void 0){if(!Array.isArray(t.models))throw new Error(`provider-capabilities.json: providers.${e}.models must be an array`);g=t.models.map((p,v)=>ci(p,`providers.${e}.models[${v}]`))}let b={apiKeyEnv:o,reasoningCapability:i,capabilityProfile:s,verifyStrategy:a};return y!==void 0&&(b.model=y),g!==void 0&&(b.models=g),c!==void 0&&(b.contextWindow=c),d!==void 0&&(b.maxOutputTokens=d),l!==void 0&&(b.thinkingBudgetCap=l),u!==void 0&&(b.supportsThinking=u),f!==void 0&&(b.modelReasoningCapabilities=f),n&&(b.cliBridge=!0),b}r(ui,"validateProviderEntry");function Bn(t){if(!we(t))throw new Error("provider-capabilities.json: root must be an object");if(t.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(t.version)}`);let e=qe(t.updatedAt,"updatedAt");if(!we(t.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,i]of Object.entries(t.providers))n[o]=ui(i,o);return{version:1,updatedAt:e,providers:n}}r(Bn,"validateProviderCapabilitiesJson");var mi=Object.freeze({native:te,"image-input-native":gn,"cli-bridge":be,"image-input-cli-bridge":hn}),Qe=null;function gi(){if(process.env.KODAX_BUNDLED==="true")return me.join(me.dirname(process.execPath),"provider-capabilities.json");let t=me.dirname(fi(import.meta.url)),e=[me.join(t,"provider-capabilities.json"),me.join(me.dirname(t),"provider-capabilities.json")];for(let n of e)if(di(n))return n;return e[0]}r(gi,"resolveJsonPath");function hi(t){if(t.models){for(let e of t.models)Object.freeze(e);Object.freeze(t.models)}return t.modelReasoningCapabilities&&Object.freeze(t.modelReasoningCapabilities),Object.freeze(t)}r(hi,"deepFreezeSnapshot");function yi(t){if(t==="gemini-cli"){let e=fe();return{model:e,models:Ee().filter(n=>n!==e).map(n=>({id:n}))}}if(t==="codex-cli"){let e=pe();return{model:e,models:Te().filter(n=>n!==e).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${t}'`)}r(yi,"resolveCliBridgeModels");function vi(t,e){let n=mi[e.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${e.capabilityProfile}' for provider '${t}'`);if(e.cliBridge){let i=yi(t),s={model:i.model,models:i.models,apiKeyEnv:e.apiKeyEnv,reasoningCapability:e.reasoningCapability,capabilityProfile:n,verifyStrategy:e.verifyStrategy};return e.supportsThinking!==void 0&&(s.supportsThinking=e.supportsThinking),s}let o={model:e.model,apiKeyEnv:e.apiKeyEnv,reasoningCapability:e.reasoningCapability,capabilityProfile:n,verifyStrategy:e.verifyStrategy};return e.models!==void 0&&(o.models=e.models),e.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=e.modelReasoningCapabilities),e.contextWindow!==void 0&&(o.contextWindow=e.contextWindow),e.maxOutputTokens!==void 0&&(o.maxOutputTokens=e.maxOutputTokens),e.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=e.thinkingBudgetCap),e.supportsThinking!==void 0&&(o.supportsThinking=e.supportsThinking),o}r(vi,"buildSnapshot");function Fn(){if(Qe)return Qe;let t=gi(),e;try{let i=pi(t,"utf8");e=JSON.parse(i)}catch(i){let s=i instanceof Error?i.message:String(i);throw new Error(`provider-capabilities loader: failed to read ${t}: ${s}`)}let n=Bn(e),o={};for(let[i,s]of Object.entries(n.providers))o[i]=hi(vi(i,s));return Qe=Object.freeze(o),Qe}r(Fn,"getProviderSnapshots");import ki from"@anthropic-ai/sdk";var A=Fn();function U(t,e={}){let n=A[t];return{apiKeyEnv:n.apiKeyEnv,model:n.model,reasoningCapability:n.reasoningCapability,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,verifyStrategy:n.verifyStrategy,...e}}r(U,"buildProviderConfig");var Bt=class extends I{static{r(this,"AnthropicProvider")}name="anthropic";config=U("anthropic",{strictThinkingSignature:!0});buildClient(){return new ki({apiKey:this.getApiKey()})}},Ft=class extends I{static{r(this,"ZhipuCodingProvider")}name="zhipu-coding";config=U("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},Kt=class extends I{static{r(this,"KimiCodeProvider")}name="kimi-code";config=U("kimi-code",{baseUrl:"https://api.kimi.com/coding/"})},$t=class extends I{static{r(this,"MiniMaxCodingProvider")}name="minimax-coding";config=U("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"})},Ut=class extends I{static{r(this,"MimoCodingProvider")}name="mimo-coding";config=U("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"})},jt=class extends I{static{r(this,"MimoProvider")}name="mimo";config=U("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},Wt=class extends I{static{r(this,"ArkCodingProvider")}name="ark-coding";config=U("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},Xt=class extends K{static{r(this,"OpenAIProvider")}name="openai";config=U("openai")},zt=class extends K{static{r(this,"DeepSeekProvider")}name="deepseek";config=U("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0})},Vt=class extends K{static{r(this,"KimiProvider")}name="kimi";config=U("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0})},Gt=class extends K{static{r(this,"QwenProvider")}name="qwen";config=U("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},Ht=class extends K{static{r(this,"ZhipuProvider")}name="zhipu";config=U("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},$={anthropic:r(()=>new Bt,"anthropic"),openai:r(()=>new Xt,"openai"),deepseek:r(()=>new zt,"deepseek"),kimi:r(()=>new Vt,"kimi"),"kimi-code":r(()=>new Kt,"kimi-code"),qwen:r(()=>new Gt,"qwen"),zhipu:r(()=>new Ht,"zhipu"),"zhipu-coding":r(()=>new Ft,"zhipu-coding"),"minimax-coding":r(()=>new $t,"minimax-coding"),"mimo-coding":r(()=>new Ut,"mimo-coding"),mimo:r(()=>new jt,"mimo"),"ark-coding":r(()=>new Wt,"ark-coding"),"gemini-cli":r(()=>new Ge,"gemini-cli"),"codex-cli":r(()=>new Je,"codex-cli")},Jt=process.env.KODAX_PROVIDER??"zhipu-coding",Kn=new Map;function bi(t){if(O(t))return A[t].apiKeyEnv}r(bi,"resolveApiKeyEnvForProvider");function $n(t){let e=t??Jt,n=$[e];if(!n)throw new R(`Unknown provider: ${e}. Available: ${Object.keys($).join(", ")}`,e);let o=bi(e),i=o?process.env[o]:void 0,s=Kn.get(e);if(s&&s.apiKey===i)return s.instance;let a=n();return Kn.set(e,{apiKey:i,instance:a}),a}r($n,"getProvider");function Un(t){return O(t)?!!process.env[A[t].apiKeyEnv]:!1}r(Un,"isProviderConfigured");function jn(t){return O(t)?A[t].model:null}r(jn,"getProviderModel");function Wn(t,e){if(!O(t))return"unknown";let n=A[t],o=e??n.model;return n.modelReasoningCapabilities?.[o]??n.reasoningCapability}r(Wn,"getProviderConfiguredReasoningCapability");function Xn(t){return O(t)?X(A[t].capabilityProfile):null}r(Xn,"getProviderConfiguredCapabilityProfile");function zn(){let t=[];for(let e of Object.keys($)){let n=A[e];t.push({name:e,model:n.model,models:n.models?[n.model,...n.models.map(o=>o.id)]:[n.model],configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,capabilityProfile:X(n.capabilityProfile)})}return t}r(zn,"getProviderList");function Vn(t){let e=A[t];return e?e.models?[e.model,...e.models.map(n=>n.id)]:[e.model]:[]}r(Vn,"getProviderModels");function O(t){return t in $}r(O,"isProviderName");function Yt(t){return{id:t.model}}r(Yt,"makeDefaultDescriptor");function Ze(t,e,n){let o=n.id===e.model;return{provider:t,model:n.id,displayName:n.displayName??n.id,supportsThinking:e.supportsThinking??!1,reasoningCapability:n.reasoningCapability??e.reasoningCapability,contextWindow:n.contextWindow??e.contextWindow,maxOutputTokens:n.maxOutputTokens??e.maxOutputTokens,thinkingBudgetCap:n.thinkingBudgetCap??e.thinkingBudgetCap,isDefault:o}}r(Ze,"effectiveCapabilities");function et(t){let e=A[t];return e?[Yt(e),...e.models??[]]:[]}r(et,"getProviderModelDescriptors");function tt(t,e){let n=A[t];if(!n)return;if(e===n.model)return Ze(t,n,Yt(n));let o=n.models?.find(i=>i.id===e);if(o)return Ze(t,n,o)}r(tt,"getModelCapabilities");function nt(){let t=[];for(let e of Object.keys($)){let n=A[e];t.push(Ze(e,n,Yt(n)));for(let o of n.models??[])t.push(Ze(e,n,o))}return t}r(nt,"listBuiltinModelCapabilities");var _i=new Set(["compat","sdk"]),Ci=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function xi(t){return t==="anthropic"?"count-tokens":"models-list"}r(xi,"defaultVerifyStrategyForProtocol");function Me(t){if(!t.name||!t.baseUrl||!t.apiKeyEnv||!t.model)throw new Error(`Custom provider requires name, baseUrl, apiKeyEnv, and model. Got: ${JSON.stringify({name:t.name,baseUrl:t.baseUrl,apiKeyEnv:t.apiKeyEnv,model:t.model})}`);if(t.protocol!=="anthropic"&&t.protocol!=="openai")throw new Error(`Unknown protocol "${t.protocol}" for custom provider "${t.name}". Must be "anthropic" or "openai".`);if(t.userAgentMode!==void 0&&!_i.has(t.userAgentMode))throw new Error(`Unknown userAgentMode "${t.userAgentMode}" for custom provider "${t.name}". Must be "compat" or "sdk".`);if(t.verifyStrategy!==void 0){if(!Ci.has(t.verifyStrategy))throw new Error(`Unknown verifyStrategy "${t.verifyStrategy}" for custom provider "${t.name}". Must be one of "count-tokens" | "models-list" | "minimal-message" | "unsupported".`);if(t.protocol==="openai"&&t.verifyStrategy==="count-tokens")throw new Error(`Custom provider "${t.name}": verifyStrategy="count-tokens" requires Anthropic protocol; got protocol="openai". Use "models-list" or "minimal-message" for OpenAI-compat.`)}}r(Me,"validateCustomProviderConfig");function Ti(t){let e=t.models?.length?t.models.map(n=>typeof n=="string"?{id:n}:n):void 0;return{apiKeyEnv:t.apiKeyEnv,model:t.model,baseUrl:t.baseUrl,models:e,userAgentMode:t.userAgentMode,supportsThinking:t.supportsThinking??!1,reasoningCapability:t.reasoningCapability??"none",capabilityProfile:t.capabilityProfile,contextWindow:t.contextWindow,maxOutputTokens:t.maxOutputTokens,thinkingBudgetCap:t.thinkingBudgetCap,replayReasoningContent:t.replayReasoningContent??!1,strictThinkingSignature:t.strictThinkingSignature??!1,streamMaxDurationMs:t.streamMaxDurationMs,verifyStrategy:t.verifyStrategy??xi(t.protocol)}}r(Ti,"buildProviderConfig");function ot(t){Me(t);let e=Ti(t);return t.protocol==="anthropic"?new qt(t.name,e):new Qt(t.name,e)}r(ot,"createCustomProvider");var qt=class extends I{static{r(this,"DynamicAnthropicProvider")}name;config;constructor(e,n){super(),this.name=e,this.config=n}},Qt=class extends K{static{r(this,"DynamicOpenAIProvider")}name;config;constructor(e,n){super(),this.name=e,this.config=n}};var J=new Map,Zt=new Map;function Gn(t){let e=new Set,n=new Map,o=new Map;for(let i of t){if(Me(i),e.has(i.name))throw new Error(`Duplicate custom provider name: "${i.name}". Each custom provider must have a unique name.`);i.name in $&&console.warn(`[kodax] Custom provider "${i.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),e.add(i.name),n.set(i.name,i),o.set(i.name,()=>ot(i))}J.clear(),Zt.clear();for(let[i,s]of n)J.set(i,s);for(let[i,s]of o)Zt.set(i,s)}r(Gn,"registerCustomProviders");function it(t){let e=Zt.get(t);return e?e():void 0}r(it,"getCustomProvider");function he(t){return J.has(t)}r(he,"isCustomProviderName");function rt(){return[...J.keys()]}r(rt,"getCustomProviderNames");function Hn(){let t=[];for(let[e,n]of J){let o=!!process.env[n.apiKeyEnv],i=(n.models??[]).map(a=>typeof a=="string"?a:a.id),s=n.model&&i.length?[...new Set([n.model,...i])]:[n.model];t.push({name:e,model:n.model,models:s,configured:o,reasoningCapability:n.reasoningCapability??"none",capabilityProfile:X(n.capabilityProfile??te),custom:!0})}return t}r(Hn,"getCustomProviderList");function Jn(t){let e=J.get(t);if(!e)return;let n=(e.models??[]).map(o=>typeof o=="string"?o:o.id);return e.model&&n.length?[...new Set([e.model,...n])]:[e.model]}r(Jn,"getCustomProviderModels");function Yn(t){return typeof t=="string"?{id:t}:t}r(Yn,"customDescriptorToFull");function st(t){let e=J.get(t);if(!e)return;let n={id:e.model},o=(e.models??[]).map(Yn).filter(i=>i.id!==e.model);return[n,...o]}r(st,"getCustomProviderModelDescriptors");function ge(t,e){let n=J.get(t);if(!n)return;let o=e===n.model,i=o?{id:n.model}:(n.models??[]).map(Yn).find(s=>s.id===e);if(i)return{provider:t,model:i.id,displayName:i.displayName??i.id,supportsThinking:n.supportsThinking??!1,reasoningCapability:i.reasoningCapability??n.reasoningCapability??"none",contextWindow:i.contextWindow??n.contextWindow,maxOutputTokens:i.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:i.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}r(ge,"getCustomModelCapabilities");function qn(t){let e=J.get(t);if(!e)return;let n=e.verifyStrategy??(e.protocol==="anthropic"?"count-tokens":"models-list");return{apiKeyEnv:e.apiKeyEnv,verifyStrategy:n}}r(qn,"getCustomProviderVerifyMetadata");function at(){let t=[];for(let[e,n]of J){let o=ge(e,n.model);o&&t.push(o);for(let i of n.models??[]){let s=typeof i=="string"?i:i.id;if(s===n.model)continue;let a=ge(e,s);a&&t.push(a)}}return t}r(at,"listCustomProviderModelCapabilities");var Q=new Map,Ei=0;function en(t){let e=Q.get(t);if(!(!e||e.length===0))return e[e.length-1]}r(en,"getActiveRuntimeProviderRegistration");function wi(t){for(let[e,n]of Q){let o=n.filter(i=>i.id!==t);if(o.length!==n.length){o.length===0?Q.delete(e):Q.set(e,o);return}}}r(wi,"removeRuntimeProviderRegistration");function Qn(t,e){let n=t.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(O(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(he(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++Ei}`,name:n,factory:e},i=Q.get(n)??[];return Q.set(n,[...i,o]),()=>{wi(o.id)}}r(Qn,"registerModelProvider");function ct(t){let e=en(t);return e?e.factory():void 0}r(ct,"getRuntimeModelProvider");function Pe(t){return en(t)!==void 0}r(Pe,"isRuntimeModelProviderName");function lt(){return Array.from(Q.keys()).filter(t=>en(t)!==void 0)}r(lt,"getRuntimeModelProviderNames");function Zn(){Q.clear()}r(Zn,"clearRuntimeModelProviders");function tn(t){if(O(t))return $[t]();let e=ct(t);if(e)return e;let n=it(t);if(n)return n;let o=dt();throw new Error(`Unknown provider: ${t}. Available: ${o.join(", ")}`)}r(tn,"resolveProvider");function ut(t){return O(t)||Pe(t)||he(t)}r(ut,"isKnownProvider");function dt(){let t=Object.keys($),e=lt(),n=rt();return[...new Set([...t,...e,...n])]}r(dt,"getAvailableProviderNames");function nn(t){return O(t)?et(t):st(t)??[]}r(nn,"resolveProviderModelDescriptors");function eo(t,e){return O(t)?tt(t,e):ge(t,e)}r(eo,"resolveModelCapabilities");function to(){return[...nt(),...at()]}r(to,"listAllModelCapabilities");function Mi(t){if(O(t)){let e=A[t];return{apiKeyEnv:e.apiKeyEnv,verifyStrategy:e.verifyStrategy}}if(!Pe(t))return qn(t)}r(Mi,"getProviderVerifyMetadata");async function no(t,e){let n=Mi(t);if(!n&&!ut(t))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${t}". Available: ${dt().join(", ")}`};if(n?.verifyStrategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider "${t}" does not support credential verification (cli-bridge or strategy marked unsupported)`};if(n&&!process.env[n.apiKeyEnv])return{ok:!1,error:"unconfigured",strategy:n.verifyStrategy,durationMs:0,approxTokensSpent:0,message:`Environment variable "${n.apiKeyEnv}" is not set for provider "${t}"`};let o;try{o=tn(t)}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 o.verifyCredential(e)}catch(i){return{ok:!1,error:"unknown",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(i?.message??i).slice(0,240)}}}r(no,"verifyProviderCredential");async function oo(t,e){if(!ut(t))return{ok:!1,source:"failed",error:`Unknown provider: "${t}"`,durationMs:0};let n=nn(t);return n.length===0?{ok:!1,source:"failed",error:`Provider "${t}" has no static model list`,durationMs:0}:{ok:!0,source:"static",models:n.map(i=>i.id),durationMs:0}}r(oo,"listProviderModels");var io={anthropic:{"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.375},"claude-haiku-4-5":{inputPer1M:.8,outputPer1M:4,cachePer1M:.08}},openai:{"gpt-5.4":{inputPer1M:30,outputPer1M:120},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-v4-flash":{inputPer1M:.14,outputPer1M:.28,cachePer1M:.028},"deepseek-v4-pro":{inputPer1M:1.68,outputPer1M:3.36,cachePer1M:.14}},kimi:{"k2.5":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015}},"kimi-code":{"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},zhipu:{"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{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.1":{inputPer1M:.005,outputPer1M:.015},"glm-4.7":{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-v3.2":{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}},"gemini-cli":{},"codex-cli":{}};function on(t,e,n){let o=n?.[t]?.[e];return o||io[t]?.[e]}r(on,"getCostRate");function rn(t,e,n,o=0){let i=e/1e6*t.inputPer1M,s=n/1e6*t.outputPer1M,a=t.cachePer1M?o/1e6*t.cachePer1M:0;return i+s+a}r(rn,"calculateCost");function Pi(){return{records:[],retries:[]}}r(Pi,"createCostTracker");function sn(t,e){let n={timestamp:Date.now(),provider:e.provider,waitMs:e.waitMs,reason:e.reason,source:e.source};return{records:t.records,retries:[...t.retries,n]}}r(sn,"recordRetry");function an(t,e,n){let o=on(e.provider,e.model,n),i=(e.cacheReadTokens??0)+(e.cacheWriteTokens??0),s=o?rn(o,e.inputTokens,e.outputTokens,i):0,a={timestamp:Date.now(),provider:e.provider,model:e.model,inputTokens:e.inputTokens,outputTokens:e.outputTokens,cacheReadTokens:e.cacheReadTokens??0,cacheWriteTokens:e.cacheWriteTokens??0,cost:s,role:e.role};return{records:[...t.records,a],retries:t.retries}}r(an,"recordUsage");function Si(t){let e=0,n=0,o=0,i=0,s=0,a=0,c={},d={};for(let f of t.records){e+=f.cost,n+=f.inputTokens,o+=f.outputTokens,i+=f.cacheReadTokens+f.cacheWriteTokens,s+=f.cacheReadTokens,a+=f.cacheWriteTokens;let y=c[f.provider];c[f.provider]={cost:(y?.cost??0)+f.cost,calls:(y?.calls??0)+1,inputTokens:(y?.inputTokens??0)+f.inputTokens,outputTokens:(y?.outputTokens??0)+f.outputTokens};let g=f.role??"default",b=d[g];d[g]={cost:(b?.cost??0)+f.cost,calls:(b?.calls??0)+1,inputTokens:(b?.inputTokens??0)+f.inputTokens,outputTokens:(b?.outputTokens??0)+f.outputTokens}}let l=0;for(let f of t.retries)l+=f.waitMs;let u=i>0?s/i:0;return{totalCost:e,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:i,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:u,callCount:t.records.length,retryCount:t.retries.length,retryWaitMs:l,byProvider:c,byRole:d}}r(Si,"getSummary");function pt(t){return t<.01?`$${t.toFixed(4)}`:t<1?`$${t.toFixed(3)}`:`$${t.toFixed(2)}`}r(pt,"formatCost");function Ri(t){let e=[];if(e.push(`Session Cost: ${pt(t.totalCost)} (${t.callCount} calls)`),e.push(`Tokens: ${t.totalInputTokens.toLocaleString()} in / ${t.totalOutputTokens.toLocaleString()} out`),t.totalCacheTokens>0){let i=(t.cacheHitRate*100).toFixed(0);e.push(`Cache: ${t.totalCacheTokens.toLocaleString()} tokens (${t.totalCacheReadTokens.toLocaleString()} read / ${t.totalCacheWriteTokens.toLocaleString()} write, ${i}% hit rate)`)}if(t.retryCount>0){let i=(t.retryWaitMs/1e3).toFixed(1);e.push(`Retries: ${t.retryCount} (${i}s total wait)`)}e.push("");let n=Object.entries(t.byProvider).sort((i,s)=>s[1].cost-i[1].cost);if(n.length>0){e.push("By Provider:");for(let[i,s]of n)e.push(` ${i}: ${pt(s.cost)} (${s.calls} calls, ${s.inputTokens.toLocaleString()} in / ${s.outputTokens.toLocaleString()} out)`);e.push("")}let o=Object.entries(t.byRole).sort((i,s)=>s[1].cost-i[1].cost);if(o.length>1){e.push("By Role:");for(let[i,s]of o)e.push(` ${i}: ${pt(s.cost)} (${s.calls} calls)`)}return e.join(`
|
|
31
|
+
`)}r(Ri,"formatCostReport");var ro={inputTokens:0,outputTokens:0,totalTokens:0},Ai=3e4;async function Oi(t){let e=new AbortController,n=t.timeoutMs??Ai,o=t.costTracker,i,s=r(d=>{i||(i=d),e.abort()},"recordAbort"),a=setTimeout(()=>s("timeout"),n),c=r(()=>s("parent"),"onParentAbort");t.abortSignal&&(t.abortSignal.aborted?s("parent"):t.abortSignal.addEventListener("abort",c,{once:!0}));try{let d=await t.provider.stream([...t.messages],[],t.system,t.reasoning??{mode:"off"},{modelOverride:t.model,onRetryAfter:r(g=>{o&&(o=sn(o,{provider:g.provider,waitMs:g.waitMs,reason:g.reason,source:g.source}))},"onRetryAfter")},e.signal),l=d.usage??ro,u=d.textBlocks??[],f=d.toolBlocks??[],y=u.map(g=>g.text).join("");return f.length>0?{text:y,usage:l,costTracker:o,stopReason:"error",error:new Error(`sideQuery: provider returned ${f.length} tool_use block(s); sideQuery expects text-only output`)}:(o&&(o=an(o,{provider:t.provider.name,model:t.model,inputTokens:l.inputTokens,outputTokens:l.outputTokens,cacheReadTokens:l.cachedReadTokens,cacheWriteTokens:l.cachedWriteTokens,role:t.querySource})),{text:y,usage:l,costTracker:o,stopReason:Di(d.stopReason)})}catch(d){let l=d instanceof Error?d:new Error(String(d)),u="error";return e.signal.aborted&&(u=i==="timeout"?"timeout":"aborted"),{text:"",usage:ro,costTracker:o,stopReason:u,error:l}}finally{clearTimeout(a),t.abortSignal&&t.abortSignal.removeEventListener("abort",c)}}r(Oi,"sideQuery");function Di(t){return t==="max_tokens"?"max_tokens":"end_turn"}r(Di,"mapStopReason");export{Y as a,R as b,ke as c,ft as d,mt as e,gt as f,so as g,ao as h,co as i,lo as j,cn as k,ln as l,ht as m,oe as n,Re as o,un as p,ie as q,re as r,yt as s,_t as t,Ct as u,se as v,Oe as w,Tt as x,ho as y,De as z,Ie as A,Ne as B,G as C,ae as D,ce as E,wt as F,Mt as G,le as H,Pt as I,_e as J,I as K,K as L,pe as M,fe as N,Te as O,Ee as P,A as Q,$ as R,Jt as S,$n as T,Un as U,jn as V,Wn as W,Xn as X,zn as Y,Vn as Z,O as _,et as $,tt as aa,nt as ba,Me as ca,ot as da,Gn as ea,it as fa,he as ga,rt as ha,Hn as ia,Jn as ja,st as ka,ge as la,at as ma,Qn as na,ct as oa,Pe as pa,lt as qa,Zn as ra,tn as sa,ut as ta,dt as ua,nn as va,eo as wa,to as xa,no as ya,oo as za,io as Aa,on as Ba,rn as Ca,Pi as Da,sn as Ea,an as Fa,Si as Ga,pt as Ha,Ri as Ia,Oi as Ja};
|