@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 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- var uo=Object.defineProperty;var o=(e,t)=>uo(e,"name",{value:t,configurable:!0});import{spawn as Iu,spawnSync as pD}from"node:child_process";import{createHash as no,randomInt as hD,randomUUID as Ru}from"node:crypto";import{closeSync as wD,constants as yD,existsSync as vD,fsyncSync as bD,lstatSync as SD,mkdirSync as xD,openSync as kD,readFileSync as ED,readSync as ID,readdirSync as RD,realpathSync as AD,renameSync as _D,rmSync as TD,statSync as CD,writeFileSync as PD,writeSync as Au}from"node:fs";import{copyFile as OD,lstat as $D,mkdir as ND,readFile as Tt,realpath as DD,rm as ro,stat as LD,writeFile as jD}from"node:fs/promises";import{createRequire as _u}from"node:module";import b from"node:path";import{globSync as EN}from"glob";var Ct=new WeakMap;function je(e,t){let n=Ct.get(e);return n&&Ct.set(t,n),t}o(je,"inheritRejectedImage");import{AsyncLocalStorage as fo}from"node:async_hooks";var po=new fo;function te(e){let t=po.getStore(),n=t?.kind==="exact"&&t.isActive()?t.credential:void 0;return n?he(e,n,new WeakMap):e}o(te,"redactScopedProviderCredential");function mo(e,t,n){let r=e instanceof DOMException?new DOMException(e.message.split(t).join("[REDACTED_CREDENTIAL]"),e.name.split(t).join("[REDACTED_CREDENTIAL]")):new Error;Object.setPrototypeOf(r,Object.getPrototypeOf(e));let i=Object.getOwnPropertyDescriptor(r,"stack")?.get;delete r.stack,n.set(e,r);for(let s of Reflect.ownKeys(e)){let a=Object.getOwnPropertyDescriptor(e,s);if(s==="stack"&&a?.get&&a.get===i&&(a={configurable:a.configurable,enumerable:a.enumerable,writable:!0,value:e.stack}),a===void 0||!("value"in a))continue;let c=typeof s=="string"?s.split(t).join("[REDACTED_CREDENTIAL]"):s;Object.prototype.hasOwnProperty.call(r,c)||Object.defineProperty(r,c,{...a,value:he(a.value,t,n)})}return je(e,r)}o(mo,"redactCredentialError");function he(e,t,n){if(typeof e=="string")return e.split(t).join("[REDACTED_CREDENTIAL]");if(e===null||typeof e!="object")return e;let r=n.get(e);if(r!==void 0)return r;if(e instanceof Error)return mo(e,t,n);if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(he(a,t,n));return s}let i={};n.set(e,i);for(let[s,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let c=s.split(t).join("[REDACTED_CREDENTIAL]");i[c]=he(a.value,t,n)}return i}o(he,"redactCredentialValue");import{AsyncLocalStorage as ho}from"node:async_hooks";var Ef=new ho;var q={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Ot={...q,multimodalSupport:"image-input"},ge={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},$t={...ge,multimodalSupport:"image-input"};import{parse as Kf}from"partial-json";import{AsyncLocalStorage as Co}from"node:async_hooks";import{AsyncLocalStorage as To}from"node:async_hooks";var ep=10*1024*1024;var tp=To.snapshot();var sp=new Co;var Gp=Object.freeze({status:"terminated"}),Vp=Object.freeze({status:"already-exited"}),Xp=Object.freeze({status:"unknown"}),Jp=String.raw`
2
+ var fo=Object.defineProperty;var o=(e,t)=>fo(e,"name",{value:t,configurable:!0});import{spawn as Cu,spawnSync as GD}from"node:child_process";import{createHash as ro,randomInt as XD,randomUUID as Pu}from"node:crypto";import{closeSync as YD,constants as QD,existsSync as ZD,fsyncSync as eL,lstatSync as tL,mkdirSync as nL,openSync as rL,readFileSync as oL,readSync as iL,readdirSync as sL,realpathSync as aL,renameSync as cL,rmSync as dL,statSync as lL,writeFileSync as uL,writeSync as Mu}from"node:fs";import{copyFile as pL,lstat as mL,mkdir as hL,readFile as Ct,realpath as gL,rm as oo,stat as wL,writeFile as yL}from"node:fs/promises";import{createRequire as Ou}from"node:module";import b from"node:path";import{globSync as oD}from"glob";import{AsyncLocalStorage as q}from"node:async_hooks";var of=new q,sf=new q,af=new q,cf=new q,df=new q;var lf=new q;var Pt=new WeakMap;function Fe(e,t){let n=Pt.get(e);return n&&Pt.set(t,n),t}o(Fe,"inheritRejectedImage");import{AsyncLocalStorage as po}from"node:async_hooks";var mo=new po;function ne(e){let t=mo.getStore(),n=t?.kind==="exact"&&t.isActive()?t.credential:void 0;return n?ge(e,n,new WeakMap):e}o(ne,"redactScopedProviderCredential");function ho(e,t,n){let r=e instanceof DOMException?new DOMException(e.message.split(t).join("[REDACTED_CREDENTIAL]"),e.name.split(t).join("[REDACTED_CREDENTIAL]")):new Error;Object.setPrototypeOf(r,Object.getPrototypeOf(e));let i=Object.getOwnPropertyDescriptor(r,"stack")?.get;delete r.stack,n.set(e,r);for(let s of Reflect.ownKeys(e)){let a=Object.getOwnPropertyDescriptor(e,s);if(s==="stack"&&a?.get&&a.get===i&&(a={configurable:a.configurable,enumerable:a.enumerable,writable:!0,value:e.stack}),a===void 0||!("value"in a))continue;let c=typeof s=="string"?s.split(t).join("[REDACTED_CREDENTIAL]"):s;Object.prototype.hasOwnProperty.call(r,c)||Object.defineProperty(r,c,{...a,value:ge(a.value,t,n)})}return Fe(e,r)}o(ho,"redactCredentialError");function ge(e,t,n){if(typeof e=="string")return e.split(t).join("[REDACTED_CREDENTIAL]");if(e===null||typeof e!="object")return e;let r=n.get(e);if(r!==void 0)return r;if(e instanceof Error)return ho(e,t,n);if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(ge(a,t,n));return s}let i={};n.set(e,i);for(let[s,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let c=s.split(t).join("[REDACTED_CREDENTIAL]");i[c]=ge(a.value,t,n)}return i}o(ge,"redactCredentialValue");import{AsyncLocalStorage as go}from"node:async_hooks";var Uf=new go;var H={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},$t={...H,multimodalSupport:"image-input"},we={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Nt={...we,multimodalSupport:"image-input"};import{parse as dp}from"partial-json";import{AsyncLocalStorage as Po}from"node:async_hooks";import{AsyncLocalStorage as Co}from"node:async_hooks";var bp=10*1024*1024;var Sp=Co.snapshot();var Rp=new Po;var hm=Object.freeze({status:"terminated"}),gm=Object.freeze({status:"already-exited"}),wm=Object.freeze({status:"unknown"}),ym=String.raw`
3
3
  using System;
4
4
  using System.Runtime.InteropServices;
5
5
  using System.Text;
@@ -86,8 +86,8 @@ public static class KodaXNativeProcessSnapshot {
86
86
  CloseHandle(snapshot);
87
87
  }
88
88
  }
89
- }`;import zt from"node:fs";import Gt from"node:os";import Vt from"node:path";var qo="gpt-5.4",Ho="auto-gemini-3",zo=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Go=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Xt(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(Xt,"dedupePreserveOrder");function Vo(){let e=Vt.join(Gt.homedir(),".codex","config.toml");try{return zt.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}o(Vo,"readCodexConfiguredModel");function Xo(){let e=Vt.join(Gt.homedir(),".gemini","settings.json");try{let t=JSON.parse(zt.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(Xo,"readGeminiConfiguredModel");function H(){return Vo()||qo}o(H,"getCodexCliDefaultModel");function z(){return Xo()||Ho}o(z,"getGeminiCliDefaultModel");function oe(){return Xt([H(),...zo])}o(oe,"getCodexCliKnownModels");function ie(){return Xt([z(),...Go])}o(ie,"getGeminiCliKnownModels");var Mm=z(),Om=ie();var Hm=H(),zm=oe();import{existsSync as si,readFileSync as ai}from"node:fs";import V from"node:path";import{fileURLToPath as ci}from"node:url";var Jt=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Yt=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Qt=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Zt=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","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"],en=["max_tokens","max_completion_tokens"],tn=["native","image-input-native","cli-bridge","image-input-cli-bridge"],nn=["count-tokens","models-list","minimal-message","unsupported"];function O(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(O,"isPlainObject");function W(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(W,"requireString");function G(e,t){if(e!==void 0)return W(e,t)}o(G,"optionalString");function sn(e,t){if(e!==void 0){if(typeof e!="string"||!en.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${en.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(sn,"optionalMaxOutputTokensField");function L(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(L,"optionalNumber");function I(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}o(I,"optionalBoolean");function rn(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)=>W(n,`${t}[${r}]`))}}o(rn,"optionalStringArray");function Yo(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=W(i,`${t}.${r}`);return n}o(Yo,"optionalStringMap");function Qo(e,t){if(e!==void 0){if(typeof e!="string"||!Zt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Zt.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(Qo,"optionalReasoningPreset");function Ke(e,t){if(typeof e!="string"||!Jt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Jt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Ke,"requireReasoningCapability");function Zo(e,t){if(typeof e!="string"||!Yt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Yt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Zo,"requireEffortStrategy");function ei(e,t){if(e!==void 0){if(typeof e!="string"||!Qt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Qt.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(ei,"optionalThinkingStrategy");function on(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Zo(e.effortStrategy,`${t}.effortStrategy`),r=Qo(e.reasoningPreset,`${t}.reasoningPreset`),i=ei(e.thinkingStrategy,`${t}.thinkingStrategy`),s=G(e.defaultEffort,`${t}.defaultEffort`),a=Yo(e.effortAliases,`${t}.effortAliases`),c=rn(e.disabledEfforts,`${t}.disabledEfforts`),d=rn(e.localRejectEfforts,`${t}.localRejectEfforts`),l=I(e.allowCustomEffort,`${t}.allowCustomEffort`),u=I(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),f=I(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),m=I(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),p=I(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),h=I(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),k=I(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),w=I(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),g={effortStrategy:n};if(r!==void 0&&(g.reasoningPreset=r),i!==void 0&&(g.thinkingStrategy=i),s!==void 0&&(g.defaultEffort=s),a!==void 0&&(g.effortAliases=a),c!==void 0&&(g.disabledEfforts=c),d!==void 0&&(g.localRejectEfforts=d),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);g.supportedEfforts=e.supportedEfforts.map((y,v)=>{if(!O(y))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${v}] must be an object`);return{value:W(y.value,`${t}.supportedEfforts[${v}].value`),...G(y.description,`${t}.supportedEfforts[${v}].description`)!==void 0?{description:G(y.description,`${t}.supportedEfforts[${v}].description`)}:{},...I(y.isDefault,`${t}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:I(y.isDefault,`${t}.supportedEfforts[${v}].isDefault`)}:{},...I(y.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:I(y.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!O(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let y={};for(let[v,ee]of Object.entries(e.budgetByEffort))y[v]=L(ee,`${t}.budgetByEffort.${v}`)??0;g.budgetByEffort=y}return l!==void 0&&(g.allowCustomEffort=l),u!==void 0&&(g.supportsReasoningEffort=u),f!==void 0&&(g.supportsReasoningSummary=f),m!==void 0&&(g.supportsEncryptedReasoningReplay=m),p!==void 0&&(g.supportsAdaptiveThinking=p),h!==void 0&&(g.supportsManualThinkingBudget=h),k!==void 0&&(g.supportsDisabledThinking=k),w!==void 0&&(g.requiresEffortBetaHeader=w),g}o(on,"validateReasoningProfile");function an(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?on(n,`${t}.reasoningProfile`):on(r,`${t}.reasoningCapabilityV2`)}o(an,"validateReasoningProfileField");function ti(e,t){if(typeof e!="string"||!tn.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${tn.join(", ")}, got ${JSON.stringify(e)}`);return e}o(ti,"requireProfileName");function ni(e,t){if(typeof e!="string"||!nn.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${nn.join(", ")}, got ${JSON.stringify(e)}`);return e}o(ni,"requireVerifyStrategy");function ri(e,t){if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=W(e.id,`${t}.id`),r=G(e.wireModel,`${t}.wireModel`),i=G(e.displayName,`${t}.displayName`),s=L(e.contextWindow,`${t}.contextWindow`),a=L(e.maxOutputTokens,`${t}.maxOutputTokens`),c=sn(e.maxOutputTokensField,`${t}.maxOutputTokensField`),d=L(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=I(e.replayReasoningContent,`${t}.replayReasoningContent`),u=I(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=L(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),m=e.reasoningCapability===void 0?void 0:Ke(e.reasoningCapability,`${t}.reasoningCapability`),p=an(e,t),h={id:n};return r!==void 0&&(h.wireModel=r),i!==void 0&&(h.displayName=i),s!==void 0&&(h.contextWindow=s),a!==void 0&&(h.maxOutputTokens=a),c!==void 0&&(h.maxOutputTokensField=c),d!==void 0&&(h.thinkingBudgetCap=d),m!==void 0&&(h.reasoningCapability=m),p!==void 0&&(h.reasoningProfile=p),l!==void 0&&(h.replayReasoningContent=l),u!==void 0&&(h.strictThinkingSignature=u),f!==void 0&&(h.streamMaxDurationMs=f),h}o(ri,"validateModelDescriptor");function oi(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=Ke(i,`${t}.${r}`);return n}o(oi,"validateModelReasoningCapabilities");function ii(e,t){if(!O(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=I(e.cliBridge,`providers.${t}.cliBridge`),r=W(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=Ke(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=an(e,`providers.${t}`),a=ti(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=ni(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&c!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${c}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let d=L(e.contextWindow,`providers.${t}.contextWindow`),l=L(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),u=sn(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),f=L(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),m=I(e.supportsThinking,`providers.${t}.supportsThinking`),p=oi(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),h=G(e.model,`providers.${t}.model`);if(n&&(h!==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&&h===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let k;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);k=e.models.map((y,v)=>ri(y,`providers.${t}.models[${v}]`));let g=new Set([...h===void 0?[]:[h],...k.map(y=>y.id)]);for(let[y,v]of k.entries())if(v.wireModel!==void 0&&!g.has(v.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${y}].wireModel must reference a declared model, got ${JSON.stringify(v.wireModel)}`)}let w={apiKeyEnv:r,reasoningCapability:i,capabilityProfile:a,verifyStrategy:c};return s!==void 0&&(w.reasoningProfile=s),h!==void 0&&(w.model=h),k!==void 0&&(w.models=k),d!==void 0&&(w.contextWindow=d),l!==void 0&&(w.maxOutputTokens=l),u!==void 0&&(w.maxOutputTokensField=u),f!==void 0&&(w.thinkingBudgetCap=f),m!==void 0&&(w.supportsThinking=m),p!==void 0&&(w.modelReasoningCapabilities=p),n&&(w.cliBridge=!0),w}o(ii,"validateProviderEntry");function cn(e){if(!O(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=W(e.updatedAt,"updatedAt");if(!O(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]=ii(i,r);return{version:1,updatedAt:t,providers:n}}o(cn,"validateProviderCapabilitiesJson");var di=Object.freeze({native:q,"image-input-native":Ot,"cli-bridge":ge,"image-input-cli-bridge":$t}),ve=null;function li(){if(process.env.KODAX_BUNDLED==="true")return V.join(V.dirname(process.execPath),"provider-capabilities.json");let e=V.dirname(ci(import.meta.url)),t=[V.join(e,"provider-capabilities.json"),V.join(V.dirname(e),"provider-capabilities.json")];for(let n of t)if(si(n))return n;return t[0]}o(li,"resolveJsonPath");function ui(e){if(e.models){for(let t of e.models)t.reasoningProfile&&dn(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&dn(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}o(ui,"deepFreezeSnapshot");function dn(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(dn,"freezeReasoningProfile");function fi(e){if(e==="gemini-cli"){let t=z();return{model:t,models:ie().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=H();return{model:t,models:oe().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}o(fi,"resolveCliBridgeModels");function pi(e,t){let n=di[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let i=fi(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.maxOutputTokensField!==void 0&&(r.maxOutputTokensField=t.maxOutputTokensField),t.thinkingBudgetCap!==void 0&&(r.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(r.supportsThinking=t.supportsThinking),r}o(pi,"buildSnapshot");function ln(){if(ve)return ve;let e=li(),t;try{let i=ai(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=cn(t),r={};for(let[i,s]of Object.entries(n.providers))r[i]=ui(pi(i,s));return ve=Object.freeze(r),ve}o(ln,"getProviderSnapshots");var be=ln();var un=process.env.KODAX_PROVIDER??"zhipu-coding";var Gi=[];function R(e){let t=te(e),n=Gi.at(-1)?.sink;if(n){try{n(t)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${Tn(t)}
90
- `)}catch{}}o(R,"emitKodaXDiagnostic");function Tn(e){let t=te(e),n=Vi(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}o(Tn,"formatKodaXDiagnostic");function Vi(e){if(e===void 0)return"";if(e instanceof Error)return e.stack??e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}o(Vi,"formatDiagnosticDetail");var se=class e{static{o(this,"SpanImpl")}id;traceId;parentId;name;data;startedAt;_endedAt;_error;_children=[];now;nextSpanId;onChildCreated;onSpanEnd;_ended=!1;constructor(t){this.id=t.id,this.traceId=t.traceId,this.parentId=t.parentId,this.name=t.name,this.data=t.data,this.now=t.now??(()=>Date.now()),this.startedAt=t.startedAt??this.now(),this.nextSpanId=t.nextSpanId??Xi,this.onChildCreated=t.onChildCreated,this.onSpanEnd=t.onSpanEnd}get endedAt(){return this._endedAt}get error(){return this._error}get children(){return this._children}addChild(t,n){let r=new e({id:this.nextSpanId(),traceId:this.traceId,parentId:this.id,name:t,data:n,now:this.now,nextSpanId:this.nextSpanId,onChildCreated:this.onChildCreated,onSpanEnd:this.onSpanEnd});return this._children.push(r),this.onChildCreated&&this.onChildCreated(r),r}setError(t){t instanceof Error?this._error={message:t.message,stack:t.stack}:this._error=t}end(){this._ended||(this._ended=!0,this._endedAt=this.now(),this.onSpanEnd&&this.onSpanEnd(this))}},Cn=0;function Xi(){Cn+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${Cn}-${e}`}o(Xi,"defaultNextSpanId");var Pn=0;function Ji(){Pn+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${Pn}-${e}`}o(Ji,"defaultNextTraceId");function Je(e={}){let t=e.now??(()=>Date.now()),n=e.id??(e.nextTraceId??Ji)(),r=t(),i=e.name??"trace",s=e.metadata??new Map,a=e.rootSpanData??{kind:"agent",agentName:i},c=!1,d,l,u=new se({id:`${n}-root`,traceId:n,name:i,data:a,startedAt:r,now:t,nextSpanId:e.nextSpanId,onChildCreated:e.onSpanStart,onSpanEnd:e.onSpanEnd});e.onSpanStart&&e.onSpanStart(u);let f={id:n,startedAt:r,rootSpan:u,metadata:s,get endedAt(){return d},get error(){return l??u.error},end(){c||(c=!0,d=t(),u.end(),e.onTraceEnd&&e.onTraceEnd(f))}};return f}o(Je,"createTrace");var Ye=[];function Qe(e){for(let t of Ye)try{t.onSpanStart(e)}catch{}}o(Qe,"_emitSpanStart");function Ze(e){for(let t of Ye)try{t.onSpanEnd(e)}catch{}}o(Ze,"_emitSpanEnd");function et(e){for(let t of Ye)try{t.onTraceEnd(e)}catch{}}o(et,"_emitTraceEnd");var Se=class{static{o(this,"Tracer")}options;constructor(t={}){this.options=t}startTrace(t={}){return Je({id:t.id,name:t.name,rootSpanData:t.rootSpanData,metadata:t.metadata,now:this.options.now,nextSpanId:this.options.nextSpanId,nextTraceId:this.options.nextTraceId,onSpanStart:Qe,onSpanEnd:Ze,onTraceEnd:et})}},Mn=new Se;var ns=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var Sy=new Set(ns);import{debuglog as ks}from"node:util";var pv=ks("kodax:macos-git");var tt="ELECTRON_RUN_AS_NODE";var nt="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";var vv=String.raw`
89
+ }`;import Gt from"node:fs";import Vt from"node:os";import Xt from"node:path";var zo="gpt-5.4",Go="auto-gemini-3",Vo=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Xo=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Jt(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(Jt,"dedupePreserveOrder");function Jo(){let e=Xt.join(Vt.homedir(),".codex","config.toml");try{return Gt.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}o(Jo,"readCodexConfiguredModel");function Yo(){let e=Xt.join(Vt.homedir(),".gemini","settings.json");try{let t=JSON.parse(Gt.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(Yo,"readGeminiConfiguredModel");function z(){return Jo()||zo}o(z,"getCodexCliDefaultModel");function G(){return Yo()||Go}o(G,"getGeminiCliDefaultModel");function ie(){return Jt([z(),...Vo])}o(ie,"getCodexCliKnownModels");function se(){return Jt([G(),...Xo])}o(se,"getGeminiCliKnownModels");var eh=G(),th=se();var ph=z(),mh=ie();import{existsSync as ci,readFileSync as di}from"node:fs";import X from"node:path";import{fileURLToPath as li}from"node:url";var Yt=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Qt=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Zt=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],en=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","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"],tn=["max_tokens","max_completion_tokens"],nn=["native","image-input-native","cli-bridge","image-input-cli-bridge"],rn=["count-tokens","models-list","minimal-message","unsupported"];function O(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(O,"isPlainObject");function W(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(W,"requireString");function V(e,t){if(e!==void 0)return W(e,t)}o(V,"optionalString");function an(e,t){if(e!==void 0){if(typeof e!="string"||!tn.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${tn.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(an,"optionalMaxOutputTokensField");function L(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(L,"optionalNumber");function I(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}o(I,"optionalBoolean");function on(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)=>W(n,`${t}[${r}]`))}}o(on,"optionalStringArray");function Zo(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=W(i,`${t}.${r}`);return n}o(Zo,"optionalStringMap");function ei(e,t){if(e!==void 0){if(typeof e!="string"||!en.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${en.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(ei,"optionalReasoningPreset");function qe(e,t){if(typeof e!="string"||!Yt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Yt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(qe,"requireReasoningCapability");function ti(e,t){if(typeof e!="string"||!Qt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Qt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(ti,"requireEffortStrategy");function ni(e,t){if(e!==void 0){if(typeof e!="string"||!Zt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Zt.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(ni,"optionalThinkingStrategy");function sn(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ti(e.effortStrategy,`${t}.effortStrategy`),r=ei(e.reasoningPreset,`${t}.reasoningPreset`),i=ni(e.thinkingStrategy,`${t}.thinkingStrategy`),s=V(e.defaultEffort,`${t}.defaultEffort`),a=Zo(e.effortAliases,`${t}.effortAliases`),c=on(e.disabledEfforts,`${t}.disabledEfforts`),d=on(e.localRejectEfforts,`${t}.localRejectEfforts`),l=I(e.allowCustomEffort,`${t}.allowCustomEffort`),u=I(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),f=I(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),m=I(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),p=I(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),h=I(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),k=I(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),w=I(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),g={effortStrategy:n};if(r!==void 0&&(g.reasoningPreset=r),i!==void 0&&(g.thinkingStrategy=i),s!==void 0&&(g.defaultEffort=s),a!==void 0&&(g.effortAliases=a),c!==void 0&&(g.disabledEfforts=c),d!==void 0&&(g.localRejectEfforts=d),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);g.supportedEfforts=e.supportedEfforts.map((y,v)=>{if(!O(y))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${v}] must be an object`);return{value:W(y.value,`${t}.supportedEfforts[${v}].value`),...V(y.description,`${t}.supportedEfforts[${v}].description`)!==void 0?{description:V(y.description,`${t}.supportedEfforts[${v}].description`)}:{},...I(y.isDefault,`${t}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:I(y.isDefault,`${t}.supportedEfforts[${v}].isDefault`)}:{},...I(y.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:I(y.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!O(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let y={};for(let[v,te]of Object.entries(e.budgetByEffort))y[v]=L(te,`${t}.budgetByEffort.${v}`)??0;g.budgetByEffort=y}return l!==void 0&&(g.allowCustomEffort=l),u!==void 0&&(g.supportsReasoningEffort=u),f!==void 0&&(g.supportsReasoningSummary=f),m!==void 0&&(g.supportsEncryptedReasoningReplay=m),p!==void 0&&(g.supportsAdaptiveThinking=p),h!==void 0&&(g.supportsManualThinkingBudget=h),k!==void 0&&(g.supportsDisabledThinking=k),w!==void 0&&(g.requiresEffortBetaHeader=w),g}o(sn,"validateReasoningProfile");function cn(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?sn(n,`${t}.reasoningProfile`):sn(r,`${t}.reasoningCapabilityV2`)}o(cn,"validateReasoningProfileField");function ri(e,t){if(typeof e!="string"||!nn.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${nn.join(", ")}, got ${JSON.stringify(e)}`);return e}o(ri,"requireProfileName");function oi(e,t){if(typeof e!="string"||!rn.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${rn.join(", ")}, got ${JSON.stringify(e)}`);return e}o(oi,"requireVerifyStrategy");function ii(e,t){if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=W(e.id,`${t}.id`),r=V(e.wireModel,`${t}.wireModel`),i=V(e.displayName,`${t}.displayName`),s=L(e.contextWindow,`${t}.contextWindow`),a=L(e.maxOutputTokens,`${t}.maxOutputTokens`),c=an(e.maxOutputTokensField,`${t}.maxOutputTokensField`),d=L(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=I(e.replayReasoningContent,`${t}.replayReasoningContent`),u=I(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=L(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),m=e.reasoningCapability===void 0?void 0:qe(e.reasoningCapability,`${t}.reasoningCapability`),p=cn(e,t),h={id:n};return r!==void 0&&(h.wireModel=r),i!==void 0&&(h.displayName=i),s!==void 0&&(h.contextWindow=s),a!==void 0&&(h.maxOutputTokens=a),c!==void 0&&(h.maxOutputTokensField=c),d!==void 0&&(h.thinkingBudgetCap=d),m!==void 0&&(h.reasoningCapability=m),p!==void 0&&(h.reasoningProfile=p),l!==void 0&&(h.replayReasoningContent=l),u!==void 0&&(h.strictThinkingSignature=u),f!==void 0&&(h.streamMaxDurationMs=f),h}o(ii,"validateModelDescriptor");function si(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=qe(i,`${t}.${r}`);return n}o(si,"validateModelReasoningCapabilities");function ai(e,t){if(!O(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=I(e.cliBridge,`providers.${t}.cliBridge`),r=W(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=qe(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=cn(e,`providers.${t}`),a=ri(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=oi(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&c!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${c}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let d=L(e.contextWindow,`providers.${t}.contextWindow`),l=L(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),u=an(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),f=L(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),m=I(e.supportsThinking,`providers.${t}.supportsThinking`),p=si(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),h=V(e.model,`providers.${t}.model`);if(n&&(h!==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&&h===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let k;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);k=e.models.map((y,v)=>ii(y,`providers.${t}.models[${v}]`));let g=new Set([...h===void 0?[]:[h],...k.map(y=>y.id)]);for(let[y,v]of k.entries())if(v.wireModel!==void 0&&!g.has(v.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${y}].wireModel must reference a declared model, got ${JSON.stringify(v.wireModel)}`)}let w={apiKeyEnv:r,reasoningCapability:i,capabilityProfile:a,verifyStrategy:c};return s!==void 0&&(w.reasoningProfile=s),h!==void 0&&(w.model=h),k!==void 0&&(w.models=k),d!==void 0&&(w.contextWindow=d),l!==void 0&&(w.maxOutputTokens=l),u!==void 0&&(w.maxOutputTokensField=u),f!==void 0&&(w.thinkingBudgetCap=f),m!==void 0&&(w.supportsThinking=m),p!==void 0&&(w.modelReasoningCapabilities=p),n&&(w.cliBridge=!0),w}o(ai,"validateProviderEntry");function dn(e){if(!O(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=W(e.updatedAt,"updatedAt");if(!O(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]=ai(i,r);return{version:1,updatedAt:t,providers:n}}o(dn,"validateProviderCapabilitiesJson");var ui=Object.freeze({native:H,"image-input-native":$t,"cli-bridge":we,"image-input-cli-bridge":Nt}),be=null;function fi(){if(process.env.KODAX_BUNDLED==="true")return X.join(X.dirname(process.execPath),"provider-capabilities.json");let e=X.dirname(li(import.meta.url)),t=[X.join(e,"provider-capabilities.json"),X.join(X.dirname(e),"provider-capabilities.json")];for(let n of t)if(ci(n))return n;return t[0]}o(fi,"resolveJsonPath");function pi(e){if(e.models){for(let t of e.models)t.reasoningProfile&&ln(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&ln(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}o(pi,"deepFreezeSnapshot");function ln(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(ln,"freezeReasoningProfile");function mi(e){if(e==="gemini-cli"){let t=G();return{model:t,models:se().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=z();return{model:t,models:ie().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}o(mi,"resolveCliBridgeModels");function hi(e,t){let n=ui[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let i=mi(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.maxOutputTokensField!==void 0&&(r.maxOutputTokensField=t.maxOutputTokensField),t.thinkingBudgetCap!==void 0&&(r.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(r.supportsThinking=t.supportsThinking),r}o(hi,"buildSnapshot");function un(){if(be)return be;let e=fi(),t;try{let i=di(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=dn(t),r={};for(let[i,s]of Object.entries(n.providers))r[i]=pi(hi(i,s));return be=Object.freeze(r),be}o(un,"getProviderSnapshots");var Se=un();var fn=process.env.KODAX_PROVIDER??"zhipu-coding";var Xi=[];function R(e){let t=ne(e),n=Xi.at(-1)?.sink;if(n){try{n(t)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${Cn(t)}
90
+ `)}catch{}}o(R,"emitKodaXDiagnostic");function Cn(e){let t=ne(e),n=Ji(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}o(Cn,"formatKodaXDiagnostic");function Ji(e){if(e===void 0)return"";if(e instanceof Error)return e.stack??e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}o(Ji,"formatDiagnosticDetail");var ae=class e{static{o(this,"SpanImpl")}id;traceId;parentId;name;data;startedAt;_endedAt;_error;_children=[];now;nextSpanId;onChildCreated;onSpanEnd;_ended=!1;constructor(t){this.id=t.id,this.traceId=t.traceId,this.parentId=t.parentId,this.name=t.name,this.data=t.data,this.now=t.now??(()=>Date.now()),this.startedAt=t.startedAt??this.now(),this.nextSpanId=t.nextSpanId??Yi,this.onChildCreated=t.onChildCreated,this.onSpanEnd=t.onSpanEnd}get endedAt(){return this._endedAt}get error(){return this._error}get children(){return this._children}addChild(t,n){let r=new e({id:this.nextSpanId(),traceId:this.traceId,parentId:this.id,name:t,data:n,now:this.now,nextSpanId:this.nextSpanId,onChildCreated:this.onChildCreated,onSpanEnd:this.onSpanEnd});return this._children.push(r),this.onChildCreated&&this.onChildCreated(r),r}setError(t){t instanceof Error?this._error={message:t.message,stack:t.stack}:this._error=t}end(){this._ended||(this._ended=!0,this._endedAt=this.now(),this.onSpanEnd&&this.onSpanEnd(this))}},Pn=0;function Yi(){Pn+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${Pn}-${e}`}o(Yi,"defaultNextSpanId");var Mn=0;function Qi(){Mn+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${Mn}-${e}`}o(Qi,"defaultNextTraceId");function Ye(e={}){let t=e.now??(()=>Date.now()),n=e.id??(e.nextTraceId??Qi)(),r=t(),i=e.name??"trace",s=e.metadata??new Map,a=e.rootSpanData??{kind:"agent",agentName:i},c=!1,d,l,u=new ae({id:`${n}-root`,traceId:n,name:i,data:a,startedAt:r,now:t,nextSpanId:e.nextSpanId,onChildCreated:e.onSpanStart,onSpanEnd:e.onSpanEnd});e.onSpanStart&&e.onSpanStart(u);let f={id:n,startedAt:r,rootSpan:u,metadata:s,get endedAt(){return d},get error(){return l??u.error},end(){c||(c=!0,d=t(),u.end(),e.onTraceEnd&&e.onTraceEnd(f))}};return f}o(Ye,"createTrace");var Qe=[];function Ze(e){for(let t of Qe)try{t.onSpanStart(e)}catch{}}o(Ze,"_emitSpanStart");function et(e){for(let t of Qe)try{t.onSpanEnd(e)}catch{}}o(et,"_emitSpanEnd");function tt(e){for(let t of Qe)try{t.onTraceEnd(e)}catch{}}o(tt,"_emitTraceEnd");var xe=class{static{o(this,"Tracer")}options;constructor(t={}){this.options=t}startTrace(t={}){return Ye({id:t.id,name:t.name,rootSpanData:t.rootSpanData,metadata:t.metadata,now:this.options.now,nextSpanId:this.options.nextSpanId,nextTraceId:this.options.nextTraceId,onSpanStart:Ze,onSpanEnd:et,onTraceEnd:tt})}},On=new xe;var os=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var Vy=new Set(os);import{debuglog as Is}from"node:util";var Wv=Is("kodax:macos-git");var nt="ELECTRON_RUN_AS_NODE";var rt="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";var zv=String.raw`
91
91
  using System;
92
92
  using System.Runtime.InteropServices;
93
93
  public static class KodaXWindowsJobMembership {
@@ -154,7 +154,7 @@ public static class KodaXWindowsJobMembership {
154
154
  CloseHandle(job);
155
155
  }
156
156
  }
157
- }`,bv=String.raw`
157
+ }`,Gv=String.raw`
158
158
  $ErrorActionPreference = 'Stop'
159
159
  $source = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($env:KODAX_INTERNAL_JOB_QUERY_SOURCE))
160
160
  Add-Type -TypeDefinition $source
@@ -162,7 +162,7 @@ if ([KodaXWindowsJobMembership]::IsCurrentProcessContained($env:KODAX_DAEMON_JOB
162
162
  [Console]::Out.Write('1')
163
163
  } else {
164
164
  [Console]::Out.Write('0')
165
- }`,Sv=String.raw`
165
+ }`,Vv=String.raw`
166
166
  using System;
167
167
  using System.Runtime.InteropServices;
168
168
  using System.Text;
@@ -249,7 +249,7 @@ public static class KodaXNativeProcessSnapshot {
249
249
  CloseHandle(snapshot);
250
250
  }
251
251
  }
252
- }`,xv=Object.freeze({status:"terminated"}),kv=Object.freeze({status:"already-exited"}),Ev=Object.freeze({status:"unknown"});var Ee="KODAX_EFFECT_JOB_PAYLOAD";var Is=String.raw`
252
+ }`,Xv=Object.freeze({status:"terminated"}),Jv=Object.freeze({status:"already-exited"}),Yv=Object.freeze({status:"unknown"});var Ie="KODAX_EFFECT_JOB_PAYLOAD";var As=String.raw`
253
253
  using System;
254
254
  using System.IO;
255
255
  using System.Runtime.InteropServices;
@@ -442,7 +442,7 @@ public static class KodaXEffectJob {
442
442
  }
443
443
  }
444
444
 
445
- }`,Rs=String.raw`
445
+ }`,_s=String.raw`
446
446
  using System;
447
447
  using System.Collections.Generic;
448
448
  using System.Diagnostics;
@@ -580,14 +580,14 @@ public static class KodaXSidProbe {
580
580
  }
581
581
  return false;
582
582
  }
583
- }`,As=String.raw`
583
+ }`,Ts=String.raw`
584
584
  $ErrorActionPreference = 'Stop'
585
585
  try {
586
586
  $payload = [Text.Encoding]::UTF8.GetString(
587
- [Convert]::FromBase64String($env:${Ee})) | ConvertFrom-Json
588
- Remove-Item Env:${Ee} -ErrorAction SilentlyContinue
587
+ [Convert]::FromBase64String($env:${Ie})) | ConvertFrom-Json
588
+ Remove-Item Env:${Ie} -ErrorAction SilentlyContinue
589
589
  $source = @'
590
- ${Is}
590
+ ${As}
591
591
  '@
592
592
  Add-Type -TypeDefinition $source
593
593
  if ($payload.action -eq 'recover') {
@@ -605,14 +605,14 @@ ${Is}
605
605
  [Console]::Out.WriteLine('ERROR:' + $_.Exception.Message)
606
606
  [Console]::Out.Flush()
607
607
  exit 1
608
- }`,jv=Buffer.from(As,"utf16le").toString("base64"),_s=String.raw`
608
+ }`,fb=Buffer.from(Ts,"utf16le").toString("base64"),Cs=String.raw`
609
609
  $ErrorActionPreference = 'Stop'
610
610
  try {
611
611
  $payload = [Text.Encoding]::UTF8.GetString(
612
- [Convert]::FromBase64String($env:${Ee})) | ConvertFrom-Json
613
- Remove-Item Env:${Ee} -ErrorAction SilentlyContinue
612
+ [Convert]::FromBase64String($env:${Ie})) | ConvertFrom-Json
613
+ Remove-Item Env:${Ie} -ErrorAction SilentlyContinue
614
614
  $source = @'
615
- ${Rs}
615
+ ${_s}
616
616
  '@
617
617
  Add-Type -TypeDefinition $source
618
618
  $active = [KodaXSidProbe]::HasOtherProcessWithSid(
@@ -625,26 +625,26 @@ ${Rs}
625
625
  [Console]::Out.WriteLine('ERROR:' + $_.Exception.Message)
626
626
  [Console]::Out.Flush()
627
627
  exit 1
628
- }`,Fv=Buffer.from(_s,"utf16le").toString("base64");var Ls=Math.floor(3.75*1024*1024);var Fs=1440*60*1e3;import{fileURLToPath as ma}from"url";import{dirname as ha}from"path";var ga=ma(import.meta.url),mx=ha(ga);import{readFile as Sa,readdir as xa}from"fs/promises";import{join as B,relative as ka}from"path";import Hn from"yaml";var wa=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function ya(e){let t=e.split(`
628
+ }`,pb=Buffer.from(Cs,"utf16le").toString("base64");var Fs=Math.floor(3.75*1024*1024);var Bs=1440*60*1e3;import{fileURLToPath as ga}from"url";import{dirname as wa}from"path";var ya=ga(import.meta.url),Ux=wa(ya);import{readFile as ka,readdir as Ea}from"fs/promises";import{join as B,relative as Ia}from"path";import zn from"yaml";var va=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function ba(e){let t=e.split(`
629
629
  `),n=[];for(let r of t){let i=r.indexOf(":");if(i>0){let s=r.slice(0,i).trim(),a=r.slice(i+1).trim();if(a.includes(":")&&!a.startsWith('"')&&!a.startsWith("'")&&!a.startsWith("[")&&!a.startsWith("|")&&!a.startsWith(">")){n.push(`${s}: |-`),n.push(` ${a}`);continue}}n.push(r)}return n.join(`
630
- `)}o(ya,"sanitizeYaml");function zn(e,t={}){let n=e.replace(/^/,"").replace(/\r\n/g,`
630
+ `)}o(ba,"sanitizeYaml");function Gn(e,t={}){let n=e.replace(/^/,"").replace(/\r\n/g,`
631
631
  `).replace(/\r/g,`
632
632
  `).trimStart();if(!n.startsWith(`---
633
633
  `)){if(t.throwOnMissing)throw new Error("Invalid markdown: missing YAML frontmatter");return[null,e]}let r=n.indexOf(`
634
634
  ---
635
635
  `,4);if(r===-1){let c=n.indexOf(`
636
- ---`,4);c!==-1&&c===n.length-4&&(r=c)}if(r===-1){if(t.throwOnMissing)throw new Error("Invalid markdown: unclosed YAML frontmatter");return[null,e]}let i=n.slice(4,r),s=n.slice(r+5).trim(),a;try{a=Hn.parse(i)??{}}catch{a=Hn.parse(ya(i))??{}}if(a==null||typeof a!="object"||Array.isArray(a)){if(t.throwOnMissing)throw new Error("Invalid markdown: YAML frontmatter must be an object");return[null,s]}return[a,s]}o(zn,"parseYamlFrontmatter");function Gn(e){if(typeof e=="string"){let t=e.trim();return t.length>0?t:void 0}if(Array.isArray(e)){let t=e.map(n=>String(n).trim()).filter(n=>n.length>0);return t.length>0?t.join(", "):void 0}}o(Gn,"normalizeAllowedToolsString");function va(e){if(typeof e=="string"){let t=e.trim();return t?{command:t}:void 0}if(e&&typeof e=="object"&&!Array.isArray(e)){let t=e,n=typeof t.command=="string"?t.command.trim():"";if(!n)return;let r=typeof t.matcher=="string"&&t.matcher.trim()?t.matcher.trim():void 0;return{command:n,matcher:r}}}o(va,"normalizeYamlHookEntry");function ba(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>va(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(ba,"normalizeYamlHookEntryList");function Vn(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of wa){let i=ba(t[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}o(Vn,"normalizeYamlHookMap");function Xn(e){let[t,n]=zn(e,{throwOnMissing:!0});if(!t)throw new Error("Invalid SKILL.md: YAML frontmatter must be an object");if(!t.name||typeof t.name!="string")throw new Error('Invalid SKILL.md: missing required "name" field');if(!t.description||typeof t.description!="string")throw new Error('Invalid SKILL.md: missing required "description" field');return{frontmatter:{name:t.name,description:t.description,disableModelInvocation:t["disable-model-invocation"]===!0,userInvocable:t["user-invocable"]!==!1,allowedTools:Gn(t["allowed-tools"]),context:t.context==="fork"?"fork":void 0,agent:typeof t.agent=="string"?t.agent:void 0,argumentHint:typeof t["argument-hint"]=="string"?t["argument-hint"]:void 0,model:typeof t.model=="string"?t.model:void 0,hooks:Vn(t.hooks),license:typeof t.license=="string"?t.license:void 0,compatibility:typeof t.compatibility=="string"?t.compatibility:void 0,metadata:t.metadata&&typeof t.metadata=="object"&&!Array.isArray(t.metadata)?t.metadata:void 0},body:n}}o(Xn,"parseSkillMarkdown");async function Ie(e,t){let n=B(e,"SKILL.md");try{let r=await Sa(n,"utf-8"),{frontmatter:i,body:s}=Xn(r),[a,c,d,l,u]=await Promise.all([X(B(e,"scripts")),X(B(e,"references")),X(B(e,"assets")),X(B(e,"templates")),X(B(e,"resources"))]);return{...i,userInvocable:!0,path:e,skillFilePath:n,content:s,rawContent:s,loaded:!0,source:t,...a.length>0&&{scripts:a},...c.length>0&&{references:c},...d.length>0&&{assets:d},...l.length>0&&{templates:l},...u.length>0&&{resources:u}}}catch(r){return R({source:"agent:skills",level:"error",message:`Failed to load skill from ${e}.`,detail:r}),null}}o(Ie,"loadFullSkill");async function X(e,t=e){let n=[];try{let r=await xa(e,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=B(e,i.name);if(i.isDirectory()){n.push(...await X(s,t));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:ka(t,s).replace(/\\/g,"/")})}}catch{}return n}o(X,"loadSkillFiles");var Jn=64*1024,Yn=256*1024;var ok=1024*1024;var Nk=16*1024;var qk=16*1024;import{execSync as ic}from"child_process";import sc from"path";var ac=new Set(["ls","cat","pwd","echo","whoami","date","which","whereis","tree","dir","type","get-childitem","get-content","select-string","get-location","grep","find","awk","sed","head","tail","less","more","wc","git status","git diff","git log","git show","git branch","git remote","git ls-files","git rev-parse","git grep","node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"]);function pr(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of ac)if(t===n||t.startsWith(`${n} `)){if(n==="sed"&&t.split(/\s+/).some(s=>s.startsWith("-i")||s==="--in-place"))return!1;if(n==="awk"){let i=t.split(/\s+/);if(i.includes("-f")||i.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"].includes(n)){let i=t.split(/\s+/).slice(1);if(i.length>0&&!i.every(s=>/^(-v|--version|-h|--help)$/.test(s)))return!1}return!0}return!1}o(pr,"isSingleSafeDynamicContextCommand");function cc(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&sc.sep!=="\\"&&t.replace(/\\ /g,"").includes("\\"))return!1;let r=t.split(/\s*&&\s*/);if(r.length===1)return pr(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!pr(s))return!1}return!0}o(cc,"isSafeDynamicContextCommand");function mr(e){let t=[],n="",r=!1,i="";for(let s=0;s<e.length;s++){let a=e[s];r?a===i?r=!1:n+=a:a==='"'||a==="'"?(r=!0,i=a):a===" "?n&&(t.push(n),n=""):n+=a}return n&&t.push(n),t}o(mr,"parseArguments");var Te=class{static{o(this,"VariableResolver")}context;constructor(t){this.context=t}async resolve(t,n){let r=t,i=mr(n);return r=this.resolvePositionalArgs(r,i),r=this.resolveArguments(r,n),r=this.resolveEnvVars(r),r=await this.resolveDynamicContext(r),r}resolvePositionalArgs(t,n){return t.replace(/\$(\d+)(?![a-zA-Z0-9_])/g,(r,i)=>{let s=parseInt(i,10);return n[s]??""})}resolveArguments(t,n){return t.replace(/\$ARGUMENTS/g,n)}resolveEnvVars(t){let n={...this.context.environment,CLAUDE_SESSION_ID:this.context.sessionId??"",KODAX_SESSION_ID:this.context.sessionId??"",KODAX_WORKING_DIR:this.context.workingDirectory};return t.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,(r,i)=>n[i]??r)}async resolveDynamicContext(t){let n=/!`([^`]+)`/g,r=[],i;for(;(i=n.exec(t))!==null;)r.push({match:i[0],command:i[1]});if(r.length===0)return t;let s=t;for(let{match:a,command:c}of r)try{let d=await this.executeDynamicCommand(c);s=s.replace(a,d)}catch(d){let l=d instanceof Error?d.message:String(d);s=s.replace(a,`[Error: ${l}]`)}return s}async executeDynamicCommand(t){if(this.context.disableDynamicContext)throw new Error("Dynamic context disabled by host. Skill `!`cmd`` blocks are not allowed in this environment.");if(this.context.executeDynamicContext){let n=await this.context.executeDynamicContext(t,this.context.workingDirectory);return typeof n=="string"?n.trim():""}if(!cc(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return ic(t,{cwd:this.context.workingDirectory,encoding:"utf-8",timeout:5e3,maxBuffer:1048576,windowsHide:!0}).trim()}catch(n){throw n instanceof Error?new Error(`Command failed: ${n.message}`):n}}};async function de(e,t,n){return new Te(n).resolve(e,t)}o(de,"resolveSkillContent");function hr(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}o(hr,"escapeXml");var ut=120;function Ce(e){return e.replace(/\\/g,"/")}o(Ce,"formatDisplayPath");function uc(e){return[...(e.references??[]).map(t=>({folder:"references",file:t})),...(e.scripts??[]).map(t=>({folder:"scripts",file:t})),...(e.assets??[]).map(t=>({folder:"assets",file:t})),...(e.templates??[]).map(t=>({folder:"templates",file:t})),...(e.resources??[]).map(t=>({folder:"resources",file:t}))]}o(uc,"collectSupportFiles");function fc(e){let t=uc(e);if(t.length===0)return[];let n=[["references",e.references],["scripts",e.scripts],["assets",e.assets],["templates",e.templates],["resources",e.resources]],r=["Skill support files are rooted at the skill root above. When the skill references `references/...`, `assets/...`, `scripts/...`, `templates/...`, or `resources/...`, read it from this skill root.","","Support roots:"];for(let[i,s]of n)s?.length&&r.push(`- ${i}/: ${Ce(`${e.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of t.slice(0,ut))r.push(`- ${i}/${s.relativePath}: ${Ce(s.path)}`);return t.length>ut&&r.push(`- ... ${t.length-ut} more files under ${Ce(e.path)}`),r}o(fc,"buildSupportFileContext");function pc(e,t,n){let r=[];r.push(`<skill name="${hr(e.name)}" location="${hr(e.path)}">`),r.push(""),r.push(`Skill root: ${Ce(e.path)}`),e.source==="builtin"?r.push("This is a built-in KodaX skill."):e.source==="project"?r.push("This is a project-defined skill. Project work paths are relative to the project root; skill support files are relative to the skill root above."):e.source==="user"&&r.push("This is a user-defined skill."),r.push("");let i=fc(e);return i.length>0&&(r.push(...i),r.push("")),r.push(t),n.trim()&&(r.push(""),r.push(`User provided arguments: ${n}`)),r.push(""),r.push("</skill>"),r.join(`
637
- `)}o(pc,"buildSkillBlock");async function ft(e,t,n){let r=await de(e.content,t,n);return{content:pc(e,r,t),disableModelInvocation:e.disableModelInvocation??!1,skill:e}}o(ft,"expandSkillForLLM");import{writeFile as br}from"node:fs/promises";import F from"node:path";import{existsSync as mc}from"node:fs";import{mkdir as hc,readFile as pt,readdir as gc,stat as wr,writeFile as UE}from"node:fs/promises";import wc from"node:os";import $ from"node:path";import{fileURLToPath as yr,pathToFileURL as yc}from"node:url";import vc from"yaml";var Y=null;async function j(){if(Y)return Y;let e=$.dirname(yr(import.meta.url)),t=[],n=$.resolve(e,"../../../index.js");if(mc(n))return Y=await import(yc(n).href),Y;t.push(`relative SDK path not found: ${n}`);try{return Y=await import(["@kodax-ai","kodax"].join("/")),Y}catch(r){t.push(`bare-name @kodax-ai/kodax failed: ${r?.code??r?.message}`)}throw new Error(`Cannot locate KodaX SDK from helper script ${import.meta.url}.
636
+ ---`,4);c!==-1&&c===n.length-4&&(r=c)}if(r===-1){if(t.throwOnMissing)throw new Error("Invalid markdown: unclosed YAML frontmatter");return[null,e]}let i=n.slice(4,r),s=n.slice(r+5).trim(),a;try{a=zn.parse(i)??{}}catch{a=zn.parse(ba(i))??{}}if(a==null||typeof a!="object"||Array.isArray(a)){if(t.throwOnMissing)throw new Error("Invalid markdown: YAML frontmatter must be an object");return[null,s]}return[a,s]}o(Gn,"parseYamlFrontmatter");function Vn(e){if(typeof e=="string"){let t=e.trim();return t.length>0?t:void 0}if(Array.isArray(e)){let t=e.map(n=>String(n).trim()).filter(n=>n.length>0);return t.length>0?t.join(", "):void 0}}o(Vn,"normalizeAllowedToolsString");function Sa(e){if(typeof e=="string"){let t=e.trim();return t?{command:t}:void 0}if(e&&typeof e=="object"&&!Array.isArray(e)){let t=e,n=typeof t.command=="string"?t.command.trim():"";if(!n)return;let r=typeof t.matcher=="string"&&t.matcher.trim()?t.matcher.trim():void 0;return{command:n,matcher:r}}}o(Sa,"normalizeYamlHookEntry");function xa(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>Sa(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(xa,"normalizeYamlHookEntryList");function Xn(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of va){let i=xa(t[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}o(Xn,"normalizeYamlHookMap");function Jn(e){let[t,n]=Gn(e,{throwOnMissing:!0});if(!t)throw new Error("Invalid SKILL.md: YAML frontmatter must be an object");if(!t.name||typeof t.name!="string")throw new Error('Invalid SKILL.md: missing required "name" field');if(!t.description||typeof t.description!="string")throw new Error('Invalid SKILL.md: missing required "description" field');return{frontmatter:{name:t.name,description:t.description,disableModelInvocation:t["disable-model-invocation"]===!0,userInvocable:t["user-invocable"]!==!1,allowedTools:Vn(t["allowed-tools"]),context:t.context==="fork"?"fork":void 0,agent:typeof t.agent=="string"?t.agent:void 0,argumentHint:typeof t["argument-hint"]=="string"?t["argument-hint"]:void 0,model:typeof t.model=="string"?t.model:void 0,hooks:Xn(t.hooks),license:typeof t.license=="string"?t.license:void 0,compatibility:typeof t.compatibility=="string"?t.compatibility:void 0,metadata:t.metadata&&typeof t.metadata=="object"&&!Array.isArray(t.metadata)?t.metadata:void 0},body:n}}o(Jn,"parseSkillMarkdown");async function Re(e,t){let n=B(e,"SKILL.md");try{let r=await ka(n,"utf-8"),{frontmatter:i,body:s}=Jn(r),[a,c,d,l,u]=await Promise.all([J(B(e,"scripts")),J(B(e,"references")),J(B(e,"assets")),J(B(e,"templates")),J(B(e,"resources"))]);return{...i,userInvocable:!0,path:e,skillFilePath:n,content:s,rawContent:s,loaded:!0,source:t,...a.length>0&&{scripts:a},...c.length>0&&{references:c},...d.length>0&&{assets:d},...l.length>0&&{templates:l},...u.length>0&&{resources:u}}}catch(r){return R({source:"agent:skills",level:"error",message:`Failed to load skill from ${e}.`,detail:r}),null}}o(Re,"loadFullSkill");async function J(e,t=e){let n=[];try{let r=await Ea(e,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=B(e,i.name);if(i.isDirectory()){n.push(...await J(s,t));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:Ia(t,s).replace(/\\/g,"/")})}}catch{}return n}o(J,"loadSkillFiles");var Yn=64*1024,Qn=256*1024;var Mk=1024*1024;var dE=16*1024;var yE=16*1024;import{execSync as ac}from"child_process";import cc from"path";var dc=new Set(["ls","cat","pwd","echo","whoami","date","which","whereis","tree","dir","type","get-childitem","get-content","select-string","get-location","grep","find","awk","sed","head","tail","less","more","wc","git status","git diff","git log","git show","git branch","git remote","git ls-files","git rev-parse","git grep","node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"]);function mr(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of dc)if(t===n||t.startsWith(`${n} `)){if(n==="sed"&&t.split(/\s+/).some(s=>s.startsWith("-i")||s==="--in-place"))return!1;if(n==="awk"){let i=t.split(/\s+/);if(i.includes("-f")||i.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"].includes(n)){let i=t.split(/\s+/).slice(1);if(i.length>0&&!i.every(s=>/^(-v|--version|-h|--help)$/.test(s)))return!1}return!0}return!1}o(mr,"isSingleSafeDynamicContextCommand");function lc(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&cc.sep!=="\\"&&t.replace(/\\ /g,"").includes("\\"))return!1;let r=t.split(/\s*&&\s*/);if(r.length===1)return mr(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!mr(s))return!1}return!0}o(lc,"isSafeDynamicContextCommand");function hr(e){let t=[],n="",r=!1,i="";for(let s=0;s<e.length;s++){let a=e[s];r?a===i?r=!1:n+=a:a==='"'||a==="'"?(r=!0,i=a):a===" "?n&&(t.push(n),n=""):n+=a}return n&&t.push(n),t}o(hr,"parseArguments");var Ce=class{static{o(this,"VariableResolver")}context;constructor(t){this.context=t}async resolve(t,n){let r=t,i=hr(n);return r=this.resolvePositionalArgs(r,i),r=this.resolveArguments(r,n),r=this.resolveEnvVars(r),r=await this.resolveDynamicContext(r),r}resolvePositionalArgs(t,n){return t.replace(/\$(\d+)(?![a-zA-Z0-9_])/g,(r,i)=>{let s=parseInt(i,10);return n[s]??""})}resolveArguments(t,n){return t.replace(/\$ARGUMENTS/g,n)}resolveEnvVars(t){let n={...this.context.environment,CLAUDE_SESSION_ID:this.context.sessionId??"",KODAX_SESSION_ID:this.context.sessionId??"",KODAX_WORKING_DIR:this.context.workingDirectory};return t.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,(r,i)=>n[i]??r)}async resolveDynamicContext(t){let n=/!`([^`]+)`/g,r=[],i;for(;(i=n.exec(t))!==null;)r.push({match:i[0],command:i[1]});if(r.length===0)return t;let s=t;for(let{match:a,command:c}of r)try{let d=await this.executeDynamicCommand(c);s=s.replace(a,d)}catch(d){let l=d instanceof Error?d.message:String(d);s=s.replace(a,`[Error: ${l}]`)}return s}async executeDynamicCommand(t){if(this.context.disableDynamicContext)throw new Error("Dynamic context disabled by host. Skill `!`cmd`` blocks are not allowed in this environment.");if(this.context.executeDynamicContext){let n=await this.context.executeDynamicContext(t,this.context.workingDirectory);return typeof n=="string"?n.trim():""}if(!lc(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return ac(t,{cwd:this.context.workingDirectory,encoding:"utf-8",timeout:5e3,maxBuffer:1048576,windowsHide:!0}).trim()}catch(n){throw n instanceof Error?new Error(`Command failed: ${n.message}`):n}}};async function le(e,t,n){return new Ce(n).resolve(e,t)}o(le,"resolveSkillContent");function gr(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}o(gr,"escapeXml");var ft=120;function Pe(e){return e.replace(/\\/g,"/")}o(Pe,"formatDisplayPath");function pc(e){return[...(e.references??[]).map(t=>({folder:"references",file:t})),...(e.scripts??[]).map(t=>({folder:"scripts",file:t})),...(e.assets??[]).map(t=>({folder:"assets",file:t})),...(e.templates??[]).map(t=>({folder:"templates",file:t})),...(e.resources??[]).map(t=>({folder:"resources",file:t}))]}o(pc,"collectSupportFiles");function mc(e){let t=pc(e);if(t.length===0)return[];let n=[["references",e.references],["scripts",e.scripts],["assets",e.assets],["templates",e.templates],["resources",e.resources]],r=["Skill support files are rooted at the skill root above. When the skill references `references/...`, `assets/...`, `scripts/...`, `templates/...`, or `resources/...`, read it from this skill root.","","Support roots:"];for(let[i,s]of n)s?.length&&r.push(`- ${i}/: ${Pe(`${e.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of t.slice(0,ft))r.push(`- ${i}/${s.relativePath}: ${Pe(s.path)}`);return t.length>ft&&r.push(`- ... ${t.length-ft} more files under ${Pe(e.path)}`),r}o(mc,"buildSupportFileContext");function hc(e,t,n){let r=[];r.push(`<skill name="${gr(e.name)}" location="${gr(e.path)}">`),r.push(""),r.push(`Skill root: ${Pe(e.path)}`),e.source==="builtin"?r.push("This is a built-in KodaX skill."):e.source==="project"?r.push("This is a project-defined skill. Project work paths are relative to the project root; skill support files are relative to the skill root above."):e.source==="user"&&r.push("This is a user-defined skill."),r.push("");let i=mc(e);return i.length>0&&(r.push(...i),r.push("")),r.push(t),n.trim()&&(r.push(""),r.push(`User provided arguments: ${n}`)),r.push(""),r.push("</skill>"),r.join(`
637
+ `)}o(hc,"buildSkillBlock");async function pt(e,t,n){let r=await le(e.content,t,n);return{content:hc(e,r,t),disableModelInvocation:e.disableModelInvocation??!1,skill:e}}o(pt,"expandSkillForLLM");import{writeFile as Sr}from"node:fs/promises";import F from"node:path";import{existsSync as gc}from"node:fs";import{mkdir as wc,readFile as mt,readdir as yc,stat as yr,writeFile as gI}from"node:fs/promises";import vc from"node:os";import $ from"node:path";import{fileURLToPath as vr,pathToFileURL as bc}from"node:url";import Sc from"yaml";var Q=null;async function j(){if(Q)return Q;let e=$.dirname(vr(import.meta.url)),t=[],n=$.resolve(e,"../../../index.js");if(gc(n))return Q=await import(bc(n).href),Q;t.push(`relative SDK path not found: ${n}`);try{return Q=await import(["@kodax-ai","kodax"].join("/")),Q}catch(r){t.push(`bare-name @kodax-ai/kodax failed: ${r?.code??r?.message}`)}throw new Error(`Cannot locate KodaX SDK from helper script ${import.meta.url}.
638
638
  Attempted:
639
639
  - ${t.join(`
640
- - `)}`)}o(j,"loadKodaXSDK");function bc(e){let t=e.replace(/^\uFEFF/,"").replace(/\r\n/g,`
640
+ - `)}`)}o(j,"loadKodaXSDK");function xc(e){let t=e.replace(/^\uFEFF/,"").replace(/\r\n/g,`
641
641
  `).replace(/\r/g,`
642
642
  `).trimStart();if(!t.startsWith(`---
643
643
  `))throw new Error("SKILL.md missing YAML frontmatter");let n=t.indexOf(`
644
644
  ---
645
- `,4);if(n===-1)throw new Error("SKILL.md has unclosed YAML frontmatter");return{yamlText:t.slice(4,n),body:t.slice(n+5).trim()}}o(bc,"extractFrontmatter");function Pe(e){let{yamlText:t,body:n}=bc(e),r=vc.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("Frontmatter must be a YAML object");return{frontmatter:r,body:n}}o(Pe,"parseSkillMarkdown");async function ue(e){let t=$.join(e,"SKILL.md");if(!(await wr(t).catch(()=>null))?.isFile())throw new Error(`SKILL.md not found in ${e}`);let r=await pt(t,"utf8"),{frontmatter:i,body:s}=Pe(r);return{skillDir:$.resolve(e),skillMdPath:t,rawContent:r,body:s,frontmatter:i}}o(ue,"loadSkill");async function fe(e){try{return await wr(e),!0}catch{return!1}}o(fe,"pathExists");function Me(e){if(!e.length)return{mean:0,stddev:0,min:0,max:0};let t=e.reduce((r,i)=>r+i,0)/e.length,n=e.length>1?e.reduce((r,i)=>r+(i-t)**2,0)/(e.length-1):0;return{mean:le(t),stddev:le(Math.sqrt(n)),min:le(Math.min(...e)),max:le(Math.max(...e))}}o(Me,"calculateStats");function le(e,t=4){return Number(e.toFixed(t))}o(le,"roundNumber");function Oe(e){return e>=0?`+${e.toFixed(4)}`:e.toFixed(4)}o(Oe,"formatDelta");function gr(e){try{return JSON.parse(e)}catch{return null}}o(gr,"safeJsonParse");function Q(e){let t=gr(e.trim());if(t&&typeof t=="object")return t;let n=e.indexOf("{"),r=e.lastIndexOf("}");return n===-1||r===-1||r<=n?null:gr(e.slice(n,r+1))}o(Q,"extractJsonObject");async function P(e,t=null){try{return JSON.parse(await pt(e,"utf8"))}catch{return t}}o(P,"readJsonFile");async function Z(e,t){let n=$.dirname(yr(e));return pt($.resolve(n,t),"utf8")}o(Z,"loadRelativeText");function _(e,t=12e3){let n=typeof e=="string"?e:String(e??"");if(n.length<=t)return n;let r=n.length-t;return`${n.slice(0,t)}
645
+ `,4);if(n===-1)throw new Error("SKILL.md has unclosed YAML frontmatter");return{yamlText:t.slice(4,n),body:t.slice(n+5).trim()}}o(xc,"extractFrontmatter");function Me(e){let{yamlText:t,body:n}=xc(e),r=Sc.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("Frontmatter must be a YAML object");return{frontmatter:r,body:n}}o(Me,"parseSkillMarkdown");async function fe(e){let t=$.join(e,"SKILL.md");if(!(await yr(t).catch(()=>null))?.isFile())throw new Error(`SKILL.md not found in ${e}`);let r=await mt(t,"utf8"),{frontmatter:i,body:s}=Me(r);return{skillDir:$.resolve(e),skillMdPath:t,rawContent:r,body:s,frontmatter:i}}o(fe,"loadSkill");async function pe(e){try{return await yr(e),!0}catch{return!1}}o(pe,"pathExists");function Oe(e){if(!e.length)return{mean:0,stddev:0,min:0,max:0};let t=e.reduce((r,i)=>r+i,0)/e.length,n=e.length>1?e.reduce((r,i)=>r+(i-t)**2,0)/(e.length-1):0;return{mean:ue(t),stddev:ue(Math.sqrt(n)),min:ue(Math.min(...e)),max:ue(Math.max(...e))}}o(Oe,"calculateStats");function ue(e,t=4){return Number(e.toFixed(t))}o(ue,"roundNumber");function $e(e){return e>=0?`+${e.toFixed(4)}`:e.toFixed(4)}o($e,"formatDelta");function wr(e){try{return JSON.parse(e)}catch{return null}}o(wr,"safeJsonParse");function Z(e){let t=wr(e.trim());if(t&&typeof t=="object")return t;let n=e.indexOf("{"),r=e.lastIndexOf("}");return n===-1||r===-1||r<=n?null:wr(e.slice(n,r+1))}o(Z,"extractJsonObject");async function P(e,t=null){try{return JSON.parse(await mt(e,"utf8"))}catch{return t}}o(P,"readJsonFile");async function ee(e,t){let n=$.dirname(vr(e));return mt($.resolve(n,t),"utf8")}o(ee,"loadRelativeText");function _(e,t=12e3){let n=typeof e=="string"?e:String(e??"");if(n.length<=t)return n;let r=n.length-t;return`${n.slice(0,t)}
646
646
 
647
- [truncated ${r} chars]`}o(_,"truncateText");function vr(e){let t=Array.isArray(e)?e.length:0,n=Array.isArray(e)?e.filter(i=>i?.passed===!0).length:0,r=Math.max(t-n,0);return{passed:n,failed:r,total:t,pass_rate:t>0?le(n/t):0}}o(vr,"computePassSummary");async function mt(e,t=e,n=[]){let r=await gc(t,{withFileTypes:!0}).catch(()=>[]);for(let i of r.sort((s,a)=>s.name.localeCompare(a.name))){let s=$.join(t,i.name);if(i.isDirectory()){await mt(e,s,n);continue}i.isFile()&&n.push({absolutePath:s,relativePath:$.relative(e,s).replace(/\\/g,"/")})}return n}o(mt,"collectFiles");function pe(){return $.join(wc.homedir(),".kodax","skills")}o(pe,"getDefaultSkillsDir");async function T(e){return await hc(e,{recursive:!0}),e}o(T,"ensureDirectory");function Sc(e){return e.split("-").filter(Boolean).map(t=>t[0]?.toUpperCase()+t.slice(1)).join(" ")}o(Sc,"titleFromSlug");function xc(e,t){let n=Sc(e);return`---
647
+ [truncated ${r} chars]`}o(_,"truncateText");function br(e){let t=Array.isArray(e)?e.length:0,n=Array.isArray(e)?e.filter(i=>i?.passed===!0).length:0,r=Math.max(t-n,0);return{passed:n,failed:r,total:t,pass_rate:t>0?ue(n/t):0}}o(br,"computePassSummary");async function ht(e,t=e,n=[]){let r=await yc(t,{withFileTypes:!0}).catch(()=>[]);for(let i of r.sort((s,a)=>s.name.localeCompare(a.name))){let s=$.join(t,i.name);if(i.isDirectory()){await ht(e,s,n);continue}i.isFile()&&n.push({absolutePath:s,relativePath:$.relative(e,s).replace(/\\/g,"/")})}return n}o(ht,"collectFiles");function me(){return $.join(vc.homedir(),".kodax","skills")}o(me,"getDefaultSkillsDir");async function T(e){return await wc(e,{recursive:!0}),e}o(T,"ensureDirectory");function kc(e){return e.split("-").filter(Boolean).map(t=>t[0]?.toUpperCase()+t.slice(1)).join(" ")}o(kc,"titleFromSlug");function Ec(e,t){let n=kc(e);return`---
648
648
  name: ${e}
649
649
  description: ${t}
650
650
  user-invocable: true
@@ -674,10 +674,10 @@ Describe the task this skill handles, the trigger boundary, and the expected out
674
674
  - Put deeper guidance in \`references/\`.
675
675
  - Put reusable templates or static files in \`assets/\`.
676
676
  - Put repeatable helper scripts in \`scripts/\`.
677
- `}o(xc,"renderSkillTemplate");function kc(e){return JSON.stringify({skill_name:e,evals:[{id:1,prompt:"TODO: Add a realistic user request to evaluate this skill.",expected_output:"Describe what a successful result should accomplish.",files:[],assertions:[]}]},null,2)}o(kc,"renderEvalTemplate");async function Ec(e){let t=F.resolve(e.baseDir??pe()),n=F.join(t,e.name),r=e.description??`Describe what ${e.name} does and when it should be used.`;if(await fe(n)&&!e.force)throw new Error(`Skill directory already exists: ${n}`);return await T(n),await T(F.join(n,"references")),await T(F.join(n,"assets")),await T(F.join(n,"scripts")),await br(F.join(n,"SKILL.md"),xc(e.name,r),"utf8"),e.includeEvals!==!1&&(await T(F.join(n,"evals")),await br(F.join(n,"evals","evals.json"),`${kc(e.name)}
678
- `,"utf8")),{skillDir:n,created:["SKILL.md",...e.includeEvals!==!1?["evals/evals.json"]:[],"references/","assets/","scripts/"]}}o(Ec,"initSkill");function Ic(e){let t={name:e[2],baseDir:void 0,description:void 0,force:!1,includeEvals:!0};for(let n=3;n<e.length;n+=1){let r=e[n];(r==="--path"||r==="--dest")&&e[n+1]?t.baseDir=e[++n]:r==="--description"&&e[n+1]?t.description=e[++n]:r==="--force"?t.force=!0:r==="--no-evals"&&(t.includeEvals=!1)}return t}o(Ic,"parseArgs");async function Sr(e=process.argv){let t=Ic(e);t.name||(console.error("Usage: node scripts/init-skill.js <skill-name> [--path <skills-dir>] [--description <text>] [--force] [--no-evals]"),process.exit(1));let n=await Ec(t);console.log(`Initialized ${n.skillDir}`)}o(Sr,"main");var Rc=!1;Rc&&Sr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import xr from"node:path";var Ac=new Set(["name","description","license","compatibility","metadata","allowed-tools","disable-model-invocation","user-invocable","argument-hint","context","agent","model","hooks"]);async function me(e){let t={valid:!1,errors:[],warnings:[],frontmatter:null},n;try{n=await ue(e)}catch(d){return t.errors.push(d instanceof Error?d.message:String(d)),t}let{frontmatter:r,body:i}=n;t.frontmatter=r;let s=Object.keys(r).filter(d=>!Ac.has(d));s.length>0&&t.errors.push(`Unexpected frontmatter keys: ${s.sort().join(", ")}`);let a=typeof r.name=="string"?r.name.trim():"",c=typeof r.description=="string"?r.description.trim():"";if(!a)t.errors.push("Missing required frontmatter field: name");else{/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(a)||t.errors.push(`Invalid skill name "${a}". Use lowercase kebab-case and avoid consecutive hyphens.`),a.length>64&&t.errors.push(`Skill name is too long (${a.length}/64).`);let d=xr.basename(xr.resolve(e));d!==a&&t.warnings.push(`Skill directory name "${d}" does not match frontmatter name "${a}".`)}if(c?(c.length>1024&&t.errors.push(`Description is too long (${c.length}/1024).`),/[<>]/.test(c)&&t.errors.push("Description cannot contain angle brackets."),/[。.!?]/.test(c)||t.warnings.push("Description may be too terse; consider making the trigger conditions clearer.")):t.errors.push("Missing required frontmatter field: description"),i.trim()||t.errors.push("SKILL.md body is empty."),r.compatibility!=null&&(typeof r.compatibility!="string"?t.errors.push("compatibility must be a string if provided."):r.compatibility.length>500&&t.errors.push(`compatibility is too long (${r.compatibility.length}/500).`)),r["allowed-tools"]!=null){let d=r["allowed-tools"];typeof d=="string"||Array.isArray(d)&&d.every(u=>typeof u=="string")||t.errors.push("allowed-tools must be a string or string array.")}return r["disable-model-invocation"]!=null&&typeof r["disable-model-invocation"]!="boolean"&&t.errors.push("disable-model-invocation must be a boolean."),r["user-invocable"]!=null&&typeof r["user-invocable"]!="boolean"&&t.errors.push("user-invocable must be a boolean."),r.context!=null&&r.context!=="fork"&&t.errors.push('context must be "fork" when provided.'),r.hooks!=null&&(typeof r.hooks!="object"||Array.isArray(r.hooks))&&t.errors.push("hooks must be an object when provided."),t.valid=t.errors.length===0,t}o(me,"validateSkillDirectory");async function kr(e=process.argv){let t=e[2];t||(console.error("Usage: node scripts/quick-validate.js <skill-directory>"),process.exit(1));let n=await me(t);if(n.errors.length===0)console.log("Skill is valid.");else{console.error("Skill validation failed:");for(let r of n.errors)console.error(`- ${r}`)}if(n.warnings.length>0){console.log("Warnings:");for(let r of n.warnings)console.log(`- ${r}`)}process.exit(n.valid?0:1)}o(kr,"main");var _c=!1;_c&&kr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as ht,writeFile as N}from"node:fs/promises";import S from"node:path";function Tc(e){return typeof e=="string"?{text:e}:e&&typeof e=="object"&&typeof e.text=="string"?{text:e.text}:null}o(Tc,"normalizeAssertion");function Cc(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_use").length:t,0)}o(Cc,"countToolCalls");function Pc(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_result"&&r.is_error===!0).length:t,0)}o(Pc,"countToolErrors");function Mc(e,t){return`${["# Skill Eval Transcript","","## Eval Prompt","",e,"","## Final Response","",t.lastText||"(No final text)","","## Result Flags","",`- success: ${t.success}`,`- signal: ${t.signal??"none"}`,`- interrupted: ${t.interrupted===!0}`,`- limit_reached: ${t.limitReached===!0}`].join(`
677
+ `}o(Ec,"renderSkillTemplate");function Ic(e){return JSON.stringify({skill_name:e,evals:[{id:1,prompt:"TODO: Add a realistic user request to evaluate this skill.",expected_output:"Describe what a successful result should accomplish.",files:[],assertions:[]}]},null,2)}o(Ic,"renderEvalTemplate");async function Rc(e){let t=F.resolve(e.baseDir??me()),n=F.join(t,e.name),r=e.description??`Describe what ${e.name} does and when it should be used.`;if(await pe(n)&&!e.force)throw new Error(`Skill directory already exists: ${n}`);return await T(n),await T(F.join(n,"references")),await T(F.join(n,"assets")),await T(F.join(n,"scripts")),await Sr(F.join(n,"SKILL.md"),Ec(e.name,r),"utf8"),e.includeEvals!==!1&&(await T(F.join(n,"evals")),await Sr(F.join(n,"evals","evals.json"),`${Ic(e.name)}
678
+ `,"utf8")),{skillDir:n,created:["SKILL.md",...e.includeEvals!==!1?["evals/evals.json"]:[],"references/","assets/","scripts/"]}}o(Rc,"initSkill");function Ac(e){let t={name:e[2],baseDir:void 0,description:void 0,force:!1,includeEvals:!0};for(let n=3;n<e.length;n+=1){let r=e[n];(r==="--path"||r==="--dest")&&e[n+1]?t.baseDir=e[++n]:r==="--description"&&e[n+1]?t.description=e[++n]:r==="--force"?t.force=!0:r==="--no-evals"&&(t.includeEvals=!1)}return t}o(Ac,"parseArgs");async function xr(e=process.argv){let t=Ac(e);t.name||(console.error("Usage: node scripts/init-skill.js <skill-name> [--path <skills-dir>] [--description <text>] [--force] [--no-evals]"),process.exit(1));let n=await Rc(t);console.log(`Initialized ${n.skillDir}`)}o(xr,"main");var _c=!1;_c&&xr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import kr from"node:path";var Tc=new Set(["name","description","license","compatibility","metadata","allowed-tools","disable-model-invocation","user-invocable","argument-hint","context","agent","model","hooks"]);async function he(e){let t={valid:!1,errors:[],warnings:[],frontmatter:null},n;try{n=await fe(e)}catch(d){return t.errors.push(d instanceof Error?d.message:String(d)),t}let{frontmatter:r,body:i}=n;t.frontmatter=r;let s=Object.keys(r).filter(d=>!Tc.has(d));s.length>0&&t.errors.push(`Unexpected frontmatter keys: ${s.sort().join(", ")}`);let a=typeof r.name=="string"?r.name.trim():"",c=typeof r.description=="string"?r.description.trim():"";if(!a)t.errors.push("Missing required frontmatter field: name");else{/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(a)||t.errors.push(`Invalid skill name "${a}". Use lowercase kebab-case and avoid consecutive hyphens.`),a.length>64&&t.errors.push(`Skill name is too long (${a.length}/64).`);let d=kr.basename(kr.resolve(e));d!==a&&t.warnings.push(`Skill directory name "${d}" does not match frontmatter name "${a}".`)}if(c?(c.length>1024&&t.errors.push(`Description is too long (${c.length}/1024).`),/[<>]/.test(c)&&t.errors.push("Description cannot contain angle brackets."),/[。.!?]/.test(c)||t.warnings.push("Description may be too terse; consider making the trigger conditions clearer.")):t.errors.push("Missing required frontmatter field: description"),i.trim()||t.errors.push("SKILL.md body is empty."),r.compatibility!=null&&(typeof r.compatibility!="string"?t.errors.push("compatibility must be a string if provided."):r.compatibility.length>500&&t.errors.push(`compatibility is too long (${r.compatibility.length}/500).`)),r["allowed-tools"]!=null){let d=r["allowed-tools"];typeof d=="string"||Array.isArray(d)&&d.every(u=>typeof u=="string")||t.errors.push("allowed-tools must be a string or string array.")}return r["disable-model-invocation"]!=null&&typeof r["disable-model-invocation"]!="boolean"&&t.errors.push("disable-model-invocation must be a boolean."),r["user-invocable"]!=null&&typeof r["user-invocable"]!="boolean"&&t.errors.push("user-invocable must be a boolean."),r.context!=null&&r.context!=="fork"&&t.errors.push('context must be "fork" when provided.'),r.hooks!=null&&(typeof r.hooks!="object"||Array.isArray(r.hooks))&&t.errors.push("hooks must be an object when provided."),t.valid=t.errors.length===0,t}o(he,"validateSkillDirectory");async function Er(e=process.argv){let t=e[2];t||(console.error("Usage: node scripts/quick-validate.js <skill-directory>"),process.exit(1));let n=await he(t);if(n.errors.length===0)console.log("Skill is valid.");else{console.error("Skill validation failed:");for(let r of n.errors)console.error(`- ${r}`)}if(n.warnings.length>0){console.log("Warnings:");for(let r of n.warnings)console.log(`- ${r}`)}process.exit(n.valid?0:1)}o(Er,"main");var Cc=!1;Cc&&Er().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as gt,writeFile as N}from"node:fs/promises";import S from"node:path";function Pc(e){return typeof e=="string"?{text:e}:e&&typeof e=="object"&&typeof e.text=="string"?{text:e.text}:null}o(Pc,"normalizeAssertion");function Mc(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_use").length:t,0)}o(Mc,"countToolCalls");function Oc(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_result"&&r.is_error===!0).length:t,0)}o(Oc,"countToolErrors");function $c(e,t){return`${["# Skill Eval Transcript","","## Eval Prompt","",e,"","## Final Response","",t.lastText||"(No final text)","","## Result Flags","",`- success: ${t.success}`,`- signal: ${t.signal??"none"}`,`- interrupted: ${t.interrupted===!0}`,`- limit_reached: ${t.limitReached===!0}`].join(`
679
679
  `)}
680
- `}o(Mc,"renderTranscript");async function Oc(e,t){let n=S.dirname(S.resolve(t.evalsPath)),r=S.resolve(t.cwd??process.cwd()),i=[];for(let s of e??[]){let a=S.isAbsolute(s)?s:S.resolve(n,s),c=S.resolve(r,s),d=null,l=a;try{d=await ht(a,"utf8")}catch{d=await ht(c,"utf8").catch(()=>null),l=c}if(d==null)throw new Error(`Input file not found for eval: ${s}`);i.push(`### ${s}
680
+ `}o($c,"renderTranscript");async function Nc(e,t){let n=S.dirname(S.resolve(t.evalsPath)),r=S.resolve(t.cwd??process.cwd()),i=[];for(let s of e??[]){let a=S.isAbsolute(s)?s:S.resolve(n,s),c=S.resolve(r,s),d=null,l=a;try{d=await gt(a,"utf8")}catch{d=await gt(c,"utf8").catch(()=>null),l=c}if(d==null)throw new Error(`Input file not found for eval: ${s}`);i.push(`### ${s}
681
681
  \`\`\`
682
682
  ${d}
683
683
  \`\`\`
@@ -687,15 +687,15 @@ ${i.join(`
687
687
 
688
688
  `)}
689
689
 
690
- `}o(Oc,"readInputFiles");async function $c(e,t){let n=String(e.prompt??e.query??"").trim();return`${await Oc(e.files,t)}${n}`.trim()}o($c,"buildEvalPrompt");async function Nc(e,t){let{runKodaX:n,estimateTokens:r}=await j(),i=Date.now(),s=await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??30,reasoningMode:t.reasoningMode??"off",thinking:t.reasoningMode?t.reasoningMode!=="off":!1,context:{gitRoot:S.resolve(t.cwd??process.cwd())}},e);return{result:s,totalTokens:r(s.messages),durationMs:Date.now()-i}}o(Nc,"defaultRunAgent");async function Dc(e,t,n,r){return e==="with_skill"?(await ft(t,n,{workingDirectory:S.resolve(r.cwd??process.cwd()),projectRoot:S.resolve(r.cwd??process.cwd()),sessionId:"skill-eval",environment:{}})).content:n}o(Dc,"prepareConfigPrompt");async function Lc(e,t,n,r,i){let s=S.join(e,"outputs");await T(s);let a={total_tool_calls:Cc(i.result.messages),errors_encountered:Pc(i.result.messages),output_chars:i.result.lastText.length};await N(S.join(s,"result.md"),`${i.result.lastText}
690
+ `}o(Nc,"readInputFiles");async function Dc(e,t){let n=String(e.prompt??e.query??"").trim();return`${await Nc(e.files,t)}${n}`.trim()}o(Dc,"buildEvalPrompt");async function Lc(e,t){let{runKodaX:n,estimateTokens:r}=await j(),i=Date.now(),s=await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??30,reasoningMode:t.reasoningMode??"off",thinking:t.reasoningMode?t.reasoningMode!=="off":!1,context:{gitRoot:S.resolve(t.cwd??process.cwd())}},e);return{result:s,totalTokens:r(s.messages),durationMs:Date.now()-i}}o(Lc,"defaultRunAgent");async function jc(e,t,n,r){return e==="with_skill"?(await pt(t,n,{workingDirectory:S.resolve(r.cwd??process.cwd()),projectRoot:S.resolve(r.cwd??process.cwd()),sessionId:"skill-eval",environment:{}})).content:n}o(jc,"prepareConfigPrompt");async function Fc(e,t,n,r,i){let s=S.join(e,"outputs");await T(s);let a={total_tool_calls:Mc(i.result.messages),errors_encountered:Oc(i.result.messages),output_chars:i.result.lastText.length};await N(S.join(s,"result.md"),`${i.result.lastText}
691
691
  `,"utf8"),await N(S.join(s,"prompt.txt"),`${r}
692
- `,"utf8"),await N(S.join(e,"transcript.md"),Mc(r,i.result),"utf8"),await N(S.join(s,"metrics.json"),`${JSON.stringify({config:t,eval_id:n.id??null,session_id:i.result.sessionId,...a},null,2)}
692
+ `,"utf8"),await N(S.join(e,"transcript.md"),$c(r,i.result),"utf8"),await N(S.join(s,"metrics.json"),`${JSON.stringify({config:t,eval_id:n.id??null,session_id:i.result.sessionId,...a},null,2)}
693
693
  `,"utf8"),await N(S.join(s,"messages.json"),`${JSON.stringify(i.result.messages,null,2)}
694
694
  `,"utf8"),await N(S.join(e,"timing.json"),`${JSON.stringify({total_tokens:i.totalTokens,duration_ms:i.durationMs,total_duration_seconds:Number((i.durationMs/1e3).toFixed(4))},null,2)}
695
695
  `,"utf8"),await N(S.join(e,"result.json"),`${JSON.stringify({success:i.result.success,signal:i.result.signal??null,signal_reason:i.result.signalReason??null,interrupted:i.result.interrupted===!0,limit_reached:i.result.limitReached===!0,session_id:i.result.sessionId,execution_metrics:a},null,2)}
696
- `,"utf8")}o(Lc,"writeRunArtifacts");async function jc(e,t=Nc){let n=await Ie(S.resolve(e.skillPath),"user");if(!n)throw new Error(`Failed to load skill from ${e.skillPath}`);let r=S.resolve(e.workspaceDir);await T(r);let i=JSON.parse(await ht(e.evalsPath,"utf8")),s=Array.isArray(i.evals)?i.evals:[],a=e.configs?.length?e.configs:["with_skill","without_skill"],c=Number.isFinite(e.runsPerConfig)&&e.runsPerConfig>0?Math.floor(e.runsPerConfig):1,d=[];for(let l=0;l<s.length;l+=1){let u=s[l],f=S.join(r,`eval-${l}`);await T(f),await N(S.join(f,"eval_metadata.json"),`${JSON.stringify({eval_id:u.id??l,eval_name:u.name??`eval-${l}`,prompt:u.prompt??u.query??"",expected_output:u.expected_output??"",assertions:(Array.isArray(u.assertions)?u.assertions:[]).map(Tc).filter(Boolean)},null,2)}
697
- `,"utf8");let m=await $c(u,e),p={};for(let h of a){let k=S.join(f,h);await T(k),p[h]=[];for(let w=1;w<=c;w+=1){let g=S.join(k,`run-${w}`);await T(g);let y=await Dc(h,n,m,e),v=await t(y,{...e,configName:h,evalItem:u,runIndex:w});await Lc(g,h,u,y,v),p[h].push({run_id:`run-${w}`,session_id:v.result.sessionId,success:v.result.success,total_tokens:v.totalTokens,duration_ms:v.durationMs,output_chars:v.result.lastText.length})}}d.push({eval_id:u.id??l,prompt:u.prompt??u.query??"",configs:p})}return{workspace:r,skill_name:n.name,eval_count:s.length,configs:a,runs_per_config:c,reports:d}}o(jc,"runEvalWorkspace");function Fc(e){let t={skillPath:"",evalsPath:"",workspaceDir:"",provider:"anthropic",model:void 0,runsPerConfig:1,maxIter:30,reasoningMode:"off",cwd:process.cwd(),configs:["with_skill","without_skill"],output:void 0};for(let n=2;n<e.length;n+=1){let r=e[n];r==="--skill-path"&&e[n+1]?t.skillPath=e[++n]:r==="--evals"&&e[n+1]?t.evalsPath=e[++n]:r==="--workspace"&&e[n+1]?t.workspaceDir=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--runs"&&e[n+1]?t.runsPerConfig=Number(e[++n]):r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--cwd"&&e[n+1]?t.cwd=e[++n]:r==="--configs"&&e[n+1]?t.configs=e[++n].split(",").map(i=>i.trim()).filter(Boolean):r==="--output"&&e[n+1]&&(t.output=e[++n])}return t}o(Fc,"parseArgs");async function Er(e=process.argv){let t=Fc(e);(!t.skillPath||!t.evalsPath||!t.workspaceDir)&&(console.error("Usage: node scripts/run-eval.js --skill-path <dir> --evals <evals.json> --workspace <dir> [--provider anthropic] [--runs 1]"),process.exit(1));let n=await jc(t),r=`${JSON.stringify(n,null,2)}
698
- `;t.output?(await N(t.output,r,"utf8"),console.log(`Wrote ${S.resolve(t.output)}`)):process.stdout.write(r)}o(Er,"main");var Wc=!1;Wc&&Er().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as Bc,readFile as gt,writeFile as Rr}from"node:fs/promises";import x from"node:path";function K(e){return String(e??"").trim()}o(K,"normalizeExpectationText");function Ar(e){let n=(Array.isArray(e?.assertions)?e.assertions:[]).map(i=>typeof i=="string"?K(i):i&&typeof i=="object"&&typeof i.text=="string"?K(i.text):"").filter(Boolean);if(n.length>0)return n;let r=K(e?.expected_output);return r?[r]:[]}o(Ar,"normalizeExpectedRubric");function wt(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(wt,"normalizeStringArray");function Ir(e,t){return{text:K(e?.text??t),passed:e?.passed===!0,evidence:K(e?.evidence)}}o(Ir,"normalizeExpectationEntry");function Uc(e,t){let n=Q(e)??{},r=Array.isArray(n.expectations)?n.expectations:[],i=[],s=new Set;for(let a of t){let c=r.findIndex((d,l)=>s.has(l)?!1:K(d?.text).toLowerCase()===a.toLowerCase());if(c===-1){i.push({text:a,passed:!1,evidence:""});continue}s.add(c),i.push(Ir(r[c],a))}if(t.length===0)for(let a of r){let c=Ir(a,"");c.text&&i.push(c)}return{overall_summary:K(n.overall_summary),expectations:i,user_notes_summary:{uncertainties:wt(n.user_notes_summary?.uncertainties),needs_review:wt(n.user_notes_summary?.needs_review),workarounds:wt(n.user_notes_summary?.workarounds)}}}o(Uc,"normalizeParsedGrading");async function yt(e){return(await Bc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>x.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(yt,"listDirectories");async function Kc(e){let t=x.dirname(e),n=x.dirname(t),r=x.basename(t),i=x.basename(e),s=x.join(e,"outputs"),a=await P(x.join(n,"eval_metadata.json"),{}),c=await gt(x.join(s,"result.md"),"utf8").catch(()=>""),d=await gt(x.join(s,"prompt.txt"),"utf8").catch(()=>""),l=await gt(x.join(e,"transcript.md"),"utf8").catch(()=>""),u=await P(x.join(s,"metrics.json"),{}),f=await P(x.join(e,"result.json"),{}),m=await P(x.join(e,"timing.json"),{});return{evalDir:n,runDir:e,runId:i,configName:r,evalMetadata:a,outputsDir:s,resultText:c,promptText:d,transcript:l,metrics:u,result:f,timing:m}}o(Kc,"loadRunContext");function qc(e){let t=Ar(e.evalMetadata),n=t.length>0?t.map((r,i)=>`${i+1}. ${r}`).join(`
696
+ `,"utf8")}o(Fc,"writeRunArtifacts");async function Wc(e,t=Lc){let n=await Re(S.resolve(e.skillPath),"user");if(!n)throw new Error(`Failed to load skill from ${e.skillPath}`);let r=S.resolve(e.workspaceDir);await T(r);let i=JSON.parse(await gt(e.evalsPath,"utf8")),s=Array.isArray(i.evals)?i.evals:[],a=e.configs?.length?e.configs:["with_skill","without_skill"],c=Number.isFinite(e.runsPerConfig)&&e.runsPerConfig>0?Math.floor(e.runsPerConfig):1,d=[];for(let l=0;l<s.length;l+=1){let u=s[l],f=S.join(r,`eval-${l}`);await T(f),await N(S.join(f,"eval_metadata.json"),`${JSON.stringify({eval_id:u.id??l,eval_name:u.name??`eval-${l}`,prompt:u.prompt??u.query??"",expected_output:u.expected_output??"",assertions:(Array.isArray(u.assertions)?u.assertions:[]).map(Pc).filter(Boolean)},null,2)}
697
+ `,"utf8");let m=await Dc(u,e),p={};for(let h of a){let k=S.join(f,h);await T(k),p[h]=[];for(let w=1;w<=c;w+=1){let g=S.join(k,`run-${w}`);await T(g);let y=await jc(h,n,m,e),v=await t(y,{...e,configName:h,evalItem:u,runIndex:w});await Fc(g,h,u,y,v),p[h].push({run_id:`run-${w}`,session_id:v.result.sessionId,success:v.result.success,total_tokens:v.totalTokens,duration_ms:v.durationMs,output_chars:v.result.lastText.length})}}d.push({eval_id:u.id??l,prompt:u.prompt??u.query??"",configs:p})}return{workspace:r,skill_name:n.name,eval_count:s.length,configs:a,runs_per_config:c,reports:d}}o(Wc,"runEvalWorkspace");function Bc(e){let t={skillPath:"",evalsPath:"",workspaceDir:"",provider:"anthropic",model:void 0,runsPerConfig:1,maxIter:30,reasoningMode:"off",cwd:process.cwd(),configs:["with_skill","without_skill"],output:void 0};for(let n=2;n<e.length;n+=1){let r=e[n];r==="--skill-path"&&e[n+1]?t.skillPath=e[++n]:r==="--evals"&&e[n+1]?t.evalsPath=e[++n]:r==="--workspace"&&e[n+1]?t.workspaceDir=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--runs"&&e[n+1]?t.runsPerConfig=Number(e[++n]):r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--cwd"&&e[n+1]?t.cwd=e[++n]:r==="--configs"&&e[n+1]?t.configs=e[++n].split(",").map(i=>i.trim()).filter(Boolean):r==="--output"&&e[n+1]&&(t.output=e[++n])}return t}o(Bc,"parseArgs");async function Ir(e=process.argv){let t=Bc(e);(!t.skillPath||!t.evalsPath||!t.workspaceDir)&&(console.error("Usage: node scripts/run-eval.js --skill-path <dir> --evals <evals.json> --workspace <dir> [--provider anthropic] [--runs 1]"),process.exit(1));let n=await Wc(t),r=`${JSON.stringify(n,null,2)}
698
+ `;t.output?(await N(t.output,r,"utf8"),console.log(`Wrote ${S.resolve(t.output)}`)):process.stdout.write(r)}o(Ir,"main");var Uc=!1;Uc&&Ir().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as Kc,readFile as wt,writeFile as Ar}from"node:fs/promises";import x from"node:path";function K(e){return String(e??"").trim()}o(K,"normalizeExpectationText");function _r(e){let n=(Array.isArray(e?.assertions)?e.assertions:[]).map(i=>typeof i=="string"?K(i):i&&typeof i=="object"&&typeof i.text=="string"?K(i.text):"").filter(Boolean);if(n.length>0)return n;let r=K(e?.expected_output);return r?[r]:[]}o(_r,"normalizeExpectedRubric");function yt(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(yt,"normalizeStringArray");function Rr(e,t){return{text:K(e?.text??t),passed:e?.passed===!0,evidence:K(e?.evidence)}}o(Rr,"normalizeExpectationEntry");function qc(e,t){let n=Z(e)??{},r=Array.isArray(n.expectations)?n.expectations:[],i=[],s=new Set;for(let a of t){let c=r.findIndex((d,l)=>s.has(l)?!1:K(d?.text).toLowerCase()===a.toLowerCase());if(c===-1){i.push({text:a,passed:!1,evidence:""});continue}s.add(c),i.push(Rr(r[c],a))}if(t.length===0)for(let a of r){let c=Rr(a,"");c.text&&i.push(c)}return{overall_summary:K(n.overall_summary),expectations:i,user_notes_summary:{uncertainties:yt(n.user_notes_summary?.uncertainties),needs_review:yt(n.user_notes_summary?.needs_review),workarounds:yt(n.user_notes_summary?.workarounds)}}}o(qc,"normalizeParsedGrading");async function vt(e){return(await Kc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>x.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(vt,"listDirectories");async function Hc(e){let t=x.dirname(e),n=x.dirname(t),r=x.basename(t),i=x.basename(e),s=x.join(e,"outputs"),a=await P(x.join(n,"eval_metadata.json"),{}),c=await wt(x.join(s,"result.md"),"utf8").catch(()=>""),d=await wt(x.join(s,"prompt.txt"),"utf8").catch(()=>""),l=await wt(x.join(e,"transcript.md"),"utf8").catch(()=>""),u=await P(x.join(s,"metrics.json"),{}),f=await P(x.join(e,"result.json"),{}),m=await P(x.join(e,"timing.json"),{});return{evalDir:n,runDir:e,runId:i,configName:r,evalMetadata:a,outputsDir:s,resultText:c,promptText:d,transcript:l,metrics:u,result:f,timing:m}}o(Hc,"loadRunContext");function zc(e){let t=_r(e.evalMetadata),n=t.length>0?t.map((r,i)=>`${i+1}. ${r}`).join(`
699
699
  `):"(No explicit assertions; infer one expectation from expected_output if present.)";return`${e.agentInstructions.trim()}
700
700
 
701
701
  Return JSON with this shape:
@@ -741,12 +741,12 @@ ${JSON.stringify({total_tool_calls:e.metrics.total_tool_calls??e.result.executio
741
741
 
742
742
  ## Transcript Excerpt
743
743
  ${_(e.transcript,5e3)}
744
- `}o(qc,"buildGradingPrompt");async function _r(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:x.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(_r,"defaultRunJudge");async function Hc(e,t,n=_r){let r=await Kc(x.resolve(e)),i=Ar(r.evalMetadata),s=await Z(import.meta.url,"../agents/grader.md"),a=qc({...r,agentInstructions:s}),c=await n(a,{...t,runDir:r.runDir,configName:r.configName,evalMetadata:r.evalMetadata,runId:r.runId}),d=Uc(c,i),l={total_tool_calls:r.metrics.total_tool_calls??r.result.execution_metrics?.total_tool_calls??0,errors_encountered:r.metrics.errors_encountered??r.result.execution_metrics?.errors_encountered??0,output_chars:r.metrics.output_chars??r.result.execution_metrics?.output_chars??r.resultText.length},u={summary:vr(d.expectations),expectations:d.expectations,execution_metrics:l,user_notes_summary:d.user_notes_summary,overall_summary:d.overall_summary,timing:{total_tokens:r.timing.total_tokens??0,total_duration_seconds:r.timing.total_duration_seconds??0},meta:{generated_at:new Date().toISOString(),eval_id:r.evalMetadata.eval_id??null,eval_name:r.evalMetadata.eval_name??null,config:r.configName,run_id:r.runId}};return await Rr(x.join(r.runDir,"grading.json"),`${JSON.stringify(u,null,2)}
745
- `,"utf8"),{runDir:r.runDir,grading:u,prompt:a,rawResponse:c}}o(Hc,"gradeRun");async function zc(e,t=_r){let n=x.resolve(e.workspaceDir);await T(n);let r=new Set((e.configs??[]).map(c=>String(c).trim()).filter(Boolean)),i=[],s=[];for(let c of await yt(n))if(x.basename(c).startsWith("eval-"))for(let d of await yt(c)){let l=x.basename(d);if(!(r.size>0&&!r.has(l)))for(let u of await yt(d)){if(!x.basename(u).startsWith("run-"))continue;let f=x.join(u,"grading.json");if(await P(f,null)&&e.overwrite!==!0){s.push(x.relative(n,u).replace(/\\/g,"/"));continue}let p=await Hc(u,e,t);i.push({run:x.relative(n,u).replace(/\\/g,"/"),summary:p.grading.summary,config:p.grading.meta.config,eval_id:p.grading.meta.eval_id})}}let a={workspace:n,generated_at:new Date().toISOString(),processed:i.length,skipped:s.length,processed_runs:i,skipped_runs:s};return await Rr(x.join(n,"grading-summary.json"),`${JSON.stringify(a,null,2)}
746
- `,"utf8"),a}o(zc,"gradeWorkspace");function Gc(e){let t={workspaceDir:e[2]??"",provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,cwd:process.cwd(),overwrite:!1,configs:[]};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--cwd"&&e[n+1]?t.cwd=e[++n]:r==="--overwrite"?t.overwrite=!0:r==="--configs"&&e[n+1]&&(t.configs=e[++n].split(",").map(i=>i.trim()).filter(Boolean))}return t}o(Gc,"parseArgs");async function Tr(e=process.argv){let t=Gc(e);t.workspaceDir||(console.error("Usage: node scripts/grade-evals.js <workspace> [--provider anthropic] [--configs with_skill,without_skill] [--overwrite]"),process.exit(1));let n=await zc(t);process.stdout.write(`${JSON.stringify(n,null,2)}
747
- `)}o(Tr,"main");var Vc=!1;Vc&&Tr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{writeFile as xt}from"node:fs/promises";import D from"node:path";import{readFile as Xc,readdir as Jc,stat as Yc,writeFile as Cr}from"node:fs/promises";import C from"node:path";async function vt(e){return JSON.parse(await Xc(e,"utf8"))}o(vt,"readJson");async function Qc(e){try{return await Yc(e),!0}catch{return!1}}o(Qc,"pathExists");async function bt(e){return(await Jc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>C.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(bt,"listDirectories");async function $e(e){let t=await Qc(C.join(e,"runs"))?C.join(e,"runs"):e,n=(await bt(t)).filter(i=>C.basename(i).startsWith("eval-")),r={};for(let i of n){let s=C.join(i,"eval_metadata.json"),c=(await vt(s).catch(()=>({}))).eval_id??C.basename(i);for(let d of await bt(i)){let l=C.basename(d),u=(await bt(d)).filter(f=>C.basename(f).startsWith("run-"));if(u.length!==0){r[l]??=[];for(let f of u){let m=await vt(C.join(f,"grading.json")).catch(()=>null);if(!m)continue;let p=await vt(C.join(f,"timing.json")).catch(()=>({}));r[l].push({eval_id:c,run_id:C.basename(f),pass_rate:m.summary?.pass_rate??0,passed:m.summary?.passed??0,failed:m.summary?.failed??0,total:m.summary?.total??0,time_seconds:p.total_duration_seconds??m.timing?.total_duration_seconds??0,tokens:p.total_tokens??m.execution_metrics?.output_chars??0,tool_calls:m.execution_metrics?.total_tool_calls??0,errors:m.execution_metrics?.errors_encountered??0,expectations:Array.isArray(m.expectations)?m.expectations:[],notes:[...m.user_notes_summary?.uncertainties??[],...m.user_notes_summary?.needs_review??[],...m.user_notes_summary?.workarounds??[]]})}}}}return r}o($e,"loadRunResults");function Zc(e){let t={};for(let[s,a]of Object.entries(e))t[s]={pass_rate:Me(a.map(c=>Number(c.pass_rate??0))),time_seconds:Me(a.map(c=>Number(c.time_seconds??0))),tokens:Me(a.map(c=>Number(c.tokens??0)))};let n=Object.keys(t),r=t[n[0]]??{pass_rate:{mean:0},time_seconds:{mean:0},tokens:{mean:0}},i=t[n[1]]??{pass_rate:{mean:0},time_seconds:{mean:0},tokens:{mean:0}};return{configs:t,delta:{pass_rate:Oe(r.pass_rate.mean-i.pass_rate.mean),time_seconds:Oe(r.time_seconds.mean-i.time_seconds.mean),tokens:Oe(r.tokens.mean-i.tokens.mean)}}}o(Zc,"summarizeConfigs");function St(e,t,n){let r=Zc(n);return{skill_name:t,generated_at:new Date().toISOString(),workspace:C.resolve(e),configs:r.configs,delta:r.delta,runs:n}}o(St,"buildBenchmarkDocument");function ed(e){let t=[`# Benchmark: ${e.skill_name}`,"",`Generated: ${e.generated_at}`,"","| Config | Pass Rate | Time (s) | Tokens |","| --- | --- | --- | --- |"];for(let[n,r]of Object.entries(e.configs))t.push(`| ${n} | ${r.pass_rate.mean} \xB1 ${r.pass_rate.stddev} | ${r.time_seconds.mean} \xB1 ${r.time_seconds.stddev} | ${r.tokens.mean} \xB1 ${r.tokens.stddev} |`);return t.push(""),t.push("## Delta"),t.push(""),t.push(`- Pass rate: ${e.delta.pass_rate}`),t.push(`- Time (s): ${e.delta.time_seconds}`),t.push(`- Tokens: ${e.delta.tokens}`),t.join(`
748
- `)}o(ed,"renderBenchmarkMarkdown");function td(e){let t={iterationDir:e[2],skillName:"unknown-skill"};for(let n=3;n<e.length;n+=1)e[n]==="--skill-name"&&e[n+1]&&(t.skillName=e[n+1],n+=1);return t}o(td,"parseArgs");async function nd(){let{iterationDir:e,skillName:t}=td(process.argv);e||(console.error("Usage: node scripts/aggregate-benchmark.js <iteration-dir> --skill-name <name>"),process.exit(1));let n=await $e(e);Object.keys(n).length===0&&(console.error(`No benchmark runs found in ${e}`),process.exit(1));let r=St(e,t,n),i=C.join(e,"benchmark.json"),s=C.join(e,"benchmark.md");await Cr(i,JSON.stringify(r,null,2)),await Cr(s,`${ed(r)}
749
- `),console.log(`Wrote ${i}`),console.log(`Wrote ${s}`)}o(nd,"main");var rd=!1;rd&&nd().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});function Ne(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(Ne,"normalizeStringArray");function od(e){let t={};for(let[n,r]of Object.entries(e)){let i=new Map,s=[];for(let a of r){for(let c of a.expectations??[]){if(c?.passed===!0)continue;let d=String(c?.text??"").trim();d&&i.set(d,(i.get(d)??0)+1)}for(let c of a.notes??[]){let d=String(c??"").trim();d&&s.push(d)}}t[n]={repeated_failures:Array.from(i.entries()).sort((a,c)=>c[1]-a[1]).slice(0,10).map(([a,c])=>({text:a,count:c})),notes:s.slice(0,10)}}return t}o(od,"summarizeFailureClusters");function id(e,t,n){let r=Q(e)??{};return{skill_name:t.skill_name,generated_at:new Date().toISOString(),workspace:t.workspace,verdict:["improves","regresses","mixed","inconclusive"].includes(r.verdict)?r.verdict:"inconclusive",release_readiness:["ready","needs_iteration","needs_manual_review"].includes(r.release_readiness)?r.release_readiness:"needs_manual_review",recommendation:String(r.recommendation??"").trim(),key_findings:Ne(r.key_findings),variance_hotspots:Ne(r.variance_hotspots),suggested_actions:Ne(r.suggested_actions),watchouts:Ne(r.watchouts),supporting_metrics:{pass_rate_delta:t.delta?.pass_rate??"n/a",time_seconds_delta:t.delta?.time_seconds??"n/a",tokens_delta:t.delta?.tokens??"n/a"},failure_clusters:n}}o(id,"normalizeAnalysisResult");function sd(e){return`${e.agentInstructions.trim()}
744
+ `}o(zc,"buildGradingPrompt");async function Tr(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:x.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(Tr,"defaultRunJudge");async function Gc(e,t,n=Tr){let r=await Hc(x.resolve(e)),i=_r(r.evalMetadata),s=await ee(import.meta.url,"../agents/grader.md"),a=zc({...r,agentInstructions:s}),c=await n(a,{...t,runDir:r.runDir,configName:r.configName,evalMetadata:r.evalMetadata,runId:r.runId}),d=qc(c,i),l={total_tool_calls:r.metrics.total_tool_calls??r.result.execution_metrics?.total_tool_calls??0,errors_encountered:r.metrics.errors_encountered??r.result.execution_metrics?.errors_encountered??0,output_chars:r.metrics.output_chars??r.result.execution_metrics?.output_chars??r.resultText.length},u={summary:br(d.expectations),expectations:d.expectations,execution_metrics:l,user_notes_summary:d.user_notes_summary,overall_summary:d.overall_summary,timing:{total_tokens:r.timing.total_tokens??0,total_duration_seconds:r.timing.total_duration_seconds??0},meta:{generated_at:new Date().toISOString(),eval_id:r.evalMetadata.eval_id??null,eval_name:r.evalMetadata.eval_name??null,config:r.configName,run_id:r.runId}};return await Ar(x.join(r.runDir,"grading.json"),`${JSON.stringify(u,null,2)}
745
+ `,"utf8"),{runDir:r.runDir,grading:u,prompt:a,rawResponse:c}}o(Gc,"gradeRun");async function Vc(e,t=Tr){let n=x.resolve(e.workspaceDir);await T(n);let r=new Set((e.configs??[]).map(c=>String(c).trim()).filter(Boolean)),i=[],s=[];for(let c of await vt(n))if(x.basename(c).startsWith("eval-"))for(let d of await vt(c)){let l=x.basename(d);if(!(r.size>0&&!r.has(l)))for(let u of await vt(d)){if(!x.basename(u).startsWith("run-"))continue;let f=x.join(u,"grading.json");if(await P(f,null)&&e.overwrite!==!0){s.push(x.relative(n,u).replace(/\\/g,"/"));continue}let p=await Gc(u,e,t);i.push({run:x.relative(n,u).replace(/\\/g,"/"),summary:p.grading.summary,config:p.grading.meta.config,eval_id:p.grading.meta.eval_id})}}let a={workspace:n,generated_at:new Date().toISOString(),processed:i.length,skipped:s.length,processed_runs:i,skipped_runs:s};return await Ar(x.join(n,"grading-summary.json"),`${JSON.stringify(a,null,2)}
746
+ `,"utf8"),a}o(Vc,"gradeWorkspace");function Xc(e){let t={workspaceDir:e[2]??"",provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,cwd:process.cwd(),overwrite:!1,configs:[]};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--cwd"&&e[n+1]?t.cwd=e[++n]:r==="--overwrite"?t.overwrite=!0:r==="--configs"&&e[n+1]&&(t.configs=e[++n].split(",").map(i=>i.trim()).filter(Boolean))}return t}o(Xc,"parseArgs");async function Cr(e=process.argv){let t=Xc(e);t.workspaceDir||(console.error("Usage: node scripts/grade-evals.js <workspace> [--provider anthropic] [--configs with_skill,without_skill] [--overwrite]"),process.exit(1));let n=await Vc(t);process.stdout.write(`${JSON.stringify(n,null,2)}
747
+ `)}o(Cr,"main");var Jc=!1;Jc&&Cr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{writeFile as kt}from"node:fs/promises";import D from"node:path";import{readFile as Yc,readdir as Qc,stat as Zc,writeFile as Pr}from"node:fs/promises";import C from"node:path";async function bt(e){return JSON.parse(await Yc(e,"utf8"))}o(bt,"readJson");async function ed(e){try{return await Zc(e),!0}catch{return!1}}o(ed,"pathExists");async function St(e){return(await Qc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>C.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(St,"listDirectories");async function Ne(e){let t=await ed(C.join(e,"runs"))?C.join(e,"runs"):e,n=(await St(t)).filter(i=>C.basename(i).startsWith("eval-")),r={};for(let i of n){let s=C.join(i,"eval_metadata.json"),c=(await bt(s).catch(()=>({}))).eval_id??C.basename(i);for(let d of await St(i)){let l=C.basename(d),u=(await St(d)).filter(f=>C.basename(f).startsWith("run-"));if(u.length!==0){r[l]??=[];for(let f of u){let m=await bt(C.join(f,"grading.json")).catch(()=>null);if(!m)continue;let p=await bt(C.join(f,"timing.json")).catch(()=>({}));r[l].push({eval_id:c,run_id:C.basename(f),pass_rate:m.summary?.pass_rate??0,passed:m.summary?.passed??0,failed:m.summary?.failed??0,total:m.summary?.total??0,time_seconds:p.total_duration_seconds??m.timing?.total_duration_seconds??0,tokens:p.total_tokens??m.execution_metrics?.output_chars??0,tool_calls:m.execution_metrics?.total_tool_calls??0,errors:m.execution_metrics?.errors_encountered??0,expectations:Array.isArray(m.expectations)?m.expectations:[],notes:[...m.user_notes_summary?.uncertainties??[],...m.user_notes_summary?.needs_review??[],...m.user_notes_summary?.workarounds??[]]})}}}}return r}o(Ne,"loadRunResults");function td(e){let t={};for(let[s,a]of Object.entries(e))t[s]={pass_rate:Oe(a.map(c=>Number(c.pass_rate??0))),time_seconds:Oe(a.map(c=>Number(c.time_seconds??0))),tokens:Oe(a.map(c=>Number(c.tokens??0)))};let n=Object.keys(t),r=t[n[0]]??{pass_rate:{mean:0},time_seconds:{mean:0},tokens:{mean:0}},i=t[n[1]]??{pass_rate:{mean:0},time_seconds:{mean:0},tokens:{mean:0}};return{configs:t,delta:{pass_rate:$e(r.pass_rate.mean-i.pass_rate.mean),time_seconds:$e(r.time_seconds.mean-i.time_seconds.mean),tokens:$e(r.tokens.mean-i.tokens.mean)}}}o(td,"summarizeConfigs");function xt(e,t,n){let r=td(n);return{skill_name:t,generated_at:new Date().toISOString(),workspace:C.resolve(e),configs:r.configs,delta:r.delta,runs:n}}o(xt,"buildBenchmarkDocument");function nd(e){let t=[`# Benchmark: ${e.skill_name}`,"",`Generated: ${e.generated_at}`,"","| Config | Pass Rate | Time (s) | Tokens |","| --- | --- | --- | --- |"];for(let[n,r]of Object.entries(e.configs))t.push(`| ${n} | ${r.pass_rate.mean} \xB1 ${r.pass_rate.stddev} | ${r.time_seconds.mean} \xB1 ${r.time_seconds.stddev} | ${r.tokens.mean} \xB1 ${r.tokens.stddev} |`);return t.push(""),t.push("## Delta"),t.push(""),t.push(`- Pass rate: ${e.delta.pass_rate}`),t.push(`- Time (s): ${e.delta.time_seconds}`),t.push(`- Tokens: ${e.delta.tokens}`),t.join(`
748
+ `)}o(nd,"renderBenchmarkMarkdown");function rd(e){let t={iterationDir:e[2],skillName:"unknown-skill"};for(let n=3;n<e.length;n+=1)e[n]==="--skill-name"&&e[n+1]&&(t.skillName=e[n+1],n+=1);return t}o(rd,"parseArgs");async function od(){let{iterationDir:e,skillName:t}=rd(process.argv);e||(console.error("Usage: node scripts/aggregate-benchmark.js <iteration-dir> --skill-name <name>"),process.exit(1));let n=await Ne(e);Object.keys(n).length===0&&(console.error(`No benchmark runs found in ${e}`),process.exit(1));let r=xt(e,t,n),i=C.join(e,"benchmark.json"),s=C.join(e,"benchmark.md");await Pr(i,JSON.stringify(r,null,2)),await Pr(s,`${nd(r)}
749
+ `),console.log(`Wrote ${i}`),console.log(`Wrote ${s}`)}o(od,"main");var id=!1;id&&od().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});function De(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(De,"normalizeStringArray");function sd(e){let t={};for(let[n,r]of Object.entries(e)){let i=new Map,s=[];for(let a of r){for(let c of a.expectations??[]){if(c?.passed===!0)continue;let d=String(c?.text??"").trim();d&&i.set(d,(i.get(d)??0)+1)}for(let c of a.notes??[]){let d=String(c??"").trim();d&&s.push(d)}}t[n]={repeated_failures:Array.from(i.entries()).sort((a,c)=>c[1]-a[1]).slice(0,10).map(([a,c])=>({text:a,count:c})),notes:s.slice(0,10)}}return t}o(sd,"summarizeFailureClusters");function ad(e,t,n){let r=Z(e)??{};return{skill_name:t.skill_name,generated_at:new Date().toISOString(),workspace:t.workspace,verdict:["improves","regresses","mixed","inconclusive"].includes(r.verdict)?r.verdict:"inconclusive",release_readiness:["ready","needs_iteration","needs_manual_review"].includes(r.release_readiness)?r.release_readiness:"needs_manual_review",recommendation:String(r.recommendation??"").trim(),key_findings:De(r.key_findings),variance_hotspots:De(r.variance_hotspots),suggested_actions:De(r.suggested_actions),watchouts:De(r.watchouts),supporting_metrics:{pass_rate_delta:t.delta?.pass_rate??"n/a",time_seconds_delta:t.delta?.time_seconds??"n/a",tokens_delta:t.delta?.tokens??"n/a"},failure_clusters:n}}o(ad,"normalizeAnalysisResult");function cd(e){return`${e.agentInstructions.trim()}
750
750
 
751
751
  Return JSON with this shape:
752
752
  {
@@ -764,12 +764,12 @@ ${_(JSON.stringify({skill_name:e.benchmark.skill_name,configs:e.benchmark.config
764
764
 
765
765
  ## Failure Clusters
766
766
  ${_(JSON.stringify(e.failureClusters,null,2),8e3)}
767
- `}o(sd,"buildAnalysisPrompt");async function ad(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:D.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(ad,"defaultRunAnalyst");function cd(e){let t=[`# Benchmark Analysis: ${e.skill_name}`,"",`Generated: ${e.generated_at}`,"",`- Verdict: ${e.verdict}`,`- Release readiness: ${e.release_readiness}`,`- Recommendation: ${e.recommendation||"n/a"}`,""],n=[["key_findings","Key Findings"],["variance_hotspots","Variance Hotspots"],["suggested_actions","Suggested Actions"],["watchouts","Watchouts"]];for(let[r,i]of n){t.push(`## ${i}`),t.push("");let s=Array.isArray(e[r])?e[r]:[];if(s.length===0)t.push("- None");else for(let a of s)t.push(`- ${a}`);t.push("")}return t.push("## Supporting Metrics"),t.push(""),t.push(`- Pass rate delta: ${e.supporting_metrics.pass_rate_delta}`),t.push(`- Time delta: ${e.supporting_metrics.time_seconds_delta}`),t.push(`- Tokens delta: ${e.supporting_metrics.tokens_delta}`),`${t.join(`
767
+ `}o(cd,"buildAnalysisPrompt");async function dd(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:D.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(dd,"defaultRunAnalyst");function ld(e){let t=[`# Benchmark Analysis: ${e.skill_name}`,"",`Generated: ${e.generated_at}`,"",`- Verdict: ${e.verdict}`,`- Release readiness: ${e.release_readiness}`,`- Recommendation: ${e.recommendation||"n/a"}`,""],n=[["key_findings","Key Findings"],["variance_hotspots","Variance Hotspots"],["suggested_actions","Suggested Actions"],["watchouts","Watchouts"]];for(let[r,i]of n){t.push(`## ${i}`),t.push("");let s=Array.isArray(e[r])?e[r]:[];if(s.length===0)t.push("- None");else for(let a of s)t.push(`- ${a}`);t.push("")}return t.push("## Supporting Metrics"),t.push(""),t.push(`- Pass rate delta: ${e.supporting_metrics.pass_rate_delta}`),t.push(`- Time delta: ${e.supporting_metrics.time_seconds_delta}`),t.push(`- Tokens delta: ${e.supporting_metrics.tokens_delta}`),`${t.join(`
768
768
  `)}
769
- `}o(cd,"renderAnalysisMarkdown");async function dd(e,t=ad){let n=D.resolve(e.workspaceDir),r=D.resolve(e.benchmarkPath??D.join(n,"benchmark.json")),i=await P(r,null);if(!i){let p=await $e(n);if(Object.keys(p).length===0)throw new Error(`No benchmark data found in ${n}`);i=St(n,e.skillName??D.basename(n),p),await xt(r,`${JSON.stringify(i,null,2)}
770
- `,"utf8")}let s=await $e(n),a=od(s),c=await Z(import.meta.url,"../agents/analyzer.md"),d=sd({agentInstructions:c,benchmark:i,failureClusters:a}),l=await t(d,{...e,workspaceDir:n,benchmarkPath:r,benchmark:i}),u=id(l,i,a),f=D.resolve(e.outputPath??D.join(n,"analysis.json")),m=D.resolve(e.markdownPath??D.join(n,"analysis.md"));return await xt(f,`${JSON.stringify(u,null,2)}
771
- `,"utf8"),await xt(m,cd(u),"utf8"),{analysis:u,prompt:d,rawResponse:l,analysisJsonPath:f,analysisMdPath:m}}o(dd,"analyzeBenchmark");function ld(e){let t={workspaceDir:e[2]??"",benchmarkPath:void 0,outputPath:void 0,markdownPath:void 0,skillName:void 0,provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,cwd:process.cwd()};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--benchmark"&&e[n+1]?t.benchmarkPath=e[++n]:r==="--output"&&e[n+1]?t.outputPath=e[++n]:r==="--markdown"&&e[n+1]?t.markdownPath=e[++n]:r==="--skill-name"&&e[n+1]?t.skillName=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--cwd"&&e[n+1]&&(t.cwd=e[++n])}return t}o(ld,"parseArgs");async function Pr(e=process.argv){let t=ld(e);t.workspaceDir||(console.error("Usage: node scripts/analyze-benchmark.js <workspace> [--benchmark benchmark.json] [--output analysis.json] [--markdown analysis.md]"),process.exit(1));let n=await dd(t);process.stdout.write(`${JSON.stringify({analysis:n.analysis,analysis_json:n.analysisJsonPath,analysis_md:n.analysisMdPath},null,2)}
772
- `)}o(Pr,"main");var ud=!1;ud&&Pr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as fd,readFile as Mr,writeFile as Or}from"node:fs/promises";import E from"node:path";async function Et(e){return(await fd(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>E.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(Et,"listDirectories");function kt(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(kt,"normalizeStringArray");function pd(e){let t=Q(e)??{},n=["A","B","tie","inconclusive"].includes(t.winner)?t.winner:"inconclusive",r=Number(t.confidence);return{winner:n,confidence:Number.isFinite(r)?Math.max(0,Math.min(1,Number(r.toFixed(4)))):0,rationale:String(t.rationale??"").trim(),strengths_a:kt(t.strengths_a),strengths_b:kt(t.strengths_b),risks:kt(t.risks)}}o(pd,"normalizeComparisonResult");async function md(e,t,n,r){let i=(await Et(E.join(e,t))).filter(f=>E.basename(f).startsWith("run-")),s=(await Et(E.join(e,n))).filter(f=>E.basename(f).startsWith("run-")),a=i[r],c=s[r];if(!a||!c)return null;let d=await P(E.join(e,"eval_metadata.json"),{}),l=await Mr(E.join(a,"outputs","result.md"),"utf8").catch(()=>""),u=await Mr(E.join(c,"outputs","result.md"),"utf8").catch(()=>"");return{evalDir:e,evalMetadata:d,runA:{runDir:a,runId:E.basename(a),configName:t,output:l},runB:{runDir:c,runId:E.basename(c),configName:n,output:u}}}o(md,"loadComparisonPair");function hd(e){let t=e.presentPrimaryFirst?{A:e.runA,B:e.runB}:{A:e.runB,B:e.runA};return`${e.agentInstructions.trim()}
769
+ `}o(ld,"renderAnalysisMarkdown");async function ud(e,t=dd){let n=D.resolve(e.workspaceDir),r=D.resolve(e.benchmarkPath??D.join(n,"benchmark.json")),i=await P(r,null);if(!i){let p=await Ne(n);if(Object.keys(p).length===0)throw new Error(`No benchmark data found in ${n}`);i=xt(n,e.skillName??D.basename(n),p),await kt(r,`${JSON.stringify(i,null,2)}
770
+ `,"utf8")}let s=await Ne(n),a=sd(s),c=await ee(import.meta.url,"../agents/analyzer.md"),d=cd({agentInstructions:c,benchmark:i,failureClusters:a}),l=await t(d,{...e,workspaceDir:n,benchmarkPath:r,benchmark:i}),u=ad(l,i,a),f=D.resolve(e.outputPath??D.join(n,"analysis.json")),m=D.resolve(e.markdownPath??D.join(n,"analysis.md"));return await kt(f,`${JSON.stringify(u,null,2)}
771
+ `,"utf8"),await kt(m,ld(u),"utf8"),{analysis:u,prompt:d,rawResponse:l,analysisJsonPath:f,analysisMdPath:m}}o(ud,"analyzeBenchmark");function fd(e){let t={workspaceDir:e[2]??"",benchmarkPath:void 0,outputPath:void 0,markdownPath:void 0,skillName:void 0,provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,cwd:process.cwd()};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--benchmark"&&e[n+1]?t.benchmarkPath=e[++n]:r==="--output"&&e[n+1]?t.outputPath=e[++n]:r==="--markdown"&&e[n+1]?t.markdownPath=e[++n]:r==="--skill-name"&&e[n+1]?t.skillName=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--cwd"&&e[n+1]&&(t.cwd=e[++n])}return t}o(fd,"parseArgs");async function Mr(e=process.argv){let t=fd(e);t.workspaceDir||(console.error("Usage: node scripts/analyze-benchmark.js <workspace> [--benchmark benchmark.json] [--output analysis.json] [--markdown analysis.md]"),process.exit(1));let n=await ud(t);process.stdout.write(`${JSON.stringify({analysis:n.analysis,analysis_json:n.analysisJsonPath,analysis_md:n.analysisMdPath},null,2)}
772
+ `)}o(Mr,"main");var pd=!1;pd&&Mr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as md,readFile as Or,writeFile as $r}from"node:fs/promises";import E from"node:path";async function It(e){return(await md(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>E.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(It,"listDirectories");function Et(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(Et,"normalizeStringArray");function hd(e){let t=Z(e)??{},n=["A","B","tie","inconclusive"].includes(t.winner)?t.winner:"inconclusive",r=Number(t.confidence);return{winner:n,confidence:Number.isFinite(r)?Math.max(0,Math.min(1,Number(r.toFixed(4)))):0,rationale:String(t.rationale??"").trim(),strengths_a:Et(t.strengths_a),strengths_b:Et(t.strengths_b),risks:Et(t.risks)}}o(hd,"normalizeComparisonResult");async function gd(e,t,n,r){let i=(await It(E.join(e,t))).filter(f=>E.basename(f).startsWith("run-")),s=(await It(E.join(e,n))).filter(f=>E.basename(f).startsWith("run-")),a=i[r],c=s[r];if(!a||!c)return null;let d=await P(E.join(e,"eval_metadata.json"),{}),l=await Or(E.join(a,"outputs","result.md"),"utf8").catch(()=>""),u=await Or(E.join(c,"outputs","result.md"),"utf8").catch(()=>"");return{evalDir:e,evalMetadata:d,runA:{runDir:a,runId:E.basename(a),configName:t,output:l},runB:{runDir:c,runId:E.basename(c),configName:n,output:u}}}o(gd,"loadComparisonPair");function wd(e){let t=e.presentPrimaryFirst?{A:e.runA,B:e.runB}:{A:e.runB,B:e.runA};return`${e.agentInstructions.trim()}
773
773
 
774
774
  Return JSON with this shape:
775
775
  {
@@ -797,15 +797,15 @@ ${_(t.A.output,12e3)}
797
797
 
798
798
  ## Candidate B
799
799
  ${_(t.B.output,12e3)}
800
- `}o(hd,"buildComparisonPrompt");async function gd(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:E.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(gd,"defaultRunComparator");function wd(e,t,n,r){return e==="A"?t?n:r:e==="B"?t?r:n:e}o(wd,"mapWinnerToConfig");function yd(e){let t=[`# Blind Comparison: ${e.config_a} vs ${e.config_b}`,"",`Generated: ${e.generated_at}`,"",`- ${e.config_a} wins: ${e.summary.config_a_wins}`,`- ${e.config_b} wins: ${e.summary.config_b_wins}`,`- ties: ${e.summary.ties}`,`- inconclusive: ${e.summary.inconclusive}`,""];for(let n of e.comparisons)t.push(`## Eval ${n.eval_id??n.eval_name??n.index}`),t.push(""),t.push(`- Winner: ${n.winner_config}`),t.push(`- Confidence: ${n.confidence}`),t.push(`- Rationale: ${n.rationale||"n/a"}`),t.push("");return`${t.join(`
800
+ `}o(wd,"buildComparisonPrompt");async function yd(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:E.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(yd,"defaultRunComparator");function vd(e,t,n,r){return e==="A"?t?n:r:e==="B"?t?r:n:e}o(vd,"mapWinnerToConfig");function bd(e){let t=[`# Blind Comparison: ${e.config_a} vs ${e.config_b}`,"",`Generated: ${e.generated_at}`,"",`- ${e.config_a} wins: ${e.summary.config_a_wins}`,`- ${e.config_b} wins: ${e.summary.config_b_wins}`,`- ties: ${e.summary.ties}`,`- inconclusive: ${e.summary.inconclusive}`,""];for(let n of e.comparisons)t.push(`## Eval ${n.eval_id??n.eval_name??n.index}`),t.push(""),t.push(`- Winner: ${n.winner_config}`),t.push(`- Confidence: ${n.confidence}`),t.push(`- Rationale: ${n.rationale||"n/a"}`),t.push("");return`${t.join(`
801
801
  `)}
802
- `}o(yd,"renderComparisonMarkdown");async function vd(e,t=gd){let n=E.resolve(e.workspaceDir),r=e.configA??"with_skill",i=e.configB??"without_skill",s=Number.isFinite(e.maxPairs)&&e.maxPairs>0?Math.floor(e.maxPairs):Number.POSITIVE_INFINITY,a=await Z(import.meta.url,"../agents/comparator.md"),c=[];for(let f of await Et(n))if(E.basename(f).startsWith("eval-"))for(let m=0;m<s;m+=1){let p=await md(f,r,i,m);if(!p)break;let h=c.length%2===0,k=hd({agentInstructions:a,evalMetadata:p.evalMetadata,runA:p.runA,runB:p.runB,presentPrimaryFirst:h}),w=await t(k,{...e,workspaceDir:n,evalDir:f,pairIndex:m,configA:r,configB:i}),g=pd(w),y=wd(g.winner,h,r,i);c.push({index:c.length+1,eval_id:p.evalMetadata.eval_id??null,eval_name:p.evalMetadata.eval_name??null,run_a:E.relative(n,p.runA.runDir).replace(/\\/g,"/"),run_b:E.relative(n,p.runB.runDir).replace(/\\/g,"/"),presented_as:h?{A:r,B:i}:{A:i,B:r},winner_label:g.winner,winner_config:y,confidence:g.confidence,rationale:g.rationale,strengths_a:g.strengths_a,strengths_b:g.strengths_b,risks:g.risks})}if(c.length===0)throw new Error(`No comparable run pairs found for ${r} vs ${i} in ${n}`);let d={workspace:n,generated_at:new Date().toISOString(),config_a:r,config_b:i,summary:{total_pairs:c.length,config_a_wins:c.filter(f=>f.winner_config===r).length,config_b_wins:c.filter(f=>f.winner_config===i).length,ties:c.filter(f=>f.winner_config==="tie").length,inconclusive:c.filter(f=>f.winner_config==="inconclusive").length},comparisons:c},l=E.resolve(e.outputPath??E.join(n,"comparison.json")),u=E.resolve(e.markdownPath??E.join(n,"comparison.md"));return await Or(l,`${JSON.stringify(d,null,2)}
803
- `,"utf8"),await Or(u,yd(d),"utf8"),{document:d,outputPath:l,markdownPath:u}}o(vd,"compareWorkspace");function bd(e){let t={workspaceDir:e[2]??"",configA:"with_skill",configB:"without_skill",outputPath:void 0,markdownPath:void 0,provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,maxPairs:void 0,cwd:process.cwd()};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--config-a"&&e[n+1]?t.configA=e[++n]:r==="--config-b"&&e[n+1]?t.configB=e[++n]:r==="--output"&&e[n+1]?t.outputPath=e[++n]:r==="--markdown"&&e[n+1]?t.markdownPath=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--max-pairs"&&e[n+1]?t.maxPairs=Number(e[++n]):r==="--cwd"&&e[n+1]&&(t.cwd=e[++n])}return t}o(bd,"parseArgs");async function $r(e=process.argv){let t=bd(e);t.workspaceDir||(console.error("Usage: node scripts/compare-runs.js <workspace> [--config-a with_skill] [--config-b without_skill] [--output comparison.json]"),process.exit(1));let n=await vd(t);process.stdout.write(`${JSON.stringify({comparison:n.document.summary,output:n.outputPath,markdown:n.markdownPath},null,2)}
804
- `)}o($r,"main");var Sd=!1;Sd&&$r().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as xd,writeFile as kd}from"node:fs/promises";import{createHash as Ed}from"node:crypto";import It from"node:path";import{zipSync as Id,strToU8 as Rd}from"fflate";var Ad=".kodax-package.json";function _d(e){return e instanceof Uint8Array?e:new Uint8Array(e)}o(_d,"toUint8Array");function Td(e){return Ed("sha256").update(e).digest("hex")}o(Td,"sha256");function Cd(e,t,n={}){return{format:"kodax-skill-package",version:1,created_at:n.createdAt??new Date().toISOString(),entrypoint:"SKILL.md",skill:{name:e.frontmatter.name,description:e.frontmatter.description,compatibility:e.frontmatter.compatibility??null,user_invocable:e.frontmatter["user-invocable"]??!0,disable_model_invocation:e.frontmatter["disable-model-invocation"]??!1},files:t.map(r=>({path:r.relativePath,size:r.bytes.length,sha256:r.sha256})),note:"This archive is a zip file with a .skill extension. Compatible agents can extract and install the included skill directory."}}o(Cd,"createPackageManifest");async function Pd(e,t={}){let n=await me(e);if(!n.valid)throw new Error(`Cannot package invalid skill:
802
+ `}o(bd,"renderComparisonMarkdown");async function Sd(e,t=yd){let n=E.resolve(e.workspaceDir),r=e.configA??"with_skill",i=e.configB??"without_skill",s=Number.isFinite(e.maxPairs)&&e.maxPairs>0?Math.floor(e.maxPairs):Number.POSITIVE_INFINITY,a=await ee(import.meta.url,"../agents/comparator.md"),c=[];for(let f of await It(n))if(E.basename(f).startsWith("eval-"))for(let m=0;m<s;m+=1){let p=await gd(f,r,i,m);if(!p)break;let h=c.length%2===0,k=wd({agentInstructions:a,evalMetadata:p.evalMetadata,runA:p.runA,runB:p.runB,presentPrimaryFirst:h}),w=await t(k,{...e,workspaceDir:n,evalDir:f,pairIndex:m,configA:r,configB:i}),g=hd(w),y=vd(g.winner,h,r,i);c.push({index:c.length+1,eval_id:p.evalMetadata.eval_id??null,eval_name:p.evalMetadata.eval_name??null,run_a:E.relative(n,p.runA.runDir).replace(/\\/g,"/"),run_b:E.relative(n,p.runB.runDir).replace(/\\/g,"/"),presented_as:h?{A:r,B:i}:{A:i,B:r},winner_label:g.winner,winner_config:y,confidence:g.confidence,rationale:g.rationale,strengths_a:g.strengths_a,strengths_b:g.strengths_b,risks:g.risks})}if(c.length===0)throw new Error(`No comparable run pairs found for ${r} vs ${i} in ${n}`);let d={workspace:n,generated_at:new Date().toISOString(),config_a:r,config_b:i,summary:{total_pairs:c.length,config_a_wins:c.filter(f=>f.winner_config===r).length,config_b_wins:c.filter(f=>f.winner_config===i).length,ties:c.filter(f=>f.winner_config==="tie").length,inconclusive:c.filter(f=>f.winner_config==="inconclusive").length},comparisons:c},l=E.resolve(e.outputPath??E.join(n,"comparison.json")),u=E.resolve(e.markdownPath??E.join(n,"comparison.md"));return await $r(l,`${JSON.stringify(d,null,2)}
803
+ `,"utf8"),await $r(u,bd(d),"utf8"),{document:d,outputPath:l,markdownPath:u}}o(Sd,"compareWorkspace");function xd(e){let t={workspaceDir:e[2]??"",configA:"with_skill",configB:"without_skill",outputPath:void 0,markdownPath:void 0,provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,maxPairs:void 0,cwd:process.cwd()};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--config-a"&&e[n+1]?t.configA=e[++n]:r==="--config-b"&&e[n+1]?t.configB=e[++n]:r==="--output"&&e[n+1]?t.outputPath=e[++n]:r==="--markdown"&&e[n+1]?t.markdownPath=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--max-pairs"&&e[n+1]?t.maxPairs=Number(e[++n]):r==="--cwd"&&e[n+1]&&(t.cwd=e[++n])}return t}o(xd,"parseArgs");async function Nr(e=process.argv){let t=xd(e);t.workspaceDir||(console.error("Usage: node scripts/compare-runs.js <workspace> [--config-a with_skill] [--config-b without_skill] [--output comparison.json]"),process.exit(1));let n=await Sd(t);process.stdout.write(`${JSON.stringify({comparison:n.document.summary,output:n.outputPath,markdown:n.markdownPath},null,2)}
804
+ `)}o(Nr,"main");var kd=!1;kd&&Nr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as Ed,writeFile as Id}from"node:fs/promises";import{createHash as Rd}from"node:crypto";import Rt from"node:path";import{zipSync as Ad,strToU8 as _d}from"fflate";var Td=".kodax-package.json";function Cd(e){return e instanceof Uint8Array?e:new Uint8Array(e)}o(Cd,"toUint8Array");function Pd(e){return Rd("sha256").update(e).digest("hex")}o(Pd,"sha256");function Md(e,t,n={}){return{format:"kodax-skill-package",version:1,created_at:n.createdAt??new Date().toISOString(),entrypoint:"SKILL.md",skill:{name:e.frontmatter.name,description:e.frontmatter.description,compatibility:e.frontmatter.compatibility??null,user_invocable:e.frontmatter["user-invocable"]??!0,disable_model_invocation:e.frontmatter["disable-model-invocation"]??!1},files:t.map(r=>({path:r.relativePath,size:r.bytes.length,sha256:r.sha256})),note:"This archive is a zip file with a .skill extension. Compatible agents can extract and install the included skill directory."}}o(Md,"createPackageManifest");async function Od(e,t={}){let n=await he(e);if(!n.valid)throw new Error(`Cannot package invalid skill:
805
805
  - ${n.errors.join(`
806
- - `)}`);let r=await ue(e),i=await mt(e),s=[];for(let d of i){if(d.relativePath.endsWith(".skill"))continue;let l=_d(await xd(d.absolutePath));s.push({...d,bytes:l,sha256:Td(l)})}let a=Cd(r,s,t),c={[Ad]:Rd(JSON.stringify(a,null,2))};for(let d of s)c[d.relativePath]=d.bytes;return{manifest:a,bytes:Id(c,{level:6})}}o(Pd,"buildSkillPackage");async function Md(e,t,n={}){let r=await Pd(e,n);return await kd(t,r.bytes),{...r,outputPath:It.resolve(t)}}o(Md,"writeSkillPackage");function Od(e){let t={skillDir:e[2],output:void 0};for(let n=3;n<e.length;n+=1)e[n]==="--output"&&e[n+1]&&(t.output=e[++n]);return t}o(Od,"parseArgs");async function Nr(e=process.argv){let t=Od(e);t.skillDir||(console.error("Usage: node scripts/package-skill.js <skill-dir> [--output <file.skill>]"),process.exit(1));let n=await ue(t.skillDir),r=t.output??It.join(It.dirname(t.skillDir),`${n.frontmatter.name}.skill`),i=await Md(t.skillDir,r);console.log(`Wrote ${i.outputPath}`)}o(Nr,"main");var $d=!1;$d&&Nr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{cp as Nd,mkdir as Rt,readFile as jr,rm as Fr,stat as Dd,writeFile as Ld}from"node:fs/promises";import M from"node:path";import{strFromU8 as Dr,unzipSync as jd}from"fflate";var Lr=".kodax-package.json";function Fd(e){return e.replace(/\\/g,"/").replace(/^\.?\//,"")}o(Fd,"normalizeArchivePath");function Wd(e){let t=Fd(e);if(!t||t.startsWith("/")||t.includes("../"))throw new Error(`Unsafe archive entry path: ${e}`);return t}o(Wd,"assertSafeArchivePath");function Bd(e){return/\.(skill|zip)$/i.test(e)}o(Bd,"isZipLike");function Ud(e){let t=jd(e),n=Object.entries(t).map(([l,u])=>({relativePath:Wd(l),bytes:u})),r=n.find(l=>l.relativePath==="SKILL.md");if(!r)throw new Error("Archive is missing SKILL.md");let i=Pe(Dr(r.bytes)),s=typeof i.frontmatter.name=="string"?i.frontmatter.name.trim():"",a=typeof i.frontmatter.description=="string"?i.frontmatter.description.trim():"";if(!s||!a)throw new Error("Archive SKILL.md is missing required frontmatter fields.");let c=n.find(l=>l.relativePath===Lr),d=c?JSON.parse(Dr(c.bytes)):null;return{skillName:s,manifest:d,entries:n.filter(l=>l.relativePath!==Lr)}}o(Ud,"readSkillPackageBuffer");async function Kd(e,t){if(await fe(e)){if(!t)throw new Error(`Target skill already exists: ${e}`);await Fr(e,{recursive:!0,force:!0})}await Rt(e,{recursive:!0})}o(Kd,"ensureInstallTarget");async function qd(e,t={}){let n=M.resolve(t.skillsDir??pe()),r=Ud(await jr(e)),i=M.join(n,r.skillName);await Kd(i,t.force===!0);for(let s of r.entries){let a=M.join(i,s.relativePath);await Rt(M.dirname(a),{recursive:!0}),await Ld(a,s.bytes)}return{skillName:r.skillName,installedTo:i,source:M.resolve(e),manifest:r.manifest}}o(qd,"installSkillArchive");async function Hd(e,t={}){let n=await me(e);if(!n.valid)throw new Error(`Cannot install invalid skill:
806
+ - `)}`);let r=await fe(e),i=await ht(e),s=[];for(let d of i){if(d.relativePath.endsWith(".skill"))continue;let l=Cd(await Ed(d.absolutePath));s.push({...d,bytes:l,sha256:Pd(l)})}let a=Md(r,s,t),c={[Td]:_d(JSON.stringify(a,null,2))};for(let d of s)c[d.relativePath]=d.bytes;return{manifest:a,bytes:Ad(c,{level:6})}}o(Od,"buildSkillPackage");async function $d(e,t,n={}){let r=await Od(e,n);return await Id(t,r.bytes),{...r,outputPath:Rt.resolve(t)}}o($d,"writeSkillPackage");function Nd(e){let t={skillDir:e[2],output:void 0};for(let n=3;n<e.length;n+=1)e[n]==="--output"&&e[n+1]&&(t.output=e[++n]);return t}o(Nd,"parseArgs");async function Dr(e=process.argv){let t=Nd(e);t.skillDir||(console.error("Usage: node scripts/package-skill.js <skill-dir> [--output <file.skill>]"),process.exit(1));let n=await fe(t.skillDir),r=t.output??Rt.join(Rt.dirname(t.skillDir),`${n.frontmatter.name}.skill`),i=await $d(t.skillDir,r);console.log(`Wrote ${i.outputPath}`)}o(Dr,"main");var Dd=!1;Dd&&Dr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{cp as Ld,mkdir as At,readFile as Fr,rm as Wr,stat as jd,writeFile as Fd}from"node:fs/promises";import M from"node:path";import{strFromU8 as Lr,unzipSync as Wd}from"fflate";var jr=".kodax-package.json";function Bd(e){return e.replace(/\\/g,"/").replace(/^\.?\//,"")}o(Bd,"normalizeArchivePath");function Ud(e){let t=Bd(e);if(!t||t.startsWith("/")||t.includes("../"))throw new Error(`Unsafe archive entry path: ${e}`);return t}o(Ud,"assertSafeArchivePath");function Kd(e){return/\.(skill|zip)$/i.test(e)}o(Kd,"isZipLike");function qd(e){let t=Wd(e),n=Object.entries(t).map(([l,u])=>({relativePath:Ud(l),bytes:u})),r=n.find(l=>l.relativePath==="SKILL.md");if(!r)throw new Error("Archive is missing SKILL.md");let i=Me(Lr(r.bytes)),s=typeof i.frontmatter.name=="string"?i.frontmatter.name.trim():"",a=typeof i.frontmatter.description=="string"?i.frontmatter.description.trim():"";if(!s||!a)throw new Error("Archive SKILL.md is missing required frontmatter fields.");let c=n.find(l=>l.relativePath===jr),d=c?JSON.parse(Lr(c.bytes)):null;return{skillName:s,manifest:d,entries:n.filter(l=>l.relativePath!==jr)}}o(qd,"readSkillPackageBuffer");async function Hd(e,t){if(await pe(e)){if(!t)throw new Error(`Target skill already exists: ${e}`);await Wr(e,{recursive:!0,force:!0})}await At(e,{recursive:!0})}o(Hd,"ensureInstallTarget");async function zd(e,t={}){let n=M.resolve(t.skillsDir??me()),r=qd(await Fr(e)),i=M.join(n,r.skillName);await Hd(i,t.force===!0);for(let s of r.entries){let a=M.join(i,s.relativePath);await At(M.dirname(a),{recursive:!0}),await Fd(a,s.bytes)}return{skillName:r.skillName,installedTo:i,source:M.resolve(e),manifest:r.manifest}}o(zd,"installSkillArchive");async function Gd(e,t={}){let n=await he(e);if(!n.valid)throw new Error(`Cannot install invalid skill:
807
807
  - ${n.errors.join(`
808
- - `)}`);let r=M.join(e,"SKILL.md"),i=Pe(await jr(r,"utf8")),s=M.resolve(t.skillsDir??pe()),a=M.join(s,i.frontmatter.name);if(await fe(a)){if(!t.force)throw new Error(`Target skill already exists: ${a}`);await Fr(a,{recursive:!0,force:!0})}return await Rt(s,{recursive:!0}),await Nd(e,a,{recursive:!0}),{skillName:i.frontmatter.name,installedTo:a,source:M.resolve(e),manifest:null}}o(Hd,"installSkillDirectory");async function zd(e,t={}){let n=M.resolve(e),r=await Dd(n).catch(()=>null);if(!r)throw new Error(`Input not found: ${n}`);if(r.isDirectory())return Hd(n,t);if(r.isFile()&&Bd(n))return qd(n,t);throw new Error("Input must be a skill directory or a .skill/.zip archive.")}o(zd,"installSkill");function Gd(e){let t={input:e[2],skillsDir:void 0,force:!1};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--dest"&&e[n+1]?t.skillsDir=e[++n]:r==="--force"&&(t.force=!0)}return t}o(Gd,"parseArgs");async function Wr(e=process.argv){let t=Gd(e);t.input||(console.error("Usage: node scripts/install-skill.js <skill-dir-or-archive> [--dest <skills-dir>] [--force]"),process.exit(1));let n=await zd(t.input,t);console.log(`Installed ${n.skillName} to ${n.installedTo}`)}o(Wr,"main");var Vd=!1;Vd&&Wr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});var ZR=1440*60*1e3;var sA=5*6e4;var YA=new Intl.Segmenter("zh-CN",{granularity:"word"});var rT=String.raw`const TOOL_NAME = 'echo_tool';
808
+ - `)}`);let r=M.join(e,"SKILL.md"),i=Me(await Fr(r,"utf8")),s=M.resolve(t.skillsDir??me()),a=M.join(s,i.frontmatter.name);if(await pe(a)){if(!t.force)throw new Error(`Target skill already exists: ${a}`);await Wr(a,{recursive:!0,force:!0})}return await At(s,{recursive:!0}),await Ld(e,a,{recursive:!0}),{skillName:i.frontmatter.name,installedTo:a,source:M.resolve(e),manifest:null}}o(Gd,"installSkillDirectory");async function Vd(e,t={}){let n=M.resolve(e),r=await jd(n).catch(()=>null);if(!r)throw new Error(`Input not found: ${n}`);if(r.isDirectory())return Gd(n,t);if(r.isFile()&&Kd(n))return zd(n,t);throw new Error("Input must be a skill directory or a .skill/.zip archive.")}o(Vd,"installSkill");function Xd(e){let t={input:e[2],skillsDir:void 0,force:!1};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--dest"&&e[n+1]?t.skillsDir=e[++n]:r==="--force"&&(t.force=!0)}return t}o(Xd,"parseArgs");async function Br(e=process.argv){let t=Xd(e);t.input||(console.error("Usage: node scripts/install-skill.js <skill-dir-or-archive> [--dest <skills-dir>] [--force]"),process.exit(1));let n=await Vd(t.input,t);console.log(`Installed ${n.skillName} to ${n.installedTo}`)}o(Br,"main");var Jd=!1;Jd&&Br().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});var AA=1440*60*1e3;var $A=5*6e4;var I_=new Intl.Segmenter("zh-CN",{granularity:"word"});import{AsyncLocalStorage as el}from"node:async_hooks";var T_=new el;var DT=String.raw`const TOOL_NAME = 'echo_tool';
809
809
  const RESOURCE_URI = 'memory://guide';
810
810
  const PROMPT_NAME = 'draft_prompt';
811
811
  let buffer = '';
@@ -985,19 +985,19 @@ process.stdin.on('data', (chunk) => {
985
985
 
986
986
  process.on('SIGTERM', () => process.exit(0));
987
987
  process.on('SIGINT', () => process.exit(0));
988
- `;var qr=Object.freeze(["message","label","compaction","branch_summary","archive_marker","rewind_marker","artifact_ledger","memory_outcome_digest","memory_review_receipt"]),gl=0,wl=0,Hr=o(e=>{let t=e==="label"?++gl:++wl,n=Math.random().toString(36).slice(2,8);return`${e}-${Date.now()}-${t}-${n}`},"nextId");async function yl(e,t,n){let r=Hr("label");return await e.append({id:r,ts:Date.now(),type:"label",payload:{targetId:t,label:n}}),r}o(yl,"appendLabel");async function vl(e,t,n){let r=Hr("artifact");return await e.append({id:r,ts:Date.now(),type:"artifact_ledger",payload:{ref:t,summary:n}}),r}o(vl,"appendArtifact");function bl(e){let t=[],n=new Map,r=[],i=null;for(let s of e){if(s.type==="label"){let c=s.payload;c?.targetId&&r.push({targetId:c.targetId,label:c.label});continue}let a={entry:s,children:[]};if(s.type==="message"){t.push(a),n.set(s.id,a),i=a;continue}i?i.children.push(a):t.push(a)}for(let{targetId:s,label:a}of r){let c=n.get(s);c&&a!==void 0&&(c.label=a)}return t}o(bl,"buildLineageTree");var Sl=Object.freeze({name:"lineage",entryTypes:qr,operators:Object.freeze({label:o((async(e,...t)=>{let[n,r]=t;return yl(e,n,r)}),"label"),attachArtifact:o((async(e,...t)=>{let[n,r]=t;return vl(e,n,r)}),"attachArtifact")}),reducers:Object.freeze({buildLineageTree:o(e=>bl(e),"buildLineageTree")})});var Pl=new Set(["skill","ask_user_question","exit_plan_mode","spawn_agent","send_message","followup_task","wait_agent","interrupt_agent","list_agents","agent_output","tool_search","get_goal","create_goal","update_goal","todo_create","todo_update","todo_list","todo_get","worktree_create","worktree_remove","undo","mcp_search","mcp_describe","mcp_call","mcp_read_resource","mcp_get_prompt","repo_overview","changed_scope","changed_diff","changed_diff_bundle","module_context","symbol_context","process_context","impact_estimate","relationship_scan","cyclic_dependencies","semantic_lookup"]),At=Pl,De=`[\u5BF9\u8BDD\u5386\u53F2\u6458\u8981]
988
+ `;var Hr=Object.freeze(["message","label","compaction","branch_summary","archive_marker","rewind_marker","artifact_ledger","memory_outcome_digest","memory_review_receipt"]),Sl=0,xl=0,zr=o(e=>{let t=e==="label"?++Sl:++xl,n=Math.random().toString(36).slice(2,8);return`${e}-${Date.now()}-${t}-${n}`},"nextId");async function kl(e,t,n){let r=zr("label");return await e.append({id:r,ts:Date.now(),type:"label",payload:{targetId:t,label:n}}),r}o(kl,"appendLabel");async function El(e,t,n){let r=zr("artifact");return await e.append({id:r,ts:Date.now(),type:"artifact_ledger",payload:{ref:t,summary:n}}),r}o(El,"appendArtifact");function Il(e){let t=[],n=new Map,r=[],i=null;for(let s of e){if(s.type==="label"){let c=s.payload;c?.targetId&&r.push({targetId:c.targetId,label:c.label});continue}let a={entry:s,children:[]};if(s.type==="message"){t.push(a),n.set(s.id,a),i=a;continue}i?i.children.push(a):t.push(a)}for(let{targetId:s,label:a}of r){let c=n.get(s);c&&a!==void 0&&(c.label=a)}return t}o(Il,"buildLineageTree");var Rl=Object.freeze({name:"lineage",entryTypes:Hr,operators:Object.freeze({label:o((async(e,...t)=>{let[n,r]=t;return kl(e,n,r)}),"label"),attachArtifact:o((async(e,...t)=>{let[n,r]=t;return El(e,n,r)}),"attachArtifact")}),reducers:Object.freeze({buildLineageTree:o(e=>Il(e),"buildLineageTree")})});var Dl=new Set(["skill","ask_user_question","exit_plan_mode","spawn_agent","send_message","followup_task","wait_agent","interrupt_agent","list_agents","agent_output","tool_search","get_goal","create_goal","update_goal","todo_create","todo_update","todo_list","todo_get","worktree_create","worktree_remove","undo","mcp_search","mcp_describe","mcp_call","mcp_read_resource","mcp_get_prompt","repo_overview","changed_scope","changed_diff","changed_diff_bundle","module_context","symbol_context","process_context","impact_estimate","relationship_scan","cyclic_dependencies","semantic_lookup"]),_t=Dl,Le=`[\u5BF9\u8BDD\u5386\u53F2\u6458\u8981]
989
989
 
990
- `;var RC=De.trimEnd();var AC=16*1024;var jl={enabled:!1,maxAge:20,protectedTools:Array.from(At)};import{createRequire as ql}from"node:module";var Hl=ql(import.meta.url),Yr,D0=new Proxy({},{get(e,t){return Yr??=Hl("typescript"),Reflect.get(Yr,t)}});var QM=new Intl.Segmenter("en",{granularity:"grapheme"});import{fileURLToPath as KD,pathToFileURL as Tu}from"node:url";function mu(e){let t=e.code;return t==="ENOENT"||t==="ENOTDIR"}o(mu,"isMissingGitTrustPath");function hu(e,t,n){try{let r=t(e).replaceAll("\\","/").replace(/\/+$/,"");return r===""?void 0:/^[A-Za-z]:$/.test(r)?`${r}/`:r}catch(r){if(n(r))return;throw r}}o(hu,"normalizeGitSafeDirectoryRootImplementation");function gu(e,t,n,r){try{let s=t(n.join(e,".git"));if(s.isDirectory()||s.isFile())return!0}catch(s){if(!r(s))throw s}if(!(n.basename(e).toLowerCase()===".git"||/[/\\]\.git[/\\]modules[/\\]/i.test(e)))return!1;try{return t(n.join(e,"HEAD")).isFile()}catch(s){if(r(s))return!1;throw s}}o(gu,"isRepoBearingGitReadRootImplementation");function wu(e,t,n,r,i){let s=[];typeof e=="string"&&e!==""&&s.push(e);for(let d of n??[])i(d)&&s.push(d);s.push(...t??[]);let a=[],c=new Set;for(let d of s){if(a.length>=8)break;let l=r(d);if(l===void 0)continue;let u=l.toLowerCase();c.has(u)||(c.add(u),a.push(l))}return a}o(wu,"windowsGitTrustRootsImplementation");function yu(e){if(e==="git_config_count")return"count";if(/^git_config_key_\d+$/.test(e))return"key";if(/^git_config_value_\d+$/.test(e))return"value"}o(yu,"gitConfigEnvKind");function vu(e,t,n,r,i){let s=new Map,a=[],c,d=!1;for(let l=0;l<t;l+=1){if(e[l]!=="--env"||l+1>=t)continue;let u=e[l+1],f=u.indexOf("="),m=(f<0?u:u.slice(0,f)).toLowerCase(),p=n(m);if(p===void 0)continue;d=!0,a.push(l);let h=f<0?"":u.slice(f+1);if(p==="count"){let g=Number.parseInt(h,10);(c!==void 0||!Number.isSafeInteger(g)||g<0||String(g)!==h)&&r(),c=g;continue}let k=Number.parseInt(m.slice(`git_config_${p}_`.length),10),w=s.get(k)??{};(!Number.isSafeInteger(k)||k<0||w[p]!==void 0)&&r(),w[p]=h,s.set(k,w)}return i(s,a,c,d,r)}o(vu,"parseGitConfigEnvironmentImplementation");function bu(){throw new Error("ASRT GIT_CONFIG environment has an unexpected shape.")}o(bu,"throwUnexpectedGitConfigShape");function Su(e,t,n,r,i){!r||n!==void 0&&e.size===n&&[...e].every(([c,d])=>c<n&&d.key!==void 0&&d.value!==void 0)||i();let a=[...e].map(([c,d])=>({slot:c,key:d.key,value:d.value}));return{argumentIndices:t,pairs:a,sawAny:r}}o(Su,"finishParsedGitConfigEnvironment");function xu(e,t){let n=[];for(let i of e)n.push({key:"safe.directory",value:i},{key:"safe.directory",value:`${i}/*`});n.push(...t);let r=n.flatMap((i,s)=>[`GIT_CONFIG_KEY_${s}=${i.key}`,`GIT_CONFIG_VALUE_${s}=${i.value}`]);return r.push(`GIT_CONFIG_COUNT=${n.length}`),r}o(xu,"gitSafeDirectoryAssignments");function ku(e,t,n,r){let i=new Set(n.argumentIndices),s=[],a=!1;for(let c=0;c<e.length;c+=1)if(i.has(c)){if(!a){for(let d of r)s.push("--env",d);a=!0}c+=1}else s.push(e[c]);return n.sawAny||s.splice(t,0,...r.flatMap(c=>["--env",c])),s}o(ku,"replaceGitConfigEnvironment");function Eu(e,t,n,r,i){let s=e.lastIndexOf("--");if(s<0)throw new Error("ASRT Windows wrapper omitted its child separator.");let a=n(e,s),c=a.pairs.filter(l=>l.key.toLowerCase()!=="safe.directory").sort((l,u)=>l.slot-u.slot),d=r(t,c);return i(e,s,a,d)}o(Eu,"rewriteWindowsGitSafeDirectoryArgvImplementation");function Zr(){return String.raw`
991
- const isMissingGitTrustPath = ${mu.toString()};
992
- const normalizeGitSafeDirectoryRootImplementation = ${hu.toString()};
990
+ `;var sP=Le.trimEnd();var aP=16*1024;var Kl={enabled:!1,maxAge:20,protectedTools:Array.from(_t)};import{createRequire as Xl}from"node:module";var Jl=Xl(import.meta.url),Qr,gM=new Proxy({},{get(e,t){return Qr??=Jl("typescript"),Reflect.get(Qr,t)}});var MO=new Intl.Segmenter("en",{granularity:"grapheme"});import{fileURLToPath as kL,pathToFileURL as $u}from"node:url";function vu(e){let t=e.code;return t==="ENOENT"||t==="ENOTDIR"}o(vu,"isMissingGitTrustPath");function bu(e,t,n){try{let r=t(e).replaceAll("\\","/").replace(/\/+$/,"");return r===""?void 0:/^[A-Za-z]:$/.test(r)?`${r}/`:r}catch(r){if(n(r))return;throw r}}o(bu,"normalizeGitSafeDirectoryRootImplementation");function Su(e,t,n,r){try{let s=t(n.join(e,".git"));if(s.isDirectory()||s.isFile())return!0}catch(s){if(!r(s))throw s}if(!(n.basename(e).toLowerCase()===".git"||/[/\\]\.git[/\\]modules[/\\]/i.test(e)))return!1;try{return t(n.join(e,"HEAD")).isFile()}catch(s){if(r(s))return!1;throw s}}o(Su,"isRepoBearingGitReadRootImplementation");function xu(e,t,n,r,i){let s=[];typeof e=="string"&&e!==""&&s.push(e);for(let d of n??[])i(d)&&s.push(d);s.push(...t??[]);let a=[],c=new Set;for(let d of s){if(a.length>=8)break;let l=r(d);if(l===void 0)continue;let u=l.toLowerCase();c.has(u)||(c.add(u),a.push(l))}return a}o(xu,"windowsGitTrustRootsImplementation");function ku(e){if(e==="git_config_count")return"count";if(/^git_config_key_\d+$/.test(e))return"key";if(/^git_config_value_\d+$/.test(e))return"value"}o(ku,"gitConfigEnvKind");function Eu(e,t,n,r,i){let s=new Map,a=[],c,d=!1;for(let l=0;l<t;l+=1){if(e[l]!=="--env"||l+1>=t)continue;let u=e[l+1],f=u.indexOf("="),m=(f<0?u:u.slice(0,f)).toLowerCase(),p=n(m);if(p===void 0)continue;d=!0,a.push(l);let h=f<0?"":u.slice(f+1);if(p==="count"){let g=Number.parseInt(h,10);(c!==void 0||!Number.isSafeInteger(g)||g<0||String(g)!==h)&&r(),c=g;continue}let k=Number.parseInt(m.slice(`git_config_${p}_`.length),10),w=s.get(k)??{};(!Number.isSafeInteger(k)||k<0||w[p]!==void 0)&&r(),w[p]=h,s.set(k,w)}return i(s,a,c,d,r)}o(Eu,"parseGitConfigEnvironmentImplementation");function Iu(){throw new Error("ASRT GIT_CONFIG environment has an unexpected shape.")}o(Iu,"throwUnexpectedGitConfigShape");function Ru(e,t,n,r,i){!r||n!==void 0&&e.size===n&&[...e].every(([c,d])=>c<n&&d.key!==void 0&&d.value!==void 0)||i();let a=[...e].map(([c,d])=>({slot:c,key:d.key,value:d.value}));return{argumentIndices:t,pairs:a,sawAny:r}}o(Ru,"finishParsedGitConfigEnvironment");function Au(e,t){let n=[];for(let i of e)n.push({key:"safe.directory",value:i},{key:"safe.directory",value:`${i}/*`});n.push(...t);let r=n.flatMap((i,s)=>[`GIT_CONFIG_KEY_${s}=${i.key}`,`GIT_CONFIG_VALUE_${s}=${i.value}`]);return r.push(`GIT_CONFIG_COUNT=${n.length}`),r}o(Au,"gitSafeDirectoryAssignments");function _u(e,t,n,r){let i=new Set(n.argumentIndices),s=[],a=!1;for(let c=0;c<e.length;c+=1)if(i.has(c)){if(!a){for(let d of r)s.push("--env",d);a=!0}c+=1}else s.push(e[c]);return n.sawAny||s.splice(t,0,...r.flatMap(c=>["--env",c])),s}o(_u,"replaceGitConfigEnvironment");function Tu(e,t,n,r,i){let s=e.lastIndexOf("--");if(s<0)throw new Error("ASRT Windows wrapper omitted its child separator.");let a=n(e,s),c=a.pairs.filter(l=>l.key.toLowerCase()!=="safe.directory").sort((l,u)=>l.slot-u.slot),d=r(t,c);return i(e,s,a,d)}o(Tu,"rewriteWindowsGitSafeDirectoryArgvImplementation");function eo(){return String.raw`
991
+ const isMissingGitTrustPath = ${vu.toString()};
992
+ const normalizeGitSafeDirectoryRootImplementation = ${bu.toString()};
993
993
  const normalizeGitSafeDirectoryRoot = (root) => (
994
994
  normalizeGitSafeDirectoryRootImplementation(root, realpathSync, isMissingGitTrustPath)
995
995
  );
996
- const isRepoBearingGitReadRootImplementation = ${gu.toString()};
996
+ const isRepoBearingGitReadRootImplementation = ${Su.toString()};
997
997
  const isRepoBearingGitReadRoot = (root) => (
998
998
  isRepoBearingGitReadRootImplementation(root, statSync, path, isMissingGitTrustPath)
999
999
  );
1000
- const windowsGitTrustRootsImplementation = ${wu.toString()};
1000
+ const windowsGitTrustRootsImplementation = ${xu.toString()};
1001
1001
  const windowsGitTrustRoots = (input) => {
1002
1002
  const filesystem = (input.config && input.config.filesystem) || {};
1003
1003
  return windowsGitTrustRootsImplementation(
@@ -1008,10 +1008,10 @@ const windowsGitTrustRoots = (input) => {
1008
1008
  isRepoBearingGitReadRoot,
1009
1009
  );
1010
1010
  };
1011
- const gitConfigEnvKind = ${yu.toString()};
1012
- const throwUnexpectedGitConfigShape = ${bu.toString()};
1013
- const finishParsedGitConfigEnvironment = ${Su.toString()};
1014
- const parseGitConfigEnvironmentImplementation = ${vu.toString()};
1011
+ const gitConfigEnvKind = ${ku.toString()};
1012
+ const throwUnexpectedGitConfigShape = ${Iu.toString()};
1013
+ const finishParsedGitConfigEnvironment = ${Ru.toString()};
1014
+ const parseGitConfigEnvironmentImplementation = ${Eu.toString()};
1015
1015
  const parseGitConfigEnvironment = (argv, separator) => (
1016
1016
  parseGitConfigEnvironmentImplementation(
1017
1017
  argv,
@@ -1021,9 +1021,9 @@ const parseGitConfigEnvironment = (argv, separator) => (
1021
1021
  finishParsedGitConfigEnvironment,
1022
1022
  )
1023
1023
  );
1024
- const gitSafeDirectoryAssignments = ${xu.toString()};
1025
- const replaceGitConfigEnvironment = ${ku.toString()};
1026
- const rewriteWindowsGitSafeDirectoryArgvImplementation = ${Eu.toString()};
1024
+ const gitSafeDirectoryAssignments = ${Au.toString()};
1025
+ const replaceGitConfigEnvironment = ${_u.toString()};
1026
+ const rewriteWindowsGitSafeDirectoryArgvImplementation = ${Tu.toString()};
1027
1027
  const rewriteWindowsGitSafeDirectoryArgv = (argv, trustRoots) => (
1028
1028
  rewriteWindowsGitSafeDirectoryArgvImplementation(
1029
1029
  argv,
@@ -1033,7 +1033,7 @@ const rewriteWindowsGitSafeDirectoryArgv = (argv, trustRoots) => (
1033
1033
  replaceGitConfigEnvironment,
1034
1034
  )
1035
1035
  );
1036
- `}o(Zr,"windowsGitBrokerHelpersSource");var PN=64*1024*1024;var MN=String.raw`
1036
+ `}o(eo,"windowsGitBrokerHelpersSource");var uD=64*1024*1024;var fD=String.raw`
1037
1037
  $ErrorActionPreference = 'Stop'
1038
1038
  $payloadText = [Console]::In.ReadToEnd()
1039
1039
  if ([Text.Encoding]::UTF8.GetByteCount($payloadText) -gt 90000000) { throw 'payload exceeds bound' }
@@ -1155,7 +1155,7 @@ try {
1155
1155
  } finally {
1156
1156
  if (Test-Path -LiteralPath $temporary) { Remove-Item -LiteralPath $temporary -Force }
1157
1157
  }
1158
- `,ON=String.raw`
1158
+ `,pD=String.raw`
1159
1159
  $ErrorActionPreference = 'Stop'
1160
1160
  $payload = ([Console]::In.ReadToEnd() | ConvertFrom-Json)
1161
1161
  $hostSid = [Security.Principal.WindowsIdentity]::GetCurrent().User
@@ -1313,7 +1313,7 @@ if ($action -eq 'verify') {
1313
1313
  }
1314
1314
  Assert-ControlSecurity $controlRoot
1315
1315
  [Console]::Out.Write($controlRoot)
1316
- `;var eo=10;function to(e){let t=e.args.flatMap((a,c)=>a==="--"?[c]:[]);if(t.length===0)throw new Error("ASRT Windows invocation omitted its target separator.");if(t.length!==1)throw new Error("ASRT Windows invocation must contain exactly one target separator.");let n=t[0],r=e.args.slice(n+1);if(r.length===0||r[0]==="")throw new Error("ASRT Windows invocation omitted its target executable.");let i=new Map,s=[];for(let a=0;a<=n;a+=1){let c=e.args[a],d=c.toLowerCase();if(d.startsWith("--env="))throw new Error("ASRT Windows invocation used an unsupported inline environment entry.");if(d!=="--env"){s.push(c);continue}if(a+1>=n)throw new Error("ASRT Windows invocation contained an incomplete environment entry.");let l=e.args[a+1],u=l.indexOf("="),f=u<1?"":l.slice(0,u),m=u<0?"":l.slice(u+1),p=f.toLowerCase();if(f===""||f.includes("\0")||m.includes("\0"))throw new Error("ASRT Windows invocation contained an invalid environment entry.");i.set(p,[f,m]),a+=1}return{executable:e.executable,prefixArgs:s,targetArgv:r,childEnvironment:Object.fromEntries(i.values())}}o(to,"splitAsrtWindowsInvocation");var{SandboxManager:Le,getSrtWinPath:XD,getWindowsSandboxUserStatus:Cu,installWindowsSandbox:JD,resolveSrtWin:Pu,uninstallWindowsSandbox:YD}=await import("@anthropic-ai/sandbox-runtime"),Mu=1024*1024,Ou=16*1024;var $u=_u(import.meta.url),QD=process.env.KODAX_BUNDLED==="true"?void 0:Tu($u.resolve("@anthropic-ai/sandbox-runtime")).href;var ZD=[".ssh",".aws",".azure",".gnupg",".kube",".docker",".kodax",".agents",".codex",".claude",".gemini",".direnv",".terraform.d",b.join(".cargo","credentials.toml"),b.join(".config","gcloud"),b.join(".config","gh"),b.join(".config","openai"),b.join(".config","anthropic"),".gitconfig",b.join(".config","git","config"),".terraformrc",b.join(".config","pypoetry","auth.toml"),".condarc",".bashrc",".bash_profile",".zshrc",".zprofile",".profile",b.join(".config","fish","config.fish"),b.join(".config","fish","fish_variables"),".bash_history",".zsh_history",b.join(".m2","settings.xml"),b.join(".m2","settings-security.xml"),b.join(".gradle","gradle.properties"),b.join(".nuget","NuGet","NuGet.Config"),b.join(".pip","pip.conf"),b.join(".config","pip","pip.conf"),b.join(".cache","huggingface","token"),b.join(".huggingface","token"),b.join(".config","rclone","rclone.conf"),b.join(".local","share","keyrings"),b.join("Library","Keychains"),b.join("AppData","Roaming","Microsoft","Protect"),b.join("AppData","Roaming","Microsoft","Credentials"),b.join("AppData","Roaming","Microsoft","Vault"),b.join("AppData","Local","Microsoft","Credentials"),b.join("AppData","Local","Microsoft","Protect"),b.join("AppData","Local","Microsoft","Vault"),".password-store",".env",".envrc",".pgpass",".env.local",".env.development",".env.production",".env.test",".env.staging",".npmrc",".pypirc",".netrc",".git-credentials","credentials","credentials.json","application_default_credentials.json","id_rsa","id_dsa","id_ecdsa","id_ed25519"];var Nu=JSON.stringify(nt),oo=JSON.stringify(tt),Du=String.raw`
1316
+ `;var to=10;function no(e){let t=e.args.flatMap((a,c)=>a==="--"?[c]:[]);if(t.length===0)throw new Error("ASRT Windows invocation omitted its target separator.");if(t.length!==1)throw new Error("ASRT Windows invocation must contain exactly one target separator.");let n=t[0],r=e.args.slice(n+1);if(r.length===0||r[0]==="")throw new Error("ASRT Windows invocation omitted its target executable.");let i=new Map,s=[];for(let a=0;a<=n;a+=1){let c=e.args[a],d=c.toLowerCase();if(d.startsWith("--env="))throw new Error("ASRT Windows invocation used an unsupported inline environment entry.");if(d!=="--env"){s.push(c);continue}if(a+1>=n)throw new Error("ASRT Windows invocation contained an incomplete environment entry.");let l=e.args[a+1],u=l.indexOf("="),f=u<1?"":l.slice(0,u),m=u<0?"":l.slice(u+1),p=f.toLowerCase();if(f===""||f.includes("\0")||m.includes("\0"))throw new Error("ASRT Windows invocation contained an invalid environment entry.");i.set(p,[f,m]),a+=1}return{executable:e.executable,prefixArgs:s,targetArgv:r,childEnvironment:Object.fromEntries(i.values())}}o(no,"splitAsrtWindowsInvocation");var{SandboxManager:je,getSrtWinPath:TL,getWindowsSandboxUserStatus:Nu,installWindowsSandbox:CL,resolveSrtWin:Du,uninstallWindowsSandbox:PL}=await import("@anthropic-ai/sandbox-runtime"),Lu=1024*1024,ju=16*1024;var Fu=Ou(import.meta.url),ML=process.env.KODAX_BUNDLED==="true"?void 0:$u(Fu.resolve("@anthropic-ai/sandbox-runtime")).href;var OL=[".ssh",".aws",".azure",".gnupg",".kube",".docker",".kodax",".agents",".codex",".claude",".gemini",".direnv",".terraform.d",b.join(".cargo","credentials.toml"),b.join(".config","gcloud"),b.join(".config","gh"),b.join(".config","openai"),b.join(".config","anthropic"),".gitconfig",b.join(".config","git","config"),".terraformrc",b.join(".config","pypoetry","auth.toml"),".condarc",".bashrc",".bash_profile",".zshrc",".zprofile",".profile",b.join(".config","fish","config.fish"),b.join(".config","fish","fish_variables"),".bash_history",".zsh_history",b.join(".m2","settings.xml"),b.join(".m2","settings-security.xml"),b.join(".gradle","gradle.properties"),b.join(".nuget","NuGet","NuGet.Config"),b.join(".pip","pip.conf"),b.join(".config","pip","pip.conf"),b.join(".cache","huggingface","token"),b.join(".huggingface","token"),b.join(".config","rclone","rclone.conf"),b.join(".local","share","keyrings"),b.join("Library","Keychains"),b.join("AppData","Roaming","Microsoft","Protect"),b.join("AppData","Roaming","Microsoft","Credentials"),b.join("AppData","Roaming","Microsoft","Vault"),b.join("AppData","Local","Microsoft","Credentials"),b.join("AppData","Local","Microsoft","Protect"),b.join("AppData","Local","Microsoft","Vault"),".password-store",".env",".envrc",".pgpass",".env.local",".env.development",".env.production",".env.test",".env.staging",".npmrc",".pypirc",".netrc",".git-credentials","credentials","credentials.json","application_default_credentials.json","id_rsa","id_dsa","id_ecdsa","id_ed25519"];var Wu=JSON.stringify(rt),io=JSON.stringify(nt),Bu=String.raw`
1317
1317
  const { spawn } = require('node:child_process');
1318
1318
  const { writeSync } = require('node:fs');
1319
1319
  const input = JSON.parse(Buffer.from(process.argv[2], 'base64').toString('utf8'));
@@ -1344,7 +1344,7 @@ child.once('error', (error) => {
1344
1344
  child.once('exit', (code, signal) => {
1345
1345
  process.exitCode = signal ? 1 : code ?? 1;
1346
1346
  });
1347
- `,Lu="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",ju=JSON.stringify(Lu),Fu=Buffer.from(Du,"utf8").toString("base64"),Wu=JSON.stringify(Fu),Bu=Zr(),eL=String.raw`
1347
+ `,Uu="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",Ku=JSON.stringify(Uu),qu=Buffer.from(Bu,"utf8").toString("base64"),Hu=JSON.stringify(qu),zu=eo(),$L=String.raw`
1348
1348
  const { spawn } = require('node:child_process');
1349
1349
  const { createWriteStream } = require('node:fs');
1350
1350
  const { readFile, rm } = require('node:fs/promises');
@@ -1377,7 +1377,7 @@ input.once('line', async (gate) => {
1377
1377
  });
1378
1378
  child.once('close', (code) => { process.exitCode = Number.isInteger(code) ? code : 1; });
1379
1379
  });
1380
- `,tL=String.raw`
1380
+ `,NL=String.raw`
1381
1381
  import { spawn } from 'node:child_process';
1382
1382
  import { randomUUID } from 'node:crypto';
1383
1383
  import { realpathSync, statSync, writeSync } from 'node:fs';
@@ -1388,7 +1388,7 @@ const request = await new Promise((resolve, reject) => {
1388
1388
  let bytes = 0;
1389
1389
  process.stdin.on('data', (chunk) => {
1390
1390
  bytes += chunk.byteLength;
1391
- if (bytes > ${Mu}) {
1391
+ if (bytes > ${Lu}) {
1392
1392
  reject(new Error('Sandbox broker request exceeded its byte limit.'));
1393
1393
  process.stdin.destroy();
1394
1394
  return;
@@ -1412,7 +1412,7 @@ const callback = request.allowAllNetwork === true
1412
1412
  : request.endpoints.length === 0
1413
1413
  ? undefined
1414
1414
  : async ({ host, port }) => endpoints.has(host.toLowerCase() + ':' + port);
1415
- ${Bu}
1415
+ ${zu}
1416
1416
  const withWindowsChildEnvironment = (argv, environment, gitTrustRoots) => {
1417
1417
  const separator = argv.lastIndexOf('--');
1418
1418
  if (separator < 0) throw new Error('ASRT Windows wrapper omitted its child separator.');
@@ -1464,7 +1464,7 @@ const writeObservation = (observation) => {
1464
1464
  invocationId: request.controlInvocationId,
1465
1465
  observation,
1466
1466
  }) + '\n', 'utf8');
1467
- if (payload.byteLength > ${Ou}) {
1467
+ if (payload.byteLength > ${ju}) {
1468
1468
  throw new Error('Sandbox broker control frame exceeded its byte limit.');
1469
1469
  }
1470
1470
  if (writeSync(3, payload) !== payload.byteLength) {
@@ -1594,13 +1594,13 @@ try {
1594
1594
  : "'" + value.replaceAll("'", "'\"'\"'") + "'";
1595
1595
  const internalElectronNode = request.command === process.execPath && process.versions.electron !== undefined;
1596
1596
  const childArgs = internalElectronNode
1597
- ? ['--import', ${Nu}, ...request.args]
1597
+ ? ['--import', ${Wu}, ...request.args]
1598
1598
  : request.args;
1599
1599
  const command = [
1600
1600
  quote(bootstrap),
1601
1601
  '-e',
1602
- quote(${ju}),
1603
- ${Wu},
1602
+ quote(${Ku}),
1603
+ ${Hu},
1604
1604
  Buffer.from(JSON.stringify({
1605
1605
  command: request.command,
1606
1606
  args: childArgs,
@@ -1613,7 +1613,7 @@ try {
1613
1613
  if (process.platform === 'win32') {
1614
1614
  const wrapped = await SandboxManager.wrapWithSandboxArgv(command, 'cmd', undefined, undefined, request.cwd);
1615
1615
  const requestedEnv = internalElectronNode || bootstrapIsElectronNode
1616
- ? { ...request.env, [${oo}]: '1' }
1616
+ ? { ...request.env, [${io}]: '1' }
1617
1617
  : request.env;
1618
1618
  const childArgv = withWindowsChildEnvironment(wrapped.argv, requestedEnv, windowsGitTrustRoots(request));
1619
1619
  child = spawn(childArgv[0], childArgv.slice(1), {
@@ -1626,7 +1626,7 @@ try {
1626
1626
  } else {
1627
1627
  const wrapped = await SandboxManager.wrapWithSandbox(command);
1628
1628
  const childEnv = internalElectronNode || bootstrapIsElectronNode
1629
- ? { ...request.env, [${oo}]: '1' }
1629
+ ? { ...request.env, [${io}]: '1' }
1630
1630
  : request.env;
1631
1631
  child = spawn(wrapped, {
1632
1632
  cwd: request.cwd,
@@ -1678,13 +1678,13 @@ try {
1678
1678
  process.stderr.write((error instanceof Error ? error.message : String(error)) + '\n');
1679
1679
  process.exitCode = targetStarted ? 125 : 1;
1680
1680
  }
1681
- `;function io(e){return e instanceof Error?e.message:String(e)}o(io,"errorText");var nL=1024*1024;function Uu(e){let t=[];return e.provisioned||t.push("Windows sandbox account does not exist."),e.sid||t.push("Windows sandbox account SID is unavailable."),(!e.groupExists||!e.groupSid)&&t.push("Windows sandbox local group is unavailable."),e.inBuiltinUsers||t.push("Windows sandbox account is not in the built-in Users group."),e.inSandboxGroup||t.push("Windows sandbox account is not in the sandbox-runtime-users group."),e.hiddenFromLogon||t.push("Windows sandbox account is not hidden from interactive logon."),e.credPresent||t.push("Windows sandbox account credential is unavailable."),t}o(Uu,"windowsSandboxAccountDiagnostics");var rL=String.raw`
1681
+ `;function so(e){return e instanceof Error?e.message:String(e)}o(so,"errorText");var DL=1024*1024;function Gu(e){let t=[];return e.provisioned||t.push("Windows sandbox account does not exist."),e.sid||t.push("Windows sandbox account SID is unavailable."),(!e.groupExists||!e.groupSid)&&t.push("Windows sandbox local group is unavailable."),e.inBuiltinUsers||t.push("Windows sandbox account is not in the built-in Users group."),e.inSandboxGroup||t.push("Windows sandbox account is not in the sandbox-runtime-users group."),e.hiddenFromLogon||t.push("Windows sandbox account is not hidden from interactive logon."),e.credPresent||t.push("Windows sandbox account credential is unavailable."),t}o(Gu,"windowsSandboxAccountDiagnostics");var LL=String.raw`
1682
1682
  $ErrorActionPreference = 'Stop'
1683
1683
  $process = Start-Process -FilePath $env:KODAX_NATIVE_SETUP_EXE -ArgumentList @('__setup-account-capabilities', $env:KODAX_NATIVE_SETUP_ENVELOPE) -Verb RunAs -PassThru -WindowStyle Hidden
1684
1684
  $process.WaitForExit()
1685
1685
  $exitCode = $process.ExitCode
1686
1686
  $process.Dispose()
1687
1687
  exit $exitCode
1688
- `;function Ku(){let e=["PATH","Path","PATHEXT","SystemRoot","COMSPEC","TEMP","TMP","HOME","USERPROFILE","LOCALAPPDATA","LANG"],t={NO_COLOR:"1"};for(let n of e)process.env[n]!==void 0&&(t[n]=process.env[n]);for(let[n,r]of Object.entries(process.env))n.startsWith("LC_")&&r!==void 0&&(t[n]=r);return qu(t)}o(Ku,"sanitizedEnvironment");function qu(e){if(process.platform!=="win32")return{...e};let t=new Map;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n.toLowerCase(),[n,r]);return Object.fromEntries(t.values())}o(qu,"normalizedSandboxEnvironment");function so(e){Au(3,`${JSON.stringify(e)}
1689
- `)}o(so,"writeWindowsNetworkBrokerReady");async function Hu(e){let t=Iu(e,["__controller",String(process.pid)],{env:Ku(),shell:!1,stdio:["pipe","pipe","pipe"],windowsHide:!0}),n=Buffer.alloc(0);t.stderr?.on("data",d=>{n=Buffer.concat([n,d]).subarray(-16*1024)});let r,i="",s,a=new Promise(d=>{s=d}),c={child:t,get pipe(){return i},exit:a,stderrTail:o(()=>n.toString("utf8"),"stderrTail"),stopping:!1};t.once("error",d=>{r=d}),t.once("close",(d,l)=>{let u={code:d,signal:l,...r===void 0?{}:{error:r}};c.outcome=u,s(u)});try{let d=t.stdout;if(d===null)throw new Error("Windows native controller stdout pipe was not created.");i=await new Promise((u,f)=>{let m=!1,p=Buffer.alloc(0),h=o(v=>{m||(m=!0,clearTimeout(y),d.off("data",g),t.off("error",k),t.off("exit",w),v())},"finish"),k=o(v=>h(()=>f(v)),"onError"),w=o(v=>h(()=>f(new Error(`Windows native controller exited ${String(v)} before readiness: ${c.stderrTail()}`))),"onExit"),g=o(v=>{if(p=Buffer.concat([p,v]),p.length>4096){h(()=>f(new Error("Windows native controller readiness exceeded 4 KiB.")));return}let ee=p.indexOf(10);ee>=0&&h(()=>u(p.subarray(0,ee).toString("utf8").trim()))},"onData"),y=setTimeout(()=>h(()=>f(new Error("Windows native controller readiness timed out."))),1e4);y.unref(),d.on("data",g),t.once("error",k),t.once("exit",w)});let l=/^\\\\\.\\pipe\\kodax-v2-(\d+)-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.exec(i);if(l===null||t.pid===void 0||Number(l[1])!==t.pid)throw new Error("Windows native controller returned an unauthenticated pipe name.");return c}catch(d){try{await ao(c)}catch(l){throw new AggregateError([d,l],"Windows native controller startup and cleanup both failed.")}throw d}}o(Hu,"startWindowsNativeController");async function ao(e){e.stopping=!0;let t=e.child.stdin;t!==null&&!t.destroyed&&await new Promise(r=>{let i=o(()=>r(),"finish");t.once("error",i),t.end(i)});let n=await Promise.race([e.exit.then(r=>({graceful:!0,outcome:r})),new Promise(r=>{setTimeout(()=>r(!1),5e3).unref()})]);if(n===!1)throw e.child.kill("SIGKILL"),await e.exit,new Error("Windows native controller did not exit within its cleanup budget.");if(n.outcome.error!==void 0||n.outcome.code!==0||n.outcome.signal!==null)throw new Error(`Windows native controller cleanup failed (code ${String(n.outcome.code)}, signal ${String(n.outcome.signal)}): ${e.stderrTail().trim()}`,n.outcome.error===void 0?void 0:{cause:n.outcome.error})}o(ao,"stopWindowsNativeController");async function co(e){let t,n,r=!1,i=[];try{let s=JSON.parse(await Tt(e,"utf8"));if(await ro(e,{force:!0}),s.version!==1||!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(s.setupGenerationNonce)||s.config.filesystem.disabled!==!0||!b.isAbsolute(s.cwd)||!b.isAbsolute(s.srtWinPath)||!/^[0-9a-f]{64}$/i.test(s.srtWinSha256)||!b.isAbsolute(s.controllerExecutable)||!/^[0-9a-f]{64}$/i.test(s.controllerSha256)||s.controllerProtocol!==eo||!/^S-\d+(?:-\d+)+$/i.test(s.expectedSandboxUserSid)||!/^S-\d+(?:-\d+)+$/i.test(s.expectedSandboxGroupSid))throw new Error("Windows network broker request is invalid or enables filesystem authority.");let a=await Tt(s.srtWinPath);if(no("sha256").update(a).digest("hex")!==s.srtWinSha256.toLowerCase())throw new Error("ASRT Windows runner artifact changed before broker startup.");let c=await Tt(s.controllerExecutable);if(no("sha256").update(c).digest("hex")!==s.controllerSha256.toLowerCase())throw new Error("Windows native controller artifact changed before broker startup.");let d=new Set(s.endpoints.map(w=>`${w.host.toLowerCase()}:${w.port}`)),l=s.allowAllNetwork?async()=>!0:d.size===0?void 0:async({host:w,port:g})=>g!==void 0&&d.has(`${w.toLowerCase()}:${g}`);await Le.initialize(s.config,l);let u=`KODAX_WINDOWS_V2_${Ru()}`,f=await Le.wrapWithSandboxArgv(`echo ${u}`,"cmd",void 0,void 0,s.cwd);if(f.argv.length<2||!f.argv.some(w=>w.includes(u)))throw new Error("ASRT Windows wrapper did not preserve the controlled target sentinel.");let m=to({executable:f.argv[0],args:f.argv.slice(1)}),p=Cu({srtWin:Pu({path:s.srtWinPath})});if(!p.sid||!p.groupSid||Uu(p).length>0)throw new Error("Windows sandbox account is not ready for native shell execution.");if(p.sid.toUpperCase()!==s.expectedSandboxUserSid.toUpperCase()||p.groupSid.toUpperCase()!==s.expectedSandboxGroupSid.toUpperCase())throw new Error("Windows sandbox account changed while the network broker was starting.");t=await Hu(s.controllerExecutable),so({version:1,ok:!0,asrtExecutable:m.executable,asrtPrefixArgs:m.prefixArgs,asrtChildEnvironment:m.childEnvironment,sandboxUserSid:p.sid,sandboxGroupSid:p.groupSid,controllerPipe:t.pipe}),r=!0;let h=new Promise(w=>{let g=!1,y=o(()=>{g||(g=!0,process.stdin.off("end",y),process.stdin.off("close",y),process.off("SIGINT",y),process.off("SIGTERM",y),process.stdin.pause(),w())},"finish");n=y,process.stdin.once("end",y),process.stdin.once("close",y),process.once("SIGINT",y),process.once("SIGTERM",y),process.stdin.readableEnded||process.stdin.destroyed?y():process.stdin.resume()}),k=t.exit.then(w=>{if(!t?.stopping)throw new Error(`Windows native controller exited while its broker was active (code ${String(w.code)}, signal ${String(w.signal)}): `+t.stderrTail().trim(),w.error===void 0?void 0:{cause:w.error})});if(await Promise.race([h,k]),t.outcome!==void 0&&!t.stopping)throw new Error("Windows native controller exited before broker shutdown completed.")}catch(s){if(!r)try{so({version:1,ok:!1,error:io(s)}),r=!0}catch(a){i.push(a)}i.push(s)}finally{if(n?.(),t!==void 0)try{await ao(t)}catch(s){i.push(s)}try{Le.cleanupAfterCommand()}catch(s){i.push(s)}try{await Le.reset()}catch(s){i.push(s)}try{await ro(e,{force:!0})}catch(s){i.push(s)}}return i.length>0?(process.stderr.write(`Windows network broker failed: ${i.map(io).join(" | ")}
1690
- `),1):0}o(co,"runAsrtWindowsNetworkBrokerProcess");var lo=process.argv[2];if(!lo)throw new Error("Missing Windows ASRT network broker request file.");process.exitCode=await co(lo);
1688
+ `;function Vu(){let e=["PATH","Path","PATHEXT","SystemRoot","COMSPEC","TEMP","TMP","HOME","USERPROFILE","LOCALAPPDATA","LANG"],t={NO_COLOR:"1"};for(let n of e)process.env[n]!==void 0&&(t[n]=process.env[n]);for(let[n,r]of Object.entries(process.env))n.startsWith("LC_")&&r!==void 0&&(t[n]=r);return Xu(t)}o(Vu,"sanitizedEnvironment");function Xu(e){if(process.platform!=="win32")return{...e};let t=new Map;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n.toLowerCase(),[n,r]);return Object.fromEntries(t.values())}o(Xu,"normalizedSandboxEnvironment");function ao(e){Mu(3,`${JSON.stringify(e)}
1689
+ `)}o(ao,"writeWindowsNetworkBrokerReady");async function Ju(e){let t=Cu(e,["__controller",String(process.pid)],{env:Vu(),shell:!1,stdio:["pipe","pipe","pipe"],windowsHide:!0}),n=Buffer.alloc(0);t.stderr?.on("data",d=>{n=Buffer.concat([n,d]).subarray(-16*1024)});let r,i="",s,a=new Promise(d=>{s=d}),c={child:t,get pipe(){return i},exit:a,stderrTail:o(()=>n.toString("utf8"),"stderrTail"),stopping:!1};t.once("error",d=>{r=d}),t.once("close",(d,l)=>{let u={code:d,signal:l,...r===void 0?{}:{error:r}};c.outcome=u,s(u)});try{let d=t.stdout;if(d===null)throw new Error("Windows native controller stdout pipe was not created.");i=await new Promise((u,f)=>{let m=!1,p=Buffer.alloc(0),h=o(v=>{m||(m=!0,clearTimeout(y),d.off("data",g),t.off("error",k),t.off("exit",w),v())},"finish"),k=o(v=>h(()=>f(v)),"onError"),w=o(v=>h(()=>f(new Error(`Windows native controller exited ${String(v)} before readiness: ${c.stderrTail()}`))),"onExit"),g=o(v=>{if(p=Buffer.concat([p,v]),p.length>4096){h(()=>f(new Error("Windows native controller readiness exceeded 4 KiB.")));return}let te=p.indexOf(10);te>=0&&h(()=>u(p.subarray(0,te).toString("utf8").trim()))},"onData"),y=setTimeout(()=>h(()=>f(new Error("Windows native controller readiness timed out."))),1e4);y.unref(),d.on("data",g),t.once("error",k),t.once("exit",w)});let l=/^\\\\\.\\pipe\\kodax-v2-(\d+)-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.exec(i);if(l===null||t.pid===void 0||Number(l[1])!==t.pid)throw new Error("Windows native controller returned an unauthenticated pipe name.");return c}catch(d){try{await co(c)}catch(l){throw new AggregateError([d,l],"Windows native controller startup and cleanup both failed.")}throw d}}o(Ju,"startWindowsNativeController");async function co(e){e.stopping=!0;let t=e.child.stdin;t!==null&&!t.destroyed&&await new Promise(r=>{let i=o(()=>r(),"finish");t.once("error",i),t.end(i)});let n=await Promise.race([e.exit.then(r=>({graceful:!0,outcome:r})),new Promise(r=>{setTimeout(()=>r(!1),5e3).unref()})]);if(n===!1)throw e.child.kill("SIGKILL"),await e.exit,new Error("Windows native controller did not exit within its cleanup budget.");if(n.outcome.error!==void 0||n.outcome.code!==0||n.outcome.signal!==null)throw new Error(`Windows native controller cleanup failed (code ${String(n.outcome.code)}, signal ${String(n.outcome.signal)}): ${e.stderrTail().trim()}`,n.outcome.error===void 0?void 0:{cause:n.outcome.error})}o(co,"stopWindowsNativeController");async function lo(e){let t,n,r=!1,i=[];try{let s=JSON.parse(await Ct(e,"utf8"));if(await oo(e,{force:!0}),s.version!==1||!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(s.setupGenerationNonce)||s.config.filesystem.disabled!==!0||!b.isAbsolute(s.cwd)||!b.isAbsolute(s.srtWinPath)||!/^[0-9a-f]{64}$/i.test(s.srtWinSha256)||!b.isAbsolute(s.controllerExecutable)||!/^[0-9a-f]{64}$/i.test(s.controllerSha256)||s.controllerProtocol!==to||!/^S-\d+(?:-\d+)+$/i.test(s.expectedSandboxUserSid)||!/^S-\d+(?:-\d+)+$/i.test(s.expectedSandboxGroupSid))throw new Error("Windows network broker request is invalid or enables filesystem authority.");let a=await Ct(s.srtWinPath);if(ro("sha256").update(a).digest("hex")!==s.srtWinSha256.toLowerCase())throw new Error("ASRT Windows runner artifact changed before broker startup.");let c=await Ct(s.controllerExecutable);if(ro("sha256").update(c).digest("hex")!==s.controllerSha256.toLowerCase())throw new Error("Windows native controller artifact changed before broker startup.");let d=new Set(s.endpoints.map(w=>`${w.host.toLowerCase()}:${w.port}`)),l=s.allowAllNetwork?async()=>!0:d.size===0?void 0:async({host:w,port:g})=>g!==void 0&&d.has(`${w.toLowerCase()}:${g}`);await je.initialize(s.config,l);let u=`KODAX_WINDOWS_V2_${Pu()}`,f=await je.wrapWithSandboxArgv(`echo ${u}`,"cmd",void 0,void 0,s.cwd);if(f.argv.length<2||!f.argv.some(w=>w.includes(u)))throw new Error("ASRT Windows wrapper did not preserve the controlled target sentinel.");let m=no({executable:f.argv[0],args:f.argv.slice(1)}),p=Nu({srtWin:Du({path:s.srtWinPath})});if(!p.sid||!p.groupSid||Gu(p).length>0)throw new Error("Windows sandbox account is not ready for native shell execution.");if(p.sid.toUpperCase()!==s.expectedSandboxUserSid.toUpperCase()||p.groupSid.toUpperCase()!==s.expectedSandboxGroupSid.toUpperCase())throw new Error("Windows sandbox account changed while the network broker was starting.");t=await Ju(s.controllerExecutable),ao({version:1,ok:!0,asrtExecutable:m.executable,asrtPrefixArgs:m.prefixArgs,asrtChildEnvironment:m.childEnvironment,sandboxUserSid:p.sid,sandboxGroupSid:p.groupSid,controllerPipe:t.pipe}),r=!0;let h=new Promise(w=>{let g=!1,y=o(()=>{g||(g=!0,process.stdin.off("end",y),process.stdin.off("close",y),process.off("SIGINT",y),process.off("SIGTERM",y),process.stdin.pause(),w())},"finish");n=y,process.stdin.once("end",y),process.stdin.once("close",y),process.once("SIGINT",y),process.once("SIGTERM",y),process.stdin.readableEnded||process.stdin.destroyed?y():process.stdin.resume()}),k=t.exit.then(w=>{if(!t?.stopping)throw new Error(`Windows native controller exited while its broker was active (code ${String(w.code)}, signal ${String(w.signal)}): `+t.stderrTail().trim(),w.error===void 0?void 0:{cause:w.error})});if(await Promise.race([h,k]),t.outcome!==void 0&&!t.stopping)throw new Error("Windows native controller exited before broker shutdown completed.")}catch(s){if(!r)try{ao({version:1,ok:!1,error:so(s)}),r=!0}catch(a){i.push(a)}i.push(s)}finally{if(n?.(),t!==void 0)try{await co(t)}catch(s){i.push(s)}try{je.cleanupAfterCommand()}catch(s){i.push(s)}try{await je.reset()}catch(s){i.push(s)}try{await oo(e,{force:!0})}catch(s){i.push(s)}}return i.length>0?(process.stderr.write(`Windows network broker failed: ${i.map(so).join(" | ")}
1690
+ `),1):0}o(lo,"runAsrtWindowsNetworkBrokerProcess");var uo=process.argv[2];if(!uo)throw new Error("Missing Windows ASRT network broker request file.");process.exitCode=await lo(uo);