@kodax-ai/kodax 0.7.97-beta.2 → 0.7.97-beta.3

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 (161) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +55 -2
  3. package/README_CN.md +37 -1
  4. package/dist/artifacts/dist/contract.js +1 -1
  5. package/dist/artifacts/dist/contract.js.map +1 -1
  6. package/dist/artifacts/dist/document-render.d.ts +1 -1
  7. package/dist/artifacts/dist/document-render.js +41 -10
  8. package/dist/artifacts/dist/document-render.js.map +1 -1
  9. package/dist/artifacts/dist/kodax.js +1 -1
  10. package/dist/artifacts/dist/kodax.js.map +1 -1
  11. package/dist/artifacts/dist/libreoffice.d.ts +6 -1
  12. package/dist/artifacts/dist/libreoffice.js +37 -13
  13. package/dist/artifacts/dist/libreoffice.js.map +1 -1
  14. package/dist/artifacts/dist/runtime.js +13 -6
  15. package/dist/artifacts/dist/runtime.js.map +1 -1
  16. package/dist/artifacts/skills/artifact-review/SKILL.md +5 -1
  17. package/dist/chunks/agent-NWQPMZ7B.js +2 -0
  18. package/dist/chunks/agent-adapter-V3IPADCX.js +2 -0
  19. package/dist/chunks/argument-completer-VNKHT4X4.js +2 -0
  20. package/dist/chunks/{bedrock-native-Z5VNWF5U.js → bedrock-native-OEPOBW6W.js} +1 -1
  21. package/dist/chunks/{chunk-NSR4RW2F.js → chunk-3I2MIS4D.js} +1 -1
  22. package/dist/chunks/{chunk-RYBUYHDL.js → chunk-3Y5PBEOD.js} +1 -1
  23. package/dist/chunks/chunk-4FVCMKG2.js +20 -0
  24. package/dist/chunks/{chunk-F6GJXQNA.js → chunk-4GYXZTOD.js} +7 -7
  25. package/dist/chunks/{chunk-EISRVOBJ.js → chunk-4Z7ZHL6V.js} +2 -2
  26. package/dist/chunks/{chunk-W2CWO4PQ.js → chunk-576AAIQM.js} +1 -1
  27. package/dist/chunks/chunk-5E2P4RYS.js +4 -0
  28. package/dist/chunks/{chunk-X5M7TLJV.js → chunk-5LFQ5FVY.js} +1 -1
  29. package/dist/chunks/{chunk-WMMESRP3.js → chunk-6RDMSU4B.js} +1 -1
  30. package/dist/chunks/{chunk-3CP7AUWY.js → chunk-7BA4TSKC.js} +1 -1
  31. package/dist/chunks/{chunk-I325ER7D.js → chunk-AUU3N4V4.js} +1 -1
  32. package/dist/chunks/{chunk-DCE7XQUG.js → chunk-AYDLX2UK.js} +1 -1
  33. package/dist/chunks/{chunk-D36OIMV7.js → chunk-BP3NAYKY.js} +64 -64
  34. package/dist/chunks/{chunk-6TITQQAI.js → chunk-BSCSKJNC.js} +230 -229
  35. package/dist/chunks/{chunk-2HH5AS7E.js → chunk-DAQGOWKD.js} +88 -462
  36. package/dist/chunks/{chunk-UF3GZ5PO.js → chunk-EZF6ZRCO.js} +1 -1
  37. package/dist/chunks/chunk-F2TFWNVZ.js +2 -0
  38. package/dist/chunks/{chunk-53CJDQS2.js → chunk-FVXZ5L33.js} +1 -1
  39. package/dist/chunks/{chunk-MCDZNQWD.js → chunk-G32BMSHH.js} +75 -71
  40. package/dist/chunks/chunk-HJLYZ5AX.js +361 -0
  41. package/dist/chunks/{chunk-P55RJIOG.js → chunk-IOIFCU46.js} +1 -1
  42. package/dist/chunks/{chunk-DV5YPYLW.js → chunk-IR46ZHXU.js} +1 -1
  43. package/dist/chunks/chunk-NJDR5EEF.js +6 -0
  44. package/dist/chunks/{chunk-KDSO7V4O.js → chunk-OC3DQXN6.js} +1 -1
  45. package/dist/chunks/{chunk-J2L2NK6E.js → chunk-OMVAPRQI.js} +90 -57
  46. package/dist/chunks/chunk-OXCB2TRF.js +42 -0
  47. package/dist/chunks/{chunk-C6JGLEYD.js → chunk-P6R6V7EW.js} +1 -1
  48. package/dist/chunks/{chunk-SK3RRGHJ.js → chunk-PFBZ4ZXO.js} +28 -28
  49. package/dist/chunks/{chunk-V2XJSFFE.js → chunk-QDE6THC5.js} +1 -1
  50. package/dist/chunks/{chunk-EPK6EWRI.js → chunk-QRYEP34M.js} +1 -1
  51. package/dist/chunks/chunk-ROWYE472.js +460 -0
  52. package/dist/chunks/{chunk-R42S4BLA.js → chunk-SQGESMNC.js} +1 -1
  53. package/dist/chunks/{chunk-XZSFUGPN.js → chunk-U73VEVMP.js} +1 -1
  54. package/dist/chunks/{chunk-D425EZGC.js → chunk-V2TG7GNW.js} +1 -1
  55. package/dist/chunks/{chunk-QSZCR5GC.js → chunk-VRO2CDBY.js} +97 -97
  56. package/dist/chunks/{chunk-BBZWF2EA.js → chunk-WMQQQY3D.js} +1 -1
  57. package/dist/chunks/{chunk-JAF2YLZO.js → chunk-X3YYJJTF.js} +2 -2
  58. package/dist/chunks/{chunk-UL6YIT4M.js → chunk-XYRI6ER5.js} +1 -1
  59. package/dist/chunks/chunk-YRPB3LID.js +3 -0
  60. package/dist/chunks/{chunk-5MUVRFMU.js → chunk-ZDAU3LZ2.js} +1 -1
  61. package/dist/chunks/{chunk-WWPVEK6B.js → chunk-ZP3YSYWM.js} +10 -10
  62. package/dist/chunks/{client-LTIFNED5.js → client-NJ32JBC3.js} +1 -1
  63. package/dist/chunks/compaction-config-JBQGU3NO.js +2 -0
  64. package/dist/chunks/{construction-bootstrap-OAZKGI5Y.js → construction-bootstrap-CM47ZXG7.js} +1 -1
  65. package/dist/chunks/dist-O6BHIQEP.js +2 -0
  66. package/dist/chunks/{google-native-WLL27OV7.js → google-native-BV5GKT5B.js} +1 -1
  67. package/dist/chunks/host-PI5NL4W4.js +2 -0
  68. package/dist/chunks/{mistral-native-JXPIDDYZ.js → mistral-native-X42JCFZH.js} +1 -1
  69. package/dist/chunks/{model-DZF6URW3.js → model-MT3WJX76.js} +1 -1
  70. package/dist/chunks/{permission-YVVMLQ5I.js → permission-YVDVSE6H.js} +1 -1
  71. package/dist/chunks/{pi-messages-5LLOZH57.js → pi-messages-DVJANXV5.js} +1 -1
  72. package/dist/chunks/readline-helpers-5JS7UGTE.js +2 -0
  73. package/dist/chunks/run-manager-Y6VYEWSJ.js +2 -0
  74. package/dist/chunks/running-session-ANMBA5XV.js +2 -0
  75. package/dist/chunks/skills-XL2XIBWV.js +2 -0
  76. package/dist/chunks/{tool-dispatch-MLM3QTSU.js → tool-dispatch-2FOG65FC.js} +1 -1
  77. package/dist/chunks/{utils-2QNMYRGA.js → utils-XZ22R6VB.js} +1 -1
  78. package/dist/client-history.js +2 -0
  79. package/dist/history-turn.js +3 -0
  80. package/dist/index.d.ts +19 -19
  81. package/dist/index.js +2 -2
  82. package/dist/kodax_bootstrap.js +1 -1
  83. package/dist/kodax_cli.js +1472 -1810
  84. package/dist/kodax_doctor.js +1 -1
  85. package/dist/maintenance-scheduler.js +2 -0
  86. package/dist/manual-topics.json +32 -3
  87. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  88. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  89. package/dist/native/win32-x64/manifest.json +2 -2
  90. package/dist/one-shot-task.js +1 -1
  91. package/dist/provider-auth-cli.js +1 -1
  92. package/dist/runtime-daemon-schema.json +1 -1
  93. package/dist/sandbox-network-broker.js +93 -441
  94. package/dist/sdk-a2a.d.ts +13 -13
  95. package/dist/sdk-a2a.js +1 -1
  96. package/dist/sdk-agent.d.ts +17 -12
  97. package/dist/sdk-agent.js +1 -1
  98. package/dist/sdk-client.d.ts +6 -6
  99. package/dist/sdk-client.js +1 -1
  100. package/dist/sdk-coding.d.ts +17 -17
  101. package/dist/sdk-coding.js +1 -1
  102. package/dist/sdk-experimental-memory.d.ts +2 -2
  103. package/dist/sdk-experimental-memory.js +1 -1
  104. package/dist/sdk-llm.d.ts +4 -2
  105. package/dist/sdk-llm.js +1 -1
  106. package/dist/sdk-mcp.js +1 -1
  107. package/dist/sdk-media.d.ts +13 -13
  108. package/dist/sdk-media.js +1 -1
  109. package/dist/sdk-repl.d.ts +16 -16
  110. package/dist/sdk-repl.js +1 -1
  111. package/dist/sdk-runtime.d.ts +46 -46
  112. package/dist/sdk-runtime.js +1 -1
  113. package/dist/sdk-sandbox.js +1 -1
  114. package/dist/sdk-session.d.ts +7 -7
  115. package/dist/sdk-session.js +1 -1
  116. package/dist/sdk-skills.js +1 -1
  117. package/dist/semantic-worker.js +87 -435
  118. package/dist/storage-repair-cli.js +1 -1
  119. package/dist/types-chunks/{bash-prefix-extractor.d-CJliu5-D.d.ts → bash-prefix-extractor.d-BghXa_md.d.ts} +9 -3
  120. package/dist/types-chunks/{capsule.d-EMwSALqK.d.ts → capsule.d-BTlvC5qq.d.ts} +4 -4
  121. package/dist/types-chunks/{client-contract-B7q69yMA.d.ts → client-contract-B7ZSFKTv.d.ts} +52 -4
  122. package/dist/types-chunks/{controller.d-C0SAuNKu.d.ts → controller.d-Btu5FDdw.d.ts} +1 -1
  123. package/dist/types-chunks/{controller.d-D-hPLKaA.d.ts → controller.d-D6rEz5LS.d.ts} +3 -3
  124. package/dist/types-chunks/{history-retrieval.d-BwEUR9cb.d.ts → history-retrieval.d-B_AriUJp.d.ts} +1 -1
  125. package/dist/types-chunks/{manifest.d-YE3-AIeO.d.ts → manifest.d-Yyce-hHj.d.ts} +1 -1
  126. package/dist/types-chunks/{public-api.d-BhDU643p.d.ts → public-api.d-BLv3lFmw.d.ts} +9 -4
  127. package/dist/types-chunks/{review-inbox.d-Bgt46S7L.d.ts → review-inbox.d-yREk25Vf.d.ts} +2 -0
  128. package/dist/types-chunks/{review-packet.d-ChOfJaNI.d.ts → review-packet.d-xwXxHmML.d.ts} +1 -1
  129. package/dist/types-chunks/{run-manager.d-ChzguipG.d.ts → run-manager.d-D4sa9JYz.d.ts} +26 -12
  130. package/dist/types-chunks/{runtime-client-info-P_mRDG7j.d.ts → runtime-client-info-oRMrkHmb.d.ts} +2 -2
  131. package/dist/types-chunks/{runtime-event-BW5Pla7a.d.ts → runtime-event-BOyaILWg.d.ts} +3 -1
  132. package/dist/types-chunks/{sdk-runtime-cDe7qmN3.d.ts → sdk-runtime-CYyXmQok.d.ts} +27 -13
  133. package/dist/types-chunks/{sdk-session-D3pcSbnA.d.ts → sdk-session-D6mS5qgO.d.ts} +6 -3
  134. package/dist/types-chunks/{skill-invocation-error.d-gsNNDnnt.d.ts → skill-invocation-error.d-Be3qg4JQ.d.ts} +3 -3
  135. package/dist/types-chunks/{trusted-repl-entry-Bbkd2HlO.d.ts → trusted-repl-entry-YWNc4m-Z.d.ts} +7 -7
  136. package/dist/types-chunks/{types.d-BlXTogOo.d.ts → types.d-BQ-hbni4.d.ts} +1 -1
  137. package/dist/types-chunks/{utils.d-CxHyBvO6.d.ts → utils.d-C0F3Uf2X.d.ts} +6 -6
  138. package/dist/windows-effect-job-programs.json +4 -0
  139. package/docs/ARTIFACT_SDK.md +3 -3
  140. package/docs/CLIENT_CONTRACT.md +4 -2
  141. package/docs/SDK_MIGRATION.md +9 -5
  142. package/docs/SPACE_SDK_SEAMS.md +12 -1
  143. package/package.json +4 -3
  144. package/public_docs/README.md +10 -3
  145. package/public_docs/sdk/embedder-guide.md +1 -1
  146. package/dist/chunks/agent-DS7M57WD.js +0 -2
  147. package/dist/chunks/agent-adapter-TLWGGK3V.js +0 -2
  148. package/dist/chunks/argument-completer-OGCXKTRQ.js +0 -2
  149. package/dist/chunks/chunk-GJXOTOZB.js +0 -465
  150. package/dist/chunks/chunk-KE2NBMAP.js +0 -20
  151. package/dist/chunks/chunk-OGTRDK4Q.js +0 -359
  152. package/dist/chunks/chunk-R2HTPDI7.js +0 -2
  153. package/dist/chunks/chunk-SDPZFH6M.js +0 -4
  154. package/dist/chunks/chunk-XDMNJW6J.js +0 -42
  155. package/dist/chunks/compaction-config-ECMOFP5H.js +0 -2
  156. package/dist/chunks/dist-5J53DGAO.js +0 -2
  157. package/dist/chunks/host-65E5NM5P.js +0 -2
  158. package/dist/chunks/readline-helpers-UZXWBRXQ.js +0 -2
  159. package/dist/chunks/run-manager-ZFACIZM2.js +0 -2
  160. package/dist/chunks/running-session-Q5Y6A2QV.js +0 -2
  161. package/dist/chunks/skills-TJP6BLZJ.js +0 -2
@@ -1,5 +1,5 @@
1
1
  // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- var ci=Object.defineProperty;var o=(e,t)=>ci(e,"name",{value:t,configurable:!0});var l=(e,t)=>()=>(e&&(t=e(e=0)),t);var Gd=(e,t)=>{for(var n in t)ci(e,n,{get:t[n],enumerable:!0})};import{homedir as Xd}from"node:os";import{join as Vd}from"node:path";function Pe(){if(di)return di;let e=process.env[Yd];return e&&e.length>0?e:Vd(Xd(),Jd)}var Jd,Yd,di,C=l(()=>{"use strict";Jd=".kodax",Yd="KODAX_HOME";o(Pe,"getAgentConfigHome")});var li=l(()=>{"use strict"});var Vn=l(()=>{"use strict"});var me=l(()=>{"use strict"});var Bt=l(()=>{"use strict";me()});var P=l(()=>{"use strict"});var Jn=l(()=>{"use strict";P()});var Me=l(()=>{"use strict"});function Yn(e){if(e===void 0)return;if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid cache capabilities.");let t=e,n={"openai-retention":["24h"],"openai-options":["30m","12h"],anthropic:["1h"],bedrock:["1h"],pi:[],affinity:[]};if(t.affinityHeader!==void 0&&!["x-session-affinity","x-affinity"].includes(t.affinityHeader)||!Object.hasOwn(n,t.dialect)||t.longTtl!==void 0&&!n[t.dialect]?.includes(t.longTtl)||t.locations!==void 0&&(!Array.isArray(t.locations)||t.locations.some(r=>!["system","tools","messages"].includes(r)))||t.maxCheckpoints!==void 0&&(!Number.isSafeInteger(t.maxCheckpoints)||t.maxCheckpoints<1))throw new Error("Invalid declared cache dialect, lifetime or checkpoints.")}var Kt=l(()=>{"use strict";P();o(Yn,"validateCacheCapabilities")});import{AsyncLocalStorage as Zd}from"node:async_hooks";var zb,N=l(()=>{"use strict";P();Kt();Me();zb=new Zd});function el(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Tool constraints require an object schema.");return e}function qt(e){if(e===void 0)return;let t=el(e);if(t.strict!==void 0&&typeof t.strict!="boolean"||t.grammar!==void 0&&(!Array.isArray(t.grammar)||t.grammar.some(n=>!["lark","regex"].includes(n))))throw new Error("Invalid declared tool capabilities.")}var G=l(()=>{"use strict";P();o(el,"record");o(qt,"validateToolCapabilities")});import{AsyncLocalStorage as Oe}from"node:async_hooks";var ev,tv,nv,rv,ov,iv,B=l(()=>{"use strict";Me();ev=new Oe,tv=new Oe,nv=new Oe,rv=new Oe,ov=new Oe,iv=new Oe});function Qn(e,t){let n=fi.get(e);return n&&fi.set(t,n),t}var fi,he=l(()=>{"use strict";fi=new WeakMap;o(Qn,"inheritRejectedImage")});var Zn=l(()=>{"use strict"});var Ne=l(()=>{"use strict"});function er(e){return e.startsWith(pi)}function Ht(){throw new Error("Invalid or expired cloud request credential.")}function tl(e){try{if(!er(e))return Ht();let t=JSON.parse(Buffer.from(e.slice(pi.length),"base64url").toString("utf8"));if(!t||typeof t!="object")return Ht();let n=t;return typeof n.provider!="string"||!n.provider.trim()?Ht():{provider:n.provider,credential:n.credential}}catch{return Ht()}}function mi(e){if(!er(e))return[];try{let t=tl(e).credential;if(!t||typeof t!="object")return[];let n=t;return["key","token","accessKeyId","secretAccessKey","sessionToken"].flatMap(r=>typeof n[r]=="string"&&n[r]?[n[r]]:[])}catch{return[]}}var pi,zt=l(()=>{"use strict";pi="kodax-cloud-v1:";o(er,"isCloudCredentialCarrier");o(Ht,"invalid");o(tl,"unpack");o(mi,"cloudCredentialSecrets")});import{AsyncLocalStorage as nl}from"node:async_hooks";function $e(e){let t=rl.getStore(),n=t?.kind==="exact"&&t.isActive()?t.credential:void 0;return n?Gt(e,ol(n),new WeakMap):e}function ol(e){let t=[e,...mi(e)].sort((n,r)=>r.length-n.length);return new RegExp(t.map(n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")+"|\\[REDACTED_CREDENTIAL\\]","g")}function Ze(e,t){return e.replace(t,"[REDACTED_CREDENTIAL]")}function il(e,t,n){let r=e instanceof DOMException?new DOMException(Ze(e.message,t),Ze(e.name,t)):new Error;Object.setPrototypeOf(r,Object.getPrototypeOf(e));let i=Object.getOwnPropertyDescriptor(r,"stack")?.get;delete r.stack,n.set(e,r);for(let s of Reflect.ownKeys(e)){let a=Object.getOwnPropertyDescriptor(e,s);if(s==="stack"&&a?.get&&a.get===i&&(a={configurable:a.configurable,enumerable:a.enumerable,writable:!0,value:e.stack}),a===void 0||!("value"in a))continue;let c=typeof s=="string"?Ze(s,t):s;Object.prototype.hasOwnProperty.call(r,c)||Object.defineProperty(r,c,{...a,value:Gt(a.value,t,n)})}return Qn(e,r)}function Gt(e,t,n){if(typeof e=="string")return Ze(e,t);if(e===null||typeof e!="object")return e;let r=n.get(e);if(r!==void 0)return r;if(e instanceof Error)return il(e,t,n);if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(Gt(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=Ze(s,t);i[c]=Gt(a.value,t,n)}return i}var rl,$=l(()=>{"use strict";he();Zn();Ne();P();zt();B();rl=new nl;o($e,"redactScopedProviderCredential");o(ol,"redactionPattern");o(Ze,"redactText");o(il,"redactCredentialError");o(Gt,"redactCredentialValue")});import{AsyncLocalStorage as sl}from"node:async_hooks";var Mv,oe=l(()=>{"use strict";Mv=new sl});var tr=l(()=>{"use strict";N()});var et=l(()=>{"use strict"});var hi=l(()=>{"use strict"});var tt=l(()=>{"use strict"});var nr=l(()=>{"use strict"});var De=l(()=>{"use strict"});var Jt=l(()=>{"use strict"});var Le,gi,Yt,wi,ie=l(()=>{"use strict";Le={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},gi={...Le,multimodalSupport:"image-input"},Yt={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},wi={...Yt,multimodalSupport:"image-input"}});var nt=l(()=>{"use strict"});var ge=l(()=>{"use strict";nt()});var je=l(()=>{"use strict";et();he();G();N();Ne();N();oe();B();P();hi();tt();nr();De();$();Jt();me();oe();ie();ge()});import{parse as PS}from"partial-json";var en=l(()=>{"use strict"});var it=l(()=>{"use strict"});var we=l(()=>{"use strict";$()});var st=l(()=>{"use strict"});import{AsyncLocalStorage as yl}from"node:async_hooks";var BS,KS,dr=l(()=>{"use strict";BS=10*1024*1024,KS=yl.snapshot()});import{AsyncLocalStorage as bl}from"node:async_hooks";var XS,X=l(()=>{"use strict";dr();XS=new bl});var _i=l(()=>{"use strict"});var We=l(()=>{"use strict";he();N();N();G();tr();B();je();P();en();it();me();we();ge();st();$();X();oe();nt();De();_i()});var dt=l(()=>{"use strict";Jn();Me();N();N();N();G();P();B();$();oe();We();X();Bt();he();we();De();tt();nt()});var Li=l(()=>{"use strict"});var pr=l(()=>{"use strict"});var ji=l(()=>{"use strict";P()});var Fi=l(()=>{"use strict";P()});var rn=l(()=>{"use strict";De();Vn();Me();ji();N();he();N();G();Fi();tr();B();je();en();it();P();we();me();ge();st();X();oe();$()});var Ox,Nx,$x,Dx,mr=l(()=>{"use strict";Ox=Object.freeze({status:"terminated"}),Nx=Object.freeze({status:"already-exited"}),$x=Object.freeze({status:"unknown"}),Dx=String.raw`
2
+ var li=Object.defineProperty;var o=(e,t)=>li(e,"name",{value:t,configurable:!0});var l=(e,t)=>()=>(e&&(t=e(e=0)),t);var Gd=(e,t)=>{for(var n in t)li(e,n,{get:t[n],enumerable:!0})};import{homedir as Xd}from"node:os";import{join as Vd}from"node:path";function Pe(){if(ui)return ui;let e=process.env[Yd];return e&&e.length>0?e:Vd(Xd(),Jd)}var Jd,Yd,ui,C=l(()=>{"use strict";Jd=".kodax",Yd="KODAX_HOME";o(Pe,"getAgentConfigHome")});var fi=l(()=>{"use strict"});var Xn=l(()=>{"use strict"});var me=l(()=>{"use strict"});var Kt=l(()=>{"use strict";me()});var P=l(()=>{"use strict"});var Vn=l(()=>{"use strict";P()});var Me=l(()=>{"use strict"});function Jn(e){if(e===void 0)return;if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Invalid cache capabilities.");let t=e,n={"openai-retention":["24h"],"openai-options":["30m","12h"],anthropic:["1h"],bedrock:["1h"],pi:[],affinity:[]};if(t.affinityHeader!==void 0&&!["x-session-affinity","x-affinity"].includes(t.affinityHeader)||!Object.hasOwn(n,t.dialect)||t.longTtl!==void 0&&!n[t.dialect]?.includes(t.longTtl)||t.locations!==void 0&&(!Array.isArray(t.locations)||t.locations.some(r=>!["system","tools","messages"].includes(r)))||t.maxCheckpoints!==void 0&&(!Number.isSafeInteger(t.maxCheckpoints)||t.maxCheckpoints<1))throw new Error("Invalid declared cache dialect, lifetime or checkpoints.")}var qt=l(()=>{"use strict";P();o(Jn,"validateCacheCapabilities")});import{AsyncLocalStorage as Zd}from"node:async_hooks";var Bv,N=l(()=>{"use strict";P();qt();Me();Bv=new Zd});function el(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Tool constraints require an object schema.");return e}function Ht(e){if(e===void 0)return;let t=el(e);if(t.strict!==void 0&&typeof t.strict!="boolean"||t.grammar!==void 0&&(!Array.isArray(t.grammar)||t.grammar.some(n=>!["lark","regex"].includes(n))))throw new Error("Invalid declared tool capabilities.")}var X=l(()=>{"use strict";P();o(el,"record");o(Ht,"validateToolCapabilities")});import{AsyncLocalStorage as Oe}from"node:async_hooks";var Jv,Yv,Qv,Zv,eb,tb,B=l(()=>{"use strict";Me();Jv=new Oe,Yv=new Oe,Qv=new Oe,Zv=new Oe,eb=new Oe,tb=new Oe});function Yn(e,t){let n=mi.get(e);return n&&mi.set(t,n),t}var mi,he=l(()=>{"use strict";mi=new WeakMap;o(Yn,"inheritRejectedImage")});var Qn=l(()=>{"use strict"});var Ne=l(()=>{"use strict"});function Zn(e){return e.startsWith(hi)}function zt(){throw new Error("Invalid or expired cloud request credential.")}function tl(e){try{if(!Zn(e))return zt();let t=JSON.parse(Buffer.from(e.slice(hi.length),"base64url").toString("utf8"));if(!t||typeof t!="object")return zt();let n=t;return typeof n.provider!="string"||!n.provider.trim()?zt():{provider:n.provider,credential:n.credential}}catch{return zt()}}function gi(e){if(!Zn(e))return[];try{let t=tl(e).credential;if(!t||typeof t!="object")return[];let n=t;return["key","token","accessKeyId","secretAccessKey","sessionToken"].flatMap(r=>typeof n[r]=="string"&&n[r]?[n[r]]:[])}catch{return[]}}var hi,Gt=l(()=>{"use strict";hi="kodax-cloud-v1:";o(Zn,"isCloudCredentialCarrier");o(zt,"invalid");o(tl,"unpack");o(gi,"cloudCredentialSecrets")});import{AsyncLocalStorage as nl}from"node:async_hooks";function $e(e){let t=rl.getStore(),n=t?.kind==="exact"&&t.isActive()?t.credential:void 0;return n?Xt(e,ol(n),new WeakMap):e}function ol(e){let t=[e,...gi(e)].sort((n,r)=>r.length-n.length);return new RegExp(t.map(n=>n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join("|")+"|\\[REDACTED_CREDENTIAL\\]","g")}function Ze(e,t){return e.replace(t,"[REDACTED_CREDENTIAL]")}function il(e,t,n){let r=e instanceof DOMException?new DOMException(Ze(e.message,t),Ze(e.name,t)):new Error;Object.setPrototypeOf(r,Object.getPrototypeOf(e));let i=Object.getOwnPropertyDescriptor(r,"stack")?.get;delete r.stack,n.set(e,r);for(let s of Reflect.ownKeys(e)){let a=Object.getOwnPropertyDescriptor(e,s);if(s==="stack"&&a?.get&&a.get===i&&(a={configurable:a.configurable,enumerable:a.enumerable,writable:!0,value:e.stack}),a===void 0||!("value"in a))continue;let c=typeof s=="string"?Ze(s,t):s;Object.prototype.hasOwnProperty.call(r,c)||Object.defineProperty(r,c,{...a,value:Xt(a.value,t,n)})}return Yn(e,r)}function Xt(e,t,n){if(typeof e=="string")return Ze(e,t);if(e===null||typeof e!="object")return e;let r=n.get(e);if(r!==void 0)return r;if(e instanceof Error)return il(e,t,n);if(Array.isArray(e)){let s=[];n.set(e,s);for(let a of e)s.push(Xt(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=Ze(s,t);i[c]=Xt(a.value,t,n)}return i}var rl,$=l(()=>{"use strict";he();Qn();Ne();P();Gt();B();rl=new nl;o($e,"redactScopedProviderCredential");o(ol,"redactionPattern");o(Ze,"redactText");o(il,"redactCredentialError");o(Xt,"redactCredentialValue")});import{AsyncLocalStorage as sl}from"node:async_hooks";var Rb,oe=l(()=>{"use strict";Rb=new sl});var er=l(()=>{"use strict";N()});var et=l(()=>{"use strict"});var wi=l(()=>{"use strict"});var tt=l(()=>{"use strict"});var tr=l(()=>{"use strict"});var De=l(()=>{"use strict"});var Yt=l(()=>{"use strict"});var Le,yi,Qt,vi,ie=l(()=>{"use strict";Le={transport:"native-api",conversationSemantics:"full-history",mcpSupport:"none",contextFidelity:"full",toolCallingFidelity:"full",sessionSupport:"full",longRunningSupport:"full",multimodalSupport:"none",evidenceSupport:"full"},yi={...Le,multimodalSupport:"image-input"},Qt={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"none",evidenceSupport:"limited"},vi={...Qt,multimodalSupport:"image-input"}});var nt=l(()=>{"use strict"});var ge=l(()=>{"use strict";nt()});var je=l(()=>{"use strict";et();he();X();N();Ne();N();oe();B();P();wi();tt();tr();De();$();Yt();me();oe();ie();ge()});import{parse as RS}from"partial-json";var tn=l(()=>{"use strict"});var it=l(()=>{"use strict"});var we=l(()=>{"use strict";$()});var st=l(()=>{"use strict"});import{AsyncLocalStorage as yl}from"node:async_hooks";var FS,WS,cr=l(()=>{"use strict";FS=10*1024*1024,WS=yl.snapshot()});import{AsyncLocalStorage as vl}from"node:async_hooks";var HS,H=l(()=>{"use strict";cr();HS=new vl});var Ai=l(()=>{"use strict"});var We=l(()=>{"use strict";he();N();N();X();er();B();je();P();tn();it();me();we();ge();st();$();H();oe();nt();De();Ai()});var dt=l(()=>{"use strict";Vn();Me();N();N();N();X();P();B();$();oe();We();H();Kt();he();we();De();tt();nt()});var ji=l(()=>{"use strict"});var pr=l(()=>{"use strict"});var Fi=l(()=>{"use strict";P()});var Wi=l(()=>{"use strict";P()});var on=l(()=>{"use strict";De();Xn();Me();Fi();N();he();N();X();Wi();er();B();je();tn();it();P();we();me();ge();st();H();oe();$()});var Tx,Cx,Px,Mx,mr=l(()=>{"use strict";Tx=Object.freeze({status:"terminated"}),Cx=Object.freeze({status:"already-exited"}),Px=Object.freeze({status:"unknown"}),Mx=String.raw`
3
3
  using System;
4
4
  using System.Runtime.InteropServices;
5
5
  using System.Text;
@@ -86,14 +86,25 @@ public static class KodaXNativeProcessSnapshot {
86
86
  CloseHandle(snapshot);
87
87
  }
88
88
  }
89
- }`});var Wi=l(()=>{"use strict";mr()});var on=l(()=>{"use strict";je();Wi();ie();st()});var hr=l(()=>{"use strict";mr()});var gr=l(()=>{"use strict"});var Ui=l(()=>{"use strict";hr();gr()});var wr=l(()=>{"use strict"});import Bi from"node:fs";import Ki from"node:os";import qi from"node:path";function Hi(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}function Ul(){let e=qi.join(Ki.homedir(),".codex","config.toml");try{return Bi.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}function Bl(){let e=qi.join(Ki.homedir(),".gemini","settings.json");try{let t=JSON.parse(Bi.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}}function Ue(){return Ul()||Ll}function Be(){return Bl()||jl}function lt(){return Hi([Ue(),...Fl])}function ut(){return Hi([Be(),...Wl])}var Ll,jl,Fl,Wl,ft=l(()=>{"use strict";Ll="gpt-5.4",jl="auto-gemini-3",Fl=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Wl=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];o(Hi,"dedupePreserveOrder");o(Ul,"readCodexConfiguredModel");o(Bl,"readGeminiConfiguredModel");o(Ue,"getCodexCliDefaultModel");o(Be,"getGeminiCliDefaultModel");o(lt,"getCodexCliKnownModels");o(ut,"getGeminiCliKnownModels")});var yE,bE,zi=l(()=>{"use strict";on();Ui();wr();ft();ie();yE=Be(),bE=ut()});var Gi=l(()=>{"use strict";hr();gr()});var PE,ME,Xi=l(()=>{"use strict";on();Gi();wr();ft();PE=Ue(),ME=lt()});function sn(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new Error(`${t}.outputTokenLimit must be a positive safe integer`);return e}}var br=l(()=>{"use strict";o(sn,"optionalOutputTokenLimit")});function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function be(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}function ye(e,t){if(e!==void 0)return be(e,t)}function os(e,t){if(e!==void 0){if(typeof e!="string"||!Zi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Zi.join(", ")}, got ${JSON.stringify(e)}`);return e}}function se(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}}function M(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}function ns(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)=>be(n,`${t}[${r}]`))}}function ql(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=be(i,`${t}.${r}`);return n}function Hl(e,t){if(e!==void 0){if(typeof e!="string"||!Qi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Qi.join(", ")}, got ${JSON.stringify(e)}`);return e}}function vr(e,t){if(typeof e!="string"||!Vi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Vi.join(", ")}, got ${JSON.stringify(e)}`);return e}function zl(e,t){if(typeof e!="string"||!Ji.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ji.join(", ")}, got ${JSON.stringify(e)}`);return e}function Gl(e,t){if(e!==void 0){if(typeof e!="string"||!Yi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Yi.join(", ")}, got ${JSON.stringify(e)}`);return e}}function rs(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=zl(e.effortStrategy,`${t}.effortStrategy`),r=Hl(e.reasoningPreset,`${t}.reasoningPreset`),i=Gl(e.thinkingStrategy,`${t}.thinkingStrategy`),s=ye(e.defaultEffort,`${t}.defaultEffort`),a=ql(e.effortAliases,`${t}.effortAliases`),c=ns(e.disabledEfforts,`${t}.disabledEfforts`),d=ns(e.localRejectEfforts,`${t}.localRejectEfforts`),u=M(e.allowCustomEffort,`${t}.allowCustomEffort`),f=M(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=M(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),h=M(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),m=M(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),k=M(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),v=M(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),y=M(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),g={effortStrategy:n};if(r!==void 0&&(g.reasoningPreset=r),i!==void 0&&(g.thinkingStrategy=i),s!==void 0&&(g.defaultEffort=s),a!==void 0&&(g.effortAliases=a),c!==void 0&&(g.disabledEfforts=c),d!==void 0&&(g.localRejectEfforts=d),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);g.supportedEfforts=e.supportedEfforts.map((w,b)=>{if(!Z(w))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${b}] must be an object`);return{value:be(w.value,`${t}.supportedEfforts[${b}].value`),...ye(w.description,`${t}.supportedEfforts[${b}].description`)!==void 0?{description:ye(w.description,`${t}.supportedEfforts[${b}].description`)}:{},...M(w.isDefault,`${t}.supportedEfforts[${b}].isDefault`)!==void 0?{isDefault:M(w.isDefault,`${t}.supportedEfforts[${b}].isDefault`)}:{},...M(w.isUserVisible,`${t}.supportedEfforts[${b}].isUserVisible`)!==void 0?{isUserVisible:M(w.isUserVisible,`${t}.supportedEfforts[${b}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!Z(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let w={};for(let[b,R]of Object.entries(e.budgetByEffort))w[b]=se(R,`${t}.budgetByEffort.${b}`)??0;g.budgetByEffort=w}u!==void 0&&(g.allowCustomEffort=u),f!==void 0&&(g.supportsReasoningEffort=f),p!==void 0&&(g.supportsReasoningSummary=p),h!==void 0&&(g.supportsEncryptedReasoningReplay=h),m!==void 0&&(g.supportsAdaptiveThinking=m),k!==void 0&&(g.supportsManualThinkingBudget=k),v!==void 0&&(g.supportsDisabledThinking=v),y!==void 0&&(g.requiresEffortBetaHeader=y);for(let w of["supportsThinkingDisplay","supportsThinkingBlockBinding"]){let b=M(e[w],`${t}.${w}`);b!==void 0&&Object.assign(g,{[w]:b})}return g}function is(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?rs(n,`${t}.reasoningProfile`):rs(r,`${t}.reasoningCapabilityV2`)}function Xl(e,t){if(typeof e!="string"||!es.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${es.join(", ")}, got ${JSON.stringify(e)}`);return e}function Vl(e,t){if(typeof e!="string"||!ts.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ts.join(", ")}, got ${JSON.stringify(e)}`);return e}function ss(e,t){try{qt(e.toolCapabilities),Yn(e.cacheCapabilities)}catch(n){throw new Error(`${t}: ${n instanceof Error?n.message:"Invalid constraint metadata."}`)}return{...e.toolCapabilities?{toolCapabilities:structuredClone(e.toolCapabilities)}:{},...e.cacheCapabilities?{cacheCapabilities:structuredClone(e.cacheCapabilities)}:{}}}function Jl(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=be(e.id,`${t}.id`),r=ye(e.wireModel,`${t}.wireModel`),i=ye(e.displayName,`${t}.displayName`),s=ye(e.multimodalSupport,`${t}.multimodalSupport`);if(s!==void 0&&!["none","image-input","full"].includes(s))throw new Error(`provider-capabilities.json: ${t}.multimodalSupport must be none, image-input or full`);let a=se(e.contextWindow,`${t}.contextWindow`),c=se(e.maxOutputTokens,`${t}.maxOutputTokens`),d=os(e.maxOutputTokensField,`${t}.maxOutputTokensField`),u=sn(e.outputTokenLimit,t),f=se(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),p=M(e.replayReasoningContent,`${t}.replayReasoningContent`),h=M(e.strictThinkingSignature,`${t}.strictThinkingSignature`),m=se(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),k=e.reasoningCapability===void 0?void 0:vr(e.reasoningCapability,`${t}.reasoningCapability`),v=is(e,t),y={id:n,...ss(e,t)};for(let[g,w]of Object.entries({wireModel:r,displayName:i,multimodalSupport:s,contextWindow:a,maxOutputTokens:c,outputTokenLimit:u,maxOutputTokensField:d,thinkingBudgetCap:f,reasoningCapability:k,reasoningProfile:v,replayReasoningContent:p,strictThinkingSignature:h,streamMaxDurationMs:m}))w!==void 0&&Object.assign(y,{[g]:w});return y}function Yl(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=vr(i,`${t}.${r}`);return n}function Ql(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=M(e.cliBridge,`providers.${t}.cliBridge`),r=be(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=vr(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=is(e,`providers.${t}`),a=Xl(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=Vl(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=se(e.contextWindow,`providers.${t}.contextWindow`),u=se(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),f=os(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),p=sn(e.outputTokenLimit,`providers.${t}`),h=se(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),m=M(e.supportsThinking,`providers.${t}.supportsThinking`),k=Yl(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),v=ye(e.model,`providers.${t}.model`);if(n&&(v!==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&&v===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let y;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);y=e.models.map((b,R)=>Jl(b,`providers.${t}.models[${R}]`));let w=new Set([...v===void 0?[]:[v],...y.map(b=>b.id)]);for(let[b,R]of y.entries())if(R.wireModel!==void 0&&!w.has(R.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${b}].wireModel must reference a declared model, got ${JSON.stringify(R.wireModel)}`)}let g={...ss(e,`providers.${t}`),apiKeyEnv:r,reasoningCapability:i,capabilityProfile:a,verifyStrategy:c};for(let[w,b]of Object.entries({reasoningProfile:s,model:v,models:y,contextWindow:d,maxOutputTokens:u,outputTokenLimit:p,maxOutputTokensField:f,thinkingBudgetCap:h,supportsThinking:m,modelReasoningCapabilities:k}))b!==void 0&&Object.assign(g,{[w]:b});return n&&(g.cliBridge=!0),g}function as(e){if(!Z(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=be(e.updatedAt,"updatedAt");if(!Z(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]=Ql(i,r);return{version:1,updatedAt:t,providers:n}}var Vi,Ji,Yi,Qi,Zi,es,ts,cs=l(()=>{"use strict";G();Kt();br();Vi=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Ji=["google-thinking-level","bedrock-anthropic-effort","bedrock-openai-effort","bedrock-openai-nested-effort","openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Yi=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Qi=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k3.1","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"],Zi=["max_tokens","max_completion_tokens"],es=["native","image-input-native","cli-bridge","image-input-cli-bridge"],ts=["count-tokens","models-list","minimal-message","unsupported"];o(Z,"isPlainObject");o(be,"requireString");o(ye,"optionalString");o(os,"optionalMaxOutputTokensField");o(se,"optionalNumber");o(M,"optionalBoolean");o(ns,"optionalStringArray");o(ql,"optionalStringMap");o(Hl,"optionalReasoningPreset");o(vr,"requireReasoningCapability");o(zl,"requireEffortStrategy");o(Gl,"optionalThinkingStrategy");o(rs,"validateReasoningProfile");o(is,"validateReasoningProfileField");o(Xl,"requireProfileName");o(Vl,"requireVerifyStrategy");o(ss,"constraintMetadata");o(Jl,"validateModelDescriptor");o(Yl,"validateModelReasoningCapabilities");o(Ql,"validateProviderEntry");o(as,"validateProviderCapabilitiesJson")});import{existsSync as Zl,readFileSync as eu}from"node:fs";import Ke from"node:path";import{fileURLToPath as tu}from"node:url";function ru(){if(process.env.KODAX_BUNDLED==="true")return Ke.join(Ke.dirname(process.execPath),"provider-capabilities.json");let e=Ke.dirname(tu(import.meta.url)),t=[Ke.join(e,"provider-capabilities.json"),Ke.join(Ke.dirname(e),"provider-capabilities.json")];for(let n of t)if(Zl(n))return n;return t[0]}function ds(e){e.toolCapabilities?.grammar&&Object.freeze(e.toolCapabilities.grammar),e.toolCapabilities&&Object.freeze(e.toolCapabilities),e.cacheCapabilities?.locations&&Object.freeze(e.cacheCapabilities.locations),e.cacheCapabilities&&Object.freeze(e.cacheCapabilities)}function ou(e){if(ds(e),e.models){for(let t of e.models)t.reasoningProfile&&ls(t.reasoningProfile);for(let t of e.models)ds(t),Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&ls(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}function ls(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)}function iu(e){if(e==="gemini-cli"){let t=Be();return{model:t,models:ut().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=Ue();return{model:t,models:lt().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}function su(e,t){let n=nu[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);let r={...t.cliBridge?iu(e):{model:t.model},apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};for(let i of["reasoningProfile","supportsThinking","toolCapabilities","cacheCapabilities"])t[i]!==void 0&&Object.assign(r,{[i]:t[i]});if(!t.cliBridge)for(let i of["models","modelReasoningCapabilities","contextWindow","maxOutputTokens","outputTokenLimit","maxOutputTokensField","thinkingBudgetCap"])t[i]!==void 0&&Object.assign(r,{[i]:t[i]});return r}function us(){if(an)return an;let e=ru(),t;try{let i=eu(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=as(t),r={};for(let[i,s]of Object.entries(n.providers))r[i]=ou(su(i,s));return an=Object.freeze(r),an}var nu,an,fs=l(()=>{"use strict";ie();ft();cs();nu=Object.freeze({native:Le,"image-input-native":gi,"cli-bridge":Yt,"image-input-cli-bridge":wi}),an=null;o(ru,"resolveJsonPath");o(ds,"freezeConstraints");o(ou,"deepFreezeSnapshot");o(ls,"freezeReasoningProfile");o(iu,"resolveCliBridgeModels");o(su,"buildSnapshot");o(us,"getProviderSnapshots")});var cn,ps,pt=l(()=>{"use strict";rn();We();zi();Xi();P();$();ie();fs();cn=us(),ps=process.env.KODAX_PROVIDER??"zhipu-coding"});var hs=l(()=>{"use strict";$();dt();we()});var dn=l(()=>{"use strict"});var mt=l(()=>{"use strict"});var ln=l(()=>{"use strict";Ne();$();N()});var ys=l(()=>{"use strict";N();B();We();dt();ln()});var Er=l(()=>{"use strict";G();je();P();$();we();De()});var bs=l(()=>{"use strict";Er();ln()});var vs=l(()=>{"use strict";Er();bs()});var un=l(()=>{"use strict";rn();We();dt();hs();dn();mt();ys();vs();ie();ge();br();G();Kt()});var fn=l(()=>{"use strict";un();pt();ie()});var Tr=l(()=>{"use strict";pt();fn()});var Cr=l(()=>{"use strict";P();pt();fn();Tr();$()});var Mr=l(()=>{"use strict";je();rn();We();on();pt();un();fn();Tr();Cr();we()});var Ds=l(()=>{"use strict";Mr();ge();pr();nt()});var Or=l(()=>{"use strict"});var Nr=l(()=>{"use strict";Or()});var Ls=l(()=>{"use strict";Nr();it();$()});var ve=l(()=>{"use strict";Ne()});var pn=l(()=>{"use strict";ve()});var Fs=l(()=>{"use strict";pn();ve()});var mn=l(()=>{"use strict";B();nr();N()});var ee=l(()=>{"use strict";et();$();B();mn();tt();Jt();Me()});var Ws=l(()=>{"use strict";me()});var Us=l(()=>{"use strict";X();Ws()});var Bs=l(()=>{"use strict";G()});var Ks=l(()=>{"use strict";et();mt();ln();$();ee();Us();Bs();oe()});var $r=l(()=>{"use strict";mt();dn();un()});var qs=l(()=>{"use strict";ee();Cr()});function Hs(){let e=new Map;return{async read(t,n){n?.throwIfAborted();let r=e.get(t);return r?structuredClone(r):void 0},async compareAndSwap(t,n,r,i){return i.signal?.throwIfAborted(),!i.isCurrent()||e.get(t)?.revision!==n?!1:(e.set(t,structuredClone(r)),!0)}}}var SR,zs=l(()=>{"use strict";ee();B();mn();qs();o(Hs,"createMemoryModelCatalogStore");SR=Hs()});var Dr=l(()=>{"use strict";ve();pn()});var Gs=l(()=>{"use strict";ve();Dr();pn()});var Xs=l(()=>{"use strict";ee()});var Fr=l(()=>{"use strict";X()});var Js=l(()=>{"use strict";ee();Xs();Fr()});var Ys=l(()=>{"use strict";N()});var Qs=l(()=>{"use strict";ee();Fr();mn();Ys();B()});var Zs=l(()=>{"use strict";Ne();N();P();$();Bt();Jn();X();ee();B();G()});var ea=l(()=>{"use strict";$r();ee()});import xT from"proper-lockfile";var ta=l(()=>{"use strict";ve()});var na=l(()=>{"use strict";zt()});var K=l(()=>{"use strict";li();Vn();Bt();dt();B();$();P();tt();Zn();me();Li();pr();ge();Ds();Mr();ft();en();it();oe();Or();Nr();Ls();Jt();st();dr();X();X();he();X();ve();Fs();dn();zt();mt();Ks();$r();zs();Dr();Gs();Js();Qs();Zs();ea();ta();et();na()});function I(e){let t=$e(e),n=of.at(-1)?.sink;if(n){try{n(t)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${ra(t)}
90
- `)}catch{}}function ra(e){let t=$e(e),n=sf(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}function sf(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)}}var of,L=l(()=>{"use strict";K();of=[];o(I,"emitKodaXDiagnostic");o(ra,"formatKodaXDiagnostic");o(sf,"formatDiagnosticDetail")});import{debuglog as Df}from"node:util";var vM,Hr=l(()=>{"use strict";vM=Df("kodax:macos-git")});import{spawnSync as yt}from"node:child_process";import{readFileSync as Lf}from"node:fs";function bt(e,t,n,r){let i=t.error?.code;I({source:"runtime:windows",level:r?"debug":"warn",message:"Windows process probe completed.",detail:{stage:e,cached:!1,available:r,durationMs:Date.now()-n,timeoutMs:5e3,exitCode:t.status,errorCode:i===void 0?void 0:["ENOENT","EACCES","EPERM","ETIMEDOUT","ENOEXEC","ENOMEM","EIO"].includes(i)?i:"OTHER"}})}function Ff(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).flatMap(i=>{if(typeof i!="object"||i===null)return[];let s=i,a=Number(s.pid),c=Number(s.parentPid),d=typeof s.creationTime=="string"?s.creationTime:String(s.creationTime??"0");return!Number.isFinite(a)||a<=0||!Number.isFinite(c)?[]:[{pid:a,parentPid:c,creationTime:/^\d+$/.test(d)?d:"0"}]})}catch{return[]}}function Wf(e){let t=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.(\d{6})([+-])(\d{3})$/.exec(e);if(!t)return;let[,n,r,i,s,a,c,d,u,f]=t,p=Date.UTC(Number(n),Number(r)-1,Number(i),Number(s),Number(a),Number(c),Number(d.slice(0,3))),h=Number(f)*6e4*(u==="+"?1:-1),m=p-h;if(Number.isFinite(m))return{identity:(BigInt(m)+11644473600000n).toString(),unixMs:m}}function Uf(){let e=["$cutoff = [DateTime]::UtcNow","$items = try { @(Get-CimInstance Win32_Process -ErrorAction Stop) } catch { @(Get-WmiObject Win32_Process -ErrorAction Stop) }","$rows = @($items | ForEach-Object {"," $creationTime = '0'"," try {"," $created = $_.CreationDate"," if ($created -isnot [DateTime]) { $created = [System.Management.ManagementDateTimeConverter]::ToDateTime([string]$created) }"," $created = $created.ToUniversalTime()"," if ($created -le $cutoff) { $creationTime = ([long][Math]::Floor($created.ToFileTimeUtc() / 10000)).ToString() }"," } catch {}"," [PSCustomObject]@{ pid = [int]$_.ProcessId; parentPid = [int]$_.ParentProcessId; creationTime = $creationTime }","})","$rows | ConvertTo-Json -Compress"].join(`
91
- `),t=Date.now(),n=yt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:vt,windowsHide:!0});if(!n.error&&n.status===0){let a=Ff(n.stdout);if(a.length>0)return a}bt("process-snapshot-cim",n,t,!1);let r=Date.now(),i=yt("wmic",["process","get","CreationDate,ParentProcessId,ProcessId","/format:list"],{encoding:"utf8",timeout:vt,windowsHide:!0});if(i.error||i.status!==0){bt("process-snapshot-wmic",i,r,!1);return}let s=i.stdout.split(/\r?\n\s*\r?\n/).flatMap(a=>{let c=new Map(a.split(/\r?\n/).flatMap(h=>{let m=h.indexOf("=");return m<0?[]:[[h.slice(0,m),h.slice(m+1)]]})),d=Number(c.get("ProcessId")),u=Number(c.get("ParentProcessId")),f=c.get("CreationDate"),p=f===void 0?void 0:Wf(f);return!Number.isFinite(d)||d<=0||!Number.isFinite(u)||p===void 0||p.unixMs>r?[]:[{pid:d,parentPid:u,creationTime:p.identity}]});return s.length>0?s:void 0}function Bf(){let e=["$source = @'",jf,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
92
- `),t=Date.now(),n=yt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:vt,windowsHide:!0});if(n.error||n.status!==0){bt("process-snapshot-native",n,t,!1);return}let r=Kf(n.stdout);return r===void 0&&bt("process-snapshot-native",n,t,!1),r}function Kf(e){let t=e.split(/\r?\n/).map(r=>r.trim()).filter(Boolean);if(t.some(r=>!/^\d+,\d+,\d+$/.test(r)))return;let n=t.flatMap(r=>{let[i,s,a="0"]=r.split(",",3),c=Number(i),d=Number(s);return!Number.isFinite(c)||c<=0||!Number.isFinite(d)?[]:[{pid:c,parentPid:d,creationTime:a}]});return n.length>0?n:void 0}function da(){return Bf()??Uf()}function qf(){return fa<=0?da():(ua||(la=da(),ua=!0),la)}function Hf(e){return[`foreach ($processId in @(${e.join(",")})) {`,' $target = $null; $creationTime = "0"'," try {"," $target = [System.Diagnostics.Process]::GetProcessById($processId)"," [long]$remainder = 0"," $creationTime = ([Math]::DivRem($target.StartTime.ToFileTimeUtc(), [long]10000, [ref]$remainder)).ToString([System.Globalization.CultureInfo]::InvariantCulture)",' } catch { $creationTime = "0" } finally { if ($null -ne $target) { $target.Dispose() } }',' [Console]::Out.WriteLine("$processId,$creationTime")',"}"].join(`
93
- `)}function zf(e,t){let n=e.trim().split(/\r?\n/);if(!(n.length!==t.length||n.some((r,i)=>!r.startsWith(`${t[i]},`)||!/^\d+,\d+$/.test(r))))return new Map(n.map(r=>{let[i,s]=r.split(",");return[Number(i),s]}))}function Gf(e){let t=Date.now(),n=yt("powershell.exe",["-NoProfile","-NonInteractive","-Command",Hf(e)],{encoding:"utf8",timeout:vt,windowsHide:!0}),r=zf(n.stdout??"",e);if(n.error||n.status!==0||r===void 0){bt("process-start-identities",n,t,!1);return}return r}function Xr(e){let t=[...new Set(e.filter(r=>Number.isInteger(r)&&r>0))];if(process.platform!=="win32")return new Map(t.map(r=>[r,Se(r)]));if(t.length===0)return new Map;let n=(fa<=0?Gf(t):void 0)??new Map(qf()?.map(r=>[r.pid,r.creationTime]));return new Map(t.map(r=>{let i=n.get(r);return[r,i==="0"?void 0:i]}))}function Se(e){if(!Number.isInteger(e)||e<=0)return;if(process.platform==="win32"){let r=Xr([e]).get(e);return r===void 0&&I({source:"runtime:windows",level:"warn",message:"Windows process start identity is unavailable.",detail:{stage:"process-start-identity",pid:e,available:!1}}),r}if(process.platform==="linux")try{let r=Lf(`/proc/${e}/stat`,"utf8"),i=r.slice(r.lastIndexOf(")")+2).trim().split(/\s+/);return i[19]===void 0?void 0:`linux:${i[19]}`}catch{return}let t=yt("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:vt,windowsHide:!0}),n=t.status===0?t.stdout.trim():"";return n===""?void 0:`${process.platform}:${n}`}var vt,RM,TM,jf,CM,PM,MM,la,ua,fa,ke=l(()=>{"use strict";L();o(bt,"reportWindowsProbe");vt=5e3,RM=String.raw`
89
+ }`});var Ui=l(()=>{"use strict";mr()});var sn=l(()=>{"use strict";je();Ui();ie();st()});var hr=l(()=>{"use strict";mr()});var gr=l(()=>{"use strict"});var Bi=l(()=>{"use strict";hr();gr()});var wr=l(()=>{"use strict"});import Ki from"node:fs";import qi from"node:os";import Hi from"node:path";function zi(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}function Bl(){let e=Hi.join(qi.homedir(),".codex","config.toml");try{return Ki.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}function Kl(){let e=Hi.join(qi.homedir(),".gemini","settings.json");try{let t=JSON.parse(Ki.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}}function Ue(){return Bl()||jl}function Be(){return Kl()||Fl}function lt(){return zi([Ue(),...Wl])}function ut(){return zi([Be(),...Ul])}var jl,Fl,Wl,Ul,ft=l(()=>{"use strict";jl="gpt-5.4",Fl="auto-gemini-3",Wl=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Ul=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];o(zi,"dedupePreserveOrder");o(Bl,"readCodexConfiguredModel");o(Kl,"readGeminiConfiguredModel");o(Ue,"getCodexCliDefaultModel");o(Be,"getGeminiCliDefaultModel");o(lt,"getCodexCliKnownModels");o(ut,"getGeminiCliKnownModels")});var mE,hE,Gi=l(()=>{"use strict";sn();Bi();wr();ft();ie();mE=Be(),hE=ut()});var Xi=l(()=>{"use strict";hr();gr()});var AE,RE,Vi=l(()=>{"use strict";sn();Xi();wr();ft();AE=Ue(),RE=lt()});function an(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new Error(`${t}.outputTokenLimit must be a positive safe integer`);return e}}var vr=l(()=>{"use strict";o(an,"optionalOutputTokenLimit")});function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ve(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}function ye(e,t){if(e!==void 0)return ve(e,t)}function is(e,t){if(e!==void 0){if(typeof e!="string"||!es.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${es.join(", ")}, got ${JSON.stringify(e)}`);return e}}function se(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}}function M(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}function rs(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)=>ve(n,`${t}[${r}]`))}}function Hl(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=ve(i,`${t}.${r}`);return n}function zl(e,t){if(e!==void 0){if(typeof e!="string"||!Zi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Zi.join(", ")}, got ${JSON.stringify(e)}`);return e}}function br(e,t){if(typeof e!="string"||!Ji.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ji.join(", ")}, got ${JSON.stringify(e)}`);return e}function Gl(e,t){if(typeof e!="string"||!Yi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Yi.join(", ")}, got ${JSON.stringify(e)}`);return e}function Xl(e,t){if(e!==void 0){if(typeof e!="string"||!Qi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Qi.join(", ")}, got ${JSON.stringify(e)}`);return e}}function os(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=Gl(e.effortStrategy,`${t}.effortStrategy`),r=zl(e.reasoningPreset,`${t}.reasoningPreset`),i=Xl(e.thinkingStrategy,`${t}.thinkingStrategy`),s=ye(e.defaultEffort,`${t}.defaultEffort`),a=Hl(e.effortAliases,`${t}.effortAliases`),c=rs(e.disabledEfforts,`${t}.disabledEfforts`),d=rs(e.localRejectEfforts,`${t}.localRejectEfforts`),u=M(e.allowCustomEffort,`${t}.allowCustomEffort`),f=M(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),p=M(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),h=M(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),m=M(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),k=M(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),b=M(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),y=M(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),g={effortStrategy:n};if(r!==void 0&&(g.reasoningPreset=r),i!==void 0&&(g.thinkingStrategy=i),s!==void 0&&(g.defaultEffort=s),a!==void 0&&(g.effortAliases=a),c!==void 0&&(g.disabledEfforts=c),d!==void 0&&(g.localRejectEfforts=d),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);g.supportedEfforts=e.supportedEfforts.map((w,v)=>{if(!Z(w))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${v}] must be an object`);return{value:ve(w.value,`${t}.supportedEfforts[${v}].value`),...ye(w.description,`${t}.supportedEfforts[${v}].description`)!==void 0?{description:ye(w.description,`${t}.supportedEfforts[${v}].description`)}:{},...M(w.isDefault,`${t}.supportedEfforts[${v}].isDefault`)!==void 0?{isDefault:M(w.isDefault,`${t}.supportedEfforts[${v}].isDefault`)}:{},...M(w.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)!==void 0?{isUserVisible:M(w.isUserVisible,`${t}.supportedEfforts[${v}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!Z(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let w={};for(let[v,R]of Object.entries(e.budgetByEffort))w[v]=se(R,`${t}.budgetByEffort.${v}`)??0;g.budgetByEffort=w}u!==void 0&&(g.allowCustomEffort=u),f!==void 0&&(g.supportsReasoningEffort=f),p!==void 0&&(g.supportsReasoningSummary=p),h!==void 0&&(g.supportsEncryptedReasoningReplay=h),m!==void 0&&(g.supportsAdaptiveThinking=m),k!==void 0&&(g.supportsManualThinkingBudget=k),b!==void 0&&(g.supportsDisabledThinking=b),y!==void 0&&(g.requiresEffortBetaHeader=y);for(let w of["supportsThinkingDisplay","supportsThinkingBlockBinding"]){let v=M(e[w],`${t}.${w}`);v!==void 0&&Object.assign(g,{[w]:v})}return g}function ss(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?os(n,`${t}.reasoningProfile`):os(r,`${t}.reasoningCapabilityV2`)}function Vl(e,t){if(typeof e!="string"||!ts.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ts.join(", ")}, got ${JSON.stringify(e)}`);return e}function Jl(e,t){if(typeof e!="string"||!ns.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${ns.join(", ")}, got ${JSON.stringify(e)}`);return e}function as(e,t){try{Ht(e.toolCapabilities),Jn(e.cacheCapabilities)}catch(n){throw new Error(`${t}: ${n instanceof Error?n.message:"Invalid constraint metadata."}`)}return{...e.toolCapabilities?{toolCapabilities:structuredClone(e.toolCapabilities)}:{},...e.cacheCapabilities?{cacheCapabilities:structuredClone(e.cacheCapabilities)}:{}}}function Yl(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ve(e.id,`${t}.id`),r=ye(e.wireModel,`${t}.wireModel`),i=ye(e.displayName,`${t}.displayName`),s=ye(e.multimodalSupport,`${t}.multimodalSupport`);if(s!==void 0&&!["none","image-input","full"].includes(s))throw new Error(`provider-capabilities.json: ${t}.multimodalSupport must be none, image-input or full`);let a=se(e.contextWindow,`${t}.contextWindow`),c=se(e.maxOutputTokens,`${t}.maxOutputTokens`),d=is(e.maxOutputTokensField,`${t}.maxOutputTokensField`),u=an(e.outputTokenLimit,t),f=se(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),p=M(e.replayReasoningContent,`${t}.replayReasoningContent`),h=M(e.strictThinkingSignature,`${t}.strictThinkingSignature`),m=se(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),k=e.reasoningCapability===void 0?void 0:br(e.reasoningCapability,`${t}.reasoningCapability`),b=ss(e,t),y={id:n,...as(e,t)};for(let[g,w]of Object.entries({wireModel:r,displayName:i,multimodalSupport:s,contextWindow:a,maxOutputTokens:c,outputTokenLimit:u,maxOutputTokensField:d,thinkingBudgetCap:f,reasoningCapability:k,reasoningProfile:b,replayReasoningContent:p,strictThinkingSignature:h,streamMaxDurationMs:m}))w!==void 0&&Object.assign(y,{[g]:w});return y}function Ql(e,t){if(e===void 0)return;if(!Z(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[r,i]of Object.entries(e))n[r]=br(i,`${t}.${r}`);return n}function Zl(e,t){if(!Z(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=M(e.cliBridge,`providers.${t}.cliBridge`),r=ve(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),i=br(e.reasoningCapability,`providers.${t}.reasoningCapability`),s=ss(e,`providers.${t}`),a=Vl(e.capabilityProfile,`providers.${t}.capabilityProfile`),c=Jl(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=se(e.contextWindow,`providers.${t}.contextWindow`),u=se(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),f=is(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),p=an(e.outputTokenLimit,`providers.${t}`),h=se(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),m=M(e.supportsThinking,`providers.${t}.supportsThinking`),k=Ql(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),b=ye(e.model,`providers.${t}.model`);if(n&&(b!==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&&b===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let y;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);y=e.models.map((v,R)=>Yl(v,`providers.${t}.models[${R}]`));let w=new Set([...b===void 0?[]:[b],...y.map(v=>v.id)]);for(let[v,R]of y.entries())if(R.wireModel!==void 0&&!w.has(R.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${v}].wireModel must reference a declared model, got ${JSON.stringify(R.wireModel)}`)}let g={...as(e,`providers.${t}`),apiKeyEnv:r,reasoningCapability:i,capabilityProfile:a,verifyStrategy:c};for(let[w,v]of Object.entries({reasoningProfile:s,model:b,models:y,contextWindow:d,maxOutputTokens:u,outputTokenLimit:p,maxOutputTokensField:f,thinkingBudgetCap:h,supportsThinking:m,modelReasoningCapabilities:k}))v!==void 0&&Object.assign(g,{[w]:v});return n&&(g.cliBridge=!0),g}function cs(e){if(!Z(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=ve(e.updatedAt,"updatedAt");if(!Z(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]=Zl(i,r);return{version:1,updatedAt:t,providers:n}}var Ji,Yi,Qi,Zi,es,ts,ns,ds=l(()=>{"use strict";X();qt();vr();Ji=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Yi=["google-thinking-level","bedrock-anthropic-effort","bedrock-openai-effort","bedrock-openai-nested-effort","openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Qi=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],Zi=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k3.1","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"],es=["max_tokens","max_completion_tokens"],ts=["native","image-input-native","cli-bridge","image-input-cli-bridge"],ns=["count-tokens","models-list","minimal-message","unsupported"];o(Z,"isPlainObject");o(ve,"requireString");o(ye,"optionalString");o(is,"optionalMaxOutputTokensField");o(se,"optionalNumber");o(M,"optionalBoolean");o(rs,"optionalStringArray");o(Hl,"optionalStringMap");o(zl,"optionalReasoningPreset");o(br,"requireReasoningCapability");o(Gl,"requireEffortStrategy");o(Xl,"optionalThinkingStrategy");o(os,"validateReasoningProfile");o(ss,"validateReasoningProfileField");o(Vl,"requireProfileName");o(Jl,"requireVerifyStrategy");o(as,"constraintMetadata");o(Yl,"validateModelDescriptor");o(Ql,"validateModelReasoningCapabilities");o(Zl,"validateProviderEntry");o(cs,"validateProviderCapabilitiesJson")});import{existsSync as eu,readFileSync as tu}from"node:fs";import Ke from"node:path";import{fileURLToPath as nu}from"node:url";function ou(){if(process.env.KODAX_BUNDLED==="true")return Ke.join(Ke.dirname(process.execPath),"provider-capabilities.json");let e=Ke.dirname(nu(import.meta.url)),t=[Ke.join(e,"provider-capabilities.json"),Ke.join(Ke.dirname(e),"provider-capabilities.json")];for(let n of t)if(eu(n))return n;return t[0]}function ls(e){e.toolCapabilities?.grammar&&Object.freeze(e.toolCapabilities.grammar),e.toolCapabilities&&Object.freeze(e.toolCapabilities),e.cacheCapabilities?.locations&&Object.freeze(e.cacheCapabilities.locations),e.cacheCapabilities&&Object.freeze(e.cacheCapabilities)}function iu(e){if(ls(e),e.models){for(let t of e.models)t.reasoningProfile&&us(t.reasoningProfile);for(let t of e.models)ls(t),Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&us(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}function us(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)}function su(e){if(e==="gemini-cli"){let t=Be();return{model:t,models:ut().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=Ue();return{model:t,models:lt().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}function au(e,t){let n=ru[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);let r={...t.cliBridge?su(e):{model:t.model},apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};for(let i of["reasoningProfile","supportsThinking","toolCapabilities","cacheCapabilities"])t[i]!==void 0&&Object.assign(r,{[i]:t[i]});if(!t.cliBridge)for(let i of["models","modelReasoningCapabilities","contextWindow","maxOutputTokens","outputTokenLimit","maxOutputTokensField","thinkingBudgetCap"])t[i]!==void 0&&Object.assign(r,{[i]:t[i]});return r}function fs(){if(cn)return cn;let e=ou(),t;try{let i=tu(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=cs(t),r={};for(let[i,s]of Object.entries(n.providers))r[i]=iu(au(i,s));return cn=Object.freeze(r),cn}var ru,cn,ps=l(()=>{"use strict";ie();ft();ds();ru=Object.freeze({native:Le,"image-input-native":yi,"cli-bridge":Qt,"image-input-cli-bridge":vi}),cn=null;o(ou,"resolveJsonPath");o(ls,"freezeConstraints");o(iu,"deepFreezeSnapshot");o(us,"freezeReasoningProfile");o(su,"resolveCliBridgeModels");o(au,"buildSnapshot");o(fs,"getProviderSnapshots")});var dn,ms,pt=l(()=>{"use strict";on();We();Gi();Vi();P();$();ie();ps();dn=fs(),ms=process.env.KODAX_PROVIDER??"zhipu-coding"});var gs=l(()=>{"use strict";$();dt();we()});var ln=l(()=>{"use strict"});var mt=l(()=>{"use strict"});var un=l(()=>{"use strict";Ne();$();N()});var vs=l(()=>{"use strict";N();B();We();dt();un()});var Er=l(()=>{"use strict";X();je();P();$();we();De()});var bs=l(()=>{"use strict";Er();un()});var Ss=l(()=>{"use strict";Er();bs()});var fn=l(()=>{"use strict";on();We();dt();gs();ln();mt();vs();Ss();ie();ge();vr();X();qt()});var pn=l(()=>{"use strict";fn();pt();ie()});var Tr=l(()=>{"use strict";pt();pn()});var Cr=l(()=>{"use strict";P();pt();pn();Tr();$()});var Mr=l(()=>{"use strict";je();on();We();sn();pt();fn();pn();Tr();Cr();we()});var Ls=l(()=>{"use strict";Mr();ge();pr();nt()});var Or=l(()=>{"use strict"});var Nr=l(()=>{"use strict";Or()});var js=l(()=>{"use strict";Nr();it();$()});var be=l(()=>{"use strict";Ne()});var mn=l(()=>{"use strict";be()});var Ws=l(()=>{"use strict";mn();be()});var hn=l(()=>{"use strict";B();tr();N()});var ee=l(()=>{"use strict";et();$();B();hn();tt();Yt();Me()});var Us=l(()=>{"use strict";me()});var Bs=l(()=>{"use strict";H();Us()});var Ks=l(()=>{"use strict";X()});var qs=l(()=>{"use strict";et();mt();un();$();ee();Bs();Ks();oe()});var $r=l(()=>{"use strict";mt();ln();fn()});var Hs=l(()=>{"use strict";ee();Cr()});function zs(){let e=new Map;return{async read(t,n){n?.throwIfAborted();let r=e.get(t);return r?structuredClone(r):void 0},async compareAndSwap(t,n,r,i){return i.signal?.throwIfAborted(),!i.isCurrent()||e.get(t)?.revision!==n?!1:(e.set(t,structuredClone(r)),!0)}}}var wR,Gs=l(()=>{"use strict";ee();B();hn();Hs();o(zs,"createMemoryModelCatalogStore");wR=zs()});var Dr=l(()=>{"use strict";be();mn()});var Xs=l(()=>{"use strict";be();Dr();mn()});var Vs=l(()=>{"use strict";ee()});var Fr=l(()=>{"use strict";H()});var Ys=l(()=>{"use strict";ee();Vs();Fr()});var Qs=l(()=>{"use strict";N()});var Zs=l(()=>{"use strict";ee();Fr();hn();Qs();B()});var ea=l(()=>{"use strict";Ne();N();P();$();Kt();Vn();H();ee();B();X()});var ta=l(()=>{"use strict";$r();ee()});import vT from"proper-lockfile";var na=l(()=>{"use strict";be()});var ra=l(()=>{"use strict";Gt()});var K=l(()=>{"use strict";fi();Xn();Kt();dt();B();$();P();tt();Qn();me();ji();pr();ge();Ls();Mr();ft();tn();it();oe();Or();Nr();js();Yt();st();cr();H();H();he();H();H();be();Ws();ln();Gt();mt();qs();$r();Gs();Dr();Xs();Ys();Zs();ea();ta();na();et();ra()});function I(e){let t=$e(e),n=sf.at(-1)?.sink;if(n){try{n(t)}catch{}return}if(process.env.KODAX_DIAGNOSTICS_STDERR==="1")try{process.stderr.write(`${oa(t)}
90
+ `)}catch{}}function oa(e){let t=$e(e),n=af(t.detail);return`[${t.source}] ${t.level}: ${t.message}${n?` ${n}`:""}`}function af(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)}}var sf,L=l(()=>{"use strict";K();sf=[];o(I,"emitKodaXDiagnostic");o(oa,"formatKodaXDiagnostic");o(af,"formatDiagnosticDetail")});import{debuglog as Lf}from"node:util";var wM,zr=l(()=>{"use strict";wM=Lf("kodax:macos-git")});import{execFile as xM,spawnSync as vt}from"node:child_process";import{readFileSync as jf}from"node:fs";function bt(e,t,n,r){let i=t.error?.code;I({source:"runtime:windows",level:r?"debug":"warn",message:"Windows process probe completed.",detail:{stage:e,cached:!1,available:r,durationMs:Date.now()-n,timeoutMs:5e3,exitCode:t.status,errorCode:i===void 0?void 0:["ENOENT","EACCES","EPERM","ETIMEDOUT","ENOEXEC","ENOMEM","EIO"].includes(i)?i:"OTHER"}})}function Wf(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).flatMap(i=>{if(typeof i!="object"||i===null)return[];let s=i,a=Number(s.pid),c=Number(s.parentPid),d=typeof s.creationTime=="string"?s.creationTime:String(s.creationTime??"0");return!Number.isFinite(a)||a<=0||!Number.isFinite(c)?[]:[{pid:a,parentPid:c,creationTime:/^\d+$/.test(d)?d:"0"}]})}catch{return[]}}function Uf(e){let t=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.(\d{6})([+-])(\d{3})$/.exec(e);if(!t)return;let[,n,r,i,s,a,c,d,u,f]=t,p=Date.UTC(Number(n),Number(r)-1,Number(i),Number(s),Number(a),Number(c),Number(d.slice(0,3))),h=Number(f)*6e4*(u==="+"?1:-1),m=p-h;if(Number.isFinite(m))return{identity:(BigInt(m)+11644473600000n).toString(),unixMs:m}}function Bf(){let e=["$cutoff = [DateTime]::UtcNow","$items = try { @(Get-CimInstance Win32_Process -ErrorAction Stop) } catch { @(Get-WmiObject Win32_Process -ErrorAction Stop) }","$rows = @($items | ForEach-Object {"," $creationTime = '0'"," try {"," $created = $_.CreationDate"," if ($created -isnot [DateTime]) { $created = [System.Management.ManagementDateTimeConverter]::ToDateTime([string]$created) }"," $created = $created.ToUniversalTime()"," if ($created -le $cutoff) { $creationTime = ([long][Math]::Floor($created.ToFileTimeUtc() / 10000)).ToString() }"," } catch {}"," [PSCustomObject]@{ pid = [int]$_.ProcessId; parentPid = [int]$_.ParentProcessId; creationTime = $creationTime }","})","$rows | ConvertTo-Json -Compress"].join(`
91
+ `),t=Date.now(),n=vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:St,windowsHide:!0});if(!n.error&&n.status===0){let a=Wf(n.stdout);if(a.length>0)return a}bt("process-snapshot-cim",n,t,!1);let r=Date.now(),i=vt("wmic",["process","get","CreationDate,ParentProcessId,ProcessId","/format:list"],{encoding:"utf8",timeout:St,windowsHide:!0});if(i.error||i.status!==0){bt("process-snapshot-wmic",i,r,!1);return}let s=i.stdout.split(/\r?\n\s*\r?\n/).flatMap(a=>{let c=new Map(a.split(/\r?\n/).flatMap(h=>{let m=h.indexOf("=");return m<0?[]:[[h.slice(0,m),h.slice(m+1)]]})),d=Number(c.get("ProcessId")),u=Number(c.get("ParentProcessId")),f=c.get("CreationDate"),p=f===void 0?void 0:Uf(f);return!Number.isFinite(d)||d<=0||!Number.isFinite(u)||p===void 0||p.unixMs>r?[]:[{pid:d,parentPid:u,creationTime:p.identity}]});return s.length>0?s:void 0}function Kf(){let e=["$source = @'",Ff,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
92
+ `),t=Date.now(),n=vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:St,windowsHide:!0});if(n.error||n.status!==0){bt("process-snapshot-native",n,t,!1);return}let r=qf(n.stdout);return r===void 0&&bt("process-snapshot-native",n,t,!1),r}function qf(e){let t=e.split(/\r?\n/).map(r=>r.trim()).filter(Boolean);if(t.some(r=>!/^\d+,\d+,\d+$/.test(r)))return;let n=t.flatMap(r=>{let[i,s,a="0"]=r.split(",",3),c=Number(i),d=Number(s);return!Number.isFinite(c)||c<=0||!Number.isFinite(d)?[]:[{pid:c,parentPid:d,creationTime:a}]});return n.length>0?n:void 0}function da(){return Kf()??Bf()}function Hf(){return fa<=0?da():(ua||(la=da(),ua=!0),la)}function zf(e){return[`foreach ($processId in @(${e.join(",")})) {`,' $target = $null; $creationTime = "0"'," try {"," $target = [System.Diagnostics.Process]::GetProcessById($processId)"," [long]$remainder = 0"," $creationTime = ([Math]::DivRem($target.StartTime.ToFileTimeUtc(), [long]10000, [ref]$remainder)).ToString([System.Globalization.CultureInfo]::InvariantCulture)",' } catch { $creationTime = "0" } finally { if ($null -ne $target) { $target.Dispose() } }',' [Console]::Out.WriteLine("$processId,$creationTime")',"}"].join(`
93
+ `)}function Gf(e,t){let n=e.trim().split(/\r?\n/);if(!(n.length!==t.length||n.some((r,i)=>!r.startsWith(`${t[i]},`)||!/^\d+,\d+$/.test(r))))return new Map(n.map(r=>{let[i,s]=r.split(",");return[Number(i),s]}))}function Xf(e){let t=Date.now(),n=vt("powershell.exe",["-NoProfile","-NonInteractive","-Command",zf(e)],{encoding:"utf8",timeout:St,windowsHide:!0}),r=Gf(n.stdout??"",e);if(n.error||n.status!==0||r===void 0){bt("process-start-identities",n,t,!1);return}return r}function Vr(e){let t=[...new Set(e.filter(r=>Number.isInteger(r)&&r>0))];if(process.platform!=="win32")return new Map(t.map(r=>[r,Se(r)]));if(t.length===0)return new Map;let n=(fa<=0?Xf(t):void 0)??new Map(Hf()?.map(r=>[r.pid,r.creationTime]));return new Map(t.map(r=>{let i=n.get(r);return[r,i==="0"?void 0:i]}))}function Se(e){if(!Number.isInteger(e)||e<=0)return;if(process.platform==="win32"){let r=Vr([e]).get(e);return r===void 0&&I({source:"runtime:windows",level:"warn",message:"Windows process start identity is unavailable.",detail:{stage:"process-start-identity",pid:e,available:!1}}),r}if(process.platform==="linux")try{let r=jf(`/proc/${e}/stat`,"utf8"),i=r.slice(r.lastIndexOf(")")+2).trim().split(/\s+/);return i[19]===void 0?void 0:`linux:${i[19]}`}catch{return}let t=vt("ps",["-o","lstart=","-p",String(e)],{encoding:"utf8",timeout:St,windowsHide:!0}),n=t.status===0?t.stdout.trim():"";return n===""?void 0:`${process.platform}:${n}`}var St,IM,AM,Ff,RM,TM,CM,la,ua,fa,ke=l(()=>{"use strict";L();o(bt,"reportWindowsProbe");St=5e3,IM=String.raw`
94
94
  using System;
95
95
  using System.Runtime.InteropServices;
96
96
  public static class KodaXWindowsJobMembership {
97
+ [StructLayout(LayoutKind.Sequential)]
98
+ private struct BasicAccountingInformation {
99
+ public long TotalUserTime;
100
+ public long TotalKernelTime;
101
+ public long ThisPeriodTotalUserTime;
102
+ public long ThisPeriodTotalKernelTime;
103
+ public uint TotalPageFaultCount;
104
+ public uint TotalProcesses;
105
+ public uint ActiveProcesses;
106
+ public uint TotalTerminatedProcesses;
107
+ }
97
108
  [StructLayout(LayoutKind.Sequential)]
98
109
  private struct BasicLimitInformation {
99
110
  public long PerProcessUserTimeLimit;
@@ -135,6 +146,13 @@ public static class KodaXWindowsJobMembership {
135
146
  out ExtendedLimitInformation information,
136
147
  uint informationLength,
137
148
  IntPtr returnLength);
149
+ [DllImport("kernel32.dll", SetLastError = true)]
150
+ private static extern bool QueryInformationJobObject(
151
+ IntPtr job,
152
+ int informationClass,
153
+ out BasicAccountingInformation information,
154
+ uint informationLength,
155
+ IntPtr returnLength);
138
156
  [DllImport("kernel32.dll")]
139
157
  private static extern IntPtr GetCurrentProcess();
140
158
  [DllImport("kernel32.dll")]
@@ -157,7 +175,17 @@ public static class KodaXWindowsJobMembership {
157
175
  CloseHandle(job);
158
176
  }
159
177
  }
160
- }`,TM=String.raw`
178
+ public static long ActiveProcessCount(string name) {
179
+ var job = OpenJobObjectW(4, false, name);
180
+ if (job == IntPtr.Zero) return Marshal.GetLastWin32Error() == 2 ? 0 : -1;
181
+ try {
182
+ BasicAccountingInformation accounting;
183
+ if (!QueryInformationJobObject(job, 1, out accounting,
184
+ (uint)Marshal.SizeOf(typeof(BasicAccountingInformation)), IntPtr.Zero)) return -1;
185
+ return accounting.ActiveProcesses;
186
+ } finally { CloseHandle(job); }
187
+ }
188
+ }`,AM=String.raw`
161
189
  $ErrorActionPreference = 'Stop'
162
190
  $source = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($env:KODAX_INTERNAL_JOB_QUERY_SOURCE))
163
191
  Add-Type -TypeDefinition $source
@@ -165,7 +193,7 @@ if ([KodaXWindowsJobMembership]::IsCurrentProcessContained($env:KODAX_DAEMON_JOB
165
193
  [Console]::Out.WriteLine('1')
166
194
  } else {
167
195
  [Console]::Out.Write('0')
168
- }`,jf=String.raw`
196
+ }`,Ff=String.raw`
169
197
  using System;
170
198
  using System.Runtime.InteropServices;
171
199
  using System.Text;
@@ -252,7 +280,7 @@ public static class KodaXNativeProcessSnapshot {
252
280
  CloseHandle(snapshot);
253
281
  }
254
282
  }
255
- }`,CM=Object.freeze({status:"terminated"}),PM=Object.freeze({status:"already-exited"}),MM=Object.freeze({status:"unknown"});o(Ff,"parseWindowsProcessSnapshotJson");o(Wf,"parseWmicCreationTime");o(Uf,"readWindowsProcessSnapshotFallback");o(Bf,"readWindowsProcessSnapshotNative");o(Kf,"parseWindowsNativeProcessRows");o(da,"readWindowsProcessSnapshotUncached");ua=!1,fa=0;o(qf,"readWindowsProcessSnapshot");o(Hf,"windowsProcessStartIdentitiesScript");o(zf,"parseWindowsProcessStartIdentities");o(Gf,"readWindowsProcessStartIdentities");o(Xr,"readProcessStartIdentities");o(Se,"readProcessStartIdentity")});var vn=l(()=>{"use strict"});var Sn=l(()=>{"use strict";Hr();C();vn();vn()});import Fp from"path";function Ia(e){let t=e.trim();if(!t)throw new Error("Plugin skill path cannot be empty.");return Fp.resolve(t)}function Aa(e){let t=Ia(e);return kt.add(t),()=>{kt.delete(t)}}function Ra(e){return kt.delete(Ia(e))}function kn(){return Array.from(kt.values())}function Ta(){kt.clear()}var kt,eo=l(()=>{"use strict";kt=new Set;o(Ia,"normalizePluginSkillPath");o(Aa,"registerPluginSkillPath");o(Ra,"unregisterPluginSkillPath");o(kn,"listPluginSkillPaths");o(Ta,"clearPluginSkillPaths")});import{homedir as Wp}from"os";import{existsSync as Ca}from"node:fs";import ae from"path";import{fileURLToPath as Up}from"url";import{dirname as Bp}from"path";function qp(){if(process.env.KODAX_BUNDLED==="true")return ae.join(ae.dirname(process.execPath),"builtin");let e=ae.join(Pa,"builtin"),t=ae.join(Pa,"..","builtin");return!Ca(e)&&Ca(t)?t:e}function xn(e){let t=Wp();return{projectPaths:e?[ae.join(e,".kodax","skills"),ae.join(e,".agents","skills")]:[],userPaths:[ae.join(t,".kodax","skills"),ae.join(t,".agents","skills")],pluginPaths:kn(),builtinPath:qp()}}function En(e){let t=[];for(let n of e.projectPaths)t.push({path:n,source:"project"});for(let n of e.userPaths)t.push({path:n,source:"user"});for(let n of e.pluginPaths)t.push({path:n,source:"plugin"});return t.push({path:e.builtinPath,source:"builtin"}),t}var Kp,Pa,to=l(()=>{"use strict";eo();Kp=Up(import.meta.url),Pa=Bp(Kp);o(qp,"resolveBuiltinPath");o(xn,"getDefaultSkillPaths");o(En,"getSkillPathsFlat")});import Ma from"yaml";function zp(e){let t=e.split(`
283
+ }`,RM=Object.freeze({status:"terminated"}),TM=Object.freeze({status:"already-exited"}),CM=Object.freeze({status:"unknown"});o(Wf,"parseWindowsProcessSnapshotJson");o(Uf,"parseWmicCreationTime");o(Bf,"readWindowsProcessSnapshotFallback");o(Kf,"readWindowsProcessSnapshotNative");o(qf,"parseWindowsNativeProcessRows");o(da,"readWindowsProcessSnapshotUncached");ua=!1,fa=0;o(Hf,"readWindowsProcessSnapshot");o(zf,"windowsProcessStartIdentitiesScript");o(Gf,"parseWindowsProcessStartIdentities");o(Xf,"readWindowsProcessStartIdentities");o(Vr,"readProcessStartIdentities");o(Se,"readProcessStartIdentity")});var vn=l(()=>{"use strict"});var bn=l(()=>{"use strict";zr();C();vn();vn()});import Dp from"path";function Ia(e){let t=e.trim();if(!t)throw new Error("Plugin skill path cannot be empty.");return Dp.resolve(t)}function Aa(e){let t=Ia(e);return xt.add(t),()=>{xt.delete(t)}}function Ra(e){return xt.delete(Ia(e))}function Sn(){return Array.from(xt.values())}function Ta(){xt.clear()}var xt,to=l(()=>{"use strict";xt=new Set;o(Ia,"normalizePluginSkillPath");o(Aa,"registerPluginSkillPath");o(Ra,"unregisterPluginSkillPath");o(Sn,"listPluginSkillPaths");o(Ta,"clearPluginSkillPaths")});import{homedir as Lp}from"os";import{existsSync as Ca}from"node:fs";import ae from"path";import{fileURLToPath as jp}from"url";import{dirname as Fp}from"path";function Up(){if(process.env.KODAX_BUNDLED==="true")return ae.join(ae.dirname(process.execPath),"builtin");let e=ae.join(Pa,"builtin"),t=ae.join(Pa,"..","builtin");return!Ca(e)&&Ca(t)?t:e}function kn(e){let t=Lp();return{projectPaths:e?[ae.join(e,".kodax","skills"),ae.join(e,".agents","skills")]:[],userPaths:[ae.join(t,".kodax","skills"),ae.join(t,".agents","skills")],pluginPaths:Sn(),builtinPath:Up()}}function xn(e){let t=[];for(let n of e.projectPaths)t.push({path:n,source:"project"});for(let n of e.userPaths)t.push({path:n,source:"user"});for(let n of e.pluginPaths)t.push({path:n,source:"plugin"});return t.push({path:e.builtinPath,source:"builtin"}),t}var Wp,Pa,no=l(()=>{"use strict";to();Wp=jp(import.meta.url),Pa=Fp(Wp);o(Up,"resolveBuiltinPath");o(kn,"getDefaultSkillPaths");o(xn,"getSkillPathsFlat")});import Ma from"yaml";function Kp(e){let t=e.split(`
256
284
  `),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(`
257
285
  `)}function Oa(e,t={}){let n=e.replace(/^/,"").replace(/\r\n/g,`
258
286
  `).replace(/\r/g,`
@@ -260,25 +288,25 @@ public static class KodaXNativeProcessSnapshot {
260
288
  `)){if(t.throwOnMissing)throw new Error("Invalid markdown: missing YAML frontmatter");return[null,e]}let r=n.indexOf(`
261
289
  ---
262
290
  `,4);if(r===-1){let c=n.indexOf(`
263
- ---`,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=Ma.parse(i)??{}}catch{a=Ma.parse(zp(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]}function Na(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}}function Gp(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}}}function Xp(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>Gp(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}function $a(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of Hp){let i=Xp(t[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}var Hp,Da=l(()=>{"use strict";Hp=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];o(zp,"sanitizeYaml");o(Oa,"parseYamlFrontmatter");o(Na,"normalizeAllowedToolsString");o(Gp,"normalizeYamlHookEntry");o(Xp,"normalizeYamlHookEntryList");o($a,"normalizeYamlHookMap")});import{readFile as no,readdir as Vp}from"fs/promises";import{join as ce,relative as Jp}from"path";function _n(e){let[t,n]=Oa(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:Na(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:$a(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}}async function xt(e,t){let n=ce(e,"SKILL.md");try{let r=await no(n,"utf-8"),{frontmatter:i}=_n(r);return{name:i.name,description:i.description,userInvocable:!0,argumentHint:i.argumentHint,path:e,source:t,disableModelInvocation:i.disableModelInvocation??!1}}catch(r){return I({source:"agent:skills",level:"error",message:`Failed to load skill metadata from ${e}.`,detail:r}),null}}async function In(e,t){let n=ce(e,"SKILL.md");try{let r=await no(n,"utf-8"),{frontmatter:i,body:s}=_n(r),[a,c,d,u,f]=await Promise.all([qe(ce(e,"scripts")),qe(ce(e,"references")),qe(ce(e,"assets")),qe(ce(e,"templates")),qe(ce(e,"resources"))]);return{...i,userInvocable:!0,path:e,skillFilePath:n,content:s,rawContent:s,loaded:!0,source:t,...a.length>0&&{scripts:a},...c.length>0&&{references:c},...d.length>0&&{assets:d},...u.length>0&&{templates:u},...f.length>0&&{resources:f}}}catch(r){return I({source:"agent:skills",level:"error",message:`Failed to load skill from ${e}.`,detail:r}),null}}async function qe(e,t=e){let n=[];try{let r=await Vp(e,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=ce(e,i.name);if(i.isDirectory()){n.push(...await qe(s,t));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:Jp(t,s).replace(/\\/g,"/")})}}catch{}return n}async function La(e){if(e.content)return e.content;let t=await no(e.path,"utf-8");return e.content=t,t}var An=l(()=>{"use strict";L();Da();o(_n,"parseSkillMarkdown");o(xt,"loadSkillMetadata");o(In,"loadFullSkill");o(qe,"loadSkillFiles");o(La,"loadSkillFileContent")});var ro=l(()=>{"use strict"});var oo=l(()=>{"use strict"});var ja,Fa,Rn=l(()=>{"use strict";ja=64*1024,Fa=256*1024});import{randomUUID as Yp}from"node:crypto";import{mkdir as Ka,open as qa,readFile as de,readdir as co,rm as Qp,stat as Pn,utimes as Zp,writeFile as Ha}from"node:fs/promises";import{dirname as em,join as io}from"node:path";function nm(){return Ua||(Wa=Se(process.pid),Ua=!0),Wa}async function te(e,t,n=za){let r=await Xa(e,n);try{return await t()}finally{await r()}}async function Xa(e,t=za,n={}){await Ka(em(e),{recursive:!0});let r=await rm(e,t,n.requireKnownOwner===!0),i=!1,s=!1,a;return async()=>{if(!s){if(a!==void 0)return a;a=(async()=>{i||(await r.handle.close(),i=!0),await so(e,r.token),s=!0})();try{await a}finally{s||(a=void 0)}}}}async function rm(e,t,n,r){let i=Date.now()+t,s=await om(e,r),a,c=!1;try{for(await im(s,i,e,r);;){await Va(s);try{let d=await um(e,s.token);try{await lo(s)}catch(u){let f=[u];try{await d.handle.close()}catch(p){f.push(p)}try{await so(e,d.token)}catch(p){f.push(p)}throw f.length===1?u:new AggregateError(f,"learning lock ticket loss cleanup failed")}return a=d,a}catch(d){let u=await mm(d,e);if(u==="retry_missing"){if(c)throw d;c=!0,await _t(Et);continue}if(u==="not_contended")throw d;c=!1;let f=await fm(e,n,r);if(f!==void 0&&(!n||It(f.raw)!==void 0)&&await pm(e,f))continue;if(Date.now()>=i)throw nc(e);await _t(Et)}}}finally{try{await Qa(s.path,s.raw)}catch(d){if(a===void 0)throw d;let u=[d];try{await a.handle.close()}catch(f){u.push(f)}try{await so(e,a.token)}catch(f){u.push(f)}throw u.length===1?d:new AggregateError(u,"learning lock acquisition cleanup failed")}}}async function om(e,t){let n=`${e}.queue`,r=Yp(),i=ec(r),s=io(n,`choosing-${r}.lock`);await Ka(n,{recursive:!0}),await Ba(s,i);try{await Ya(n,e,s,t),await Ja(s,i,"choosing entry");let a=await sm(n),c=Math.max(0,...a.map(f=>f.number))+1;if(!Number.isSafeInteger(c))throw new Error("learning lock ticket overflow");let d=`ticket-${String(c).padStart(tm,"0")}-${r}.lock`,u=io(n,d);return await Ba(u,i),{queuePath:n,path:u,name:d,raw:i,token:r}}finally{await Qa(s,i)}}async function im(e,t,n,r){for(;;){await Va(e),await Ya(e.queuePath,n,e.path,r),await lo(e);let i=await co(e.queuePath),s=i.some(c=>c.startsWith("choosing-")),a=i.map(Mn).filter(c=>c!==void 0).sort(am)[0];if(!s&&a?.name===e.name)return;if(Date.now()>=t)throw nc(n);await _t(Et)}}async function Ba(e,t){let n=await qa(e,"wx");try{try{await n.writeFile(t,"utf8")}finally{await n.close()}}catch(r){throw await He(e),r}}async function lo(e){await Ja(e.path,e.raw,"ticket")}async function Va(e){await lo(e);try{let t=new Date;await Zp(e.path,t,t)}catch(t){throw T(t,"ENOENT")?new Error(`learning store lock ticket lost: ${e.path}`):t}}async function Ja(e,t,n){try{if(await de(e,"utf8")!==t)throw new Error(`learning store lock ${n} lost: ${e}`)}catch(r){throw T(r,"ENOENT")?new Error(`learning store lock ${n} lost: ${e}`):r}}async function sm(e){return(await co(e)).map(Mn).filter(t=>t!==void 0)}function Mn(e){let t=/^ticket-(\d{16})-[0-9a-f-]+\.lock$/i.exec(e);if(t===null)return;let n=Number(t[1]);return Number.isSafeInteger(n)?{name:e,number:n}:void 0}function am(e,t){return e.number-t.number||e.name.localeCompare(t.name)}async function Ya(e,t,n,r){let i=await co(e);await Promise.all(i.filter(cm).map(async s=>{let a=io(e,s);a!==n&&await dm(a,s,t,r)&&await He(a)}))}function cm(e){return/^choosing-[0-9a-f-]+\.lock$/i.test(e)||Mn(e)!==void 0}async function dm(e,t,n,r){try{let i=await Pn(e),s=It(await de(e,"utf8"));return s?.released===!0||s!==void 0&&!uo(s.pid)||s!==void 0&&tc(s,r)?!0:Date.now()-i.mtimeMs<=Ga?!1:s===void 0||!ao(s)?!0:s.token===void 0?!1:Mn(t)===void 0?!0:!await lm(n,s.token)}catch(i){if(T(i,"ENOENT")||["EPERM","EACCES","EBUSY"].some(s=>T(i,s)))return!1;throw i}}async function lm(e,t){try{return It(await de(e,"utf8"))?.token===t}catch(n){if(T(n,"ENOENT"))return!1;if(["EPERM","EACCES","EBUSY"].some(r=>T(n,r)))return!0;throw n}}async function um(e,t){let n=await qa(e,"wx");try{return await n.writeFile(ec(t),"utf8"),{handle:n,token:t}}catch(r){throw await n.close(),await He(e),r}}async function fm(e,t=!1,n){try{let r=await Pn(e),i=await de(e,"utf8"),s=It(i),a=s?.token!==void 0&&await gm(e,s.token),c=s!==void 0&&(!uo(s.pid)||tc(s,n)||t&&!!s.processStartIdentity&&!ao(s));return!a&&!c&&Date.now()-r.mtimeMs<=Ga?void 0:a||c||s===void 0||!ao(s)?{raw:i,mtimeMs:r.mtimeMs,size:r.size,...c&&s?{abandonedOwner:s}:{}}:void 0}catch(r){if(["ENOENT","EPERM","EACCES","EBUSY"].some(i=>T(r,i)))return;throw r}}async function pm(e,t){try{let n=await Pn(e);return n.mtimeMs!==t.mtimeMs||n.size!==t.size||await de(e,"utf8")!==t.raw?!1:(await He(e),!0)}catch(n){if(T(n,"ENOENT"))return!0;if(["EPERM","EACCES","EBUSY"].some(r=>T(n,r)))return!1;throw n}}async function mm(e,t){if(T(e,"EEXIST"))return"contended";if(!["EPERM","EACCES","EBUSY"].some(n=>T(e,n)))return"not_contended";try{return(await Pn(t)).isFile()?"contended":"not_contended"}catch(n){if(T(n,"ENOENT"))return"retry_missing";throw e}}async function so(e,t){try{if(It(await de(e,"utf8"))?.token!==t)return;try{await He(e);return}catch(r){try{await hm(e,t);return}catch(i){throw new AggregateError([r,i],"learning lock release marker and owner cleanup both failed")}}}catch(n){if(!T(n,"ENOENT"))throw n}}async function hm(e,t){for(let n=1;n<=Tn;n+=1)try{await Ha(Za(e,t),`${t}
264
- `,"utf8");return}catch(r){if(!fo(r)||n===Tn)throw r;await _t(Et)}}async function Qa(e,t){let n;try{if(await de(e,"utf8")!==t)throw new Error(`learning store lock queue entry lost: ${e}`);await Ha(e,`${t.trimEnd()} released
265
- `,"utf8")}catch(r){if(T(r,"ENOENT"))return;n=r}try{await He(e)}catch(r){if(n===void 0&&fo(r))return;throw n===void 0?r:new AggregateError([n,r],"learning lock queue marker and cleanup both failed")}}async function gm(e,t){try{return(await de(Za(e,t),"utf8")).trim()===t}catch(n){if(["ENOENT","EPERM","EACCES","EBUSY"].some(r=>T(n,r)))return!1;throw n}}function Za(e,t){return`${e}.${t}.released`}function ec(e){let t=nm(),n=t===void 0?"":` identity=${Buffer.from(t).toString("base64url")}`;return`${process.pid} ${e}${n}
266
- `}function It(e){let t=e.trim().split(/\s+/),n=Number(t.shift());if(!Number.isSafeInteger(n)||n<=0)return;let r,i,s=!1;for(let a of t){if(/^[0-9a-f-]+$/i.test(a)&&r===void 0){r=a;continue}if(a.startsWith("identity=")&&i===void 0){let c=a.slice(9);if(!/^[A-Za-z0-9_-]+$/.test(c)||(i=Buffer.from(c,"base64url").toString("utf8"),!i))return;continue}if(a==="released"&&!s){s=!0;continue}return}return{pid:n,...r===void 0?{}:{token:r},...i===void 0?{}:{processStartIdentity:i},released:s}}function uo(e){try{return process.kill(e,0),!0}catch(t){return!T(t,"ESRCH")}}function T(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}function ao(e){if(!uo(e.pid))return!1;if(e.processStartIdentity===void 0)return!0;let t=Se(e.pid);return t===void 0||t===e.processStartIdentity}function tc(e,t){return!!e.processStartIdentity&&e.pid===t?.pid&&e.processStartIdentity===t.processStartIdentity}function fo(e){return["EPERM","EACCES","EBUSY"].some(t=>T(e,t))}async function He(e){for(let t=1;t<=Tn;t+=1)try{await Qp(e,{force:!0});return}catch(n){if(T(n,"ENOENT"))return;if(!fo(n)||t===Tn)throw n;await _t(Et)}}function nc(e){return new Cn(e)}async function _t(e){await new Promise(t=>setTimeout(t,e))}var za,Et,Ga,tm,Tn,Wa,Ua,Cn,xe=l(()=>{"use strict";ke();za=5e3,Et=10,Ga=3e4,tm=16,Tn=8,Ua=!1;o(nm,"getCurrentProcessStartIdentity");Cn=class extends Error{static{o(this,"KodaXFileLockTimeoutError")}lockPath;code="kodax_file_lock_timeout";constructor(t){super(`KodaX file lock timed out: ${t}`),this.lockPath=t,this.name="KodaXFileLockTimeoutError"}};o(te,"withLearningFileLock");o(Xa,"acquireLearningFileLock");o(rm,"acquireLock");o(om,"createLockTicket");o(im,"waitForTicketTurn");o(Ba,"createOwnerFile");o(lo,"assertTicketOwned");o(Va,"heartbeatLockTicket");o(Ja,"assertQueueEntryOwned");o(sm,"listQueueTickets");o(Mn,"parseQueueTicket");o(am,"compareQueueTickets");o(Ya,"cleanupAbandonedQueueEntries");o(cm,"isQueueEntryName");o(dm,"isAbandonedQueueEntry");o(lm,"queueTicketOwnsCoordinatorLock");o(um,"createLock");o(fm,"observeStaleLock");o(pm,"removeObservedStaleLock");o(mm,"classifyExistingLockContention");o(so,"releaseLock");o(hm,"writeReleaseMarkerWithTransientRetry");o(Qa,"releaseQueueEntry");o(gm,"hasReleaseMarker");o(Za,"releaseMarkerPath");o(ec,"lockOwnerRecord");o(It,"parseOwner");o(uo,"isProcessAlive");o(T,"isFileError");o(ao,"isRecordedOwnerAlive");o(tc,"matchesAbandonedOwner");o(fo,"isTransientFileContention");o(He,"removeFileWithTransientRetry");o(nc,"lockTimeout");o(_t,"delay")});var Ee=l(()=>{"use strict";C();Sn();xe()});var po=l(()=>{"use strict";Rn();oo()});var mo=l(()=>{"use strict";po();Rn();Ee()});var go=l(()=>{"use strict";ro();Ee()});var ac=l(()=>{"use strict";C();Sn()});var CD,cc=l(()=>{"use strict";CD=1024*1024});var lc=l(()=>{"use strict";go()});function wo(e){return e==="active_learned"?"activated":e==="promoted_user"?"promoted":e==="quarantined"?"attention":e}function yo(e){return e.lastAction==="rollback"?"attention":wo(e.lifecycle)}function Rt(e){return`${e.capabilityId}-r${e.revision}-${yo(e)}`}var O,J=l(()=>{"use strict";O=class extends Error{static{o(this,"LearningCapabilityError")}code;constructor(t,n){super(n),this.code=t,this.name="LearningCapabilityError"}};o(wo,"learningEventKindForLifecycle");o(yo,"learningEventKindForRecord");o(Rt,"learningEventIdFor")});import{mkdir as hc,readFile as wm,readdir as gc,rename as ym,rm as bm,writeFile as vm}from"node:fs/promises";import{lstatSync as Sm,realpathSync as km}from"node:fs";import{basename as Tt,dirname as Ge,isAbsolute as xm,join as x,relative as wc,resolve as yc,sep as Em}from"node:path";function ko(e){return{root:e,skills:x(e,"skills"),extensions:x(e,"extensions"),capabilities:x(e,"capabilities"),events:x(e,"events"),clients:x(e,"clients")}}function ze(e,t){if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$/.test(e))throw new O("invalid_record",`${t} is not a safe file key`)}async function bo(e,t){bc(e),await hc(Ge(e),{recursive:!0});let n=x(Ge(e),`.${Tt(e)}.${process.pid}-${Date.now().toString(36)}.tmp`);try{await vm(n,`${JSON.stringify(t,null,2)}
267
- `,"utf8"),await ym(n,e)}catch(r){throw await bm(n,{force:!0}),r}}async function _e(e){try{return JSON.parse(await wm(e,"utf8"))}catch(t){if(xo(t,"ENOENT"))return;throw t instanceof SyntaxError?new O("store_integrity_error",`invalid JSON in ${e}`):t}}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function xo(e,t){return q(e)&&e.code===t}function Nn(e,t){if(!q(e)||e.schemaVersion!==1&&e.schemaVersion!==2||typeof e.capabilityId!="string"||typeof e.displayName!="string"||typeof e.slug!="string"||typeof e.revision!="number"||typeof e.createdAt!="string"||typeof e.updatedAt!="string"||!q(e.source)||e.schemaVersion===2&&!Am(e))throw new O("store_integrity_error",`invalid capability record in ${t}`);return e}function uc(e){let t=[],n=yc(e);for(;;)try{return Sm(n),x(km.native(n),...t)}catch(r){if(r.code!=="ENOENT")throw r;let i=Ge(n);if(i===n)throw r;t.unshift(Tt(n)),n=i}}function _m(e,t){let n=wc(e,t);return n===""||n!==".."&&!n.startsWith(`..${Em}`)&&!xm(n)}function Im(e,t){return wc(e,t)===""}function bc(e){let t=uc(Pe()),n=uc(e),r=x(t,"runtime");if(Im(n,t)||_m(r,n))throw new O("store_integrity_error",`learned Area path aliases protected Runtime state: ${e}`)}function Am(e){if(e.carrier!=="skill"||!q(e.scope)||!q(e.artifact)||!q(e.provenance)||!q(e.canary))return!1;let t=e.scope,n=e.artifact,r=e.provenance,i=e.canary;return[t.configHomeHash,t.tenantHash,t.projectHash].every(s=>typeof s=="string"&&/^[a-f0-9]{64}$/.test(s))&&n.kind==="skill_markdown"&&typeof n.relativePath=="string"&&typeof n.fingerprint=="string"&&/^[a-f0-9]{64}$/.test(n.fingerprint)&&Number.isSafeInteger(n.contentRevision)&&["jobId","inputHash","decisionId","actionId"].every(s=>typeof r[s]=="string")&&i.maxInvocations===3&&Number.isSafeInteger(i.invocationCount)&&Number.isSafeInteger(i.verifiedSuccesses)&&Number.isSafeInteger(i.credibleNegatives)&&(i.binding===void 0||Rm(i.binding))&&Array.isArray(i.invocations)&&i.invocations.every(Tm)}function Rm(e){return q(e)&&typeof e.bindingId=="string"&&typeof e.ownerSessionRef=="string"&&vo(e.expiresAt)}function Tm(e){return!q(e)||typeof e.invocationId!="string"||typeof e.bindingId!="string"||!["pending","verified_success","credible_negative","inconclusive"].includes(String(e.status))||!Array.isArray(e.evidenceRefs)||!e.evidenceRefs.every(t=>typeof t=="string")||!vo(e.invokedAt)||e.usageSessionHash!==void 0&&(typeof e.usageSessionHash!="string"||!/^[a-f0-9]{64}$/.test(e.usageSessionHash))||e.artifactRevision!==void 0&&!Number.isSafeInteger(e.artifactRevision)||e.artifactFingerprint!==void 0&&(typeof e.artifactFingerprint!="string"||!/^[a-f0-9]{64}$/.test(e.artifactFingerprint))?!1:e.status==="pending"?e.completedAt===void 0:vo(e.completedAt)}function vo(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function fc(e,t){if(!q(e)||e.schemaVersion!==1||typeof e.sequence!="number"||!Number.isSafeInteger(e.sequence)||e.sequence<1||typeof e.eventId!="string"||typeof e.capabilityId!="string"||typeof e.capabilityRevision!="number")throw new O("store_integrity_error",`invalid learning event in ${t}`);return e}function Cm(e,t){if(!q(e)||e.schemaVersion!==1||e.clientIdentity!==t||!q(e.events))throw new O("store_integrity_error",`invalid learning client record for ${t}`);return e}async function So(e){try{return(await gc(e)).filter(t=>t.endsWith(".json")).sort().map(t=>x(e,t))}catch(t){if(xo(t,"ENOENT"))return[];throw t}}function Pm(e){let t=Tt(e),n=Ge(e),r=Tt(n),i=Ge(n);return/^[a-f0-9]{64}$/.test(t)&&/^[a-f0-9]{64}$/.test(r)&&Tt(i)==="projects"?Ge(i):e}async function pc(e,t){let n=x(e,"projects"),r=[];for(let i of await mc(n))for(let s of await mc(x(n,i))){let a=x(n,i,s,"capabilities");if(t!==void 0){let c=x(a,`${t}.json`);await _e(c)!==void 0&&r.push(c)}else r.push(...await So(a))}return r.sort()}async function mc(e){try{return(await gc(e,{withFileTypes:!0})).filter(t=>t.isDirectory()&&/^[a-f0-9]{64}$/.test(t.name)).map(t=>t.name).sort()}catch(t){if(xo(t,"ENOENT"))return[];throw t}}function $n(e,t){return{schemaVersion:1,sequence:t,eventId:Rt(e),capabilityId:e.capabilityId,capabilityRevision:e.revision,kind:yo(e),lifecycle:e.lifecycle,displayName:e.displayName,slug:e.slug,carrier:e.carrier,createdAt:e.updatedAt}}var le,Dn=l(()=>{"use strict";J();xe();C();o(ko,"resolveLearnedAreaPaths");o(ze,"assertSafeFileKey");o(bo,"writeJsonAtomic");o(_e,"readJson");o(q,"isRecord");o(xo,"isFileError");o(Nn,"assertCapability");o(uc,"canonicalExistingPath");o(_m,"pathContains");o(Im,"pathsEqual");o(bc,"assertLearnedStoreTarget");o(Am,"isValidV2Capability");o(Rm,"isValidCanaryBinding");o(Tm,"isValidCanaryInvocation");o(vo,"isValidTimestamp");o(fc,"assertEvent");o(Cm,"assertClient");o(So,"listJsonFiles");le=class{static{o(this,"LearnedAreaStore")}paths;#e;constructor(t){let n=yc(t);this.#e=Pm(n),this.paths={...ko(n),events:x(this.#e,"events"),clients:x(this.#e,"clients")}}async initialize(){for(let t of Object.values(this.paths))bc(t);await Promise.all(Object.values(this.paths).map(t=>hc(t,{recursive:!0}))),await this.withOwnerMutation(async()=>{for(let t of await this.listCapabilities())await this.ensureCurrentEvent(t)})}async readCapability(t){ze(t,"capabilityId");let n=x(this.paths.capabilities,`${t}.json`),r=await _e(n);if(r!==void 0)return Nn(r,n);if(this.#e!==this.paths.root)return;let i=await pc(this.#e,t);if(i.length>1)throw new O("store_integrity_error",`duplicate project capabilityId: ${t}`);let s=i[0];return s===void 0?void 0:Nn(await _e(s),s)}async listCapabilities(){let t=await So(this.paths.capabilities),n=this.#e===this.paths.root?await pc(this.#e):[];return Promise.all([...t,...n].map(async r=>Nn(await _e(r),r)))}async writeCapability(t){ze(t.capabilityId,"capabilityId");let n=this.#e===this.paths.root&&t.schemaVersion===2?x(this.#e,"projects",t.scope.tenantHash,t.scope.projectHash,"capabilities"):this.paths.capabilities,r=x(n,`${t.capabilityId}.json`);Nn(t,r),await bo(r,t)}async writeEvent(t){ze(t.eventId,"eventId"),await bo(x(this.paths.events,`${t.eventId}.json`),t)}async listEvents(){return(await Promise.all((await So(this.paths.events)).map(async n=>fc(await _e(n),n)))).sort((n,r)=>n.sequence-r.sequence)}async readClient(t){ze(t,"clientIdentity");let n=x(this.paths.clients,`${t}.json`),r=await _e(n);return r===void 0?{schemaVersion:1,clientIdentity:t,events:{}}:Cm(r,t)}async writeClient(t){ze(t.clientIdentity,"clientIdentity"),await bo(x(this.paths.clients,`${t.clientIdentity}.json`),t)}withOwnerMutation(t){return te(x(this.#e,".owner.lock"),t)}withClientMutation(t,n){return ze(t,"clientIdentity"),te(x(this.paths.clients,`.${t}.lock`),n)}async ensureCurrentEvent(t){let n=Rt(t),r=await _e(x(this.paths.events,`${n}.json`));if(r!==void 0)return fc(r,n);let i=await this.listEvents(),s=$n(t,(i.at(-1)?.sequence??0)+1);return await this.writeEvent(s),s}};o(Pm,"globalLearnedAreaRoot");o(pc,"projectCapabilityFiles");o(mc,"listDirectories");o($n,"eventFromCapability")});var Eo=l(()=>{"use strict";Ee();J()});var kc=l(()=>{"use strict";C();J();Dn();Eo();mo();Ee()});var xc=l(()=>{"use strict";J()});function Ie(e){return e.schemaVersion===2}var dL,Pt=l(()=>{"use strict";J();dL=16*1024;o(Ie,"isLearnedCapabilityRecordV2")});var Ec=l(()=>{"use strict";J();Pt()});var yL,_c=l(()=>{"use strict";J();Dn();yL=16*1024});var Tc=l(()=>{"use strict";J();L();Pt()});var Ln=l(()=>{"use strict";ro();oo();Rn();Ee();po();mo();go();ac();cc();lc();J();kc();Dn();Eo();xc();Ec();_c();Tc();Pt()});import{createHash as ch}from"node:crypto";import{lstat as Mc,readFile as dh,readdir as lh,realpath as uh,stat as fh}from"fs/promises";import{join as Ae,dirname as Io,relative as ph,resolve as jn,sep as Ao}from"path";async function Mt(e,t){let n=new Map,r=[],i=o(d=>{let u=n.get(d.name);u?Re(u.path)!==Re(d.path)&&I({source:"agent:skills",level:"warn",message:`Skill "${d.name}" is shadowed by a higher-priority source.`,detail:{code:"skill_shadowed",name:d.name,selectedPath:Ae(u.path,"SKILL.md"),shadowedPath:Ae(d.path,"SKILL.md")}}):n.set(d.name,d)},"register"),a={...xn(e),...t},c=En(a);for(let{path:d,source:u}of c)try{let f=await Eh(d,u,r);for(let p of f)i(p)}catch(f){r.push({path:d,error:f instanceof Error?f.message:String(f)})}if(a.learnedArea!==void 0){let d=await mh(a.learnedArea);r.push(...d.errors);for(let u of d.skills)i(u)}return{skills:n,errors:r}}async function mh(e){let t=[],n=[];for(let r of gh(e)){let i=await hh(r.rootDir,r.expectedScope,e);t.push(...i.skills),n.push(...i.errors)}return{skills:t,errors:n}}async function hh(e,t,n){let r=new le(e),i=[],s=[],a;try{a=await r.listCapabilities()}catch(c){return{skills:i,errors:[{path:e,error:c instanceof Error?c.message:String(c)}]}}for(let c of a){if(!Ie(c)||!wh(c,t)||!bh(c,n))continue;let d=jn(e,...c.artifact.relativePath.split("/"));try{kh(d,e),await Sh(e,d);let u=await dh(d,"utf8");if(xh(u)!==c.artifact.fingerprint)throw new Error("learned Skill artifact fingerprint mismatch");let f=await xt(Io(d),"learned");if(f===null)throw new Error("learned Skill metadata is invalid");i.push({...f,learned:{capabilityId:c.capabilityId,revision:c.artifact.contentRevision,fingerprint:c.artifact.fingerprint}})}catch(u){let f=u instanceof Error?u.message:String(u);s.push({path:d,error:f}),await vh(r,c,f)}}return{skills:i,errors:s}}function gh(e){let t=[e.rootDir,...e.additionalRootDirs??[]],n=yh(e);if(t.length!==n.length)throw new Error("learned Skill discovery requires one expected scope per physical root");let r=t.map((i,s)=>({rootDir:i,expectedScope:n[s]}));for(let[i,s]of r.entries())if(r.findIndex(c=>Re(c.rootDir)===Re(s.rootDir))!==i)throw new Error("learned Skill discovery physical roots must be unique");return r}function wh(e,t){return e.scope.configHomeHash===t.configHomeHash&&e.scope.tenantHash===t.tenantHash&&e.scope.projectHash===t.projectHash}function yh(e){let t=[...e.expectedScopes??[e.expectedScope]];if(t.length===0)throw new Error("learned Skill discovery requires at least one expected scope");return t}function bh(e,t){if(e.lifecycle==="active_learned")return!0;if(e.lifecycle!=="testing")return!1;let n=t.testingBindings?.[e.capabilityId],r=e.canary.binding;return n!==void 0&&r?.bindingId===n&&Date.parse(r.expiresAt)>Date.parse(t.now??new Date().toISOString())}async function vh(e,t,n){await e.withOwnerMutation(async()=>{let r=await e.readCapability(t.capabilityId);if(r===void 0||!Ie(r)||r.revision!==t.revision||r.lifecycle!=="testing"&&r.lifecycle!=="active_learned")return;let i={...r,lifecycle:"quarantined",revision:r.revision+1,updatedAt:new Date().toISOString(),diagnostics:[...r.diagnostics??[],`artifact discovery rejected: ${n}`]};await e.writeCapability(i),await e.ensureCurrentEvent(i)})}async function Sh(e,t){let r=ph(jn(e),t).split(Ao),i=jn(e),s=await Mc(i);if(!s.isDirectory()||s.isSymbolicLink())throw new Error("learned Skill root is not a regular directory");for(let[a,c]of r.entries()){i=Ae(i,c);let d=await Mc(i),u=a===r.length-1;if(d.isSymbolicLink()||(u?!d.isFile():!d.isDirectory()))throw new Error("learned Skill artifact contains a symlink or non-regular path")}}function kh(e,t){let n=Re(t),r=Re(e);if(r!==n&&!r.startsWith(n.endsWith(Ao)?n:`${n}${Ao}`))throw new Error("learned Skill artifact escapes its Learned Area")}function Re(e){let t=jn(e);return process.platform==="win32"?t.toLowerCase():t}function xh(e){return ch("sha256").update(e,"utf8").digest("hex")}async function Eh(e,t,n){let r=[],i=new Set;async function s(a){try{let c=Re(await uh(a));if(i.has(c))return;i.add(c);let d=await lh(a,{withFileTypes:!0});if(d.some(u=>u.name==="SKILL.md")){let u=await xt(a,t);u?r.push(u):n.push({path:Ae(a,"SKILL.md"),error:"Skill metadata could not be loaded."});return}d.sort((u,f)=>u.name<f.name?-1:u.name>f.name?1:0);for(let u of d){if(u.name.startsWith(".")||u.name==="node_modules")continue;let f=Ae(a,u.name);try{(u.isDirectory()||u.isSymbolicLink()&&(await fh(f)).isDirectory())&&await s(f)}catch(p){Oc(n,f,p)}}}catch(c){Oc(n,a,c)}}return o(s,"visit"),await s(e),r}function Oc(e,t,n){typeof n=="object"&&n!==null&&"code"in n&&n.code==="ENOENT"||e.push({path:t,error:n instanceof Error?n.message:String(n)})}function Ro(e,t){let n=[],r=[".kodax/skills",".agents/skills"],i=e,s=Io(t);for(;i!==s&&i!=="/"&&i.length>3;){for(let c of r)n.push(Ae(i,c));let a=Io(i);if(a===i)break;i=a}return n}async function Nc(e,t){let n=Ro(e,t),r={projectPaths:[Ae(t,".kodax","skills"),...n]};return Mt(t,r)}var To=l(()=>{"use strict";Ln();to();An();L();o(Mt,"discoverSkills");o(mh,"scanRecordGatedLearnedArea");o(hh,"scanRecordGatedLearnedRoot");o(gh,"learnedAreaBindings");o(wh,"scopeMatches");o(yh,"expectedLearnedScopes");o(bh,"isRecordAdmitted");o(vh,"quarantineInvalidLearnedArtifact");o(Sh,"assertRegularArtifactChain");o(kh,"assertInside");o(Re,"comparablePath");o(xh,"sha256");o(Eh,"scanSkillDirectory");o(Oc,"recordDiscoveryError");o(Ro,"getNestedSkillPaths");o(Nc,"discoverSkillsWithMonorepo")});import{execSync as _h}from"child_process";import Ih from"path";function $c(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of Ah)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}function Rh(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&Ih.sep!=="\\"&&t.replace(/\\ /g,"").includes("\\"))return!1;let r=t.split(/\s*&&\s*/);if(r.length===1)return $c(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!$c(s))return!1}return!0}function Co(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}function Dc(e){return new Xe(e)}async function ue(e,t,n){return new Xe(n).resolve(e,t)}var Ah,Xe,Ot=l(()=>{"use strict";Ah=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"]);o($c,"isSingleSafeDynamicContextCommand");o(Rh,"isSafeDynamicContextCommand");o(Co,"parseArguments");Xe=class{static{o(this,"VariableResolver")}context;constructor(t){this.context=t}async resolve(t,n){let r=t,i=Co(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 u=d instanceof Error?d.message:String(d);s=s.replace(a,`[Error: ${u}]`)}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.assertDynamicContextAllowed?.(t),this.context.executeDynamicContext){let n=await this.context.executeDynamicContext(t,this.context.workingDirectory);return typeof n=="string"?n.trim():""}if(!Rh(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return _h(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}}};o(Dc,"createResolver");o(ue,"resolveSkillContent")});function Lc(e,t){let n=e.replace(/\s+/gu," ").trim();return n.length<=t?n:`${n.slice(0,t-1).replace(/[\uD800-\uDBFF]$/,"")}\u2026`}function Po(e){let t=e.filter(c=>!c.disableModelInvocation);if(t.length===0)return"";let n=["## Available Skills","","When users ask you to perform tasks, check if any of the available skills below match the request. Skills provide specialized capabilities and step-by-step instructions for specific workflows.","",'If the current task context already contains an "Active skill invocation" or a host-expanded Skill block for the referenced name, that explicit user invocation is already complete. Follow the expanded instructions and do NOT call the `skill` tool for that Skill again.',"",'When users reference a "slash command" or "/<something>" (e.g. "/feature-list-tracker", "/skill:foo") and the host has not already expanded it, they are referring to a skill. Invoke it via the `skill` tool with the skill name.',"","**BLOCKING REQUIREMENT**: When a model-visible Skill matches the user's request and the host has not already expanded it, you MUST invoke it via the `skill` tool BEFORE generating any other response about the task. Loading the Skill is not optional and not something to defer \u2014 it is the FIRST action you take.","","NEVER mention a model-discovered Skill without actually calling the `skill` tool. This rule does not apply to a host-expanded active user invocation, which must not be called again. Do not guess at Skill names \u2014 only use Skills listed below. Do NOT call `read` on a `SKILL.md` path to load a Skill \u2014 that is the legacy path and bypasses the resolver.",""],r=n.join(`
268
- `).length+1,i=0,s=0;for(let c of t){let d=Lc(c.description,500),u=c.argumentHint?Lc(c.argumentHint,80):"",f=`- ${c.name}:${u?` ${u}`:""} ${d}`;r+f.length+1>Th-Ch||(n.push(f),r+=f.length+1,i++,(d!==c.description||u!==(c.argumentHint??""))&&s++)}let a=t.length-i;if(s>0||a>0){let c=`[Skill catalog shortened: ${s} entries shortened; ${a} Skills omitted. Explicit invocation of registered Skills remains available.]`;n.push("",c),I({source:"agent:skills",level:"warn",message:c,detail:{code:"skill_catalog_shortened",total:t.length,included:i,omitted:a,shortened:s}})}return n.push(""),n.join(`
269
- `)}function $t(e,t){return Ve&&e!==void 0&&jc!==e&&(Ve=null),Ve||(Ve=new Nt(e,t),jc=e),Ve}async function Mo(e,t){let n=$t(e,t);return await n.discover(),n}function Fc(){Ve=null}var Th,Ch,Nt,Ve,jc,Oo=l(()=>{"use strict";L();To();An();Ot();Th=8e3,Ch=160;o(Lc,"catalogText");o(Po,"formatSkillsSystemPrompt");Nt=class{static{o(this,"SkillRegistry")}skillsByName=new Map;fullSkillsByName=new Map;incompleteDiscovery=!1;get discoveryIncomplete(){return this.incompleteDiscovery}projectRoot;customPaths;constructor(t,n){this.projectRoot=t,this.customPaths=n}async discover(){let t=await Mt(this.projectRoot,this.customPaths);this.incompleteDiscovery=t.errors.length>0,this.fullSkillsByName.clear(),this.skillsByName.clear();for(let[n,r]of t.skills)this.skillsByName.set(n,r);if(t.errors.length>0)for(let{path:n,error:r}of t.errors)I({source:"agent:skills",level:"warn",message:`Error scanning ${n}.`,detail:r})}get skills(){return this.skillsByName}get(t){return this.skillsByName.get(t)}async loadFull(t){let n=this.fullSkillsByName.get(t);if(n)return n;let r=this.skillsByName.get(t);if(!r)throw new Error(`Skill not found: ${t}`);let i=await In(r.path,r.source);if(this.skillsByName.get(t)!==r)return this.loadFull(t);if(!i)throw new Error(`Failed to load skill: ${t}`);return this.fullSkillsByName.set(t,i),i}async invoke(t,n,r){try{let i=await this.loadFull(t);return{success:!0,content:await ue(i.content,n,r)}}catch(i){return{success:!1,content:"",error:i instanceof Error?i.message:String(i)}}}async reload(){this.skillsByName.clear(),this.fullSkillsByName.clear(),await this.discover()}list(){return Array.from(this.skillsByName.values())}listUserInvocable(){return this.list()}getSystemPromptSnippet(){return Po(this.list())}has(t){return this.skillsByName.has(t)}get size(){return this.skillsByName.size}},Ve=null;o($t,"getSkillRegistry");o(Mo,"initializeSkillRegistry");o(Fc,"resetSkillRegistry")});function Wc(e){return new Je(e)}async function Uc(e,t,n,r){return new Je(n).execute(e,t,r)}var Je,Bc=l(()=>{"use strict";Oo();Ot();Je=class{static{o(this,"SkillExecutor")}context;constructor(t){this.context=t}async execute(t,n,r){let i=$t();if(!i.has(t))return{success:!1,content:"",error:`Skill not found: ${t}`};try{let s=await i.loadFull(t),a=r?.mode??(s.context==="fork"?"fork":"inline"),c=await ue(s.content,n,this.context);return a==="fork"?this.executeFork(s,c,r):this.executeInline(s,c,r)}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}}async executeInline(t,n,r){let i=this.buildPrompt(t,n);if(r?.onExecute)try{return{success:!0,content:await r.onExecute(i,t)}}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}return{success:!0,content:i}}async executeFork(t,n,r){return{success:!0,content:this.buildPrompt(t,n),artifacts:[{type:"text",name:"fork-config",content:JSON.stringify({agent:r?.agent??t.agent??"general-purpose",model:r?.model??t.model??"haiku",allowedTools:r?.allowedTools??this.parseAllowedTools(t.allowedTools)})}]}}buildPrompt(t,n){let r=[];return r.push(`[Using Skill: ${t.name}]`),r.push(""),t.allowedTools&&(r.push(`**Allowed Tools**: ${t.allowedTools}`),r.push("")),r.push(n),r.join(`
270
- `)}parseAllowedTools(t){return t?t.split(",").map(n=>n.trim()).filter(Boolean):[]}};o(Wc,"createExecutor");o(Uc,"executeSkill")});function Kc(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function Fn(e){return e.replace(/\\/g,"/")}function Ph(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}))]}function Mh(e){let t=Ph(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}/: ${Fn(`${e.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of t.slice(0,No))r.push(`- ${i}/${s.relativePath}: ${Fn(s.path)}`);return t.length>No&&r.push(`- ... ${t.length-No} more files under ${Fn(e.path)}`),r}function Oh(e,t,n){let r=[];r.push(`<skill name="${Kc(e.name)}" location="${Kc(e.path)}">`),r.push(""),r.push(`Skill root: ${Fn(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=Mh(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(`
271
- `)}async function qc(e,t,n){let r=await ue(e.content,t,n);return{content:Oh(e,r,t),disableModelInvocation:e.disableModelInvocation??!1,skill:e}}function Hc(e,t){let n=`Skill activated: ${e}`;return t.trim()&&(n+=` with arguments: ${t}`),n}var No,zc=l(()=>{"use strict";Ot();o(Kc,"escapeXml");No=120;o(Fn,"formatDisplayPath");o(Ph,"collectSupportFiles");o(Mh,"buildSupportFileContext");o(Oh,"buildSkillBlock");o(qc,"expandSkillForLLM");o(Hc,"formatSkillActivationMessage")});import{existsSync as Xc}from"node:fs";import{mkdir as Nh,readFile as $o,readdir as $h,stat as Vc,writeFile as vj}from"node:fs/promises";import Dh from"node:os";import H from"node:path";import{fileURLToPath as Do,pathToFileURL as Jc}from"node:url";import Lh from"yaml";async function Lo(){let e=H.dirname(Do(import.meta.url)),t=H.resolve(e,"../../../sdk-skills.js");return Xc(t)?import(Jc(t).href):Promise.resolve().then(()=>(Kn(),Zc))}function Yc(e){Te=e}async function fe(){if(Te)return Te;let e=H.dirname(Do(import.meta.url)),t=[],n=H.resolve(e,"../../../index.js");if(Xc(n))return Te=await import(Jc(n).href),Te;t.push(`relative SDK path not found: ${n}`);try{return Te=await import(["@kodax-ai","kodax"].join("/")),Te}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}.
291
+ ---`,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=Ma.parse(i)??{}}catch{a=Ma.parse(Kp(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]}function Na(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}}function qp(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}}}function Hp(e){if(e==null)return;let n=(Array.isArray(e)?e:[e]).map(r=>qp(r)).filter(r=>r!==void 0);return n.length>0?n:void 0}function $a(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of Bp){let i=Hp(t[r]);i&&(n[r]=i)}return Object.keys(n).length>0?n:void 0}var Bp,Da=l(()=>{"use strict";Bp=["SessionStart","UserPromptSubmit","PreToolUse","PostToolUse","Stop","SubagentStop","Notification"];o(Kp,"sanitizeYaml");o(Oa,"parseYamlFrontmatter");o(Na,"normalizeAllowedToolsString");o(qp,"normalizeYamlHookEntry");o(Hp,"normalizeYamlHookEntryList");o($a,"normalizeYamlHookMap")});import{readFile as ro,readdir as zp}from"fs/promises";import{join as ce,relative as Gp}from"path";function En(e){let[t,n]=Oa(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:Na(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:$a(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}}async function Et(e,t){let n=ce(e,"SKILL.md");try{let r=await ro(n,"utf-8"),{frontmatter:i}=En(r);return{name:i.name,description:i.description,userInvocable:!0,argumentHint:i.argumentHint,path:e,source:t,disableModelInvocation:i.disableModelInvocation??!1}}catch(r){return I({source:"agent:skills",level:"error",message:`Failed to load skill metadata from ${e}.`,detail:r}),null}}async function _n(e,t){let n=ce(e,"SKILL.md");try{let r=await ro(n,"utf-8"),{frontmatter:i,body:s}=En(r),[a,c,d,u,f]=await Promise.all([qe(ce(e,"scripts")),qe(ce(e,"references")),qe(ce(e,"assets")),qe(ce(e,"templates")),qe(ce(e,"resources"))]);return{...i,userInvocable:!0,path:e,skillFilePath:n,content:s,rawContent:s,loaded:!0,source:t,...a.length>0&&{scripts:a},...c.length>0&&{references:c},...d.length>0&&{assets:d},...u.length>0&&{templates:u},...f.length>0&&{resources:f}}}catch(r){return I({source:"agent:skills",level:"error",message:`Failed to load skill from ${e}.`,detail:r}),null}}async function qe(e,t=e){let n=[];try{let r=await zp(e,{withFileTypes:!0});r.sort((i,s)=>i.name.localeCompare(s.name));for(let i of r){let s=ce(e,i.name);if(i.isDirectory()){n.push(...await qe(s,t));continue}i.isFile()&&n.push({name:i.name,path:s,relativePath:Gp(t,s).replace(/\\/g,"/")})}}catch{}return n}async function La(e){if(e.content)return e.content;let t=await ro(e.path,"utf-8");return e.content=t,t}var In=l(()=>{"use strict";L();Da();o(En,"parseSkillMarkdown");o(Et,"loadSkillMetadata");o(_n,"loadFullSkill");o(qe,"loadSkillFiles");o(La,"loadSkillFileContent")});var oo=l(()=>{"use strict"});var io=l(()=>{"use strict"});var ja,Fa,An=l(()=>{"use strict";ja=64*1024,Fa=256*1024});import{randomUUID as Xp}from"node:crypto";import{mkdir as Ka,open as qa,readFile as de,readdir as lo,rm as Vp,stat as Cn,utimes as Jp,writeFile as Ha}from"node:fs/promises";import{dirname as Yp,join as so}from"node:path";function Zp(){return Ua||(Wa=Se(process.pid),Ua=!0),Wa}async function te(e,t,n=za){let r=await Xa(e,n);try{return await t()}finally{await r()}}async function Xa(e,t=za,n={}){await Ka(Yp(e),{recursive:!0});let r=await em(e,t,n.requireKnownOwner===!0),i=!1,s=!1,a;return async()=>{if(!s){if(a!==void 0)return a;a=(async()=>{i||(await r.handle.close(),i=!0),await ao(e,r.token),s=!0})();try{await a}finally{s||(a=void 0)}}}}async function em(e,t,n,r){let i=Date.now()+t,s=await tm(e,r),a,c=!1;try{for(await nm(s,i,e,r);;){await Va(s);try{let d=await cm(e,s.token);try{await uo(s)}catch(u){let f=[u];try{await d.handle.close()}catch(p){f.push(p)}try{await ao(e,d.token)}catch(p){f.push(p)}throw f.length===1?u:new AggregateError(f,"learning lock ticket loss cleanup failed")}return a=d,a}catch(d){let u=await um(d,e);if(u==="retry_missing"){if(c)throw d;c=!0,await It(_t);continue}if(u==="not_contended")throw d;c=!1;let f=await dm(e,n,r);if(f!==void 0&&(!n||At(f.raw)!==void 0)&&await lm(e,f))continue;if(Date.now()>=i)throw nc(e);await It(_t)}}}finally{try{await Qa(s.path,s.raw)}catch(d){if(a===void 0)throw d;let u=[d];try{await a.handle.close()}catch(f){u.push(f)}try{await ao(e,a.token)}catch(f){u.push(f)}throw u.length===1?d:new AggregateError(u,"learning lock acquisition cleanup failed")}}}async function tm(e,t){let n=`${e}.queue`,r=Xp(),i=ec(r),s=so(n,`choosing-${r}.lock`);await Ka(n,{recursive:!0}),await Ba(s,i);try{await Ya(n,e,s,t),await Ja(s,i,"choosing entry");let a=await rm(n),c=Math.max(0,...a.map(f=>f.number))+1;if(!Number.isSafeInteger(c))throw new Error("learning lock ticket overflow");let d=`ticket-${String(c).padStart(Qp,"0")}-${r}.lock`,u=so(n,d);return await Ba(u,i),{queuePath:n,path:u,name:d,raw:i,token:r}}finally{await Qa(s,i)}}async function nm(e,t,n,r){for(;;){await Va(e),await Ya(e.queuePath,n,e.path,r),await uo(e);let i=await lo(e.queuePath),s=i.some(c=>c.startsWith("choosing-")),a=i.map(Pn).filter(c=>c!==void 0).sort(om)[0];if(!s&&a?.name===e.name)return;if(Date.now()>=t)throw nc(n);await It(_t)}}async function Ba(e,t){let n=await qa(e,"wx");try{try{await n.writeFile(t,"utf8")}finally{await n.close()}}catch(r){throw await He(e),r}}async function uo(e){await Ja(e.path,e.raw,"ticket")}async function Va(e){await uo(e);try{let t=new Date;await Jp(e.path,t,t)}catch(t){throw T(t,"ENOENT")?new Error(`learning store lock ticket lost: ${e.path}`):t}}async function Ja(e,t,n){try{if(await de(e,"utf8")!==t)throw new Error(`learning store lock ${n} lost: ${e}`)}catch(r){throw T(r,"ENOENT")?new Error(`learning store lock ${n} lost: ${e}`):r}}async function rm(e){return(await lo(e)).map(Pn).filter(t=>t!==void 0)}function Pn(e){let t=/^ticket-(\d{16})-[0-9a-f-]+\.lock$/i.exec(e);if(t===null)return;let n=Number(t[1]);return Number.isSafeInteger(n)?{name:e,number:n}:void 0}function om(e,t){return e.number-t.number||e.name.localeCompare(t.name)}async function Ya(e,t,n,r){let i=await lo(e);await Promise.all(i.filter(im).map(async s=>{let a=so(e,s);a!==n&&await sm(a,s,t,r)&&await He(a)}))}function im(e){return/^choosing-[0-9a-f-]+\.lock$/i.test(e)||Pn(e)!==void 0}async function sm(e,t,n,r){try{let i=await Cn(e),s=At(await de(e,"utf8"));return s?.released===!0||s!==void 0&&!fo(s.pid)||s!==void 0&&tc(s,r)?!0:Date.now()-i.mtimeMs<=Ga?!1:s===void 0||!co(s)?!0:s.token===void 0?!1:Pn(t)===void 0?!0:!await am(n,s.token)}catch(i){if(T(i,"ENOENT")||["EPERM","EACCES","EBUSY"].some(s=>T(i,s)))return!1;throw i}}async function am(e,t){try{return At(await de(e,"utf8"))?.token===t}catch(n){if(T(n,"ENOENT"))return!1;if(["EPERM","EACCES","EBUSY"].some(r=>T(n,r)))return!0;throw n}}async function cm(e,t){let n=await qa(e,"wx");try{return await n.writeFile(ec(t),"utf8"),{handle:n,token:t}}catch(r){throw await n.close(),await He(e),r}}async function dm(e,t=!1,n){try{let r=await Cn(e),i=await de(e,"utf8"),s=At(i),a=s?.token!==void 0&&await pm(e,s.token),c=s!==void 0&&(!fo(s.pid)||tc(s,n)||t&&!!s.processStartIdentity&&!co(s));return!a&&!c&&Date.now()-r.mtimeMs<=Ga?void 0:a||c||s===void 0||!co(s)?{raw:i,mtimeMs:r.mtimeMs,size:r.size,...c&&s?{abandonedOwner:s}:{}}:void 0}catch(r){if(["ENOENT","EPERM","EACCES","EBUSY"].some(i=>T(r,i)))return;throw r}}async function lm(e,t){try{let n=await Cn(e);return n.mtimeMs!==t.mtimeMs||n.size!==t.size||await de(e,"utf8")!==t.raw?!1:(await He(e),!0)}catch(n){if(T(n,"ENOENT"))return!0;if(["EPERM","EACCES","EBUSY"].some(r=>T(n,r)))return!1;throw n}}async function um(e,t){if(T(e,"EEXIST"))return"contended";if(!["EPERM","EACCES","EBUSY"].some(n=>T(e,n)))return"not_contended";try{return(await Cn(t)).isFile()?"contended":"not_contended"}catch(n){if(T(n,"ENOENT"))return"retry_missing";throw e}}async function ao(e,t){try{if(At(await de(e,"utf8"))?.token!==t)return;try{await He(e);return}catch(r){try{await fm(e,t);return}catch(i){throw new AggregateError([r,i],"learning lock release marker and owner cleanup both failed")}}}catch(n){if(!T(n,"ENOENT"))throw n}}async function fm(e,t){for(let n=1;n<=Rn;n+=1)try{await Ha(Za(e,t),`${t}
292
+ `,"utf8");return}catch(r){if(!po(r)||n===Rn)throw r;await It(_t)}}async function Qa(e,t){let n;try{if(await de(e,"utf8")!==t)throw new Error(`learning store lock queue entry lost: ${e}`);await Ha(e,`${t.trimEnd()} released
293
+ `,"utf8")}catch(r){if(T(r,"ENOENT"))return;n=r}try{await He(e)}catch(r){if(n===void 0&&po(r))return;throw n===void 0?r:new AggregateError([n,r],"learning lock queue marker and cleanup both failed")}}async function pm(e,t){try{return(await de(Za(e,t),"utf8")).trim()===t}catch(n){if(["ENOENT","EPERM","EACCES","EBUSY"].some(r=>T(n,r)))return!1;throw n}}function Za(e,t){return`${e}.${t}.released`}function ec(e){let t=Zp(),n=t===void 0?"":` identity=${Buffer.from(t).toString("base64url")}`;return`${process.pid} ${e}${n}
294
+ `}function At(e){let t=e.trim().split(/\s+/),n=Number(t.shift());if(!Number.isSafeInteger(n)||n<=0)return;let r,i,s=!1;for(let a of t){if(/^[0-9a-f-]+$/i.test(a)&&r===void 0){r=a;continue}if(a.startsWith("identity=")&&i===void 0){let c=a.slice(9);if(!/^[A-Za-z0-9_-]+$/.test(c)||(i=Buffer.from(c,"base64url").toString("utf8"),!i))return;continue}if(a==="released"&&!s){s=!0;continue}return}return{pid:n,...r===void 0?{}:{token:r},...i===void 0?{}:{processStartIdentity:i},released:s}}function fo(e){try{return process.kill(e,0),!0}catch(t){return!T(t,"ESRCH")}}function T(e,t){return typeof e=="object"&&e!==null&&"code"in e&&e.code===t}function co(e){if(!fo(e.pid))return!1;if(e.processStartIdentity===void 0)return!0;let t=Se(e.pid);return t===void 0||t===e.processStartIdentity}function tc(e,t){return!!e.processStartIdentity&&e.pid===t?.pid&&e.processStartIdentity===t.processStartIdentity}function po(e){return["EPERM","EACCES","EBUSY"].some(t=>T(e,t))}async function He(e){for(let t=1;t<=Rn;t+=1)try{await Vp(e,{force:!0});return}catch(n){if(T(n,"ENOENT"))return;if(!po(n)||t===Rn)throw n;await It(_t)}}function nc(e){return new Tn(e)}async function It(e){await new Promise(t=>setTimeout(t,e))}var za,_t,Ga,Qp,Rn,Wa,Ua,Tn,xe=l(()=>{"use strict";ke();za=5e3,_t=10,Ga=3e4,Qp=16,Rn=8,Ua=!1;o(Zp,"getCurrentProcessStartIdentity");Tn=class extends Error{static{o(this,"KodaXFileLockTimeoutError")}lockPath;code="kodax_file_lock_timeout";constructor(t){super(`KodaX file lock timed out: ${t}`),this.lockPath=t,this.name="KodaXFileLockTimeoutError"}};o(te,"withLearningFileLock");o(Xa,"acquireLearningFileLock");o(em,"acquireLock");o(tm,"createLockTicket");o(nm,"waitForTicketTurn");o(Ba,"createOwnerFile");o(uo,"assertTicketOwned");o(Va,"heartbeatLockTicket");o(Ja,"assertQueueEntryOwned");o(rm,"listQueueTickets");o(Pn,"parseQueueTicket");o(om,"compareQueueTickets");o(Ya,"cleanupAbandonedQueueEntries");o(im,"isQueueEntryName");o(sm,"isAbandonedQueueEntry");o(am,"queueTicketOwnsCoordinatorLock");o(cm,"createLock");o(dm,"observeStaleLock");o(lm,"removeObservedStaleLock");o(um,"classifyExistingLockContention");o(ao,"releaseLock");o(fm,"writeReleaseMarkerWithTransientRetry");o(Qa,"releaseQueueEntry");o(pm,"hasReleaseMarker");o(Za,"releaseMarkerPath");o(ec,"lockOwnerRecord");o(At,"parseOwner");o(fo,"isProcessAlive");o(T,"isFileError");o(co,"isRecordedOwnerAlive");o(tc,"matchesAbandonedOwner");o(po,"isTransientFileContention");o(He,"removeFileWithTransientRetry");o(nc,"lockTimeout");o(It,"delay")});var Ee=l(()=>{"use strict";C();bn();xe()});var mo=l(()=>{"use strict";An();io()});var ho=l(()=>{"use strict";mo();An();Ee()});var wo=l(()=>{"use strict";oo();Ee()});var ac=l(()=>{"use strict";C();bn()});var ID,cc=l(()=>{"use strict";ID=1024*1024});var lc=l(()=>{"use strict";wo()});function yo(e){return e==="active_learned"?"activated":e==="promoted_user"?"promoted":e==="quarantined"?"attention":e}function vo(e){return e.lastAction==="rollback"?"attention":yo(e.lifecycle)}function Tt(e){return`${e.capabilityId}-r${e.revision}-${vo(e)}`}var O,J=l(()=>{"use strict";O=class extends Error{static{o(this,"LearningCapabilityError")}code;constructor(t,n){super(n),this.code=t,this.name="LearningCapabilityError"}};o(yo,"learningEventKindForLifecycle");o(vo,"learningEventKindForRecord");o(Tt,"learningEventIdFor")});import{mkdir as hc,readFile as mm,readdir as gc,rename as hm,rm as gm,writeFile as wm}from"node:fs/promises";import{lstatSync as ym,realpathSync as vm}from"node:fs";import{basename as Ct,dirname as Ge,isAbsolute as bm,join as x,relative as wc,resolve as yc,sep as Sm}from"node:path";function xo(e){return{root:e,skills:x(e,"skills"),extensions:x(e,"extensions"),capabilities:x(e,"capabilities"),events:x(e,"events"),clients:x(e,"clients")}}function ze(e,t){if(!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,127}$/.test(e))throw new O("invalid_record",`${t} is not a safe file key`)}async function bo(e,t){vc(e),await hc(Ge(e),{recursive:!0});let n=x(Ge(e),`.${Ct(e)}.${process.pid}-${Date.now().toString(36)}.tmp`);try{await wm(n,`${JSON.stringify(t,null,2)}
295
+ `,"utf8"),await hm(n,e)}catch(r){throw await gm(n,{force:!0}),r}}async function _e(e){try{return JSON.parse(await mm(e,"utf8"))}catch(t){if(Eo(t,"ENOENT"))return;throw t instanceof SyntaxError?new O("store_integrity_error",`invalid JSON in ${e}`):t}}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Eo(e,t){return q(e)&&e.code===t}function On(e,t){if(!q(e)||e.schemaVersion!==1&&e.schemaVersion!==2||typeof e.capabilityId!="string"||typeof e.displayName!="string"||typeof e.slug!="string"||typeof e.revision!="number"||typeof e.createdAt!="string"||typeof e.updatedAt!="string"||!q(e.source)||e.schemaVersion===2&&!Em(e))throw new O("store_integrity_error",`invalid capability record in ${t}`);return e}function uc(e){let t=[],n=yc(e);for(;;)try{return ym(n),x(vm.native(n),...t)}catch(r){if(r.code!=="ENOENT")throw r;let i=Ge(n);if(i===n)throw r;t.unshift(Ct(n)),n=i}}function km(e,t){let n=wc(e,t);return n===""||n!==".."&&!n.startsWith(`..${Sm}`)&&!bm(n)}function xm(e,t){return wc(e,t)===""}function vc(e){let t=uc(Pe()),n=uc(e),r=x(t,"runtime");if(xm(n,t)||km(r,n))throw new O("store_integrity_error",`learned Area path aliases protected Runtime state: ${e}`)}function Em(e){if(e.carrier!=="skill"||!q(e.scope)||!q(e.artifact)||!q(e.provenance)||!q(e.canary))return!1;let t=e.scope,n=e.artifact,r=e.provenance,i=e.canary;return[t.configHomeHash,t.tenantHash,t.projectHash].every(s=>typeof s=="string"&&/^[a-f0-9]{64}$/.test(s))&&n.kind==="skill_markdown"&&typeof n.relativePath=="string"&&typeof n.fingerprint=="string"&&/^[a-f0-9]{64}$/.test(n.fingerprint)&&Number.isSafeInteger(n.contentRevision)&&["jobId","inputHash","decisionId","actionId"].every(s=>typeof r[s]=="string")&&i.maxInvocations===3&&Number.isSafeInteger(i.invocationCount)&&Number.isSafeInteger(i.verifiedSuccesses)&&Number.isSafeInteger(i.credibleNegatives)&&(i.binding===void 0||_m(i.binding))&&Array.isArray(i.invocations)&&i.invocations.every(Im)}function _m(e){return q(e)&&typeof e.bindingId=="string"&&typeof e.ownerSessionRef=="string"&&So(e.expiresAt)}function Im(e){return!q(e)||typeof e.invocationId!="string"||typeof e.bindingId!="string"||!["pending","verified_success","credible_negative","inconclusive"].includes(String(e.status))||!Array.isArray(e.evidenceRefs)||!e.evidenceRefs.every(t=>typeof t=="string")||!So(e.invokedAt)||e.usageSessionHash!==void 0&&(typeof e.usageSessionHash!="string"||!/^[a-f0-9]{64}$/.test(e.usageSessionHash))||e.artifactRevision!==void 0&&!Number.isSafeInteger(e.artifactRevision)||e.artifactFingerprint!==void 0&&(typeof e.artifactFingerprint!="string"||!/^[a-f0-9]{64}$/.test(e.artifactFingerprint))?!1:e.status==="pending"?e.completedAt===void 0:So(e.completedAt)}function So(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function fc(e,t){if(!q(e)||e.schemaVersion!==1||typeof e.sequence!="number"||!Number.isSafeInteger(e.sequence)||e.sequence<1||typeof e.eventId!="string"||typeof e.capabilityId!="string"||typeof e.capabilityRevision!="number")throw new O("store_integrity_error",`invalid learning event in ${t}`);return e}function Am(e,t){if(!q(e)||e.schemaVersion!==1||e.clientIdentity!==t||!q(e.events))throw new O("store_integrity_error",`invalid learning client record for ${t}`);return e}async function ko(e){try{return(await gc(e)).filter(t=>t.endsWith(".json")).sort().map(t=>x(e,t))}catch(t){if(Eo(t,"ENOENT"))return[];throw t}}function Rm(e){let t=Ct(e),n=Ge(e),r=Ct(n),i=Ge(n);return/^[a-f0-9]{64}$/.test(t)&&/^[a-f0-9]{64}$/.test(r)&&Ct(i)==="projects"?Ge(i):e}async function pc(e,t){let n=x(e,"projects"),r=[];for(let i of await mc(n))for(let s of await mc(x(n,i))){let a=x(n,i,s,"capabilities");if(t!==void 0){let c=x(a,`${t}.json`);await _e(c)!==void 0&&r.push(c)}else r.push(...await ko(a))}return r.sort()}async function mc(e){try{return(await gc(e,{withFileTypes:!0})).filter(t=>t.isDirectory()&&/^[a-f0-9]{64}$/.test(t.name)).map(t=>t.name).sort()}catch(t){if(Eo(t,"ENOENT"))return[];throw t}}function Nn(e,t){return{schemaVersion:1,sequence:t,eventId:Tt(e),capabilityId:e.capabilityId,capabilityRevision:e.revision,kind:vo(e),lifecycle:e.lifecycle,displayName:e.displayName,slug:e.slug,carrier:e.carrier,createdAt:e.updatedAt}}var le,$n=l(()=>{"use strict";J();xe();C();o(xo,"resolveLearnedAreaPaths");o(ze,"assertSafeFileKey");o(bo,"writeJsonAtomic");o(_e,"readJson");o(q,"isRecord");o(Eo,"isFileError");o(On,"assertCapability");o(uc,"canonicalExistingPath");o(km,"pathContains");o(xm,"pathsEqual");o(vc,"assertLearnedStoreTarget");o(Em,"isValidV2Capability");o(_m,"isValidCanaryBinding");o(Im,"isValidCanaryInvocation");o(So,"isValidTimestamp");o(fc,"assertEvent");o(Am,"assertClient");o(ko,"listJsonFiles");le=class{static{o(this,"LearnedAreaStore")}paths;#e;constructor(t){let n=yc(t);this.#e=Rm(n),this.paths={...xo(n),events:x(this.#e,"events"),clients:x(this.#e,"clients")}}async initialize(){for(let t of Object.values(this.paths))vc(t);await Promise.all(Object.values(this.paths).map(t=>hc(t,{recursive:!0}))),await this.withOwnerMutation(async()=>{for(let t of await this.listCapabilities())await this.ensureCurrentEvent(t)})}async readCapability(t){ze(t,"capabilityId");let n=x(this.paths.capabilities,`${t}.json`),r=await _e(n);if(r!==void 0)return On(r,n);if(this.#e!==this.paths.root)return;let i=await pc(this.#e,t);if(i.length>1)throw new O("store_integrity_error",`duplicate project capabilityId: ${t}`);let s=i[0];return s===void 0?void 0:On(await _e(s),s)}async listCapabilities(){let t=await ko(this.paths.capabilities),n=this.#e===this.paths.root?await pc(this.#e):[];return Promise.all([...t,...n].map(async r=>On(await _e(r),r)))}async writeCapability(t){ze(t.capabilityId,"capabilityId");let n=this.#e===this.paths.root&&t.schemaVersion===2?x(this.#e,"projects",t.scope.tenantHash,t.scope.projectHash,"capabilities"):this.paths.capabilities,r=x(n,`${t.capabilityId}.json`);On(t,r),await bo(r,t)}async writeEvent(t){ze(t.eventId,"eventId"),await bo(x(this.paths.events,`${t.eventId}.json`),t)}async listEvents(){return(await Promise.all((await ko(this.paths.events)).map(async n=>fc(await _e(n),n)))).sort((n,r)=>n.sequence-r.sequence)}async readClient(t){ze(t,"clientIdentity");let n=x(this.paths.clients,`${t}.json`),r=await _e(n);return r===void 0?{schemaVersion:1,clientIdentity:t,events:{}}:Am(r,t)}async writeClient(t){ze(t.clientIdentity,"clientIdentity"),await bo(x(this.paths.clients,`${t.clientIdentity}.json`),t)}withOwnerMutation(t){return te(x(this.#e,".owner.lock"),t)}withClientMutation(t,n){return ze(t,"clientIdentity"),te(x(this.paths.clients,`.${t}.lock`),n)}async ensureCurrentEvent(t){let n=Tt(t),r=await _e(x(this.paths.events,`${n}.json`));if(r!==void 0)return fc(r,n);let i=await this.listEvents(),s=Nn(t,(i.at(-1)?.sequence??0)+1);return await this.writeEvent(s),s}};o(Rm,"globalLearnedAreaRoot");o(pc,"projectCapabilityFiles");o(mc,"listDirectories");o(Nn,"eventFromCapability")});var _o=l(()=>{"use strict";Ee();J()});var kc=l(()=>{"use strict";C();J();$n();_o();ho();Ee()});var xc=l(()=>{"use strict";J()});function Ie(e){return e.schemaVersion===2}var iL,Mt=l(()=>{"use strict";J();iL=16*1024;o(Ie,"isLearnedCapabilityRecordV2")});var Ec=l(()=>{"use strict";J();Mt()});var mL,_c=l(()=>{"use strict";J();$n();mL=16*1024});var Tc=l(()=>{"use strict";J();L();Mt()});var Dn=l(()=>{"use strict";oo();io();An();Ee();mo();ho();wo();ac();cc();lc();J();kc();$n();_o();xc();Ec();_c();Tc();Mt()});import{createHash as ih}from"node:crypto";import{lstat as Mc,readFile as sh,readdir as ah,realpath as ch,stat as dh}from"fs/promises";import{join as Ae,dirname as Ao,relative as lh,resolve as Ln,sep as Ro}from"path";async function Ot(e,t){let n=new Map,r=[],i=o(d=>{let u=n.get(d.name);u?Re(u.path)!==Re(d.path)&&I({source:"agent:skills",level:"warn",message:`Skill "${d.name}" is shadowed by a higher-priority source.`,detail:{code:"skill_shadowed",name:d.name,selectedPath:Ae(u.path,"SKILL.md"),shadowedPath:Ae(d.path,"SKILL.md")}}):n.set(d.name,d)},"register"),a={...kn(e),...t},c=xn(a);for(let{path:d,source:u}of c)try{let f=await Sh(d,u,r);for(let p of f)i(p)}catch(f){r.push({path:d,error:f instanceof Error?f.message:String(f)})}if(a.learnedArea!==void 0){let d=await uh(a.learnedArea);r.push(...d.errors);for(let u of d.skills)i(u)}return{skills:n,errors:r}}async function uh(e){let t=[],n=[];for(let r of ph(e)){let i=await fh(r.rootDir,r.expectedScope,e);t.push(...i.skills),n.push(...i.errors)}return{skills:t,errors:n}}async function fh(e,t,n){let r=new le(e),i=[],s=[],a;try{a=await r.listCapabilities()}catch(c){return{skills:i,errors:[{path:e,error:c instanceof Error?c.message:String(c)}]}}for(let c of a){if(!Ie(c)||!mh(c,t)||!gh(c,n))continue;let d=Ln(e,...c.artifact.relativePath.split("/"));try{vh(d,e),await yh(e,d);let u=await sh(d,"utf8");if(bh(u)!==c.artifact.fingerprint)throw new Error("learned Skill artifact fingerprint mismatch");let f=await Et(Ao(d),"learned");if(f===null)throw new Error("learned Skill metadata is invalid");i.push({...f,learned:{capabilityId:c.capabilityId,revision:c.artifact.contentRevision,fingerprint:c.artifact.fingerprint}})}catch(u){let f=u instanceof Error?u.message:String(u);s.push({path:d,error:f}),await wh(r,c,f)}}return{skills:i,errors:s}}function ph(e){let t=[e.rootDir,...e.additionalRootDirs??[]],n=hh(e);if(t.length!==n.length)throw new Error("learned Skill discovery requires one expected scope per physical root");let r=t.map((i,s)=>({rootDir:i,expectedScope:n[s]}));for(let[i,s]of r.entries())if(r.findIndex(c=>Re(c.rootDir)===Re(s.rootDir))!==i)throw new Error("learned Skill discovery physical roots must be unique");return r}function mh(e,t){return e.scope.configHomeHash===t.configHomeHash&&e.scope.tenantHash===t.tenantHash&&e.scope.projectHash===t.projectHash}function hh(e){let t=[...e.expectedScopes??[e.expectedScope]];if(t.length===0)throw new Error("learned Skill discovery requires at least one expected scope");return t}function gh(e,t){if(e.lifecycle==="active_learned")return!0;if(e.lifecycle!=="testing")return!1;let n=t.testingBindings?.[e.capabilityId],r=e.canary.binding;return n!==void 0&&r?.bindingId===n&&Date.parse(r.expiresAt)>Date.parse(t.now??new Date().toISOString())}async function wh(e,t,n){await e.withOwnerMutation(async()=>{let r=await e.readCapability(t.capabilityId);if(r===void 0||!Ie(r)||r.revision!==t.revision||r.lifecycle!=="testing"&&r.lifecycle!=="active_learned")return;let i={...r,lifecycle:"quarantined",revision:r.revision+1,updatedAt:new Date().toISOString(),diagnostics:[...r.diagnostics??[],`artifact discovery rejected: ${n}`]};await e.writeCapability(i),await e.ensureCurrentEvent(i)})}async function yh(e,t){let r=lh(Ln(e),t).split(Ro),i=Ln(e),s=await Mc(i);if(!s.isDirectory()||s.isSymbolicLink())throw new Error("learned Skill root is not a regular directory");for(let[a,c]of r.entries()){i=Ae(i,c);let d=await Mc(i),u=a===r.length-1;if(d.isSymbolicLink()||(u?!d.isFile():!d.isDirectory()))throw new Error("learned Skill artifact contains a symlink or non-regular path")}}function vh(e,t){let n=Re(t),r=Re(e);if(r!==n&&!r.startsWith(n.endsWith(Ro)?n:`${n}${Ro}`))throw new Error("learned Skill artifact escapes its Learned Area")}function Re(e){let t=Ln(e);return process.platform==="win32"?t.toLowerCase():t}function bh(e){return ih("sha256").update(e,"utf8").digest("hex")}async function Sh(e,t,n){let r=[],i=new Set;async function s(a){try{let c=Re(await ch(a));if(i.has(c))return;i.add(c);let d=await ah(a,{withFileTypes:!0});if(d.some(u=>u.name==="SKILL.md")){let u=await Et(a,t);u?r.push(u):n.push({path:Ae(a,"SKILL.md"),error:"Skill metadata could not be loaded."});return}d.sort((u,f)=>u.name<f.name?-1:u.name>f.name?1:0);for(let u of d){if(u.name.startsWith(".")||u.name==="node_modules")continue;let f=Ae(a,u.name);try{(u.isDirectory()||u.isSymbolicLink()&&(await dh(f)).isDirectory())&&await s(f)}catch(p){Oc(n,f,p)}}}catch(c){Oc(n,a,c)}}return o(s,"visit"),await s(e),r}function Oc(e,t,n){typeof n=="object"&&n!==null&&"code"in n&&n.code==="ENOENT"||e.push({path:t,error:n instanceof Error?n.message:String(n)})}function To(e,t){let n=[],r=[".kodax/skills",".agents/skills"],i=e,s=Ao(t);for(;i!==s&&i!=="/"&&i.length>3;){for(let c of r)n.push(Ae(i,c));let a=Ao(i);if(a===i)break;i=a}return n}async function Nc(e,t){let n=To(e,t),r={projectPaths:[Ae(t,".kodax","skills"),...n]};return Ot(t,r)}var Co=l(()=>{"use strict";Dn();no();In();L();o(Ot,"discoverSkills");o(uh,"scanRecordGatedLearnedArea");o(fh,"scanRecordGatedLearnedRoot");o(ph,"learnedAreaBindings");o(mh,"scopeMatches");o(hh,"expectedLearnedScopes");o(gh,"isRecordAdmitted");o(wh,"quarantineInvalidLearnedArtifact");o(yh,"assertRegularArtifactChain");o(vh,"assertInside");o(Re,"comparablePath");o(bh,"sha256");o(Sh,"scanSkillDirectory");o(Oc,"recordDiscoveryError");o(To,"getNestedSkillPaths");o(Nc,"discoverSkillsWithMonorepo")});import{execSync as kh}from"child_process";import xh from"path";function $c(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\s+/g," ").toLowerCase();for(let n of Eh)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}function _h(e){if(!e||!e.trim())return!1;let t=e.trim().replace(/\\\r?\n/g," ");if(/[<>|;`]|\$\(|(?<!&)&(?!&)/.test(t)||t.includes("\\")&&xh.sep!=="\\"&&t.replace(/\\ /g,"").includes("\\"))return!1;let r=t.split(/\s*&&\s*/);if(r.length===1)return $c(r[0]);for(let i of r){let s=i?.trim();if(s&&!/^cd\s+/.test(s.toLowerCase())&&!$c(s))return!1}return!0}function Po(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}function Dc(e){return new Xe(e)}async function ue(e,t,n){return new Xe(n).resolve(e,t)}var Eh,Xe,Nt=l(()=>{"use strict";Eh=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"]);o($c,"isSingleSafeDynamicContextCommand");o(_h,"isSafeDynamicContextCommand");o(Po,"parseArguments");Xe=class{static{o(this,"VariableResolver")}context;constructor(t){this.context=t}async resolve(t,n){let r=t,i=Po(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 u=d instanceof Error?d.message:String(d);s=s.replace(a,`[Error: ${u}]`)}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.assertDynamicContextAllowed?.(t),this.context.executeDynamicContext){let n=await this.context.executeDynamicContext(t,this.context.workingDirectory);return typeof n=="string"?n.trim():""}if(!_h(t))throw new Error("Unsafe dynamic context command blocked. Only simple read-only commands are allowed in !`...` blocks.");try{return kh(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}}};o(Dc,"createResolver");o(ue,"resolveSkillContent")});function Lc(e,t){let n=e.replace(/\s+/gu," ").trim();return n.length<=t?n:`${n.slice(0,t-1).replace(/[\uD800-\uDBFF]$/,"")}\u2026`}function Mo(e){let t=e.filter(c=>!c.disableModelInvocation);if(t.length===0)return"";let n=["## Available Skills","","When users ask you to perform tasks, check if any of the available skills below match the request. Skills provide specialized capabilities and step-by-step instructions for specific workflows.","",'If the current task context already contains an "Active skill invocation" or a host-expanded Skill block for the referenced name, that explicit user invocation is already complete. Follow the expanded instructions and do NOT call the `skill` tool for that Skill again.',"",'When users reference a "slash command" or "/<something>" (e.g. "/feature-list-tracker", "/skill:foo") and the host has not already expanded it, they are referring to a skill. Invoke it via the `skill` tool with the skill name.',"","**BLOCKING REQUIREMENT**: When a model-visible Skill matches the user's request and the host has not already expanded it, you MUST invoke it via the `skill` tool BEFORE generating any other response about the task. Loading the Skill is not optional and not something to defer \u2014 it is the FIRST action you take.","","NEVER mention a model-discovered Skill without actually calling the `skill` tool. This rule does not apply to a host-expanded active user invocation, which must not be called again. Do not guess at Skill names \u2014 only use Skills listed below. Do NOT call `read` on a `SKILL.md` path to load a Skill \u2014 that is the legacy path and bypasses the resolver.",""],r=n.join(`
296
+ `).length+1,i=0,s=0;for(let c of t){let d=Lc(c.description,500),u=c.argumentHint?Lc(c.argumentHint,80):"",f=`- ${c.name}:${u?` ${u}`:""} ${d}`;r+f.length+1>Ih-Ah||(n.push(f),r+=f.length+1,i++,(d!==c.description||u!==(c.argumentHint??""))&&s++)}let a=t.length-i;if(s>0||a>0){let c=`[Skill catalog shortened: ${s} entries shortened; ${a} Skills omitted. Explicit invocation of registered Skills remains available.]`;n.push("",c),I({source:"agent:skills",level:"warn",message:c,detail:{code:"skill_catalog_shortened",total:t.length,included:i,omitted:a,shortened:s}})}return n.push(""),n.join(`
297
+ `)}function Dt(e,t){return Ve&&e!==void 0&&jc!==e&&(Ve=null),Ve||(Ve=new $t(e,t),jc=e),Ve}async function Oo(e,t){let n=Dt(e,t);return await n.discover(),n}function Fc(){Ve=null}var Ih,Ah,$t,Ve,jc,No=l(()=>{"use strict";L();Co();In();Nt();Ih=8e3,Ah=160;o(Lc,"catalogText");o(Mo,"formatSkillsSystemPrompt");$t=class{static{o(this,"SkillRegistry")}skillsByName=new Map;fullSkillsByName=new Map;incompleteDiscovery=!1;get discoveryIncomplete(){return this.incompleteDiscovery}projectRoot;customPaths;constructor(t,n){this.projectRoot=t,this.customPaths=n}async discover(){let t=await Ot(this.projectRoot,this.customPaths);this.incompleteDiscovery=t.errors.length>0,this.fullSkillsByName.clear(),this.skillsByName.clear();for(let[n,r]of t.skills)this.skillsByName.set(n,r);if(t.errors.length>0)for(let{path:n,error:r}of t.errors)I({source:"agent:skills",level:"warn",message:`Error scanning ${n}.`,detail:r})}get skills(){return this.skillsByName}get(t){return this.skillsByName.get(t)}async loadFull(t){let n=this.fullSkillsByName.get(t);if(n)return n;let r=this.skillsByName.get(t);if(!r)throw new Error(`Skill not found: ${t}`);let i=await _n(r.path,r.source);if(this.skillsByName.get(t)!==r)return this.loadFull(t);if(!i)throw new Error(`Failed to load skill: ${t}`);return this.fullSkillsByName.set(t,i),i}async invoke(t,n,r){try{let i=await this.loadFull(t);return{success:!0,content:await ue(i.content,n,r)}}catch(i){return{success:!1,content:"",error:i instanceof Error?i.message:String(i)}}}async reload(){this.skillsByName.clear(),this.fullSkillsByName.clear(),await this.discover()}list(){return Array.from(this.skillsByName.values())}listUserInvocable(){return this.list()}getSystemPromptSnippet(){return Mo(this.list())}has(t){return this.skillsByName.has(t)}get size(){return this.skillsByName.size}},Ve=null;o(Dt,"getSkillRegistry");o(Oo,"initializeSkillRegistry");o(Fc,"resetSkillRegistry")});function Wc(e){return new Je(e)}async function Uc(e,t,n,r){return new Je(n).execute(e,t,r)}var Je,Bc=l(()=>{"use strict";No();Nt();Je=class{static{o(this,"SkillExecutor")}context;constructor(t){this.context=t}async execute(t,n,r){let i=Dt();if(!i.has(t))return{success:!1,content:"",error:`Skill not found: ${t}`};try{let s=await i.loadFull(t),a=r?.mode??(s.context==="fork"?"fork":"inline"),c=await ue(s.content,n,this.context);return a==="fork"?this.executeFork(s,c,r):this.executeInline(s,c,r)}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}}async executeInline(t,n,r){let i=this.buildPrompt(t,n);if(r?.onExecute)try{return{success:!0,content:await r.onExecute(i,t)}}catch(s){return{success:!1,content:"",error:s instanceof Error?s.message:String(s)}}return{success:!0,content:i}}async executeFork(t,n,r){return{success:!0,content:this.buildPrompt(t,n),artifacts:[{type:"text",name:"fork-config",content:JSON.stringify({agent:r?.agent??t.agent??"general-purpose",model:r?.model??t.model??"haiku",allowedTools:r?.allowedTools??this.parseAllowedTools(t.allowedTools)})}]}}buildPrompt(t,n){let r=[];return r.push(`[Using Skill: ${t.name}]`),r.push(""),t.allowedTools&&(r.push(`**Allowed Tools**: ${t.allowedTools}`),r.push("")),r.push(n),r.join(`
298
+ `)}parseAllowedTools(t){return t?t.split(",").map(n=>n.trim()).filter(Boolean):[]}};o(Wc,"createExecutor");o(Uc,"executeSkill")});function Kc(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function jn(e){return e.replace(/\\/g,"/")}function Rh(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}))]}function Th(e){let t=Rh(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}/: ${jn(`${e.path}/${i}`)} (${s.length} files)`);r.push("","Support file inventory:");for(let{folder:i,file:s}of t.slice(0,$o))r.push(`- ${i}/${s.relativePath}: ${jn(s.path)}`);return t.length>$o&&r.push(`- ... ${t.length-$o} more files under ${jn(e.path)}`),r}function Ch(e,t,n){let r=[];r.push(`<skill name="${Kc(e.name)}" location="${Kc(e.path)}">`),r.push(""),r.push(`Skill root: ${jn(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=Th(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(`
299
+ `)}async function qc(e,t,n){let r=await ue(e.content,t,n);return{content:Ch(e,r,t),disableModelInvocation:e.disableModelInvocation??!1,skill:e}}function Hc(e,t){let n=`Skill activated: ${e}`;return t.trim()&&(n+=` with arguments: ${t}`),n}var $o,zc=l(()=>{"use strict";Nt();o(Kc,"escapeXml");$o=120;o(jn,"formatDisplayPath");o(Rh,"collectSupportFiles");o(Th,"buildSupportFileContext");o(Ch,"buildSkillBlock");o(qc,"expandSkillForLLM");o(Hc,"formatSkillActivationMessage")});import{existsSync as Xc}from"node:fs";import{mkdir as Ph,readFile as Do,readdir as Mh,stat as Vc,writeFile as gj}from"node:fs/promises";import Oh from"node:os";import z from"node:path";import{fileURLToPath as Lo,pathToFileURL as Jc}from"node:url";import Nh from"yaml";async function jo(){let e=z.dirname(Lo(import.meta.url)),t=z.resolve(e,"../../../sdk-skills.js");return Xc(t)?import(Jc(t).href):Promise.resolve().then(()=>(Bn(),Zc))}function Yc(e){Te=e}async function fe(){if(Te)return Te;let e=z.dirname(Lo(import.meta.url)),t=[],n=z.resolve(e,"../../../index.js");if(Xc(n))return Te=await import(Jc(n).href),Te;t.push(`relative SDK path not found: ${n}`);try{return Te=await import(["@kodax-ai","kodax"].join("/")),Te}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}.
272
300
  Attempted:
273
301
  - ${t.join(`
274
- - `)}`)}function jh(e){let t=e.replace(/^\uFEFF/,"").replace(/\r\n/g,`
302
+ - `)}`)}function $h(e){let t=e.replace(/^\uFEFF/,"").replace(/\r\n/g,`
275
303
  `).replace(/\r/g,`
276
304
  `).trimStart();if(!t.startsWith(`---
277
305
  `))throw new Error("SKILL.md missing YAML frontmatter");let n=t.indexOf(`
278
306
  ---
279
- `,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()}}function Wn(e){let{yamlText:t,body:n}=jh(e),r=Lh.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("Frontmatter must be a YAML object");return{frontmatter:r,body:n}}async function Lt(e){let t=H.join(e,"SKILL.md");if(!(await Vc(t).catch(()=>null))?.isFile())throw new Error(`SKILL.md not found in ${e}`);let r=await $o(t,"utf8"),{frontmatter:i,body:s}=Wn(r);return{skillDir:H.resolve(e),skillMdPath:t,rawContent:r,body:s,frontmatter:i}}async function jt(e){try{return await Vc(e),!0}catch{return!1}}function Un(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:Dt(t),stddev:Dt(Math.sqrt(n)),min:Dt(Math.min(...e)),max:Dt(Math.max(...e))}}function Dt(e,t=4){return Number(e.toFixed(t))}function Bn(e){return e>=0?`+${e.toFixed(4)}`:e.toFixed(4)}function Gc(e){try{return JSON.parse(e)}catch{return null}}function Ye(e){let t=Gc(e.trim());if(t&&typeof t=="object")return t;let n=e.indexOf("{"),r=e.lastIndexOf("}");return n===-1||r===-1||r<=n?null:Gc(e.slice(n,r+1))}async function Y(e,t=null){try{return JSON.parse(await $o(e,"utf8"))}catch{return t}}async function Qe(e,t){let n=H.dirname(Do(e));return $o(H.resolve(n,t),"utf8")}function j(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)}
307
+ `,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()}}function Fn(e){let{yamlText:t,body:n}=$h(e),r=Nh.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("Frontmatter must be a YAML object");return{frontmatter:r,body:n}}async function jt(e){let t=z.join(e,"SKILL.md");if(!(await Vc(t).catch(()=>null))?.isFile())throw new Error(`SKILL.md not found in ${e}`);let r=await Do(t,"utf8"),{frontmatter:i,body:s}=Fn(r);return{skillDir:z.resolve(e),skillMdPath:t,rawContent:r,body:s,frontmatter:i}}async function Ft(e){try{return await Vc(e),!0}catch{return!1}}function Wn(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:Lt(t),stddev:Lt(Math.sqrt(n)),min:Lt(Math.min(...e)),max:Lt(Math.max(...e))}}function Lt(e,t=4){return Number(e.toFixed(t))}function Un(e){return e>=0?`+${e.toFixed(4)}`:e.toFixed(4)}function Gc(e){try{return JSON.parse(e)}catch{return null}}function Ye(e){let t=Gc(e.trim());if(t&&typeof t=="object")return t;let n=e.indexOf("{"),r=e.lastIndexOf("}");return n===-1||r===-1||r<=n?null:Gc(e.slice(n,r+1))}async function Y(e,t=null){try{return JSON.parse(await Do(e,"utf8"))}catch{return t}}async function Qe(e,t){let n=z.dirname(Lo(e));return Do(z.resolve(n,t),"utf8")}function j(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)}
280
308
 
281
- [truncated ${r} chars]`}function Qc(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?Dt(n/t):0}}async function jo(e,t=e,n=[]){let r=await $h(t,{withFileTypes:!0}).catch(()=>[]);for(let i of r.sort((s,a)=>s.name.localeCompare(a.name))){let s=H.join(t,i.name);if(i.isDirectory()){await jo(e,s,n);continue}i.isFile()&&n.push({absolutePath:s,relativePath:H.relative(e,s).replace(/\\/g,"/")})}return n}function Ft(){return H.join(Dh.homedir(),".kodax","skills")}async function F(e){return await Nh(e,{recursive:!0}),e}var Te,z=l(()=>{"use strict";Te=null;o(Lo,"loadKodaXSkills");o(Yc,"setKodaXSDKForSkillCreator");o(fe,"loadKodaXSDK");o(jh,"extractFrontmatter");o(Wn,"parseSkillMarkdown");o(Lt,"loadSkill");o(jt,"pathExists");o(Un,"calculateStats");o(Dt,"roundNumber");o(Bn,"formatDelta");o(Gc,"safeJsonParse");o(Ye,"extractJsonObject");o(Y,"readJsonFile");o(Qe,"loadRelativeText");o(j,"truncateText");o(Qc,"computePassSummary");o(jo,"collectFiles");o(Ft,"getDefaultSkillsDir");o(F,"ensureDirectory")});import{writeFile as ed}from"node:fs/promises";import pe from"node:path";function Fh(e){return e.split("-").filter(Boolean).map(t=>t[0]?.toUpperCase()+t.slice(1)).join(" ")}function Wh(e,t){let n=Fh(e);return`---
309
+ [truncated ${r} chars]`}function Qc(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?Lt(n/t):0}}async function Fo(e,t=e,n=[]){let r=await Mh(t,{withFileTypes:!0}).catch(()=>[]);for(let i of r.sort((s,a)=>s.name.localeCompare(a.name))){let s=z.join(t,i.name);if(i.isDirectory()){await Fo(e,s,n);continue}i.isFile()&&n.push({absolutePath:s,relativePath:z.relative(e,s).replace(/\\/g,"/")})}return n}function Wt(){return z.join(Oh.homedir(),".kodax","skills")}async function F(e){return await Ph(e,{recursive:!0}),e}var Te,G=l(()=>{"use strict";Te=null;o(jo,"loadKodaXSkills");o(Yc,"setKodaXSDKForSkillCreator");o(fe,"loadKodaXSDK");o($h,"extractFrontmatter");o(Fn,"parseSkillMarkdown");o(jt,"loadSkill");o(Ft,"pathExists");o(Wn,"calculateStats");o(Lt,"roundNumber");o(Un,"formatDelta");o(Gc,"safeJsonParse");o(Ye,"extractJsonObject");o(Y,"readJsonFile");o(Qe,"loadRelativeText");o(j,"truncateText");o(Qc,"computePassSummary");o(Fo,"collectFiles");o(Wt,"getDefaultSkillsDir");o(F,"ensureDirectory")});import{writeFile as ed}from"node:fs/promises";import pe from"node:path";function Dh(e){return e.split("-").filter(Boolean).map(t=>t[0]?.toUpperCase()+t.slice(1)).join(" ")}function Lh(e,t){let n=Dh(e);return`---
282
310
  name: ${e}
283
311
  description: ${t}
284
312
  user-invocable: true
@@ -308,10 +336,10 @@ Describe the task this skill handles, the trigger boundary, and the expected out
308
336
  - Put deeper guidance in \`references/\`.
309
337
  - Put reusable templates or static files in \`assets/\`.
310
338
  - Put repeatable helper scripts in \`scripts/\`.
311
- `}function Uh(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)}async function Bh(e){let t=pe.resolve(e.baseDir??Ft()),n=pe.join(t,e.name),r=e.description??`Describe what ${e.name} does and when it should be used.`;if(await jt(n)&&!e.force)throw new Error(`Skill directory already exists: ${n}`);return await F(n),await F(pe.join(n,"references")),await F(pe.join(n,"assets")),await F(pe.join(n,"scripts")),await ed(pe.join(n,"SKILL.md"),Wh(e.name,r),"utf8"),e.includeEvals!==!1&&(await F(pe.join(n,"evals")),await ed(pe.join(n,"evals","evals.json"),`${Uh(e.name)}
312
- `,"utf8")),{skillDir:n,created:["SKILL.md",...e.includeEvals!==!1?["evals/evals.json"]:[],"references/","assets/","scripts/"]}}function Kh(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}async function Fo(e=process.argv){let t=Kh(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 Bh(t);console.log(`Initialized ${n.skillDir}`)}var qh,td=l(()=>{"use strict";z();o(Fh,"titleFromSlug");o(Wh,"renderSkillTemplate");o(Uh,"renderEvalTemplate");o(Bh,"initSkill");o(Kh,"parseArgs");o(Fo,"main");qh=!1;qh&&Fo().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import nd from"node:path";async function Wt(e){let t={valid:!1,errors:[],warnings:[],frontmatter:null},n;try{n=await Lt(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=>!Hh.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=nd.basename(nd.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(f=>typeof f=="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}async function Wo(e=process.argv){let t=e[2];t||(console.error("Usage: node scripts/quick-validate.js <skill-directory>"),process.exit(1));let n=await Wt(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)}var Hh,zh,qn=l(()=>{"use strict";z();Hh=new Set(["name","description","license","compatibility","metadata","allowed-tools","disable-model-invocation","user-invocable","argument-hint","context","agent","model","hooks"]);o(Wt,"validateSkillDirectory");o(Wo,"main");zh=!1;zh&&Wo().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readFile as Uo,writeFile as ne}from"node:fs/promises";import E from"node:path";function Gh(e){return typeof e=="string"?{text:e}:e&&typeof e=="object"&&typeof e.text=="string"?{text:e.text}:null}function Xh(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_use").length:t,0)}function Vh(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)}function Jh(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(`
339
+ `}function jh(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)}async function Fh(e){let t=pe.resolve(e.baseDir??Wt()),n=pe.join(t,e.name),r=e.description??`Describe what ${e.name} does and when it should be used.`;if(await Ft(n)&&!e.force)throw new Error(`Skill directory already exists: ${n}`);return await F(n),await F(pe.join(n,"references")),await F(pe.join(n,"assets")),await F(pe.join(n,"scripts")),await ed(pe.join(n,"SKILL.md"),Lh(e.name,r),"utf8"),e.includeEvals!==!1&&(await F(pe.join(n,"evals")),await ed(pe.join(n,"evals","evals.json"),`${jh(e.name)}
340
+ `,"utf8")),{skillDir:n,created:["SKILL.md",...e.includeEvals!==!1?["evals/evals.json"]:[],"references/","assets/","scripts/"]}}function Wh(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}async function Wo(e=process.argv){let t=Wh(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 Fh(t);console.log(`Initialized ${n.skillDir}`)}var Uh,td=l(()=>{"use strict";G();o(Dh,"titleFromSlug");o(Lh,"renderSkillTemplate");o(jh,"renderEvalTemplate");o(Fh,"initSkill");o(Wh,"parseArgs");o(Wo,"main");Uh=!1;Uh&&Wo().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import nd from"node:path";async function Ut(e){let t={valid:!1,errors:[],warnings:[],frontmatter:null},n;try{n=await jt(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=>!Bh.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=nd.basename(nd.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(f=>typeof f=="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}async function Uo(e=process.argv){let t=e[2];t||(console.error("Usage: node scripts/quick-validate.js <skill-directory>"),process.exit(1));let n=await Ut(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)}var Bh,Kh,Kn=l(()=>{"use strict";G();Bh=new Set(["name","description","license","compatibility","metadata","allowed-tools","disable-model-invocation","user-invocable","argument-hint","context","agent","model","hooks"]);o(Ut,"validateSkillDirectory");o(Uo,"main");Kh=!1;Kh&&Uo().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readFile as Bo,writeFile as ne}from"node:fs/promises";import E from"node:path";function qh(e){return typeof e=="string"?{text:e}:e&&typeof e=="object"&&typeof e.text=="string"?{text:e.text}:null}function Hh(e){return e.reduce((t,n)=>Array.isArray(n.content)?t+n.content.filter(r=>r?.type==="tool_use").length:t,0)}function zh(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)}function Gh(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(`
313
341
  `)}
314
- `}async function Yh(e,t){let n=E.dirname(E.resolve(t.evalsPath)),r=E.resolve(t.cwd??process.cwd()),i=[];for(let s of e??[]){let a=E.isAbsolute(s)?s:E.resolve(n,s),c=E.resolve(r,s),d=null,u=a;try{d=await Uo(a,"utf8")}catch{d=await Uo(c,"utf8").catch(()=>null),u=c}if(d==null)throw new Error(`Input file not found for eval: ${s}`);i.push(`### ${s}
342
+ `}async function Xh(e,t){let n=E.dirname(E.resolve(t.evalsPath)),r=E.resolve(t.cwd??process.cwd()),i=[];for(let s of e??[]){let a=E.isAbsolute(s)?s:E.resolve(n,s),c=E.resolve(r,s),d=null,u=a;try{d=await Bo(a,"utf8")}catch{d=await Bo(c,"utf8").catch(()=>null),u=c}if(d==null)throw new Error(`Input file not found for eval: ${s}`);i.push(`### ${s}
315
343
  \`\`\`
316
344
  ${d}
317
345
  \`\`\`
@@ -321,15 +349,15 @@ ${i.join(`
321
349
 
322
350
  `)}
323
351
 
324
- `}async function Qh(e,t){let n=String(e.prompt??e.query??"").trim();return`${await Yh(e.files,t)}${n}`.trim()}async function Zh(e,t){let{runKodaX:n,estimateTokens:r}=await fe(),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:E.resolve(t.cwd??process.cwd())}},e);return{result:s,totalTokens:r(s.messages),durationMs:Date.now()-i}}async function eg(e,t,n,r){if(e==="with_skill"){let{expandSkillForLLM:i}=await Lo();return(await i(t,n,{workingDirectory:E.resolve(r.cwd??process.cwd()),projectRoot:E.resolve(r.cwd??process.cwd()),sessionId:"skill-eval",environment:{}})).content}return n}async function tg(e,t,n,r,i){let s=E.join(e,"outputs");await F(s);let a={total_tool_calls:Xh(i.result.messages),errors_encountered:Vh(i.result.messages),output_chars:i.result.lastText.length};await ne(E.join(s,"result.md"),`${i.result.lastText}
352
+ `}async function Vh(e,t){let n=String(e.prompt??e.query??"").trim();return`${await Xh(e.files,t)}${n}`.trim()}async function Jh(e,t){let{runKodaX:n,estimateTokens:r}=await fe(),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:E.resolve(t.cwd??process.cwd())}},e);return{result:s,totalTokens:r(s.messages),durationMs:Date.now()-i}}async function Yh(e,t,n,r){if(e==="with_skill"){let{expandSkillForLLM:i}=await jo();return(await i(t,n,{workingDirectory:E.resolve(r.cwd??process.cwd()),projectRoot:E.resolve(r.cwd??process.cwd()),sessionId:"skill-eval",environment:{}})).content}return n}async function Qh(e,t,n,r,i){let s=E.join(e,"outputs");await F(s);let a={total_tool_calls:Hh(i.result.messages),errors_encountered:zh(i.result.messages),output_chars:i.result.lastText.length};await ne(E.join(s,"result.md"),`${i.result.lastText}
325
353
  `,"utf8"),await ne(E.join(s,"prompt.txt"),`${r}
326
- `,"utf8"),await ne(E.join(e,"transcript.md"),Jh(r,i.result),"utf8"),await ne(E.join(s,"metrics.json"),`${JSON.stringify({config:t,eval_id:n.id??null,session_id:i.result.sessionId,...a},null,2)}
354
+ `,"utf8"),await ne(E.join(e,"transcript.md"),Gh(r,i.result),"utf8"),await ne(E.join(s,"metrics.json"),`${JSON.stringify({config:t,eval_id:n.id??null,session_id:i.result.sessionId,...a},null,2)}
327
355
  `,"utf8"),await ne(E.join(s,"messages.json"),`${JSON.stringify(i.result.messages,null,2)}
328
356
  `,"utf8"),await ne(E.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)}
329
357
  `,"utf8"),await ne(E.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)}
330
- `,"utf8")}async function ng(e,t=Zh){let{loadFullSkill:n}=await Lo(),r=await n(E.resolve(e.skillPath),"user");if(!r)throw new Error(`Failed to load skill from ${e.skillPath}`);let i=E.resolve(e.workspaceDir);await F(i);let s=JSON.parse(await Uo(e.evalsPath,"utf8")),a=Array.isArray(s.evals)?s.evals:[],c=e.configs?.length?e.configs:["with_skill","without_skill"],d=Number.isFinite(e.runsPerConfig)&&e.runsPerConfig>0?Math.floor(e.runsPerConfig):1,u=[];for(let f=0;f<a.length;f+=1){let p=a[f],h=E.join(i,`eval-${f}`);await F(h),await ne(E.join(h,"eval_metadata.json"),`${JSON.stringify({eval_id:p.id??f,eval_name:p.name??`eval-${f}`,prompt:p.prompt??p.query??"",expected_output:p.expected_output??"",assertions:(Array.isArray(p.assertions)?p.assertions:[]).map(Gh).filter(Boolean)},null,2)}
331
- `,"utf8");let m=await Qh(p,e),k={};for(let v of c){let y=E.join(h,v);await F(y),k[v]=[];for(let g=1;g<=d;g+=1){let w=E.join(y,`run-${g}`);await F(w);let b=await eg(v,r,m,e),R=await t(b,{...e,configName:v,evalItem:p,runIndex:g});await tg(w,v,p,b,R),k[v].push({run_id:`run-${g}`,session_id:R.result.sessionId,success:R.result.success,total_tokens:R.totalTokens,duration_ms:R.durationMs,output_chars:R.result.lastText.length})}}u.push({eval_id:p.id??f,prompt:p.prompt??p.query??"",configs:k})}return{workspace:i,skill_name:r.name,eval_count:a.length,configs:c,runs_per_config:d,reports:u}}function rg(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}async function Bo(e=process.argv){let t=rg(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 ng(t),r=`${JSON.stringify(n,null,2)}
332
- `;t.output?(await ne(t.output,r,"utf8"),console.log(`Wrote ${E.resolve(t.output)}`)):process.stdout.write(r)}var og,rd=l(()=>{"use strict";z();o(Gh,"normalizeAssertion");o(Xh,"countToolCalls");o(Vh,"countToolErrors");o(Jh,"renderTranscript");o(Yh,"readInputFiles");o(Qh,"buildEvalPrompt");o(Zh,"defaultRunAgent");o(eg,"prepareConfigPrompt");o(tg,"writeRunArtifacts");o(ng,"runEvalWorkspace");o(rg,"parseArgs");o(Bo,"main");og=!1;og&&Bo().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readdir as ig,readFile as Ko,writeFile as id}from"node:fs/promises";import _ from"node:path";function Ce(e){return String(e??"").trim()}function sd(e){let n=(Array.isArray(e?.assertions)?e.assertions:[]).map(i=>typeof i=="string"?Ce(i):i&&typeof i=="object"&&typeof i.text=="string"?Ce(i.text):"").filter(Boolean);if(n.length>0)return n;let r=Ce(e?.expected_output);return r?[r]:[]}function qo(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function od(e,t){return{text:Ce(e?.text??t),passed:e?.passed===!0,evidence:Ce(e?.evidence)}}function sg(e,t){let n=Ye(e)??{},r=Array.isArray(n.expectations)?n.expectations:[],i=[],s=new Set;for(let a of t){let c=r.findIndex((d,u)=>s.has(u)?!1:Ce(d?.text).toLowerCase()===a.toLowerCase());if(c===-1){i.push({text:a,passed:!1,evidence:""});continue}s.add(c),i.push(od(r[c],a))}if(t.length===0)for(let a of r){let c=od(a,"");c.text&&i.push(c)}return{overall_summary:Ce(n.overall_summary),expectations:i,user_notes_summary:{uncertainties:qo(n.user_notes_summary?.uncertainties),needs_review:qo(n.user_notes_summary?.needs_review),workarounds:qo(n.user_notes_summary?.workarounds)}}}async function Ho(e){return(await ig(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>_.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}async function ag(e){let t=_.dirname(e),n=_.dirname(t),r=_.basename(t),i=_.basename(e),s=_.join(e,"outputs"),a=await Y(_.join(n,"eval_metadata.json"),{}),c=await Ko(_.join(s,"result.md"),"utf8").catch(()=>""),d=await Ko(_.join(s,"prompt.txt"),"utf8").catch(()=>""),u=await Ko(_.join(e,"transcript.md"),"utf8").catch(()=>""),f=await Y(_.join(s,"metrics.json"),{}),p=await Y(_.join(e,"result.json"),{}),h=await Y(_.join(e,"timing.json"),{});return{evalDir:n,runDir:e,runId:i,configName:r,evalMetadata:a,outputsDir:s,resultText:c,promptText:d,transcript:u,metrics:f,result:p,timing:h}}function cg(e){let t=sd(e.evalMetadata),n=t.length>0?t.map((r,i)=>`${i+1}. ${r}`).join(`
358
+ `,"utf8")}async function Zh(e,t=Jh){let{loadFullSkill:n}=await jo(),r=await n(E.resolve(e.skillPath),"user");if(!r)throw new Error(`Failed to load skill from ${e.skillPath}`);let i=E.resolve(e.workspaceDir);await F(i);let s=JSON.parse(await Bo(e.evalsPath,"utf8")),a=Array.isArray(s.evals)?s.evals:[],c=e.configs?.length?e.configs:["with_skill","without_skill"],d=Number.isFinite(e.runsPerConfig)&&e.runsPerConfig>0?Math.floor(e.runsPerConfig):1,u=[];for(let f=0;f<a.length;f+=1){let p=a[f],h=E.join(i,`eval-${f}`);await F(h),await ne(E.join(h,"eval_metadata.json"),`${JSON.stringify({eval_id:p.id??f,eval_name:p.name??`eval-${f}`,prompt:p.prompt??p.query??"",expected_output:p.expected_output??"",assertions:(Array.isArray(p.assertions)?p.assertions:[]).map(qh).filter(Boolean)},null,2)}
359
+ `,"utf8");let m=await Vh(p,e),k={};for(let b of c){let y=E.join(h,b);await F(y),k[b]=[];for(let g=1;g<=d;g+=1){let w=E.join(y,`run-${g}`);await F(w);let v=await Yh(b,r,m,e),R=await t(v,{...e,configName:b,evalItem:p,runIndex:g});await Qh(w,b,p,v,R),k[b].push({run_id:`run-${g}`,session_id:R.result.sessionId,success:R.result.success,total_tokens:R.totalTokens,duration_ms:R.durationMs,output_chars:R.result.lastText.length})}}u.push({eval_id:p.id??f,prompt:p.prompt??p.query??"",configs:k})}return{workspace:i,skill_name:r.name,eval_count:a.length,configs:c,runs_per_config:d,reports:u}}function eg(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}async function Ko(e=process.argv){let t=eg(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 Zh(t),r=`${JSON.stringify(n,null,2)}
360
+ `;t.output?(await ne(t.output,r,"utf8"),console.log(`Wrote ${E.resolve(t.output)}`)):process.stdout.write(r)}var tg,rd=l(()=>{"use strict";G();o(qh,"normalizeAssertion");o(Hh,"countToolCalls");o(zh,"countToolErrors");o(Gh,"renderTranscript");o(Xh,"readInputFiles");o(Vh,"buildEvalPrompt");o(Jh,"defaultRunAgent");o(Yh,"prepareConfigPrompt");o(Qh,"writeRunArtifacts");o(Zh,"runEvalWorkspace");o(eg,"parseArgs");o(Ko,"main");tg=!1;tg&&Ko().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readdir as ng,readFile as qo,writeFile as id}from"node:fs/promises";import _ from"node:path";function Ce(e){return String(e??"").trim()}function sd(e){let n=(Array.isArray(e?.assertions)?e.assertions:[]).map(i=>typeof i=="string"?Ce(i):i&&typeof i=="object"&&typeof i.text=="string"?Ce(i.text):"").filter(Boolean);if(n.length>0)return n;let r=Ce(e?.expected_output);return r?[r]:[]}function Ho(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function od(e,t){return{text:Ce(e?.text??t),passed:e?.passed===!0,evidence:Ce(e?.evidence)}}function rg(e,t){let n=Ye(e)??{},r=Array.isArray(n.expectations)?n.expectations:[],i=[],s=new Set;for(let a of t){let c=r.findIndex((d,u)=>s.has(u)?!1:Ce(d?.text).toLowerCase()===a.toLowerCase());if(c===-1){i.push({text:a,passed:!1,evidence:""});continue}s.add(c),i.push(od(r[c],a))}if(t.length===0)for(let a of r){let c=od(a,"");c.text&&i.push(c)}return{overall_summary:Ce(n.overall_summary),expectations:i,user_notes_summary:{uncertainties:Ho(n.user_notes_summary?.uncertainties),needs_review:Ho(n.user_notes_summary?.needs_review),workarounds:Ho(n.user_notes_summary?.workarounds)}}}async function zo(e){return(await ng(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>_.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}async function og(e){let t=_.dirname(e),n=_.dirname(t),r=_.basename(t),i=_.basename(e),s=_.join(e,"outputs"),a=await Y(_.join(n,"eval_metadata.json"),{}),c=await qo(_.join(s,"result.md"),"utf8").catch(()=>""),d=await qo(_.join(s,"prompt.txt"),"utf8").catch(()=>""),u=await qo(_.join(e,"transcript.md"),"utf8").catch(()=>""),f=await Y(_.join(s,"metrics.json"),{}),p=await Y(_.join(e,"result.json"),{}),h=await Y(_.join(e,"timing.json"),{});return{evalDir:n,runDir:e,runId:i,configName:r,evalMetadata:a,outputsDir:s,resultText:c,promptText:d,transcript:u,metrics:f,result:p,timing:h}}function ig(e){let t=sd(e.evalMetadata),n=t.length>0?t.map((r,i)=>`${i+1}. ${r}`).join(`
333
361
  `):"(No explicit assertions; infer one expectation from expected_output if present.)";return`${e.agentInstructions.trim()}
334
362
 
335
363
  Return JSON with this shape:
@@ -375,12 +403,12 @@ ${JSON.stringify({total_tool_calls:e.metrics.total_tool_calls??e.result.executio
375
403
 
376
404
  ## Transcript Excerpt
377
405
  ${j(e.transcript,5e3)}
378
- `}async function ad(e,t){let{runKodaX:n}=await fe();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,effort:t.effort??(t.reasoningMode?void 0:"medium"),reasoningMode:t.reasoningMode,context:{gitRoot:_.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}async function dg(e,t,n=ad){let r=await ag(_.resolve(e)),i=sd(r.evalMetadata),s=await Qe(import.meta.url,"../agents/grader.md"),a=cg({...r,agentInstructions:s}),c=await n(a,{...t,runDir:r.runDir,configName:r.configName,evalMetadata:r.evalMetadata,runId:r.runId}),d=sg(c,i),u={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},f={summary:Qc(d.expectations),expectations:d.expectations,execution_metrics:u,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 id(_.join(r.runDir,"grading.json"),`${JSON.stringify(f,null,2)}
379
- `,"utf8"),{runDir:r.runDir,grading:f,prompt:a,rawResponse:c}}async function lg(e,t=ad){let n=_.resolve(e.workspaceDir);await F(n);let r=new Set((e.configs??[]).map(c=>String(c).trim()).filter(Boolean)),i=[],s=[];for(let c of await Ho(n))if(_.basename(c).startsWith("eval-"))for(let d of await Ho(c)){let u=_.basename(d);if(!(r.size>0&&!r.has(u)))for(let f of await Ho(d)){if(!_.basename(f).startsWith("run-"))continue;let p=_.join(f,"grading.json");if(await Y(p,null)&&e.overwrite!==!0){s.push(_.relative(n,f).replace(/\\/g,"/"));continue}let m=await dg(f,e,t);i.push({run:_.relative(n,f).replace(/\\/g,"/"),summary:m.grading.summary,config:m.grading.meta.config,eval_id:m.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 id(_.join(n,"grading-summary.json"),`${JSON.stringify(a,null,2)}
380
- `,"utf8"),a}function ug(e){let t={workspaceDir:e[2]??"",provider:"anthropic",model:void 0,effort:void 0,reasoningMode:void 0,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==="--effort"&&e[n+1]?t.effort=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}async function zo(e=process.argv){let t=ug(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 lg(t);process.stdout.write(`${JSON.stringify(n,null,2)}
381
- `)}var fg,cd=l(()=>{"use strict";z();o(Ce,"normalizeExpectationText");o(sd,"normalizeExpectedRubric");o(qo,"normalizeStringArray");o(od,"normalizeExpectationEntry");o(sg,"normalizeParsedGrading");o(Ho,"listDirectories");o(ag,"loadRunContext");o(cg,"buildGradingPrompt");o(ad,"defaultRunJudge");o(dg,"gradeRun");o(lg,"gradeWorkspace");o(ug,"parseArgs");o(zo,"main");fg=!1;fg&&zo().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readFile as pg,readdir as mg,stat as hg,writeFile as dd}from"node:fs/promises";import W from"node:path";async function Go(e){return JSON.parse(await pg(e,"utf8"))}async function gg(e){try{return await hg(e),!0}catch{return!1}}async function Xo(e){return(await mg(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>W.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}async function Hn(e){let t=await gg(W.join(e,"runs"))?W.join(e,"runs"):e,n=(await Xo(t)).filter(i=>W.basename(i).startsWith("eval-")),r={};for(let i of n){let s=W.join(i,"eval_metadata.json"),c=(await Go(s).catch(()=>({}))).eval_id??W.basename(i);for(let d of await Xo(i)){let u=W.basename(d),f=(await Xo(d)).filter(p=>W.basename(p).startsWith("run-"));if(f.length!==0){r[u]??=[];for(let p of f){let h=await Go(W.join(p,"grading.json")).catch(()=>null);if(!h)continue;let m=await Go(W.join(p,"timing.json")).catch(()=>({}));r[u].push({eval_id:c,run_id:W.basename(p),pass_rate:h.summary?.pass_rate??0,passed:h.summary?.passed??0,failed:h.summary?.failed??0,total:h.summary?.total??0,time_seconds:m.total_duration_seconds??h.timing?.total_duration_seconds??0,tokens:m.total_tokens??h.execution_metrics?.output_chars??0,tool_calls:h.execution_metrics?.total_tool_calls??0,errors:h.execution_metrics?.errors_encountered??0,expectations:Array.isArray(h.expectations)?h.expectations:[],notes:[...h.user_notes_summary?.uncertainties??[],...h.user_notes_summary?.needs_review??[],...h.user_notes_summary?.workarounds??[]]})}}}}return r}function wg(e){let t={};for(let[s,a]of Object.entries(e))t[s]={pass_rate:Un(a.map(c=>Number(c.pass_rate??0))),time_seconds:Un(a.map(c=>Number(c.time_seconds??0))),tokens:Un(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:Bn(r.pass_rate.mean-i.pass_rate.mean),time_seconds:Bn(r.time_seconds.mean-i.time_seconds.mean),tokens:Bn(r.tokens.mean-i.tokens.mean)}}}function Vo(e,t,n){let r=wg(n);return{skill_name:t,generated_at:new Date().toISOString(),workspace:W.resolve(e),configs:r.configs,delta:r.delta,runs:n}}function yg(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(`
382
- `)}function bg(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}async function vg(){let{iterationDir:e,skillName:t}=bg(process.argv);e||(console.error("Usage: node scripts/aggregate-benchmark.js <iteration-dir> --skill-name <name>"),process.exit(1));let n=await Hn(e);Object.keys(n).length===0&&(console.error(`No benchmark runs found in ${e}`),process.exit(1));let r=Vo(e,t,n),i=W.join(e,"benchmark.json"),s=W.join(e,"benchmark.md");await dd(i,JSON.stringify(r,null,2)),await dd(s,`${yg(r)}
383
- `),console.log(`Wrote ${i}`),console.log(`Wrote ${s}`)}var Sg,ld=l(()=>{"use strict";z();o(Go,"readJson");o(gg,"pathExists");o(Xo,"listDirectories");o(Hn,"loadRunResults");o(wg,"summarizeConfigs");o(Vo,"buildBenchmarkDocument");o(yg,"renderBenchmarkMarkdown");o(bg,"parseArgs");o(vg,"main");Sg=!1;Sg&&vg().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{writeFile as Jo}from"node:fs/promises";import re from"node:path";function zn(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function kg(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}function xg(e,t,n){let r=Ye(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:zn(r.key_findings),variance_hotspots:zn(r.variance_hotspots),suggested_actions:zn(r.suggested_actions),watchouts:zn(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}}function Eg(e){return`${e.agentInstructions.trim()}
406
+ `}async function ad(e,t){let{runKodaX:n}=await fe();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,effort:t.effort??(t.reasoningMode?void 0:"medium"),reasoningMode:t.reasoningMode,context:{gitRoot:_.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}async function sg(e,t,n=ad){let r=await og(_.resolve(e)),i=sd(r.evalMetadata),s=await Qe(import.meta.url,"../agents/grader.md"),a=ig({...r,agentInstructions:s}),c=await n(a,{...t,runDir:r.runDir,configName:r.configName,evalMetadata:r.evalMetadata,runId:r.runId}),d=rg(c,i),u={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},f={summary:Qc(d.expectations),expectations:d.expectations,execution_metrics:u,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 id(_.join(r.runDir,"grading.json"),`${JSON.stringify(f,null,2)}
407
+ `,"utf8"),{runDir:r.runDir,grading:f,prompt:a,rawResponse:c}}async function ag(e,t=ad){let n=_.resolve(e.workspaceDir);await F(n);let r=new Set((e.configs??[]).map(c=>String(c).trim()).filter(Boolean)),i=[],s=[];for(let c of await zo(n))if(_.basename(c).startsWith("eval-"))for(let d of await zo(c)){let u=_.basename(d);if(!(r.size>0&&!r.has(u)))for(let f of await zo(d)){if(!_.basename(f).startsWith("run-"))continue;let p=_.join(f,"grading.json");if(await Y(p,null)&&e.overwrite!==!0){s.push(_.relative(n,f).replace(/\\/g,"/"));continue}let m=await sg(f,e,t);i.push({run:_.relative(n,f).replace(/\\/g,"/"),summary:m.grading.summary,config:m.grading.meta.config,eval_id:m.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 id(_.join(n,"grading-summary.json"),`${JSON.stringify(a,null,2)}
408
+ `,"utf8"),a}function cg(e){let t={workspaceDir:e[2]??"",provider:"anthropic",model:void 0,effort:void 0,reasoningMode:void 0,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==="--effort"&&e[n+1]?t.effort=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}async function Go(e=process.argv){let t=cg(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 ag(t);process.stdout.write(`${JSON.stringify(n,null,2)}
409
+ `)}var dg,cd=l(()=>{"use strict";G();o(Ce,"normalizeExpectationText");o(sd,"normalizeExpectedRubric");o(Ho,"normalizeStringArray");o(od,"normalizeExpectationEntry");o(rg,"normalizeParsedGrading");o(zo,"listDirectories");o(og,"loadRunContext");o(ig,"buildGradingPrompt");o(ad,"defaultRunJudge");o(sg,"gradeRun");o(ag,"gradeWorkspace");o(cg,"parseArgs");o(Go,"main");dg=!1;dg&&Go().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readFile as lg,readdir as ug,stat as fg,writeFile as dd}from"node:fs/promises";import W from"node:path";async function Xo(e){return JSON.parse(await lg(e,"utf8"))}async function pg(e){try{return await fg(e),!0}catch{return!1}}async function Vo(e){return(await ug(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>W.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}async function qn(e){let t=await pg(W.join(e,"runs"))?W.join(e,"runs"):e,n=(await Vo(t)).filter(i=>W.basename(i).startsWith("eval-")),r={};for(let i of n){let s=W.join(i,"eval_metadata.json"),c=(await Xo(s).catch(()=>({}))).eval_id??W.basename(i);for(let d of await Vo(i)){let u=W.basename(d),f=(await Vo(d)).filter(p=>W.basename(p).startsWith("run-"));if(f.length!==0){r[u]??=[];for(let p of f){let h=await Xo(W.join(p,"grading.json")).catch(()=>null);if(!h)continue;let m=await Xo(W.join(p,"timing.json")).catch(()=>({}));r[u].push({eval_id:c,run_id:W.basename(p),pass_rate:h.summary?.pass_rate??0,passed:h.summary?.passed??0,failed:h.summary?.failed??0,total:h.summary?.total??0,time_seconds:m.total_duration_seconds??h.timing?.total_duration_seconds??0,tokens:m.total_tokens??h.execution_metrics?.output_chars??0,tool_calls:h.execution_metrics?.total_tool_calls??0,errors:h.execution_metrics?.errors_encountered??0,expectations:Array.isArray(h.expectations)?h.expectations:[],notes:[...h.user_notes_summary?.uncertainties??[],...h.user_notes_summary?.needs_review??[],...h.user_notes_summary?.workarounds??[]]})}}}}return r}function mg(e){let t={};for(let[s,a]of Object.entries(e))t[s]={pass_rate:Wn(a.map(c=>Number(c.pass_rate??0))),time_seconds:Wn(a.map(c=>Number(c.time_seconds??0))),tokens:Wn(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:Un(r.pass_rate.mean-i.pass_rate.mean),time_seconds:Un(r.time_seconds.mean-i.time_seconds.mean),tokens:Un(r.tokens.mean-i.tokens.mean)}}}function Jo(e,t,n){let r=mg(n);return{skill_name:t,generated_at:new Date().toISOString(),workspace:W.resolve(e),configs:r.configs,delta:r.delta,runs:n}}function hg(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(`
410
+ `)}function gg(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}async function wg(){let{iterationDir:e,skillName:t}=gg(process.argv);e||(console.error("Usage: node scripts/aggregate-benchmark.js <iteration-dir> --skill-name <name>"),process.exit(1));let n=await qn(e);Object.keys(n).length===0&&(console.error(`No benchmark runs found in ${e}`),process.exit(1));let r=Jo(e,t,n),i=W.join(e,"benchmark.json"),s=W.join(e,"benchmark.md");await dd(i,JSON.stringify(r,null,2)),await dd(s,`${hg(r)}
411
+ `),console.log(`Wrote ${i}`),console.log(`Wrote ${s}`)}var yg,ld=l(()=>{"use strict";G();o(Xo,"readJson");o(pg,"pathExists");o(Vo,"listDirectories");o(qn,"loadRunResults");o(mg,"summarizeConfigs");o(Jo,"buildBenchmarkDocument");o(hg,"renderBenchmarkMarkdown");o(gg,"parseArgs");o(wg,"main");yg=!1;yg&&wg().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{writeFile as Yo}from"node:fs/promises";import re from"node:path";function Hn(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function vg(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}function bg(e,t,n){let r=Ye(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:Hn(r.key_findings),variance_hotspots:Hn(r.variance_hotspots),suggested_actions:Hn(r.suggested_actions),watchouts:Hn(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}}function Sg(e){return`${e.agentInstructions.trim()}
384
412
 
385
413
  Return JSON with this shape:
386
414
  {
@@ -398,12 +426,12 @@ ${j(JSON.stringify({skill_name:e.benchmark.skill_name,configs:e.benchmark.config
398
426
 
399
427
  ## Failure Clusters
400
428
  ${j(JSON.stringify(e.failureClusters,null,2),8e3)}
401
- `}async function _g(e,t){let{runKodaX:n}=await fe();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,effort:t.effort??(t.reasoningMode?void 0:"medium"),reasoningMode:t.reasoningMode,context:{gitRoot:re.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}function Ig(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(`
429
+ `}async function kg(e,t){let{runKodaX:n}=await fe();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,effort:t.effort??(t.reasoningMode?void 0:"medium"),reasoningMode:t.reasoningMode,context:{gitRoot:re.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}function xg(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(`
402
430
  `)}
403
- `}async function Ag(e,t=_g){let n=re.resolve(e.workspaceDir),r=re.resolve(e.benchmarkPath??re.join(n,"benchmark.json")),i=await Y(r,null);if(!i){let m=await Hn(n);if(Object.keys(m).length===0)throw new Error(`No benchmark data found in ${n}`);i=Vo(n,e.skillName??re.basename(n),m),await Jo(r,`${JSON.stringify(i,null,2)}
404
- `,"utf8")}let s=await Hn(n),a=kg(s),c=await Qe(import.meta.url,"../agents/analyzer.md"),d=Eg({agentInstructions:c,benchmark:i,failureClusters:a}),u=await t(d,{...e,workspaceDir:n,benchmarkPath:r,benchmark:i}),f=xg(u,i,a),p=re.resolve(e.outputPath??re.join(n,"analysis.json")),h=re.resolve(e.markdownPath??re.join(n,"analysis.md"));return await Jo(p,`${JSON.stringify(f,null,2)}
405
- `,"utf8"),await Jo(h,Ig(f),"utf8"),{analysis:f,prompt:d,rawResponse:u,analysisJsonPath:p,analysisMdPath:h}}function Rg(e){let t={workspaceDir:e[2]??"",benchmarkPath:void 0,outputPath:void 0,markdownPath:void 0,skillName:void 0,provider:"anthropic",model:void 0,effort:void 0,reasoningMode:void 0,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==="--effort"&&e[n+1]?t.effort=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}async function Yo(e=process.argv){let t=Rg(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 Ag(t);process.stdout.write(`${JSON.stringify({analysis:n.analysis,analysis_json:n.analysisJsonPath,analysis_md:n.analysisMdPath},null,2)}
406
- `)}var Tg,ud=l(()=>{"use strict";ld();z();o(zn,"normalizeStringArray");o(kg,"summarizeFailureClusters");o(xg,"normalizeAnalysisResult");o(Eg,"buildAnalysisPrompt");o(_g,"defaultRunAnalyst");o(Ig,"renderAnalysisMarkdown");o(Ag,"analyzeBenchmark");o(Rg,"parseArgs");o(Yo,"main");Tg=!1;Tg&&Yo().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readdir as Cg,readFile as fd,writeFile as pd}from"node:fs/promises";import A from"node:path";async function Zo(e){return(await Cg(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>A.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}function Qo(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function Pg(e){let t=Ye(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:Qo(t.strengths_a),strengths_b:Qo(t.strengths_b),risks:Qo(t.risks)}}async function Mg(e,t,n,r){let i=(await Zo(A.join(e,t))).filter(p=>A.basename(p).startsWith("run-")),s=(await Zo(A.join(e,n))).filter(p=>A.basename(p).startsWith("run-")),a=i[r],c=s[r];if(!a||!c)return null;let d=await Y(A.join(e,"eval_metadata.json"),{}),u=await fd(A.join(a,"outputs","result.md"),"utf8").catch(()=>""),f=await fd(A.join(c,"outputs","result.md"),"utf8").catch(()=>"");return{evalDir:e,evalMetadata:d,runA:{runDir:a,runId:A.basename(a),configName:t,output:u},runB:{runDir:c,runId:A.basename(c),configName:n,output:f}}}function Og(e){let t=e.presentPrimaryFirst?{A:e.runA,B:e.runB}:{A:e.runB,B:e.runA};return`${e.agentInstructions.trim()}
431
+ `}async function Eg(e,t=kg){let n=re.resolve(e.workspaceDir),r=re.resolve(e.benchmarkPath??re.join(n,"benchmark.json")),i=await Y(r,null);if(!i){let m=await qn(n);if(Object.keys(m).length===0)throw new Error(`No benchmark data found in ${n}`);i=Jo(n,e.skillName??re.basename(n),m),await Yo(r,`${JSON.stringify(i,null,2)}
432
+ `,"utf8")}let s=await qn(n),a=vg(s),c=await Qe(import.meta.url,"../agents/analyzer.md"),d=Sg({agentInstructions:c,benchmark:i,failureClusters:a}),u=await t(d,{...e,workspaceDir:n,benchmarkPath:r,benchmark:i}),f=bg(u,i,a),p=re.resolve(e.outputPath??re.join(n,"analysis.json")),h=re.resolve(e.markdownPath??re.join(n,"analysis.md"));return await Yo(p,`${JSON.stringify(f,null,2)}
433
+ `,"utf8"),await Yo(h,xg(f),"utf8"),{analysis:f,prompt:d,rawResponse:u,analysisJsonPath:p,analysisMdPath:h}}function _g(e){let t={workspaceDir:e[2]??"",benchmarkPath:void 0,outputPath:void 0,markdownPath:void 0,skillName:void 0,provider:"anthropic",model:void 0,effort:void 0,reasoningMode:void 0,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==="--effort"&&e[n+1]?t.effort=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}async function Qo(e=process.argv){let t=_g(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 Eg(t);process.stdout.write(`${JSON.stringify({analysis:n.analysis,analysis_json:n.analysisJsonPath,analysis_md:n.analysisMdPath},null,2)}
434
+ `)}var Ig,ud=l(()=>{"use strict";ld();G();o(Hn,"normalizeStringArray");o(vg,"summarizeFailureClusters");o(bg,"normalizeAnalysisResult");o(Sg,"buildAnalysisPrompt");o(kg,"defaultRunAnalyst");o(xg,"renderAnalysisMarkdown");o(Eg,"analyzeBenchmark");o(_g,"parseArgs");o(Qo,"main");Ig=!1;Ig&&Qo().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readdir as Ag,readFile as fd,writeFile as pd}from"node:fs/promises";import A from"node:path";async function ei(e){return(await Ag(e,{withFileTypes:!0}).catch(()=>[])).filter(n=>n.isDirectory()).map(n=>A.join(e,n.name)).sort((n,r)=>n.localeCompare(r))}function Zo(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function Rg(e){let t=Ye(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:Zo(t.strengths_a),strengths_b:Zo(t.strengths_b),risks:Zo(t.risks)}}async function Tg(e,t,n,r){let i=(await ei(A.join(e,t))).filter(p=>A.basename(p).startsWith("run-")),s=(await ei(A.join(e,n))).filter(p=>A.basename(p).startsWith("run-")),a=i[r],c=s[r];if(!a||!c)return null;let d=await Y(A.join(e,"eval_metadata.json"),{}),u=await fd(A.join(a,"outputs","result.md"),"utf8").catch(()=>""),f=await fd(A.join(c,"outputs","result.md"),"utf8").catch(()=>"");return{evalDir:e,evalMetadata:d,runA:{runDir:a,runId:A.basename(a),configName:t,output:u},runB:{runDir:c,runId:A.basename(c),configName:n,output:f}}}function Cg(e){let t=e.presentPrimaryFirst?{A:e.runA,B:e.runB}:{A:e.runB,B:e.runA};return`${e.agentInstructions.trim()}
407
435
 
408
436
  Return JSON with this shape:
409
437
  {
@@ -431,391 +459,15 @@ ${j(t.A.output,12e3)}
431
459
 
432
460
  ## Candidate B
433
461
  ${j(t.B.output,12e3)}
434
- `}async function Ng(e,t){let{runKodaX:n}=await fe();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,effort:t.effort??(t.reasoningMode?void 0:"medium"),reasoningMode:t.reasoningMode,context:{gitRoot:A.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}function $g(e,t,n,r){return e==="A"?t?n:r:e==="B"?t?r:n:e}function Dg(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(`
462
+ `}async function Pg(e,t){let{runKodaX:n}=await fe();return(await n({provider:t.provider??"anthropic",model:t.model,maxIter:t.maxIter??20,effort:t.effort??(t.reasoningMode?void 0:"medium"),reasoningMode:t.reasoningMode,context:{gitRoot:A.resolve(t.cwd??t.workspaceDir??process.cwd())}},e)).lastText}function Mg(e,t,n,r){return e==="A"?t?n:r:e==="B"?t?r:n:e}function Og(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(`
435
463
  `)}
436
- `}async function Lg(e,t=Ng){let n=A.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 Qe(import.meta.url,"../agents/comparator.md"),c=[];for(let p of await Zo(n))if(A.basename(p).startsWith("eval-"))for(let h=0;h<s;h+=1){let m=await Mg(p,r,i,h);if(!m)break;let k=c.length%2===0,v=Og({agentInstructions:a,evalMetadata:m.evalMetadata,runA:m.runA,runB:m.runB,presentPrimaryFirst:k}),y=await t(v,{...e,workspaceDir:n,evalDir:p,pairIndex:h,configA:r,configB:i}),g=Pg(y),w=$g(g.winner,k,r,i);c.push({index:c.length+1,eval_id:m.evalMetadata.eval_id??null,eval_name:m.evalMetadata.eval_name??null,run_a:A.relative(n,m.runA.runDir).replace(/\\/g,"/"),run_b:A.relative(n,m.runB.runDir).replace(/\\/g,"/"),presented_as:k?{A:r,B:i}:{A:i,B:r},winner_label:g.winner,winner_config:w,confidence:g.confidence,rationale:g.rationale,strengths_a:g.strengths_a,strengths_b:g.strengths_b,risks:g.risks})}if(c.length===0)throw new Error(`No comparable run pairs found for ${r} vs ${i} in ${n}`);let d={workspace:n,generated_at:new Date().toISOString(),config_a:r,config_b:i,summary:{total_pairs:c.length,config_a_wins:c.filter(p=>p.winner_config===r).length,config_b_wins:c.filter(p=>p.winner_config===i).length,ties:c.filter(p=>p.winner_config==="tie").length,inconclusive:c.filter(p=>p.winner_config==="inconclusive").length},comparisons:c},u=A.resolve(e.outputPath??A.join(n,"comparison.json")),f=A.resolve(e.markdownPath??A.join(n,"comparison.md"));return await pd(u,`${JSON.stringify(d,null,2)}
437
- `,"utf8"),await pd(f,Dg(d),"utf8"),{document:d,outputPath:u,markdownPath:f}}function jg(e){let t={workspaceDir:e[2]??"",configA:"with_skill",configB:"without_skill",outputPath:void 0,markdownPath:void 0,provider:"anthropic",model:void 0,effort:void 0,reasoningMode:void 0,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==="--effort"&&e[n+1]?t.effort=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}async function ei(e=process.argv){let t=jg(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 Lg(t);process.stdout.write(`${JSON.stringify({comparison:n.document.summary,output:n.outputPath,markdown:n.markdownPath},null,2)}
438
- `)}var Fg,md=l(()=>{"use strict";z();o(Zo,"listDirectories");o(Qo,"normalizeStringArray");o(Pg,"normalizeComparisonResult");o(Mg,"loadComparisonPair");o(Og,"buildComparisonPrompt");o(Ng,"defaultRunComparator");o($g,"mapWinnerToConfig");o(Dg,"renderComparisonMarkdown");o(Lg,"compareWorkspace");o(jg,"parseArgs");o(ei,"main");Fg=!1;Fg&&ei().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readFile as Wg,writeFile as Ug}from"node:fs/promises";import{createHash as Bg}from"node:crypto";import ti from"node:path";import{zipSync as Kg,strToU8 as qg}from"fflate";function zg(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function Gg(e){return Bg("sha256").update(e).digest("hex")}function Xg(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."}}async function Vg(e,t={}){let n=await Wt(e);if(!n.valid)throw new Error(`Cannot package invalid skill:
464
+ `}async function Ng(e,t=Pg){let n=A.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 Qe(import.meta.url,"../agents/comparator.md"),c=[];for(let p of await ei(n))if(A.basename(p).startsWith("eval-"))for(let h=0;h<s;h+=1){let m=await Tg(p,r,i,h);if(!m)break;let k=c.length%2===0,b=Cg({agentInstructions:a,evalMetadata:m.evalMetadata,runA:m.runA,runB:m.runB,presentPrimaryFirst:k}),y=await t(b,{...e,workspaceDir:n,evalDir:p,pairIndex:h,configA:r,configB:i}),g=Rg(y),w=Mg(g.winner,k,r,i);c.push({index:c.length+1,eval_id:m.evalMetadata.eval_id??null,eval_name:m.evalMetadata.eval_name??null,run_a:A.relative(n,m.runA.runDir).replace(/\\/g,"/"),run_b:A.relative(n,m.runB.runDir).replace(/\\/g,"/"),presented_as:k?{A:r,B:i}:{A:i,B:r},winner_label:g.winner,winner_config:w,confidence:g.confidence,rationale:g.rationale,strengths_a:g.strengths_a,strengths_b:g.strengths_b,risks:g.risks})}if(c.length===0)throw new Error(`No comparable run pairs found for ${r} vs ${i} in ${n}`);let d={workspace:n,generated_at:new Date().toISOString(),config_a:r,config_b:i,summary:{total_pairs:c.length,config_a_wins:c.filter(p=>p.winner_config===r).length,config_b_wins:c.filter(p=>p.winner_config===i).length,ties:c.filter(p=>p.winner_config==="tie").length,inconclusive:c.filter(p=>p.winner_config==="inconclusive").length},comparisons:c},u=A.resolve(e.outputPath??A.join(n,"comparison.json")),f=A.resolve(e.markdownPath??A.join(n,"comparison.md"));return await pd(u,`${JSON.stringify(d,null,2)}
465
+ `,"utf8"),await pd(f,Og(d),"utf8"),{document:d,outputPath:u,markdownPath:f}}function $g(e){let t={workspaceDir:e[2]??"",configA:"with_skill",configB:"without_skill",outputPath:void 0,markdownPath:void 0,provider:"anthropic",model:void 0,effort:void 0,reasoningMode:void 0,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==="--effort"&&e[n+1]?t.effort=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}async function ti(e=process.argv){let t=$g(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 Ng(t);process.stdout.write(`${JSON.stringify({comparison:n.document.summary,output:n.outputPath,markdown:n.markdownPath},null,2)}
466
+ `)}var Dg,md=l(()=>{"use strict";G();o(ei,"listDirectories");o(Zo,"normalizeStringArray");o(Rg,"normalizeComparisonResult");o(Tg,"loadComparisonPair");o(Cg,"buildComparisonPrompt");o(Pg,"defaultRunComparator");o(Mg,"mapWinnerToConfig");o(Og,"renderComparisonMarkdown");o(Ng,"compareWorkspace");o($g,"parseArgs");o(ti,"main");Dg=!1;Dg&&ti().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{readFile as Lg,writeFile as jg}from"node:fs/promises";import{createHash as Fg}from"node:crypto";import ni from"node:path";import{zipSync as Wg,strToU8 as Ug}from"fflate";function Kg(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function qg(e){return Fg("sha256").update(e).digest("hex")}function Hg(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."}}async function zg(e,t={}){let n=await Ut(e);if(!n.valid)throw new Error(`Cannot package invalid skill:
439
467
  - ${n.errors.join(`
440
- - `)}`);let r=await Lt(e),i=await jo(e),s=[];for(let d of i){if(d.relativePath.endsWith(".skill"))continue;let u=zg(await Wg(d.absolutePath));s.push({...d,bytes:u,sha256:Gg(u)})}let a=Xg(r,s,t),c={[Hg]:qg(JSON.stringify(a,null,2))};for(let d of s)c[d.relativePath]=d.bytes;return{manifest:a,bytes:Kg(c,{level:6})}}async function Jg(e,t,n={}){let r=await Vg(e,n);return await Ug(t,r.bytes),{...r,outputPath:ti.resolve(t)}}function Yg(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}async function ni(e=process.argv){let t=Yg(e);t.skillDir||(console.error("Usage: node scripts/package-skill.js <skill-dir> [--output <file.skill>]"),process.exit(1));let n=await Lt(t.skillDir),r=t.output??ti.join(ti.dirname(t.skillDir),`${n.frontmatter.name}.skill`),i=await Jg(t.skillDir,r);console.log(`Wrote ${i.outputPath}`)}var Hg,Qg,hd=l(()=>{"use strict";qn();z();Hg=".kodax-package.json";o(zg,"toUint8Array");o(Gg,"sha256");o(Xg,"createPackageManifest");o(Vg,"buildSkillPackage");o(Jg,"writeSkillPackage");o(Yg,"parseArgs");o(ni,"main");Qg=!1;Qg&&ni().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{cp as Zg,mkdir as ri,readFile as yd,rm as bd,stat as ew,writeFile as tw}from"node:fs/promises";import Q from"node:path";import{strFromU8 as gd,unzipSync as nw}from"fflate";function rw(e){return e.replace(/\\/g,"/").replace(/^\.?\//,"")}function ow(e){let t=rw(e);if(!t||t.startsWith("/")||t.includes("../"))throw new Error(`Unsafe archive entry path: ${e}`);return t}function iw(e){return/\.(skill|zip)$/i.test(e)}function sw(e){let t=nw(e),n=Object.entries(t).map(([u,f])=>({relativePath:ow(u),bytes:f})),r=n.find(u=>u.relativePath==="SKILL.md");if(!r)throw new Error("Archive is missing SKILL.md");let i=Wn(gd(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(u=>u.relativePath===wd),d=c?JSON.parse(gd(c.bytes)):null;return{skillName:s,manifest:d,entries:n.filter(u=>u.relativePath!==wd)}}async function aw(e,t){if(await jt(e)){if(!t)throw new Error(`Target skill already exists: ${e}`);await bd(e,{recursive:!0,force:!0})}await ri(e,{recursive:!0})}async function cw(e,t={}){let n=Q.resolve(t.skillsDir??Ft()),r=sw(await yd(e)),i=Q.join(n,r.skillName);await aw(i,t.force===!0);for(let s of r.entries){let a=Q.join(i,s.relativePath);await ri(Q.dirname(a),{recursive:!0}),await tw(a,s.bytes)}return{skillName:r.skillName,installedTo:i,source:Q.resolve(e),manifest:r.manifest}}async function dw(e,t={}){let n=await Wt(e);if(!n.valid)throw new Error(`Cannot install invalid skill:
468
+ - `)}`);let r=await jt(e),i=await Fo(e),s=[];for(let d of i){if(d.relativePath.endsWith(".skill"))continue;let u=Kg(await Lg(d.absolutePath));s.push({...d,bytes:u,sha256:qg(u)})}let a=Hg(r,s,t),c={[Bg]:Ug(JSON.stringify(a,null,2))};for(let d of s)c[d.relativePath]=d.bytes;return{manifest:a,bytes:Wg(c,{level:6})}}async function Gg(e,t,n={}){let r=await zg(e,n);return await jg(t,r.bytes),{...r,outputPath:ni.resolve(t)}}function Xg(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}async function ri(e=process.argv){let t=Xg(e);t.skillDir||(console.error("Usage: node scripts/package-skill.js <skill-dir> [--output <file.skill>]"),process.exit(1));let n=await jt(t.skillDir),r=t.output??ni.join(ni.dirname(t.skillDir),`${n.frontmatter.name}.skill`),i=await Gg(t.skillDir,r);console.log(`Wrote ${i.outputPath}`)}var Bg,Vg,hd=l(()=>{"use strict";Kn();G();Bg=".kodax-package.json";o(Kg,"toUint8Array");o(qg,"sha256");o(Hg,"createPackageManifest");o(zg,"buildSkillPackage");o(Gg,"writeSkillPackage");o(Xg,"parseArgs");o(ri,"main");Vg=!1;Vg&&ri().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});import{cp as Jg,mkdir as oi,readFile as yd,rm as vd,stat as Yg,writeFile as Qg}from"node:fs/promises";import Q from"node:path";import{strFromU8 as gd,unzipSync as Zg}from"fflate";function ew(e){return e.replace(/\\/g,"/").replace(/^\.?\//,"")}function tw(e){let t=ew(e);if(!t||t.startsWith("/")||t.includes("../"))throw new Error(`Unsafe archive entry path: ${e}`);return t}function nw(e){return/\.(skill|zip)$/i.test(e)}function rw(e){let t=Zg(e),n=Object.entries(t).map(([u,f])=>({relativePath:tw(u),bytes:f})),r=n.find(u=>u.relativePath==="SKILL.md");if(!r)throw new Error("Archive is missing SKILL.md");let i=Fn(gd(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(u=>u.relativePath===wd),d=c?JSON.parse(gd(c.bytes)):null;return{skillName:s,manifest:d,entries:n.filter(u=>u.relativePath!==wd)}}async function ow(e,t){if(await Ft(e)){if(!t)throw new Error(`Target skill already exists: ${e}`);await vd(e,{recursive:!0,force:!0})}await oi(e,{recursive:!0})}async function iw(e,t={}){let n=Q.resolve(t.skillsDir??Wt()),r=rw(await yd(e)),i=Q.join(n,r.skillName);await ow(i,t.force===!0);for(let s of r.entries){let a=Q.join(i,s.relativePath);await oi(Q.dirname(a),{recursive:!0}),await Qg(a,s.bytes)}return{skillName:r.skillName,installedTo:i,source:Q.resolve(e),manifest:r.manifest}}async function sw(e,t={}){let n=await Ut(e);if(!n.valid)throw new Error(`Cannot install invalid skill:
441
469
  - ${n.errors.join(`
442
- - `)}`);let r=Q.join(e,"SKILL.md"),i=Wn(await yd(r,"utf8")),s=Q.resolve(t.skillsDir??Ft()),a=Q.join(s,i.frontmatter.name);if(await jt(a)){if(!t.force)throw new Error(`Target skill already exists: ${a}`);await bd(a,{recursive:!0,force:!0})}return await ri(s,{recursive:!0}),await Zg(e,a,{recursive:!0}),{skillName:i.frontmatter.name,installedTo:a,source:Q.resolve(e),manifest:null}}async function lw(e,t={}){let n=Q.resolve(e),r=await ew(n).catch(()=>null);if(!r)throw new Error(`Input not found: ${n}`);if(r.isDirectory())return dw(n,t);if(r.isFile()&&iw(n))return cw(n,t);throw new Error("Input must be a skill directory or a .skill/.zip archive.")}function uw(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}async function oi(e=process.argv){let t=uw(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 lw(t.input,t);console.log(`Installed ${n.skillName} to ${n.installedTo}`)}var wd,fw,vd=l(()=>{"use strict";qn();z();wd=".kodax-package.json";o(rw,"normalizeArchivePath");o(ow,"assertSafeArchivePath");o(iw,"isZipLike");o(sw,"readSkillPackageBuffer");o(aw,"ensureInstallTarget");o(cw,"installSkillArchive");o(dw,"installSkillDirectory");o(lw,"installSkill");o(uw,"parseArgs");o(oi,"main");fw=!1;fw&&oi().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});function Sd(e){return e!==void 0&&pw.some(t=>t===e)}async function kd(e,t,n){Yc(n),await mw[e]([process.execPath,`skill-${e}.js`,...t])}var pw,mw,xd=l(()=>{"use strict";td();qn();rd();cd();ud();md();hd();vd();z();pw=["init","validate","eval","grade","analyze","compare","package","install"],mw={init:Fo,validate:Wo,eval:Bo,grade:zo,analyze:Yo,compare:ei,package:ni,install:oi};o(Sd,"isSkillCreatorDispatchAction");o(kd,"dispatchSkillCreatorTool")});var Zc={};Gd(Zc,{SkillExecutor:()=>Je,SkillRegistry:()=>Nt,VariableResolver:()=>Xe,clearPluginSkillPaths:()=>Ta,createExecutor:()=>Wc,createResolver:()=>Dc,discoverSkills:()=>Mt,discoverSkillsWithMonorepo:()=>Nc,dispatchSkillCreatorTool:()=>kd,executeSkill:()=>Uc,expandSkillForLLM:()=>qc,formatSkillActivationMessage:()=>Hc,formatSkillsSystemPrompt:()=>Po,getDefaultSkillPaths:()=>xn,getNestedSkillPaths:()=>Ro,getSkillPathsFlat:()=>En,getSkillRegistry:()=>$t,initializeSkillRegistry:()=>Mo,isSkillCreatorDispatchAction:()=>Sd,listPluginSkillPaths:()=>kn,loadFullSkill:()=>In,loadSkillFileContent:()=>La,loadSkillMetadata:()=>xt,parseArguments:()=>Co,parseSkillMarkdown:()=>_n,registerPluginSkillPath:()=>Aa,resetSkillRegistry:()=>Fc,resolveSkillContent:()=>ue,unregisterPluginSkillPath:()=>Ra});var Kn=l(()=>{"use strict";to();eo();An();To();Ot();Oo();Bc();zc();xd()});import{spawn as qy,spawnSync as z3}from"node:child_process";import{createHash as Wd,randomInt as X3,randomUUID as Hy}from"node:crypto";import{closeSync as J3,constants as Y3,existsSync as Q3,fsyncSync as Z3,lstatSync as eX,mkdirSync as tX,openSync as nX,readFileSync as rX,readSync as oX,readdirSync as iX,realpathSync as sX,renameSync as aX,rmSync as cX,statSync as dX,writeFileSync as lX,writeSync as zy}from"node:fs";import{copyFile as fX,lstat as pX,mkdir as mX,readFile as ai,realpath as hX,rm as Ud,stat as gX,writeFile as wX}from"node:fs/promises";import{createRequire as Gy}from"node:module";import S from"node:path";import{globSync as r3}from"glob";C();L();K();var wt=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??af,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))}},oa=0;function af(){oa+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${oa}-${e}`}o(af,"defaultNextSpanId");var ia=0;function cf(){ia+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${ia}-${e}`}o(cf,"defaultNextTraceId");function Wr(e={}){let t=e.now??(()=>Date.now()),n=e.id??(e.nextTraceId??cf)(),r=t(),i=e.name??"trace",s=e.metadata??new Map,a=e.rootSpanData??{kind:"agent",agentName:i},c=!1,d,u,f=new wt({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(f);let p={id:n,startedAt:r,rootSpan:f,metadata:s,get endedAt(){return d},get error(){return u??f.error},end(){c||(c=!0,d=t(),f.end(),e.onTraceEnd&&e.onTraceEnd(p))}};return p}o(Wr,"createTrace");var Ur=[];function Br(e){for(let t of Ur)try{t.onSpanStart(e)}catch{}}o(Br,"_emitSpanStart");function Kr(e){for(let t of Ur)try{t.onSpanEnd(e)}catch{}}o(Kr,"_emitSpanEnd");function qr(e){for(let t of Ur)try{t.onTraceEnd(e)}catch{}}o(qr,"_emitTraceEnd");var wn=class{static{o(this,"Tracer")}options;constructor(t={}){this.options=t}startTrace(t={}){return Wr({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:Br,onSpanEnd:Kr,onTraceEnd:qr})}},sa=new wn;L();var mf=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var R0=new Set(mf);K();K();C();K();C();Hr();var zr="ELECTRON_RUN_AS_NODE";var Gr="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";ke();L();C();ke();import{AsyncLocalStorage as Vf}from"node:async_hooks";var GM=new Vf;ke();var bn="KODAX_EFFECT_JOB_PAYLOAD";var Jf=String.raw`
443
- using System;
444
- using System.IO;
445
- using System.Runtime.InteropServices;
446
- using System.Threading;
447
-
448
- public static class KodaXEffectJob {
449
- [StructLayout(LayoutKind.Sequential)]
450
- private struct IoCounters {
451
- public ulong ReadOperationCount;
452
- public ulong WriteOperationCount;
453
- public ulong OtherOperationCount;
454
- public ulong ReadTransferCount;
455
- public ulong WriteTransferCount;
456
- public ulong OtherTransferCount;
457
- }
458
-
459
- [StructLayout(LayoutKind.Sequential)]
460
- private struct BasicLimitInformation {
461
- public long PerProcessUserTimeLimit;
462
- public long PerJobUserTimeLimit;
463
- public uint LimitFlags;
464
- public UIntPtr MinimumWorkingSetSize;
465
- public UIntPtr MaximumWorkingSetSize;
466
- public uint ActiveProcessLimit;
467
- public UIntPtr Affinity;
468
- public uint PriorityClass;
469
- public uint SchedulingClass;
470
- }
471
-
472
- [StructLayout(LayoutKind.Sequential)]
473
- private struct ExtendedLimitInformation {
474
- public BasicLimitInformation BasicLimitInformation;
475
- public IoCounters IoInfo;
476
- public UIntPtr ProcessMemoryLimit;
477
- public UIntPtr JobMemoryLimit;
478
- public UIntPtr PeakProcessMemoryUsed;
479
- public UIntPtr PeakJobMemoryUsed;
480
- }
481
-
482
- [StructLayout(LayoutKind.Sequential)]
483
- private struct BasicAccountingInformation {
484
- public long TotalUserTime;
485
- public long TotalKernelTime;
486
- public long ThisPeriodTotalUserTime;
487
- public long ThisPeriodTotalKernelTime;
488
- public uint TotalPageFaultCount;
489
- public uint TotalProcesses;
490
- public uint ActiveProcesses;
491
- public uint TotalTerminatedProcesses;
492
- }
493
-
494
- [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
495
- private static extern IntPtr CreateJobObjectW(IntPtr attributes, string name);
496
-
497
- [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
498
- private static extern IntPtr OpenJobObjectW(uint desiredAccess, bool inheritHandle, string name);
499
-
500
- [DllImport("kernel32.dll", SetLastError = true)]
501
- private static extern bool SetInformationJobObject(
502
- IntPtr job,
503
- int infoClass,
504
- ref ExtendedLimitInformation info,
505
- uint length);
506
-
507
- [DllImport("kernel32.dll", SetLastError = true)]
508
- private static extern bool QueryInformationJobObject(
509
- IntPtr job,
510
- int infoClass,
511
- out BasicAccountingInformation info,
512
- uint length,
513
- IntPtr returnLength);
514
-
515
- [DllImport("kernel32.dll", SetLastError = true)]
516
- private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
517
-
518
- [DllImport("kernel32.dll", SetLastError = true)]
519
- private static extern bool AssignProcessToJobObject(IntPtr job, IntPtr process);
520
-
521
- [DllImport("kernel32.dll", SetLastError = true)]
522
- private static extern uint WaitForSingleObject(IntPtr handle, uint milliseconds);
523
-
524
- [DllImport("kernel32.dll", SetLastError = true)]
525
- private static extern bool GetExitCodeProcess(IntPtr process, out uint exitCode);
526
-
527
- [DllImport("kernel32.dll", SetLastError = true)]
528
- private static extern bool TerminateJobObject(IntPtr job, uint exitCode);
529
-
530
- [DllImport("kernel32.dll", SetLastError = true)]
531
- private static extern bool CloseHandle(IntPtr handle);
532
-
533
- private const uint Synchronize = 0x00100000;
534
- private const uint ProcessTerminate = 0x0001;
535
- private const uint ProcessSetQuota = 0x0100;
536
- private const uint ProcessQueryLimitedInformation = 0x1000;
537
- private const uint JobObjectTerminate = 0x0008;
538
- private const uint JobObjectQuery = 0x0004;
539
- private const uint JobObjectLimitKillOnJobClose = 0x00002000;
540
- private const uint WaitObject0 = 0;
541
-
542
- private static void Require(bool result, string operation) {
543
- if (!result) throw new InvalidOperationException(
544
- operation + " failed with Win32 error " + Marshal.GetLastWin32Error());
545
- }
546
-
547
- private static void PublishReady() {
548
- Console.Out.WriteLine("READY");
549
- Console.Out.Flush();
550
- }
551
-
552
- public static void Run(uint targetPid, uint ownerPid, string jobName) {
553
- var job = CreateJobObjectW(IntPtr.Zero, jobName);
554
- if (job == IntPtr.Zero) throw new InvalidOperationException(
555
- "CreateJobObject failed with Win32 error " + Marshal.GetLastWin32Error());
556
- var processAccess = Synchronize | ProcessTerminate | ProcessSetQuota | ProcessQueryLimitedInformation;
557
- var target = OpenProcess(processAccess, false, targetPid);
558
- var owner = OpenProcess(Synchronize, false, ownerPid);
559
- if (target == IntPtr.Zero || owner == IntPtr.Zero) {
560
- if (target != IntPtr.Zero) CloseHandle(target);
561
- if (owner != IntPtr.Zero) CloseHandle(owner);
562
- CloseHandle(job);
563
- throw new InvalidOperationException(
564
- "OpenProcess failed with Win32 error " + Marshal.GetLastWin32Error());
565
- }
566
- try {
567
- var limits = new ExtendedLimitInformation();
568
- limits.BasicLimitInformation.LimitFlags = JobObjectLimitKillOnJobClose;
569
- Require(SetInformationJobObject(
570
- job,
571
- 9,
572
- ref limits,
573
- (uint)Marshal.SizeOf(typeof(ExtendedLimitInformation))),
574
- "SetInformationJobObject");
575
- Require(AssignProcessToJobObject(job, target), "AssignProcessToJobObject");
576
- PublishReady();
577
-
578
- uint targetExitCode = 1;
579
- while (true) {
580
- if (WaitForSingleObject(owner, 0) == WaitObject0) break;
581
- if (WaitForSingleObject(target, 0) == WaitObject0) {
582
- GetExitCodeProcess(target, out targetExitCode);
583
- break;
584
- }
585
- Thread.Sleep(20);
586
- }
587
-
588
- Require(TerminateJobObject(job, targetExitCode), "TerminateJobObject");
589
- while (true) {
590
- BasicAccountingInformation accounting;
591
- Require(QueryInformationJobObject(
592
- job,
593
- 1,
594
- out accounting,
595
- (uint)Marshal.SizeOf(typeof(BasicAccountingInformation)),
596
- IntPtr.Zero),
597
- "QueryInformationJobObject");
598
- if (accounting.ActiveProcesses == 0) return;
599
- Thread.Sleep(10);
600
- }
601
- } finally {
602
- CloseHandle(owner);
603
- CloseHandle(target);
604
- CloseHandle(job);
605
- }
606
- }
607
-
608
- public static bool TerminateAndDrain(string jobName) {
609
- var job = OpenJobObjectW(JobObjectTerminate | JobObjectQuery, false, jobName);
610
- if (job == IntPtr.Zero) {
611
- var error = Marshal.GetLastWin32Error();
612
- if (error == 2) return false;
613
- throw new InvalidOperationException(
614
- "OpenJobObject failed with Win32 error " + error);
615
- }
616
- try {
617
- Require(TerminateJobObject(job, 1), "TerminateJobObject");
618
- while (true) {
619
- BasicAccountingInformation accounting;
620
- Require(QueryInformationJobObject(
621
- job,
622
- 1,
623
- out accounting,
624
- (uint)Marshal.SizeOf(typeof(BasicAccountingInformation)),
625
- IntPtr.Zero),
626
- "QueryInformationJobObject");
627
- if (accounting.ActiveProcesses == 0) return true;
628
- Thread.Sleep(10);
629
- }
630
- } finally {
631
- CloseHandle(job);
632
- }
633
- }
634
-
635
- }`,Yf=String.raw`
636
- using System;
637
- using System.Collections.Generic;
638
- using System.Diagnostics;
639
- using System.Runtime.InteropServices;
640
- using System.Security.Principal;
641
-
642
- public static class KodaXSidProbe {
643
- [StructLayout(LayoutKind.Sequential)]
644
- private struct WtsProcessInformation {
645
- public uint SessionId;
646
- public uint ProcessId;
647
- public IntPtr ProcessName;
648
- public IntPtr UserSid;
649
- }
650
-
651
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
652
- private struct ProcessEntry32 {
653
- public uint Size;
654
- public uint Usage;
655
- public uint ProcessId;
656
- public UIntPtr DefaultHeapId;
657
- public uint ModuleId;
658
- public uint Threads;
659
- public uint ParentProcessId;
660
- public int PriorityClassBase;
661
- public uint Flags;
662
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
663
- public string ExecutableFile;
664
- }
665
-
666
- [DllImport("wtsapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
667
- private static extern bool WTSEnumerateProcessesW(
668
- IntPtr server,
669
- uint reserved,
670
- uint version,
671
- out IntPtr processInformation,
672
- out uint count);
673
-
674
- [DllImport("wtsapi32.dll")]
675
- private static extern void WTSFreeMemory(IntPtr memory);
676
-
677
- [DllImport("kernel32.dll", SetLastError = true)]
678
- private static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processId);
679
-
680
- [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
681
- private static extern bool Process32FirstW(IntPtr snapshot, ref ProcessEntry32 entry);
682
-
683
- [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
684
- private static extern bool Process32NextW(IntPtr snapshot, ref ProcessEntry32 entry);
685
-
686
- [DllImport("kernel32.dll", SetLastError = true)]
687
- private static extern bool CloseHandle(IntPtr handle);
688
-
689
- private static Dictionary<uint, uint> ProcessParents() {
690
- var parents = new Dictionary<uint, uint>();
691
- var snapshot = CreateToolhelp32Snapshot(0x00000002, 0);
692
- if (snapshot == new IntPtr(-1)) throw new InvalidOperationException(
693
- "CreateToolhelp32Snapshot failed with Win32 error " + Marshal.GetLastWin32Error());
694
- try {
695
- var entry = new ProcessEntry32();
696
- entry.Size = (uint)Marshal.SizeOf(typeof(ProcessEntry32));
697
- if (!Process32FirstW(snapshot, ref entry)) throw new InvalidOperationException(
698
- "Process32First failed with Win32 error " + Marshal.GetLastWin32Error());
699
- do {
700
- parents[entry.ProcessId] = entry.ParentProcessId;
701
- entry.Size = (uint)Marshal.SizeOf(typeof(ProcessEntry32));
702
- } while (Process32NextW(snapshot, ref entry));
703
- } finally {
704
- CloseHandle(snapshot);
705
- }
706
- return parents;
707
- }
708
-
709
- private static HashSet<uint> MatchingProcesses(SecurityIdentifier expected) {
710
- var matches = new HashSet<uint>();
711
- IntPtr processes;
712
- uint count;
713
- if (!WTSEnumerateProcessesW(IntPtr.Zero, 0, 1, out processes, out count)) {
714
- throw new InvalidOperationException(
715
- "WTSEnumerateProcesses failed with Win32 error " + Marshal.GetLastWin32Error());
716
- }
717
- try {
718
- var entrySize = Marshal.SizeOf(typeof(WtsProcessInformation));
719
- for (uint index = 0; index < count; index++) {
720
- var address = new IntPtr(processes.ToInt64() + ((long)index * entrySize));
721
- var entry = (WtsProcessInformation)Marshal.PtrToStructure(
722
- address,
723
- typeof(WtsProcessInformation));
724
- if (entry.UserSid == IntPtr.Zero) continue;
725
- if (new SecurityIdentifier(entry.UserSid).Equals(expected)) matches.Add(entry.ProcessId);
726
- }
727
- } finally {
728
- WTSFreeMemory(processes);
729
- }
730
- return matches;
731
- }
732
-
733
- private static bool DescendsFrom(
734
- uint process,
735
- uint root,
736
- Dictionary<uint, uint> parents
737
- ) {
738
- var visited = new HashSet<uint>();
739
- while (process != 0 && visited.Add(process)) {
740
- if (process == root) return true;
741
- if (!parents.ContainsKey(process)) return false;
742
- process = parents[process];
743
- }
744
- return false;
745
- }
746
-
747
- public static bool HasOtherProcessWithSid(string expectedSid, bool ignoreProbeTree) {
748
- var expected = new SecurityIdentifier(expectedSid);
749
- using (var identity = WindowsIdentity.GetCurrent()) {
750
- var sameUser = identity.User != null && identity.User.Equals(expected);
751
- var administrator = new WindowsPrincipal(identity)
752
- .IsInRole(WindowsBuiltInRole.Administrator);
753
- if (ignoreProbeTree && !sameUser) {
754
- throw new InvalidOperationException("Process-tree SID probe must run as the expected sandbox user");
755
- }
756
- if (!ignoreProbeTree && !sameUser && !administrator) {
757
- throw new InvalidOperationException(
758
- "Machine-wide inspection of a foreign Windows SID requires an elevated administrator token");
759
- }
760
- }
761
- var matches = MatchingProcesses(expected);
762
- if (!ignoreProbeTree) return matches.Count > 0;
763
- var current = (uint)Process.GetCurrentProcess().Id;
764
- if (!matches.Contains(current)) throw new InvalidOperationException(
765
- "SID probe could not observe its own process");
766
- var parents = ProcessParents();
767
- var root = parents.ContainsKey(current) ? parents[current] : current;
768
- foreach (var process in matches) {
769
- if (!DescendsFrom(process, root, parents)) return true;
770
- }
771
- return false;
772
- }
773
- }`,Qf=String.raw`
774
- $ErrorActionPreference = 'Stop'
775
- try {
776
- $payload = [Text.Encoding]::UTF8.GetString(
777
- [Convert]::FromBase64String($env:${bn})) | ConvertFrom-Json
778
- Remove-Item Env:${bn} -ErrorAction SilentlyContinue
779
- $source = @'
780
- ${Jf}
781
- '@
782
- Add-Type -TypeDefinition $source
783
- if ($payload.action -eq 'recover') {
784
- $drained = [KodaXEffectJob]::TerminateAndDrain([string]$payload.jobName)
785
- [Console]::Out.WriteLine($(if ($drained) { 'DRAINED' } else { 'NOT_FOUND' }))
786
- [Console]::Out.Flush()
787
- } else {
788
- [KodaXEffectJob]::Run(
789
- [uint32]$payload.targetPid,
790
- [uint32]$payload.ownerPid,
791
- [string]$payload.jobName)
792
- }
793
- exit 0
794
- } catch {
795
- [Console]::Out.WriteLine('ERROR:' + $_.Exception.Message)
796
- [Console]::Out.Flush()
797
- exit 1
798
- }`,YM=Buffer.from(Qf,"utf16le").toString("base64"),Zf=String.raw`
799
- $ErrorActionPreference = 'Stop'
800
- try {
801
- $payload = [Text.Encoding]::UTF8.GetString(
802
- [Convert]::FromBase64String($env:${bn})) | ConvertFrom-Json
803
- Remove-Item Env:${bn} -ErrorAction SilentlyContinue
804
- $source = @'
805
- ${Yf}
806
- '@
807
- Add-Type -TypeDefinition $source
808
- $active = [KodaXSidProbe]::HasOtherProcessWithSid(
809
- [string]$payload.sid,
810
- [bool]$payload.ignoreCurrentProcessTree)
811
- [Console]::Out.WriteLine($(if ($active) { 'ACTIVE' } else { 'CLEAR' }))
812
- [Console]::Out.Flush()
813
- exit 0
814
- } catch {
815
- [Console]::Out.WriteLine('ERROR:' + $_.Exception.Message)
816
- [Console]::Out.Flush()
817
- exit 1
818
- }`,QM=Buffer.from(Zf,"utf16le").toString("base64");ke();var iO=String.raw`
470
+ - `)}`);let r=Q.join(e,"SKILL.md"),i=Fn(await yd(r,"utf8")),s=Q.resolve(t.skillsDir??Wt()),a=Q.join(s,i.frontmatter.name);if(await Ft(a)){if(!t.force)throw new Error(`Target skill already exists: ${a}`);await vd(a,{recursive:!0,force:!0})}return await oi(s,{recursive:!0}),await Jg(e,a,{recursive:!0}),{skillName:i.frontmatter.name,installedTo:a,source:Q.resolve(e),manifest:null}}async function aw(e,t={}){let n=Q.resolve(e),r=await Yg(n).catch(()=>null);if(!r)throw new Error(`Input not found: ${n}`);if(r.isDirectory())return sw(n,t);if(r.isFile()&&nw(n))return iw(n,t);throw new Error("Input must be a skill directory or a .skill/.zip archive.")}function cw(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}async function ii(e=process.argv){let t=cw(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 aw(t.input,t);console.log(`Installed ${n.skillName} to ${n.installedTo}`)}var wd,dw,bd=l(()=>{"use strict";Kn();G();wd=".kodax-package.json";o(ew,"normalizeArchivePath");o(tw,"assertSafeArchivePath");o(nw,"isZipLike");o(rw,"readSkillPackageBuffer");o(ow,"ensureInstallTarget");o(iw,"installSkillArchive");o(sw,"installSkillDirectory");o(aw,"installSkill");o(cw,"parseArgs");o(ii,"main");dw=!1;dw&&ii().catch(e=>{console.error(e instanceof Error?e.message:String(e)),process.exit(1)})});function Sd(e){return e!==void 0&&lw.some(t=>t===e)}async function kd(e,t,n){Yc(n),await uw[e]([process.execPath,`skill-${e}.js`,...t])}var lw,uw,xd=l(()=>{"use strict";td();Kn();rd();cd();ud();md();hd();bd();G();lw=["init","validate","eval","grade","analyze","compare","package","install"],uw={init:Wo,validate:Uo,eval:Ko,grade:Go,analyze:Qo,compare:ti,package:ri,install:ii};o(Sd,"isSkillCreatorDispatchAction");o(kd,"dispatchSkillCreatorTool")});var Zc={};Gd(Zc,{SkillExecutor:()=>Je,SkillRegistry:()=>$t,VariableResolver:()=>Xe,clearPluginSkillPaths:()=>Ta,createExecutor:()=>Wc,createResolver:()=>Dc,discoverSkills:()=>Ot,discoverSkillsWithMonorepo:()=>Nc,dispatchSkillCreatorTool:()=>kd,executeSkill:()=>Uc,expandSkillForLLM:()=>qc,formatSkillActivationMessage:()=>Hc,formatSkillsSystemPrompt:()=>Mo,getDefaultSkillPaths:()=>kn,getNestedSkillPaths:()=>To,getSkillPathsFlat:()=>xn,getSkillRegistry:()=>Dt,initializeSkillRegistry:()=>Oo,isSkillCreatorDispatchAction:()=>Sd,listPluginSkillPaths:()=>Sn,loadFullSkill:()=>_n,loadSkillFileContent:()=>La,loadSkillMetadata:()=>Et,parseArguments:()=>Po,parseSkillMarkdown:()=>En,registerPluginSkillPath:()=>Aa,resetSkillRegistry:()=>Fc,resolveSkillContent:()=>ue,unregisterPluginSkillPath:()=>Ra});var Bn=l(()=>{"use strict";no();to();In();Co();Nt();No();Bc();zc();xd()});import{spawn as Wy,spawnSync as GX}from"node:child_process";import{createHash as Wd,randomInt as VX,randomUUID as Uy}from"node:crypto";import{closeSync as YX,constants as QX,existsSync as ZX,fsyncSync as e3,lstatSync as t3,mkdirSync as n3,openSync as r3,readFileSync as o3,readSync as i3,readdirSync as s3,realpathSync as a3,renameSync as c3,rmSync as d3,statSync as l3,writeFileSync as u3,writeSync as By}from"node:fs";import{copyFile as p3,lstat as m3,mkdir as h3,readFile as di,realpath as g3,rm as Ud,stat as w3,writeFile as y3}from"node:fs/promises";import{createRequire as Ky}from"node:module";import S from"node:path";import{globSync as oX}from"glob";C();L();K();var wt=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??cf,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))}},ia=0;function cf(){ia+=1;let e=Math.random().toString(36).slice(2,8);return`span-${Date.now()}-${ia}-${e}`}o(cf,"defaultNextSpanId");var sa=0;function df(){sa+=1;let e=Math.random().toString(36).slice(2,8);return`trace-${Date.now()}-${sa}-${e}`}o(df,"defaultNextTraceId");function Wr(e={}){let t=e.now??(()=>Date.now()),n=e.id??(e.nextTraceId??df)(),r=t(),i=e.name??"trace",s=e.metadata??new Map,a=e.rootSpanData??{kind:"agent",agentName:i},c=!1,d,u,f=new wt({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(f);let p={id:n,startedAt:r,rootSpan:f,metadata:s,get endedAt(){return d},get error(){return u??f.error},end(){c||(c=!0,d=t(),f.end(),e.onTraceEnd&&e.onTraceEnd(p))}};return p}o(Wr,"createTrace");var Ur=[];function Br(e){for(let t of Ur)try{t.onSpanStart(e)}catch{}}o(Br,"_emitSpanStart");function Kr(e){for(let t of Ur)try{t.onSpanEnd(e)}catch{}}o(Kr,"_emitSpanEnd");function qr(e){for(let t of Ur)try{t.onTraceEnd(e)}catch{}}o(qr,"_emitTraceEnd");var yn=class{static{o(this,"Tracer")}options;constructor(t={}){this.options=t}startTrace(t={}){return Wr({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:Br,onSpanEnd:Kr,onTraceEnd:qr})}},aa=new yn;L();var hf=["read","edit","bash:test","bash:read-only","bash:mutating","bash:network","subagent"];var _0=new Set(hf);K();K();C();K();C();zr();var Gr="ELECTRON_RUN_AS_NODE";var Xr="data:text/javascript,delete%20process.env.ELECTRON_RUN_AS_NODE";ke();L();C();ke();import{AsyncLocalStorage as Jf}from"node:async_hooks";var HM=new Jf;ke();ke();var tO=String.raw`
819
471
  const { spawn } = require('node:child_process');
820
472
  let header = Buffer.alloc(0);
821
473
  process.stdin.on('data', function receive(chunk) {
@@ -851,7 +503,7 @@ process.stdin.on('data', function receive(chunk) {
851
503
  process.stdin.pipe(child.stdin);
852
504
  });
853
505
  process.stdin.once('end', () => { if (header !== undefined) process.exit(1); });
854
- `;var dp=Math.floor(3.75*1024*1024);var up=1440*60*1e3;K();K();C();C();L();K();vn();Sn();Kn();Ee();xe();xe();var uF=1440*60*1e3;L();xe();C();var yF=5*6e4;Pt();Ln();Ln();xe();C();var dW=new Intl.Segmenter("zh-CN",{granularity:"word"});import{AsyncLocalStorage as ww}from"node:async_hooks";var pW=new ww;K();C();ke();L();C();C();L();var vU=String.raw`const TOOL_NAME = 'echo_tool';
506
+ `;var sp=Math.floor(3.75*1024*1024);var cp=1440*60*1e3;K();K();C();C();L();K();vn();bn();Bn();Ee();xe();xe();var aF=1440*60*1e3;L();xe();C();var mF=5*6e4;Mt();Dn();Dn();xe();C();var iW=new Intl.Segmenter("zh-CN",{granularity:"word"});import{AsyncLocalStorage as mw}from"node:async_hooks";var dW=new mw;K();C();ke();L();C();C();L();var gU=String.raw`const TOOL_NAME = 'echo_tool';
855
507
  const RESOURCE_URI = 'memory://guide';
856
508
  const PROMPT_NAME = 'draft_prompt';
857
509
  let buffer = '';
@@ -1031,19 +683,19 @@ process.stdin.on('data', (chunk) => {
1031
683
 
1032
684
  process.on('SIGTERM', () => process.exit(0));
1033
685
  process.on('SIGINT', () => process.exit(0));
1034
- `;Kn();var Ad=Object.freeze(["message","label","compaction","branch_summary","archive_marker","rewind_marker","artifact_ledger","memory_outcome_digest","memory_review_receipt"]),Fw=0,Ww=0,Rd=o(e=>{let t=e==="label"?++Fw:++Ww,n=Math.random().toString(36).slice(2,8);return`${e}-${Date.now()}-${t}-${n}`},"nextId");async function Uw(e,t,n){let r=Rd("label");return await e.append({id:r,ts:Date.now(),type:"label",payload:{targetId:t,label:n}}),r}o(Uw,"appendLabel");async function Bw(e,t,n){let r=Rd("artifact");return await e.append({id:r,ts:Date.now(),type:"artifact_ledger",payload:{ref:t,summary:n}}),r}o(Bw,"appendArtifact");function Kw(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(Kw,"buildLineageTree");var qw=Object.freeze({name:"lineage",entryTypes:Ad,operators:Object.freeze({label:o((async(e,...t)=>{let[n,r]=t;return Uw(e,n,r)}),"label"),attachArtifact:o((async(e,...t)=>{let[n,r]=t;return Bw(e,n,r)}),"attachArtifact")}),reducers:Object.freeze({buildLineageTree:o(e=>Kw(e),"buildLineageTree")})});K();L();var ey=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"]),ii=ey,Gn=`[\u5BF9\u8BDD\u5386\u53F2\u6458\u8981]
686
+ `;Bn();var Id=Object.freeze(["message","label","compaction","branch_summary","archive_marker","rewind_marker","artifact_ledger","memory_outcome_digest","memory_review_receipt"]),Dw=0,Lw=0,Ad=o(e=>{let t=e==="label"?++Dw:++Lw,n=Math.random().toString(36).slice(2,8);return`${e}-${Date.now()}-${t}-${n}`},"nextId");async function jw(e,t,n){let r=Ad("label");return await e.append({id:r,ts:Date.now(),type:"label",payload:{targetId:t,label:n}}),r}o(jw,"appendLabel");async function Fw(e,t,n){let r=Ad("artifact");return await e.append({id:r,ts:Date.now(),type:"artifact_ledger",payload:{ref:t,summary:n}}),r}o(Fw,"appendArtifact");function Ww(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(Ww,"buildLineageTree");var Uw=Object.freeze({name:"lineage",entryTypes:Id,operators:Object.freeze({label:o((async(e,...t)=>{let[n,r]=t;return jw(e,n,r)}),"label"),attachArtifact:o((async(e,...t)=>{let[n,r]=t;return Fw(e,n,r)}),"attachArtifact")}),reducers:Object.freeze({buildLineageTree:o(e=>Ww(e),"buildLineageTree")})});K();L();var Jw=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"]),ai=Jw,zn=`[\u5BF9\u8BDD\u5386\u53F2\u6458\u8981]
1035
687
 
1036
- `;var z2=Gn.trimEnd();var G2=16*1024;L();var ay={enabled:!1,maxAge:20,protectedTools:Array.from(ii)};import{createRequire as py}from"node:module";var my=py(import.meta.url),Nd,rq=new Proxy({},{get(e,t){return Nd??=my("typescript"),Reflect.get(Nd,t)}});K();var vH=new Intl.Segmenter("en",{granularity:"grapheme"});import{fileURLToPath as kX,pathToFileURL as Xy}from"node:url";function Oy(e){let t=e.code;return t==="ENOENT"||t==="ENOTDIR"}o(Oy,"isMissingGitTrustPath");function Ny(e,t,n){try{let r=t(e).replaceAll("\\","/").replace(/\/+$/,"");return r===""?void 0:/^[A-Za-z]:$/.test(r)?`${r}/`:r}catch(r){if(n(r))return;throw r}}o(Ny,"normalizeGitSafeDirectoryRootImplementation");function $y(e,t,n,r){try{let s=t(n.join(e,".git"));if(s.isDirectory()||s.isFile())return!0}catch(s){if(!r(s))throw s}if(!(n.basename(e).toLowerCase()===".git"||/[/\\]\.git[/\\]modules[/\\]/i.test(e)))return!1;try{return t(n.join(e,"HEAD")).isFile()}catch(s){if(r(s))return!1;throw s}}o($y,"isRepoBearingGitReadRootImplementation");function Dy(e,t,n,r,i){let s=[];typeof e=="string"&&e!==""&&s.push(e);for(let d of n??[])i(d)&&s.push(d);s.push(...t??[]);let a=[],c=new Set;for(let d of s){if(a.length>=8)break;let u=r(d);if(u===void 0)continue;let f=u.toLowerCase();c.has(f)||(c.add(f),a.push(u))}return a}o(Dy,"windowsGitTrustRootsImplementation");function Ly(e){if(e==="git_config_count")return"count";if(/^git_config_key_\d+$/.test(e))return"key";if(/^git_config_value_\d+$/.test(e))return"value"}o(Ly,"gitConfigEnvKind");function jy(e,t,n,r,i){let s=new Map,a=[],c,d=!1;for(let u=0;u<t;u+=1){if(e[u]!=="--env"||u+1>=t)continue;let f=e[u+1],p=f.indexOf("="),h=(p<0?f:f.slice(0,p)).toLowerCase(),m=n(h);if(m===void 0)continue;d=!0,a.push(u);let k=p<0?"":f.slice(p+1);if(m==="count"){let g=Number.parseInt(k,10);(c!==void 0||!Number.isSafeInteger(g)||g<0||String(g)!==k)&&r(),c=g;continue}let v=Number.parseInt(h.slice(`git_config_${m}_`.length),10),y=s.get(v)??{};(!Number.isSafeInteger(v)||v<0||y[m]!==void 0)&&r(),y[m]=k,s.set(v,y)}return i(s,a,c,d,r)}o(jy,"parseGitConfigEnvironmentImplementation");function Fy(){throw new Error("ASRT GIT_CONFIG environment has an unexpected shape.")}o(Fy,"throwUnexpectedGitConfigShape");function Wy(e,t,n,r,i){!r||n!==void 0&&e.size===n&&[...e].every(([c,d])=>c<n&&d.key!==void 0&&d.value!==void 0)||i();let a=[...e].map(([c,d])=>({slot:c,key:d.key,value:d.value}));return{argumentIndices:t,pairs:a,sawAny:r}}o(Wy,"finishParsedGitConfigEnvironment");function Uy(e,t){let n=[];for(let i of e)n.push({key:"safe.directory",value:i},{key:"safe.directory",value:`${i}/*`});n.push(...t);let r=n.flatMap((i,s)=>[`GIT_CONFIG_KEY_${s}=${i.key}`,`GIT_CONFIG_VALUE_${s}=${i.value}`]);return r.push(`GIT_CONFIG_COUNT=${n.length}`),r}o(Uy,"gitSafeDirectoryAssignments");function By(e,t,n,r){let i=new Set(n.argumentIndices),s=[],a=!1;for(let c=0;c<e.length;c+=1)if(i.has(c)){if(!a){for(let d of r)s.push("--env",d);a=!0}c+=1}else s.push(e[c]);return n.sawAny||s.splice(t,0,...r.flatMap(c=>["--env",c])),s}o(By,"replaceGitConfigEnvironment");function Ky(e,t,n,r,i){let s=e.lastIndexOf("--");if(s<0)throw new Error("ASRT Windows wrapper omitted its child separator.");let a=n(e,s),c=a.pairs.filter(u=>u.key.toLowerCase()!=="safe.directory").sort((u,f)=>u.slot-f.slot),d=r(t,c);return i(e,s,a,d)}o(Ky,"rewriteWindowsGitSafeDirectoryArgvImplementation");function Ld(){return String.raw`
1037
- const isMissingGitTrustPath = ${Oy.toString()};
1038
- const normalizeGitSafeDirectoryRootImplementation = ${Ny.toString()};
688
+ `;var z2=zn.trimEnd();var G2=16*1024;L();var ry={enabled:!1,maxAge:20,protectedTools:Array.from(ai)};import{createRequire as dy}from"node:module";var ly=dy(import.meta.url),Nd,rq=new Proxy({},{get(e,t){return Nd??=ly("typescript"),Reflect.get(Nd,t)}});K();var bH=new Intl.Segmenter("en",{granularity:"grapheme"});import{fileURLToPath as x3,pathToFileURL as qy}from"node:url";function Ty(e){let t=e.code;return t==="ENOENT"||t==="ENOTDIR"}o(Ty,"isMissingGitTrustPath");function Cy(e,t,n){try{let r=t(e).replaceAll("\\","/").replace(/\/+$/,"");return r===""?void 0:/^[A-Za-z]:$/.test(r)?`${r}/`:r}catch(r){if(n(r))return;throw r}}o(Cy,"normalizeGitSafeDirectoryRootImplementation");function Py(e,t,n,r){try{let s=t(n.join(e,".git"));if(s.isDirectory()||s.isFile())return!0}catch(s){if(!r(s))throw s}if(!(n.basename(e).toLowerCase()===".git"||/[/\\]\.git[/\\]modules[/\\]/i.test(e)))return!1;try{return t(n.join(e,"HEAD")).isFile()}catch(s){if(r(s))return!1;throw s}}o(Py,"isRepoBearingGitReadRootImplementation");function My(e,t,n,r,i){let s=[];typeof e=="string"&&e!==""&&s.push(e);for(let d of n??[])i(d)&&s.push(d);s.push(...t??[]);let a=[],c=new Set;for(let d of s){if(a.length>=8)break;let u=r(d);if(u===void 0)continue;let f=u.toLowerCase();c.has(f)||(c.add(f),a.push(u))}return a}o(My,"windowsGitTrustRootsImplementation");function Oy(e){if(e==="git_config_count")return"count";if(/^git_config_key_\d+$/.test(e))return"key";if(/^git_config_value_\d+$/.test(e))return"value"}o(Oy,"gitConfigEnvKind");function Ny(e,t,n,r,i){let s=new Map,a=[],c,d=!1;for(let u=0;u<t;u+=1){if(e[u]!=="--env"||u+1>=t)continue;let f=e[u+1],p=f.indexOf("="),h=(p<0?f:f.slice(0,p)).toLowerCase(),m=n(h);if(m===void 0)continue;d=!0,a.push(u);let k=p<0?"":f.slice(p+1);if(m==="count"){let g=Number.parseInt(k,10);(c!==void 0||!Number.isSafeInteger(g)||g<0||String(g)!==k)&&r(),c=g;continue}let b=Number.parseInt(h.slice(`git_config_${m}_`.length),10),y=s.get(b)??{};(!Number.isSafeInteger(b)||b<0||y[m]!==void 0)&&r(),y[m]=k,s.set(b,y)}return i(s,a,c,d,r)}o(Ny,"parseGitConfigEnvironmentImplementation");function $y(){throw new Error("ASRT GIT_CONFIG environment has an unexpected shape.")}o($y,"throwUnexpectedGitConfigShape");function Dy(e,t,n,r,i){!r||n!==void 0&&e.size===n&&[...e].every(([c,d])=>c<n&&d.key!==void 0&&d.value!==void 0)||i();let a=[...e].map(([c,d])=>({slot:c,key:d.key,value:d.value}));return{argumentIndices:t,pairs:a,sawAny:r}}o(Dy,"finishParsedGitConfigEnvironment");function Ly(e,t){let n=[];for(let i of e)n.push({key:"safe.directory",value:i},{key:"safe.directory",value:`${i}/*`});n.push(...t);let r=n.flatMap((i,s)=>[`GIT_CONFIG_KEY_${s}=${i.key}`,`GIT_CONFIG_VALUE_${s}=${i.value}`]);return r.push(`GIT_CONFIG_COUNT=${n.length}`),r}o(Ly,"gitSafeDirectoryAssignments");function jy(e,t,n,r){let i=new Set(n.argumentIndices),s=[],a=!1;for(let c=0;c<e.length;c+=1)if(i.has(c)){if(!a){for(let d of r)s.push("--env",d);a=!0}c+=1}else s.push(e[c]);return n.sawAny||s.splice(t,0,...r.flatMap(c=>["--env",c])),s}o(jy,"replaceGitConfigEnvironment");function Fy(e,t,n,r,i){let s=e.lastIndexOf("--");if(s<0)throw new Error("ASRT Windows wrapper omitted its child separator.");let a=n(e,s),c=a.pairs.filter(u=>u.key.toLowerCase()!=="safe.directory").sort((u,f)=>u.slot-f.slot),d=r(t,c);return i(e,s,a,d)}o(Fy,"rewriteWindowsGitSafeDirectoryArgvImplementation");function Ld(){return String.raw`
689
+ const isMissingGitTrustPath = ${Ty.toString()};
690
+ const normalizeGitSafeDirectoryRootImplementation = ${Cy.toString()};
1039
691
  const normalizeGitSafeDirectoryRoot = (root) => (
1040
692
  normalizeGitSafeDirectoryRootImplementation(root, realpathSync, isMissingGitTrustPath)
1041
693
  );
1042
- const isRepoBearingGitReadRootImplementation = ${$y.toString()};
694
+ const isRepoBearingGitReadRootImplementation = ${Py.toString()};
1043
695
  const isRepoBearingGitReadRoot = (root) => (
1044
696
  isRepoBearingGitReadRootImplementation(root, statSync, path, isMissingGitTrustPath)
1045
697
  );
1046
- const windowsGitTrustRootsImplementation = ${Dy.toString()};
698
+ const windowsGitTrustRootsImplementation = ${My.toString()};
1047
699
  const windowsGitTrustRoots = (input) => {
1048
700
  const filesystem = (input.config && input.config.filesystem) || {};
1049
701
  return windowsGitTrustRootsImplementation(
@@ -1054,10 +706,10 @@ const windowsGitTrustRoots = (input) => {
1054
706
  isRepoBearingGitReadRoot,
1055
707
  );
1056
708
  };
1057
- const gitConfigEnvKind = ${Ly.toString()};
1058
- const throwUnexpectedGitConfigShape = ${Fy.toString()};
1059
- const finishParsedGitConfigEnvironment = ${Wy.toString()};
1060
- const parseGitConfigEnvironmentImplementation = ${jy.toString()};
709
+ const gitConfigEnvKind = ${Oy.toString()};
710
+ const throwUnexpectedGitConfigShape = ${$y.toString()};
711
+ const finishParsedGitConfigEnvironment = ${Dy.toString()};
712
+ const parseGitConfigEnvironmentImplementation = ${Ny.toString()};
1061
713
  const parseGitConfigEnvironment = (argv, separator) => (
1062
714
  parseGitConfigEnvironmentImplementation(
1063
715
  argv,
@@ -1067,9 +719,9 @@ const parseGitConfigEnvironment = (argv, separator) => (
1067
719
  finishParsedGitConfigEnvironment,
1068
720
  )
1069
721
  );
1070
- const gitSafeDirectoryAssignments = ${Uy.toString()};
1071
- const replaceGitConfigEnvironment = ${By.toString()};
1072
- const rewriteWindowsGitSafeDirectoryArgvImplementation = ${Ky.toString()};
722
+ const gitSafeDirectoryAssignments = ${Ly.toString()};
723
+ const replaceGitConfigEnvironment = ${jy.toString()};
724
+ const rewriteWindowsGitSafeDirectoryArgvImplementation = ${Fy.toString()};
1073
725
  const rewriteWindowsGitSafeDirectoryArgv = (argv, trustRoots) => (
1074
726
  rewriteWindowsGitSafeDirectoryArgvImplementation(
1075
727
  argv,
@@ -1079,7 +731,7 @@ const rewriteWindowsGitSafeDirectoryArgv = (argv, trustRoots) => (
1079
731
  replaceGitConfigEnvironment,
1080
732
  )
1081
733
  );
1082
- `}o(Ld,"windowsGitBrokerHelpersSource");var l3=64*1024*1024;var jd=10;function Fd(e){let t=e.args.flatMap((a,c)=>a==="--"?[c]:[]);if(t.length===0)throw new Error("ASRT Windows invocation omitted its target separator.");if(t.length!==1)throw new Error("ASRT Windows invocation must contain exactly one target separator.");let n=t[0],r=e.args.slice(n+1);if(r.length===0||r[0]==="")throw new Error("ASRT Windows invocation omitted its target executable.");let i=new Map,s=[];for(let a=0;a<=n;a+=1){let c=e.args[a],d=c.toLowerCase();if(d.startsWith("--env="))throw new Error("ASRT Windows invocation used an unsupported inline environment entry.");if(d!=="--env"){s.push(c);continue}if(a+1>=n)throw new Error("ASRT Windows invocation contained an incomplete environment entry.");let u=e.args[a+1],f=u.indexOf("="),p=f<1?"":u.slice(0,f),h=f<0?"":u.slice(f+1),m=p.toLowerCase();if(p===""||p.includes("\0")||h.includes("\0"))throw new Error("ASRT Windows invocation contained an invalid environment entry.");i.set(m,[p,h]),a+=1}return{executable:e.executable,prefixArgs:s,targetArgv:r,childEnvironment:Object.fromEntries(i.values())}}o(Fd,"splitAsrtWindowsInvocation");var{SandboxManager:Xn,getSrtWinPath:RX,getWindowsSandboxUserStatus:Vy,installWindowsSandbox:TX,resolveSrtWin:Jy,uninstallWindowsSandbox:CX}=await import("@anthropic-ai/sandbox-runtime"),PX=1024*1024,MX=16*1024;var Yy=Gy(import.meta.url),OX=process.env.KODAX_BUNDLED==="true"?void 0:Xy(Yy.resolve("@anthropic-ai/sandbox-runtime")).href;var NX=[".ssh",".aws",".azure",".gnupg",".kube",".docker",".kodax",".agents",".codex",".claude",".gemini",".direnv",".terraform.d",S.join(".cargo","credentials.toml"),S.join(".config","gcloud"),S.join(".config","gh"),S.join(".config","openai"),S.join(".config","anthropic"),".gitconfig",S.join(".config","git","config"),".terraformrc",S.join(".config","pypoetry","auth.toml"),".condarc",".bashrc",".bash_profile",".zshrc",".zprofile",".profile",S.join(".config","fish","config.fish"),S.join(".config","fish","fish_variables"),".bash_history",".zsh_history",S.join(".m2","settings.xml"),S.join(".m2","settings-security.xml"),S.join(".gradle","gradle.properties"),S.join(".nuget","NuGet","NuGet.Config"),S.join(".pip","pip.conf"),S.join(".config","pip","pip.conf"),S.join(".cache","huggingface","token"),S.join(".huggingface","token"),S.join(".config","rclone","rclone.conf"),S.join(".local","share","keyrings"),S.join("Library","Keychains"),S.join("AppData","Roaming","Microsoft","Protect"),S.join("AppData","Roaming","Microsoft","Credentials"),S.join("AppData","Roaming","Microsoft","Vault"),S.join("AppData","Local","Microsoft","Credentials"),S.join("AppData","Local","Microsoft","Protect"),S.join("AppData","Local","Microsoft","Vault"),".password-store",".env",".envrc",".pgpass",".env.local",".env.development",".env.production",".env.test",".env.staging",".npmrc",".pypirc",".netrc",".git-credentials","credentials","credentials.json","application_default_credentials.json","id_rsa","id_dsa","id_ecdsa","id_ed25519"];var $X=JSON.stringify(Gr),DX=JSON.stringify(zr),Qy=String.raw`
734
+ `}o(Ld,"windowsGitBrokerHelpersSource");var uX=64*1024*1024;var jd=10;function Fd(e){let t=e.args.flatMap((a,c)=>a==="--"?[c]:[]);if(t.length===0)throw new Error("ASRT Windows invocation omitted its target separator.");if(t.length!==1)throw new Error("ASRT Windows invocation must contain exactly one target separator.");let n=t[0],r=e.args.slice(n+1);if(r.length===0||r[0]==="")throw new Error("ASRT Windows invocation omitted its target executable.");let i=new Map,s=[];for(let a=0;a<=n;a+=1){let c=e.args[a],d=c.toLowerCase();if(d.startsWith("--env="))throw new Error("ASRT Windows invocation used an unsupported inline environment entry.");if(d!=="--env"){s.push(c);continue}if(a+1>=n)throw new Error("ASRT Windows invocation contained an incomplete environment entry.");let u=e.args[a+1],f=u.indexOf("="),p=f<1?"":u.slice(0,f),h=f<0?"":u.slice(f+1),m=p.toLowerCase();if(p===""||p.includes("\0")||h.includes("\0"))throw new Error("ASRT Windows invocation contained an invalid environment entry.");i.set(m,[p,h]),a+=1}return{executable:e.executable,prefixArgs:s,targetArgv:r,childEnvironment:Object.fromEntries(i.values())}}o(Fd,"splitAsrtWindowsInvocation");var{SandboxManager:Gn,getSrtWinPath:T3,getWindowsSandboxUserStatus:Hy,installWindowsSandbox:C3,resolveSrtWin:zy,uninstallWindowsSandbox:P3}=await import("@anthropic-ai/sandbox-runtime"),M3=1024*1024,O3=16*1024;var Gy=Ky(import.meta.url),N3=process.env.KODAX_BUNDLED==="true"?void 0:qy(Gy.resolve("@anthropic-ai/sandbox-runtime")).href;var $3=[".ssh",".aws",".azure",".gnupg",".kube",".docker",".kodax",".agents",".codex",".claude",".gemini",".direnv",".terraform.d",S.join(".cargo","credentials.toml"),S.join(".config","gcloud"),S.join(".config","gh"),S.join(".config","openai"),S.join(".config","anthropic"),".gitconfig",S.join(".config","git","config"),".terraformrc",S.join(".config","pypoetry","auth.toml"),".condarc",".bashrc",".bash_profile",".zshrc",".zprofile",".profile",S.join(".config","fish","config.fish"),S.join(".config","fish","fish_variables"),".bash_history",".zsh_history",S.join(".m2","settings.xml"),S.join(".m2","settings-security.xml"),S.join(".gradle","gradle.properties"),S.join(".nuget","NuGet","NuGet.Config"),S.join(".pip","pip.conf"),S.join(".config","pip","pip.conf"),S.join(".cache","huggingface","token"),S.join(".huggingface","token"),S.join(".config","rclone","rclone.conf"),S.join(".local","share","keyrings"),S.join("Library","Keychains"),S.join("AppData","Roaming","Microsoft","Protect"),S.join("AppData","Roaming","Microsoft","Credentials"),S.join("AppData","Roaming","Microsoft","Vault"),S.join("AppData","Local","Microsoft","Credentials"),S.join("AppData","Local","Microsoft","Protect"),S.join("AppData","Local","Microsoft","Vault"),".password-store",".env",".envrc",".pgpass",".env.local",".env.development",".env.production",".env.test",".env.staging",".npmrc",".pypirc",".netrc",".git-credentials","credentials","credentials.json","application_default_credentials.json","id_rsa","id_dsa","id_ecdsa","id_ed25519"];var D3=JSON.stringify(Xr),L3=JSON.stringify(Gr),Xy=String.raw`
1083
735
  const { spawn } = require('node:child_process');
1084
736
  const { writeSync } = require('node:fs');
1085
737
  const input = JSON.parse(Buffer.from(process.argv[2], 'base64').toString('utf8'));
@@ -1110,7 +762,7 @@ child.once('error', (error) => {
1110
762
  child.once('exit', (code, signal) => {
1111
763
  process.exitCode = signal ? 1 : code ?? 1;
1112
764
  });
1113
- `,Zy="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",LX=JSON.stringify(Zy),eb=Buffer.from(Qy,"utf8").toString("base64"),jX=JSON.stringify(eb),FX=Ld(),WX=String.raw`
765
+ `,Vy="eval(Buffer.from(process.argv[1],'base64').toString('utf8'))",j3=JSON.stringify(Vy),Jy=Buffer.from(Xy,"utf8").toString("base64"),F3=JSON.stringify(Jy),W3=Ld(),U3=String.raw`
1114
766
  const { spawn } = require('node:child_process');
1115
767
  const { createWriteStream } = require('node:fs');
1116
768
  const { readFile, rm } = require('node:fs/promises');
@@ -1143,13 +795,13 @@ input.once('line', async (gate) => {
1143
795
  });
1144
796
  child.once('close', (code) => { process.exitCode = Number.isInteger(code) ? code : 1; });
1145
797
  });
1146
- `;function Bd(e){return e instanceof Error?e.message:String(e)}o(Bd,"errorText");var UX=1024*1024;function tb(e){let t=[];return e.provisioned||t.push("Windows sandbox account does not exist."),e.sid||t.push("Windows sandbox account SID is unavailable."),(!e.groupExists||!e.groupSid)&&t.push("Windows sandbox local group is unavailable."),e.inBuiltinUsers||t.push("Windows sandbox account is not in the built-in Users group."),e.inSandboxGroup||t.push("Windows sandbox account is not in the sandbox-runtime-users group."),e.hiddenFromLogon||t.push("Windows sandbox account is not hidden from interactive logon."),e.credPresent||t.push("Windows sandbox account credential is unavailable."),t}o(tb,"windowsSandboxAccountDiagnostics");var BX=String.raw`
798
+ `;function Bd(e){return e instanceof Error?e.message:String(e)}o(Bd,"errorText");var B3=1024*1024;function Yy(e){let t=[];return e.provisioned||t.push("Windows sandbox account does not exist."),e.sid||t.push("Windows sandbox account SID is unavailable."),(!e.groupExists||!e.groupSid)&&t.push("Windows sandbox local group is unavailable."),e.inBuiltinUsers||t.push("Windows sandbox account is not in the built-in Users group."),e.inSandboxGroup||t.push("Windows sandbox account is not in the sandbox-runtime-users group."),e.hiddenFromLogon||t.push("Windows sandbox account is not hidden from interactive logon."),e.credPresent||t.push("Windows sandbox account credential is unavailable."),t}o(Yy,"windowsSandboxAccountDiagnostics");var K3=String.raw`
1147
799
  $ErrorActionPreference = 'Stop'
1148
800
  $process = Start-Process -FilePath $env:KODAX_NATIVE_SETUP_EXE -ArgumentList @('__setup-account-capabilities', $env:KODAX_NATIVE_SETUP_ENVELOPE) -Verb RunAs -PassThru -WindowStyle Hidden
1149
801
  $process.WaitForExit()
1150
802
  $exitCode = $process.ExitCode
1151
803
  $process.Dispose()
1152
804
  exit $exitCode
1153
- `;function nb(){let e=["PATH","Path","PATHEXT","SystemRoot","COMSPEC","TEMP","TMP","HOME","USERPROFILE","LOCALAPPDATA","LANG"],t={NO_COLOR:"1"};for(let n of e)process.env[n]!==void 0&&(t[n]=process.env[n]);for(let[n,r]of Object.entries(process.env))n.startsWith("LC_")&&r!==void 0&&(t[n]=r);return rb(t)}o(nb,"sanitizedEnvironment");function rb(e){if(process.platform!=="win32")return{...e};let t=new Map;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n.toLowerCase(),[n,r]);return Object.fromEntries(t.values())}o(rb,"normalizedSandboxEnvironment");function Kd(e){zy(3,`${JSON.stringify(e)}
1154
- `)}o(Kd,"writeWindowsNetworkBrokerReady");async function ob(e){let t=qy(e,["__controller",String(process.pid)],{env:nb(),shell:!1,stdio:["pipe","pipe","pipe"],windowsHide:!0}),n=Buffer.alloc(0);t.stderr?.on("data",d=>{n=Buffer.concat([n,d]).subarray(-16*1024)});let r,i="",s,a=new Promise(d=>{s=d}),c={child:t,get pipe(){return i},exit:a,stderrTail:o(()=>n.toString("utf8"),"stderrTail"),stopping:!1};t.once("error",d=>{r=d}),t.once("close",(d,u)=>{let f={code:d,signal:u,...r===void 0?{}:{error:r}};c.outcome=f,s(f)});try{let d=t.stdout;if(d===null)throw new Error("Windows native controller stdout pipe was not created.");i=await new Promise((f,p)=>{let h=!1,m=Buffer.alloc(0),k=o(b=>{h||(h=!0,clearTimeout(w),d.off("data",g),t.off("error",v),t.off("exit",y),b())},"finish"),v=o(b=>k(()=>p(b)),"onError"),y=o(b=>k(()=>p(new Error(`Windows native controller exited ${String(b)} before readiness: ${c.stderrTail()}`))),"onExit"),g=o(b=>{if(m=Buffer.concat([m,b]),m.length>4096){k(()=>p(new Error("Windows native controller readiness exceeded 4 KiB.")));return}let R=m.indexOf(10);R>=0&&k(()=>f(m.subarray(0,R).toString("utf8").trim()))},"onData"),w=setTimeout(()=>k(()=>p(new Error("Windows native controller readiness timed out."))),1e4);w.unref(),d.on("data",g),t.once("error",v),t.once("exit",y)});let u=/^\\\\\.\\pipe\\kodax-v2-(\d+)-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.exec(i);if(u===null||t.pid===void 0||Number(u[1])!==t.pid)throw new Error("Windows native controller returned an unauthenticated pipe name.");return c}catch(d){try{await qd(c)}catch(u){throw new AggregateError([d,u],"Windows native controller startup and cleanup both failed.")}throw d}}o(ob,"startWindowsNativeController");async function qd(e){e.stopping=!0;let t=e.child.stdin;t!==null&&!t.destroyed&&await new Promise(r=>{let i=o(()=>r(),"finish");t.once("error",i),t.end(i)});let n=await Promise.race([e.exit.then(r=>({graceful:!0,outcome:r})),new Promise(r=>{setTimeout(()=>r(!1),5e3).unref()})]);if(n===!1)throw e.child.kill("SIGKILL"),await e.exit,new Error("Windows native controller did not exit within its cleanup budget.");if(n.outcome.error!==void 0||n.outcome.code!==0||n.outcome.signal!==null)throw new Error(`Windows native controller cleanup failed (code ${String(n.outcome.code)}, signal ${String(n.outcome.signal)}): ${e.stderrTail().trim()}`,n.outcome.error===void 0?void 0:{cause:n.outcome.error})}o(qd,"stopWindowsNativeController");async function Hd(e){let t,n,r=!1,i=[];try{let s=JSON.parse(await ai(e,"utf8"));if(await Ud(e,{force:!0}),s.version!==1||!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(s.setupGenerationNonce)||s.config.filesystem.disabled!==!0||!S.isAbsolute(s.cwd)||!S.isAbsolute(s.srtWinPath)||!/^[0-9a-f]{64}$/i.test(s.srtWinSha256)||!S.isAbsolute(s.controllerExecutable)||!/^[0-9a-f]{64}$/i.test(s.controllerSha256)||s.controllerProtocol!==jd||!/^S-\d+(?:-\d+)+$/i.test(s.expectedSandboxUserSid)||!/^S-\d+(?:-\d+)+$/i.test(s.expectedSandboxGroupSid))throw new Error("Windows network broker request is invalid or enables filesystem authority.");let a=await ai(s.srtWinPath);if(Wd("sha256").update(a).digest("hex")!==s.srtWinSha256.toLowerCase())throw new Error("ASRT Windows runner artifact changed before broker startup.");let c=await ai(s.controllerExecutable);if(Wd("sha256").update(c).digest("hex")!==s.controllerSha256.toLowerCase())throw new Error("Windows native controller artifact changed before broker startup.");let d=new Set(s.endpoints.map(y=>`${y.host.toLowerCase()}:${y.port}`)),u=s.allowAllNetwork?async()=>!0:d.size===0?void 0:async({host:y,port:g})=>g!==void 0&&d.has(`${y.toLowerCase()}:${g}`);await Xn.initialize(s.config,u);let f=`KODAX_WINDOWS_V2_${Hy()}`,p=await Xn.wrapWithSandboxArgv(`echo ${f}`,"cmd",void 0,void 0,s.cwd);if(p.argv.length<2||!p.argv.some(y=>y.includes(f)))throw new Error("ASRT Windows wrapper did not preserve the controlled target sentinel.");let h=Fd({executable:p.argv[0],args:p.argv.slice(1)}),m=Vy({srtWin:Jy({path:s.srtWinPath})});if(!m.sid||!m.groupSid||tb(m).length>0)throw new Error("Windows sandbox account is not ready for native shell execution.");if(m.sid.toUpperCase()!==s.expectedSandboxUserSid.toUpperCase()||m.groupSid.toUpperCase()!==s.expectedSandboxGroupSid.toUpperCase())throw new Error("Windows sandbox account changed while the network broker was starting.");t=await ob(s.controllerExecutable),Kd({version:1,ok:!0,asrtExecutable:h.executable,asrtPrefixArgs:h.prefixArgs,asrtChildEnvironment:h.childEnvironment,sandboxUserSid:m.sid,sandboxGroupSid:m.groupSid,controllerPipe:t.pipe}),r=!0;let k=new Promise(y=>{let g=!1,w=o(()=>{g||(g=!0,process.stdin.off("end",w),process.stdin.off("close",w),process.off("SIGINT",w),process.off("SIGTERM",w),process.stdin.pause(),y())},"finish");n=w,process.stdin.once("end",w),process.stdin.once("close",w),process.once("SIGINT",w),process.once("SIGTERM",w),process.stdin.readableEnded||process.stdin.destroyed?w():process.stdin.resume()}),v=t.exit.then(y=>{if(!t?.stopping)throw new Error(`Windows native controller exited while its broker was active (code ${String(y.code)}, signal ${String(y.signal)}): `+t.stderrTail().trim(),y.error===void 0?void 0:{cause:y.error})});if(await Promise.race([k,v]),t.outcome!==void 0&&!t.stopping)throw new Error("Windows native controller exited before broker shutdown completed.")}catch(s){if(!r)try{Kd({version:1,ok:!1,error:Bd(s)}),r=!0}catch(a){i.push(a)}i.push(s)}finally{if(n?.(),t!==void 0)try{await qd(t)}catch(s){i.push(s)}try{Xn.cleanupAfterCommand()}catch(s){i.push(s)}try{await Xn.reset()}catch(s){i.push(s)}try{await Ud(e,{force:!0})}catch(s){i.push(s)}}return i.length>0?(process.stderr.write(`Windows network broker failed: ${i.map(Bd).join(" | ")}
805
+ `;function Qy(){let e=["PATH","Path","PATHEXT","SystemRoot","COMSPEC","TEMP","TMP","HOME","USERPROFILE","LOCALAPPDATA","LANG"],t={NO_COLOR:"1"};for(let n of e)process.env[n]!==void 0&&(t[n]=process.env[n]);for(let[n,r]of Object.entries(process.env))n.startsWith("LC_")&&r!==void 0&&(t[n]=r);return Zy(t)}o(Qy,"sanitizedEnvironment");function Zy(e){if(process.platform!=="win32")return{...e};let t=new Map;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n.toLowerCase(),[n,r]);return Object.fromEntries(t.values())}o(Zy,"normalizedSandboxEnvironment");function Kd(e){By(3,`${JSON.stringify(e)}
806
+ `)}o(Kd,"writeWindowsNetworkBrokerReady");async function ev(e){let t=Wy(e,["__controller",String(process.pid)],{env:Qy(),shell:!1,stdio:["pipe","pipe","pipe"],windowsHide:!0}),n=Buffer.alloc(0);t.stderr?.on("data",d=>{n=Buffer.concat([n,d]).subarray(-16*1024)});let r,i="",s,a=new Promise(d=>{s=d}),c={child:t,get pipe(){return i},exit:a,stderrTail:o(()=>n.toString("utf8"),"stderrTail"),stopping:!1};t.once("error",d=>{r=d}),t.once("close",(d,u)=>{let f={code:d,signal:u,...r===void 0?{}:{error:r}};c.outcome=f,s(f)});try{let d=t.stdout;if(d===null)throw new Error("Windows native controller stdout pipe was not created.");i=await new Promise((f,p)=>{let h=!1,m=Buffer.alloc(0),k=o(v=>{h||(h=!0,clearTimeout(w),d.off("data",g),t.off("error",b),t.off("exit",y),v())},"finish"),b=o(v=>k(()=>p(v)),"onError"),y=o(v=>k(()=>p(new Error(`Windows native controller exited ${String(v)} before readiness: ${c.stderrTail()}`))),"onExit"),g=o(v=>{if(m=Buffer.concat([m,v]),m.length>4096){k(()=>p(new Error("Windows native controller readiness exceeded 4 KiB.")));return}let R=m.indexOf(10);R>=0&&k(()=>f(m.subarray(0,R).toString("utf8").trim()))},"onData"),w=setTimeout(()=>k(()=>p(new Error("Windows native controller readiness timed out."))),1e4);w.unref(),d.on("data",g),t.once("error",b),t.once("exit",y)});let u=/^\\\\\.\\pipe\\kodax-v2-(\d+)-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.exec(i);if(u===null||t.pid===void 0||Number(u[1])!==t.pid)throw new Error("Windows native controller returned an unauthenticated pipe name.");return c}catch(d){try{await qd(c)}catch(u){throw new AggregateError([d,u],"Windows native controller startup and cleanup both failed.")}throw d}}o(ev,"startWindowsNativeController");async function qd(e){e.stopping=!0;let t=e.child.stdin;t!==null&&!t.destroyed&&await new Promise(r=>{let i=o(()=>r(),"finish");t.once("error",i),t.end(i)});let n=await Promise.race([e.exit.then(r=>({graceful:!0,outcome:r})),new Promise(r=>{setTimeout(()=>r(!1),5e3).unref()})]);if(n===!1)throw e.child.kill("SIGKILL"),await e.exit,new Error("Windows native controller did not exit within its cleanup budget.");if(n.outcome.error!==void 0||n.outcome.code!==0||n.outcome.signal!==null)throw new Error(`Windows native controller cleanup failed (code ${String(n.outcome.code)}, signal ${String(n.outcome.signal)}): ${e.stderrTail().trim()}`,n.outcome.error===void 0?void 0:{cause:n.outcome.error})}o(qd,"stopWindowsNativeController");async function Hd(e){let t,n,r=!1,i=[];try{let s=JSON.parse(await di(e,"utf8"));if(await Ud(e,{force:!0}),s.version!==1||!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(s.setupGenerationNonce)||s.config.filesystem.disabled!==!0||!S.isAbsolute(s.cwd)||!S.isAbsolute(s.srtWinPath)||!/^[0-9a-f]{64}$/i.test(s.srtWinSha256)||!S.isAbsolute(s.controllerExecutable)||!/^[0-9a-f]{64}$/i.test(s.controllerSha256)||s.controllerProtocol!==jd||!/^S-\d+(?:-\d+)+$/i.test(s.expectedSandboxUserSid)||!/^S-\d+(?:-\d+)+$/i.test(s.expectedSandboxGroupSid))throw new Error("Windows network broker request is invalid or enables filesystem authority.");let a=await di(s.srtWinPath);if(Wd("sha256").update(a).digest("hex")!==s.srtWinSha256.toLowerCase())throw new Error("ASRT Windows runner artifact changed before broker startup.");let c=await di(s.controllerExecutable);if(Wd("sha256").update(c).digest("hex")!==s.controllerSha256.toLowerCase())throw new Error("Windows native controller artifact changed before broker startup.");let d=new Set(s.endpoints.map(y=>`${y.host.toLowerCase()}:${y.port}`)),u=s.allowAllNetwork?async()=>!0:d.size===0?void 0:async({host:y,port:g})=>g!==void 0&&d.has(`${y.toLowerCase()}:${g}`);await Gn.initialize(s.config,u);let f=`KODAX_WINDOWS_V2_${Uy()}`,p=await Gn.wrapWithSandboxArgv(`echo ${f}`,"cmd",void 0,void 0,s.cwd);if(p.argv.length<2||!p.argv.some(y=>y.includes(f)))throw new Error("ASRT Windows wrapper did not preserve the controlled target sentinel.");let h=Fd({executable:p.argv[0],args:p.argv.slice(1)}),m=Hy({srtWin:zy({path:s.srtWinPath})});if(!m.sid||!m.groupSid||Yy(m).length>0)throw new Error("Windows sandbox account is not ready for native shell execution.");if(m.sid.toUpperCase()!==s.expectedSandboxUserSid.toUpperCase()||m.groupSid.toUpperCase()!==s.expectedSandboxGroupSid.toUpperCase())throw new Error("Windows sandbox account changed while the network broker was starting.");t=await ev(s.controllerExecutable),Kd({version:1,ok:!0,asrtExecutable:h.executable,asrtPrefixArgs:h.prefixArgs,asrtChildEnvironment:h.childEnvironment,sandboxUserSid:m.sid,sandboxGroupSid:m.groupSid,controllerPipe:t.pipe}),r=!0;let k=new Promise(y=>{let g=!1,w=o(()=>{g||(g=!0,process.stdin.off("end",w),process.stdin.off("close",w),process.off("SIGINT",w),process.off("SIGTERM",w),process.stdin.pause(),y())},"finish");n=w,process.stdin.once("end",w),process.stdin.once("close",w),process.once("SIGINT",w),process.once("SIGTERM",w),process.stdin.readableEnded||process.stdin.destroyed?w():process.stdin.resume()}),b=t.exit.then(y=>{if(!t?.stopping)throw new Error(`Windows native controller exited while its broker was active (code ${String(y.code)}, signal ${String(y.signal)}): `+t.stderrTail().trim(),y.error===void 0?void 0:{cause:y.error})});if(await Promise.race([k,b]),t.outcome!==void 0&&!t.stopping)throw new Error("Windows native controller exited before broker shutdown completed.")}catch(s){if(!r)try{Kd({version:1,ok:!1,error:Bd(s)}),r=!0}catch(a){i.push(a)}i.push(s)}finally{if(n?.(),t!==void 0)try{await qd(t)}catch(s){i.push(s)}try{Gn.cleanupAfterCommand()}catch(s){i.push(s)}try{await Gn.reset()}catch(s){i.push(s)}try{await Ud(e,{force:!0})}catch(s){i.push(s)}}return i.length>0?(process.stderr.write(`Windows network broker failed: ${i.map(Bd).join(" | ")}
1155
807
  `),1):0}o(Hd,"runAsrtWindowsNetworkBrokerProcess");var zd=process.argv[2];if(!zd)throw new Error("Missing Windows ASRT network broker request file.");process.exitCode=await Hd(zd);