@kodax-ai/kodax 0.7.78 → 0.7.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3475 -3197
- package/README.md +346 -275
- package/README_CN.md +274 -214
- package/config-templates/config.example.jsonc +11 -1
- 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-ASP4MS3X.js → agent-V4AC5JZD.js} +1 -1
- package/dist/chunks/argument-completer-ZPC2MLES.js +2 -0
- package/dist/chunks/{chunk-Z3KFRTSB.js → chunk-67THZRM6.js} +1 -1
- package/dist/chunks/chunk-6GVQDQTQ.js +292 -0
- package/dist/chunks/{chunk-TQDBTTIM.js → chunk-B6UY3VHV.js} +40 -40
- package/dist/chunks/{chunk-7OEBJGHK.js → chunk-BBOVVDQJ.js} +1 -1
- package/dist/chunks/chunk-CR2IF7VF.js +30 -0
- package/dist/chunks/{chunk-UID7BLAB.js → chunk-CXHEZY5G.js} +1 -1
- package/dist/chunks/chunk-EDZ4QILG.js +266 -0
- package/dist/chunks/chunk-GEECPO2H.js +218 -0
- package/dist/chunks/chunk-H5LLM7DB.js +89 -0
- package/dist/chunks/chunk-KLWP7POA.js +467 -0
- package/dist/chunks/{chunk-2CFHBKRE.js → chunk-M4N2JZTZ.js} +2 -2
- package/dist/chunks/{chunk-YAZQTC2L.js → chunk-OWQT3FTE.js} +1 -1
- package/dist/chunks/chunk-Q4M7DJOD.js +319 -0
- package/dist/chunks/{chunk-6FOJVETH.js → chunk-QCZLCLFL.js} +7 -7
- package/dist/chunks/chunk-RQPMGRTR.js +810 -0
- package/dist/chunks/chunk-SG6P4SZS.js +123 -0
- package/dist/chunks/chunk-TSTVAU5E.js +386 -0
- package/dist/chunks/chunk-ZCZZUE5E.js +662 -0
- package/dist/chunks/compaction-config-AEUGVROL.js +2 -0
- package/dist/chunks/{construction-bootstrap-VQLQGWPY.js → construction-bootstrap-K3ZGEN5N.js} +1 -1
- package/dist/chunks/dist-GFJFRPAV.js +2 -0
- package/dist/chunks/{dist-BFT5YIGU.js → dist-JMO47GJV.js} +1 -1
- package/dist/chunks/host-23K2Q6RZ.js +2 -0
- package/dist/chunks/run-manager-PGIR6ITA.js +2 -0
- package/dist/chunks/{utils-SID4HW2Q.js → utils-6LEKJPQN.js} +1 -1
- package/dist/index.d.ts +20 -20
- package/dist/index.js +2 -2
- package/dist/kodax_bootstrap.js +2 -1
- package/dist/kodax_cli.js +1816 -1458
- package/dist/kodax_resume.js +570 -34
- package/dist/provider-capabilities.json +85 -50
- package/dist/runtime-worker.js +1713 -1361
- 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 +73 -141
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.d.ts +29 -60
- 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 +25 -26
- package/dist/sdk-repl.js +2 -2
- package/dist/sdk-runtime.d.ts +227 -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-CNSidpmv.d.ts} +28 -7
- 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-B3q98pLQ.d.ts} +9 -7
- package/dist/types-chunks/{types.d-BA-Jwpfs.d.ts → controller.d-RGV7Pjv9.d.ts} +328 -3
- package/dist/types-chunks/{guardrail.d-CXDYRgZ3.d.ts → guardrail.d-1NLSFTyN.d.ts} +126 -52
- package/dist/types-chunks/{history-retrieval.d-DtCy7x64.d.ts → history-retrieval.d-BAegI14A.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-BpJhHoa7.d.ts} +334 -25
- package/dist/types-chunks/{repl.d-Ie_ZXb_U.d.ts → repl.d-CZ12Ow3X.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-CX3AUocA.d.ts} +1 -1
- package/dist/types-chunks/{sdk-session-DB9KksIx.d.ts → sdk-session-B3cfJKqF.d.ts} +3 -3
- 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-BZ9oXvTV.d.ts} +2 -2
- package/dist/types-chunks/{types.d-DVDTIfB_.d.ts → types.d-C0_rn--1.d.ts} +4 -4
- package/dist/types-chunks/{types.d-DIpZJKUl.d.ts → types.d-CgrXrFrq.d.ts} +16 -2
- package/dist/types-chunks/{utils.d-CVp6bFl9.d.ts → utils.d-CGpHavsU.d.ts} +14 -6
- package/docs/SDK_EMBEDDER_GUIDE.md +1144 -598
- package/package.json +4 -1
- 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 CM,randomUUID as vl}from"node:crypto";import{constants as PM,readdirSync as MM,statSync as OM,writeSync as bl}from"node:fs";import{copyFile as DM,lstat as NM,mkdir as LM,readFile as kl,realpath as jM,rename as FM,rm as Sl,stat as KM,writeFile as XM}from"node:fs/promises";import{createRequire as xl}from"node:module";import y from"node:path";import El from"node:readline";import{fileURLToPath as zM,pathToFileURL as Il}from"node:url";import{DEFAULT_WINDOWS_PROXY_PORT_RANGE as VM,SandboxManager as Q,getSrtWinPath as GM,getWindowsSandboxUserStatus as JM,grantWindowsAcl as YM,installWindowsSandbox as QM,resolveSrtWin as ZM,revokeWindowsAcl as eO}from"@anthropic-ai/sandbox-runtime";import{getEncoding as Nl}from"js-tiktoken";import{AsyncLocalStorage as Ur}from"node:async_hooks";var Wr=new Ur;function pe(e){let t=Wr.getStore()?.credential;return t?Z(e,t,new WeakMap):e}o(pe,"redactScopedProviderCredential");function Z(e,t,n){if(typeof e=="string")return e.split(t).join("[REDACTED_CREDENTIAL]");if(e===null||typeof e!="object")return e;let r=n.get(e);if(r!==void 0)return r;if(e instanceof Error){let s=new Error(Z(e.message,t,n));return n.set(e,s),s.name=e.name,e.stack!==void 0&&(s.stack=Z(e.stack,t,n)),s}if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(Z(a,t,n));return s}let i={};n.set(e,i);for(let[s,a]of Object.entries(Object.getOwnPropertyDescriptors(e))){if(!a.enumerable||!("value"in a))continue;let c=s.split(t).join("[REDACTED_CREDENTIAL]");i[c]=Z(a.value,t,n)}return i}o(Z,"redactCredentialValue");import{AsyncLocalStorage as qr}from"node:async_hooks";var ou=new qr;var ee={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},Et={...ee,multimodalSupport:"image-input"},me={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},It={...me,multimodalSupport:"image-input"};import Nu from"@anthropic-ai/sdk";import{parse as Su}from"partial-json";import Qu from"openai";import{ClientSideConnection as wf,PROTOCOL_VERSION as vf,ndJsonStream as bf}from"@agentclientprotocol/sdk";var uf=Object.freeze({status:"terminated"}),ff=Object.freeze({status:"already-exited"}),pf=Object.freeze({status:"unknown"}),mf=String.raw`
|
|
3
3
|
using System;
|
|
4
4
|
using System.Runtime.InteropServices;
|
|
5
5
|
using System.Text;
|
|
@@ -24,9 +24,49 @@ public static class KodaXNativeProcessSnapshot {
|
|
|
24
24
|
private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
|
|
25
25
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
26
26
|
private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
|
|
27
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
28
|
+
private struct FileTime {
|
|
29
|
+
public uint Low;
|
|
30
|
+
public uint High;
|
|
31
|
+
}
|
|
32
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
33
|
+
private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
|
|
34
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
35
|
+
private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
|
|
36
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
37
|
+
private static extern bool TerminateProcess(IntPtr process, uint exitCode);
|
|
38
|
+
[DllImport("kernel32.dll")]
|
|
39
|
+
private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
|
|
27
40
|
[DllImport("kernel32.dll")]
|
|
28
41
|
private static extern bool CloseHandle(IntPtr handle);
|
|
42
|
+
private static ulong ReadCreationTime(uint processId) {
|
|
43
|
+
var process = OpenProcess(0x1000, false, processId);
|
|
44
|
+
if (process == IntPtr.Zero) return 0;
|
|
45
|
+
try {
|
|
46
|
+
FileTime creation, exit, kernel, user;
|
|
47
|
+
if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
|
|
48
|
+
return ((ulong)creation.High << 32) | creation.Low;
|
|
49
|
+
} finally {
|
|
50
|
+
CloseHandle(process);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
public static int TerminateExact(uint processId, ulong expectedCreationTime) {
|
|
54
|
+
var process = OpenProcess(0x1001, false, processId);
|
|
55
|
+
if (process == IntPtr.Zero) return 0;
|
|
56
|
+
try {
|
|
57
|
+
FileTime creation, exit, kernel, user;
|
|
58
|
+
if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
|
|
59
|
+
var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
|
|
60
|
+
if (actual != expectedCreationTime) return 2;
|
|
61
|
+
return TerminateProcess(process, 1) ? 1 : 0;
|
|
62
|
+
} finally {
|
|
63
|
+
CloseHandle(process);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
29
66
|
public static string ReadRows() {
|
|
67
|
+
FileTime cutoffTime;
|
|
68
|
+
GetSystemTimeAsFileTime(out cutoffTime);
|
|
69
|
+
var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
|
|
30
70
|
var snapshot = CreateToolhelp32Snapshot(2, 0);
|
|
31
71
|
if (snapshot == new IntPtr(-1)) return string.Empty;
|
|
32
72
|
var rows = new StringBuilder();
|
|
@@ -35,7 +75,10 @@ public static class KodaXNativeProcessSnapshot {
|
|
|
35
75
|
try {
|
|
36
76
|
if (!Process32First(snapshot, ref entry)) return string.Empty;
|
|
37
77
|
do {
|
|
38
|
-
|
|
78
|
+
var creationTime = ReadCreationTime(entry.th32ProcessID) / 10000;
|
|
79
|
+
if (creationTime == 0 || creationTime <= cutoff) {
|
|
80
|
+
rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append(',').Append(creationTime).Append('\n');
|
|
81
|
+
}
|
|
39
82
|
entry.dwSize = (uint)Marshal.SizeOf(entry);
|
|
40
83
|
} while (Process32Next(snapshot, ref entry));
|
|
41
84
|
return rows.ToString();
|
|
@@ -43,7 +86,8 @@ public static class KodaXNativeProcessSnapshot {
|
|
|
43
86
|
CloseHandle(snapshot);
|
|
44
87
|
}
|
|
45
88
|
}
|
|
46
|
-
}`;import $e from"node:fs";import Ne from"node:os";import Le from"node:path";var On="gpt-5.4",$n="auto-gemini-3",Nn=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Ln=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function De(e){let n=new Set,r=[];for(let o of e){let i=o.trim();if(!i)continue;let s=i.toLowerCase();n.has(s)||(n.add(s),r.push(i))}return r}t(De,"dedupePreserveOrder");function Dn(){let e=Le.join(Ne.homedir(),".codex","config.toml");try{return $e.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}t(Dn,"readCodexConfiguredModel");function jn(){let e=Le.join(Ne.homedir(),".gemini","settings.json");try{let n=JSON.parse($e.readFileSync(e,"utf8")),r=typeof n.model=="string"?n.model.trim():"";return r||(typeof n.general?.model=="string"?n.general.model.trim():"")||null}catch{return null}}t(jn,"readGeminiConfiguredModel");function C(){return Dn()||On}t(C,"getCodexCliDefaultModel");function T(){return jn()||$n}t(T,"getGeminiCliDefaultModel");function O(){return De([C(),...Nn])}t(O,"getCodexCliKnownModels");function $(){return De([T(),...Ln])}t($,"getGeminiCliKnownModels");var vd=T(),bd=$();var Md=C(),Od=O();import{existsSync as Gn,readFileSync as Jn}from"node:fs";import A from"node:path";import{fileURLToPath as Yn}from"node:url";var je=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Ke=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Fe=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Xe=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Be=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Ue=["count-tokens","models-list","minimal-message","unsupported"];function k(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}t(k,"isPlainObject");function R(e,n){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${n} must be a non-empty string`);return e}t(R,"requireString");function _(e,n){if(e!==void 0)return R(e,n)}t(_,"optionalString");function x(e,n){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${n} must be a non-negative finite number`);return e}}t(x,"optionalNumber");function g(e,n){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${n} must be a boolean`);return e}}t(g,"optionalBoolean");function qe(e,n){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${n} must be an array`);return e.map((r,o)=>R(r,`${n}[${o}]`))}}t(qe,"optionalStringArray");function Fn(e,n){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${n} must be an object`);let r={};for(let[o,i]of Object.entries(e))r[o]=R(i,`${n}.${o}`);return r}t(Fn,"optionalStringMap");function Xn(e,n){if(e!==void 0){if(typeof e!="string"||!Xe.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Xe.join(", ")}, got ${JSON.stringify(e)}`);return e}}t(Xn,"optionalReasoningPreset");function ne(e,n){if(typeof e!="string"||!je.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${je.join(", ")}, got ${JSON.stringify(e)}`);return e}t(ne,"requireReasoningCapability");function Bn(e,n){if(typeof e!="string"||!Ke.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Ke.join(", ")}, got ${JSON.stringify(e)}`);return e}t(Bn,"requireEffortStrategy");function Un(e,n){if(e!==void 0){if(typeof e!="string"||!Fe.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Fe.join(", ")}, got ${JSON.stringify(e)}`);return e}}t(Un,"optionalThinkingStrategy");function We(e,n){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${n} must be an object`);let r=Bn(e.effortStrategy,`${n}.effortStrategy`),o=Xn(e.reasoningPreset,`${n}.reasoningPreset`),i=Un(e.thinkingStrategy,`${n}.thinkingStrategy`),s=_(e.defaultEffort,`${n}.defaultEffort`),c=Fn(e.effortAliases,`${n}.effortAliases`),a=qe(e.disabledEfforts,`${n}.disabledEfforts`),d=qe(e.localRejectEfforts,`${n}.localRejectEfforts`),f=g(e.allowCustomEffort,`${n}.allowCustomEffort`),m=g(e.supportsReasoningEffort,`${n}.supportsReasoningEffort`),h=g(e.supportsReasoningSummary,`${n}.supportsReasoningSummary`),S=g(e.supportsEncryptedReasoningReplay,`${n}.supportsEncryptedReasoningReplay`),u=g(e.supportsAdaptiveThinking,`${n}.supportsAdaptiveThinking`),E=g(e.supportsManualThinkingBudget,`${n}.supportsManualThinkingBudget`),y=g(e.supportsDisabledThinking,`${n}.supportsDisabledThinking`),K=g(e.requiresEffortBetaHeader,`${n}.requiresEffortBetaHeader`),l={effortStrategy:r};if(o!==void 0&&(l.reasoningPreset=o),i!==void 0&&(l.thinkingStrategy=i),s!==void 0&&(l.defaultEffort=s),c!==void 0&&(l.effortAliases=c),a!==void 0&&(l.disabledEfforts=a),d!==void 0&&(l.localRejectEfforts=d),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${n}.supportedEfforts must be an array`);l.supportedEfforts=e.supportedEfforts.map((p,v)=>{if(!k(p))throw new Error(`provider-capabilities.json: ${n}.supportedEfforts[${v}] must be an object`);return{value:R(p.value,`${n}.supportedEfforts[${v}].value`),..._(p.description,`${n}.supportedEfforts[${v}].description`)!==void 0?{description:_(p.description,`${n}.supportedEfforts[${v}].description`)}:{},...g(p.isDefault,`${n}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:g(p.isDefault,`${n}.supportedEfforts[${v}].isDefault`)}:{},...g(p.isUserVisible,`${n}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:g(p.isUserVisible,`${n}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!k(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${n}.budgetByEffort must be an object`);let p={};for(let[v,Re]of Object.entries(e.budgetByEffort))p[v]=x(Re,`${n}.budgetByEffort.${v}`)??0;l.budgetByEffort=p}return f!==void 0&&(l.allowCustomEffort=f),m!==void 0&&(l.supportsReasoningEffort=m),h!==void 0&&(l.supportsReasoningSummary=h),S!==void 0&&(l.supportsEncryptedReasoningReplay=S),u!==void 0&&(l.supportsAdaptiveThinking=u),E!==void 0&&(l.supportsManualThinkingBudget=E),y!==void 0&&(l.supportsDisabledThinking=y),K!==void 0&&(l.requiresEffortBetaHeader=K),l}t(We,"validateReasoningProfile");function ze(e,n){let r=e.reasoningProfile,o=e.reasoningCapabilityV2;if(r!==void 0&&o!==void 0)throw new Error(`provider-capabilities.json: ${n} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return r!==void 0?We(r,`${n}.reasoningProfile`):We(o,`${n}.reasoningCapabilityV2`)}t(ze,"validateReasoningProfileField");function qn(e,n){if(typeof e!="string"||!Be.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Be.join(", ")}, got ${JSON.stringify(e)}`);return e}t(qn,"requireProfileName");function Wn(e,n){if(typeof e!="string"||!Ue.includes(e))throw new Error(`provider-capabilities.json: ${n} must be one of ${Ue.join(", ")}, got ${JSON.stringify(e)}`);return e}t(Wn,"requireVerifyStrategy");function zn(e,n){if(!k(e))throw new Error(`provider-capabilities.json: ${n} must be an object`);let r=R(e.id,`${n}.id`),o=_(e.wireModel,`${n}.wireModel`),i=_(e.displayName,`${n}.displayName`),s=x(e.contextWindow,`${n}.contextWindow`),c=x(e.maxOutputTokens,`${n}.maxOutputTokens`),a=x(e.thinkingBudgetCap,`${n}.thinkingBudgetCap`),d=g(e.replayReasoningContent,`${n}.replayReasoningContent`),f=g(e.strictThinkingSignature,`${n}.strictThinkingSignature`),m=x(e.streamMaxDurationMs,`${n}.streamMaxDurationMs`),h=e.reasoningCapability===void 0?void 0:ne(e.reasoningCapability,`${n}.reasoningCapability`),S=ze(e,n),u={id:r};return o!==void 0&&(u.wireModel=o),i!==void 0&&(u.displayName=i),s!==void 0&&(u.contextWindow=s),c!==void 0&&(u.maxOutputTokens=c),a!==void 0&&(u.thinkingBudgetCap=a),h!==void 0&&(u.reasoningCapability=h),S!==void 0&&(u.reasoningProfile=S),d!==void 0&&(u.replayReasoningContent=d),f!==void 0&&(u.strictThinkingSignature=f),m!==void 0&&(u.streamMaxDurationMs=m),u}t(zn,"validateModelDescriptor");function Hn(e,n){if(e===void 0)return;if(!k(e))throw new Error(`provider-capabilities.json: ${n} must be an object`);let r={};for(let[o,i]of Object.entries(e))r[o]=ne(i,`${n}.${o}`);return r}t(Hn,"validateModelReasoningCapabilities");function Vn(e,n){if(!k(e))throw new Error(`provider-capabilities.json: providers.${n} must be an object`);let r=g(e.cliBridge,`providers.${n}.cliBridge`),o=R(e.apiKeyEnv,`providers.${n}.apiKeyEnv`),i=ne(e.reasoningCapability,`providers.${n}.reasoningCapability`),s=ze(e,`providers.${n}`),c=qn(e.capabilityProfile,`providers.${n}.capabilityProfile`),a=Wn(e.verifyStrategy,`providers.${n}.verifyStrategy`);if(r&&a!=="unsupported")throw new Error(`provider-capabilities.json: providers.${n} is a cliBridge entry but verifyStrategy="${a}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let d=x(e.contextWindow,`providers.${n}.contextWindow`),f=x(e.maxOutputTokens,`providers.${n}.maxOutputTokens`),m=x(e.thinkingBudgetCap,`providers.${n}.thinkingBudgetCap`),h=g(e.supportsThinking,`providers.${n}.supportsThinking`),S=Hn(e.modelReasoningCapabilities,`providers.${n}.modelReasoningCapabilities`),u=_(e.model,`providers.${n}.model`);if(r&&(u!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${n} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!r&&u===void 0)throw new Error(`provider-capabilities.json: providers.${n}.model is required (only cliBridge entries may omit)`);let E;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${n}.models must be an array`);E=e.models.map((l,p)=>zn(l,`providers.${n}.models[${p}]`));let K=new Set([...u===void 0?[]:[u],...E.map(l=>l.id)]);for(let[l,p]of E.entries())if(p.wireModel!==void 0&&!K.has(p.wireModel))throw new Error(`provider-capabilities.json: providers.${n}.models[${l}].wireModel must reference a declared model, got ${JSON.stringify(p.wireModel)}`)}let y={apiKeyEnv:o,reasoningCapability:i,capabilityProfile:c,verifyStrategy:a};return s!==void 0&&(y.reasoningProfile=s),u!==void 0&&(y.model=u),E!==void 0&&(y.models=E),d!==void 0&&(y.contextWindow=d),f!==void 0&&(y.maxOutputTokens=f),m!==void 0&&(y.thinkingBudgetCap=m),h!==void 0&&(y.supportsThinking=h),S!==void 0&&(y.modelReasoningCapabilities=S),r&&(y.cliBridge=!0),y}t(Vn,"validateProviderEntry");function He(e){if(!k(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let n=R(e.updatedAt,"updatedAt");if(!k(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let r={};for(let[o,i]of Object.entries(e.providers))r[o]=Vn(i,o);return{version:1,updatedAt:n,providers:r}}t(He,"validateProviderCapabilitiesJson");var Qn=Object.freeze({native:M,"image-input-native":Ie,"cli-bridge":F,"image-input-cli-bridge":Ce}),q=null;function Zn(){if(process.env.KODAX_BUNDLED==="true")return A.join(A.dirname(process.execPath),"provider-capabilities.json");let e=A.dirname(Yn(import.meta.url)),n=[A.join(e,"provider-capabilities.json"),A.join(A.dirname(e),"provider-capabilities.json")];for(let r of n)if(Gn(r))return r;return n[0]}t(Zn,"resolveJsonPath");function er(e){if(e.models){for(let n of e.models)n.reasoningProfile&&Ve(n.reasoningProfile);for(let n of e.models)Object.freeze(n);Object.freeze(e.models)}return e.reasoningProfile&&Ve(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}t(er,"deepFreezeSnapshot");function Ve(e){if(e.supportedEfforts){for(let n of e.supportedEfforts)Object.freeze(n);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}t(Ve,"freezeReasoningProfile");function tr(e){if(e==="gemini-cli"){let n=T();return{model:n,models:$().filter(r=>r!==n).map(r=>({id:r}))}}if(e==="codex-cli"){let n=C();return{model:n,models:O().filter(r=>r!==n).map(r=>({id:r}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}t(tr,"resolveCliBridgeModels");function nr(e,n){let r=Qn[n.capabilityProfile];if(!r)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${n.capabilityProfile}' for provider '${e}'`);if(n.cliBridge){let i=tr(e),s={model:i.model,models:i.models,apiKeyEnv:n.apiKeyEnv,reasoningCapability:n.reasoningCapability,capabilityProfile:r,verifyStrategy:n.verifyStrategy};return n.reasoningProfile!==void 0&&(s.reasoningProfile=n.reasoningProfile),n.supportsThinking!==void 0&&(s.supportsThinking=n.supportsThinking),s}let o={model:n.model,apiKeyEnv:n.apiKeyEnv,reasoningCapability:n.reasoningCapability,capabilityProfile:r,verifyStrategy:n.verifyStrategy};return n.reasoningProfile!==void 0&&(o.reasoningProfile=n.reasoningProfile),n.models!==void 0&&(o.models=n.models),n.modelReasoningCapabilities!==void 0&&(o.modelReasoningCapabilities=n.modelReasoningCapabilities),n.contextWindow!==void 0&&(o.contextWindow=n.contextWindow),n.maxOutputTokens!==void 0&&(o.maxOutputTokens=n.maxOutputTokens),n.thinkingBudgetCap!==void 0&&(o.thinkingBudgetCap=n.thinkingBudgetCap),n.supportsThinking!==void 0&&(o.supportsThinking=n.supportsThinking),o}t(nr,"buildSnapshot");function Ge(){if(q)return q;let e=Zn(),n;try{let i=Jn(e,"utf8");n=JSON.parse(i)}catch(i){let s=i instanceof Error?i.message:String(i);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let r=He(n),o={};for(let[i,s]of Object.entries(r.providers))o[i]=er(nr(i,s));return q=Object.freeze(o),q}t(Ge,"getProviderSnapshots");import rl from"@anthropic-ai/sdk";var W=Ge();var Je=process.env.KODAX_PROVIDER??"zhipu-coding";var N=class e{static{t(this,"SpanImpl")}id;traceId;parentId;name;data;startedAt;_endedAt;_error;_children=[];now;nextSpanId;onChildCreated;onSpanEnd;_ended=!1;constructor(n){this.id=n.id,this.traceId=n.traceId,this.parentId=n.parentId,this.name=n.name,this.data=n.data,this.now=n.now??(()=>Date.now()),this.startedAt=n.startedAt??this.now(),this.nextSpanId=n.nextSpanId??$r,this.onChildCreated=n.onChildCreated,this.onSpanEnd=n.onSpanEnd}get endedAt(){return this._endedAt}get error(){return this._error}get children(){return this._children}addChild(n,r){let o=new e({id:this.nextSpanId(),traceId:this.traceId,parentId:this.id,name:n,data:r,now:this.now,nextSpanId:this.nextSpanId,onChildCreated:this.onChildCreated,onSpanEnd:this.onSpanEnd});return this._children.push(o),this.onChildCreated&&this.onChildCreated(o),o}setError(n){n instanceof Error?this._error={message:n.message,stack:n.stack}:this._error=n}end(){this._ended||(this._ended=!0,this._endedAt=this.now(),this.onSpanEnd&&this.onSpanEnd(this))}},pt=0;function $r(){pt+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${pt}-${e}`}t($r,"defaultNextSpanId");var mt=0;function Nr(){mt+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${mt}-${e}`}t(Nr,"defaultNextTraceId");function de(e={}){let n=e.now??(()=>Date.now()),r=e.id??(e.nextTraceId??Nr)(),o=n(),i=e.name??"trace",s=e.metadata??new Map,c=e.rootSpanData??{kind:"agent",agentName:i},a=!1,d,f,m=new N({id:`${r}-root`,traceId:r,name:i,data:c,startedAt:o,now:n,nextSpanId:e.nextSpanId,onChildCreated:e.onSpanStart,onSpanEnd:e.onSpanEnd});e.onSpanStart&&e.onSpanStart(m);let h={id:r,startedAt:o,rootSpan:m,metadata:s,get endedAt(){return d},get error(){return f??m.error},end(){a||(a=!0,d=n(),m.end(),e.onTraceEnd&&e.onTraceEnd(h))}};return h}t(de,"createTrace");var le=[];function ue(e){for(let n of le)try{n.onSpanStart(e)}catch{}}t(ue,"_emitSpanStart");function fe(e){for(let n of le)try{n.onSpanEnd(e)}catch{}}t(fe,"_emitSpanEnd");function pe(e){for(let n of le)try{n.onTraceEnd(e)}catch{}}t(pe,"_emitTraceEnd");var z=class{static{t(this,"Tracer")}options;constructor(n={}){this.options=n}startTrace(n={}){return de({id:n.id,name:n.name,rootSpanData:n.rootSpanData,metadata:n.metadata,now:this.options.now,nextSpanId:this.options.nextSpanId,nextTraceId:this.options.nextTraceId,onSpanStart:ue,onSpanEnd:fe,onTraceEnd:pe})}},gt=new z;var Xr=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var Wf=new Set(Xr);var H="ELECTRON_RUN_AS_NODE",V="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";var Lp=String.raw`
|
|
89
|
+
}`;import Mt from"node:fs";import Ot from"node:os";import $t from"node:path";var go="gpt-5.4",ho="auto-gemini-3",yo=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],wo=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function Dt(e){let t=new Set,n=[];for(let r of e){let i=r.trim();if(!i)continue;let s=i.toLowerCase();t.has(s)||(t.add(s),n.push(i))}return n}o(Dt,"dedupePreserveOrder");function vo(){let e=$t.join(Ot.homedir(),".codex","config.toml");try{return Mt.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}o(vo,"readCodexConfiguredModel");function bo(){let e=$t.join(Ot.homedir(),".gemini","settings.json");try{let t=JSON.parse(Mt.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}o(bo,"readGeminiConfiguredModel");function W(){return vo()||go}o(W,"getCodexCliDefaultModel");function q(){return bo()||ho}o(q,"getGeminiCliDefaultModel");function te(){return Dt([W(),...yo])}o(te,"getCodexCliKnownModels");function ne(){return Dt([q(),...wo])}o(ne,"getGeminiCliKnownModels");var ep=q(),tp=ne();var pp=W(),mp=te();import{existsSync as Po,readFileSync as Mo}from"node:fs";import H from"node:path";import{fileURLToPath as Oo}from"node:url";var Nt=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Lt=["openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],jt=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Ft=["zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Kt=["max_tokens","max_completion_tokens"],Xt=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Bt=["count-tokens","models-list","minimal-message","unsupported"];function O(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(O,"isPlainObject");function K(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}o(K,"requireString");function z(e,t){if(e!==void 0)return K(e,t)}o(z,"optionalString");function qt(e,t){if(e!==void 0){if(typeof e!="string"||!Kt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Kt.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(qt,"optionalMaxOutputTokensField");function L(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}o(L,"optionalNumber");function E(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}o(E,"optionalBoolean");function Ut(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,r)=>K(n,`${t}[${r}]`))}}o(Ut,"optionalStringArray");function So(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=K(i,`${t}.${r}`);return n}o(So,"optionalStringMap");function xo(e,t){if(e!==void 0){if(typeof e!="string"||!Ft.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ft.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(xo,"optionalReasoningPreset");function je(e,t){if(typeof e!="string"||!Nt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Nt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(je,"requireReasoningCapability");function Eo(e,t){if(typeof e!="string"||!Lt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Lt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Eo,"requireEffortStrategy");function Io(e,t){if(e!==void 0){if(typeof e!="string"||!jt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${jt.join(", ")}, got ${JSON.stringify(e)}`);return e}}o(Io,"optionalThinkingStrategy");function Wt(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Eo(e.effortStrategy,`${t}.effortStrategy`),r=xo(e.reasoningPreset,`${t}.reasoningPreset`),i=Io(e.thinkingStrategy,`${t}.thinkingStrategy`),s=z(e.defaultEffort,`${t}.defaultEffort`),a=So(e.effortAliases,`${t}.effortAliases`),c=Ut(e.disabledEfforts,`${t}.disabledEfforts`),d=Ut(e.localRejectEfforts,`${t}.localRejectEfforts`),l=E(e.allowCustomEffort,`${t}.allowCustomEffort`),u=E(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),f=E(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),p=E(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),g=E(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),m=E(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),_=E(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),k=E(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),h={effortStrategy:n};if(r!==void 0&&(h.reasoningPreset=r),i!==void 0&&(h.thinkingStrategy=i),s!==void 0&&(h.defaultEffort=s),a!==void 0&&(h.effortAliases=a),c!==void 0&&(h.disabledEfforts=c),d!==void 0&&(h.localRejectEfforts=d),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);h.supportedEfforts=e.supportedEfforts.map((S,w)=>{if(!O(S))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${w}] must be an object`);return{value:K(S.value,`${t}.supportedEfforts[${w}].value`),...z(S.description,`${t}.supportedEfforts[${w}].description`)!==void 0?{description:z(S.description,`${t}.supportedEfforts[${w}].description`)}:{},...E(S.isDefault,`${t}.supportedEfforts[${w}].isDefault`)!==void 0?{isDefault:E(S.isDefault,`${t}.supportedEfforts[${w}].isDefault`)}:{},...E(S.isUserVisible,`${t}.supportedEfforts[${w}].isUserVisible`)!==void 0?{isUserVisible:E(S.isUserVisible,`${t}.supportedEfforts[${w}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!O(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let S={};for(let[w,xt]of Object.entries(e.budgetByEffort))S[w]=L(xt,`${t}.budgetByEffort.${w}`)??0;h.budgetByEffort=S}return l!==void 0&&(h.allowCustomEffort=l),u!==void 0&&(h.supportsReasoningEffort=u),f!==void 0&&(h.supportsReasoningSummary=f),p!==void 0&&(h.supportsEncryptedReasoningReplay=p),g!==void 0&&(h.supportsAdaptiveThinking=g),m!==void 0&&(h.supportsManualThinkingBudget=m),_!==void 0&&(h.supportsDisabledThinking=_),k!==void 0&&(h.requiresEffortBetaHeader=k),h}o(Wt,"validateReasoningProfile");function zt(e,t){let n=e.reasoningProfile,r=e.reasoningCapabilityV2;if(n!==void 0&&r!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?Wt(n,`${t}.reasoningProfile`):Wt(r,`${t}.reasoningCapabilityV2`)}o(zt,"validateReasoningProfileField");function Ro(e,t){if(typeof e!="string"||!Xt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Xt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(Ro,"requireProfileName");function To(e,t){if(typeof e!="string"||!Bt.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Bt.join(", ")}, got ${JSON.stringify(e)}`);return e}o(To,"requireVerifyStrategy");function _o(e,t){if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=K(e.id,`${t}.id`),r=z(e.wireModel,`${t}.wireModel`),i=z(e.displayName,`${t}.displayName`),s=L(e.contextWindow,`${t}.contextWindow`),a=L(e.maxOutputTokens,`${t}.maxOutputTokens`),c=qt(e.maxOutputTokensField,`${t}.maxOutputTokensField`),d=L(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),l=E(e.replayReasoningContent,`${t}.replayReasoningContent`),u=E(e.strictThinkingSignature,`${t}.strictThinkingSignature`),f=L(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),p=e.reasoningCapability===void 0?void 0:je(e.reasoningCapability,`${t}.reasoningCapability`),g=zt(e,t),m={id:n};return r!==void 0&&(m.wireModel=r),i!==void 0&&(m.displayName=i),s!==void 0&&(m.contextWindow=s),a!==void 0&&(m.maxOutputTokens=a),c!==void 0&&(m.maxOutputTokensField=c),d!==void 0&&(m.thinkingBudgetCap=d),p!==void 0&&(m.reasoningCapability=p),g!==void 0&&(m.reasoningProfile=g),l!==void 0&&(m.replayReasoningContent=l),u!==void 0&&(m.strictThinkingSignature=u),f!==void 0&&(m.streamMaxDurationMs=f),m}o(_o,"validateModelDescriptor");function Co(e,t){if(e===void 0)return;if(!O(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=je(i,`${t}.${r}`);return n}o(Co,"validateModelReasoningCapabilities");function Ao(e,t){if(!O(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=E(e.cliBridge,`providers.${t}.cliBridge`),r=K(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=je(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=zt(e,`providers.${t}`),a=Ro(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=To(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&c!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${c}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let d=L(e.contextWindow,`providers.${t}.contextWindow`),l=L(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),u=qt(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),f=L(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),p=E(e.supportsThinking,`providers.${t}.supportsThinking`),g=Co(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),m=z(e.model,`providers.${t}.model`);if(n&&(m!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&m===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let _;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);_=e.models.map((S,w)=>_o(S,`providers.${t}.models[${w}]`));let h=new Set([...m===void 0?[]:[m],..._.map(S=>S.id)]);for(let[S,w]of _.entries())if(w.wireModel!==void 0&&!h.has(w.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${S}].wireModel must reference a declared model, got ${JSON.stringify(w.wireModel)}`)}let k={apiKeyEnv:r,reasoningCapability:i,capabilityProfile:a,verifyStrategy:c};return s!==void 0&&(k.reasoningProfile=s),m!==void 0&&(k.model=m),_!==void 0&&(k.models=_),d!==void 0&&(k.contextWindow=d),l!==void 0&&(k.maxOutputTokens=l),u!==void 0&&(k.maxOutputTokensField=u),f!==void 0&&(k.thinkingBudgetCap=f),p!==void 0&&(k.supportsThinking=p),g!==void 0&&(k.modelReasoningCapabilities=g),n&&(k.cliBridge=!0),k}o(Ao,"validateProviderEntry");function Ht(e){if(!O(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=K(e.updatedAt,"updatedAt");if(!O(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[r,i]of Object.entries(e.providers))n[r]=Ao(i,r);return{version:1,updatedAt:t,providers:n}}o(Ht,"validateProviderCapabilitiesJson");var $o=Object.freeze({native:ee,"image-input-native":Et,"cli-bridge":me,"image-input-cli-bridge":It}),we=null;function Do(){if(process.env.KODAX_BUNDLED==="true")return H.join(H.dirname(process.execPath),"provider-capabilities.json");let e=H.dirname(Oo(import.meta.url)),t=[H.join(e,"provider-capabilities.json"),H.join(H.dirname(e),"provider-capabilities.json")];for(let n of t)if(Po(n))return n;return t[0]}o(Do,"resolveJsonPath");function No(e){if(e.models){for(let t of e.models)t.reasoningProfile&&Vt(t.reasoningProfile);for(let t of e.models)Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&Vt(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}o(No,"deepFreezeSnapshot");function Vt(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}o(Vt,"freezeReasoningProfile");function Lo(e){if(e==="gemini-cli"){let t=q();return{model:t,models:ne().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=W();return{model:t,models:te().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}o(Lo,"resolveCliBridgeModels");function jo(e,t){let n=$o[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);if(t.cliBridge){let i=Lo(e),s={model:i.model,models:i.models,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(s.reasoningProfile=t.reasoningProfile),t.supportsThinking!==void 0&&(s.supportsThinking=t.supportsThinking),s}let r={model:t.model,apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};return t.reasoningProfile!==void 0&&(r.reasoningProfile=t.reasoningProfile),t.models!==void 0&&(r.models=t.models),t.modelReasoningCapabilities!==void 0&&(r.modelReasoningCapabilities=t.modelReasoningCapabilities),t.contextWindow!==void 0&&(r.contextWindow=t.contextWindow),t.maxOutputTokens!==void 0&&(r.maxOutputTokens=t.maxOutputTokens),t.maxOutputTokensField!==void 0&&(r.maxOutputTokensField=t.maxOutputTokensField),t.thinkingBudgetCap!==void 0&&(r.thinkingBudgetCap=t.thinkingBudgetCap),t.supportsThinking!==void 0&&(r.supportsThinking=t.supportsThinking),r}o(jo,"buildSnapshot");function Gt(){if(we)return we;let e=Do(),t;try{let i=Mo(e,"utf8");t=JSON.parse(i)}catch(i){let s=i instanceof Error?i.message:String(i);throw new Error(`provider-capabilities loader: failed to read ${e}: ${s}`)}let n=Ht(t),r={};for(let[i,s]of Object.entries(n.providers))r[i]=No(jo(i,s));return we=Object.freeze(r),we}o(Gt,"getProviderSnapshots");import jp from"@anthropic-ai/sdk";var ve=Gt();var Jt=process.env.KODAX_PROVIDER??"zhipu-coding";var gi=[];function C(e){let t=pe(e),n=gi.at(-1)?.sink;if(n){try{n(t)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${mn(t)}
|
|
90
|
+
`)}catch{}}o(C,"emitKodaXDiagnostic");function mn(e){let t=pe(e),n=hi(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}o(mn,"formatKodaXDiagnostic");function hi(e){if(e===void 0)return"";if(e instanceof Error)return e.stack??e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}o(hi,"formatDiagnosticDetail");var re=class e{static{o(this,"SpanImpl")}id;traceId;parentId;name;data;startedAt;_endedAt;_error;_children=[];now;nextSpanId;onChildCreated;onSpanEnd;_ended=!1;constructor(t){this.id=t.id,this.traceId=t.traceId,this.parentId=t.parentId,this.name=t.name,this.data=t.data,this.now=t.now??(()=>Date.now()),this.startedAt=t.startedAt??this.now(),this.nextSpanId=t.nextSpanId??yi,this.onChildCreated=t.onChildCreated,this.onSpanEnd=t.onSpanEnd}get endedAt(){return this._endedAt}get error(){return this._error}get children(){return this._children}addChild(t,n){let r=new e({id:this.nextSpanId(),traceId:this.traceId,parentId:this.id,name:t,data:n,now:this.now,nextSpanId:this.nextSpanId,onChildCreated:this.onChildCreated,onSpanEnd:this.onSpanEnd});return this._children.push(r),this.onChildCreated&&this.onChildCreated(r),r}setError(t){t instanceof Error?this._error={message:t.message,stack:t.stack}:this._error=t}end(){this._ended||(this._ended=!0,this._endedAt=this.now(),this.onSpanEnd&&this.onSpanEnd(this))}},gn=0;function yi(){gn+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${gn}-${e}`}o(yi,"defaultNextSpanId");var hn=0;function wi(){hn+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${hn}-${e}`}o(wi,"defaultNextTraceId");function qe(e={}){let t=e.now??(()=>Date.now()),n=e.id??(e.nextTraceId??wi)(),r=t(),i=e.name??"trace",s=e.metadata??new Map,a=e.rootSpanData??{kind:"agent",agentName:i},c=!1,d,l,u=new re({id:`${n}-root`,traceId:n,name:i,data:a,startedAt:r,now:t,nextSpanId:e.nextSpanId,onChildCreated:e.onSpanStart,onSpanEnd:e.onSpanEnd});e.onSpanStart&&e.onSpanStart(u);let f={id:n,startedAt:r,rootSpan:u,metadata:s,get endedAt(){return d},get error(){return l??u.error},end(){c||(c=!0,d=t(),u.end(),e.onTraceEnd&&e.onTraceEnd(f))}};return f}o(qe,"createTrace");var ze=[];function He(e){for(let t of ze)try{t.onSpanStart(e)}catch{}}o(He,"_emitSpanStart");function Ve(e){for(let t of ze)try{t.onSpanEnd(e)}catch{}}o(Ve,"_emitSpanEnd");function Ge(e){for(let t of ze)try{t.onTraceEnd(e)}catch{}}o(Ge,"_emitTraceEnd");var be=class{static{o(this,"Tracer")}options;constructor(t={}){this.options=t}startTrace(t={}){return qe({id:t.id,name:t.name,rootSpanData:t.rootSpanData,metadata:t.metadata,now:this.options.now,nextSpanId:this.options.nextSpanId,nextTraceId:this.options.nextTraceId,onSpanStart:He,onSpanEnd:Ve,onTraceEnd:Ge})}},yn=new be;var Ei=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var Ih=new Set(Ei);var ke="ELECTRON_RUN_AS_NODE";var Se="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";var hy=String.raw`
|
|
47
91
|
using System;
|
|
48
92
|
using System.Runtime.InteropServices;
|
|
49
93
|
using System.Text;
|
|
@@ -68,9 +112,49 @@ public static class KodaXNativeProcessSnapshot {
|
|
|
68
112
|
private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
|
|
69
113
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
70
114
|
private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
|
|
115
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
116
|
+
private struct FileTime {
|
|
117
|
+
public uint Low;
|
|
118
|
+
public uint High;
|
|
119
|
+
}
|
|
120
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
121
|
+
private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
|
|
122
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
123
|
+
private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
|
|
124
|
+
[DllImport("kernel32.dll", SetLastError = true)]
|
|
125
|
+
private static extern bool TerminateProcess(IntPtr process, uint exitCode);
|
|
126
|
+
[DllImport("kernel32.dll")]
|
|
127
|
+
private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
|
|
71
128
|
[DllImport("kernel32.dll")]
|
|
72
129
|
private static extern bool CloseHandle(IntPtr handle);
|
|
130
|
+
private static ulong ReadCreationTime(uint processId) {
|
|
131
|
+
var process = OpenProcess(0x1000, false, processId);
|
|
132
|
+
if (process == IntPtr.Zero) return 0;
|
|
133
|
+
try {
|
|
134
|
+
FileTime creation, exit, kernel, user;
|
|
135
|
+
if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
|
|
136
|
+
return ((ulong)creation.High << 32) | creation.Low;
|
|
137
|
+
} finally {
|
|
138
|
+
CloseHandle(process);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
public static int TerminateExact(uint processId, ulong expectedCreationTime) {
|
|
142
|
+
var process = OpenProcess(0x1001, false, processId);
|
|
143
|
+
if (process == IntPtr.Zero) return 0;
|
|
144
|
+
try {
|
|
145
|
+
FileTime creation, exit, kernel, user;
|
|
146
|
+
if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
|
|
147
|
+
var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
|
|
148
|
+
if (actual != expectedCreationTime) return 2;
|
|
149
|
+
return TerminateProcess(process, 1) ? 1 : 0;
|
|
150
|
+
} finally {
|
|
151
|
+
CloseHandle(process);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
73
154
|
public static string ReadRows() {
|
|
155
|
+
FileTime cutoffTime;
|
|
156
|
+
GetSystemTimeAsFileTime(out cutoffTime);
|
|
157
|
+
var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
|
|
74
158
|
var snapshot = CreateToolhelp32Snapshot(2, 0);
|
|
75
159
|
if (snapshot == new IntPtr(-1)) return string.Empty;
|
|
76
160
|
var rows = new StringBuilder();
|
|
@@ -79,7 +163,10 @@ public static class KodaXNativeProcessSnapshot {
|
|
|
79
163
|
try {
|
|
80
164
|
if (!Process32First(snapshot, ref entry)) return string.Empty;
|
|
81
165
|
do {
|
|
82
|
-
|
|
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
|
+
}`,yy=Object.freeze({status:"terminated"}),wy=Object.freeze({status:"already-exited"}),vy=Object.freeze({status:"unknown"});import{Jimp as Vy}from"jimp";var es=Math.floor(3.75*1024*1024);var ns=1440*60*1e3;import{fileURLToPath as Cs}from"url";import{dirname as As}from"path";var Ps=Cs(import.meta.url),Yv=As(Ps);import{readFile as Ns,readdir as Ls}from"fs/promises";import{join as X,relative as js}from"path";import Cn from"yaml";var Ms=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];function Os(e){let t=e.split(`
|
|
178
|
+
`),n=[];for(let r of t){let i=r.indexOf(":");if(i>0){let s=r.slice(0,i).trim(),a=r.slice(i+1).trim();if(a.includes(":")&&!a.startsWith('"')&&!a.startsWith("'")&&!a.startsWith("[")&&!a.startsWith("|")&&!a.startsWith(">")){n.push(`${s}: |-`),n.push(` ${a}`);continue}}n.push(r)}return n.join(`
|
|
179
|
+
`)}o(Os,"sanitizeYaml");function An(e,t={}){let n=e.replace(/^/,"").replace(/\r\n/g,`
|
|
180
|
+
`).replace(/\r/g,`
|
|
181
|
+
`).trimStart();if(!n.startsWith(`---
|
|
182
|
+
`)){if(t.throwOnMissing)throw new Error("Invalid markdown: missing YAML frontmatter");return[null,e]}let r=n.indexOf(`
|
|
183
|
+
---
|
|
184
|
+
`,4);if(r===-1){let c=n.indexOf(`
|
|
185
|
+
---`,4);c!==-1&&c===n.length-4&&(r=c)}if(r===-1){if(t.throwOnMissing)throw new Error("Invalid markdown: unclosed YAML frontmatter");return[null,e]}let i=n.slice(4,r),s=n.slice(r+5).trim(),a;try{a=Cn.parse(i)??{}}catch{a=Cn.parse(Os(i))??{}}if(a==null||typeof a!="object"||Array.isArray(a)){if(t.throwOnMissing)throw new Error("Invalid markdown: YAML frontmatter must be an object");return[null,s]}return[a,s]}o(An,"parseYamlFrontmatter");function Pn(e){if(typeof e=="string"){let t=e.trim();return t.length>0?t:void 0}if(Array.isArray(e)){let t=e.map(n=>String(n).trim()).filter(n=>n.length>0);return t.length>0?t.join(", "):void 0}}o(Pn,"normalizeAllowedToolsString");function $s(e){if(typeof e=="string"){let t=e.trim();return t?{command:t}:void 0}if(e&&typeof e=="object"&&!Array.isArray(e)){let t=e,n=typeof t.command=="string"?t.command.trim():"";if(!n)return;let r=typeof t.matcher=="string"&&t.matcher.trim()?t.matcher.trim():void 0;return{command:n,matcher:r}}}o($s,"normalizeYamlHookEntry");function Ds(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>$s(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}o(Ds,"normalizeYamlHookEntryList");function Mn(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of Ms){let i=Ds(t[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}o(Mn,"normalizeYamlHookMap");function On(e){let[t,n]=An(e,{throwOnMissing:!0});if(!t)throw new Error("Invalid SKILL.md: YAML frontmatter must be an object");if(!t.name||typeof t.name!="string")throw new Error('Invalid SKILL.md: missing required "name" field');if(!t.description||typeof t.description!="string")throw new Error('Invalid SKILL.md: missing required "description" field');return{frontmatter:{name:t.name,description:t.description,disableModelInvocation:t["disable-model-invocation"]===!0,userInvocable:t["user-invocable"]!==!1,allowedTools:Pn(t["allowed-tools"]),context:t.context==="fork"?"fork":void 0,agent:typeof t.agent=="string"?t.agent:void 0,argumentHint:typeof t["argument-hint"]=="string"?t["argument-hint"]:void 0,model:typeof t.model=="string"?t.model:void 0,hooks:Mn(t.hooks),license:typeof t.license=="string"?t.license:void 0,compatibility:typeof t.compatibility=="string"?t.compatibility:void 0,metadata:t.metadata&&typeof t.metadata=="object"&&!Array.isArray(t.metadata)?t.metadata:void 0},body:n}}o(On,"parseSkillMarkdown");async function xe(e,t){let n=X(e,"SKILL.md");try{let r=await Ns(n,"utf-8"),{frontmatter:i,body:s}=On(r),[a,c,d,l,u]=await Promise.all([V(X(e,"scripts")),V(X(e,"references")),V(X(e,"assets")),V(X(e,"templates")),V(X(e,"resources"))]);return{...i,path:e,skillFilePath:n,content:s,rawContent:s,loaded:!0,source:t,...a.length>0&&{scripts:a},...c.length>0&&{references:c},...d.length>0&&{assets:d},...l.length>0&&{templates:l},...u.length>0&&{resources:u}}}catch(r){return C({source:"agent:skills",level:"error",message:`Failed to load skill from ${e}.`,detail:r}),null}}o(xe,"loadFullSkill");async function V(e,t=e){let n=[];try{let r=await Ls(e,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=X(e,i.name);if(i.isDirectory()){n.push(...await V(s,t));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:js(t,s).replace(/\\/g,"/")})}}catch{}return n}o(V,"loadSkillFiles");var $n=64*1024,Dn=256*1024;var Xb=1024*1024;var yk=16*1024;var Rk=16*1024;import{execSync as ba}from"child_process";import ka from"path";var Sa=new Set(["ls","cat","pwd","echo","whoami","date","which","whereis","tree","dir","type","get-childitem","get-content","select-string","get-location","grep","find","awk","sed","head","tail","less","more","wc","git status","git diff","git log","git show","git branch","git remote","git ls-files","git rev-parse","git grep","node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"]);function Jn(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of Sa)if(t===n||t.startsWith(`${n} `)){if(n==="sed"&&t.split(/\s+/).some(s=>s.startsWith("-i")||s==="--in-place"))return!1;if(n==="awk"){let i=t.split(/\s+/);if(i.includes("-f")||i.includes("--file"))return!1}if(["node","npm","yarn","pnpm","tsc","python","pip","go","cargo","rustc"].includes(n)){let i=t.split(/\s+/).slice(1);if(i.length>0&&!i.every(s=>/^(-v|--version|-h|--help)$/.test(s)))return!1}return!0}return!1}o(Jn,"isSingleSafeDynamicContextCommand");function xa(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&ka.sep!=="\\"&&t.replace(/\\ /g,"").includes("\\"))return!1;let r=t.split(/\s*&&\s*/);if(r.length===1)return Jn(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!Jn(s))return!1}return!0}o(xa,"isSafeDynamicContextCommand");function Yn(e){let t=[],n="",r=!1,i="";for(let s=0;s<e.length;s++){let a=e[s];r?a===i?r=!1:n+=a:a==='"'||a==="'"?(r=!0,i=a):a===" "?n&&(t.push(n),n=""):n+=a}return n&&t.push(n),t}o(Yn,"parseArguments");var _e=class{static{o(this,"VariableResolver")}context;constructor(t){this.context=t}async resolve(t,n){let r=t,i=Yn(n);return r=this.resolvePositionalArgs(r,i),r=this.resolveArguments(r,n),r=this.resolveEnvVars(r),r=await this.resolveDynamicContext(r),r}resolvePositionalArgs(t,n){return t.replace(/\$(\d+)(?![a-zA-Z0-9_])/g,(r,i)=>{let s=parseInt(i,10);return n[s]??""})}resolveArguments(t,n){return t.replace(/\$ARGUMENTS/g,n)}resolveEnvVars(t){let n={...this.context.environment,CLAUDE_SESSION_ID:this.context.sessionId??"",KODAX_SESSION_ID:this.context.sessionId??"",KODAX_WORKING_DIR:this.context.workingDirectory};return t.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g,(r,i)=>n[i]??r)}async resolveDynamicContext(t){let n=/!`([^`]+)`/g,r=[],i;for(;(i=n.exec(t))!==null;)r.push({match:i[0],command:i[1]});if(r.length===0)return t;let s=t;for(let{match:a,command:c}of r)try{let d=await this.executeDynamicCommand(c);s=s.replace(a,d)}catch(d){let l=d instanceof Error?d.message:String(d);s=s.replace(a,`[Error: ${l}]`)}return s}async executeDynamicCommand(t){if(this.context.disableDynamicContext)throw new Error("Dynamic context disabled by host. Skill `!`cmd`` blocks are not allowed in this environment.");if(this.context.executeDynamicContext){let n=await this.context.executeDynamicContext(t,this.context.workingDirectory);return typeof n=="string"?n.trim():""}if(!xa(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return ba(t,{cwd:this.context.workingDirectory,encoding:"utf-8",timeout:5e3,maxBuffer:1048576,windowsHide:!0}).trim()}catch(n){throw n instanceof Error?new Error(`Command failed: ${n.message}`):n}}};async function se(e,t,n){return new _e(n).resolve(e,t)}o(se,"resolveSkillContent");function Qn(e){return e.replace(/&/g,"&").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 Ra(e){return[...(e.references??[]).map(t=>({folder:"references",file:t})),...(e.scripts??[]).map(t=>({folder:"scripts",file:t})),...(e.assets??[]).map(t=>({folder:"assets",file:t})),...(e.templates??[]).map(t=>({folder:"templates",file:t})),...(e.resources??[]).map(t=>({folder:"resources",file:t}))]}o(Ra,"collectSupportFiles");function Ta(e){let t=Ra(e);if(t.length===0)return[];let n=[["references",e.references],["scripts",e.scripts],["assets",e.assets],["templates",e.templates],["resources",e.resources]],r=["Skill support files are rooted at the skill root above. When the skill references `references/...`, `assets/...`, `scripts/...`, `templates/...`, or `resources/...`, read it from this skill root.","","Support roots:"];for(let[i,s]of n)s?.length&&r.push(`- ${i}/: ${Ce(`${e.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of t.slice(0,nt))r.push(`- ${i}/${s.relativePath}: ${Ce(s.path)}`);return t.length>nt&&r.push(`- ... ${t.length-nt} more files under ${Ce(e.path)}`),r}o(Ta,"buildSupportFileContext");function _a(e,t,n){let r=[];r.push(`<skill name="${Qn(e.name)}" location="${Qn(e.path)}">`),r.push(""),r.push(`Skill root: ${Ce(e.path)}`),e.source==="builtin"?r.push("This is a built-in KodaX skill."):e.source==="project"?r.push("This is a project-defined skill. Project work paths are relative to the project root; skill support files are relative to the skill root above."):e.source==="user"&&r.push("This is a user-defined skill."),r.push("");let i=Ta(e);return i.length>0&&(r.push(...i),r.push("")),r.push(t),n.trim()&&(r.push(""),r.push(`User provided arguments: ${n}`)),r.push(""),r.push("</skill>"),r.join(`
|
|
186
|
+
`)}o(_a,"buildSkillBlock");async function rt(e,t,n){let r=await se(e.content,t,n);return{content:_a(e,r,t),disableModelInvocation:e.disableModelInvocation??!1,skill:e}}o(rt,"expandSkillForLLM");import{writeFile as rr}from"node:fs/promises";import F from"node:path";import{existsSync as Ca}from"node:fs";import{mkdir as Aa,readFile as ot,readdir as Pa,stat as er,writeFile as ES}from"node:fs/promises";import Ma from"node:os";import $ from"node:path";import{fileURLToPath as tr,pathToFileURL as Oa}from"node:url";import $a from"yaml";var G=null;async function j(){if(G)return G;let e=$.dirname(tr(import.meta.url)),t=[],n=$.resolve(e,"../../../index.js");if(Ca(n))return G=await import(Oa(n).href),G;t.push(`relative SDK path not found: ${n}`);try{return G=await import(["@kodax-ai","kodax"].join("/")),G}catch(r){t.push(`bare-name @kodax-ai/kodax failed: ${r?.code??r?.message}`)}throw new Error(`Cannot locate KodaX SDK from helper script ${import.meta.url}.
|
|
187
|
+
Attempted:
|
|
188
|
+
- ${t.join(`
|
|
189
|
+
- `)}`)}o(j,"loadKodaXSDK");function Da(e){let t=e.replace(/^\uFEFF/,"").replace(/\r\n/g,`
|
|
190
|
+
`).replace(/\r/g,`
|
|
191
|
+
`).trimStart();if(!t.startsWith(`---
|
|
192
|
+
`))throw new Error("SKILL.md missing YAML frontmatter");let n=t.indexOf(`
|
|
193
|
+
---
|
|
194
|
+
`,4);if(n===-1)throw new Error("SKILL.md has unclosed YAML frontmatter");return{yamlText:t.slice(4,n),body:t.slice(n+5).trim()}}o(Da,"extractFrontmatter");function Ae(e){let{yamlText:t,body:n}=Da(e),r=$a.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("Frontmatter must be a YAML object");return{frontmatter:r,body:n}}o(Ae,"parseSkillMarkdown");async function ce(e){let t=$.join(e,"SKILL.md");if(!(await er(t).catch(()=>null))?.isFile())throw new Error(`SKILL.md not found in ${e}`);let r=await ot(t,"utf8"),{frontmatter:i,body:s}=Ae(r);return{skillDir:$.resolve(e),skillMdPath:t,rawContent:r,body:s,frontmatter:i}}o(ce,"loadSkill");async function de(e){try{return await er(e),!0}catch{return!1}}o(de,"pathExists");function Pe(e){if(!e.length)return{mean:0,stddev:0,min:0,max:0};let t=e.reduce((r,i)=>r+i,0)/e.length,n=e.length>1?e.reduce((r,i)=>r+(i-t)**2,0)/(e.length-1):0;return{mean:ae(t),stddev:ae(Math.sqrt(n)),min:ae(Math.min(...e)),max:ae(Math.max(...e))}}o(Pe,"calculateStats");function ae(e,t=4){return Number(e.toFixed(t))}o(ae,"roundNumber");function Me(e){return e>=0?`+${e.toFixed(4)}`:e.toFixed(4)}o(Me,"formatDelta");function Zn(e){try{return JSON.parse(e)}catch{return null}}o(Zn,"safeJsonParse");function J(e){let t=Zn(e.trim());if(t&&typeof t=="object")return t;let n=e.indexOf("{"),r=e.lastIndexOf("}");return n===-1||r===-1||r<=n?null:Zn(e.slice(n,r+1))}o(J,"extractJsonObject");async function P(e,t=null){try{return JSON.parse(await ot(e,"utf8"))}catch{return t}}o(P,"readJsonFile");async function Y(e,t){let n=$.dirname(tr(e));return ot($.resolve(n,t),"utf8")}o(Y,"loadRelativeText");function I(e,t=12e3){let n=typeof e=="string"?e:String(e??"");if(n.length<=t)return n;let r=n.length-t;return`${n.slice(0,t)}
|
|
195
|
+
|
|
196
|
+
[truncated ${r} chars]`}o(I,"truncateText");function nr(e){let t=Array.isArray(e)?e.length:0,n=Array.isArray(e)?e.filter(i=>i?.passed===!0).length:0,r=Math.max(t-n,0);return{passed:n,failed:r,total:t,pass_rate:t>0?ae(n/t):0}}o(nr,"computePassSummary");async function it(e,t=e,n=[]){let r=await Pa(t,{withFileTypes:!0}).catch(()=>[]);for(let i of r.sort((s,a)=>s.name.localeCompare(a.name))){let s=$.join(t,i.name);if(i.isDirectory()){await it(e,s,n);continue}i.isFile()&&n.push({absolutePath:s,relativePath:$.relative(e,s).replace(/\\/g,"/")})}return n}o(it,"collectFiles");function le(){return $.join(Ma.homedir(),".kodax","skills")}o(le,"getDefaultSkillsDir");async function R(e){return await Aa(e,{recursive:!0}),e}o(R,"ensureDirectory");function Na(e){return e.split("-").filter(Boolean).map(t=>t[0]?.toUpperCase()+t.slice(1)).join(" ")}o(Na,"titleFromSlug");function La(e,t){let n=Na(e);return`---
|
|
197
|
+
name: ${e}
|
|
198
|
+
description: ${t}
|
|
199
|
+
user-invocable: true
|
|
200
|
+
allowed-tools: "Read, Grep, Glob"
|
|
201
|
+
compatibility: "Optimized for KodaX and Agent Skills style directories."
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
# ${n}
|
|
205
|
+
|
|
206
|
+
Describe the task this skill handles, the trigger boundary, and the expected outcome.
|
|
207
|
+
|
|
208
|
+
## When to use
|
|
209
|
+
|
|
210
|
+
- Use this skill when the user asks for ${n.toLowerCase()}.
|
|
211
|
+
- Do not use this skill when the request only needs a short explanation or is out of scope.
|
|
212
|
+
|
|
213
|
+
## Workflow
|
|
214
|
+
|
|
215
|
+
1. Restate the task boundary in one sentence.
|
|
216
|
+
2. Gather the minimum context needed to do the work well.
|
|
217
|
+
3. Execute the task, preferring small, verifiable steps.
|
|
218
|
+
4. Summarize what changed, what was validated, and any remaining risks.
|
|
219
|
+
|
|
220
|
+
## References
|
|
221
|
+
|
|
222
|
+
- Put deeper guidance in \`references/\`.
|
|
223
|
+
- Put reusable templates or static files in \`assets/\`.
|
|
224
|
+
- Put repeatable helper scripts in \`scripts/\`.
|
|
225
|
+
`}o(La,"renderSkillTemplate");function ja(e){return JSON.stringify({skill_name:e,evals:[{id:1,prompt:"TODO: Add a realistic user request to evaluate this skill.",expected_output:"Describe what a successful result should accomplish.",files:[],assertions:[]}]},null,2)}o(ja,"renderEvalTemplate");async function Fa(e){let t=F.resolve(e.baseDir??le()),n=F.join(t,e.name),r=e.description??`Describe what ${e.name} does and when it should be used.`;if(await de(n)&&!e.force)throw new Error(`Skill directory already exists: ${n}`);return await R(n),await R(F.join(n,"references")),await R(F.join(n,"assets")),await R(F.join(n,"scripts")),await rr(F.join(n,"SKILL.md"),La(e.name,r),"utf8"),e.includeEvals!==!1&&(await R(F.join(n,"evals")),await rr(F.join(n,"evals","evals.json"),`${ja(e.name)}
|
|
226
|
+
`,"utf8")),{skillDir:n,created:["SKILL.md",...e.includeEvals!==!1?["evals/evals.json"]:[],"references/","assets/","scripts/"]}}o(Fa,"initSkill");function Ka(e){let t={name:e[2],baseDir:void 0,description:void 0,force:!1,includeEvals:!0};for(let n=3;n<e.length;n+=1){let r=e[n];(r==="--path"||r==="--dest")&&e[n+1]?t.baseDir=e[++n]:r==="--description"&&e[n+1]?t.description=e[++n]:r==="--force"?t.force=!0:r==="--no-evals"&&(t.includeEvals=!1)}return t}o(Ka,"parseArgs");async function or(e=process.argv){let t=Ka(e);t.name||(console.error("Usage: node scripts/init-skill.js <skill-name> [--path <skills-dir>] [--description <text>] [--force] [--no-evals]"),process.exit(1));let n=await Fa(t);console.log(`Initialized ${n.skillDir}`)}o(or,"main");var Xa=!1;Xa&&or().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import ir from"node:path";var Ba=new Set(["name","description","license","compatibility","metadata","allowed-tools","disable-model-invocation","user-invocable","argument-hint","context","agent","model","hooks"]);async function ue(e){let t={valid:!1,errors:[],warnings:[],frontmatter:null},n;try{n=await ce(e)}catch(d){return t.errors.push(d instanceof Error?d.message:String(d)),t}let{frontmatter:r,body:i}=n;t.frontmatter=r;let s=Object.keys(r).filter(d=>!Ba.has(d));s.length>0&&t.errors.push(`Unexpected frontmatter keys: ${s.sort().join(", ")}`);let a=typeof r.name=="string"?r.name.trim():"",c=typeof r.description=="string"?r.description.trim():"";if(!a)t.errors.push("Missing required frontmatter field: name");else{/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(a)||t.errors.push(`Invalid skill name "${a}". Use lowercase kebab-case and avoid consecutive hyphens.`),a.length>64&&t.errors.push(`Skill name is too long (${a.length}/64).`);let d=ir.basename(ir.resolve(e));d!==a&&t.warnings.push(`Skill directory name "${d}" does not match frontmatter name "${a}".`)}if(c?(c.length>1024&&t.errors.push(`Description is too long (${c.length}/1024).`),/[<>]/.test(c)&&t.errors.push("Description cannot contain angle brackets."),/[。.!?]/.test(c)||t.warnings.push("Description may be too terse; consider making the trigger conditions clearer.")):t.errors.push("Missing required frontmatter field: description"),i.trim()||t.errors.push("SKILL.md body is empty."),r.compatibility!=null&&(typeof r.compatibility!="string"?t.errors.push("compatibility must be a string if provided."):r.compatibility.length>500&&t.errors.push(`compatibility is too long (${r.compatibility.length}/500).`)),r["allowed-tools"]!=null){let d=r["allowed-tools"];typeof d=="string"||Array.isArray(d)&&d.every(u=>typeof u=="string")||t.errors.push("allowed-tools must be a string or string array.")}return r["disable-model-invocation"]!=null&&typeof r["disable-model-invocation"]!="boolean"&&t.errors.push("disable-model-invocation must be a boolean."),r["user-invocable"]!=null&&typeof r["user-invocable"]!="boolean"&&t.errors.push("user-invocable must be a boolean."),r.context!=null&&r.context!=="fork"&&t.errors.push('context must be "fork" when provided.'),r.hooks!=null&&(typeof r.hooks!="object"||Array.isArray(r.hooks))&&t.errors.push("hooks must be an object when provided."),t.valid=t.errors.length===0,t}o(ue,"validateSkillDirectory");async function sr(e=process.argv){let t=e[2];t||(console.error("Usage: node scripts/quick-validate.js <skill-directory>"),process.exit(1));let n=await ue(t);if(n.errors.length===0)console.log("Skill is valid.");else{console.error("Skill validation failed:");for(let r of n.errors)console.error(`- ${r}`)}if(n.warnings.length>0){console.log("Warnings:");for(let r of n.warnings)console.log(`- ${r}`)}process.exit(n.valid?0:1)}o(sr,"main");var Ua=!1;Ua&&sr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as st,writeFile as D}from"node:fs/promises";import v from"node:path";function Wa(e){return typeof e=="string"?{text:e}:e&&typeof e=="object"&&typeof e.text=="string"?{text:e.text}:null}o(Wa,"normalizeAssertion");function qa(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_use").length:t,0)}o(qa,"countToolCalls");function za(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_result"&&r.is_error===!0).length:t,0)}o(za,"countToolErrors");function Ha(e,t){return`${["# Skill Eval Transcript","","## Eval Prompt","",e,"","## Final Response","",t.lastText||"(No final text)","","## Result Flags","",`- success: ${t.success}`,`- signal: ${t.signal??"none"}`,`- interrupted: ${t.interrupted===!0}`,`- limit_reached: ${t.limitReached===!0}`].join(`
|
|
227
|
+
`)}
|
|
228
|
+
`}o(Ha,"renderTranscript");async function Va(e,t){let n=v.dirname(v.resolve(t.evalsPath)),r=v.resolve(t.cwd??process.cwd()),i=[];for(let s of e??[]){let a=v.isAbsolute(s)?s:v.resolve(n,s),c=v.resolve(r,s),d=null,l=a;try{d=await st(a,"utf8")}catch{d=await st(c,"utf8").catch(()=>null),l=c}if(d==null)throw new Error(`Input file not found for eval: ${s}`);i.push(`### ${s}
|
|
229
|
+
\`\`\`
|
|
230
|
+
${d}
|
|
231
|
+
\`\`\`
|
|
232
|
+
(Resolved from ${l})`)}return i.length===0?"":`## Input Files
|
|
233
|
+
|
|
234
|
+
${i.join(`
|
|
235
|
+
|
|
236
|
+
`)}
|
|
237
|
+
|
|
238
|
+
`}o(Va,"readInputFiles");async function Ga(e,t){let n=String(e.prompt??e.query??"").trim();return`${await Va(e.files,t)}${n}`.trim()}o(Ga,"buildEvalPrompt");async function Ja(e,t){let{runKodaX:n,estimateTokens:r}=await j(),i=Date.now(),s=await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??30,reasoningMode:t.reasoningMode??"off",thinking:t.reasoningMode?t.reasoningMode!=="off":!1,context:{gitRoot:v.resolve(t.cwd??process.cwd())}},e);return{result:s,totalTokens:r(s.messages),durationMs:Date.now()-i}}o(Ja,"defaultRunAgent");async function Ya(e,t,n,r){return e==="with_skill"?(await rt(t,n,{workingDirectory:v.resolve(r.cwd??process.cwd()),projectRoot:v.resolve(r.cwd??process.cwd()),sessionId:"skill-eval",environment:{}})).content:n}o(Ya,"prepareConfigPrompt");async function Qa(e,t,n,r,i){let s=v.join(e,"outputs");await R(s);let a={total_tool_calls:qa(i.result.messages),errors_encountered:za(i.result.messages),output_chars:i.result.lastText.length};await D(v.join(s,"result.md"),`${i.result.lastText}
|
|
239
|
+
`,"utf8"),await D(v.join(s,"prompt.txt"),`${r}
|
|
240
|
+
`,"utf8"),await D(v.join(e,"transcript.md"),Ha(r,i.result),"utf8"),await D(v.join(s,"metrics.json"),`${JSON.stringify({config:t,eval_id:n.id??null,session_id:i.result.sessionId,...a},null,2)}
|
|
241
|
+
`,"utf8"),await D(v.join(s,"messages.json"),`${JSON.stringify(i.result.messages,null,2)}
|
|
242
|
+
`,"utf8"),await D(v.join(e,"timing.json"),`${JSON.stringify({total_tokens:i.totalTokens,duration_ms:i.durationMs,total_duration_seconds:Number((i.durationMs/1e3).toFixed(4))},null,2)}
|
|
243
|
+
`,"utf8"),await D(v.join(e,"result.json"),`${JSON.stringify({success:i.result.success,signal:i.result.signal??null,signal_reason:i.result.signalReason??null,interrupted:i.result.interrupted===!0,limit_reached:i.result.limitReached===!0,session_id:i.result.sessionId,execution_metrics:a},null,2)}
|
|
244
|
+
`,"utf8")}o(Qa,"writeRunArtifacts");async function Za(e,t=Ja){let n=await xe(v.resolve(e.skillPath),"user");if(!n)throw new Error(`Failed to load skill from ${e.skillPath}`);let r=v.resolve(e.workspaceDir);await R(r);let i=JSON.parse(await st(e.evalsPath,"utf8")),s=Array.isArray(i.evals)?i.evals:[],a=e.configs?.length?e.configs:["with_skill","without_skill"],c=Number.isFinite(e.runsPerConfig)&&e.runsPerConfig>0?Math.floor(e.runsPerConfig):1,d=[];for(let l=0;l<s.length;l+=1){let u=s[l],f=v.join(r,`eval-${l}`);await R(f),await D(v.join(f,"eval_metadata.json"),`${JSON.stringify({eval_id:u.id??l,eval_name:u.name??`eval-${l}`,prompt:u.prompt??u.query??"",expected_output:u.expected_output??"",assertions:(Array.isArray(u.assertions)?u.assertions:[]).map(Wa).filter(Boolean)},null,2)}
|
|
245
|
+
`,"utf8");let p=await Ga(u,e),g={};for(let m of a){let _=v.join(f,m);await R(_),g[m]=[];for(let k=1;k<=c;k+=1){let h=v.join(_,`run-${k}`);await R(h);let S=await Ya(m,n,p,e),w=await t(S,{...e,configName:m,evalItem:u,runIndex:k});await Qa(h,m,u,S,w),g[m].push({run_id:`run-${k}`,session_id:w.result.sessionId,success:w.result.success,total_tokens:w.totalTokens,duration_ms:w.durationMs,output_chars:w.result.lastText.length})}}d.push({eval_id:u.id??l,prompt:u.prompt??u.query??"",configs:g})}return{workspace:r,skill_name:n.name,eval_count:s.length,configs:a,runs_per_config:c,reports:d}}o(Za,"runEvalWorkspace");function ec(e){let t={skillPath:"",evalsPath:"",workspaceDir:"",provider:"anthropic",model:void 0,runsPerConfig:1,maxIter:30,reasoningMode:"off",cwd:process.cwd(),configs:["with_skill","without_skill"],output:void 0};for(let n=2;n<e.length;n+=1){let r=e[n];r==="--skill-path"&&e[n+1]?t.skillPath=e[++n]:r==="--evals"&&e[n+1]?t.evalsPath=e[++n]:r==="--workspace"&&e[n+1]?t.workspaceDir=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--runs"&&e[n+1]?t.runsPerConfig=Number(e[++n]):r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--cwd"&&e[n+1]?t.cwd=e[++n]:r==="--configs"&&e[n+1]?t.configs=e[++n].split(",").map(i=>i.trim()).filter(Boolean):r==="--output"&&e[n+1]&&(t.output=e[++n])}return t}o(ec,"parseArgs");async function ar(e=process.argv){let t=ec(e);(!t.skillPath||!t.evalsPath||!t.workspaceDir)&&(console.error("Usage: node scripts/run-eval.js --skill-path <dir> --evals <evals.json> --workspace <dir> [--provider anthropic] [--runs 1]"),process.exit(1));let n=await Za(t),r=`${JSON.stringify(n,null,2)}
|
|
246
|
+
`;t.output?(await D(t.output,r,"utf8"),console.log(`Wrote ${v.resolve(t.output)}`)):process.stdout.write(r)}o(ar,"main");var tc=!1;tc&&ar().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as nc,readFile as at,writeFile as dr}from"node:fs/promises";import b from"node:path";function U(e){return String(e??"").trim()}o(U,"normalizeExpectationText");function lr(e){let n=(Array.isArray(e?.assertions)?e.assertions:[]).map(i=>typeof i=="string"?U(i):i&&typeof i=="object"&&typeof i.text=="string"?U(i.text):"").filter(Boolean);if(n.length>0)return n;let r=U(e?.expected_output);return r?[r]:[]}o(lr,"normalizeExpectedRubric");function ct(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(ct,"normalizeStringArray");function cr(e,t){return{text:U(e?.text??t),passed:e?.passed===!0,evidence:U(e?.evidence)}}o(cr,"normalizeExpectationEntry");function rc(e,t){let n=J(e)??{},r=Array.isArray(n.expectations)?n.expectations:[],i=[],s=new Set;for(let a of t){let c=r.findIndex((d,l)=>s.has(l)?!1:U(d?.text).toLowerCase()===a.toLowerCase());if(c===-1){i.push({text:a,passed:!1,evidence:""});continue}s.add(c),i.push(cr(r[c],a))}if(t.length===0)for(let a of r){let c=cr(a,"");c.text&&i.push(c)}return{overall_summary:U(n.overall_summary),expectations:i,user_notes_summary:{uncertainties:ct(n.user_notes_summary?.uncertainties),needs_review:ct(n.user_notes_summary?.needs_review),workarounds:ct(n.user_notes_summary?.workarounds)}}}o(rc,"normalizeParsedGrading");async function dt(e){return(await nc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>b.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(dt,"listDirectories");async function oc(e){let t=b.dirname(e),n=b.dirname(t),r=b.basename(t),i=b.basename(e),s=b.join(e,"outputs"),a=await P(b.join(n,"eval_metadata.json"),{}),c=await at(b.join(s,"result.md"),"utf8").catch(()=>""),d=await at(b.join(s,"prompt.txt"),"utf8").catch(()=>""),l=await at(b.join(e,"transcript.md"),"utf8").catch(()=>""),u=await P(b.join(s,"metrics.json"),{}),f=await P(b.join(e,"result.json"),{}),p=await P(b.join(e,"timing.json"),{});return{evalDir:n,runDir:e,runId:i,configName:r,evalMetadata:a,outputsDir:s,resultText:c,promptText:d,transcript:l,metrics:u,result:f,timing:p}}o(oc,"loadRunContext");function ic(e){let t=lr(e.evalMetadata),n=t.length>0?t.map((r,i)=>`${i+1}. ${r}`).join(`
|
|
247
|
+
`):"(No explicit assertions; infer one expectation from expected_output if present.)";return`${e.agentInstructions.trim()}
|
|
248
|
+
|
|
249
|
+
Return JSON with this shape:
|
|
250
|
+
{
|
|
251
|
+
"overall_summary": "short summary",
|
|
252
|
+
"expectations": [
|
|
253
|
+
{
|
|
254
|
+
"text": "expectation text",
|
|
255
|
+
"passed": true,
|
|
256
|
+
"evidence": "short evidence grounded in the output"
|
|
257
|
+
}
|
|
258
|
+
],
|
|
259
|
+
"user_notes_summary": {
|
|
260
|
+
"uncertainties": [],
|
|
261
|
+
"needs_review": [],
|
|
262
|
+
"workarounds": []
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
## Run Metadata
|
|
267
|
+
- eval_id: ${e.evalMetadata.eval_id??"unknown"}
|
|
268
|
+
- eval_name: ${e.evalMetadata.eval_name??"unknown"}
|
|
269
|
+
- config: ${e.configName}
|
|
270
|
+
- run_id: ${e.runId}
|
|
271
|
+
|
|
272
|
+
## Eval Prompt
|
|
273
|
+
${I(e.evalMetadata.prompt??e.promptText,4e3)}
|
|
274
|
+
|
|
275
|
+
## Expected Outcome
|
|
276
|
+
${I(e.evalMetadata.expected_output??"",2e3)}
|
|
277
|
+
|
|
278
|
+
## Assertions
|
|
279
|
+
${n}
|
|
280
|
+
|
|
281
|
+
## Final Output
|
|
282
|
+
${I(e.resultText,12e3)}
|
|
283
|
+
|
|
284
|
+
## Result Flags
|
|
285
|
+
${JSON.stringify({success:e.result.success??null,signal:e.result.signal??null,interrupted:e.result.interrupted??!1,limit_reached:e.result.limit_reached??e.result.limitReached??!1},null,2)}
|
|
286
|
+
|
|
287
|
+
## Execution Metrics
|
|
288
|
+
${JSON.stringify({total_tool_calls:e.metrics.total_tool_calls??e.result.execution_metrics?.total_tool_calls??0,errors_encountered:e.metrics.errors_encountered??e.result.execution_metrics?.errors_encountered??0,output_chars:e.metrics.output_chars??e.result.execution_metrics?.output_chars??e.resultText.length,total_tokens:e.timing.total_tokens??0,total_duration_seconds:e.timing.total_duration_seconds??0},null,2)}
|
|
289
|
+
|
|
290
|
+
## Transcript Excerpt
|
|
291
|
+
${I(e.transcript,5e3)}
|
|
292
|
+
`}o(ic,"buildGradingPrompt");async function ur(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:b.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(ur,"defaultRunJudge");async function sc(e,t,n=ur){let r=await oc(b.resolve(e)),i=lr(r.evalMetadata),s=await Y(import.meta.url,"../agents/grader.md"),a=ic({...r,agentInstructions:s}),c=await n(a,{...t,runDir:r.runDir,configName:r.configName,evalMetadata:r.evalMetadata,runId:r.runId}),d=rc(c,i),l={total_tool_calls:r.metrics.total_tool_calls??r.result.execution_metrics?.total_tool_calls??0,errors_encountered:r.metrics.errors_encountered??r.result.execution_metrics?.errors_encountered??0,output_chars:r.metrics.output_chars??r.result.execution_metrics?.output_chars??r.resultText.length},u={summary:nr(d.expectations),expectations:d.expectations,execution_metrics:l,user_notes_summary:d.user_notes_summary,overall_summary:d.overall_summary,timing:{total_tokens:r.timing.total_tokens??0,total_duration_seconds:r.timing.total_duration_seconds??0},meta:{generated_at:new Date().toISOString(),eval_id:r.evalMetadata.eval_id??null,eval_name:r.evalMetadata.eval_name??null,config:r.configName,run_id:r.runId}};return await dr(b.join(r.runDir,"grading.json"),`${JSON.stringify(u,null,2)}
|
|
293
|
+
`,"utf8"),{runDir:r.runDir,grading:u,prompt:a,rawResponse:c}}o(sc,"gradeRun");async function ac(e,t=ur){let n=b.resolve(e.workspaceDir);await R(n);let r=new Set((e.configs??[]).map(c=>String(c).trim()).filter(Boolean)),i=[],s=[];for(let c of await dt(n))if(b.basename(c).startsWith("eval-"))for(let d of await dt(c)){let l=b.basename(d);if(!(r.size>0&&!r.has(l)))for(let u of await dt(d)){if(!b.basename(u).startsWith("run-"))continue;let f=b.join(u,"grading.json");if(await P(f,null)&&e.overwrite!==!0){s.push(b.relative(n,u).replace(/\\/g,"/"));continue}let g=await sc(u,e,t);i.push({run:b.relative(n,u).replace(/\\/g,"/"),summary:g.grading.summary,config:g.grading.meta.config,eval_id:g.grading.meta.eval_id})}}let a={workspace:n,generated_at:new Date().toISOString(),processed:i.length,skipped:s.length,processed_runs:i,skipped_runs:s};return await dr(b.join(n,"grading-summary.json"),`${JSON.stringify(a,null,2)}
|
|
294
|
+
`,"utf8"),a}o(ac,"gradeWorkspace");function cc(e){let t={workspaceDir:e[2]??"",provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,cwd:process.cwd(),overwrite:!1,configs:[]};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--cwd"&&e[n+1]?t.cwd=e[++n]:r==="--overwrite"?t.overwrite=!0:r==="--configs"&&e[n+1]&&(t.configs=e[++n].split(",").map(i=>i.trim()).filter(Boolean))}return t}o(cc,"parseArgs");async function fr(e=process.argv){let t=cc(e);t.workspaceDir||(console.error("Usage: node scripts/grade-evals.js <workspace> [--provider anthropic] [--configs with_skill,without_skill] [--overwrite]"),process.exit(1));let n=await ac(t);process.stdout.write(`${JSON.stringify(n,null,2)}
|
|
295
|
+
`)}o(fr,"main");var dc=!1;dc&&fr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{writeFile as pt}from"node:fs/promises";import N from"node:path";import{readFile as lc,readdir as uc,stat as fc,writeFile as pr}from"node:fs/promises";import T from"node:path";async function lt(e){return JSON.parse(await lc(e,"utf8"))}o(lt,"readJson");async function pc(e){try{return await fc(e),!0}catch{return!1}}o(pc,"pathExists");async function ut(e){return(await uc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>T.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(ut,"listDirectories");async function Oe(e){let t=await pc(T.join(e,"runs"))?T.join(e,"runs"):e,n=(await ut(t)).filter(i=>T.basename(i).startsWith("eval-")),r={};for(let i of n){let s=T.join(i,"eval_metadata.json"),c=(await lt(s).catch(()=>({}))).eval_id??T.basename(i);for(let d of await ut(i)){let l=T.basename(d),u=(await ut(d)).filter(f=>T.basename(f).startsWith("run-"));if(u.length!==0){r[l]??=[];for(let f of u){let p=await lt(T.join(f,"grading.json")).catch(()=>null);if(!p)continue;let g=await lt(T.join(f,"timing.json")).catch(()=>({}));r[l].push({eval_id:c,run_id:T.basename(f),pass_rate:p.summary?.pass_rate??0,passed:p.summary?.passed??0,failed:p.summary?.failed??0,total:p.summary?.total??0,time_seconds:g.total_duration_seconds??p.timing?.total_duration_seconds??0,tokens:g.total_tokens??p.execution_metrics?.output_chars??0,tool_calls:p.execution_metrics?.total_tool_calls??0,errors:p.execution_metrics?.errors_encountered??0,expectations:Array.isArray(p.expectations)?p.expectations:[],notes:[...p.user_notes_summary?.uncertainties??[],...p.user_notes_summary?.needs_review??[],...p.user_notes_summary?.workarounds??[]]})}}}}return r}o(Oe,"loadRunResults");function mc(e){let t={};for(let[s,a]of Object.entries(e))t[s]={pass_rate:Pe(a.map(c=>Number(c.pass_rate??0))),time_seconds:Pe(a.map(c=>Number(c.time_seconds??0))),tokens:Pe(a.map(c=>Number(c.tokens??0)))};let n=Object.keys(t),r=t[n[0]]??{pass_rate:{mean:0},time_seconds:{mean:0},tokens:{mean:0}},i=t[n[1]]??{pass_rate:{mean:0},time_seconds:{mean:0},tokens:{mean:0}};return{configs:t,delta:{pass_rate:Me(r.pass_rate.mean-i.pass_rate.mean),time_seconds:Me(r.time_seconds.mean-i.time_seconds.mean),tokens:Me(r.tokens.mean-i.tokens.mean)}}}o(mc,"summarizeConfigs");function ft(e,t,n){let r=mc(n);return{skill_name:t,generated_at:new Date().toISOString(),workspace:T.resolve(e),configs:r.configs,delta:r.delta,runs:n}}o(ft,"buildBenchmarkDocument");function gc(e){let t=[`# Benchmark: ${e.skill_name}`,"",`Generated: ${e.generated_at}`,"","| Config | Pass Rate | Time (s) | Tokens |","| --- | --- | --- | --- |"];for(let[n,r]of Object.entries(e.configs))t.push(`| ${n} | ${r.pass_rate.mean} \xB1 ${r.pass_rate.stddev} | ${r.time_seconds.mean} \xB1 ${r.time_seconds.stddev} | ${r.tokens.mean} \xB1 ${r.tokens.stddev} |`);return t.push(""),t.push("## Delta"),t.push(""),t.push(`- Pass rate: ${e.delta.pass_rate}`),t.push(`- Time (s): ${e.delta.time_seconds}`),t.push(`- Tokens: ${e.delta.tokens}`),t.join(`
|
|
296
|
+
`)}o(gc,"renderBenchmarkMarkdown");function hc(e){let t={iterationDir:e[2],skillName:"unknown-skill"};for(let n=3;n<e.length;n+=1)e[n]==="--skill-name"&&e[n+1]&&(t.skillName=e[n+1],n+=1);return t}o(hc,"parseArgs");async function yc(){let{iterationDir:e,skillName:t}=hc(process.argv);e||(console.error("Usage: node scripts/aggregate-benchmark.js <iteration-dir> --skill-name <name>"),process.exit(1));let n=await Oe(e);Object.keys(n).length===0&&(console.error(`No benchmark runs found in ${e}`),process.exit(1));let r=ft(e,t,n),i=T.join(e,"benchmark.json"),s=T.join(e,"benchmark.md");await pr(i,JSON.stringify(r,null,2)),await pr(s,`${gc(r)}
|
|
297
|
+
`),console.log(`Wrote ${i}`),console.log(`Wrote ${s}`)}o(yc,"main");var wc=!1;wc&&yc().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});function $e(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o($e,"normalizeStringArray");function vc(e){let t={};for(let[n,r]of Object.entries(e)){let i=new Map,s=[];for(let a of r){for(let c of a.expectations??[]){if(c?.passed===!0)continue;let d=String(c?.text??"").trim();d&&i.set(d,(i.get(d)??0)+1)}for(let c of a.notes??[]){let d=String(c??"").trim();d&&s.push(d)}}t[n]={repeated_failures:Array.from(i.entries()).sort((a,c)=>c[1]-a[1]).slice(0,10).map(([a,c])=>({text:a,count:c})),notes:s.slice(0,10)}}return t}o(vc,"summarizeFailureClusters");function bc(e,t,n){let r=J(e)??{};return{skill_name:t.skill_name,generated_at:new Date().toISOString(),workspace:t.workspace,verdict:["improves","regresses","mixed","inconclusive"].includes(r.verdict)?r.verdict:"inconclusive",release_readiness:["ready","needs_iteration","needs_manual_review"].includes(r.release_readiness)?r.release_readiness:"needs_manual_review",recommendation:String(r.recommendation??"").trim(),key_findings:$e(r.key_findings),variance_hotspots:$e(r.variance_hotspots),suggested_actions:$e(r.suggested_actions),watchouts:$e(r.watchouts),supporting_metrics:{pass_rate_delta:t.delta?.pass_rate??"n/a",time_seconds_delta:t.delta?.time_seconds??"n/a",tokens_delta:t.delta?.tokens??"n/a"},failure_clusters:n}}o(bc,"normalizeAnalysisResult");function kc(e){return`${e.agentInstructions.trim()}
|
|
298
|
+
|
|
299
|
+
Return JSON with this shape:
|
|
300
|
+
{
|
|
301
|
+
"verdict": "improves | regresses | mixed | inconclusive",
|
|
302
|
+
"release_readiness": "ready | needs_iteration | needs_manual_review",
|
|
303
|
+
"recommendation": "short recommendation",
|
|
304
|
+
"key_findings": [],
|
|
305
|
+
"variance_hotspots": [],
|
|
306
|
+
"suggested_actions": [],
|
|
307
|
+
"watchouts": []
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
## Benchmark Summary
|
|
311
|
+
${I(JSON.stringify({skill_name:e.benchmark.skill_name,configs:e.benchmark.configs,delta:e.benchmark.delta},null,2),12e3)}
|
|
312
|
+
|
|
313
|
+
## Failure Clusters
|
|
314
|
+
${I(JSON.stringify(e.failureClusters,null,2),8e3)}
|
|
315
|
+
`}o(kc,"buildAnalysisPrompt");async function Sc(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:N.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(Sc,"defaultRunAnalyst");function xc(e){let t=[`# Benchmark Analysis: ${e.skill_name}`,"",`Generated: ${e.generated_at}`,"",`- Verdict: ${e.verdict}`,`- Release readiness: ${e.release_readiness}`,`- Recommendation: ${e.recommendation||"n/a"}`,""],n=[["key_findings","Key Findings"],["variance_hotspots","Variance Hotspots"],["suggested_actions","Suggested Actions"],["watchouts","Watchouts"]];for(let[r,i]of n){t.push(`## ${i}`),t.push("");let s=Array.isArray(e[r])?e[r]:[];if(s.length===0)t.push("- None");else for(let a of s)t.push(`- ${a}`);t.push("")}return t.push("## Supporting Metrics"),t.push(""),t.push(`- Pass rate delta: ${e.supporting_metrics.pass_rate_delta}`),t.push(`- Time delta: ${e.supporting_metrics.time_seconds_delta}`),t.push(`- Tokens delta: ${e.supporting_metrics.tokens_delta}`),`${t.join(`
|
|
316
|
+
`)}
|
|
317
|
+
`}o(xc,"renderAnalysisMarkdown");async function Ec(e,t=Sc){let n=N.resolve(e.workspaceDir),r=N.resolve(e.benchmarkPath??N.join(n,"benchmark.json")),i=await P(r,null);if(!i){let g=await Oe(n);if(Object.keys(g).length===0)throw new Error(`No benchmark data found in ${n}`);i=ft(n,e.skillName??N.basename(n),g),await pt(r,`${JSON.stringify(i,null,2)}
|
|
318
|
+
`,"utf8")}let s=await Oe(n),a=vc(s),c=await Y(import.meta.url,"../agents/analyzer.md"),d=kc({agentInstructions:c,benchmark:i,failureClusters:a}),l=await t(d,{...e,workspaceDir:n,benchmarkPath:r,benchmark:i}),u=bc(l,i,a),f=N.resolve(e.outputPath??N.join(n,"analysis.json")),p=N.resolve(e.markdownPath??N.join(n,"analysis.md"));return await pt(f,`${JSON.stringify(u,null,2)}
|
|
319
|
+
`,"utf8"),await pt(p,xc(u),"utf8"),{analysis:u,prompt:d,rawResponse:l,analysisJsonPath:f,analysisMdPath:p}}o(Ec,"analyzeBenchmark");function Ic(e){let t={workspaceDir:e[2]??"",benchmarkPath:void 0,outputPath:void 0,markdownPath:void 0,skillName:void 0,provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,cwd:process.cwd()};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--benchmark"&&e[n+1]?t.benchmarkPath=e[++n]:r==="--output"&&e[n+1]?t.outputPath=e[++n]:r==="--markdown"&&e[n+1]?t.markdownPath=e[++n]:r==="--skill-name"&&e[n+1]?t.skillName=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--cwd"&&e[n+1]&&(t.cwd=e[++n])}return t}o(Ic,"parseArgs");async function mr(e=process.argv){let t=Ic(e);t.workspaceDir||(console.error("Usage: node scripts/analyze-benchmark.js <workspace> [--benchmark benchmark.json] [--output analysis.json] [--markdown analysis.md]"),process.exit(1));let n=await Ec(t);process.stdout.write(`${JSON.stringify({analysis:n.analysis,analysis_json:n.analysisJsonPath,analysis_md:n.analysisMdPath},null,2)}
|
|
320
|
+
`)}o(mr,"main");var Rc=!1;Rc&&mr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readdir as Tc,readFile as gr,writeFile as hr}from"node:fs/promises";import x from"node:path";async function gt(e){return(await Tc(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>x.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}o(gt,"listDirectories");function mt(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}o(mt,"normalizeStringArray");function _c(e){let t=J(e)??{},n=["A","B","tie","inconclusive"].includes(t.winner)?t.winner:"inconclusive",r=Number(t.confidence);return{winner:n,confidence:Number.isFinite(r)?Math.max(0,Math.min(1,Number(r.toFixed(4)))):0,rationale:String(t.rationale??"").trim(),strengths_a:mt(t.strengths_a),strengths_b:mt(t.strengths_b),risks:mt(t.risks)}}o(_c,"normalizeComparisonResult");async function Cc(e,t,n,r){let i=(await gt(x.join(e,t))).filter(f=>x.basename(f).startsWith("run-")),s=(await gt(x.join(e,n))).filter(f=>x.basename(f).startsWith("run-")),a=i[r],c=s[r];if(!a||!c)return null;let d=await P(x.join(e,"eval_metadata.json"),{}),l=await gr(x.join(a,"outputs","result.md"),"utf8").catch(()=>""),u=await gr(x.join(c,"outputs","result.md"),"utf8").catch(()=>"");return{evalDir:e,evalMetadata:d,runA:{runDir:a,runId:x.basename(a),configName:t,output:l},runB:{runDir:c,runId:x.basename(c),configName:n,output:u}}}o(Cc,"loadComparisonPair");function Ac(e){let t=e.presentPrimaryFirst?{A:e.runA,B:e.runB}:{A:e.runB,B:e.runA};return`${e.agentInstructions.trim()}
|
|
321
|
+
|
|
322
|
+
Return JSON with this shape:
|
|
323
|
+
{
|
|
324
|
+
"winner": "A | B | tie | inconclusive",
|
|
325
|
+
"confidence": 0.0,
|
|
326
|
+
"rationale": "short explanation",
|
|
327
|
+
"strengths_a": [],
|
|
328
|
+
"strengths_b": [],
|
|
329
|
+
"risks": []
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
Judge only the visible outputs. Do not mention hidden config names in the rationale.
|
|
333
|
+
|
|
334
|
+
## Eval Prompt
|
|
335
|
+
${I(e.evalMetadata.prompt??"",4e3)}
|
|
336
|
+
|
|
337
|
+
## Expected Outcome
|
|
338
|
+
${I(e.evalMetadata.expected_output??"",2e3)}
|
|
339
|
+
|
|
340
|
+
## Assertions
|
|
341
|
+
${I(JSON.stringify(e.evalMetadata.assertions??[],null,2),4e3)}
|
|
342
|
+
|
|
343
|
+
## Candidate A
|
|
344
|
+
${I(t.A.output,12e3)}
|
|
345
|
+
|
|
346
|
+
## Candidate B
|
|
347
|
+
${I(t.B.output,12e3)}
|
|
348
|
+
`}o(Ac,"buildComparisonPrompt");async function Pc(e,t){let{runKodaX:n}=await j();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,reasoningMode:t.reasoningMode??"balanced",thinking:t.reasoningMode?t.reasoningMode!=="off":!0,context:{gitRoot:x.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}o(Pc,"defaultRunComparator");function Mc(e,t,n,r){return e==="A"?t?n:r:e==="B"?t?r:n:e}o(Mc,"mapWinnerToConfig");function Oc(e){let t=[`# Blind Comparison: ${e.config_a} vs ${e.config_b}`,"",`Generated: ${e.generated_at}`,"",`- ${e.config_a} wins: ${e.summary.config_a_wins}`,`- ${e.config_b} wins: ${e.summary.config_b_wins}`,`- ties: ${e.summary.ties}`,`- inconclusive: ${e.summary.inconclusive}`,""];for(let n of e.comparisons)t.push(`## Eval ${n.eval_id??n.eval_name??n.index}`),t.push(""),t.push(`- Winner: ${n.winner_config}`),t.push(`- Confidence: ${n.confidence}`),t.push(`- Rationale: ${n.rationale||"n/a"}`),t.push("");return`${t.join(`
|
|
349
|
+
`)}
|
|
350
|
+
`}o(Oc,"renderComparisonMarkdown");async function $c(e,t=Pc){let n=x.resolve(e.workspaceDir),r=e.configA??"with_skill",i=e.configB??"without_skill",s=Number.isFinite(e.maxPairs)&&e.maxPairs>0?Math.floor(e.maxPairs):Number.POSITIVE_INFINITY,a=await Y(import.meta.url,"../agents/comparator.md"),c=[];for(let f of await gt(n))if(x.basename(f).startsWith("eval-"))for(let p=0;p<s;p+=1){let g=await Cc(f,r,i,p);if(!g)break;let m=c.length%2===0,_=Ac({agentInstructions:a,evalMetadata:g.evalMetadata,runA:g.runA,runB:g.runB,presentPrimaryFirst:m}),k=await t(_,{...e,workspaceDir:n,evalDir:f,pairIndex:p,configA:r,configB:i}),h=_c(k),S=Mc(h.winner,m,r,i);c.push({index:c.length+1,eval_id:g.evalMetadata.eval_id??null,eval_name:g.evalMetadata.eval_name??null,run_a:x.relative(n,g.runA.runDir).replace(/\\/g,"/"),run_b:x.relative(n,g.runB.runDir).replace(/\\/g,"/"),presented_as:m?{A:r,B:i}:{A:i,B:r},winner_label:h.winner,winner_config:S,confidence:h.confidence,rationale:h.rationale,strengths_a:h.strengths_a,strengths_b:h.strengths_b,risks:h.risks})}if(c.length===0)throw new Error(`No comparable run pairs found for ${r} vs ${i} in ${n}`);let d={workspace:n,generated_at:new Date().toISOString(),config_a:r,config_b:i,summary:{total_pairs:c.length,config_a_wins:c.filter(f=>f.winner_config===r).length,config_b_wins:c.filter(f=>f.winner_config===i).length,ties:c.filter(f=>f.winner_config==="tie").length,inconclusive:c.filter(f=>f.winner_config==="inconclusive").length},comparisons:c},l=x.resolve(e.outputPath??x.join(n,"comparison.json")),u=x.resolve(e.markdownPath??x.join(n,"comparison.md"));return await hr(l,`${JSON.stringify(d,null,2)}
|
|
351
|
+
`,"utf8"),await hr(u,Oc(d),"utf8"),{document:d,outputPath:l,markdownPath:u}}o($c,"compareWorkspace");function Dc(e){let t={workspaceDir:e[2]??"",configA:"with_skill",configB:"without_skill",outputPath:void 0,markdownPath:void 0,provider:"anthropic",model:void 0,reasoningMode:"balanced",maxIter:20,maxPairs:void 0,cwd:process.cwd()};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--config-a"&&e[n+1]?t.configA=e[++n]:r==="--config-b"&&e[n+1]?t.configB=e[++n]:r==="--output"&&e[n+1]?t.outputPath=e[++n]:r==="--markdown"&&e[n+1]?t.markdownPath=e[++n]:r==="--provider"&&e[n+1]?t.provider=e[++n]:r==="--model"&&e[n+1]?t.model=e[++n]:r==="--reasoning"&&e[n+1]?t.reasoningMode=e[++n]:r==="--max-iter"&&e[n+1]?t.maxIter=Number(e[++n]):r==="--max-pairs"&&e[n+1]?t.maxPairs=Number(e[++n]):r==="--cwd"&&e[n+1]&&(t.cwd=e[++n])}return t}o(Dc,"parseArgs");async function yr(e=process.argv){let t=Dc(e);t.workspaceDir||(console.error("Usage: node scripts/compare-runs.js <workspace> [--config-a with_skill] [--config-b without_skill] [--output comparison.json]"),process.exit(1));let n=await $c(t);process.stdout.write(`${JSON.stringify({comparison:n.document.summary,output:n.outputPath,markdown:n.markdownPath},null,2)}
|
|
352
|
+
`)}o(yr,"main");var Nc=!1;Nc&&yr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{readFile as Lc,writeFile as jc}from"node:fs/promises";import{createHash as Fc}from"node:crypto";import ht from"node:path";import{zipSync as Kc,strToU8 as Xc}from"fflate";var Bc=".kodax-package.json";function Uc(e){return e instanceof Uint8Array?e:new Uint8Array(e)}o(Uc,"toUint8Array");function Wc(e){return Fc("sha256").update(e).digest("hex")}o(Wc,"sha256");function qc(e,t,n={}){return{format:"kodax-skill-package",version:1,created_at:n.createdAt??new Date().toISOString(),entrypoint:"SKILL.md",skill:{name:e.frontmatter.name,description:e.frontmatter.description,compatibility:e.frontmatter.compatibility??null,user_invocable:e.frontmatter["user-invocable"]??!0,disable_model_invocation:e.frontmatter["disable-model-invocation"]??!1},files:t.map(r=>({path:r.relativePath,size:r.bytes.length,sha256:r.sha256})),note:"This archive is a zip file with a .skill extension. Compatible agents can extract and install the included skill directory."}}o(qc,"createPackageManifest");async function zc(e,t={}){let n=await ue(e);if(!n.valid)throw new Error(`Cannot package invalid skill:
|
|
353
|
+
- ${n.errors.join(`
|
|
354
|
+
- `)}`);let r=await ce(e),i=await it(e),s=[];for(let d of i){if(d.relativePath.endsWith(".skill"))continue;let l=Uc(await Lc(d.absolutePath));s.push({...d,bytes:l,sha256:Wc(l)})}let a=qc(r,s,t),c={[Bc]:Xc(JSON.stringify(a,null,2))};for(let d of s)c[d.relativePath]=d.bytes;return{manifest:a,bytes:Kc(c,{level:6})}}o(zc,"buildSkillPackage");async function Hc(e,t,n={}){let r=await zc(e,n);return await jc(t,r.bytes),{...r,outputPath:ht.resolve(t)}}o(Hc,"writeSkillPackage");function Vc(e){let t={skillDir:e[2],output:void 0};for(let n=3;n<e.length;n+=1)e[n]==="--output"&&e[n+1]&&(t.output=e[++n]);return t}o(Vc,"parseArgs");async function wr(e=process.argv){let t=Vc(e);t.skillDir||(console.error("Usage: node scripts/package-skill.js <skill-dir> [--output <file.skill>]"),process.exit(1));let n=await ce(t.skillDir),r=t.output??ht.join(ht.dirname(t.skillDir),`${n.frontmatter.name}.skill`),i=await Hc(t.skillDir,r);console.log(`Wrote ${i.outputPath}`)}o(wr,"main");var Gc=!1;Gc&&wr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});import{cp as Jc,mkdir as yt,readFile as kr,rm as Sr,stat as Yc,writeFile as Qc}from"node:fs/promises";import M from"node:path";import{strFromU8 as vr,unzipSync as Zc}from"fflate";var br=".kodax-package.json";function ed(e){return e.replace(/\\/g,"/").replace(/^\.?\//,"")}o(ed,"normalizeArchivePath");function td(e){let t=ed(e);if(!t||t.startsWith("/")||t.includes("../"))throw new Error(`Unsafe archive entry path: ${e}`);return t}o(td,"assertSafeArchivePath");function nd(e){return/\.(skill|zip)$/i.test(e)}o(nd,"isZipLike");function rd(e){let t=Zc(e),n=Object.entries(t).map(([l,u])=>({relativePath:td(l),bytes:u})),r=n.find(l=>l.relativePath==="SKILL.md");if(!r)throw new Error("Archive is missing SKILL.md");let i=Ae(vr(r.bytes)),s=typeof i.frontmatter.name=="string"?i.frontmatter.name.trim():"",a=typeof i.frontmatter.description=="string"?i.frontmatter.description.trim():"";if(!s||!a)throw new Error("Archive SKILL.md is missing required frontmatter fields.");let c=n.find(l=>l.relativePath===br),d=c?JSON.parse(vr(c.bytes)):null;return{skillName:s,manifest:d,entries:n.filter(l=>l.relativePath!==br)}}o(rd,"readSkillPackageBuffer");async function od(e,t){if(await de(e)){if(!t)throw new Error(`Target skill already exists: ${e}`);await Sr(e,{recursive:!0,force:!0})}await yt(e,{recursive:!0})}o(od,"ensureInstallTarget");async function id(e,t={}){let n=M.resolve(t.skillsDir??le()),r=rd(await kr(e)),i=M.join(n,r.skillName);await od(i,t.force===!0);for(let s of r.entries){let a=M.join(i,s.relativePath);await yt(M.dirname(a),{recursive:!0}),await Qc(a,s.bytes)}return{skillName:r.skillName,installedTo:i,source:M.resolve(e),manifest:r.manifest}}o(id,"installSkillArchive");async function sd(e,t={}){let n=await ue(e);if(!n.valid)throw new Error(`Cannot install invalid skill:
|
|
355
|
+
- ${n.errors.join(`
|
|
356
|
+
- `)}`);let r=M.join(e,"SKILL.md"),i=Ae(await kr(r,"utf8")),s=M.resolve(t.skillsDir??le()),a=M.join(s,i.frontmatter.name);if(await de(a)){if(!t.force)throw new Error(`Target skill already exists: ${a}`);await Sr(a,{recursive:!0,force:!0})}return await yt(s,{recursive:!0}),await Jc(e,a,{recursive:!0}),{skillName:i.frontmatter.name,installedTo:a,source:M.resolve(e),manifest:null}}o(sd,"installSkillDirectory");async function ad(e,t={}){let n=M.resolve(e),r=await Yc(n).catch(()=>null);if(!r)throw new Error(`Input not found: ${n}`);if(r.isDirectory())return sd(n,t);if(r.isFile()&&nd(n))return id(n,t);throw new Error("Input must be a skill directory or a .skill/.zip archive.")}o(ad,"installSkill");function cd(e){let t={input:e[2],skillsDir:void 0,force:!1};for(let n=3;n<e.length;n+=1){let r=e[n];r==="--dest"&&e[n+1]?t.skillsDir=e[++n]:r==="--force"&&(t.force=!0)}return t}o(cd,"parseArgs");async function xr(e=process.argv){let t=cd(e);t.input||(console.error("Usage: node scripts/install-skill.js <skill-dir-or-archive> [--dest <skills-dir>] [--force]"),process.exit(1));let n=await ad(t.input,t);console.log(`Installed ${n.skillName} to ${n.installedTo}`)}o(xr,"main");var dd=!1;dd&&xr().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)});var RE=1440*60*1e3;var OE=5*6e4;var kI=new Intl.Segmenter("zh-CN",{granularity:"word"});var ER=String.raw`const TOOL_NAME = 'echo_tool';
|
|
91
357
|
const RESOURCE_URI = 'memory://guide';
|
|
92
358
|
const PROMPT_NAME = 'draft_prompt';
|
|
93
359
|
let buffer = '';
|
|
@@ -267,9 +533,9 @@ process.stdin.on('data', (chunk) => {
|
|
|
267
533
|
|
|
268
534
|
process.on('SIGTERM', () => process.exit(0));
|
|
269
535
|
process.on('SIGINT', () => process.exit(0));
|
|
270
|
-
`;var
|
|
536
|
+
`;var _r=Object.freeze(["message","label","compaction","branch_summary","archive_marker","rewind_marker","artifact_ledger","memory_outcome_digest","memory_review_receipt"]),Ad=0,Pd=0,Cr=o(e=>{let t=e==="label"?++Ad:++Pd,n=Math.random().toString(36).slice(2,8);return`${e}-${Date.now()}-${t}-${n}`},"nextId");async function Md(e,t,n){let r=Cr("label");return await e.append({id:r,ts:Date.now(),type:"label",payload:{targetId:t,label:n}}),r}o(Md,"appendLabel");async function Od(e,t,n){let r=Cr("artifact");return await e.append({id:r,ts:Date.now(),type:"artifact_ledger",payload:{ref:t,summary:n}}),r}o(Od,"appendArtifact");function $d(e){let t=[],n=new Map,r=[],i=null;for(let s of e){if(s.type==="label"){let c=s.payload;c?.targetId&&r.push({targetId:c.targetId,label:c.label});continue}let a={entry:s,children:[]};if(s.type==="message"){t.push(a),n.set(s.id,a),i=a;continue}i?i.children.push(a):t.push(a)}for(let{targetId:s,label:a}of r){let c=n.get(s);c&&a!==void 0&&(c.label=a)}return t}o($d,"buildLineageTree");var Dd=Object.freeze({name:"lineage",entryTypes:_r,operators:Object.freeze({label:o((async(e,...t)=>{let[n,r]=t;return Md(e,n,r)}),"label"),attachArtifact:o((async(e,...t)=>{let[n,r]=t;return Od(e,n,r)}),"attachArtifact")}),reducers:Object.freeze({buildLineageTree:o(e=>$d(e),"buildLineageTree")})});var Wd=new Set(["skill","ask_user_question","exit_plan_mode","spawn_agent","send_message","followup_task","wait_agent","interrupt_agent","list_agents","agent_output","tool_search","get_goal","create_goal","update_goal","todo_create","todo_update","todo_list","todo_get","worktree_create","worktree_remove","undo","mcp_search","mcp_describe","mcp_call","mcp_read_resource","mcp_get_prompt","repo_overview","changed_scope","changed_diff","changed_diff_bundle","module_context","symbol_context","process_context","impact_estimate","relationship_scan","cyclic_dependencies","semantic_lookup"]),vt=Wd,De=`[\u5BF9\u8BDD\u5386\u53F2\u6458\u8981]
|
|
271
537
|
|
|
272
|
-
`;var
|
|
538
|
+
`;var BT=De.trimEnd();var UT=16*1024;var Gd={enabled:!1,maxAge:20,protectedTools:Array.from(vt)};import JC from"typescript";var fP=new Intl.Segmenter("en",{granularity:"grapheme"});var Rl=xl(import.meta.url),nO=process.env.KODAX_BUNDLED==="true"?void 0:Il(Rl.resolve("@anthropic-ai/sandbox-runtime")).href;var rO=[".ssh",".aws",".azure",".gnupg",".kube",".docker",".kodax",".agents",".codex",".claude",".gemini",".direnv",".terraform.d",y.join(".cargo","credentials.toml"),y.join(".config","gcloud"),y.join(".config","gh"),y.join(".config","openai"),y.join(".config","anthropic"),".gitconfig",y.join(".config","git","config"),".terraformrc",y.join(".config","pypoetry","auth.toml"),".condarc",".bashrc",".bash_profile",".zshrc",".zprofile",".profile",y.join(".config","fish","config.fish"),y.join(".config","fish","fish_variables"),".bash_history",".zsh_history",y.join(".m2","settings.xml"),y.join(".m2","settings-security.xml"),y.join(".gradle","gradle.properties"),y.join(".nuget","NuGet","NuGet.Config"),y.join(".pip","pip.conf"),y.join(".config","pip","pip.conf"),y.join(".cache","huggingface","token"),y.join(".huggingface","token"),y.join(".config","rclone","rclone.conf"),y.join(".local","share","keyrings"),y.join("Library","Keychains"),y.join("AppData","Roaming","Microsoft","Protect"),y.join("AppData","Roaming","Microsoft","Credentials"),y.join("AppData","Roaming","Microsoft","Vault"),y.join("AppData","Local","Microsoft","Credentials"),y.join("AppData","Local","Microsoft","Protect"),y.join("AppData","Local","Microsoft","Vault"),".password-store",".env",".envrc",".pgpass",".env.local",".env.development",".env.production",".env.test",".env.staging",".npmrc",".pypirc",".netrc",".git-credentials","credentials","credentials.json","application_default_credentials.json","id_rsa","id_dsa","id_ecdsa","id_ed25519"],Nr=JSON.stringify(Se),kt=JSON.stringify(ke),Tl=String.raw`
|
|
273
539
|
const { spawn } = require('node:child_process');
|
|
274
540
|
const { writeSync } = require('node:fs');
|
|
275
541
|
const input = JSON.parse(Buffer.from(process.argv[2], 'base64').toString('utf8'));
|
|
@@ -294,7 +560,7 @@ child.once('error', (error) => {
|
|
|
294
560
|
child.once('exit', (code, signal) => {
|
|
295
561
|
process.exitCode = signal ? 1 : code ?? 1;
|
|
296
562
|
});
|
|
297
|
-
`,
|
|
563
|
+
`,jr="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",_l=JSON.stringify(jr),Fr=Buffer.from(Tl,"utf8").toString("base64"),Cl=JSON.stringify(Fr),oO=String.raw`
|
|
298
564
|
import { spawn } from 'node:child_process';
|
|
299
565
|
import { randomUUID } from 'node:crypto';
|
|
300
566
|
import { readFile, rm, writeFile } from 'node:fs/promises';
|
|
@@ -395,10 +661,10 @@ let normalFallbackAttempted = false;
|
|
|
395
661
|
const runDirect = async () => {
|
|
396
662
|
const internalElectronNode = request.command === process.execPath && process.versions.electron !== undefined;
|
|
397
663
|
const directArgs = internalElectronNode
|
|
398
|
-
? ['--import', ${
|
|
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(${_l}),
|
|
740
|
+
${Cl},
|
|
475
741
|
Buffer.from(JSON.stringify({
|
|
476
742
|
command: request.command,
|
|
477
743
|
args: childArgs,
|
|
@@ -482,7 +748,7 @@ try {
|
|
|
482
748
|
if (process.platform === 'win32') {
|
|
483
749
|
const wrapped = await SandboxManager.wrapWithSandboxArgv(command, 'cmd', undefined, undefined, request.cwd);
|
|
484
750
|
const requestedEnv = internalElectronNode || bootstrapIsElectronNode
|
|
485
|
-
? { ...request.env, [${
|
|
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 Al(){return process.env.KODAX_A2A_NODE??(process.env.KODAX_BUNDLED==="true"?"node":process.execPath)}o(Al,"sandboxJavaScriptCommand");var iO=5*6e4;function Pl(e,t){let n=e.lastIndexOf("--");if(n<0)throw new Error("ASRT Windows wrapper omitted its child separator.");let r=new Set;for(let c=0;c<n-1;c+=1){if(e[c]!=="--env")continue;let d=e[c+1]?.split("=",1)[0];d&&r.add(d.toLowerCase())}let i=[];for(let[c,d]of Object.entries(t)){if(d===void 0)continue;if(!c||c.includes("=")||c.includes("\0")||d.includes("\0"))throw new Error("Invalid environment entry for ASRT Windows child.");let l=c.toLowerCase();r.has(l)&&l!=="path"&&l!=="pathext"||i.push("--env",`${c}=${d}`)}let s=[...e.slice(0,n),...i,...e.slice(n)];if(s.reduce((c,d)=>c+d.length+3,0)>3e4)throw new Error("ASRT Windows child environment exceeds the CreateProcess command-line limit.");return s}o(Pl,"withWindowsSandboxChildEnvironment");async function Ml(e,t){let n=e.bootstrapCommand??Al(),r=n===process.execPath&&process.versions.electron!==void 0,i=e.command===process.execPath&&process.versions.electron!==void 0,s=i?["--import",Se,...e.args]:e.args,a=i||r?{...e.env,[ke]:"1"}:e.env,c=o(l=>process.platform==="win32"?`"${l.replaceAll('"','""')}"`:`'${l.replaceAll("'",`'"'"'`)}'`,"quote"),d=[c(n),"-e",c(jr),Fr,Buffer.from(JSON.stringify({command:e.command,args:s,cwd:e.cwd,targetStartedMarker:t}),"utf8").toString("base64")].join(" ");if(process.platform==="win32"){let l={filesystem:{denyRead:e.config.filesystem.denyRead,allowRead:[],allowWrite:[],denyWrite:e.config.filesystem.denyWrite}},u=await Q.wrapWithSandboxArgv(d,"cmd",l,void 0,e.cwd),f=Pl(u.argv,a);return{executable:f[0],args:f.slice(1),env:u.env,shell:!1}}return{executable:await Q.wrapWithSandbox(d),args:[],env:a,shell:!0}}o(Ml,"wrapSandboxTarget");async function Lr(){try{Q.cleanupAfterCommand()}catch{}await Q.reset().catch(()=>{})}o(Lr,"resetSandboxManagerBestEffort");function fe(e){bl(3,`${JSON.stringify(e)}
|
|
827
|
+
`)}o(fe,"writeWorkspaceSessionResponse");async function Kr(e){try{let t=JSON.parse(await kl(e,"utf8"));await Sl(e,{force:!0}),await Q.initialize(t.config,async()=>!0),fe({type:"ready",ok:!0});let n=El.createInterface({input:process.stdin}),r=Promise.resolve();for await(let i of n){let s=JSON.parse(i);r=r.then(async()=>{try{if(s.type==="cleanup"){Q.cleanupAfterCommand(),fe({id:s.id,type:"result",ok:!0});return}if(!s.request)throw new Error("Missing workspace wrap request.");let a=s.request.targetStartedMarker??`\0KODAX_ASRT_TARGET_STARTED:${vl()}\0
|
|
828
|
+
`,c=await Ml(s.request,a);fe({id:s.id,type:"result",ok:!0,invocation:c})}catch(a){fe({id:s.id,type:"result",ok:!1,error:St(a)})}})}return await r,await Lr(),0}catch(t){try{fe({type:"ready",ok:!1,error:St(t)})}catch(n){process.stderr.write(`ASRT workspace session could not report startup failure: ${St(n)}
|
|
829
|
+
`)}return await Lr(),1}}o(Kr,"runAsrtWorkspaceSessionProcess");var Xr=process.argv[2];if(!Xr)throw new Error("Missing ASRT workspace session initialization file.");process.exitCode=await Kr(Xr);
|