@kodax-ai/kodax 0.7.78 → 0.7.80
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.
- package/CHANGELOG.md +3556 -3197
- package/README.md +371 -277
- package/README_CN.md +295 -215
- package/config-templates/config.example.jsonc +24 -2
- package/config-templates/integrations/a2a.example.jsonc +23 -7
- package/dist/builtin/skill-creator/scripts/aggregate-benchmark.js +2 -1
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/analyze-benchmark.js +4 -3
- package/dist/builtin/skill-creator/scripts/compare-runs.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/compare-runs.js +4 -3
- package/dist/builtin/skill-creator/scripts/generate-review.js +2 -1
- package/dist/builtin/skill-creator/scripts/grade-evals.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/grade-evals.js +4 -3
- package/dist/builtin/skill-creator/scripts/improve-description.js +2 -1
- package/dist/builtin/skill-creator/scripts/init-skill.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/init-skill.js +4 -3
- package/dist/builtin/skill-creator/scripts/install-skill.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/install-skill.js +4 -3
- package/dist/builtin/skill-creator/scripts/package-skill.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/package-skill.js +4 -3
- package/dist/builtin/skill-creator/scripts/quick-validate.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/quick-validate.js +4 -3
- package/dist/builtin/skill-creator/scripts/run-eval.d.ts +1 -0
- package/dist/builtin/skill-creator/scripts/run-eval.js +4 -3
- package/dist/builtin/skill-creator/scripts/run-loop.js +2 -1
- package/dist/builtin/skill-creator/scripts/run-trigger-eval.js +2 -1
- package/dist/builtin/skill-creator/scripts/utils.d.ts +3 -0
- package/dist/builtin/skill-creator/scripts/utils.js +5 -1
- package/dist/chunks/agent-5PHGNFW3.js +2 -0
- package/dist/chunks/argument-completer-FXRZFMTC.js +2 -0
- package/dist/chunks/chunk-6UENDY33.js +89 -0
- package/dist/chunks/{chunk-6FOJVETH.js → chunk-BWX4YZX3.js} +7 -7
- package/dist/chunks/chunk-CDCCTM5I.js +278 -0
- package/dist/chunks/chunk-CEB5FDND.js +810 -0
- package/dist/chunks/{chunk-2CFHBKRE.js → chunk-E7C4DRD2.js} +2 -2
- package/dist/chunks/chunk-EVXIJPZ6.js +218 -0
- package/dist/chunks/chunk-FQ7NVMSU.js +319 -0
- package/dist/chunks/chunk-GC4JBMBS.js +385 -0
- package/dist/chunks/{chunk-Z3KFRTSB.js → chunk-HTVLCHWH.js} +1 -1
- package/dist/chunks/chunk-IHPH3444.js +655 -0
- package/dist/chunks/{chunk-YAZQTC2L.js → chunk-KHEFUT6O.js} +1 -1
- package/dist/chunks/{chunk-7OEBJGHK.js → chunk-PMKAG4SZ.js} +1 -1
- package/dist/chunks/chunk-RPF5RGWZ.js +479 -0
- package/dist/chunks/{chunk-UID7BLAB.js → chunk-RXXKDR6Y.js} +1 -1
- package/dist/chunks/chunk-T5U4OP2N.js +292 -0
- package/dist/chunks/chunk-TRNAWSXP.js +123 -0
- package/dist/chunks/chunk-UZSHBQER.js +30 -0
- package/dist/chunks/{chunk-TQDBTTIM.js → chunk-VECRQTSD.js} +44 -44
- package/dist/chunks/compaction-config-6J6XCBJS.js +2 -0
- package/dist/chunks/{construction-bootstrap-VQLQGWPY.js → construction-bootstrap-KPCAE3VN.js} +1 -1
- package/dist/chunks/dist-RWEVZOFK.js +2 -0
- package/dist/chunks/{dist-BFT5YIGU.js → dist-WWL2DNIJ.js} +1 -1
- package/dist/chunks/host-OGS2R5J4.js +2 -0
- package/dist/chunks/run-manager-2YMM3BOT.js +2 -0
- package/dist/chunks/{utils-SID4HW2Q.js → utils-2YHRUZYC.js} +1 -1
- package/dist/index.d.ts +21 -20
- package/dist/index.js +4 -4
- package/dist/kodax_bootstrap.js +2 -1
- package/dist/kodax_cli.js +1850 -1476
- package/dist/kodax_resume.js +570 -34
- package/dist/provider-capabilities.json +85 -50
- package/dist/runtime-worker.js +1737 -1369
- package/dist/sandbox-workspace-session.js +285 -19
- package/dist/sdk-a2a.d.ts +19 -13
- package/dist/sdk-a2a.js +8 -8
- package/dist/sdk-agent.d.ts +80 -150
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +186 -66
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.d.ts +3 -3
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.d.ts +7 -7
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.d.ts +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.d.ts +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.d.ts +31 -213
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +230 -31
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-sandbox.js +1 -1
- package/dist/sdk-session.d.ts +8 -8
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/dist/semantic-worker.js +283 -18
- package/dist/types-chunks/{base.d-4e74xDdy.d.ts → base.d-DxG0m09Z.d.ts} +1 -1
- package/dist/types-chunks/{bash-prefix-extractor.d-uAe2Oqda.d.ts → bash-prefix-extractor.d-DStqKIlu.d.ts} +31 -8
- package/dist/types-chunks/{capability-learning.d-CVsdHw4j.d.ts → capability-learning.d-iPSiAmc_.d.ts} +1 -1
- package/dist/types-chunks/{capsule.d-BlSv9l3V.d.ts → capsule.d-BuFJaYxA.d.ts} +14 -21
- package/dist/types-chunks/{types.d-BA-Jwpfs.d.ts → controller.d-C2aHqzHj.d.ts} +344 -11
- package/dist/types-chunks/{guardrail.d-CXDYRgZ3.d.ts → guardrail.d-DM-OK0m3.d.ts} +187 -116
- package/dist/types-chunks/{history-retrieval.d-DtCy7x64.d.ts → history-retrieval.d-DImTKgO6.d.ts} +16 -3
- package/dist/types-chunks/{oauth-login.d-Bgb4rdLN.d.ts → oauth-login.d-6i-vidxv.d.ts} +6 -2
- package/dist/types-chunks/{public-api.d-B3AohsxN.d.ts → public-api.d-CewTvUKV.d.ts} +335 -38
- package/dist/types-chunks/{repl.d-Ie_ZXb_U.d.ts → repl.d-DvXQtgr7.d.ts} +5 -5
- package/dist/types-chunks/{resolver.d-iAQ9ocLB.d.ts → resolver.d-C9IW4fmU.d.ts} +5 -2
- package/dist/types-chunks/{run-manager.d-D1twIhF9.d.ts → run-manager.d-C6ahvZqK.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-DB9KksIx.d.ts → sdk-session-C59RUrri.d.ts} +3 -3
- package/dist/types-chunks/shell-command-sets.d-Dp4UvPLL.d.ts +297 -0
- package/dist/types-chunks/{side-query.d-DTuLPcC5.d.ts → side-query.d-CP1LiRiH.d.ts} +8 -2
- package/dist/types-chunks/{types-D3g6XUQr.d.ts → types-Bf3Y3mW-.d.ts} +1 -1
- package/dist/types-chunks/{types.d-BH0ZkTGf.d.ts → types.d-BzpPDBPV.d.ts} +2 -2
- package/dist/types-chunks/{types.d-DIpZJKUl.d.ts → types.d-CgrXrFrq.d.ts} +16 -2
- package/dist/types-chunks/{types.d-DVDTIfB_.d.ts → types.d-yuJzE82x.d.ts} +4 -4
- package/dist/types-chunks/{utils.d-CVp6bFl9.d.ts → utils.d-BpACJmzt.d.ts} +24 -6
- package/docs/SDK_EMBEDDER_GUIDE.md +1148 -598
- package/package.json +6 -3
- package/dist/chunks/agent-ASP4MS3X.js +0 -2
- package/dist/chunks/argument-completer-JYQ7FX3W.js +0 -2
- package/dist/chunks/chunk-35PPHOQ2.js +0 -292
- package/dist/chunks/chunk-43QNNDHR.js +0 -29
- package/dist/chunks/chunk-5GO6FH7L.js +0 -458
- package/dist/chunks/chunk-5NDCSFOP.js +0 -78
- package/dist/chunks/chunk-6XM4B6K2.js +0 -48
- package/dist/chunks/chunk-6YZUE6NC.js +0 -240
- package/dist/chunks/chunk-KQLQYHWU.js +0 -386
- package/dist/chunks/chunk-NXO6GWSY.js +0 -46
- package/dist/chunks/chunk-T2XZTLYE.js +0 -316
- package/dist/chunks/chunk-VAT2QYXM.js +0 -765
- package/dist/chunks/chunk-YVRYHC4C.js +0 -655
- package/dist/chunks/compaction-config-BQSSIWK5.js +0 -2
- package/dist/chunks/dist-PCFE24YP.js +0 -2
- package/dist/chunks/host-UTFXCYYM.js +0 -2
- package/dist/chunks/run-manager-PJU3WIFJ.js +0 -2
- 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
|
|
2
|
+
var Br=Object.defineProperty;var o=(e,t)=>Br(e,"name",{value:t,configurable:!0});import{createHash as AM,randomUUID as bl}from"node:crypto";import{constants as MM,readdirSync as OM,statSync as $M,writeSync as kl}from"node:fs";import{copyFile as NM,lstat as LM,mkdir as jM,readFile as Sl,realpath as FM,rename as KM,rm as xl,stat as XM,writeFile as BM}from"node:fs/promises";import{createRequire as El}from"node:module";import y from"node:path";import Il from"node:readline";import{fileURLToPath as HM,pathToFileURL as Rl}from"node:url";import{DEFAULT_WINDOWS_PROXY_PORT_RANGE as GM,SandboxManager as Q,getSrtWinPath as JM,getWindowsSandboxUserStatus as YM,grantWindowsAcl as QM,installWindowsSandbox as ZM,resolveSrtWin as eO,revokeWindowsAcl as tO}from"@anthropic-ai/sandbox-runtime";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 ru=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 Du from"@anthropic-ai/sdk";import{parse as ku}from"partial-json";import Yu from"openai";import{ClientSideConnection as yf,PROTOCOL_VERSION as wf,ndJsonStream as vf}from"@agentclientprotocol/sdk";var lf=Object.freeze({status:"terminated"}),uf=Object.freeze({status:"already-exited"}),ff=Object.freeze({status:"unknown"}),pf=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
|
-
|
|
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 Zf=q(),ep=ne();var fp=W(),pp=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 Lp from"@anthropic-ai/sdk";var ve=Gt();var Jt=process.env.KODAX_PROVIDER??"zhipu-coding";var hi=[];function C(e){let t=pe(e),n=hi.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=yi(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}o(mn,"formatKodaXDiagnostic");function yi(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(yi,"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??wi,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 wi(){gn+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${gn}-${e}`}o(wi,"defaultNextSpanId");var hn=0;function vi(){hn+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${hn}-${e}`}o(vi,"defaultNextTraceId");function qe(e={}){let t=e.now??(()=>Date.now()),n=e.id??(e.nextTraceId??vi)(),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 Ii=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var Eh=new Set(Ii);var ke="ELECTRON_RUN_AS_NODE";var Se="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";var gy=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
|
-
|
|
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
|
-
}
|
|
177
|
+
}`,hy=Object.freeze({status:"terminated"}),yy=Object.freeze({status:"already-exited"}),wy=Object.freeze({status:"unknown"});import{Jimp as Hy}from"jimp";var ts=Math.floor(3.75*1024*1024);var rs=1440*60*1e3;import{fileURLToPath as As}from"url";import{dirname as Ps}from"path";var Ms=As(import.meta.url),Jv=Ps(Ms);import{readFile as Ls,readdir as js}from"fs/promises";import{join as X,relative as Fs}from"path";import Cn from"yaml";var Os=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function $s(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($s,"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($s(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 Ds(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(Ds,"normalizeYamlHookEntry");function Ns(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>Ds(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(Ns,"normalizeYamlHookEntryList");function Mn(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of Os){let i=Ns(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 Ls(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 js(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:Fs(t,s).replace(/\\/g,"/")})}}catch{}return n}o(V,"loadSkillFiles");var $n=64*1024,Dn=256*1024;var Kb=1024*1024;var hk=16*1024;var Ik=16*1024;import{execSync as ka}from"child_process";import Sa from"path";var xa=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 xa)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 Ea(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&Sa.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(Ea,"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(!Ea(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return ka(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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}o(Qn,"escapeXml");var nt=120;function Ce(e){return e.replace(/\\/g,"/")}o(Ce,"formatDisplayPath");function Ta(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(Ta,"collectSupportFiles");function _a(e){let t=Ta(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(_a,"buildSupportFileContext");function Ca(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=_a(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(Ca,"buildSkillBlock");async function rt(e,t,n){let r=await se(e.content,t,n);return{content:Ca(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 Aa}from"node:fs";import{mkdir as Pa,readFile as ot,readdir as Ma,stat as er,writeFile as xS}from"node:fs/promises";import Oa from"node:os";import $ from"node:path";import{fileURLToPath as tr,pathToFileURL as $a}from"node:url";import Da 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(Aa(n))return G=await import($a(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 Na(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(Na,"extractFrontmatter");function Ae(e){let{yamlText:t,body:n}=Na(e),r=Da.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 Ma(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(Oa.homedir(),".kodax","skills")}o(le,"getDefaultSkillsDir");async function R(e){return await Pa(e,{recursive:!0}),e}o(R,"ensureDirectory");function La(e){return e.split("-").filter(Boolean).map(t=>t[0]?.toUpperCase()+t.slice(1)).join(" ")}o(La,"titleFromSlug");function ja(e,t){let n=La(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(ja,"renderSkillTemplate");function Fa(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(Fa,"renderEvalTemplate");async function Ka(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"),ja(e.name,r),"utf8"),e.includeEvals!==!1&&(await R(F.join(n,"evals")),await rr(F.join(n,"evals","evals.json"),`${Fa(e.name)}
|
|
226
|
+
`,"utf8")),{skillDir:n,created:["SKILL.md",...e.includeEvals!==!1?["evals/evals.json"]:[],"references/","assets/","scripts/"]}}o(Ka,"initSkill");function Xa(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(Xa,"parseArgs");async function or(e=process.argv){let t=Xa(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 Ka(t);console.log(`Initialized ${n.skillDir}`)}o(or,"main");var Ba=!1;Ba&&or().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import ir from"node:path";var Ua=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=>!Ua.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 Wa=!1;Wa&&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 qa(e){return typeof e=="string"?{text:e}:e&&typeof e=="object"&&typeof e.text=="string"?{text:e.text}:null}o(qa,"normalizeAssertion");function za(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_use").length:t,0)}o(za,"countToolCalls");function Ha(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(Ha,"countToolErrors");function Va(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(Va,"renderTranscript");async function Ga(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(Ga,"readInputFiles");async function Ja(e,t){let n=String(e.prompt??e.query??"").trim();return`${await Ga(e.files,t)}${n}`.trim()}o(Ja,"buildEvalPrompt");async function Ya(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(Ya,"defaultRunAgent");async function Qa(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(Qa,"prepareConfigPrompt");async function Za(e,t,n,r,i){let s=v.join(e,"outputs");await R(s);let a={total_tool_calls:za(i.result.messages),errors_encountered:Ha(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"),Va(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(Za,"writeRunArtifacts");async function ec(e,t=Ya){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(qa).filter(Boolean)},null,2)}
|
|
245
|
+
`,"utf8");let p=await Ja(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 Qa(m,n,p,e),w=await t(S,{...e,configName:m,evalItem:u,runIndex:k});await Za(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(ec,"runEvalWorkspace");function tc(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(tc,"parseArgs");async function ar(e=process.argv){let t=tc(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 ec(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 nc=!1;nc&&ar().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as rc,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 oc(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(oc,"normalizeParsedGrading");async function dt(e){return(await rc(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 ic(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(ic,"loadRunContext");function sc(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(sc,"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 ac(e,t,n=ur){let r=await ic(b.resolve(e)),i=lr(r.evalMetadata),s=await Y(import.meta.url,"../agents/grader.md"),a=sc({...r,agentInstructions:s}),c=await n(a,{...t,runDir:r.runDir,configName:r.configName,evalMetadata:r.evalMetadata,runId:r.runId}),d=oc(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(ac,"gradeRun");async function cc(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 ac(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(cc,"gradeWorkspace");function dc(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(dc,"parseArgs");async function fr(e=process.argv){let t=dc(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 cc(t);process.stdout.write(`${JSON.stringify(n,null,2)}
|
|
295
|
+
`)}o(fr,"main");var lc=!1;lc&&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 uc,readdir as fc,stat as pc,writeFile as pr}from"node:fs/promises";import T from"node:path";async function lt(e){return JSON.parse(await uc(e,"utf8"))}o(lt,"readJson");async function mc(e){try{return await pc(e),!0}catch{return!1}}o(mc,"pathExists");async function ut(e){return(await fc(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 mc(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 gc(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(gc,"summarizeConfigs");function ft(e,t,n){let r=gc(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 hc(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(hc,"renderBenchmarkMarkdown");function yc(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(yc,"parseArgs");async function wc(){let{iterationDir:e,skillName:t}=yc(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,`${hc(r)}
|
|
297
|
+
`),console.log(`Wrote ${i}`),console.log(`Wrote ${s}`)}o(wc,"main");var vc=!1;vc&&wc().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 bc(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(bc,"summarizeFailureClusters");function kc(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(kc,"normalizeAnalysisResult");function Sc(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(Sc,"buildAnalysisPrompt");async function xc(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(xc,"defaultRunAnalyst");function Ec(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(Ec,"renderAnalysisMarkdown");async function Ic(e,t=xc){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=bc(s),c=await Y(import.meta.url,"../agents/analyzer.md"),d=Sc({agentInstructions:c,benchmark:i,failureClusters:a}),l=await t(d,{...e,workspaceDir:n,benchmarkPath:r,benchmark:i}),u=kc(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,Ec(u),"utf8"),{analysis:u,prompt:d,rawResponse:l,analysisJsonPath:f,analysisMdPath:p}}o(Ic,"analyzeBenchmark");function Rc(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(Rc,"parseArgs");async function mr(e=process.argv){let t=Rc(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 Ic(t);process.stdout.write(`${JSON.stringify({analysis:n.analysis,analysis_json:n.analysisJsonPath,analysis_md:n.analysisMdPath},null,2)}
|
|
320
|
+
`)}o(mr,"main");var Tc=!1;Tc&&mr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as _c,readFile as gr,writeFile as hr}from"node:fs/promises";import x from"node:path";async function gt(e){return(await _c(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 Cc(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(Cc,"normalizeComparisonResult");async function Ac(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(Ac,"loadComparisonPair");function Pc(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(Pc,"buildComparisonPrompt");async function Mc(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(Mc,"defaultRunComparator");function Oc(e,t,n,r){return e==="A"?t?n:r:e==="B"?t?r:n:e}o(Oc,"mapWinnerToConfig");function $c(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($c,"renderComparisonMarkdown");async function Dc(e,t=Mc){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 Ac(f,r,i,p);if(!g)break;let m=c.length%2===0,_=Pc({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=Cc(k),S=Oc(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,$c(d),"utf8"),{document:d,outputPath:l,markdownPath:u}}o(Dc,"compareWorkspace");function Nc(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(Nc,"parseArgs");async function yr(e=process.argv){let t=Nc(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 Dc(t);process.stdout.write(`${JSON.stringify({comparison:n.document.summary,output:n.outputPath,markdown:n.markdownPath},null,2)}
|
|
352
|
+
`)}o(yr,"main");var Lc=!1;Lc&&yr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as jc,writeFile as Fc}from"node:fs/promises";import{createHash as Kc}from"node:crypto";import ht from"node:path";import{zipSync as Xc,strToU8 as Bc}from"fflate";var Uc=".kodax-package.json";function Wc(e){return e instanceof Uint8Array?e:new Uint8Array(e)}o(Wc,"toUint8Array");function qc(e){return Kc("sha256").update(e).digest("hex")}o(qc,"sha256");function zc(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(zc,"createPackageManifest");async function Hc(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=Wc(await jc(d.absolutePath));s.push({...d,bytes:l,sha256:qc(l)})}let a=zc(r,s,t),c={[Uc]:Bc(JSON.stringify(a,null,2))};for(let d of s)c[d.relativePath]=d.bytes;return{manifest:a,bytes:Xc(c,{level:6})}}o(Hc,"buildSkillPackage");async function Vc(e,t,n={}){let r=await Hc(e,n);return await Fc(t,r.bytes),{...r,outputPath:ht.resolve(t)}}o(Vc,"writeSkillPackage");function Gc(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(Gc,"parseArgs");async function wr(e=process.argv){let t=Gc(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 Vc(t.skillDir,r);console.log(`Wrote ${i.outputPath}`)}o(wr,"main");var Jc=!1;Jc&&wr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{cp as Yc,mkdir as yt,readFile as kr,rm as Sr,stat as Qc,writeFile as Zc}from"node:fs/promises";import M from"node:path";import{strFromU8 as vr,unzipSync as ed}from"fflate";var br=".kodax-package.json";function td(e){return e.replace(/\\/g,"/").replace(/^\.?\//,"")}o(td,"normalizeArchivePath");function nd(e){let t=td(e);if(!t||t.startsWith("/")||t.includes("../"))throw new Error(`Unsafe archive entry path: ${e}`);return t}o(nd,"assertSafeArchivePath");function rd(e){return/\.(skill|zip)$/i.test(e)}o(rd,"isZipLike");function od(e){let t=ed(e),n=Object.entries(t).map(([l,u])=>({relativePath:nd(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(od,"readSkillPackageBuffer");async function id(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(id,"ensureInstallTarget");async function sd(e,t={}){let n=M.resolve(t.skillsDir??le()),r=od(await kr(e)),i=M.join(n,r.skillName);await id(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 Zc(a,s.bytes)}return{skillName:r.skillName,installedTo:i,source:M.resolve(e),manifest:r.manifest}}o(sd,"installSkillArchive");async function ad(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 Yc(e,a,{recursive:!0}),{skillName:i.frontmatter.name,installedTo:a,source:M.resolve(e),manifest:null}}o(ad,"installSkillDirectory");async function cd(e,t={}){let n=M.resolve(e),r=await Qc(n).catch(()=>null);if(!r)throw new Error(`Input not found: ${n}`);if(r.isDirectory())return ad(n,t);if(r.isFile()&&rd(n))return sd(n,t);throw new Error("Input must be a skill directory or a .skill/.zip archive.")}o(cd,"installSkill");function dd(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(dd,"parseArgs");async function xr(e=process.argv){let t=dd(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 cd(t.input,t);console.log(`Installed ${n.skillName} to ${n.installedTo}`)}o(xr,"main");var ld=!1;ld&&xr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});var IE=1440*60*1e3;var ME=5*6e4;var bI=new Intl.Segmenter("zh-CN",{granularity:"word"});var xR=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
|
|
536
|
+
`;var _r=Object.freeze(["message","label","compaction","branch_summary","archive_marker","rewind_marker","artifact_ledger","memory_outcome_digest","memory_review_receipt"]),Pd=0,Md=0,Cr=o(e=>{let t=e==="label"?++Pd:++Md,n=Math.random().toString(36).slice(2,8);return`${e}-${Date.now()}-${t}-${n}`},"nextId");async function Od(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(Od,"appendLabel");async function $d(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($d,"appendArtifact");function Dd(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(Dd,"buildLineageTree");var Nd=Object.freeze({name:"lineage",entryTypes:_r,operators:Object.freeze({label:o((async(e,...t)=>{let[n,r]=t;return Od(e,n,r)}),"label"),attachArtifact:o((async(e,...t)=>{let[n,r]=t;return $d(e,n,r)}),"attachArtifact")}),reducers:Object.freeze({buildLineageTree:o(e=>Dd(e),"buildLineageTree")})});var qd=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=qd,De=`[\u5BF9\u8BDD\u5386\u53F2\u6458\u8981]
|
|
271
537
|
|
|
272
|
-
`;var
|
|
538
|
+
`;var XT=De.trimEnd();var BT=16*1024;var Jd={enabled:!1,maxAge:20,protectedTools:Array.from(vt)};import GC from"typescript";var uP=new Intl.Segmenter("en",{granularity:"grapheme"});var Tl=El(import.meta.url),rO=process.env.KODAX_BUNDLED==="true"?void 0:Rl(Tl.resolve("@anthropic-ai/sandbox-runtime")).href;var oO=[".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),_l=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
|
-
`,
|
|
563
|
+
`,jr="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",Cl=JSON.stringify(jr),Fr=Buffer.from(_l,"utf8").toString("base64"),Al=JSON.stringify(Fr),iO=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', ${
|
|
664
|
+
? ['--import', ${Nr}, ...request.args]
|
|
399
665
|
: request.args;
|
|
400
666
|
const directEnv = internalElectronNode
|
|
401
|
-
? { ...request.env, [${
|
|
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', ${
|
|
734
|
+
? ['--import', ${Nr}, ...request.args]
|
|
469
735
|
: request.args;
|
|
470
736
|
const command = [
|
|
471
737
|
quote(bootstrap),
|
|
472
738
|
'-e',
|
|
473
|
-
quote(${
|
|
474
|
-
${
|
|
739
|
+
quote(${Cl}),
|
|
740
|
+
${Al},
|
|
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, [${
|
|
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, [${
|
|
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
|
|
561
|
-
`)}
|
|
562
|
-
`,
|
|
563
|
-
`)}return await
|
|
826
|
+
`;function St(e){return e instanceof Error?e.message:String(e)}o(St,"errorText");function Pl(){return process.env.KODAX_A2A_NODE??(process.env.KODAX_BUNDLED==="true"?"node":process.execPath)}o(Pl,"sandboxJavaScriptCommand");var sO=5*6e4;function Ml(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(Ml,"withWindowsSandboxChildEnvironment");async function Ol(e,t){let n=e.bootstrapCommand??Pl(),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=Ml(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(Ol,"wrapSandboxTarget");async function Lr(){try{Q.cleanupAfterCommand()}catch{}await Q.reset().catch(()=>{})}o(Lr,"resetSandboxManagerBestEffort");function fe(e){kl(3,`${JSON.stringify(e)}
|
|
827
|
+
`)}o(fe,"writeWorkspaceSessionResponse");async function Kr(e){try{let t=JSON.parse(await Sl(e,"utf8"));await xl(e,{force:!0}),await Q.initialize(t.config,async()=>!0),fe({type:"ready",ok:!0});let n=Il.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:${bl()}\0
|
|
828
|
+
`,c=await Ol(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);
|