@kodax-ai/kodax 0.7.57 → 0.7.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +2032 -1920
  2. package/README.md +1228 -1219
  3. package/README_CN.md +647 -638
  4. package/dist/chunks/agent-QQCRBU4C.js +2 -0
  5. package/dist/chunks/argument-completer-7Q2T4YWA.js +2 -0
  6. package/dist/chunks/{chunk-LZKGOR2C.js → chunk-2UUOFT3Z.js} +1 -1
  7. package/dist/chunks/chunk-5GPJ6MB5.js +405 -0
  8. package/dist/chunks/chunk-BEXLPFFB.js +7 -0
  9. package/dist/chunks/chunk-D6QVXQNI.js +1 -0
  10. package/dist/chunks/chunk-D7RENPQQ.js +322 -0
  11. package/dist/chunks/chunk-PRIBJN5E.js +683 -0
  12. package/dist/chunks/chunk-S4GVQO3W.js +31 -0
  13. package/dist/chunks/chunk-SDSLWDAZ.js +17 -0
  14. package/dist/chunks/chunk-SVEJFERZ.js +326 -0
  15. package/dist/chunks/chunk-TBXP7FEG.js +52 -0
  16. package/dist/chunks/chunk-UA744TZM.js +2 -0
  17. package/dist/chunks/{chunk-YSVPF6SN.js → chunk-UXQILGRX.js} +262 -259
  18. package/dist/chunks/{chunk-4SHP3M67.js → chunk-YADBB5GN.js} +1 -1
  19. package/dist/chunks/chunk-Z23LK3IV.js +310 -0
  20. package/dist/chunks/chunk-Z3ZXV3DZ.js +18 -0
  21. package/dist/chunks/compaction-config-GQIPCVFD.js +2 -0
  22. package/dist/chunks/{construction-bootstrap-55B7Q5RX.js → construction-bootstrap-YON4ZEMO.js} +1 -1
  23. package/dist/chunks/dist-73L4OYPD.js +2 -0
  24. package/dist/chunks/dist-EZXBR6NW.js +2 -0
  25. package/dist/chunks/host-LO6ZNTMV.js +2 -0
  26. package/dist/chunks/paste-4THGP5XW.js +2 -0
  27. package/dist/chunks/run-manager-HTLXKU66.js +2 -0
  28. package/dist/chunks/utils-5XVW33SY.js +2 -0
  29. package/dist/index.d.ts +15 -14
  30. package/dist/index.js +2 -2
  31. package/dist/kodax_cli.js +1222 -1047
  32. package/dist/provider-capabilities.json +971 -986
  33. package/dist/sdk-agent.d.ts +156 -14
  34. package/dist/sdk-agent.js +1 -1
  35. package/dist/sdk-coding.d.ts +253 -188
  36. package/dist/sdk-coding.js +1 -1
  37. package/dist/sdk-llm.d.ts +66 -43
  38. package/dist/sdk-llm.js +1 -1
  39. package/dist/sdk-mcp.js +1 -1
  40. package/dist/sdk-media.d.ts +18 -2
  41. package/dist/sdk-media.js +1 -1
  42. package/dist/sdk-repl.d.ts +21 -22
  43. package/dist/sdk-repl.js +2 -2
  44. package/dist/sdk-session.d.ts +8 -7
  45. package/dist/sdk-session.js +1 -1
  46. package/dist/sdk-skills.d.ts +4 -231
  47. package/dist/sdk-skills.js +1 -1
  48. package/dist/types-chunks/{base.d-BnjQrSVf.d.ts → base.d-BA9Doaj_.d.ts} +3 -3
  49. package/dist/types-chunks/{bash-prefix-extractor.d-BgvMbfq6.d.ts → bash-prefix-extractor.d-BNdpV4Cf.d.ts} +515 -69
  50. package/dist/types-chunks/capability-learning.d-DRV80ISB.d.ts +29 -0
  51. package/dist/types-chunks/{cost-tracker.d-wRtyEW9d.d.ts → cost-tracker.d-CBLk1fiD.d.ts} +24 -2
  52. package/dist/types-chunks/{guardrail.d-C1DhxnvC.d.ts → guardrail.d-CNdKuSD_.d.ts} +4 -4
  53. package/dist/types-chunks/{process.d-BZncyzEj.d.ts → process.d-BOrAxjvM.d.ts} +188 -15
  54. package/dist/types-chunks/{resolver.d-ZvKQgl0X.d.ts → resolver.d-DFAKKUvt.d.ts} +87 -4
  55. package/dist/types-chunks/{capsule.d-DwJp5r63.d.ts → run-manager.d-CsJC9zYf.d.ts} +113 -5
  56. package/dist/types-chunks/{sdk-session-DAScB0rW.d.ts → sdk-session-ByZlwgdM.d.ts} +83 -9
  57. package/dist/types-chunks/{storage.d-CPvn9qI0.d.ts → storage.d-DHL3XpAL.d.ts} +2 -2
  58. package/dist/types-chunks/{guardrail.d-BP3yyr6u.d.ts → types.d-CE_Ter29.d.ts} +125 -3
  59. package/dist/types-chunks/{types.d-6VOXvF88.d.ts → types.d-Ci5YPFEh.d.ts} +39 -5
  60. package/dist/types-chunks/types.d-vJExiRje.d.ts +232 -0
  61. package/dist/types-chunks/{utils.d-CpgVIjYZ.d.ts → utils.d-D9FHU4wB.d.ts} +84 -6
  62. package/package.json +2 -2
  63. package/dist/chunks/agent-EHWQZA4C.js +0 -2
  64. package/dist/chunks/argument-completer-AYDAYGKL.js +0 -2
  65. package/dist/chunks/chunk-3WWPJGPQ.js +0 -2
  66. package/dist/chunks/chunk-KN6IJMTB.js +0 -636
  67. package/dist/chunks/chunk-MJFPFRGK.js +0 -423
  68. package/dist/chunks/chunk-N2N2W3AQ.js +0 -584
  69. package/dist/chunks/chunk-PCPFLPS4.js +0 -5
  70. package/dist/chunks/chunk-TCLSPUTR.js +0 -31
  71. package/dist/chunks/chunk-VACH6QWN.js +0 -315
  72. package/dist/chunks/compaction-config-TLDMFMZO.js +0 -2
  73. package/dist/chunks/dist-IE4HVWP7.js +0 -2
  74. package/dist/chunks/dist-IKOK2MJQ.js +0 -2
  75. package/dist/chunks/paste-WTL2XN7P.js +0 -2
  76. package/dist/chunks/utils-EJ2VCRTC.js +0 -2
  77. package/dist/types-chunks/types.d-D8WcfrOD.d.ts +0 -143
@@ -0,0 +1,7 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
+ import{a as o}from"./chunk-V4WSBIXB.js";var f=class extends Error{static{o(this,"KodaXMediaError")}code;detail;cause;constructor(t,n,r={}){super(n),this.name="KodaXMediaError",this.code=t,this.detail=r.detail,this.cause=r.cause}},R=class extends f{static{o(this,"ImageResizeError")}constructor(t,n={}){super(n.code??"IMAGE_TOO_LARGE",t,n),this.name="ImageResizeError"}};import ue from"node:path";var yt={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},ht={".3gp":"video/3gpp",".3gpp":"video/3gpp",".avi":"video/x-msvideo",".flv":"video/x-flv",".mov":"video/quicktime",".mp4":"video/mp4",".mpeg":"video/mpeg",".mpg":"video/mpeg",".webm":"video/webm",".wmv":"video/x-ms-wmv"};function ce(e){return yt[ue.extname(e).toLowerCase()]}o(ce,"inferImageMediaType");function fe(e){return ht[ue.extname(e).toLowerCase()]}o(fe,"inferVideoMediaType");function bt(e,t={}){let n=t.mediaType??ce(e);return{kind:"image",path:e,...n?{mediaType:n}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(bt,"createImageArtifactFromPath");function vt(e,t={}){if(t.mediaType!==void 0&&t.mimeType!==void 0&&t.mediaType!==t.mimeType)throw new f("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${t.mediaType} != ${t.mimeType}.`);return{kind:"file",path:e,...t.mediaType?{mediaType:t.mediaType}:{},...t.mimeType?{mimeType:t.mimeType}:{},...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(vt,"createFileArtifactFromPath");function kt(e,t={}){let n=t.mediaType??fe(e);if(!n)throw new f("UNSUPPORTED_MEDIA_TYPE",`Cannot infer video media type from path: ${e}.`);return{kind:"video",path:e,mediaType:n,...t.name?{name:t.name}:{},...t.source?{source:t.source}:{},...t.description?{description:t.description}:{}}}o(kt,"createVideoArtifactFromPath");import{Jimp as Ct}from"jimp";var pe=2e3,ge=Math.floor(3.75*1024*1024),Pt=[80,60,40];async function H(e,t={}){let n=t.maxDimension??pe,r=t.targetBytes??ge;if(e.length===0)throw new R("Empty image buffer.",{code:"IMAGE_DECODE_FAILED"});let i;try{i=await Ct.read(e)}catch(u){let y=u instanceof Error?u.message:String(u);throw new R(`Failed to decode image: ${y}`,{code:"IMAGE_DECODE_FAILED",cause:u})}let{width:s,height:d}=i.bitmap,a=Math.max(s,d);if(a>n){let u=n/a;i.resize({w:Math.max(1,Math.round(s*u)),h:Math.max(1,Math.round(d*u))})}let l=i.bitmap.width,m=i.bitmap.height;if(t.preferMediaType!=="image/jpeg"){let u=await i.getBuffer("image/png");if(u.length<=r)return{buffer:Buffer.from(u),mediaType:"image/png",width:l,height:m}}for(let u of Pt){let y=await i.getBuffer("image/jpeg",{quality:u});if(y.length<=r)return{buffer:Buffer.from(y),mediaType:"image/jpeg",width:l,height:m}}if(t.preferMediaType==="image/jpeg"){let u=await i.getBuffer("image/png");if(u.length<=r)return{buffer:Buffer.from(u),mediaType:"image/png",width:l,height:m}}throw new R(`Image still exceeds budget (${r} bytes raw) after PNG and JPEG q40 compression. Try a smaller image or take a fresh screenshot of a smaller region.`,{code:"IMAGE_TOO_LARGE"})}o(H,"normalizePastedImage");import{spawn as he}from"node:child_process";import{mkdtemp as Rt,readFile as Et,rm as Tt}from"node:fs/promises";import{tmpdir as xt}from"node:os";import me from"node:path";var be=5e3;async function ve(){switch(process.platform){case"darwin":return Mt();case"win32":return _t();case"linux":return Kt();default:throw new f("UNSUPPORTED_PLATFORM",`Clipboard image fallback is not supported on platform "${process.platform}".`)}}o(ve,"readClipboardImage");async function St(e={}){let t=await ve();return t?H(t,e):null}o(St,"readAndNormalizeClipboardImage");async function ke(e){let t=await Rt(me.join(xt(),"kodax-clip-")),n=me.join(t,"clip.png");try{return await e(n)}finally{await Tt(t,{recursive:!0,force:!0}).catch(r=>{})}}o(ke,"runWithTempPng");async function Mt(){return ke(async e=>{let t=`set png_data to (the clipboard as \xABclass PNGf\xBB)
3
+ set fh to open for access POSIX file "${e.replace(/"/g,'\\"')}" with write permission
4
+ write png_data to fh
5
+ close access fh`;return await Pe("osascript",["-e",t])?Ce(e):null})}o(Mt,"readMacClipboard");async function _t(){return ke(async e=>{let t=["Add-Type -AssemblyName System.Drawing | Out-Null","$img = Get-Clipboard -Format Image","if ($null -eq $img) { exit 1 }",`$img.Save('${e.replace(/'/g,"''")}', [System.Drawing.Imaging.ImageFormat]::Png)`].join("; ");return await Pe("powershell",["-NoProfile","-Command",t])?Ce(e):null})}o(_t,"readWinClipboard");async function Kt(){return await ye("wl-paste",["--type","image/png"])??ye("xclip",["-selection","clipboard","-t","image/png","-o"])}o(Kt,"readLinuxClipboard");async function Ce(e){try{let t=await Et(e);return t.length>0?t:null}catch(t){return null}}o(Ce,"readNonEmptyFile");function Pe(e,t){return new Promise(n=>{let r=!1,i=he(e,[...t],{stdio:"ignore"}),s=setTimeout(()=>{r||(r=!0,i.kill(),n(!1))},be);i.once("error",()=>{r||(r=!0,clearTimeout(s),n(!1))}),i.once("exit",d=>{r||(r=!0,clearTimeout(s),n(d===0))})})}o(Pe,"runCommand");function ye(e,t){return new Promise(n=>{let r=!1,i=[],s=he(e,[...t],{stdio:["ignore","pipe","ignore"]}),d=setTimeout(()=>{r||(r=!0,s.kill(),n(null))},be);s.stdout?.on("data",a=>i.push(a)),s.once("error",()=>{r||(r=!0,clearTimeout(d),n(null))}),s.once("exit",a=>{if(r)return;if(r=!0,clearTimeout(d),a!==0){n(null);return}let l=Buffer.concat(i);n(l.length>0?l:null)})})}o(ye,"collectStdoutBytes");import{createHash as wt}from"node:crypto";import{mkdir as At,readdir as Xt,stat as It,unlink as Ot,writeFile as Dt}from"node:fs/promises";import{tmpdir as Bt}from"node:os";import J from"node:path";var Re="KODAX_PASTE_TMP_DIR",Ee=1440*60*1e3;function Te(){return process.env[Re]??J.join(Bt(),"kodax-paste")}o(Te,"resolvePasteTmpDir");function Nt(e){let t=e?.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return t&&t.length>0?t:"paste"}o(Nt,"sanitizeFileNamePrefix");async function Lt(e,t={}){let n=t.directory??Te();await At(n,{recursive:!0});let r=e.mediaType==="image/jpeg"?".jpg":".png",i=wt("sha256").update(e.buffer).digest("hex").slice(0,16),s=`${Nt(t.fileNamePrefix)}-${i}${r}`,d=J.join(n,s);return await Dt(d,e.buffer),{type:"image",path:d,mediaType:e.mediaType}}o(Lt,"persistImageAsBlock");async function jt(e=Date.now()){let t=Te(),n;try{n=await Xt(t)}catch(s){return 0}let r=e-Ee,i=0;return await Promise.all(n.filter(s=>/-[0-9a-f]{16}\.(?:png|jpg)$/.test(s)).map(async s=>{let d=J.join(t,s);try{(await It(d)).mtimeMs<r&&(await Ot(d),i+=1)}catch(a){}})),i}o(jt,"prunePasteTmpDir");function j(e,t){return`${e}/${t??""}`}o(j,"capabilityCacheKey");function $t(e,t,n){return e[j(t,n)]?.rejected??[]}o($t,"getRejectedEfforts");function Ft(e,t,n,r,i,s){let d=j(t,n),a=e[d],l=a?.rejected.includes(r)?a.rejected:[...a?.rejected??[],r];return{...e,[d]:{rejected:l,source:i,updatedAt:s}}}o(Ft,"addRejectedEffort");function Ut(e,t,n){if(!t)return{};let r={...e};return delete r[j(t,n)],r}o(Ut,"removeCacheEntry");function Wt(e){if(!e||typeof e!="object")return{};let t={};for(let[n,r]of Object.entries(e)){if(!r||typeof r!="object")continue;let i=r,s=Array.isArray(i.rejected)?i.rejected.filter(l=>typeof l=="string"):[],d=i.source==="probed"?"probed":"observed",a=typeof i.updatedAt=="string"?i.updatedAt:"";t[n]={rejected:s,source:d,updatedAt:a}}return t}o(Wt,"sanitizeCapabilityCache");import{AsyncLocalStorage as Vt}from"node:async_hooks";var zt=new Vt,xe=8,Se=32;function qt(e){if(e===void 0)return;let t=Number.parseInt(e,10);return Number.isInteger(t)&&t>0?t:void 0}o(qt,"parsePositiveInt");function Gt(){let e=$()?.workflow?.maxConcurrency,t=typeof e=="number"&&Number.isInteger(e)&&e>0?e:qt(process.env.KODAX_WORKFLOW_MAX_CONCURRENCY)??xe;return Math.max(1,Math.min(Se,t))}o(Gt,"resolveWorkflowMaxConcurrency");function $(){return zt.getStore()}o($,"getRunScopedConfig");var A={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Me={...A,multimodalSupport:"image-input"},F={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},_e={...F,multimodalSupport:"image-input"};function X(e){return{transport:e.transport,conversationSemantics:e.conversationSemantics,mcpSupport:e.mcpSupport,contextFidelity:e.contextFidelity??"full",toolCallingFidelity:e.toolCallingFidelity??"full",sessionSupport:e.sessionSupport??"full",longRunningSupport:e.longRunningSupport??"full",multimodalSupport:e.multimodalSupport??"none",evidenceSupport:e.evidenceSupport??"full"}}o(X,"normalizeCapabilityProfile");import Ur from"@anthropic-ai/sdk";import{parse as _r}from"partial-json";import ni from"openai";import{ClientSideConnection as hi,PROTOCOL_VERSION as bi,ndJsonStream as vi}from"@agentclientprotocol/sdk";import Oe from"node:fs";import De from"node:os";import Be from"node:path";var go="gpt-5.4",mo="auto-gemini-3",yo=["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 Ne(e){let t=new Set,n=[];for(let r of e){let i=r.trim();if(!i)continue;let s=i.toLowerCase();t.has(s)||(t.add(s),n.push(i))}return n}o(Ne,"dedupePreserveOrder");function bo(){let e=Be.join(De.homedir(),".codex","config.toml");try{return Oe.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}o(bo,"readCodexConfiguredModel");function vo(){let e=Be.join(De.homedir(),".gemini","settings.json");try{let t=JSON.parse(Oe.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}o(vo,"readGeminiConfiguredModel");function x(){return bo()||go}o(x,"getCodexCliDefaultModel");function S(){return vo()||mo}o(S,"getGeminiCliDefaultModel");function I(){return Ne([x(),...yo])}o(I,"getCodexCliKnownModels");function O(){return Ne([S(),...ho])}o(O,"getGeminiCliKnownModels");var Zi=S(),es=O();var fs=x(),ps=I();import{existsSync as wo,readFileSync as Ao}from"node:fs";import M from"node:path";import{fileURLToPath as Xo}from"node:url";var Le=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],je=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","provider-budget","provider-toggle","prompt-only","none"],$e=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Fe=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Ue=["native","image-input-native","cli-bridge","image-input-cli-bridge"],We=["count-tokens","models-list","minimal-message","unsupported"];function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(k,"isPlainObject");function E(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}o(E,"requireString");function D(e,t){if(e!==void 0)return E(e,t)}o(D,"optionalString");function C(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}o(C,"optionalNumber");function g(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}o(g,"optionalBoolean");function Ve(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,r)=>E(n,`${t}[${r}]`))}}o(Ve,"optionalStringArray");function Po(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=E(i,`${t}.${r}`);return n}o(Po,"optionalStringMap");function Ro(e,t){if(e!==void 0){if(typeof e!="string"||!Fe.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Fe.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(Ro,"optionalReasoningPreset");function Q(e,t){if(typeof e!="string"||!Le.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Le.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Q,"requireReasoningCapability");function Eo(e,t){if(typeof e!="string"||!je.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${je.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Eo,"requireEffortStrategy");function To(e,t){if(e!==void 0){if(typeof e!="string"||!$e.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${$e.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(To,"optionalThinkingStrategy");function ze(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Eo(e.effortStrategy,`${t}.effortStrategy`),r=Ro(e.reasoningPreset,`${t}.reasoningPreset`),i=To(e.thinkingStrategy,`${t}.thinkingStrategy`),s=D(e.defaultEffort,`${t}.defaultEffort`),d=Po(e.effortAliases,`${t}.effortAliases`),a=Ve(e.disabledEfforts,`${t}.disabledEfforts`),l=Ve(e.localRejectEfforts,`${t}.localRejectEfforts`),m=g(e.allowCustomEffort,`${t}.allowCustomEffort`),u=g(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),y=g(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),p=g(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),P=g(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),T=g(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),h=g(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),L=g(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),c={effortStrategy:n};if(r!==void 0&&(c.reasoningPreset=r),i!==void 0&&(c.thinkingStrategy=i),s!==void 0&&(c.defaultEffort=s),d!==void 0&&(c.effortAliases=d),a!==void 0&&(c.disabledEfforts=a),l!==void 0&&(c.localRejectEfforts=l),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);c.supportedEfforts=e.supportedEfforts.map((b,v)=>{if(!k(b))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${v}] must be an object`);return{value:E(b.value,`${t}.supportedEfforts[${v}].value`),...D(b.description,`${t}.supportedEfforts[${v}].description`)!==void 0?{description:D(b.description,`${t}.supportedEfforts[${v}].description`)}:{},...g(b.isDefault,`${t}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:g(b.isDefault,`${t}.supportedEfforts[${v}].isDefault`)}:{},...g(b.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:g(b.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!k(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let b={};for(let[v,le]of Object.entries(e.budgetByEffort))b[v]=C(le,`${t}.budgetByEffort.${v}`)??0;c.budgetByEffort=b}return m!==void 0&&(c.allowCustomEffort=m),u!==void 0&&(c.supportsReasoningEffort=u),y!==void 0&&(c.supportsReasoningSummary=y),p!==void 0&&(c.supportsEncryptedReasoningReplay=p),P!==void 0&&(c.supportsAdaptiveThinking=P),T!==void 0&&(c.supportsManualThinkingBudget=T),h!==void 0&&(c.supportsDisabledThinking=h),L!==void 0&&(c.requiresEffortBetaHeader=L),c}o(ze,"validateReasoningProfile");function qe(e,t){let n=e.reasoningProfile,r=e.reasoningCapabilityV2;if(n!==void 0&&r!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?ze(n,`${t}.reasoningProfile`):ze(r,`${t}.reasoningCapabilityV2`)}o(qe,"validateReasoningProfileField");function xo(e,t){if(typeof e!="string"||!Ue.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ue.join(", ")}, got ${JSON.stringify(e)}`);return e}o(xo,"requireProfileName");function So(e,t){if(typeof e!="string"||!We.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${We.join(", ")}, got ${JSON.stringify(e)}`);return e}o(So,"requireVerifyStrategy");function Mo(e,t){if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=E(e.id,`${t}.id`),r=D(e.displayName,`${t}.displayName`),i=C(e.contextWindow,`${t}.contextWindow`),s=C(e.maxOutputTokens,`${t}.maxOutputTokens`),d=C(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),a=g(e.replayReasoningContent,`${t}.replayReasoningContent`),l=g(e.strictThinkingSignature,`${t}.strictThinkingSignature`),m=C(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),u=e.reasoningCapability===void 0?void 0:Q(e.reasoningCapability,`${t}.reasoningCapability`),y=qe(e,t),p={id:n};return r!==void 0&&(p.displayName=r),i!==void 0&&(p.contextWindow=i),s!==void 0&&(p.maxOutputTokens=s),d!==void 0&&(p.thinkingBudgetCap=d),u!==void 0&&(p.reasoningCapability=u),y!==void 0&&(p.reasoningProfile=y),a!==void 0&&(p.replayReasoningContent=a),l!==void 0&&(p.strictThinkingSignature=l),m!==void 0&&(p.streamMaxDurationMs=m),p}o(Mo,"validateModelDescriptor");function _o(e,t){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=Q(i,`${t}.${r}`);return n}o(_o,"validateModelReasoningCapabilities");function Ko(e,t){if(!k(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=g(e.cliBridge,`providers.${t}.cliBridge`),r=E(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=Q(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=qe(e,`providers.${t}`),d=xo(e.capabilityProfile,`providers.${t}.capabilityProfile`),a=So(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&a!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${a}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let l=C(e.contextWindow,`providers.${t}.contextWindow`),m=C(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),u=C(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),y=g(e.supportsThinking,`providers.${t}.supportsThinking`),p=_o(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),P=D(e.model,`providers.${t}.model`);if(n&&(P!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&P===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let T;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);T=e.models.map((L,c)=>Mo(L,`providers.${t}.models[${c}]`))}let h={apiKeyEnv:r,reasoningCapability:i,capabilityProfile:d,verifyStrategy:a};return s!==void 0&&(h.reasoningProfile=s),P!==void 0&&(h.model=P),T!==void 0&&(h.models=T),l!==void 0&&(h.contextWindow=l),m!==void 0&&(h.maxOutputTokens=m),u!==void 0&&(h.thinkingBudgetCap=u),y!==void 0&&(h.supportsThinking=y),p!==void 0&&(h.modelReasoningCapabilities=p),n&&(h.cliBridge=!0),h}o(Ko,"validateProviderEntry");function Ge(e){if(!k(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=E(e.updatedAt,"updatedAt");if(!k(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[r,i]of Object.entries(e.providers))n[r]=Ko(i,r);return{version:1,updatedAt:t,providers:n}}o(Ge,"validateProviderCapabilitiesJson");var Io=Object.freeze({native:A,"image-input-native":Me,"cli-bridge":F,"image-input-cli-bridge":_e}),z=null;function Oo(){if(process.env.KODAX_BUNDLED==="true")return M.join(M.dirname(process.execPath),"provider-capabilities.json");let e=M.dirname(Xo(import.meta.url)),t=[M.join(e,"provider-capabilities.json"),M.join(M.dirname(e),"provider-capabilities.json")];for(let n of t)if(wo(n))return n;return t[0]}o(Oo,"resolveJsonPath");function Do(e){if(e.models){for(let t of e.models)t.reasoningProfile&&He(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&He(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}o(Do,"deepFreezeSnapshot");function He(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}o(He,"freezeReasoningProfile");function Bo(e){if(e==="gemini-cli"){let t=S();return{model:t,models:O().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=x();return{model:t,models:I().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}o(Bo,"resolveCliBridgeModels");function No(e,t){let n=Io[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let i=Bo(e),s={model:i.model,models:i.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let r={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(r.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(r.models=t.models),t.modelReasoningCapabilities!==void 0&&(r.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(r.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(r.maxOutputTokens=t.maxOutputTokens),t.thinkingBudgetCap!==void 0&&(r.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(r.supportsThinking=t.supportsThinking),r}o(No,"buildSnapshot");function Je(){if(z)return z;let e=Oo(),t;try{let i=Ao(e,"utf8");t=JSON.parse(i)}catch(i){let s=i instanceof Error?i.message:String(i);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let n=Ge(t),r={};for(let[i,s]of Object.entries(n.providers))r[i]=Do(No(i,s));return z=Object.freeze(r),z}o(Je,"getProviderSnapshots");import Ds from"@anthropic-ai/sdk";var _=Je();var Ye=process.env.KODAX_PROVIDER??"zhipu-coding";var B=["image/png","image/jpeg","image/webp","image/gif"],N=["video/mp4","video/mpeg","video/quicktime","video/x-msvideo","video/x-flv","video/webm","video/x-ms-wmv","video/3gpp"],un=[],cn=new Set(["anthropic","openai"]),fn=new Set(["kimi-code/kimi-for-coding","kimi/kimi-k2.5","kimi/kimi-k2.6","kimi/kimi-k2.7-code","minimax-coding/minimax-m3","minimax/minimax-m3","mimo-coding/mimo-v2.5","mimo/mimo-v2.5"]);function re(e){return{nativeSupported:!1,sdkSupported:!1,status:"unsupported",mediaTypes:[],maxCount:0,reason:e}}o(re,"unsupported");function pn(e){return{nativeSupported:!0,sdkSupported:!0,status:"supported",mediaTypes:B,nativeMediaTypes:B,reason:e}}o(pn,"supportedImage");function gn(e){return{nativeSupported:!0,sdkSupported:!1,status:"provider-native-unwired",mediaTypes:[],nativeMediaTypes:N,maxCount:0,reason:e}}o(gn,"nativeVideoUnwired");function mn(e){return e.trim().toLowerCase()}o(mn,"normalizeProvider");function yn(e){return _[e]?.model}o(yn,"resolveProviderDefaultModel");function hn(e,t){if(!t)return;let n=t.trim().toLowerCase();if(e==="kimi"){if(n==="k2.5")return"kimi-k2.5";if(n==="k2.6")return"kimi-k2.6";if(n==="k2.7-code")return"kimi-k2.7-code"}return(e==="minimax-coding"||e==="minimax")&&n==="minimax-m3"?"minimax-m3":n}o(hn,"normalizeModel");function bn(e){if(!cn.has(e))return!1;let t=_[e];return t?X(t.capabilityProfile).multimodalSupport!=="none":!1}o(bn,"hasOfficialImageSupport");function vn(e,t){let n=hn(e,t);if(!n)return!1;let r=`${e}/${n}`;return fn.has(r)}o(vn,"hasSourceBackedNativeMedia");function kn(e,t,n){if(n)return"source-backed";if(t){if(e==="openai")return"openai-official";if(e==="anthropic")return"anthropic-official"}}o(kn,"resolveImageCapabilityRoute");function Cn(e){switch(e){case"openai-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but OpenAI requires non-animated GIF semantics.";case"anthropic-official":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif, but Anthropic uses only the first frame of animated GIFs.";case"source-backed":return"Model route supports KodaX image input. Direct-path image/gif is sent as image/gif; animated-GIF interpretation is provider-owned."}}o(Cn,"imageCapabilityReason");function ie(e){let t=mn(e.provider),n=e.model?.trim()||yn(t),r=bn(t),i=vn(t,n),s=kn(t,r,i),d=s!==void 0,a=i;return{text:!0,image:d?pn(Cn(s)):re("No verified KodaX image-input route for this provider/model."),video:a?gn("Model route is native-video capable, but KodaX SDK video sending is not wired yet. Reject or downgrade before send."):re("No verified native video route for this provider/model."),file:re("File artifact contract is stable, but KodaX SDK file sending/extraction is not wired yet. Reject or downgrade before send.")}}o(ie,"getModelInputCapabilities");function Pn(e){return B.includes(e)}o(Pn,"isKnownImageMediaType");function Rn(e){return N.includes(e)}o(Rn,"isKnownVideoMediaType");function se(e){return`${e.provider}${e.model?`/${e.model}`:""}`}o(se,"routeLabel");function ae(e){return e.reason?`${e.status}: ${e.reason}`:e.status}o(ae,"capabilityDetail");function de(e,t){if(e.length===0)return;let n=ie(t);for(let r of e){let i=r;if(i.kind==="image"){if(!n.image.nativeSupported||!n.image.sdkSupported)throw new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume image artifacts: ${se(t)}.`,{detail:ae(n.image)});if(typeof i.mediaType=="string"&&!Pn(i.mediaType))throw new f("UNSUPPORTED_MEDIA_TYPE",`Unsupported image media type: ${i.mediaType}.`);continue}throw i.kind==="video"?typeof i.mediaType!="string"||!Rn(i.mediaType)?new f("UNSUPPORTED_MEDIA_TYPE",`Unsupported video media type: ${String(i.mediaType)}.`,{detail:`Supported video media types: ${N.join(", ")}`}):new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume video artifacts through this SDK runtime: ${se(t)}.`,{detail:ae(n.video)}):i.kind==="file"?typeof i.mediaType=="string"&&typeof i.mimeType=="string"&&i.mediaType!==i.mimeType?new f("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${i.mediaType} != ${i.mimeType}.`):new f("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume file artifacts through this SDK runtime: ${se(t)}.`,{detail:ae(n.file)}):new f("MODEL_INPUT_UNSUPPORTED",`Unsupported input artifact kind: ${String(i.kind)}.`)}}o(de,"validateInputArtifactsForModel");var K={user:0,background:1};function En(e,t){return K[e]<=K[t]}o(En,"priorityWithinMax");function pt(e,t){return!(e.agentId!==t.agentId||!En(e.priority,t.maxPriority)||t.mode!==void 0&&e.mode!==t.mode||t.id!==void 0&&e.id!==t.id||t.predicate&&!t.predicate(e))}o(pt,"matchesFilter");var G=class{static{o(this,"MessageQueue")}messages=[];nextSeq=1;listeners=new Set;snapshotRef=Object.freeze([]);notify(t){this.snapshotRef=Object.freeze([...this.messages]);for(let n of this.listeners)try{n(t)}catch{}}subscribe=o(t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}),"subscribe");getSnapshot=o(()=>this.snapshotRef,"getSnapshot");enqueue(t){let n=`msg-${this.nextSeq++}`,r={id:n,priority:t.priority,mode:t.mode,content:t.content,agentId:t.agentId,inputArtifacts:t.inputArtifacts,enqueuedAt:Date.now()};return this.messages=[...this.messages,r],this.notify({kind:"enqueued",message:r}),n}dequeue(t){let n=[];for(let a=0;a<this.messages.length;a++){let l=this.messages[a];l&&pt(l,t)&&n.push({originalIndex:a,message:l})}n.sort((a,l)=>{let m=K[a.message.priority]-K[l.message.priority];return m!==0?m:a.originalIndex-l.originalIndex});let r=t.limit,i=typeof r=="number"&&n.length>r?n.slice(0,r):n;if(i.length===0)return[];let s=new Set(i.map(a=>a.originalIndex));this.messages=this.messages.filter((a,l)=>!s.has(l));let d=i.map(a=>a.message);return this.notify({kind:"dequeued",messages:d}),d}peek(t){let n=[];for(let s=0;s<this.messages.length;s++){let d=this.messages[s];d&&pt(d,t)&&n.push({originalIndex:s,message:d})}n.sort((s,d)=>{let a=K[s.message.priority]-K[d.message.priority];return a!==0?a:s.originalIndex-d.originalIndex});let r=t.limit;return(typeof r=="number"&&n.length>r?n.slice(0,r):n).map(s=>s.message)}size(){return this.messages.length}count(t){return this.peek(t).length}has(t){return this.count(t)>0}clear(){if(this.messages.length===0)return;let t=this.messages;this.messages=[],this.notify({kind:"cleared",messages:t})}},q;function w(){return q||(q=new G),q}o(w,"getMessageQueue");function Tn(){q=void 0}o(Tn,"_resetMessageQueueForTests");var gt=new Set;function mt(e){return e.some(n=>gt.has(n))?"background":"user"}o(mt,"midTurnDrainPriority");function xn(e){let t=mt(e.lastTurnToolNames);return w().dequeue({agentId:e.agentId,maxPriority:t,limit:e.limit})}o(xn,"maybeDrainMidTurn");function Sn(e){let t=`<task-completed task_id="${e.taskId}">
6
+ ${e.summary}
7
+ </task-completed>`;return w().enqueue({priority:"background",mode:"task-notification",agentId:e.parentAgentId,content:t})}o(Sn,"enqueueChildTaskNotification");function Mn(e){return de(e.inputArtifacts??[],e),w().enqueue({priority:e.priority??"user",mode:"prompt",content:e.content,agentId:e.agentId,inputArtifacts:e.inputArtifacts})}o(Mn,"enqueueWithArtifacts");export{f as a,R as b,ce as c,fe as d,bt as e,vt as f,kt as g,pe as h,ge as i,H as j,ve as k,St as l,Re as m,Ee as n,Lt as o,jt as p,$t as q,Ft as r,Ut as s,Wt as t,Gt as u,B as v,N as w,un as x,ie as y,de as z,G as A,w as B,Tn as C,gt as D,mt as E,xn as F,Sn as G,Mn as H};
@@ -0,0 +1 @@
1
+ // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.