@kodax-ai/kodax 0.7.52 → 0.7.54
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 +1855 -1814
- package/README.md +6 -0
- package/README_CN.md +4 -0
- package/dist/chunks/{agent-XXTR7T37.js → agent-5FZH3VUN.js} +1 -1
- package/dist/chunks/argument-completer-VURFBB37.js +2 -0
- package/dist/chunks/{chunk-LE6STNVN.js → chunk-7C2QUBLE.js} +1 -1
- package/dist/chunks/chunk-AMFPS2WC.js +584 -0
- package/dist/chunks/chunk-EM4GOL3S.js +551 -0
- package/dist/chunks/chunk-FV6KHPWT.js +425 -0
- package/dist/chunks/chunk-JEQ62ZMK.js +651 -0
- package/dist/chunks/chunk-KSBSEPV5.js +314 -0
- package/dist/chunks/{chunk-BFXFSEHK.js → chunk-QQX333VC.js} +1 -1
- package/dist/chunks/{chunk-JJTUBNQX.js → chunk-UHNSW2SR.js} +1 -1
- package/dist/chunks/{compaction-config-UBPCNGC2.js → compaction-config-HY46N24Q.js} +1 -1
- package/dist/chunks/{construction-bootstrap-BXRMA3KL.js → construction-bootstrap-AVTILHEH.js} +1 -1
- package/dist/chunks/{dist-Z6U7TWKJ.js → dist-BNKIZRCP.js} +1 -1
- package/dist/chunks/dist-EV5MWJQ6.js +2 -0
- package/dist/chunks/{utils-6WZHBMCC.js → utils-ZUC3AIL5.js} +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.js +6 -6
- package/dist/kodax_cli.js +1137 -1001
- package/dist/provider-capabilities.json +3 -3
- package/dist/sdk-agent.d.ts +395 -3
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +47 -27
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-repl.d.ts +43 -8
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-session.d.ts +3 -3
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.d.ts +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-DBFZEwop.d.ts → bash-prefix-extractor.d-CBLoD2Jk.d.ts} +96 -14
- package/dist/types-chunks/{sdk-session-D4tqRl0_.d.ts → sdk-session-DrPxcDuO.d.ts} +2 -2
- package/dist/types-chunks/{storage.d-CabW10Nt.d.ts → storage.d-DoA3NvdD.d.ts} +1 -1
- package/dist/types-chunks/{utils.d-23Gn14zP.d.ts → utils.d-DSqmMq7l.d.ts} +26 -18
- package/package.json +1 -1
- package/dist/chunks/argument-completer-VMH6VZ4X.js +0 -2
- package/dist/chunks/chunk-4RVSFOUT.js +0 -420
- package/dist/chunks/chunk-5USNUSTL.js +0 -648
- package/dist/chunks/chunk-7X7SOVER.js +0 -492
- package/dist/chunks/chunk-HMATTIU6.js +0 -574
- package/dist/chunks/chunk-MFPYZT52.js +0 -301
- package/dist/chunks/dist-IHH4BYIU.js +0 -2
package/README.md
CHANGED
|
@@ -712,6 +712,11 @@ export KODAX_VERIFIER_MODEL=claude-haiku-4-5-20251001
|
|
|
712
712
|
- `KODAX_VERIFIER_PROVIDER` + `KODAX_VERIFIER_MODEL` route the verifier to a separate provider/model instead of inheriting the main Worker model. Set both together.
|
|
713
713
|
- `KODAX_VERIFIER_ALWAYS=1` forces the verifier to fire on every text-only completion for debugging/regression sweeps.
|
|
714
714
|
|
|
715
|
+
SDK/headless hosts can observe actionable Sidecar Verifier messages via
|
|
716
|
+
`KodaXEvents.onSidecarMessage`; JSONL output emits the same payload as
|
|
717
|
+
`sidecar.message`. Only `revise` and `blocked` verdicts are surfaced; `accept`
|
|
718
|
+
stays silent.
|
|
719
|
+
|
|
715
720
|
## Advanced Library Usage
|
|
716
721
|
|
|
717
722
|
#### Simple Mode (runKodaX)
|
|
@@ -723,6 +728,7 @@ const events: KodaXEvents = {
|
|
|
723
728
|
onTextDelta: (text) => process.stdout.write(text),
|
|
724
729
|
onThinkingDelta: (text) => console.log(`Thinking delta: ${text.length} chars`),
|
|
725
730
|
onToolResult: (result) => console.log(`Tool ${result.name}: ${result.content.slice(0, 100)}`),
|
|
731
|
+
onSidecarMessage: (event) => console.log(`[sidecar:${event.verdict}] ${event.content}`),
|
|
726
732
|
onComplete: () => console.log('\nDone!'),
|
|
727
733
|
onError: (e) => console.error(e.message),
|
|
728
734
|
};
|
package/README_CN.md
CHANGED
|
@@ -284,6 +284,10 @@ export KODAX_VERIFIER_MODEL=claude-haiku-4-5-20251001
|
|
|
284
284
|
|
|
285
285
|
`KODAX_VERIFIER_LOG=1` 等价于在 `~/.kodax/config.json` 写 `"verifierLog": true`,会显示 verifier gate、elapsedMs 和 trace;`KODAX_VERIFIER_PROVIDER` / `KODAX_VERIFIER_MODEL` 需要成对设置,用独立模型执行 verifier;`KODAX_VERIFIER_ALWAYS=1` 仅建议调试和回归测试时使用。
|
|
286
286
|
|
|
287
|
+
SDK / headless 宿主可以通过 `KodaXEvents.onSidecarMessage` 观察 Sidecar
|
|
288
|
+
Verifier 的 `revise` / `blocked` 可执行消息;JSONL 输出使用同形
|
|
289
|
+
`sidecar.message` 事件。`accept` 仍保持静默。
|
|
290
|
+
|
|
287
291
|
#### 给自定义 provider 开图片 / vision 输入(FEATURE_134 v0.7.40)
|
|
288
292
|
|
|
289
293
|
如果你的自定义 provider 后面的模型支持 vision,加 `capabilityProfile.multimodalSupport: "image-input"` 显式开启,KodaX 的 SA-path policy gate 就不会人为拦截多模态请求。内置 vision-capable alias(Anthropic、OpenAI、DeepSeek、Kimi、Qwen、Zhipu、MiniMax、MiMo、Ark,以及通过 CLI `@<path>` file-include 语法传图的 Gemini-CLI)已经默认开了这个 flag。Codex-CLI 和自定义 provider 在底层模型支持图片输入时需要手动 opt-in。
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{
|
|
2
|
+
import{Pb as c,Qb as d,Rb as e,Sb as f,jc as g,kc as h,od as i,td as j}from"./chunk-JEQ62ZMK.js";import"./chunk-7C2QUBLE.js";import{jb as a,kb as b}from"./chunk-AMFPS2WC.js";import"./chunk-V4WSBIXB.js";export{d as bucketProviderPayloadSize,g as buildAutoRepoIntelligenceContext,e as checkPromiseSignal,b as cleanupIncompleteToolCalls,h as describeTransientProviderRetry,f as emitResilienceDebug,c as estimateProviderPayloadBytes,j as runKodaX,i as saveSessionSnapshot,a as validateAndFixToolHistory};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
+
import{wa as a,xa as b}from"./chunk-EM4GOL3S.js";import"./chunk-QQX333VC.js";import"./chunk-UHNSW2SR.js";import"./chunk-FV6KHPWT.js";import"./chunk-JEQ62ZMK.js";import"./chunk-7C2QUBLE.js";import"./chunk-AMFPS2WC.js";import"./chunk-V4WSBIXB.js";export{a as ArgumentCompleter,b as createArgumentCompleter};
|
|
@@ -27,5 +27,5 @@ ${d.join(`
|
|
|
27
27
|
[Fatal Error: ${m}]
|
|
28
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
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(`
|
|
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.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.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
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};
|