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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +85 -62
  3. package/README_CN.md +57 -67
  4. package/config-templates/config.example.jsonc +0 -14
  5. package/dist/chunks/{agent-7N427EVB.js → agent-J7SHFM5N.js} +1 -1
  6. package/dist/chunks/argument-completer-ZJQOWTIS.js +2 -0
  7. package/dist/chunks/{chunk-ABZDFK2X.js → chunk-2GV6MQ4T.js} +14 -14
  8. package/dist/chunks/{chunk-6QI3GOYG.js → chunk-3PS3YEDS.js} +1 -1
  9. package/dist/chunks/chunk-4VJMQDTH.js +417 -0
  10. package/dist/chunks/{chunk-NI7PBPUR.js → chunk-5DSUVP46.js} +1 -1
  11. package/dist/chunks/chunk-5P7RTSZT.js +21 -0
  12. package/dist/chunks/{chunk-XXNR6S4Q.js → chunk-6ZAQKFIM.js} +1 -1
  13. package/dist/chunks/chunk-7V2QBZ73.js +137 -0
  14. package/dist/chunks/{chunk-C7U542KM.js → chunk-F7DHZH6T.js} +1 -1
  15. package/dist/chunks/{chunk-7IMWOR34.js → chunk-HSRYDDPF.js} +1 -1
  16. package/dist/chunks/chunk-K3DQGSQU.js +372 -0
  17. package/dist/chunks/chunk-NO23K2CB.js +2 -0
  18. package/dist/chunks/{chunk-NKT3B3DR.js → chunk-OT5WHAX4.js} +1 -1
  19. package/dist/chunks/{chunk-YEAUDI6U.js → chunk-QGWHJIO4.js} +1 -1
  20. package/dist/chunks/chunk-QOFFAY5C.js +261 -0
  21. package/dist/chunks/{chunk-4PFZ7BEE.js → chunk-QVDTORL3.js} +11 -11
  22. package/dist/chunks/chunk-QZ4B4AWG.js +473 -0
  23. package/dist/chunks/chunk-RXDS6CNA.js +355 -0
  24. package/dist/chunks/{chunk-WV3DJVW4.js → chunk-VDGPJQL7.js} +135 -135
  25. package/dist/chunks/chunk-VEZ4WHPN.js +641 -0
  26. package/dist/chunks/chunk-ZPPAT25E.js +5 -0
  27. package/dist/chunks/chunk-ZQYWDI4O.js +1 -0
  28. package/dist/chunks/chunk-ZS2GUADU.js +498 -0
  29. package/dist/chunks/{chunk-GN2IY5YE.js → chunk-ZTYZYXGV.js} +1 -1
  30. package/dist/chunks/{chunk-EM4XJBTK.js → chunk-ZZQ4GDVU.js} +1 -1
  31. package/dist/chunks/{client-6WZZTTSV.js → client-MXOJ5XUN.js} +1 -1
  32. package/dist/chunks/{compaction-config-ZMEJU4U7.js → compaction-config-5VZSGKBQ.js} +1 -1
  33. package/dist/chunks/{construction-bootstrap-RX4DMHI7.js → construction-bootstrap-U2ZU2WAT.js} +1 -1
  34. package/dist/chunks/dist-CSLNWLOE.js +2 -0
  35. package/dist/chunks/dist-XXMJMJDU.js +2 -0
  36. package/dist/chunks/host-RUXYZFYN.js +2 -0
  37. package/dist/chunks/readline-helpers-JCVULR4C.js +2 -0
  38. package/dist/chunks/run-manager-DRIM5VNE.js +2 -0
  39. package/dist/chunks/utils-MQEBGKIX.js +2 -0
  40. package/dist/index.d.ts +63 -30
  41. package/dist/index.js +10 -6
  42. package/dist/kodax_bootstrap.js +1 -1
  43. package/dist/kodax_cli.js +1745 -1734
  44. package/dist/kodax_resume.js +32 -35
  45. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  46. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  47. package/dist/native/win32-x64/manifest.json +2 -2
  48. package/dist/sandbox-network-broker.js +77 -77
  49. package/dist/sdk-a2a.d.ts +33 -18
  50. package/dist/sdk-a2a.js +8 -9
  51. package/dist/sdk-agent.d.ts +33 -26
  52. package/dist/sdk-agent.js +1 -1
  53. package/dist/sdk-client.d.ts +40 -0
  54. package/dist/sdk-client.js +2 -0
  55. package/dist/sdk-coding.d.ts +87 -499
  56. package/dist/sdk-coding.js +1 -1
  57. package/dist/sdk-experimental-memory.d.ts +3 -4
  58. package/dist/sdk-experimental-memory.js +1 -1
  59. package/dist/sdk-llm.d.ts +11 -9
  60. package/dist/sdk-llm.js +1 -1
  61. package/dist/sdk-mcp.d.ts +3 -3
  62. package/dist/sdk-mcp.js +1 -1
  63. package/dist/sdk-media.d.ts +3 -1
  64. package/dist/sdk-media.js +1 -1
  65. package/dist/sdk-repl.d.ts +317 -70
  66. package/dist/sdk-repl.js +2 -2
  67. package/dist/sdk-runtime.d.ts +580 -452
  68. package/dist/sdk-runtime.js +1 -1
  69. package/dist/sdk-sandbox.js +1 -1
  70. package/dist/sdk-session.d.ts +13 -9
  71. package/dist/sdk-session.js +1 -1
  72. package/dist/sdk-skills.js +1 -1
  73. package/dist/semantic-worker.js +57 -57
  74. package/dist/types-chunks/{base.d-Bt9lhwSV.d.ts → base.d-ZBOdjDUT.d.ts} +2 -1
  75. package/dist/types-chunks/{bash-prefix-extractor.d-DWFIMg0v.d.ts → bash-prefix-extractor.d-DvswAXKS.d.ts} +136 -66
  76. package/dist/types-chunks/{capability-learning.d-gRtO03f6.d.ts → capability-learning.d-B4pxKwP4.d.ts} +1 -1
  77. package/dist/types-chunks/{capability.d-Ch5Vos33.d.ts → capability.d-DOF3r0fJ.d.ts} +1 -1
  78. package/dist/types-chunks/{capsule.d-Dj1n6s0Y.d.ts → capsule.d-B4atvlxE.d.ts} +7 -19
  79. package/dist/types-chunks/client-contract-A1jdk6xz.d.ts +1993 -0
  80. package/dist/types-chunks/{controller.d-C0IM1Tud.d.ts → controller.d-BkUJ_3sl.d.ts} +1 -1
  81. package/dist/types-chunks/{controller.d-J2t1q8Ly.d.ts → controller.d-yyKajPTi.d.ts} +140 -1380
  82. package/dist/types-chunks/{cost-tracker.d-BWI4lFWn.d.ts → cost-tracker.d-BeaenODW.d.ts} +2 -47
  83. package/dist/types-chunks/{history-retrieval.d-CPN5PMBV.d.ts → history-retrieval.d-JdFfkeF3.d.ts} +2 -2
  84. package/dist/types-chunks/{manager.d-rtmywU9M.d.ts → manager.d-C_20XqCV.d.ts} +8 -1
  85. package/dist/types-chunks/manifest.d-Bw2i-zQi.d.ts +18 -0
  86. package/dist/types-chunks/provider-credential-context.d-BH2OaB1b.d.ts +47 -0
  87. package/dist/types-chunks/provider-request-observation.d-jL8T6wVO.d.ts +34 -0
  88. package/dist/types-chunks/{public-api.d-amBop8Nk.d.ts → public-api.d-Cq8ILMte.d.ts} +52 -13
  89. package/dist/types-chunks/{resolver.d-BrwLoWNr.d.ts → resolver.d-DLY01RHx.d.ts} +4 -2
  90. package/dist/types-chunks/{types.d-CSv0_cZC.d.ts → review-inbox.d-BeaLRNHx.d.ts} +251 -3
  91. package/dist/types-chunks/{shell-command-sets.d-oejwpP_7.d.ts → review-packet.d-D4bbTbq3.d.ts} +46 -3
  92. package/dist/types-chunks/{exec-policy.d-BPESl90L.d.ts → run-manager.d-C7Q71rin.d.ts} +385 -62
  93. package/dist/types-chunks/runtime-client-info-CxnlZlW5.d.ts +175 -0
  94. package/dist/types-chunks/{sdk-session-B6XjHNU1.d.ts → sdk-session-BDFjCpDn.d.ts} +12 -4
  95. package/dist/types-chunks/{side-query.d-DHWG1JZg.d.ts → side-query.d-DTrhVd_r.d.ts} +4 -3
  96. package/dist/types-chunks/trusted-repl-entry-vbUM8R6P.d.ts +445 -0
  97. package/dist/types-chunks/{types.d-CtO8mR1s.d.ts → types.d-BJTN-RZr.d.ts} +5 -5
  98. package/dist/types-chunks/{types.d-BrQMB-hy.d.ts → types.d-BjOq57-z.d.ts} +6 -0
  99. package/dist/types-chunks/types.d-o7t9dds4.d.ts +1484 -0
  100. package/dist/types-chunks/{utils.d-DcznBeQ3.d.ts → utils.d-CWiMhFfu.d.ts} +202 -36
  101. package/docs/CLIENT_CONTRACT.md +441 -0
  102. package/docs/SDK_MIGRATION.md +123 -0
  103. package/docs/SPACE_SDK_SEAMS.md +139 -0
  104. package/package.json +10 -5
  105. package/public_docs/README.md +12 -133
  106. package/public_docs/configuration/config-files.md +8 -14
  107. package/public_docs/sdk/embedder-guide.md +494 -420
  108. package/dist/chunks/argument-completer-FAIHW7HZ.js +0 -2
  109. package/dist/chunks/chunk-66XN5AFU.js +0 -417
  110. package/dist/chunks/chunk-7O2AIFNE.js +0 -373
  111. package/dist/chunks/chunk-DSXUXUZG.js +0 -5
  112. package/dist/chunks/chunk-GYO73UYQ.js +0 -275
  113. package/dist/chunks/chunk-HPCS3LZ5.js +0 -324
  114. package/dist/chunks/chunk-HZYRLIOC.js +0 -137
  115. package/dist/chunks/chunk-SC2ELSUS.js +0 -675
  116. package/dist/chunks/chunk-TEUD5VPJ.js +0 -471
  117. package/dist/chunks/chunk-TYZ2ZAYL.js +0 -487
  118. package/dist/chunks/dist-3UCCMCYR.js +0 -2
  119. package/dist/chunks/dist-F5IWZSAY.js +0 -2
  120. package/dist/chunks/host-W2JJ3V3Q.js +0 -2
  121. package/dist/chunks/run-manager-RBWU3EVE.js +0 -2
  122. package/dist/chunks/utils-DJ4ZFJGL.js +0 -2
  123. package/dist/runtime-worker.js +0 -5381
  124. package/dist/types-chunks/review-inbox.d-CTeUIKda.d.ts +0 -225
  125. package/dist/types-chunks/run-manager.d-hm1XgEou.d.ts +0 -94
  126. package/dist/types-chunks/trusted-repl-entry-D0w5M0UZ.d.ts +0 -323
  127. package/dist/types-chunks/types.d-B1l9pWyX.d.ts +0 -146
@@ -1,5 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{Da as _,Va as O,ea as R}from"./chunk-HZYRLIOC.js";import{a as r}from"./chunk-ONUPGMER.js";var g={user:0,background:1};function te(t,e){return g[t]<=g[e]}r(te,"priorityWithinMax");function N(t,e){return!(t.agentId!==e.agentId||!te(t.priority,e.maxPriority)||e.mode!==void 0&&t.mode!==e.mode||e.id!==void 0&&t.id!==e.id||e.predicate&&!e.predicate(t))}r(N,"matchesFilter");var E=class{static{r(this,"MessageQueue")}messages=[];nextSeq=1;listeners=new Set;snapshotRef=Object.freeze([]);notify(e){this.snapshotRef=Object.freeze([...this.messages]);for(let i of this.listeners)try{i(e)}catch{}}subscribe=r(e=>(this.listeners.add(e),()=>{this.listeners.delete(e)}),"subscribe");getSnapshot=r(()=>this.snapshotRef,"getSnapshot");enqueue(e){let i=`msg-${this.nextSeq++}`,n={id:i,priority:e.priority,mode:e.mode,delivery:e.delivery,content:e.content,agentId:e.agentId,inputArtifacts:e.inputArtifacts,taskResult:e.taskResult,enqueuedAt:Date.now()};return this.messages=[...this.messages,n],this.notify({kind:"enqueued",message:n}),i}dequeue(e){let i=[];for(let s=0;s<this.messages.length;s++){let m=this.messages[s];m&&N(m,e)&&i.push({originalIndex:s,message:m})}i.sort((s,m)=>{let l=g[s.message.priority]-g[m.message.priority];return l!==0?l:s.originalIndex-m.originalIndex});let n=e.limit,o=typeof n=="number"&&i.length>n?i.slice(0,n):i;if(o.length===0)return[];let a=new Set(o.map(s=>s.originalIndex));this.messages=this.messages.filter((s,m)=>!a.has(m));let d=o.map(s=>s.message);return this.notify({kind:"dequeued",messages:d}),d}peek(e){let i=[];for(let a=0;a<this.messages.length;a++){let d=this.messages[a];d&&N(d,e)&&i.push({originalIndex:a,message:d})}i.sort((a,d)=>{let s=g[a.message.priority]-g[d.message.priority];return s!==0?s:a.originalIndex-d.originalIndex});let n=e.limit;return(typeof n=="number"&&i.length>n?i.slice(0,n):i).map(a=>a.message)}size(){return this.messages.length}count(e){return this.peek(e).length}has(e){return this.count(e)>0}clear(){if(this.messages.length===0)return;let e=this.messages;this.messages=[],this.notify({kind:"cleared",messages:e})}},w;function h(){return w||(w=new E),w}r(h,"getMessageQueue");function ie(){w=void 0}r(ie,"_resetMessageQueueForTests");function k(t,e){return t?`actor:${t}:${e}`:e==="/root"?void 0:e}r(k,"actorQueueId");var f=new Map;function re(t){f.set(t,(f.get(t)??0)+1);let e=!1;return()=>{if(e)return;e=!0;let i=f.get(t);i===void 0||i<=1?f.delete(t):f.set(t,i-1)}}r(re,"registerActiveRootQueueRoute");function x(){if(f.size!==0){if(f.size===1)return f.keys().next().value;throw new Error("Cannot infer queued follow-up target: multiple Actor root sessions are active. Pass sessionId or agentId explicitly.")}}r(x,"resolveActiveRootQueueRoute");function oe(){f.clear()}r(oe,"_resetActiveRootQueueRoutesForTests");var $=new Set(["wait_agent"]);function C(t){return t.some(i=>$.has(i))?"background":"user"}r(C,"midTurnDrainPriority");function F(t,e){let i=new Set,n=!1;for(let o of t)o.agentId!==e||o.priority!=="user"||o.mode!=="prompt"||(o.delivery==="host"?n=!0:n||i.add(o.id));return o=>o.delivery==="host"?!1:o.priority!=="user"||o.mode!=="prompt"?!0:i.has(o.id)}r(F,"createRuntimeDeliveryPredicate");function ne(t){let e=C(t.lastTurnToolNames),i=h();return i.dequeue({agentId:t.agentId,maxPriority:e,limit:t.limit,predicate:F(i.getSnapshot(),t.agentId)})}r(ne,"maybeDrainMidTurn");var c=class extends Error{static{r(this,"KodaXMediaError")}code;detail;cause;constructor(e,i,n={}){super(i),this.name="KodaXMediaError",this.code=e,this.detail=n.detail,this.cause=n.cause}},p=class extends c{static{r(this,"ImageResizeError")}constructor(e,i={}){super(i.code??"IMAGE_TOO_LARGE",e,i),this.name="ImageResizeError"}};import U from"node:path";var ae={".gif":"image/gif",".jpeg":"image/jpeg",".jpg":"image/jpeg",".png":"image/png",".webp":"image/webp"},se={".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 q(t){return ae[U.extname(t).toLowerCase()]}r(q,"inferImageMediaType");function K(t){return se[U.extname(t).toLowerCase()]}r(K,"inferVideoMediaType");function de(t,e={}){let i=e.mediaType??q(t);return{kind:"image",path:t,...i?{mediaType:i}:{},...e.source?{source:e.source}:{},...e.description?{description:e.description}:{}}}r(de,"createImageArtifactFromPath");function me(t,e={}){if(e.mediaType!==void 0&&e.mimeType!==void 0&&e.mediaType!==e.mimeType)throw new c("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${e.mediaType} != ${e.mimeType}.`);return{kind:"file",path:t,...e.mediaType?{mediaType:e.mediaType}:{},...e.mimeType?{mimeType:e.mimeType}:{},...e.name?{name:e.name}:{},...e.source?{source:e.source}:{},...e.description?{description:e.description}:{}}}r(me,"createFileArtifactFromPath");function ue(t,e={}){let i=e.mediaType??K(t);if(!i)throw new c("UNSUPPORTED_MEDIA_TYPE",`Cannot infer video media type from path: ${t}.`);return{kind:"video",path:t,mediaType:i,...e.name?{name:e.name}:{},...e.source?{source:e.source}:{},...e.description?{description:e.description}:{}}}r(ue,"createVideoArtifactFromPath");var L=2e3,z=Math.floor(3.75*1024*1024),ce=[80,60,40];async function A(t,e={}){let i=e.maxDimension??L,n=e.targetBytes??z;if(t.length===0)throw new p("Empty image buffer.",{code:"IMAGE_DECODE_FAILED"});let o;try{let{Jimp:u}=await import("jimp");o=await u.read(t)}catch(u){let I=u instanceof Error?u.message:String(u);throw new p(`Failed to decode image: ${I}`,{code:"IMAGE_DECODE_FAILED",cause:u})}let{width:a,height:d}=o.bitmap,s=Math.max(a,d);if(s>i){let u=i/s;o.resize({w:Math.max(1,Math.round(a*u)),h:Math.max(1,Math.round(d*u))})}let m=o.bitmap.width,l=o.bitmap.height;if(e.preferMediaType!=="image/jpeg"){let u=await o.getBuffer("image/png");if(u.length<=n)return{buffer:Buffer.from(u),mediaType:"image/png",width:m,height:l}}for(let u of ce){let I=await o.getBuffer("image/jpeg",{quality:u});if(I.length<=n)return{buffer:Buffer.from(I),mediaType:"image/jpeg",width:m,height:l}}if(e.preferMediaType==="image/jpeg"){let u=await o.getBuffer("image/png");if(u.length<=n)return{buffer:Buffer.from(u),mediaType:"image/png",width:m,height:l}}throw new p(`Image still exceeds budget (${n} 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"})}r(A,"normalizePastedImage");import{spawn as B}from"node:child_process";import{mkdtemp as fe,readFile as pe,rm as le}from"node:fs/promises";import{tmpdir as ge}from"node:os";import X from"node:path";var G=5e3;async function Y(){switch(process.platform){case"darwin":return ye();case"win32":return Te();case"linux":return Ie();default:throw new c("UNSUPPORTED_PLATFORM",`Clipboard image fallback is not supported on platform "${process.platform}".`)}}r(Y,"readClipboardImage");async function he(t={}){let e=await Y();return e?A(e,t):null}r(he,"readAndNormalizeClipboardImage");async function Q(t){let e=await fe(X.join(ge(),"kodax-clip-")),i=X.join(e,"clip.png");try{return await t(i)}finally{await le(e,{recursive:!0,force:!0}).catch(n=>{})}}r(Q,"runWithTempPng");async function ye(){return Q(async t=>{let e=`set png_data to (the clipboard as \xABclass PNGf\xBB)
3
- set fh to open for access POSIX file "${t.replace(/"/g,'\\"')}" with write permission
4
- write png_data to fh
5
- close access fh`;return await W("osascript",["-e",e])?V(t):null})}r(ye,"readMacClipboard");async function Te(){return Q(async t=>{let e=["Add-Type -AssemblyName System.Drawing | Out-Null","$img = Get-Clipboard -Format Image","if ($null -eq $img) { exit 1 }",`$img.Save('${t.replace(/'/g,"''")}', [System.Drawing.Imaging.ImageFormat]::Png)`].join("; ");return await W("powershell",["-NoProfile","-Command",e])?V(t):null})}r(Te,"readWinClipboard");async function Ie(){return await j("wl-paste",["--type","image/png"])??j("xclip",["-selection","clipboard","-t","image/png","-o"])}r(Ie,"readLinuxClipboard");async function V(t){try{let e=await pe(t);return e.length>0?e:null}catch(e){return null}}r(V,"readNonEmptyFile");function W(t,e){return new Promise(i=>{let n=!1,o=B(t,[...e],{stdio:"ignore",windowsHide:!0}),a=setTimeout(()=>{n||(n=!0,o.kill(),i(!1))},G);o.once("error",()=>{n||(n=!0,clearTimeout(a),i(!1))}),o.once("exit",d=>{n||(n=!0,clearTimeout(a),i(d===0))})})}r(W,"runCommand");function j(t,e){return new Promise(i=>{let n=!1,o=[],a=B(t,[...e],{stdio:["ignore","pipe","ignore"],windowsHide:!0}),d=setTimeout(()=>{n||(n=!0,a.kill(),i(null))},G);a.stdout?.on("data",s=>o.push(s)),a.once("error",()=>{n||(n=!0,clearTimeout(d),i(null))}),a.once("exit",s=>{if(n)return;if(n=!0,clearTimeout(d),s!==0){i(null);return}let m=Buffer.concat(o);i(m.length>0?m:null)})})}r(j,"collectStdoutBytes");import{createHash as we}from"node:crypto";import{mkdir as Ee,readdir as _e,stat as ke,unlink as xe,writeFile as Ae}from"node:fs/promises";import{tmpdir as ve}from"node:os";import v from"node:path";var H="KODAX_PASTE_TMP_DIR",J=1440*60*1e3;function Z(){return process.env[H]??v.join(ve(),"kodax-paste")}r(Z,"resolvePasteTmpDir");function Pe(t){let e=t?.trim().replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"");return e&&e.length>0?e:"paste"}r(Pe,"sanitizeFileNamePrefix");async function Me(t,e={}){let i=e.directory??Z();await Ee(i,{recursive:!0});let n={"image/jpeg":".jpg","image/png":".png","image/webp":".webp","image/gif":".gif"}[t.mediaType],o=we("sha256").update(t.buffer).digest("hex").slice(0,16),a=`${Pe(e.fileNamePrefix)}-${o}${n}`,d=v.join(i,a);return await Ae(d,t.buffer),{type:"image",path:d,mediaType:t.mediaType}}r(Me,"persistImageAsBlock");async function De(t=Date.now()){let e=Z(),i;try{i=await _e(e)}catch(a){return 0}let n=t-J,o=0;return await Promise.all(i.filter(a=>/-[0-9a-f]{16}\.(?:png|jpg)$/.test(a)).map(async a=>{let d=v.join(e,a);try{(await ke(d)).mtimeMs<n&&(await xe(d),o+=1)}catch(s){}})),o}r(De,"prunePasteTmpDir");var y=["image/png","image/jpeg","image/webp","image/gif"],T=["video/mp4","video/mpeg","video/quicktime","video/x-msvideo","video/x-flv","video/webm","video/x-ms-wmv","video/3gpp"],Se=[],be=new Set(["anthropic","openai"]),Re=new Set(["ark-coding/doubao-seed-2.0-code","ark-coding/doubao-seed-2.0-pro","ark-coding/kimi-k2.6","ark-coding/kimi-k2.7-code","ark-coding/minimax-m3","deepseek/deepseek-flash","kimi-code/k3-256k","qwen-token-plan/qwen3.8-max","qwen-token-plan/qwen3.8-max-preview","qwen-token-plan/qwen3.7-plus","qwen-token-plan/qwen3.6-flash"]),Oe=new Set(["kimi-code/kimi-for-coding","kimi-code/kimi-for-coding-highspeed","kimi-code/k3","kimi/kimi-k3","kimi/kimi-k2.5","kimi/kimi-k2.6","kimi/kimi-k2.7-code","kimi/kimi-k2.7-code-highspeed","minimax-coding/minimax-m3","minimax/minimax-m3","mimo-coding/mimo-v2.5","mimo/mimo-v2.5","zai-coding/glm-5.3-flash","zhipu-coding/glm-5.3-flash","zhipu/glm-5.3-flash"]);function P(t){return{nativeSupported:!1,sdkSupported:!1,status:"unsupported",mediaTypes:[],maxCount:0,reason:t}}r(P,"unsupported");function Ne(t){return{nativeSupported:!0,sdkSupported:!0,status:"supported",mediaTypes:y,nativeMediaTypes:y,reason:t}}r(Ne,"supportedImage");function $e(t){return{nativeSupported:!0,sdkSupported:!1,status:"provider-native-unwired",mediaTypes:[],nativeMediaTypes:T,maxCount:0,reason:t}}r($e,"nativeVideoUnwired");function Ce(t){return t.trim().toLowerCase()}r(Ce,"normalizeProvider");function Fe(t){return _[t]?.model}r(Fe,"resolveProviderDefaultModel");function ee(t,e){if(!e)return;let i=e.trim().toLowerCase();if(t==="kimi"){if(i==="k2.5")return"kimi-k2.5";if(i==="k2.6")return"kimi-k2.6";if(i==="k2.7-code")return"kimi-k2.7-code";if(i==="k2.7-code-highspeed")return"kimi-k2.7-code-highspeed"}return(t==="minimax-coding"||t==="minimax")&&i==="minimax-m3"?"minimax-m3":i}r(ee,"normalizeModel");function Ue(t){if(!be.has(t))return!1;let e=_[t];return e?R(e.capabilityProfile).multimodalSupport!=="none":!1}r(Ue,"hasOfficialImageSupport");function qe(t,e){let i=ee(t,e);if(!i)return!1;let n=`${t}/${i}`;return Oe.has(n)}r(qe,"hasSourceBackedNativeMedia");function Ke(t,e){let i=ee(t,e);return i?Re.has(`${t}/${i}`):!1}r(Ke,"hasSourceBackedImage");function Le(t){let e=t.trim();return e?O(e)?.multimodalSupport==="image-input":!1}r(Le,"hasCustomProviderImageSupport");function ze(t,e,i,n){if(i||n)return"source-backed";if(e){if(t==="openai")return"openai-official";if(t==="anthropic")return"anthropic-official"}}r(ze,"resolveImageCapabilityRoute");function Xe(t){switch(t){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."}}r(Xe,"imageCapabilityReason");function M(t){let e=Ce(t.provider),i=t.model?.trim()||Fe(e),n=Ue(e),o=qe(e,i),a=o||Ke(e,i),d=ze(e,n,a,Le(t.provider)),s=d!==void 0,m=o;return{text:!0,image:s?Ne(Xe(d)):P("No verified KodaX image-input route for this provider/model."),video:m?$e("Model route is native-video capable, but KodaX SDK video sending is not wired yet. Reject or downgrade before send."):P("No verified native video route for this provider/model."),file:P("File artifact contract is stable, but KodaX SDK file sending/extraction is not wired yet. Reject or downgrade before send.")}}r(M,"getModelInputCapabilities");function je(t){return y.includes(t)}r(je,"isKnownImageMediaType");function Be(t){return T.includes(t)}r(Be,"isKnownVideoMediaType");function D(t){return`${t.provider}${t.model?`/${t.model}`:""}`}r(D,"routeLabel");function S(t){return t.reason?`${t.status}: ${t.reason}`:t.status}r(S,"capabilityDetail");function b(t,e){if(t.length===0)return;let i=M(e);for(let n of t){let o=n;if(o.kind==="image"){if(!i.image.nativeSupported||!i.image.sdkSupported)throw new c("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume image artifacts: ${D(e)}.`,{detail:S(i.image)});if(typeof o.mediaType=="string"&&!je(o.mediaType))throw new c("UNSUPPORTED_MEDIA_TYPE",`Unsupported image media type: ${o.mediaType}.`);continue}throw o.kind==="video"?typeof o.mediaType!="string"||!Be(o.mediaType)?new c("UNSUPPORTED_MEDIA_TYPE",`Unsupported video media type: ${String(o.mediaType)}.`,{detail:`Supported video media types: ${T.join(", ")}`}):new c("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume video artifacts through this SDK runtime: ${D(e)}.`,{detail:S(i.video)}):o.kind==="file"?typeof o.mediaType=="string"&&typeof o.mimeType=="string"&&o.mediaType!==o.mimeType?new c("UNSUPPORTED_MEDIA_TYPE",`File artifact mediaType and mimeType disagree: ${o.mediaType} != ${o.mimeType}.`):new c("MODEL_INPUT_UNSUPPORTED",`Provider/model cannot consume file artifacts through this SDK runtime: ${D(e)}.`,{detail:S(i.file)}):new c("MODEL_INPUT_UNSUPPORTED",`Unsupported input artifact kind: ${String(o.kind)}.`)}}r(b,"validateInputArtifactsForModel");function Ge(t){if(b(t.inputArtifacts??[],t),t.agentId!==void 0&&t.sessionId!==void 0)throw new Error("enqueueWithArtifacts accepts either agentId or sessionId, not both.");if(t.sessionId!==void 0&&t.sessionId.trim().length===0)throw new Error("enqueueWithArtifacts sessionId must not be empty.");let e=t.agentId??(t.sessionId!==void 0?k(t.sessionId,"/root"):x());return h().enqueue({priority:t.priority??"user",mode:"prompt",content:t.content,agentId:e,inputArtifacts:t.inputArtifacts})}r(Ge,"enqueueWithArtifacts");export{E as a,h as b,ie as c,k as d,re as e,x as f,oe as g,$ as h,C as i,F as j,ne as k,c as l,p as m,q as n,K as o,de as p,me as q,ue as r,L as s,z as t,A as u,Y as v,he as w,H as x,J as y,Me as z,De as A,y as B,T as C,Se as D,M as E,b as F,Ge as G};
@@ -1,275 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{$ as Ce,ba as Me}from"./chunk-7O2AIFNE.js";import{Ka as Pe,Sa as ke,Wa as Se}from"./chunk-WV3DJVW4.js";import{C as pe,Ha as he,Ia as ge,Ja as ve,Ka as ye,La as we,Ma as Y,O as z,R as B,S as me,T as J,Ta as xe,Ua as I,Ya as Q,hb as be,mb as Ee}from"./chunk-HZYRLIOC.js";import{a as r}from"./chunk-ONUPGMER.js";import m from"fs";import h from"path";import{exec as yt,spawnSync as wt}from"child_process";import{promisify as xt}from"util";import{fileURLToPath as bt}from"url";var Z="en";function Je(){return(process.env.LC_ALL||process.env.LC_MESSAGES||process.env.LANG||"").toLowerCase().startsWith("zh")?"zh":"en"}r(Je,"detectSystemLocale");function Ae(e){if(!e||e==="auto"){Z=Je();return}Z=e.toLowerCase().replace(/[-_].*/,"")==="zh"?"zh":"en"}r(Ae,"setLocale");var _e={en:{"dialog.confirm":"[Confirm]","dialog.select":"[Select]","dialog.input":"[Input]","confirm.instruction.basic":"Press (y) yes, (n) no","confirm.instruction.always":"Press (y) yes, (a) always yes for this tool, (n) no","confirm.instruction.runtime_session":"Press (y) allow once, (s) allow this Runtime scope for the session, (n) no","confirm.instruction.runtime_persistent":"Press (y) allow once, (s) allow this Runtime scope for the session, (a) always allow this Runtime scope, (n) no","confirm.instruction.protected":"Press (y) to confirm, (n) to cancel (protected path)","confirm.result.approved":"Approved","confirm.result.approved_always":"Approved (always)","confirm.result.approved_session":"Approved (this session)","confirm.result.denied":"Denied","tool.bash.title":"Execute bash command?","tool.shell.title":"Execute shell command?","tool.write.title":"Write to file?","tool.edit.title":"Edit file?","tool.generic.title":"Execute {tool}?","field.reason":"Reason","field.intent":"Intent","field.target":"Target","field.scope":"Scope","field.risk":"Risk","field.summary":"Summary","intent.read":"Read project files","intent.delete":"Delete files","intent.deps":"Modify dependencies or environment","intent.modify":"Modify files","intent.execute":"Execute command","intent.write_file":"Write file","intent.edit_file":"Edit file","intent.use_tool":"Use {tool}","risk.destructive":"Destructive change","risk.deps":"May change dependencies or local tools","risk.modify":"May modify files","risk.unknown":"Command effects depend on its arguments","risk.network":"May access network","scope.outside":"Outside project","scope.protected":"Protected path","waiting.confirm":"Waiting: approval required","waiting.select":"Waiting: choose an option","waiting.input":"Waiting: answer the prompt","placeholder.confirm":"Respond to the approval prompt above...","placeholder.select":"Choose an option above...","placeholder.input":"Answer the prompt above...","placeholder.busy":"Agent is busy...","placeholder.queue":"Queue a follow-up for the next round...","placeholder.idle":"Type a message...","select.choice":"Choice:","select.type_number":"(type a number)","select.more":"{count} more choices...","select.more_above":"\u2191 {count} more above","select.more_below":"\u2193 {count} more below","select.confirm_hint":"Press Enter to confirm, Esc to cancel","select.navigate_hint":"Use \u2191\u2193 to navigate, Enter to confirm, Esc to cancel","select.multiselect_hint":"Use \u2191\u2193 to navigate, Space to toggle, Enter to confirm, Esc to cancel","select.multiselect_empty":"Select at least one option with Space before confirming.","select.multiselect_min":"Select at least {min} option(s) with Space before confirming.","select.multiselect_max":"Select at most {max} option(s) with Space before confirming.","select.back_prev":"\u2190 Back to previous question","input.default":"Default:","input.value":"Value:","input.type_response":"(type your response)","managed.completed":"Task completed","managed.completed.blocked":"Task blocked","managed.completed.continuation":"Task needs continuation","todo.progress":"{completed}/{total} completed","todo.transcript.progress":"Plan {completed}/{total} completed","todo.summary.done":"{count} done","todo.summary.more":"+{count} more",cancelled:"[Cancelled] Operation cancelled by user",cancellationRequested:"[Cancelling] Stop requested for the current reply",cancellationAccepted:"Stop request accepted; waiting for execution to settle.",cancellationConfirmed:"Stop confirmed:",cancellationRejected:"Stop request failed:"},zh:{"dialog.confirm":"[\u786E\u8BA4]","dialog.select":"[\u9009\u62E9]","dialog.input":"[\u8F93\u5165]","confirm.instruction.basic":"\u6309 (y) \u786E\u8BA4, (n) \u62D2\u7EDD","confirm.instruction.always":"\u6309 (y) \u786E\u8BA4, (a) \u59CB\u7EC8\u5141\u8BB8\u6B64\u5DE5\u5177, (n) \u62D2\u7EDD","confirm.instruction.runtime_session":"\u6309 (y) \u4EC5\u5141\u8BB8\u4E00\u6B21, (s) \u672C\u4F1A\u8BDD\u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (n) \u62D2\u7EDD","confirm.instruction.runtime_persistent":"\u6309 (y) \u4EC5\u5141\u8BB8\u4E00\u6B21, (s) \u672C\u4F1A\u8BDD\u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (a) \u59CB\u7EC8\u5141\u8BB8\u8FD9\u9879\u7CBE\u786E\u64CD\u4F5C, (n) \u62D2\u7EDD","confirm.instruction.protected":"\u6309 (y) \u786E\u8BA4, (n) \u53D6\u6D88 (\u53D7\u4FDD\u62A4\u8DEF\u5F84)","confirm.result.approved":"\u5DF2\u6279\u51C6","confirm.result.approved_always":"\u5DF2\u6279\u51C6 (\u59CB\u7EC8\u5141\u8BB8)","confirm.result.approved_session":"\u5DF2\u6279\u51C6 (\u672C\u4F1A\u8BDD)","confirm.result.denied":"\u5DF2\u62D2\u7EDD","tool.bash.title":"\u6267\u884C bash \u547D\u4EE4\uFF1F","tool.shell.title":"\u6267\u884C shell \u547D\u4EE4\uFF1F","tool.write.title":"\u5199\u5165\u6587\u4EF6\uFF1F","tool.edit.title":"\u7F16\u8F91\u6587\u4EF6\uFF1F","tool.generic.title":"\u6267\u884C {tool}\uFF1F","field.reason":"\u539F\u56E0","field.intent":"\u610F\u56FE","field.target":"\u76EE\u6807","field.scope":"\u8303\u56F4","field.risk":"\u98CE\u9669","field.summary":"\u6458\u8981","intent.read":"\u8BFB\u53D6\u9879\u76EE\u6587\u4EF6","intent.delete":"\u5220\u9664\u6587\u4EF6","intent.deps":"\u4FEE\u6539\u4F9D\u8D56\u6216\u73AF\u5883","intent.modify":"\u4FEE\u6539\u6587\u4EF6","intent.execute":"\u6267\u884C\u547D\u4EE4","intent.write_file":"\u5199\u5165\u6587\u4EF6","intent.edit_file":"\u7F16\u8F91\u6587\u4EF6","intent.use_tool":"\u4F7F\u7528 {tool}","risk.destructive":"\u7834\u574F\u6027\u53D8\u66F4","risk.deps":"\u53EF\u80FD\u4FEE\u6539\u4F9D\u8D56\u6216\u672C\u5730\u5DE5\u5177","risk.modify":"\u53EF\u80FD\u4FEE\u6539\u6587\u4EF6","risk.unknown":"\u547D\u4EE4\u6548\u679C\u53D6\u51B3\u4E8E\u53C2\u6570","risk.network":"\u53EF\u80FD\u8BBF\u95EE\u7F51\u7EDC","scope.outside":"\u9879\u76EE\u5916\u90E8","scope.protected":"\u53D7\u4FDD\u62A4\u8DEF\u5F84","waiting.confirm":"\u7B49\u5F85\u4E2D\uFF1A\u9700\u8981\u5BA1\u6279","waiting.select":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u9009\u62E9","waiting.input":"\u7B49\u5F85\u4E2D\uFF1A\u8BF7\u56DE\u7B54","placeholder.confirm":"\u8BF7\u56DE\u5E94\u4E0A\u65B9\u7684\u5BA1\u6279\u63D0\u793A...","placeholder.select":"\u8BF7\u5728\u4E0A\u65B9\u9009\u62E9\u4E00\u4E2A\u9009\u9879...","placeholder.input":"\u8BF7\u56DE\u7B54\u4E0A\u65B9\u7684\u63D0\u793A...","placeholder.busy":"\u667A\u80FD\u4F53\u6B63\u5728\u5DE5\u4F5C\u4E2D...","placeholder.queue":"\u6392\u961F\u7B49\u5F85\u4E0B\u4E00\u8F6E\u8DDF\u8FDB...","placeholder.idle":"\u8F93\u5165\u6D88\u606F...","select.choice":"\u9009\u9879\uFF1A","select.type_number":"(\u8F93\u5165\u7F16\u53F7)","select.more":"\u8FD8\u6709 {count} \u4E2A\u9009\u9879...","select.more_above":"\u2191 \u4E0A\u65B9\u8FD8\u6709 {count} \u4E2A","select.more_below":"\u2193 \u4E0B\u65B9\u8FD8\u6709 {count} \u4E2A","select.confirm_hint":"\u6309 Enter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.navigate_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_hint":"\u4F7F\u7528 \u2191\u2193 \u5BFC\u822A\uFF0C\u7A7A\u683C \u5207\u6362\u9009\u4E2D\uFF0CEnter \u786E\u8BA4\uFF0CEsc \u53D6\u6D88","select.multiselect_empty":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u9009\u9879\u3002","select.multiselect_min":"\u8BF7\u5148\u4F7F\u7528\u7A7A\u683C\u81F3\u5C11\u9009\u62E9 {min} \u4E2A\u9009\u9879\u3002","select.multiselect_max":"\u6700\u591A\u53EA\u80FD\u9009\u62E9 {max} \u4E2A\u9009\u9879\u3002","select.back_prev":"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u9898","input.default":"\u9ED8\u8BA4\u503C\uFF1A","input.value":"\u503C\uFF1A","input.type_response":"(\u8F93\u5165\u4F60\u7684\u56DE\u7B54)","managed.completed":"\u4EFB\u52A1\u5B8C\u6210","managed.completed.blocked":"\u4EFB\u52A1\u53D7\u963B","managed.completed.continuation":"\u4EFB\u52A1\u9700\u8981\u7EE7\u7EED","todo.progress":"{completed}/{total} \u5DF2\u5B8C\u6210","todo.transcript.progress":"\u8BA1\u5212 {completed}/{total} \u5DF2\u5B8C\u6210","todo.summary.done":"{count} \u9879\u5DF2\u5B8C\u6210","todo.summary.more":"\u53E6\u6709 {count} \u9879",cancelled:"[\u5DF2\u53D6\u6D88] \u64CD\u4F5C\u5DF2\u88AB\u7528\u6237\u53D6\u6D88",cancellationRequested:"[\u6B63\u5728\u53D6\u6D88] \u5DF2\u8BF7\u6C42\u505C\u6B62\u5F53\u524D\u56DE\u590D",cancellationAccepted:"\u505C\u6B62\u8BF7\u6C42\u5DF2\u63A5\u53D7\uFF0C\u6B63\u5728\u7B49\u5F85\u6267\u884C\u6536\u5C3E\u3002",cancellationConfirmed:"\u505C\u6B62\u5DF2\u786E\u8BA4\uFF1A",cancellationRejected:"\u505C\u6B62\u8BF7\u6C42\u5931\u8D25\uFF1A"}};function Bt(e,t){let o=_e[Z][e]??_e.en[e]??e;if(t)for(let[i,s]of Object.entries(t))o=o.replace(`{${i}}`,String(s));return o}r(Bt,"t");var Oe={core:`// Split configs: ~/.kodax/integrations/mcp.json, extensions.json, and a2a.json.
3
- // KodaX core configuration template.
4
- // Copy only the fields you need to ~/.kodax/config.json (strict JSON).
5
- // MCP, A2A, and Extensions live in ~/.kodax/integrations/*.json; use
6
- // \`kodax integrations migrate\` to preview legacy declarations.
7
- {
8
- // Active provider alias and optional model override. Run \`kodax setup\` or
9
- // \`/model\` instead of editing these manually when possible.
10
- // "provider": "deepseek",
11
- // "model": "deepseek-flash",
12
- // Add or reorder model ids shown by \`/model\` for a provider.
13
- // "providerModels": {
14
- // "deepseek": ["deepseek-flash", "deepseek-v4-pro"]
15
- // },
16
-
17
- // Interactive Runtime hosting: "embedded" (this process) or "daemon".
18
- // "runtimeMode": "embedded",
19
-
20
- // Worker-hosted embedded Runtime options. \`configuredA2A\` lets a
21
- // Worker-hosted embedded Runtime load and reconcile
22
- // ~/.kodax/integrations/a2a.json inside the Worker owner, so configured
23
- // outbound A2A Agents appear as \`external:<name>\` and can be dispatched
24
- // with spawn_agent. Default inline (non-Worker) CLI sessions already load
25
- // the configured A2A plane automatically; this key switches the embedded
26
- // session to a Worker-hosted Runtime and loads the plane in that mode.
27
- // "worker": {
28
- // "configuredA2A": true
29
- // },
30
-
31
- // Native model reasoning. \`effort\` is the preferred explicit depth;
32
- // \`reasoningCeiling\` is the session ceiling. \`reasoningMode\` and \`thinking\`
33
- // remain accepted for backward compatibility.
34
- // "effort": "high",
35
- // "planModeEffort": "high",
36
- // "reasoningCeiling": "auto",
37
- // "reasoningMode": "auto",
38
- // "thinking": true,
39
-
40
- // Agent harness: "ama" enables adaptive multi-agent use; "sa" forces one
41
- // agent. Permission profiles are "plan", "accept-edits", sandbox-first
42
- // "auto", or direct-host "full-access". Full Access has no sandbox or
43
- // approval prompts; built-in dangerous-command fallbacks do not apply.
44
- // Explicit forbidden rules still block; explicit prompt rules cannot prompt.
45
- // Exec Policy is separate:
46
- // ~/.kodax/exec-policy.jsonc (and explicitly trusted project policy).
47
- // "agentMode": "ama",
48
- // "permissionMode": "accept-edits",
49
- // User-level Bash allow patterns. Project additions belong in
50
- // <project>/.kodax/config.local.json. Broad Bash(*) is rejected.
51
- // "alwaysAllowTools": ["Bash(npm test)", "Bash(git status:*)"],
52
- // "autoMode": {
53
- // "classifierModel": "provider:model"
54
- // },
55
- // Optional policy body appended to the fixed Auto reviewer contract.
56
- // Review runs only at a proven host boundary: 90s, then one infra-only 180s retry.
57
- // "autoReview": { "policy": "Prefer reversible, narrowly scoped operations." },
58
-
59
- // UI/manual locale.
60
- // "locale": "zh",
61
-
62
- // Custom providers store public connection metadata only. Put the actual
63
- // credential in the named environment variable, never in this file. Use
64
- // \`kodax setup --custom\` for the guided writer.
65
- // "customProviders": [
66
- // {
67
- // "name": "my-relay",
68
- // "protocol": "openai",
69
- // "baseUrl": "https://api.example.com/v1",
70
- // "apiKeyEnv": "MY_RELAY_API_KEY",
71
- // "model": "provider/model",
72
- // "models": ["provider/model", "provider/fast-model"],
73
- // "reasoning": { "efforts": ["off", "low", "high"], "default": "high" },
74
- // "userAgentMode": "compat",
75
- // "contextWindow": 128000,
76
- // "maxOutputTokens": 8192,
77
- // "maxOutputTokensField": "max_completion_tokens",
78
- // "thinkingBudgetCap": 32000,
79
- // "imageInput": true,
80
- // "promptCacheAffinity": false,
81
- // "replayReasoningContent": false,
82
- // "strictThinkingSignature": false,
83
- // "streamMaxDurationMs": 300000,
84
- // "verifyStrategy": "models-list"
85
- // }
86
- // ],
87
-
88
- // Repository intelligence. Mode: "auto", "full", "light", or "off".
89
- // "repoIntelligenceMode": "auto",
90
- // "repoIntelligenceTrace": false,
91
- // "repoIntelligence": {
92
- // "toolWaitMs": 250,
93
- // "workerTimeoutMs": 30000,
94
- // "workerOldSpaceMb": 1024,
95
- // "storageDir": "~/.kodax/repo-intelligence"
96
- // },
97
-
98
- // Runtime/provider diagnostics and timeouts.
99
- // "streamIdleTimeoutMs": 120000,
100
- // "verifierLog": false,
101
- // "stallLog": false,
102
-
103
- // Ordered provider fallback for child tasks and optional model tiers used by
104
- // workflow/dispatch model hints.
105
- // "fallbackProviders": ["ark-coding", "kimi-code"],
106
- // "fastProvider": "openai",
107
- // "fastModel": "gpt-5-mini",
108
- // "deepProvider": "anthropic",
109
- // "deepModel": "claude-opus-4-6",
110
-
111
- // Provider/LSP/ACP process settings.
112
- // "maxOutputTokens": 8192,
113
- // "disablePromptCache": false,
114
- // "lsp": true,
115
- // "lspAutoDownload": false,
116
- // "acpLogLevel": "info",
117
-
118
- // Automatic large compaction is always enabled. Percentage defaults to 75
119
- // and is clamped to 15..90. A missing/zero absolute threshold is inactive;
120
- // otherwise the smaller percentage, absolute, and physical limit wins.
121
- // "compaction": {
122
- // "enabled": true,
123
- // "contextWindow": 128000,
124
- // "triggerPercent": 75,
125
- // "triggerTokens": 0
126
- // },
127
-
128
- // 0 disables automatic session pruning.
129
- // "sessionRetentionDays": 0,
130
-
131
- // Workflow host concurrency. The Runtime still applies its system cap.
132
- // "workflow": { "maxConcurrency": 8 }
133
- }
134
- `,mcp:`// User MCP declarations: ~/.kodax/integrations/mcp.json (strict JSON).
135
- // The whole file hot-reloads; healthy entries remain active if one new entry
136
- // fails to prepare. Keep credentials in \${env:NAME} references.
137
- {
138
- "version": 1,
139
- "servers": {}
140
- // Example:
141
- // "servers": {
142
- // "reporting": {
143
- // "type": "streamable-http",
144
- // "url": "https://mcp.example.com",
145
- // "headers": { "Authorization": "Bearer \${env:REPORTING_MCP_TOKEN}" },
146
- // "connect": "lazy"
147
- // }
148
- // }
149
- }
150
- `,a2a:`// Bidirectional A2A configuration: ~/.kodax/integrations/a2a.json.
151
- // \`agents\` calls many third-party Agents. The optional singleton \`server\`
152
- // exposes exactly one KodaX general task Agent; ACP remains the coding/editor
153
- // protocol. Uncomment only the entries you need; no token value belongs here.
154
- // Legacy version 1 files remain readable. Non-empty files require an explicit
155
- // stopped-daemon migration; new/empty files and every later write use version 2.
156
- {
157
- "version": 2,
158
-
159
- // Create this inbound block with \`kodax a2a expose\`; config never starts a
160
- // listener by itself. Do not copy private Agent instructions, Runtime Skills,
161
- // model names, or local paths into the public \`published.skills\` list.
162
- // Managed workspaces default below
163
- // ~/kodax_a2a_server_workspace/<runtime-profile>/contexts/<context-key>/.
164
- // Native read/grep/glob remains available according to workspace access.
165
- // Arbitrary shell is never exposed. Skill instructions/assets need no
166
- // process authority. An exact checked-in scripts/... entry requires
167
- // process="isolated", skillScripts admission, and \`kodax sandbox doctor\`.
168
- // On native protocol 10, isolated Skill Script is POSIX-only. Windows is
169
- // unavailable because its required per-command denyRead is unsupported.
170
- // ASRT receives no KodaX credentials or ambient ~/.srt-settings.json and its
171
- // script quota is observed; hostile tenants also require an outer container/VM.
172
- //
173
- // "server": {
174
- // "execution": {
175
- // "kind": "local-agent",
176
- // "agentRef": { "source": "markdown:user", "name": "report-agent" },
177
- // "workspace": { "mode": "managed" },
178
- // "toolPolicy": {
179
- // "workspace": "write",
180
- // "process": "deny",
181
- // "network": { "mode": "deny" },
182
- // "tools": [],
183
- // "mcp": {},
184
- // "skillScripts": {},
185
- // "subagents": "deny"
186
- // }
187
- // },
188
- // "published": {
189
- // "name": "KodaX Agent",
190
- // "description": "Completes approved general tasks.",
191
- // "version": "0.7.71",
192
- // "skills": [{ "id": "general", "name": "General", "description": "Complete general tasks.", "tags": [] }],
193
- // "inputModes": ["text/plain"],
194
- // "outputModes": ["text/plain"]
195
- // },
196
- // "authentication": { "type": "bearer-env", "tokenEnv": "KODAX_A2A_TOKEN", "principalId": "configured-client" },
197
- // "dataDir": "~/.kodax/a2a/tasks"
198
- // },
199
-
200
- // Production OAuth2 resource-server alternative for the server above. The
201
- // external Authorization Server issues access tokens and, for JWT tokens,
202
- // signs them. KodaX holds no issuer signing key; it validates RFC 9068 tokens
203
- // against the issuer's rotating JWKS, audience, expiry, subject, and scopes.
204
- // Replace the server.authentication value above with:
205
- // {
206
- // "type": "oauth2-jwt",
207
- // "scheme": "enterprise-oauth",
208
- // "issuer": "https://identity.example.com",
209
- // "audience": "https://agent.example.com/a2a",
210
- // "jwksUrl": "https://identity.example.com/.well-known/jwks.json",
211
- // "tokenUrl": "https://identity.example.com/oauth/token",
212
- // "metadataUrl": "https://identity.example.com/.well-known/oauth-authorization-server",
213
- // "requiredScopes": ["a2a.invoke"]
214
- // }
215
-
216
- "agents": {
217
- // Fixed Bearer compatibility example. \`enabled\` is hot desired state:
218
- // disabled Agents remain configured but are not candidates for new
219
- // orchestration, while already admitted remote tasks may finish.
220
- // "reporting": {
221
- // "cardUrl": "https://agents.example.com/.well-known/agent-card.json",
222
- // "enabled": true,
223
- // "credentialEnv": "REPORTING_A2A_TOKEN",
224
- // "effect": "read"
225
- // },
226
-
227
- // Private addresses and plaintext HTTP are separate, default-deny
228
- // permissions. Exact loopback HTTP needs neither. Private HTTP needs both;
229
- // private HTTPS needs only allowPrivateAddresses. Prefer TLS whenever it is
230
- // available. The equivalent CLI flags are \`--allow-private\` and
231
- // \`--allow-insecure-http\`. OAuth token endpoints keep their stricter
232
- // HTTPS-or-exact-loopback rule even when Agent transport HTTP is allowed.
233
- // "intranet": {
234
- // "cardUrl": "http://10.20.30.40/.well-known/agent-card.json",
235
- // "enabled": true,
236
- // "network": {
237
- // "allowPrivateAddresses": true,
238
- // "allowInsecureHttp": true
239
- // },
240
- // "effect": "read"
241
- // },
242
-
243
- // Standards-based machine-to-machine OAuth2 example. The external
244
- // Authorization Server issues access tokens; KodaX obtains and caches them
245
- // only in process memory. \`tokenUrl\` must exactly match the selected Card
246
- // OAuth2 clientCredentials flow. Use \`kodax a2a enable|disable <name>\` to
247
- // mutate \`enabled\` atomically; the owning Runtime applies it asynchronously.
248
- // "reviewer": {
249
- // "cardUrl": "https://reviewer.example.com/.well-known/agent-card.json",
250
- // "enabled": false,
251
- // "effect": "read",
252
- // "authentication": {
253
- // "type": "oauth2-client-credentials",
254
- // "scheme": "enterprise-oauth",
255
- // "issuer": "https://identity.example.com",
256
- // "tokenUrl": "https://identity.example.com/oauth/token",
257
- // "clientId": "kodax-reviewer",
258
- // "clientSecretEnv": "REVIEWER_CLIENT_SECRET",
259
- // "scopes": ["a2a.invoke"],
260
- // "resource": "https://reviewer.example.com/",
261
- // "clientAuthentication": "client-secret-basic"
262
- // }
263
- // }
264
- }
265
- }
266
- `,extensions:`// Trusted user Extension paths: ~/.kodax/integrations/extensions.json.
267
- // Extensions are host code. Reload is whole-domain atomic; use MCP for
268
- // capabilities that should remain outside the KodaX process.
269
- {
270
- "version": 1,
271
- "paths": []
272
- }
273
- `};function Re(e){return Oe[e]}r(Re,"getConfigTemplate");import{closeSync as ne,existsSync as d,fsyncSync as Ne,linkSync as rt,mkdirSync as re,openSync as ie,readFileSync as $e,renameSync as je,statSync as it,unlinkSync as K,watch as st,writeFileSync as Ke}from"node:fs";import{createHash as at}from"node:crypto";import f from"node:path";import{closeSync as Ye,mkdirSync as Qe,openSync as Ze,rmSync as et}from"node:fs";import tt from"node:path";var ee=class extends Error{static{r(this,"CoreConfigWriteConflictError")}constructor(t){super(`Core configuration is being changed by another KodaX writer: ${t}`),this.name="CoreConfigWriteConflictError"}};function nt(e){return`${e}.write.lock`}r(nt,"coreConfigWriteLockPath");function ot(e){if(!(!(e instanceof Error)||!("code"in e)))return typeof e.code=="string"?e.code:void 0}r(ot,"errorCode");function x(e,t){Qe(tt.dirname(e),{recursive:!0,mode:448});let n=nt(e),o;try{o=Ze(n,"wx",384)}catch(i){throw ot(i)==="EEXIST"?new ee(e):new Error(`Failed to acquire the core configuration write lock: ${e}`,{cause:i})}try{return t()}finally{Ye(o),et(n,{force:!0})}}r(x,"withCoreConfigWriteLock");var k=class extends Error{static{r(this,"IntegrationConfigConflictError")}constructor(t,n,o){super(`Integration configuration revision changed for ${f.basename(t)} (expected ${n??"missing"}, actual ${o??"missing"}).`),this.name="IntegrationConfigConflictError"}},ct={mcp:"mcp.json",a2a:"a2a.json",extensions:"extensions.json"},lt=new Set(["type","command","args","cwd","env","url","headers","connect","startupTimeoutMs","requestTimeoutMs","auth"]);function P(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}r(P,"isRecord");function b(e,t){if(!P(e))throw new Error(`${t} must be an object.`);return e}r(b,"requireRecord");function X(e,t,n){let o=Object.keys(e).find(i=>!t.has(i));if(o!==void 0)throw new Error(`${n} has unknown field "${o}".`)}r(X,"assertNoUnknownKeys");function Xe(e,t){if(e.version!==1)throw new Error(`${t} version must be 1.`)}r(Xe,"requireVersionOne");function Ie(e,t){let n=b(e,t);for(let[o,i]of Object.entries(n))if(o.trim().length===0||typeof i!="string")throw new Error(`${t} must contain non-empty string keys and string values.`);return structuredClone(n)}r(Ie,"requireStringMap");function oe(e,t){if(!Array.isArray(e)||!e.every(n=>typeof n=="string"&&n.trim().length>0))throw new Error(`${t} must be an array of non-empty strings.`);return e.map(n=>n.trim())}r(oe,"requireStringArray");function te(e,t){if(e!==void 0&&(!Number.isFinite(e)||Number(e)<=0))throw new Error(`${t} must be a positive number.`)}r(te,"validatePositiveNumber");function dt(e,t){if(e.trim().length===0)throw new Error("MCP server names must not be empty.");let n=b(t,`MCP server "${e}"`);X(n,lt,`MCP server "${e}"`);let o=n.type??"stdio";if(!["stdio","sse","streamable-http","http"].includes(String(o)))throw new Error(`MCP server "${e}" has an unsupported transport type.`);if(o==="stdio"){if(typeof n.command!="string"||n.command.trim().length===0)throw new Error(`MCP server "${e}" stdio transport requires command.`)}else if(typeof n.url!="string"||n.url.trim().length===0)throw new Error(`MCP server "${e}" ${String(o)} transport requires url.`);if(n.args!==void 0&&oe(n.args,`MCP server "${e}" args`),n.cwd!==void 0&&typeof n.cwd!="string")throw new Error(`MCP server "${e}" cwd must be a string.`);if(n.env!==void 0&&Ie(n.env,`MCP server "${e}" env`),n.headers!==void 0&&Ie(n.headers,`MCP server "${e}" headers`),n.connect!==void 0&&!["lazy","prewarm","disabled"].includes(String(n.connect)))throw new Error(`MCP server "${e}" has an unsupported connect mode.`);if(te(n.startupTimeoutMs,`MCP server "${e}" startupTimeoutMs`),te(n.requestTimeoutMs,`MCP server "${e}" requestTimeoutMs`),n.auth!==void 0){let i=b(n.auth,`MCP server "${e}" auth`);if(X(i,new Set(["type","clientId","authorizationUrl","tokenUrl","scopes","redirectPort"]),`MCP server "${e}" auth`),i.type!=="oauth2")throw new Error(`MCP server "${e}" auth type must be oauth2.`);for(let a of["clientId","authorizationUrl","tokenUrl"])if(i[a]!==void 0&&typeof i[a]!="string")throw new Error(`MCP server "${e}" auth.${a} must be a string.`);i.scopes!==void 0&&oe(i.scopes,`MCP server "${e}" auth.scopes`),te(i.redirectPort,`MCP server "${e}" auth.redirectPort`)}return structuredClone(n)}r(dt,"parseMcpServer");function S(e){let t=b(e,"MCP integration config");X(t,new Set(["version","servers"]),"MCP integration config"),Xe(t,"MCP integration config");let n=b(t.servers,"MCP integration config servers"),o={};for(let[i,s]of Object.entries(n))o[i]=dt(i,s);return{version:1,servers:o}}r(S,"parseMcpIntegrationDocument");function C(e){let t=b(e,"Extensions integration config");X(t,new Set(["version","paths"]),"Extensions integration config"),Xe(t,"Extensions integration config");let n=oe(t.paths,"Extensions integration config paths");if(new Set(n).size!==n.length)throw new Error("Extensions integration config paths must not contain duplicates.");return{version:1,paths:n}}r(C,"parseExtensionsIntegrationDocument");function M(e,t){return f.join(f.resolve(t),"integrations",ct[e])}r(M,"resolveIntegrationConfigPath");function A(e){return f.join(f.resolve(e),"config.json")}r(A,"coreConfigPath");function Fe(e){return at("sha256").update(e).digest("hex")}r(Fe,"hashText");function se(e){let t=$e(e,"utf8");try{return{raw:t,value:JSON.parse(t)}}catch(n){let o=n instanceof Error?n.message:String(n);throw new Error(`Invalid JSON: ${o}`)}}r(se,"readJsonFile");function _(e){return{domain:e.domain,source:e.source,path:e.path,revision:Fe(e.raw),document:structuredClone(e.document),loadedAt:new Date().toISOString()}}r(_,"snapshot");function F(e){let t=A(e);return d(t)?b(se(t).value,"Core config"):{}}r(F,"readCoreConfig");function U(e){let t=M("mcp",e);if(d(t)){let s=se(t);return _({domain:"mcp",source:"user",path:t,raw:s.raw,document:S(s.value)})}let n=A(e),o=F(e).mcpServers,i=S({version:1,servers:o===void 0?{}:o});return _({domain:"mcp",source:o===void 0?"default":"legacy-user",path:o===void 0?t:n,raw:JSON.stringify(i),document:i})}r(U,"readMcpIntegration");function W(e){let t=M("extensions",e);if(d(t)){let s=se(t);return _({domain:"extensions",source:"user",path:t,raw:s.raw,document:C(s.value)})}let n=A(e),o=F(e).extensions,i=C({version:1,paths:o===void 0?[]:o});return _({domain:"extensions",source:o===void 0?"default":"legacy-user",path:o===void 0?t:n,raw:JSON.stringify(i),document:i})}r(W,"readExtensionsIntegration");function ut(e){if(!P(e))return[];let t=[],n=/(token|secret|password|api[_-]?key|authorization)/i;for(let[o,i]of Object.entries(e))if(P(i))for(let s of["env","headers"]){let a=i[s];if(P(a))for(let[c,l]of Object.entries(a))n.test(c)&&typeof l=="string"&&!l.startsWith("${env:")&&t.push(`MCP server "${o}" ${s}.${c} may contain a literal secret.`)}return t}r(ut,"likelySecretWarnings");function ft(e){let t=F(e),n=M("mcp",e),o=M("extensions",e),i=t.mcpServers,s=t.extensions,a=P(i)?Object.keys(i).length:0,c=Array.isArray(s)?s.length:0,l=r((g,N,$)=>d(g)?{action:"none",entries:N,destination:g,reason:"destination-exists"}:$?{action:"create",entries:N,destination:g}:{action:"none",entries:0,destination:g,reason:"legacy-absent"},"domainPlan");return{mcp:l(n,a,i!==void 0),extensions:l(o,c,s!==void 0),warnings:ut(i)}}r(ft,"planLegacyIntegrationMigration");function pt(e,t){let n=A(e);re(f.dirname(n),{recursive:!0,mode:448});let o=`${n}.${process.pid}.${Date.now()}.tmp`,i=ie(o,"wx",384);try{Ke(i,`${JSON.stringify(t,null,2)}
274
- `,"utf8"),Ne(i)}finally{ne(i)}try{je(o,n)}catch(s){throw d(o)&&K(o),new Error("Failed to atomically clean legacy integration fields.",{cause:s})}}r(pt,"writeCoreConfigAtomically");function ln(e){return x(A(e.configHome),()=>mt(e))}r(ln,"migrateLegacyIntegrationConfig");function mt(e){let t=ft(e.configHome),n=F(e.configHome),o=t.mcp.action==="create"?S({version:1,servers:P(n.mcpServers)?n.mcpServers:{}}):void 0,i=t.extensions.action==="create"?C({version:1,paths:Array.isArray(n.extensions)?n.extensions:[]}):void 0,s=[];if(o)try{T({domain:"mcp",configHome:e.configHome,expectedRevision:null,document:o,validate:S}),s.push("mcp")}catch(c){if(!(c instanceof k))throw c}if(i)try{T({domain:"extensions",configHome:e.configHome,expectedRevision:null,document:i,validate:C}),s.push("extensions")}catch(c){if(!(c instanceof k))throw c}let a=!1;if(e.cleanupLegacy&&d(A(e.configHome))){let c={...n};d(t.mcp.destination)&&delete c.mcpServers,d(t.extensions.destination)&&delete c.extensions,ht(n,c)||(pt(e.configHome,c),a=!0)}return{...t,applied:s,cleanedLegacy:a}}r(mt,"migrateLegacyIntegrationConfigUnlocked");function ht(e,t){return JSON.stringify(e)===JSON.stringify(t)}r(ht,"isDeepStrictEqualForConfig");function Te(e){return d(e)?Fe($e(e,"utf8")):void 0}r(Te,"currentUserRevision");function gt(e){let t=`${e}.lock`;try{return{fd:ie(t,"wx",384),path:t}}catch(n){throw new Error(`Integration configuration is busy: ${f.basename(e)}`,{cause:n})}}r(gt,"acquireWriteLock");function T(e){let t=M(e.domain,e.configHome),n=e.validate(e.document);re(f.dirname(t),{recursive:!0,mode:448});let o=gt(t);try{let i=Te(t),s=e.expectedRevision===null?void 0:e.expectedRevision;if(e.expectedRevision!==void 0&&i!==s)throw new k(t,s,i);let a=`${JSON.stringify(n,null,2)}
275
- `,c=`${t}.${process.pid}.${Date.now()}.tmp`,l=ie(c,"wx",384);try{Ke(l,a,"utf8"),Ne(l)}finally{ne(l)}try{e.expectedRevision===null?(rt(c,t),K(c)):je(c,t)}catch(g){throw d(c)&&K(c),e.expectedRevision===null&&d(t)?new k(t,void 0,Te(t)):new Error(`Failed to atomically replace ${f.basename(t)}.`,{cause:g})}return _({domain:e.domain,source:"user",path:t,raw:a,document:n})}finally{ne(o.fd),d(o.path)&&K(o.path)}}r(T,"writeIntegrationDocument");function vt(e){if(!d(e))return"missing";let t=it(e);return`${t.dev}:${t.ino}:${t.size}:${t.mtimeMs}`}r(vt,"metadataSignature");function De(e){return e.map(t=>`${t}:${vt(t)}`).join("|")}r(De,"observationSignature");function j(e,t){return{code:e,message:t,time:new Date().toISOString()}}r(j,"safeDiagnostic");var Le=class{static{r(this,"IntegrationConfigController")}#u;#n;#r;#a;#m;#f;#p;#e;#t;#c;#l;#h="";#s=[];#o;#i;#g=Promise.resolve();#d=new Set;constructor(t){this.#u=t.domain,this.#n=M(t.domain,t.configHome),this.#r=t.fallbackPath===void 0?void 0:f.resolve(t.fallbackPath),this.#a=this.#r===void 0?[this.#n]:[this.#n,this.#r],this.#f=t.validate,this.#m=t.read,this.#p=t.coldStartDefault===void 0?void 0:structuredClone(this.#f(t.coldStartDefault))}async initialize(){let t=await this.reload();if(!t.ok&&!this.#e&&this.#p!==void 0){let n=structuredClone(this.#p);this.#e=_({domain:this.#u,source:"default",path:this.#n,raw:JSON.stringify(n),document:n})}if(!this.#e)throw new Error(t.ok?"Integration configuration did not produce a snapshot.":t.error);return structuredClone(this.#e)}snapshot(){return this.#e?structuredClone(this.#e):void 0}status(){let t=this.#t?this.#c:void 0,n=this.#t?this.#l:void 0;return{domain:this.#u,path:t??this.#e?.path??this.#n,...this.#e?{revision:this.#e.revision,lastReloadAt:this.#e.loadedAt}:{},...n??this.#e?.source?{source:n??this.#e?.source}:{},...this.#t?{diagnostic:this.#t}:{},watching:this.#s.length>0}}subscribe(t){return this.#d.add(t),()=>{this.#d.delete(t)}}reload(){let t=this.#g.then(()=>this.#v());return this.#g=t.then(()=>{},()=>{}),t}async#v(){this.#h=De(this.#a);let t;try{t=this.#m(),this.#f(t.document)}catch{let o=this.#y();return this.#c=o.path,this.#l=o.source,this.#t=j("invalid-config","Integration configuration is invalid; check the file against its versioned schema."),{ok:!1,error:this.#t.message}}let n=this.#e?structuredClone(this.#e):void 0;try{for(let o of this.#d)await o(structuredClone(t),n)}catch{return this.#c=t.path,this.#l=t.source,this.#t=j("activation-failed","Integration configuration could not be activated; the previous configuration remains active."),{ok:!1,error:this.#t.message}}return this.#e=t,this.#t=void 0,this.#c=void 0,this.#l=void 0,{ok:!0,snapshot:structuredClone(t)}}async ensureCurrent(){return De(this.#a)===this.#h&&this.#e?{ok:!0,snapshot:structuredClone(this.#e)}:this.reload()}startWatching(t=100,n=2e3){if(this.#s.length>0||this.#i)return;re(f.dirname(this.#n),{recursive:!0,mode:448});let o=new Map;for(let i of this.#a){let s=f.dirname(i),a=o.get(s)??new Set;a.add(f.basename(i)),o.set(s,a)}for(let[i,s]of o)try{let a=st(i,(c,l)=>{l!==null&&!s.has(l.toString())||(this.#o&&clearTimeout(this.#o),this.#o=setTimeout(()=>{this.#o=void 0,this.reload()},t),this.#o.unref?.())});a.unref(),a.on("error",()=>{this.#t=j("watcher-degraded","Integration watcher is degraded; metadata polling remains active.")}),this.#s.push(a)}catch{this.#t=j("watcher-degraded","Integration watcher is degraded; metadata polling remains active.")}this.#i=setInterval(()=>{this.ensureCurrent()},n),this.#i.unref?.()}close(){this.#o&&clearTimeout(this.#o),this.#o=void 0,this.#i&&clearInterval(this.#i),this.#i=void 0;for(let t of this.#s)t.close();this.#s.length=0,this.#d.clear()}#y(){return d(this.#n)?{path:this.#n,source:"user"}:this.#r&&d(this.#r)?{path:this.#r,source:"legacy-user"}:{path:this.#n,source:"default"}}};var Et=xt(yt),Ue=2,We=!1,u=Pe(),kn=h.join(u,"sessions"),p=h.join(u,"config.json"),Sn=60,v=null,ce=!1,Pt="dumb";function kt(e){let t=h.basename(e).toLowerCase(),n="__KODAX_SHELL_ENV_START__",o=`printf '%s\\0' '${n}'; env -0`;return t==="fish"?{args:["-i","-c",o],sentinel:n}:{args:t==="bash"||t==="zsh"?["-ic",o]:["-lc",o],sentinel:n}}r(kt,"buildShellEnvCommand");function St(e,t){let n=`${t}\0`,o=e.lastIndexOf(n);if(o===-1)return{};let i=e.slice(o+n.length),s={};for(let a of i.split("\0")){if(!a)continue;let c=a.indexOf("=");c<=0||(s[a.slice(0,c)]=a.slice(c+1))}return s}r(St,"parseNullDelimitedShellEnv");function Ct(e={}){let t=e.env??process.env;if((e.platform??process.platform)==="win32"||t.KODAX_DISABLE_SHELL_ENV_HYDRATION==="1")return!1;let o=e.shell??t.SHELL;if(!o||!h.isAbsolute(o))return!1;let{args:i,sentinel:s}=kt(o),a=e.run??wt,c={...t,TERM:Pt},l=a(o,i,{encoding:"utf8",env:c,maxBuffer:1024*1024,timeout:5e3,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});if(l.status!==0||!l.stdout)return!1;let g=typeof l.stdout=="string"?l.stdout:l.stdout.toString("utf8"),N=St(g,s),$=!1;for(let[V,Be]of Object.entries(N))V!=="TERM"&&t[V]===void 0&&(t[V]=Be,$=!0);return $}r(Ct,"hydrateProcessEnvFromShell");function Mt(){if(!ce){ce=!0;try{Ct()}catch{}}}r(Mt,"ensureShellEnvironmentHydrated");function Cn(){ce=!1}r(Cn,"resetShellEnvironmentHydrationForTesting");function _t(e){xe(e.customProviders??[])}r(_t,"registerConfiguredCustomProviders");function le(e){if(!Array.isArray(e))return;let t=e.filter(n=>typeof n=="string").map(n=>n.trim()).filter(n=>n.length>0);return t.length>0?t:[]}r(le,"normalizeConfiguredExtensions");function ue(){let e=m.readFileSync(p,"utf8"),t=JSON.parse(e);if(!(t===null||typeof t!="object"||Array.isArray(t)))return{raw:e,value:t}}r(ue,"readPersistedCoreConfig");function He(e){m.writeFileSync(p,JSON.stringify(e,null,2))}r(He,"writePersistedCoreConfig");function At(e){if(e.permissionMode!=="default")return e;let t={...e,permissionMode:"accept-edits"};try{x(p,()=>{let n=ue();n?.value.permissionMode==="default"&&He({...n.value,permissionMode:"accept-edits"})})}catch{}return t}r(At,"migrateLegacyPermissionModeInConfig");function Ot(e){if(e.permissionMode!=="auto-in-project")return e;try{x(p,()=>{let t=ue();if(t?.value.permissionMode!=="auto-in-project")return;let n=t.raw.replace(/("permissionMode"\s*:\s*)"auto-in-project"/,'$1"auto"');n!==t.raw&&m.writeFileSync(p,n)})}catch{}return{...e,permissionMode:"auto"}}r(Ot,"migrateAutoInProjectAliasInConfig");function Rt(){if(v)return v;let e="0.7.96";if(e)return v=e,v;let t=h.join(h.dirname(bt(import.meta.url)),"../../package.json");if(m.existsSync(t))try{return v=JSON.parse(m.readFileSync(t,"utf-8")).version??"0.0.0",v??"0.0.0"}catch{}return v="0.0.0",v}r(Rt,"getVersion");var Mn=Rt();function It(e){return ge(e)}r(It,"getProviderModel");function de(e,t){let n=new Set(e.map(i=>i.toLowerCase())),o=[...e];for(let i of t)n.has(i.toLowerCase())||o.push(i);return o}r(de,"mergeModels");function Tt(e,t){t||(t=fe().providerModels);let n=t?.[e];if(n&&n.length>0){try{let o=Y(e);if(o.length>0)return de(n,o)}catch{}try{let o=I(e);if(o)return de(n,o.getAvailableModels())}catch{}return n}try{let o=Y(e);if(o.length>0)return o}catch{}try{let o=I(e);if(o)return o.getAvailableModels()}catch{}return[]}r(Tt,"getProviderAvailableModels");function Dt(e,t){let n=ve(e,t);if(n!=="unknown")return n;try{let o=I(e);if(o)return o.getReasoningCapability(t)}catch{}return"unknown"}r(Dt,"getProviderReasoningCapability");function Lt(e){let t=ye(e);if(t)return t;try{return Q().find(o=>o.name===e)?.capabilityProfile??null}catch{return null}}r(Lt,"getProviderCapabilityProfile");function Ve(e,t){let n=Lt(e),o=Dt(e,t);if(n)return{capabilityProfile:n,reasoningCapability:o};try{let i=be(e);return{capabilityProfile:i.getCapabilityProfile(),reasoningCapability:i.getReasoningCapability(t)}}catch{return null}}r(Ve,"getProviderCapabilityMetadata");function _n(e,t){let n=Ve(e,t);return n?Ce({providerName:e,model:t,capabilityProfile:n.capabilityProfile,reasoningCapability:n.reasoningCapability==="unknown"?void 0:n.reasoningCapability}):null}r(_n,"getProviderCapabilitySnapshot");function Nt(e,t,n,o){let i=Ve(e,t);return i?Me({providerName:e,model:t,capabilityProfile:i.capabilityProfile,reasoningCapability:i.reasoningCapability==="unknown"?void 0:i.reasoningCapability,reasoningMode:n,hints:o}):null}r(Nt,"getProviderPolicyDecision");function An(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"forwards only the latest user message":"preserves full conversation history",o=e.mcpSupport==="native"?"MCP available":"MCP unavailable";return`${t}; ${n}; ${o}`}r(An,"describeProviderCapabilitySummary");function On(e){switch(e){case"native-budget":return"B";case"native-effort":return"E";case"native-toggle":return"T";case"native-adaptive":return"A";default:return"-"}}r(On,"formatReasoningCapabilityShort");function R(e){if(e)return e==="none"?"off":e}r(R,"formatReasoningEffortForDisplay");function q(e,t){let n=R(t);n&&!e.includes(n)&&e.push(n)}r(q,"pushUniqueEffortDisplay");function Rn(e,t){let n=["auto"],o=H(e,t),i=o?.supportedEfforts?.filter(s=>s.isUserVisible!==!1);if(!i||i.length===0){for(let s of["off","low","medium","high"])q(n,s);return n}for(let s of i)s.value==="none"&&o?.supportsDisabledThinking===!1||q(n,s.value);return n}r(Rn,"getProviderReasoningEffortOptions");function In(e,t){let n=H(e,t),o=new Set(n?.disabledEfforts??[]),i=n?.supportedEfforts?.filter(l=>l.isUserVisible!==!1),s=[],a=n?.supportsDisabledThinking===!0;if(!i||i.length===0){for(let l of["low","medium","high"])q(s,l);a=!0}else for(let l of i){if(l.value==="none"){n?.supportsDisabledThinking!==!1&&(a=!0);continue}if(o.has(l.value)){n?.supportsDisabledThinking!==!1&&(a=!0);continue}q(s,l.value)}let c=[];return a&&c.push("off"),c.push(...s),c.push("auto"),c}r(In,"getProviderReasoningEffortCycle");function $t(e,t){if(t===!1)return"off";switch(e){case"off":return"off";case"quick":return"low";case"balanced":return"medium";case"deep":return"high";default:return"auto"}}r($t,"legacyReasoningModeToEffortDisplay");function H(e,t){let n=t??It(e);if(!n)return;let o=Ee(e,n)?.reasoningProfile;if(o)return pe(o,ke(e,n))}r(H,"resolveReasoningProfileForDisplay");function Tn(e){let t=R(e.effort)??$t(e.reasoningMode,e.thinking),n=H(e.provider,e.model);if(!n)return t;try{let o=me({capability:n,explicitEffort:e.effortOverride?e.effort:void 0,sessionEffort:e.effortOverride?void 0:e.effort,legacyReasoningMode:e.reasoningMode,thinking:e.thinking}),i=R(o.configuredEffort)??t,a=o.configuredEffort!==void 0&&n.supportsDisabledThinking!==!1&&n.disabledEfforts?.includes(o.configuredEffort)===!0?"off":R(o.effectiveEffort);return a&&a!==i?`${i}->${a}`:i}catch{if(e.effort)try{let o=J({currentEffort:e.effort,capability:n}),i=R(e.effort)??t,s=R(o.effectiveEffort);return s&&s!==i?`${i}->${s}`:i}catch{return t}return t}}r(Tn,"formatReasoningEffortStatusLabel");function Dn(e){let t=Vt(e);if(!t)return{preserved:!0};let n=H(e.provider,e.model);if(!n)return{configuredEffort:t,runtimeEffort:t,preserved:!0};let o=J({currentEffort:t,capability:n});return{configuredEffort:t,runtimeEffort:o.effectiveEffort,preserved:o.preserved,diagnostic:o.diagnostic}}r(Dn,"resolveProviderReasoningRuntimeEffort");function jt(e){switch(e){case"native-budget":return"budget";case"native-effort":return"effort";case"native-toggle":return"toggle";case"native-adaptive":return"adaptive";default:return"none"}}r(jt,"describeReasoningCapabilityControl");function Ln(e,t){if(e==="off")return"Reasoning disabled";switch(t){case"native-budget":return"Uses native thinking budget control";case"native-effort":return"Uses native reasoning effort control";case"native-toggle":return"Uses provider-native thinking toggle only";case"native-adaptive":return"Model adaptively decides thinking depth (Opus 4.7+)";case"none":return"Runs without native reasoning parameters";case"prompt-only":return"Uses prompt overlays only; no native reasoning parameter";default:return"Runs without native reasoning parameters"}}r(Ln,"describeReasoningExecution");function Nn(e){let t=[];e||(e=fe().providerModels);for(let n of we())t.push({name:n.name,model:n.model,models:Tt(n.name,e),configured:n.capabilityProfile.transport==="cli-bridge"?!0:n.configured,reasoningCapability:n.reasoningCapability,capabilityProfile:n.capabilityProfile});try{let n=Q().map(o=>({...o,models:(()=>{let i=e?.[o.name];return i&&i.length>0?de(i,o.models):o.models})()}));t.push(...n)}catch{}return t}r(Nn,"getProviderList");function $n(e){if(he(e))return!0;try{return I(e)?.isConfigured()??!1}catch{return!1}}r($n,"isProviderConfigured");var G=class extends Error{static{r(this,"InvalidAgentModeConfigError")}};function Kt(e){let t=e.agentMode;if(t===void 0||t==="ama"||t==="sa")return e;if(t!=="amaw"&&t!=="ama-workflow")throw new G(`Invalid agentMode "${t}" in ${p}. Expected "ama" or "sa".`);let n={...e,agentMode:"ama",schemaVersion:Math.max(e.schemaVersion??0,Ue)};try{x(p,()=>{let o=ue();if(!o)return;let i=o.value.agentMode;i!=="amaw"&&i!=="ama-workflow"||He({...o.value,agentMode:"ama",schemaVersion:Math.max(typeof o.value.schemaVersion=="number"?o.value.schemaVersion:0,Ue)})})}catch{}return We||(process.emitWarning(`Migrated persisted agentMode "${t}" to "ama". Workflow use is now explicit intent.`,{code:"KODAX_AGENT_MODE_MIGRATED"}),We=!0),n}r(Kt,"migrateLegacyAgentModeConfig");function fe(){try{if(m.existsSync(p)){let n=JSON.parse(m.readFileSync(p,"utf-8")),o=Kt(n),i=o.reasoningCeiling??o.reasoningMode,s=[],a={};try{s=[...W(u).document.paths]}catch{}try{a=U(u).document.servers}catch{}let{sandbox:c,...l}=o;return Ot(At({...l,reasoningMode:i,extensions:le(s),mcpServers:a}))}}catch(n){if(n instanceof G)throw n}let e,t;try{let n=W(u);n.source!=="default"&&(e=le([...n.document.paths]))}catch{}try{let n=U(u);n.source!=="default"&&(t=n.document.servers)}catch{}return{...e===void 0?{}:{extensions:e},...t===void 0?{}:{mcpServers:t}}}r(fe,"loadConfig");var Xt=h.join(u,"config.example.jsonc"),ae={mcp:h.join(u,"integrations","mcp.example.jsonc"),a2a:h.join(u,"integrations","a2a.example.jsonc"),extensions:h.join(u,"integrations","extensions.example.jsonc")},Ft=[{name:"core",path:Xt},{name:"mcp",path:ae.mcp},{name:"a2a",path:ae.a2a},{name:"extensions",path:ae.extensions}];function Ut(){let e=[];for(let t of Ft)try{if(m.existsSync(t.path))continue;m.mkdirSync(h.dirname(t.path),{recursive:!0}),m.writeFileSync(t.path,Re(t.name),"utf8"),e.push(t.path)}catch{}return e}r(Ut,"ensureExampleConfigFiles");function jn(){return Ut()[0]}r(jn,"ensureExampleConfigFile");var L=new Map;function Kn(e){let t=process.env[e];return t===void 0?"unset":L.get(e)===t?"persisted":"environment"}r(Kn,"inspectConfigEnvironmentSource");function Wt(e,t){let n=process.env[e],o=L.get(e),i=o!==void 0&&n===o;if(n!==void 0&&!i){L.delete(e);return}if(t===void 0){i&&delete process.env[e],L.delete(e);return}process.env[e]=t,L.set(e,t)}r(Wt,"projectConfigEnvironment");var ze=[{configPath:"streamIdleTimeoutMs",env:"KODAX_STREAM_IDLE_TIMEOUT_MS",value:r(e=>E(e.streamIdleTimeoutMs),"value")},{configPath:"repoIntelligenceMode",env:"KODAX_REPO_INTELLIGENCE",value:r(e=>e.repoIntelligenceMode,"value")},{configPath:"repoIntelligenceTrace",env:"KODAX_REPO_INTELLIGENCE_TRACE",value:r(e=>O(e.repoIntelligenceTrace),"value")},{configPath:"verifierLog",env:"KODAX_VERIFIER_LOG",value:r(e=>O(e.verifierLog),"value")},{configPath:"stallLog",env:"KODAX_STALL_LOG",value:r(e=>O(e.stallLog),"value")},{configPath:"fallbackProviders",env:"KODAX_FALLBACK_PROVIDERS",value:r(e=>Gt(e.fallbackProviders),"value")},{configPath:"fastProvider",env:"KODAX_FAST_PROVIDER",value:r(e=>y(e.fastProvider),"value")},{configPath:"fastModel",env:"KODAX_FAST_MODEL",value:r(e=>y(e.fastModel),"value")},{configPath:"deepProvider",env:"KODAX_DEEP_PROVIDER",value:r(e=>y(e.deepProvider),"value")},{configPath:"deepModel",env:"KODAX_DEEP_MODEL",value:r(e=>y(e.deepModel),"value")},{configPath:"provider",env:"KODAX_PROVIDER",value:r(e=>y(e.provider),"value")},{configPath:"effort",env:"KODAX_EFFORT",value:r(e=>y(e.effort),"value")},{configPath:"runtimeMode",env:"KODAX_RUNTIME_MODE",value:r(e=>e.runtimeMode,"value")},{configPath:"sessionRetentionDays",env:"KODAX_SESSION_RETENTION_DAYS",value:r(e=>E(e.sessionRetentionDays),"value")},{configPath:"maxOutputTokens",env:"KODAX_MAX_OUTPUT_TOKENS",value:r(e=>E(e.maxOutputTokens),"value")},{configPath:"disablePromptCache",env:"KODAX_DISABLE_PROMPT_CACHE",value:r(e=>O(e.disablePromptCache),"value")},{configPath:"lsp",env:"KODAX_LSP",value:r(e=>O(e.lsp),"value")},{configPath:"lspAutoDownload",env:"KODAX_LSP_DOWNLOAD",value:r(e=>O(e.lspAutoDownload),"value")},{configPath:"acpLogLevel",env:"KODAX_ACP_LOG",value:r(e=>y(e.acpLogLevel),"value")},{configPath:"repoIntelligence.toolWaitMs",env:"KODAX_REPO_INTELLIGENCE_TOOL_WAIT_MS",value:r(e=>E(e.repoIntelligence?.toolWaitMs),"value")},{configPath:"repoIntelligence.workerTimeoutMs",env:"KODAX_REPO_INTELLIGENCE_WORKER_TIMEOUT_MS",value:r(e=>E(e.repoIntelligence?.workerTimeoutMs),"value")},{configPath:"repoIntelligence.workerOldSpaceMb",env:"KODAX_REPO_INTELLIGENCE_WORKER_OLD_SPACE_MB",value:r(e=>E(e.repoIntelligence?.workerOldSpaceMb),"value")},{configPath:"repoIntelligence.storageDir",env:"KODAX_REPO_INTELLIGENCE_STORAGE_DIR",value:r(e=>y(e.repoIntelligence?.storageDir),"value")},{configPath:"workflow.maxConcurrency",env:"KODAX_WORKFLOW_MAX_CONCURRENCY",value:r(e=>E(e.workflow?.maxConcurrency),"value")}];function qt(e){for(let t of ze)Wt(t.env,t.value(e))}r(qt,"applyConfigSurfaceBridges");function y(e){return e?.trim()||void 0}r(y,"normalizedConfigString");function E(e){return typeof e=="number"&&Number.isFinite(e)?String(e):void 0}r(E,"configNumberString");function O(e){return e===void 0?void 0:e?"1":"0"}r(O,"configBooleanString");function Gt(e){return e?.filter(t=>t.trim().length>0).join(",")}r(Gt,"configStringList");var Xn=[...ze.map(({configPath:e,env:t})=>({configPath:e,env:t}))];function Ht(e){qt(e)}r(Ht,"applyConfigEnvironment");function Fn(){Mt();let e=fe();return Ht(e),_t(e),Ae(e.locale),e}r(Fn,"prepareRuntimeConfig");function Un(e){let{extensions:t,mcpServers:n,...o}=e;if(x(p,()=>{let i={};if(m.existsSync(p))try{let a=JSON.parse(m.readFileSync(p,"utf8"));a&&typeof a=="object"&&!Array.isArray(a)&&(i=a)}catch{}let s={...i,...o};for(let a of Object.keys(o))o[a]===void 0&&delete s[a];m.writeFileSync(p,JSON.stringify(s,null,2))}),t!==void 0){let i=W(u);T({domain:"extensions",configHome:u,...i.source==="user"?{expectedRevision:i.revision}:{},document:{version:1,paths:le(t)??[]},validate:C})}if(n!==void 0){let i=U(u);T({domain:"mcp",configHome:u,...i.source==="user"?{expectedRevision:i.revision}:{},document:{version:1,servers:n},validate:S})}}r(Un,"saveConfig");function Wn(e,t,n){return e.effort!==void 0||B(n).kind==="value"||t.effort!==void 0}r(Wn,"resolveInitialEffortOverride");function w(e){return e?.trim()?e:void 0}r(w,"nonEmptySelection");function qn(e){return w(e.explicitProvider)??w(e.environmentProvider)??w(e.configuredProvider)??e.defaultProvider}r(qn,"resolveRuntimeProviderSelection");function Gn(e){let t=w(e.explicitModel);if(t)return t;let n=w(e.configuredModel);if(!n)return;let o=w(e.explicitProvider)??w(e.environmentProvider);return o?w(e.configuredProvider)===o?n:void 0:n}r(Gn,"resolveRuntimeModelSelection");function Hn(e){if(e.explicitEffort!==void 0)return z(e.explicitEffort);let t=B(e.environmentEffort);return t.kind==="value"?t.value:e.configuredEffort===void 0?void 0:z(e.configuredEffort)}r(Hn,"resolveRuntimeEffortSelection");function Vt(e){return e.permissionMode==="plan"&&e.effortOverride!==!0&&e.planModeEffort!==void 0?e.planModeEffort:e.effort}r(Vt,"resolvePermissionModeEffort");async function Vn(e){try{await Se({cwd:e});let{stdout:t}=await Et("git rev-parse --show-toplevel",{cwd:e,windowsHide:!0});return t.trim()}catch{return null}}r(Vn,"getGitRoot");function zt(e){switch(e){case"builtin":return"Built-in";case"runtime":return"Runtime extension";case"custom":return"Custom config";default:return"Unknown"}}r(zt,"formatProviderSourceKind");function zn(e){let t=e.transport==="cli-bridge"?"CLI bridge":"Native API",n=e.conversationSemantics==="last-user-message"?"latest-user-message only":"full conversation history";return[`Source: ${zt(e.sourceKind)}`,`Transport: ${t}`,`Conversation semantics: ${n}`,`Context fidelity: ${e.contextFidelity}`,`Tool calling: ${e.toolCallingFidelity}`,`Session behavior: ${e.sessionSupport}`,`Long-running support: ${e.longRunningSupport}`,`Evidence-heavy flows: ${e.evidenceSupport}`,`Multimodal support: ${e.multimodalSupport}`,`MCP support: ${e.mcpSupport}`,`Reasoning control: ${jt(e.reasoningCapability)}`]}r(zn,"formatProviderCapabilityDetailLines");function Bn(e,t,n){return[{label:"General coding",hints:{}},{label:"Evidence-heavy review",hints:{evidenceHeavy:!0}},{label:"Long-running task",hints:{longRunning:!0}}].map(i=>({label:i.label,decision:Nt(e,t,n,i.hints)})).filter(i=>i.decision!==null)}r(Bn,"getProviderCommonPolicyScenarios");var qe=.5,Ge=0,D={locked:!1,queue:[]};async function Jn(e){for(;D.locked;)await new Promise(t=>D.queue.push(t));D.locked=!0;try{let t=(Date.now()-Ge)/1e3;t<qe&&await new Promise(o=>setTimeout(o,(qe-t)*1e3));let n=await e();return Ge=Date.now(),n}finally{D.locked=!1;let t=D.queue.shift();t&&t()}}r(Jn,"rateLimitedCall");export{Bt as a,Oe as b,Re as c,ee as d,nt as e,x as f,k as g,S as h,C as i,M as j,U as k,W as l,ft as m,ln as n,T as o,Le as p,u as q,kn as r,p as s,Sn as t,Ct as u,Cn as v,_t as w,Rt as x,Mn as y,It as z,Tt as A,Dt as B,Lt as C,_n as D,Nt as E,An as F,On as G,R as H,Rn as I,In as J,Tn as K,Dn as L,jt as M,Ln as N,Nn as O,$n as P,fe as Q,Xt as R,ae as S,Ut as T,jn as U,Kn as V,Xn as W,Ht as X,Fn as Y,Un as Z,Wn as _,qn as $,Gn as aa,Hn as ba,Vt as ca,Vn as da,zt as ea,zn as fa,Bn as ga,Jn as ha};