@kodax-ai/kodax 0.7.78 → 0.7.79

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 (124) hide show
  1. package/CHANGELOG.md +3475 -3197
  2. package/README.md +346 -275
  3. package/README_CN.md +274 -214
  4. package/config-templates/config.example.jsonc +11 -1
  5. package/config-templates/integrations/a2a.example.jsonc +23 -7
  6. package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +2 -1
  7. package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +1 -0
  8. package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +4 -3
  9. package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +1 -0
  10. package/dist/builtin/skill-creator/scripts/compare-runs.js +4 -3
  11. package/dist/builtin/skill-creator/scripts/generate-review.js +2 -1
  12. package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +1 -0
  13. package/dist/builtin/skill-creator/scripts/grade-evals.js +4 -3
  14. package/dist/builtin/skill-creator/scripts/improve-description.js +2 -1
  15. package/dist/builtin/skill-creator/scripts/init-skill.d.ts +1 -0
  16. package/dist/builtin/skill-creator/scripts/init-skill.js +4 -3
  17. package/dist/builtin/skill-creator/scripts/install-skill.d.ts +1 -0
  18. package/dist/builtin/skill-creator/scripts/install-skill.js +4 -3
  19. package/dist/builtin/skill-creator/scripts/package-skill.d.ts +1 -0
  20. package/dist/builtin/skill-creator/scripts/package-skill.js +4 -3
  21. package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +1 -0
  22. package/dist/builtin/skill-creator/scripts/quick-validate.js +4 -3
  23. package/dist/builtin/skill-creator/scripts/run-eval.d.ts +1 -0
  24. package/dist/builtin/skill-creator/scripts/run-eval.js +4 -3
  25. package/dist/builtin/skill-creator/scripts/run-loop.js +2 -1
  26. package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +2 -1
  27. package/dist/builtin/skill-creator/scripts/utils.d.ts +3 -0
  28. package/dist/builtin/skill-creator/scripts/utils.js +5 -1
  29. package/dist/chunks/{agent-ASP4MS3X.js → agent-V4AC5JZD.js} +1 -1
  30. package/dist/chunks/argument-completer-ZPC2MLES.js +2 -0
  31. package/dist/chunks/{chunk-Z3KFRTSB.js → chunk-67THZRM6.js} +1 -1
  32. package/dist/chunks/chunk-6GVQDQTQ.js +292 -0
  33. package/dist/chunks/{chunk-TQDBTTIM.js → chunk-B6UY3VHV.js} +40 -40
  34. package/dist/chunks/{chunk-7OEBJGHK.js → chunk-BBOVVDQJ.js} +1 -1
  35. package/dist/chunks/chunk-CR2IF7VF.js +30 -0
  36. package/dist/chunks/{chunk-UID7BLAB.js → chunk-CXHEZY5G.js} +1 -1
  37. package/dist/chunks/chunk-EDZ4QILG.js +266 -0
  38. package/dist/chunks/chunk-GEECPO2H.js +218 -0
  39. package/dist/chunks/chunk-H5LLM7DB.js +89 -0
  40. package/dist/chunks/chunk-KLWP7POA.js +467 -0
  41. package/dist/chunks/{chunk-2CFHBKRE.js → chunk-M4N2JZTZ.js} +2 -2
  42. package/dist/chunks/{chunk-YAZQTC2L.js → chunk-OWQT3FTE.js} +1 -1
  43. package/dist/chunks/chunk-Q4M7DJOD.js +319 -0
  44. package/dist/chunks/{chunk-6FOJVETH.js → chunk-QCZLCLFL.js} +7 -7
  45. package/dist/chunks/chunk-RQPMGRTR.js +810 -0
  46. package/dist/chunks/chunk-SG6P4SZS.js +123 -0
  47. package/dist/chunks/chunk-TSTVAU5E.js +386 -0
  48. package/dist/chunks/chunk-ZCZZUE5E.js +662 -0
  49. package/dist/chunks/compaction-config-AEUGVROL.js +2 -0
  50. package/dist/chunks/{construction-bootstrap-VQLQGWPY.js → construction-bootstrap-K3ZGEN5N.js} +1 -1
  51. package/dist/chunks/dist-GFJFRPAV.js +2 -0
  52. package/dist/chunks/{dist-BFT5YIGU.js → dist-JMO47GJV.js} +1 -1
  53. package/dist/chunks/host-23K2Q6RZ.js +2 -0
  54. package/dist/chunks/run-manager-PGIR6ITA.js +2 -0
  55. package/dist/chunks/{utils-SID4HW2Q.js → utils-6LEKJPQN.js} +1 -1
  56. package/dist/index.d.ts +20 -20
  57. package/dist/index.js +2 -2
  58. package/dist/kodax_bootstrap.js +2 -1
  59. package/dist/kodax_cli.js +1816 -1458
  60. package/dist/kodax_resume.js +570 -34
  61. package/dist/provider-capabilities.json +85 -50
  62. package/dist/runtime-worker.js +1713 -1361
  63. package/dist/sandbox-workspace-session.js +285 -19
  64. package/dist/sdk-a2a.d.ts +19 -13
  65. package/dist/sdk-a2a.js +8 -8
  66. package/dist/sdk-agent.d.ts +73 -141
  67. package/dist/sdk-agent.js +1 -1
  68. package/dist/sdk-coding.d.ts +29 -60
  69. package/dist/sdk-coding.js +1 -1
  70. package/dist/sdk-experimental-memory.d.ts +3 -3
  71. package/dist/sdk-experimental-memory.js +1 -1
  72. package/dist/sdk-llm.d.ts +7 -7
  73. package/dist/sdk-llm.js +1 -1
  74. package/dist/sdk-mcp.d.ts +1 -1
  75. package/dist/sdk-mcp.js +1 -1
  76. package/dist/sdk-media.d.ts +1 -1
  77. package/dist/sdk-media.js +1 -1
  78. package/dist/sdk-repl.d.ts +25 -26
  79. package/dist/sdk-repl.js +2 -2
  80. package/dist/sdk-runtime.d.ts +227 -31
  81. package/dist/sdk-runtime.js +1 -1
  82. package/dist/sdk-sandbox.js +1 -1
  83. package/dist/sdk-session.d.ts +8 -8
  84. package/dist/sdk-session.js +1 -1
  85. package/dist/sdk-skills.js +1 -1
  86. package/dist/semantic-worker.js +283 -18
  87. package/dist/types-chunks/{base.d-4e74xDdy.d.ts → base.d-DxG0m09Z.d.ts} +1 -1
  88. package/dist/types-chunks/{bash-prefix-extractor.d-uAe2Oqda.d.ts → bash-prefix-extractor.d-CNSidpmv.d.ts} +28 -7
  89. package/dist/types-chunks/{capability-learning.d-CVsdHw4j.d.ts → capability-learning.d-iPSiAmc_.d.ts} +1 -1
  90. package/dist/types-chunks/{capsule.d-BlSv9l3V.d.ts → capsule.d-B3q98pLQ.d.ts} +9 -7
  91. package/dist/types-chunks/{types.d-BA-Jwpfs.d.ts → controller.d-RGV7Pjv9.d.ts} +328 -3
  92. package/dist/types-chunks/{guardrail.d-CXDYRgZ3.d.ts → guardrail.d-1NLSFTyN.d.ts} +126 -52
  93. package/dist/types-chunks/{history-retrieval.d-DtCy7x64.d.ts → history-retrieval.d-BAegI14A.d.ts} +16 -3
  94. package/dist/types-chunks/{oauth-login.d-Bgb4rdLN.d.ts → oauth-login.d-6i-vidxv.d.ts} +6 -2
  95. package/dist/types-chunks/{public-api.d-B3AohsxN.d.ts → public-api.d-BpJhHoa7.d.ts} +334 -25
  96. package/dist/types-chunks/{repl.d-Ie_ZXb_U.d.ts → repl.d-CZ12Ow3X.d.ts} +5 -5
  97. package/dist/types-chunks/{resolver.d-iAQ9ocLB.d.ts → resolver.d-C9IW4fmU.d.ts} +5 -2
  98. package/dist/types-chunks/{run-manager.d-D1twIhF9.d.ts → run-manager.d-CX3AUocA.d.ts} +1 -1
  99. package/dist/types-chunks/{sdk-session-DB9KksIx.d.ts → sdk-session-B3cfJKqF.d.ts} +3 -3
  100. package/dist/types-chunks/{side-query.d-DTuLPcC5.d.ts → side-query.d-CP1LiRiH.d.ts} +8 -2
  101. package/dist/types-chunks/{types-D3g6XUQr.d.ts → types-Bf3Y3mW-.d.ts} +1 -1
  102. package/dist/types-chunks/{types.d-BH0ZkTGf.d.ts → types.d-BZ9oXvTV.d.ts} +2 -2
  103. package/dist/types-chunks/{types.d-DVDTIfB_.d.ts → types.d-C0_rn--1.d.ts} +4 -4
  104. package/dist/types-chunks/{types.d-DIpZJKUl.d.ts → types.d-CgrXrFrq.d.ts} +16 -2
  105. package/dist/types-chunks/{utils.d-CVp6bFl9.d.ts → utils.d-CGpHavsU.d.ts} +14 -6
  106. package/docs/SDK_EMBEDDER_GUIDE.md +1144 -598
  107. package/package.json +4 -1
  108. package/dist/chunks/argument-completer-JYQ7FX3W.js +0 -2
  109. package/dist/chunks/chunk-35PPHOQ2.js +0 -292
  110. package/dist/chunks/chunk-43QNNDHR.js +0 -29
  111. package/dist/chunks/chunk-5GO6FH7L.js +0 -458
  112. package/dist/chunks/chunk-5NDCSFOP.js +0 -78
  113. package/dist/chunks/chunk-6XM4B6K2.js +0 -48
  114. package/dist/chunks/chunk-6YZUE6NC.js +0 -240
  115. package/dist/chunks/chunk-KQLQYHWU.js +0 -386
  116. package/dist/chunks/chunk-NXO6GWSY.js +0 -46
  117. package/dist/chunks/chunk-T2XZTLYE.js +0 -316
  118. package/dist/chunks/chunk-VAT2QYXM.js +0 -765
  119. package/dist/chunks/chunk-YVRYHC4C.js +0 -655
  120. package/dist/chunks/compaction-config-BQSSIWK5.js +0 -2
  121. package/dist/chunks/dist-PCFE24YP.js +0 -2
  122. package/dist/chunks/host-UTFXCYYM.js +0 -2
  123. package/dist/chunks/run-manager-PJU3WIFJ.js +0 -2
  124. package/dist/types-chunks/guardrail.d-BRE_ErEj.d.ts +0 -156
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- var dn=Object.defineProperty;var t=(e,n)=>dn(e,"name",{value:n,configurable:!0});import{randomUUID as Xs}from"node:crypto";import{constants as wT,readdirSync as vT,statSync as bT,writeSync as Bs}from"node:fs";import{copyFile as ST,lstat as ET,mkdir as xT,readFile as Us,realpath as RT,rm as qs,stat as IT,writeFile as CT}from"node:fs/promises";import{createRequire as Ws}from"node:module";import tn from"node:path";import zs from"node:readline";import{fileURLToPath as MT,pathToFileURL as Hs}from"node:url";import{SandboxManager as P,getWindowsSandboxUserStatus as $T,installWindowsSandbox as NT,verifyWindowsWfpEgress as LT}from"@anthropic-ai/sandbox-runtime";import{getEncoding as oa}from"js-tiktoken";import{AsyncLocalStorage as ln}from"node:async_hooks";var la=new ln;import{AsyncLocalStorage as un}from"node:async_hooks";var Ca=new un;var M={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Ie={...M,multimodalSupport:"image-input"},F={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},Ce={...F,multimodalSupport:"image-input"};import ic from"@anthropic-ai/sdk";import{parse as Wa}from"partial-json";import kc from"openai";import{ClientSideConnection as Dc,PROTOCOL_VERSION as jc,ndJsonStream as Kc}from"@agentclientprotocol/sdk";var Oc=String.raw`
2
+ var Br=Object.defineProperty;var o=(e,t)=>Br(e,"name",{value:t,configurable:!0});import{createHash as CM,randomUUID as vl}from"node:crypto";import{constants as PM,readdirSync as MM,statSync as OM,writeSync as bl}from"node:fs";import{copyFile as DM,lstat as NM,mkdir as LM,readFile as kl,realpath as jM,rename as FM,rm as Sl,stat as KM,writeFile as XM}from"node:fs/promises";import{createRequire as xl}from"node:module";import y from"node:path";import El from"node:readline";import{fileURLToPath as zM,pathToFileURL as Il}from"node:url";import{DEFAULT_WINDOWS_PROXY_PORT_RANGE as VM,SandboxManager as Q,getSrtWinPath as GM,getWindowsSandboxUserStatus as JM,grantWindowsAcl as YM,installWindowsSandbox as QM,resolveSrtWin as ZM,revokeWindowsAcl as eO}from"@anthropic-ai/sandbox-runtime";import{getEncoding as Nl}from"js-tiktoken";import{AsyncLocalStorage as Ur}from"node:async_hooks";var Wr=new Ur;function pe(e){let t=Wr.getStore()?.credential;return t?Z(e,t,new WeakMap):e}o(pe,"redactScopedProviderCredential");function Z(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){let s=new Error(Z(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=Z(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(Z(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]=Z(a.value,t,n)}return i}o(Z,"redactCredentialValue");import{AsyncLocalStorage as qr}from"node:async_hooks";var ou=new qr;var ee={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Et={...ee,multimodalSupport:"image-input"},me={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},It={...me,multimodalSupport:"image-input"};import Nu from"@anthropic-ai/sdk";import{parse as Su}from"partial-json";import Qu from"openai";import{ClientSideConnection as wf,PROTOCOL_VERSION as vf,ndJsonStream as bf}from"@agentclientprotocol/sdk";var uf=Object.freeze({status:"terminated"}),ff=Object.freeze({status:"already-exited"}),pf=Object.freeze({status:"unknown"}),mf=String.raw`
3
3
  using System;
4
4
  using System.Runtime.InteropServices;
5
5
  using System.Text;
@@ -24,9 +24,49 @@ public static class KodaXNativeProcessSnapshot {
24
24
  private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
25
25
  [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
26
26
  private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
27
+ [StructLayout(LayoutKind.Sequential)]
28
+ private struct FileTime {
29
+ public uint Low;
30
+ public uint High;
31
+ }
32
+ [DllImport("kernel32.dll", SetLastError = true)]
33
+ private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
34
+ [DllImport("kernel32.dll", SetLastError = true)]
35
+ private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
36
+ [DllImport("kernel32.dll", SetLastError = true)]
37
+ private static extern bool TerminateProcess(IntPtr process, uint exitCode);
38
+ [DllImport("kernel32.dll")]
39
+ private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
27
40
  [DllImport("kernel32.dll")]
28
41
  private static extern bool CloseHandle(IntPtr handle);
42
+ private static ulong ReadCreationTime(uint processId) {
43
+ var process = OpenProcess(0x1000, false, processId);
44
+ if (process == IntPtr.Zero) return 0;
45
+ try {
46
+ FileTime creation, exit, kernel, user;
47
+ if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
48
+ return ((ulong)creation.High << 32) | creation.Low;
49
+ } finally {
50
+ CloseHandle(process);
51
+ }
52
+ }
53
+ public static int TerminateExact(uint processId, ulong expectedCreationTime) {
54
+ var process = OpenProcess(0x1001, false, processId);
55
+ if (process == IntPtr.Zero) return 0;
56
+ try {
57
+ FileTime creation, exit, kernel, user;
58
+ if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
59
+ var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
60
+ if (actual != expectedCreationTime) return 2;
61
+ return TerminateProcess(process, 1) ? 1 : 0;
62
+ } finally {
63
+ CloseHandle(process);
64
+ }
65
+ }
29
66
  public static string ReadRows() {
67
+ FileTime cutoffTime;
68
+ GetSystemTimeAsFileTime(out cutoffTime);
69
+ var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
30
70
  var snapshot = CreateToolhelp32Snapshot(2, 0);
31
71
  if (snapshot == new IntPtr(-1)) return string.Empty;
32
72
  var rows = new StringBuilder();
@@ -35,7 +75,10 @@ public static class KodaXNativeProcessSnapshot {
35
75
  try {
36
76
  if (!Process32First(snapshot, ref entry)) return string.Empty;
37
77
  do {
38
- rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append('\n');
78
+ var creationTime = ReadCreationTime(entry.th32ProcessID) / 10000;
79
+ if (creationTime == 0 || creationTime <= cutoff) {
80
+ rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append(',').Append(creationTime).Append('\n');
81
+ }
39
82
  entry.dwSize = (uint)Marshal.SizeOf(entry);
40
83
  } while (Process32Next(snapshot, ref entry));
41
84
  return rows.ToString();
@@ -43,7 +86,8 @@ public static class KodaXNativeProcessSnapshot {
43
86
  CloseHandle(snapshot);
44
87
  }
45
88
  }
46
- }`;import $e from"node:fs";import Ne from"node:os";import Le from"node:path";var On="gpt-5.4",$n="auto-gemini-3",Nn=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Ln=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function De(e){let n=new Set,r=[];for(let o of e){let i=o.trim();if(!i)continue;let s=i.toLowerCase();n.has(s)||(n.add(s),r.push(i))}return r}t(De,"dedupePreserveOrder");function Dn(){let e=Le.join(Ne.homedir(),".codex","config.toml");try{return $e.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}t(Dn,"readCodexConfiguredModel");function jn(){let e=Le.join(Ne.homedir(),".gemini","settings.json");try{let n=JSON.parse($e.readFileSync(e,"utf8")),r=typeof n.model=="string"?n.model.trim():"";return r||(typeof n.general?.model=="string"?n.general.model.trim():"")||null}catch{return null}}t(jn,"readGeminiConfiguredModel");function C(){return Dn()||On}t(C,"getCodexCliDefaultModel");function T(){return jn()||$n}t(T,"getGeminiCliDefaultModel");function O(){return De([C(),...Nn])}t(O,"getCodexCliKnownModels");function $(){return De([T(),...Ln])}t($,"getGeminiCliKnownModels");var vd=T(),bd=$();var Md=C(),Od=O();import{existsSync as Gn,readFileSync as Jn}from"node:fs";import A from"node:path";import{fileURLToPath as Yn}from"node:url";var je=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Ke=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Fe=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Xe=["zai-glm-5.2","zai-glm-toggle","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"],Be=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Ue=["count-tokens","models-list","minimal-message","unsupported"];function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}t(k,"isPlainObject");function R(e,n){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${n} must be a non-empty string`);return e}t(R,"requireString");function _(e,n){if(e!==void 0)return R(e,n)}t(_,"optionalString");function x(e,n){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${n} must be a non-negative finite number`);return e}}t(x,"optionalNumber");function g(e,n){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${n} must be a boolean`);return e}}t(g,"optionalBoolean");function qe(e,n){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${n} must be an array`);return e.map((r,o)=>R(r,`${n}[${o}]`))}}t(qe,"optionalStringArray");function Fn(e,n){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${n} must be an object`);let r={};for(let[o,i]of Object.entries(e))r[o]=R(i,`${n}.${o}`);return r}t(Fn,"optionalStringMap");function Xn(e,n){if(e!==void 0){if(typeof e!="string"||!Xe.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Xe.join(", ")}, got ${JSON.stringify(e)}`);return e}}t(Xn,"optionalReasoningPreset");function ne(e,n){if(typeof e!="string"||!je.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${je.join(", ")}, got ${JSON.stringify(e)}`);return e}t(ne,"requireReasoningCapability");function Bn(e,n){if(typeof e!="string"||!Ke.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Ke.join(", ")}, got ${JSON.stringify(e)}`);return e}t(Bn,"requireEffortStrategy");function Un(e,n){if(e!==void 0){if(typeof e!="string"||!Fe.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Fe.join(", ")}, got ${JSON.stringify(e)}`);return e}}t(Un,"optionalThinkingStrategy");function We(e,n){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${n} must be an object`);let r=Bn(e.effortStrategy,`${n}.effortStrategy`),o=Xn(e.reasoningPreset,`${n}.reasoningPreset`),i=Un(e.thinkingStrategy,`${n}.thinkingStrategy`),s=_(e.defaultEffort,`${n}.defaultEffort`),c=Fn(e.effortAliases,`${n}.effortAliases`),a=qe(e.disabledEfforts,`${n}.disabledEfforts`),d=qe(e.localRejectEfforts,`${n}.localRejectEfforts`),f=g(e.allowCustomEffort,`${n}.allowCustomEffort`),m=g(e.supportsReasoningEffort,`${n}.supportsReasoningEffort`),h=g(e.supportsReasoningSummary,`${n}.supportsReasoningSummary`),S=g(e.supportsEncryptedReasoningReplay,`${n}.supportsEncryptedReasoningReplay`),u=g(e.supportsAdaptiveThinking,`${n}.supportsAdaptiveThinking`),E=g(e.supportsManualThinkingBudget,`${n}.supportsManualThinkingBudget`),y=g(e.supportsDisabledThinking,`${n}.supportsDisabledThinking`),K=g(e.requiresEffortBetaHeader,`${n}.requiresEffortBetaHeader`),l={effortStrategy:r};if(o!==void 0&&(l.reasoningPreset=o),i!==void 0&&(l.thinkingStrategy=i),s!==void 0&&(l.defaultEffort=s),c!==void 0&&(l.effortAliases=c),a!==void 0&&(l.disabledEfforts=a),d!==void 0&&(l.localRejectEfforts=d),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${n}.supportedEfforts must be an array`);l.supportedEfforts=e.supportedEfforts.map((p,v)=>{if(!k(p))throw new Error(`provider-capabilities.json: ${n}.supportedEfforts[${v}] must be an object`);return{value:R(p.value,`${n}.supportedEfforts[${v}].value`),..._(p.description,`${n}.supportedEfforts[${v}].description`)!==void 0?{description:_(p.description,`${n}.supportedEfforts[${v}].description`)}:{},...g(p.isDefault,`${n}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:g(p.isDefault,`${n}.supportedEfforts[${v}].isDefault`)}:{},...g(p.isUserVisible,`${n}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:g(p.isUserVisible,`${n}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!k(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${n}.budgetByEffort must be an object`);let p={};for(let[v,Re]of Object.entries(e.budgetByEffort))p[v]=x(Re,`${n}.budgetByEffort.${v}`)??0;l.budgetByEffort=p}return f!==void 0&&(l.allowCustomEffort=f),m!==void 0&&(l.supportsReasoningEffort=m),h!==void 0&&(l.supportsReasoningSummary=h),S!==void 0&&(l.supportsEncryptedReasoningReplay=S),u!==void 0&&(l.supportsAdaptiveThinking=u),E!==void 0&&(l.supportsManualThinkingBudget=E),y!==void 0&&(l.supportsDisabledThinking=y),K!==void 0&&(l.requiresEffortBetaHeader=K),l}t(We,"validateReasoningProfile");function ze(e,n){let r=e.reasoningProfile,o=e.reasoningCapabilityV2;if(r!==void 0&&o!==void 0)throw new Error(`provider-capabilities.json: ${n} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return r!==void 0?We(r,`${n}.reasoningProfile`):We(o,`${n}.reasoningCapabilityV2`)}t(ze,"validateReasoningProfileField");function qn(e,n){if(typeof e!="string"||!Be.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Be.join(", ")}, got ${JSON.stringify(e)}`);return e}t(qn,"requireProfileName");function Wn(e,n){if(typeof e!="string"||!Ue.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Ue.join(", ")}, got ${JSON.stringify(e)}`);return e}t(Wn,"requireVerifyStrategy");function zn(e,n){if(!k(e))throw new Error(`provider-capabilities.json: ${n} must be an object`);let r=R(e.id,`${n}.id`),o=_(e.wireModel,`${n}.wireModel`),i=_(e.displayName,`${n}.displayName`),s=x(e.contextWindow,`${n}.contextWindow`),c=x(e.maxOutputTokens,`${n}.maxOutputTokens`),a=x(e.thinkingBudgetCap,`${n}.thinkingBudgetCap`),d=g(e.replayReasoningContent,`${n}.replayReasoningContent`),f=g(e.strictThinkingSignature,`${n}.strictThinkingSignature`),m=x(e.streamMaxDurationMs,`${n}.streamMaxDurationMs`),h=e.reasoningCapability===void 0?void 0:ne(e.reasoningCapability,`${n}.reasoningCapability`),S=ze(e,n),u={id:r};return o!==void 0&&(u.wireModel=o),i!==void 0&&(u.displayName=i),s!==void 0&&(u.contextWindow=s),c!==void 0&&(u.maxOutputTokens=c),a!==void 0&&(u.thinkingBudgetCap=a),h!==void 0&&(u.reasoningCapability=h),S!==void 0&&(u.reasoningProfile=S),d!==void 0&&(u.replayReasoningContent=d),f!==void 0&&(u.strictThinkingSignature=f),m!==void 0&&(u.streamMaxDurationMs=m),u}t(zn,"validateModelDescriptor");function Hn(e,n){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${n} must be an object`);let r={};for(let[o,i]of Object.entries(e))r[o]=ne(i,`${n}.${o}`);return r}t(Hn,"validateModelReasoningCapabilities");function Vn(e,n){if(!k(e))throw new Error(`provider-capabilities.json: providers.${n} must be an object`);let r=g(e.cliBridge,`providers.${n}.cliBridge`),o=R(e.apiKeyEnv,`providers.${n}.apiKeyEnv`),i=ne(e.reasoningCapability,`providers.${n}.reasoningCapability`),s=ze(e,`providers.${n}`),c=qn(e.capabilityProfile,`providers.${n}.capabilityProfile`),a=Wn(e.verifyStrategy,`providers.${n}.verifyStrategy`);if(r&&a!=="unsupported")throw new Error(`provider-capabilities.json: providers.${n} is a cliBridge entry but verifyStrategy="${a}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let d=x(e.contextWindow,`providers.${n}.contextWindow`),f=x(e.maxOutputTokens,`providers.${n}.maxOutputTokens`),m=x(e.thinkingBudgetCap,`providers.${n}.thinkingBudgetCap`),h=g(e.supportsThinking,`providers.${n}.supportsThinking`),S=Hn(e.modelReasoningCapabilities,`providers.${n}.modelReasoningCapabilities`),u=_(e.model,`providers.${n}.model`);if(r&&(u!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${n} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!r&&u===void 0)throw new Error(`provider-capabilities.json: providers.${n}.model is required (only cliBridge entries may omit)`);let E;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${n}.models must be an array`);E=e.models.map((l,p)=>zn(l,`providers.${n}.models[${p}]`));let K=new Set([...u===void 0?[]:[u],...E.map(l=>l.id)]);for(let[l,p]of E.entries())if(p.wireModel!==void 0&&!K.has(p.wireModel))throw new Error(`provider-capabilities.json: providers.${n}.models[${l}].wireModel must reference a declared model, got ${JSON.stringify(p.wireModel)}`)}let y={apiKeyEnv:o,reasoningCapability:i,capabilityProfile:c,verifyStrategy:a};return s!==void 0&&(y.reasoningProfile=s),u!==void 0&&(y.model=u),E!==void 0&&(y.models=E),d!==void 0&&(y.contextWindow=d),f!==void 0&&(y.maxOutputTokens=f),m!==void 0&&(y.thinkingBudgetCap=m),h!==void 0&&(y.supportsThinking=h),S!==void 0&&(y.modelReasoningCapabilities=S),r&&(y.cliBridge=!0),y}t(Vn,"validateProviderEntry");function He(e){if(!k(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let n=R(e.updatedAt,"updatedAt");if(!k(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let r={};for(let[o,i]of Object.entries(e.providers))r[o]=Vn(i,o);return{version:1,updatedAt:n,providers:r}}t(He,"validateProviderCapabilitiesJson");var Qn=Object.freeze({native:M,"image-input-native":Ie,"cli-bridge":F,"image-input-cli-bridge":Ce}),q=null;function Zn(){if(process.env.KODAX_BUNDLED==="true")return A.join(A.dirname(process.execPath),"provider-capabilities.json");let e=A.dirname(Yn(import.meta.url)),n=[A.join(e,"provider-capabilities.json"),A.join(A.dirname(e),"provider-capabilities.json")];for(let r of n)if(Gn(r))return r;return n[0]}t(Zn,"resolveJsonPath");function er(e){if(e.models){for(let n of e.models)n.reasoningProfile&&Ve(n.reasoningProfile);for(let n of e.models)Object.freeze(n);Object.freeze(e.models)}return e.reasoningProfile&&Ve(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}t(er,"deepFreezeSnapshot");function Ve(e){if(e.supportedEfforts){for(let n of e.supportedEfforts)Object.freeze(n);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)}t(Ve,"freezeReasoningProfile");function tr(e){if(e==="gemini-cli"){let n=T();return{model:n,models:$().filter(r=>r!==n).map(r=>({id:r}))}}if(e==="codex-cli"){let n=C();return{model:n,models:O().filter(r=>r!==n).map(r=>({id:r}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}t(tr,"resolveCliBridgeModels");function nr(e,n){let r=Qn[n.capabilityProfile];if(!r)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${n.capabilityProfile}' for provider '${e}'`);if(n.cliBridge){let i=tr(e),s={model:i.model,models:i.models,apiKeyEnv:n.apiKeyEnv,reasoningCapability:n.reasoningCapability,capabilityProfile:r,verifyStrategy:n.verifyStrategy};return n.reasoningProfile!==void 0&&(s.reasoningProfile=n.reasoningProfile),n.supportsThinking!==void 0&&(s.supportsThinking=n.supportsThinking),s}let o={model:n.model,apiKeyEnv:n.apiKeyEnv,reasoningCapability:n.reasoningCapability,capabilityProfile:r,verifyStrategy:n.verifyStrategy};return n.reasoningProfile!==void 0&&(o.reasoningProfile=n.reasoningProfile),n.models!==void 0&&(o.models=n.models),n.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=n.modelReasoningCapabilities),n.contextWindow!==void 0&&(o.contextWindow=n.contextWindow),n.maxOutputTokens!==void 0&&(o.maxOutputTokens=n.maxOutputTokens),n.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=n.thinkingBudgetCap),n.supportsThinking!==void 0&&(o.supportsThinking=n.supportsThinking),o}t(nr,"buildSnapshot");function Ge(){if(q)return q;let e=Zn(),n;try{let i=Jn(e,"utf8");n=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 r=He(n),o={};for(let[i,s]of Object.entries(r.providers))o[i]=er(nr(i,s));return q=Object.freeze(o),q}t(Ge,"getProviderSnapshots");import rl from"@anthropic-ai/sdk";var W=Ge();var Je=process.env.KODAX_PROVIDER??"zhipu-coding";var N=class e{static{t(this,"SpanImpl")}id;traceId;parentId;name;data;startedAt;_endedAt;_error;_children=[];now;nextSpanId;onChildCreated;onSpanEnd;_ended=!1;constructor(n){this.id=n.id,this.traceId=n.traceId,this.parentId=n.parentId,this.name=n.name,this.data=n.data,this.now=n.now??(()=>Date.now()),this.startedAt=n.startedAt??this.now(),this.nextSpanId=n.nextSpanId??$r,this.onChildCreated=n.onChildCreated,this.onSpanEnd=n.onSpanEnd}get endedAt(){return this._endedAt}get error(){return this._error}get children(){return this._children}addChild(n,r){let o=new e({id:this.nextSpanId(),traceId:this.traceId,parentId:this.id,name:n,data:r,now:this.now,nextSpanId:this.nextSpanId,onChildCreated:this.onChildCreated,onSpanEnd:this.onSpanEnd});return this._children.push(o),this.onChildCreated&&this.onChildCreated(o),o}setError(n){n instanceof Error?this._error={message:n.message,stack:n.stack}:this._error=n}end(){this._ended||(this._ended=!0,this._endedAt=this.now(),this.onSpanEnd&&this.onSpanEnd(this))}},pt=0;function $r(){pt+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${pt}-${e}`}t($r,"defaultNextSpanId");var mt=0;function Nr(){mt+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${mt}-${e}`}t(Nr,"defaultNextTraceId");function de(e={}){let n=e.now??(()=>Date.now()),r=e.id??(e.nextTraceId??Nr)(),o=n(),i=e.name??"trace",s=e.metadata??new Map,c=e.rootSpanData??{kind:"agent",agentName:i},a=!1,d,f,m=new N({id:`${r}-root`,traceId:r,name:i,data:c,startedAt:o,now:n,nextSpanId:e.nextSpanId,onChildCreated:e.onSpanStart,onSpanEnd:e.onSpanEnd});e.onSpanStart&&e.onSpanStart(m);let h={id:r,startedAt:o,rootSpan:m,metadata:s,get endedAt(){return d},get error(){return f??m.error},end(){a||(a=!0,d=n(),m.end(),e.onTraceEnd&&e.onTraceEnd(h))}};return h}t(de,"createTrace");var le=[];function ue(e){for(let n of le)try{n.onSpanStart(e)}catch{}}t(ue,"_emitSpanStart");function fe(e){for(let n of le)try{n.onSpanEnd(e)}catch{}}t(fe,"_emitSpanEnd");function pe(e){for(let n of le)try{n.onTraceEnd(e)}catch{}}t(pe,"_emitTraceEnd");var z=class{static{t(this,"Tracer")}options;constructor(n={}){this.options=n}startTrace(n={}){return de({id:n.id,name:n.name,rootSpanData:n.rootSpanData,metadata:n.metadata,now:this.options.now,nextSpanId:this.options.nextSpanId,nextTraceId:this.options.nextTraceId,onSpanStart:ue,onSpanEnd:fe,onTraceEnd:pe})}},gt=new z;var Xr=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var Wf=new Set(Xr);var H="ELECTRON_RUN_AS_NODE",V="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";var Lp=String.raw`
89
+ }`;import Mt from"node:fs";import Ot from"node:os";import $t from"node:path";var go="gpt-5.4",ho="auto-gemini-3",yo=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],wo=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Dt(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(Dt,"dedupePreserveOrder");function vo(){let e=$t.join(Ot.homedir(),".codex","config.toml");try{return Mt.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}o(vo,"readCodexConfiguredModel");function bo(){let e=$t.join(Ot.homedir(),".gemini","settings.json");try{let t=JSON.parse(Mt.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(bo,"readGeminiConfiguredModel");function W(){return vo()||go}o(W,"getCodexCliDefaultModel");function q(){return bo()||ho}o(q,"getGeminiCliDefaultModel");function te(){return Dt([W(),...yo])}o(te,"getCodexCliKnownModels");function ne(){return Dt([q(),...wo])}o(ne,"getGeminiCliKnownModels");var ep=q(),tp=ne();var pp=W(),mp=te();import{existsSync as Po,readFileSync as Mo}from"node:fs";import H from"node:path";import{fileURLToPath as Oo}from"node:url";var Nt=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Lt=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],jt=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Ft=["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"],Kt=["max_tokens","max_completion_tokens"],Xt=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Bt=["count-tokens","models-list","minimal-message","unsupported"];function O(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(O,"isPlainObject");function K(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(K,"requireString");function z(e,t){if(e!==void 0)return K(e,t)}o(z,"optionalString");function qt(e,t){if(e!==void 0){if(typeof e!="string"||!Kt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Kt.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(qt,"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 E(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}o(E,"optionalBoolean");function Ut(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)=>K(n,`${t}[${r}]`))}}o(Ut,"optionalStringArray");function So(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]=K(i,`${t}.${r}`);return n}o(So,"optionalStringMap");function xo(e,t){if(e!==void 0){if(typeof e!="string"||!Ft.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ft.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(xo,"optionalReasoningPreset");function je(e,t){if(typeof e!="string"||!Nt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Nt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(je,"requireReasoningCapability");function Eo(e,t){if(typeof e!="string"||!Lt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Lt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Eo,"requireEffortStrategy");function Io(e,t){if(e!==void 0){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(Io,"optionalThinkingStrategy");function Wt(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Eo(e.effortStrategy,`${t}.effortStrategy`),r=xo(e.reasoningPreset,`${t}.reasoningPreset`),i=Io(e.thinkingStrategy,`${t}.thinkingStrategy`),s=z(e.defaultEffort,`${t}.defaultEffort`),a=So(e.effortAliases,`${t}.effortAliases`),c=Ut(e.disabledEfforts,`${t}.disabledEfforts`),d=Ut(e.localRejectEfforts,`${t}.localRejectEfforts`),l=E(e.allowCustomEffort,`${t}.allowCustomEffort`),u=E(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),f=E(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),p=E(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),g=E(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),m=E(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),_=E(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),k=E(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),h={effortStrategy:n};if(r!==void 0&&(h.reasoningPreset=r),i!==void 0&&(h.thinkingStrategy=i),s!==void 0&&(h.defaultEffort=s),a!==void 0&&(h.effortAliases=a),c!==void 0&&(h.disabledEfforts=c),d!==void 0&&(h.localRejectEfforts=d),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);h.supportedEfforts=e.supportedEfforts.map((S,w)=>{if(!O(S))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${w}] must be an object`);return{value:K(S.value,`${t}.supportedEfforts[${w}].value`),...z(S.description,`${t}.supportedEfforts[${w}].description`)!==void 0?{description:z(S.description,`${t}.supportedEfforts[${w}].description`)}:{},...E(S.isDefault,`${t}.supportedEfforts[${w}].isDefault`)!==void 0?{isDefault:E(S.isDefault,`${t}.supportedEfforts[${w}].isDefault`)}:{},...E(S.isUserVisible,`${t}.supportedEfforts[${w}].isUserVisible`)!==void 0?{isUserVisible:E(S.isUserVisible,`${t}.supportedEfforts[${w}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!O(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let S={};for(let[w,xt]of Object.entries(e.budgetByEffort))S[w]=L(xt,`${t}.budgetByEffort.${w}`)??0;h.budgetByEffort=S}return l!==void 0&&(h.allowCustomEffort=l),u!==void 0&&(h.supportsReasoningEffort=u),f!==void 0&&(h.supportsReasoningSummary=f),p!==void 0&&(h.supportsEncryptedReasoningReplay=p),g!==void 0&&(h.supportsAdaptiveThinking=g),m!==void 0&&(h.supportsManualThinkingBudget=m),_!==void 0&&(h.supportsDisabledThinking=_),k!==void 0&&(h.requiresEffortBetaHeader=k),h}o(Wt,"validateReasoningProfile");function zt(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?Wt(n,`${t}.reasoningProfile`):Wt(r,`${t}.reasoningCapabilityV2`)}o(zt,"validateReasoningProfileField");function Ro(e,t){if(typeof e!="string"||!Xt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Xt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Ro,"requireProfileName");function To(e,t){if(typeof e!="string"||!Bt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Bt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(To,"requireVerifyStrategy");function _o(e,t){if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=K(e.id,`${t}.id`),r=z(e.wireModel,`${t}.wireModel`),i=z(e.displayName,`${t}.displayName`),s=L(e.contextWindow,`${t}.contextWindow`),a=L(e.maxOutputTokens,`${t}.maxOutputTokens`),c=qt(e.maxOutputTokensField,`${t}.maxOutputTokensField`),d=L(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=E(e.replayReasoningContent,`${t}.replayReasoningContent`),u=E(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=L(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),p=e.reasoningCapability===void 0?void 0:je(e.reasoningCapability,`${t}.reasoningCapability`),g=zt(e,t),m={id:n};return r!==void 0&&(m.wireModel=r),i!==void 0&&(m.displayName=i),s!==void 0&&(m.contextWindow=s),a!==void 0&&(m.maxOutputTokens=a),c!==void 0&&(m.maxOutputTokensField=c),d!==void 0&&(m.thinkingBudgetCap=d),p!==void 0&&(m.reasoningCapability=p),g!==void 0&&(m.reasoningProfile=g),l!==void 0&&(m.replayReasoningContent=l),u!==void 0&&(m.strictThinkingSignature=u),f!==void 0&&(m.streamMaxDurationMs=f),m}o(_o,"validateModelDescriptor");function Co(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]=je(i,`${t}.${r}`);return n}o(Co,"validateModelReasoningCapabilities");function Ao(e,t){if(!O(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=E(e.cliBridge,`providers.${t}.cliBridge`),r=K(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=je(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=zt(e,`providers.${t}`),a=Ro(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=To(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=qt(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),f=L(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),p=E(e.supportsThinking,`providers.${t}.supportsThinking`),g=Co(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),m=z(e.model,`providers.${t}.model`);if(n&&(m!==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&&m===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let _;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);_=e.models.map((S,w)=>_o(S,`providers.${t}.models[${w}]`));let h=new Set([...m===void 0?[]:[m],..._.map(S=>S.id)]);for(let[S,w]of _.entries())if(w.wireModel!==void 0&&!h.has(w.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${S}].wireModel must reference a declared model, got ${JSON.stringify(w.wireModel)}`)}let k={apiKeyEnv:r,reasoningCapability:i,capabilityProfile:a,verifyStrategy:c};return s!==void 0&&(k.reasoningProfile=s),m!==void 0&&(k.model=m),_!==void 0&&(k.models=_),d!==void 0&&(k.contextWindow=d),l!==void 0&&(k.maxOutputTokens=l),u!==void 0&&(k.maxOutputTokensField=u),f!==void 0&&(k.thinkingBudgetCap=f),p!==void 0&&(k.supportsThinking=p),g!==void 0&&(k.modelReasoningCapabilities=g),n&&(k.cliBridge=!0),k}o(Ao,"validateProviderEntry");function Ht(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=K(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]=Ao(i,r);return{version:1,updatedAt:t,providers:n}}o(Ht,"validateProviderCapabilitiesJson");var $o=Object.freeze({native:ee,"image-input-native":Et,"cli-bridge":me,"image-input-cli-bridge":It}),we=null;function Do(){if(process.env.KODAX_BUNDLED==="true")return H.join(H.dirname(process.execPath),"provider-capabilities.json");let e=H.dirname(Oo(import.meta.url)),t=[H.join(e,"provider-capabilities.json"),H.join(H.dirname(e),"provider-capabilities.json")];for(let n of t)if(Po(n))return n;return t[0]}o(Do,"resolveJsonPath");function No(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Vt(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Vt(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}o(No,"deepFreezeSnapshot");function Vt(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(Vt,"freezeReasoningProfile");function Lo(e){if(e==="gemini-cli"){let t=q();return{model:t,models:ne().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=W();return{model:t,models:te().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}o(Lo,"resolveCliBridgeModels");function jo(e,t){let n=$o[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let i=Lo(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(jo,"buildSnapshot");function Gt(){if(we)return we;let e=Do(),t;try{let i=Mo(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=Ht(t),r={};for(let[i,s]of Object.entries(n.providers))r[i]=No(jo(i,s));return we=Object.freeze(r),we}o(Gt,"getProviderSnapshots");import jp from"@anthropic-ai/sdk";var ve=Gt();var Jt=process.env.KODAX_PROVIDER??"zhipu-coding";var gi=[];function C(e){let t=pe(e),n=gi.at(-1)?.sink;if(n){try{n(t)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${mn(t)}
90
+ `)}catch{}}o(C,"emitKodaXDiagnostic");function mn(e){let t=pe(e),n=hi(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}o(mn,"formatKodaXDiagnostic");function hi(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(hi,"formatDiagnosticDetail");var re=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))}},gn=0;function yi(){gn+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${gn}-${e}`}o(yi,"defaultNextSpanId");var hn=0;function wi(){hn+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${hn}-${e}`}o(wi,"defaultNextTraceId");function qe(e={}){let t=e.now??(()=>Date.now()),n=e.id??(e.nextTraceId??wi)(),r=t(),i=e.name??"trace",s=e.metadata??new Map,a=e.rootSpanData??{kind:"agent",agentName:i},c=!1,d,l,u=new re({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(qe,"createTrace");var ze=[];function He(e){for(let t of ze)try{t.onSpanStart(e)}catch{}}o(He,"_emitSpanStart");function Ve(e){for(let t of ze)try{t.onSpanEnd(e)}catch{}}o(Ve,"_emitSpanEnd");function Ge(e){for(let t of ze)try{t.onTraceEnd(e)}catch{}}o(Ge,"_emitTraceEnd");var be=class{static{o(this,"Tracer")}options;constructor(t={}){this.options=t}startTrace(t={}){return qe({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:He,onSpanEnd:Ve,onTraceEnd:Ge})}},yn=new be;var Ei=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var Ih=new Set(Ei);var ke="ELECTRON_RUN_AS_NODE";var Se="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";var hy=String.raw`
47
91
  using System;
48
92
  using System.Runtime.InteropServices;
49
93
  using System.Text;
@@ -68,9 +112,49 @@ public static class KodaXNativeProcessSnapshot {
68
112
  private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
69
113
  [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
70
114
  private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
115
+ [StructLayout(LayoutKind.Sequential)]
116
+ private struct FileTime {
117
+ public uint Low;
118
+ public uint High;
119
+ }
120
+ [DllImport("kernel32.dll", SetLastError = true)]
121
+ private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
122
+ [DllImport("kernel32.dll", SetLastError = true)]
123
+ private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
124
+ [DllImport("kernel32.dll", SetLastError = true)]
125
+ private static extern bool TerminateProcess(IntPtr process, uint exitCode);
126
+ [DllImport("kernel32.dll")]
127
+ private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
71
128
  [DllImport("kernel32.dll")]
72
129
  private static extern bool CloseHandle(IntPtr handle);
130
+ private static ulong ReadCreationTime(uint processId) {
131
+ var process = OpenProcess(0x1000, false, processId);
132
+ if (process == IntPtr.Zero) return 0;
133
+ try {
134
+ FileTime creation, exit, kernel, user;
135
+ if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
136
+ return ((ulong)creation.High << 32) | creation.Low;
137
+ } finally {
138
+ CloseHandle(process);
139
+ }
140
+ }
141
+ public static int TerminateExact(uint processId, ulong expectedCreationTime) {
142
+ var process = OpenProcess(0x1001, false, processId);
143
+ if (process == IntPtr.Zero) return 0;
144
+ try {
145
+ FileTime creation, exit, kernel, user;
146
+ if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
147
+ var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
148
+ if (actual != expectedCreationTime) return 2;
149
+ return TerminateProcess(process, 1) ? 1 : 0;
150
+ } finally {
151
+ CloseHandle(process);
152
+ }
153
+ }
73
154
  public static string ReadRows() {
155
+ FileTime cutoffTime;
156
+ GetSystemTimeAsFileTime(out cutoffTime);
157
+ var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
74
158
  var snapshot = CreateToolhelp32Snapshot(2, 0);
75
159
  if (snapshot == new IntPtr(-1)) return string.Empty;
76
160
  var rows = new StringBuilder();
@@ -79,7 +163,10 @@ public static class KodaXNativeProcessSnapshot {
79
163
  try {
80
164
  if (!Process32First(snapshot, ref entry)) return string.Empty;
81
165
  do {
82
- rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append('\n');
166
+ var creationTime = ReadCreationTime(entry.th32ProcessID) / 10000;
167
+ if (creationTime == 0 || creationTime <= cutoff) {
168
+ rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append(',').Append(creationTime).Append('\n');
169
+ }
83
170
  entry.dwSize = (uint)Marshal.SizeOf(entry);
84
171
  } while (Process32Next(snapshot, ref entry));
85
172
  return rows.ToString();
@@ -87,7 +174,186 @@ public static class KodaXNativeProcessSnapshot {
87
174
  CloseHandle(snapshot);
88
175
  }
89
176
  }
90
- }`;import{Jimp as cm}from"jimp";var wo=Math.floor(3.75*1024*1024);var bo=1440*60*1e3;import{fileURLToPath as Ho}from"url";import{dirname as Vo}from"path";var Go=Ho(import.meta.url),uh=Vo(Go);import gh from"yaml";var Ct=64*1024,Tt=256*1024;var ry=1024*1024;var Oy=16*1024;var By=16*1024;var kv=1440*60*1e3;var Tv=5*6e4;var hb=new Intl.Segmenter("zh-CN",{granularity:"word"});var vk=String.raw`const TOOL_NAME = 'echo_tool';
177
+ }`,yy=Object.freeze({status:"terminated"}),wy=Object.freeze({status:"already-exited"}),vy=Object.freeze({status:"unknown"});import{Jimp as Vy}from"jimp";var es=Math.floor(3.75*1024*1024);var ns=1440*60*1e3;import{fileURLToPath as Cs}from"url";import{dirname as As}from"path";var Ps=Cs(import.meta.url),Yv=As(Ps);import{readFile as Ns,readdir as Ls}from"fs/promises";import{join as X,relative as js}from"path";import Cn from"yaml";var Ms=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function Os(e){let t=e.split(`
178
+ `),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(`
179
+ `)}o(Os,"sanitizeYaml");function An(e,t={}){let n=e.replace(/^/,"").replace(/\r\n/g,`
180
+ `).replace(/\r/g,`
181
+ `).trimStart();if(!n.startsWith(`---
182
+ `)){if(t.throwOnMissing)throw new Error("Invalid markdown: missing YAML frontmatter");return[null,e]}let r=n.indexOf(`
183
+ ---
184
+ `,4);if(r===-1){let c=n.indexOf(`
185
+ ---`,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=Cn.parse(i)??{}}catch{a=Cn.parse(Os(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(An,"parseYamlFrontmatter");function Pn(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(Pn,"normalizeAllowedToolsString");function $s(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($s,"normalizeYamlHookEntry");function Ds(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>$s(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(Ds,"normalizeYamlHookEntryList");function Mn(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of Ms){let i=Ds(t[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}o(Mn,"normalizeYamlHookMap");function On(e){let[t,n]=An(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:Pn(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:Mn(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(On,"parseSkillMarkdown");async function xe(e,t){let n=X(e,"SKILL.md");try{let r=await Ns(n,"utf-8"),{frontmatter:i,body:s}=On(r),[a,c,d,l,u]=await Promise.all([V(X(e,"scripts")),V(X(e,"references")),V(X(e,"assets")),V(X(e,"templates")),V(X(e,"resources"))]);return{...i,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 C({source:"agent:skills",level:"error",message:`Failed to load skill from ${e}.`,detail:r}),null}}o(xe,"loadFullSkill");async function V(e,t=e){let n=[];try{let r=await Ls(e,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=X(e,i.name);if(i.isDirectory()){n.push(...await V(s,t));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:js(t,s).replace(/\\/g,"/")})}}catch{}return n}o(V,"loadSkillFiles");var $n=64*1024,Dn=256*1024;var Xb=1024*1024;var yk=16*1024;var Rk=16*1024;import{execSync as ba}from"child_process";import ka from"path";var Sa=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 Jn(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of Sa)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(Jn,"isSingleSafeDynamicContextCommand");function xa(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&ka.sep!=="\\"&&t.replace(/\\ /g,"").includes("\\"))return!1;let r=t.split(/\s*&&\s*/);if(r.length===1)return Jn(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!Jn(s))return!1}return!0}o(xa,"isSafeDynamicContextCommand");function Yn(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(Yn,"parseArguments");var _e=class{static{o(this,"VariableResolver")}context;constructor(t){this.context=t}async resolve(t,n){let r=t,i=Yn(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(!xa(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return ba(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 se(e,t,n){return new _e(n).resolve(e,t)}o(se,"resolveSkillContent");function Qn(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}o(Qn,"escapeXml");var nt=120;function Ce(e){return e.replace(/\\/g,"/")}o(Ce,"formatDisplayPath");function Ra(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(Ra,"collectSupportFiles");function Ta(e){let t=Ra(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,nt))r.push(`- ${i}/${s.relativePath}: ${Ce(s.path)}`);return t.length>nt&&r.push(`- ... ${t.length-nt} more files under ${Ce(e.path)}`),r}o(Ta,"buildSupportFileContext");function _a(e,t,n){let r=[];r.push(`<skill name="${Qn(e.name)}" location="${Qn(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=Ta(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(`
186
+ `)}o(_a,"buildSkillBlock");async function rt(e,t,n){let r=await se(e.content,t,n);return{content:_a(e,r,t),disableModelInvocation:e.disableModelInvocation??!1,skill:e}}o(rt,"expandSkillForLLM");import{writeFile as rr}from"node:fs/promises";import F from"node:path";import{existsSync as Ca}from"node:fs";import{mkdir as Aa,readFile as ot,readdir as Pa,stat as er,writeFile as ES}from"node:fs/promises";import Ma from"node:os";import $ from"node:path";import{fileURLToPath as tr,pathToFileURL as Oa}from"node:url";import $a from"yaml";var G=null;async function j(){if(G)return G;let e=$.dirname(tr(import.meta.url)),t=[],n=$.resolve(e,"../../../index.js");if(Ca(n))return G=await import(Oa(n).href),G;t.push(`relative SDK path not found: ${n}`);try{return G=await import(["@kodax-ai","kodax"].join("/")),G}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}.
187
+ Attempted:
188
+ - ${t.join(`
189
+ - `)}`)}o(j,"loadKodaXSDK");function Da(e){let t=e.replace(/^\uFEFF/,"").replace(/\r\n/g,`
190
+ `).replace(/\r/g,`
191
+ `).trimStart();if(!t.startsWith(`---
192
+ `))throw new Error("SKILL.md missing YAML frontmatter");let n=t.indexOf(`
193
+ ---
194
+ `,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(Da,"extractFrontmatter");function Ae(e){let{yamlText:t,body:n}=Da(e),r=$a.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(Ae,"parseSkillMarkdown");async function ce(e){let t=$.join(e,"SKILL.md");if(!(await er(t).catch(()=>null))?.isFile())throw new Error(`SKILL.md not found in ${e}`);let r=await ot(t,"utf8"),{frontmatter:i,body:s}=Ae(r);return{skillDir:$.resolve(e),skillMdPath:t,rawContent:r,body:s,frontmatter:i}}o(ce,"loadSkill");async function de(e){try{return await er(e),!0}catch{return!1}}o(de,"pathExists");function Pe(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:ae(t),stddev:ae(Math.sqrt(n)),min:ae(Math.min(...e)),max:ae(Math.max(...e))}}o(Pe,"calculateStats");function ae(e,t=4){return Number(e.toFixed(t))}o(ae,"roundNumber");function Me(e){return e>=0?`+${e.toFixed(4)}`:e.toFixed(4)}o(Me,"formatDelta");function Zn(e){try{return JSON.parse(e)}catch{return null}}o(Zn,"safeJsonParse");function J(e){let t=Zn(e.trim());if(t&&typeof t=="object")return t;let n=e.indexOf("{"),r=e.lastIndexOf("}");return n===-1||r===-1||r<=n?null:Zn(e.slice(n,r+1))}o(J,"extractJsonObject");async function P(e,t=null){try{return JSON.parse(await ot(e,"utf8"))}catch{return t}}o(P,"readJsonFile");async function Y(e,t){let n=$.dirname(tr(e));return ot($.resolve(n,t),"utf8")}o(Y,"loadRelativeText");function I(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)}
195
+
196
+ [truncated ${r} chars]`}o(I,"truncateText");function nr(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?ae(n/t):0}}o(nr,"computePassSummary");async function it(e,t=e,n=[]){let r=await Pa(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 it(e,s,n);continue}i.isFile()&&n.push({absolutePath:s,relativePath:$.relative(e,s).replace(/\\/g,"/")})}return n}o(it,"collectFiles");function le(){return $.join(Ma.homedir(),".kodax","skills")}o(le,"getDefaultSkillsDir");async function R(e){return await Aa(e,{recursive:!0}),e}o(R,"ensureDirectory");function Na(e){return e.split("-").filter(Boolean).map(t=>t[0]?.toUpperCase()+t.slice(1)).join(" ")}o(Na,"titleFromSlug");function La(e,t){let n=Na(e);return`---
197
+ name: ${e}
198
+ description: ${t}
199
+ user-invocable: true
200
+ allowed-tools: "Read, Grep, Glob"
201
+ compatibility: "Optimized for KodaX and Agent Skills style directories."
202
+ ---
203
+
204
+ # ${n}
205
+
206
+ Describe the task this skill handles, the trigger boundary, and the expected outcome.
207
+
208
+ ## When to use
209
+
210
+ - Use this skill when the user asks for ${n.toLowerCase()}.
211
+ - Do not use this skill when the request only needs a short explanation or is out of scope.
212
+
213
+ ## Workflow
214
+
215
+ 1. Restate the task boundary in one sentence.
216
+ 2. Gather the minimum context needed to do the work well.
217
+ 3. Execute the task, preferring small, verifiable steps.
218
+ 4. Summarize what changed, what was validated, and any remaining risks.
219
+
220
+ ## References
221
+
222
+ - Put deeper guidance in \`references/\`.
223
+ - Put reusable templates or static files in \`assets/\`.
224
+ - Put repeatable helper scripts in \`scripts/\`.
225
+ `}o(La,"renderSkillTemplate");function ja(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(ja,"renderEvalTemplate");async function Fa(e){let t=F.resolve(e.baseDir??le()),n=F.join(t,e.name),r=e.description??`Describe what ${e.name} does and when it should be used.`;if(await de(n)&&!e.force)throw new Error(`Skill directory already exists: ${n}`);return await R(n),await R(F.join(n,"references")),await R(F.join(n,"assets")),await R(F.join(n,"scripts")),await rr(F.join(n,"SKILL.md"),La(e.name,r),"utf8"),e.includeEvals!==!1&&(await R(F.join(n,"evals")),await rr(F.join(n,"evals","evals.json"),`${ja(e.name)}
226
+ `,"utf8")),{skillDir:n,created:["SKILL.md",...e.includeEvals!==!1?["evals/evals.json"]:[],"references/","assets/","scripts/"]}}o(Fa,"initSkill");function Ka(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(Ka,"parseArgs");async function or(e=process.argv){let t=Ka(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 Fa(t);console.log(`Initialized ${n.skillDir}`)}o(or,"main");var Xa=!1;Xa&&or().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import ir from"node:path";var Ba=new Set(["name","description","license","compatibility","metadata","allowed-tools","disable-model-invocation","user-invocable","argument-hint","context","agent","model","hooks"]);async function ue(e){let t={valid:!1,errors:[],warnings:[],frontmatter:null},n;try{n=await ce(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=>!Ba.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=ir.basename(ir.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(ue,"validateSkillDirectory");async function sr(e=process.argv){let t=e[2];t||(console.error("Usage: node scripts/quick-validate.js <skill-directory>"),process.exit(1));let n=await ue(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(sr,"main");var Ua=!1;Ua&&sr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as st,writeFile as D}from"node:fs/promises";import v from"node:path";function Wa(e){return typeof e=="string"?{text:e}:e&&typeof e=="object"&&typeof e.text=="string"?{text:e.text}:null}o(Wa,"normalizeAssertion");function qa(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_use").length:t,0)}o(qa,"countToolCalls");function za(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(za,"countToolErrors");function Ha(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(`
227
+ `)}
228
+ `}o(Ha,"renderTranscript");async function Va(e,t){let n=v.dirname(v.resolve(t.evalsPath)),r=v.resolve(t.cwd??process.cwd()),i=[];for(let s of e??[]){let a=v.isAbsolute(s)?s:v.resolve(n,s),c=v.resolve(r,s),d=null,l=a;try{d=await st(a,"utf8")}catch{d=await st(c,"utf8").catch(()=>null),l=c}if(d==null)throw new Error(`Input file not found for eval: ${s}`);i.push(`### ${s}
229
+ \`\`\`
230
+ ${d}
231
+ \`\`\`
232
+ (Resolved from ${l})`)}return i.length===0?"":`## Input Files
233
+
234
+ ${i.join(`
235
+
236
+ `)}
237
+
238
+ `}o(Va,"readInputFiles");async function Ga(e,t){let n=String(e.prompt??e.query??"").trim();return`${await Va(e.files,t)}${n}`.trim()}o(Ga,"buildEvalPrompt");async function Ja(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:v.resolve(t.cwd??process.cwd())}},e);return{result:s,totalTokens:r(s.messages),durationMs:Date.now()-i}}o(Ja,"defaultRunAgent");async function Ya(e,t,n,r){return e==="with_skill"?(await rt(t,n,{workingDirectory:v.resolve(r.cwd??process.cwd()),projectRoot:v.resolve(r.cwd??process.cwd()),sessionId:"skill-eval",environment:{}})).content:n}o(Ya,"prepareConfigPrompt");async function Qa(e,t,n,r,i){let s=v.join(e,"outputs");await R(s);let a={total_tool_calls:qa(i.result.messages),errors_encountered:za(i.result.messages),output_chars:i.result.lastText.length};await D(v.join(s,"result.md"),`${i.result.lastText}
239
+ `,"utf8"),await D(v.join(s,"prompt.txt"),`${r}
240
+ `,"utf8"),await D(v.join(e,"transcript.md"),Ha(r,i.result),"utf8"),await D(v.join(s,"metrics.json"),`${JSON.stringify({config:t,eval_id:n.id??null,session_id:i.result.sessionId,...a},null,2)}
241
+ `,"utf8"),await D(v.join(s,"messages.json"),`${JSON.stringify(i.result.messages,null,2)}
242
+ `,"utf8"),await D(v.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)}
243
+ `,"utf8"),await D(v.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)}
244
+ `,"utf8")}o(Qa,"writeRunArtifacts");async function Za(e,t=Ja){let n=await xe(v.resolve(e.skillPath),"user");if(!n)throw new Error(`Failed to load skill from ${e.skillPath}`);let r=v.resolve(e.workspaceDir);await R(r);let i=JSON.parse(await st(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=v.join(r,`eval-${l}`);await R(f),await D(v.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(Wa).filter(Boolean)},null,2)}
245
+ `,"utf8");let p=await Ga(u,e),g={};for(let m of a){let _=v.join(f,m);await R(_),g[m]=[];for(let k=1;k<=c;k+=1){let h=v.join(_,`run-${k}`);await R(h);let S=await Ya(m,n,p,e),w=await t(S,{...e,configName:m,evalItem:u,runIndex:k});await Qa(h,m,u,S,w),g[m].push({run_id:`run-${k}`,session_id:w.result.sessionId,success:w.result.success,total_tokens:w.totalTokens,duration_ms:w.durationMs,output_chars:w.result.lastText.length})}}d.push({eval_id:u.id??l,prompt:u.prompt??u.query??"",configs:g})}return{workspace:r,skill_name:n.name,eval_count:s.length,configs:a,runs_per_config:c,reports:d}}o(Za,"runEvalWorkspace");function ec(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(ec,"parseArgs");async function ar(e=process.argv){let t=ec(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 Za(t),r=`${JSON.stringify(n,null,2)}
246
+ `;t.output?(await D(t.output,r,"utf8"),console.log(`Wrote ${v.resolve(t.output)}`)):process.stdout.write(r)}o(ar,"main");var tc=!1;tc&&ar().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as nc,readFile as at,writeFile as dr}from"node:fs/promises";import b from"node:path";function U(e){return String(e??"").trim()}o(U,"normalizeExpectationText");function lr(e){let n=(Array.isArray(e?.assertions)?e.assertions:[]).map(i=>typeof i=="string"?U(i):i&&typeof i=="object"&&typeof i.text=="string"?U(i.text):"").filter(Boolean);if(n.length>0)return n;let r=U(e?.expected_output);return r?[r]:[]}o(lr,"normalizeExpectedRubric");function ct(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(ct,"normalizeStringArray");function cr(e,t){return{text:U(e?.text??t),passed:e?.passed===!0,evidence:U(e?.evidence)}}o(cr,"normalizeExpectationEntry");function rc(e,t){let n=J(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:U(d?.text).toLowerCase()===a.toLowerCase());if(c===-1){i.push({text:a,passed:!1,evidence:""});continue}s.add(c),i.push(cr(r[c],a))}if(t.length===0)for(let a of r){let c=cr(a,"");c.text&&i.push(c)}return{overall_summary:U(n.overall_summary),expectations:i,user_notes_summary:{uncertainties:ct(n.user_notes_summary?.uncertainties),needs_review:ct(n.user_notes_summary?.needs_review),workarounds:ct(n.user_notes_summary?.workarounds)}}}o(rc,"normalizeParsedGrading");async function dt(e){return(await nc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>b.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(dt,"listDirectories");async function oc(e){let t=b.dirname(e),n=b.dirname(t),r=b.basename(t),i=b.basename(e),s=b.join(e,"outputs"),a=await P(b.join(n,"eval_metadata.json"),{}),c=await at(b.join(s,"result.md"),"utf8").catch(()=>""),d=await at(b.join(s,"prompt.txt"),"utf8").catch(()=>""),l=await at(b.join(e,"transcript.md"),"utf8").catch(()=>""),u=await P(b.join(s,"metrics.json"),{}),f=await P(b.join(e,"result.json"),{}),p=await P(b.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:p}}o(oc,"loadRunContext");function ic(e){let t=lr(e.evalMetadata),n=t.length>0?t.map((r,i)=>`${i+1}. ${r}`).join(`
247
+ `):"(No explicit assertions; infer one expectation from expected_output if present.)";return`${e.agentInstructions.trim()}
248
+
249
+ Return JSON with this shape:
250
+ {
251
+ "overall_summary": "short summary",
252
+ "expectations": [
253
+ {
254
+ "text": "expectation text",
255
+ "passed": true,
256
+ "evidence": "short evidence grounded in the output"
257
+ }
258
+ ],
259
+ "user_notes_summary": {
260
+ "uncertainties": [],
261
+ "needs_review": [],
262
+ "workarounds": []
263
+ }
264
+ }
265
+
266
+ ## Run Metadata
267
+ - eval_id: ${e.evalMetadata.eval_id??"unknown"}
268
+ - eval_name: ${e.evalMetadata.eval_name??"unknown"}
269
+ - config: ${e.configName}
270
+ - run_id: ${e.runId}
271
+
272
+ ## Eval Prompt
273
+ ${I(e.evalMetadata.prompt??e.promptText,4e3)}
274
+
275
+ ## Expected Outcome
276
+ ${I(e.evalMetadata.expected_output??"",2e3)}
277
+
278
+ ## Assertions
279
+ ${n}
280
+
281
+ ## Final Output
282
+ ${I(e.resultText,12e3)}
283
+
284
+ ## Result Flags
285
+ ${JSON.stringify({success:e.result.success??null,signal:e.result.signal??null,interrupted:e.result.interrupted??!1,limit_reached:e.result.limit_reached??e.result.limitReached??!1},null,2)}
286
+
287
+ ## Execution Metrics
288
+ ${JSON.stringify({total_tool_calls:e.metrics.total_tool_calls??e.result.execution_metrics?.total_tool_calls??0,errors_encountered:e.metrics.errors_encountered??e.result.execution_metrics?.errors_encountered??0,output_chars:e.metrics.output_chars??e.result.execution_metrics?.output_chars??e.resultText.length,total_tokens:e.timing.total_tokens??0,total_duration_seconds:e.timing.total_duration_seconds??0},null,2)}
289
+
290
+ ## Transcript Excerpt
291
+ ${I(e.transcript,5e3)}
292
+ `}o(ic,"buildGradingPrompt");async function ur(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:b.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(ur,"defaultRunJudge");async function sc(e,t,n=ur){let r=await oc(b.resolve(e)),i=lr(r.evalMetadata),s=await Y(import.meta.url,"../agents/grader.md"),a=ic({...r,agentInstructions:s}),c=await n(a,{...t,runDir:r.runDir,configName:r.configName,evalMetadata:r.evalMetadata,runId:r.runId}),d=rc(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:nr(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 dr(b.join(r.runDir,"grading.json"),`${JSON.stringify(u,null,2)}
293
+ `,"utf8"),{runDir:r.runDir,grading:u,prompt:a,rawResponse:c}}o(sc,"gradeRun");async function ac(e,t=ur){let n=b.resolve(e.workspaceDir);await R(n);let r=new Set((e.configs??[]).map(c=>String(c).trim()).filter(Boolean)),i=[],s=[];for(let c of await dt(n))if(b.basename(c).startsWith("eval-"))for(let d of await dt(c)){let l=b.basename(d);if(!(r.size>0&&!r.has(l)))for(let u of await dt(d)){if(!b.basename(u).startsWith("run-"))continue;let f=b.join(u,"grading.json");if(await P(f,null)&&e.overwrite!==!0){s.push(b.relative(n,u).replace(/\\/g,"/"));continue}let g=await sc(u,e,t);i.push({run:b.relative(n,u).replace(/\\/g,"/"),summary:g.grading.summary,config:g.grading.meta.config,eval_id:g.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 dr(b.join(n,"grading-summary.json"),`${JSON.stringify(a,null,2)}
294
+ `,"utf8"),a}o(ac,"gradeWorkspace");function cc(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(cc,"parseArgs");async function fr(e=process.argv){let t=cc(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 ac(t);process.stdout.write(`${JSON.stringify(n,null,2)}
295
+ `)}o(fr,"main");var dc=!1;dc&&fr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{writeFile as pt}from"node:fs/promises";import N from"node:path";import{readFile as lc,readdir as uc,stat as fc,writeFile as pr}from"node:fs/promises";import T from"node:path";async function lt(e){return JSON.parse(await lc(e,"utf8"))}o(lt,"readJson");async function pc(e){try{return await fc(e),!0}catch{return!1}}o(pc,"pathExists");async function ut(e){return(await uc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>T.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(ut,"listDirectories");async function Oe(e){let t=await pc(T.join(e,"runs"))?T.join(e,"runs"):e,n=(await ut(t)).filter(i=>T.basename(i).startsWith("eval-")),r={};for(let i of n){let s=T.join(i,"eval_metadata.json"),c=(await lt(s).catch(()=>({}))).eval_id??T.basename(i);for(let d of await ut(i)){let l=T.basename(d),u=(await ut(d)).filter(f=>T.basename(f).startsWith("run-"));if(u.length!==0){r[l]??=[];for(let f of u){let p=await lt(T.join(f,"grading.json")).catch(()=>null);if(!p)continue;let g=await lt(T.join(f,"timing.json")).catch(()=>({}));r[l].push({eval_id:c,run_id:T.basename(f),pass_rate:p.summary?.pass_rate??0,passed:p.summary?.passed??0,failed:p.summary?.failed??0,total:p.summary?.total??0,time_seconds:g.total_duration_seconds??p.timing?.total_duration_seconds??0,tokens:g.total_tokens??p.execution_metrics?.output_chars??0,tool_calls:p.execution_metrics?.total_tool_calls??0,errors:p.execution_metrics?.errors_encountered??0,expectations:Array.isArray(p.expectations)?p.expectations:[],notes:[...p.user_notes_summary?.uncertainties??[],...p.user_notes_summary?.needs_review??[],...p.user_notes_summary?.workarounds??[]]})}}}}return r}o(Oe,"loadRunResults");function mc(e){let t={};for(let[s,a]of Object.entries(e))t[s]={pass_rate:Pe(a.map(c=>Number(c.pass_rate??0))),time_seconds:Pe(a.map(c=>Number(c.time_seconds??0))),tokens:Pe(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:Me(r.pass_rate.mean-i.pass_rate.mean),time_seconds:Me(r.time_seconds.mean-i.time_seconds.mean),tokens:Me(r.tokens.mean-i.tokens.mean)}}}o(mc,"summarizeConfigs");function ft(e,t,n){let r=mc(n);return{skill_name:t,generated_at:new Date().toISOString(),workspace:T.resolve(e),configs:r.configs,delta:r.delta,runs:n}}o(ft,"buildBenchmarkDocument");function gc(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(`
296
+ `)}o(gc,"renderBenchmarkMarkdown");function hc(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(hc,"parseArgs");async function yc(){let{iterationDir:e,skillName:t}=hc(process.argv);e||(console.error("Usage: node scripts/aggregate-benchmark.js <iteration-dir> --skill-name <name>"),process.exit(1));let n=await Oe(e);Object.keys(n).length===0&&(console.error(`No benchmark runs found in ${e}`),process.exit(1));let r=ft(e,t,n),i=T.join(e,"benchmark.json"),s=T.join(e,"benchmark.md");await pr(i,JSON.stringify(r,null,2)),await pr(s,`${gc(r)}
297
+ `),console.log(`Wrote ${i}`),console.log(`Wrote ${s}`)}o(yc,"main");var wc=!1;wc&&yc().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});function $e(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o($e,"normalizeStringArray");function vc(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(vc,"summarizeFailureClusters");function bc(e,t,n){let r=J(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:$e(r.key_findings),variance_hotspots:$e(r.variance_hotspots),suggested_actions:$e(r.suggested_actions),watchouts:$e(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(bc,"normalizeAnalysisResult");function kc(e){return`${e.agentInstructions.trim()}
298
+
299
+ Return JSON with this shape:
300
+ {
301
+ "verdict": "improves | regresses | mixed | inconclusive",
302
+ "release_readiness": "ready | needs_iteration | needs_manual_review",
303
+ "recommendation": "short recommendation",
304
+ "key_findings": [],
305
+ "variance_hotspots": [],
306
+ "suggested_actions": [],
307
+ "watchouts": []
308
+ }
309
+
310
+ ## Benchmark Summary
311
+ ${I(JSON.stringify({skill_name:e.benchmark.skill_name,configs:e.benchmark.configs,delta:e.benchmark.delta},null,2),12e3)}
312
+
313
+ ## Failure Clusters
314
+ ${I(JSON.stringify(e.failureClusters,null,2),8e3)}
315
+ `}o(kc,"buildAnalysisPrompt");async function Sc(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:N.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(Sc,"defaultRunAnalyst");function xc(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(`
316
+ `)}
317
+ `}o(xc,"renderAnalysisMarkdown");async function Ec(e,t=Sc){let n=N.resolve(e.workspaceDir),r=N.resolve(e.benchmarkPath??N.join(n,"benchmark.json")),i=await P(r,null);if(!i){let g=await Oe(n);if(Object.keys(g).length===0)throw new Error(`No benchmark data found in ${n}`);i=ft(n,e.skillName??N.basename(n),g),await pt(r,`${JSON.stringify(i,null,2)}
318
+ `,"utf8")}let s=await Oe(n),a=vc(s),c=await Y(import.meta.url,"../agents/analyzer.md"),d=kc({agentInstructions:c,benchmark:i,failureClusters:a}),l=await t(d,{...e,workspaceDir:n,benchmarkPath:r,benchmark:i}),u=bc(l,i,a),f=N.resolve(e.outputPath??N.join(n,"analysis.json")),p=N.resolve(e.markdownPath??N.join(n,"analysis.md"));return await pt(f,`${JSON.stringify(u,null,2)}
319
+ `,"utf8"),await pt(p,xc(u),"utf8"),{analysis:u,prompt:d,rawResponse:l,analysisJsonPath:f,analysisMdPath:p}}o(Ec,"analyzeBenchmark");function Ic(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(Ic,"parseArgs");async function mr(e=process.argv){let t=Ic(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 Ec(t);process.stdout.write(`${JSON.stringify({analysis:n.analysis,analysis_json:n.analysisJsonPath,analysis_md:n.analysisMdPath},null,2)}
320
+ `)}o(mr,"main");var Rc=!1;Rc&&mr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as Tc,readFile as gr,writeFile as hr}from"node:fs/promises";import x from"node:path";async function gt(e){return(await Tc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>x.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(gt,"listDirectories");function mt(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(mt,"normalizeStringArray");function _c(e){let t=J(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:mt(t.strengths_a),strengths_b:mt(t.strengths_b),risks:mt(t.risks)}}o(_c,"normalizeComparisonResult");async function Cc(e,t,n,r){let i=(await gt(x.join(e,t))).filter(f=>x.basename(f).startsWith("run-")),s=(await gt(x.join(e,n))).filter(f=>x.basename(f).startsWith("run-")),a=i[r],c=s[r];if(!a||!c)return null;let d=await P(x.join(e,"eval_metadata.json"),{}),l=await gr(x.join(a,"outputs","result.md"),"utf8").catch(()=>""),u=await gr(x.join(c,"outputs","result.md"),"utf8").catch(()=>"");return{evalDir:e,evalMetadata:d,runA:{runDir:a,runId:x.basename(a),configName:t,output:l},runB:{runDir:c,runId:x.basename(c),configName:n,output:u}}}o(Cc,"loadComparisonPair");function Ac(e){let t=e.presentPrimaryFirst?{A:e.runA,B:e.runB}:{A:e.runB,B:e.runA};return`${e.agentInstructions.trim()}
321
+
322
+ Return JSON with this shape:
323
+ {
324
+ "winner": "A | B | tie | inconclusive",
325
+ "confidence": 0.0,
326
+ "rationale": "short explanation",
327
+ "strengths_a": [],
328
+ "strengths_b": [],
329
+ "risks": []
330
+ }
331
+
332
+ Judge only the visible outputs. Do not mention hidden config names in the rationale.
333
+
334
+ ## Eval Prompt
335
+ ${I(e.evalMetadata.prompt??"",4e3)}
336
+
337
+ ## Expected Outcome
338
+ ${I(e.evalMetadata.expected_output??"",2e3)}
339
+
340
+ ## Assertions
341
+ ${I(JSON.stringify(e.evalMetadata.assertions??[],null,2),4e3)}
342
+
343
+ ## Candidate A
344
+ ${I(t.A.output,12e3)}
345
+
346
+ ## Candidate B
347
+ ${I(t.B.output,12e3)}
348
+ `}o(Ac,"buildComparisonPrompt");async function Pc(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(Pc,"defaultRunComparator");function Mc(e,t,n,r){return e==="A"?t?n:r:e==="B"?t?r:n:e}o(Mc,"mapWinnerToConfig");function Oc(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(`
349
+ `)}
350
+ `}o(Oc,"renderComparisonMarkdown");async function $c(e,t=Pc){let n=x.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 Y(import.meta.url,"../agents/comparator.md"),c=[];for(let f of await gt(n))if(x.basename(f).startsWith("eval-"))for(let p=0;p<s;p+=1){let g=await Cc(f,r,i,p);if(!g)break;let m=c.length%2===0,_=Ac({agentInstructions:a,evalMetadata:g.evalMetadata,runA:g.runA,runB:g.runB,presentPrimaryFirst:m}),k=await t(_,{...e,workspaceDir:n,evalDir:f,pairIndex:p,configA:r,configB:i}),h=_c(k),S=Mc(h.winner,m,r,i);c.push({index:c.length+1,eval_id:g.evalMetadata.eval_id??null,eval_name:g.evalMetadata.eval_name??null,run_a:x.relative(n,g.runA.runDir).replace(/\\/g,"/"),run_b:x.relative(n,g.runB.runDir).replace(/\\/g,"/"),presented_as:m?{A:r,B:i}:{A:i,B:r},winner_label:h.winner,winner_config:S,confidence:h.confidence,rationale:h.rationale,strengths_a:h.strengths_a,strengths_b:h.strengths_b,risks:h.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=x.resolve(e.outputPath??x.join(n,"comparison.json")),u=x.resolve(e.markdownPath??x.join(n,"comparison.md"));return await hr(l,`${JSON.stringify(d,null,2)}
351
+ `,"utf8"),await hr(u,Oc(d),"utf8"),{document:d,outputPath:l,markdownPath:u}}o($c,"compareWorkspace");function Dc(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(Dc,"parseArgs");async function yr(e=process.argv){let t=Dc(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 $c(t);process.stdout.write(`${JSON.stringify({comparison:n.document.summary,output:n.outputPath,markdown:n.markdownPath},null,2)}
352
+ `)}o(yr,"main");var Nc=!1;Nc&&yr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as Lc,writeFile as jc}from"node:fs/promises";import{createHash as Fc}from"node:crypto";import ht from"node:path";import{zipSync as Kc,strToU8 as Xc}from"fflate";var Bc=".kodax-package.json";function Uc(e){return e instanceof Uint8Array?e:new Uint8Array(e)}o(Uc,"toUint8Array");function Wc(e){return Fc("sha256").update(e).digest("hex")}o(Wc,"sha256");function qc(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(qc,"createPackageManifest");async function zc(e,t={}){let n=await ue(e);if(!n.valid)throw new Error(`Cannot package invalid skill:
353
+ - ${n.errors.join(`
354
+ - `)}`);let r=await ce(e),i=await it(e),s=[];for(let d of i){if(d.relativePath.endsWith(".skill"))continue;let l=Uc(await Lc(d.absolutePath));s.push({...d,bytes:l,sha256:Wc(l)})}let a=qc(r,s,t),c={[Bc]:Xc(JSON.stringify(a,null,2))};for(let d of s)c[d.relativePath]=d.bytes;return{manifest:a,bytes:Kc(c,{level:6})}}o(zc,"buildSkillPackage");async function Hc(e,t,n={}){let r=await zc(e,n);return await jc(t,r.bytes),{...r,outputPath:ht.resolve(t)}}o(Hc,"writeSkillPackage");function Vc(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(Vc,"parseArgs");async function wr(e=process.argv){let t=Vc(e);t.skillDir||(console.error("Usage: node scripts/package-skill.js <skill-dir> [--output <file.skill>]"),process.exit(1));let n=await ce(t.skillDir),r=t.output??ht.join(ht.dirname(t.skillDir),`${n.frontmatter.name}.skill`),i=await Hc(t.skillDir,r);console.log(`Wrote ${i.outputPath}`)}o(wr,"main");var Gc=!1;Gc&&wr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{cp as Jc,mkdir as yt,readFile as kr,rm as Sr,stat as Yc,writeFile as Qc}from"node:fs/promises";import M from"node:path";import{strFromU8 as vr,unzipSync as Zc}from"fflate";var br=".kodax-package.json";function ed(e){return e.replace(/\\/g,"/").replace(/^\.?\//,"")}o(ed,"normalizeArchivePath");function td(e){let t=ed(e);if(!t||t.startsWith("/")||t.includes("../"))throw new Error(`Unsafe archive entry path: ${e}`);return t}o(td,"assertSafeArchivePath");function nd(e){return/\.(skill|zip)$/i.test(e)}o(nd,"isZipLike");function rd(e){let t=Zc(e),n=Object.entries(t).map(([l,u])=>({relativePath:td(l),bytes:u})),r=n.find(l=>l.relativePath==="SKILL.md");if(!r)throw new Error("Archive is missing SKILL.md");let i=Ae(vr(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===br),d=c?JSON.parse(vr(c.bytes)):null;return{skillName:s,manifest:d,entries:n.filter(l=>l.relativePath!==br)}}o(rd,"readSkillPackageBuffer");async function od(e,t){if(await de(e)){if(!t)throw new Error(`Target skill already exists: ${e}`);await Sr(e,{recursive:!0,force:!0})}await yt(e,{recursive:!0})}o(od,"ensureInstallTarget");async function id(e,t={}){let n=M.resolve(t.skillsDir??le()),r=rd(await kr(e)),i=M.join(n,r.skillName);await od(i,t.force===!0);for(let s of r.entries){let a=M.join(i,s.relativePath);await yt(M.dirname(a),{recursive:!0}),await Qc(a,s.bytes)}return{skillName:r.skillName,installedTo:i,source:M.resolve(e),manifest:r.manifest}}o(id,"installSkillArchive");async function sd(e,t={}){let n=await ue(e);if(!n.valid)throw new Error(`Cannot install invalid skill:
355
+ - ${n.errors.join(`
356
+ - `)}`);let r=M.join(e,"SKILL.md"),i=Ae(await kr(r,"utf8")),s=M.resolve(t.skillsDir??le()),a=M.join(s,i.frontmatter.name);if(await de(a)){if(!t.force)throw new Error(`Target skill already exists: ${a}`);await Sr(a,{recursive:!0,force:!0})}return await yt(s,{recursive:!0}),await Jc(e,a,{recursive:!0}),{skillName:i.frontmatter.name,installedTo:a,source:M.resolve(e),manifest:null}}o(sd,"installSkillDirectory");async function ad(e,t={}){let n=M.resolve(e),r=await Yc(n).catch(()=>null);if(!r)throw new Error(`Input not found: ${n}`);if(r.isDirectory())return sd(n,t);if(r.isFile()&&nd(n))return id(n,t);throw new Error("Input must be a skill directory or a .skill/.zip archive.")}o(ad,"installSkill");function cd(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(cd,"parseArgs");async function xr(e=process.argv){let t=cd(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 ad(t.input,t);console.log(`Installed ${n.skillName} to ${n.installedTo}`)}o(xr,"main");var dd=!1;dd&&xr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});var RE=1440*60*1e3;var OE=5*6e4;var kI=new Intl.Segmenter("zh-CN",{granularity:"word"});var ER=String.raw`const TOOL_NAME = 'echo_tool';
91
357
  const RESOURCE_URI = 'memory://guide';
92
358
  const PROMPT_NAME = 'draft_prompt';
93
359
  let buffer = '';
@@ -267,9 +533,9 @@ process.stdin.on('data', (chunk) => {
267
533
 
268
534
  process.on('SIGTERM', () => process.exit(0));
269
535
  process.on('SIGINT', () => process.exit(0));
270
- `;var Ht=Object.freeze(["message","label","compaction","branch_summary","archive_marker","rewind_marker","artifact_ledger","memory_outcome_digest","memory_review_receipt"]),es=0,ts=0,Vt=t(e=>{let n=e==="label"?++es:++ts,r=Math.random().toString(36).slice(2,8);return`${e}-${Date.now()}-${n}-${r}`},"nextId");async function ns(e,n,r){let o=Vt("label");return await e.append({id:o,ts:Date.now(),type:"label",payload:{targetId:n,label:r}}),o}t(ns,"appendLabel");async function rs(e,n,r){let o=Vt("artifact");return await e.append({id:o,ts:Date.now(),type:"artifact_ledger",payload:{ref:n,summary:r}}),o}t(rs,"appendArtifact");function os(e){let n=[],r=new Map,o=[],i=null;for(let s of e){if(s.type==="label"){let a=s.payload;a?.targetId&&o.push({targetId:a.targetId,label:a.label});continue}let c={entry:s,children:[]};if(s.type==="message"){n.push(c),r.set(s.id,c),i=c;continue}i?i.children.push(c):n.push(c)}for(let{targetId:s,label:c}of o){let a=r.get(s);a&&c!==void 0&&(a.label=c)}return n}t(os,"buildLineageTree");var is=Object.freeze({name:"lineage",entryTypes:Ht,operators:Object.freeze({label:t((async(e,...n)=>{let[r,o]=n;return ns(e,r,o)}),"label"),attachArtifact:t((async(e,...n)=>{let[r,o]=n;return rs(e,r,o)}),"attachArtifact")}),reducers:Object.freeze({buildLineageTree:t(e=>os(e),"buildLineageTree")})});var ms=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"]),ke=ms,Z=`[\u5BF9\u8BDD\u5386\u53F2\u6458\u8981]
536
+ `;var _r=Object.freeze(["message","label","compaction","branch_summary","archive_marker","rewind_marker","artifact_ledger","memory_outcome_digest","memory_review_receipt"]),Ad=0,Pd=0,Cr=o(e=>{let t=e==="label"?++Ad:++Pd,n=Math.random().toString(36).slice(2,8);return`${e}-${Date.now()}-${t}-${n}`},"nextId");async function Md(e,t,n){let r=Cr("label");return await e.append({id:r,ts:Date.now(),type:"label",payload:{targetId:t,label:n}}),r}o(Md,"appendLabel");async function Od(e,t,n){let r=Cr("artifact");return await e.append({id:r,ts:Date.now(),type:"artifact_ledger",payload:{ref:t,summary:n}}),r}o(Od,"appendArtifact");function $d(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($d,"buildLineageTree");var Dd=Object.freeze({name:"lineage",entryTypes:_r,operators:Object.freeze({label:o((async(e,...t)=>{let[n,r]=t;return Md(e,n,r)}),"label"),attachArtifact:o((async(e,...t)=>{let[n,r]=t;return Od(e,n,r)}),"attachArtifact")}),reducers:Object.freeze({buildLineageTree:o(e=>$d(e),"buildLineageTree")})});var Wd=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"]),vt=Wd,De=`[\u5BF9\u8BDD\u5386\u53F2\u6458\u8981]
271
537
 
272
- `;var LS=Z.trimEnd();var vs={enabled:!1,maxAge:20,protectedTools:Array.from(ke)};import Fx from"typescript";var nI=new Intl.Segmenter("en",{granularity:"grapheme"});var Vs=Ws(import.meta.url),jT=process.env.KODAX_BUNDLED==="true"?void 0:Hs(Vs.resolve("@anthropic-ai/sandbox-runtime")).href;var KT=[".ssh",".aws",".azure",".gnupg",".kube",".docker",".kodax",".agents",tn.join(".config","gcloud"),tn.join(".config","gh"),".env",".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"],nn=JSON.stringify(V),Ee=JSON.stringify(H),Gs=String.raw`
538
+ `;var BT=De.trimEnd();var UT=16*1024;var Gd={enabled:!1,maxAge:20,protectedTools:Array.from(vt)};import JC from"typescript";var fP=new Intl.Segmenter("en",{granularity:"grapheme"});var Rl=xl(import.meta.url),nO=process.env.KODAX_BUNDLED==="true"?void 0:Il(Rl.resolve("@anthropic-ai/sandbox-runtime")).href;var rO=[".ssh",".aws",".azure",".gnupg",".kube",".docker",".kodax",".agents",".codex",".claude",".gemini",".direnv",".terraform.d",y.join(".cargo","credentials.toml"),y.join(".config","gcloud"),y.join(".config","gh"),y.join(".config","openai"),y.join(".config","anthropic"),".gitconfig",y.join(".config","git","config"),".terraformrc",y.join(".config","pypoetry","auth.toml"),".condarc",".bashrc",".bash_profile",".zshrc",".zprofile",".profile",y.join(".config","fish","config.fish"),y.join(".config","fish","fish_variables"),".bash_history",".zsh_history",y.join(".m2","settings.xml"),y.join(".m2","settings-security.xml"),y.join(".gradle","gradle.properties"),y.join(".nuget","NuGet","NuGet.Config"),y.join(".pip","pip.conf"),y.join(".config","pip","pip.conf"),y.join(".cache","huggingface","token"),y.join(".huggingface","token"),y.join(".config","rclone","rclone.conf"),y.join(".local","share","keyrings"),y.join("Library","Keychains"),y.join("AppData","Roaming","Microsoft","Protect"),y.join("AppData","Roaming","Microsoft","Credentials"),y.join("AppData","Roaming","Microsoft","Vault"),y.join("AppData","Local","Microsoft","Credentials"),y.join("AppData","Local","Microsoft","Protect"),y.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"],Nr=JSON.stringify(Se),kt=JSON.stringify(ke),Tl=String.raw`
273
539
  const { spawn } = require('node:child_process');
274
540
  const { writeSync } = require('node:fs');
275
541
  const input = JSON.parse(Buffer.from(process.argv[2], 'base64').toString('utf8'));
@@ -294,7 +560,7 @@ child.once('error', (error) => {
294
560
  child.once('exit', (code, signal) => {
295
561
  process.exitCode = signal ? 1 : code ?? 1;
296
562
  });
297
- `,on="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",Js=JSON.stringify(on),sn=Buffer.from(Gs,"utf8").toString("base64"),Ys=JSON.stringify(sn),FT=String.raw`
563
+ `,jr="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",_l=JSON.stringify(jr),Fr=Buffer.from(Tl,"utf8").toString("base64"),Cl=JSON.stringify(Fr),oO=String.raw`
298
564
  import { spawn } from 'node:child_process';
299
565
  import { randomUUID } from 'node:crypto';
300
566
  import { readFile, rm, writeFile } from 'node:fs/promises';
@@ -395,10 +661,10 @@ let normalFallbackAttempted = false;
395
661
  const runDirect = async () => {
396
662
  const internalElectronNode = request.command === process.execPath && process.versions.electron !== undefined;
397
663
  const directArgs = internalElectronNode
398
- ? ['--import', ${nn}, ...request.args]
664
+ ? ['--import', ${Nr}, ...request.args]
399
665
  : request.args;
400
666
  const directEnv = internalElectronNode
401
- ? { ...request.env, [${Ee}]: '1' }
667
+ ? { ...request.env, [${kt}]: '1' }
402
668
  : request.env;
403
669
  child = spawn(request.command, directArgs, {
404
670
  cwd: request.cwd,
@@ -465,13 +731,13 @@ try {
465
731
  : "'" + value.replaceAll("'", "'\"'\"'") + "'";
466
732
  const internalElectronNode = request.command === process.execPath && process.versions.electron !== undefined;
467
733
  const childArgs = internalElectronNode
468
- ? ['--import', ${nn}, ...request.args]
734
+ ? ['--import', ${Nr}, ...request.args]
469
735
  : request.args;
470
736
  const command = [
471
737
  quote(bootstrap),
472
738
  '-e',
473
- quote(${Js}),
474
- ${Ys},
739
+ quote(${_l}),
740
+ ${Cl},
475
741
  Buffer.from(JSON.stringify({
476
742
  command: request.command,
477
743
  args: childArgs,
@@ -482,7 +748,7 @@ try {
482
748
  if (process.platform === 'win32') {
483
749
  const wrapped = await SandboxManager.wrapWithSandboxArgv(command, 'cmd', undefined, undefined, request.cwd);
484
750
  const requestedEnv = internalElectronNode || bootstrapIsElectronNode
485
- ? { ...request.env, [${Ee}]: '1' }
751
+ ? { ...request.env, [${kt}]: '1' }
486
752
  : request.env;
487
753
  const childArgv = withWindowsChildEnvironment(wrapped.argv, requestedEnv);
488
754
  child = spawn(childArgv[0], childArgv.slice(1), {
@@ -495,7 +761,7 @@ try {
495
761
  } else {
496
762
  const wrapped = await SandboxManager.wrapWithSandbox(command);
497
763
  const childEnv = internalElectronNode || bootstrapIsElectronNode
498
- ? { ...request.env, [${Ee}]: '1' }
764
+ ? { ...request.env, [${kt}]: '1' }
499
765
  : request.env;
500
766
  child = spawn(wrapped, {
501
767
  cwd: request.cwd,
@@ -557,7 +823,7 @@ try {
557
823
  process.exitCode = 1;
558
824
  }
559
825
  }
560
- `;function xe(e){return e instanceof Error?e.message:String(e)}t(xe,"errorText");function Qs(){return process.env.KODAX_A2A_NODE??(process.env.KODAX_BUNDLED==="true"?"node":process.execPath)}t(Qs,"sandboxJavaScriptCommand");var XT=5*6e4;function Zs(e,n){let r=e.lastIndexOf("--");if(r<0)throw new Error("ASRT Windows wrapper omitted its child separator.");let o=new Set;for(let a=0;a<r-1;a+=1){if(e[a]!=="--env")continue;let d=e[a+1]?.split("=",1)[0];d&&o.add(d.toLowerCase())}let i=[];for(let[a,d]of Object.entries(n)){if(d===void 0)continue;if(!a||a.includes("=")||a.includes("\0")||d.includes("\0"))throw new Error("Invalid environment entry for ASRT Windows child.");let f=a.toLowerCase();o.has(f)&&f!=="path"&&f!=="pathext"||i.push("--env",`${a}=${d}`)}let s=[...e.slice(0,r),...i,...e.slice(r)];if(s.reduce((a,d)=>a+d.length+3,0)>3e4)throw new Error("ASRT Windows child environment exceeds the CreateProcess command-line limit.");return s}t(Zs,"withWindowsSandboxChildEnvironment");async function ea(e,n){let r=e.bootstrapCommand??Qs(),o=r===process.execPath&&process.versions.electron!==void 0,i=e.command===process.execPath&&process.versions.electron!==void 0,s=i?["--import",V,...e.args]:e.args,c=i||o?{...e.env,[H]:"1"}:e.env,a=t(f=>process.platform==="win32"?`"${f.replaceAll('"','""')}"`:`'${f.replaceAll("'",`'"'"'`)}'`,"quote"),d=[a(r),"-e",a(on),sn,Buffer.from(JSON.stringify({command:e.command,args:s,cwd:e.cwd,targetStartedMarker:n}),"utf8").toString("base64")].join(" ");if(process.platform==="win32"){let f={filesystem:{denyRead:e.config.filesystem.denyRead,allowRead:[],allowWrite:[],denyWrite:e.config.filesystem.denyWrite}},m=await P.wrapWithSandboxArgv(d,"cmd",f,void 0,e.cwd),h=Zs(m.argv,c);return{executable:h[0],args:h.slice(1),env:m.env,shell:!1}}return{executable:await P.wrapWithSandbox(d),args:[],env:c,shell:!0}}t(ea,"wrapSandboxTarget");async function rn(){try{P.cleanupAfterCommand()}catch{}await P.reset().catch(()=>{})}t(rn,"resetSandboxManagerBestEffort");function j(e){Bs(3,`${JSON.stringify(e)}
561
- `)}t(j,"writeWorkspaceSessionResponse");async function an(e){try{let n=JSON.parse(await Us(e,"utf8"));await qs(e,{force:!0}),await P.initialize(n.config,async()=>!0),j({type:"ready",ok:!0});let r=zs.createInterface({input:process.stdin}),o=Promise.resolve();for await(let i of r){let s=JSON.parse(i);o=o.then(async()=>{try{if(s.type==="cleanup"){P.cleanupAfterCommand(),j({id:s.id,type:"result",ok:!0});return}if(!s.request)throw new Error("Missing workspace wrap request.");let c=s.request.targetStartedMarker??`\0KODAX_ASRT_TARGET_STARTED:${Xs()}\0
562
- `,a=await ea(s.request,c);j({id:s.id,type:"result",ok:!0,invocation:a})}catch(c){j({id:s.id,type:"result",ok:!1,error:xe(c)})}})}return await o,await rn(),0}catch(n){try{j({type:"ready",ok:!1,error:xe(n)})}catch(r){process.stderr.write(`ASRT workspace session could not report startup failure: ${xe(r)}
563
- `)}return await rn(),1}}t(an,"runAsrtWorkspaceSessionProcess");var cn=process.argv[2];if(!cn)throw new Error("Missing ASRT workspace session initialization file.");process.exitCode=await an(cn);
826
+ `;function St(e){return e instanceof Error?e.message:String(e)}o(St,"errorText");function Al(){return process.env.KODAX_A2A_NODE??(process.env.KODAX_BUNDLED==="true"?"node":process.execPath)}o(Al,"sandboxJavaScriptCommand");var iO=5*6e4;function Pl(e,t){let n=e.lastIndexOf("--");if(n<0)throw new Error("ASRT Windows wrapper omitted its child separator.");let r=new Set;for(let c=0;c<n-1;c+=1){if(e[c]!=="--env")continue;let d=e[c+1]?.split("=",1)[0];d&&r.add(d.toLowerCase())}let i=[];for(let[c,d]of Object.entries(t)){if(d===void 0)continue;if(!c||c.includes("=")||c.includes("\0")||d.includes("\0"))throw new Error("Invalid environment entry for ASRT Windows child.");let l=c.toLowerCase();r.has(l)&&l!=="path"&&l!=="pathext"||i.push("--env",`${c}=${d}`)}let s=[...e.slice(0,n),...i,...e.slice(n)];if(s.reduce((c,d)=>c+d.length+3,0)>3e4)throw new Error("ASRT Windows child environment exceeds the CreateProcess command-line limit.");return s}o(Pl,"withWindowsSandboxChildEnvironment");async function Ml(e,t){let n=e.bootstrapCommand??Al(),r=n===process.execPath&&process.versions.electron!==void 0,i=e.command===process.execPath&&process.versions.electron!==void 0,s=i?["--import",Se,...e.args]:e.args,a=i||r?{...e.env,[ke]:"1"}:e.env,c=o(l=>process.platform==="win32"?`"${l.replaceAll('"','""')}"`:`'${l.replaceAll("'",`'"'"'`)}'`,"quote"),d=[c(n),"-e",c(jr),Fr,Buffer.from(JSON.stringify({command:e.command,args:s,cwd:e.cwd,targetStartedMarker:t}),"utf8").toString("base64")].join(" ");if(process.platform==="win32"){let l={filesystem:{denyRead:e.config.filesystem.denyRead,allowRead:[],allowWrite:[],denyWrite:e.config.filesystem.denyWrite}},u=await Q.wrapWithSandboxArgv(d,"cmd",l,void 0,e.cwd),f=Pl(u.argv,a);return{executable:f[0],args:f.slice(1),env:u.env,shell:!1}}return{executable:await Q.wrapWithSandbox(d),args:[],env:a,shell:!0}}o(Ml,"wrapSandboxTarget");async function Lr(){try{Q.cleanupAfterCommand()}catch{}await Q.reset().catch(()=>{})}o(Lr,"resetSandboxManagerBestEffort");function fe(e){bl(3,`${JSON.stringify(e)}
827
+ `)}o(fe,"writeWorkspaceSessionResponse");async function Kr(e){try{let t=JSON.parse(await kl(e,"utf8"));await Sl(e,{force:!0}),await Q.initialize(t.config,async()=>!0),fe({type:"ready",ok:!0});let n=El.createInterface({input:process.stdin}),r=Promise.resolve();for await(let i of n){let s=JSON.parse(i);r=r.then(async()=>{try{if(s.type==="cleanup"){Q.cleanupAfterCommand(),fe({id:s.id,type:"result",ok:!0});return}if(!s.request)throw new Error("Missing workspace wrap request.");let a=s.request.targetStartedMarker??`\0KODAX_ASRT_TARGET_STARTED:${vl()}\0
828
+ `,c=await Ml(s.request,a);fe({id:s.id,type:"result",ok:!0,invocation:c})}catch(a){fe({id:s.id,type:"result",ok:!1,error:St(a)})}})}return await r,await Lr(),0}catch(t){try{fe({type:"ready",ok:!1,error:St(t)})}catch(n){process.stderr.write(`ASRT workspace session could not report startup failure: ${St(n)}
829
+ `)}return await Lr(),1}}o(Kr,"runAsrtWorkspaceSessionProcess");var Xr=process.argv[2];if(!Xr)throw new Error("Missing ASRT workspace session initialization file.");process.exitCode=await Kr(Xr);