@kodax-ai/kodax 0.7.45 → 0.7.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +57 -1
  2. package/README.md +1 -1
  3. package/README_CN.md +1 -1
  4. package/dist/builtin/skill-creator/scripts/utils.js +12 -27
  5. package/dist/chunks/{chunk-FKB7BWQT.js → chunk-2SMCCP44.js} +1 -1
  6. package/dist/chunks/chunk-66B6ZOU7.js +31 -0
  7. package/dist/chunks/chunk-ARUWXX25.js +2 -0
  8. package/dist/chunks/chunk-KRHAO2T3.js +567 -0
  9. package/dist/chunks/chunk-QZFZIGPF.js +2 -0
  10. package/dist/chunks/{chunk-X6EHEQWP.js → chunk-VGRG2F6H.js} +301 -263
  11. package/dist/chunks/chunk-VX6HN3JP.js +415 -0
  12. package/dist/chunks/{compaction-config-WCNGYWT3.js → compaction-config-YU7SI6L6.js} +1 -1
  13. package/dist/chunks/{construction-bootstrap-OB5SDNBD.js → construction-bootstrap-6UN3OY7X.js} +1 -1
  14. package/dist/chunks/devtools-4CRULTR2.js +2 -0
  15. package/dist/chunks/devtools-YINBSZC7.js +2 -0
  16. package/dist/chunks/dist-DS2KIZQG.js +2 -0
  17. package/dist/chunks/dist-IDNOAB4M.js +2 -0
  18. package/dist/chunks/{utils-CHXCBR3Q.js → utils-3ISOUEFC.js} +1 -1
  19. package/dist/index.d.ts +15 -12
  20. package/dist/index.js +5 -5
  21. package/dist/kodax_cli.js +986 -926
  22. package/dist/provider-capabilities.json +32 -23
  23. package/dist/sdk-agent.d.ts +42 -11
  24. package/dist/sdk-agent.js +1 -1
  25. package/dist/sdk-coding.d.ts +74 -14
  26. package/dist/sdk-coding.js +1 -1
  27. package/dist/sdk-llm.d.ts +84 -7
  28. package/dist/sdk-llm.js +1 -1
  29. package/dist/sdk-mcp.d.ts +1 -1
  30. package/dist/sdk-mcp.js +1 -1
  31. package/dist/sdk-repl.d.ts +19 -9
  32. package/dist/sdk-repl.js +2 -2
  33. package/dist/sdk-session.d.ts +27 -6
  34. package/dist/sdk-session.js +1 -1
  35. package/dist/sdk-skills.js +1 -1
  36. package/dist/types-chunks/{base.d-FUJahC0i.d.ts → base.d-BdJKSPO2.d.ts} +18 -1
  37. package/dist/types-chunks/{bash-prefix-extractor.d-HrTUwtV7.d.ts → bash-prefix-extractor.d-D6hL0Cuv.d.ts} +284 -6
  38. package/dist/types-chunks/{file-tracker.d-DOfaoCbJ.d.ts → file-tracker.d-BNTIvsdb.d.ts} +11 -4
  39. package/dist/types-chunks/{manager.d-87belpiS.d.ts → manager.d-U3UEwY1P.d.ts} +15 -0
  40. package/dist/types-chunks/{resolver.d-OMwxURit.d.ts → resolver.d-DkgJlEzr.d.ts} +79 -3
  41. package/dist/types-chunks/{storage.d-BvTdjYQF.d.ts → storage.d-B1Jk6ryM.d.ts} +79 -4
  42. package/dist/types-chunks/{types.d-HBbWT-iA.d.ts → types.d-B_MIIApc.d.ts} +1 -1
  43. package/dist/types-chunks/{types.d-B1uGoVTE.d.ts → types.d-Cf-GCzac.d.ts} +82 -1
  44. package/dist/types-chunks/{types.d-DM8zEJgF.d.ts → types.d-D2RNa5Y7.d.ts} +2 -2
  45. package/dist/types-chunks/{utils.d-DSEX6Rq1.d.ts → utils.d-umRKgMAu.d.ts} +19 -5
  46. package/package.json +2 -1
  47. package/dist/chunks/chunk-CZHIUJQS.js +0 -535
  48. package/dist/chunks/chunk-FT2XFFNP.js +0 -2
  49. package/dist/chunks/chunk-IJUB7QXG.js +0 -425
  50. package/dist/chunks/chunk-PGF5EZ7C.js +0 -31
  51. package/dist/chunks/devtools-EYGFOXEU.js +0 -2
  52. package/dist/chunks/dist-C2VOGY5Z.js +0 -2
  53. package/dist/chunks/dist-Q2PQM7U7.js +0 -2
@@ -1,31 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as i}from"./chunk-V4WSBIXB.js";var G=class extends Error{static{i(this,"KodaXError")}code;constructor(e,n="KODAX_ERROR"){super(e),this.code=n,this.name="KodaXError"}},w=class extends G{static{i(this,"KodaXProviderError")}provider;constructor(e,n){super(e,"PROVIDER_ERROR"),this.provider=n,this.name="KodaXProviderError"}},me=class extends G{static{i(this,"KodaXRateLimitError")}retryAfter;constructor(e,n){super(e,"RATE_LIMIT_ERROR"),this.retryAfter=n,this.name="KodaXRateLimitError"}},Ze=class extends G{static{i(this,"KodaXNetworkError")}isTimeout;constructor(e,n=!1){super(e,"NETWORK_ERROR"),this.isTimeout=n,this.name="KodaXNetworkError"}},et=class extends G{static{i(this,"KodaXToolCallIdError")}constructor(e){super(e,"TOOL_CALL_ID_ERROR"),this.name="KodaXToolCallIdError"}};var tt=32768,Sn=32e3,On=64e3,Dn=.5;var In=["off","auto","quick","balanced","deep"],jt={low:6e3,medium:1e4,high:2e4},Xt=4096;function nt(t){return t.reasoningCapability?t.reasoningCapability:t.supportsThinking?"native-toggle":"prompt-only"}i(nt,"getReasoningCapability");function Q(t){return xe(t).enabled}i(Q,"isReasoningEnabled");function xe(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??Wt(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"}}i(xe,"normalizeReasoningRequest");function Wt(t){switch(t){case"quick":return"low";case"balanced":case"auto":return"medium";case"deep":return"high";default:return"off"}}i(Wt,"getDefaultThinkingDepthForMode");function Z(t,e,n="unknown"){if(e==="off")return 0;let o={...jt,...t.defaultThinkingBudgets??{}},s=t.taskBudgetOverrides?.[n]?.[e]??o[e];return t.thinkingBudgetCap?Math.min(s,t.thinkingBudgetCap):s}i(Z,"resolveThinkingBudget");function ee(t,e,n=Xt){let o=Math.max(1024,e-n);return Math.max(1024,Math.min(t,o))}i(ee,"clampThinkingBudget");function ot(t){switch(t){case"low":return"low";case"medium":return"medium";case"high":return"high";default:return}}i(ot,"mapDepthToOpenAIReasoningEffort");import Ce from"fs";import Bn from"os";import st from"path";var it=null;function Ln(t){return t==="budget"||t==="effort"||t==="toggle"||t==="none"}i(Ln,"isReasoningOverride");function Kn(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(Ln)}i(Kn,"isStoredConfig");function Nn(){return process.env.KODAX_HOME??st.join(Bn.homedir(),".kodax")}i(Nn,"getKodaxDir");function zt(){return process.env.KODAX_CONFIG_FILE??st.join(Nn(),"config.json")}i(zt,"getConfigFilePath");function rt(t,e){return it={filePath:t,config:e},e}i(rt,"updateStoredConfigCache");function Fn(t){let e=JSON.parse(Ce.readFileSync(t,"utf-8"));return Kn(e)?e:{}}i(Fn,"readStoredConfigFromDisk");function at(t){switch(t){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"none":return"none";default:return}}i(at,"reasoningCapabilityToOverride");function ct(t){switch(t){case"budget":return"native-budget";case"effort":return"native-effort";case"toggle":return"native-toggle";default:return"none"}}i(ct,"reasoningOverrideToCapability");function te(t,e,n){return[t,e.baseUrl??"",n??e.model].join("|")}i(te,"buildReasoningOverrideKey");function lt(){let t=zt();if(it?.filePath===t)return it.config;try{if(Ce.existsSync(t))return rt(t,Fn(t))}catch{}return rt(t,{})}i(lt,"loadStoredConfig");function Gt(t){let e=zt();try{Ce.mkdirSync(st.dirname(e),{recursive:!0}),Ce.writeFileSync(e,JSON.stringify(t,null,2)),rt(e,t)}catch(n){process.env.KODAX_DEBUG_OVERRIDES&&console.error("[ReasoningOverride] Failed to save config:",n)}}i(Gt,"saveStoredConfig");function Te(t,e,n){let o=lt(),r=te(t,e,n);return o.providerReasoningOverrides?.[r]}i(Te,"loadReasoningOverride");function ut(t,e,n,o){let r=lt(),s=te(t,e,o);r.providerReasoningOverrides={...r.providerReasoningOverrides??{},[s]:n},Gt(r)}i(ut,"saveReasoningOverride");function $n(t,e,n){let o=lt(),r=te(t,e,n);if(!o.providerReasoningOverrides?.[r])return;let s={...o.providerReasoningOverrides};delete s[r],o.providerReasoningOverrides=Object.keys(s).length>0?s:void 0,Gt(o)}i($n,"clearReasoningOverride");function Vt(t,e){if(!t)return;if(typeof t.get=="function")return t.get(e)??void 0;let n=t,o=e.toLowerCase(),r=n[e]??n[o]??n[o.replace(/\b\w/g,s=>s.toUpperCase())];if(r!==void 0)return Array.isArray(r)?r[0]:r}i(Vt,"readHeader");function Ht(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}i(Ht,"parsePositiveNumber");function Un(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 r=o-e;return r>0?r:void 0}i(Un,"parseHttpDate");function Me(t,e){let n=e.baseBackoffMs??1e3,o=e.maxBackoffMs??3e4,r=e.maxHeaderWaitMs??12e4,s=e.now?e.now():Date.now(),a=Ht(Vt(t,"retry-after-ms"));if(a!==void 0){let y=Math.min(a,r);return{type:"header",waitMs:Math.round(y),source:"retry-after-ms",cappedFromHeader:y!==a}}let c=Vt(t,"retry-after");if(c!==void 0&&c.trim().length>0){let y=Ht(c);if(y!==void 0){let v=y*1e3,f=Math.min(v,r);return{type:"header",waitMs:Math.round(f),source:"retry-after-seconds",cappedFromHeader:f!==v}}let g=Un(c,s);if(g!==void 0){let v=Math.min(g,r);return{type:"header",waitMs:Math.round(v),source:"retry-after-date",cappedFromHeader:v!==g}}}let d=n*Math.pow(2,Math.max(0,e.attempt)),p=Math.min(d,o),u=e.withJitter!==!1?Math.random()*.25*p:0;return{type:"backoff",waitMs:Math.round(p+u),source:"exponential-backoff",attempt:e.attempt}}i(Me,"parseRetryAfter");function Pe(t){if(!t||typeof t!="object")return;let e=t;return e.headers??e.response?.headers??e.cause?.headers??e.cause?.response?.headers}i(Pe,"extractHeadersFromError");var Y={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Jt={...Y,multimodalSupport:"image-input"},ge={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Yt={...ge,multimodalSupport:"image-input"};function Ee(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"}}i(Ee,"normalizeCapabilityProfile");function U(t){return{...Ee(t)}}i(U,"cloneCapabilityProfile");function jn(t){if(!t)return;let e=parseInt(t,10);return Number.isFinite(e)&&e>0?e:void 0}i(jn,"parseEnvInt");var z=class{static{i(this,"KodaXBaseProvider")}maxOutputTokensOverride;setMaxOutputTokensOverride(e){this.maxOutputTokensOverride=e}getEffectiveMaxOutputTokens(e){if(this.maxOutputTokensOverride!==void 0)return this.maxOutputTokensOverride;let n=jn(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,r,s,a){throw new w(`${this.name} does not support non-streaming fallback`)}isConfigured(){return!!process.env[this.config.apiKeyEnv]}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){return!e||e===this.config.model?{id:this.config.model}:this.config.models?.find(n=>n.id===e)}getBaseUrl(){return this.config.baseUrl}getApiKeyEnv(){return this.config.apiKeyEnv}getCapabilityProfile(){return U(this.config.capabilityProfile??Y)}getConfiguredReasoningCapability(e){let n=this.getModelDescriptor(e);return n?.reasoningCapability?n.reasoningCapability:nt(this.config)}getReasoningCapability(e){let n=Te(this.name,this.config,e);return n?ct(n):this.getConfiguredReasoningCapability(e)}getReasoningOverride(e){return Te(this.name,this.config,e)}getReasoningOverrideKey(e){return te(this.name,this.config,e)}persistReasoningCapabilityOverride(e,n){let o=at(e);o&&ut(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}getReasoningFallbackChain(e){switch(e){case"native-budget":return["native-budget","native-toggle","none"];case"native-effort":return["native-effort","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 xe(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=Pe(e);if(!n)return;let o=Me(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 r of o){let s=n.match(r);if(s){let a=Number(s[1].replace(/,/g,"")),c=Number(s[2].replace(/,/g,"")),d=Math.min(a,c),p=Math.max(a,c);return Math.max(3e3,p-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,r,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,r?.(a+1,o,0);continue}}if(this.isRateLimitError(c)){if(a===o-1)throw new me(`API rate limit exceeded after ${o} retries. Please wait and try again later.`,6e4);let d=Pe(c)??{},p=Me(d,{attempt:a,baseBackoffMs:500,maxBackoffMs:32e3,withJitter:!0}),l=p.waitMs,u=this.classifyRateLimitReason(c);if(s?.({provider:this.name,waitMs:l,reason:u,source:p.source,attempt:a+1,maxAttempts:o}),r?r(a+1,o,l):s||console.log(`[Rate Limit] Retrying in ${l/1e3}s (${a+1}/${o})...`),n?.aborted)throw new DOMException("Request aborted","AbortError");if(await new Promise(y=>setTimeout(y,l)),n?.aborted)throw new DOMException("Request aborted","AbortError");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 w(`${this.name} API error: ${c.message}`,this.name)}throw c}throw new G("Unexpected end of withRateLimit")}};import Vn from"@anthropic-ai/sdk";import{parse as Xn}from"partial-json";function ne(t){if(!t)return{};try{let e=JSON.parse(t);return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}catch{}try{let e=Xn(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{}}}i(ne,"parseToolInputWithSalvage");function dt(t,e){let n=t[t.length-1];if(n&&oe(n)&&n.hint===e)return t;let o=e?{type:"cache-boundary",hint:e}:{type:"cache-boundary"};return[...t,o]}i(dt,"insertCacheBoundary");function oe(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")}i(oe,"isCacheBoundary");function pt(t,e){let n=[];for(let o of t){if(oe(o)){if(e==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}i(pt,"lowerCacheBoundaries");function he(t){return t.filter(e=>!oe(e))}i(he,"stripCacheBoundaries");import{readFile as Wn}from"node:fs/promises";import zn from"node:path";var Gn={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"};function Re(t,e){return e??Gn[zn.extname(t).toLowerCase()]??"image/png"}i(Re,"resolveImageMediaType");async function we(t){return(await Wn(t)).toString("base64")}i(we,"readImageFileAsBase64");async function qt(t,e){let n=Re(t,e),o=await we(t);return`data:${n};base64,${o}`}i(qt,"buildImageDataUrl");var Hn="KodaX";function Jn(t){return t.userAgentMode==="sdk"?void 0:{"User-Agent":Hn}}i(Jn,"getAnthropicCompatDefaultHeaders");function ft(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,r=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+r+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:r||void 0}}i(ft,"normalizeAnthropicUsage");var O=class extends z{static{i(this,"KodaXAnthropicCompatProvider")}supportsThinking=!0;client;initClient(){let e=Jn(this.config);this.client=new Vn({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...e?{defaultHeaders:e}:{}})}onStaleConnection(){this.initClient()}applyCacheControlToSystem(e){if(!e.trim()||process.env.KODAX_DISABLE_PROMPT_CACHE==="1")return e;let n=dt([{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,r,s,a){return this.withRateLimit(async()=>{let c=this.normalizeReasoning(r),d=s?.modelOverride??this.config.model,p=this.getEffectiveMaxOutputTokens(d),l=await this.convertMessages(e,d),u=c.enabled?this.getReasoningCapability(d):"none",y=c.enabled?this.getReasoningFallbackChain(u).filter(C=>C==="native-budget"||C==="native-toggle"||C==="none"):["none"],g=i(C=>{let E={model:d,max_tokens:p,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,e)),messages:l,tools:this.applyCacheControlToTools(n),stream:!0};if(C==="native-budget"){let S=Z(this.config,c.depth,c.taskType);E.thinking={type:"enabled",budget_tokens:ee(S,p)}}else C==="native-toggle"&&(E.thinking={type:"enabled"});return E},"buildRequest");if(a?.aborted)throw new DOMException("Request aborted","AbortError");let v=[],f=[],_=[],k,x=null,m="",h="",M="",R="",j="",I="",X="",P=!1,W,A=Date.now(),_e=Date.now(),de,pe;for(let C of y)try{de=await this.client.messages.create(g(C),a?{signal:a}:{}),C!==u&&this.persistReasoningCapabilityOverride(C,d);break}catch(E){pe=E;let S=C==="native-budget"?["budget_tokens","thinking"]:C==="native-toggle"?["thinking"]:[];if(!this.shouldFallbackForReasoningError(E,...S))throw E}if(!de)throw pe??new w("All reasoning capability attempts failed without a captured error",this.name);let fe=Date.now(),T=0,B=0,L=3e4;for await(let C of de){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let E=Date.now(),S=E-fe;if(S>L&&(T++,B+=S,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(S/1e3)}s gap before ${C.type}`,{stallCount:T,totalStallMs:B,eventType:C.type})),fe=E,C.type==="content_block_start"||C.type==="content_block_stop"?s?.onHeartbeat?.(!0):s?.onHeartbeat?.(),C.type==="content_block_start"){A=Date.now();let b=C.content_block;x=b.type,process.env.KODAX_DEBUG_TOOL_STREAM&&b.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:b.type,id:b.id,name:b.name}),b.type==="thinking"?(h="",M=b.signature??""):b.type==="redacted_thinking"?(x="redacted_thinking",R=b.data??""):b.type==="text"?m="":b.type==="tool_use"&&(j=b.id,I=b.name,X="")}else if(C.type==="content_block_delta"){A=Date.now();let b=C.delta;b.type==="thinking_delta"?(h+=b.thinking??"",s?.onThinkingDelta?.(b.thinking??"")):b.type==="text_delta"?(m+=b.text??"",s?.onTextDelta?.(b.text??"")):b.type==="input_json_delta"&&(X+=b.partial_json??"",s?.onToolInputDelta?.(I,b.partial_json??"",j?{toolId:j}:void 0))}else if(C.type==="content_block_stop")A=Date.now(),x==="thinking"?h&&(_.push({type:"thinking",thinking:h,signature:M}),s?.onThinkingEnd?.(h)):x==="redacted_thinking"?(R&&_.push({type:"redacted_thinking",data:R}),R=""):x==="text"?m&&v.push({type:"text",text:m}):x==="tool_use"&&(!j||!I?console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(j),name:JSON.stringify(I),input:X.slice(0,100)}):f.push({type:"tool_use",id:j,name:I,input:ne(X)})),x=null;else if(C.type==="message_stop"){if(P=!0,A=Date.now(),process.env.KODAX_DEBUG_STREAM){let b=Date.now()-_e;this.logStreamDiagnostic(`[Stream] message_stop received after ${b}ms`)}}else if(C.type==="message_delta"){A=Date.now(),k=ft(C.usage,k);let b=C.delta;b?.stop_reason&&(W=b.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${W}`))}else C.type==="message_start"&&(A=Date.now(),k=ft(C.message?.usage,k),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!P){let C=Date.now()-_e,E=Date.now()-A;if(a?.aborted){let b=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:C,lastEventAge:E,reason:b,textBlocks:v.length,toolBlocks:f.length,thinkingBlocks:_.length}),new DOMException(b,"AbortError")}let S=new Error(`Stream incomplete: message_stop event not received. Duration: ${C}ms, Last event: ${E}ms ago. This may indicate a network disconnection or API timeout.`);throw S.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:C,lastEventAge:E,textBlocks:v.length,toolBlocks:f.length,thinkingBlocks:_.length}),S}return{textBlocks:v,toolBlocks:f,thinkingBlocks:_,usage:k,stopReason:W}},a,3,s?.onRateLimit,s?.onRetryAfter)}supportsNonStreamingFallback(){return!0}async complete(e,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.normalizeReasoning(r),d=s?.modelOverride??this.config.model,p=this.getEffectiveMaxOutputTokens(d),l=await this.convertMessages(e,d),u=c.enabled?this.getReasoningCapability(d):"none",y=c.enabled?this.getReasoningFallbackChain(u).filter(m=>m==="native-budget"||m==="native-toggle"||m==="none"):["none"],g=i(m=>{let h={model:d,max_tokens:p,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,e)),messages:l,tools:this.applyCacheControlToTools(n)};if(m==="native-budget"){let M=Z(this.config,c.depth,c.taskType);h.thinking={type:"enabled",budget_tokens:ee(M,p)}}else m==="native-toggle"&&(h.thinking={type:"enabled"});return h},"buildRequest"),v,f;for(let m of y)try{v=await this.client.messages.create(g(m),a?{signal:a}:{}),m!==u&&this.persistReasoningCapabilityOverride(m,d);break}catch(h){f=h;let M=m==="native-budget"?["budget_tokens","thinking"]:m==="native-toggle"?["thinking"]:[];if(!this.shouldFallbackForReasoningError(h,...M))throw h}if(!v)throw f??new w("All reasoning capability attempts failed without a captured error",this.name);let _=[],k=[],x=[];for(let m of v.content)m.type==="text"?(_.push({type:"text",text:m.text}),s?.onTextDelta?.(m.text)):m.type==="thinking"?(x.push({type:"thinking",thinking:m.thinking,signature:m.signature??""}),s?.onThinkingDelta?.(m.thinking),s?.onThinkingEnd?.(m.thinking)):m.type==="redacted_thinking"?x.push({type:"redacted_thinking",data:m.data}):m.type==="tool_use"&&k.push({type:"tool_use",id:m.id,name:m.name,input:typeof m.input=="object"&&m.input!==null?m.input:{}});return{textBlocks:_,toolBlocks:k,thinkingBlocks:x,usage:ft(v.usage),stopReason:v.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(oe(n))throw new w("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(r=>r.role==="system").map(r=>this.serializeSystemMessageContent(r.content)).filter(Boolean);return[e,...o].filter(r=>typeof r=="string"&&r.trim().length>0).join(`
4
-
5
- `)}async convertMessages(e,n){let o=[],r=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 l of s.content)l.type==="thinking"?!r||typeof l.signature=="string"&&l.signature.length>0?c.push({type:"thinking",thinking:l.thinking,signature:l.signature??""}):l.thinking&&d.push(l.thinking):l.type==="redacted_thinking"&&(r||c.push({type:"redacted_thinking",data:l.data}));d.length>0&&s.role==="assistant"&&c.push({type:"text",text:`<prior_reasoning>
6
- ${d.join(`
7
-
8
- `)}
9
- </prior_reasoning>`});for(let l of s.content)if(l.type==="tool_result"&&s.role==="user"){let u;if(typeof l.content=="string")u=l.content;else{let y=[];for(let g of l.content)g.type==="text"?y.push({type:"text",text:g.text}):g.type==="image"&&y.push({type:"image",source:{type:"base64",media_type:Re(g.path,g.mediaType),data:await we(g.path)}});u=y}c.push({type:"tool_result",tool_use_id:l.tool_use_id,content:u,...l.is_error===!0?{is_error:!0}:{}})}for(let l of s.content)l.type==="tool_use"&&s.role==="assistant"&&c.push({type:"tool_use",id:l.id,name:l.name,input:l.input});for(let l of s.content)l.type==="text"?c.push({type:"text",text:l.text}):l.type==="image"&&s.role==="user"&&c.push({type:"image",source:{type:"base64",media_type:Re(l.path,l.mediaType),data:await we(l.path)}});if(a==="assistant"&&this.config.supportsThinking&&!r){let l=c.some(y=>y.type==="tool_use"),u=c.some(y=>y.type==="thinking"||y.type==="redacted_thinking");l&&!u&&c.unshift({type:"thinking",thinking:"...",signature:""})}let p=c.length===0||a==="assistant"&&c.every(l=>{let u=l;return u.type==="thinking"&&!u.thinking||u.type==="text"&&!u.text});o.push({role:s.role,content:p?[{type:"text",text:"..."}]:c})}return o}};import Yn from"openai";var qn="KodaX";function Qn(t){return t.userAgentMode==="sdk"?void 0:{"User-Agent":qn}}i(Qn,"getOpenAICompatDefaultHeaders");function Qt(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 r=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,...r!==void 0?{cachedReadTokens:r}:{}}}i(Qt,"normalizeOpenAIUsage");function Zn(t){return t?t.type==="function"&&"function"in t:!1}i(Zn,"isOpenAIFunctionToolCall");function eo(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(""):""}i(eo,"extractOpenAIMessageText");function to(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(""):""}i(to,"extractOpenAIMessageReasoning");var N=class extends z{static{i(this,"KodaXOpenAICompatProvider")}supportsThinking=!0;client;initClient(){let e=Qn(this.config);this.client=new Yn({apiKey:this.getApiKey(),baseURL:this.config.baseUrl,...e?{defaultHeaders:e}:{}})}onStaleConnection(){this.initClient()}stripCacheBoundariesFromMessages(e){return e.map(n=>{if(typeof n.content=="string")return n;let o=he(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(e,n){let o=[];e&&e.trim().length>0&&o.push(e);let r=[];for(let s of n){if(s.role!=="system"){r.push(s);continue}let a=typeof s.content=="string"?s.content:Array.isArray(s.content)?s.content.filter(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:r}}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 r=e,s=this.getEffectiveMaxOutputTokens(e.model),a=ee(Z(this.config,o.depth,o.taskType),s);switch(n){case"native-effort":{let c=ot(o.depth);c&&(r.reasoning_effort=c);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0,thinking_budget:a}):this.name==="zhipu"&&(r.thinking={type:"enabled",budget_tokens:a});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(r,{enable_thinking:!0}):this.name==="zhipu"&&(r.thinking={type:"enabled"});break}default:break}}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,r,s,a){return this.withRateLimit(async()=>{let c=this.stripCacheBoundariesFromMessages(e),{system:d,rest:p}=this.normalizeSystemForWire(o,c),l=s?.modelOverride??this.config.model,u=[{role:"system",content:d},...await this.convertMessages(p,l)],y=n.map(T=>({type:"function",function:{name:T.name,description:T.description,parameters:T.input_schema}}));if(a?.aborted)throw new DOMException("Request aborted","AbortError");let g=new Map,v="",f="",_,k=!0,x=null,m=Date.now(),h=this.normalizeReasoning(r),M=Q(h)?this.getReasoningCapability(l):"none",R=Q(h)?this.getReasoningFallbackChain(M).filter(T=>T==="native-budget"||T==="native-effort"||T==="native-toggle"||T==="none"):["none"],j={model:l,messages:u,tools:y,max_completion_tokens:this.getEffectiveMaxOutputTokens(l),stream:!0},I,X;for(let T of R){for(;!I;){let B={...j};k&&(B.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(B),this.applyReasoningCapability(B,T,h);try{I=await this.client.chat.completions.create(B,a?{signal:a}:{}),T!==M&&this.persistReasoningCapabilityOverride(T,l)}catch(L){if(X=L,k&&this.shouldFallbackForSpecificReasoningError(L,"stream_options","include_usage")){k=!1;continue}if(!this.shouldFallbackForReasoningError(L,...this.getFallbackTerms(T)))throw L;break}}if(I)break}if(!I)throw X??new w("All reasoning capability attempts failed without a captured error",this.name);let P=Date.now(),W=0,A=0,_e=3e4;for await(let T of I){if(a?.aborted)throw new DOMException("Request aborted","AbortError");let B=Date.now(),L=B-P;L>_e&&(W++,A+=L,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(L/1e3)}s gap`,{stallCount:W,totalStallMs:A})),P=B,s?.onHeartbeat?.(),_=Qt(T.usage)??_;let C=T.choices[0],E=C?.delta;if(C?.finish_reason&&(x=C.finish_reason,process.env.KODAX_DEBUG_STREAM)){let b=Date.now()-m;this.logStreamDiagnostic(`[Stream] finish_reason: ${x} after ${b}ms`)}E?.content&&(v+=E.content,s?.onTextDelta?.(E.content));let S=this.extractReasoningDelta(E);if(S&&(f+=S,s?.onThinkingDelta?.(S)),E?.tool_calls)for(let b of E.tool_calls){let J=g.get(b.index)??{id:"",name:"",arguments:""};b.id&&(J.id=b.id),b.function?.name&&(J.name=b.function.name),b.function?.arguments&&(J.arguments+=b.function.arguments,s?.onToolInputDelta?.(J.name,b.function.arguments,J.id?{toolId:J.id}:void 0)),g.set(b.index,J)}}if(!x){let T=Date.now()-m;if(a?.aborted){let L=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:T,reason:L,textContentLength:v.length,toolCallsCount:g.size}),new DOMException(L,"AbortError")}let B=new Error(`Stream incomplete: finish_reason not received. Duration: ${T}ms. This may indicate a network disconnection or API timeout.`);throw B.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:T,textContentLength:v.length,toolCallsCount:g.size}),B}let de=v?[{type:"text",text:v}]:[],pe=[],fe=[];f&&(fe.push({type:"thinking",thinking:f}),s?.onThinkingEnd?.(f));for(let[,T]of g)T.id&&T.name&&pe.push({type:"tool_use",id:T.id,name:T.name,input:ne(T.arguments)});return{textBlocks:de,toolBlocks:pe,thinkingBlocks:fe,usage:_,stopReason:x??void 0}},a,3,s?.onRateLimit,s?.onRetryAfter)}supportsNonStreamingFallback(){return!0}async complete(e,n,o,r,s,a){return this.withRateLimit(async()=>{let c=this.stripCacheBoundariesFromMessages(e),{system:d,rest:p}=this.normalizeSystemForWire(o,c),l=s?.modelOverride??this.config.model,u=[{role:"system",content:d},...await this.convertMessages(p,l)],y=n.map(P=>({type:"function",function:{name:P.name,description:P.description,parameters:P.input_schema}})),g=this.normalizeReasoning(r),v=Q(g)?this.getReasoningCapability(l):"none",f=Q(g)?this.getReasoningFallbackChain(v).filter(P=>P==="native-budget"||P==="native-effort"||P==="native-toggle"||P==="none"):["none"],_={model:l,messages:u,tools:y,max_completion_tokens:this.getEffectiveMaxOutputTokens(l)},k,x;for(let P of f){let W={..._};this.resetReasoningCapabilityParams(W),this.applyReasoningCapability(W,P,g);try{k=await this.client.chat.completions.create(W,a?{signal:a}:{}),P!==v&&this.persistReasoningCapabilityOverride(P,l);break}catch(A){if(x=A,!this.shouldFallbackForReasoningError(A,...this.getFallbackTerms(P)))throw A}}if(!k)throw x??new w("All reasoning capability attempts failed without a captured error",this.name);let m=k.choices[0],h=m?.message,M=eo(h?.content),R=to(h),j=(h?.tool_calls??[]).filter(Zn).map(P=>({type:"tool_use",id:P.id,name:P.function.name,input:ne(P.function.arguments)}));M&&s?.onTextDelta?.(M);let I=M?[{type:"text",text:M}]:[],X=[];return R&&(X.push({type:"thinking",thinking:R}),s?.onThinkingDelta?.(R),s?.onThinkingEnd?.(R)),{textBlocks:I,toolBlocks:j,thinkingBlocks:X,usage:Qt(k.usage),stopReason:m?.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(p=>p.type==="text").map(p=>p.text).join(`
13
- `),r=e.filter(p=>p.type==="tool_use").map(p=>({id:p.id,type:"function",function:{name:p.name,arguments:JSON.stringify(p.input??{})}})),s=e.filter(p=>p.type==="thinking"||p.type==="redacted_thinking").map(p=>p.type==="thinking"?p.thinking:"").filter(Boolean).join(`
14
-
15
- `),a=e.some(p=>p.type==="thinking"||p.type==="redacted_thinking");if(!o&&r.length===0&&!a)return[];let c;o?c=o:r.length>0?c=null:c="...";let d={role:"assistant",content:c};return r.length>0&&(d.tool_calls=r),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
- `),r=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(r.length===0)return o&&n.push({role:"user",content:o}),n;let s=[];o&&s.push({type:"text",text:o});for(let a of r)s.push({type:"image_url",image_url:{url:await qt(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 r of e){if(r.role==="system"){o.push(...this.serializeSystemMessage(r.content));continue}if(typeof r.content=="string"){o.push({role:r.role,content:r.content});continue}if(r.role==="assistant"){o.push(...this.serializeAssistantMessage(r.content,n));continue}o.push(...await this.serializeUserMessage(r.content))}return o}};import{spawn as no}from"node:child_process";import{Readable as oo,Writable as io}from"node:stream";import mt from"node:process";import{ClientSideConnection as ro,PROTOCOL_VERSION as so,ndJsonStream as ao}from"@agentclientprotocol/sdk";var Ae=class{static{i(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=mt.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=no(s,this.options.args??[],{cwd:this.options.cwd??mt.cwd(),stdio:["pipe","pipe","inherit"]}),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");n=io.toWeb(this.agentProcess.stdin),e=oo.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let o=ao(n,e);this.client=new ro(()=>({sessionUpdate:i(async r=>{this.options.onSessionUpdate?.(r)},"sessionUpdate"),requestPermission:i(async r=>{let s=r.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:so,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??mt.cwd(),mcpServers:[]})).sessionId}async prompt(e,n,o,r){if(!this.client)throw new Error("Client not connected");let s={sessionId:n,prompt:[{type:"text",text:e}]};r?.model&&(s.model=r.model);let a=this.client.prompt(s);if(o){let c=i(()=>{this.client?.cancel({sessionId:n}).catch(()=>{})},"onAbort");o.addEventListener("abort",c),a=a.finally(()=>{o.removeEventListener("abort",c)})}return await a}disconnect(){this.agentProcess?.kill(),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null}};function co(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,r=typeof e.totalTokens=="number"?e.totalTokens:n+o;if(![n,o,r].some(s=>!Number.isFinite(s)||s<0)&&!(r<n||r<o))return{inputTokens:n,outputTokens:o,totalTokens:r,cachedReadTokens:typeof 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}}i(co,"normalizeAcpUsage");var ie=class extends z{static{i(this,"KodaXAcpProvider")}_client=null;_sessionMap=new Map;_activeStreams=new Map;isConfigured(){return!0}getCapabilityProfile(){return U(ge)}serializeImageBlockToPromptToken(e){return null}stripCacheBoundariesFromMessages(e){return e.map(n=>{if(typeof n.content=="string")return n;let o=he(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(e,n,o,r,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=[],p=e[e.length-1],l="";if(p&&typeof p.content=="string")l=p.content;else if(p&&Array.isArray(p.content)){let _=[];for(let k of p.content)if(k.type==="text")_.push(k.text);else if(k.type==="image"){let x=this.serializeImageBlockToPromptToken(k);x&&_.push(x)}l=_.join(`
19
- `)}let u={...this.acpClientOptions,onSessionUpdate:i(_=>{let k=_.update,x=_.sessionId;if(!("sessionUpdate"in k))return;let m=x?this._activeStreams.get(x):void 0;if(m)switch(k.sessionUpdate){case"agent_message_chunk":if(k.content?.type==="text"){let h=k.content.text;m.output.text+=h,m.streamOptions?.onTextDelta?.(h)}break;case"tool_call":{let h="{}",M=k.arguments??k.parameters;M&&(h=typeof M=="string"?M:JSON.stringify(M)),m.streamOptions?.onToolInputDelta?.(k.title,h);let R=`
20
- > [Tool Use] ${k.title}: ${h}
21
- `;m.output.text+=R,m.streamOptions?.onTextDelta?.(R);break}case"tool_call_update":if(k.status){let h=`> [Tool Result] ${k.status}
22
-
23
- `;m.output.text+=h,m.streamOptions?.onTextDelta?.(h)}break}},"onSessionUpdate")},y=s?.sessionId??"default";this._client||(this._client=new Ae(u),await this._client.connect());let g=this._sessionMap.get(y);g||(g=await this._client.createNewSession(),this._sessionMap.set(y,g));let v={text:""};this._activeStreams.set(g,{streamOptions:s,output:v});let f;try{f=await this._client.prompt(l,g,a,{model:s?.modelOverride})}catch(_){if(!(_ instanceof Error&&_.name==="AbortError"))throw _}finally{this._activeStreams.delete(g)}return v.text&&c.push({type:"text",text:v.text}),{textBlocks:c,toolBlocks:d,thinkingBlocks:[],usage:co(f?.usage)}}disconnect(){this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._sessionMap.clear()}};import{spawn as lo}from"node:child_process";import gt from"node:process";var re=class{static{i(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={...gt.env,...this.config.env},s=gt.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,a=lo(s,n,{cwd:this.config.cwd??gt.cwd(),env:o,stdio:["ignore","pipe","pipe"]}),c="";a.stderr?.on("data",l=>{c+=l.toString()});let d=!1,p=i(()=>{d||a.kill("SIGTERM")},"abortHandler");e.signal?.addEventListener("abort",p),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",p),d||a.kill()}}async*parseOutputStream(e,n){let o="";for await(let r of e){if(n?.aborted)break;o+=r.toString();let s=o.split(`
24
- `);o=s.pop()??"";for(let a of s){if(!a.trim())continue;let c=this.parseLine(a.trim());c&&(yield c)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as uo}from"node:child_process";import po from"node:process";async function Se(t){try{let e=po.platform==="win32",n=uo(e?`${t}.cmd`:t,["--version"]);return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}i(Se,"checkCliCommandInstalled");var Oe=class extends re{static{i(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 Se("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 Zt}from"node:stream/web";import{randomUUID as ht}from"node:crypto";function De(t){let e=new Zt,n=new Zt,o=e.readable.getReader(),r=n.writable.getWriter(),s=new TextDecoder,a=new TextEncoder,c="",d=ht(),p=new AbortController,l=new Map;(async()=>{try{for(;;){let{done:f,value:_}=await o.read();if(f)break;c+=s.decode(_,{stream:!0});let k=c.split(`
25
- `);c=k.pop()??"";for(let x of k)if(x.trim())try{let m=JSON.parse(x);y(m).catch(h=>{console.error("[PseudoAcpServer] Failed to handle request:",h)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",x)}}}catch(f){console.error("[PseudoAcpServer] Stream read error:",f)}})();let u=i(async f=>{let _=JSON.stringify(f)+`
26
- `;await r.write(a.encode(_))},"sendMsg");async function y(f){if(f.method==="initialize")await u({jsonrpc:"2.0",id:f.id,result:{protocolVersion:f.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(f.method==="session/new"||f.method==="sessions/new")d=f.params?.sessionId??ht(),await u({jsonrpc:"2.0",id:f.id,result:{sessionId:d}});else if(f.method==="session/prompt"||f.method==="chat/prompt"){let _=new AbortController,k=f.params.sessionId;l.set(k,_);let x=i(()=>_.abort(),"onGlobalAbort");p.signal.addEventListener("abort",x);let h=await g(k,f.params.prompt,typeof f.params.model=="string"?f.params.model:void 0,_.signal).finally(()=>{l.delete(k),p.signal.removeEventListener("abort",x)});await u({jsonrpc:"2.0",id:f.id,result:h.usage?{stopReason:h.stopReason,usage:h.usage}:{stopReason:h.stopReason}})}else if(f.method==="session/cancel"||f.method==="chat/cancel"){let _=l.get(f.params.sessionId);_&&_.abort(),f.id!==void 0&&await u({jsonrpc:"2.0",id:f.id,result:{}})}else f.id!==void 0&&await u({jsonrpc:"2.0",id:f.id,result:{}})}i(y,"handleRequest");let g=i(async(f,_,k,x)=>{let m=_.find(h=>h.type==="text")?.text??"";try{let h=t.execute({prompt:m,model:k,sessionId:f==="default"?void 0:f,signal:x});for await(let M of h){let R=v(M);if(R&&await u({jsonrpc:"2.0",method:"session/update",params:{sessionId:f,update:R}}),M.type==="complete")return{stopReason:x.aborted?"cancelled":"end_turn",usage:M.usage}}return{stopReason:x.aborted?"cancelled":"end_turn"}}catch(h){return x.aborted||h instanceof Error&&h.name==="AbortError"?{stopReason:"cancelled"}:(console.error("[PseudoAcpServer] Error executing prompt:",h),await u({jsonrpc:"2.0",method:"session/update",params:{sessionId:f,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
27
- [Fatal Error: ${h}]
28
- `}}}}),{stopReason:"end_turn"})}},"executePrompt"),v=i(f=>{switch(f.type){case"message":if(f.role==="assistant"&&f.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:f.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:f.toolName,arguments:f.parameters,status:"running",toolCallId:f.toolId||ht()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:f.toolId,status:f.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
29
- [Error: ${f.message}]
30
- `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:e.writable,abort:i(()=>{p.abort(),e.readable.cancel().catch(()=>{}),n.writable.abort().catch(()=>{})},"abort"),executor:t}}i(De,"createPseudoAcpServer");import en from"node:fs";import tn from"node:os";import nn from"node:path";var fo="gpt-5.4",mo="auto-gemini-3",go=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],ho=["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 r=o.trim();if(!r)continue;let s=r.toLowerCase();e.has(s)||(e.add(s),n.push(r))}return n}i(on,"dedupePreserveOrder");function yo(){let t=nn.join(tn.homedir(),".codex","config.toml");try{return en.readFileSync(t,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}i(yo,"readCodexConfiguredModel");function bo(){let t=nn.join(tn.homedir(),".gemini","settings.json");try{let e=JSON.parse(en.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}}i(bo,"readGeminiConfiguredModel");function se(){return yo()||fo}i(se,"getCodexCliDefaultModel");function ae(){return bo()||mo}i(ae,"getGeminiCliDefaultModel");function ye(){return on([se(),...go])}i(ye,"getCodexCliKnownModels");function be(){return on([ae(),...ho])}i(be,"getGeminiCliKnownModels");var yt=ae(),ko=be(),vo={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},Ie=class extends ie{static{i(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:yt,models:ko.filter(e=>e!==yt).map(e=>({id:e,displayName:e})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let e=new Oe({model:yt});this.acpClientOptions=De(e)}getCapabilityProfile(){return U(vo)}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 Be=class extends re{static{i(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 Se("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 bt=se(),_o=ye(),Le=class extends ie{static{i(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:bt,models:_o.filter(e=>e!==bt).map(e=>({id:e,displayName:e})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let e=new Be({model:bt});this.acpClientOptions=De(e)}};import{existsSync as Po,readFileSync as Eo}from"node:fs";import ce from"node:path";import{fileURLToPath as Ro}from"node:url";var rn=["none","prompt-only","native-effort","native-budget","native-toggle","unknown"],sn=["native","image-input-native","cli-bridge","image-input-cli-bridge"];function ke(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}i(ke,"isPlainObject");function Ne(t,e){if(typeof t!="string"||t.length===0)throw new Error(`provider-capabilities.json: ${e} must be a non-empty string`);return t}i(Ne,"requireString");function an(t,e){if(t!==void 0)return Ne(t,e)}i(an,"optionalString");function q(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}}i(q,"optionalNumber");function Ke(t,e){if(t!==void 0){if(typeof t!="boolean")throw new Error(`provider-capabilities.json: ${e} must be a boolean`);return t}}i(Ke,"optionalBoolean");function kt(t,e){if(typeof t!="string"||!rn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${rn.join(", ")}, got ${JSON.stringify(t)}`);return t}i(kt,"requireReasoningCapability");function xo(t,e){if(typeof t!="string"||!sn.includes(t))throw new Error(`provider-capabilities.json: ${e} must be one of ${sn.join(", ")}, got ${JSON.stringify(t)}`);return t}i(xo,"requireProfileName");function Co(t,e){if(!ke(t))throw new Error(`provider-capabilities.json: ${e} must be an object`);let n=Ne(t.id,`${e}.id`),o=an(t.displayName,`${e}.displayName`),r=q(t.contextWindow,`${e}.contextWindow`),s=q(t.maxOutputTokens,`${e}.maxOutputTokens`),a=q(t.thinkingBudgetCap,`${e}.thinkingBudgetCap`),c=Ke(t.replayReasoningContent,`${e}.replayReasoningContent`),d=Ke(t.strictThinkingSignature,`${e}.strictThinkingSignature`),p=q(t.streamMaxDurationMs,`${e}.streamMaxDurationMs`),l=t.reasoningCapability===void 0?void 0:kt(t.reasoningCapability,`${e}.reasoningCapability`),u={id:n};return o!==void 0&&(u.displayName=o),r!==void 0&&(u.contextWindow=r),s!==void 0&&(u.maxOutputTokens=s),a!==void 0&&(u.thinkingBudgetCap=a),l!==void 0&&(u.reasoningCapability=l),c!==void 0&&(u.replayReasoningContent=c),d!==void 0&&(u.strictThinkingSignature=d),p!==void 0&&(u.streamMaxDurationMs=p),u}i(Co,"validateModelDescriptor");function To(t,e){if(t===void 0)return;if(!ke(t))throw new Error(`provider-capabilities.json: ${e} must be an object`);let n={};for(let[o,r]of Object.entries(t))n[o]=kt(r,`${e}.${o}`);return n}i(To,"validateModelReasoningCapabilities");function Mo(t,e){if(!ke(t))throw new Error(`provider-capabilities.json: providers.${e} must be an object`);let n=Ke(t.cliBridge,`providers.${e}.cliBridge`),o=Ne(t.apiKeyEnv,`providers.${e}.apiKeyEnv`),r=kt(t.reasoningCapability,`providers.${e}.reasoningCapability`),s=xo(t.capabilityProfile,`providers.${e}.capabilityProfile`),a=q(t.contextWindow,`providers.${e}.contextWindow`),c=q(t.maxOutputTokens,`providers.${e}.maxOutputTokens`),d=q(t.thinkingBudgetCap,`providers.${e}.thinkingBudgetCap`),p=Ke(t.supportsThinking,`providers.${e}.supportsThinking`),l=To(t.modelReasoningCapabilities,`providers.${e}.modelReasoningCapabilities`),u=an(t.model,`providers.${e}.model`);if(n&&(u!==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&&u===void 0)throw new Error(`provider-capabilities.json: providers.${e}.model is required (only cliBridge entries may omit)`);let y;if(t.models!==void 0){if(!Array.isArray(t.models))throw new Error(`provider-capabilities.json: providers.${e}.models must be an array`);y=t.models.map((v,f)=>Co(v,`providers.${e}.models[${f}]`))}let g={apiKeyEnv:o,reasoningCapability:r,capabilityProfile:s};return u!==void 0&&(g.model=u),y!==void 0&&(g.models=y),a!==void 0&&(g.contextWindow=a),c!==void 0&&(g.maxOutputTokens=c),d!==void 0&&(g.thinkingBudgetCap=d),p!==void 0&&(g.supportsThinking=p),l!==void 0&&(g.modelReasoningCapabilities=l),n&&(g.cliBridge=!0),g}i(Mo,"validateProviderEntry");function cn(t){if(!ke(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=Ne(t.updatedAt,"updatedAt");if(!ke(t.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,r]of Object.entries(t.providers))n[o]=Mo(r,o);return{version:1,updatedAt:e,providers:n}}i(cn,"validateProviderCapabilitiesJson");var wo=Object.freeze({native:Y,"image-input-native":Jt,"cli-bridge":ge,"image-input-cli-bridge":Yt}),Fe=null;function Ao(){if(process.env.KODAX_BUNDLED==="true")return ce.join(ce.dirname(process.execPath),"provider-capabilities.json");let t=ce.dirname(Ro(import.meta.url)),e=[ce.join(t,"provider-capabilities.json"),ce.join(ce.dirname(t),"provider-capabilities.json")];for(let n of e)if(Po(n))return n;return e[0]}i(Ao,"resolveJsonPath");function So(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)}i(So,"deepFreezeSnapshot");function Oo(t){if(t==="gemini-cli"){let e=ae();return{model:e,models:be().filter(n=>n!==e).map(n=>({id:n}))}}if(t==="codex-cli"){let e=se();return{model:e,models:ye().filter(n=>n!==e).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${t}'`)}i(Oo,"resolveCliBridgeModels");function Do(t,e){let n=wo[e.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${e.capabilityProfile}' for provider '${t}'`);if(e.cliBridge){let r=Oo(t),s={model:r.model,models:r.models,apiKeyEnv:e.apiKeyEnv,reasoningCapability:e.reasoningCapability,capabilityProfile:n};return e.supportsThinking!==void 0&&(s.supportsThinking=e.supportsThinking),s}let o={model:e.model,apiKeyEnv:e.apiKeyEnv,reasoningCapability:e.reasoningCapability,capabilityProfile:n};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}i(Do,"buildSnapshot");function ln(){if(Fe)return Fe;let t=Ao(),e;try{let r=Eo(t,"utf8");e=JSON.parse(r)}catch(r){let s=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${t}: ${s}`)}let n=cn(e),o={};for(let[r,s]of Object.entries(n.providers))o[r]=So(Do(r,s));return Fe=Object.freeze(o),Fe}i(ln,"getProviderSnapshots");import Io from"@anthropic-ai/sdk";var K=ln();function $(t,e={}){let n=K[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,...e}}i($,"buildProviderConfig");var vt=class extends O{static{i(this,"AnthropicProvider")}name="anthropic";config=$("anthropic",{strictThinkingSignature:!0});constructor(){super(),this.client=new Io({apiKey:this.getApiKey()})}},_t=class extends O{static{i(this,"ZhipuCodingProvider")}name="zhipu-coding";config=$("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5});constructor(){super(),this.initClient()}},xt=class extends O{static{i(this,"KimiCodeProvider")}name="kimi-code";config=$("kimi-code",{baseUrl:"https://api.kimi.com/coding/"});constructor(){super(),this.initClient()}},Ct=class extends O{static{i(this,"MiniMaxCodingProvider")}name="minimax-coding";config=$("minimax-coding",{baseUrl:"https://api.minimaxi.com/anthropic"});constructor(){super(),this.initClient()}},Tt=class extends O{static{i(this,"MimoCodingProvider")}name="mimo-coding";config=$("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/anthropic"});constructor(){super(),this.initClient()}},Mt=class extends O{static{i(this,"MimoProvider")}name="mimo";config=$("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"});constructor(){super(),this.initClient()}},Pt=class extends O{static{i(this,"ArkCodingProvider")}name="ark-coding";config=$("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"});constructor(){super(),this.initClient()}},Et=class extends N{static{i(this,"OpenAIProvider")}name="openai";config=$("openai");constructor(){super(),this.initClient()}},Rt=class extends N{static{i(this,"DeepSeekProvider")}name="deepseek";config=$("deepseek",{baseUrl:"https://api.deepseek.com",replayReasoningContent:!0});constructor(){super(),this.initClient()}},wt=class extends N{static{i(this,"KimiProvider")}name="kimi";config=$("kimi",{baseUrl:"https://api.moonshot.cn/v1",replayReasoningContent:!0});constructor(){super(),this.initClient()}},At=class extends N{static{i(this,"QwenProvider")}name="qwen";config=$("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0});constructor(){super(),this.initClient()}},St=class extends N{static{i(this,"ZhipuProvider")}name="zhipu";config=$("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0});constructor(){super(),this.initClient()}},F={anthropic:i(()=>new vt,"anthropic"),openai:i(()=>new Et,"openai"),deepseek:i(()=>new Rt,"deepseek"),kimi:i(()=>new wt,"kimi"),"kimi-code":i(()=>new xt,"kimi-code"),qwen:i(()=>new At,"qwen"),zhipu:i(()=>new St,"zhipu"),"zhipu-coding":i(()=>new _t,"zhipu-coding"),"minimax-coding":i(()=>new Ct,"minimax-coding"),"mimo-coding":i(()=>new Tt,"mimo-coding"),mimo:i(()=>new Mt,"mimo"),"ark-coding":i(()=>new Pt,"ark-coding"),"gemini-cli":i(()=>new Ie,"gemini-cli"),"codex-cli":i(()=>new Le,"codex-cli")},Ot=process.env.KODAX_PROVIDER??"zhipu-coding",un=new Map;function Bo(t){if(D(t))return K[t].apiKeyEnv}i(Bo,"resolveApiKeyEnvForProvider");function dn(t){let e=t??Ot,n=F[e];if(!n)throw new w(`Unknown provider: ${e}. Available: ${Object.keys(F).join(", ")}`,e);let o=Bo(e),r=o?process.env[o]:void 0,s=un.get(e);if(s&&s.apiKey===r)return s.instance;let a=n();return un.set(e,{apiKey:r,instance:a}),a}i(dn,"getProvider");function pn(t){return D(t)?!!process.env[K[t].apiKeyEnv]:!1}i(pn,"isProviderConfigured");function fn(t){return D(t)?K[t].model:null}i(fn,"getProviderModel");function mn(t,e){if(!D(t))return"unknown";let n=K[t],o=e??n.model;return n.modelReasoningCapabilities?.[o]??n.reasoningCapability}i(mn,"getProviderConfiguredReasoningCapability");function gn(t){return D(t)?U(K[t].capabilityProfile):null}i(gn,"getProviderConfiguredCapabilityProfile");function hn(){let t=[];for(let e of Object.keys(F)){let n=K[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:U(n.capabilityProfile)})}return t}i(hn,"getProviderList");function yn(t){let e=K[t];return e?e.models?[e.model,...e.models.map(n=>n.id)]:[e.model]:[]}i(yn,"getProviderModels");function D(t){return t in F}i(D,"isProviderName");function Dt(t){return{id:t.model}}i(Dt,"makeDefaultDescriptor");function $e(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}}i($e,"effectiveCapabilities");function Ue(t){let e=K[t];return e?[Dt(e),...e.models??[]]:[]}i(Ue,"getProviderModelDescriptors");function je(t,e){let n=K[t];if(!n)return;if(e===n.model)return $e(t,n,Dt(n));let o=n.models?.find(r=>r.id===e);if(o)return $e(t,n,o)}i(je,"getModelCapabilities");function Xe(){let t=[];for(let e of Object.keys(F)){let n=K[e];t.push($e(e,n,Dt(n)));for(let o of n.models??[])t.push($e(e,n,o))}return t}i(Xe,"listBuiltinModelCapabilities");var Lo=new Set(["compat","sdk"]);function ve(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&&!Lo.has(t.userAgentMode))throw new Error(`Unknown userAgentMode "${t.userAgentMode}" for custom provider "${t.name}". Must be "compat" or "sdk".`)}i(ve,"validateCustomProviderConfig");function Ko(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}}i(Ko,"buildProviderConfig");function We(t){ve(t);let e=Ko(t);return t.protocol==="anthropic"?new It(t.name,e):new Bt(t.name,e)}i(We,"createCustomProvider");var It=class extends O{static{i(this,"DynamicAnthropicProvider")}name;config;constructor(e,n){super(),this.name=e,this.config=n,this.initClient()}},Bt=class extends N{static{i(this,"DynamicOpenAIProvider")}name;config;constructor(e,n){super(),this.name=e,this.config=n,this.initClient()}};var V=new Map,Lt=new Map;function bn(t){let e=new Set,n=new Map,o=new Map;for(let r of t){if(ve(r),e.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in F&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),e.add(r.name),n.set(r.name,r),o.set(r.name,()=>We(r))}V.clear(),Lt.clear();for(let[r,s]of n)V.set(r,s);for(let[r,s]of o)Lt.set(r,s)}i(bn,"registerCustomProviders");function ze(t){let e=Lt.get(t);return e?e():void 0}i(ze,"getCustomProvider");function ue(t){return V.has(t)}i(ue,"isCustomProviderName");function Ge(){return[...V.keys()]}i(Ge,"getCustomProviderNames");function kn(){let t=[];for(let[e,n]of V){let o=!!process.env[n.apiKeyEnv],r=(n.models??[]).map(a=>typeof a=="string"?a:a.id),s=n.model&&r.length?[...new Set([n.model,...r])]:[n.model];t.push({name:e,model:n.model,models:s,configured:o,reasoningCapability:n.reasoningCapability??"none",capabilityProfile:U(n.capabilityProfile??Y),custom:!0})}return t}i(kn,"getCustomProviderList");function vn(t){let e=V.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]}i(vn,"getCustomProviderModels");function _n(t){return typeof t=="string"?{id:t}:t}i(_n,"customDescriptorToFull");function Ve(t){let e=V.get(t);if(!e)return;let n={id:e.model},o=(e.models??[]).map(_n).filter(r=>r.id!==e.model);return[n,...o]}i(Ve,"getCustomProviderModelDescriptors");function le(t,e){let n=V.get(t);if(!n)return;let o=e===n.model,r=o?{id:n.model}:(n.models??[]).map(_n).find(s=>s.id===e);if(r)return{provider:t,model:r.id,displayName:r.displayName??r.id,supportsThinking:n.supportsThinking??!1,reasoningCapability:r.reasoningCapability??n.reasoningCapability??"none",contextWindow:r.contextWindow??n.contextWindow,maxOutputTokens:r.maxOutputTokens??n.maxOutputTokens,thinkingBudgetCap:r.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}i(le,"getCustomModelCapabilities");function He(){let t=[];for(let[e,n]of V){let o=le(e,n.model);o&&t.push(o);for(let r of n.models??[]){let s=typeof r=="string"?r:r.id;if(s===n.model)continue;let a=le(e,s);a&&t.push(a)}}return t}i(He,"listCustomProviderModelCapabilities");var H=new Map,No=0;function Kt(t){let e=H.get(t);if(!(!e||e.length===0))return e[e.length-1]}i(Kt,"getActiveRuntimeProviderRegistration");function Fo(t){for(let[e,n]of H){let o=n.filter(r=>r.id!==t);if(o.length!==n.length){o.length===0?H.delete(e):H.set(e,o);return}}}i(Fo,"removeRuntimeProviderRegistration");function xn(t,e){let n=t.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(D(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(ue(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++No}`,name:n,factory:e},r=H.get(n)??[];return H.set(n,[...r,o]),()=>{Fo(o.id)}}i(xn,"registerModelProvider");function Je(t){let e=Kt(t);return e?e.factory():void 0}i(Je,"getRuntimeModelProvider");function Ye(t){return Kt(t)!==void 0}i(Ye,"isRuntimeModelProviderName");function qe(){return Array.from(H.keys()).filter(t=>Kt(t)!==void 0)}i(qe,"getRuntimeModelProviderNames");function Cn(){H.clear()}i(Cn,"clearRuntimeModelProviders");function Tn(t){if(D(t))return F[t]();let e=Je(t);if(e)return e;let n=ze(t);if(n)return n;let o=Nt();throw new Error(`Unknown provider: ${t}. Available: ${o.join(", ")}`)}i(Tn,"resolveProvider");function Mn(t){return D(t)||Ye(t)||ue(t)}i(Mn,"isKnownProvider");function Nt(){let t=Object.keys(F),e=qe(),n=Ge();return[...new Set([...t,...e,...n])]}i(Nt,"getAvailableProviderNames");function Pn(t){return D(t)?Ue(t):Ve(t)??[]}i(Pn,"resolveProviderModelDescriptors");function En(t,e){return D(t)?je(t,e):le(t,e)}i(En,"resolveModelCapabilities");function Rn(){return[...Xe(),...He()]}i(Rn,"listAllModelCapabilities");var wn={anthropic:{"claude-opus-4-6":{inputPer1M:15,outputPer1M:75,cachePer1M:1.875},"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},"MiniMax-M2.5":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.5-highspeed":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.1":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.1-highspeed":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2":{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},"kimi-k2.5":{inputPer1M:.005,outputPer1M:.015},"minimax-latest":{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 Ft(t,e,n){let o=n?.[t]?.[e];return o||wn[t]?.[e]}i(Ft,"getCostRate");function $t(t,e,n,o=0){let r=e/1e6*t.inputPer1M,s=n/1e6*t.outputPer1M,a=t.cachePer1M?o/1e6*t.cachePer1M:0;return r+s+a}i($t,"calculateCost");function $o(){return{records:[],retries:[]}}i($o,"createCostTracker");function Uo(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]}}i(Uo,"recordRetry");function Ut(t,e,n){let o=Ft(e.provider,e.model,n),r=(e.cacheReadTokens??0)+(e.cacheWriteTokens??0),s=o?$t(o,e.inputTokens,e.outputTokens,r):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}}i(Ut,"recordUsage");function jo(t){let e=0,n=0,o=0,r=0,s=0,a=0,c={},d={};for(let u of t.records){e+=u.cost,n+=u.inputTokens,o+=u.outputTokens,r+=u.cacheReadTokens+u.cacheWriteTokens,s+=u.cacheReadTokens,a+=u.cacheWriteTokens;let y=c[u.provider];c[u.provider]={cost:(y?.cost??0)+u.cost,calls:(y?.calls??0)+1,inputTokens:(y?.inputTokens??0)+u.inputTokens,outputTokens:(y?.outputTokens??0)+u.outputTokens};let g=u.role??"default",v=d[g];d[g]={cost:(v?.cost??0)+u.cost,calls:(v?.calls??0)+1,inputTokens:(v?.inputTokens??0)+u.inputTokens,outputTokens:(v?.outputTokens??0)+u.outputTokens}}let p=0;for(let u of t.retries)p+=u.waitMs;let l=r>0?s/r:0;return{totalCost:e,totalInputTokens:n,totalOutputTokens:o,totalCacheTokens:r,totalCacheReadTokens:s,totalCacheWriteTokens:a,cacheHitRate:l,callCount:t.records.length,retryCount:t.retries.length,retryWaitMs:p,byProvider:c,byRole:d}}i(jo,"getSummary");function Qe(t){return t<.01?`$${t.toFixed(4)}`:t<1?`$${t.toFixed(3)}`:`$${t.toFixed(2)}`}i(Qe,"formatCost");function Xo(t){let e=[];if(e.push(`Session Cost: ${Qe(t.totalCost)} (${t.callCount} calls)`),e.push(`Tokens: ${t.totalInputTokens.toLocaleString()} in / ${t.totalOutputTokens.toLocaleString()} out`),t.totalCacheTokens>0){let r=(t.cacheHitRate*100).toFixed(0);e.push(`Cache: ${t.totalCacheTokens.toLocaleString()} tokens (${t.totalCacheReadTokens.toLocaleString()} read / ${t.totalCacheWriteTokens.toLocaleString()} write, ${r}% hit rate)`)}if(t.retryCount>0){let r=(t.retryWaitMs/1e3).toFixed(1);e.push(`Retries: ${t.retryCount} (${r}s total wait)`)}e.push("");let n=Object.entries(t.byProvider).sort((r,s)=>s[1].cost-r[1].cost);if(n.length>0){e.push("By Provider:");for(let[r,s]of n)e.push(` ${r}: ${Qe(s.cost)} (${s.calls} calls, ${s.inputTokens.toLocaleString()} in / ${s.outputTokens.toLocaleString()} out)`);e.push("")}let o=Object.entries(t.byRole).sort((r,s)=>s[1].cost-r[1].cost);if(o.length>1){e.push("By Role:");for(let[r,s]of o)e.push(` ${r}: ${Qe(s.cost)} (${s.calls} calls)`)}return e.join(`
31
- `)}i(Xo,"formatCostReport");var An={inputTokens:0,outputTokens:0,totalTokens:0},Wo=3e4;async function zo(t){let e=new AbortController,n=t.timeoutMs??Wo,o,r=i(c=>{o||(o=c),e.abort()},"recordAbort"),s=setTimeout(()=>r("timeout"),n),a=i(()=>r("parent"),"onParentAbort");t.abortSignal&&(t.abortSignal.aborted?r("parent"):t.abortSignal.addEventListener("abort",a,{once:!0}));try{let c=await t.provider.stream([...t.messages],[],t.system,t.reasoning??{mode:"off"},{modelOverride:t.model},e.signal),d=c.usage??An,p=c.textBlocks??[],l=c.toolBlocks??[],u=p.map(g=>g.text).join("");if(l.length>0)return{text:u,usage:d,costTracker:t.costTracker,stopReason:"error",error:new Error(`sideQuery: provider returned ${l.length} tool_use block(s); sideQuery expects text-only output`)};let y=t.costTracker;return y&&(y=Ut(y,{provider:t.provider.name,model:t.model,inputTokens:d.inputTokens,outputTokens:d.outputTokens,cacheReadTokens:d.cachedReadTokens,cacheWriteTokens:d.cachedWriteTokens,role:t.querySource})),{text:u,usage:d,costTracker:y,stopReason:Go(c.stopReason)}}catch(c){let d=c instanceof Error?c:new Error(String(c)),p="error";return e.signal.aborted&&(p=o==="timeout"?"timeout":"aborted"),{text:"",usage:An,costTracker:t.costTracker,stopReason:p,error:d}}finally{clearTimeout(s),t.abortSignal&&t.abortSignal.removeEventListener("abort",a)}}i(zo,"sideQuery");function Go(t){return t==="max_tokens"?"max_tokens":"end_turn"}i(Go,"mapStopReason");export{G as a,w as b,me as c,Ze as d,et as e,tt as f,Sn as g,On as h,Dn as i,In as j,jt as k,Xt as l,nt as m,Q as n,xe as o,Wt as p,Z as q,ee as r,ot as s,at as t,ct as u,te as v,Te as w,ut as x,$n as y,Me as z,Pe as A,Ee as B,z as C,ne as D,dt as E,oe as F,pt as G,he as H,O as I,N as J,se as K,ae as L,ye as M,be as N,K as O,F as P,Ot as Q,dn as R,pn as S,fn as T,mn as U,gn as V,hn as W,yn as X,D as Y,Ue as Z,je as _,Xe as $,ve as aa,We as ba,bn as ca,ze as da,ue as ea,Ge as fa,kn as ga,vn as ha,Ve as ia,le as ja,He as ka,xn as la,Je as ma,Ye as na,qe as oa,Cn as pa,Tn as qa,Mn as ra,Nt as sa,Pn as ta,En as ua,Rn as va,wn as wa,Ft as xa,$t as ya,$o as za,Uo as Aa,Ut as Ba,jo as Ca,Qe as Da,Xo as Ea,zo as Fa};
@@ -1,2 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as e}from"./chunk-V4WSBIXB.js";var l=class{static{e(this,"WebSocketStub")}},n=l;var t=global;t.WebSocket||=n;t.window||=global;t.self||=global;t.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}];var a=e(()=>{},"noop"),o={initialize:a,connectToDevTools:a};o.initialize();o.connectToDevTools();
@@ -1,2 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{$ as Vb,$a as Vc,$b as Vd,$c as Ve,A as ub,Aa as uc,Ab as ud,Ac as ue,Ad as vf,B as vb,Ba as vc,Bb as vd,Bc as ve,Bd as wf,C as wb,Ca as wc,Cb as wd,Cc as we,Cd as xf,D as xb,Da as xc,Db as xd,Dc as xe,Dd as yf,E as yb,Ea as yc,Eb as yd,Ec as ye,Ed as zf,F as zb,Fa as zc,Fb as zd,Fc as ze,Fd as Af,G as Ab,Ga as Ac,Gb as Ad,Gc as Ae,Gd as Bf,H as Bb,Ha as Bc,Hb as Bd,Hc as Be,Hd as Cf,I as Cb,Ia as Cc,Ib as Cd,Ic as Ce,Id as Df,J as Db,Ja as Dc,Jb as Dd,Jc as De,Jd as Ef,K as Eb,Ka as Ec,Kb as Ed,Kc as Ee,Kd as Ff,L as Fb,La as Fc,Lb as Fd,Lc as Fe,Ld as Gf,M as Gb,Ma as Gc,Mb as Gd,Mc as Ge,Md as Hf,N as Hb,Na as Hc,Nb as Hd,Nc as He,Nd as If,O as Ib,Oa as Ic,Ob as Id,Oc as Ie,Od as Jf,P as Jb,Pa as Jc,Pb as Jd,Pc as Je,Pd as Kf,Q as Kb,Qa as Kc,Qb as Kd,Qc as Ke,Qd as Lf,R as Lb,Ra as Lc,Rb as Ld,Rc as Le,Rd as Mf,S as Mb,Sa as Mc,Sb as Md,Sc as Me,Sd as Nf,T as Nb,Ta as Nc,Tb as Nd,Tc as Ne,Td as Of,U as Ob,Ua as Oc,Ub as Od,Uc as Oe,Ud as Pf,V as Pb,Va as Pc,Vb as Pd,Vc as Pe,Vd as Qf,W as Qb,Wa as Qc,Wb as Qd,Wc as Qe,Wd as Rf,X as Rb,Xa as Rc,Xb as Rd,Xc as Re,Xd as Sf,Y as Sb,Ya as Sc,Yb as Sd,Yc as Se,Yd as Tf,Z as Tb,Za as Tc,Zb as Td,Zc as Te,Zd as Uf,_ as Ub,_a as Uc,_b as Ud,_c as Ue,_d as Vf,a as X,aa as Wb,ab as Wc,ac as Wd,ad as We,b as Y,ba as Xb,bb as Xc,bc as Xd,bd as Xe,c as Z,ca as Yb,cb as Yc,cc as Yd,cd as Ye,d as _,da as Zb,db as Zc,dc as Zd,dd as Ze,e as $,ea as _b,eb as _c,ec as _d,ed as _e,f as $a,fa as $b,fb as $c,fc as $d,fd as $e,g as ab,ga as ac,gb as ad,gc as ae,gd as af,h as bb,ha as bc,hb as bd,hc as be,hd as bf,i as cb,ia as cc,ib as cd,ic as ce,id as cf,j as db,ja as dc,jb as dd,jc as de,jd as df,k as eb,ka as ec,kb as ed,kc as ee,kd as ef,l as fb,la as fc,lb as fd,lc as fe,ld as ff,m as gb,ma as gc,mb as gd,mc as ge,md as gf,n as hb,na as hc,nb as hd,nc as he,nd as hf,o as ib,oa as ic,ob as id,oc as ie,od as jf,p as jb,pa as jc,pb as jd,pc as je,pd as kf,q as kb,qa as kc,qb as kd,qc as ke,qd as lf,r as lb,ra as lc,rb as ld,rc as le,rd as mf,s as mb,sa as mc,sb as md,sc as me,sd as nf,t as nb,ta as nc,tb as nd,tc as ne,td as of,u as ob,ua as oc,ub as od,uc as oe,ud as pf,v as pb,va as pc,vb as pd,vc as pe,vd as qf,w as qb,wa as qc,wb as qd,wc as qe,wd as rf,x as rb,xa as rc,xb as rd,xc as re,xd as sf,y as sb,ya as sc,yb as sd,yc as se,yd as tf,z as tb,za as tc,zb as td,zc as te,zd as uf}from"./chunk-X6EHEQWP.js";import{$ as A,C as k,I as l,J as m,O as n,P as o,Q as p,R as q,S as r,T as s,U as t,V as u,W as v,X as w,Y as x,Z as y,_ as z,a,aa as B,b,ba as C,c,ca as D,da as E,ea as F,fa as G,ga as H,ha as I,ia as J,j as d,ja as K,ka as L,la as M,ma as N,na as O,oa as P,pa as Q,qa as R,ra as S,sa as T,t as e,ta as U,u as f,ua as V,v as g,va as W,w as h,x as i,y as j}from"./chunk-PGF5EZ7C.js";import{$a as va,Fc as Za,Gc as _a,a as aa,ab as wa,ac as Ha,b as ba,bc as Ia,c as ca,cc as Ja,d as da,dc as Ka,e as ea,ec as La,f as fa,h as ga,i as ha,j as ia,k as ja,ka as pa,l as ka,lc as Ma,m as la,mc as Na,n as ma,na as qa,nc as Oa,o as na,ob as xa,oc as Pa,p as oa,pb as ya,pc as Qa,qb as za,qc as Ra,rb as Aa,rc as Sa,sb as Ba,tb as Ca,tc as Ta,ua as ra,ub as Da,uc as Ua,va as sa,vb as Ea,vc as Va,wa as ta,wb as Fa,wc as Wa,xa as ua,xb as Ga,xc as Xa,yc as Ya}from"./chunk-IJUB7QXG.js";import"./chunk-V4WSBIXB.js";export{wf as AUTO_MODE_DENIAL_CONSECUTIVE_THRESHOLD,xf as AUTO_MODE_DENIAL_CUMULATIVE_THRESHOLD,Rf as BASH_POLICY_SPEC,Oe as BLOCKER_REQUIRED_CONSECUTIVE_TURNS,Cf as BREAKER_ERROR_THRESHOLD,Df as BREAKER_WINDOW_MS,ab as CANCELLED_TOOL_RESULT_MESSAGE,$a as CANCELLED_TOOL_RESULT_PREFIX,mf as CODING_AGENT_MARKER,ze as CODING_INVARIANTS,oe as CODING_SUMMARY_PROMPT,pe as CODING_UPDATE_SUMMARY_PROMPT,Lc as CapabilityDeniedError,Be as Client,Mc as ConstructionManifestError,qe as DEFAULT_CODING_AGENT_NAME,af as DEFAULT_DANGEROUS_PATTERNS,Jc as DEFAULT_HANDLER_TIMEOUT_MS,Yd as DEFAULT_RESILIENCE_CONFIG,$e as DEFAULT_SAFE_PATTERNS,Wc as DEFAULT_SELF_MODIFY_BUDGET,Nf as DEFAULT_SPECULATIVE_WINDOW_MS,cb as DEFAULT_TOOL_OUTPUT_MAX_BYTES,bb as DEFAULT_TOOL_OUTPUT_MAX_LINES,oa as DefaultSummaryCompaction,jf as EMIT_VERDICT_TOOL_NAME,_ as ErrorCategory,pc as GENERATOR_AGENT_NAME,ha as KODAX_API_MIN_INTERVAL,p as KODAX_DEFAULT_PROVIDER,ba as KODAX_DEFAULT_TIMEOUT,ca as KODAX_HARD_TIMEOUT,fa as KODAX_MAX_INCOMPLETE_RETRIES,da as KODAX_MAX_RETRIES,aa as KODAX_MAX_TOKENS,o as KODAX_PROVIDERS,n as KODAX_PROVIDER_SNAPSHOTS,d as KODAX_REASONING_MODE_SEQUENCE,ea as KODAX_RETRY_BASE_DELAY,ga as KODAX_STAGGER_DELAY,td as KODAX_TOOLS,l as KodaXAnthropicCompatProvider,k as KodaXBaseProvider,Be as KodaXClient,a as KodaXError,pd as KodaXExtensionRuntime,m as KodaXOpenAICompatProvider,b as KodaXProviderError,c as KodaXRateLimitError,Y as KodaXSessionError,Z as KodaXTerminalError,X as KodaXToolError,Ha as LINEAGE_ENTRY_TYPES,Ja as LineageCompaction,Ia as LineageExtension,Ea as McpCapabilityProvider,Fa as McpManager,Da as McpServerRuntime,oc as PLANNER_AGENT_NAME,ia as PROMISE_PATTERN,Md as PROMPT_SECTION_REGISTRY,lf as PROTOCOL_EMITTER_TOOLS,be as ProviderRecoveryCoordinator,db as READ_DEFAULT_LIMIT,fb as READ_MAX_LINE_CHARS,eb as READ_PREFLIGHT_SIZE_BYTES,Jb as REPOINTEL_DEFAULT_ENDPOINT,qa as Runner,nc as SCOUT_AGENT_NAME,Ld as SYSTEM_PROMPT,$d as StableBoundaryTracker,sc as TASK_ENGINE_ROLE_AGENTS,Ke as TOOL_RESULT_TRUNCATION_GUARDRAIL_NAME,Uf as TRACING_ENV,qc as WORKER_AGENT_NAME,bd as _resetRuntimeForTesting,ed as activate,Ab as analyzeChangedScope,Uc as appendAuditEntry,Ra as appendSessionLineageLabel,Bc as applyAccountingDelta,Ge as applyFanoutBranchTransition,Sa as applySessionCompaction,$b as applyToolResultGuardrail,Ya as archiveOldIslands,He as assignFanoutBranchWorker,Bf as autoModeDenialShouldFallback,Kf as bashSignalCollector,Vf as bootstrapTracing,ve as boundedRevise,Gf as breakerShouldFallback,we as budgetCeiling,ke as buildAmaControllerDecision,Ec as buildBlockedGoal,Rd as buildCapabilityContextSections,nf as buildClassifierPrompt,Fc as buildCompleteGoal,Ac as buildCreatedGoal,ie as buildFallbackRoutingDecision,De as buildFanoutSchedulerPlan,Se as buildGoalRuntimeBinding,Rc as buildLlmReviewPrompt,Cc as buildPausedGoal,Vd as buildPromptMessageContent,le as buildPromptOverlay,Qd as buildPromptSnapshot,ce as buildProviderCapabilitySnapshot,je as buildProviderPolicyHintsForDecision,de as buildProviderPolicyPromptNotes,g as buildReasoningOverrideKey,zb as buildRepoIntelligenceContext,Ob as buildRepoIntelligenceIndex,wb as buildRepoOverview,Dc as buildResumedGoal,Wa as buildSessionTree,Td as buildSystemPrompt,Sd as buildSystemPromptSnapshot,Jf as checkAbsoluteDeny,Ud as checkIncompleteToolCalls,ne as checkPromiseSignal,pf as classify,cf as classifyBashCommand,$ as classifyError,_d as classifyResilienceError,wa as cleanupIncompleteToolCalls,j as clearReasoningOverride,Q as clearRuntimeModelProviders,Mf as collectAllSignals,ef as computeInputSignature,qf as computeRulesFingerprint,ad as configureRuntime,dc as convertCapabilityReadResult,cc as convertProviderSearchResults,Fe as countActiveFanoutBranches,Xa as countActiveLineageMessages,ka as countTokens,la as createAgent,yf as createAutoModeDenialTracker,Qf as createAutoModeToolGuardrail,bf as createBashClassifierConfig,Tf as createBashPrefixExtractor,Bd as createBuiltinToolDefinition,Ef as createCircuitBreaker,Nc as createCtxProxy,C as createCustomProvider,re as createDefaultCodingAgent,df as createDenialTracker,qd as createExtensionRuntime,Ce as createFanoutSchedulerInput,ma as createHandoff,na as createInMemorySession,Xe as createKodaXTaskRunner,ya as createMcpCapabilityId,Ga as createMcpManager,Ca as createMcpTransport,Nd as createPromptSection,me as createReasoningPlan,te as createSessionControl,Ma as createSessionLineage,Le as createToolResultTruncationGuardrail,xa as defaultMcpCacheDir,Kc as defaultPolicy,$c as disableSelfModify,nd as discoverMarkdownAgents,vc as drainPendingSwaps,kf as emitVerdict,ja as estimateTokens,ee as evaluateProviderPolicy,Hc as exec,Kd as executeTool,Za as extractArtifactLedger,Sf as extractCommandPrefix,Xd as extractComparableUserMessageText,bc as extractHtmlTitle,Wd as extractPromptComparableText,La as extractTitleFromMessages,Lf as fileSignalCollector,fc as finalizeRetrievalResult,kd as findByVersion,Ta as findPreviousUserEntryId,Va as forkSessionLineage,mc as formatAgentsForPrompt,Ze as formatParallelDispatchResult,gb as formatSize,Ka as generateSessionId,sd as getActiveExtensionRuntime,sa as getAgentConfigHome,ta as getAgentConfigPath,Dd as getAllRegisteredTools,ua as getAppDataDir,T as getAvailableProviderNames,Ad as getBuiltinRegisteredToolDefinition,zd as getBuiltinToolDefinition,K as getCustomModelCapabilities,E as getCustomProvider,H as getCustomProviderList,J as getCustomProviderModelDescriptors,I as getCustomProviderModels,G as getCustomProviderNames,hf as getDenialContext,Ee as getFanoutBranch,Tb as getImpactEstimate,kc as getKodaxGlobalDir,Ba as getMcpCachePaths,z as getModelCapabilities,Qb as getModuleContext,Sb as getProcessContext,q as getProvider,u as getProviderConfiguredCapabilityProfile,t as getProviderConfiguredReasoningCapability,v as getProviderList,s as getProviderModel,y as getProviderModelDescriptors,w as getProviderModels,xd as getRegisteredToolDefinition,Pb as getRepoIntelligenceIndex,xb as getRepoOverview,Ub as getRepoRoutingSignals,Hd as getRequiredToolParams,N as getRuntimeModelProvider,P as getRuntimeModelProviderNames,Na as getSessionLineagePath,Oa as getSessionMessagesFromLineage,Rb as getSymbolContext,vd as getTool,wd as getToolDefinition,yd as getToolRegistrations,_b as getToolResultPolicy,xc as goalTokenDelta,uc as hasPendingSwap,he as inferTaskType,pb as inspectEditFailure,Mb as inspectRepoIntelligenceRuntime,F as isCustomProviderName,gf as isDeniedRecently,S as isKnownProvider,Ye as isParallelDispatchDirective,r as isProviderConfigured,x as isProviderName,O as isRuntimeModelProviderName,Fd as isToolFileMutation,Gd as isToolMutation,Ed as isToolPlanModeAllowed,Gc as isValidTokenBudget,ld as listAll,W as listAllModelCapabilities,hd as listArtifacts,A as listBuiltinModelCapabilities,Cd as listBuiltinToolDefinitions,jd as listConstructed,L as listCustomProviderModelCapabilities,Jd as listToolDefinitions,Id as listTools,lc as loadAgentsFiles,md as loadAgentsFromMarkdown,uf as loadAutoRules,Oc as loadHandler,h as loadReasoningOverride,wc as makeDisabledGoalToolsContext,Je as markFanoutBranchCancelled,Ie as markFanoutBranchCompleted,_a as mergeArtifactLedger,Od as orderPromptSections,tf as parseAutoRules,of as parseClassifierOutput,ob as parseEditToolError,Sc as parseLlmReviewVerdict,za as parseMcpCapabilityId,Hf as parseModelSpec,kb as persistToolOutput,Vb as prewarmRepoIntelligenceCaches,id as readArtifact,Vc as readAuditEntries,Xc as readBudget,_c as readDisableState,Of as readSpeculativeWindowFromEnv,rf as readTrustState,e as reasoningCapabilityToOverride,ge as reasoningModeToDepth,f as reasoningOverrideToCapability,ae as reconstructMessagesWithToolGuard,Af as recordAutoModeAllow,zf as recordAutoModeBlock,Me as recordBlockerAttempt,Ff as recordBreakerError,ff as recordDenial,Ae as registerCodingInvariants,Ue as registerConfiguredMcpCapabilityProvider,D as registerCustomProviders,M as registerModelProvider,Ve as registerOfficialSandboxExtension,pa as registerPresetDispatcher,ud as registerTool,fd as rehydrateActiveArtifacts,Yc as remainingSelfModifyBudget,Bb as renderChangedScope,Ib as renderImpactEstimate,Fb as renderModuleContext,Hb as renderProcessContext,Pd as renderPromptSections,yb as renderRepoOverview,ec as renderRetrievalResult,Gb as renderSymbolContext,Ne as resetBlockerCounter,Zc as resetBudget,If as resolveClassifierModel,tc as resolveConstructedAgent,V as resolveModelCapabilities,R as resolveProvider,U as resolveProviderModelDescriptors,fe as resolveReasoningMode,Lb as resolveRepoIntelligenceMode,Kb as resolveRepoIntelligenceRuntimeConfig,Zd as resolveResilienceConfig,Pa as resolveSessionLineageTarget,xe as resolveToolCapability,gd as revoke,Ua as rewindSessionLineage,od as rollbackSelfModify,Pc as runAstRules,se as runKodaX,Tc as runLlmReview,Te as runManagedTask,We as runOrchestration,i as saveReasoningOverride,Aa as searchMcpCatalog,rd as setActiveExtensionRuntime,ra as setAgentConfigHome,Qa as setSessionLineageActiveEntry,zc as shouldFlipBudgetLimited,Pf as speculativeRace,cd as stage,ue as startKodaX,vf as stripAssistantText,ac as stripHtmlToText,dd as testArtifact,vb as toolAskUserQuestion,rb as toolBash,Eb as toolChangedDiff,Db as toolChangedScope,ic as toolCodeSearch,nb as toolEdit,sb as toolGlob,tb as toolGrep,Zb as toolImpactEstimate,qb as toolInsertAfterAnchor,Wb as toolModuleContext,ye as toolPermission,Yb as toolProcessContext,lb as toolRead,Cb as toolRepoOverview,jc as toolSemanticLookup,Xb as toolSymbolContext,ub as toolUndo,hc as toolWebFetch,gc as toolWebSearch,mb as toolWrite,hb as truncateHead,jb as truncateLine,ib as truncateTail,sf as trustProjectRules,yc as turnWallTimeDelta,va as validateAndFixToolHistory,B as validateCustomProviderConfig,_e as validateSubtaskIndependence,Qc as validateToolSchemaForProvider,Re as verifyGoalCompletion,Nb as warmRepoIntelligenceRuntime,Ic as webhook,Pe as withGoalBeforeNextTurn,Qe as withGoalStopHook,rc as workerAgent};
@@ -1,2 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{$,A,Aa,B,Ba,C,Ca,D,Da,E,Ea,F,Fa,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,a,aa,b,ba,c,ca,d,da,e,ea,f,fa,g,ga,h,ha,i,ia,j,ja,k,ka,l,la,m,ma,n,na,o,oa,p,pa,q,qa,r,ra,s,sa,t,ta,u,ua,v,va,w,wa,x,xa,y,ya,z,za}from"./chunk-PGF5EZ7C.js";import"./chunk-V4WSBIXB.js";export{wa as DEFAULT_COST_RATES,i as KODAX_API_MIN_INTERVAL,g as KODAX_CAPPED_MAX_OUTPUT_TOKENS,Q as KODAX_DEFAULT_PROVIDER,k as KODAX_DEFAULT_THINKING_BUDGETS,h as KODAX_ESCALATED_MAX_OUTPUT_TOKENS,f as KODAX_MAX_TOKENS,P as KODAX_PROVIDERS,O as KODAX_PROVIDER_SNAPSHOTS,j as KODAX_REASONING_MODE_SEQUENCE,l as KODAX_REASONING_SAFETY_RESERVE,I as KodaXAnthropicCompatProvider,C as KodaXBaseProvider,a as KodaXError,d as KodaXNetworkError,J as KodaXOpenAICompatProvider,b as KodaXProviderError,c as KodaXRateLimitError,e as KodaXToolCallIdError,v as buildReasoningOverrideKey,ya as calculateCost,r as clampThinkingBudget,y as clearReasoningOverride,pa as clearRuntimeModelProviders,za as createCostTracker,ba as createCustomProvider,A as extractHeadersFromError,Da as formatCost,Ea as formatCostReport,sa as getAvailableProviderNames,K as getCodexCliDefaultModel,M as getCodexCliKnownModels,xa as getCostRate,ja as getCustomModelCapabilities,da as getCustomProvider,ga as getCustomProviderList,ia as getCustomProviderModelDescriptors,ha as getCustomProviderModels,fa as getCustomProviderNames,p as getDefaultThinkingDepthForMode,L as getGeminiCliDefaultModel,N as getGeminiCliKnownModels,_ as getModelCapabilities,R as getProvider,V as getProviderConfiguredCapabilityProfile,U as getProviderConfiguredReasoningCapability,W as getProviderList,T as getProviderModel,Z as getProviderModelDescriptors,X as getProviderModels,m as getReasoningCapability,ma as getRuntimeModelProvider,oa as getRuntimeModelProviderNames,Ca as getSummary,E as insertCacheBoundary,F as isCacheBoundary,ea as isCustomProviderName,ra as isKnownProvider,S as isProviderConfigured,Y as isProviderName,n as isReasoningEnabled,na as isRuntimeModelProviderName,va as listAllModelCapabilities,$ as listBuiltinModelCapabilities,ka as listCustomProviderModelCapabilities,w as loadReasoningOverride,G as lowerCacheBoundaries,s as mapDepthToOpenAIReasoningEffort,B as normalizeCapabilityProfile,o as normalizeReasoningRequest,z as parseRetryAfter,D as parseToolInputWithSalvage,t as reasoningCapabilityToOverride,u as reasoningOverrideToCapability,Aa as recordRetry,Ba as recordUsage,ca as registerCustomProviders,la as registerModelProvider,ua as resolveModelCapabilities,qa as resolveProvider,ta as resolveProviderModelDescriptors,q as resolveThinkingBudget,x as saveReasoningOverride,Fa as sideQuery,H as stripCacheBoundaries,aa as validateCustomProviderConfig};