@kodax-ai/kodax 0.7.79 → 0.7.80

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