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