agent-skill-manager 2.3.0 → 2.5.0

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 (35) hide show
  1. package/README.md +25 -37
  2. package/data/bundles/content-writing.json +30 -0
  3. package/data/bundles/devops.json +30 -0
  4. package/data/bundles/frontend-dev.json +35 -0
  5. package/data/bundles/ios-release.json +30 -0
  6. package/data/skill-index/antonbabenko_terraform-skill.json +146 -0
  7. package/data/skill-index/google_skills.json +1790 -0
  8. package/data/skill-index/luongnv89_asm.json +73 -0
  9. package/data/skill-index-resources.json +28 -1
  10. package/dist/agent-skill-manager.js +442 -431
  11. package/dist/chunk-7BMOBFGJ.js +2 -0
  12. package/dist/chunk-GOI5LV72.js +3 -0
  13. package/dist/chunk-PVEAYTE2.js +3 -0
  14. package/dist/chunk-QY4LTOTR.js +19 -0
  15. package/dist/config-55HAAFSH.js +2 -0
  16. package/dist/devtools-W557IAG7.js +8 -0
  17. package/dist/lock-SOHBB4N3.js +2 -0
  18. package/dist/src-YK2KIAU7.js +108 -0
  19. package/package.json +55 -21
  20. package/scripts/postinstall.cjs +3 -7
  21. package/dist/chunk-76faq0t9.js +0 -93
  22. package/dist/chunk-83zxj8cj.js +0 -3
  23. package/dist/chunk-chw0sgjp.js +0 -3
  24. package/dist/chunk-dtg819nd.js +0 -19
  25. package/dist/highlights-eq9cgrbb.scm +0 -604
  26. package/dist/highlights-ghv9g403.scm +0 -205
  27. package/dist/highlights-hk7bwhj4.scm +0 -284
  28. package/dist/highlights-r812a2qc.scm +0 -150
  29. package/dist/highlights-x6tmsnaa.scm +0 -115
  30. package/dist/injections-73j83es3.scm +0 -27
  31. package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  32. package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
  33. package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  34. package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  35. package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
@@ -1,165 +1,166 @@
1
1
  #!/usr/bin/env node
2
- import{a as m0,b as v$,c as S6,d as b6}from"./chunk-83zxj8cj.js";import{A as Y1,B as N6,C as D6,D as P6,G as C6,H as E6,I as c,J as Q2,K as x6,M as f6,N as y6,O as Z6,P as X2,Q as k6,e as $0,f as J0,g as K2,h as o$,k as o,l as F6,m as e4,n as A6,o as I6,p as $2,q as T6,r as W,s as M6,t as n5,u as R6,v as q2,w as Z2,x as r4,y as j6,z as w6}from"./chunk-dtg819nd.js";import{$ as z0,R as g,S as N,T as v,U as _6,V as E,W as O6,X as h$,Y as A8,Z as m$,_ as Y6,aa as h,ba as L6}from"./chunk-chw0sgjp.js";var k=N((TZ)=>{var K1=Symbol.for("yaml.alias"),M2=Symbol.for("yaml.document"),e$=Symbol.for("yaml.map"),R2=Symbol.for("yaml.pair"),_1=Symbol.for("yaml.scalar"),$q=Symbol.for("yaml.seq"),K0=Symbol.for("yaml.node.type"),KZ=($)=>!!$&&typeof $==="object"&&$[K0]===K1,_Z=($)=>!!$&&typeof $==="object"&&$[K0]===M2,OZ=($)=>!!$&&typeof $==="object"&&$[K0]===e$,LZ=($)=>!!$&&typeof $==="object"&&$[K0]===R2,j2=($)=>!!$&&typeof $==="object"&&$[K0]===_1,FZ=($)=>!!$&&typeof $==="object"&&$[K0]===$q;function w2($){if($&&typeof $==="object")switch($[K0]){case e$:case $q:return!0}return!1}function AZ($){if($&&typeof $==="object")switch($[K0]){case K1:case e$:case _1:case $q:return!0}return!1}var IZ=($)=>(j2($)||w2($))&&!!$.anchor;TZ.ALIAS=K1;TZ.DOC=M2;TZ.MAP=e$;TZ.NODE_TYPE=K0;TZ.PAIR=R2;TZ.SCALAR=_1;TZ.SEQ=$q;TZ.hasAnchor=IZ;TZ.isAlias=KZ;TZ.isCollection=w2;TZ.isDocument=_Z;TZ.isMap=OZ;TZ.isNode=AZ;TZ.isPair=LZ;TZ.isScalar=j2;TZ.isSeq=FZ});var V$=N((hZ)=>{var m=k(),i=Symbol("break visit"),N2=Symbol("skip children"),U0=Symbol("remove node");function qq($,q){let Z=D2(q);if(m.isDocument($)){if(o0(null,$.contents,Z,Object.freeze([$]))===U0)$.contents=null}else o0(null,$,Z,Object.freeze([]))}qq.BREAK=i;qq.SKIP=N2;qq.REMOVE=U0;function o0($,q,Z,Q){let X=P2($,q,Z,Q);if(m.isNode(X)||m.isPair(X))return C2($,Q,X),o0($,X,Z,Q);if(typeof X!=="symbol"){if(m.isCollection(q)){Q=Object.freeze(Q.concat(q));for(let z=0;z<q.items.length;++z){let J=o0(z,q.items[z],Z,Q);if(typeof J==="number")z=J-1;else if(J===i)return i;else if(J===U0)q.items.splice(z,1),z-=1}}else if(m.isPair(q)){Q=Object.freeze(Q.concat(q));let z=o0("key",q.key,Z,Q);if(z===i)return i;else if(z===U0)q.key=null;let J=o0("value",q.value,Z,Q);if(J===i)return i;else if(J===U0)q.value=null}}return X}async function Zq($,q){let Z=D2(q);if(m.isDocument($)){if(await s0(null,$.contents,Z,Object.freeze([$]))===U0)$.contents=null}else await s0(null,$,Z,Object.freeze([]))}Zq.BREAK=i;Zq.SKIP=N2;Zq.REMOVE=U0;async function s0($,q,Z,Q){let X=await P2($,q,Z,Q);if(m.isNode(X)||m.isPair(X))return C2($,Q,X),s0($,X,Z,Q);if(typeof X!=="symbol"){if(m.isCollection(q)){Q=Object.freeze(Q.concat(q));for(let z=0;z<q.items.length;++z){let J=await s0(z,q.items[z],Z,Q);if(typeof J==="number")z=J-1;else if(J===i)return i;else if(J===U0)q.items.splice(z,1),z-=1}}else if(m.isPair(q)){Q=Object.freeze(Q.concat(q));let z=await s0("key",q.key,Z,Q);if(z===i)return i;else if(z===U0)q.key=null;let J=await s0("value",q.value,Z,Q);if(J===i)return i;else if(J===U0)q.value=null}}return X}function D2($){if(typeof $==="object"&&($.Collection||$.Node||$.Value))return Object.assign({Alias:$.Node,Map:$.Node,Scalar:$.Node,Seq:$.Node},$.Value&&{Map:$.Value,Scalar:$.Value,Seq:$.Value},$.Collection&&{Map:$.Collection,Seq:$.Collection},$);return $}function P2($,q,Z,Q){if(typeof Z==="function")return Z($,q,Q);if(m.isMap(q))return Z.Map?.($,q,Q);if(m.isSeq(q))return Z.Seq?.($,q,Q);if(m.isPair(q))return Z.Pair?.($,q,Q);if(m.isScalar(q))return Z.Scalar?.($,q,Q);if(m.isAlias(q))return Z.Alias?.($,q,Q);return}function C2($,q,Z){let Q=q[q.length-1];if(m.isCollection(Q))Q.items[$]=Z;else if(m.isPair(Q))if($==="key")Q.key=Z;else Q.value=Z;else if(m.isDocument(Q))Q.contents=Z;else{let X=m.isAlias(Q)?"alias":"scalar";throw Error(`Cannot replace node with ${X} parent`)}}hZ.visit=qq;hZ.visitAsync=Zq});var O1=N((cZ)=>{var E2=k(),mZ=V$(),pZ={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},dZ=($)=>$.replace(/[!,[\]{}]/g,(q)=>pZ[q]);class q0{constructor($,q){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},q0.defaultYaml,$),this.tags=Object.assign({},q0.defaultTags,q)}clone(){let $=new q0(this.yaml,this.tags);return $.docStart=this.docStart,$}atDocument(){let $=new q0(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:q0.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},q0.defaultTags);break}return $}add($,q){if(this.atNextDocument)this.yaml={explicit:q0.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},q0.defaultTags),this.atNextDocument=!1;let Z=$.trim().split(/[ \t]+/),Q=Z.shift();switch(Q){case"%TAG":{if(Z.length!==2){if(q(0,"%TAG directive should contain exactly two parts"),Z.length<2)return!1}let[X,z]=Z;return this.tags[X]=z,!0}case"%YAML":{if(this.yaml.explicit=!0,Z.length!==1)return q(0,"%YAML directive should contain exactly one part"),!1;let[X]=Z;if(X==="1.1"||X==="1.2")return this.yaml.version=X,!0;else{let z=/^\d+\.\d+$/.test(X);return q(6,`Unsupported YAML version ${X}`,z),!1}}default:return q(0,`Unknown directive ${Q}`,!0),!1}}tagName($,q){if($==="!")return"!";if($[0]!=="!")return q(`Not a valid tag: ${$}`),null;if($[1]==="<"){let z=$.slice(2,-1);if(z==="!"||z==="!!")return q(`Verbatim tags aren't resolved, so ${$} is invalid.`),null;if($[$.length-1]!==">")q("Verbatim tags must end with a >");return z}let[,Z,Q]=$.match(/^(.*!)([^!]*)$/s);if(!Q)q(`The ${$} tag has no suffix`);let X=this.tags[Z];if(X)try{return X+decodeURIComponent(Q)}catch(z){return q(String(z)),null}if(Z==="!")return $;return q(`Could not resolve tag: ${$}`),null}tagString($){for(let[q,Z]of Object.entries(this.tags))if($.startsWith(Z))return q+dZ($.substring(Z.length));return $[0]==="!"?$:`!<${$}>`}toString($){let q=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],Z=Object.entries(this.tags),Q;if($&&Z.length>0&&E2.isNode($.contents)){let X={};mZ.visit($.contents,(z,J)=>{if(E2.isNode(J)&&J.tag)X[J.tag]=!0}),Q=Object.keys(X)}else Q=[];for(let[X,z]of Z){if(X==="!!"&&z==="tag:yaml.org,2002:")continue;if(!$||Q.some((J)=>J.startsWith(z)))q.push(`%TAG ${X} ${z}`)}return q.join(`
3
- `)}}q0.defaultYaml={explicit:!1,version:"1.2"};q0.defaultTags={"!!":"tag:yaml.org,2002:"};cZ.Directives=q0});var Qq=N((oZ)=>{var S2=k(),nZ=V$();function aZ($){if(/[\x00-\x19\s,[\]{}]/.test($)){let Z=`Anchor must not contain whitespace or control characters: ${JSON.stringify($)}`;throw Error(Z)}return!0}function b2($){let q=new Set;return nZ.visit($,{Value(Z,Q){if(Q.anchor)q.add(Q.anchor)}}),q}function x2($,q){for(let Z=1;;++Z){let Q=`${$}${Z}`;if(!q.has(Q))return Q}}function iZ($,q){let Z=[],Q=new Map,X=null;return{onAnchor:(z)=>{Z.push(z),X??(X=b2($));let J=x2(q,X);return X.add(J),J},setAnchors:()=>{for(let z of Z){let J=Q.get(z);if(typeof J==="object"&&J.anchor&&(S2.isScalar(J.node)||S2.isCollection(J.node)))J.node.anchor=J.anchor;else{let Y=Error("Failed to resolve repeated object (this should not happen)");throw Y.source=z,Y}}},sourceObjects:Q}}oZ.anchorIsValid=aZ;oZ.anchorNames=b2;oZ.createNodeAnchors=iZ;oZ.findNewAnchor=x2});var L1=N(($3)=>{function H$($,q,Z,Q){if(Q&&typeof Q==="object")if(Array.isArray(Q))for(let X=0,z=Q.length;X<z;++X){let J=Q[X],Y=H$($,Q,String(X),J);if(Y===void 0)delete Q[X];else if(Y!==J)Q[X]=Y}else if(Q instanceof Map)for(let X of Array.from(Q.keys())){let z=Q.get(X),J=H$($,Q,X,z);if(J===void 0)Q.delete(X);else if(J!==z)Q.set(X,J)}else if(Q instanceof Set)for(let X of Array.from(Q)){let z=H$($,Q,X,X);if(z===void 0)Q.delete(X);else if(z!==X)Q.delete(X),Q.add(z)}else for(let[X,z]of Object.entries(Q)){let J=H$($,Q,X,z);if(J===void 0)delete Q[X];else if(J!==z)Q[X]=J}return $.call(q,Z,Q)}$3.applyReviver=H$});var L0=N((Q3)=>{var Z3=k();function f2($,q,Z){if(Array.isArray($))return $.map((Q,X)=>f2(Q,String(X),Z));if($&&typeof $.toJSON==="function"){if(!Z||!Z3.hasAnchor($))return $.toJSON(q,Z);let Q={aliasCount:0,count:1,res:void 0};Z.anchors.set($,Q),Z.onCreate=(z)=>{Q.res=z,delete Z.onCreate};let X=$.toJSON(q,Z);if(Z.onCreate)Z.onCreate(X);return X}if(typeof $==="bigint"&&!Z?.keep)return Number($);return $}Q3.toJS=f2});var Xq=N((Y3)=>{var z3=L1(),y2=k(),J3=L0();class k2{constructor($){Object.defineProperty(this,y2.NODE_TYPE,{value:$})}clone(){let $=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(this.range)$.range=this.range.slice();return $}toJS($,{mapAsMap:q,maxAliasCount:Z,onAnchor:Q,reviver:X}={}){if(!y2.isDocument($))throw TypeError("A document argument is required");let z={anchors:new Map,doc:$,keep:!0,mapAsMap:q===!0,mapKeyWarned:!1,maxAliasCount:typeof Z==="number"?Z:100},J=J3.toJS(this,"",z);if(typeof Q==="function")for(let{count:Y,res:G}of z.anchors.values())Q(G,Y);return typeof X==="function"?z3.applyReviver(X,{"":J},"",J):J}}Y3.NodeBase=k2});var B$=N((B3)=>{var U3=Qq(),W3=V$(),t0=k(),V3=Xq(),H3=L0();class v2 extends V3.NodeBase{constructor($){super(t0.ALIAS);this.source=$,Object.defineProperty(this,"tag",{set(){throw Error("Alias nodes cannot have tags")}})}resolve($,q){let Z;if(q?.aliasResolveCache)Z=q.aliasResolveCache;else if(Z=[],W3.visit($,{Node:(X,z)=>{if(t0.isAlias(z)||t0.hasAnchor(z))Z.push(z)}}),q)q.aliasResolveCache=Z;let Q=void 0;for(let X of Z){if(X===this)break;if(X.anchor===this.source)Q=X}return Q}toJSON($,q){if(!q)return{source:this.source};let{anchors:Z,doc:Q,maxAliasCount:X}=q,z=this.resolve(Q,q);if(!z){let Y=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(Y)}let J=Z.get(z);if(!J)H3.toJS(z,null,q),J=Z.get(z);if(J?.res===void 0)throw ReferenceError("This should not happen: Alias anchor was not resolved?");if(X>=0){if(J.count+=1,J.aliasCount===0)J.aliasCount=zq(Q,z,Z);if(J.count*J.aliasCount>X)throw ReferenceError("Excessive alias count indicates a resource exhaustion attack")}return J.res}toString($,q,Z){let Q=`*${this.source}`;if($){if(U3.anchorIsValid(this.source),$.options.verifyAliasOrder&&!$.anchors.has(this.source)){let X=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(X)}if($.implicitKey)return`${Q} `}return Q}}function zq($,q,Z){if(t0.isAlias(q)){let Q=q.resolve($),X=Z&&Q&&Z.get(Q);return X?X.count*X.aliasCount:0}else if(t0.isCollection(q)){let Q=0;for(let X of q.items){let z=zq($,X,Z);if(z>Q)Q=z}return Q}else if(t0.isPair(q)){let Q=zq($,q.key,Z),X=zq($,q.value,Z);return Math.max(Q,X)}return 1}B3.Alias=v2});var u=N((A3)=>{var _3=k(),O3=Xq(),L3=L0(),F3=($)=>!$||typeof $!=="function"&&typeof $!=="object";class x0 extends O3.NodeBase{constructor($){super(_3.SCALAR);this.value=$}toJSON($,q){return q?.keep?this.value:L3.toJS(this.value,$,q)}toString(){return String(this.value)}}x0.BLOCK_FOLDED="BLOCK_FOLDED";x0.BLOCK_LITERAL="BLOCK_LITERAL";x0.PLAIN="PLAIN";x0.QUOTE_DOUBLE="QUOTE_DOUBLE";x0.QUOTE_SINGLE="QUOTE_SINGLE";A3.Scalar=x0;A3.isScalarValue=F3});var K$=N((N3)=>{var M3=B$(),f0=k(),h2=u(),R3="tag:yaml.org,2002:";function j3($,q,Z){if(q){let Q=Z.filter((z)=>z.tag===q),X=Q.find((z)=>!z.format)??Q[0];if(!X)throw Error(`Tag ${q} not found`);return X}return Z.find((Q)=>Q.identify?.($)&&!Q.format)}function w3($,q,Z){if(f0.isDocument($))$=$.contents;if(f0.isNode($))return $;if(f0.isPair($)){let V=Z.schema[f0.MAP].createNode?.(Z.schema,null,Z);return V.items.push($),V}if($ instanceof String||$ instanceof Number||$ instanceof Boolean||typeof BigInt<"u"&&$ instanceof BigInt)$=$.valueOf();let{aliasDuplicateObjects:Q,onAnchor:X,onTagObj:z,schema:J,sourceObjects:Y}=Z,G=void 0;if(Q&&$&&typeof $==="object")if(G=Y.get($),G)return G.anchor??(G.anchor=X($)),new M3.Alias(G.anchor);else G={anchor:null,node:null},Y.set($,G);if(q?.startsWith("!!"))q=R3+q.slice(2);let U=j3($,q,J.tags);if(!U){if($&&typeof $.toJSON==="function")$=$.toJSON();if(!$||typeof $!=="object"){let V=new h2.Scalar($);if(G)G.node=V;return V}U=$ instanceof Map?J[f0.MAP]:(Symbol.iterator in Object($))?J[f0.SEQ]:J[f0.MAP]}if(z)z(U),delete Z.onTagObj;let H=U?.createNode?U.createNode(Z.schema,$,Z):typeof U?.nodeClass?.from==="function"?U.nodeClass.from(Z.schema,$,Z):new h2.Scalar($);if(q)H.tag=q;else if(!U.default)H.tag=U.tag;if(G)G.node=H;return H}N3.createNode=w3});var Jq=N((E3)=>{var P3=K$(),W0=k(),C3=Xq();function F1($,q,Z){let Q=Z;for(let X=q.length-1;X>=0;--X){let z=q[X];if(typeof z==="number"&&Number.isInteger(z)&&z>=0){let J=[];J[z]=Q,Q=J}else Q=new Map([[z,Q]])}return P3.createNode(Q,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error("This should not happen, please report a bug.")},schema:$,sourceObjects:new Map})}var g2=($)=>$==null||typeof $==="object"&&!!$[Symbol.iterator]().next().done;class u2 extends C3.NodeBase{constructor($,q){super($);Object.defineProperty(this,"schema",{value:q,configurable:!0,enumerable:!1,writable:!0})}clone($){let q=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if($)q.schema=$;if(q.items=q.items.map((Z)=>W0.isNode(Z)||W0.isPair(Z)?Z.clone($):Z),this.range)q.range=this.range.slice();return q}addIn($,q){if(g2($))this.add(q);else{let[Z,...Q]=$,X=this.get(Z,!0);if(W0.isCollection(X))X.addIn(Q,q);else if(X===void 0&&this.schema)this.set(Z,F1(this.schema,Q,q));else throw Error(`Expected YAML collection at ${Z}. Remaining path: ${Q}`)}}deleteIn($){let[q,...Z]=$;if(Z.length===0)return this.delete(q);let Q=this.get(q,!0);if(W0.isCollection(Q))return Q.deleteIn(Z);else throw Error(`Expected YAML collection at ${q}. Remaining path: ${Z}`)}getIn($,q){let[Z,...Q]=$,X=this.get(Z,!0);if(Q.length===0)return!q&&W0.isScalar(X)?X.value:X;else return W0.isCollection(X)?X.getIn(Q,q):void 0}hasAllNullValues($){return this.items.every((q)=>{if(!W0.isPair(q))return!1;let Z=q.value;return Z==null||$&&W0.isScalar(Z)&&Z.value==null&&!Z.commentBefore&&!Z.comment&&!Z.tag})}hasIn($){let[q,...Z]=$;if(Z.length===0)return this.has(q);let Q=this.get(q,!0);return W0.isCollection(Q)?Q.hasIn(Z):!1}setIn($,q){let[Z,...Q]=$;if(Q.length===0)this.set(Z,q);else{let X=this.get(Z,!0);if(W0.isCollection(X))X.setIn(Q,q);else if(X===void 0&&this.schema)this.set(Z,F1(this.schema,Q,q));else throw Error(`Expected YAML collection at ${Z}. Remaining path: ${Q}`)}}}E3.Collection=u2;E3.collectionFromPath=F1;E3.isEmptyPath=g2});var _$=N((k3)=>{var f3=($)=>$.replace(/^(?!$)(?: $)?/gm,"#");function A1($,q){if(/^\n+$/.test($))return $.substring(1);return q?$.replace(/^(?! *$)/gm,q):$}var y3=($,q,Z)=>$.endsWith(`
4
- `)?A1(Z,q):Z.includes(`
2
+ import { createRequire as __asmCreateRequire } from 'node:module'; const require = __asmCreateRequire(import.meta.url);
3
+ import{a as Le,b as ht,c as yo,d as bo}from"./chunk-PVEAYTE2.js";import{C as ho,D as go,E as J,F as Ii,G as wo,I as vo,J as ko,K as So,L as Li,M as $o,a as ie,b as ae,c as to,d as es,g as Q,h as so,i as Ci,j as io,k as no,l as Ei,m as ro,n as u,o as oo,p as ao,q as lo,r as Ai,s as Pi,t as Ni,u as co,v as uo,w as ts,x as fo,y as po,z as mo}from"./chunk-QY4LTOTR.js";import{a as zr,b as N,c as Qr,d as pt,e as Xr,f as mt,g as Zr,j as oe,k as q,l as eo}from"./chunk-GOI5LV72.js";import{a as Zt,b as A,d as Wr}from"./chunk-7BMOBFGJ.js";var D=A(H=>{"use strict";var qi=Symbol.for("yaml.alias"),Do=Symbol.for("yaml.document"),ls=Symbol.for("yaml.map"),_o=Symbol.for("yaml.pair"),Fi=Symbol.for("yaml.scalar"),cs=Symbol.for("yaml.seq"),me=Symbol.for("yaml.node.type"),Uf=e=>!!e&&typeof e=="object"&&e[me]===qi,Vf=e=>!!e&&typeof e=="object"&&e[me]===Do,Kf=e=>!!e&&typeof e=="object"&&e[me]===ls,Jf=e=>!!e&&typeof e=="object"&&e[me]===_o,qo=e=>!!e&&typeof e=="object"&&e[me]===Fi,Hf=e=>!!e&&typeof e=="object"&&e[me]===cs;function Fo(e){if(e&&typeof e=="object")switch(e[me]){case ls:case cs:return!0}return!1}function Yf(e){if(e&&typeof e=="object")switch(e[me]){case qi:case ls:case Fi:case cs:return!0}return!1}var Gf=e=>(qo(e)||Fo(e))&&!!e.anchor;H.ALIAS=qi;H.DOC=Do;H.MAP=ls;H.NODE_TYPE=me;H.PAIR=_o;H.SCALAR=Fi;H.SEQ=cs;H.hasAnchor=Gf;H.isAlias=Uf;H.isCollection=Fo;H.isDocument=Vf;H.isMap=Kf;H.isNode=Yf;H.isPair=Jf;H.isScalar=qo;H.isSeq=Hf});var gt=A(ji=>{"use strict";var B=D(),X=Symbol("break visit"),jo=Symbol("skip children"),ue=Symbol("remove node");function us(e,t){let s=Bo(t);B.isDocument(e)?Qe(null,e.contents,s,Object.freeze([e]))===ue&&(e.contents=null):Qe(null,e,s,Object.freeze([]))}us.BREAK=X;us.SKIP=jo;us.REMOVE=ue;function Qe(e,t,s,i){let n=Uo(e,t,s,i);if(B.isNode(n)||B.isPair(n))return Vo(e,i,n),Qe(e,n,s,i);if(typeof n!="symbol"){if(B.isCollection(t)){i=Object.freeze(i.concat(t));for(let r=0;r<t.items.length;++r){let o=Qe(r,t.items[r],s,i);if(typeof o=="number")r=o-1;else{if(o===X)return X;o===ue&&(t.items.splice(r,1),r-=1)}}}else if(B.isPair(t)){i=Object.freeze(i.concat(t));let r=Qe("key",t.key,s,i);if(r===X)return X;r===ue&&(t.key=null);let o=Qe("value",t.value,s,i);if(o===X)return X;o===ue&&(t.value=null)}}return n}async function fs(e,t){let s=Bo(t);B.isDocument(e)?await Xe(null,e.contents,s,Object.freeze([e]))===ue&&(e.contents=null):await Xe(null,e,s,Object.freeze([]))}fs.BREAK=X;fs.SKIP=jo;fs.REMOVE=ue;async function Xe(e,t,s,i){let n=await Uo(e,t,s,i);if(B.isNode(n)||B.isPair(n))return Vo(e,i,n),Xe(e,n,s,i);if(typeof n!="symbol"){if(B.isCollection(t)){i=Object.freeze(i.concat(t));for(let r=0;r<t.items.length;++r){let o=await Xe(r,t.items[r],s,i);if(typeof o=="number")r=o-1;else{if(o===X)return X;o===ue&&(t.items.splice(r,1),r-=1)}}}else if(B.isPair(t)){i=Object.freeze(i.concat(t));let r=await Xe("key",t.key,s,i);if(r===X)return X;r===ue&&(t.key=null);let o=await Xe("value",t.value,s,i);if(o===X)return X;o===ue&&(t.value=null)}}return n}function Bo(e){return typeof e=="object"&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}function Uo(e,t,s,i){if(typeof s=="function")return s(e,t,i);if(B.isMap(t))return s.Map?.(e,t,i);if(B.isSeq(t))return s.Seq?.(e,t,i);if(B.isPair(t))return s.Pair?.(e,t,i);if(B.isScalar(t))return s.Scalar?.(e,t,i);if(B.isAlias(t))return s.Alias?.(e,t,i)}function Vo(e,t,s){let i=t[t.length-1];if(B.isCollection(i))i.items[e]=s;else if(B.isPair(i))e==="key"?i.key=s:i.value=s;else if(B.isDocument(i))i.contents=s;else{let n=B.isAlias(i)?"alias":"scalar";throw new Error(`Cannot replace node with ${n} parent`)}}ji.visit=us;ji.visitAsync=fs});var Bi=A(Jo=>{"use strict";var Ko=D(),Wf=gt(),zf={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},Qf=e=>e.replace(/[!,[\]{}]/g,t=>zf[t]),yt=class e{constructor(t,s){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,s)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,s){this.atNextDocument&&(this.yaml={explicit:e.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},e.defaultTags),this.atNextDocument=!1);let i=t.trim().split(/[ \t]+/),n=i.shift();switch(n){case"%TAG":{if(i.length!==2&&(s(0,"%TAG directive should contain exactly two parts"),i.length<2))return!1;let[r,o]=i;return this.tags[r]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,i.length!==1)return s(0,"%YAML directive should contain exactly one part"),!1;let[r]=i;if(r==="1.1"||r==="1.2")return this.yaml.version=r,!0;{let o=/^\d+\.\d+$/.test(r);return s(6,`Unsupported YAML version ${r}`,o),!1}}default:return s(0,`Unknown directive ${n}`,!0),!1}}tagName(t,s){if(t==="!")return"!";if(t[0]!=="!")return s(`Not a valid tag: ${t}`),null;if(t[1]==="<"){let o=t.slice(2,-1);return o==="!"||o==="!!"?(s(`Verbatim tags aren't resolved, so ${t} is invalid.`),null):(t[t.length-1]!==">"&&s("Verbatim tags must end with a >"),o)}let[,i,n]=t.match(/^(.*!)([^!]*)$/s);n||s(`The ${t} tag has no suffix`);let r=this.tags[i];if(r)try{return r+decodeURIComponent(n)}catch(o){return s(String(o)),null}return i==="!"?t:(s(`Could not resolve tag: ${t}`),null)}tagString(t){for(let[s,i]of Object.entries(this.tags))if(t.startsWith(i))return s+Qf(t.substring(i.length));return t[0]==="!"?t:`!<${t}>`}toString(t){let s=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],i=Object.entries(this.tags),n;if(t&&i.length>0&&Ko.isNode(t.contents)){let r={};Wf.visit(t.contents,(o,a)=>{Ko.isNode(a)&&a.tag&&(r[a.tag]=!0)}),n=Object.keys(r)}else n=[];for(let[r,o]of i)r==="!!"&&o==="tag:yaml.org,2002:"||(!t||n.some(a=>a.startsWith(o)))&&s.push(`%TAG ${r} ${o}`);return s.join(`
4
+ `)}};yt.defaultYaml={explicit:!1,version:"1.2"};yt.defaultTags={"!!":"tag:yaml.org,2002:"};Jo.Directives=yt});var ds=A(bt=>{"use strict";var Ho=D(),Xf=gt();function Zf(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let s=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw new Error(s)}return!0}function Yo(e){let t=new Set;return Xf.visit(e,{Value(s,i){i.anchor&&t.add(i.anchor)}}),t}function Go(e,t){for(let s=1;;++s){let i=`${e}${s}`;if(!t.has(i))return i}}function ed(e,t){let s=[],i=new Map,n=null;return{onAnchor:r=>{s.push(r),n??(n=Yo(e));let o=Go(t,n);return n.add(o),o},setAnchors:()=>{for(let r of s){let o=i.get(r);if(typeof o=="object"&&o.anchor&&(Ho.isScalar(o.node)||Ho.isCollection(o.node)))o.node.anchor=o.anchor;else{let a=new Error("Failed to resolve repeated object (this should not happen)");throw a.source=r,a}}},sourceObjects:i}}bt.anchorIsValid=Zf;bt.anchorNames=Yo;bt.createNodeAnchors=ed;bt.findNewAnchor=Go});var Ui=A(Wo=>{"use strict";function wt(e,t,s,i){if(i&&typeof i=="object")if(Array.isArray(i))for(let n=0,r=i.length;n<r;++n){let o=i[n],a=wt(e,i,String(n),o);a===void 0?delete i[n]:a!==o&&(i[n]=a)}else if(i instanceof Map)for(let n of Array.from(i.keys())){let r=i.get(n),o=wt(e,i,n,r);o===void 0?i.delete(n):o!==r&&i.set(n,o)}else if(i instanceof Set)for(let n of Array.from(i)){let r=wt(e,i,n,n);r===void 0?i.delete(n):r!==n&&(i.delete(n),i.add(r))}else for(let[n,r]of Object.entries(i)){let o=wt(e,i,n,r);o===void 0?delete i[n]:o!==r&&(i[n]=o)}return e.call(t,s,i)}Wo.applyReviver=wt});var be=A(Qo=>{"use strict";var td=D();function zo(e,t,s){if(Array.isArray(e))return e.map((i,n)=>zo(i,String(n),s));if(e&&typeof e.toJSON=="function"){if(!s||!td.hasAnchor(e))return e.toJSON(t,s);let i={aliasCount:0,count:1,res:void 0};s.anchors.set(e,i),s.onCreate=r=>{i.res=r,delete s.onCreate};let n=e.toJSON(t,s);return s.onCreate&&s.onCreate(n),n}return typeof e=="bigint"&&!s?.keep?Number(e):e}Qo.toJS=zo});var ps=A(Zo=>{"use strict";var sd=Ui(),Xo=D(),id=be(),Vi=class{constructor(t){Object.defineProperty(this,Xo.NODE_TYPE,{value:t})}clone(){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(t.range=this.range.slice()),t}toJS(t,{mapAsMap:s,maxAliasCount:i,onAnchor:n,reviver:r}={}){if(!Xo.isDocument(t))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:t,keep:!0,mapAsMap:s===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},a=id.toJS(this,"",o);if(typeof n=="function")for(let{count:l,res:c}of o.anchors.values())n(c,l);return typeof r=="function"?sd.applyReviver(r,{"":a},"",a):a}};Zo.NodeBase=Vi});var vt=A(ea=>{"use strict";var nd=ds(),rd=gt(),Ze=D(),od=ps(),ad=be(),Ki=class extends od.NodeBase{constructor(t){super(Ze.ALIAS),this.source=t,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(t,s){let i;s?.aliasResolveCache?i=s.aliasResolveCache:(i=[],rd.visit(t,{Node:(r,o)=>{(Ze.isAlias(o)||Ze.hasAnchor(o))&&i.push(o)}}),s&&(s.aliasResolveCache=i));let n;for(let r of i){if(r===this)break;r.anchor===this.source&&(n=r)}return n}toJSON(t,s){if(!s)return{source:this.source};let{anchors:i,doc:n,maxAliasCount:r}=s,o=this.resolve(n,s);if(!o){let l=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(l)}let a=i.get(o);if(a||(ad.toJS(o,null,s),a=i.get(o)),a?.res===void 0){let l="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(l)}if(r>=0&&(a.count+=1,a.aliasCount===0&&(a.aliasCount=ms(n,o,i)),a.count*a.aliasCount>r)){let l="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(l)}return a.res}toString(t,s,i){let n=`*${this.source}`;if(t){if(nd.anchorIsValid(this.source),t.options.verifyAliasOrder&&!t.anchors.has(this.source)){let r=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(r)}if(t.implicitKey)return`${n} `}return n}};function ms(e,t,s){if(Ze.isAlias(t)){let i=t.resolve(e),n=s&&i&&s.get(i);return n?n.count*n.aliasCount:0}else if(Ze.isCollection(t)){let i=0;for(let n of t.items){let r=ms(e,n,s);r>i&&(i=r)}return i}else if(Ze.isPair(t)){let i=ms(e,t.key,s),n=ms(e,t.value,s);return Math.max(i,n)}return 1}ea.Alias=Ki});var F=A(Ji=>{"use strict";var ld=D(),cd=ps(),ud=be(),fd=e=>!e||typeof e!="function"&&typeof e!="object",we=class extends cd.NodeBase{constructor(t){super(ld.SCALAR),this.value=t}toJSON(t,s){return s?.keep?this.value:ud.toJS(this.value,t,s)}toString(){return String(this.value)}};we.BLOCK_FOLDED="BLOCK_FOLDED";we.BLOCK_LITERAL="BLOCK_LITERAL";we.PLAIN="PLAIN";we.QUOTE_DOUBLE="QUOTE_DOUBLE";we.QUOTE_SINGLE="QUOTE_SINGLE";Ji.Scalar=we;Ji.isScalarValue=fd});var kt=A(sa=>{"use strict";var dd=vt(),qe=D(),ta=F(),pd="tag:yaml.org,2002:";function md(e,t,s){if(t){let i=s.filter(r=>r.tag===t),n=i.find(r=>!r.format)??i[0];if(!n)throw new Error(`Tag ${t} not found`);return n}return s.find(i=>i.identify?.(e)&&!i.format)}function hd(e,t,s){if(qe.isDocument(e)&&(e=e.contents),qe.isNode(e))return e;if(qe.isPair(e)){let f=s.schema[qe.MAP].createNode?.(s.schema,null,s);return f.items.push(e),f}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<"u"&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:i,onAnchor:n,onTagObj:r,schema:o,sourceObjects:a}=s,l;if(i&&e&&typeof e=="object"){if(l=a.get(e),l)return l.anchor??(l.anchor=n(e)),new dd.Alias(l.anchor);l={anchor:null,node:null},a.set(e,l)}t?.startsWith("!!")&&(t=pd+t.slice(2));let c=md(e,t,o.tags);if(!c){if(e&&typeof e.toJSON=="function"&&(e=e.toJSON()),!e||typeof e!="object"){let f=new ta.Scalar(e);return l&&(l.node=f),f}c=e instanceof Map?o[qe.MAP]:Symbol.iterator in Object(e)?o[qe.SEQ]:o[qe.MAP]}r&&(r(c),delete s.onTagObj);let d=c?.createNode?c.createNode(s.schema,e,s):typeof c?.nodeClass?.from=="function"?c.nodeClass.from(s.schema,e,s):new ta.Scalar(e);return t?d.tag=t:c.default||(d.tag=c.tag),l&&(l.node=d),d}sa.createNode=hd});var gs=A(hs=>{"use strict";var gd=kt(),fe=D(),yd=ps();function Hi(e,t,s){let i=s;for(let n=t.length-1;n>=0;--n){let r=t[n];if(typeof r=="number"&&Number.isInteger(r)&&r>=0){let o=[];o[r]=i,i=o}else i=new Map([[r,i]])}return gd.createNode(i,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:e,sourceObjects:new Map})}var ia=e=>e==null||typeof e=="object"&&!!e[Symbol.iterator]().next().done,Yi=class extends yd.NodeBase{constructor(t,s){super(t),Object.defineProperty(this,"schema",{value:s,configurable:!0,enumerable:!1,writable:!0})}clone(t){let s=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return t&&(s.schema=t),s.items=s.items.map(i=>fe.isNode(i)||fe.isPair(i)?i.clone(t):i),this.range&&(s.range=this.range.slice()),s}addIn(t,s){if(ia(t))this.add(s);else{let[i,...n]=t,r=this.get(i,!0);if(fe.isCollection(r))r.addIn(n,s);else if(r===void 0&&this.schema)this.set(i,Hi(this.schema,n,s));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}deleteIn(t){let[s,...i]=t;if(i.length===0)return this.delete(s);let n=this.get(s,!0);if(fe.isCollection(n))return n.deleteIn(i);throw new Error(`Expected YAML collection at ${s}. Remaining path: ${i}`)}getIn(t,s){let[i,...n]=t,r=this.get(i,!0);return n.length===0?!s&&fe.isScalar(r)?r.value:r:fe.isCollection(r)?r.getIn(n,s):void 0}hasAllNullValues(t){return this.items.every(s=>{if(!fe.isPair(s))return!1;let i=s.value;return i==null||t&&fe.isScalar(i)&&i.value==null&&!i.commentBefore&&!i.comment&&!i.tag})}hasIn(t){let[s,...i]=t;if(i.length===0)return this.has(s);let n=this.get(s,!0);return fe.isCollection(n)?n.hasIn(i):!1}setIn(t,s){let[i,...n]=t;if(n.length===0)this.set(i,s);else{let r=this.get(i,!0);if(fe.isCollection(r))r.setIn(n,s);else if(r===void 0&&this.schema)this.set(i,Hi(this.schema,n,s));else throw new Error(`Expected YAML collection at ${i}. Remaining path: ${n}`)}}};hs.Collection=Yi;hs.collectionFromPath=Hi;hs.isEmptyPath=ia});var St=A(ys=>{"use strict";var bd=e=>e.replace(/^(?!$)(?: $)?/gm,"#");function Gi(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}var wd=(e,t,s)=>e.endsWith(`
5
+ `)?Gi(s,t):s.includes(`
5
6
  `)?`
6
- `+A1(Z,q):($.endsWith(" ")?"":" ")+Z;k3.indentComment=A1;k3.lineComment=y3;k3.stringifyComment=f3});var p2=N((m3)=>{function u3($,q,Z="flow",{indentAtStart:Q,lineWidth:X=80,minContentWidth:z=20,onFold:J,onOverflow:Y}={}){if(!X||X<0)return $;if(X<z)z=0;let G=Math.max(1+z,1+X-q.length);if($.length<=G)return $;let U=[],H={},V=X-q.length;if(typeof Q==="number")if(Q>X-Math.max(2,z))U.push(0);else V=X-Q;let B=void 0,_=void 0,O=!1,K=-1,L=-1,F=-1;if(Z==="block"){if(K=m2($,K,q.length),K!==-1)V=K+G}for(let M;M=$[K+=1];){if(Z==="quoted"&&M==="\\"){switch(L=K,$[K+1]){case"x":K+=3;break;case"u":K+=5;break;case"U":K+=9;break;default:K+=1}F=K}if(M===`
7
- `){if(Z==="block")K=m2($,K,q.length);V=K+q.length+G,B=void 0}else{if(M===" "&&_&&_!==" "&&_!==`
8
- `&&_!=="\t"){let j=$[K+1];if(j&&j!==" "&&j!==`
9
- `&&j!=="\t")B=K}if(K>=V)if(B)U.push(B),V=B+G,B=void 0;else if(Z==="quoted"){while(_===" "||_==="\t")_=M,M=$[K+=1],O=!0;let j=K>F+1?K-2:L-1;if(H[j])return $;U.push(j),H[j]=!0,V=j+G,B=void 0}else O=!0}_=M}if(O&&Y)Y();if(U.length===0)return $;if(J)J();let A=$.slice(0,U[0]);for(let M=0;M<U.length;++M){let j=U[M],T=U[M+1]||$.length;if(j===0)A=`
10
- ${q}${$.slice(0,T)}`;else{if(Z==="quoted"&&H[j])A+=`${$[j]}\\`;A+=`
11
- ${q}${$.slice(j+1,T)}`}}return A}function m2($,q,Z){let Q=q,X=q+1,z=$[X];while(z===" "||z==="\t")if(q<X+Z)z=$[++q];else{do z=$[++q];while(z&&z!==`
12
- `);Q=q,X=q+1,z=$[X]}return Q}m3.FOLD_BLOCK="block";m3.FOLD_FLOW="flow";m3.FOLD_QUOTED="quoted";m3.foldFlowLines=u3});var L$=N((o3)=>{var Y0=u(),F0=p2(),Gq=($,q)=>({indentAtStart:q?$.indent.length:$.indentAtStart,lineWidth:$.options.lineWidth,minContentWidth:$.options.minContentWidth}),Uq=($)=>/^(%|---|\.\.\.)/m.test($);function n3($,q,Z){if(!q||q<0)return!1;let Q=q-Z,X=$.length;if(X<=Q)return!1;for(let z=0,J=0;z<X;++z)if($[z]===`
13
- `){if(z-J>Q)return!0;if(J=z+1,X-J<=Q)return!1}return!0}function O$($,q){let Z=JSON.stringify($);if(q.options.doubleQuotedAsJSON)return Z;let{implicitKey:Q}=q,X=q.options.doubleQuotedMinMultiLineLength,z=q.indent||(Uq($)?" ":""),J="",Y=0;for(let G=0,U=Z[G];U;U=Z[++G]){if(U===" "&&Z[G+1]==="\\"&&Z[G+2]==="n")J+=Z.slice(Y,G)+"\\ ",G+=1,Y=G,U="\\";if(U==="\\")switch(Z[G+1]){case"u":{J+=Z.slice(Y,G);let H=Z.substr(G+2,4);switch(H){case"0000":J+="\\0";break;case"0007":J+="\\a";break;case"000b":J+="\\v";break;case"001b":J+="\\e";break;case"0085":J+="\\N";break;case"00a0":J+="\\_";break;case"2028":J+="\\L";break;case"2029":J+="\\P";break;default:if(H.substr(0,2)==="00")J+="\\x"+H.substr(2);else J+=Z.substr(G,6)}G+=5,Y=G+1}break;case"n":if(Q||Z[G+2]==='"'||Z.length<X)G+=1;else{J+=Z.slice(Y,G)+`
14
-
15
- `;while(Z[G+2]==="\\"&&Z[G+3]==="n"&&Z[G+4]!=='"')J+=`
16
- `,G+=2;if(J+=z,Z[G+2]===" ")J+="\\";G+=1,Y=G+1}break;default:G+=1}}return J=Y?J+Z.slice(Y):Z,Q?J:F0.foldFlowLines(J,z,F0.FOLD_QUOTED,Gq(q,!1))}function I1($,q){if(q.options.singleQuote===!1||q.implicitKey&&$.includes(`
17
- `)||/[ \t]\n|\n[ \t]/.test($))return O$($,q);let Z=q.indent||(Uq($)?" ":""),Q="'"+$.replace(/'/g,"''").replace(/\n+/g,`$&
18
- ${Z}`)+"'";return q.implicitKey?Q:F0.foldFlowLines(Q,Z,F0.FOLD_FLOW,Gq(q,!1))}function r0($,q){let{singleQuote:Z}=q.options,Q;if(Z===!1)Q=O$;else{let X=$.includes('"'),z=$.includes("'");if(X&&!z)Q=I1;else if(z&&!X)Q=O$;else Q=Z?I1:O$}return Q($,q)}var T1;try{T1=new RegExp(`(^|(?<!
7
+ `+Gi(s,t):(e.endsWith(" ")?"":" ")+s;ys.indentComment=Gi;ys.lineComment=wd;ys.stringifyComment=bd});var ra=A($t=>{"use strict";var vd="flow",Wi="block",bs="quoted";function kd(e,t,s="flow",{indentAtStart:i,lineWidth:n=80,minContentWidth:r=20,onFold:o,onOverflow:a}={}){if(!n||n<0)return e;n<r&&(r=0);let l=Math.max(1+r,1+n-t.length);if(e.length<=l)return e;let c=[],d={},f=n-t.length;typeof i=="number"&&(i>n-Math.max(2,r)?c.push(0):f=n-i);let p,m,y=!1,h=-1,g=-1,b=-1;s===Wi&&(h=na(e,h,t.length),h!==-1&&(f=h+l));for(let k;k=e[h+=1];){if(s===bs&&k==="\\"){switch(g=h,e[h+1]){case"x":h+=3;break;case"u":h+=5;break;case"U":h+=9;break;default:h+=1}b=h}if(k===`
8
+ `)s===Wi&&(h=na(e,h,t.length)),f=h+t.length+l,p=void 0;else{if(k===" "&&m&&m!==" "&&m!==`
9
+ `&&m!==" "){let x=e[h+1];x&&x!==" "&&x!==`
10
+ `&&x!==" "&&(p=h)}if(h>=f)if(p)c.push(p),f=p+l,p=void 0;else if(s===bs){for(;m===" "||m===" ";)m=k,k=e[h+=1],y=!0;let x=h>b+1?h-2:g-1;if(d[x])return e;c.push(x),d[x]=!0,f=x+l,p=void 0}else y=!0}m=k}if(y&&a&&a(),c.length===0)return e;o&&o();let v=e.slice(0,c[0]);for(let k=0;k<c.length;++k){let x=c[k],S=c[k+1]||e.length;x===0?v=`
11
+ ${t}${e.slice(0,S)}`:(s===bs&&d[x]&&(v+=`${e[x]}\\`),v+=`
12
+ ${t}${e.slice(x+1,S)}`)}return v}function na(e,t,s){let i=t,n=t+1,r=e[n];for(;r===" "||r===" ";)if(t<n+s)r=e[++t];else{do r=e[++t];while(r&&r!==`
13
+ `);i=t,n=t+1,r=e[n]}return i}$t.FOLD_BLOCK=Wi;$t.FOLD_FLOW=vd;$t.FOLD_QUOTED=bs;$t.foldFlowLines=kd});var Ct=A(oa=>{"use strict";var le=F(),ve=ra(),vs=(e,t)=>({indentAtStart:t?e.indent.length:e.indentAtStart,lineWidth:e.options.lineWidth,minContentWidth:e.options.minContentWidth}),ks=e=>/^(%|---|\.\.\.)/m.test(e);function Sd(e,t,s){if(!t||t<0)return!1;let i=t-s,n=e.length;if(n<=i)return!1;for(let r=0,o=0;r<n;++r)if(e[r]===`
14
+ `){if(r-o>i)return!0;if(o=r+1,n-o<=i)return!1}return!0}function xt(e,t){let s=JSON.stringify(e);if(t.options.doubleQuotedAsJSON)return s;let{implicitKey:i}=t,n=t.options.doubleQuotedMinMultiLineLength,r=t.indent||(ks(e)?" ":""),o="",a=0;for(let l=0,c=s[l];c;c=s[++l])if(c===" "&&s[l+1]==="\\"&&s[l+2]==="n"&&(o+=s.slice(a,l)+"\\ ",l+=1,a=l,c="\\"),c==="\\")switch(s[l+1]){case"u":{o+=s.slice(a,l);let d=s.substr(l+2,4);switch(d){case"0000":o+="\\0";break;case"0007":o+="\\a";break;case"000b":o+="\\v";break;case"001b":o+="\\e";break;case"0085":o+="\\N";break;case"00a0":o+="\\_";break;case"2028":o+="\\L";break;case"2029":o+="\\P";break;default:d.substr(0,2)==="00"?o+="\\x"+d.substr(2):o+=s.substr(l,6)}l+=5,a=l+1}break;case"n":if(i||s[l+2]==='"'||s.length<n)l+=1;else{for(o+=s.slice(a,l)+`
15
+
16
+ `;s[l+2]==="\\"&&s[l+3]==="n"&&s[l+4]!=='"';)o+=`
17
+ `,l+=2;o+=r,s[l+2]===" "&&(o+="\\"),l+=1,a=l+1}break;default:l+=1}return o=a?o+s.slice(a):s,i?o:ve.foldFlowLines(o,r,ve.FOLD_QUOTED,vs(t,!1))}function zi(e,t){if(t.options.singleQuote===!1||t.implicitKey&&e.includes(`
18
+ `)||/[ \t]\n|\n[ \t]/.test(e))return xt(e,t);let s=t.indent||(ks(e)?" ":""),i="'"+e.replace(/'/g,"''").replace(/\n+/g,`$&
19
+ ${s}`)+"'";return t.implicitKey?i:ve.foldFlowLines(i,s,ve.FOLD_FLOW,vs(t,!1))}function et(e,t){let{singleQuote:s}=t.options,i;if(s===!1)i=xt;else{let n=e.includes('"'),r=e.includes("'");n&&!r?i=zi:r&&!n?i=xt:i=s?zi:xt}return i(e,t)}var Qi;try{Qi=new RegExp(`(^|(?<!
19
20
  ))
20
21
  +(?!
21
- |$)`,"g")}catch{T1=/\n+(?!\n|$)/g}function Yq({comment:$,type:q,value:Z},Q,X,z){let{blockQuote:J,commentString:Y,lineWidth:G}=Q.options;if(!J||/\n[\t ]+$/.test(Z))return r0(Z,Q);let U=Q.indent||(Q.forceBlockIndent||Uq(Z)?" ":""),H=J==="literal"?!0:J==="folded"||q===Y0.Scalar.BLOCK_FOLDED?!1:q===Y0.Scalar.BLOCK_LITERAL?!0:!n3(Z,G,U.length);if(!Z)return H?`|
22
+ |$)`,"g")}catch{Qi=/\n+(?!\n|$)/g}function ws({comment:e,type:t,value:s},i,n,r){let{blockQuote:o,commentString:a,lineWidth:l}=i.options;if(!o||/\n[\t ]+$/.test(s))return et(s,i);let c=i.indent||(i.forceBlockIndent||ks(s)?" ":""),d=o==="literal"?!0:o==="folded"||t===le.Scalar.BLOCK_FOLDED?!1:t===le.Scalar.BLOCK_LITERAL?!0:!Sd(s,l,c.length);if(!s)return d?`|
22
23
  `:`>
23
- `;let V,B;for(B=Z.length;B>0;--B){let T=Z[B-1];if(T!==`
24
- `&&T!=="\t"&&T!==" ")break}let _=Z.substring(B),O=_.indexOf(`
25
- `);if(O===-1)V="-";else if(Z===_||O!==_.length-1){if(V="+",z)z()}else V="";if(_){if(Z=Z.slice(0,-_.length),_[_.length-1]===`
26
- `)_=_.slice(0,-1);_=_.replace(T1,`$&${U}`)}let K=!1,L,F=-1;for(L=0;L<Z.length;++L){let T=Z[L];if(T===" ")K=!0;else if(T===`
27
- `)F=L;else break}let A=Z.substring(0,F<L?F+1:L);if(A)Z=Z.substring(A.length),A=A.replace(/\n+/g,`$&${U}`);let j=(K?U?"2":"1":"")+V;if($){if(j+=" "+Y($.replace(/ ?[\r\n]+/g," ")),X)X()}if(!H){let T=Z.replace(/\n+/g,`
28
- $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${U}`),w=!1,x=Gq(Q,!0);if(J!=="folded"&&q!==Y0.Scalar.BLOCK_FOLDED)x.onOverflow=()=>{w=!0};let P=F0.foldFlowLines(`${A}${T}${_}`,U,F0.FOLD_BLOCK,x);if(!w)return`>${j}
29
- ${U}${P}`}return Z=Z.replace(/\n+/g,`$&${U}`),`|${j}
30
- ${U}${A}${Z}${_}`}function a3($,q,Z,Q){let{type:X,value:z}=$,{actualString:J,implicitKey:Y,indent:G,indentStep:U,inFlow:H}=q;if(Y&&z.includes(`
31
- `)||H&&/[[\]{},]/.test(z))return r0(z,q);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(z))return Y||H||!z.includes(`
32
- `)?r0(z,q):Yq($,q,Z,Q);if(!Y&&!H&&X!==Y0.Scalar.PLAIN&&z.includes(`
33
- `))return Yq($,q,Z,Q);if(Uq(z)){if(G==="")return q.forceBlockIndent=!0,Yq($,q,Z,Q);else if(Y&&G===U)return r0(z,q)}let V=z.replace(/\n+/g,`$&
34
- ${G}`);if(J){let B=(K)=>K.default&&K.tag!=="tag:yaml.org,2002:str"&&K.test?.test(V),{compat:_,tags:O}=q.doc.schema;if(O.some(B)||_?.some(B))return r0(z,q)}return Y?V:F0.foldFlowLines(V,G,F0.FOLD_FLOW,Gq(q,!1))}function i3($,q,Z,Q){let{implicitKey:X,inFlow:z}=q,J=typeof $.value==="string"?$:Object.assign({},$,{value:String($.value)}),{type:Y}=$;if(Y!==Y0.Scalar.QUOTE_DOUBLE){if(/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(J.value))Y=Y0.Scalar.QUOTE_DOUBLE}let G=(H)=>{switch(H){case Y0.Scalar.BLOCK_FOLDED:case Y0.Scalar.BLOCK_LITERAL:return X||z?r0(J.value,q):Yq(J,q,Z,Q);case Y0.Scalar.QUOTE_DOUBLE:return O$(J.value,q);case Y0.Scalar.QUOTE_SINGLE:return I1(J.value,q);case Y0.Scalar.PLAIN:return a3(J,q,Z,Q);default:return null}},U=G(Y);if(U===null){let{defaultKeyType:H,defaultStringType:V}=q.options,B=X&&H||V;if(U=G(B),U===null)throw Error(`Unsupported default string type ${B}`)}return U}o3.stringifyString=i3});var F$=N((X7)=>{var t3=Qq(),A0=k(),r3=_$(),e3=L$();function $7($,q){let Z=Object.assign({blockQuote:!0,commentString:r3.stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:"true",verifyAliasOrder:!0},$.schema.toStringOptions,q),Q;switch(Z.collectionStyle){case"block":Q=!1;break;case"flow":Q=!0;break;default:Q=null}return{anchors:new Set,doc:$,flowCollectionPadding:Z.flowCollectionPadding?" ":"",indent:"",indentStep:typeof Z.indent==="number"?" ".repeat(Z.indent):" ",inFlow:Q,options:Z}}function q7($,q){if(q.tag){let X=$.filter((z)=>z.tag===q.tag);if(X.length>0)return X.find((z)=>z.format===q.format)??X[0]}let Z=void 0,Q;if(A0.isScalar(q)){Q=q.value;let X=$.filter((z)=>z.identify?.(Q));if(X.length>1){let z=X.filter((J)=>J.test);if(z.length>0)X=z}Z=X.find((z)=>z.format===q.format)??X.find((z)=>!z.format)}else Q=q,Z=$.find((X)=>X.nodeClass&&Q instanceof X.nodeClass);if(!Z){let X=Q?.constructor?.name??(Q===null?"null":typeof Q);throw Error(`Tag not resolved for ${X} value`)}return Z}function Z7($,q,{anchors:Z,doc:Q}){if(!Q.directives)return"";let X=[],z=(A0.isScalar($)||A0.isCollection($))&&$.anchor;if(z&&t3.anchorIsValid(z))Z.add(z),X.push(`&${z}`);let J=$.tag??(q.default?null:q.tag);if(J)X.push(Q.directives.tagString(J));return X.join(" ")}function Q7($,q,Z,Q){if(A0.isPair($))return $.toString(q,Z,Q);if(A0.isAlias($)){if(q.doc.directives)return $.toString(q);if(q.resolvedAliases?.has($))throw TypeError("Cannot stringify circular structure without alias nodes");else{if(q.resolvedAliases)q.resolvedAliases.add($);else q.resolvedAliases=new Set([$]);$=$.resolve(q.doc)}}let X=void 0,z=A0.isNode($)?$:q.doc.createNode($,{onTagObj:(G)=>X=G});X??(X=q7(q.doc.schema.tags,z));let J=Z7(z,X,q);if(J.length>0)q.indentAtStart=(q.indentAtStart??0)+J.length+1;let Y=typeof X.stringify==="function"?X.stringify(z,q,Z,Q):A0.isScalar(z)?e3.stringifyString(z,q,Z,Q):z.toString(q,Z,Q);if(!J)return Y;return A0.isScalar(z)||Y[0]==="{"||Y[0]==="["?`${J} ${Y}`:`${J}
35
- ${q.indent}${Y}`}X7.createStringifyContext=$7;X7.stringify=Q7});var l2=N((G7)=>{var _0=k(),d2=u(),c2=F$(),A$=_$();function Y7({key:$,value:q},Z,Q,X){let{allNullValues:z,doc:J,indent:Y,indentStep:G,options:{commentString:U,indentSeq:H,simpleKeys:V}}=Z,B=_0.isNode($)&&$.comment||null;if(V){if(B)throw Error("With simple keys, key nodes cannot have comments");if(_0.isCollection($)||!_0.isNode($)&&typeof $==="object")throw Error("With simple keys, collection cannot be used as a key value")}let _=!V&&(!$||B&&q==null&&!Z.inFlow||_0.isCollection($)||(_0.isScalar($)?$.type===d2.Scalar.BLOCK_FOLDED||$.type===d2.Scalar.BLOCK_LITERAL:typeof $==="object"));Z=Object.assign({},Z,{allNullValues:!1,implicitKey:!_&&(V||!z),indent:Y+G});let O=!1,K=!1,L=c2.stringify($,Z,()=>O=!0,()=>K=!0);if(!_&&!Z.inFlow&&L.length>1024){if(V)throw Error("With simple keys, single line scalar must not span more than 1024 characters");_=!0}if(Z.inFlow){if(z||q==null){if(O&&Q)Q();return L===""?"?":_?`? ${L}`:L}}else if(z&&!V||q==null&&_){if(L=`? ${L}`,B&&!O)L+=A$.lineComment(L,Z.indent,U(B));else if(K&&X)X();return L}if(O)B=null;if(_){if(B)L+=A$.lineComment(L,Z.indent,U(B));L=`? ${L}
36
- ${Y}:`}else if(L=`${L}:`,B)L+=A$.lineComment(L,Z.indent,U(B));let F,A,M;if(_0.isNode(q))F=!!q.spaceBefore,A=q.commentBefore,M=q.comment;else if(F=!1,A=null,M=null,q&&typeof q==="object")q=J.createNode(q);if(Z.implicitKey=!1,!_&&!B&&_0.isScalar(q))Z.indentAtStart=L.length+1;if(K=!1,!H&&G.length>=2&&!Z.inFlow&&!_&&_0.isSeq(q)&&!q.flow&&!q.tag&&!q.anchor)Z.indent=Z.indent.substring(2);let j=!1,T=c2.stringify(q,Z,()=>j=!0,()=>K=!0),w=" ";if(B||F||A){if(w=F?`
37
- `:"",A){let x=U(A);w+=`
38
- ${A$.indentComment(x,Z.indent)}`}if(T===""&&!Z.inFlow){if(w===`
39
- `&&M)w=`
40
-
41
- `}else w+=`
42
- ${Z.indent}`}else if(!_&&_0.isCollection(q)){let x=T[0],P=T.indexOf(`
43
- `),y=P!==-1,I=Z.inFlow??q.flow??q.items.length===0;if(y||!I){let R=!1;if(y&&(x==="&"||x==="!")){let C=T.indexOf(" ");if(x==="&"&&C!==-1&&C<P&&T[C+1]==="!")C=T.indexOf(" ",C+1);if(C===-1||P<C)R=!0}if(!R)w=`
44
- ${Z.indent}`}}else if(T===""||T[0]===`
45
- `)w="";if(L+=w+T,Z.inFlow){if(j&&Q)Q()}else if(M&&!j)L+=A$.lineComment(L,Z.indent,U(M));else if(K&&X)X();return L}G7.stringifyPair=Y7});var M1=N((H7)=>{var n2=v("process");function W7($,...q){if($==="debug")console.log(...q)}function V7($,q){if($==="debug"||$==="warn")if(typeof n2.emitWarning==="function")n2.emitWarning(q);else console.warn(q)}H7.debug=W7;H7.warn=V7});var Hq=N((O7)=>{var I$=k(),a2=u(),Wq="<<",Vq={identify:($)=>$===Wq||typeof $==="symbol"&&$.description===Wq,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new a2.Scalar(Symbol(Wq)),{addToJSMap:i2}),stringify:()=>Wq},_7=($,q)=>(Vq.identify(q)||I$.isScalar(q)&&(!q.type||q.type===a2.Scalar.PLAIN)&&Vq.identify(q.value))&&$?.doc.schema.tags.some((Z)=>Z.tag===Vq.tag&&Z.default);function i2($,q,Z){if(Z=$&&I$.isAlias(Z)?Z.resolve($.doc):Z,I$.isSeq(Z))for(let Q of Z.items)R1($,q,Q);else if(Array.isArray(Z))for(let Q of Z)R1($,q,Q);else R1($,q,Z)}function R1($,q,Z){let Q=$&&I$.isAlias(Z)?Z.resolve($.doc):Z;if(!I$.isMap(Q))throw Error("Merge sources must be maps or map aliases");let X=Q.toJSON(null,$,Map);for(let[z,J]of X)if(q instanceof Map){if(!q.has(z))q.set(z,J)}else if(q instanceof Set)q.add(z);else if(!Object.prototype.hasOwnProperty.call(q,z))Object.defineProperty(q,z,{value:J,writable:!0,enumerable:!0,configurable:!0});return q}O7.addMergeToJSMap=i2;O7.isMergeKey=_7;O7.merge=Vq});var w1=N((j7)=>{var I7=M1(),o2=Hq(),T7=F$(),s2=k(),j1=L0();function M7($,q,{key:Z,value:Q}){if(s2.isNode(Z)&&Z.addToJSMap)Z.addToJSMap($,q,Q);else if(o2.isMergeKey($,Z))o2.addMergeToJSMap($,q,Q);else{let X=j1.toJS(Z,"",$);if(q instanceof Map)q.set(X,j1.toJS(Q,X,$));else if(q instanceof Set)q.add(X);else{let z=R7(Z,X,$),J=j1.toJS(Q,z,$);if(z in q)Object.defineProperty(q,z,{value:J,writable:!0,enumerable:!0,configurable:!0});else q[z]=J}}return q}function R7($,q,Z){if(q===null)return"";if(typeof q!=="object")return String(q);if(s2.isNode($)&&Z?.doc){let Q=T7.createStringifyContext(Z.doc,{});Q.anchors=new Set;for(let z of Z.anchors.keys())Q.anchors.add(z.anchor);Q.inFlow=!0,Q.inStringifyKey=!0;let X=$.toString(Q);if(!Z.mapKeyWarned){let z=JSON.stringify(X);if(z.length>40)z=z.substring(0,36)+'..."';I7.warn(Z.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${z}. Set mapAsMap: true to use object keys.`),Z.mapKeyWarned=!0}return X}return JSON.stringify(q)}j7.addPairToJSMap=M7});var I0=N((C7)=>{var t2=K$(),N7=l2(),D7=w1(),Bq=k();function P7($,q,Z){let Q=t2.createNode($,void 0,Z),X=t2.createNode(q,void 0,Z);return new Kq(Q,X)}class Kq{constructor($,q=null){Object.defineProperty(this,Bq.NODE_TYPE,{value:Bq.PAIR}),this.key=$,this.value=q}clone($){let{key:q,value:Z}=this;if(Bq.isNode(q))q=q.clone($);if(Bq.isNode(Z))Z=Z.clone($);return new Kq(q,Z)}toJSON($,q){let Z=q?.mapAsMap?new Map:{};return D7.addPairToJSMap(q,Z,this)}toString($,q,Z){return $?.doc?N7.stringifyPair(this,$,q,Z):JSON.stringify(this)}}C7.Pair=Kq;C7.createPair=P7});var N1=N((y7)=>{var y0=k(),r2=F$(),_q=_$();function b7($,q,Z){return(q.inFlow??$.flow?f7:x7)($,q,Z)}function x7({comment:$,items:q},Z,{blockItemPrefix:Q,flowChars:X,itemIndent:z,onChompKeep:J,onComment:Y}){let{indent:G,options:{commentString:U}}=Z,H=Object.assign({},Z,{indent:z,type:null}),V=!1,B=[];for(let O=0;O<q.length;++O){let K=q[O],L=null;if(y0.isNode(K)){if(!V&&K.spaceBefore)B.push("");if(Oq(Z,B,K.commentBefore,V),K.comment)L=K.comment}else if(y0.isPair(K)){let A=y0.isNode(K.key)?K.key:null;if(A){if(!V&&A.spaceBefore)B.push("");Oq(Z,B,A.commentBefore,V)}}V=!1;let F=r2.stringify(K,H,()=>L=null,()=>V=!0);if(L)F+=_q.lineComment(F,z,U(L));if(V&&L)V=!1;B.push(Q+F)}let _;if(B.length===0)_=X.start+X.end;else{_=B[0];for(let O=1;O<B.length;++O){let K=B[O];_+=K?`
46
- ${G}${K}`:`
47
- `}}if($){if(_+=`
48
- `+_q.indentComment(U($),G),Y)Y()}else if(V&&J)J();return _}function f7({items:$},q,{flowChars:Z,itemIndent:Q}){let{indent:X,indentStep:z,flowCollectionPadding:J,options:{commentString:Y}}=q;Q+=z;let G=Object.assign({},q,{indent:Q,inFlow:!0,type:null}),U=!1,H=0,V=[];for(let O=0;O<$.length;++O){let K=$[O],L=null;if(y0.isNode(K)){if(K.spaceBefore)V.push("");if(Oq(q,V,K.commentBefore,!1),K.comment)L=K.comment}else if(y0.isPair(K)){let A=y0.isNode(K.key)?K.key:null;if(A){if(A.spaceBefore)V.push("");if(Oq(q,V,A.commentBefore,!1),A.comment)U=!0}let M=y0.isNode(K.value)?K.value:null;if(M){if(M.comment)L=M.comment;if(M.commentBefore)U=!0}else if(K.value==null&&A?.comment)L=A.comment}if(L)U=!0;let F=r2.stringify(K,G,()=>L=null);if(U||(U=V.length>H||F.includes(`
49
- `)),O<$.length-1)F+=",";else if(q.options.trailingComma){if(q.options.lineWidth>0)U||(U=V.reduce((A,M)=>A+M.length+2,2)+(F.length+2)>q.options.lineWidth);if(U)F+=","}if(L)F+=_q.lineComment(F,Q,Y(L));V.push(F),H=V.length}let{start:B,end:_}=Z;if(V.length===0)return B+_;else{if(!U){let O=V.reduce((K,L)=>K+L.length+2,2);U=q.options.lineWidth>0&&O>q.options.lineWidth}if(U){let O=B;for(let K of V)O+=K?`
50
- ${z}${X}${K}`:`
51
- `;return`${O}
52
- ${X}${_}`}else return`${B}${J}${V.join(" ")}${J}${_}`}}function Oq({indent:$,options:{commentString:q}},Z,Q,X){if(Q&&X)Q=Q.replace(/^\n+/,"");if(Q){let z=_q.indentComment(q(Q),$);Z.push(z.trimStart())}}y7.stringifyCollection=b7});var M0=N((m7)=>{var v7=N1(),h7=w1(),g7=Jq(),T0=k(),Lq=I0(),u7=u();function T$($,q){let Z=T0.isScalar(q)?q.value:q;for(let Q of $)if(T0.isPair(Q)){if(Q.key===q||Q.key===Z)return Q;if(T0.isScalar(Q.key)&&Q.key.value===Z)return Q}return}class e2 extends g7.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor($){super(T0.MAP,$);this.items=[]}static from($,q,Z){let{keepUndefined:Q,replacer:X}=Z,z=new this($),J=(Y,G)=>{if(typeof X==="function")G=X.call(q,Y,G);else if(Array.isArray(X)&&!X.includes(Y))return;if(G!==void 0||Q)z.items.push(Lq.createPair(Y,G,Z))};if(q instanceof Map)for(let[Y,G]of q)J(Y,G);else if(q&&typeof q==="object")for(let Y of Object.keys(q))J(Y,q[Y]);if(typeof $.sortMapEntries==="function")z.items.sort($.sortMapEntries);return z}add($,q){let Z;if(T0.isPair($))Z=$;else if(!$||typeof $!=="object"||!("key"in $))Z=new Lq.Pair($,$?.value);else Z=new Lq.Pair($.key,$.value);let Q=T$(this.items,Z.key),X=this.schema?.sortMapEntries;if(Q){if(!q)throw Error(`Key ${Z.key} already set`);if(T0.isScalar(Q.value)&&u7.isScalarValue(Z.value))Q.value.value=Z.value;else Q.value=Z.value}else if(X){let z=this.items.findIndex((J)=>X(Z,J)<0);if(z===-1)this.items.push(Z);else this.items.splice(z,0,Z)}else this.items.push(Z)}delete($){let q=T$(this.items,$);if(!q)return!1;return this.items.splice(this.items.indexOf(q),1).length>0}get($,q){let Q=T$(this.items,$)?.value;return(!q&&T0.isScalar(Q)?Q.value:Q)??void 0}has($){return!!T$(this.items,$)}set($,q){this.add(new Lq.Pair($,q),!0)}toJSON($,q,Z){let Q=Z?new Z:q?.mapAsMap?new Map:{};if(q?.onCreate)q.onCreate(Q);for(let X of this.items)h7.addPairToJSMap(q,Q,X);return Q}toString($,q,Z){if(!$)return JSON.stringify(this);for(let Q of this.items)if(!T0.isPair(Q))throw Error(`Map items must all be pairs; found ${JSON.stringify(Q)} instead`);if(!$.allNullValues&&this.hasAllNullValues(!1))$=Object.assign({},$,{allNullValues:!0});return v7.stringifyCollection(this,$,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:$.indent||"",onChompKeep:Z,onComment:q})}}m7.YAMLMap=e2;m7.findPair=T$});var e0=N((n7)=>{var c7=k(),$9=M0(),l7={collection:"map",default:!0,nodeClass:$9.YAMLMap,tag:"tag:yaml.org,2002:map",resolve($,q){if(!c7.isMap($))q("Expected a mapping for this tag");return $},createNode:($,q,Z)=>$9.YAMLMap.from($,q,Z)};n7.map=l7});var R0=N((e7)=>{var i7=K$(),o7=N1(),s7=Jq(),Aq=k(),t7=u(),r7=L0();class q9 extends s7.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor($){super(Aq.SEQ,$);this.items=[]}add($){this.items.push($)}delete($){let q=Fq($);if(typeof q!=="number")return!1;return this.items.splice(q,1).length>0}get($,q){let Z=Fq($);if(typeof Z!=="number")return;let Q=this.items[Z];return!q&&Aq.isScalar(Q)?Q.value:Q}has($){let q=Fq($);return typeof q==="number"&&q<this.items.length}set($,q){let Z=Fq($);if(typeof Z!=="number")throw Error(`Expected a valid index, not ${$}.`);let Q=this.items[Z];if(Aq.isScalar(Q)&&t7.isScalarValue(q))Q.value=q;else this.items[Z]=q}toJSON($,q){let Z=[];if(q?.onCreate)q.onCreate(Z);let Q=0;for(let X of this.items)Z.push(r7.toJS(X,String(Q++),q));return Z}toString($,q,Z){if(!$)return JSON.stringify(this);return o7.stringifyCollection(this,$,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:($.indent||"")+" ",onChompKeep:Z,onComment:q})}static from($,q,Z){let{replacer:Q}=Z,X=new this($);if(q&&Symbol.iterator in Object(q)){let z=0;for(let J of q){if(typeof Q==="function"){let Y=q instanceof Set?J:String(z++);J=Q.call(q,Y,J)}X.items.push(i7.createNode(J,void 0,Z))}}return X}}function Fq($){let q=Aq.isScalar($)?$.value:$;if(q&&typeof q==="string")q=Number(q);return typeof q==="number"&&Number.isInteger(q)&&q>=0?q:null}e7.YAMLSeq=q9});var $$=N((QQ)=>{var qQ=k(),Z9=R0(),ZQ={collection:"seq",default:!0,nodeClass:Z9.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve($,q){if(!qQ.isSeq($))q("Expected a sequence for this tag");return $},createNode:($,q,Z)=>Z9.YAMLSeq.from($,q,Z)};QQ.seq=ZQ});var M$=N((YQ)=>{var zQ=L$(),JQ={identify:($)=>typeof $==="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:($)=>$,stringify($,q,Z,Q){return q=Object.assign({actualString:!0},q),zQ.stringifyString($,q,Z,Q)}};YQ.string=JQ});var Iq=N((UQ)=>{var Q9=u(),X9={identify:($)=>$==null,createNode:()=>new Q9.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Q9.Scalar(null),stringify:({source:$},q)=>typeof $==="string"&&X9.test.test($)?$:q.options.nullStr};UQ.nullTag=X9});var D1=N((HQ)=>{var VQ=u(),z9={identify:($)=>typeof $==="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:($)=>new VQ.Scalar($[0]==="t"||$[0]==="T"),stringify({source:$,value:q},Z){if($&&z9.test.test($)){let Q=$[0]==="t"||$[0]==="T";if(q===Q)return $}return q?Z.options.trueStr:Z.options.falseStr}};HQ.boolTag=z9});var q$=N((_Q)=>{function KQ({format:$,minFractionDigits:q,tag:Z,value:Q}){if(typeof Q==="bigint")return String(Q);let X=typeof Q==="number"?Q:Number(Q);if(!isFinite(X))return isNaN(X)?".nan":X<0?"-.inf":".inf";let z=Object.is(Q,-0)?"-0":JSON.stringify(Q);if(!$&&q&&(!Z||Z==="tag:yaml.org,2002:float")&&/^\d/.test(z)){let J=z.indexOf(".");if(J<0)J=z.length,z+=".";let Y=q-(z.length-J-1);while(Y-- >0)z+="0"}return z}_Q.stringifyNumber=KQ});var C1=N((TQ)=>{var LQ=u(),P1=q$(),FQ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:($)=>$.slice(-3).toLowerCase()==="nan"?NaN:$[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:P1.stringifyNumber},AQ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:($)=>parseFloat($),stringify($){let q=Number($.value);return isFinite(q)?q.toExponential():P1.stringifyNumber($)}},IQ={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve($){let q=new LQ.Scalar(parseFloat($)),Z=$.indexOf(".");if(Z!==-1&&$[$.length-1]==="0")q.minFractionDigits=$.length-Z-1;return q},stringify:P1.stringifyNumber};TQ.float=IQ;TQ.floatExp=AQ;TQ.floatNaN=FQ});var S1=N((PQ)=>{var J9=q$(),Tq=($)=>typeof $==="bigint"||Number.isInteger($),E1=($,q,Z,{intAsBigInt:Q})=>Q?BigInt($):parseInt($.substring(q),Z);function Y9($,q,Z){let{value:Q}=$;if(Tq(Q)&&Q>=0)return Z+Q.toString(q);return J9.stringifyNumber($)}var wQ={identify:($)=>Tq($)&&$>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:($,q,Z)=>E1($,2,8,Z),stringify:($)=>Y9($,8,"0o")},NQ={identify:Tq,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:($,q,Z)=>E1($,0,10,Z),stringify:J9.stringifyNumber},DQ={identify:($)=>Tq($)&&$>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:($,q,Z)=>E1($,2,16,Z),stringify:($)=>Y9($,16,"0x")};PQ.int=NQ;PQ.intHex=DQ;PQ.intOct=wQ});var G9=N((hQ)=>{var bQ=e0(),xQ=Iq(),fQ=$$(),yQ=M$(),kQ=D1(),b1=C1(),x1=S1(),vQ=[bQ.map,fQ.seq,yQ.string,xQ.nullTag,kQ.boolTag,x1.intOct,x1.int,x1.intHex,b1.floatNaN,b1.floatExp,b1.float];hQ.schema=vQ});var W9=N((nQ)=>{var uQ=u(),mQ=e0(),pQ=$$();function U9($){return typeof $==="bigint"||Number.isInteger($)}var Mq=({value:$})=>JSON.stringify($),dQ=[{identify:($)=>typeof $==="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:($)=>$,stringify:Mq},{identify:($)=>$==null,createNode:()=>new uQ.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:Mq},{identify:($)=>typeof $==="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:($)=>$==="true",stringify:Mq},{identify:U9,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:($,q,{intAsBigInt:Z})=>Z?BigInt($):parseInt($,10),stringify:({value:$})=>U9($)?$.toString():JSON.stringify($)},{identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:($)=>parseFloat($),stringify:Mq}],cQ={default:!0,tag:"",test:/^/,resolve($,q){return q(`Unresolved plain scalar ${JSON.stringify($)}`),$}},lQ=[mQ.map,pQ.seq].concat(dQ,cQ);nQ.schema=lQ});var y1=N((sQ)=>{var R$=v("buffer"),f1=u(),iQ=L$(),oQ={identify:($)=>$ instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve($,q){if(typeof R$.Buffer==="function")return R$.Buffer.from($,"base64");else if(typeof atob==="function"){let Z=atob($.replace(/[\n\r]/g,"")),Q=new Uint8Array(Z.length);for(let X=0;X<Z.length;++X)Q[X]=Z.charCodeAt(X);return Q}else return q("This environment does not support reading binary tags; either Buffer or atob is required"),$},stringify({comment:$,type:q,value:Z},Q,X,z){if(!Z)return"";let J=Z,Y;if(typeof R$.Buffer==="function")Y=J instanceof R$.Buffer?J.toString("base64"):R$.Buffer.from(J.buffer).toString("base64");else if(typeof btoa==="function"){let G="";for(let U=0;U<J.length;++U)G+=String.fromCharCode(J[U]);Y=btoa(G)}else throw Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(q??(q=f1.Scalar.BLOCK_LITERAL),q!==f1.Scalar.QUOTE_DOUBLE){let G=Math.max(Q.options.lineWidth-Q.indent.length,Q.options.minContentWidth),U=Math.ceil(Y.length/G),H=Array(U);for(let V=0,B=0;V<U;++V,B+=G)H[V]=Y.substr(B,G);Y=H.join(q===f1.Scalar.BLOCK_LITERAL?`
53
- `:" ")}return iQ.stringifyString({comment:$,type:q,value:Y},Q,X,z)}};sQ.binary=oQ});var jq=N((qX)=>{var Rq=k(),k1=I0(),rQ=u(),eQ=R0();function V9($,q){if(Rq.isSeq($))for(let Z=0;Z<$.items.length;++Z){let Q=$.items[Z];if(Rq.isPair(Q))continue;else if(Rq.isMap(Q)){if(Q.items.length>1)q("Each pair must have its own sequence indicator");let X=Q.items[0]||new k1.Pair(new rQ.Scalar(null));if(Q.commentBefore)X.key.commentBefore=X.key.commentBefore?`${Q.commentBefore}
54
- ${X.key.commentBefore}`:Q.commentBefore;if(Q.comment){let z=X.value??X.key;z.comment=z.comment?`${Q.comment}
55
- ${z.comment}`:Q.comment}Q=X}$.items[Z]=Rq.isPair(Q)?Q:new k1.Pair(Q)}else q("Expected a sequence for this tag");return $}function H9($,q,Z){let{replacer:Q}=Z,X=new eQ.YAMLSeq($);X.tag="tag:yaml.org,2002:pairs";let z=0;if(q&&Symbol.iterator in Object(q))for(let J of q){if(typeof Q==="function")J=Q.call(q,String(z++),J);let Y,G;if(Array.isArray(J))if(J.length===2)Y=J[0],G=J[1];else throw TypeError(`Expected [key, value] tuple: ${J}`);else if(J&&J instanceof Object){let U=Object.keys(J);if(U.length===1)Y=U[0],G=J[Y];else throw TypeError(`Expected tuple with one key, not ${U.length} keys`)}else Y=J;X.items.push(k1.createPair(Y,G,Z))}return X}var $X={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:V9,createNode:H9};qX.createPairs=H9;qX.pairs=$X;qX.resolvePairs=V9});var h1=N((YX)=>{var B9=k(),v1=L0(),j$=M0(),zX=R0(),K9=jq();class k0 extends zX.YAMLSeq{constructor(){super();this.add=j$.YAMLMap.prototype.add.bind(this),this.delete=j$.YAMLMap.prototype.delete.bind(this),this.get=j$.YAMLMap.prototype.get.bind(this),this.has=j$.YAMLMap.prototype.has.bind(this),this.set=j$.YAMLMap.prototype.set.bind(this),this.tag=k0.tag}toJSON($,q){if(!q)return super.toJSON($);let Z=new Map;if(q?.onCreate)q.onCreate(Z);for(let Q of this.items){let X,z;if(B9.isPair(Q))X=v1.toJS(Q.key,"",q),z=v1.toJS(Q.value,X,q);else X=v1.toJS(Q,"",q);if(Z.has(X))throw Error("Ordered maps must not include duplicate keys");Z.set(X,z)}return Z}static from($,q,Z){let Q=K9.createPairs($,q,Z),X=new this;return X.items=Q.items,X}}k0.tag="tag:yaml.org,2002:omap";var JX={collection:"seq",identify:($)=>$ instanceof Map,nodeClass:k0,default:!1,tag:"tag:yaml.org,2002:omap",resolve($,q){let Z=K9.resolvePairs($,q),Q=[];for(let{key:X}of Z.items)if(B9.isScalar(X))if(Q.includes(X.value))q(`Ordered maps must not include duplicate keys: ${X.value}`);else Q.push(X.value);return Object.assign(new k0,Z)},createNode:($,q,Z)=>k0.from($,q,Z)};YX.YAMLOMap=k0;YX.omap=JX});var A9=N((WX)=>{var _9=u();function O9({value:$,source:q},Z){if(q&&($?L9:F9).test.test(q))return q;return $?Z.options.trueStr:Z.options.falseStr}var L9={identify:($)=>$===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new _9.Scalar(!0),stringify:O9},F9={identify:($)=>$===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new _9.Scalar(!1),stringify:O9};WX.falseTag=F9;WX.trueTag=L9});var I9=N((LX)=>{var BX=u(),g1=q$(),KX={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:($)=>$.slice(-3).toLowerCase()==="nan"?NaN:$[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:g1.stringifyNumber},_X={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:($)=>parseFloat($.replace(/_/g,"")),stringify($){let q=Number($.value);return isFinite(q)?q.toExponential():g1.stringifyNumber($)}},OX={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve($){let q=new BX.Scalar(parseFloat($.replace(/_/g,""))),Z=$.indexOf(".");if(Z!==-1){let Q=$.substring(Z+1).replace(/_/g,"");if(Q[Q.length-1]==="0")q.minFractionDigits=Q.length}return q},stringify:g1.stringifyNumber};LX.float=OX;LX.floatExp=_X;LX.floatNaN=KX});var M9=N((wX)=>{var T9=q$(),w$=($)=>typeof $==="bigint"||Number.isInteger($);function wq($,q,Z,{intAsBigInt:Q}){let X=$[0];if(X==="-"||X==="+")q+=1;if($=$.substring(q).replace(/_/g,""),Q){switch(Z){case 2:$=`0b${$}`;break;case 8:$=`0o${$}`;break;case 16:$=`0x${$}`;break}let J=BigInt($);return X==="-"?BigInt(-1)*J:J}let z=parseInt($,Z);return X==="-"?-1*z:z}function u1($,q,Z){let{value:Q}=$;if(w$(Q)){let X=Q.toString(q);return Q<0?"-"+Z+X.substr(1):Z+X}return T9.stringifyNumber($)}var TX={identify:w$,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:($,q,Z)=>wq($,2,2,Z),stringify:($)=>u1($,2,"0b")},MX={identify:w$,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:($,q,Z)=>wq($,1,8,Z),stringify:($)=>u1($,8,"0")},RX={identify:w$,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:($,q,Z)=>wq($,0,10,Z),stringify:T9.stringifyNumber},jX={identify:w$,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:($,q,Z)=>wq($,2,16,Z),stringify:($)=>u1($,16,"0x")};wX.int=RX;wX.intBin=TX;wX.intHex=jX;wX.intOct=MX});var m1=N((SX)=>{var Pq=k(),Nq=I0(),Dq=M0();class v0 extends Dq.YAMLMap{constructor($){super($);this.tag=v0.tag}add($){let q;if(Pq.isPair($))q=$;else if($&&typeof $==="object"&&"key"in $&&"value"in $&&$.value===null)q=new Nq.Pair($.key,null);else q=new Nq.Pair($,null);if(!Dq.findPair(this.items,q.key))this.items.push(q)}get($,q){let Z=Dq.findPair(this.items,$);return!q&&Pq.isPair(Z)?Pq.isScalar(Z.key)?Z.key.value:Z.key:Z}set($,q){if(typeof q!=="boolean")throw Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof q}`);let Z=Dq.findPair(this.items,$);if(Z&&!q)this.items.splice(this.items.indexOf(Z),1);else if(!Z&&q)this.items.push(new Nq.Pair($))}toJSON($,q){return super.toJSON($,q,Set)}toString($,q,Z){if(!$)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},$,{allNullValues:!0}),q,Z);else throw Error("Set items must all have null values")}static from($,q,Z){let{replacer:Q}=Z,X=new this($);if(q&&Symbol.iterator in Object(q))for(let z of q){if(typeof Q==="function")z=Q.call(q,z,z);X.items.push(Nq.createPair(z,null,Z))}return X}}v0.tag="tag:yaml.org,2002:set";var EX={collection:"map",identify:($)=>$ instanceof Set,nodeClass:v0,default:!1,tag:"tag:yaml.org,2002:set",createNode:($,q,Z)=>v0.from($,q,Z),resolve($,q){if(Pq.isMap($))if($.hasAllNullValues(!0))return Object.assign(new v0,$);else q("Set items must all have null values");else q("Expected a mapping for this tag");return $}};SX.YAMLSet=v0;SX.set=EX});var d1=N((vX)=>{var fX=q$();function p1($,q){let Z=$[0],Q=Z==="-"||Z==="+"?$.substring(1):$,X=(J)=>q?BigInt(J):Number(J),z=Q.replace(/_/g,"").split(":").reduce((J,Y)=>J*X(60)+X(Y),X(0));return Z==="-"?X(-1)*z:z}function R9($){let{value:q}=$,Z=(J)=>J;if(typeof q==="bigint")Z=(J)=>BigInt(J);else if(isNaN(q)||!isFinite(q))return fX.stringifyNumber($);let Q="";if(q<0)Q="-",q*=Z(-1);let X=Z(60),z=[q%X];if(q<60)z.unshift(0);else if(q=(q-z[0])/X,z.unshift(q%X),q>=60)q=(q-z[0])/X,z.unshift(q);return Q+z.map((J)=>String(J).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var yX={identify:($)=>typeof $==="bigint"||Number.isInteger($),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:($,q,{intAsBigInt:Z})=>p1($,Z),stringify:R9},kX={identify:($)=>typeof $==="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:($)=>p1($,!1),stringify:R9},j9={identify:($)=>$ instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve($){let q=$.match(j9.test);if(!q)throw Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,Z,Q,X,z,J,Y]=q.map(Number),G=q[7]?Number((q[7]+"00").substr(1,3)):0,U=Date.UTC(Z,Q-1,X,z||0,J||0,Y||0,G),H=q[8];if(H&&H!=="Z"){let V=p1(H,!1);if(Math.abs(V)<30)V*=60;U-=60000*V}return new Date(U)},stringify:({value:$})=>$?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};vX.floatTime=kX;vX.intTime=yX;vX.timestamp=j9});var N9=N((tX)=>{var mX=e0(),pX=Iq(),dX=$$(),cX=M$(),lX=y1(),w9=A9(),c1=I9(),Cq=M9(),nX=Hq(),aX=h1(),iX=jq(),oX=m1(),l1=d1(),sX=[mX.map,dX.seq,cX.string,pX.nullTag,w9.trueTag,w9.falseTag,Cq.intBin,Cq.intOct,Cq.int,Cq.intHex,c1.floatNaN,c1.floatExp,c1.float,lX.binary,nX.merge,aX.omap,iX.pairs,oX.set,l1.intTime,l1.floatTime,l1.timestamp];tX.schema=sX});var k9=N((Jz)=>{var E9=e0(),eX=Iq(),S9=$$(),$z=M$(),qz=D1(),n1=C1(),a1=S1(),Zz=G9(),Qz=W9(),b9=y1(),N$=Hq(),x9=h1(),f9=jq(),D9=N9(),y9=m1(),Eq=d1(),P9=new Map([["core",Zz.schema],["failsafe",[E9.map,S9.seq,$z.string]],["json",Qz.schema],["yaml11",D9.schema],["yaml-1.1",D9.schema]]),C9={binary:b9.binary,bool:qz.boolTag,float:n1.float,floatExp:n1.floatExp,floatNaN:n1.floatNaN,floatTime:Eq.floatTime,int:a1.int,intHex:a1.intHex,intOct:a1.intOct,intTime:Eq.intTime,map:E9.map,merge:N$.merge,null:eX.nullTag,omap:x9.omap,pairs:f9.pairs,seq:S9.seq,set:y9.set,timestamp:Eq.timestamp},Xz={"tag:yaml.org,2002:binary":b9.binary,"tag:yaml.org,2002:merge":N$.merge,"tag:yaml.org,2002:omap":x9.omap,"tag:yaml.org,2002:pairs":f9.pairs,"tag:yaml.org,2002:set":y9.set,"tag:yaml.org,2002:timestamp":Eq.timestamp};function zz($,q,Z){let Q=P9.get(q);if(Q&&!$)return Z&&!Q.includes(N$.merge)?Q.concat(N$.merge):Q.slice();let X=Q;if(!X)if(Array.isArray($))X=[];else{let z=Array.from(P9.keys()).filter((J)=>J!=="yaml11").map((J)=>JSON.stringify(J)).join(", ");throw Error(`Unknown schema "${q}"; use one of ${z} or define customTags array`)}if(Array.isArray($))for(let z of $)X=X.concat(z);else if(typeof $==="function")X=$(X.slice());if(Z)X=X.concat(N$.merge);return X.reduce((z,J)=>{let Y=typeof J==="string"?C9[J]:J;if(!Y){let G=JSON.stringify(J),U=Object.keys(C9).map((H)=>JSON.stringify(H)).join(", ");throw Error(`Unknown custom tag ${G}; use one of ${U}`)}if(!z.includes(Y))z.push(Y);return z},[])}Jz.coreKnownTags=Xz;Jz.getTags=zz});var s1=N((Bz)=>{var i1=k(),Uz=e0(),Wz=$$(),Vz=M$(),Sq=k9(),Hz=($,q)=>$.key<q.key?-1:$.key>q.key?1:0;class o1{constructor({compat:$,customTags:q,merge:Z,resolveKnownTags:Q,schema:X,sortMapEntries:z,toStringDefaults:J}){this.compat=Array.isArray($)?Sq.getTags($,"compat"):$?Sq.getTags(null,$):null,this.name=typeof X==="string"&&X||"core",this.knownTags=Q?Sq.coreKnownTags:{},this.tags=Sq.getTags(q,this.name,Z),this.toStringOptions=J??null,Object.defineProperty(this,i1.MAP,{value:Uz.map}),Object.defineProperty(this,i1.SCALAR,{value:Vz.string}),Object.defineProperty(this,i1.SEQ,{value:Wz.seq}),this.sortMapEntries=typeof z==="function"?z:z===!0?Hz:null}clone(){let $=Object.create(o1.prototype,Object.getOwnPropertyDescriptors(this));return $.tags=this.tags.slice(),$}}Bz.Schema=o1});var v9=N((Lz)=>{var _z=k(),t1=F$(),D$=_$();function Oz($,q){let Z=[],Q=q.directives===!0;if(q.directives!==!1&&$.directives){let G=$.directives.toString($);if(G)Z.push(G),Q=!0;else if($.directives.docStart)Q=!0}if(Q)Z.push("---");let X=t1.createStringifyContext($,q),{commentString:z}=X.options;if($.commentBefore){if(Z.length!==1)Z.unshift("");let G=z($.commentBefore);Z.unshift(D$.indentComment(G,""))}let J=!1,Y=null;if($.contents){if(_z.isNode($.contents)){if($.contents.spaceBefore&&Q)Z.push("");if($.contents.commentBefore){let H=z($.contents.commentBefore);Z.push(D$.indentComment(H,""))}X.forceBlockIndent=!!$.comment,Y=$.contents.comment}let G=Y?void 0:()=>J=!0,U=t1.stringify($.contents,X,()=>Y=null,G);if(Y)U+=D$.lineComment(U,"",z(Y));if((U[0]==="|"||U[0]===">")&&Z[Z.length-1]==="---")Z[Z.length-1]=`--- ${U}`;else Z.push(U)}else Z.push(t1.stringify($.contents,X));if($.directives?.docEnd)if($.comment){let G=z($.comment);if(G.includes(`
56
- `))Z.push("..."),Z.push(D$.indentComment(G,""));else Z.push(`... ${G}`)}else Z.push("...");else{let G=$.comment;if(G&&J)G=G.replace(/^\n+/,"");if(G){if((!J||Y)&&Z[Z.length-1]!=="")Z.push("");Z.push(D$.indentComment(z(G),""))}}return Z.join(`
24
+ `;let f,p;for(p=s.length;p>0;--p){let S=s[p-1];if(S!==`
25
+ `&&S!==" "&&S!==" ")break}let m=s.substring(p),y=m.indexOf(`
26
+ `);y===-1?f="-":s===m||y!==m.length-1?(f="+",r&&r()):f="",m&&(s=s.slice(0,-m.length),m[m.length-1]===`
27
+ `&&(m=m.slice(0,-1)),m=m.replace(Qi,`$&${c}`));let h=!1,g,b=-1;for(g=0;g<s.length;++g){let S=s[g];if(S===" ")h=!0;else if(S===`
28
+ `)b=g;else break}let v=s.substring(0,b<g?b+1:g);v&&(s=s.substring(v.length),v=v.replace(/\n+/g,`$&${c}`));let x=(h?c?"2":"1":"")+f;if(e&&(x+=" "+a(e.replace(/ ?[\r\n]+/g," ")),n&&n()),!d){let S=s.replace(/\n+/g,`
29
+ $&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${c}`),E=!1,O=vs(i,!0);o!=="folded"&&t!==le.Scalar.BLOCK_FOLDED&&(O.onOverflow=()=>{E=!0});let P=ve.foldFlowLines(`${v}${S}${m}`,c,ve.FOLD_BLOCK,O);if(!E)return`>${x}
30
+ ${c}${P}`}return s=s.replace(/\n+/g,`$&${c}`),`|${x}
31
+ ${c}${v}${s}${m}`}function $d(e,t,s,i){let{type:n,value:r}=e,{actualString:o,implicitKey:a,indent:l,indentStep:c,inFlow:d}=t;if(a&&r.includes(`
32
+ `)||d&&/[[\]{},]/.test(r))return et(r,t);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(r))return a||d||!r.includes(`
33
+ `)?et(r,t):ws(e,t,s,i);if(!a&&!d&&n!==le.Scalar.PLAIN&&r.includes(`
34
+ `))return ws(e,t,s,i);if(ks(r)){if(l==="")return t.forceBlockIndent=!0,ws(e,t,s,i);if(a&&l===c)return et(r,t)}let f=r.replace(/\n+/g,`$&
35
+ ${l}`);if(o){let p=h=>h.default&&h.tag!=="tag:yaml.org,2002:str"&&h.test?.test(f),{compat:m,tags:y}=t.doc.schema;if(y.some(p)||m?.some(p))return et(r,t)}return a?f:ve.foldFlowLines(f,l,ve.FOLD_FLOW,vs(t,!1))}function xd(e,t,s,i){let{implicitKey:n,inFlow:r}=t,o=typeof e.value=="string"?e:Object.assign({},e,{value:String(e.value)}),{type:a}=e;a!==le.Scalar.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(o.value)&&(a=le.Scalar.QUOTE_DOUBLE);let l=d=>{switch(d){case le.Scalar.BLOCK_FOLDED:case le.Scalar.BLOCK_LITERAL:return n||r?et(o.value,t):ws(o,t,s,i);case le.Scalar.QUOTE_DOUBLE:return xt(o.value,t);case le.Scalar.QUOTE_SINGLE:return zi(o.value,t);case le.Scalar.PLAIN:return $d(o,t,s,i);default:return null}},c=l(a);if(c===null){let{defaultKeyType:d,defaultStringType:f}=t.options,p=n&&d||f;if(c=l(p),c===null)throw new Error(`Unsupported default string type ${p}`)}return c}oa.stringifyString=xd});var Et=A(Xi=>{"use strict";var Cd=ds(),ke=D(),Ed=St(),Ad=Ct();function Pd(e,t){let s=Object.assign({blockQuote:!0,commentString:Ed.stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:"true",verifyAliasOrder:!0},e.schema.toStringOptions,t),i;switch(s.collectionStyle){case"block":i=!1;break;case"flow":i=!0;break;default:i=null}return{anchors:new Set,doc:e,flowCollectionPadding:s.flowCollectionPadding?" ":"",indent:"",indentStep:typeof s.indent=="number"?" ".repeat(s.indent):" ",inFlow:i,options:s}}function Nd(e,t){if(t.tag){let n=e.filter(r=>r.tag===t.tag);if(n.length>0)return n.find(r=>r.format===t.format)??n[0]}let s,i;if(ke.isScalar(t)){i=t.value;let n=e.filter(r=>r.identify?.(i));if(n.length>1){let r=n.filter(o=>o.test);r.length>0&&(n=r)}s=n.find(r=>r.format===t.format)??n.find(r=>!r.format)}else i=t,s=e.find(n=>n.nodeClass&&i instanceof n.nodeClass);if(!s){let n=i?.constructor?.name??(i===null?"null":typeof i);throw new Error(`Tag not resolved for ${n} value`)}return s}function Id(e,t,{anchors:s,doc:i}){if(!i.directives)return"";let n=[],r=(ke.isScalar(e)||ke.isCollection(e))&&e.anchor;r&&Cd.anchorIsValid(r)&&(s.add(r),n.push(`&${r}`));let o=e.tag??(t.default?null:t.tag);return o&&n.push(i.directives.tagString(o)),n.join(" ")}function Ld(e,t,s,i){if(ke.isPair(e))return e.toString(t,s,i);if(ke.isAlias(e)){if(t.doc.directives)return e.toString(t);if(t.resolvedAliases?.has(e))throw new TypeError("Cannot stringify circular structure without alias nodes");t.resolvedAliases?t.resolvedAliases.add(e):t.resolvedAliases=new Set([e]),e=e.resolve(t.doc)}let n,r=ke.isNode(e)?e:t.doc.createNode(e,{onTagObj:l=>n=l});n??(n=Nd(t.doc.schema.tags,r));let o=Id(r,n,t);o.length>0&&(t.indentAtStart=(t.indentAtStart??0)+o.length+1);let a=typeof n.stringify=="function"?n.stringify(r,t,s,i):ke.isScalar(r)?Ad.stringifyString(r,t,s,i):r.toString(t,s,i);return o?ke.isScalar(r)||a[0]==="{"||a[0]==="["?`${o} ${a}`:`${o}
36
+ ${t.indent}${a}`:a}Xi.createStringifyContext=Pd;Xi.stringify=Ld});var ua=A(ca=>{"use strict";var he=D(),aa=F(),la=Et(),At=St();function Rd({key:e,value:t},s,i,n){let{allNullValues:r,doc:o,indent:a,indentStep:l,options:{commentString:c,indentSeq:d,simpleKeys:f}}=s,p=he.isNode(e)&&e.comment||null;if(f){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(he.isCollection(e)||!he.isNode(e)&&typeof e=="object"){let O="With simple keys, collection cannot be used as a key value";throw new Error(O)}}let m=!f&&(!e||p&&t==null&&!s.inFlow||he.isCollection(e)||(he.isScalar(e)?e.type===aa.Scalar.BLOCK_FOLDED||e.type===aa.Scalar.BLOCK_LITERAL:typeof e=="object"));s=Object.assign({},s,{allNullValues:!1,implicitKey:!m&&(f||!r),indent:a+l});let y=!1,h=!1,g=la.stringify(e,s,()=>y=!0,()=>h=!0);if(!m&&!s.inFlow&&g.length>1024){if(f)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");m=!0}if(s.inFlow){if(r||t==null)return y&&i&&i(),g===""?"?":m?`? ${g}`:g}else if(r&&!f||t==null&&m)return g=`? ${g}`,p&&!y?g+=At.lineComment(g,s.indent,c(p)):h&&n&&n(),g;y&&(p=null),m?(p&&(g+=At.lineComment(g,s.indent,c(p))),g=`? ${g}
37
+ ${a}:`):(g=`${g}:`,p&&(g+=At.lineComment(g,s.indent,c(p))));let b,v,k;he.isNode(t)?(b=!!t.spaceBefore,v=t.commentBefore,k=t.comment):(b=!1,v=null,k=null,t&&typeof t=="object"&&(t=o.createNode(t))),s.implicitKey=!1,!m&&!p&&he.isScalar(t)&&(s.indentAtStart=g.length+1),h=!1,!d&&l.length>=2&&!s.inFlow&&!m&&he.isSeq(t)&&!t.flow&&!t.tag&&!t.anchor&&(s.indent=s.indent.substring(2));let x=!1,S=la.stringify(t,s,()=>x=!0,()=>h=!0),E=" ";if(p||b||v){if(E=b?`
38
+ `:"",v){let O=c(v);E+=`
39
+ ${At.indentComment(O,s.indent)}`}S===""&&!s.inFlow?E===`
40
+ `&&k&&(E=`
41
+
42
+ `):E+=`
43
+ ${s.indent}`}else if(!m&&he.isCollection(t)){let O=S[0],P=S.indexOf(`
44
+ `),M=P!==-1,w=s.inFlow??t.flow??t.items.length===0;if(M||!w){let $=!1;if(M&&(O==="&"||O==="!")){let I=S.indexOf(" ");O==="&"&&I!==-1&&I<P&&S[I+1]==="!"&&(I=S.indexOf(" ",I+1)),(I===-1||P<I)&&($=!0)}$||(E=`
45
+ ${s.indent}`)}}else(S===""||S[0]===`
46
+ `)&&(E="");return g+=E+S,s.inFlow?x&&i&&i():k&&!x?g+=At.lineComment(g,s.indent,c(k)):h&&n&&n(),g}ca.stringifyPair=Rd});var en=A(Zi=>{"use strict";var fa=Zt("process");function Od(e,...t){e==="debug"&&console.log(...t)}function Td(e,t){(e==="debug"||e==="warn")&&(typeof fa.emitWarning=="function"?fa.emitWarning(t):console.warn(t))}Zi.debug=Od;Zi.warn=Td});var Cs=A(xs=>{"use strict";var Pt=D(),da=F(),Ss="<<",$s={identify:e=>e===Ss||typeof e=="symbol"&&e.description===Ss,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new da.Scalar(Symbol(Ss)),{addToJSMap:pa}),stringify:()=>Ss},Md=(e,t)=>($s.identify(t)||Pt.isScalar(t)&&(!t.type||t.type===da.Scalar.PLAIN)&&$s.identify(t.value))&&e?.doc.schema.tags.some(s=>s.tag===$s.tag&&s.default);function pa(e,t,s){if(s=e&&Pt.isAlias(s)?s.resolve(e.doc):s,Pt.isSeq(s))for(let i of s.items)tn(e,t,i);else if(Array.isArray(s))for(let i of s)tn(e,t,i);else tn(e,t,s)}function tn(e,t,s){let i=e&&Pt.isAlias(s)?s.resolve(e.doc):s;if(!Pt.isMap(i))throw new Error("Merge sources must be maps or map aliases");let n=i.toJSON(null,e,Map);for(let[r,o]of n)t instanceof Map?t.has(r)||t.set(r,o):t instanceof Set?t.add(r):Object.prototype.hasOwnProperty.call(t,r)||Object.defineProperty(t,r,{value:o,writable:!0,enumerable:!0,configurable:!0});return t}xs.addMergeToJSMap=pa;xs.isMergeKey=Md;xs.merge=$s});var nn=A(ga=>{"use strict";var Dd=en(),ma=Cs(),_d=Et(),ha=D(),sn=be();function qd(e,t,{key:s,value:i}){if(ha.isNode(s)&&s.addToJSMap)s.addToJSMap(e,t,i);else if(ma.isMergeKey(e,s))ma.addMergeToJSMap(e,t,i);else{let n=sn.toJS(s,"",e);if(t instanceof Map)t.set(n,sn.toJS(i,n,e));else if(t instanceof Set)t.add(n);else{let r=Fd(s,n,e),o=sn.toJS(i,r,e);r in t?Object.defineProperty(t,r,{value:o,writable:!0,enumerable:!0,configurable:!0}):t[r]=o}}return t}function Fd(e,t,s){if(t===null)return"";if(typeof t!="object")return String(t);if(ha.isNode(e)&&s?.doc){let i=_d.createStringifyContext(s.doc,{});i.anchors=new Set;for(let r of s.anchors.keys())i.anchors.add(r.anchor);i.inFlow=!0,i.inStringifyKey=!0;let n=e.toString(i);if(!s.mapKeyWarned){let r=JSON.stringify(n);r.length>40&&(r=r.substring(0,36)+'..."'),Dd.warn(s.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${r}. Set mapAsMap: true to use object keys.`),s.mapKeyWarned=!0}return n}return JSON.stringify(t)}ga.addPairToJSMap=qd});var Se=A(rn=>{"use strict";var ya=kt(),jd=ua(),Bd=nn(),Es=D();function Ud(e,t,s){let i=ya.createNode(e,void 0,s),n=ya.createNode(t,void 0,s);return new As(i,n)}var As=class e{constructor(t,s=null){Object.defineProperty(this,Es.NODE_TYPE,{value:Es.PAIR}),this.key=t,this.value=s}clone(t){let{key:s,value:i}=this;return Es.isNode(s)&&(s=s.clone(t)),Es.isNode(i)&&(i=i.clone(t)),new e(s,i)}toJSON(t,s){let i=s?.mapAsMap?new Map:{};return Bd.addPairToJSMap(s,i,this)}toString(t,s,i){return t?.doc?jd.stringifyPair(this,t,s,i):JSON.stringify(this)}};rn.Pair=As;rn.createPair=Ud});var on=A(wa=>{"use strict";var Fe=D(),ba=Et(),Ps=St();function Vd(e,t,s){return(t.inFlow??e.flow?Jd:Kd)(e,t,s)}function Kd({comment:e,items:t},s,{blockItemPrefix:i,flowChars:n,itemIndent:r,onChompKeep:o,onComment:a}){let{indent:l,options:{commentString:c}}=s,d=Object.assign({},s,{indent:r,type:null}),f=!1,p=[];for(let y=0;y<t.length;++y){let h=t[y],g=null;if(Fe.isNode(h))!f&&h.spaceBefore&&p.push(""),Ns(s,p,h.commentBefore,f),h.comment&&(g=h.comment);else if(Fe.isPair(h)){let v=Fe.isNode(h.key)?h.key:null;v&&(!f&&v.spaceBefore&&p.push(""),Ns(s,p,v.commentBefore,f))}f=!1;let b=ba.stringify(h,d,()=>g=null,()=>f=!0);g&&(b+=Ps.lineComment(b,r,c(g))),f&&g&&(f=!1),p.push(i+b)}let m;if(p.length===0)m=n.start+n.end;else{m=p[0];for(let y=1;y<p.length;++y){let h=p[y];m+=h?`
47
+ ${l}${h}`:`
48
+ `}}return e?(m+=`
49
+ `+Ps.indentComment(c(e),l),a&&a()):f&&o&&o(),m}function Jd({items:e},t,{flowChars:s,itemIndent:i}){let{indent:n,indentStep:r,flowCollectionPadding:o,options:{commentString:a}}=t;i+=r;let l=Object.assign({},t,{indent:i,inFlow:!0,type:null}),c=!1,d=0,f=[];for(let y=0;y<e.length;++y){let h=e[y],g=null;if(Fe.isNode(h))h.spaceBefore&&f.push(""),Ns(t,f,h.commentBefore,!1),h.comment&&(g=h.comment);else if(Fe.isPair(h)){let v=Fe.isNode(h.key)?h.key:null;v&&(v.spaceBefore&&f.push(""),Ns(t,f,v.commentBefore,!1),v.comment&&(c=!0));let k=Fe.isNode(h.value)?h.value:null;k?(k.comment&&(g=k.comment),k.commentBefore&&(c=!0)):h.value==null&&v?.comment&&(g=v.comment)}g&&(c=!0);let b=ba.stringify(h,l,()=>g=null);c||(c=f.length>d||b.includes(`
50
+ `)),y<e.length-1?b+=",":t.options.trailingComma&&(t.options.lineWidth>0&&(c||(c=f.reduce((v,k)=>v+k.length+2,2)+(b.length+2)>t.options.lineWidth)),c&&(b+=",")),g&&(b+=Ps.lineComment(b,i,a(g))),f.push(b),d=f.length}let{start:p,end:m}=s;if(f.length===0)return p+m;if(!c){let y=f.reduce((h,g)=>h+g.length+2,2);c=t.options.lineWidth>0&&y>t.options.lineWidth}if(c){let y=p;for(let h of f)y+=h?`
51
+ ${r}${n}${h}`:`
52
+ `;return`${y}
53
+ ${n}${m}`}else return`${p}${o}${f.join(" ")}${o}${m}`}function Ns({indent:e,options:{commentString:t}},s,i,n){if(i&&n&&(i=i.replace(/^\n+/,"")),i){let r=Ps.indentComment(t(i),e);s.push(r.trimStart())}}wa.stringifyCollection=Vd});var xe=A(ln=>{"use strict";var Hd=on(),Yd=nn(),Gd=gs(),$e=D(),Is=Se(),Wd=F();function Nt(e,t){let s=$e.isScalar(t)?t.value:t;for(let i of e)if($e.isPair(i)&&(i.key===t||i.key===s||$e.isScalar(i.key)&&i.key.value===s))return i}var an=class extends Gd.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(t){super($e.MAP,t),this.items=[]}static from(t,s,i){let{keepUndefined:n,replacer:r}=i,o=new this(t),a=(l,c)=>{if(typeof r=="function")c=r.call(s,l,c);else if(Array.isArray(r)&&!r.includes(l))return;(c!==void 0||n)&&o.items.push(Is.createPair(l,c,i))};if(s instanceof Map)for(let[l,c]of s)a(l,c);else if(s&&typeof s=="object")for(let l of Object.keys(s))a(l,s[l]);return typeof t.sortMapEntries=="function"&&o.items.sort(t.sortMapEntries),o}add(t,s){let i;$e.isPair(t)?i=t:!t||typeof t!="object"||!("key"in t)?i=new Is.Pair(t,t?.value):i=new Is.Pair(t.key,t.value);let n=Nt(this.items,i.key),r=this.schema?.sortMapEntries;if(n){if(!s)throw new Error(`Key ${i.key} already set`);$e.isScalar(n.value)&&Wd.isScalarValue(i.value)?n.value.value=i.value:n.value=i.value}else if(r){let o=this.items.findIndex(a=>r(i,a)<0);o===-1?this.items.push(i):this.items.splice(o,0,i)}else this.items.push(i)}delete(t){let s=Nt(this.items,t);return s?this.items.splice(this.items.indexOf(s),1).length>0:!1}get(t,s){let n=Nt(this.items,t)?.value;return(!s&&$e.isScalar(n)?n.value:n)??void 0}has(t){return!!Nt(this.items,t)}set(t,s){this.add(new Is.Pair(t,s),!0)}toJSON(t,s,i){let n=i?new i:s?.mapAsMap?new Map:{};s?.onCreate&&s.onCreate(n);for(let r of this.items)Yd.addPairToJSMap(s,n,r);return n}toString(t,s,i){if(!t)return JSON.stringify(this);for(let n of this.items)if(!$e.isPair(n))throw new Error(`Map items must all be pairs; found ${JSON.stringify(n)} instead`);return!t.allNullValues&&this.hasAllNullValues(!1)&&(t=Object.assign({},t,{allNullValues:!0})),Hd.stringifyCollection(this,t,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:t.indent||"",onChompKeep:i,onComment:s})}};ln.YAMLMap=an;ln.findPair=Nt});var tt=A(ka=>{"use strict";var zd=D(),va=xe(),Qd={collection:"map",default:!0,nodeClass:va.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(e,t){return zd.isMap(e)||t("Expected a mapping for this tag"),e},createNode:(e,t,s)=>va.YAMLMap.from(e,t,s)};ka.map=Qd});var Ce=A(Sa=>{"use strict";var Xd=kt(),Zd=on(),ep=gs(),Rs=D(),tp=F(),sp=be(),cn=class extends ep.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(t){super(Rs.SEQ,t),this.items=[]}add(t){this.items.push(t)}delete(t){let s=Ls(t);return typeof s!="number"?!1:this.items.splice(s,1).length>0}get(t,s){let i=Ls(t);if(typeof i!="number")return;let n=this.items[i];return!s&&Rs.isScalar(n)?n.value:n}has(t){let s=Ls(t);return typeof s=="number"&&s<this.items.length}set(t,s){let i=Ls(t);if(typeof i!="number")throw new Error(`Expected a valid index, not ${t}.`);let n=this.items[i];Rs.isScalar(n)&&tp.isScalarValue(s)?n.value=s:this.items[i]=s}toJSON(t,s){let i=[];s?.onCreate&&s.onCreate(i);let n=0;for(let r of this.items)i.push(sp.toJS(r,String(n++),s));return i}toString(t,s,i){return t?Zd.stringifyCollection(this,t,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(t.indent||"")+" ",onChompKeep:i,onComment:s}):JSON.stringify(this)}static from(t,s,i){let{replacer:n}=i,r=new this(t);if(s&&Symbol.iterator in Object(s)){let o=0;for(let a of s){if(typeof n=="function"){let l=s instanceof Set?a:String(o++);a=n.call(s,l,a)}r.items.push(Xd.createNode(a,void 0,i))}}return r}};function Ls(e){let t=Rs.isScalar(e)?e.value:e;return t&&typeof t=="string"&&(t=Number(t)),typeof t=="number"&&Number.isInteger(t)&&t>=0?t:null}Sa.YAMLSeq=cn});var st=A(xa=>{"use strict";var ip=D(),$a=Ce(),np={collection:"seq",default:!0,nodeClass:$a.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(e,t){return ip.isSeq(e)||t("Expected a sequence for this tag"),e},createNode:(e,t,s)=>$a.YAMLSeq.from(e,t,s)};xa.seq=np});var It=A(Ca=>{"use strict";var rp=Ct(),op={identify:e=>typeof e=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify(e,t,s,i){return t=Object.assign({actualString:!0},t),rp.stringifyString(e,t,s,i)}};Ca.string=op});var Os=A(Pa=>{"use strict";var Ea=F(),Aa={identify:e=>e==null,createNode:()=>new Ea.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Ea.Scalar(null),stringify:({source:e},t)=>typeof e=="string"&&Aa.test.test(e)?e:t.options.nullStr};Pa.nullTag=Aa});var un=A(Ia=>{"use strict";var ap=F(),Na={identify:e=>typeof e=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:e=>new ap.Scalar(e[0]==="t"||e[0]==="T"),stringify({source:e,value:t},s){if(e&&Na.test.test(e)){let i=e[0]==="t"||e[0]==="T";if(t===i)return e}return t?s.options.trueStr:s.options.falseStr}};Ia.boolTag=Na});var it=A(La=>{"use strict";function lp({format:e,minFractionDigits:t,tag:s,value:i}){if(typeof i=="bigint")return String(i);let n=typeof i=="number"?i:Number(i);if(!isFinite(n))return isNaN(n)?".nan":n<0?"-.inf":".inf";let r=Object.is(i,-0)?"-0":JSON.stringify(i);if(!e&&t&&(!s||s==="tag:yaml.org,2002:float")&&/^\d/.test(r)){let o=r.indexOf(".");o<0&&(o=r.length,r+=".");let a=t-(r.length-o-1);for(;a-- >0;)r+="0"}return r}La.stringifyNumber=lp});var dn=A(Ts=>{"use strict";var cp=F(),fn=it(),up={identify:e=>typeof e=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:e=>e.slice(-3).toLowerCase()==="nan"?NaN:e[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:fn.stringifyNumber},fp={identify:e=>typeof e=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:e=>parseFloat(e),stringify(e){let t=Number(e.value);return isFinite(t)?t.toExponential():fn.stringifyNumber(e)}},dp={identify:e=>typeof e=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(e){let t=new cp.Scalar(parseFloat(e)),s=e.indexOf(".");return s!==-1&&e[e.length-1]==="0"&&(t.minFractionDigits=e.length-s-1),t},stringify:fn.stringifyNumber};Ts.float=dp;Ts.floatExp=fp;Ts.floatNaN=up});var mn=A(Ds=>{"use strict";var Ra=it(),Ms=e=>typeof e=="bigint"||Number.isInteger(e),pn=(e,t,s,{intAsBigInt:i})=>i?BigInt(e):parseInt(e.substring(t),s);function Oa(e,t,s){let{value:i}=e;return Ms(i)&&i>=0?s+i.toString(t):Ra.stringifyNumber(e)}var pp={identify:e=>Ms(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(e,t,s)=>pn(e,2,8,s),stringify:e=>Oa(e,8,"0o")},mp={identify:Ms,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(e,t,s)=>pn(e,0,10,s),stringify:Ra.stringifyNumber},hp={identify:e=>Ms(e)&&e>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(e,t,s)=>pn(e,2,16,s),stringify:e=>Oa(e,16,"0x")};Ds.int=mp;Ds.intHex=hp;Ds.intOct=pp});var Ma=A(Ta=>{"use strict";var gp=tt(),yp=Os(),bp=st(),wp=It(),vp=un(),hn=dn(),gn=mn(),kp=[gp.map,bp.seq,wp.string,yp.nullTag,vp.boolTag,gn.intOct,gn.int,gn.intHex,hn.floatNaN,hn.floatExp,hn.float];Ta.schema=kp});var qa=A(_a=>{"use strict";var Sp=F(),$p=tt(),xp=st();function Da(e){return typeof e=="bigint"||Number.isInteger(e)}var _s=({value:e})=>JSON.stringify(e),Cp=[{identify:e=>typeof e=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:e=>e,stringify:_s},{identify:e=>e==null,createNode:()=>new Sp.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:_s},{identify:e=>typeof e=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:e=>e==="true",stringify:_s},{identify:Da,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(e,t,{intAsBigInt:s})=>s?BigInt(e):parseInt(e,10),stringify:({value:e})=>Da(e)?e.toString():JSON.stringify(e)},{identify:e=>typeof e=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:e=>parseFloat(e),stringify:_s}],Ep={default:!0,tag:"",test:/^/,resolve(e,t){return t(`Unresolved plain scalar ${JSON.stringify(e)}`),e}},Ap=[$p.map,xp.seq].concat(Cp,Ep);_a.schema=Ap});var bn=A(Fa=>{"use strict";var Lt=Zt("buffer"),yn=F(),Pp=Ct(),Np={identify:e=>e instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(e,t){if(typeof Lt.Buffer=="function")return Lt.Buffer.from(e,"base64");if(typeof atob=="function"){let s=atob(e.replace(/[\n\r]/g,"")),i=new Uint8Array(s.length);for(let n=0;n<s.length;++n)i[n]=s.charCodeAt(n);return i}else return t("This environment does not support reading binary tags; either Buffer or atob is required"),e},stringify({comment:e,type:t,value:s},i,n,r){if(!s)return"";let o=s,a;if(typeof Lt.Buffer=="function")a=o instanceof Lt.Buffer?o.toString("base64"):Lt.Buffer.from(o.buffer).toString("base64");else if(typeof btoa=="function"){let l="";for(let c=0;c<o.length;++c)l+=String.fromCharCode(o[c]);a=btoa(l)}else throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(t??(t=yn.Scalar.BLOCK_LITERAL),t!==yn.Scalar.QUOTE_DOUBLE){let l=Math.max(i.options.lineWidth-i.indent.length,i.options.minContentWidth),c=Math.ceil(a.length/l),d=new Array(c);for(let f=0,p=0;f<c;++f,p+=l)d[f]=a.substr(p,l);a=d.join(t===yn.Scalar.BLOCK_LITERAL?`
54
+ `:" ")}return Pp.stringifyString({comment:e,type:t,value:a},i,n,r)}};Fa.binary=Np});var js=A(Fs=>{"use strict";var qs=D(),wn=Se(),Ip=F(),Lp=Ce();function ja(e,t){if(qs.isSeq(e))for(let s=0;s<e.items.length;++s){let i=e.items[s];if(!qs.isPair(i)){if(qs.isMap(i)){i.items.length>1&&t("Each pair must have its own sequence indicator");let n=i.items[0]||new wn.Pair(new Ip.Scalar(null));if(i.commentBefore&&(n.key.commentBefore=n.key.commentBefore?`${i.commentBefore}
55
+ ${n.key.commentBefore}`:i.commentBefore),i.comment){let r=n.value??n.key;r.comment=r.comment?`${i.comment}
56
+ ${r.comment}`:i.comment}i=n}e.items[s]=qs.isPair(i)?i:new wn.Pair(i)}}else t("Expected a sequence for this tag");return e}function Ba(e,t,s){let{replacer:i}=s,n=new Lp.YAMLSeq(e);n.tag="tag:yaml.org,2002:pairs";let r=0;if(t&&Symbol.iterator in Object(t))for(let o of t){typeof i=="function"&&(o=i.call(t,String(r++),o));let a,l;if(Array.isArray(o))if(o.length===2)a=o[0],l=o[1];else throw new TypeError(`Expected [key, value] tuple: ${o}`);else if(o&&o instanceof Object){let c=Object.keys(o);if(c.length===1)a=c[0],l=o[a];else throw new TypeError(`Expected tuple with one key, not ${c.length} keys`)}else a=o;n.items.push(wn.createPair(a,l,s))}return n}var Rp={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:ja,createNode:Ba};Fs.createPairs=Ba;Fs.pairs=Rp;Fs.resolvePairs=ja});var Sn=A(kn=>{"use strict";var Ua=D(),vn=be(),Rt=xe(),Op=Ce(),Va=js(),je=class e extends Op.YAMLSeq{constructor(){super(),this.add=Rt.YAMLMap.prototype.add.bind(this),this.delete=Rt.YAMLMap.prototype.delete.bind(this),this.get=Rt.YAMLMap.prototype.get.bind(this),this.has=Rt.YAMLMap.prototype.has.bind(this),this.set=Rt.YAMLMap.prototype.set.bind(this),this.tag=e.tag}toJSON(t,s){if(!s)return super.toJSON(t);let i=new Map;s?.onCreate&&s.onCreate(i);for(let n of this.items){let r,o;if(Ua.isPair(n)?(r=vn.toJS(n.key,"",s),o=vn.toJS(n.value,r,s)):r=vn.toJS(n,"",s),i.has(r))throw new Error("Ordered maps must not include duplicate keys");i.set(r,o)}return i}static from(t,s,i){let n=Va.createPairs(t,s,i),r=new this;return r.items=n.items,r}};je.tag="tag:yaml.org,2002:omap";var Tp={collection:"seq",identify:e=>e instanceof Map,nodeClass:je,default:!1,tag:"tag:yaml.org,2002:omap",resolve(e,t){let s=Va.resolvePairs(e,t),i=[];for(let{key:n}of s.items)Ua.isScalar(n)&&(i.includes(n.value)?t(`Ordered maps must not include duplicate keys: ${n.value}`):i.push(n.value));return Object.assign(new je,s)},createNode:(e,t,s)=>je.from(e,t,s)};kn.YAMLOMap=je;kn.omap=Tp});var Ga=A($n=>{"use strict";var Ka=F();function Ja({value:e,source:t},s){return t&&(e?Ha:Ya).test.test(t)?t:e?s.options.trueStr:s.options.falseStr}var Ha={identify:e=>e===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new Ka.Scalar(!0),stringify:Ja},Ya={identify:e=>e===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new Ka.Scalar(!1),stringify:Ja};$n.falseTag=Ya;$n.trueTag=Ha});var Wa=A(Bs=>{"use strict";var Mp=F(),xn=it(),Dp={identify:e=>typeof e=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:e=>e.slice(-3).toLowerCase()==="nan"?NaN:e[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:xn.stringifyNumber},_p={identify:e=>typeof e=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:e=>parseFloat(e.replace(/_/g,"")),stringify(e){let t=Number(e.value);return isFinite(t)?t.toExponential():xn.stringifyNumber(e)}},qp={identify:e=>typeof e=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(e){let t=new Mp.Scalar(parseFloat(e.replace(/_/g,""))),s=e.indexOf(".");if(s!==-1){let i=e.substring(s+1).replace(/_/g,"");i[i.length-1]==="0"&&(t.minFractionDigits=i.length)}return t},stringify:xn.stringifyNumber};Bs.float=qp;Bs.floatExp=_p;Bs.floatNaN=Dp});var Qa=A(Tt=>{"use strict";var za=it(),Ot=e=>typeof e=="bigint"||Number.isInteger(e);function Us(e,t,s,{intAsBigInt:i}){let n=e[0];if((n==="-"||n==="+")&&(t+=1),e=e.substring(t).replace(/_/g,""),i){switch(s){case 2:e=`0b${e}`;break;case 8:e=`0o${e}`;break;case 16:e=`0x${e}`;break}let o=BigInt(e);return n==="-"?BigInt(-1)*o:o}let r=parseInt(e,s);return n==="-"?-1*r:r}function Cn(e,t,s){let{value:i}=e;if(Ot(i)){let n=i.toString(t);return i<0?"-"+s+n.substr(1):s+n}return za.stringifyNumber(e)}var Fp={identify:Ot,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(e,t,s)=>Us(e,2,2,s),stringify:e=>Cn(e,2,"0b")},jp={identify:Ot,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(e,t,s)=>Us(e,1,8,s),stringify:e=>Cn(e,8,"0")},Bp={identify:Ot,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(e,t,s)=>Us(e,0,10,s),stringify:za.stringifyNumber},Up={identify:Ot,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(e,t,s)=>Us(e,2,16,s),stringify:e=>Cn(e,16,"0x")};Tt.int=Bp;Tt.intBin=Fp;Tt.intHex=Up;Tt.intOct=jp});var An=A(En=>{"use strict";var Js=D(),Vs=Se(),Ks=xe(),Be=class e extends Ks.YAMLMap{constructor(t){super(t),this.tag=e.tag}add(t){let s;Js.isPair(t)?s=t:t&&typeof t=="object"&&"key"in t&&"value"in t&&t.value===null?s=new Vs.Pair(t.key,null):s=new Vs.Pair(t,null),Ks.findPair(this.items,s.key)||this.items.push(s)}get(t,s){let i=Ks.findPair(this.items,t);return!s&&Js.isPair(i)?Js.isScalar(i.key)?i.key.value:i.key:i}set(t,s){if(typeof s!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof s}`);let i=Ks.findPair(this.items,t);i&&!s?this.items.splice(this.items.indexOf(i),1):!i&&s&&this.items.push(new Vs.Pair(t))}toJSON(t,s){return super.toJSON(t,s,Set)}toString(t,s,i){if(!t)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},t,{allNullValues:!0}),s,i);throw new Error("Set items must all have null values")}static from(t,s,i){let{replacer:n}=i,r=new this(t);if(s&&Symbol.iterator in Object(s))for(let o of s)typeof n=="function"&&(o=n.call(s,o,o)),r.items.push(Vs.createPair(o,null,i));return r}};Be.tag="tag:yaml.org,2002:set";var Vp={collection:"map",identify:e=>e instanceof Set,nodeClass:Be,default:!1,tag:"tag:yaml.org,2002:set",createNode:(e,t,s)=>Be.from(e,t,s),resolve(e,t){if(Js.isMap(e)){if(e.hasAllNullValues(!0))return Object.assign(new Be,e);t("Set items must all have null values")}else t("Expected a mapping for this tag");return e}};En.YAMLSet=Be;En.set=Vp});var Nn=A(Hs=>{"use strict";var Kp=it();function Pn(e,t){let s=e[0],i=s==="-"||s==="+"?e.substring(1):e,n=o=>t?BigInt(o):Number(o),r=i.replace(/_/g,"").split(":").reduce((o,a)=>o*n(60)+n(a),n(0));return s==="-"?n(-1)*r:r}function Xa(e){let{value:t}=e,s=o=>o;if(typeof t=="bigint")s=o=>BigInt(o);else if(isNaN(t)||!isFinite(t))return Kp.stringifyNumber(e);let i="";t<0&&(i="-",t*=s(-1));let n=s(60),r=[t%n];return t<60?r.unshift(0):(t=(t-r[0])/n,r.unshift(t%n),t>=60&&(t=(t-r[0])/n,r.unshift(t))),i+r.map(o=>String(o).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var Jp={identify:e=>typeof e=="bigint"||Number.isInteger(e),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(e,t,{intAsBigInt:s})=>Pn(e,s),stringify:Xa},Hp={identify:e=>typeof e=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:e=>Pn(e,!1),stringify:Xa},Za={identify:e=>e instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(e){let t=e.match(Za.test);if(!t)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,s,i,n,r,o,a]=t.map(Number),l=t[7]?Number((t[7]+"00").substr(1,3)):0,c=Date.UTC(s,i-1,n,r||0,o||0,a||0,l),d=t[8];if(d&&d!=="Z"){let f=Pn(d,!1);Math.abs(f)<30&&(f*=60),c-=6e4*f}return new Date(c)},stringify:({value:e})=>e?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};Hs.floatTime=Hp;Hs.intTime=Jp;Hs.timestamp=Za});var sl=A(tl=>{"use strict";var Yp=tt(),Gp=Os(),Wp=st(),zp=It(),Qp=bn(),el=Ga(),In=Wa(),Ys=Qa(),Xp=Cs(),Zp=Sn(),em=js(),tm=An(),Ln=Nn(),sm=[Yp.map,Wp.seq,zp.string,Gp.nullTag,el.trueTag,el.falseTag,Ys.intBin,Ys.intOct,Ys.int,Ys.intHex,In.floatNaN,In.floatExp,In.float,Qp.binary,Xp.merge,Zp.omap,em.pairs,tm.set,Ln.intTime,Ln.floatTime,Ln.timestamp];tl.schema=sm});var dl=A(Tn=>{"use strict";var ol=tt(),im=Os(),al=st(),nm=It(),rm=un(),Rn=dn(),On=mn(),om=Ma(),am=qa(),ll=bn(),Mt=Cs(),cl=Sn(),ul=js(),il=sl(),fl=An(),Gs=Nn(),nl=new Map([["core",om.schema],["failsafe",[ol.map,al.seq,nm.string]],["json",am.schema],["yaml11",il.schema],["yaml-1.1",il.schema]]),rl={binary:ll.binary,bool:rm.boolTag,float:Rn.float,floatExp:Rn.floatExp,floatNaN:Rn.floatNaN,floatTime:Gs.floatTime,int:On.int,intHex:On.intHex,intOct:On.intOct,intTime:Gs.intTime,map:ol.map,merge:Mt.merge,null:im.nullTag,omap:cl.omap,pairs:ul.pairs,seq:al.seq,set:fl.set,timestamp:Gs.timestamp},lm={"tag:yaml.org,2002:binary":ll.binary,"tag:yaml.org,2002:merge":Mt.merge,"tag:yaml.org,2002:omap":cl.omap,"tag:yaml.org,2002:pairs":ul.pairs,"tag:yaml.org,2002:set":fl.set,"tag:yaml.org,2002:timestamp":Gs.timestamp};function cm(e,t,s){let i=nl.get(t);if(i&&!e)return s&&!i.includes(Mt.merge)?i.concat(Mt.merge):i.slice();let n=i;if(!n)if(Array.isArray(e))n=[];else{let r=Array.from(nl.keys()).filter(o=>o!=="yaml11").map(o=>JSON.stringify(o)).join(", ");throw new Error(`Unknown schema "${t}"; use one of ${r} or define customTags array`)}if(Array.isArray(e))for(let r of e)n=n.concat(r);else typeof e=="function"&&(n=e(n.slice()));return s&&(n=n.concat(Mt.merge)),n.reduce((r,o)=>{let a=typeof o=="string"?rl[o]:o;if(!a){let l=JSON.stringify(o),c=Object.keys(rl).map(d=>JSON.stringify(d)).join(", ");throw new Error(`Unknown custom tag ${l}; use one of ${c}`)}return r.includes(a)||r.push(a),r},[])}Tn.coreKnownTags=lm;Tn.getTags=cm});var _n=A(pl=>{"use strict";var Mn=D(),um=tt(),fm=st(),dm=It(),Ws=dl(),pm=(e,t)=>e.key<t.key?-1:e.key>t.key?1:0,Dn=class e{constructor({compat:t,customTags:s,merge:i,resolveKnownTags:n,schema:r,sortMapEntries:o,toStringDefaults:a}){this.compat=Array.isArray(t)?Ws.getTags(t,"compat"):t?Ws.getTags(null,t):null,this.name=typeof r=="string"&&r||"core",this.knownTags=n?Ws.coreKnownTags:{},this.tags=Ws.getTags(s,this.name,i),this.toStringOptions=a??null,Object.defineProperty(this,Mn.MAP,{value:um.map}),Object.defineProperty(this,Mn.SCALAR,{value:dm.string}),Object.defineProperty(this,Mn.SEQ,{value:fm.seq}),this.sortMapEntries=typeof o=="function"?o:o===!0?pm:null}clone(){let t=Object.create(e.prototype,Object.getOwnPropertyDescriptors(this));return t.tags=this.tags.slice(),t}};pl.Schema=Dn});var hl=A(ml=>{"use strict";var mm=D(),qn=Et(),Dt=St();function hm(e,t){let s=[],i=t.directives===!0;if(t.directives!==!1&&e.directives){let l=e.directives.toString(e);l?(s.push(l),i=!0):e.directives.docStart&&(i=!0)}i&&s.push("---");let n=qn.createStringifyContext(e,t),{commentString:r}=n.options;if(e.commentBefore){s.length!==1&&s.unshift("");let l=r(e.commentBefore);s.unshift(Dt.indentComment(l,""))}let o=!1,a=null;if(e.contents){if(mm.isNode(e.contents)){if(e.contents.spaceBefore&&i&&s.push(""),e.contents.commentBefore){let d=r(e.contents.commentBefore);s.push(Dt.indentComment(d,""))}n.forceBlockIndent=!!e.comment,a=e.contents.comment}let l=a?void 0:()=>o=!0,c=qn.stringify(e.contents,n,()=>a=null,l);a&&(c+=Dt.lineComment(c,"",r(a))),(c[0]==="|"||c[0]===">")&&s[s.length-1]==="---"?s[s.length-1]=`--- ${c}`:s.push(c)}else s.push(qn.stringify(e.contents,n));if(e.directives?.docEnd)if(e.comment){let l=r(e.comment);l.includes(`
57
+ `)?(s.push("..."),s.push(Dt.indentComment(l,""))):s.push(`... ${l}`)}else s.push("...");else{let l=e.comment;l&&o&&(l=l.replace(/^\n+/,"")),l&&((!o||a)&&s[s.length-1]!==""&&s.push(""),s.push(Dt.indentComment(r(l),"")))}return s.join(`
57
58
  `)+`
58
- `}Lz.stringifyDocument=Oz});var P$=N((Nz)=>{var Az=B$(),Z$=Jq(),Z0=k(),Iz=I0(),Tz=L0(),Mz=s1(),Rz=v9(),r1=Qq(),jz=L1(),wz=K$(),e1=O1();class $4{constructor($,q,Z){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,Z0.NODE_TYPE,{value:Z0.DOC});let Q=null;if(typeof q==="function"||Array.isArray(q))Q=q;else if(Z===void 0&&q)Z=q,q=void 0;let X=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},Z);this.options=X;let{version:z}=X;if(Z?._directives){if(this.directives=Z._directives.atDocument(),this.directives.yaml.explicit)z=this.directives.yaml.version}else this.directives=new e1.Directives({version:z});this.setSchema(z,Z),this.contents=$===void 0?null:this.createNode($,Q,Z)}clone(){let $=Object.create($4.prototype,{[Z0.NODE_TYPE]:{value:Z0.DOC}});if($.commentBefore=this.commentBefore,$.comment=this.comment,$.errors=this.errors.slice(),$.warnings=this.warnings.slice(),$.options=Object.assign({},this.options),this.directives)$.directives=this.directives.clone();if($.schema=this.schema.clone(),$.contents=Z0.isNode(this.contents)?this.contents.clone($.schema):this.contents,this.range)$.range=this.range.slice();return $}add($){if(Q$(this.contents))this.contents.add($)}addIn($,q){if(Q$(this.contents))this.contents.addIn($,q)}createAlias($,q){if(!$.anchor){let Z=r1.anchorNames(this);$.anchor=!q||Z.has(q)?r1.findNewAnchor(q||"a",Z):q}return new Az.Alias($.anchor)}createNode($,q,Z){let Q=void 0;if(typeof q==="function")$=q.call({"":$},"",$),Q=q;else if(Array.isArray(q)){let K=(F)=>typeof F==="number"||F instanceof String||F instanceof Number,L=q.filter(K).map(String);if(L.length>0)q=q.concat(L);Q=q}else if(Z===void 0&&q)Z=q,q=void 0;let{aliasDuplicateObjects:X,anchorPrefix:z,flow:J,keepUndefined:Y,onTagObj:G,tag:U}=Z??{},{onAnchor:H,setAnchors:V,sourceObjects:B}=r1.createNodeAnchors(this,z||"a"),_={aliasDuplicateObjects:X??!0,keepUndefined:Y??!1,onAnchor:H,onTagObj:G,replacer:Q,schema:this.schema,sourceObjects:B},O=wz.createNode($,U,_);if(J&&Z0.isCollection(O))O.flow=!0;return V(),O}createPair($,q,Z={}){let Q=this.createNode($,null,Z),X=this.createNode(q,null,Z);return new Iz.Pair(Q,X)}delete($){return Q$(this.contents)?this.contents.delete($):!1}deleteIn($){if(Z$.isEmptyPath($)){if(this.contents==null)return!1;return this.contents=null,!0}return Q$(this.contents)?this.contents.deleteIn($):!1}get($,q){return Z0.isCollection(this.contents)?this.contents.get($,q):void 0}getIn($,q){if(Z$.isEmptyPath($))return!q&&Z0.isScalar(this.contents)?this.contents.value:this.contents;return Z0.isCollection(this.contents)?this.contents.getIn($,q):void 0}has($){return Z0.isCollection(this.contents)?this.contents.has($):!1}hasIn($){if(Z$.isEmptyPath($))return this.contents!==void 0;return Z0.isCollection(this.contents)?this.contents.hasIn($):!1}set($,q){if(this.contents==null)this.contents=Z$.collectionFromPath(this.schema,[$],q);else if(Q$(this.contents))this.contents.set($,q)}setIn($,q){if(Z$.isEmptyPath($))this.contents=q;else if(this.contents==null)this.contents=Z$.collectionFromPath(this.schema,Array.from($),q);else if(Q$(this.contents))this.contents.setIn($,q)}setSchema($,q={}){if(typeof $==="number")$=String($);let Z;switch($){case"1.1":if(this.directives)this.directives.yaml.version="1.1";else this.directives=new e1.Directives({version:"1.1"});Z={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":if(this.directives)this.directives.yaml.version=$;else this.directives=new e1.Directives({version:$});Z={resolveKnownTags:!0,schema:"core"};break;case null:if(this.directives)delete this.directives;Z=null;break;default:{let Q=JSON.stringify($);throw Error(`Expected '1.1', '1.2' or null as first argument, but found: ${Q}`)}}if(q.schema instanceof Object)this.schema=q.schema;else if(Z)this.schema=new Mz.Schema(Object.assign(Z,q));else throw Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:$,jsonArg:q,mapAsMap:Z,maxAliasCount:Q,onAnchor:X,reviver:z}={}){let J={anchors:new Map,doc:this,keep:!$,mapAsMap:Z===!0,mapKeyWarned:!1,maxAliasCount:typeof Q==="number"?Q:100},Y=Tz.toJS(this.contents,q??"",J);if(typeof X==="function")for(let{count:G,res:U}of J.anchors.values())X(U,G);return typeof z==="function"?jz.applyReviver(z,{"":Y},"",Y):Y}toJSON($,q){return this.toJS({json:!0,jsonArg:$,mapAsMap:!1,onAnchor:q})}toString($={}){if(this.errors.length>0)throw Error("Document with errors cannot be stringified");if("indent"in $&&(!Number.isInteger($.indent)||Number($.indent)<=0)){let q=JSON.stringify($.indent);throw Error(`"indent" option must be a positive integer, not ${q}`)}return Rz.stringifyDocument(this,$)}}function Q$($){if(Z0.isCollection($))return!0;throw Error("Expected a YAML collection as document contents")}Nz.Document=$4});var C$=N((Cz)=>{class bq extends Error{constructor($,q,Z,Q){super();this.name=$,this.code=Z,this.message=Q,this.pos=q}}class h9 extends bq{constructor($,q,Z){super("YAMLParseError",$,q,Z)}}class g9 extends bq{constructor($,q,Z){super("YAMLWarning",$,q,Z)}}var Pz=($,q)=>(Z)=>{if(Z.pos[0]===-1)return;Z.linePos=Z.pos.map((Y)=>q.linePos(Y));let{line:Q,col:X}=Z.linePos[0];Z.message+=` at line ${Q}, column ${X}`;let z=X-1,J=$.substring(q.lineStarts[Q-1],q.lineStarts[Q]).replace(/[\n\r]+$/,"");if(z>=60&&J.length>80){let Y=Math.min(z-39,J.length-79);J=""+J.substring(Y),z-=Y-1}if(J.length>80)J=J.substring(0,79)+"";if(Q>1&&/^ *$/.test(J.substring(0,z))){let Y=$.substring(q.lineStarts[Q-2],q.lineStarts[Q-1]);if(Y.length>80)Y=Y.substring(0,79)+`…
59
- `;J=Y+J}if(/[^ ]/.test(J)){let Y=1,G=Z.linePos[1];if(G?.line===Q&&G.col>X)Y=Math.max(1,Math.min(G.col-X,80-z));let U=" ".repeat(z)+"^".repeat(Y);Z.message+=`:
60
-
61
- ${J}
62
- ${U}
63
- `}};Cz.YAMLError=bq;Cz.YAMLParseError=h9;Cz.YAMLWarning=g9;Cz.prettifyError=Pz});var E$=N((yz)=>{function fz($,{flow:q,indicator:Z,next:Q,offset:X,onError:z,parentIndent:J,startOnNewline:Y}){let G=!1,U=Y,H=Y,V="",B="",_=!1,O=!1,K=null,L=null,F=null,A=null,M=null,j=null,T=null;for(let P of $){if(O){if(P.type!=="space"&&P.type!=="newline"&&P.type!=="comma")z(P.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");O=!1}if(K){if(U&&P.type!=="comment"&&P.type!=="newline")z(K,"TAB_AS_INDENT","Tabs are not allowed as indentation");K=null}switch(P.type){case"space":if(!q&&(Z!=="doc-start"||Q?.type!=="flow-collection")&&P.source.includes("\t"))K=P;H=!0;break;case"comment":{if(!H)z(P,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let y=P.source.substring(1)||" ";if(!V)V=y;else V+=B+y;B="",U=!1;break}case"newline":if(U){if(V)V+=P.source;else if(!j||Z!=="seq-item-ind")G=!0}else B+=P.source;if(U=!0,_=!0,L||F)A=P;H=!0;break;case"anchor":if(L)z(P,"MULTIPLE_ANCHORS","A node can have at most one anchor");if(P.source.endsWith(":"))z(P.offset+P.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0);L=P,T??(T=P.offset),U=!1,H=!1,O=!0;break;case"tag":{if(F)z(P,"MULTIPLE_TAGS","A node can have at most one tag");F=P,T??(T=P.offset),U=!1,H=!1,O=!0;break}case Z:if(L||F)z(P,"BAD_PROP_ORDER",`Anchors and tags must be after the ${P.source} indicator`);if(j)z(P,"UNEXPECTED_TOKEN",`Unexpected ${P.source} in ${q??"collection"}`);j=P,U=Z==="seq-item-ind"||Z==="explicit-key-ind",H=!1;break;case"comma":if(q){if(M)z(P,"UNEXPECTED_TOKEN",`Unexpected , in ${q}`);M=P,U=!1,H=!1;break}default:z(P,"UNEXPECTED_TOKEN",`Unexpected ${P.type} token`),U=!1,H=!1}}let w=$[$.length-1],x=w?w.offset+w.source.length:X;if(O&&Q&&Q.type!=="space"&&Q.type!=="newline"&&Q.type!=="comma"&&(Q.type!=="scalar"||Q.source!==""))z(Q.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");if(K&&(U&&K.indent<=J||Q?.type==="block-map"||Q?.type==="block-seq"))z(K,"TAB_AS_INDENT","Tabs are not allowed as indentation");return{comma:M,found:j,spaceBefore:G,comment:V,hasNewline:_,anchor:L,tag:F,newlineAfterProp:A,end:x,start:T??x}}yz.resolveProps=fz});var xq=N((vz)=>{function q4($){if(!$)return null;switch($.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if($.source.includes(`
64
- `))return!0;if($.end){for(let q of $.end)if(q.type==="newline")return!0}return!1;case"flow-collection":for(let q of $.items){for(let Z of q.start)if(Z.type==="newline")return!0;if(q.sep){for(let Z of q.sep)if(Z.type==="newline")return!0}if(q4(q.key)||q4(q.value))return!0}return!1;default:return!0}}vz.containsNewline=q4});var Z4=N((mz)=>{var gz=xq();function uz($,q,Z){if(q?.type==="flow-collection"){let Q=q.end[0];if(Q.indent===$&&(Q.source==="]"||Q.source==="}")&&gz.containsNewline(q))Z(Q,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}mz.flowIndentCheck=uz});var Q4=N((cz)=>{var u9=k();function dz($,q,Z){let{uniqueKeys:Q}=$.options;if(Q===!1)return!1;let X=typeof Q==="function"?Q:(z,J)=>z===J||u9.isScalar(z)&&u9.isScalar(J)&&z.value===J.value;return q.some((z)=>X(z.key,Z))}cz.mapIncludes=dz});var l9=N((sz)=>{var m9=I0(),nz=M0(),p9=E$(),az=xq(),d9=Z4(),iz=Q4(),c9="All mapping items must start at the same column";function oz({composeNode:$,composeEmptyNode:q},Z,Q,X,z){let Y=new(z?.nodeClass??nz.YAMLMap)(Z.schema);if(Z.atRoot)Z.atRoot=!1;let G=Q.offset,U=null;for(let H of Q.items){let{start:V,key:B,sep:_,value:O}=H,K=p9.resolveProps(V,{indicator:"explicit-key-ind",next:B??_?.[0],offset:G,onError:X,parentIndent:Q.indent,startOnNewline:!0}),L=!K.found;if(L){if(B){if(B.type==="block-seq")X(G,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key");else if("indent"in B&&B.indent!==Q.indent)X(G,"BAD_INDENT",c9)}if(!K.anchor&&!K.tag&&!_){if(U=K.end,K.comment)if(Y.comment)Y.comment+=`
65
- `+K.comment;else Y.comment=K.comment;continue}if(K.newlineAfterProp||az.containsNewline(B))X(B??V[V.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else if(K.found?.indent!==Q.indent)X(G,"BAD_INDENT",c9);Z.atKey=!0;let F=K.end,A=B?$(Z,B,K,X):q(Z,F,V,null,K,X);if(Z.schema.compat)d9.flowIndentCheck(Q.indent,B,X);if(Z.atKey=!1,iz.mapIncludes(Z,Y.items,A))X(F,"DUPLICATE_KEY","Map keys must be unique");let M=p9.resolveProps(_??[],{indicator:"map-value-ind",next:O,offset:A.range[2],onError:X,parentIndent:Q.indent,startOnNewline:!B||B.type==="block-scalar"});if(G=M.end,M.found){if(L){if(O?.type==="block-map"&&!M.hasNewline)X(G,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings");if(Z.options.strict&&K.start<M.found.offset-1024)X(A.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key")}let j=O?$(Z,O,M,X):q(Z,G,_,null,M,X);if(Z.schema.compat)d9.flowIndentCheck(Q.indent,O,X);G=j.range[2];let T=new m9.Pair(A,j);if(Z.options.keepSourceTokens)T.srcToken=H;Y.items.push(T)}else{if(L)X(A.range,"MISSING_CHAR","Implicit map keys need to be followed by map values");if(M.comment)if(A.comment)A.comment+=`
66
- `+M.comment;else A.comment=M.comment;let j=new m9.Pair(A);if(Z.options.keepSourceTokens)j.srcToken=H;Y.items.push(j)}}if(U&&U<G)X(U,"IMPOSSIBLE","Map comment with trailing content");return Y.range=[Q.offset,G,U??G],Y}sz.resolveBlockMap=oz});var n9=N((ZJ)=>{var rz=R0(),ez=E$(),$J=Z4();function qJ({composeNode:$,composeEmptyNode:q},Z,Q,X,z){let Y=new(z?.nodeClass??rz.YAMLSeq)(Z.schema);if(Z.atRoot)Z.atRoot=!1;if(Z.atKey)Z.atKey=!1;let G=Q.offset,U=null;for(let{start:H,value:V}of Q.items){let B=ez.resolveProps(H,{indicator:"seq-item-ind",next:V,offset:G,onError:X,parentIndent:Q.indent,startOnNewline:!0});if(!B.found)if(B.anchor||B.tag||V)if(V?.type==="block-seq")X(B.end,"BAD_INDENT","All sequence items must start at the same column");else X(G,"MISSING_CHAR","Sequence item without - indicator");else{if(U=B.end,B.comment)Y.comment=B.comment;continue}let _=V?$(Z,V,B,X):q(Z,B.end,H,null,B,X);if(Z.schema.compat)$J.flowIndentCheck(Q.indent,V,X);G=_.range[2],Y.items.push(_)}return Y.range=[Q.offset,G,U??G],Y}ZJ.resolveBlockSeq=qJ});var X$=N((zJ)=>{function XJ($,q,Z,Q){let X="";if($){let z=!1,J="";for(let Y of $){let{source:G,type:U}=Y;switch(U){case"space":z=!0;break;case"comment":{if(Z&&!z)Q(Y,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let H=G.substring(1)||" ";if(!X)X=H;else X+=J+H;J="";break}case"newline":if(X)J+=G;z=!0;break;default:Q(Y,"UNEXPECTED_TOKEN",`Unexpected ${U} at node end`)}q+=G.length}}return{comment:X,offset:q}}zJ.resolveEnd=XJ});var o9=N((KJ)=>{var YJ=k(),GJ=I0(),a9=M0(),UJ=R0(),WJ=X$(),i9=E$(),VJ=xq(),HJ=Q4(),X4="Block collections are not allowed within flow collections",z4=($)=>$&&($.type==="block-map"||$.type==="block-seq");function BJ({composeNode:$,composeEmptyNode:q},Z,Q,X,z){let J=Q.start.source==="{",Y=J?"flow map":"flow sequence",U=new(z?.nodeClass??(J?a9.YAMLMap:UJ.YAMLSeq))(Z.schema);U.flow=!0;let H=Z.atRoot;if(H)Z.atRoot=!1;if(Z.atKey)Z.atKey=!1;let V=Q.offset+Q.start.source.length;for(let L=0;L<Q.items.length;++L){let F=Q.items[L],{start:A,key:M,sep:j,value:T}=F,w=i9.resolveProps(A,{flow:Y,indicator:"explicit-key-ind",next:M??j?.[0],offset:V,onError:X,parentIndent:Q.indent,startOnNewline:!1});if(!w.found){if(!w.anchor&&!w.tag&&!j&&!T){if(L===0&&w.comma)X(w.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${Y}`);else if(L<Q.items.length-1)X(w.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${Y}`);if(w.comment)if(U.comment)U.comment+=`
67
- `+w.comment;else U.comment=w.comment;V=w.end;continue}if(!J&&Z.options.strict&&VJ.containsNewline(M))X(M,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(L===0){if(w.comma)X(w.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${Y}`)}else{if(!w.comma)X(w.start,"MISSING_CHAR",`Missing , between ${Y} items`);if(w.comment){let x="";$:for(let P of A)switch(P.type){case"comma":case"space":break;case"comment":x=P.source.substring(1);break $;default:break $}if(x){let P=U.items[U.items.length-1];if(YJ.isPair(P))P=P.value??P.key;if(P.comment)P.comment+=`
68
- `+x;else P.comment=x;w.comment=w.comment.substring(x.length+1)}}}if(!J&&!j&&!w.found){let x=T?$(Z,T,w,X):q(Z,w.end,j,null,w,X);if(U.items.push(x),V=x.range[2],z4(T))X(x.range,"BLOCK_IN_FLOW",X4)}else{Z.atKey=!0;let x=w.end,P=M?$(Z,M,w,X):q(Z,x,A,null,w,X);if(z4(M))X(P.range,"BLOCK_IN_FLOW",X4);Z.atKey=!1;let y=i9.resolveProps(j??[],{flow:Y,indicator:"map-value-ind",next:T,offset:P.range[2],onError:X,parentIndent:Q.indent,startOnNewline:!1});if(y.found){if(!J&&!w.found&&Z.options.strict){if(j)for(let C of j){if(C===y.found)break;if(C.type==="newline"){X(C,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}if(w.start<y.found.offset-1024)X(y.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else if(T)if("source"in T&&T.source?.[0]===":")X(T,"MISSING_CHAR",`Missing space after : in ${Y}`);else X(y.start,"MISSING_CHAR",`Missing , or : between ${Y} items`);let I=T?$(Z,T,y,X):y.found?q(Z,y.end,j,null,y,X):null;if(I){if(z4(T))X(I.range,"BLOCK_IN_FLOW",X4)}else if(y.comment)if(P.comment)P.comment+=`
69
- `+y.comment;else P.comment=y.comment;let R=new GJ.Pair(P,I);if(Z.options.keepSourceTokens)R.srcToken=F;if(J){let C=U;if(HJ.mapIncludes(Z,C.items,P))X(x,"DUPLICATE_KEY","Map keys must be unique");C.items.push(R)}else{let C=new a9.YAMLMap(Z.schema);C.flow=!0,C.items.push(R);let S=(I??P).range;C.range=[P.range[0],S[1],S[2]],U.items.push(C)}V=I?I.range[2]:y.end}}let B=J?"}":"]",[_,...O]=Q.end,K=V;if(_?.source===B)K=_.offset+_.source.length;else{let L=Y[0].toUpperCase()+Y.substring(1),F=H?`${L} must end with a ${B}`:`${L} in block collection must be sufficiently indented and end with a ${B}`;if(X(V,H?"MISSING_CHAR":"BAD_INDENT",F),_&&_.source.length!==1)O.unshift(_)}if(O.length>0){let L=WJ.resolveEnd(O,K,Z.options.strict,X);if(L.comment)if(U.comment)U.comment+=`
70
- `+L.comment;else U.comment=L.comment;U.range=[Q.offset,K,L.offset]}else U.range=[Q.offset,K,K];return U}KJ.resolveFlowCollection=BJ});var s9=N((jJ)=>{var OJ=k(),LJ=u(),FJ=M0(),AJ=R0(),IJ=l9(),TJ=n9(),MJ=o9();function J4($,q,Z,Q,X,z){let J=Z.type==="block-map"?IJ.resolveBlockMap($,q,Z,Q,z):Z.type==="block-seq"?TJ.resolveBlockSeq($,q,Z,Q,z):MJ.resolveFlowCollection($,q,Z,Q,z),Y=J.constructor;if(X==="!"||X===Y.tagName)return J.tag=Y.tagName,J;if(X)J.tag=X;return J}function RJ($,q,Z,Q,X){let z=Q.tag,J=!z?null:q.directives.tagName(z.source,(B)=>X(z,"TAG_RESOLVE_FAILED",B));if(Z.type==="block-seq"){let{anchor:B,newlineAfterProp:_}=Q,O=B&&z?B.offset>z.offset?B:z:B??z;if(O&&(!_||_.offset<O.offset))X(O,"MISSING_CHAR","Missing newline after block sequence props")}let Y=Z.type==="block-map"?"map":Z.type==="block-seq"?"seq":Z.start.source==="{"?"map":"seq";if(!z||!J||J==="!"||J===FJ.YAMLMap.tagName&&Y==="map"||J===AJ.YAMLSeq.tagName&&Y==="seq")return J4($,q,Z,X,J);let G=q.schema.tags.find((B)=>B.tag===J&&B.collection===Y);if(!G){let B=q.schema.knownTags[J];if(B?.collection===Y)q.schema.tags.push(Object.assign({},B,{default:!1})),G=B;else{if(B)X(z,"BAD_COLLECTION_TYPE",`${B.tag} used for ${Y} collection, but expects ${B.collection??"scalar"}`,!0);else X(z,"TAG_RESOLVE_FAILED",`Unresolved tag: ${J}`,!0);return J4($,q,Z,X,J)}}let U=J4($,q,Z,X,J,G),H=G.resolve?.(U,(B)=>X(z,"TAG_RESOLVE_FAILED",B),q.options)??U,V=OJ.isNode(H)?H:new LJ.Scalar(H);if(V.range=U.range,V.tag=J,G?.format)V.format=G.format;return V}jJ.composeCollection=RJ});var G4=N((CJ)=>{var Y4=u();function NJ($,q,Z){let Q=q.offset,X=DJ(q,$.options.strict,Z);if(!X)return{value:"",type:null,comment:"",range:[Q,Q,Q]};let z=X.mode===">"?Y4.Scalar.BLOCK_FOLDED:Y4.Scalar.BLOCK_LITERAL,J=q.source?PJ(q.source):[],Y=J.length;for(let K=J.length-1;K>=0;--K){let L=J[K][1];if(L===""||L==="\r")Y=K;else break}if(Y===0){let K=X.chomp==="+"&&J.length>0?`
71
- `.repeat(Math.max(1,J.length-1)):"",L=Q+X.length;if(q.source)L+=q.source.length;return{value:K,type:z,comment:X.comment,range:[Q,L,L]}}let G=q.indent+X.indent,U=q.offset+X.length,H=0;for(let K=0;K<Y;++K){let[L,F]=J[K];if(F===""||F==="\r"){if(X.indent===0&&L.length>G)G=L.length}else{if(L.length<G)Z(U+L.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator");if(X.indent===0)G=L.length;if(H=K,G===0&&!$.atRoot)Z(U,"BAD_INDENT","Block scalar values in collections must be indented");break}U+=L.length+F.length+1}for(let K=J.length-1;K>=Y;--K)if(J[K][0].length>G)Y=K+1;let V="",B="",_=!1;for(let K=0;K<H;++K)V+=J[K][0].slice(G)+`
72
- `;for(let K=H;K<Y;++K){let[L,F]=J[K];U+=L.length+F.length+1;let A=F[F.length-1]==="\r";if(A)F=F.slice(0,-1);if(F&&L.length<G){let j=`Block scalar lines must not be less indented than their ${X.indent?"explicit indentation indicator":"first line"}`;Z(U-F.length-(A?2:1),"BAD_INDENT",j),L=""}if(z===Y4.Scalar.BLOCK_LITERAL)V+=B+L.slice(G)+F,B=`
73
- `;else if(L.length>G||F[0]==="\t"){if(B===" ")B=`
74
- `;else if(!_&&B===`
75
- `)B=`
76
-
77
- `;V+=B+L.slice(G)+F,B=`
78
- `,_=!0}else if(F==="")if(B===`
79
- `)V+=`
80
- `;else B=`
81
- `;else V+=B+F,B=" ",_=!1}switch(X.chomp){case"-":break;case"+":for(let K=Y;K<J.length;++K)V+=`
82
- `+J[K][0].slice(G);if(V[V.length-1]!==`
83
- `)V+=`
84
- `;break;default:V+=`
85
- `}let O=Q+X.length+q.source.length;return{value:V,type:z,comment:X.comment,range:[Q,O,O]}}function DJ({offset:$,props:q},Z,Q){if(q[0].type!=="block-scalar-header")return Q(q[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:X}=q[0],z=X[0],J=0,Y="",G=-1;for(let B=1;B<X.length;++B){let _=X[B];if(!Y&&(_==="-"||_==="+"))Y=_;else{let O=Number(_);if(!J&&O)J=O;else if(G===-1)G=$+B}}if(G!==-1)Q(G,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${X}`);let U=!1,H="",V=X.length;for(let B=1;B<q.length;++B){let _=q[B];switch(_.type){case"space":U=!0;case"newline":V+=_.source.length;break;case"comment":if(Z&&!U)Q(_,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");V+=_.source.length,H=_.source.substring(1);break;case"error":Q(_,"UNEXPECTED_TOKEN",_.message),V+=_.source.length;break;default:{let O=`Unexpected token in block scalar header: ${_.type}`;Q(_,"UNEXPECTED_TOKEN",O);let K=_.source;if(K&&typeof K==="string")V+=K.length}}}return{mode:z,indent:J,chomp:Y,comment:H,length:V}}function PJ($){let q=$.split(/\n( *)/),Z=q[0],Q=Z.match(/^( *)/),z=[Q?.[1]?[Q[1],Z.slice(Q[1].length)]:["",Z]];for(let J=1;J<q.length;J+=2)z.push([q[J],q[J+1]]);return z}CJ.resolveBlockScalar=NJ});var W4=N((gJ)=>{var U4=u(),SJ=X$();function bJ($,q,Z){let{offset:Q,type:X,source:z,end:J}=$,Y,G,U=(B,_,O)=>Z(Q+B,_,O);switch(X){case"scalar":Y=U4.Scalar.PLAIN,G=xJ(z,U);break;case"single-quoted-scalar":Y=U4.Scalar.QUOTE_SINGLE,G=fJ(z,U);break;case"double-quoted-scalar":Y=U4.Scalar.QUOTE_DOUBLE,G=yJ(z,U);break;default:return Z($,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${X}`),{value:"",type:null,comment:"",range:[Q,Q+z.length,Q+z.length]}}let H=Q+z.length,V=SJ.resolveEnd(J,H,q,Z);return{value:G,type:Y,comment:V.comment,range:[Q,H,V.offset]}}function xJ($,q){let Z="";switch($[0]){case"\t":Z="a tab character";break;case",":Z="flow indicator character ,";break;case"%":Z="directive indicator character %";break;case"|":case">":{Z=`block scalar indicator ${$[0]}`;break}case"@":case"`":{Z=`reserved character ${$[0]}`;break}}if(Z)q(0,"BAD_SCALAR_START",`Plain value cannot start with ${Z}`);return t9($)}function fJ($,q){if($[$.length-1]!=="'"||$.length===1)q($.length,"MISSING_CHAR","Missing closing 'quote");return t9($.slice(1,-1)).replace(/''/g,"'")}function t9($){let q,Z;try{q=new RegExp(`(.*?)(?<![ ])[ ]*\r?
86
- `,"sy"),Z=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
87
- `,"sy")}catch{q=/(.*?)[ \t]*\r?\n/sy,Z=/[ \t]*(.*?)[ \t]*\r?\n/sy}let Q=q.exec($);if(!Q)return $;let X=Q[1],z=" ",J=q.lastIndex;Z.lastIndex=J;while(Q=Z.exec($)){if(Q[1]==="")if(z===`
88
- `)X+=z;else z=`
89
- `;else X+=z+Q[1],z=" ";J=Z.lastIndex}let Y=/[ \t]*(.*)/sy;return Y.lastIndex=J,Q=Y.exec($),X+z+(Q?.[1]??"")}function yJ($,q){let Z="";for(let Q=1;Q<$.length-1;++Q){let X=$[Q];if(X==="\r"&&$[Q+1]===`
90
- `)continue;if(X===`
91
- `){let{fold:z,offset:J}=kJ($,Q);Z+=z,Q=J}else if(X==="\\"){let z=$[++Q],J=vJ[z];if(J)Z+=J;else if(z===`
92
- `){z=$[Q+1];while(z===" "||z==="\t")z=$[++Q+1]}else if(z==="\r"&&$[Q+1]===`
93
- `){z=$[++Q+1];while(z===" "||z==="\t")z=$[++Q+1]}else if(z==="x"||z==="u"||z==="U"){let Y={x:2,u:4,U:8}[z];Z+=hJ($,Q+1,Y,q),Q+=Y}else{let Y=$.substr(Q-1,2);q(Q-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${Y}`),Z+=Y}}else if(X===" "||X==="\t"){let z=Q,J=$[Q+1];while(J===" "||J==="\t")J=$[++Q+1];if(J!==`
94
- `&&!(J==="\r"&&$[Q+2]===`
95
- `))Z+=Q>z?$.slice(z,Q+1):X}else Z+=X}if($[$.length-1]!=='"'||$.length===1)q($.length,"MISSING_CHAR",'Missing closing "quote');return Z}function kJ($,q){let Z="",Q=$[q+1];while(Q===" "||Q==="\t"||Q===`
96
- `||Q==="\r"){if(Q==="\r"&&$[q+2]!==`
97
- `)break;if(Q===`
98
- `)Z+=`
99
- `;q+=1,Q=$[q+1]}if(!Z)Z=" ";return{fold:Z,offset:q}}var vJ={"0":"\x00",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
100
- `,r:"\r",t:"\t",v:"\v",N:"…",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function hJ($,q,Z,Q){let X=$.substr(q,Z),J=X.length===Z&&/^[0-9a-fA-F]+$/.test(X)?parseInt(X,16):NaN;if(isNaN(J)){let Y=$.substr(q-2,Z+2);return Q(q-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${Y}`),Y}return String.fromCodePoint(J)}gJ.resolveFlowScalar=bJ});var e9=N((nJ)=>{var h0=k(),r9=u(),mJ=G4(),pJ=W4();function dJ($,q,Z,Q){let{value:X,type:z,comment:J,range:Y}=q.type==="block-scalar"?mJ.resolveBlockScalar($,q,Q):pJ.resolveFlowScalar(q,$.options.strict,Q),G=Z?$.directives.tagName(Z.source,(V)=>Q(Z,"TAG_RESOLVE_FAILED",V)):null,U;if($.options.stringKeys&&$.atKey)U=$.schema[h0.SCALAR];else if(G)U=cJ($.schema,X,G,Z,Q);else if(q.type==="scalar")U=lJ($,X,q,Q);else U=$.schema[h0.SCALAR];let H;try{let V=U.resolve(X,(B)=>Q(Z??q,"TAG_RESOLVE_FAILED",B),$.options);H=h0.isScalar(V)?V:new r9.Scalar(V)}catch(V){let B=V instanceof Error?V.message:String(V);Q(Z??q,"TAG_RESOLVE_FAILED",B),H=new r9.Scalar(X)}if(H.range=Y,H.source=X,z)H.type=z;if(G)H.tag=G;if(U.format)H.format=U.format;if(J)H.comment=J;return H}function cJ($,q,Z,Q,X){if(Z==="!")return $[h0.SCALAR];let z=[];for(let Y of $.tags)if(!Y.collection&&Y.tag===Z)if(Y.default&&Y.test)z.push(Y);else return Y;for(let Y of z)if(Y.test?.test(q))return Y;let J=$.knownTags[Z];if(J&&!J.collection)return $.tags.push(Object.assign({},J,{default:!1,test:void 0})),J;return X(Q,"TAG_RESOLVE_FAILED",`Unresolved tag: ${Z}`,Z!=="tag:yaml.org,2002:str"),$[h0.SCALAR]}function lJ({atKey:$,directives:q,schema:Z},Q,X,z){let J=Z.tags.find((Y)=>(Y.default===!0||$&&Y.default==="key")&&Y.test?.test(Q))||Z[h0.SCALAR];if(Z.compat){let Y=Z.compat.find((G)=>G.default&&G.test?.test(Q))??Z[h0.SCALAR];if(J.tag!==Y.tag){let G=q.tagString(J.tag),U=q.tagString(Y.tag),H=`Value may be parsed as either ${G} or ${U}`;z(X,"TAG_RESOLVE_FAILED",H,!0)}}return J}nJ.composeScalar=dJ});var $5=N((oJ)=>{function iJ($,q,Z){if(q){Z??(Z=q.length);for(let Q=Z-1;Q>=0;--Q){let X=q[Q];switch(X.type){case"space":case"comment":case"newline":$-=X.source.length;continue}X=q[++Q];while(X?.type==="space")$+=X.source.length,X=q[++Q];break}}return $}oJ.emptyScalarPosition=iJ});var Q5=N((XY)=>{var tJ=B$(),rJ=k(),eJ=s9(),q5=e9(),$Y=X$(),qY=$5(),ZY={composeNode:Z5,composeEmptyNode:V4};function Z5($,q,Z,Q){let X=$.atKey,{spaceBefore:z,comment:J,anchor:Y,tag:G}=Z,U,H=!0;switch(q.type){case"alias":if(U=QY($,q,Q),Y||G)Q(q,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":if(U=q5.composeScalar($,q,G,Q),Y)U.anchor=Y.source.substring(1);break;case"block-map":case"block-seq":case"flow-collection":try{if(U=eJ.composeCollection(ZY,$,q,Z,Q),Y)U.anchor=Y.source.substring(1)}catch(V){let B=V instanceof Error?V.message:String(V);Q(q,"RESOURCE_EXHAUSTION",B)}break;default:{let V=q.type==="error"?q.message:`Unsupported token (type: ${q.type})`;Q(q,"UNEXPECTED_TOKEN",V),H=!1}}if(U??(U=V4($,q.offset,void 0,null,Z,Q)),Y&&U.anchor==="")Q(Y,"BAD_ALIAS","Anchor cannot be an empty string");if(X&&$.options.stringKeys&&(!rJ.isScalar(U)||typeof U.value!=="string"||U.tag&&U.tag!=="tag:yaml.org,2002:str"))Q(G??q,"NON_STRING_KEY","With stringKeys, all keys must be strings");if(z)U.spaceBefore=!0;if(J)if(q.type==="scalar"&&q.source==="")U.comment=J;else U.commentBefore=J;if($.options.keepSourceTokens&&H)U.srcToken=q;return U}function V4($,q,Z,Q,{spaceBefore:X,comment:z,anchor:J,tag:Y,end:G},U){let H={type:"scalar",offset:qY.emptyScalarPosition(q,Z,Q),indent:-1,source:""},V=q5.composeScalar($,H,Y,U);if(J){if(V.anchor=J.source.substring(1),V.anchor==="")U(J,"BAD_ALIAS","Anchor cannot be an empty string")}if(X)V.spaceBefore=!0;if(z)V.comment=z,V.range[2]=G;return V}function QY({options:$},{offset:q,source:Z,end:Q},X){let z=new tJ.Alias(Z.substring(1));if(z.source==="")X(q,"BAD_ALIAS","Alias cannot be an empty string");if(z.source.endsWith(":"))X(q+Z.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let J=q+Z.length,Y=$Y.resolveEnd(Q,J,$.strict,X);if(z.range=[q,J,Y.offset],Y.comment)z.comment=Y.comment;return z}XY.composeEmptyNode=V4;XY.composeNode=Z5});var z5=N((VY)=>{var YY=P$(),X5=Q5(),GY=X$(),UY=E$();function WY($,q,{offset:Z,start:Q,value:X,end:z},J){let Y=Object.assign({_directives:q},$),G=new YY.Document(void 0,Y),U={atKey:!1,atRoot:!0,directives:G.directives,options:G.options,schema:G.schema},H=UY.resolveProps(Q,{indicator:"doc-start",next:X??z?.[0],offset:Z,onError:J,parentIndent:0,startOnNewline:!0});if(H.found){if(G.directives.docStart=!0,X&&(X.type==="block-map"||X.type==="block-seq")&&!H.hasNewline)J(H.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")}G.contents=X?X5.composeNode(U,X,H,J):X5.composeEmptyNode(U,H.end,Q,null,H,J);let V=G.contents.range[2],B=GY.resolveEnd(z,V,!1,J);if(B.comment)G.comment=B.comment;return G.range=[Z,V,B.offset],G}VY.composeDoc=WY});var H4=N((FY)=>{var BY=v("process"),KY=O1(),_Y=P$(),S$=C$(),J5=k(),OY=z5(),LY=X$();function b$($){if(typeof $==="number")return[$,$+1];if(Array.isArray($))return $.length===2?$:[$[0],$[1]];let{offset:q,source:Z}=$;return[q,q+(typeof Z==="string"?Z.length:1)]}function Y5($){let q="",Z=!1,Q=!1;for(let X=0;X<$.length;++X){let z=$[X];switch(z[0]){case"#":q+=(q===""?"":Q?`
59
+ `}ml.stringifyDocument=hm});var _t=A(gl=>{"use strict";var gm=vt(),nt=gs(),re=D(),ym=Se(),bm=be(),wm=_n(),vm=hl(),Fn=ds(),km=Ui(),Sm=kt(),jn=Bi(),Bn=class e{constructor(t,s,i){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,re.NODE_TYPE,{value:re.DOC});let n=null;typeof s=="function"||Array.isArray(s)?n=s:i===void 0&&s&&(i=s,s=void 0);let r=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},i);this.options=r;let{version:o}=r;i?._directives?(this.directives=i._directives.atDocument(),this.directives.yaml.explicit&&(o=this.directives.yaml.version)):this.directives=new jn.Directives({version:o}),this.setSchema(o,i),this.contents=t===void 0?null:this.createNode(t,n,i)}clone(){let t=Object.create(e.prototype,{[re.NODE_TYPE]:{value:re.DOC}});return t.commentBefore=this.commentBefore,t.comment=this.comment,t.errors=this.errors.slice(),t.warnings=this.warnings.slice(),t.options=Object.assign({},this.options),this.directives&&(t.directives=this.directives.clone()),t.schema=this.schema.clone(),t.contents=re.isNode(this.contents)?this.contents.clone(t.schema):this.contents,this.range&&(t.range=this.range.slice()),t}add(t){rt(this.contents)&&this.contents.add(t)}addIn(t,s){rt(this.contents)&&this.contents.addIn(t,s)}createAlias(t,s){if(!t.anchor){let i=Fn.anchorNames(this);t.anchor=!s||i.has(s)?Fn.findNewAnchor(s||"a",i):s}return new gm.Alias(t.anchor)}createNode(t,s,i){let n;if(typeof s=="function")t=s.call({"":t},"",t),n=s;else if(Array.isArray(s)){let g=v=>typeof v=="number"||v instanceof String||v instanceof Number,b=s.filter(g).map(String);b.length>0&&(s=s.concat(b)),n=s}else i===void 0&&s&&(i=s,s=void 0);let{aliasDuplicateObjects:r,anchorPrefix:o,flow:a,keepUndefined:l,onTagObj:c,tag:d}=i??{},{onAnchor:f,setAnchors:p,sourceObjects:m}=Fn.createNodeAnchors(this,o||"a"),y={aliasDuplicateObjects:r??!0,keepUndefined:l??!1,onAnchor:f,onTagObj:c,replacer:n,schema:this.schema,sourceObjects:m},h=Sm.createNode(t,d,y);return a&&re.isCollection(h)&&(h.flow=!0),p(),h}createPair(t,s,i={}){let n=this.createNode(t,null,i),r=this.createNode(s,null,i);return new ym.Pair(n,r)}delete(t){return rt(this.contents)?this.contents.delete(t):!1}deleteIn(t){return nt.isEmptyPath(t)?this.contents==null?!1:(this.contents=null,!0):rt(this.contents)?this.contents.deleteIn(t):!1}get(t,s){return re.isCollection(this.contents)?this.contents.get(t,s):void 0}getIn(t,s){return nt.isEmptyPath(t)?!s&&re.isScalar(this.contents)?this.contents.value:this.contents:re.isCollection(this.contents)?this.contents.getIn(t,s):void 0}has(t){return re.isCollection(this.contents)?this.contents.has(t):!1}hasIn(t){return nt.isEmptyPath(t)?this.contents!==void 0:re.isCollection(this.contents)?this.contents.hasIn(t):!1}set(t,s){this.contents==null?this.contents=nt.collectionFromPath(this.schema,[t],s):rt(this.contents)&&this.contents.set(t,s)}setIn(t,s){nt.isEmptyPath(t)?this.contents=s:this.contents==null?this.contents=nt.collectionFromPath(this.schema,Array.from(t),s):rt(this.contents)&&this.contents.setIn(t,s)}setSchema(t,s={}){typeof t=="number"&&(t=String(t));let i;switch(t){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new jn.Directives({version:"1.1"}),i={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=t:this.directives=new jn.Directives({version:t}),i={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,i=null;break;default:{let n=JSON.stringify(t);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${n}`)}}if(s.schema instanceof Object)this.schema=s.schema;else if(i)this.schema=new wm.Schema(Object.assign(i,s));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:t,jsonArg:s,mapAsMap:i,maxAliasCount:n,onAnchor:r,reviver:o}={}){let a={anchors:new Map,doc:this,keep:!t,mapAsMap:i===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},l=bm.toJS(this.contents,s??"",a);if(typeof r=="function")for(let{count:c,res:d}of a.anchors.values())r(d,c);return typeof o=="function"?km.applyReviver(o,{"":l},"",l):l}toJSON(t,s){return this.toJS({json:!0,jsonArg:t,mapAsMap:!1,onAnchor:s})}toString(t={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in t&&(!Number.isInteger(t.indent)||Number(t.indent)<=0)){let s=JSON.stringify(t.indent);throw new Error(`"indent" option must be a positive integer, not ${s}`)}return vm.stringifyDocument(this,t)}};function rt(e){if(re.isCollection(e))return!0;throw new Error("Expected a YAML collection as document contents")}gl.Document=Bn});var jt=A(Ft=>{"use strict";var qt=class extends Error{constructor(t,s,i,n){super(),this.name=t,this.code=i,this.message=n,this.pos=s}},Un=class extends qt{constructor(t,s,i){super("YAMLParseError",t,s,i)}},Vn=class extends qt{constructor(t,s,i){super("YAMLWarning",t,s,i)}},$m=(e,t)=>s=>{if(s.pos[0]===-1)return;s.linePos=s.pos.map(a=>t.linePos(a));let{line:i,col:n}=s.linePos[0];s.message+=` at line ${i}, column ${n}`;let r=n-1,o=e.substring(t.lineStarts[i-1],t.lineStarts[i]).replace(/[\n\r]+$/,"");if(r>=60&&o.length>80){let a=Math.min(r-39,o.length-79);o="\u2026"+o.substring(a),r-=a-1}if(o.length>80&&(o=o.substring(0,79)+"\u2026"),i>1&&/^ *$/.test(o.substring(0,r))){let a=e.substring(t.lineStarts[i-2],t.lineStarts[i-1]);a.length>80&&(a=a.substring(0,79)+`\u2026
60
+ `),o=a+o}if(/[^ ]/.test(o)){let a=1,l=s.linePos[1];l?.line===i&&l.col>n&&(a=Math.max(1,Math.min(l.col-n,80-r)));let c=" ".repeat(r)+"^".repeat(a);s.message+=`:
61
+
62
+ ${o}
63
+ ${c}
64
+ `}};Ft.YAMLError=qt;Ft.YAMLParseError=Un;Ft.YAMLWarning=Vn;Ft.prettifyError=$m});var Bt=A(yl=>{"use strict";function xm(e,{flow:t,indicator:s,next:i,offset:n,onError:r,parentIndent:o,startOnNewline:a}){let l=!1,c=a,d=a,f="",p="",m=!1,y=!1,h=null,g=null,b=null,v=null,k=null,x=null,S=null;for(let P of e)switch(y&&(P.type!=="space"&&P.type!=="newline"&&P.type!=="comma"&&r(P.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),y=!1),h&&(c&&P.type!=="comment"&&P.type!=="newline"&&r(h,"TAB_AS_INDENT","Tabs are not allowed as indentation"),h=null),P.type){case"space":!t&&(s!=="doc-start"||i?.type!=="flow-collection")&&P.source.includes(" ")&&(h=P),d=!0;break;case"comment":{d||r(P,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let M=P.source.substring(1)||" ";f?f+=p+M:f=M,p="",c=!1;break}case"newline":c?f?f+=P.source:(!x||s!=="seq-item-ind")&&(l=!0):p+=P.source,c=!0,m=!0,(g||b)&&(v=P),d=!0;break;case"anchor":g&&r(P,"MULTIPLE_ANCHORS","A node can have at most one anchor"),P.source.endsWith(":")&&r(P.offset+P.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),g=P,S??(S=P.offset),c=!1,d=!1,y=!0;break;case"tag":{b&&r(P,"MULTIPLE_TAGS","A node can have at most one tag"),b=P,S??(S=P.offset),c=!1,d=!1,y=!0;break}case s:(g||b)&&r(P,"BAD_PROP_ORDER",`Anchors and tags must be after the ${P.source} indicator`),x&&r(P,"UNEXPECTED_TOKEN",`Unexpected ${P.source} in ${t??"collection"}`),x=P,c=s==="seq-item-ind"||s==="explicit-key-ind",d=!1;break;case"comma":if(t){k&&r(P,"UNEXPECTED_TOKEN",`Unexpected , in ${t}`),k=P,c=!1,d=!1;break}default:r(P,"UNEXPECTED_TOKEN",`Unexpected ${P.type} token`),c=!1,d=!1}let E=e[e.length-1],O=E?E.offset+E.source.length:n;return y&&i&&i.type!=="space"&&i.type!=="newline"&&i.type!=="comma"&&(i.type!=="scalar"||i.source!=="")&&r(i.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),h&&(c&&h.indent<=o||i?.type==="block-map"||i?.type==="block-seq")&&r(h,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:k,found:x,spaceBefore:l,comment:f,hasNewline:m,anchor:g,tag:b,newlineAfterProp:v,end:O,start:S??O}}yl.resolveProps=xm});var zs=A(bl=>{"use strict";function Kn(e){if(!e)return null;switch(e.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(e.source.includes(`
65
+ `))return!0;if(e.end){for(let t of e.end)if(t.type==="newline")return!0}return!1;case"flow-collection":for(let t of e.items){for(let s of t.start)if(s.type==="newline")return!0;if(t.sep){for(let s of t.sep)if(s.type==="newline")return!0}if(Kn(t.key)||Kn(t.value))return!0}return!1;default:return!0}}bl.containsNewline=Kn});var Jn=A(wl=>{"use strict";var Cm=zs();function Em(e,t,s){if(t?.type==="flow-collection"){let i=t.end[0];i.indent===e&&(i.source==="]"||i.source==="}")&&Cm.containsNewline(t)&&s(i,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}wl.flowIndentCheck=Em});var Hn=A(kl=>{"use strict";var vl=D();function Am(e,t,s){let{uniqueKeys:i}=e.options;if(i===!1)return!1;let n=typeof i=="function"?i:(r,o)=>r===o||vl.isScalar(r)&&vl.isScalar(o)&&r.value===o.value;return t.some(r=>n(r.key,s))}kl.mapIncludes=Am});var Al=A(El=>{"use strict";var Sl=Se(),Pm=xe(),$l=Bt(),Nm=zs(),xl=Jn(),Im=Hn(),Cl="All mapping items must start at the same column";function Lm({composeNode:e,composeEmptyNode:t},s,i,n,r){let o=r?.nodeClass??Pm.YAMLMap,a=new o(s.schema);s.atRoot&&(s.atRoot=!1);let l=i.offset,c=null;for(let d of i.items){let{start:f,key:p,sep:m,value:y}=d,h=$l.resolveProps(f,{indicator:"explicit-key-ind",next:p??m?.[0],offset:l,onError:n,parentIndent:i.indent,startOnNewline:!0}),g=!h.found;if(g){if(p&&(p.type==="block-seq"?n(l,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in p&&p.indent!==i.indent&&n(l,"BAD_INDENT",Cl)),!h.anchor&&!h.tag&&!m){c=h.end,h.comment&&(a.comment?a.comment+=`
66
+ `+h.comment:a.comment=h.comment);continue}(h.newlineAfterProp||Nm.containsNewline(p))&&n(p??f[f.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else h.found?.indent!==i.indent&&n(l,"BAD_INDENT",Cl);s.atKey=!0;let b=h.end,v=p?e(s,p,h,n):t(s,b,f,null,h,n);s.schema.compat&&xl.flowIndentCheck(i.indent,p,n),s.atKey=!1,Im.mapIncludes(s,a.items,v)&&n(b,"DUPLICATE_KEY","Map keys must be unique");let k=$l.resolveProps(m??[],{indicator:"map-value-ind",next:y,offset:v.range[2],onError:n,parentIndent:i.indent,startOnNewline:!p||p.type==="block-scalar"});if(l=k.end,k.found){g&&(y?.type==="block-map"&&!k.hasNewline&&n(l,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),s.options.strict&&h.start<k.found.offset-1024&&n(v.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));let x=y?e(s,y,k,n):t(s,l,m,null,k,n);s.schema.compat&&xl.flowIndentCheck(i.indent,y,n),l=x.range[2];let S=new Sl.Pair(v,x);s.options.keepSourceTokens&&(S.srcToken=d),a.items.push(S)}else{g&&n(v.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),k.comment&&(v.comment?v.comment+=`
67
+ `+k.comment:v.comment=k.comment);let x=new Sl.Pair(v);s.options.keepSourceTokens&&(x.srcToken=d),a.items.push(x)}}return c&&c<l&&n(c,"IMPOSSIBLE","Map comment with trailing content"),a.range=[i.offset,l,c??l],a}El.resolveBlockMap=Lm});var Nl=A(Pl=>{"use strict";var Rm=Ce(),Om=Bt(),Tm=Jn();function Mm({composeNode:e,composeEmptyNode:t},s,i,n,r){let o=r?.nodeClass??Rm.YAMLSeq,a=new o(s.schema);s.atRoot&&(s.atRoot=!1),s.atKey&&(s.atKey=!1);let l=i.offset,c=null;for(let{start:d,value:f}of i.items){let p=Om.resolveProps(d,{indicator:"seq-item-ind",next:f,offset:l,onError:n,parentIndent:i.indent,startOnNewline:!0});if(!p.found)if(p.anchor||p.tag||f)f?.type==="block-seq"?n(p.end,"BAD_INDENT","All sequence items must start at the same column"):n(l,"MISSING_CHAR","Sequence item without - indicator");else{c=p.end,p.comment&&(a.comment=p.comment);continue}let m=f?e(s,f,p,n):t(s,p.end,d,null,p,n);s.schema.compat&&Tm.flowIndentCheck(i.indent,f,n),l=m.range[2],a.items.push(m)}return a.range=[i.offset,l,c??l],a}Pl.resolveBlockSeq=Mm});var ot=A(Il=>{"use strict";function Dm(e,t,s,i){let n="";if(e){let r=!1,o="";for(let a of e){let{source:l,type:c}=a;switch(c){case"space":r=!0;break;case"comment":{s&&!r&&i(a,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let d=l.substring(1)||" ";n?n+=o+d:n=d,o="";break}case"newline":n&&(o+=l),r=!0;break;default:i(a,"UNEXPECTED_TOKEN",`Unexpected ${c} at node end`)}t+=l.length}}return{comment:n,offset:t}}Il.resolveEnd=Dm});var Tl=A(Ol=>{"use strict";var _m=D(),qm=Se(),Ll=xe(),Fm=Ce(),jm=ot(),Rl=Bt(),Bm=zs(),Um=Hn(),Yn="Block collections are not allowed within flow collections",Gn=e=>e&&(e.type==="block-map"||e.type==="block-seq");function Vm({composeNode:e,composeEmptyNode:t},s,i,n,r){let o=i.start.source==="{",a=o?"flow map":"flow sequence",l=r?.nodeClass??(o?Ll.YAMLMap:Fm.YAMLSeq),c=new l(s.schema);c.flow=!0;let d=s.atRoot;d&&(s.atRoot=!1),s.atKey&&(s.atKey=!1);let f=i.offset+i.start.source.length;for(let g=0;g<i.items.length;++g){let b=i.items[g],{start:v,key:k,sep:x,value:S}=b,E=Rl.resolveProps(v,{flow:a,indicator:"explicit-key-ind",next:k??x?.[0],offset:f,onError:n,parentIndent:i.indent,startOnNewline:!1});if(!E.found){if(!E.anchor&&!E.tag&&!x&&!S){g===0&&E.comma?n(E.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`):g<i.items.length-1&&n(E.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${a}`),E.comment&&(c.comment?c.comment+=`
68
+ `+E.comment:c.comment=E.comment),f=E.end;continue}!o&&s.options.strict&&Bm.containsNewline(k)&&n(k,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(g===0)E.comma&&n(E.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${a}`);else if(E.comma||n(E.start,"MISSING_CHAR",`Missing , between ${a} items`),E.comment){let O="";e:for(let P of v)switch(P.type){case"comma":case"space":break;case"comment":O=P.source.substring(1);break e;default:break e}if(O){let P=c.items[c.items.length-1];_m.isPair(P)&&(P=P.value??P.key),P.comment?P.comment+=`
69
+ `+O:P.comment=O,E.comment=E.comment.substring(O.length+1)}}if(!o&&!x&&!E.found){let O=S?e(s,S,E,n):t(s,E.end,x,null,E,n);c.items.push(O),f=O.range[2],Gn(S)&&n(O.range,"BLOCK_IN_FLOW",Yn)}else{s.atKey=!0;let O=E.end,P=k?e(s,k,E,n):t(s,O,v,null,E,n);Gn(k)&&n(P.range,"BLOCK_IN_FLOW",Yn),s.atKey=!1;let M=Rl.resolveProps(x??[],{flow:a,indicator:"map-value-ind",next:S,offset:P.range[2],onError:n,parentIndent:i.indent,startOnNewline:!1});if(M.found){if(!o&&!E.found&&s.options.strict){if(x)for(let I of x){if(I===M.found)break;if(I.type==="newline"){n(I,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}E.start<M.found.offset-1024&&n(M.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else S&&("source"in S&&S.source?.[0]===":"?n(S,"MISSING_CHAR",`Missing space after : in ${a}`):n(M.start,"MISSING_CHAR",`Missing , or : between ${a} items`));let w=S?e(s,S,M,n):M.found?t(s,M.end,x,null,M,n):null;w?Gn(S)&&n(w.range,"BLOCK_IN_FLOW",Yn):M.comment&&(P.comment?P.comment+=`
70
+ `+M.comment:P.comment=M.comment);let $=new qm.Pair(P,w);if(s.options.keepSourceTokens&&($.srcToken=b),o){let I=c;Um.mapIncludes(s,I.items,P)&&n(O,"DUPLICATE_KEY","Map keys must be unique"),I.items.push($)}else{let I=new Ll.YAMLMap(s.schema);I.flow=!0,I.items.push($);let L=(w??P).range;I.range=[P.range[0],L[1],L[2]],c.items.push(I)}f=w?w.range[2]:M.end}}let p=o?"}":"]",[m,...y]=i.end,h=f;if(m?.source===p)h=m.offset+m.source.length;else{let g=a[0].toUpperCase()+a.substring(1),b=d?`${g} must end with a ${p}`:`${g} in block collection must be sufficiently indented and end with a ${p}`;n(f,d?"MISSING_CHAR":"BAD_INDENT",b),m&&m.source.length!==1&&y.unshift(m)}if(y.length>0){let g=jm.resolveEnd(y,h,s.options.strict,n);g.comment&&(c.comment?c.comment+=`
71
+ `+g.comment:c.comment=g.comment),c.range=[i.offset,h,g.offset]}else c.range=[i.offset,h,h];return c}Ol.resolveFlowCollection=Vm});var Dl=A(Ml=>{"use strict";var Km=D(),Jm=F(),Hm=xe(),Ym=Ce(),Gm=Al(),Wm=Nl(),zm=Tl();function Wn(e,t,s,i,n,r){let o=s.type==="block-map"?Gm.resolveBlockMap(e,t,s,i,r):s.type==="block-seq"?Wm.resolveBlockSeq(e,t,s,i,r):zm.resolveFlowCollection(e,t,s,i,r),a=o.constructor;return n==="!"||n===a.tagName?(o.tag=a.tagName,o):(n&&(o.tag=n),o)}function Qm(e,t,s,i,n){let r=i.tag,o=r?t.directives.tagName(r.source,p=>n(r,"TAG_RESOLVE_FAILED",p)):null;if(s.type==="block-seq"){let{anchor:p,newlineAfterProp:m}=i,y=p&&r?p.offset>r.offset?p:r:p??r;y&&(!m||m.offset<y.offset)&&n(y,"MISSING_CHAR","Missing newline after block sequence props")}let a=s.type==="block-map"?"map":s.type==="block-seq"?"seq":s.start.source==="{"?"map":"seq";if(!r||!o||o==="!"||o===Hm.YAMLMap.tagName&&a==="map"||o===Ym.YAMLSeq.tagName&&a==="seq")return Wn(e,t,s,n,o);let l=t.schema.tags.find(p=>p.tag===o&&p.collection===a);if(!l){let p=t.schema.knownTags[o];if(p?.collection===a)t.schema.tags.push(Object.assign({},p,{default:!1})),l=p;else return p?n(r,"BAD_COLLECTION_TYPE",`${p.tag} used for ${a} collection, but expects ${p.collection??"scalar"}`,!0):n(r,"TAG_RESOLVE_FAILED",`Unresolved tag: ${o}`,!0),Wn(e,t,s,n,o)}let c=Wn(e,t,s,n,o,l),d=l.resolve?.(c,p=>n(r,"TAG_RESOLVE_FAILED",p),t.options)??c,f=Km.isNode(d)?d:new Jm.Scalar(d);return f.range=c.range,f.tag=o,l?.format&&(f.format=l.format),f}Ml.composeCollection=Qm});var Qn=A(_l=>{"use strict";var zn=F();function Xm(e,t,s){let i=t.offset,n=Zm(t,e.options.strict,s);if(!n)return{value:"",type:null,comment:"",range:[i,i,i]};let r=n.mode===">"?zn.Scalar.BLOCK_FOLDED:zn.Scalar.BLOCK_LITERAL,o=t.source?eh(t.source):[],a=o.length;for(let h=o.length-1;h>=0;--h){let g=o[h][1];if(g===""||g==="\r")a=h;else break}if(a===0){let h=n.chomp==="+"&&o.length>0?`
72
+ `.repeat(Math.max(1,o.length-1)):"",g=i+n.length;return t.source&&(g+=t.source.length),{value:h,type:r,comment:n.comment,range:[i,g,g]}}let l=t.indent+n.indent,c=t.offset+n.length,d=0;for(let h=0;h<a;++h){let[g,b]=o[h];if(b===""||b==="\r")n.indent===0&&g.length>l&&(l=g.length);else{g.length<l&&s(c+g.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator"),n.indent===0&&(l=g.length),d=h,l===0&&!e.atRoot&&s(c,"BAD_INDENT","Block scalar values in collections must be indented");break}c+=g.length+b.length+1}for(let h=o.length-1;h>=a;--h)o[h][0].length>l&&(a=h+1);let f="",p="",m=!1;for(let h=0;h<d;++h)f+=o[h][0].slice(l)+`
73
+ `;for(let h=d;h<a;++h){let[g,b]=o[h];c+=g.length+b.length+1;let v=b[b.length-1]==="\r";if(v&&(b=b.slice(0,-1)),b&&g.length<l){let x=`Block scalar lines must not be less indented than their ${n.indent?"explicit indentation indicator":"first line"}`;s(c-b.length-(v?2:1),"BAD_INDENT",x),g=""}r===zn.Scalar.BLOCK_LITERAL?(f+=p+g.slice(l)+b,p=`
74
+ `):g.length>l||b[0]===" "?(p===" "?p=`
75
+ `:!m&&p===`
76
+ `&&(p=`
77
+
78
+ `),f+=p+g.slice(l)+b,p=`
79
+ `,m=!0):b===""?p===`
80
+ `?f+=`
81
+ `:p=`
82
+ `:(f+=p+b,p=" ",m=!1)}switch(n.chomp){case"-":break;case"+":for(let h=a;h<o.length;++h)f+=`
83
+ `+o[h][0].slice(l);f[f.length-1]!==`
84
+ `&&(f+=`
85
+ `);break;default:f+=`
86
+ `}let y=i+n.length+t.source.length;return{value:f,type:r,comment:n.comment,range:[i,y,y]}}function Zm({offset:e,props:t},s,i){if(t[0].type!=="block-scalar-header")return i(t[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:n}=t[0],r=n[0],o=0,a="",l=-1;for(let p=1;p<n.length;++p){let m=n[p];if(!a&&(m==="-"||m==="+"))a=m;else{let y=Number(m);!o&&y?o=y:l===-1&&(l=e+p)}}l!==-1&&i(l,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${n}`);let c=!1,d="",f=n.length;for(let p=1;p<t.length;++p){let m=t[p];switch(m.type){case"space":c=!0;case"newline":f+=m.source.length;break;case"comment":s&&!c&&i(m,"MISSING_CHAR","Comments must be separated from other tokens by white space characters"),f+=m.source.length,d=m.source.substring(1);break;case"error":i(m,"UNEXPECTED_TOKEN",m.message),f+=m.source.length;break;default:{let y=`Unexpected token in block scalar header: ${m.type}`;i(m,"UNEXPECTED_TOKEN",y);let h=m.source;h&&typeof h=="string"&&(f+=h.length)}}}return{mode:r,indent:o,chomp:a,comment:d,length:f}}function eh(e){let t=e.split(/\n( *)/),s=t[0],i=s.match(/^( *)/),r=[i?.[1]?[i[1],s.slice(i[1].length)]:["",s]];for(let o=1;o<t.length;o+=2)r.push([t[o],t[o+1]]);return r}_l.resolveBlockScalar=Xm});var Zn=A(Fl=>{"use strict";var Xn=F(),th=ot();function sh(e,t,s){let{offset:i,type:n,source:r,end:o}=e,a,l,c=(p,m,y)=>s(i+p,m,y);switch(n){case"scalar":a=Xn.Scalar.PLAIN,l=ih(r,c);break;case"single-quoted-scalar":a=Xn.Scalar.QUOTE_SINGLE,l=nh(r,c);break;case"double-quoted-scalar":a=Xn.Scalar.QUOTE_DOUBLE,l=rh(r,c);break;default:return s(e,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${n}`),{value:"",type:null,comment:"",range:[i,i+r.length,i+r.length]}}let d=i+r.length,f=th.resolveEnd(o,d,t,s);return{value:l,type:a,comment:f.comment,range:[i,d,f.offset]}}function ih(e,t){let s="";switch(e[0]){case" ":s="a tab character";break;case",":s="flow indicator character ,";break;case"%":s="directive indicator character %";break;case"|":case">":{s=`block scalar indicator ${e[0]}`;break}case"@":case"`":{s=`reserved character ${e[0]}`;break}}return s&&t(0,"BAD_SCALAR_START",`Plain value cannot start with ${s}`),ql(e)}function nh(e,t){return(e[e.length-1]!=="'"||e.length===1)&&t(e.length,"MISSING_CHAR","Missing closing 'quote"),ql(e.slice(1,-1)).replace(/''/g,"'")}function ql(e){let t,s;try{t=new RegExp(`(.*?)(?<![ ])[ ]*\r?
87
+ `,"sy"),s=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
88
+ `,"sy")}catch{t=/(.*?)[ \t]*\r?\n/sy,s=/[ \t]*(.*?)[ \t]*\r?\n/sy}let i=t.exec(e);if(!i)return e;let n=i[1],r=" ",o=t.lastIndex;for(s.lastIndex=o;i=s.exec(e);)i[1]===""?r===`
89
+ `?n+=r:r=`
90
+ `:(n+=r+i[1],r=" "),o=s.lastIndex;let a=/[ \t]*(.*)/sy;return a.lastIndex=o,i=a.exec(e),n+r+(i?.[1]??"")}function rh(e,t){let s="";for(let i=1;i<e.length-1;++i){let n=e[i];if(!(n==="\r"&&e[i+1]===`
91
+ `))if(n===`
92
+ `){let{fold:r,offset:o}=oh(e,i);s+=r,i=o}else if(n==="\\"){let r=e[++i],o=ah[r];if(o)s+=o;else if(r===`
93
+ `)for(r=e[i+1];r===" "||r===" ";)r=e[++i+1];else if(r==="\r"&&e[i+1]===`
94
+ `)for(r=e[++i+1];r===" "||r===" ";)r=e[++i+1];else if(r==="x"||r==="u"||r==="U"){let a={x:2,u:4,U:8}[r];s+=lh(e,i+1,a,t),i+=a}else{let a=e.substr(i-1,2);t(i-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),s+=a}}else if(n===" "||n===" "){let r=i,o=e[i+1];for(;o===" "||o===" ";)o=e[++i+1];o!==`
95
+ `&&!(o==="\r"&&e[i+2]===`
96
+ `)&&(s+=i>r?e.slice(r,i+1):n)}else s+=n}return(e[e.length-1]!=='"'||e.length===1)&&t(e.length,"MISSING_CHAR",'Missing closing "quote'),s}function oh(e,t){let s="",i=e[t+1];for(;(i===" "||i===" "||i===`
97
+ `||i==="\r")&&!(i==="\r"&&e[t+2]!==`
98
+ `);)i===`
99
+ `&&(s+=`
100
+ `),t+=1,i=e[t+1];return s||(s=" "),{fold:s,offset:t}}var ah={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
101
+ `,r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function lh(e,t,s,i){let n=e.substr(t,s),o=n.length===s&&/^[0-9a-fA-F]+$/.test(n)?parseInt(n,16):NaN;if(isNaN(o)){let a=e.substr(t-2,s+2);return i(t-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${a}`),a}return String.fromCodePoint(o)}Fl.resolveFlowScalar=sh});var Ul=A(Bl=>{"use strict";var Ue=D(),jl=F(),ch=Qn(),uh=Zn();function fh(e,t,s,i){let{value:n,type:r,comment:o,range:a}=t.type==="block-scalar"?ch.resolveBlockScalar(e,t,i):uh.resolveFlowScalar(t,e.options.strict,i),l=s?e.directives.tagName(s.source,f=>i(s,"TAG_RESOLVE_FAILED",f)):null,c;e.options.stringKeys&&e.atKey?c=e.schema[Ue.SCALAR]:l?c=dh(e.schema,n,l,s,i):t.type==="scalar"?c=ph(e,n,t,i):c=e.schema[Ue.SCALAR];let d;try{let f=c.resolve(n,p=>i(s??t,"TAG_RESOLVE_FAILED",p),e.options);d=Ue.isScalar(f)?f:new jl.Scalar(f)}catch(f){let p=f instanceof Error?f.message:String(f);i(s??t,"TAG_RESOLVE_FAILED",p),d=new jl.Scalar(n)}return d.range=a,d.source=n,r&&(d.type=r),l&&(d.tag=l),c.format&&(d.format=c.format),o&&(d.comment=o),d}function dh(e,t,s,i,n){if(s==="!")return e[Ue.SCALAR];let r=[];for(let a of e.tags)if(!a.collection&&a.tag===s)if(a.default&&a.test)r.push(a);else return a;for(let a of r)if(a.test?.test(t))return a;let o=e.knownTags[s];return o&&!o.collection?(e.tags.push(Object.assign({},o,{default:!1,test:void 0})),o):(n(i,"TAG_RESOLVE_FAILED",`Unresolved tag: ${s}`,s!=="tag:yaml.org,2002:str"),e[Ue.SCALAR])}function ph({atKey:e,directives:t,schema:s},i,n,r){let o=s.tags.find(a=>(a.default===!0||e&&a.default==="key")&&a.test?.test(i))||s[Ue.SCALAR];if(s.compat){let a=s.compat.find(l=>l.default&&l.test?.test(i))??s[Ue.SCALAR];if(o.tag!==a.tag){let l=t.tagString(o.tag),c=t.tagString(a.tag),d=`Value may be parsed as either ${l} or ${c}`;r(n,"TAG_RESOLVE_FAILED",d,!0)}}return o}Bl.composeScalar=fh});var Kl=A(Vl=>{"use strict";function mh(e,t,s){if(t){s??(s=t.length);for(let i=s-1;i>=0;--i){let n=t[i];switch(n.type){case"space":case"comment":case"newline":e-=n.source.length;continue}for(n=t[++i];n?.type==="space";)e+=n.source.length,n=t[++i];break}}return e}Vl.emptyScalarPosition=mh});var Yl=A(tr=>{"use strict";var hh=vt(),gh=D(),yh=Dl(),Jl=Ul(),bh=ot(),wh=Kl(),vh={composeNode:Hl,composeEmptyNode:er};function Hl(e,t,s,i){let n=e.atKey,{spaceBefore:r,comment:o,anchor:a,tag:l}=s,c,d=!0;switch(t.type){case"alias":c=kh(e,t,i),(a||l)&&i(t,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":c=Jl.composeScalar(e,t,l,i),a&&(c.anchor=a.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":try{c=yh.composeCollection(vh,e,t,s,i),a&&(c.anchor=a.source.substring(1))}catch(f){let p=f instanceof Error?f.message:String(f);i(t,"RESOURCE_EXHAUSTION",p)}break;default:{let f=t.type==="error"?t.message:`Unsupported token (type: ${t.type})`;i(t,"UNEXPECTED_TOKEN",f),d=!1}}return c??(c=er(e,t.offset,void 0,null,s,i)),a&&c.anchor===""&&i(a,"BAD_ALIAS","Anchor cannot be an empty string"),n&&e.options.stringKeys&&(!gh.isScalar(c)||typeof c.value!="string"||c.tag&&c.tag!=="tag:yaml.org,2002:str")&&i(l??t,"NON_STRING_KEY","With stringKeys, all keys must be strings"),r&&(c.spaceBefore=!0),o&&(t.type==="scalar"&&t.source===""?c.comment=o:c.commentBefore=o),e.options.keepSourceTokens&&d&&(c.srcToken=t),c}function er(e,t,s,i,{spaceBefore:n,comment:r,anchor:o,tag:a,end:l},c){let d={type:"scalar",offset:wh.emptyScalarPosition(t,s,i),indent:-1,source:""},f=Jl.composeScalar(e,d,a,c);return o&&(f.anchor=o.source.substring(1),f.anchor===""&&c(o,"BAD_ALIAS","Anchor cannot be an empty string")),n&&(f.spaceBefore=!0),r&&(f.comment=r,f.range[2]=l),f}function kh({options:e},{offset:t,source:s,end:i},n){let r=new hh.Alias(s.substring(1));r.source===""&&n(t,"BAD_ALIAS","Alias cannot be an empty string"),r.source.endsWith(":")&&n(t+s.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let o=t+s.length,a=bh.resolveEnd(i,o,e.strict,n);return r.range=[t,o,a.offset],a.comment&&(r.comment=a.comment),r}tr.composeEmptyNode=er;tr.composeNode=Hl});var zl=A(Wl=>{"use strict";var Sh=_t(),Gl=Yl(),$h=ot(),xh=Bt();function Ch(e,t,{offset:s,start:i,value:n,end:r},o){let a=Object.assign({_directives:t},e),l=new Sh.Document(void 0,a),c={atKey:!1,atRoot:!0,directives:l.directives,options:l.options,schema:l.schema},d=xh.resolveProps(i,{indicator:"doc-start",next:n??r?.[0],offset:s,onError:o,parentIndent:0,startOnNewline:!0});d.found&&(l.directives.docStart=!0,n&&(n.type==="block-map"||n.type==="block-seq")&&!d.hasNewline&&o(d.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),l.contents=n?Gl.composeNode(c,n,d,o):Gl.composeEmptyNode(c,d.end,i,null,d,o);let f=l.contents.range[2],p=$h.resolveEnd(r,f,!1,o);return p.comment&&(l.comment=p.comment),l.range=[s,f,p.offset],l}Wl.composeDoc=Ch});var ir=A(Zl=>{"use strict";var Eh=Zt("process"),Ah=Bi(),Ph=_t(),Ut=jt(),Ql=D(),Nh=zl(),Ih=ot();function Vt(e){if(typeof e=="number")return[e,e+1];if(Array.isArray(e))return e.length===2?e:[e[0],e[1]];let{offset:t,source:s}=e;return[t,t+(typeof s=="string"?s.length:1)]}function Xl(e){let t="",s=!1,i=!1;for(let n=0;n<e.length;++n){let r=e[n];switch(r[0]){case"#":t+=(t===""?"":i?`
101
102
 
102
103
  `:`
103
- `)+(z.substring(1)||" "),Z=!0,Q=!1;break;case"%":if($[X+1]?.[0]!=="#")X+=1;Z=!1;break;default:if(!Z)Q=!0;Z=!1}}return{comment:q,afterEmptyLine:Q}}class G5{constructor($={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(q,Z,Q,X)=>{let z=b$(q);if(X)this.warnings.push(new S$.YAMLWarning(z,Z,Q));else this.errors.push(new S$.YAMLParseError(z,Z,Q))},this.directives=new KY.Directives({version:$.version||"1.2"}),this.options=$}decorate($,q){let{comment:Z,afterEmptyLine:Q}=Y5(this.prelude);if(Z){let X=$.contents;if(q)$.comment=$.comment?`${$.comment}
104
- ${Z}`:Z;else if(Q||$.directives.docStart||!X)$.commentBefore=Z;else if(J5.isCollection(X)&&!X.flow&&X.items.length>0){let z=X.items[0];if(J5.isPair(z))z=z.key;let J=z.commentBefore;z.commentBefore=J?`${Z}
105
- ${J}`:Z}else{let z=X.commentBefore;X.commentBefore=z?`${Z}
106
- ${z}`:Z}}if(q)Array.prototype.push.apply($.errors,this.errors),Array.prototype.push.apply($.warnings,this.warnings);else $.errors=this.errors,$.warnings=this.warnings;this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:Y5(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose($,q=!1,Z=-1){for(let Q of $)yield*this.next(Q);yield*this.end(q,Z)}*next($){if(BY.env.LOG_STREAM)console.dir($,{depth:null});switch($.type){case"directive":this.directives.add($.source,(q,Z,Q)=>{let X=b$($);X[0]+=q,this.onError(X,"BAD_DIRECTIVE",Z,Q)}),this.prelude.push($.source),this.atDirectives=!0;break;case"document":{let q=OY.composeDoc(this.options,this.directives,$,this.onError);if(this.atDirectives&&!q.directives.docStart)this.onError($,"MISSING_CHAR","Missing directives-end/doc-start indicator line");if(this.decorate(q,!1),this.doc)yield this.doc;this.doc=q,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push($.source);break;case"error":{let q=$.source?`${$.message}: ${JSON.stringify($.source)}`:$.message,Z=new S$.YAMLParseError(b$($),"UNEXPECTED_TOKEN",q);if(this.atDirectives||!this.doc)this.errors.push(Z);else this.doc.errors.push(Z);break}case"doc-end":{if(!this.doc){this.errors.push(new S$.YAMLParseError(b$($),"UNEXPECTED_TOKEN","Unexpected doc-end without preceding document"));break}this.doc.directives.docEnd=!0;let q=LY.resolveEnd($.end,$.offset+$.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),q.comment){let Z=this.doc.comment;this.doc.comment=Z?`${Z}
107
- ${q.comment}`:q.comment}this.doc.range[2]=q.offset;break}default:this.errors.push(new S$.YAMLParseError(b$($),"UNEXPECTED_TOKEN",`Unsupported token ${$.type}`))}}*end($=!1,q=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if($){let Z=Object.assign({_directives:this.directives},this.options),Q=new _Y.Document(void 0,Z);if(this.atDirectives)this.onError(q,"MISSING_CHAR","Missing directives-end indicator line");Q.range=[0,q,q],this.decorate(Q,!1),yield Q}}}FY.Composer=G5});var V5=N((DY)=>{var IY=G4(),TY=W4(),MY=C$(),U5=L$();function RY($,q=!0,Z){if($){let Q=(X,z,J)=>{let Y=typeof X==="number"?X:Array.isArray(X)?X[0]:X.offset;if(Z)Z(Y,z,J);else throw new MY.YAMLParseError([Y,Y+1],z,J)};switch($.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return TY.resolveFlowScalar($,q,Q);case"block-scalar":return IY.resolveBlockScalar({options:{strict:q}},$,Q)}}return null}function jY($,q){let{implicitKey:Z=!1,indent:Q,inFlow:X=!1,offset:z=-1,type:J="PLAIN"}=q,Y=U5.stringifyString({type:J,value:$},{implicitKey:Z,indent:Q>0?" ".repeat(Q):"",inFlow:X,options:{blockQuote:!0,lineWidth:-1}}),G=q.end??[{type:"newline",offset:-1,indent:Q,source:`
108
- `}];switch(Y[0]){case"|":case">":{let U=Y.indexOf(`
109
- `),H=Y.substring(0,U),V=Y.substring(U+1)+`
110
- `,B=[{type:"block-scalar-header",offset:z,indent:Q,source:H}];if(!W5(B,G))B.push({type:"newline",offset:-1,indent:Q,source:`
111
- `});return{type:"block-scalar",offset:z,indent:Q,props:B,source:V}}case'"':return{type:"double-quoted-scalar",offset:z,indent:Q,source:Y,end:G};case"'":return{type:"single-quoted-scalar",offset:z,indent:Q,source:Y,end:G};default:return{type:"scalar",offset:z,indent:Q,source:Y,end:G}}}function wY($,q,Z={}){let{afterKey:Q=!1,implicitKey:X=!1,inFlow:z=!1,type:J}=Z,Y="indent"in $?$.indent:null;if(Q&&typeof Y==="number")Y+=2;if(!J)switch($.type){case"single-quoted-scalar":J="QUOTE_SINGLE";break;case"double-quoted-scalar":J="QUOTE_DOUBLE";break;case"block-scalar":{let U=$.props[0];if(U.type!=="block-scalar-header")throw Error("Invalid block scalar header");J=U.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:J="PLAIN"}let G=U5.stringifyString({type:J,value:q},{implicitKey:X||Y===null,indent:Y!==null&&Y>0?" ".repeat(Y):"",inFlow:z,options:{blockQuote:!0,lineWidth:-1}});switch(G[0]){case"|":case">":NY($,G);break;case'"':B4($,G,"double-quoted-scalar");break;case"'":B4($,G,"single-quoted-scalar");break;default:B4($,G,"scalar")}}function NY($,q){let Z=q.indexOf(`
112
- `),Q=q.substring(0,Z),X=q.substring(Z+1)+`
113
- `;if($.type==="block-scalar"){let z=$.props[0];if(z.type!=="block-scalar-header")throw Error("Invalid block scalar header");z.source=Q,$.source=X}else{let{offset:z}=$,J="indent"in $?$.indent:-1,Y=[{type:"block-scalar-header",offset:z,indent:J,source:Q}];if(!W5(Y,"end"in $?$.end:void 0))Y.push({type:"newline",offset:-1,indent:J,source:`
114
- `});for(let G of Object.keys($))if(G!=="type"&&G!=="offset")delete $[G];Object.assign($,{type:"block-scalar",indent:J,props:Y,source:X})}}function W5($,q){if(q)for(let Z of q)switch(Z.type){case"space":case"comment":$.push(Z);break;case"newline":return $.push(Z),!0}return!1}function B4($,q,Z){switch($.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":$.type=Z,$.source=q;break;case"block-scalar":{let Q=$.props.slice(1),X=q.length;if($.props[0].type==="block-scalar-header")X-=$.props[0].source.length;for(let z of Q)z.offset+=X;delete $.props,Object.assign($,{type:Z,source:q,end:Q});break}case"block-map":case"block-seq":{let X={type:"newline",offset:$.offset+q.length,indent:$.indent,source:`
115
- `};delete $.items,Object.assign($,{type:Z,source:q,end:[X]});break}default:{let Q="indent"in $?$.indent:-1,X="end"in $&&Array.isArray($.end)?$.end.filter((z)=>z.type==="space"||z.type==="comment"||z.type==="newline"):[];for(let z of Object.keys($))if(z!=="type"&&z!=="offset")delete $[z];Object.assign($,{type:Z,indent:Q,source:q,end:X})}}}DY.createScalarToken=jY;DY.resolveAsScalar=RY;DY.setScalarValue=wY});var H5=N((bY)=>{var SY=($)=>("type"in $)?yq($):fq($);function yq($){switch($.type){case"block-scalar":{let q="";for(let Z of $.props)q+=yq(Z);return q+$.source}case"block-map":case"block-seq":{let q="";for(let Z of $.items)q+=fq(Z);return q}case"flow-collection":{let q=$.start.source;for(let Z of $.items)q+=fq(Z);for(let Z of $.end)q+=Z.source;return q}case"document":{let q=fq($);if($.end)for(let Z of $.end)q+=Z.source;return q}default:{let q=$.source;if("end"in $&&$.end)for(let Z of $.end)q+=Z.source;return q}}}function fq({start:$,key:q,sep:Z,value:Q}){let X="";for(let z of $)X+=z.source;if(q)X+=yq(q);if(Z)for(let z of Z)X+=z.source;if(Q)X+=yq(Q);return X}bY.stringify=SY});var _5=N((yY)=>{var K4=Symbol("break visit"),fY=Symbol("skip children"),B5=Symbol("remove item");function g0($,q){if("type"in $&&$.type==="document")$={start:$.start,value:$.value};K5(Object.freeze([]),$,q)}g0.BREAK=K4;g0.SKIP=fY;g0.REMOVE=B5;g0.itemAtPath=($,q)=>{let Z=$;for(let[Q,X]of q){let z=Z?.[Q];if(z&&"items"in z)Z=z.items[X];else return}return Z};g0.parentCollection=($,q)=>{let Z=g0.itemAtPath($,q.slice(0,-1)),Q=q[q.length-1][0],X=Z?.[Q];if(X&&"items"in X)return X;throw Error("Parent collection not found")};function K5($,q,Z){let Q=Z(q,$);if(typeof Q==="symbol")return Q;for(let X of["key","value"]){let z=q[X];if(z&&"items"in z){for(let J=0;J<z.items.length;++J){let Y=K5(Object.freeze($.concat([[X,J]])),z.items[J],Z);if(typeof Y==="number")J=Y-1;else if(Y===K4)return K4;else if(Y===B5)z.items.splice(J,1),J-=1}if(typeof Q==="function"&&X==="key")Q=Q(q,$)}}return typeof Q==="function"?Q(q,$):Q}yY.visit=g0});var kq=N((dY)=>{var _4=V5(),vY=H5(),hY=_5(),O4="\uFEFF",L4="\x02",F4="\x18",A4="\x1F",gY=($)=>!!$&&("items"in $),uY=($)=>!!$&&($.type==="scalar"||$.type==="single-quoted-scalar"||$.type==="double-quoted-scalar"||$.type==="block-scalar");function mY($){switch($){case O4:return"<BOM>";case L4:return"<DOC>";case F4:return"<FLOW_END>";case A4:return"<SCALAR>";default:return JSON.stringify($)}}function pY($){switch($){case O4:return"byte-order-mark";case L4:return"doc-mode";case F4:return"flow-error-end";case A4:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
104
+ `)+(r.substring(1)||" "),s=!0,i=!1;break;case"%":e[n+1]?.[0]!=="#"&&(n+=1),s=!1;break;default:s||(i=!0),s=!1}}return{comment:t,afterEmptyLine:i}}var sr=class{constructor(t={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(s,i,n,r)=>{let o=Vt(s);r?this.warnings.push(new Ut.YAMLWarning(o,i,n)):this.errors.push(new Ut.YAMLParseError(o,i,n))},this.directives=new Ah.Directives({version:t.version||"1.2"}),this.options=t}decorate(t,s){let{comment:i,afterEmptyLine:n}=Xl(this.prelude);if(i){let r=t.contents;if(s)t.comment=t.comment?`${t.comment}
105
+ ${i}`:i;else if(n||t.directives.docStart||!r)t.commentBefore=i;else if(Ql.isCollection(r)&&!r.flow&&r.items.length>0){let o=r.items[0];Ql.isPair(o)&&(o=o.key);let a=o.commentBefore;o.commentBefore=a?`${i}
106
+ ${a}`:i}else{let o=r.commentBefore;r.commentBefore=o?`${i}
107
+ ${o}`:i}}s?(Array.prototype.push.apply(t.errors,this.errors),Array.prototype.push.apply(t.warnings,this.warnings)):(t.errors=this.errors,t.warnings=this.warnings),this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:Xl(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(t,s=!1,i=-1){for(let n of t)yield*this.next(n);yield*this.end(s,i)}*next(t){switch(Eh.env.LOG_STREAM&&console.dir(t,{depth:null}),t.type){case"directive":this.directives.add(t.source,(s,i,n)=>{let r=Vt(t);r[0]+=s,this.onError(r,"BAD_DIRECTIVE",i,n)}),this.prelude.push(t.source),this.atDirectives=!0;break;case"document":{let s=Nh.composeDoc(this.options,this.directives,t,this.onError);this.atDirectives&&!s.directives.docStart&&this.onError(t,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(s,!1),this.doc&&(yield this.doc),this.doc=s,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(t.source);break;case"error":{let s=t.source?`${t.message}: ${JSON.stringify(t.source)}`:t.message,i=new Ut.YAMLParseError(Vt(t),"UNEXPECTED_TOKEN",s);this.atDirectives||!this.doc?this.errors.push(i):this.doc.errors.push(i);break}case"doc-end":{if(!this.doc){let i="Unexpected doc-end without preceding document";this.errors.push(new Ut.YAMLParseError(Vt(t),"UNEXPECTED_TOKEN",i));break}this.doc.directives.docEnd=!0;let s=Ih.resolveEnd(t.end,t.offset+t.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),s.comment){let i=this.doc.comment;this.doc.comment=i?`${i}
108
+ ${s.comment}`:s.comment}this.doc.range[2]=s.offset;break}default:this.errors.push(new Ut.YAMLParseError(Vt(t),"UNEXPECTED_TOKEN",`Unsupported token ${t.type}`))}}*end(t=!1,s=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(t){let i=Object.assign({_directives:this.directives},this.options),n=new Ph.Document(void 0,i);this.atDirectives&&this.onError(s,"MISSING_CHAR","Missing directives-end indicator line"),n.range=[0,s,s],this.decorate(n,!1),yield n}}};Zl.Composer=sr});var sc=A(Qs=>{"use strict";var Lh=Qn(),Rh=Zn(),Oh=jt(),ec=Ct();function Th(e,t=!0,s){if(e){let i=(n,r,o)=>{let a=typeof n=="number"?n:Array.isArray(n)?n[0]:n.offset;if(s)s(a,r,o);else throw new Oh.YAMLParseError([a,a+1],r,o)};switch(e.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return Rh.resolveFlowScalar(e,t,i);case"block-scalar":return Lh.resolveBlockScalar({options:{strict:t}},e,i)}}return null}function Mh(e,t){let{implicitKey:s=!1,indent:i,inFlow:n=!1,offset:r=-1,type:o="PLAIN"}=t,a=ec.stringifyString({type:o,value:e},{implicitKey:s,indent:i>0?" ".repeat(i):"",inFlow:n,options:{blockQuote:!0,lineWidth:-1}}),l=t.end??[{type:"newline",offset:-1,indent:i,source:`
109
+ `}];switch(a[0]){case"|":case">":{let c=a.indexOf(`
110
+ `),d=a.substring(0,c),f=a.substring(c+1)+`
111
+ `,p=[{type:"block-scalar-header",offset:r,indent:i,source:d}];return tc(p,l)||p.push({type:"newline",offset:-1,indent:i,source:`
112
+ `}),{type:"block-scalar",offset:r,indent:i,props:p,source:f}}case'"':return{type:"double-quoted-scalar",offset:r,indent:i,source:a,end:l};case"'":return{type:"single-quoted-scalar",offset:r,indent:i,source:a,end:l};default:return{type:"scalar",offset:r,indent:i,source:a,end:l}}}function Dh(e,t,s={}){let{afterKey:i=!1,implicitKey:n=!1,inFlow:r=!1,type:o}=s,a="indent"in e?e.indent:null;if(i&&typeof a=="number"&&(a+=2),!o)switch(e.type){case"single-quoted-scalar":o="QUOTE_SINGLE";break;case"double-quoted-scalar":o="QUOTE_DOUBLE";break;case"block-scalar":{let c=e.props[0];if(c.type!=="block-scalar-header")throw new Error("Invalid block scalar header");o=c.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:o="PLAIN"}let l=ec.stringifyString({type:o,value:t},{implicitKey:n||a===null,indent:a!==null&&a>0?" ".repeat(a):"",inFlow:r,options:{blockQuote:!0,lineWidth:-1}});switch(l[0]){case"|":case">":_h(e,l);break;case'"':nr(e,l,"double-quoted-scalar");break;case"'":nr(e,l,"single-quoted-scalar");break;default:nr(e,l,"scalar")}}function _h(e,t){let s=t.indexOf(`
113
+ `),i=t.substring(0,s),n=t.substring(s+1)+`
114
+ `;if(e.type==="block-scalar"){let r=e.props[0];if(r.type!=="block-scalar-header")throw new Error("Invalid block scalar header");r.source=i,e.source=n}else{let{offset:r}=e,o="indent"in e?e.indent:-1,a=[{type:"block-scalar-header",offset:r,indent:o,source:i}];tc(a,"end"in e?e.end:void 0)||a.push({type:"newline",offset:-1,indent:o,source:`
115
+ `});for(let l of Object.keys(e))l!=="type"&&l!=="offset"&&delete e[l];Object.assign(e,{type:"block-scalar",indent:o,props:a,source:n})}}function tc(e,t){if(t)for(let s of t)switch(s.type){case"space":case"comment":e.push(s);break;case"newline":return e.push(s),!0}return!1}function nr(e,t,s){switch(e.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":e.type=s,e.source=t;break;case"block-scalar":{let i=e.props.slice(1),n=t.length;e.props[0].type==="block-scalar-header"&&(n-=e.props[0].source.length);for(let r of i)r.offset+=n;delete e.props,Object.assign(e,{type:s,source:t,end:i});break}case"block-map":case"block-seq":{let n={type:"newline",offset:e.offset+t.length,indent:e.indent,source:`
116
+ `};delete e.items,Object.assign(e,{type:s,source:t,end:[n]});break}default:{let i="indent"in e?e.indent:-1,n="end"in e&&Array.isArray(e.end)?e.end.filter(r=>r.type==="space"||r.type==="comment"||r.type==="newline"):[];for(let r of Object.keys(e))r!=="type"&&r!=="offset"&&delete e[r];Object.assign(e,{type:s,indent:i,source:t,end:n})}}}Qs.createScalarToken=Mh;Qs.resolveAsScalar=Th;Qs.setScalarValue=Dh});var nc=A(ic=>{"use strict";var qh=e=>"type"in e?Zs(e):Xs(e);function Zs(e){switch(e.type){case"block-scalar":{let t="";for(let s of e.props)t+=Zs(s);return t+e.source}case"block-map":case"block-seq":{let t="";for(let s of e.items)t+=Xs(s);return t}case"flow-collection":{let t=e.start.source;for(let s of e.items)t+=Xs(s);for(let s of e.end)t+=s.source;return t}case"document":{let t=Xs(e);if(e.end)for(let s of e.end)t+=s.source;return t}default:{let t=e.source;if("end"in e&&e.end)for(let s of e.end)t+=s.source;return t}}}function Xs({start:e,key:t,sep:s,value:i}){let n="";for(let r of e)n+=r.source;if(t&&(n+=Zs(t)),s)for(let r of s)n+=r.source;return i&&(n+=Zs(i)),n}ic.stringify=qh});var lc=A(ac=>{"use strict";var rr=Symbol("break visit"),Fh=Symbol("skip children"),rc=Symbol("remove item");function Ve(e,t){"type"in e&&e.type==="document"&&(e={start:e.start,value:e.value}),oc(Object.freeze([]),e,t)}Ve.BREAK=rr;Ve.SKIP=Fh;Ve.REMOVE=rc;Ve.itemAtPath=(e,t)=>{let s=e;for(let[i,n]of t){let r=s?.[i];if(r&&"items"in r)s=r.items[n];else return}return s};Ve.parentCollection=(e,t)=>{let s=Ve.itemAtPath(e,t.slice(0,-1)),i=t[t.length-1][0],n=s?.[i];if(n&&"items"in n)return n;throw new Error("Parent collection not found")};function oc(e,t,s){let i=s(t,e);if(typeof i=="symbol")return i;for(let n of["key","value"]){let r=t[n];if(r&&"items"in r){for(let o=0;o<r.items.length;++o){let a=oc(Object.freeze(e.concat([[n,o]])),r.items[o],s);if(typeof a=="number")o=a-1;else{if(a===rr)return rr;a===rc&&(r.items.splice(o,1),o-=1)}}typeof i=="function"&&n==="key"&&(i=i(t,e))}}return typeof i=="function"?i(t,e):i}ac.visit=Ve});var ei=A(Z=>{"use strict";var or=sc(),jh=nc(),Bh=lc(),ar="\uFEFF",lr="",cr="",ur="",Uh=e=>!!e&&"items"in e,Vh=e=>!!e&&(e.type==="scalar"||e.type==="single-quoted-scalar"||e.type==="double-quoted-scalar"||e.type==="block-scalar");function Kh(e){switch(e){case ar:return"<BOM>";case lr:return"<DOC>";case cr:return"<FLOW_END>";case ur:return"<SCALAR>";default:return JSON.stringify(e)}}function Jh(e){switch(e){case ar:return"byte-order-mark";case lr:return"doc-mode";case cr:return"flow-error-end";case ur:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
116
117
  `:case`\r
117
- `:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch($[0]){case" ":case"\t":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}dY.createScalarToken=_4.createScalarToken;dY.resolveAsScalar=_4.resolveAsScalar;dY.setScalarValue=_4.setScalarValue;dY.stringify=vY.stringify;dY.visit=hY.visit;dY.BOM=O4;dY.DOCUMENT=L4;dY.FLOW_END=F4;dY.SCALAR=A4;dY.isCollection=gY;dY.isScalar=uY;dY.prettyToken=mY;dY.tokenType=pY});var T4=N((zG)=>{var x$=kq();function G0($){switch($){case void 0:case" ":case`
118
- `:case"\r":case"\t":return!0;default:return!1}}var O5=new Set("0123456789ABCDEFabcdef"),QG=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),vq=new Set(",[]{}"),XG=new Set(` ,[]{}
119
- \r `),I4=($)=>!$||XG.has($);class L5{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex($,q=!1){if($){if(typeof $!=="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+$:$,this.lineEndPos=null}this.atEnd=!q;let Z=this.next??"stream";while(Z&&(q||this.hasChars(1)))Z=yield*this.parseNext(Z)}atLineEnd(){let $=this.pos,q=this.buffer[$];while(q===" "||q==="\t")q=this.buffer[++$];if(!q||q==="#"||q===`
120
- `)return!0;if(q==="\r")return this.buffer[$+1]===`
121
- `;return!1}charAt($){return this.buffer[this.pos+$]}continueScalar($){let q=this.buffer[$];if(this.indentNext>0){let Z=0;while(q===" ")q=this.buffer[++Z+$];if(q==="\r"){let Q=this.buffer[Z+$+1];if(Q===`
122
- `||!Q&&!this.atEnd)return $+Z+1}return q===`
123
- `||Z>=this.indentNext||!q&&!this.atEnd?$+Z:-1}if(q==="-"||q==="."){let Z=this.buffer.substr($,3);if((Z==="---"||Z==="...")&&G0(this.buffer[$+3]))return-1}return $}getLine(){let $=this.lineEndPos;if(typeof $!=="number"||$!==-1&&$<this.pos)$=this.buffer.indexOf(`
124
- `,this.pos),this.lineEndPos=$;if($===-1)return this.atEnd?this.buffer.substring(this.pos):null;if(this.buffer[$-1]==="\r")$-=1;return this.buffer.substring(this.pos,$)}hasChars($){return this.pos+$<=this.buffer.length}setNext($){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=$,null}peek($){return this.buffer.substr(this.pos,$)}*parseNext($){switch($){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let $=this.getLine();if($===null)return this.setNext("stream");if($[0]===x$.BOM)yield*this.pushCount(1),$=$.substring(1);if($[0]==="%"){let q=$.length,Z=$.indexOf("#");while(Z!==-1){let X=$[Z-1];if(X===" "||X==="\t"){q=Z-1;break}else Z=$.indexOf("#",Z+1)}while(!0){let X=$[q-1];if(X===" "||X==="\t")q-=1;else break}let Q=(yield*this.pushCount(q))+(yield*this.pushSpaces(!0));return yield*this.pushCount($.length-Q),this.pushNewline(),"stream"}if(this.atLineEnd()){let q=yield*this.pushSpaces(!0);return yield*this.pushCount($.length-q),yield*this.pushNewline(),"stream"}return yield x$.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let $=this.charAt(0);if(!$&&!this.atEnd)return this.setNext("line-start");if($==="-"||$==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let q=this.peek(3);if((q==="---"||q==="...")&&G0(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,q==="---"?"doc":"stream"}if(this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!G0(this.charAt(1)))this.indentNext=this.indentValue;return yield*this.parseBlockStart()}*parseBlockStart(){let[$,q]=this.peek(2);if(!q&&!this.atEnd)return this.setNext("block-start");if(($==="-"||$==="?"||$===":")&&G0(q)){let Z=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=Z,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let $=this.getLine();if($===null)return this.setNext("doc");let q=yield*this.pushIndicators();switch($[q]){case"#":yield*this.pushCount($.length-q);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(I4),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return q+=yield*this.parseBlockScalarHeader(),q+=yield*this.pushSpaces(!0),yield*this.pushCount($.length-q),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let $,q,Z=-1;do{if($=yield*this.pushNewline(),$>0)q=yield*this.pushSpaces(!1),this.indentValue=Z=q;else q=0;q+=yield*this.pushSpaces(!0)}while($+q>0);let Q=this.getLine();if(Q===null)return this.setNext("flow");if(Z!==-1&&Z<this.indentNext&&Q[0]!=="#"||Z===0&&(Q.startsWith("---")||Q.startsWith("..."))&&G0(Q[3])){if(!(Z===this.indentNext-1&&this.flowLevel===1&&(Q[0]==="]"||Q[0]==="}")))return this.flowLevel=0,yield x$.FLOW_END,yield*this.parseLineStart()}let X=0;while(Q[X]===",")X+=yield*this.pushCount(1),X+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(X+=yield*this.pushIndicators(),Q[X]){case void 0:return"flow";case"#":return yield*this.pushCount(Q.length-X),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(I4),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{let z=this.charAt(1);if(this.flowKey||G0(z)||z===",")return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){let $=this.charAt(0),q=this.buffer.indexOf($,this.pos+1);if($==="'")while(q!==-1&&this.buffer[q+1]==="'")q=this.buffer.indexOf("'",q+2);else while(q!==-1){let X=0;while(this.buffer[q-1-X]==="\\")X+=1;if(X%2===0)break;q=this.buffer.indexOf('"',q+1)}let Z=this.buffer.substring(0,q),Q=Z.indexOf(`
125
- `,this.pos);if(Q!==-1){while(Q!==-1){let X=this.continueScalar(Q+1);if(X===-1)break;Q=Z.indexOf(`
126
- `,X)}if(Q!==-1)q=Q-(Z[Q-1]==="\r"?2:1)}if(q===-1){if(!this.atEnd)return this.setNext("quoted-scalar");q=this.buffer.length}return yield*this.pushToIndex(q+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let $=this.pos;while(!0){let q=this.buffer[++$];if(q==="+")this.blockScalarKeep=!0;else if(q>"0"&&q<="9")this.blockScalarIndent=Number(q)-1;else if(q!=="-")break}return yield*this.pushUntil((q)=>G0(q)||q==="#")}*parseBlockScalar(){let $=this.pos-1,q=0,Z;$:for(let X=this.pos;Z=this.buffer[X];++X)switch(Z){case" ":q+=1;break;case`
127
- `:$=X,q=0;break;case"\r":{let z=this.buffer[X+1];if(!z&&!this.atEnd)return this.setNext("block-scalar");if(z===`
128
- `)break}default:break $}if(!Z&&!this.atEnd)return this.setNext("block-scalar");if(q>=this.indentNext){if(this.blockScalarIndent===-1)this.indentNext=q;else this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let X=this.continueScalar($+1);if(X===-1)break;$=this.buffer.indexOf(`
129
- `,X)}while($!==-1);if($===-1){if(!this.atEnd)return this.setNext("block-scalar");$=this.buffer.length}}let Q=$+1;Z=this.buffer[Q];while(Z===" ")Z=this.buffer[++Q];if(Z==="\t"){while(Z==="\t"||Z===" "||Z==="\r"||Z===`
130
- `)Z=this.buffer[++Q];$=Q-1}else if(!this.blockScalarKeep)do{let X=$-1,z=this.buffer[X];if(z==="\r")z=this.buffer[--X];let J=X;while(z===" ")z=this.buffer[--X];if(z===`
131
- `&&X>=this.pos&&X+1+q>J)$=X;else break}while(!0);return yield x$.SCALAR,yield*this.pushToIndex($+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let $=this.flowLevel>0,q=this.pos-1,Z=this.pos-1,Q;while(Q=this.buffer[++Z])if(Q===":"){let X=this.buffer[Z+1];if(G0(X)||$&&vq.has(X))break;q=Z}else if(G0(Q)){let X=this.buffer[Z+1];if(Q==="\r")if(X===`
132
- `)Z+=1,Q=`
133
- `,X=this.buffer[Z+1];else q=Z;if(X==="#"||$&&vq.has(X))break;if(Q===`
134
- `){let z=this.continueScalar(Z+1);if(z===-1)break;Z=Math.max(Z,z-2)}}else{if($&&vq.has(Q))break;q=Z}if(!Q&&!this.atEnd)return this.setNext("plain-scalar");return yield x$.SCALAR,yield*this.pushToIndex(q+1,!0),$?"flow":"doc"}*pushCount($){if($>0)return yield this.buffer.substr(this.pos,$),this.pos+=$,$;return 0}*pushToIndex($,q){let Z=this.buffer.slice(this.pos,$);if(Z)return yield Z,this.pos+=Z.length,Z.length;else if(q)yield"";return 0}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(I4))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let $=this.flowLevel>0,q=this.charAt(1);if(G0(q)||$&&vq.has(q)){if(!$)this.indentNext=this.indentValue+1;else if(this.flowKey)this.flowKey=!1;return(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}}return 0}*pushTag(){if(this.charAt(1)==="<"){let $=this.pos+2,q=this.buffer[$];while(!G0(q)&&q!==">")q=this.buffer[++$];return yield*this.pushToIndex(q===">"?$+1:$,!1)}else{let $=this.pos+1,q=this.buffer[$];while(q)if(QG.has(q))q=this.buffer[++$];else if(q==="%"&&O5.has(this.buffer[$+1])&&O5.has(this.buffer[$+2]))q=this.buffer[$+=3];else break;return yield*this.pushToIndex($,!1)}}*pushNewline(){let $=this.buffer[this.pos];if($===`
135
- `)return yield*this.pushCount(1);else if($==="\r"&&this.charAt(1)===`
136
- `)return yield*this.pushCount(2);else return 0}*pushSpaces($){let q=this.pos-1,Z;do Z=this.buffer[++q];while(Z===" "||$&&Z==="\t");let Q=q-this.pos;if(Q>0)yield this.buffer.substr(this.pos,Q),this.pos=q;return Q}*pushUntil($){let q=this.pos,Z=this.buffer[q];while(!$(Z))Z=this.buffer[++q];return yield*this.pushToIndex(q,!1)}}zG.Lexer=L5});var M4=N((YG)=>{class F5{constructor(){this.lineStarts=[],this.addNewLine=($)=>this.lineStarts.push($),this.linePos=($)=>{let q=0,Z=this.lineStarts.length;while(q<Z){let X=q+Z>>1;if(this.lineStarts[X]<$)q=X+1;else Z=X}if(this.lineStarts[q]===$)return{line:q+1,col:1};if(q===0)return{line:0,col:$};let Q=this.lineStarts[q-1];return{line:q,col:$-Q+1}}}}YG.LineCounter=F5});var R4=N((VG)=>{var UG=v("process"),A5=kq(),WG=T4();function j0($,q){for(let Z=0;Z<$.length;++Z)if($[Z].type===q)return!0;return!1}function I5($){for(let q=0;q<$.length;++q)switch($[q].type){case"space":case"comment":case"newline":break;default:return q}return-1}function M5($){switch($?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function hq($){switch($.type){case"document":return $.start;case"block-map":{let q=$.items[$.items.length-1];return q.sep??q.start}case"block-seq":return $.items[$.items.length-1].start;default:return[]}}function z$($){if($.length===0)return[];let q=$.length;$:while(--q>=0)switch($[q].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break $}while($[++q]?.type==="space");return $.splice(q,$.length)}function T5($){if($.start.type==="flow-seq-start"){for(let q of $.items)if(q.sep&&!q.value&&!j0(q.start,"explicit-key-ind")&&!j0(q.sep,"map-value-ind")){if(q.key)q.value=q.key;if(delete q.key,M5(q.value))if(q.value.end)Array.prototype.push.apply(q.value.end,q.sep);else q.value.end=q.sep;else Array.prototype.push.apply(q.start,q.sep);delete q.sep}}}class R5{constructor($){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new WG.Lexer,this.onNewLine=$}*parse($,q=!1){if(this.onNewLine&&this.offset===0)this.onNewLine(0);for(let Z of this.lexer.lex($,q))yield*this.next(Z);if(!q)yield*this.end()}*next($){if(this.source=$,UG.env.LOG_TOKENS)console.log("|",A5.prettyToken($));if(this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=$.length;return}let q=A5.tokenType($);if(!q){let Z=`Not a YAML token: ${$}`;yield*this.pop({type:"error",offset:this.offset,message:Z,source:$}),this.offset+=$.length}else if(q==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=q,yield*this.step(),q){case"newline":if(this.atNewLine=!0,this.indent=0,this.onNewLine)this.onNewLine(this.offset+$.length);break;case"space":if(this.atNewLine&&$[0]===" ")this.indent+=$.length;break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":if(this.atNewLine)this.indent+=$.length;break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=$.length}}*end(){while(this.stack.length>0)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let $=this.peek(1);if(this.type==="doc-end"&&$?.type!=="doc-end"){while(this.stack.length>0)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!$)return yield*this.stream();switch($.type){case"document":return yield*this.document($);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar($);case"block-scalar":return yield*this.blockScalar($);case"block-map":return yield*this.blockMap($);case"block-seq":return yield*this.blockSequence($);case"flow-collection":return yield*this.flowCollection($);case"doc-end":return yield*this.documentEnd($)}yield*this.pop()}peek($){return this.stack[this.stack.length-$]}*pop($){let q=$??this.stack.pop();if(!q)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield q;else{let Z=this.peek(1);if(q.type==="block-scalar")q.indent="indent"in Z?Z.indent:0;else if(q.type==="flow-collection"&&Z.type==="document")q.indent=0;if(q.type==="flow-collection")T5(q);switch(Z.type){case"document":Z.value=q;break;case"block-scalar":Z.props.push(q);break;case"block-map":{let Q=Z.items[Z.items.length-1];if(Q.value){Z.items.push({start:[],key:q,sep:[]}),this.onKeyLine=!0;return}else if(Q.sep)Q.value=q;else{Object.assign(Q,{key:q,sep:[]}),this.onKeyLine=!Q.explicitKey;return}break}case"block-seq":{let Q=Z.items[Z.items.length-1];if(Q.value)Z.items.push({start:[],value:q});else Q.value=q;break}case"flow-collection":{let Q=Z.items[Z.items.length-1];if(!Q||Q.value)Z.items.push({start:[],key:q,sep:[]});else if(Q.sep)Q.value=q;else Object.assign(Q,{key:q,sep:[]});return}default:yield*this.pop(),yield*this.pop(q)}if((Z.type==="document"||Z.type==="block-map"||Z.type==="block-seq")&&(q.type==="block-map"||q.type==="block-seq")){let Q=q.items[q.items.length-1];if(Q&&!Q.sep&&!Q.value&&Q.start.length>0&&I5(Q.start)===-1&&(q.indent===0||Q.start.every((X)=>X.type!=="comment"||X.indent<q.indent))){if(Z.type==="document")Z.end=Q.start;else Z.items.push({start:Q.start});q.items.splice(-1,1)}}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let $={type:"document",offset:this.offset,start:[]};if(this.type==="doc-start")$.start.push(this.sourceToken);this.stack.push($);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document($){if($.value)return yield*this.lineEnd($);switch(this.type){case"doc-start":{if(I5($.start)!==-1)yield*this.pop(),yield*this.step();else $.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":$.start.push(this.sourceToken);return}let q=this.startBlockValue($);if(q)this.stack.push(q);else yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar($){if(this.type==="map-value-ind"){let q=hq(this.peek(2)),Z=z$(q),Q;if($.end)Q=$.end,Q.push(this.sourceToken),delete $.end;else Q=[this.sourceToken];let X={type:"block-map",offset:$.offset,indent:$.indent,items:[{start:Z,key:$,sep:Q}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=X}else yield*this.lineEnd($)}*blockScalar($){switch(this.type){case"space":case"comment":case"newline":$.props.push(this.sourceToken);return;case"scalar":if($.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let q=this.source.indexOf(`
137
- `)+1;while(q!==0)this.onNewLine(this.offset+q),q=this.source.indexOf(`
138
- `,q)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap($){let q=$.items[$.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,q.value){let Z="end"in q.value?q.value.end:void 0;if((Array.isArray(Z)?Z[Z.length-1]:void 0)?.type==="comment")Z?.push(this.sourceToken);else $.items.push({start:[this.sourceToken]})}else if(q.sep)q.sep.push(this.sourceToken);else q.start.push(this.sourceToken);return;case"space":case"comment":if(q.value)$.items.push({start:[this.sourceToken]});else if(q.sep)q.sep.push(this.sourceToken);else{if(this.atIndentedComment(q.start,$.indent)){let Q=$.items[$.items.length-2]?.value?.end;if(Array.isArray(Q)){Array.prototype.push.apply(Q,q.start),Q.push(this.sourceToken),$.items.pop();return}}q.start.push(this.sourceToken)}return}if(this.indent>=$.indent){let Z=!this.onKeyLine&&this.indent===$.indent,Q=Z&&(q.sep||q.explicitKey)&&this.type!=="seq-item-ind",X=[];if(Q&&q.sep&&!q.value){let z=[];for(let J=0;J<q.sep.length;++J){let Y=q.sep[J];switch(Y.type){case"newline":z.push(J);break;case"space":break;case"comment":if(Y.indent>$.indent)z.length=0;break;default:z.length=0}}if(z.length>=2)X=q.sep.splice(z[1])}switch(this.type){case"anchor":case"tag":if(Q||q.value)X.push(this.sourceToken),$.items.push({start:X}),this.onKeyLine=!0;else if(q.sep)q.sep.push(this.sourceToken);else q.start.push(this.sourceToken);return;case"explicit-key-ind":if(!q.sep&&!q.explicitKey)q.start.push(this.sourceToken),q.explicitKey=!0;else if(Q||q.value)X.push(this.sourceToken),$.items.push({start:X,explicitKey:!0});else this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]});this.onKeyLine=!0;return;case"map-value-ind":if(q.explicitKey)if(!q.sep)if(j0(q.start,"newline"))Object.assign(q,{key:null,sep:[this.sourceToken]});else{let z=z$(q.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:z,key:null,sep:[this.sourceToken]}]})}else if(q.value)$.items.push({start:[],key:null,sep:[this.sourceToken]});else if(j0(q.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:X,key:null,sep:[this.sourceToken]}]});else if(M5(q.key)&&!j0(q.sep,"newline")){let z=z$(q.start),J=q.key,Y=q.sep;Y.push(this.sourceToken),delete q.key,delete q.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:z,key:J,sep:Y}]})}else if(X.length>0)q.sep=q.sep.concat(X,this.sourceToken);else q.sep.push(this.sourceToken);else if(!q.sep)Object.assign(q,{key:null,sep:[this.sourceToken]});else if(q.value||Q)$.items.push({start:X,key:null,sep:[this.sourceToken]});else if(j0(q.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]});else q.sep.push(this.sourceToken);this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let z=this.flowScalar(this.type);if(Q||q.value)$.items.push({start:X,key:z,sep:[]}),this.onKeyLine=!0;else if(q.sep)this.stack.push(z);else Object.assign(q,{key:z,sep:[]}),this.onKeyLine=!0;return}default:{let z=this.startBlockValue($);if(z){if(z.type==="block-seq"){if(!q.explicitKey&&q.sep&&!j0(q.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else if(Z)$.items.push({start:X});this.stack.push(z);return}}}}yield*this.pop(),yield*this.step()}*blockSequence($){let q=$.items[$.items.length-1];switch(this.type){case"newline":if(q.value){let Z="end"in q.value?q.value.end:void 0;if((Array.isArray(Z)?Z[Z.length-1]:void 0)?.type==="comment")Z?.push(this.sourceToken);else $.items.push({start:[this.sourceToken]})}else q.start.push(this.sourceToken);return;case"space":case"comment":if(q.value)$.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(q.start,$.indent)){let Q=$.items[$.items.length-2]?.value?.end;if(Array.isArray(Q)){Array.prototype.push.apply(Q,q.start),Q.push(this.sourceToken),$.items.pop();return}}q.start.push(this.sourceToken)}return;case"anchor":case"tag":if(q.value||this.indent<=$.indent)break;q.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==$.indent)break;if(q.value||j0(q.start,"seq-item-ind"))$.items.push({start:[this.sourceToken]});else q.start.push(this.sourceToken);return}if(this.indent>$.indent){let Z=this.startBlockValue($);if(Z){this.stack.push(Z);return}}yield*this.pop(),yield*this.step()}*flowCollection($){let q=$.items[$.items.length-1];if(this.type==="flow-error-end"){let Z;do yield*this.pop(),Z=this.peek(1);while(Z?.type==="flow-collection")}else if($.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":if(!q||q.sep)$.items.push({start:[this.sourceToken]});else q.start.push(this.sourceToken);return;case"map-value-ind":if(!q||q.value)$.items.push({start:[],key:null,sep:[this.sourceToken]});else if(q.sep)q.sep.push(this.sourceToken);else Object.assign(q,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":if(!q||q.value)$.items.push({start:[this.sourceToken]});else if(q.sep)q.sep.push(this.sourceToken);else q.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let Q=this.flowScalar(this.type);if(!q||q.value)$.items.push({start:[],key:Q,sep:[]});else if(q.sep)this.stack.push(Q);else Object.assign(q,{key:Q,sep:[]});return}case"flow-map-end":case"flow-seq-end":$.end.push(this.sourceToken);return}let Z=this.startBlockValue($);if(Z)this.stack.push(Z);else yield*this.pop(),yield*this.step()}else{let Z=this.peek(2);if(Z.type==="block-map"&&(this.type==="map-value-ind"&&Z.indent===$.indent||this.type==="newline"&&!Z.items[Z.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&Z.type!=="flow-collection"){let Q=hq(Z),X=z$(Q);T5($);let z=$.end.splice(1,$.end.length);z.push(this.sourceToken);let J={type:"block-map",offset:$.offset,indent:$.indent,items:[{start:X,key:$,sep:z}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=J}else yield*this.lineEnd($)}}flowScalar($){if(this.onNewLine){let q=this.source.indexOf(`
139
- `)+1;while(q!==0)this.onNewLine(this.offset+q),q=this.source.indexOf(`
140
- `,q)+1}return{type:$,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue($){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let q=hq($),Z=z$(q);return Z.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:Z,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let q=hq($),Z=z$(q);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:Z,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment($,q){if(this.type!=="comment")return!1;if(this.indent<=q)return!1;return $.every((Z)=>Z.type==="newline"||Z.type==="space")}*documentEnd($){if(this.type!=="doc-mode"){if($.end)$.end.push(this.sourceToken);else $.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd($){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:if($.end)$.end.push(this.sourceToken);else $.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}}VG.Parser=R5});var P5=N((IG)=>{var j5=H4(),BG=P$(),f$=C$(),KG=M1(),_G=k(),OG=M4(),w5=R4();function N5($){let q=$.prettyErrors!==!1;return{lineCounter:$.lineCounter||q&&new OG.LineCounter||null,prettyErrors:q}}function LG($,q={}){let{lineCounter:Z,prettyErrors:Q}=N5(q),X=new w5.Parser(Z?.addNewLine),z=new j5.Composer(q),J=Array.from(z.compose(X.parse($)));if(Q&&Z)for(let Y of J)Y.errors.forEach(f$.prettifyError($,Z)),Y.warnings.forEach(f$.prettifyError($,Z));if(J.length>0)return J;return Object.assign([],{empty:!0},z.streamInfo())}function D5($,q={}){let{lineCounter:Z,prettyErrors:Q}=N5(q),X=new w5.Parser(Z?.addNewLine),z=new j5.Composer(q),J=null;for(let Y of z.compose(X.parse($),!0,$.length))if(!J)J=Y;else if(J.options.logLevel!=="silent"){J.errors.push(new f$.YAMLParseError(Y.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}if(Q&&Z)J.errors.forEach(f$.prettifyError($,Z)),J.warnings.forEach(f$.prettifyError($,Z));return J}function FG($,q,Z){let Q=void 0;if(typeof q==="function")Q=q;else if(Z===void 0&&q&&typeof q==="object")Z=q;let X=D5($,Z);if(!X)return null;if(X.warnings.forEach((z)=>KG.warn(X.options.logLevel,z)),X.errors.length>0)if(X.options.logLevel!=="silent")throw X.errors[0];else X.errors=[];return X.toJS(Object.assign({reviver:Q},Z))}function AG($,q,Z){let Q=null;if(typeof q==="function"||Array.isArray(q))Q=q;else if(Z===void 0&&q)Z=q;if(typeof Z==="string")Z=Z.length;if(typeof Z==="number"){let X=Math.round(Z);Z=X<1?void 0:X>8?{indent:8}:{indent:X}}if($===void 0){let{keepUndefined:X}=Z??q??{};if(!X)return}if(_G.isDocument($)&&!Q)return $.toString(Z);return new BG.Document($,Q,Z).toString(Z)}IG.parse=FG;IG.parseAllDocuments=LG;IG.parseDocument=D5;IG.stringify=AG});import{execFile as o6}from"child_process";import{promisify as s6}from"util";import{mkdtemp as U2,readdir as t6,readFile as H1,rm as i$,cp as r6,access as V1,stat as e6,lstat as $Z,symlink as qZ,mkdir as ZZ}from"fs/promises";import{join as B0,resolve as W2,relative as QZ,basename as XZ}from"path";import{homedir as V2}from"os";import{tmpdir as H2}from"os";import{readdir as p6,readFile as d6,stat as c6}from"fs/promises";import{join as l6}from"path";var n6=new Set([".png",".jpg",".jpeg",".gif",".ico",".bmp",".webp",".mp3",".mp4",".wav",".avi",".mov",".zip",".tar",".gz",".bz2",".7z",".exe",".dll",".so",".dylib",".woff",".woff2",".ttf",".eot",".pdf",".doc",".docx"]),a6=524288;async function n$($){let q=[];async function Z(Q,X){let z;try{z=await p6(Q)}catch{return}for(let J of z){if(J===".git"||J==="node_modules")continue;let Y=l6(Q,J),G=X?`${X}/${J}`:J;try{let U=await c6(Y);if(U.isDirectory())await Z(Y,G);else if(U.isFile()){let H=J.includes(".")?`.${J.split(".").pop().toLowerCase()}`:"";if(n6.has(H))continue;if(U.size>a6)continue;try{let V=await d6(Y,"utf-8");q.push({relPath:G,content:V,lineCount:V.split(`
141
- `).length})}catch{}}}catch{continue}}}return await Z($,""),q}class G2{selected;cursor;scrollOffset;pageSize;itemCount;filter;searchActive;filteredMap;constructor($,q){this.selected=$.map((Z)=>Z.checked),this.cursor=1,this.scrollOffset=0,this.pageSize=q,this.itemCount=$.length,this.filter="",this.searchActive=!1,this.filteredMap=$.map((Z,Q)=>Q)}get totalRows(){return this.filteredMap.length+1}applyFilter($){if(this.filter==="")this.filteredMap=$.map((q,Z)=>Z);else{let q=this.filter.toLowerCase();this.filteredMap=[];for(let Z=0;Z<$.length;Z++)if(($[Z].label.toLowerCase()+" "+($[Z].hint?.toLowerCase()??"")).includes(q))this.filteredMap.push(Z)}if(this.cursor>=this.totalRows)this.cursor=Math.max(0,this.totalRows-1);if(this.scrollOffset>0&&this.scrollOffset>=this.totalRows)this.scrollOffset=Math.max(0,this.totalRows-this.pageSize)}cursorToOriginalIndex(){if(this.cursor===0)return-1;return this.filteredMap[this.cursor-1]??-1}toggleCurrent(){if(this.cursor===0)this.toggleAll();else{let $=this.cursorToOriginalIndex();if($>=0)this.selected[$]=!this.selected[$]}}toggleAll(){let $=this.filteredMap,Z=!$.every((Q)=>this.selected[Q]);for(let Q of $)this.selected[Q]=Z}moveUp(){if(this.cursor>0)this.cursor--;else this.cursor=this.totalRows-1;this.adjustScroll()}moveDown(){if(this.cursor<this.totalRows-1)this.cursor++;else this.cursor=0;this.adjustScroll()}getSelectedIndices(){let $=[];for(let q=0;q<this.selected.length;q++)if(this.selected[q])$.push(q);return $}getVisibleRange(){let $=this.scrollOffset,q=Math.min(this.scrollOffset+this.pageSize,this.totalRows);return{start:$,end:q}}adjustScroll(){if(this.cursor<this.scrollOffset)this.scrollOffset=this.cursor;else if(this.cursor>=this.scrollOffset+this.pageSize)this.scrollOffset=this.cursor-this.pageSize+1}}function i6($,q,Z){let Q=[];if($.searchActive||$.filter!==""){let U=W.cyan("/"),H=$.filter,V=$.searchActive?W.cyan(""):"";if(Q.push(` ${U}${H}${V}`),$.filteredMap.length===0)Q.push(W.dim(" No matches found"));Q.push("")}let{start:X,end:z}=$.getVisibleRange();if(X>0)Q.push(W.dim(` ... ${X} more above`));for(let U=X;U<z;U++){let V=U===$.cursor?W.cyan(">"):" ";if(U===0){let B=$.filteredMap,O=B.length>0&&B.every((L)=>$.selected[L])?W.green("[*]"):"[ ]",K=$.filter!==""?`Select All Matching (${$.filteredMap.length})`:"Select All / Deselect All";Q.push(`${V} ${O} ${W.bold(K)}`)}else{let B=$.filteredMap[U-1],_=q[B],K=$.selected[B]?W.green("[*]"):"[ ]",L=`${V} ${K} `,F=7,A=W.bold(_.label),M=_.label.length;if(_.hint){let j=Z-7-M-2;if(j>10){let T=U1(_.hint,j);Q.push(`${L}${A} ${W.dim(T)}`)}else{let T=U1(_.label,Z-7);Q.push(`${L}${W.bold(T)}`)}}else{let j=U1(_.label,Z-7);Q.push(`${L}${W.bold(j)}`)}}}let J=$.totalRows-z;if(J>0)Q.push(W.dim(` ... ${J} more below`));let Y=$.getSelectedIndices().length,G=$.filter!==""?` matching: ${$.filteredMap.length}/${$.itemCount}`:"";if(Q.push(""),$.searchActive)Q.push(W.dim(` ${Y} of ${$.itemCount} selected${G} | Type to filter Esc Clear Enter Done searching`));else Q.push(W.dim(` ${Y} of ${$.itemCount} selected${G} | `+"↑/↓ Navigate Space Toggle a All / Search Enter Confirm Esc Cancel"));return Q}function U1($,q){if(q<=0)return"";if($.length<=q)return $;if(q<=3)return $.slice(0,q);return $.slice(0,q-3)+"..."}async function a0($){let{items:q}=$,Z=$.pageSize??Math.min(q.length+1,15),Q=new G2(q,Z),X=process.stderr,z=process.stdin,J=X.columns||80;if(typeof z.setRawMode==="function")z.setRawMode(!0);z.resume(),z.setEncoding("utf-8"),X.write("\x1B[?25l");let Y=0;function G(){let U=i6(Q,q,J);if(Y>0)X.write(`\x1B[${Y}F`);let H=Math.max(U.length,Y),V="";for(let B=0;B<H;B++)V+=`\x1B[2K${B<U.length?U[B]:""}
142
- `;X.write(V),Y=H}return G(),new Promise((U)=>{let H="",V=null;function B(){if(z.removeListener("data",K),typeof z.setRawMode==="function")z.setRawMode(!1);if(z.pause(),X.write("\x1B[?25h"),V)clearTimeout(V)}function _(L){B(),U(L)}function O(L){if(Q.searchActive){if(L==="\x1B"){Q.searchActive=!1,Q.filter="",Q.applyFilter(q),G();return}if(L==="\r"||L===`
143
- `){Q.searchActive=!1,G();return}if(L===""||L==="\b"){if(Q.filter.length>0)Q.filter=Q.filter.slice(0,-1),Q.applyFilter(q);else Q.searchActive=!1;G();return}if(L==="\x03"){B(),process.kill(process.pid,"SIGINT");return}if(L==="\x1B[A"){Q.moveUp(),G();return}if(L==="\x1B[B"){Q.moveDown(),G();return}if(L===" "){Q.toggleCurrent(),G();return}if(L.length===1&&L>=" "&&L<="~"){Q.filter+=L,Q.applyFilter(q),G();return}return}switch(L){case"\x1B[A":case"k":Q.moveUp(),G();break;case"\x1B[B":case"j":Q.moveDown(),G();break;case" ":Q.toggleCurrent(),G();break;case"a":Q.toggleAll(),G();break;case"/":Q.searchActive=!0,G();break;case"\r":case`
144
- `:_(Q.getSelectedIndices());break;case"\x1B":if(Q.filter!=="")Q.filter="",Q.applyFilter(q),G();else _([]);break;case"":case"\b":if(Q.filter.length>0)Q.filter=Q.filter.slice(0,-1),Q.applyFilter(q),G();break;case"\x03":B(),process.kill(process.pid,"SIGINT");break}}function K(L){if(H.length>0){if(H+=L,V)clearTimeout(V);if(H.length>=3&&H[1]==="["){let A=H.slice(0,3),M=H.slice(3);if(H="",O(A),M)K(M);return}let F=H;H="",O("\x1B");for(let A=1;A<F.length;A++)O(F[A]);return}for(let F=0;F<L.length;F++){let A=L[F];if(A==="\x1B"){let M=L.slice(F);if(M.length>=3&&M[1]==="[")O(M.slice(0,3)),F+=2;else if(M.length>=2){H=M,V=setTimeout(()=>{let j=H;H="",O("\x1B");for(let T=1;T<j.length;T++)O(j[T])},50);return}else{H="\x1B",V=setTimeout(()=>{H="",O("\x1B")},50);return}}else O(A)}}z.on("data",K)})}var D0=s6(o6),zZ=/^[a-zA-Z0-9_-]+$/,JZ=/^[a-zA-Z0-9._-]+$/,YZ=/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/,B2=128,GZ=/^https?:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\/tree\/(.+))?\/?$/;function UZ($){return $.startsWith("/")||$.startsWith("./")||$.startsWith(".\\")||$.startsWith("../")||$.startsWith("..\\")||$.startsWith("~/")||$.startsWith("~\\")||$==="~"||$==="."||$===".."||/^[a-zA-Z]:[/\\]/.test($)}function WZ($){let q;if($==="~")q=V2();else if($.startsWith("~/")||$.startsWith("~\\"))q=W2(V2(),$.slice(2));else q=W2($);let Z=XZ(q);return E(`install: parsed local source -> path=${q}`),{owner:"local",repo:Z,ref:null,subpath:null,cloneUrl:"",sshCloneUrl:"",isLocal:!0,localPath:q}}function P0($){if(UZ($))return WZ($);let q=GZ.exec($);if(q){let[,V,B,_]=q,O=B.endsWith(".git")?B.slice(0,-4):B;$=`github:${V}/${O}${_?`#${_}`:""}`}if(!$.startsWith("github:"))throw Error(`Invalid source format. Got: "${$}"
118
+ `:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(e[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}Z.createScalarToken=or.createScalarToken;Z.resolveAsScalar=or.resolveAsScalar;Z.setScalarValue=or.setScalarValue;Z.stringify=jh.stringify;Z.visit=Bh.visit;Z.BOM=ar;Z.DOCUMENT=lr;Z.FLOW_END=cr;Z.SCALAR=ur;Z.isCollection=Uh;Z.isScalar=Vh;Z.prettyToken=Kh;Z.tokenType=Jh});var pr=A(uc=>{"use strict";var Kt=ei();function ce(e){switch(e){case void 0:case" ":case`
119
+ `:case"\r":case" ":return!0;default:return!1}}var cc=new Set("0123456789ABCDEFabcdef"),Hh=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),ti=new Set(",[]{}"),Yh=new Set(` ,[]{}
120
+ \r `),fr=e=>!e||Yh.has(e),dr=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(t,s=!1){if(t){if(typeof t!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+t:t,this.lineEndPos=null}this.atEnd=!s;let i=this.next??"stream";for(;i&&(s||this.hasChars(1));)i=yield*this.parseNext(i)}atLineEnd(){let t=this.pos,s=this.buffer[t];for(;s===" "||s===" ";)s=this.buffer[++t];return!s||s==="#"||s===`
121
+ `?!0:s==="\r"?this.buffer[t+1]===`
122
+ `:!1}charAt(t){return this.buffer[this.pos+t]}continueScalar(t){let s=this.buffer[t];if(this.indentNext>0){let i=0;for(;s===" ";)s=this.buffer[++i+t];if(s==="\r"){let n=this.buffer[i+t+1];if(n===`
123
+ `||!n&&!this.atEnd)return t+i+1}return s===`
124
+ `||i>=this.indentNext||!s&&!this.atEnd?t+i:-1}if(s==="-"||s==="."){let i=this.buffer.substr(t,3);if((i==="---"||i==="...")&&ce(this.buffer[t+3]))return-1}return t}getLine(){let t=this.lineEndPos;return(typeof t!="number"||t!==-1&&t<this.pos)&&(t=this.buffer.indexOf(`
125
+ `,this.pos),this.lineEndPos=t),t===-1?this.atEnd?this.buffer.substring(this.pos):null:(this.buffer[t-1]==="\r"&&(t-=1),this.buffer.substring(this.pos,t))}hasChars(t){return this.pos+t<=this.buffer.length}setNext(t){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=t,null}peek(t){return this.buffer.substr(this.pos,t)}*parseNext(t){switch(t){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let t=this.getLine();if(t===null)return this.setNext("stream");if(t[0]===Kt.BOM&&(yield*this.pushCount(1),t=t.substring(1)),t[0]==="%"){let s=t.length,i=t.indexOf("#");for(;i!==-1;){let r=t[i-1];if(r===" "||r===" "){s=i-1;break}else i=t.indexOf("#",i+1)}for(;;){let r=t[s-1];if(r===" "||r===" ")s-=1;else break}let n=(yield*this.pushCount(s))+(yield*this.pushSpaces(!0));return yield*this.pushCount(t.length-n),this.pushNewline(),"stream"}if(this.atLineEnd()){let s=yield*this.pushSpaces(!0);return yield*this.pushCount(t.length-s),yield*this.pushNewline(),"stream"}return yield Kt.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let t=this.charAt(0);if(!t&&!this.atEnd)return this.setNext("line-start");if(t==="-"||t==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let s=this.peek(3);if((s==="---"||s==="...")&&ce(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,s==="---"?"doc":"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!ce(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[t,s]=this.peek(2);if(!s&&!this.atEnd)return this.setNext("block-start");if((t==="-"||t==="?"||t===":")&&ce(s)){let i=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=i,yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let t=this.getLine();if(t===null)return this.setNext("doc");let s=yield*this.pushIndicators();switch(t[s]){case"#":yield*this.pushCount(t.length-s);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(fr),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return s+=yield*this.parseBlockScalarHeader(),s+=yield*this.pushSpaces(!0),yield*this.pushCount(t.length-s),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let t,s,i=-1;do t=yield*this.pushNewline(),t>0?(s=yield*this.pushSpaces(!1),this.indentValue=i=s):s=0,s+=yield*this.pushSpaces(!0);while(t+s>0);let n=this.getLine();if(n===null)return this.setNext("flow");if((i!==-1&&i<this.indentNext&&n[0]!=="#"||i===0&&(n.startsWith("---")||n.startsWith("..."))&&ce(n[3]))&&!(i===this.indentNext-1&&this.flowLevel===1&&(n[0]==="]"||n[0]==="}")))return this.flowLevel=0,yield Kt.FLOW_END,yield*this.parseLineStart();let r=0;for(;n[r]===",";)r+=yield*this.pushCount(1),r+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(r+=yield*this.pushIndicators(),n[r]){case void 0:return"flow";case"#":return yield*this.pushCount(n.length-r),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(fr),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{let o=this.charAt(1);if(this.flowKey||ce(o)||o===",")return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){let t=this.charAt(0),s=this.buffer.indexOf(t,this.pos+1);if(t==="'")for(;s!==-1&&this.buffer[s+1]==="'";)s=this.buffer.indexOf("'",s+2);else for(;s!==-1;){let r=0;for(;this.buffer[s-1-r]==="\\";)r+=1;if(r%2===0)break;s=this.buffer.indexOf('"',s+1)}let i=this.buffer.substring(0,s),n=i.indexOf(`
126
+ `,this.pos);if(n!==-1){for(;n!==-1;){let r=this.continueScalar(n+1);if(r===-1)break;n=i.indexOf(`
127
+ `,r)}n!==-1&&(s=n-(i[n-1]==="\r"?2:1))}if(s===-1){if(!this.atEnd)return this.setNext("quoted-scalar");s=this.buffer.length}return yield*this.pushToIndex(s+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let t=this.pos;for(;;){let s=this.buffer[++t];if(s==="+")this.blockScalarKeep=!0;else if(s>"0"&&s<="9")this.blockScalarIndent=Number(s)-1;else if(s!=="-")break}return yield*this.pushUntil(s=>ce(s)||s==="#")}*parseBlockScalar(){let t=this.pos-1,s=0,i;e:for(let r=this.pos;i=this.buffer[r];++r)switch(i){case" ":s+=1;break;case`
128
+ `:t=r,s=0;break;case"\r":{let o=this.buffer[r+1];if(!o&&!this.atEnd)return this.setNext("block-scalar");if(o===`
129
+ `)break}default:break e}if(!i&&!this.atEnd)return this.setNext("block-scalar");if(s>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=s:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let r=this.continueScalar(t+1);if(r===-1)break;t=this.buffer.indexOf(`
130
+ `,r)}while(t!==-1);if(t===-1){if(!this.atEnd)return this.setNext("block-scalar");t=this.buffer.length}}let n=t+1;for(i=this.buffer[n];i===" ";)i=this.buffer[++n];if(i===" "){for(;i===" "||i===" "||i==="\r"||i===`
131
+ `;)i=this.buffer[++n];t=n-1}else if(!this.blockScalarKeep)do{let r=t-1,o=this.buffer[r];o==="\r"&&(o=this.buffer[--r]);let a=r;for(;o===" ";)o=this.buffer[--r];if(o===`
132
+ `&&r>=this.pos&&r+1+s>a)t=r;else break}while(!0);return yield Kt.SCALAR,yield*this.pushToIndex(t+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let t=this.flowLevel>0,s=this.pos-1,i=this.pos-1,n;for(;n=this.buffer[++i];)if(n===":"){let r=this.buffer[i+1];if(ce(r)||t&&ti.has(r))break;s=i}else if(ce(n)){let r=this.buffer[i+1];if(n==="\r"&&(r===`
133
+ `?(i+=1,n=`
134
+ `,r=this.buffer[i+1]):s=i),r==="#"||t&&ti.has(r))break;if(n===`
135
+ `){let o=this.continueScalar(i+1);if(o===-1)break;i=Math.max(i,o-2)}}else{if(t&&ti.has(n))break;s=i}return!n&&!this.atEnd?this.setNext("plain-scalar"):(yield Kt.SCALAR,yield*this.pushToIndex(s+1,!0),t?"flow":"doc")}*pushCount(t){return t>0?(yield this.buffer.substr(this.pos,t),this.pos+=t,t):0}*pushToIndex(t,s){let i=this.buffer.slice(this.pos,t);return i?(yield i,this.pos+=i.length,i.length):(s&&(yield""),0)}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(fr))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let t=this.flowLevel>0,s=this.charAt(1);if(ce(s)||t&&ti.has(s))return t?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}return 0}*pushTag(){if(this.charAt(1)==="<"){let t=this.pos+2,s=this.buffer[t];for(;!ce(s)&&s!==">";)s=this.buffer[++t];return yield*this.pushToIndex(s===">"?t+1:t,!1)}else{let t=this.pos+1,s=this.buffer[t];for(;s;)if(Hh.has(s))s=this.buffer[++t];else if(s==="%"&&cc.has(this.buffer[t+1])&&cc.has(this.buffer[t+2]))s=this.buffer[t+=3];else break;return yield*this.pushToIndex(t,!1)}}*pushNewline(){let t=this.buffer[this.pos];return t===`
136
+ `?yield*this.pushCount(1):t==="\r"&&this.charAt(1)===`
137
+ `?yield*this.pushCount(2):0}*pushSpaces(t){let s=this.pos-1,i;do i=this.buffer[++s];while(i===" "||t&&i===" ");let n=s-this.pos;return n>0&&(yield this.buffer.substr(this.pos,n),this.pos=s),n}*pushUntil(t){let s=this.pos,i=this.buffer[s];for(;!t(i);)i=this.buffer[++s];return yield*this.pushToIndex(s,!1)}};uc.Lexer=dr});var hr=A(fc=>{"use strict";var mr=class{constructor(){this.lineStarts=[],this.addNewLine=t=>this.lineStarts.push(t),this.linePos=t=>{let s=0,i=this.lineStarts.length;for(;s<i;){let r=s+i>>1;this.lineStarts[r]<t?s=r+1:i=r}if(this.lineStarts[s]===t)return{line:s+1,col:1};if(s===0)return{line:0,col:t};let n=this.lineStarts[s-1];return{line:s,col:t-n+1}}}};fc.LineCounter=mr});var yr=A(gc=>{"use strict";var Gh=Zt("process"),dc=ei(),Wh=pr();function Ee(e,t){for(let s=0;s<e.length;++s)if(e[s].type===t)return!0;return!1}function pc(e){for(let t=0;t<e.length;++t)switch(e[t].type){case"space":case"comment":case"newline":break;default:return t}return-1}function hc(e){switch(e?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function si(e){switch(e.type){case"document":return e.start;case"block-map":{let t=e.items[e.items.length-1];return t.sep??t.start}case"block-seq":return e.items[e.items.length-1].start;default:return[]}}function at(e){if(e.length===0)return[];let t=e.length;e:for(;--t>=0;)switch(e[t].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;e[++t]?.type==="space";);return e.splice(t,e.length)}function mc(e){if(e.start.type==="flow-seq-start")for(let t of e.items)t.sep&&!t.value&&!Ee(t.start,"explicit-key-ind")&&!Ee(t.sep,"map-value-ind")&&(t.key&&(t.value=t.key),delete t.key,hc(t.value)?t.value.end?Array.prototype.push.apply(t.value.end,t.sep):t.value.end=t.sep:Array.prototype.push.apply(t.start,t.sep),delete t.sep)}var gr=class{constructor(t){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new Wh.Lexer,this.onNewLine=t}*parse(t,s=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let i of this.lexer.lex(t,s))yield*this.next(i);s||(yield*this.end())}*next(t){if(this.source=t,Gh.env.LOG_TOKENS&&console.log("|",dc.prettyToken(t)),this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=t.length;return}let s=dc.tokenType(t);if(s)if(s==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=s,yield*this.step(),s){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+t.length);break;case"space":this.atNewLine&&t[0]===" "&&(this.indent+=t.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=t.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=t.length}else{let i=`Not a YAML token: ${t}`;yield*this.pop({type:"error",offset:this.offset,message:i,source:t}),this.offset+=t.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let t=this.peek(1);if(this.type==="doc-end"&&t?.type!=="doc-end"){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!t)return yield*this.stream();switch(t.type){case"document":return yield*this.document(t);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(t);case"block-scalar":return yield*this.blockScalar(t);case"block-map":return yield*this.blockMap(t);case"block-seq":return yield*this.blockSequence(t);case"flow-collection":return yield*this.flowCollection(t);case"doc-end":return yield*this.documentEnd(t)}yield*this.pop()}peek(t){return this.stack[this.stack.length-t]}*pop(t){let s=t??this.stack.pop();if(!s)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield s;else{let i=this.peek(1);switch(s.type==="block-scalar"?s.indent="indent"in i?i.indent:0:s.type==="flow-collection"&&i.type==="document"&&(s.indent=0),s.type==="flow-collection"&&mc(s),i.type){case"document":i.value=s;break;case"block-scalar":i.props.push(s);break;case"block-map":{let n=i.items[i.items.length-1];if(n.value){i.items.push({start:[],key:s,sep:[]}),this.onKeyLine=!0;return}else if(n.sep)n.value=s;else{Object.assign(n,{key:s,sep:[]}),this.onKeyLine=!n.explicitKey;return}break}case"block-seq":{let n=i.items[i.items.length-1];n.value?i.items.push({start:[],value:s}):n.value=s;break}case"flow-collection":{let n=i.items[i.items.length-1];!n||n.value?i.items.push({start:[],key:s,sep:[]}):n.sep?n.value=s:Object.assign(n,{key:s,sep:[]});return}default:yield*this.pop(),yield*this.pop(s)}if((i.type==="document"||i.type==="block-map"||i.type==="block-seq")&&(s.type==="block-map"||s.type==="block-seq")){let n=s.items[s.items.length-1];n&&!n.sep&&!n.value&&n.start.length>0&&pc(n.start)===-1&&(s.indent===0||n.start.every(r=>r.type!=="comment"||r.indent<s.indent))&&(i.type==="document"?i.end=n.start:i.items.push({start:n.start}),s.items.splice(-1,1))}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let t={type:"document",offset:this.offset,start:[]};this.type==="doc-start"&&t.start.push(this.sourceToken),this.stack.push(t);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(t){if(t.value)return yield*this.lineEnd(t);switch(this.type){case"doc-start":{pc(t.start)!==-1?(yield*this.pop(),yield*this.step()):t.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":t.start.push(this.sourceToken);return}let s=this.startBlockValue(t);s?this.stack.push(s):yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(t){if(this.type==="map-value-ind"){let s=si(this.peek(2)),i=at(s),n;t.end?(n=t.end,n.push(this.sourceToken),delete t.end):n=[this.sourceToken];let r={type:"block-map",offset:t.offset,indent:t.indent,items:[{start:i,key:t,sep:n}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=r}else yield*this.lineEnd(t)}*blockScalar(t){switch(this.type){case"space":case"comment":case"newline":t.props.push(this.sourceToken);return;case"scalar":if(t.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let s=this.source.indexOf(`
138
+ `)+1;for(;s!==0;)this.onNewLine(this.offset+s),s=this.source.indexOf(`
139
+ `,s)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(t){let s=t.items[t.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,s.value){let i="end"in s.value?s.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):t.items.push({start:[this.sourceToken]})}else s.sep?s.sep.push(this.sourceToken):s.start.push(this.sourceToken);return;case"space":case"comment":if(s.value)t.items.push({start:[this.sourceToken]});else if(s.sep)s.sep.push(this.sourceToken);else{if(this.atIndentedComment(s.start,t.indent)){let n=t.items[t.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,s.start),n.push(this.sourceToken),t.items.pop();return}}s.start.push(this.sourceToken)}return}if(this.indent>=t.indent){let i=!this.onKeyLine&&this.indent===t.indent,n=i&&(s.sep||s.explicitKey)&&this.type!=="seq-item-ind",r=[];if(n&&s.sep&&!s.value){let o=[];for(let a=0;a<s.sep.length;++a){let l=s.sep[a];switch(l.type){case"newline":o.push(a);break;case"space":break;case"comment":l.indent>t.indent&&(o.length=0);break;default:o.length=0}}o.length>=2&&(r=s.sep.splice(o[1]))}switch(this.type){case"anchor":case"tag":n||s.value?(r.push(this.sourceToken),t.items.push({start:r}),this.onKeyLine=!0):s.sep?s.sep.push(this.sourceToken):s.start.push(this.sourceToken);return;case"explicit-key-ind":!s.sep&&!s.explicitKey?(s.start.push(this.sourceToken),s.explicitKey=!0):n||s.value?(r.push(this.sourceToken),t.items.push({start:r,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(s.explicitKey)if(s.sep)if(s.value)t.items.push({start:[],key:null,sep:[this.sourceToken]});else if(Ee(s.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:r,key:null,sep:[this.sourceToken]}]});else if(hc(s.key)&&!Ee(s.sep,"newline")){let o=at(s.start),a=s.key,l=s.sep;l.push(this.sourceToken),delete s.key,delete s.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:a,sep:l}]})}else r.length>0?s.sep=s.sep.concat(r,this.sourceToken):s.sep.push(this.sourceToken);else if(Ee(s.start,"newline"))Object.assign(s,{key:null,sep:[this.sourceToken]});else{let o=at(s.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]})}else s.sep?s.value||n?t.items.push({start:r,key:null,sep:[this.sourceToken]}):Ee(s.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):s.sep.push(this.sourceToken):Object.assign(s,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let o=this.flowScalar(this.type);n||s.value?(t.items.push({start:r,key:o,sep:[]}),this.onKeyLine=!0):s.sep?this.stack.push(o):(Object.assign(s,{key:o,sep:[]}),this.onKeyLine=!0);return}default:{let o=this.startBlockValue(t);if(o){if(o.type==="block-seq"){if(!s.explicitKey&&s.sep&&!Ee(s.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else i&&t.items.push({start:r});this.stack.push(o);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(t){let s=t.items[t.items.length-1];switch(this.type){case"newline":if(s.value){let i="end"in s.value?s.value.end:void 0;(Array.isArray(i)?i[i.length-1]:void 0)?.type==="comment"?i?.push(this.sourceToken):t.items.push({start:[this.sourceToken]})}else s.start.push(this.sourceToken);return;case"space":case"comment":if(s.value)t.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(s.start,t.indent)){let n=t.items[t.items.length-2]?.value?.end;if(Array.isArray(n)){Array.prototype.push.apply(n,s.start),n.push(this.sourceToken),t.items.pop();return}}s.start.push(this.sourceToken)}return;case"anchor":case"tag":if(s.value||this.indent<=t.indent)break;s.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==t.indent)break;s.value||Ee(s.start,"seq-item-ind")?t.items.push({start:[this.sourceToken]}):s.start.push(this.sourceToken);return}if(this.indent>t.indent){let i=this.startBlockValue(t);if(i){this.stack.push(i);return}}yield*this.pop(),yield*this.step()}*flowCollection(t){let s=t.items[t.items.length-1];if(this.type==="flow-error-end"){let i;do yield*this.pop(),i=this.peek(1);while(i?.type==="flow-collection")}else if(t.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!s||s.sep?t.items.push({start:[this.sourceToken]}):s.start.push(this.sourceToken);return;case"map-value-ind":!s||s.value?t.items.push({start:[],key:null,sep:[this.sourceToken]}):s.sep?s.sep.push(this.sourceToken):Object.assign(s,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!s||s.value?t.items.push({start:[this.sourceToken]}):s.sep?s.sep.push(this.sourceToken):s.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let n=this.flowScalar(this.type);!s||s.value?t.items.push({start:[],key:n,sep:[]}):s.sep?this.stack.push(n):Object.assign(s,{key:n,sep:[]});return}case"flow-map-end":case"flow-seq-end":t.end.push(this.sourceToken);return}let i=this.startBlockValue(t);i?this.stack.push(i):(yield*this.pop(),yield*this.step())}else{let i=this.peek(2);if(i.type==="block-map"&&(this.type==="map-value-ind"&&i.indent===t.indent||this.type==="newline"&&!i.items[i.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&i.type!=="flow-collection"){let n=si(i),r=at(n);mc(t);let o=t.end.splice(1,t.end.length);o.push(this.sourceToken);let a={type:"block-map",offset:t.offset,indent:t.indent,items:[{start:r,key:t,sep:o}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=a}else yield*this.lineEnd(t)}}flowScalar(t){if(this.onNewLine){let s=this.source.indexOf(`
140
+ `)+1;for(;s!==0;)this.onNewLine(this.offset+s),s=this.source.indexOf(`
141
+ `,s)+1}return{type:t,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(t){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let s=si(t),i=at(s);return i.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let s=si(t),i=at(s);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:i,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(t,s){return this.type!=="comment"||this.indent<=s?!1:t.every(i=>i.type==="newline"||i.type==="space")}*documentEnd(t){this.type!=="doc-mode"&&(t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(t){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;case"space":case"comment":default:t.end?t.end.push(this.sourceToken):t.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};gc.Parser=gr});var kc=A(Ht=>{"use strict";var yc=ir(),zh=_t(),Jt=jt(),Qh=en(),Xh=D(),Zh=hr(),bc=yr();function wc(e){let t=e.prettyErrors!==!1;return{lineCounter:e.lineCounter||t&&new Zh.LineCounter||null,prettyErrors:t}}function eg(e,t={}){let{lineCounter:s,prettyErrors:i}=wc(t),n=new bc.Parser(s?.addNewLine),r=new yc.Composer(t),o=Array.from(r.compose(n.parse(e)));if(i&&s)for(let a of o)a.errors.forEach(Jt.prettifyError(e,s)),a.warnings.forEach(Jt.prettifyError(e,s));return o.length>0?o:Object.assign([],{empty:!0},r.streamInfo())}function vc(e,t={}){let{lineCounter:s,prettyErrors:i}=wc(t),n=new bc.Parser(s?.addNewLine),r=new yc.Composer(t),o=null;for(let a of r.compose(n.parse(e),!0,e.length))if(!o)o=a;else if(o.options.logLevel!=="silent"){o.errors.push(new Jt.YAMLParseError(a.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return i&&s&&(o.errors.forEach(Jt.prettifyError(e,s)),o.warnings.forEach(Jt.prettifyError(e,s))),o}function tg(e,t,s){let i;typeof t=="function"?i=t:s===void 0&&t&&typeof t=="object"&&(s=t);let n=vc(e,s);if(!n)return null;if(n.warnings.forEach(r=>Qh.warn(n.options.logLevel,r)),n.errors.length>0){if(n.options.logLevel!=="silent")throw n.errors[0];n.errors=[]}return n.toJS(Object.assign({reviver:i},s))}function sg(e,t,s){let i=null;if(typeof t=="function"||Array.isArray(t)?i=t:s===void 0&&t&&(s=t),typeof s=="string"&&(s=s.length),typeof s=="number"){let n=Math.round(s);s=n<1?void 0:n>8?{indent:8}:{indent:n}}if(e===void 0){let{keepUndefined:n}=s??t??{};if(!n)return}return Xh.isDocument(e)&&!i?e.toString(s):new zh.Document(e,i,s).toString(s)}Ht.parse=tg;Ht.parseAllDocuments=eg;Ht.parseDocument=vc;Ht.stringify=sg});var wr=A(_=>{"use strict";var ig=ir(),ng=_t(),rg=_n(),br=jt(),og=vt(),Ae=D(),ag=Se(),lg=F(),cg=xe(),ug=Ce(),fg=ei(),dg=pr(),pg=hr(),mg=yr(),ii=kc(),Sc=gt();_.Composer=ig.Composer;_.Document=ng.Document;_.Schema=rg.Schema;_.YAMLError=br.YAMLError;_.YAMLParseError=br.YAMLParseError;_.YAMLWarning=br.YAMLWarning;_.Alias=og.Alias;_.isAlias=Ae.isAlias;_.isCollection=Ae.isCollection;_.isDocument=Ae.isDocument;_.isMap=Ae.isMap;_.isNode=Ae.isNode;_.isPair=Ae.isPair;_.isScalar=Ae.isScalar;_.isSeq=Ae.isSeq;_.Pair=ag.Pair;_.Scalar=lg.Scalar;_.YAMLMap=cg.YAMLMap;_.YAMLSeq=ug.YAMLSeq;_.CST=fg;_.Lexer=dg.Lexer;_.LineCounter=pg.LineCounter;_.Parser=mg.Parser;_.parse=ii.parse;_.parseAllDocuments=ii.parseAllDocuments;_.parseDocument=ii.parseDocument;_.stringify=ii.stringify;_.visit=Sc.visit;_.visitAsync=Sc.visitAsync});import{execFile as $f}from"child_process";import{promisify as xf}from"util";import{mkdtemp as xo,readdir as Cf,readFile as Di,rm as ns,cp as Ef,access as Mi,stat as Af,lstat as Pf,symlink as Nf,mkdir as If}from"fs/promises";import{join as pe,resolve as Co,relative as Lf,basename as Rf}from"path";import{homedir as Eo}from"os";import{tmpdir as Ao}from"os";import{readdir as gf,readFile as yf,stat as bf}from"fs/promises";import{join as wf}from"path";var vf=new Set([".png",".jpg",".jpeg",".gif",".ico",".bmp",".webp",".mp3",".mp4",".wav",".avi",".mov",".zip",".tar",".gz",".bz2",".7z",".exe",".dll",".so",".dylib",".woff",".woff2",".ttf",".eot",".pdf",".doc",".docx"]),kf=512*1024;async function ss(e){let t=[];async function s(i,n){let r;try{r=await gf(i)}catch{return}for(let o of r){if(o===".git"||o==="node_modules")continue;let a=wf(i,o),l=n?`${n}/${o}`:o;try{let c=await bf(a);if(c.isDirectory())await s(a,l);else if(c.isFile()){let d=o.includes(".")?`.${o.split(".").pop().toLowerCase()}`:"";if(vf.has(d)||c.size>kf)continue;try{let f=await yf(a,"utf-8");t.push({relPath:l,content:f,lineCount:f.split(`
142
+ `).length})}catch{}}}catch{continue}}}return await s(e,""),t}var Oi=class{selected;cursor;scrollOffset;pageSize;itemCount;filter;searchActive;filteredMap;constructor(t,s){this.selected=t.map(i=>i.checked),this.cursor=1,this.scrollOffset=0,this.pageSize=s,this.itemCount=t.length,this.filter="",this.searchActive=!1,this.filteredMap=t.map((i,n)=>n)}get totalRows(){return this.filteredMap.length+1}applyFilter(t){if(this.filter==="")this.filteredMap=t.map((s,i)=>i);else{let s=this.filter.toLowerCase();this.filteredMap=[];for(let i=0;i<t.length;i++)(t[i].label.toLowerCase()+" "+(t[i].hint?.toLowerCase()??"")).includes(s)&&this.filteredMap.push(i)}this.cursor>=this.totalRows&&(this.cursor=Math.max(0,this.totalRows-1)),this.scrollOffset>0&&this.scrollOffset>=this.totalRows&&(this.scrollOffset=Math.max(0,this.totalRows-this.pageSize))}cursorToOriginalIndex(){return this.cursor===0?-1:this.filteredMap[this.cursor-1]??-1}toggleCurrent(){if(this.cursor===0)this.toggleAll();else{let t=this.cursorToOriginalIndex();t>=0&&(this.selected[t]=!this.selected[t])}}toggleAll(){let t=this.filteredMap,i=!t.every(n=>this.selected[n]);for(let n of t)this.selected[n]=i}moveUp(){this.cursor>0?this.cursor--:this.cursor=this.totalRows-1,this.adjustScroll()}moveDown(){this.cursor<this.totalRows-1?this.cursor++:this.cursor=0,this.adjustScroll()}getSelectedIndices(){let t=[];for(let s=0;s<this.selected.length;s++)this.selected[s]&&t.push(s);return t}getVisibleRange(){let t=this.scrollOffset,s=Math.min(this.scrollOffset+this.pageSize,this.totalRows);return{start:t,end:s}}adjustScroll(){this.cursor<this.scrollOffset?this.scrollOffset=this.cursor:this.cursor>=this.scrollOffset+this.pageSize&&(this.scrollOffset=this.cursor-this.pageSize+1)}};function Sf(e,t,s){let i=[];if(e.searchActive||e.filter!==""){let c=u.cyan("/"),d=e.filter,f=e.searchActive?u.cyan("\u2588"):"";i.push(` ${c}${d}${f}`),e.filteredMap.length===0&&i.push(u.dim(" No matches found")),i.push("")}let{start:n,end:r}=e.getVisibleRange();n>0&&i.push(u.dim(` ... ${n} more above`));for(let c=n;c<r;c++){let f=c===e.cursor?u.cyan(">"):" ";if(c===0){let p=e.filteredMap,y=p.length>0&&p.every(g=>e.selected[g])?u.green("[*]"):"[ ]",h=e.filter!==""?`Select All Matching (${e.filteredMap.length})`:"Select All / Deselect All";i.push(`${f} ${y} ${u.bold(h)}`)}else{let p=e.filteredMap[c-1],m=t[p],h=e.selected[p]?u.green("[*]"):"[ ]",g=`${f} ${h} `,b=7,v=u.bold(m.label),k=m.label.length;if(m.hint){let x=s-b-k-2;if(x>10){let S=Ri(m.hint,x);i.push(`${g}${v} ${u.dim(S)}`)}else{let S=Ri(m.label,s-b);i.push(`${g}${u.bold(S)}`)}}else{let x=Ri(m.label,s-b);i.push(`${g}${u.bold(x)}`)}}}let o=e.totalRows-r;o>0&&i.push(u.dim(` ... ${o} more below`));let a=e.getSelectedIndices().length,l=e.filter!==""?` matching: ${e.filteredMap.length}/${e.itemCount}`:"";return i.push(""),e.searchActive?i.push(u.dim(` ${a} of ${e.itemCount} selected${l} | Type to filter Esc Clear Enter Done searching`)):i.push(u.dim(` ${a} of ${e.itemCount} selected${l} | \u2191/\u2193 Navigate Space Toggle a All / Search Enter Confirm Esc Cancel`)),i}function Ri(e,t){return t<=0?"":e.length<=t?e:t<=3?e.slice(0,t):e.slice(0,t-3)+"..."}async function We(e){let{items:t}=e,s=e.pageSize??Math.min(t.length+1,15),i=new Oi(t,s),n=process.stderr,r=process.stdin,o=n.columns||80;typeof r.setRawMode=="function"&&r.setRawMode(!0),r.resume(),r.setEncoding("utf-8"),n.write("\x1B[?25l");let a=0;function l(){let c=Sf(i,t,o);a>0&&n.write(`\x1B[${a}F`);let d=Math.max(c.length,a),f="";for(let p=0;p<d;p++)f+=`\x1B[2K${p<c.length?c[p]:""}
143
+ `;n.write(f),a=d}return l(),new Promise(c=>{let d="",f=null;function p(){r.removeListener("data",h),typeof r.setRawMode=="function"&&r.setRawMode(!1),r.pause(),n.write("\x1B[?25h"),f&&clearTimeout(f)}function m(g){p(),c(g)}function y(g){if(i.searchActive){if(g==="\x1B"){i.searchActive=!1,i.filter="",i.applyFilter(t),l();return}if(g==="\r"||g===`
144
+ `){i.searchActive=!1,l();return}if(g==="\x7F"||g==="\b"){i.filter.length>0?(i.filter=i.filter.slice(0,-1),i.applyFilter(t)):i.searchActive=!1,l();return}if(g===""){p(),process.kill(process.pid,"SIGINT");return}if(g==="\x1B[A"){i.moveUp(),l();return}if(g==="\x1B[B"){i.moveDown(),l();return}if(g===" "){i.toggleCurrent(),l();return}if(g.length===1&&g>=" "&&g<="~"){i.filter+=g,i.applyFilter(t),l();return}return}switch(g){case"\x1B[A":case"k":i.moveUp(),l();break;case"\x1B[B":case"j":i.moveDown(),l();break;case" ":i.toggleCurrent(),l();break;case"a":i.toggleAll(),l();break;case"/":i.searchActive=!0,l();break;case"\r":case`
145
+ `:m(i.getSelectedIndices());break;case"\x1B":i.filter!==""?(i.filter="",i.applyFilter(t),l()):m([]);break;case"\x7F":case"\b":i.filter.length>0&&(i.filter=i.filter.slice(0,-1),i.applyFilter(t),l());break;case"":p(),process.kill(process.pid,"SIGINT");break}}function h(g){if(d.length>0){if(d+=g,f&&clearTimeout(f),d.length>=3&&d[1]==="["){let v=d.slice(0,3),k=d.slice(3);d="",y(v),k&&h(k);return}let b=d;d="",y("\x1B");for(let v=1;v<b.length;v++)y(b[v]);return}for(let b=0;b<g.length;b++){let v=g[b];if(v==="\x1B"){let k=g.slice(b);if(k.length>=3&&k[1]==="[")y(k.slice(0,3)),b+=2;else if(k.length>=2){d=k,f=setTimeout(()=>{let x=d;d="",y("\x1B");for(let S=1;S<x.length;S++)y(x[S])},50);return}else{d="\x1B",f=setTimeout(()=>{d="",y("\x1B")},50);return}}else y(v)}}r.on("data",h)})}var Re=xf($f),Of=/^[a-zA-Z0-9_-]+$/,Tf=/^[a-zA-Z0-9._-]+$/,Mf=/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/,Po=128,Df=/^https?:\/\/github\.com\/([^/]+)\/([^/]+?)(?:\/tree\/(.+))?\/?$/;function _f(e){return e.startsWith("/")||e.startsWith("./")||e.startsWith(".\\")||e.startsWith("../")||e.startsWith("..\\")||e.startsWith("~/")||e.startsWith("~\\")||e==="~"||e==="."||e===".."||/^[a-zA-Z]:[/\\]/.test(e)}function qf(e){let t;e==="~"?t=Eo():e.startsWith("~/")||e.startsWith("~\\")?t=Co(Eo(),e.slice(2)):t=Co(e);let s=Rf(t);return N(`install: parsed local source -> path=${t}`),{owner:"local",repo:s,ref:null,subpath:null,cloneUrl:"",sshCloneUrl:"",isLocal:!0,localPath:t}}function Oe(e){if(_f(e))return qf(e);let t=Df.exec(e);if(t){let[,f,p,m]=t,y=p.endsWith(".git")?p.slice(0,-4):p;e=`github:${f}/${y}${m?`#${m}`:""}`}if(!e.startsWith("github:"))throw new Error(`Invalid source format. Got: "${e}"
145
146
  Supported formats:
146
147
  github:owner/repo[#ref]
147
148
  github:owner/repo#ref:path
148
149
  https://github.com/owner/repo
149
150
  https://github.com/owner/repo/tree/branch/path/to/skill
150
151
  /path/to/local/skill
151
- ./relative/path/to/skill`);let Z=$.slice(7),Q=Z.indexOf("#"),X,z=null,J=null;if(Q!==-1){X=Z.slice(0,Q);let V=Z.slice(Q+1);if(!V)throw Error("Invalid source: ref cannot be empty after #");let B=V.indexOf(":");if(B!==-1){if(z=V.slice(0,B),!z)throw Error("Invalid source: ref cannot be empty before :");J=V.slice(B+1)||null}else z=V}else{let V=Z.indexOf(":");if(V!==-1)X=Z.slice(0,V),J=Z.slice(V+1)||null;else X=Z}let Y=X.indexOf("/");if(Y===-1)throw Error(`Invalid source: format must be github:owner/repo. Got: "${$}"`);let G=X.slice(0,Y),U=X.slice(Y+1);if(!G)throw Error("Invalid source: owner cannot be empty");if(!U)throw Error("Invalid source: repo cannot be empty");if(!zZ.test(G))throw Error(`Invalid source: owner contains invalid characters: "${G}". Allowed: [a-zA-Z0-9_-]`);if(!JZ.test(U))throw Error(`Invalid source: repo contains invalid characters: "${U}". Allowed: [a-zA-Z0-9._-]`);let H={owner:G,repo:U,ref:z,subpath:J,cloneUrl:`https://github.com/${G}/${U}.git`,sshCloneUrl:`git@github.com:${G}/${U}.git`};return E(`install: parsed source -> owner=${G} repo=${U} ref=${z} subpath=${J}`),H}async function s$($){if($.subpath!==null||!$.ref||!$.ref.includes("/"))return $;try{let{stdout:q}=await D0("git",["ls-remote","--heads","--tags",$.cloneUrl],{timeout:15000}),Z=new Set;for(let X of q.split(`
152
- `)){let z=X.match(/\trefs\/(?:heads|tags)\/(.+)$/);if(z)Z.add(z[1])}let Q=$.ref.split("/");for(let X=1;X<Q.length;X++){let z=Q.slice(0,X).join("/");if(Z.has(z)){let J=Q.slice(X).join("/");return E(`install: resolved ref="${z}" subpath="${J}"`),{...$,ref:z,subpath:J||null}}}}catch(q){E(`install: ls-remote failed, treating entire ref as branch: ${q}`)}return $}function C0($){if(!$)throw Error("Invalid skill name: name cannot be empty");if($.includes("\x00"))throw Error("Invalid skill name: contains unsafe characters (null byte)");if($.includes(".."))throw Error("Invalid skill name: contains unsafe characters (..)");if($.includes("/")||$.includes("\\"))throw Error("Invalid skill name: contains unsafe characters (path separator)");if($.startsWith("."))throw Error("Invalid skill name: must not start with a dot");if($.length>B2)throw Error(`Invalid skill name: exceeds maximum length of ${B2} characters`);if(!YZ.test($))throw Error(`Invalid skill name: "${$}" does not match allowed pattern [a-zA-Z0-9][a-zA-Z0-9._-]*`);return $}function VZ($){let q=$.split(/[/\\]/).filter(Boolean),Z=q.length>0?q[q.length-1]:$;return C0(Z)}function _2($){let q=new Map;for(let Z of $){let Q=VZ(Z),X=q.get(Q);if(X)X.push(Z);else q.set(Q,[Z])}return[...q.entries()].filter(([,Z])=>Z.length>1).map(([Z,Q])=>({name:Z,paths:Q}))}async function E0(){try{await D0("git",["--version"]),E("install: git available")}catch{throw Error("git is required for installing skills. Install git from https://git-scm.com")}}function HZ($){if($.killed)return!1;let q=($.stderr||$.message||"").toLowerCase();return q.includes("authentication failed")||q.includes("could not read username")||q.includes("repository not found")||q.includes("returned error: 403")||q.includes("returned error: 401")||q.includes("terminal prompts disabled")||q.includes("permission denied")}function a$($){return $.killed?"Clone timed out after 60 seconds":`Clone failed: ${$.stderr||$.message}`}async function W1($,q,Z){if(q!==null&&/^[0-9a-f]{40}$/i.test(q))return await D0("git",["clone","--no-checkout",$,Z],{timeout:60000}),await D0("git",["checkout",q],{cwd:Z,timeout:30000}),Z;let X=["clone","--depth","1"];if(q)X.push("--branch",q);return X.push($,Z),await D0("git",X,{timeout:60000}),Z}async function S0($,q="auto"){E(`install: cloning ${$.owner}/${$.repo}${$.ref?` (ref: ${$.ref})`:""} (transport: ${q})`);let Z=await U2(B0(H2(),"asm-install-"));if(q==="ssh"||q==="https"){let Q=q==="ssh"?$.sshCloneUrl:$.cloneUrl;try{return await W1(Q,$.ref,Z)}catch(X){throw await e(Z),Error(a$(X))}}try{return await W1($.cloneUrl,$.ref,Z)}catch(Q){if(!HZ(Q))throw await e(Z),Error(a$(Q));E("install: HTTPS clone failed with auth error, retrying with SSH..."),await e(Z);let X=await U2(B0(H2(),"asm-install-"));try{return await W1($.sshCloneUrl,$.ref,X)}catch(z){throw await e(X),Error(`Clone failed with both transports:
153
- HTTPS: ${a$(Q)}
154
- SSH: ${a$(z)}`)}}}async function b0($){let q=B0($,"SKILL.md"),Z;try{Z=await H1(q,"utf-8")}catch{throw Error("Not a valid skill: SKILL.md not found in repository root")}let Q=$0(Z),X=$.split(/[/\\]/).pop()||"unknown",z=Q.name||X,J=J0(Q);return E(`install: validated skill "${z}" v${J}`),{name:z,version:J,description:(Q.description||"").replace(/\s*\n\s*/g," ").trim(),effort:Q.effort||Q["metadata.effort"]||void 0}}async function t$($,q=5){let Z=[];async function Q(X,z,J){let Y;try{Y=await t6(X)}catch{return}for(let G of Y){if(G===".git"||G==="node_modules")continue;let U=B0(X,G);try{if(!(await e6(U)).isDirectory())continue}catch{continue}let H=z?`${z}/${G}`:G,V=J+1,B=B0(U,"SKILL.md");try{let _=await H1(B,"utf-8"),O=$0(_);Z.push({relPath:H,name:O.name||G,version:J0(O),description:(O.description||"").replace(/\s*\n\s*/g," ").trim(),effort:O.effort||O["metadata.effort"]||void 0,license:(O.license||"").trim(),creator:(O["metadata.creator"]||"").trim(),compatibility:(O.compatibility||"").trim(),allowedTools:K2(O),tokenCount:o$(_)})}catch{if(V<q)await Q(U,H,V)}}}return await Q($,"",0),Z.sort((X,z)=>X.name.localeCompare(z.name)),Z}var BZ=[{category:"Shell commands",pattern:/\b(bash|sh\s+-c)\b/},{category:"Shell commands",pattern:/\bexec\(/},{category:"Shell commands",pattern:/\bchild_process\b/},{category:"Shell commands",pattern:/\bBun\.spawn\b/},{category:"Code execution",pattern:/\beval\(/},{category:"Code execution",pattern:/\bFunction\(/},{category:"Code execution",pattern:/\bnew\s+Function\b/},{category:"Credentials",pattern:/\b(API_KEY|SECRET|TOKEN|PASSWORD)\s*[=:]/},{category:"External URLs",pattern:/https?:\/\//}];async function O2($){let q=[],Z=await n$($);for(let{relPath:Q,content:X}of Z){let z=X.split(`
155
- `);for(let J=0;J<z.length;J++)for(let{category:Y,pattern:G}of BZ)if(G.test(z[J])){let U=z[J].trim();q.push({category:Y,file:Q,line:J+1,match:U.length>100?U.slice(0,100)+"":U})}}return q}async function r$($){let q=$.source.isLocal?`local:${$.source.localPath}`:`github:${$.source.owner}/${$.source.repo}${$.source.ref?`#${$.source.ref}`:""}${$.source.subpath?`:${$.source.subpath}`:""}`;if($.force)try{await V1($.targetDir),await i$($.targetDir,{recursive:!0,force:!0})}catch{}let Z=$.sourceDir;try{await r6(Z,$.targetDir,{recursive:!0})}catch(Y){throw Error(`Failed to install: ${Y.message}`)}let Q=B0($.targetDir,".git");try{await i$(Q,{recursive:!0,force:!0})}catch{}E(`install: copied files to ${$.targetDir}`);let X=B0($.targetDir,"SKILL.md");try{await V1(X)}catch{throw Error("Installation verification failed: SKILL.md not found at target")}let z=await H1(X,"utf-8"),J=$0(z);return{success:!0,path:$.targetDir,name:J.name||$.skillName,version:J0(J),provider:$.providerLabel,source:q}}async function L2($,q){let Z=await r$($);for(let Q of q){if(Q.name===$.providerName)continue;let X=$.scope==="project"?Q.project:Q.global,z=z0(X),J=B0(z,$.skillName);await ZZ(z,{recursive:!0});try{if((await $Z(J)).isSymbolicLink())await i$(J);else{E(`install: skipping ${J} existing non-symlink directory`);continue}}catch{}let Y=QZ(z,$.targetDir);await qZ(Y,J,"dir"),E(`install: symlinked ${J} -> ${Y}`)}return Z.provider=`All (${q.map((Q)=>Q.label).join(", ")})`,Z}async function e($){try{await i$($,{recursive:!0,force:!0})}catch{}}async function F2(){try{await D0("npx",["--version"]),E("install: npx available")}catch{throw Error("npx is required for Vercel method installation. Install Node.js from https://nodejs.org")}}async function A2($,q){let Z=["--yes","skills","add",$];if(q)Z.push("--skill",q);E(`install: running npx ${Z.join(" ")}`);try{let Q=await D0("npx",Z,{timeout:120000});return{stdout:Q.stdout,stderr:Q.stderr}}catch(Q){let X=Q.stderr||Q.message||"";throw Error(`npx skills add failed: ${X}`)}}function I2($){if($.isLocal)return $.localPath;let q=`https://github.com/${$.owner}/${$.repo}`;if($.ref)return`${q}/tree/${$.ref}${$.subpath?`/${$.subpath}`:""}`;return q}async function i0($,q,Z){let Q=$.providers.filter((_)=>_.enabled);if(q==="all"){if(Q.length===0)throw Error("No providers are enabled. Enable a provider in your config.");return{provider:Q.find((O)=>O.name==="agents")||Q[0],allProviders:Q}}if(q){let _=$.providers.find((O)=>O.name===q);if(!_){let O=$.providers.map((K)=>K.name).join(", ");throw Error(`Unknown provider: "${q}". Valid providers: ${O}, all`)}if(!_.enabled)throw Error(`Provider "${q}" is disabled. Enable it in your config or choose another provider.`);return{provider:_,allProviders:null}}if(Q.length===1)return{provider:Q[0],allProviders:null};if(!Z){if(Q.length===0)throw Error("No providers are enabled. Enable a provider in your config.");let _=Q.map((O)=>O.name).join(", ");throw Error(`--tool (or --provider) is required in non-interactive mode. Available: ${_}, all`)}let X=$.preferences.selectedTools,J=X&&X.length>0?new Set(X):null,Y=$.providers.map((_)=>({label:`${_.label} (${_.name})`,hint:_.global,checked:J?J.has(_.name):_.name==="agents"})),G=await a0({items:Y});if(G.length===0)throw Error("No tools selected. Aborting.");let U=G.map((_)=>$.providers[_]),H=U.map((_)=>_.name),{saveSelectedTools:V}=await import("./chunk-chw0sgjp.js");if(await V(H),U.length===1)return{provider:U[0],allProviders:null};return{provider:U.find((_)=>_.name==="agents")||U[0],allProviders:U}}function B1($,q,Z,Q,X,z,J="global"){let Y=J==="project"?X.project:X.global,G=z0(Y),U=B0(G,Q);return{source:$,tempDir:q,sourceDir:Z,targetDir:U,skillName:Q,force:z,providerName:X.name,providerLabel:X.label,scope:J}}async function T2($,q){try{if(await V1($),E(`install: target ${$} conflict (exists)${q?", force overwrite":""}`),!q)throw Error(`Skill already exists at: ${$}
156
- Use --force to overwrite.`)}catch(Z){if(Z.message?.includes("--force"))throw Z;E(`install: target ${$} no conflict`)}}import{readFile as UU}from"fs/promises";import{join as WU}from"path";var wG=H4(),NG=P$(),DG=s1(),j4=C$(),PG=B$(),w0=k(),CG=I0(),EG=u(),SG=M0(),bG=R0(),J_=kq(),xG=T4(),fG=M4(),yG=R4(),gq=P5(),C5=V$();var kG=wG.Composer,vG=NG.Document,hG=DG.Schema,gG=j4.YAMLError,uG=j4.YAMLParseError,mG=j4.YAMLWarning,pG=PG.Alias,dG=w0.isAlias,cG=w0.isCollection,lG=w0.isDocument,nG=w0.isMap,aG=w0.isNode,iG=w0.isPair,oG=w0.isScalar,sG=w0.isSeq,tG=CG.Pair,rG=EG.Scalar,eG=SG.YAMLMap,$U=bG.YAMLSeq;var qU=xG.Lexer,ZU=fG.LineCounter,QU=yG.Parser,y$=gq.parse,XU=gq.parseAllDocuments,zU=gq.parseDocument,JU=gq.stringify,YU=C5.visit,GU=C5.visitAsync;var E5=500;function VU($){let q=$.split(`
157
- `),Z=!1,Q=!1;for(let X of q){if(X.trim()==="---")if(!Z){Z=!0;continue}else{Q=!0;continue}if(Q&&X.trim().length>0)return!0}return!1}function HU($){let q=$.split(`
158
- `),Z=-1;for(let Q=0;Q<q.length;Q++)if(q[Q].trim()==="---")if(Z===-1)Z=Q+1;else return q.slice(Z,Q).join(`
159
- `);return null}function BU($){let q=HU($);if(q===null)return null;try{return y$(q),null}catch(Z){return Z.message||"invalid YAML"}}async function S5($){let q=[];if(!$.description||$.description.trim()==="")q.push({category:"missing-description",message:"Skill has no description in SKILL.md frontmatter"});if(!$.version||$.version==="0.0.0")q.push({category:"missing-version",message:"Skill has no version (or default 0.0.0) in SKILL.md frontmatter"});try{let Q=WU($.path,"SKILL.md"),X=await UU(Q,"utf-8");if(!VU(X))q.push({category:"empty-body",message:"SKILL.md contains only frontmatter with no body content"});let z=BU(X);if(z)q.push({category:"invalid-yaml",message:`SKILL.md has invalid YAML frontmatter: ${z}`})}catch{}let Z=$.fileCount;if(Z!==void 0&&Z>E5)q.push({category:"high-file-count",message:`Skill has ${Z} files (threshold: ${E5})`});return q}import{join as TU}from"path";import{homedir as MU}from"os";import{readFile as KU,writeFile as _U,mkdir as OU}from"fs/promises";import{dirname as LU}from"path";async function FU($){try{let q=await KU($,"utf-8"),Z=JSON.parse(q);if(!Z.fetched_at||Z.data===void 0||Z.data===null)return null;return Z}catch{return null}}async function AU($,q,Z){let Q={fetched_at:new Date().toISOString(),ttl_seconds:Z,data:q};try{await OU(LU($),{recursive:!0}),await _U($,JSON.stringify(Q,null,2),"utf-8"),E(`http: wrote cache -> ${$}`)}catch(X){E(`http: failed to write cache: ${X}`)}}function IU($){let q=new Date($.fetched_at).getTime();return(Date.now()-q)/1000<$.ttl_seconds}async function b5($,q,Z={}){let Q=Z.ttl??3600,X=Z.noCache??!1,z=await FU(q);if(z&&!X&&IU(z))return E(`http: cache hit (fresh) -> ${q}`),z.data;try{E(`http: fetching -> ${$}`);let J=await fetch($);if(!J.ok)throw Error(`HTTP ${J.status}: ${J.statusText}`);let Y=await J.json();return await AU(q,Y,Q),Y}catch(J){if(E(`http: fetch failed: ${J}`),z)return E(`http: using stale cache as fallback -> ${q}`),z.data;return null}}var RU=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,jU=/^[a-zA-Z0-9_-]+$/,y5=/^https:\/\/github\.com\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9._-]+$/,wU=/^[0-9a-f]{40}$/,NU=/^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?(\+[a-zA-Z0-9.]+)?$/,DU=/^[a-z0-9-]+$/,PU=/^sha256:[0-9a-f]{64}$/,x5=["pass","warning","dangerous"];function uq($){let q=[];if(!$||typeof $!=="object"||Array.isArray($))return[{field:"(root)",message:"manifest must be a non-null object"}];let Z=$,Q=new Set(["name","author","description","repository","commit","skill_path","version","license","tags","security_verdict","published_at","checksum"]);for(let J of Object.keys(Z))if(!Q.has(J))q.push({field:J,message:`unknown property "${J}" is not allowed`});let X=[{field:"name",pattern:RU,maxLength:128},{field:"author",pattern:jU,maxLength:39},{field:"description",maxLength:256},{field:"repository",pattern:y5},{field:"commit",pattern:wU},{field:"published_at"}];for(let{field:J,pattern:Y,maxLength:G}of X){let U=Z[J];if(U===void 0||U===null){q.push({field:J,message:`required field "${J}" is missing`});continue}if(typeof U!=="string"){q.push({field:J,message:`"${J}" must be a string`});continue}if(U.length===0){q.push({field:J,message:`"${J}" must not be empty`});continue}if(G&&U.length>G)q.push({field:J,message:`"${J}" exceeds maximum length of ${G}`});if(Y&&!Y.test(U))q.push({field:J,message:`"${J}" does not match required pattern`})}let z=Z.security_verdict;if(z===void 0||z===null)q.push({field:"security_verdict",message:'required field "security_verdict" is missing'});else if(typeof z!=="string"||!x5.includes(z))q.push({field:"security_verdict",message:`"security_verdict" must be one of: ${x5.join(", ")}`});if(typeof Z.published_at==="string"&&Z.published_at.length>0){if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/.test(Z.published_at))q.push({field:"published_at",message:'"published_at" must be a valid ISO 8601 date-time'})}if(Z.version!==void 0){if(typeof Z.version!=="string"||!NU.test(Z.version))q.push({field:"version",message:'"version" must be a valid semver string'})}if(Z.license!==void 0){if(typeof Z.license!=="string")q.push({field:"license",message:'"license" must be a string'});else if(Z.license.length>64)q.push({field:"license",message:'"license" exceeds maximum length of 64'})}if(Z.tags!==void 0)if(!Array.isArray(Z.tags))q.push({field:"tags",message:'"tags" must be an array'});else{if(Z.tags.length>10)q.push({field:"tags",message:'"tags" has more than 10 items'});let J=new Set;for(let Y=0;Y<Z.tags.length;Y++){let G=Z.tags[Y];if(typeof G!=="string"){q.push({field:`tags[${Y}]`,message:"tag must be a string"});continue}if(G.length>32)q.push({field:`tags[${Y}]`,message:`tag "${G}" exceeds maximum length of 32`});if(!DU.test(G))q.push({field:`tags[${Y}]`,message:`tag "${G}" does not match pattern (lowercase alphanumeric and hyphens)`});if(J.has(G))q.push({field:`tags[${Y}]`,message:`duplicate tag "${G}"`});J.add(G)}}if(Z.checksum!==void 0){if(typeof Z.checksum!=="string"||!PU.test(Z.checksum))q.push({field:"checksum",message:'"checksum" must match pattern sha256:<64-hex-chars>'})}if(Z.skill_path!==void 0){if(typeof Z.skill_path!=="string")q.push({field:"skill_path",message:'"skill_path" must be a string'});else if(Z.skill_path.length===0)q.push({field:"skill_path",message:'"skill_path" must not be empty'});else if(Z.skill_path.length>256)q.push({field:"skill_path",message:'"skill_path" exceeds maximum length of 256'});else if(/\.\.|^\//.test(Z.skill_path))q.push({field:"skill_path",message:'"skill_path" must not contain ".." or start with "/"'})}return q}function CU($,q){let Z=$.length,Q=q.length;if(Z===0)return Q;if(Q===0)return Z;let X=Array(Q+1),z=Array(Q+1);for(let J=0;J<=Q;J++)X[J]=J;for(let J=1;J<=Z;J++){z[0]=J;for(let Y=1;Y<=Q;Y++){let G=$[J-1]===q[Y-1]?0:1;z[Y]=Math.min(X[Y]+1,z[Y-1]+1,X[Y-1]+G)}[X,z]=[z,X]}return X[Q]}function EU($,q,Z=2){let Q=[];for(let X of q){if($===X)continue;let z=CU($,X);if(z<=Z)Q.push({existingName:X,distance:z})}return Q.sort((X,z)=>X.distance-z.distance)}var w4=process.env.ASM_REGISTRY_URL??"https://raw.githubusercontent.com/luongnv89/asm-registry/main/index.json",SU=process.env.ASM_REGISTRY_CACHE??TU(MU(),".config","agent-skill-manager","registry-cache.json"),bU=3600;function N4($){if($.startsWith("github:")||$.startsWith("http://")||$.startsWith("https://")||$.startsWith("/")||$.startsWith("./")||$.startsWith("../")||$.startsWith("~/")||$==="~"||$==="."||$==="..")return!1;let q=($.match(/\//g)||[]).length;if(q>1)return!1;if(q===1){let[Z,Q]=$.split("/");return/^[a-zA-Z0-9_-]+$/.test(Z)&&/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(Q)}return/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test($)}function D4($){if(!N4($))return!1;return $.includes("/")}async function P4($){let q=await b5(w4,SU,{ttl:bU,noCache:$?.noCache});if(!q)return null;if(typeof q!=="object"||!Array.isArray(q.manifests)||typeof q.generated_at!=="string")return E("registry: fetched index has invalid structure discarding"),null;let Z=[];for(let Q of q.manifests){let X=uq(Q);if(X.length>0){E(`registry: dropping invalid manifest entry (${Q?.name??"unknown"}): ${X.map((z)=>z.message).join(", ")}`);continue}if(!y5.test(Q.repository)){E(`registry: dropping manifest with unexpected repository URL: ${Q.repository}`);continue}Z.push(Q)}return{generated_at:q.generated_at,manifests:Z}}function xU($,q){return q.manifests.filter((Z)=>Z.name.toLowerCase()===$.toLowerCase())}function fU($,q,Z){return Z.manifests.find((Q)=>Q.author.toLowerCase()===$.toLowerCase()&&Q.name.toLowerCase()===q.toLowerCase())??null}function f5($,q,Z=5){return EU($,q.manifests.map((X)=>X.name),3).slice(0,Z).map((X)=>X.existingName)}async function k5($,q){let Z=await P4(q);if(!Z)return E("registry: failed to fetch index skipping registry resolution"),{resolved:null,multipleMatches:[],suggestions:[]};if(D4($)){let[z,J]=$.split("/"),Y=fU(z,J,Z);if(Y)return{resolved:{manifest:Y,source:"registry"},multipleMatches:[],suggestions:[]};let G=f5(J,Z);return{resolved:null,multipleMatches:[],suggestions:G}}let Q=xU($,Z);if(Q.length===1)return{resolved:{manifest:Q[0],source:"registry"},multipleMatches:[],suggestions:[]};if(Q.length>1)return{resolved:null,multipleMatches:Q,suggestions:[]};let X=f5($,Z);return{resolved:null,multipleMatches:[],suggestions:X}}function v5($){let q=$.filter((Z)=>Z.provider!=="plugin").map((Z)=>({name:Z.name,version:Z.version,dirName:Z.dirName,provider:Z.provider,scope:Z.scope,path:Z.path,isSymlink:Z.isSymlink,symlinkTarget:Z.symlinkTarget,effort:Z.effort}));return{version:1,exportedAt:new Date().toISOString(),skills:q}}import{readFile as yU,access as g5,mkdir as kU,cp as h5,rm as vU,symlink as hU}from"fs/promises";import{join as u5,basename as gU}from"path";function uU($){let q=[];if(typeof $!=="object"||$===null||Array.isArray($))return{valid:!1,errors:["Manifest must be a JSON object."]};let Z=$;if(Z.version!==1)q.push(`Unsupported manifest version: ${JSON.stringify(Z.version)}. Expected 1.`);if(typeof Z.exportedAt!=="string")q.push("Missing or invalid 'exportedAt' field.");if(!Array.isArray(Z.skills))return q.push("Missing or invalid 'skills' array."),{valid:!1,errors:q};for(let Q=0;Q<Z.skills.length;Q++){let X=Z.skills[Q];if(typeof X!=="object"||X===null){q.push(`skills[${Q}]: must be an object.`);continue}let z=X;if(typeof z.name!=="string"||!z.name)q.push(`skills[${Q}]: missing or empty 'name'.`);if(typeof z.dirName!=="string"||!z.dirName)q.push(`skills[${Q}]: missing or empty 'dirName'.`);if(typeof z.provider!=="string"||!z.provider)q.push(`skills[${Q}]: missing or empty 'provider'.`);if(z.scope!=="global"&&z.scope!=="project")q.push(`skills[${Q}]: invalid 'scope' "${String(z.scope)}". Must be "global" or "project".`)}return{valid:q.length===0,errors:q}}async function m5($){let q;try{q=await yU($,"utf-8")}catch(X){if(X?.code==="ENOENT")throw Error(`Manifest file not found: ${$}`);throw Error(`Failed to read manifest file: ${X.message}`)}let Z;try{Z=JSON.parse(q)}catch{throw Error("Manifest file is not valid JSON.")}let Q=uU(Z);if(!Q.valid)throw Error(`Invalid manifest:
160
- ${Q.errors.join(`
161
- `)}`);return Z}async function mU($){try{return await g5($),!0}catch{return!1}}function pU($,q){return $.providers.find((Z)=>Z.name===q&&Z.enabled)}function dU($,q,Z,Q){let X=pU($,q);if(!X)return null;let z=Z==="global"?X.global:X.project,J=z0(z),Y=gU(Q);if(!Y||Y==="."||Y==="..")return null;return u5(J,Y)}function cU($,q){let Z=$.find((Q)=>Q.dirName===q.dirName&&Q.provider===q.provider);if(Z)return Z;return $.find((Q)=>Q.dirName===q.dirName)||null}async function p5($,q,Z){let Q=Z?.config??await h(),X=Z?.installedSkills??await o(Q,"both"),z=[];for(let U of $.skills){if(q.scopeFilter!=="both"&&U.scope!==q.scopeFilter){E(`import: skipping "${U.name}" scope "${U.scope}" filtered out`);continue}let H=dU(Q,U.provider,U.scope,U.dirName);if(!H){z.push({skillName:U.name,provider:U.provider,scope:U.scope,status:"failed",reason:`Provider "${U.provider}" not found or not enabled.`});continue}let V=await mU(H);if(V&&!q.force){z.push({skillName:U.name,provider:U.provider,scope:U.scope,status:"skipped",reason:"Already installed.",path:H});continue}if(q.dryRun){z.push({skillName:U.name,provider:U.provider,scope:U.scope,status:"dry-run",reason:V?"Would overwrite (--force).":"Would install.",path:H});continue}let B=cU(X,U);if(!B){z.push({skillName:U.name,provider:U.provider,scope:U.scope,status:"failed",reason:"No installed source found. Install the skill first with: asm install <source>"});continue}try{if(await kU(u5(H,".."),{recursive:!0}),V)await vU(H,{recursive:!0,force:!0});if(U.isSymlink&&U.symlinkTarget)try{await g5(U.symlinkTarget),await hU(U.symlinkTarget,H),E(`import: symlinked "${U.name}" -> ${U.symlinkTarget} at ${H}`)}catch{await h5(B.realPath,H,{recursive:!0}),E(`import: symlink target unreachable, copied "${U.name}" from ${B.realPath} to ${H}`)}else await h5(B.realPath,H,{recursive:!0}),E(`import: copied "${U.name}" from ${B.realPath} to ${H}`);z.push({skillName:U.name,provider:U.provider,scope:U.scope,status:"installed",path:H})}catch(_){z.push({skillName:U.name,provider:U.provider,scope:U.scope,status:"failed",reason:`Copy failed: ${_.message}`})}}let J=z.filter((U)=>U.status==="installed").length,Y=z.filter((U)=>U.status==="skipped").length,G=z.filter((U)=>U.status==="failed").length;return{total:z.length,installed:J,skipped:Y,failed:G,results:z}}import{mkdir as lU,writeFile as nU,access as aU}from"fs/promises";import{join as iU}from"path";function oU($){return`---
162
- name: ${$}
152
+ ./relative/path/to/skill`);let s=e.slice(7),i=s.indexOf("#"),n,r=null,o=null;if(i!==-1){n=s.slice(0,i);let f=s.slice(i+1);if(!f)throw new Error("Invalid source: ref cannot be empty after #");let p=f.indexOf(":");if(p!==-1){if(r=f.slice(0,p),!r)throw new Error("Invalid source: ref cannot be empty before :");o=f.slice(p+1)||null}else r=f}else{let f=s.indexOf(":");f!==-1?(n=s.slice(0,f),o=s.slice(f+1)||null):n=s}let a=n.indexOf("/");if(a===-1)throw new Error(`Invalid source: format must be github:owner/repo. Got: "${e}"`);let l=n.slice(0,a),c=n.slice(a+1);if(!l)throw new Error("Invalid source: owner cannot be empty");if(!c)throw new Error("Invalid source: repo cannot be empty");if(!Of.test(l))throw new Error(`Invalid source: owner contains invalid characters: "${l}". Allowed: [a-zA-Z0-9_-]`);if(!Tf.test(c))throw new Error(`Invalid source: repo contains invalid characters: "${c}". Allowed: [a-zA-Z0-9._-]`);let d={owner:l,repo:c,ref:r,subpath:o,cloneUrl:`https://github.com/${l}/${c}.git`,sshCloneUrl:`git@github.com:${l}/${c}.git`};return N(`install: parsed source -> owner=${l} repo=${c} ref=${r} subpath=${o}`),d}async function rs(e){if(e.subpath!==null||!e.ref||!e.ref.includes("/"))return e;try{let{stdout:t}=await Re("git",["ls-remote","--heads","--tags",e.cloneUrl],{timeout:15e3}),s=new Set;for(let n of t.split(`
153
+ `)){let r=n.match(/\trefs\/(?:heads|tags)\/(.+)$/);r&&s.add(r[1])}let i=e.ref.split("/");for(let n=1;n<i.length;n++){let r=i.slice(0,n).join("/");if(s.has(r)){let o=i.slice(n).join("/");return N(`install: resolved ref="${r}" subpath="${o}"`),{...e,ref:r,subpath:o||null}}}}catch(t){N(`install: ls-remote failed, treating entire ref as branch: ${t}`)}return e}function Te(e){if(!e)throw new Error("Invalid skill name: name cannot be empty");if(e.includes("\0"))throw new Error("Invalid skill name: contains unsafe characters (null byte)");if(e.includes(".."))throw new Error("Invalid skill name: contains unsafe characters (..)");if(e.includes("/")||e.includes("\\"))throw new Error("Invalid skill name: contains unsafe characters (path separator)");if(e.startsWith("."))throw new Error("Invalid skill name: must not start with a dot");if(e.length>Po)throw new Error(`Invalid skill name: exceeds maximum length of ${Po} characters`);if(!Mf.test(e))throw new Error(`Invalid skill name: "${e}" does not match allowed pattern [a-zA-Z0-9][a-zA-Z0-9._-]*`);return e}function Ff(e){let t=e.split(/[/\\]/).filter(Boolean),s=t.length>0?t[t.length-1]:e;return Te(s)}function No(e){let t=new Map;for(let s of e){let i=Ff(s),n=t.get(i);n?n.push(s):t.set(i,[s])}return[...t.entries()].filter(([,s])=>s.length>1).map(([s,i])=>({name:s,paths:i}))}async function Me(){try{await Re("git",["--version"]),N("install: git available")}catch{throw new Error("git is required for installing skills. Install git from https://git-scm.com")}}function jf(e){if(e.killed)return!1;let t=(e.stderr||e.message||"").toLowerCase();return t.includes("authentication failed")||t.includes("could not read username")||t.includes("repository not found")||t.includes("returned error: 403")||t.includes("returned error: 401")||t.includes("terminal prompts disabled")||t.includes("permission denied")}function is(e){return e.killed?"Clone timed out after 60 seconds":`Clone failed: ${e.stderr||e.message}`}async function Ti(e,t,s){if(t!==null&&/^[0-9a-f]{40}$/i.test(t))return await Re("git",["clone","--no-checkout",e,s],{timeout:6e4}),await Re("git",["checkout",t],{cwd:s,timeout:3e4}),s;let n=["clone","--depth","1"];return t&&n.push("--branch",t),n.push(e,s),await Re("git",n,{timeout:6e4}),s}async function De(e,t="auto"){N(`install: cloning ${e.owner}/${e.repo}${e.ref?` (ref: ${e.ref})`:""} (transport: ${t})`);let s=await xo(pe(Ao(),"asm-install-"));if(t==="ssh"||t==="https"){let i=t==="ssh"?e.sshCloneUrl:e.cloneUrl;try{return await Ti(i,e.ref,s)}catch(n){throw await ne(s),new Error(is(n))}}try{return await Ti(e.cloneUrl,e.ref,s)}catch(i){if(!jf(i))throw await ne(s),new Error(is(i));N("install: HTTPS clone failed with auth error, retrying with SSH..."),await ne(s);let n=await xo(pe(Ao(),"asm-install-"));try{return await Ti(e.sshCloneUrl,e.ref,n)}catch(r){throw await ne(n),new Error(`Clone failed with both transports:
154
+ HTTPS: ${is(i)}
155
+ SSH: ${is(r)}`)}}}async function _e(e){let t=pe(e,"SKILL.md"),s;try{s=await Di(t,"utf-8")}catch{throw new Error("Not a valid skill: SKILL.md not found in repository root")}let i=ie(s),n=e.split(/[/\\]/).pop()||"unknown",r=i.name||n,o=ae(i);return N(`install: validated skill "${r}" v${o}`),{name:r,version:o,description:(i.description||"").replace(/\s*\n\s*/g," ").trim(),effort:i.effort||i["metadata.effort"]||void 0}}async function os(e,t=5){let s=[];async function i(n,r,o){let a;try{a=await Cf(n)}catch{return}for(let l of a){if(l===".git"||l==="node_modules")continue;let c=pe(n,l);try{if(!(await Af(c)).isDirectory())continue}catch{continue}let d=r?`${r}/${l}`:l,f=o+1,p=pe(c,"SKILL.md");try{let m=await Di(p,"utf-8"),y=ie(m);s.push({relPath:d,name:y.name||l,version:ae(y),description:(y.description||"").replace(/\s*\n\s*/g," ").trim(),effort:y.effort||y["metadata.effort"]||void 0,license:(y.license||"").trim(),creator:(y["metadata.creator"]||"").trim(),compatibility:(y.compatibility||"").trim(),allowedTools:to(y),tokenCount:es(m)})}catch{f<t&&await i(c,d,f)}}}return await i(e,"",0),s.sort((n,r)=>n.name.localeCompare(r.name)),s}var Bf=[{category:"Shell commands",pattern:/\b(bash|sh\s+-c)\b/},{category:"Shell commands",pattern:/\bexec\(/},{category:"Shell commands",pattern:/\bchild_process\b/},{category:"Shell commands",pattern:/\bBun\.spawn\b/},{category:"Code execution",pattern:/\beval\(/},{category:"Code execution",pattern:/\bFunction\(/},{category:"Code execution",pattern:/\bnew\s+Function\b/},{category:"Credentials",pattern:/\b(API_KEY|SECRET|TOKEN|PASSWORD)\s*[=:]/},{category:"External URLs",pattern:/https?:\/\//}];async function Io(e){let t=[],s=await ss(e);for(let{relPath:i,content:n}of s){let r=n.split(`
156
+ `);for(let o=0;o<r.length;o++)for(let{category:a,pattern:l}of Bf)if(l.test(r[o])){let c=r[o].trim();t.push({category:a,file:i,line:o+1,match:c.length>100?c.slice(0,100)+"\u2026":c})}}return t}async function as(e){let t=e.source.isLocal?`local:${e.source.localPath}`:`github:${e.source.owner}/${e.source.repo}${e.source.ref?`#${e.source.ref}`:""}${e.source.subpath?`:${e.source.subpath}`:""}`;if(e.force)try{await Mi(e.targetDir),await ns(e.targetDir,{recursive:!0,force:!0})}catch{}let s=e.sourceDir;try{await Ef(s,e.targetDir,{recursive:!0})}catch(a){throw new Error(`Failed to install: ${a.message}`)}let i=pe(e.targetDir,".git");try{await ns(i,{recursive:!0,force:!0})}catch{}N(`install: copied files to ${e.targetDir}`);let n=pe(e.targetDir,"SKILL.md");try{await Mi(n)}catch{throw new Error("Installation verification failed: SKILL.md not found at target")}let r=await Di(n,"utf-8"),o=ie(r);return{success:!0,path:e.targetDir,name:o.name||e.skillName,version:ae(o),provider:e.providerLabel,source:t}}async function Lo(e,t){let s=await as(e);for(let i of t){if(i.name===e.providerName)continue;let n=e.scope==="project"?i.project:i.global,r=oe(n),o=pe(r,e.skillName);await If(r,{recursive:!0});try{if((await Pf(o)).isSymbolicLink())await ns(o);else{N(`install: skipping ${o} \u2014 existing non-symlink directory`);continue}}catch{}let a=Lf(r,e.targetDir);await Nf(a,o,"dir"),N(`install: symlinked ${o} -> ${a}`)}return s.provider=`All (${t.map(i=>i.label).join(", ")})`,s}async function ne(e){try{await ns(e,{recursive:!0,force:!0})}catch{}}async function Ro(){try{await Re("npx",["--version"]),N("install: npx available")}catch{throw new Error("npx is required for Vercel method installation. Install Node.js from https://nodejs.org")}}async function Oo(e,t){let s=["--yes","skills","add",e];t&&s.push("--skill",t),N(`install: running npx ${s.join(" ")}`);try{let i=await Re("npx",s,{timeout:12e4});return{stdout:i.stdout,stderr:i.stderr}}catch(i){let n=i.stderr||i.message||"";throw new Error(`npx skills add failed: ${n}`)}}function To(e){if(e.isLocal)return e.localPath;let t=`https://github.com/${e.owner}/${e.repo}`;return e.ref?`${t}/tree/${e.ref}${e.subpath?`/${e.subpath}`:""}`:t}async function ze(e,t,s){let i=e.providers.filter(m=>m.enabled);if(t==="all"){if(i.length===0)throw new Error("No providers are enabled. Enable a provider in your config.");return{provider:i.find(y=>y.name==="agents")||i[0],allProviders:i}}if(t){let m=e.providers.find(y=>y.name===t);if(!m){let y=e.providers.map(h=>h.name).join(", ");throw new Error(`Unknown provider: "${t}". Valid providers: ${y}, all`)}if(!m.enabled)throw new Error(`Provider "${t}" is disabled. Enable it in your config or choose another provider.`);return{provider:m,allProviders:null}}if(i.length===1)return{provider:i[0],allProviders:null};if(!s){if(i.length===0)throw new Error("No providers are enabled. Enable a provider in your config.");let m=i.map(y=>y.name).join(", ");throw new Error(`--tool (or --provider) is required in non-interactive mode. Available: ${m}, all`)}let n=e.preferences.selectedTools,o=n&&n.length>0?new Set(n):null,a=e.providers.map(m=>({label:`${m.label} (${m.name})`,hint:m.global,checked:o?o.has(m.name):m.name==="agents"})),l=await We({items:a});if(l.length===0)throw new Error("No tools selected. Aborting.");let c=l.map(m=>e.providers[m]),d=c.map(m=>m.name),{saveSelectedTools:f}=await import("./config-55HAAFSH.js");return await f(d),c.length===1?{provider:c[0],allProviders:null}:{provider:c.find(m=>m.name==="agents")||c[0],allProviders:c}}function _i(e,t,s,i,n,r,o="global"){let a=o==="project"?n.project:n.global,l=oe(a),c=pe(l,i);return{source:e,tempDir:t,sourceDir:s,targetDir:c,skillName:i,force:r,providerName:n.name,providerLabel:n.label,scope:o}}async function Mo(e,t){try{if(await Mi(e),N(`install: target ${e} \u2014 conflict (exists)${t?", force overwrite":""}`),!t)throw new Error(`Skill already exists at: ${e}
157
+ Use --force to overwrite.`)}catch(s){if(s.message?.includes("--force"))throw s;N(`install: target ${e} \u2014 no conflict`)}}var xc=Wr(wr(),1);import{readFile as hg}from"fs/promises";import{join as gg}from"path";var $c=500;function yg(e){let t=e.split(`
158
+ `),s=!1,i=!1;for(let n of t){if(n.trim()==="---")if(s){i=!0;continue}else{s=!0;continue}if(i&&n.trim().length>0)return!0}return!1}function bg(e){let t=e.split(`
159
+ `),s=-1;for(let i=0;i<t.length;i++)if(t[i].trim()==="---")if(s===-1)s=i+1;else return t.slice(s,i).join(`
160
+ `);return null}function wg(e){let t=bg(e);if(t===null)return null;try{return(0,xc.parse)(t),null}catch(s){return s.message||"invalid YAML"}}async function Cc(e){let t=[];(!e.description||e.description.trim()==="")&&t.push({category:"missing-description",message:"Skill has no description in SKILL.md frontmatter"}),(!e.version||e.version==="0.0.0")&&t.push({category:"missing-version",message:"Skill has no version (or default 0.0.0) in SKILL.md frontmatter"});try{let i=gg(e.path,"SKILL.md"),n=await hg(i,"utf-8");yg(n)||t.push({category:"empty-body",message:"SKILL.md contains only frontmatter with no body content"});let r=wg(n);r&&t.push({category:"invalid-yaml",message:`SKILL.md has invalid YAML frontmatter: ${r}`})}catch{}let s=e.fileCount;return s!==void 0&&s>$c&&t.push({category:"high-file-count",message:`Skill has ${s} files (threshold: ${$c})`}),t}import{join as Ag}from"path";import{homedir as Pg}from"os";import{readFile as vg,writeFile as kg,mkdir as Sg}from"fs/promises";import{dirname as $g}from"path";async function xg(e){try{let t=await vg(e,"utf-8"),s=JSON.parse(t);return!s.fetched_at||s.data===void 0||s.data===null?null:s}catch{return null}}async function Cg(e,t,s){let i={fetched_at:new Date().toISOString(),ttl_seconds:s,data:t};try{await Sg($g(e),{recursive:!0}),await kg(e,JSON.stringify(i,null,2),"utf-8"),N(`http: wrote cache -> ${e}`)}catch(n){N(`http: failed to write cache: ${n}`)}}function Eg(e){let t=new Date(e.fetched_at).getTime();return(Date.now()-t)/1e3<e.ttl_seconds}async function Ec(e,t,s={}){let i=s.ttl??3600,n=s.noCache??!1,r=await xg(t);if(r&&!n&&Eg(r))return N(`http: cache hit (fresh) -> ${t}`),r.data;try{N(`http: fetching -> ${e}`);let o=await fetch(e);if(!o.ok)throw new Error(`HTTP ${o.status}: ${o.statusText}`);let a=await o.json();return await Cg(t,a,i),a}catch(o){return N(`http: fetch failed: ${o}`),r?(N(`http: using stale cache as fallback -> ${t}`),r.data):null}}var Ng=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,Ig=/^[a-zA-Z0-9_-]+$/,Nc=/^https:\/\/github\.com\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9._-]+$/,Lg=/^[0-9a-f]{40}$/,Rg=/^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?(\+[a-zA-Z0-9.]+)?$/,Og=/^[a-z0-9-]+$/,Tg=/^sha256:[0-9a-f]{64}$/,Ac=["pass","warning","dangerous"];function ni(e){let t=[];if(!e||typeof e!="object"||Array.isArray(e))return[{field:"(root)",message:"manifest must be a non-null object"}];let s=e,i=new Set(["name","author","description","repository","commit","skill_path","version","license","tags","security_verdict","published_at","checksum"]);for(let o of Object.keys(s))i.has(o)||t.push({field:o,message:`unknown property "${o}" is not allowed`});let n=[{field:"name",pattern:Ng,maxLength:128},{field:"author",pattern:Ig,maxLength:39},{field:"description",maxLength:256},{field:"repository",pattern:Nc},{field:"commit",pattern:Lg},{field:"published_at"}];for(let{field:o,pattern:a,maxLength:l}of n){let c=s[o];if(c==null){t.push({field:o,message:`required field "${o}" is missing`});continue}if(typeof c!="string"){t.push({field:o,message:`"${o}" must be a string`});continue}if(c.length===0){t.push({field:o,message:`"${o}" must not be empty`});continue}l&&c.length>l&&t.push({field:o,message:`"${o}" exceeds maximum length of ${l}`}),a&&!a.test(c)&&t.push({field:o,message:`"${o}" does not match required pattern`})}let r=s.security_verdict;if(r==null?t.push({field:"security_verdict",message:'required field "security_verdict" is missing'}):(typeof r!="string"||!Ac.includes(r))&&t.push({field:"security_verdict",message:`"security_verdict" must be one of: ${Ac.join(", ")}`}),typeof s.published_at=="string"&&s.published_at.length>0&&(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/.test(s.published_at)||t.push({field:"published_at",message:'"published_at" must be a valid ISO 8601 date-time'})),s.version!==void 0&&(typeof s.version!="string"||!Rg.test(s.version))&&t.push({field:"version",message:'"version" must be a valid semver string'}),s.license!==void 0&&(typeof s.license!="string"?t.push({field:"license",message:'"license" must be a string'}):s.license.length>64&&t.push({field:"license",message:'"license" exceeds maximum length of 64'})),s.tags!==void 0)if(!Array.isArray(s.tags))t.push({field:"tags",message:'"tags" must be an array'});else{s.tags.length>10&&t.push({field:"tags",message:'"tags" has more than 10 items'});let o=new Set;for(let a=0;a<s.tags.length;a++){let l=s.tags[a];if(typeof l!="string"){t.push({field:`tags[${a}]`,message:"tag must be a string"});continue}l.length>32&&t.push({field:`tags[${a}]`,message:`tag "${l}" exceeds maximum length of 32`}),Og.test(l)||t.push({field:`tags[${a}]`,message:`tag "${l}" does not match pattern (lowercase alphanumeric and hyphens)`}),o.has(l)&&t.push({field:`tags[${a}]`,message:`duplicate tag "${l}"`}),o.add(l)}}return s.checksum!==void 0&&(typeof s.checksum!="string"||!Tg.test(s.checksum))&&t.push({field:"checksum",message:'"checksum" must match pattern sha256:<64-hex-chars>'}),s.skill_path!==void 0&&(typeof s.skill_path!="string"?t.push({field:"skill_path",message:'"skill_path" must be a string'}):s.skill_path.length===0?t.push({field:"skill_path",message:'"skill_path" must not be empty'}):s.skill_path.length>256?t.push({field:"skill_path",message:'"skill_path" exceeds maximum length of 256'}):/\.\.|^\//.test(s.skill_path)&&t.push({field:"skill_path",message:'"skill_path" must not contain ".." or start with "/"'})),t}function Mg(e,t){let s=e.length,i=t.length;if(s===0)return i;if(i===0)return s;let n=new Array(i+1),r=new Array(i+1);for(let o=0;o<=i;o++)n[o]=o;for(let o=1;o<=s;o++){r[0]=o;for(let a=1;a<=i;a++){let l=e[o-1]===t[a-1]?0:1;r[a]=Math.min(n[a]+1,r[a-1]+1,n[a-1]+l)}[n,r]=[r,n]}return n[i]}function Dg(e,t,s=2){let i=[];for(let n of t){if(e===n)continue;let r=Mg(e,n);r<=s&&i.push({existingName:n,distance:r})}return i.sort((n,r)=>n.distance-r.distance)}var vr=process.env.ASM_REGISTRY_URL??"https://raw.githubusercontent.com/luongnv89/asm-registry/main/index.json",_g=process.env.ASM_REGISTRY_CACHE??Ag(Pg(),".config","agent-skill-manager","registry-cache.json"),qg=3600;function kr(e){if(e.startsWith("github:")||e.startsWith("http://")||e.startsWith("https://")||e.startsWith("/")||e.startsWith("./")||e.startsWith("../")||e.startsWith("~/")||e==="~"||e==="."||e==="..")return!1;let t=(e.match(/\//g)||[]).length;if(t>1)return!1;if(t===1){let[s,i]=e.split("/");return/^[a-zA-Z0-9_-]+$/.test(s)&&/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(i)}return/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(e)}function Sr(e){return kr(e)?e.includes("/"):!1}async function $r(e){let t=await Ec(vr,_g,{ttl:qg,noCache:e?.noCache});if(!t)return null;if(typeof t!="object"||!Array.isArray(t.manifests)||typeof t.generated_at!="string")return N("registry: fetched index has invalid structure \u2014 discarding"),null;let s=[];for(let i of t.manifests){let n=ni(i);if(n.length>0){N(`registry: dropping invalid manifest entry (${i?.name??"unknown"}): ${n.map(r=>r.message).join(", ")}`);continue}if(!Nc.test(i.repository)){N(`registry: dropping manifest with unexpected repository URL: ${i.repository}`);continue}s.push(i)}return{generated_at:t.generated_at,manifests:s}}function Fg(e,t){return t.manifests.filter(s=>s.name.toLowerCase()===e.toLowerCase())}function jg(e,t,s){return s.manifests.find(i=>i.author.toLowerCase()===e.toLowerCase()&&i.name.toLowerCase()===t.toLowerCase())??null}function Pc(e,t,s=5){return Dg(e,t.manifests.map(n=>n.name),3).slice(0,s).map(n=>n.existingName)}async function Ic(e,t){let s=await $r(t);if(!s)return N("registry: failed to fetch index \u2014 skipping registry resolution"),{resolved:null,multipleMatches:[],suggestions:[]};if(Sr(e)){let[r,o]=e.split("/"),a=jg(r,o,s);if(a)return{resolved:{manifest:a,source:"registry"},multipleMatches:[],suggestions:[]};let l=Pc(o,s);return{resolved:null,multipleMatches:[],suggestions:l}}let i=Fg(e,s);if(i.length===1)return{resolved:{manifest:i[0],source:"registry"},multipleMatches:[],suggestions:[]};if(i.length>1)return{resolved:null,multipleMatches:i,suggestions:[]};let n=Pc(e,s);return{resolved:null,multipleMatches:[],suggestions:n}}function Lc(e){let t=e.filter(s=>s.provider!=="plugin").map(s=>({name:s.name,version:s.version,dirName:s.dirName,provider:s.provider,scope:s.scope,path:s.path,isSymlink:s.isSymlink,symlinkTarget:s.symlinkTarget,effort:s.effort}));return{version:1,exportedAt:new Date().toISOString(),skills:t}}import{readFile as Bg,access as Oc,mkdir as Ug,cp as Rc,rm as Vg,symlink as Kg}from"fs/promises";import{join as Tc,basename as Jg}from"path";function Hg(e){let t=[];if(typeof e!="object"||e===null||Array.isArray(e))return{valid:!1,errors:["Manifest must be a JSON object."]};let s=e;if(s.version!==1&&t.push(`Unsupported manifest version: ${JSON.stringify(s.version)}. Expected 1.`),typeof s.exportedAt!="string"&&t.push("Missing or invalid 'exportedAt' field."),!Array.isArray(s.skills))return t.push("Missing or invalid 'skills' array."),{valid:!1,errors:t};for(let i=0;i<s.skills.length;i++){let n=s.skills[i];if(typeof n!="object"||n===null){t.push(`skills[${i}]: must be an object.`);continue}let r=n;(typeof r.name!="string"||!r.name)&&t.push(`skills[${i}]: missing or empty 'name'.`),(typeof r.dirName!="string"||!r.dirName)&&t.push(`skills[${i}]: missing or empty 'dirName'.`),(typeof r.provider!="string"||!r.provider)&&t.push(`skills[${i}]: missing or empty 'provider'.`),r.scope!=="global"&&r.scope!=="project"&&t.push(`skills[${i}]: invalid 'scope' "${String(r.scope)}". Must be "global" or "project".`)}return{valid:t.length===0,errors:t}}async function Mc(e){let t;try{t=await Bg(e,"utf-8")}catch(n){throw n?.code==="ENOENT"?new Error(`Manifest file not found: ${e}`):new Error(`Failed to read manifest file: ${n.message}`)}let s;try{s=JSON.parse(t)}catch{throw new Error("Manifest file is not valid JSON.")}let i=Hg(s);if(!i.valid)throw new Error(`Invalid manifest:
161
+ ${i.errors.join(`
162
+ `)}`);return s}async function Yg(e){try{return await Oc(e),!0}catch{return!1}}function Gg(e,t){return e.providers.find(s=>s.name===t&&s.enabled)}function Wg(e,t,s,i){let n=Gg(e,t);if(!n)return null;let r=s==="global"?n.global:n.project,o=oe(r),a=Jg(i);return!a||a==="."||a===".."?null:Tc(o,a)}function zg(e,t){let s=e.find(i=>i.dirName===t.dirName&&i.provider===t.provider);return s||e.find(i=>i.dirName===t.dirName)||null}async function Dc(e,t,s){let i=s?.config??await q(),n=s?.installedSkills??await Q(i,"both"),r=[];for(let c of e.skills){if(t.scopeFilter!=="both"&&c.scope!==t.scopeFilter){N(`import: skipping "${c.name}" \u2014 scope "${c.scope}" filtered out`);continue}let d=Wg(i,c.provider,c.scope,c.dirName);if(!d){r.push({skillName:c.name,provider:c.provider,scope:c.scope,status:"failed",reason:`Provider "${c.provider}" not found or not enabled.`});continue}let f=await Yg(d);if(f&&!t.force){r.push({skillName:c.name,provider:c.provider,scope:c.scope,status:"skipped",reason:"Already installed.",path:d});continue}if(t.dryRun){r.push({skillName:c.name,provider:c.provider,scope:c.scope,status:"dry-run",reason:f?"Would overwrite (--force).":"Would install.",path:d});continue}let p=zg(n,c);if(!p){r.push({skillName:c.name,provider:c.provider,scope:c.scope,status:"failed",reason:"No installed source found. Install the skill first with: asm install <source>"});continue}try{if(await Ug(Tc(d,".."),{recursive:!0}),f&&await Vg(d,{recursive:!0,force:!0}),c.isSymlink&&c.symlinkTarget)try{await Oc(c.symlinkTarget),await Kg(c.symlinkTarget,d),N(`import: symlinked "${c.name}" -> ${c.symlinkTarget} at ${d}`)}catch{await Rc(p.realPath,d,{recursive:!0}),N(`import: symlink target unreachable, copied "${c.name}" from ${p.realPath} to ${d}`)}else await Rc(p.realPath,d,{recursive:!0}),N(`import: copied "${c.name}" from ${p.realPath} to ${d}`);r.push({skillName:c.name,provider:c.provider,scope:c.scope,status:"installed",path:d})}catch(m){r.push({skillName:c.name,provider:c.provider,scope:c.scope,status:"failed",reason:`Copy failed: ${m.message}`})}}let o=r.filter(c=>c.status==="installed").length,a=r.filter(c=>c.status==="skipped").length,l=r.filter(c=>c.status==="failed").length;return{total:r.length,installed:o,skipped:a,failed:l,results:r}}import{mkdir as Qg,writeFile as Xg,access as Zg}from"fs/promises";import{join as ey}from"path";function ty(e){return`---
163
+ name: ${e}
163
164
  description: ""
164
165
  license: ""
165
166
  metadata:
@@ -167,7 +168,7 @@ metadata:
167
168
  creator: ""
168
169
  ---
169
170
 
170
- # ${$}
171
+ # ${e}
171
172
 
172
173
  Describe what this skill does here. This content will be loaded by the AI agent
173
174
  as instructions for when and how to use this skill.
@@ -179,70 +180,70 @@ as instructions for when and how to use this skill.
179
180
  ## Instructions
180
181
 
181
182
  - Step-by-step instructions for the agent
182
- `}async function d5($,q){await lU(q,{recursive:!0});let Z=iU(q,"SKILL.md"),Q=oU($);await nU(Z,Q,"utf-8")}async function c5($){try{return await aU($),!0}catch{return!1}}import{readdir as sU,stat as tU}from"fs/promises";import{join as rU}from"path";async function eU($){let q=0;try{let Q=(await sU($,{recursive:!0})).map(async(z)=>{try{let J=await tU(rU($,z));if(J.isFile())return J.size}catch{}return 0});q=(await Promise.all(Q)).reduce((z,J)=>z+J,0)}catch{}return q}async function a5($,q){let Z={},Q={global:0,project:0},X={},z=$.map(async(G)=>{Z[G.provider]=(Z[G.provider]||0)+1,Q[G.scope]++;let U=await eU(G.path);return X[G.path]=U,U}),Y=(await Promise.all(z)).reduce((G,U)=>G+U,0);return{totalSkills:$.length,byProvider:Z,byScope:Q,totalDiskBytes:Y,perSkillDiskBytes:X,duplicateGroups:q.duplicateGroups.length,duplicateInstances:q.totalDuplicateInstances}}function $W($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;if($<1073741824)return`${($/1048576).toFixed(1)} MB`;return`${($/1073741824).toFixed(1)} GB`}function C4($,q,Z=20){let Q=Math.round($/q*Z),X=Z-Q;return W.green("#".repeat(Q))+W.dim("-".repeat(X))}var l5={claude:"Claude Code",codex:"Codex",openclaw:"OpenClaw",agents:"Agents"};function i5($){let q=[];q.push(""),q.push(W.blueBold(" Skill Statistics")),q.push(W.dim(" "+"-".repeat(20))),q.push(""),q.push(` ${W.bold("Total:")} ${W.cyan(String($.totalSkills))} skills`),q.push(` ${W.bold("Disk:")} ${W.cyan($W($.totalDiskBytes))}`),q.push(""),q.push(W.bold(" By Tool"));let Z=Object.entries($.byProvider).sort((G,U)=>U[1]-G[1]),Q=Math.max(...Z.map(([,G])=>G)),X=Math.max(...Z.map(([G])=>(l5[G]||G).length));for(let[G,U]of Z){let H=l5[G]||G,V=n5(G,H.padEnd(X)),B=String(U).padStart(4);q.push(` ${V} ${B} ${C4(U,Q)}`)}q.push(""),q.push(W.bold(" By Scope"));let z=Math.max($.byScope.global,$.byScope.project),J=String($.byScope.global).padStart(4),Y=String($.byScope.project).padStart(4);if(q.push(` ${"global ".padEnd(X)} ${J} ${C4($.byScope.global,z)}`),q.push(` ${"project".padEnd(X)} ${Y} ${C4($.byScope.project,z)}`),q.push(""),q.push(W.bold(" Duplicates")),$.duplicateGroups>0)q.push(` ${W.yellow(`${$.duplicateGroups} group(s), ${$.duplicateInstances} total instance(s)`)}`),q.push(W.dim(` Run ${W.bold("asm audit")} to review`));else q.push(` ${W.green("None")}`);return q.push(""),q.join(`
183
- `)}import{access as qW,lstat as E4,mkdir as ZW,readdir as QW,readFile as o5,rm as XW,symlink as zW}from"fs/promises";import{join as mq}from"path";async function S4($){let q;try{q=await E4($)}catch{throw Error(`Path does not exist: ${$}`)}if(!q.isDirectory())throw Error(`Path is not a directory: ${$}`);let Z=mq($,"SKILL.md"),Q;try{Q=await o5(Z,"utf-8")}catch{throw Error(`No SKILL.md found in ${$}`)}let X=$0(Q);if(!X.name)throw Error(`Invalid SKILL.md in ${$}: missing "name" in frontmatter`);return{name:X.name,version:J0(X)}}async function s5($,q,Z,Q){let X=mq(q,Z),z=!1;try{await qW(X),z=!0}catch{}if(z){if(!Q)throw Error(`Target already exists: ${X}. Use --force to overwrite.`);await XW(X,{recursive:!0,force:!0})}await ZW(q,{recursive:!0}),await zW($,X,"dir")}async function b4($){let q;try{q=await E4($)}catch{throw Error(`Path does not exist: ${$}`)}if(!q.isDirectory())throw Error(`Path is not a directory: ${$}`);let Z=await QW($),Q=[];for(let X of Z){if(X.startsWith(".")||X==="node_modules")continue;let z=mq($,X);try{if(!(await E4(z)).isDirectory())continue}catch{continue}let J=mq(z,"SKILL.md");try{let Y=await o5(J,"utf-8"),G=$0(Y);if(G.name)Q.push({absPath:z,dirName:X,name:G.name,version:J0(G)})}catch{}}return Q.sort((X,z)=>X.name.localeCompare(z.name)),Q}import{readFile as JW,writeFile as YW,readdir as GW,access as UW,mkdir as WW,rm as VW}from"fs/promises";import{join as k$,resolve as HW}from"path";import{homedir as BW}from"os";var u0=k$(BW(),".config","agent-skill-manager","bundles");function KW($){let q=[];if(typeof $!=="object"||$===null||Array.isArray($))return{valid:!1,errors:["Bundle must be a JSON object."]};let Z=$;if(Z.version!==1)q.push(`Unsupported bundle version: ${JSON.stringify(Z.version)}. Expected 1.`);if(typeof Z.name!=="string"||!Z.name)q.push("Missing or empty 'name' field.");if(typeof Z.description!=="string"||!Z.description)q.push("Missing or empty 'description' field.");if(typeof Z.author!=="string"||!Z.author)q.push("Missing or empty 'author' field.");if(typeof Z.createdAt!=="string")q.push("Missing or invalid 'createdAt' field.");if(!Array.isArray(Z.skills))return q.push("Missing or invalid 'skills' array."),{valid:!1,errors:q};if(Z.skills.length===0)q.push("Bundle must contain at least one skill.");for(let Q=0;Q<Z.skills.length;Q++){let X=Z.skills[Q];if(typeof X!=="object"||X===null){q.push(`skills[${Q}]: must be an object.`);continue}let z=X;if(typeof z.name!=="string"||!z.name)q.push(`skills[${Q}]: missing or empty 'name'.`);if(typeof z.installUrl!=="string"||!z.installUrl)q.push(`skills[${Q}]: missing or empty 'installUrl'.`)}if(Z.tags!==void 0){if(!Array.isArray(Z.tags))q.push("'tags' must be an array of strings if provided.");else if(Z.tags.some((Q)=>typeof Q!=="string"))q.push("'tags' must contain only strings.")}return{valid:q.length===0,errors:q}}function t5($,q,Z,Q,X){return{version:1,name:$,description:q,author:Z,createdAt:new Date().toISOString(),skills:Q,tags:X}}async function r5($,q){let Z=q??await m0(),Q=Z.skills[$.name]||Z.skills[$.dirName],X;if($.isSymlink&&$.symlinkTarget)X=$.symlinkTarget;else if(Q?.source)X=Q.source;else X=$.path;return{name:$.name,installUrl:X,description:$.description||void 0,version:$.version||void 0}}async function _W(){await WW(u0,{recursive:!0})}function f4($){let q=$.toLowerCase().replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");if(q=q.replace(/^\.+|\.+$/g,""),!q||q==="."||q==="..")throw Error("Invalid bundle name: results in an empty filename after sanitization.");return q}async function e5($){await _W();let q=`${f4($.name)}.json`,Z=k$(u0,q);return await YW(Z,JSON.stringify($,null,2)+`
184
- `,"utf-8"),E(`bundle: saved to ${Z}`),Z}async function x4($){let q;try{q=await JW($,"utf-8")}catch(X){if(X?.code==="ENOENT")throw Error(`Bundle file not found: ${$}`);throw Error(`Failed to read bundle file: ${X.message}`)}let Z;try{Z=JSON.parse(q)}catch{throw Error("Bundle file is not valid JSON.")}let Q=KW(Z);if(!Q.valid)throw Error(`Invalid bundle:
185
- ${Q.errors.join(`
186
- `)}`);return Z}async function y4($){if($.includes("/")||$.includes("\\")||$.endsWith(".json")){let Q=HW($);return x4(Q)}let q=`${f4($)}.json`,Z=k$(u0,q);return x4(Z)}async function $8(){let $=[];try{await UW(u0)}catch{return $}let q;try{q=await GW(u0)}catch{return $}for(let Z of q){if(!Z.endsWith(".json"))continue;let Q=k$(u0,Z);try{let X=await x4(Q);$.push(X)}catch{E(`bundle: skipping invalid file ${Q}`)}}return $.sort((Z,Q)=>Z.name.localeCompare(Q.name)),$}async function q8($){let q=`${f4($)}.json`,Z=k$(u0,q);try{return await VW(Z),E(`bundle: removed ${Z}`),!0}catch(Q){if(Q?.code==="ENOENT")return!1;throw Q}}import{readFile as wW,realpath as NW}from"fs/promises";import{join as DW,resolve as PW,relative as CW}from"path";var X8=[{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bcurl\b/,severity:"critical",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bwget\b/,severity:"critical",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bfetch\s*\(/,severity:"warning",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\baxios\b/,severity:"warning",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bhttp\.request\b/,severity:"warning",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bXMLHttpRequest\b/,severity:"warning",permissionType:"network"},{category:"External URLs",description:"Hardcoded URLs that may indicate data exfiltration or remote payload loading",pattern:/https?:\/\/(?!github\.com|localhost|127\.0\.0\.1|example\.com)/,severity:"warning",permissionType:"network"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bexec\s*\(/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bexecSync\b/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bchild_process\b/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bspawn\s*\(/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bBun\.spawn\b/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bshelljs\b/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\b(?:bash|sh|zsh)\s+-c\b/,severity:"critical",permissionType:"shell"},{category:"Dynamic code execution",description:"Patterns that execute dynamically constructed code at runtime",pattern:/\beval\s*\(/,severity:"critical",permissionType:"code-execution"},{category:"Dynamic code execution",description:"Patterns that execute dynamically constructed code at runtime",pattern:/\bnew\s+Function\b/,severity:"critical",permissionType:"code-execution"},{category:"Dynamic code execution",description:"Patterns that execute dynamically constructed code at runtime",pattern:/\bFunction\s*\(/,severity:"critical",permissionType:"code-execution"},{category:"Dynamic code execution",description:"Patterns that execute dynamically constructed code at runtime",pattern:/\bimport\s*\(\s*[^'"]/,severity:"warning",permissionType:"code-execution"},{category:"File system access",description:"Operations that read, write, or modify files on disk",pattern:/\bfs\.(?:write|append|unlink|rm|mkdir|rename)\b/,severity:"warning",permissionType:"filesystem"},{category:"File system access",description:"Operations that read, write, or modify files on disk",pattern:/\bwriteFile(?:Sync)?\b/,severity:"warning",permissionType:"filesystem"},{category:"File system access",description:"Operations that read, write, or modify files on disk",pattern:/\brm\s+-rf?\b/,severity:"critical",permissionType:"filesystem"},{category:"File system access",description:"Operations that read, write, or modify files on disk",pattern:/\bchmod\b/,severity:"warning",permissionType:"filesystem"},{category:"Embedded credentials",description:"Hardcoded secrets, API keys, tokens, or passwords",pattern:/\b(?:API_KEY|SECRET_KEY|ACCESS_TOKEN|PRIVATE_KEY)\s*[=:]/,severity:"critical"},{category:"Embedded credentials",description:"Hardcoded secrets, API keys, tokens, or passwords",pattern:/\bPASSWORD\s*[=:]/,severity:"critical"},{category:"Embedded credentials",description:"Hardcoded secrets, API keys, tokens, or passwords",pattern:/(?:sk|pk)[-_](?:live|test)[-_][a-zA-Z0-9]{20,}/,severity:"critical"},{category:"Environment variable access",description:"Reading environment variables which may contain secrets or configuration",pattern:/\bprocess\.env\b/,severity:"info",permissionType:"environment"},{category:"Environment variable access",description:"Reading environment variables which may contain secrets or configuration",pattern:/\bBun\.env\b/,severity:"info",permissionType:"environment"},{category:"Obfuscation patterns",description:"Base64 encoding, hex strings, or other obfuscation techniques",pattern:/\batob\s*\(/,severity:"warning"},{category:"Obfuscation patterns",description:"Base64 encoding, hex strings, or other obfuscation techniques",pattern:/\bBuffer\.from\s*\([^,]+,\s*['"]base64['"]\)/,severity:"warning"},{category:"Obfuscation patterns",description:"Base64 encoding, hex strings, or other obfuscation techniques",pattern:/\\x[0-9a-fA-F]{2}(?:\\x[0-9a-fA-F]{2}){5,}/,severity:"warning"}];async function OW($,q){let Z={owner:$,repo:q,profileUrl:`https://github.com/${$}`,reposUrl:`https://github.com/${$}?tab=repositories`,isOrganization:null,publicRepos:null,accountAge:null,fetchError:null};try{let Q=await fetch(`https://api.github.com/users/${$}`,{headers:{Accept:"application/vnd.github.v3+json","User-Agent":"agent-skill-manager"},signal:AbortSignal.timeout(1e4)});if(!Q.ok)return Z.fetchError=`GitHub API returned ${Q.status}`,Z;let X=await Q.json();if(Z.isOrganization=X.type==="Organization",Z.publicRepos=typeof X.public_repos==="number"?X.public_repos:null,typeof X.created_at==="string"){let z=new Date(X.created_at),J=new Date,Y=Math.floor((J.getTime()-z.getTime())/31557600000),G=Math.floor((J.getTime()-z.getTime())%31557600000/2630016000.0000005);Z.accountAge=Y>0?`${Y}y ${G}m`:`${G}m`}E(`security-audit: source analysis for ${$} -> repos=${Z.publicRepos}, org=${Z.isOrganization}, age=${Z.accountAge}`)}catch(Q){Z.fetchError=Q.message||"Failed to fetch GitHub profile",E(`security-audit: source analysis failed -> ${Z.fetchError}`)}return Z}function LW($){let q=new Map;for(let{relPath:X,content:z}of $){let J=z.split(`
187
- `);for(let Y=0;Y<J.length;Y++){let G=J[Y],U=G.trim();for(let H of X8)if(H.pattern.test(G)){let V=H.category;if(!q.has(V))q.set(V,{description:H.description,matches:[]});let B=U.length>120?U.slice(0,120)+"...":U;q.get(V).matches.push({file:X,line:Y+1,match:B,severity:H.severity})}}}let Z=[];for(let[X,z]of q)Z.push({category:X,description:z.description,matches:z.matches});let Q={critical:0,warning:1,info:2};return Z.sort((X,z)=>{let J=Math.min(...X.matches.map((G)=>Q[G.severity])),Y=Math.min(...z.matches.map((G)=>Q[G.severity]));return J-Y}),Z}function FW($){let q=new Map;for(let z of $)for(let J of z.matches)for(let Y of X8)if(Y.permissionType&&Y.category===z.category&&Y.pattern.test(J.match)){let G=Y.permissionType;if(!q.has(G))q.set(G,{evidence:[],categories:new Set});let U=q.get(G);U.evidence.push({file:J.file,line:J.line,match:J.match}),U.categories.add(z.category);break}let Z={filesystem:"Skill reads, writes, or modifies files on disk. Verify it only accesses intended paths.",shell:"Skill executes shell commands or spawns processes. This allows arbitrary system access.",network:"Skill makes network requests or downloads external content. Data may be sent to remote servers.","code-execution":"Skill dynamically constructs and executes code. This can bypass static analysis.",environment:"Skill reads environment variables, which may contain secrets or API keys."},Q=[];for(let[z,J]of q)Q.push({type:z,evidence:J.evidence,reason:Z[z]});let X={shell:0,"code-execution":1,network:2,filesystem:3,environment:4};return Q.sort((z,J)=>(X[z.type]??99)-(X[J.type]??99)),Q}function AW($,q,Z){let Q=0,X=0;for(let G of $)for(let U of G.matches){if(U.severity==="critical")Q++;if(U.severity==="warning")X++}let z=q.some((G)=>G.type==="shell"),J=q.some((G)=>G.type==="code-execution"),Y=q.some((G)=>G.type==="network");if(z&&Y)return{verdict:"dangerous",reason:"Skill has both shell execution and network access -- potential data exfiltration risk."};if(J&&Y)return{verdict:"dangerous",reason:"Skill has dynamic code execution and network access -- potential remote code execution risk."};if(Q>=10)return{verdict:"dangerous",reason:`${Q} critical findings detected. High concentration of risky patterns.`};if(z||J)return{verdict:"warning",reason:z?"Skill executes shell commands. Review commands carefully before installing.":"Skill uses dynamic code execution. Review usage carefully."};if(Q>0)return{verdict:"warning",reason:`${Q} critical finding${Q>1?"s":""} detected. Manual review recommended.`};if(X>0)return{verdict:"caution",reason:`${X} warning${X>1?"s":""} found. Generally acceptable but worth reviewing.`};if(Z&&Z.publicRepos!==null&&Z.publicRepos<3)return{verdict:"caution",reason:"No code issues found, but the author has very few public repositories."};return{verdict:"safe",reason:"No suspicious patterns detected."}}async function N0($,q,Z,Q){E(`security-audit: scanning ${$}`);let X=await n$($),z=X.reduce((V,B)=>V+B.lineCount,0),J=null;if(Z&&Q)J=await OW(Z,Q);let Y=LW(X),G=FW(Y),{verdict:U,reason:H}=AW(Y,G,J);return{scannedAt:new Date().toISOString(),skillName:q,skillPath:$,source:J,codeScans:Y,permissions:G,totalFiles:X.length,totalLines:z,verdict:U,verdictReason:H}}var b=W,p0=56,IW={"Shell execution":"shell","Dynamic code execution":"code-execution","Network requests":"network","External URLs":"network","File system access":"filesystem","Environment variable access":"environment","Embedded credentials":"credentials","Obfuscation patterns":"obfuscation"},Z8={critical:0,warning:1,info:2};function TW($){switch($){case"safe":return b.bgGreen(" SAFE ");case"caution":return b.bgCyan(" CAUTION ");case"warning":return b.bgYellow(" WARNING ");case"dangerous":return b.bgRed(" DANGEROUS ")}}function MW($){switch($){case"safe":return b.green;case"caution":return b.cyan;case"warning":return b.yellow;case"dangerous":return b.red}}function J$($){switch($){case"critical":return b.red("!!");case"warning":return b.yellow(" !");case"info":return b.dim(" i")}}function k4($,q){return $.length>q?$.slice(0,q-3)+"...":$}function pq($){return $.toLocaleString("en-US")}function z8($){return $.replace(/\x1b\[[0-9;]*m/g,"")}function Q8($){return z8($).length}function RW($){let q=new Map;for(let Z of $){let Q=`${Z.file}:${Z.line}`,X=q.get(Q);if(!X||Z8[Z.severity]<Z8[X.severity])q.set(Q,Z)}return Array.from(q.values())}function jW($){let q=new Map;for(let Z of $){let Q=q.get(Z.file);if(!Q)Q={file:Z.file,entries:[]},q.set(Z.file,Q);Q.entries.push({line:Z.line,match:Z.match,severity:Z.severity})}return Array.from(q.values())}function dq($){let q=[],Z=TW($.verdict),Q=z8(Z),X=` ${b.bold($.skillName)}`,z=` ${$.skillName}`,J=p0-4,Y=Math.max(1,J-z.length-Q.length);if(q.push(""),q.push(b.dim(" +-- ")+b.bold("Security Audit")+b.dim(" "+"-".repeat(p0-19)+"+")),q.push(b.dim(" |")+X+" ".repeat(Y)+Z+b.dim("|")),q.push(b.dim(" |")+b.dim(` ${pq($.totalFiles)} files | ${pq($.totalLines)} lines`)+" ".repeat(Math.max(1,J-` ${pq($.totalFiles)} files | ${pq($.totalLines)} lines`.length))+b.dim("|")),q.push(b.dim(" +"+"-".repeat(p0-2)+"+")),$.source){let V=$.source;if(V.fetchError)q.push(` ${b.yellow("!")} Could not fetch profile: ${V.fetchError}`);else{let B=[];if(B.push(`${V.owner} ${V.isOrganization?b.cyan("(org)"):b.dim("(user)")}`),V.publicRepos!==null){let _=V.publicRepos,O=_<3?b.yellow(`${_} repos`):_<10?b.cyan(`${_} repos`):b.green(`${_} repos`);B.push(O)}if(V.accountAge)B.push(V.accountAge);q.push(` ${b.dim("Author:")} ${B.join(b.dim(" | "))}`)}}if(q.push(""),$.codeScans.length===0)q.push(` ${b.green("*")} ${b.green("No suspicious patterns detected.")}`);else{let V=MW($.verdict),B=$.verdict==="dangerous"||$.verdict==="warning"?J$("critical"):$.verdict==="caution"?J$("warning"):J$("info");q.push(` ${B} ${V($.verdictReason)}`);let _=0,O=0,K=0;for(let M of $.codeScans)for(let j of M.matches)if(j.severity==="critical")_++;else if(j.severity==="warning")O++;else K++;let L=[];if(_>0)L.push(b.red(`${_} critical`));if(O>0)L.push(b.yellow(`${O} warning`));if(K>0)L.push(b.dim(`${K} info`));let F=$.permissions.map((M)=>M.type),A=F.length>0?b.dim(`Perms: ${F.join(", ")}`):"";q.push(` ${L.join(b.dim(" | "))} ${A}`)}if(q.push(""),$.codeScans.length>0){q.push(` ${b.bold("Findings")}`),q.push(b.dim(" "+"=".repeat(p0-2)));for(let V of $.codeScans){let B=RW(V.matches),_=B.filter((I)=>I.severity==="critical").length,O=B.filter((I)=>I.severity==="warning").length,K=B.filter((I)=>I.severity==="info").length,L=_>0?J$("critical"):O>0?J$("warning"):J$("info"),F=[];if(_>0)F.push(b.red(`${_} critical`));if(O>0)F.push(b.yellow(`${O} warning`));if(K>0)F.push(b.dim(`${K} info`));let A=IW[V.category],M=A?b.dim(`PERM: ${A}`):"",j=` ${L} ${b.bold(V.category)} (${F.join(", ")})`;if(M){let I=Q8(j),R=Q8(M),C=Math.max(2,p0-I-R);q.push(j+" ".repeat(C)+M)}else q.push(j);let T=jW(B),w=Math.min(24,Math.max(...T.map((I)=>I.file.length))),x=0,P=3;for(let I of T){if(x>=P)break;let R=k4(I.file,24),C=b.dim(R.padEnd(w));if(I.entries.length===1){let S=I.entries[0],f=k4(S.match,50);q.push(` ${C} :${S.line} ${b.dim("--")} ${S.severity==="critical"?f:b.dim(f)}`),x++}else if(I.entries.length<=3){let S=I.entries.map((d)=>`:${d.line}`).join(", "),f=k4(I.entries[0].match,40);q.push(` ${C} ${S} ${b.dim("--")} ${b.dim(f)}`),x++}else{let f=I.entries.slice(0,3).map((p)=>`:${p.line}`).join(", "),d=I.entries.length-3;q.push(` ${C} ${f} ${b.dim(`(+${d} more)`)}`),x++}}let y=T.length-Math.min(T.length,P);if(y>0){let I=B.length-T.slice(0,P).reduce((R,C)=>R+C.entries.length,0);if(I>0)q.push(` ${b.dim(`... ${I} more in ${y} file${y>1?"s":""}`)}`)}q.push("")}}q.push(b.dim(" "+"=".repeat(p0-2)));let G=new Date($.scannedAt),U=`${G.getFullYear()}-${String(G.getMonth()+1).padStart(2,"0")}-${String(G.getDate()).padStart(2,"0")} ${String(G.getHours()).padStart(2,"0")}:${String(G.getMinutes()).padStart(2,"0")}`,H=$.source&&!$.source.fetchError?`github.com/${$.source.owner}`:"";if(H){let V=Math.max(2,p0-2-U.length-H.length);q.push(b.dim(` ${U}${" ".repeat(V)}${H}`))}else q.push(b.dim(` ${U}`));return q.push(""),q.join(`
188
- `)}function v4($){return JSON.stringify($,null,2)}function cq($){return $.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"").replace(/\x1b\][^\x07]*\x07/g,"").replace(/\x1b[^[\]]/g,"").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,"")}function EW($){return $.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\|/g,"\\|")}function h4($){return EW(cq($))}var d0="luongnv89/asm-registry";async function SW($){let q=DW($,"SKILL.md"),Z;try{Z=await wW(q,"utf-8")}catch{throw Error(`No SKILL.md found in ${$}. Run "asm init" to create one.`)}let Q=$0(Z);if(!Q.name)throw Error("SKILL.md is missing required field: name");if(!Q.description)throw Error("SKILL.md is missing required field: description");let X=J0(Q),z=Q.tags?Q.tags.split(/[\s,]+/).map((J)=>J.trim().toLowerCase()).filter(Boolean):[];return{name:Q.name,description:Q.description.replace(/\s*\n\s*/g," ").trim(),version:X,license:Q.license||"MIT",creator:Q.creator||"",tags:z}}async function bW($){if(await Bun.spawn(["git","rev-parse","--git-dir"],{cwd:$,stdout:"pipe",stderr:"pipe"}).exited!==0)throw Error(`${$} is not inside a git repository.`)}async function xW($){let q=Bun.spawn(["git","rev-parse","HEAD"],{cwd:$,stdout:"pipe",stderr:"pipe"}),Z=await new Response(q.stdout).text();if(await q.exited!==0)throw Error("Failed to get HEAD commit. Is this a git repository?");return Z.trim()}async function fW($){let q=Bun.spawn(["git","rev-parse","--show-toplevel"],{cwd:$,stdout:"pipe",stderr:"pipe"}),Z=await new Response(q.stdout).text();if(await q.exited!==0)throw Error("Failed to determine git repository root.");return Z.trim()}async function yW($){let q=Bun.spawn(["git","remote","get-url","origin"],{cwd:$,stdout:"pipe",stderr:"pipe"}),Z=await new Response(q.stdout).text();if(await q.exited!==0)throw Error("No remote origin found. Add one with: git remote add origin <url>");let X=Z.trim(),z=X.match(/^git@github\.com:([a-zA-Z0-9_-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?$/);if(z)return`https://github.com/${z[1]}/${z[2]}`;return X.replace(/\.git$/,"")}async function kW(){if(await Bun.spawn(["gh","--version"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return{available:!1,authenticated:!1,login:null};if(await Bun.spawn(["gh","auth","status"],{stdout:"pipe",stderr:"pipe"}).exited!==0)return{available:!0,authenticated:!1,login:null};let X=Bun.spawn(["gh","api","user","--jq",".login"],{stdout:"pipe",stderr:"pipe"}),z=await new Response(X.stdout).text();return{available:!0,authenticated:!0,login:await X.exited===0?z.trim():null}}function vW($){switch($){case"safe":case"caution":return"pass";case"warning":return"warning";case"dangerous":return"dangerous"}}function J8($){let q={name:$.metadata.name,author:$.author,description:$.metadata.description,repository:$.repository,commit:$.commit,security_verdict:$.securityVerdict,published_at:new Date().toISOString()};if($.skillPath)q.skill_path=$.skillPath;if($.metadata.version&&$.metadata.version!=="0.0.0"&&/^\d+\.\d+\.\d+/.test($.metadata.version))q.version=$.metadata.version;if($.metadata.license)q.license=$.metadata.license;if($.metadata.tags&&$.metadata.tags.length>0)q.tags=$.metadata.tags.slice(0,10);return q}function hW($){let q=J8({metadata:$.metadata,author:$.metadata.creator||"unknown",commit:$.commit,repository:$.repository,securityVerdict:$.registryVerdict}),Z=uq(q);if(Z.length>0)return{success:!1,manifest:q,prUrl:null,error:`Manifest validation failed: ${Z.map((Q)=>`${Q.field}: ${Q.message}`).join("; ")}`,securityVerdict:$.registryVerdict,securityReport:$.securityReport};return{success:!0,manifest:q,prUrl:null,error:null,securityVerdict:$.registryVerdict,securityReport:$.securityReport,fallback:!0,fallbackReason:$.fallbackReason}}async function Y8($){let q=PW($.path);E(`publish: starting for ${q}`),await bW(q);let Z=await SW(q);E(`publish: parsed metadata for "${Z.name}"`);let X=await($._auditFn??N0)(q,Z.name),z=vW(X.verdict);if(z==="dangerous")return{success:!1,manifest:null,prUrl:null,error:`Security audit verdict: dangerous. ${X.verdictReason}`,securityVerdict:z,securityReport:X};if(z==="warning"&&!$.force)return{success:!1,manifest:null,prUrl:null,error:"Security audit verdict: warning. Use --force to override warnings.",securityVerdict:z,securityReport:X};let J=await xW(q),Y=await yW(q),G=await fW(q),U=await NW(q),H=CW(G,U),V=H&&H!=="."?H:void 0,_=await($._checkGhCliFn??kW)();if(!_.available||!_.authenticated){let s=!_.available?"gh CLI not found":"gh CLI not authenticated";return hW({metadata:Z,commit:J,repository:Y,registryVerdict:z,securityReport:X,fallbackReason:s})}if(!_.login)throw Error("Could not determine GitHub username. The gh CLI is authenticated but the API call failed. Check your network connection and try again.");let O=_.login,K=J8({metadata:Z,author:O,commit:J,repository:Y,skillPath:V,securityVerdict:z}),L=uq(K);if(L.length>0)return{success:!1,manifest:K,prUrl:null,error:`Manifest validation failed: ${L.map((s)=>`${s.field}: ${s.message}`).join("; ")}`,securityVerdict:z,securityReport:X};if($.dryRun)return{success:!0,manifest:K,prUrl:null,error:null,securityVerdict:z,securityReport:X};if(!$.yes){if(!process.stdin.isTTY)return{success:!1,manifest:K,prUrl:null,error:"Cannot prompt for confirmation in non-interactive mode. Use --yes to skip.",securityVerdict:z,securityReport:X};let s=cq(Z.name),c$=cq(O);process.stderr.write(`
189
- About to publish "${s}" by ${c$} to ${d0}.
190
- Security verdict: ${z}
191
-
192
- Proceed? [y/N] `);let G1=await new Promise((J2)=>{let l$="",Y2=(m6)=>{if(l$+=m6.toString(),l$.includes(`
193
- `))process.stdin.removeListener("data",Y2),process.stdin.pause(),J2(l$.trim())};process.stdin.resume(),process.stdin.on("data",Y2)});if(G1.toLowerCase()!=="y"&&G1.toLowerCase()!=="yes")return{success:!1,manifest:K,prUrl:null,error:"Publish aborted by user.",securityVerdict:z,securityReport:X}}E(`publish: forking ${d0}`),await Bun.spawn(["gh","repo","fork",d0,"--clone=false"],{stdout:"pipe",stderr:"pipe"}).exited;let A=`publish/${O}/${Z.name}`,M=`manifests/${O}/${Z.name}.json`,j=JSON.stringify(K,null,2)+`
194
- `,T=Buffer.from(j,"utf-8").toString("base64"),w=Bun.spawn(["gh","api",`repos/${O}/asm-registry/git/refs/heads/main`,"--jq",".object.sha"],{stdout:"pipe",stderr:"pipe"}),x=await new Response(w.stdout).text();if(await w.exited!==0)return{success:!1,manifest:K,prUrl:null,error:`Failed to read fork's main branch. Ensure the fork exists at ${O}/asm-registry.`,securityVerdict:z,securityReport:X};let y=x.trim();if(await Bun.spawn(["gh","api",`repos/${O}/asm-registry/git/refs`,"-X","POST","-f",`ref=refs/heads/${A}`,"-f",`sha=${y}`],{stdout:"pipe",stderr:"pipe"}).exited!==0)await Bun.spawn(["gh","api",`repos/${O}/asm-registry/git/refs/heads/${A}`,"-X","PATCH","-f",`sha=${y}`,"-f","force=true"],{stdout:"pipe",stderr:"pipe"}).exited;let C=Bun.spawn(["gh","api",`repos/${O}/asm-registry/contents/${M}`,"-X","PUT","-f",`message=Publish ${O}/${Z.name}`,"-f",`content=${T}`,"-f",`branch=${A}`],{stdout:"pipe",stderr:"pipe"}),S=await new Response(C.stderr).text();if(await C.exited!==0){let s=Bun.spawn(["gh","api",`repos/${O}/asm-registry/contents/${M}?ref=${A}`,"-q",".sha"],{stdout:"pipe",stderr:"pipe"}),c$=(await new Response(s.stdout).text()).trim();if(await s.exited===0&&c$){if(await Bun.spawn(["gh","api",`repos/${O}/asm-registry/contents/${M}`,"-X","PUT","-f",`message=Update ${O}/${Z.name}`,"-f",`content=${T}`,"-f",`branch=${A}`,"-f",`sha=${c$}`],{stdout:"pipe",stderr:"pipe"}).exited!==0)return{success:!1,manifest:K,prUrl:null,error:"Failed to write manifest to registry fork.",securityVerdict:z,securityReport:X}}else return{success:!1,manifest:K,prUrl:null,error:`Failed to write manifest to registry fork. ${S}`,securityVerdict:z,securityReport:X}}let d=h4(Z.name),p=h4(Z.description),r=h4(Z.license),p$=`Publish ${O}/${cq(Z.name)}`,H0=[`## Skill: ${d}`,"",`**Author:** ${O}`,`**Version:** ${Z.version}`,`**Description:** ${p}`,`**License:** ${r}`,`**Repository:** ${Y}`,`**Commit:** \`${J}\``,`**Security verdict:** ${z}`,"","---","","*This PR was generated by `asm publish`.*"].join(`
195
- `),X0=Bun.spawn(["gh","pr","create","--repo",d0,"--head",`${O}:${A}`,"--title",p$,"--body",H0],{stdout:"pipe",stderr:"pipe"}),l0=await new Response(X0.stdout).text(),d$=await new Response(X0.stderr).text(),W$=await X0.exited,n0=null;if(W$===0)n0=l0.trim();else{let s=d$.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/);if(s)n0=s[0]}if(!n0)return{success:!1,manifest:K,prUrl:null,error:`Failed to create PR against ${d0}. ${d$}`,securityVerdict:z,securityReport:X};return{success:!0,manifest:K,prUrl:n0,error:null,securityVerdict:z,securityReport:X}}function G8($){let q=$.manifest;if(!q)return"";return["",` gh CLI is unavailable (${$.fallbackReason}).`," To publish manually:","",` 1. Fork ${d0} on GitHub`,` 2. Create branch: publish/${q.author}/${q.name}`,` 3. Add file: manifests/${q.author}/${q.name}.json`," 4. Paste the manifest below into that file",` 5. Open a PR against ${d0}`,"",' Run "asm doctor" to fix your environment.',""," Generated manifest:",JSON.stringify(q,null,2).split(`
196
- `).map((Q)=>` ${Q}`).join(`
183
+ `}async function _c(e,t){await Qg(t,{recursive:!0});let s=ey(t,"SKILL.md"),i=ty(e);await Xg(s,i,"utf-8")}async function qc(e){try{return await Zg(e),!0}catch{return!1}}import{readdir as sy,stat as iy}from"fs/promises";import{join as ny}from"path";async function ry(e){let t=0;try{let i=(await sy(e,{recursive:!0})).map(async r=>{try{let o=await iy(ny(e,r));if(o.isFile())return o.size}catch{}return 0});t=(await Promise.all(i)).reduce((r,o)=>r+o,0)}catch{}return t}async function jc(e,t){let s={},i={global:0,project:0},n={},r=e.map(async l=>{s[l.provider]=(s[l.provider]||0)+1,i[l.scope]++;let c=await ry(l.path);return n[l.path]=c,c}),a=(await Promise.all(r)).reduce((l,c)=>l+c,0);return{totalSkills:e.length,byProvider:s,byScope:i,totalDiskBytes:a,perSkillDiskBytes:n,duplicateGroups:t.duplicateGroups.length,duplicateInstances:t.totalDuplicateInstances}}function oy(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(1)} GB`}function xr(e,t,s=20){let i=Math.round(e/t*s),n=s-i;return u.green("#".repeat(i))+u.dim("-".repeat(n))}var Fc={claude:"Claude Code",codex:"Codex",openclaw:"OpenClaw",agents:"Agents"};function Bc(e){let t=[];t.push(""),t.push(u.blueBold(" Skill Statistics")),t.push(u.dim(" "+"-".repeat(20))),t.push(""),t.push(` ${u.bold("Total:")} ${u.cyan(String(e.totalSkills))} skills`),t.push(` ${u.bold("Disk:")} ${u.cyan(oy(e.totalDiskBytes))}`),t.push(""),t.push(u.bold(" By Tool"));let s=Object.entries(e.byProvider).sort((l,c)=>c[1]-l[1]),i=Math.max(...s.map(([,l])=>l)),n=Math.max(...s.map(([l])=>(Fc[l]||l).length));for(let[l,c]of s){let d=Fc[l]||l,f=ao(l,d.padEnd(n)),p=String(c).padStart(4);t.push(` ${f} ${p} ${xr(c,i)}`)}t.push(""),t.push(u.bold(" By Scope"));let r=Math.max(e.byScope.global,e.byScope.project),o=String(e.byScope.global).padStart(4),a=String(e.byScope.project).padStart(4);return t.push(` ${"global ".padEnd(n)} ${o} ${xr(e.byScope.global,r)}`),t.push(` ${"project".padEnd(n)} ${a} ${xr(e.byScope.project,r)}`),t.push(""),t.push(u.bold(" Duplicates")),e.duplicateGroups>0?(t.push(` ${u.yellow(`${e.duplicateGroups} group(s), ${e.duplicateInstances} total instance(s)`)}`),t.push(u.dim(` Run ${u.bold("asm audit")} to review`))):t.push(` ${u.green("None")}`),t.push(""),t.join(`
184
+ `)}import{access as ay,lstat as Cr,mkdir as ly,readdir as cy,readFile as Uc,rm as uy,symlink as fy}from"fs/promises";import{join as ri}from"path";async function Er(e){let t;try{t=await Cr(e)}catch{throw new Error(`Path does not exist: ${e}`)}if(!t.isDirectory())throw new Error(`Path is not a directory: ${e}`);let s=ri(e,"SKILL.md"),i;try{i=await Uc(s,"utf-8")}catch{throw new Error(`No SKILL.md found in ${e}`)}let n=ie(i);if(!n.name)throw new Error(`Invalid SKILL.md in ${e}: missing "name" in frontmatter`);return{name:n.name,version:ae(n)}}async function Vc(e,t,s,i){let n=ri(t,s),r=!1;try{await ay(n),r=!0}catch{}if(r){if(!i)throw new Error(`Target already exists: ${n}. Use --force to overwrite.`);await uy(n,{recursive:!0,force:!0})}await ly(t,{recursive:!0}),await fy(e,n,"dir")}async function Ar(e){let t;try{t=await Cr(e)}catch{throw new Error(`Path does not exist: ${e}`)}if(!t.isDirectory())throw new Error(`Path is not a directory: ${e}`);let s=await cy(e),i=[];for(let n of s){if(n.startsWith(".")||n==="node_modules")continue;let r=ri(e,n);try{if(!(await Cr(r)).isDirectory())continue}catch{continue}let o=ri(r,"SKILL.md");try{let a=await Uc(o,"utf-8"),l=ie(a);l.name&&i.push({absPath:r,dirName:n,name:l.name,version:ae(l)})}catch{}}return i.sort((n,r)=>n.name.localeCompare(r.name)),i}import{readFile as dy,writeFile as py,readdir as Kc,access as Jc,mkdir as my,rm as hy}from"fs/promises";import{join as Je,resolve as Hc,dirname as gy}from"path";import{homedir as yy}from"os";import{fileURLToPath as by}from"url";var wy=by(import.meta.url),vy=gy(wy),Ke=Je(yy(),".config","agent-skill-manager","bundles"),oi=Hc(vy,"..","data","bundles");function ky(e){let t=[];if(typeof e!="object"||e===null||Array.isArray(e))return{valid:!1,errors:["Bundle must be a JSON object."]};let s=e;if(s.version!==1&&t.push(`Unsupported bundle version: ${JSON.stringify(s.version)}. Expected 1.`),(typeof s.name!="string"||!s.name)&&t.push("Missing or empty 'name' field."),(typeof s.description!="string"||!s.description)&&t.push("Missing or empty 'description' field."),(typeof s.author!="string"||!s.author)&&t.push("Missing or empty 'author' field."),typeof s.createdAt!="string"&&t.push("Missing or invalid 'createdAt' field."),!Array.isArray(s.skills))return t.push("Missing or invalid 'skills' array."),{valid:!1,errors:t};s.skills.length===0&&t.push("Bundle must contain at least one skill.");for(let i=0;i<s.skills.length;i++){let n=s.skills[i];if(typeof n!="object"||n===null){t.push(`skills[${i}]: must be an object.`);continue}let r=n;(typeof r.name!="string"||!r.name)&&t.push(`skills[${i}]: missing or empty 'name'.`),(typeof r.installUrl!="string"||!r.installUrl)&&t.push(`skills[${i}]: missing or empty 'installUrl'.`)}return s.tags!==void 0&&(Array.isArray(s.tags)?s.tags.some(i=>typeof i!="string")&&t.push("'tags' must contain only strings."):t.push("'tags' must be an array of strings if provided.")),{valid:t.length===0,errors:t}}function Yc(e,t,s,i,n){return{version:1,name:e,description:t,author:s,createdAt:new Date().toISOString(),skills:i,tags:n}}async function Gc(e,t){let s=t??await Le(),i=s.skills[e.name]||s.skills[e.dirName],n;return e.isSymlink&&e.symlinkTarget?n=e.symlinkTarget:i?.source?n=i.source:n=e.path,{name:e.name,installUrl:n,description:e.description||void 0,version:e.version||void 0}}async function Sy(){await my(Ke,{recursive:!0})}function Pr(e){let t=e.toLowerCase().replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");if(t=t.replace(/^\.+|\.+$/g,""),!t||t==="."||t==="..")throw new Error("Invalid bundle name: results in an empty filename after sanitization.");return t}async function Nr(e){await Sy();let t=`${Pr(e.name)}.json`,s=Je(Ke,t);return await py(s,JSON.stringify(e,null,2)+`
185
+ `,"utf-8"),N(`bundle: saved to ${s}`),s}async function Yt(e){let t;try{t=await dy(e,"utf-8")}catch(n){throw n?.code==="ENOENT"?new Error(`Bundle file not found: ${e}`):new Error(`Failed to read bundle file: ${n.message}`)}let s;try{s=JSON.parse(t)}catch{throw new Error("Bundle file is not valid JSON.")}let i=ky(s);if(!i.valid)throw new Error(`Invalid bundle:
186
+ ${i.errors.join(`
187
+ `)}`);return s}async function Gt(e){if(e.includes("/")||e.includes("\\")||e.endsWith(".json")){let i=Hc(e);return Yt(i)}let t=`${Pr(e)}.json`,s=Je(Ke,t);try{return await Yt(s)}catch(i){if(i?.message?.includes("Bundle file not found")){let n=Je(oi,t);try{return await Yt(n)}catch(r){throw r?.message?.includes("Bundle file not found")?new Error(`Bundle file not found: ${s}`):r}}throw i}}async function Wc(){let e=[];try{await Jc(oi)}catch{return e}let t;try{t=await Kc(oi)}catch{return e}for(let s of t){if(!s.endsWith(".json"))continue;let i=Je(oi,s);try{let n=await Yt(i);e.push(n)}catch{N(`bundle: skipping invalid predefined file ${i}`)}}return e.sort((s,i)=>s.name.localeCompare(i.name)),e}async function zc(){let e=[];try{await Jc(Ke)}catch{return e}let t;try{t=await Kc(Ke)}catch{return e}for(let s of t){if(!s.endsWith(".json"))continue;let i=Je(Ke,s);try{let n=await Yt(i);e.push(n)}catch{N(`bundle: skipping invalid file ${i}`)}}return e.sort((s,i)=>s.name.localeCompare(i.name)),e}async function Qc(e){let t=`${Pr(e)}.json`,s=Je(Ke,t);try{return await hy(s),N(`bundle: removed ${s}`),!0}catch(i){if(i?.code==="ENOENT")return!1;throw i}}import{readFile as Ry,realpath as Oy}from"fs/promises";import{join as Ty,resolve as My,relative as Dy}from"path";var eu=[{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bcurl\b/,severity:"critical",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bwget\b/,severity:"critical",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bfetch\s*\(/,severity:"warning",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\baxios\b/,severity:"warning",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bhttp\.request\b/,severity:"warning",permissionType:"network"},{category:"Network requests",description:"Commands or APIs that download or upload data over the network",pattern:/\bXMLHttpRequest\b/,severity:"warning",permissionType:"network"},{category:"External URLs",description:"Hardcoded URLs that may indicate data exfiltration or remote payload loading",pattern:/https?:\/\/(?!github\.com|localhost|127\.0\.0\.1|example\.com)/,severity:"warning",permissionType:"network"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bexec\s*\(/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bexecSync\b/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bchild_process\b/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bspawn\s*\(/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bBun\.spawn\b/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\bshelljs\b/,severity:"critical",permissionType:"shell"},{category:"Shell execution",description:"Commands that execute shell processes or arbitrary system commands",pattern:/\b(?:bash|sh|zsh)\s+-c\b/,severity:"critical",permissionType:"shell"},{category:"Dynamic code execution",description:"Patterns that execute dynamically constructed code at runtime",pattern:/\beval\s*\(/,severity:"critical",permissionType:"code-execution"},{category:"Dynamic code execution",description:"Patterns that execute dynamically constructed code at runtime",pattern:/\bnew\s+Function\b/,severity:"critical",permissionType:"code-execution"},{category:"Dynamic code execution",description:"Patterns that execute dynamically constructed code at runtime",pattern:/\bFunction\s*\(/,severity:"critical",permissionType:"code-execution"},{category:"Dynamic code execution",description:"Patterns that execute dynamically constructed code at runtime",pattern:/\bimport\s*\(\s*[^'"]/,severity:"warning",permissionType:"code-execution"},{category:"File system access",description:"Operations that read, write, or modify files on disk",pattern:/\bfs\.(?:write|append|unlink|rm|mkdir|rename)\b/,severity:"warning",permissionType:"filesystem"},{category:"File system access",description:"Operations that read, write, or modify files on disk",pattern:/\bwriteFile(?:Sync)?\b/,severity:"warning",permissionType:"filesystem"},{category:"File system access",description:"Operations that read, write, or modify files on disk",pattern:/\brm\s+-rf?\b/,severity:"critical",permissionType:"filesystem"},{category:"File system access",description:"Operations that read, write, or modify files on disk",pattern:/\bchmod\b/,severity:"warning",permissionType:"filesystem"},{category:"Embedded credentials",description:"Hardcoded secrets, API keys, tokens, or passwords",pattern:/\b(?:API_KEY|SECRET_KEY|ACCESS_TOKEN|PRIVATE_KEY)\s*[=:]/,severity:"critical"},{category:"Embedded credentials",description:"Hardcoded secrets, API keys, tokens, or passwords",pattern:/\bPASSWORD\s*[=:]/,severity:"critical"},{category:"Embedded credentials",description:"Hardcoded secrets, API keys, tokens, or passwords",pattern:/(?:sk|pk)[-_](?:live|test)[-_][a-zA-Z0-9]{20,}/,severity:"critical"},{category:"Environment variable access",description:"Reading environment variables which may contain secrets or configuration",pattern:/\bprocess\.env\b/,severity:"info",permissionType:"environment"},{category:"Environment variable access",description:"Reading environment variables which may contain secrets or configuration",pattern:/\bBun\.env\b/,severity:"info",permissionType:"environment"},{category:"Obfuscation patterns",description:"Base64 encoding, hex strings, or other obfuscation techniques",pattern:/\batob\s*\(/,severity:"warning"},{category:"Obfuscation patterns",description:"Base64 encoding, hex strings, or other obfuscation techniques",pattern:/\bBuffer\.from\s*\([^,]+,\s*['"]base64['"]\)/,severity:"warning"},{category:"Obfuscation patterns",description:"Base64 encoding, hex strings, or other obfuscation techniques",pattern:/\\x[0-9a-fA-F]{2}(?:\\x[0-9a-fA-F]{2}){5,}/,severity:"warning"}];async function $y(e,t){let s={owner:e,repo:t,profileUrl:`https://github.com/${e}`,reposUrl:`https://github.com/${e}?tab=repositories`,isOrganization:null,publicRepos:null,accountAge:null,fetchError:null};try{let i=await fetch(`https://api.github.com/users/${e}`,{headers:{Accept:"application/vnd.github.v3+json","User-Agent":"agent-skill-manager"},signal:AbortSignal.timeout(1e4)});if(!i.ok)return s.fetchError=`GitHub API returned ${i.status}`,s;let n=await i.json();if(s.isOrganization=n.type==="Organization",s.publicRepos=typeof n.public_repos=="number"?n.public_repos:null,typeof n.created_at=="string"){let r=new Date(n.created_at),o=new Date,a=Math.floor((o.getTime()-r.getTime())/(365.25*24*60*60*1e3)),l=Math.floor((o.getTime()-r.getTime())%(365.25*24*60*60*1e3)/(30.44*24*60*60*1e3));s.accountAge=a>0?`${a}y ${l}m`:`${l}m`}N(`security-audit: source analysis for ${e} -> repos=${s.publicRepos}, org=${s.isOrganization}, age=${s.accountAge}`)}catch(i){s.fetchError=i.message||"Failed to fetch GitHub profile",N(`security-audit: source analysis failed -> ${s.fetchError}`)}return s}function xy(e){let t=new Map;for(let{relPath:n,content:r}of e){let o=r.split(`
188
+ `);for(let a=0;a<o.length;a++){let l=o[a],c=l.trim();for(let d of eu)if(d.pattern.test(l)){let f=d.category;t.has(f)||t.set(f,{description:d.description,matches:[]});let p=c.length>120?c.slice(0,120)+"...":c;t.get(f).matches.push({file:n,line:a+1,match:p,severity:d.severity})}}}let s=[];for(let[n,r]of t)s.push({category:n,description:r.description,matches:r.matches});let i={critical:0,warning:1,info:2};return s.sort((n,r)=>{let o=Math.min(...n.matches.map(l=>i[l.severity])),a=Math.min(...r.matches.map(l=>i[l.severity]));return o-a}),s}function Cy(e){let t=new Map;for(let r of e)for(let o of r.matches)for(let a of eu)if(a.permissionType&&a.category===r.category&&a.pattern.test(o.match)){let l=a.permissionType;t.has(l)||t.set(l,{evidence:[],categories:new Set});let c=t.get(l);c.evidence.push({file:o.file,line:o.line,match:o.match}),c.categories.add(r.category);break}let s={filesystem:"Skill reads, writes, or modifies files on disk. Verify it only accesses intended paths.",shell:"Skill executes shell commands or spawns processes. This allows arbitrary system access.",network:"Skill makes network requests or downloads external content. Data may be sent to remote servers.","code-execution":"Skill dynamically constructs and executes code. This can bypass static analysis.",environment:"Skill reads environment variables, which may contain secrets or API keys."},i=[];for(let[r,o]of t)i.push({type:r,evidence:o.evidence,reason:s[r]});let n={shell:0,"code-execution":1,network:2,filesystem:3,environment:4};return i.sort((r,o)=>(n[r.type]??99)-(n[o.type]??99)),i}function Ey(e,t,s){let i=0,n=0;for(let l of e)for(let c of l.matches)c.severity==="critical"&&i++,c.severity==="warning"&&n++;let r=t.some(l=>l.type==="shell"),o=t.some(l=>l.type==="code-execution"),a=t.some(l=>l.type==="network");return r&&a?{verdict:"dangerous",reason:"Skill has both shell execution and network access -- potential data exfiltration risk."}:o&&a?{verdict:"dangerous",reason:"Skill has dynamic code execution and network access -- potential remote code execution risk."}:i>=10?{verdict:"dangerous",reason:`${i} critical findings detected. High concentration of risky patterns.`}:r||o?{verdict:"warning",reason:r?"Skill executes shell commands. Review commands carefully before installing.":"Skill uses dynamic code execution. Review usage carefully."}:i>0?{verdict:"warning",reason:`${i} critical finding${i>1?"s":""} detected. Manual review recommended.`}:n>0?{verdict:"caution",reason:`${n} warning${n>1?"s":""} found. Generally acceptable but worth reviewing.`}:s&&s.publicRepos!==null&&s.publicRepos<3?{verdict:"caution",reason:"No code issues found, but the author has very few public repositories."}:{verdict:"safe",reason:"No suspicious patterns detected."}}async function Pe(e,t,s,i){N(`security-audit: scanning ${e}`);let n=await ss(e),r=n.reduce((f,p)=>f+p.lineCount,0),o=null;s&&i&&(o=await $y(s,i));let a=xy(n),l=Cy(a),{verdict:c,reason:d}=Ey(a,l,o);return{scannedAt:new Date().toISOString(),skillName:t,skillPath:e,source:o,codeScans:a,permissions:l,totalFiles:n.length,totalLines:r,verdict:c,verdictReason:d}}var R=u,He=56,Ay={"Shell execution":"shell","Dynamic code execution":"code-execution","Network requests":"network","External URLs":"network","File system access":"filesystem","Environment variable access":"environment","Embedded credentials":"credentials","Obfuscation patterns":"obfuscation"},Xc={critical:0,warning:1,info:2};function Py(e){switch(e){case"safe":return R.bgGreen(" SAFE ");case"caution":return R.bgCyan(" CAUTION ");case"warning":return R.bgYellow(" WARNING ");case"dangerous":return R.bgRed(" DANGEROUS ")}}function Ny(e){switch(e){case"safe":return R.green;case"caution":return R.cyan;case"warning":return R.yellow;case"dangerous":return R.red}}function lt(e){switch(e){case"critical":return R.red("!!");case"warning":return R.yellow(" !");case"info":return R.dim(" i")}}function Ir(e,t){return e.length>t?e.slice(0,t-3)+"...":e}function ai(e){return e.toLocaleString("en-US")}function tu(e){return e.replace(/\x1b\[[0-9;]*m/g,"")}function Zc(e){return tu(e).length}function Iy(e){let t=new Map;for(let s of e){let i=`${s.file}:${s.line}`,n=t.get(i);(!n||Xc[s.severity]<Xc[n.severity])&&t.set(i,s)}return Array.from(t.values())}function Ly(e){let t=new Map;for(let s of e){let i=t.get(s.file);i||(i={file:s.file,entries:[]},t.set(s.file,i)),i.entries.push({line:s.line,match:s.match,severity:s.severity})}return Array.from(t.values())}function li(e){let t=[],s=Py(e.verdict),i=tu(s),n=` ${R.bold(e.skillName)}`,r=` ${e.skillName}`,o=He-4,a=Math.max(1,o-r.length-i.length);if(t.push(""),t.push(R.dim(" +-- ")+R.bold("Security Audit")+R.dim(" "+"-".repeat(He-19)+"+")),t.push(R.dim(" |")+n+" ".repeat(a)+s+R.dim("|")),t.push(R.dim(" |")+R.dim(` ${ai(e.totalFiles)} files | ${ai(e.totalLines)} lines`)+" ".repeat(Math.max(1,o-` ${ai(e.totalFiles)} files | ${ai(e.totalLines)} lines`.length))+R.dim("|")),t.push(R.dim(" +"+"-".repeat(He-2)+"+")),e.source){let f=e.source;if(f.fetchError)t.push(` ${R.yellow("!")} Could not fetch profile: ${f.fetchError}`);else{let p=[];if(p.push(`${f.owner} ${f.isOrganization?R.cyan("(org)"):R.dim("(user)")}`),f.publicRepos!==null){let m=f.publicRepos,y=m<3?R.yellow(`${m} repos`):m<10?R.cyan(`${m} repos`):R.green(`${m} repos`);p.push(y)}f.accountAge&&p.push(f.accountAge),t.push(` ${R.dim("Author:")} ${p.join(R.dim(" | "))}`)}}if(t.push(""),e.codeScans.length===0)t.push(` ${R.green("*")} ${R.green("No suspicious patterns detected.")}`);else{let f=Ny(e.verdict),p=e.verdict==="dangerous"||e.verdict==="warning"?lt("critical"):e.verdict==="caution"?lt("warning"):lt("info");t.push(` ${p} ${f(e.verdictReason)}`);let m=0,y=0,h=0;for(let k of e.codeScans)for(let x of k.matches)x.severity==="critical"?m++:x.severity==="warning"?y++:h++;let g=[];m>0&&g.push(R.red(`${m} critical`)),y>0&&g.push(R.yellow(`${y} warning`)),h>0&&g.push(R.dim(`${h} info`));let b=e.permissions.map(k=>k.type),v=b.length>0?R.dim(`Perms: ${b.join(", ")}`):"";t.push(` ${g.join(R.dim(" | "))} ${v}`)}if(t.push(""),e.codeScans.length>0){t.push(` ${R.bold("Findings")}`),t.push(R.dim(" "+"=".repeat(He-2)));for(let f of e.codeScans){let p=Iy(f.matches),m=p.filter(w=>w.severity==="critical").length,y=p.filter(w=>w.severity==="warning").length,h=p.filter(w=>w.severity==="info").length,g=m>0?lt("critical"):y>0?lt("warning"):lt("info"),b=[];m>0&&b.push(R.red(`${m} critical`)),y>0&&b.push(R.yellow(`${y} warning`)),h>0&&b.push(R.dim(`${h} info`));let v=Ay[f.category],k=v?R.dim(`PERM: ${v}`):"",x=` ${g} ${R.bold(f.category)} (${b.join(", ")})`;if(k){let w=Zc(x),$=Zc(k),I=Math.max(2,He-w-$);t.push(x+" ".repeat(I)+k)}else t.push(x);let S=Ly(p),E=Math.min(24,Math.max(...S.map(w=>w.file.length))),O=0,P=3;for(let w of S){if(O>=P)break;let $=Ir(w.file,24),I=R.dim($.padEnd(E));if(w.entries.length===1){let L=w.entries[0],T=Ir(L.match,50);t.push(` ${I} :${L.line} ${R.dim("--")} ${L.severity==="critical"?T:R.dim(T)}`),O++}else if(w.entries.length<=3){let L=w.entries.map(K=>`:${K.line}`).join(", "),T=Ir(w.entries[0].match,40);t.push(` ${I} ${L} ${R.dim("--")} ${R.dim(T)}`),O++}else{let T=w.entries.slice(0,3).map(U=>`:${U.line}`).join(", "),K=w.entries.length-3;t.push(` ${I} ${T} ${R.dim(`(+${K} more)`)}`),O++}}let M=S.length-Math.min(S.length,P);if(M>0){let w=p.length-S.slice(0,P).reduce(($,I)=>$+I.entries.length,0);w>0&&t.push(` ${R.dim(`... ${w} more in ${M} file${M>1?"s":""}`)}`)}t.push("")}}t.push(R.dim(" "+"=".repeat(He-2)));let l=new Date(e.scannedAt),c=`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}-${String(l.getDate()).padStart(2,"0")} ${String(l.getHours()).padStart(2,"0")}:${String(l.getMinutes()).padStart(2,"0")}`,d=e.source&&!e.source.fetchError?`github.com/${e.source.owner}`:"";if(d){let f=Math.max(2,He-2-c.length-d.length);t.push(R.dim(` ${c}${" ".repeat(f)}${d}`))}else t.push(R.dim(` ${c}`));return t.push(""),t.join(`
189
+ `)}function Lr(e){return JSON.stringify(e,null,2)}async function V(e,t={}){if(e.length===0)throw new Error("runCommand requires a non-empty argv");let{spawn:s}=await import("child_process"),[i,...n]=e;return new Promise((r,o)=>{let a=s(i,n,{cwd:t.cwd,stdio:["ignore","pipe","pipe"]}),l="",c="",d=!1;a.stdout?.on("data",f=>{l+=f.toString()}),a.stderr?.on("data",f=>{c+=f.toString()}),a.on("error",f=>{if(d)return;if(d=!0,f.code==="ENOENT"){r({exitCode:127,stdout:l,stderr:f.message});return}o(f)}),a.on("close",f=>{d||(d=!0,r({exitCode:f??-1,stdout:l,stderr:c}))})})}function ci(e){return e.replace(/\x1b\[[0-9;]*[a-zA-Z]/g,"").replace(/\x1b\][^\x07]*\x07/g,"").replace(/\x1b[^[\]]/g,"").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,"")}function _y(e){return e.replace(/\\/g,"\\\\").replace(/`/g,"\\`").replace(/\[/g,"\\[").replace(/\]/g,"\\]").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\|/g,"\\|")}function Rr(e){return _y(ci(e))}var Ye="luongnv89/asm-registry";async function qy(e){let t=Ty(e,"SKILL.md"),s;try{s=await Ry(t,"utf-8")}catch{throw new Error(`No SKILL.md found in ${e}. Run "asm init" to create one.`)}let i=ie(s);if(!i.name)throw new Error("SKILL.md is missing required field: name");if(!i.description)throw new Error("SKILL.md is missing required field: description");let n=ae(i),r=i.tags?i.tags.split(/[\s,]+/).map(o=>o.trim().toLowerCase()).filter(Boolean):[];return{name:i.name,description:i.description.replace(/\s*\n\s*/g," ").trim(),version:n,license:i.license||"MIT",creator:i.creator||"",tags:r}}async function Fy(e){let{exitCode:t}=await V(["git","rev-parse","--git-dir"],{cwd:e});if(t!==0)throw new Error(`${e} is not inside a git repository.`)}async function jy(e){let{stdout:t,exitCode:s}=await V(["git","rev-parse","HEAD"],{cwd:e});if(s!==0)throw new Error("Failed to get HEAD commit. Is this a git repository?");return t.trim()}async function By(e){let{stdout:t,exitCode:s}=await V(["git","rev-parse","--show-toplevel"],{cwd:e});if(s!==0)throw new Error("Failed to determine git repository root.");return t.trim()}async function Uy(e){let{stdout:t,exitCode:s}=await V(["git","remote","get-url","origin"],{cwd:e});if(s!==0)throw new Error("No remote origin found. Add one with: git remote add origin <url>");let i=t.trim(),n=i.match(/^git@github\.com:([a-zA-Z0-9_-]+)\/([a-zA-Z0-9._-]+?)(?:\.git)?$/);return n?`https://github.com/${n[1]}/${n[2]}`:i.replace(/\.git$/,"")}async function Vy(){let{exitCode:e}=await V(["gh","--version"]);if(e!==0)return{available:!1,authenticated:!1,login:null};let{exitCode:t}=await V(["gh","auth","status"]);if(t!==0)return{available:!0,authenticated:!1,login:null};let{stdout:s,exitCode:i}=await V(["gh","api","user","--jq",".login"]);return{available:!0,authenticated:!0,login:i===0?s.trim():null}}function Ky(e){switch(e){case"safe":case"caution":return"pass";case"warning":return"warning";case"dangerous":return"dangerous"}}function su(e){let t={name:e.metadata.name,author:e.author,description:e.metadata.description,repository:e.repository,commit:e.commit,security_verdict:e.securityVerdict,published_at:new Date().toISOString()};return e.skillPath&&(t.skill_path=e.skillPath),e.metadata.version&&e.metadata.version!=="0.0.0"&&/^\d+\.\d+\.\d+/.test(e.metadata.version)&&(t.version=e.metadata.version),e.metadata.license&&(t.license=e.metadata.license),e.metadata.tags&&e.metadata.tags.length>0&&(t.tags=e.metadata.tags.slice(0,10)),t}function Jy(e){let t=su({metadata:e.metadata,author:e.metadata.creator||"unknown",commit:e.commit,repository:e.repository,securityVerdict:e.registryVerdict}),s=ni(t);return s.length>0?{success:!1,manifest:t,prUrl:null,error:`Manifest validation failed: ${s.map(i=>`${i.field}: ${i.message}`).join("; ")}`,securityVerdict:e.registryVerdict,securityReport:e.securityReport}:{success:!0,manifest:t,prUrl:null,error:null,securityVerdict:e.registryVerdict,securityReport:e.securityReport,fallback:!0,fallbackReason:e.fallbackReason}}async function iu(e){let t=My(e.path);N(`publish: starting for ${t}`),await Fy(t);let s=await qy(t);N(`publish: parsed metadata for "${s.name}"`);let n=await(e._auditFn??Pe)(t,s.name),r=Ky(n.verdict);if(r==="dangerous")return{success:!1,manifest:null,prUrl:null,error:`Security audit verdict: dangerous. ${n.verdictReason}`,securityVerdict:r,securityReport:n};if(r==="warning"&&!e.force)return{success:!1,manifest:null,prUrl:null,error:"Security audit verdict: warning. Use --force to override warnings.",securityVerdict:r,securityReport:n};let o=await jy(t),a=await Uy(t),l=await By(t),c=await Oy(t),d=Dy(l,c),f=d&&d!=="."?d:void 0,m=await(e._checkGhCliFn??Vy)();if(!m.available||!m.authenticated){let j=m.available?"gh CLI not authenticated":"gh CLI not found";return Jy({metadata:s,commit:o,repository:a,registryVerdict:r,securityReport:n,fallbackReason:j})}if(!m.login)throw new Error("Could not determine GitHub username. The gh CLI is authenticated but the API call failed. Check your network connection and try again.");let y=m.login,h=su({metadata:s,author:y,commit:o,repository:a,skillPath:f,securityVerdict:r}),g=ni(h);if(g.length>0)return{success:!1,manifest:h,prUrl:null,error:`Manifest validation failed: ${g.map(j=>`${j.field}: ${j.message}`).join("; ")}`,securityVerdict:r,securityReport:n};if(e.dryRun)return{success:!0,manifest:h,prUrl:null,error:null,securityVerdict:r,securityReport:n};if(!e.yes){if(!process.stdin.isTTY)return{success:!1,manifest:h,prUrl:null,error:"Cannot prompt for confirmation in non-interactive mode. Use --yes to skip.",securityVerdict:r,securityReport:n};let j=ci(s.name),ye=ci(y);process.stderr.write(`
190
+ About to publish "${j}" by ${ye} to ${Ye}.
191
+ Security verdict: ${r}
192
+
193
+ Proceed? [y/N] `);let Ne=await new Promise(Ie=>{let dt="",Gr=hf=>{dt+=hf.toString(),dt.includes(`
194
+ `)&&(process.stdin.removeListener("data",Gr),process.stdin.pause(),Ie(dt.trim()))};process.stdin.resume(),process.stdin.on("data",Gr)});if(Ne.toLowerCase()!=="y"&&Ne.toLowerCase()!=="yes")return{success:!1,manifest:h,prUrl:null,error:"Publish aborted by user.",securityVerdict:r,securityReport:n}}N(`publish: forking ${Ye}`),await V(["gh","repo","fork",Ye,"--clone=false"]);let b=`publish/${y}/${s.name}`,v=`manifests/${y}/${s.name}.json`,k=JSON.stringify(h,null,2)+`
195
+ `,x=Buffer.from(k,"utf-8").toString("base64"),{stdout:S,exitCode:E}=await V(["gh","api",`repos/${y}/asm-registry/git/refs/heads/main`,"--jq",".object.sha"]);if(E!==0)return{success:!1,manifest:h,prUrl:null,error:`Failed to read fork's main branch. Ensure the fork exists at ${y}/asm-registry.`,securityVerdict:r,securityReport:n};let O=S.trim(),{exitCode:P}=await V(["gh","api",`repos/${y}/asm-registry/git/refs`,"-X","POST","-f",`ref=refs/heads/${b}`,"-f",`sha=${O}`]);P!==0&&await V(["gh","api",`repos/${y}/asm-registry/git/refs/heads/${b}`,"-X","PATCH","-f",`sha=${O}`,"-f","force=true"]);let{stderr:M,exitCode:w}=await V(["gh","api",`repos/${y}/asm-registry/contents/${v}`,"-X","PUT","-f",`message=Publish ${y}/${s.name}`,"-f",`content=${x}`,"-f",`branch=${b}`]);if(w!==0){let{stdout:j,exitCode:ye}=await V(["gh","api",`repos/${y}/asm-registry/contents/${v}?ref=${b}`,"-q",".sha"]),Ne=j.trim();if(ye===0&&Ne){let{exitCode:Ie}=await V(["gh","api",`repos/${y}/asm-registry/contents/${v}`,"-X","PUT","-f",`message=Update ${y}/${s.name}`,"-f",`content=${x}`,"-f",`branch=${b}`,"-f",`sha=${Ne}`]);if(Ie!==0)return{success:!1,manifest:h,prUrl:null,error:"Failed to write manifest to registry fork.",securityVerdict:r,securityReport:n}}else return{success:!1,manifest:h,prUrl:null,error:`Failed to write manifest to registry fork. ${M}`,securityVerdict:r,securityReport:n}}let $=Rr(s.name),I=Rr(s.description),L=Rr(s.license),T=`Publish ${y}/${ci(s.name)}`,K=[`## Skill: ${$}`,"",`**Author:** ${y}`,`**Version:** ${s.version}`,`**Description:** ${I}`,`**License:** ${L}`,`**Repository:** ${a}`,`**Commit:** \`${o}\``,`**Security verdict:** ${r}`,"","---","","*This PR was generated by `asm publish`.*"].join(`
196
+ `),{stdout:U,stderr:ee,exitCode:Xt}=await V(["gh","pr","create","--repo",Ye,"--head",`${y}:${b}`,"--title",T,"--body",K]),se=null;if(Xt===0)se=U.trim();else{let j=ee.match(/https:\/\/github\.com\/[^\s]+\/pull\/\d+/);j&&(se=j[0])}return se?{success:!0,manifest:h,prUrl:se,error:null,securityVerdict:r,securityReport:n}:{success:!1,manifest:h,prUrl:null,error:`Failed to create PR against ${Ye}. ${ee}`,securityVerdict:r,securityReport:n}}function nu(e){let t=e.manifest;return t?["",` gh CLI is unavailable (${e.fallbackReason}).`," To publish manually:","",` 1. Fork ${Ye} on GitHub`,` 2. Create branch: publish/${t.author}/${t.name}`,` 3. Add file: manifests/${t.author}/${t.name}.json`," 4. Paste the manifest below into that file",` 5. Open a PR against ${Ye}`,"",' Run "asm doctor" to fix your environment.',""," Generated manifest:",JSON.stringify(t,null,2).split(`
197
+ `).map(i=>` ${i}`).join(`
197
198
  `)].join(`
198
- `)}import{execFile as gW}from"child_process";import{promisify as uW}from"util";import{rm as lq,rename as U8,cp as W8,access as mW,mkdir as pW}from"fs/promises";import{join as nq}from"path";import{homedir as V8}from"os";var g4=uW(gW);async function dW($,q,Z){let Q=Array($.length),X=0;async function z(){while(X<$.length){let Y=X++;Q[Y]=await Z($[Y])}}let J=[];for(let Y=0;Y<Math.min(q,$.length);Y++)J.push(z());return await Promise.all(J),Q}async function cW($,q){try{let Z=["ls-remote",$];if(q)Z.push(q);else Z.push("HEAD");let{stdout:Q}=await g4("git",Z,{timeout:1e4}),X=Q.split(`
199
- `)[0];if(!X)return null;let z=X.split(/\s+/)[0];return z&&/^[0-9a-f]{40}$/.test(z)?z:null}catch(Z){return E(`updater: git ls-remote failed for ${$}: ${Z}`),null}}function u4($){if($.sourceType)return $.sourceType;if($.source.startsWith("local:"))return"local";return"github"}function H8($){if($.startsWith("github:")){let q=$.slice(7),Z=q.indexOf("#");if(Z!==-1)q=q.slice(0,Z);return`https://github.com/${q}.git`}if($.startsWith("file://"))return $;return null}function lW($){if(!$.startsWith("github:"))return null;let q=$.slice(7),Z=q.indexOf("#");if(Z!==-1)q=q.slice(0,Z);let Q=q.split("/");if(Q.length<2||!Q[0]||!Q[1])return null;return{owner:Q[0],repo:Q[1]}}async function m4($){let q=$?.readLockFn??m0,Z=$?.fetchRegistryIndexFn??P4,Q=$?.lock??await q(),X=Object.entries(Q.skills);if(X.length===0)return{entries:[],outdatedCount:0,upToDateCount:0,untrackedCount:0,errorCount:0};let z=null;if(X.some(([,G])=>u4(G)==="registry"||G.registryName))z=await Z();let Y=await dW(X,5,async([G,U])=>{let H=u4(U);if(!U.commitHash||U.commitHash==="unknown")return{name:G,installedCommit:U.commitHash||"unknown",latestCommit:"unknown",source:U.source,sourceType:H,status:"untracked"};if(H==="local")return{name:G,installedCommit:U.commitHash,latestCommit:U.commitHash,source:U.source,sourceType:H,status:"up-to-date"};if(H==="registry"&&z){let O=U.registryName||G,K=z.manifests.find((L)=>L.name.toLowerCase()===O.toLowerCase());if(K){let L=K.commit!==U.commitHash;return{name:G,installedCommit:V0(U.commitHash),latestCommit:V0(K.commit),source:U.source,sourceType:H,status:L?"outdated":"up-to-date"}}}let V=H8(U.source);if(!V)return{name:G,installedCommit:V0(U.commitHash),latestCommit:"unknown",source:U.source,sourceType:H,status:"error",error:"Cannot determine remote URL"};let B=await cW(V,U.ref);if(!B)return{name:G,installedCommit:V0(U.commitHash),latestCommit:"unknown",source:U.source,sourceType:H,status:"error",error:"Failed to fetch remote commit"};let _=B!==U.commitHash;return{name:G,installedCommit:V0(U.commitHash),latestCommit:V0(B),source:U.source,sourceType:H,status:_?"outdated":"up-to-date"}});return{entries:Y,outdatedCount:Y.filter((G)=>G.status==="outdated").length,upToDateCount:Y.filter((G)=>G.status==="up-to-date").length,untrackedCount:Y.filter((G)=>G.status==="untracked").length,errorCount:Y.filter((G)=>G.status==="error").length}}async function nW($,q,Z,Q){if(u4(q)==="local")return{name:$,status:"skipped",reason:"Local skill (not updatable)"};let z=H8(q.source);if(!z)return{name:$,status:"failed",reason:"Cannot determine remote URL"};let J=nq(V8(),".config","agent-skill-manager",".tmp",`${$}-${Date.now()}`);try{let Y=nq(V8(),".config","agent-skill-manager",".tmp");await pW(Y,{recursive:!0}),E(`updater: cloning latest ${$} to ${J}`);let G=["clone","--depth","1"];if(q.ref&&q.ref!=="HEAD")G.push("--branch",q.ref);G.push(z,J);try{await g4("git",G,{timeout:60000})}catch(T){return{name:$,status:"failed",reason:`Clone failed: ${T.stderr||T.message}`}}let U=null;try{let{stdout:T}=await g4("git",["rev-parse","HEAD"],{cwd:J,timeout:5000});U=T.trim()}catch{return{name:$,status:"failed",reason:"Could not read new commit"}}if(U===q.commitHash)return{name:$,status:"skipped",reason:"Already up to date"};E(`updater: running security audit on ${$}`);let H="safe";try{let T=Q?.auditFn??N0,w=lW(q.source);if(H=(await T(J,$,w?.owner,w?.repo)).verdict,H==="dangerous")return{name:$,status:"skipped",reason:"Security audit: dangerous update blocked",securityVerdict:H};if(H==="warning"||H==="caution"){if(!Z)return{name:$,status:"skipped",reason:`Security audit: ${H} use --yes to override`,securityVerdict:H};E(`updater: security audit ${H} for ${$} proceeding (--yes)`)}}catch(T){return E(`updater: security audit failed for ${$}: ${T.message}`),{name:$,status:"failed",reason:`Security audit failed skipping update: ${T.message}`}}let V=Q?.loadConfigFn??h,B=Q?.resolveProviderPathFn??z0,O=(await V()).providers.find((T)=>T.name===q.provider),K=O?O.global:`~/.${q.provider}/skills`,L=B(K),F=nq(L,$),A=nq(J,".git");try{await lq(A,{recursive:!0,force:!0})}catch{}try{await mW(F)}catch{let T=Q?.writeLockEntryFn??v$;return await W8(J,F,{recursive:!0}),await T($,{...q,commitHash:U,installedAt:new Date().toISOString()}),{name:$,status:"updated",oldCommit:V0(q.commitHash),newCommit:V0(U),securityVerdict:H}}let M=`${F}.bak-${Date.now()}`;try{await U8(F,M),await W8(J,F,{recursive:!0}),await lq(M,{recursive:!0,force:!0})}catch(T){try{await lq(F,{recursive:!0,force:!0}),await U8(M,F)}catch{}return{name:$,status:"failed",reason:`Atomic swap failed: ${T.message}`}}return await(Q?.writeLockEntryFn??v$)($,{...q,commitHash:U,installedAt:new Date().toISOString()}),{name:$,status:"updated",oldCommit:V0(q.commitHash),newCommit:V0(U),securityVerdict:H}}finally{try{await lq(J,{recursive:!0,force:!0})}catch{}}}async function B8($,q,Z){let Q=Z?.readLockFn??m0,X=Z?.checkOutdatedFn??m4,z=Z?.updateSkillFn??nW,J=await Q(),Y=await X({lock:J}),G=Y.entries.filter((V)=>V.status==="outdated"),U=[];if($&&$.length>0){let V=new Set($.map((B)=>B.toLowerCase()));G=G.filter((B)=>V.has(B.name.toLowerCase()));for(let B of $)if(!G.find((_)=>_.name.toLowerCase()===B.toLowerCase()))if(!Y.entries.find((O)=>O.name.toLowerCase()===B.toLowerCase()))E(`updater: skill "${B}" not found in lock file`),U.push(B);else E(`updater: skill "${B}" is already up to date`)}if(G.length===0)return{results:[],updatedCount:0,skippedCount:0,failedCount:0,...U.length>0?{warnings:U}:{}};let H=[];for(let V of G){let B=J.skills[V.name];if(!B)continue;let _=await z(V.name,B,q);H.push(_)}return{results:H,updatedCount:H.filter((V)=>V.status==="updated").length,skippedCount:H.filter((V)=>V.status==="skipped").length,failedCount:H.filter((V)=>V.status==="failed").length,...U.length>0?{warnings:U}:{}}}function V0($){if(!$||$==="unknown")return"unknown";return $.slice(0,7)}function K8($,q){if($.entries.length===0)return"No skills installed.";let Z=(V)=>V,Q=q?W.red:Z,X=q?W.green:Z,z=q?W.yellow:Z,J=q?W.dim:Z,Y=`${"Skill".padEnd(22)}${"Installed".padEnd(14)}${"Latest".padEnd(14)}Source`,G="".repeat(60),U=[Y,G];for(let V of $.entries){let B=V.name.padEnd(22),_=V.installedCommit.padEnd(14),O,K;switch(V.status){case"outdated":O=Q(V.latestCommit.padEnd(14)),K=V.sourceType;break;case"up-to-date":O=X(V.latestCommit.padEnd(14)),K=J("(up to date)");break;case"untracked":O=z("untracked".padEnd(14)),K=z("untracked");break;case"error":O=J("error".padEnd(14)),K=J(V.error||"error");break}U.push(`${B}${_}${O}${K}`)}U.push("");let H=[];if($.outdatedCount>0)H.push(Q(`${$.outdatedCount} outdated`));if($.upToDateCount>0)H.push(X(`${$.upToDateCount} up to date`));if($.untrackedCount>0)H.push(z(`${$.untrackedCount} untracked`));if($.errorCount>0)H.push(J(`${$.errorCount} error`));return U.push(H.join(", ")),U.join(`
200
- `)}function _8($){return JSON.stringify({skills:$.entries.map((q)=>({name:q.name,installed:q.installedCommit,latest:q.latestCommit,source:q.sourceType,status:q.status,...q.error?{error:q.error}:{}})),summary:{outdated:$.outdatedCount,upToDate:$.upToDateCount,untracked:$.untrackedCount,errors:$.errorCount}},null,2)}function O8($){return JSON.stringify({results:$.results.map((q)=>({name:q.name,status:q.status,...q.reason?{reason:q.reason}:{},...q.oldCommit?{oldCommit:q.oldCommit}:{},...q.newCommit?{newCommit:q.newCommit}:{},...q.securityVerdict?{securityVerdict:q.securityVerdict}:{}})),summary:{updated:$.updatedCount,skipped:$.skippedCount,failed:$.failedCount}},null,2)}import{execFile as zV}from"child_process";import{promisify as JV}from"util";import{access as L8,readFile as I8,readdir as YV,writeFile as GV,rm as UV,stat as T8}from"fs/promises";import{join as p4}from"path";import{homedir as WV}from"os";import{constants as F8}from"fs";import{access as aW,realpath as iW,stat as oW}from"fs/promises";import{constants as sW}from"fs";import{delimiter as tW,resolve as rW,sep as eW}from"path";var $V="asm";function qV($){if(!$)return[];let q=new Set,Z=[];for(let Q of $.split(tW)){let X=Q.trim();if(!X)continue;let z=X.endsWith(eW)?X.slice(0,-1):X;if(q.has(z))continue;q.add(z),Z.push(z)}return Z}async function ZV($){try{if(!(await oW($)).isFile())return!1}catch{return!1}try{return await aW($,sW.X_OK),!0}catch{return!1}}async function QV($){try{return await iW($)}catch{return $}}async function XV($=process.env.PATH){let q=new Set,Z=[];for(let Q of qV($)){let X=rW(Q,$V);if(!await ZV(X))continue;let z=await QV(X);if(q.has(z))continue;q.add(z),Z.push({path:X,realPath:z})}return Z}async function aq($=process.env.PATH){let q=await XV($);if(q.length===0)return{resolved:null,shadowed:[]};let[Z,...Q]=q;return{resolved:Z,shadowed:Q}}var Y$=JV(zV);async function VV($){let q=$?.execFn??Y$;try{let{stdout:Z}=await q("git",["--version"],{timeout:5000});return{name:"Git available",status:"pass",message:Z.trim().replace("git version ","")}}catch{return{name:"Git available",status:"fail",message:"git not found",fix:"Install git: https://git-scm.com/downloads"}}}async function HV($){let q=$?.execFn??Y$;try{let{stdout:Z}=await q("git",["--version"],{timeout:5000}),Q=Z.match(/(\d+)\.(\d+)/);if(!Q)return{name:"Git version",status:"warn",message:"Could not parse git version",fix:"Upgrade git: https://git-scm.com/downloads"};let X=parseInt(Q[1],10),z=parseInt(Q[2],10);if(X>2||X===2&&z>=20)return{name:"Git version",status:"pass",message:`${X}.${z} (>= 2.20)`};return{name:"Git version",status:"fail",message:`${X}.${z} (requires >= 2.20)`,fix:"Upgrade git: https://git-scm.com/downloads"}}catch{return{name:"Git version",status:"pass",message:"Skipped git not available"}}}async function BV($){let q=$?.execFn??Y$;try{let{stdout:Z}=await q("gh",["--version"],{timeout:5000}),Q=Z.trim().split(`
201
- `)[0],X=Q.match(/(\d+\.\d+\.\d+)/);return{name:"GitHub CLI available",status:"pass",message:X?X[1]:Q}}catch{return{name:"GitHub CLI available",status:"fail",message:"gh not found",fix:"Install GitHub CLI: https://cli.github.com"}}}async function KV($){let q=$?.execFn??Y$;try{let{stdout:Z}=await q("gh",["auth","status"],{timeout:1e4}),Q=Z.match(/Logged in to .+ account (\S+)/);return{name:"GitHub CLI authenticated",status:"pass",message:Q?Q[1]:"authenticated"}}catch(Z){let X=(Z?.stderr??"").match(/Logged in to .+ account (\S+)/);if(X)return{name:"GitHub CLI authenticated",status:"pass",message:X[1]};return{name:"GitHub CLI authenticated",status:"fail",message:"Not authenticated",fix:"Run: gh auth login"}}}async function _V($){let q=$?.execFn??Y$;try{let{stdout:Z}=await q("node",["--version"],{timeout:5000}),Q=Z.trim().replace(/^v/,"");if(parseInt(Q.split(".")[0],10)>=18)return{name:"Node.js version",status:"pass",message:Q};return{name:"Node.js version",status:"fail",message:`${Q} (requires >= 18.0)`,fix:"Upgrade Node.js: https://nodejs.org"}}catch{return{name:"Node.js version",status:"fail",message:"node not found",fix:"Install Node.js >= 18: https://nodejs.org"}}}async function OV($){try{let q=p4($,".asm-doctor-write-test");return await GV(q,"test","utf-8"),await UV(q),{writable:!0,exists:!0}}catch{}try{return await L8($,F8.W_OK),{writable:!0,exists:!0}}catch{}try{return await L8($,F8.F_OK),{writable:!1,exists:!0}}catch{return{writable:!0,exists:!1}}}async function LV($){let q=$.providers.filter((z)=>z.enabled),Z=0,Q=0;for(let z of q){let J=z0(z.global);if(Q++,(await OV(J)).writable)Z++}if(Z===Q)return{name:"Agent directories writable",status:"pass",message:`${Z}/${Q} providers`};let X=Q-Z;return{name:"Agent directories writable",status:"warn",message:`${Z}/${Q} providers (${X} not writable)`,fix:"Fix permissions on agent skill directories"}}async function FV(){let $=h$();try{let q=await I8($,"utf-8"),Z=JSON.parse(q),Q=[];if(Z.version===void 0)Q.push("version");if(!Array.isArray(Z.providers))Q.push("providers");if(Q.length>0)return{name:"Config file valid",status:"fail",message:`Missing required fields: ${Q.join(", ")}`,fix:"Run: asm init"};return{name:"Config file valid",status:"pass",message:"OK"}}catch(q){if(q?.code==="ENOENT")return{name:"Config file valid",status:"pass",message:"No config file (using defaults)"};return{name:"Config file valid",status:"fail",message:"Corrupted or unreadable config",fix:"Run: asm init, or delete corrupted config"}}}async function AV(){let $=A8();try{let q=await I8($,"utf-8"),Z=JSON.parse(q);if(Z.version!==1||typeof Z.skills!=="object")return{name:"Lock file integrity",status:"fail",message:"Invalid lock file schema",fix:"Run: asm install to regenerate"};let Q=Z.skills,X=Object.entries(Q),z=["source","installedAt","provider"],J=[];for(let[Y,G]of X){if(typeof G!=="object"||G===null){J.push(Y);continue}let U=G;for(let H of z)if(!U[H]){J.push(Y);break}}if(J.length>0)return{name:"Lock file integrity",status:"warn",message:`${X.length} skills tracked, ${J.length} with missing fields`,fix:"Run: asm install to regenerate"};return{name:"Lock file integrity",status:"pass",message:`${X.length} skills tracked`}}catch(q){if(q?.code==="ENOENT")return{name:"Lock file integrity",status:"pass",message:"No lock file (first-time user)"};return{name:"Lock file integrity",status:"fail",message:"Corrupted lock file",fix:"Run: asm install to regenerate"}}}async function IV(){try{let $=await fetch(w4,{method:"HEAD",signal:AbortSignal.timeout(5000)});if($.ok)return{name:"Registry reachable",status:"pass",message:"OK"};return{name:"Registry reachable",status:"fail",message:`HTTP ${$.status}`,fix:"Check network connection or proxy settings"}}catch{return{name:"Registry reachable",status:"fail",message:"Network error",fix:"Check network connection or proxy settings"}}}async function TV($,q){let Z=Object.entries(q.skills);if(Z.length===0)return{name:"Installed skills intact",status:"pass",message:"No skills in lock file"};let Q=[];for(let[J,Y]of Z){let G=$.providers.find((V)=>V.name===Y.provider);if(!G){Q.push(J);continue}let U=z0(G.global),H=p4(U,J);try{if(!(await T8(H)).isDirectory())Q.push(J)}catch{Q.push(J)}}if(Q.length===0)return{name:"Installed skills intact",status:"pass",message:`${Z.length} skills verified`};let X=Q[0],z=Q.length>1?` (+${Q.length-1} more)`:"";return{name:"Installed skills intact",status:"fail",message:`Missing: ${X}${z}`,fix:`Run: asm update ${X}`}}async function MV($,q){let Z=new Set(Object.keys(q.skills)),Q=[];for(let X of $.providers.filter((z)=>z.enabled)){let z=z0(X.global);try{let J=await YV(z);for(let Y of J)try{if((await T8(p4(z,Y))).isDirectory()&&!Z.has(Y))Q.push(Y)}catch{}}catch{}}if(Q.length===0)return{name:"No orphaned skills",status:"pass",message:"OK"};return{name:"No orphaned skills",status:"warn",message:`${Q.length} skill(s) without lock entries`,fix:"Run: asm list to review"}}async function RV($){let q=$?.execFn??Y$;try{let{stdout:Z}=await q("df",["-Pk",WV()],{timeout:5000}),Q=Z.trim().split(`
202
- `);if(Q.length<2)return{name:"Disk space",status:"warn",message:"Could not parse df output"};let X=Q[1].split(/\s+/),z=parseInt(X[3],10);if(isNaN(z))return{name:"Disk space",status:"warn",message:"Could not parse available space"};let J=z/1024,Y=J/1024;if(J>100)return{name:"Disk space",status:"pass",message:`OK (${Y>=1?`${Y.toFixed(1)} GB free`:`${Math.round(J)} MB free`})`};return{name:"Disk space",status:"fail",message:`${Math.round(J)} MB free (requires > 100 MB)`,fix:"Free disk space in home directory"}}catch{return{name:"Disk space",status:"warn",message:"Could not check disk space"}}}async function jV(){try{let $=await aq();if($.shadowed.length===0){if(!$.resolved)return{name:"No PATH shadowing",status:"pass",message:"asm not yet on PATH"};return{name:"No PATH shadowing",status:"pass",message:`single install at ${$.resolved.path}`}}let q=$.resolved,Z=$.shadowed[0].path,Q=$.shadowed.length>1?` (+${$.shadowed.length-1} more)`:"";return{name:"No PATH shadowing",status:"warn",message:`resolved ${q.path}, shadowed ${Z}${Q}`,fix:"Remove the duplicate install (e.g. `bun remove -g agent-skill-manager` or `npm uninstall -g agent-skill-manager`) and keep only one."}}catch($){return{name:"No PATH shadowing",status:"warn",message:`Could not scan PATH: ${$?.message??$}`}}}async function M8(){let $=await h(),q=await m0(),Q=(await Promise.allSettled([VV(),HV(),BV(),KV(),_V(),LV($),FV(),AV(),IV(),TV($,q),MV($,q),RV(),jV()])).map((Y,G)=>{if(Y.status==="fulfilled")return Y.value;return{name:["Git available","Git version","GitHub CLI available","GitHub CLI authenticated","Node.js version","Agent directories writable","Config file valid","Lock file integrity","Registry reachable","Installed skills intact","No orphaned skills","Disk space","No PATH shadowing"][G],status:"fail",message:`Check threw: ${Y.reason}`}}),X=Q.filter((Y)=>Y.status==="pass").length,z=Q.filter((Y)=>Y.status==="warn").length,J=Q.filter((Y)=>Y.status==="fail").length;return{checks:Q,passed:X,warnings:z,failures:J}}var wV={pass:"",warn:"⚠️ ",fail:""};function R8($){let q=["Checking your environment...",""];for(let Z of $.checks){let X=` ${wV[Z.status]} ${Z.name}${Z.message?` (${Z.message})`:""}`;if(q.push(X),Z.fix&&Z.status!=="pass"){let z;if(Z.fix.startsWith("Run: "))z=Z.fix;else if(/^[a-z/~]/.test(Z.fix))z=`Run: ${Z.fix}`;else z=`Fix: ${Z.fix}`;q.push(` ${z}`)}}return q.push(""),q.push(`${$.passed} passed, ${$.warnings} warning${$.warnings!==1?"s":""}, ${$.failures} error${$.failures!==1?"s":""}`),q.join(`
203
- `)}function j8($){return JSON.stringify({checks:$.checks.map((q)=>({name:q.name,status:q.status,message:q.message,...q.fix?{fix:q.fix}:{}})),summary:{passed:$.passed,warnings:$.warnings,failures:$.failures}},null,2)}import{readFile as c4,writeFile as NV,stat as G$,copyFile as DV,readdir as PV}from"fs/promises";import{join as U$,resolve as l4,basename as O0,isAbsolute as n4}from"path";var w8=["name","description","version","license","creator","compatibility","allowed-tools","effort","tags","metadata"],N8=["add","analyze","audit","build","check","configure","convert","create","debug","deploy","detect","edit","evaluate","explain","export","extract","fetch","find","fix","format","generate","identify","improve","index","inspect","install","list","manage","migrate","optimize","parse","plan","prepare","publish","refactor","remove","rename","report","research","review","run","scaffold","scan","score","search","set","setup","show","summarize","sync","test","transform","translate","update","validate","verify","write"],CV=["confirm","confirmation","error","errors","fail","failure","caution","warning","prerequisite","prerequisites","requires","requirements","rollback","dry-run","dry run","safety","validate","validation","check","backup"],EV=["acceptance criteria","expected output","expected result","edge case","edge cases","test","tests","testing","verify","verification","assert","example input","example output","given","then"],SV=["reference","references","see","template","templates","script","scripts","helper","helpers","link"],bV=["when to use","quick start","overview","instructions","steps","workflow","phases","progressive"];function C8($){let q=$.split(`
204
- `);if(q.length===0||q[0].trim()!=="---")return{rawFrontmatter:null,body:$};for(let Z=1;Z<q.length;Z++)if(q[Z].trim()==="---"){let Q=q.slice(1,Z).join(`
205
- `),X=q.slice(Z+1).join(`
206
- `);return{rawFrontmatter:Q,body:X}}return{rawFrontmatter:q.slice(1).join(`
207
- `),body:""}}function E8($){if(!$)return 0;return $.split(`
208
- `).length}function a4($){if(!$)return 0;return $.split(/\s+/).map((q)=>q.trim()).filter(Boolean).length}function xV($,q=1){return($.match(/^#{1,6}\s+\S/gm)||[]).length>=q}function iq($,q){let Z=$.toLowerCase();return q.filter((Q)=>Z.includes(Q))}function fV($){return/```[\s\S]+?```/m.test($)}function yV($){return/^\s*[-*]\s+\S/m.test($)||/^\s*\d+\.\s+\S/m.test($)}function kV($,q,Z){let Q=[],X=[],z=0;if(Z!==null)z+=2,Q.push("Has YAML frontmatter block.");else Q.push("SKILL.md has no YAML frontmatter."),X.push("Add a YAML frontmatter block delimited by `---` with at least `name` and `description` fields.");let J=Boolean($.name&&$.name.trim()),Y=Boolean($.description&&$.description.trim());if(J)z+=1.5;else Q.push("Missing required field: name."),X.push("Add `name:` to frontmatter (use the skill directory name).");if(Y)z+=1.5;else Q.push("Missing required field: description."),X.push("Add a one-line `description:` to frontmatter.");let G=J0($);if(G&&G!=="0.0.0")z+=1;else Q.push("Missing or default version."),X.push("Set `metadata.version` (or top-level `version`) using semver (e.g. 0.1.0).");if(Boolean($.creator||$["metadata.creator"]))z+=1;else Q.push("Missing `creator`."),X.push("Add a `creator` field so users know who authored and maintains the skill.");if(Boolean($.license))z+=1;else Q.push("Missing `license`."),X.push("Add a `license` field (e.g. `license: MIT`).");let B=q.trim().length>=20,_=xV(q,1);if(B)z+=1,Q.push("Body has meaningful content.");else Q.push("Body content is too short (<20 chars of instructions)."),X.push("Flesh out the markdown body with at least one paragraph of instructions for the agent.");if(_)z+=1,Q.push("Body uses markdown headings.");else Q.push("Body has no markdown headings."),X.push("Add section headings (e.g. `## When to Use`, `## Instructions`) so the agent can navigate the skill quickly.");return{id:"structure",name:"Structure & completeness",score:Math.round(z),max:10,findings:Q,suggestions:X}}function vV($,q){let Z=[],Q=[],X=0,z=($.description||"").trim();if(!z)return Z.push("No description."),Q.push("Write a one-sentence description that says specifically what the skill does and when to use it."),{id:"description",name:"Description quality",score:0,max:10,findings:Z,suggestions:Q};let J=a4(z);if(Z.push(`Description is ${J} words.`),J>=8&&J<=40)X+=4;else if(J>=5&&J<8)X+=2,Q.push("Lengthen the description slightly so it names both the action and the trigger (aim for 8–20 words).");else if(J>=41&&J<=60)X+=2,Q.push("Trim the description — aim for under 40 words. Move the long version to the markdown body.");else if(J>60)X+=0,Q.push("Description is too long. Keep it under 40 words; put detail in the body.");else X+=0,Q.push("Description is too short. Aim for 8–20 words.");let Y=z.split(/\s+/)[0]?.toLowerCase().replace(/[^\w-]/g,"");if(Boolean(Y&&(N8.includes(Y)||N8.includes(Y.replace(/s$/,"")))))X+=3,Z.push("Starts with an action verb.");else Z.push(`Does not start with a recognized action verb (got "${Y??""}").`),Q.push('Start the description with an imperative action verb (e.g. "Generate...", "Analyze...", "Review...").');if(/\buse when\b|\btrigger\b|\bwhen\b|\bfor\b/i.test(z)||/\b(before|after|during)\b/i.test(z))X+=3,Z.push("Mentions a trigger or use-case signal.");else Z.push("No explicit trigger / use-case phrase."),Q.push('Name the trigger in the description — e.g. "Use when...", "for reviewing...", "before publishing...".');return{id:"description",name:"Description quality",score:Math.min(10,Math.round(X)),max:10,findings:Z,suggestions:Q}}function hV($,q){let Z=[],Q=[],X=0,z=iq(q,bV);if(z.length>=2)X+=3,Z.push(`Progressive disclosure cues present: ${z.slice(0,3).join(", ")}.`);else if(z.length===1)X+=1,Q.push('Add clearer section labels — e.g. "## When to Use" and "## Instructions" — to support progressive disclosure.');else Q.push('Structure the body with "## When to Use" and "## Instructions" sections so the agent reads only what it needs.');if(yV(q))X+=2,Z.push("Uses lists or numbered steps.");else Z.push("No lists or steps detected."),Q.push("Use bulleted or numbered steps to narrow the agent's degrees of freedom.");let J=fV(q),Y=/\bexample\b/i.test(q);if(J&&Y)X+=2,Z.push("Includes example code block.");else if(J||Y)X+=1,Q.push('Back up examples with fenced code blocks labelled under "## Example" so the agent sees concrete input/output.');else Q.push('Add an "## Example" section with a fenced code block showing the desired output.');let G=(q.match(/^\s*[-*0-9.]*\s*(Do|Use|Run|Call|Check|Validate|Return|Emit|Write|Read|Ask|Confirm|Avoid|Never|Always)\b/gim)||[]).length;if(G>=3)X+=2,Z.push(`Uses imperative voice (${G} cues).`);else if(G>=1)X+=1,Q.push("Favor imperative voice (Do / Use / Avoid / Never) to narrow the agent's choices.");else Q.push('Rewrite instructions in the imperative mood — e.g. "Run `git status` first" instead of "you might want to run".');let U=a4(q);if(U>=80&&U<=3000)X+=1,Z.push(`Body length within healthy range (${U} words).`);else if(U<80)Z.push(`Body is very short (${U} words).`),Q.push("Expand the instructions; an underspecified skill gives the agent too much freedom.");else Z.push(`Body is very long (${U} words).`),Q.push("Split large content into referenced files; keep SKILL.md focused under ~3000 words.");return{id:"prompt-engineering",name:"Prompt engineering",score:Math.min(10,Math.round(X)),max:10,findings:Z,suggestions:Q}}function gV($,q){let Z=[],Q=[],X=0,z=a4(q);if(Z.push(`Body is ${z} words.`),z>=120&&z<=1500)X+=4;else if(z>=60&&z<120)X+=2,Q.push("Expand instructions slightly — too little context can push the agent to improvise.");else if(z>1500&&z<=3000)X+=2,Q.push("Consider moving large sections into referenced files (e.g. `references/*.md`) and linking them instead of inlining.");else if(z>3000)X+=0,Q.push("Body is over 3000 words — split long content into referenced files or templates.");let J=iq(q,SV);if(J.length>=2)X+=3,Z.push(`References external files or links (${J.slice(0,3).join(", ")}).`);else if(J.length===1)X+=1,Q.push('Link out to supporting files (e.g. "see `references/examples.md`") instead of inlining them.');else Q.push('Offload verbose content to referenced files and link to them ("see `./templates/x.md`").');let G=(q.match(/```[\s\S]+?```/g)||[]).filter((U)=>E8(U)>60);if(G.length===0)X+=2,Z.push("No oversized code blocks.");else Z.push(`${G.length} code block(s) longer than 60 lines.`),Q.push("Move large code blocks into referenced template files; link to them from SKILL.md.");if(/\btoken\b|\bbudget\b|\bcontext window\b/i.test(q))X+=1,Z.push("Mentions tokens/budget/context window.");return{id:"context-efficiency",name:"Context efficiency",score:Math.min(10,Math.round(X)),max:10,findings:Z,suggestions:Q}}function uV($,q){let Z=[],Q=[],X=0,z=iq(q,CV);if(z.length>=4)X+=4,Z.push(`Covers multiple safety cues (${z.slice(0,4).join(", ")}).`);else if(z.length>=2)X+=2,Z.push(`Mentions a few safety cues: ${z.join(", ")}.`),Q.push("Add explicit error-handling and confirmation steps so the agent knows how to recover from failures.");else if(z.length===1)X+=1,Q.push('Expand the safety section — include prerequisites, validation steps, and what to do "on error".');else Q.push("Describe prerequisites, confirmation prompts, and error-handling steps to reduce blast radius.");let J=/\b(rm\s|delete|remove|drop|force|overwrite|destructive)\b/i.test(q),Y=/\bconfirm\b|\bdry-?run\b|\bare you sure\b|\bbackup\b/i.test(q);if(J&&Y)X+=3,Z.push("Destructive actions paired with confirmation/dry-run.");else if(J)Z.push("References destructive actions without explicit confirmation/dry-run."),Q.push("Pair any destructive command with an explicit confirmation prompt, dry-run flag, or backup step.");else X+=1.5;if(/\bprerequisit/i.test(q)||/\brequire/i.test(q)||/\bdepend/i.test(q))X+=3,Z.push("Declares prerequisites or requirements.");else Z.push("No prerequisites / requirements section."),Q.push('Add a "## Prerequisites" block listing required tools, credentials, and environment state.');return{id:"safety",name:"Safety & guardrails",score:Math.min(10,Math.round(X)),max:10,findings:Z,suggestions:Q}}function mV($,q){let Z=[],Q=[],X=0,z=iq(q,EV);if(z.length>=4)X+=5,Z.push(`Many testability cues present (${z.slice(0,4).join(", ")}).`);else if(z.length>=2)X+=3,Z.push(`Some testability cues: ${z.join(", ")}.`),Q.push('Add an "## Acceptance Criteria" block listing verifiable outputs or checklist items.');else if(z.length===1)X+=1,Q.push('Add concrete "expected output" examples so the agent can self-check.');else Q.push('Add a "## Acceptance Criteria" section with testable statements (e.g. "produces a JSON report with overall_score").');if(/expected\s+(output|result|response)/i.test(q))X+=3,Z.push("Describes expected output/result.");else Q.push('Include an "Expected output" example so reviewers and the agent can verify correctness.');if(/\bedge case|gotcha|pitfall|limitation/i.test(q))X+=2,Z.push("Mentions edge cases or limitations.");else Q.push('Add a short "Edge cases" list to describe inputs the skill should reject or handle carefully.');return{id:"testability",name:"Testability",score:Math.min(10,Math.round(X)),max:10,findings:Z,suggestions:Q}}function pV($,q){let Z=[],Q=[],X=0,z=($.name||"").trim();if(z){let G=/^[a-z][a-z0-9-]*$/.test(z),U=z.length<=40;if(G&&U)X+=4,Z.push(`name "${z}" follows kebab-case convention.`);else{if(!G)Z.push(`name "${z}" is not lowercase kebab-case.`),Q.push(`Rename to lowercase kebab-case (e.g. "${z.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}").`);if(!U)Z.push(`name is ${z.length} chars; keep it <= 40.`)}}else Q.push("Add a kebab-case `name` (e.g. `my-skill`).");let J=q.match(/^#{1,6}\s+(.+)$/gm)||[];if(J.length>0)if(J.filter((H)=>/^#{1,6}\s+([A-Z][a-z]+|Use|How|When|Workflow|Instructions|Examples|Steps|Acceptance)/.test(H)).length/J.length>=0.5)X+=3,Z.push("Most headings use action/imperative labels.");else X+=1,Q.push("Rename body headings to action-oriented labels (e.g. `## Instructions`, `## When to Use`).");if(!/(?:\s\s|\bTODO\b|\bFIXME\b|\?{2,})/.test($.description||""))X+=2,Z.push("Description looks clean (no TODO/FIXME/stray noise).");else Q.push("Clean up description — remove TODOs, FIXMEs, double spaces, or trailing punctuation.");return{id:"naming",name:"Naming & conventions",score:Math.min(10,Math.round(X)),max:10,findings:Z,suggestions:Q}}function g$($){let{content:q,skillPath:Z,skillMdPath:Q}=$,X=$0(q),{rawFrontmatter:z,body:J}=C8(q),Y=[kV(X,J,z),vV(X,J),hV(X,J),gV(X,J),uV(X,J),mV(X,J),pV(X,J)];if(X.name&&O0(Z)===X.name){let O=Y.find((K)=>K.id==="naming");if(O.score<O.max)O.score=Math.min(O.max,O.score+1),O.findings.push("Directory name matches frontmatter `name`.")}let G=Y.reduce((O,K)=>O+K.score,0),U=Y.reduce((O,K)=>O+K.max,0),H=Math.round(G/U*100),V="F";if(H>=90)V="A";else if(H>=80)V="B";else if(H>=65)V="C";else if(H>=50)V="D";let B=[],_=[...Y].sort((O,K)=>O.score/O.max-K.score/K.max);for(let O of _){for(let K of O.suggestions){if(B.length>=3)break;if(!B.includes(K))B.push(K)}if(B.length>=3)break}return{skillPath:Z,skillMdPath:Q,evaluatedAt:new Date().toISOString(),categories:Y,overallScore:H,grade:V,topSuggestions:B,frontmatter:X}}async function S8($){let q=n4($)?$:l4($),Z;try{Z=await G$(q)}catch{throw Error(`Skill path does not exist: ${q}`)}let Q,X;if(Z.isFile())return Q=q,X=await c4(Q,"utf-8"),g$({content:X,skillPath:O0(q)==="SKILL.md"?O0(q):q,skillMdPath:Q});if(!Z.isDirectory())throw Error(`Skill path is not a directory or file: ${q}`);Q=U$(q,"SKILL.md");try{X=await c4(Q,"utf-8")}catch{throw Error(`SKILL.md not found in ${q}. Run "asm init" to create one.`)}return g$({content:X,skillPath:q,skillMdPath:Q})}function dV($){if($<=20)return"low";if($<=80)return"medium";if($<=250)return"high";return"max"}function cV($){let q=$.split(`
209
- `),Z=[],Q=[],X=0;while(X<q.length){let U=q[X];if(!U.trim()){X++;continue}let V=U.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);if(!V)return{newFrontmatter:$,changed:!1};let B=V[1],_=V[2];if(_===""||_===">"||_==="|"){let O=[U];X++;while(X<q.length){let K=q[X];if(K.trim()===""){O.push(K),X++;continue}if(/^\s+/.test(K))O.push(K),X++;else break}Q.push({key:B,text:O.join(`
210
- `)})}else Z.push({key:B,text:U}),X++}let z=(U)=>{let H=w8.indexOf(U);return H===-1?w8.length+1:H},J=[...Z].sort((U,H)=>{let V=z(U.key),B=z(H.key);if(V!==B)return V-B;return Z.indexOf(U)-Z.indexOf(H)}),Y=J.some((U,H)=>U!==Z[H]);return{newFrontmatter:[...J.map((U)=>U.text),...Q.map((U)=>U.text)].join(`
211
- `),changed:Y}}function lV($,q={}){let Z=[],Q=[],X=$.replace(/\r\n/g,`
212
- `);if(X!==$)Z.push({id:"normalise-line-endings",description:"Convert CRLF line endings to LF."});let z=X.split(`
213
- `),J=z.map((L)=>L.replace(/[ \t]+$/g,""));if(J.some((L,F)=>L!==z[F]))Z.push({id:"strip-trailing-whitespace",description:"Strip trailing whitespace from lines."});X=J.join(`
214
- `);let{rawFrontmatter:Y,body:G}=C8(X),U=$0(X);if(Y===null)return Q.push({id:"missing-frontmatter",description:"SKILL.md has no frontmatter not auto-fixable (requires author decisions)."}),{newContent:X,applied:Z,skipped:Q};let H=Y;if(!Boolean(U.version||U["metadata.version"]))H=d4(H,"version","0.1.0"),Z.push({id:"add-missing-version",description:"Add `version: 0.1.0`."});if(!Boolean(U.creator||U["metadata.creator"])){let L=q.gitAuthor?.trim();if(L)H=d4(H,"creator",L),Z.push({id:"add-missing-creator",description:`Add \`creator: ${L}\` from git config.`});else Q.push({id:"add-missing-creator",description:"Missing `creator` no git user.name found to fill in safely."})}if(!U.effort){let L=dV(E8(G));H=d4(H,"effort",L),Z.push({id:"infer-missing-effort",description:`Infer \`effort: ${L}\` from body size.`})}if(!U.description)Q.push({id:"missing-description",description:"Missing `description` content-level fix, left to the author."});let _=cV(H);if(_.changed)Z.push({id:"reorder-frontmatter",description:"Reorder frontmatter fields to canonical order."}),H=_.newFrontmatter;let O=G.replace(/^\n+/,""),K=`---
215
- ${H.replace(/^\n+|\n+$/g,"")}
199
+ `):""}import{execFile as Hy}from"child_process";import{promisify as Yy}from"util";import{rm as ui,rename as ru,cp as ou,access as Gy,mkdir as Wy}from"fs/promises";import{join as fi}from"path";import{homedir as au}from"os";var Or=Yy(Hy);async function zy(e,t,s){let i=new Array(e.length),n=0;async function r(){for(;n<e.length;){let a=n++;i[a]=await s(e[a])}}let o=[];for(let a=0;a<Math.min(t,e.length);a++)o.push(r());return await Promise.all(o),i}async function Qy(e,t){try{let s=["ls-remote",e];t?s.push(t):s.push("HEAD");let{stdout:i}=await Or("git",s,{timeout:1e4}),n=i.split(`
200
+ `)[0];if(!n)return null;let r=n.split(/\s+/)[0];return r&&/^[0-9a-f]{40}$/.test(r)?r:null}catch(s){return N(`updater: git ls-remote failed for ${e}: ${s}`),null}}function Tr(e){return e.sourceType?e.sourceType:e.source.startsWith("local:")?"local":"github"}function lu(e){if(e.startsWith("github:")){let t=e.slice(7),s=t.indexOf("#");return s!==-1&&(t=t.slice(0,s)),`https://github.com/${t}.git`}return e.startsWith("file://")?e:null}function Xy(e){if(!e.startsWith("github:"))return null;let t=e.slice(7),s=t.indexOf("#");s!==-1&&(t=t.slice(0,s));let i=t.split("/");return i.length<2||!i[0]||!i[1]?null:{owner:i[0],repo:i[1]}}async function Mr(e){let t=e?.readLockFn??Le,s=e?.fetchRegistryIndexFn??$r,i=e?.lock??await t(),n=Object.entries(i.skills);if(n.length===0)return{entries:[],outdatedCount:0,upToDateCount:0,untrackedCount:0,errorCount:0};let r=null;n.some(([,l])=>Tr(l)==="registry"||l.registryName)&&(r=await s());let a=await zy(n,5,async([l,c])=>{let d=Tr(c);if(!c.commitHash||c.commitHash==="unknown")return{name:l,installedCommit:c.commitHash||"unknown",latestCommit:"unknown",source:c.source,sourceType:d,status:"untracked"};if(d==="local")return{name:l,installedCommit:c.commitHash,latestCommit:c.commitHash,source:c.source,sourceType:d,status:"up-to-date"};if(d==="registry"&&r){let y=c.registryName||l,h=r.manifests.find(g=>g.name.toLowerCase()===y.toLowerCase());if(h){let g=h.commit!==c.commitHash;return{name:l,installedCommit:de(c.commitHash),latestCommit:de(h.commit),source:c.source,sourceType:d,status:g?"outdated":"up-to-date"}}}let f=lu(c.source);if(!f)return{name:l,installedCommit:de(c.commitHash),latestCommit:"unknown",source:c.source,sourceType:d,status:"error",error:"Cannot determine remote URL"};let p=await Qy(f,c.ref);if(!p)return{name:l,installedCommit:de(c.commitHash),latestCommit:"unknown",source:c.source,sourceType:d,status:"error",error:"Failed to fetch remote commit"};let m=p!==c.commitHash;return{name:l,installedCommit:de(c.commitHash),latestCommit:de(p),source:c.source,sourceType:d,status:m?"outdated":"up-to-date"}});return{entries:a,outdatedCount:a.filter(l=>l.status==="outdated").length,upToDateCount:a.filter(l=>l.status==="up-to-date").length,untrackedCount:a.filter(l=>l.status==="untracked").length,errorCount:a.filter(l=>l.status==="error").length}}async function Zy(e,t,s,i){if(Tr(t)==="local")return{name:e,status:"skipped",reason:"Local skill (not updatable)"};let r=lu(t.source);if(!r)return{name:e,status:"failed",reason:"Cannot determine remote URL"};let o=fi(au(),".config","agent-skill-manager",".tmp",`${e}-${Date.now()}`);try{let a=fi(au(),".config","agent-skill-manager",".tmp");await Wy(a,{recursive:!0}),N(`updater: cloning latest ${e} to ${o}`);let l=["clone","--depth","1"];t.ref&&t.ref!=="HEAD"&&l.push("--branch",t.ref),l.push(r,o);try{await Or("git",l,{timeout:6e4})}catch(S){return{name:e,status:"failed",reason:`Clone failed: ${S.stderr||S.message}`}}let c=null;try{let{stdout:S}=await Or("git",["rev-parse","HEAD"],{cwd:o,timeout:5e3});c=S.trim()}catch{return{name:e,status:"failed",reason:"Could not read new commit"}}if(c===t.commitHash)return{name:e,status:"skipped",reason:"Already up to date"};N(`updater: running security audit on ${e}`);let d="safe";try{let S=i?.auditFn??Pe,E=Xy(t.source);if(d=(await S(o,e,E?.owner,E?.repo)).verdict,d==="dangerous")return{name:e,status:"skipped",reason:"Security audit: dangerous \u2014 update blocked",securityVerdict:d};if(d==="warning"||d==="caution"){if(!s)return{name:e,status:"skipped",reason:`Security audit: ${d} \u2014 use --yes to override`,securityVerdict:d};N(`updater: security audit ${d} for ${e} \u2014 proceeding (--yes)`)}}catch(S){return N(`updater: security audit failed for ${e}: ${S.message}`),{name:e,status:"failed",reason:`Security audit failed \u2014 skipping update: ${S.message}`}}let f=i?.loadConfigFn??q,p=i?.resolveProviderPathFn??oe,y=(await f()).providers.find(S=>S.name===t.provider),h=y?y.global:`~/.${t.provider}/skills`,g=p(h),b=fi(g,e),v=fi(o,".git");try{await ui(v,{recursive:!0,force:!0})}catch{}try{await Gy(b)}catch{let S=i?.writeLockEntryFn??ht;return await ou(o,b,{recursive:!0}),await S(e,{...t,commitHash:c,installedAt:new Date().toISOString()}),{name:e,status:"updated",oldCommit:de(t.commitHash),newCommit:de(c),securityVerdict:d}}let k=`${b}.bak-${Date.now()}`;try{await ru(b,k),await ou(o,b,{recursive:!0}),await ui(k,{recursive:!0,force:!0})}catch(S){try{await ui(b,{recursive:!0,force:!0}),await ru(k,b)}catch{}return{name:e,status:"failed",reason:`Atomic swap failed: ${S.message}`}}return await(i?.writeLockEntryFn??ht)(e,{...t,commitHash:c,installedAt:new Date().toISOString()}),{name:e,status:"updated",oldCommit:de(t.commitHash),newCommit:de(c),securityVerdict:d}}finally{try{await ui(o,{recursive:!0,force:!0})}catch{}}}async function cu(e,t,s){let i=s?.readLockFn??Le,n=s?.checkOutdatedFn??Mr,r=s?.updateSkillFn??Zy,o=await i(),a=await n({lock:o}),l=a.entries.filter(f=>f.status==="outdated"),c=[];if(e&&e.length>0){let f=new Set(e.map(p=>p.toLowerCase()));l=l.filter(p=>f.has(p.name.toLowerCase()));for(let p of e)l.find(m=>m.name.toLowerCase()===p.toLowerCase())||(a.entries.find(y=>y.name.toLowerCase()===p.toLowerCase())?N(`updater: skill "${p}" is already up to date`):(N(`updater: skill "${p}" not found in lock file`),c.push(p)))}if(l.length===0)return{results:[],updatedCount:0,skippedCount:0,failedCount:0,...c.length>0?{warnings:c}:{}};let d=[];for(let f of l){let p=o.skills[f.name];if(!p)continue;let m=await r(f.name,p,t);d.push(m)}return{results:d,updatedCount:d.filter(f=>f.status==="updated").length,skippedCount:d.filter(f=>f.status==="skipped").length,failedCount:d.filter(f=>f.status==="failed").length,...c.length>0?{warnings:c}:{}}}function de(e){return!e||e==="unknown"?"unknown":e.slice(0,7)}function uu(e,t){if(e.entries.length===0)return"No skills installed.";let s=f=>f,i=t?u.red:s,n=t?u.green:s,r=t?u.yellow:s,o=t?u.dim:s,a=`${"Skill".padEnd(22)}${"Installed".padEnd(14)}${"Latest".padEnd(14)}Source`,l="\u2500".repeat(60),c=[a,l];for(let f of e.entries){let p=f.name.padEnd(22),m=f.installedCommit.padEnd(14),y,h;switch(f.status){case"outdated":y=i(f.latestCommit.padEnd(14)),h=f.sourceType;break;case"up-to-date":y=n(f.latestCommit.padEnd(14)),h=o("(up to date)");break;case"untracked":y=r("untracked".padEnd(14)),h=r("untracked");break;case"error":y=o("error".padEnd(14)),h=o(f.error||"error");break}c.push(`${p}${m}${y}${h}`)}c.push("");let d=[];return e.outdatedCount>0&&d.push(i(`${e.outdatedCount} outdated`)),e.upToDateCount>0&&d.push(n(`${e.upToDateCount} up to date`)),e.untrackedCount>0&&d.push(r(`${e.untrackedCount} untracked`)),e.errorCount>0&&d.push(o(`${e.errorCount} error`)),c.push(d.join(", ")),c.join(`
201
+ `)}function fu(e){return JSON.stringify({skills:e.entries.map(t=>({name:t.name,installed:t.installedCommit,latest:t.latestCommit,source:t.sourceType,status:t.status,...t.error?{error:t.error}:{}})),summary:{outdated:e.outdatedCount,upToDate:e.upToDateCount,untracked:e.untrackedCount,errors:e.errorCount}},null,2)}function du(e){return JSON.stringify({results:e.results.map(t=>({name:t.name,status:t.status,...t.reason?{reason:t.reason}:{},...t.oldCommit?{oldCommit:t.oldCommit}:{},...t.newCommit?{newCommit:t.newCommit}:{},...t.securityVerdict?{securityVerdict:t.securityVerdict}:{}})),summary:{updated:e.updatedCount,skipped:e.skippedCount,failed:e.failedCount}},null,2)}import{execFile as db}from"child_process";import{promisify as pb}from"util";import{access as pu,readFile as hu,readdir as mb,writeFile as hb,rm as gb,stat as gu}from"fs/promises";import{join as Dr}from"path";import{homedir as yb}from"os";import{constants as mu}from"fs";import{access as eb,realpath as tb,stat as sb}from"fs/promises";import{constants as ib}from"fs";import{delimiter as nb,resolve as rb,sep as ob}from"path";var ab="asm";function lb(e){if(!e)return[];let t=new Set,s=[];for(let i of e.split(nb)){let n=i.trim();if(!n)continue;let r=n.endsWith(ob)?n.slice(0,-1):n;t.has(r)||(t.add(r),s.push(r))}return s}async function cb(e){try{if(!(await sb(e)).isFile())return!1}catch{return!1}try{return await eb(e,ib.X_OK),!0}catch{return!1}}async function ub(e){try{return await tb(e)}catch{return e}}async function fb(e=process.env.PATH){let t=new Set,s=[];for(let i of lb(e)){let n=rb(i,ab);if(!await cb(n))continue;let r=await ub(n);t.has(r)||(t.add(r),s.push({path:n,realPath:r}))}return s}async function di(e=process.env.PATH){let t=await fb(e);if(t.length===0)return{resolved:null,shadowed:[]};let[s,...i]=t;return{resolved:s,shadowed:i}}var ct=pb(db);async function bb(e){let t=e?.execFn??ct;try{let{stdout:s}=await t("git",["--version"],{timeout:5e3});return{name:"Git available",status:"pass",message:s.trim().replace("git version ","")}}catch{return{name:"Git available",status:"fail",message:"git not found",fix:"Install git: https://git-scm.com/downloads"}}}async function wb(e){let t=e?.execFn??ct;try{let{stdout:s}=await t("git",["--version"],{timeout:5e3}),i=s.match(/(\d+)\.(\d+)/);if(!i)return{name:"Git version",status:"warn",message:"Could not parse git version",fix:"Upgrade git: https://git-scm.com/downloads"};let n=parseInt(i[1],10),r=parseInt(i[2],10);return n>2||n===2&&r>=20?{name:"Git version",status:"pass",message:`${n}.${r} (>= 2.20)`}:{name:"Git version",status:"fail",message:`${n}.${r} (requires >= 2.20)`,fix:"Upgrade git: https://git-scm.com/downloads"}}catch{return{name:"Git version",status:"pass",message:"Skipped \u2014 git not available"}}}async function vb(e){let t=e?.execFn??ct;try{let{stdout:s}=await t("gh",["--version"],{timeout:5e3}),i=s.trim().split(`
202
+ `)[0],n=i.match(/(\d+\.\d+\.\d+)/);return{name:"GitHub CLI available",status:"pass",message:n?n[1]:i}}catch{return{name:"GitHub CLI available",status:"fail",message:"gh not found",fix:"Install GitHub CLI: https://cli.github.com"}}}async function kb(e){let t=e?.execFn??ct;try{let{stdout:s}=await t("gh",["auth","status"],{timeout:1e4}),i=s.match(/Logged in to .+ account (\S+)/);return{name:"GitHub CLI authenticated",status:"pass",message:i?i[1]:"authenticated"}}catch(s){let n=(s?.stderr??"").match(/Logged in to .+ account (\S+)/);return n?{name:"GitHub CLI authenticated",status:"pass",message:n[1]}:{name:"GitHub CLI authenticated",status:"fail",message:"Not authenticated",fix:"Run: gh auth login"}}}async function Sb(e){let t=e?.execFn??ct;try{let{stdout:s}=await t("node",["--version"],{timeout:5e3}),i=s.trim().replace(/^v/,"");return parseInt(i.split(".")[0],10)>=18?{name:"Node.js version",status:"pass",message:i}:{name:"Node.js version",status:"fail",message:`${i} (requires >= 18.0)`,fix:"Upgrade Node.js: https://nodejs.org"}}catch{return{name:"Node.js version",status:"fail",message:"node not found",fix:"Install Node.js >= 18: https://nodejs.org"}}}async function $b(e){try{let t=Dr(e,".asm-doctor-write-test");return await hb(t,"test","utf-8"),await gb(t),{writable:!0,exists:!0}}catch{}try{return await pu(e,mu.W_OK),{writable:!0,exists:!0}}catch{}try{return await pu(e,mu.F_OK),{writable:!1,exists:!0}}catch{return{writable:!0,exists:!1}}}async function xb(e){let t=e.providers.filter(r=>r.enabled),s=0,i=0;for(let r of t){let o=oe(r.global);i++,(await $b(o)).writable&&s++}if(s===i)return{name:"Agent directories writable",status:"pass",message:`${s}/${i} providers`};let n=i-s;return{name:"Agent directories writable",status:"warn",message:`${s}/${i} providers (${n} not writable)`,fix:"Fix permissions on agent skill directories"}}async function Cb(){let e=pt();try{let t=await hu(e,"utf-8"),s=JSON.parse(t),i=[];return s.version===void 0&&i.push("version"),Array.isArray(s.providers)||i.push("providers"),i.length>0?{name:"Config file valid",status:"fail",message:`Missing required fields: ${i.join(", ")}`,fix:"Run: asm init"}:{name:"Config file valid",status:"pass",message:"OK"}}catch(t){return t?.code==="ENOENT"?{name:"Config file valid",status:"pass",message:"No config file (using defaults)"}:{name:"Config file valid",status:"fail",message:"Corrupted or unreadable config",fix:"Run: asm init, or delete corrupted config"}}}async function Eb(){let e=Xr();try{let t=await hu(e,"utf-8"),s=JSON.parse(t);if(s.version!==1||typeof s.skills!="object")return{name:"Lock file integrity",status:"fail",message:"Invalid lock file schema",fix:"Run: asm install to regenerate"};let i=s.skills,n=Object.entries(i),r=["source","installedAt","provider"],o=[];for(let[a,l]of n){if(typeof l!="object"||l===null){o.push(a);continue}let c=l;for(let d of r)if(!c[d]){o.push(a);break}}return o.length>0?{name:"Lock file integrity",status:"warn",message:`${n.length} skills tracked, ${o.length} with missing fields`,fix:"Run: asm install to regenerate"}:{name:"Lock file integrity",status:"pass",message:`${n.length} skills tracked`}}catch(t){return t?.code==="ENOENT"?{name:"Lock file integrity",status:"pass",message:"No lock file (first-time user)"}:{name:"Lock file integrity",status:"fail",message:"Corrupted lock file",fix:"Run: asm install to regenerate"}}}async function Ab(){try{let e=await fetch(vr,{method:"HEAD",signal:AbortSignal.timeout(5e3)});return e.ok?{name:"Registry reachable",status:"pass",message:"OK"}:{name:"Registry reachable",status:"fail",message:`HTTP ${e.status}`,fix:"Check network connection or proxy settings"}}catch{return{name:"Registry reachable",status:"fail",message:"Network error",fix:"Check network connection or proxy settings"}}}async function Pb(e,t){let s=Object.entries(t.skills);if(s.length===0)return{name:"Installed skills intact",status:"pass",message:"No skills in lock file"};let i=[];for(let[o,a]of s){let l=e.providers.find(f=>f.name===a.provider);if(!l){i.push(o);continue}let c=oe(l.global),d=Dr(c,o);try{(await gu(d)).isDirectory()||i.push(o)}catch{i.push(o)}}if(i.length===0)return{name:"Installed skills intact",status:"pass",message:`${s.length} skills verified`};let n=i[0],r=i.length>1?` (+${i.length-1} more)`:"";return{name:"Installed skills intact",status:"fail",message:`Missing: ${n}${r}`,fix:`Run: asm update ${n}`}}async function Nb(e,t){let s=new Set(Object.keys(t.skills)),i=[];for(let n of e.providers.filter(r=>r.enabled)){let r=oe(n.global);try{let o=await mb(r);for(let a of o)try{(await gu(Dr(r,a))).isDirectory()&&!s.has(a)&&i.push(a)}catch{}}catch{}}return i.length===0?{name:"No orphaned skills",status:"pass",message:"OK"}:{name:"No orphaned skills",status:"warn",message:`${i.length} skill(s) without lock entries`,fix:"Run: asm list to review"}}async function Ib(e){let t=e?.execFn??ct;try{let{stdout:s}=await t("df",["-Pk",yb()],{timeout:5e3}),i=s.trim().split(`
203
+ `);if(i.length<2)return{name:"Disk space",status:"warn",message:"Could not parse df output"};let n=i[1].split(/\s+/),r=parseInt(n[3],10);if(isNaN(r))return{name:"Disk space",status:"warn",message:"Could not parse available space"};let o=r/1024,a=o/1024;return o>100?{name:"Disk space",status:"pass",message:`OK (${a>=1?`${a.toFixed(1)} GB free`:`${Math.round(o)} MB free`})`}:{name:"Disk space",status:"fail",message:`${Math.round(o)} MB free (requires > 100 MB)`,fix:"Free disk space in home directory"}}catch{return{name:"Disk space",status:"warn",message:"Could not check disk space"}}}async function Lb(){try{let e=await di();if(e.shadowed.length===0)return e.resolved?{name:"No PATH shadowing",status:"pass",message:`single install at ${e.resolved.path}`}:{name:"No PATH shadowing",status:"pass",message:"asm not yet on PATH"};let t=e.resolved,s=e.shadowed[0].path,i=e.shadowed.length>1?` (+${e.shadowed.length-1} more)`:"";return{name:"No PATH shadowing",status:"warn",message:`resolved ${t.path}, shadowed ${s}${i}`,fix:"Remove the duplicate install (e.g. `bun remove -g agent-skill-manager` or `npm uninstall -g agent-skill-manager`) and keep only one."}}catch(e){return{name:"No PATH shadowing",status:"warn",message:`Could not scan PATH: ${e?.message??e}`}}}async function yu(){let e=await q(),t=await Le(),i=(await Promise.allSettled([bb(),wb(),vb(),kb(),Sb(),xb(e),Cb(),Eb(),Ab(),Pb(e,t),Nb(e,t),Ib(),Lb()])).map((a,l)=>a.status==="fulfilled"?a.value:{name:["Git available","Git version","GitHub CLI available","GitHub CLI authenticated","Node.js version","Agent directories writable","Config file valid","Lock file integrity","Registry reachable","Installed skills intact","No orphaned skills","Disk space","No PATH shadowing"][l],status:"fail",message:`Check threw: ${a.reason}`}),n=i.filter(a=>a.status==="pass").length,r=i.filter(a=>a.status==="warn").length,o=i.filter(a=>a.status==="fail").length;return{checks:i,passed:n,warnings:r,failures:o}}var Rb={pass:"\u2705",warn:"\u26A0\uFE0F ",fail:"\u274C"};function bu(e){let t=["Checking your environment...",""];for(let s of e.checks){let n=` ${Rb[s.status]} ${s.name}${s.message?` (${s.message})`:""}`;if(t.push(n),s.fix&&s.status!=="pass"){let r;s.fix.startsWith("Run: ")?r=s.fix:/^[a-z/~]/.test(s.fix)?r=`Run: ${s.fix}`:r=`Fix: ${s.fix}`,t.push(` \u2192 ${r}`)}}return t.push(""),t.push(`${e.passed} passed, ${e.warnings} warning${e.warnings!==1?"s":""}, ${e.failures} error${e.failures!==1?"s":""}`),t.join(`
204
+ `)}function wu(e){return JSON.stringify({checks:e.checks.map(t=>({name:t.name,status:t.status,message:t.message,...t.fix?{fix:t.fix}:{}})),summary:{passed:e.passed,warnings:e.warnings,failures:e.failures}},null,2)}import{readFile as qr,writeFile as Ob,stat as ut,copyFile as Tb,readdir as xu}from"fs/promises";import{join as ft,resolve as jr,basename as ge,isAbsolute as Br}from"path";var Fr="Relocate `README.md` out of the skill root so SKILL.md remains the sole top-level document (e.g., move it to `docs/README.md`).",vu=["name","description","version","license","creator","compatibility","allowed-tools","effort","tags","metadata"],ku=["add","analyze","audit","build","check","configure","convert","create","debug","deploy","detect","edit","evaluate","explain","export","extract","fetch","find","fix","format","generate","identify","improve","index","inspect","install","list","manage","migrate","optimize","parse","plan","prepare","publish","refactor","remove","rename","report","research","review","run","scaffold","scan","score","search","set","setup","show","summarize","sync","test","transform","translate","update","validate","verify","write"],Mb=["confirm","confirmation","error","errors","fail","failure","caution","warning","prerequisite","prerequisites","requires","requirements","rollback","dry-run","dry run","safety","validate","validation","check","backup"],Db=["acceptance criteria","expected output","expected result","edge case","edge cases","test","tests","testing","verify","verification","assert","example input","example output","given","then"],_b=["reference","references","see","template","templates","script","scripts","helper","helpers","link"],qb=["when to use","quick start","overview","instructions","steps","workflow","phases","progressive"];function Cu(e){let t=e.split(`
205
+ `);if(t.length===0||t[0].trim()!=="---")return{rawFrontmatter:null,body:e};for(let s=1;s<t.length;s++)if(t[s].trim()==="---"){let i=t.slice(1,s).join(`
206
+ `),n=t.slice(s+1).join(`
207
+ `);return{rawFrontmatter:i,body:n}}return{rawFrontmatter:t.slice(1).join(`
208
+ `),body:""}}function Eu(e){return e?e.split(`
209
+ `).length:0}function Ur(e){return e?e.split(/\s+/).map(t=>t.trim()).filter(Boolean).length:0}function Fb(e,t=1){return(e.match(/^#{1,6}\s+\S/gm)||[]).length>=t}function pi(e,t){let s=e.toLowerCase();return t.filter(i=>s.includes(i))}function jb(e){return/```[\s\S]+?```/m.test(e)}function Bb(e){return/^\s*[-*]\s+\S/m.test(e)||/^\s*\d+\.\s+\S/m.test(e)}function Ub(e,t,s,i){let n=[],r=[],o=0;s!==null?(o+=2,n.push("Has YAML frontmatter block.")):(n.push("SKILL.md has no YAML frontmatter."),r.push("Add a YAML frontmatter block delimited by `---` with at least `name` and `description` fields."));let a=!!(e.name&&e.name.trim()),l=!!(e.description&&e.description.trim());a?o+=1.5:(n.push("Missing required field: name."),r.push("Add `name:` to frontmatter (use the skill directory name).")),l?o+=1.5:(n.push("Missing required field: description."),r.push("Add a one-line `description:` to frontmatter."));let c=ae(e);c&&c!=="0.0.0"?o+=1:(n.push("Missing or default version."),r.push("Set `metadata.version` (or top-level `version`) using semver (e.g. 0.1.0).")),!!(e.creator||e["metadata.creator"])?o+=1:(n.push("Missing `creator`."),r.push("Add a `creator` field so users know who authored and maintains the skill.")),!!e.license?o+=1:(n.push("Missing `license`."),r.push("Add a `license` field (e.g. `license: MIT`)."));let m=t.trim().length>=20,y=Fb(t,1);if(m?(o+=1,n.push("Body has meaningful content.")):(n.push("Body content is too short (<20 chars of instructions)."),r.push("Flesh out the markdown body with at least one paragraph of instructions for the agent.")),y?(o+=1,n.push("Body uses markdown headings.")):(n.push("Body has no markdown headings."),r.push("Add section headings (e.g. `## When to Use`, `## Instructions`) so the agent can navigate the skill quickly.")),i){let h=i.find(g=>g.toLowerCase()==="readme.md");h&&(n.push(`\`${h}\` found at skill root; move it to a subdirectory (e.g., \`docs/README.md\`).`),r.push(Fr))}return{id:"structure",name:"Structure & completeness",score:Math.round(o),max:10,findings:n,suggestions:r}}function Vb(e,t){let s=[],i=[],n=0,r=(e.description||"").trim();if(!r)return s.push("No description."),i.push("Write a one-sentence description that says specifically what the skill does and when to use it."),{id:"description",name:"Description quality",score:0,max:10,findings:s,suggestions:i};let o=Ur(r);s.push(`Description is ${o} words.`),o>=8&&o<=40?n+=4:o>=5&&o<8?(n+=2,i.push("Lengthen the description slightly so it names both the action and the trigger (aim for 8\u201320 words).")):o>=41&&o<=60?(n+=2,i.push("Trim the description \u2014 aim for under 40 words. Move the long version to the markdown body.")):o>60?(n+=0,i.push("Description is too long. Keep it under 40 words; put detail in the body.")):(n+=0,i.push("Description is too short. Aim for 8\u201320 words."));let a=r.split(/\s+/)[0]?.toLowerCase().replace(/[^\w-]/g,"");return!!(a&&(ku.includes(a)||ku.includes(a.replace(/s$/,""))))?(n+=3,s.push("Starts with an action verb.")):(s.push(`Does not start with a recognized action verb (got "${a??""}").`),i.push('Start the description with an imperative action verb (e.g. "Generate...", "Analyze...", "Review...").')),/\buse when\b|\btrigger\b|\bwhen\b|\bfor\b/i.test(r)||/\b(before|after|during)\b/i.test(r)?(n+=3,s.push("Mentions a trigger or use-case signal.")):(s.push("No explicit trigger / use-case phrase."),i.push('Name the trigger in the description \u2014 e.g. "Use when...", "for reviewing...", "before publishing...".')),{id:"description",name:"Description quality",score:Math.min(10,Math.round(n)),max:10,findings:s,suggestions:i}}function Kb(e,t){let s=[],i=[],n=0,r=pi(t,qb);r.length>=2?(n+=3,s.push(`Progressive disclosure cues present: ${r.slice(0,3).join(", ")}.`)):r.length===1?(n+=1,i.push('Add clearer section labels \u2014 e.g. "## When to Use" and "## Instructions" \u2014 to support progressive disclosure.')):i.push('Structure the body with "## When to Use" and "## Instructions" sections so the agent reads only what it needs.'),Bb(t)?(n+=2,s.push("Uses lists or numbered steps.")):(s.push("No lists or steps detected."),i.push("Use bulleted or numbered steps to narrow the agent's degrees of freedom."));let o=jb(t),a=/\bexample\b/i.test(t);o&&a?(n+=2,s.push("Includes example code block.")):o||a?(n+=1,i.push('Back up examples with fenced code blocks labelled under "## Example" so the agent sees concrete input/output.')):i.push('Add an "## Example" section with a fenced code block showing the desired output.');let l=(t.match(/^\s*[-*0-9.]*\s*(Do|Use|Run|Call|Check|Validate|Return|Emit|Write|Read|Ask|Confirm|Avoid|Never|Always)\b/gim)||[]).length;l>=3?(n+=2,s.push(`Uses imperative voice (${l} cues).`)):l>=1?(n+=1,i.push("Favor imperative voice (Do / Use / Avoid / Never) to narrow the agent's choices.")):i.push('Rewrite instructions in the imperative mood \u2014 e.g. "Run `git status` first" instead of "you might want to run".');let c=Ur(t);return c>=80&&c<=3e3?(n+=1,s.push(`Body length within healthy range (${c} words).`)):c<80?(s.push(`Body is very short (${c} words).`),i.push("Expand the instructions; an underspecified skill gives the agent too much freedom.")):(s.push(`Body is very long (${c} words).`),i.push("Split large content into referenced files; keep SKILL.md focused under ~3000 words.")),{id:"prompt-engineering",name:"Prompt engineering",score:Math.min(10,Math.round(n)),max:10,findings:s,suggestions:i}}function Jb(e,t){let s=[],i=[],n=0,r=Ur(t);s.push(`Body is ${r} words.`),r>=120&&r<=1500?n+=4:r>=60&&r<120?(n+=2,i.push("Expand instructions slightly \u2014 too little context can push the agent to improvise.")):r>1500&&r<=3e3?(n+=2,i.push("Consider moving large sections into referenced files (e.g. `references/*.md`) and linking them instead of inlining.")):r>3e3&&(n+=0,i.push("Body is over 3000 words \u2014 split long content into referenced files or templates."));let o=pi(t,_b);o.length>=2?(n+=3,s.push(`References external files or links (${o.slice(0,3).join(", ")}).`)):o.length===1?(n+=1,i.push('Link out to supporting files (e.g. "see `references/examples.md`") instead of inlining them.')):i.push('Offload verbose content to referenced files and link to them ("see `./templates/x.md`").');let l=(t.match(/```[\s\S]+?```/g)||[]).filter(c=>Eu(c)>60);return l.length===0?(n+=2,s.push("No oversized code blocks.")):(s.push(`${l.length} code block(s) longer than 60 lines.`),i.push("Move large code blocks into referenced template files; link to them from SKILL.md.")),/\btoken\b|\bbudget\b|\bcontext window\b/i.test(t)&&(n+=1,s.push("Mentions tokens/budget/context window.")),{id:"context-efficiency",name:"Context efficiency",score:Math.min(10,Math.round(n)),max:10,findings:s,suggestions:i}}function Hb(e,t){let s=[],i=[],n=0,r=pi(t,Mb);r.length>=4?(n+=4,s.push(`Covers multiple safety cues (${r.slice(0,4).join(", ")}).`)):r.length>=2?(n+=2,s.push(`Mentions a few safety cues: ${r.join(", ")}.`),i.push("Add explicit error-handling and confirmation steps so the agent knows how to recover from failures.")):r.length===1?(n+=1,i.push('Expand the safety section \u2014 include prerequisites, validation steps, and what to do "on error".')):i.push("Describe prerequisites, confirmation prompts, and error-handling steps to reduce blast radius.");let o=/\b(rm\s|delete|remove|drop|force|overwrite|destructive)\b/i.test(t),a=/\bconfirm\b|\bdry-?run\b|\bare you sure\b|\bbackup\b/i.test(t);return o&&a?(n+=3,s.push("Destructive actions paired with confirmation/dry-run.")):o?(s.push("References destructive actions without explicit confirmation/dry-run."),i.push("Pair any destructive command with an explicit confirmation prompt, dry-run flag, or backup step.")):n+=1.5,/\bprerequisit/i.test(t)||/\brequire/i.test(t)||/\bdepend/i.test(t)?(n+=3,s.push("Declares prerequisites or requirements.")):(s.push("No prerequisites / requirements section."),i.push('Add a "## Prerequisites" block listing required tools, credentials, and environment state.')),{id:"safety",name:"Safety & guardrails",score:Math.min(10,Math.round(n)),max:10,findings:s,suggestions:i}}function Yb(e,t){let s=[],i=[],n=0,r=pi(t,Db);return r.length>=4?(n+=5,s.push(`Many testability cues present (${r.slice(0,4).join(", ")}).`)):r.length>=2?(n+=3,s.push(`Some testability cues: ${r.join(", ")}.`),i.push('Add an "## Acceptance Criteria" block listing verifiable outputs or checklist items.')):r.length===1?(n+=1,i.push('Add concrete "expected output" examples so the agent can self-check.')):i.push('Add a "## Acceptance Criteria" section with testable statements (e.g. "produces a JSON report with overall_score").'),/expected\s+(output|result|response)/i.test(t)?(n+=3,s.push("Describes expected output/result.")):i.push('Include an "Expected output" example so reviewers and the agent can verify correctness.'),/\bedge case|gotcha|pitfall|limitation/i.test(t)?(n+=2,s.push("Mentions edge cases or limitations.")):i.push('Add a short "Edge cases" list to describe inputs the skill should reject or handle carefully.'),{id:"testability",name:"Testability",score:Math.min(10,Math.round(n)),max:10,findings:s,suggestions:i}}function Gb(e,t){let s=[],i=[],n=0,r=(e.name||"").trim();if(r){let l=/^[a-z][a-z0-9-]*$/.test(r),c=r.length<=40;l&&c?(n+=4,s.push(`name "${r}" follows kebab-case convention.`)):(l||(s.push(`name "${r}" is not lowercase kebab-case.`),i.push(`Rename to lowercase kebab-case (e.g. "${r.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}").`)),c||s.push(`name is ${r.length} chars; keep it <= 40.`))}else i.push("Add a kebab-case `name` (e.g. `my-skill`).");let o=t.match(/^#{1,6}\s+(.+)$/gm)||[];return o.length>0&&(o.filter(d=>/^#{1,6}\s+([A-Z][a-z]+|Use|How|When|Workflow|Instructions|Examples|Steps|Acceptance)/.test(d)).length/o.length>=.5?(n+=3,s.push("Most headings use action/imperative labels.")):(n+=1,i.push("Rename body headings to action-oriented labels (e.g. `## Instructions`, `## When to Use`)."))),/(?:\s\s|\bTODO\b|\bFIXME\b|\?{2,})/.test(e.description||"")?i.push("Clean up description \u2014 remove TODOs, FIXMEs, double spaces, or trailing punctuation."):(n+=2,s.push("Description looks clean (no TODO/FIXME/stray noise).")),{id:"naming",name:"Naming & conventions",score:Math.min(10,Math.round(n)),max:10,findings:s,suggestions:i}}function Wt(e){let{content:t,skillPath:s,skillMdPath:i,rootEntries:n}=e,r=ie(t),{rawFrontmatter:o,body:a}=Cu(t),l=[Ub(r,a,o,n),Vb(r,a),Kb(r,a),Jb(r,a),Hb(r,a),Yb(r,a),Gb(r,a)];if(r.name&&ge(s)===r.name){let g=l.find(b=>b.id==="naming");g.score<g.max&&(g.score=Math.min(g.max,g.score+1),g.findings.push("Directory name matches frontmatter `name`."))}let c=l.reduce((g,b)=>g+b.score,0),d=l.reduce((g,b)=>g+b.max,0),f=Math.round(c/d*100),p="F";f>=90?p="A":f>=80?p="B":f>=65?p="C":f>=50&&(p="D");let m=[];l.find(g=>g.id==="structure")?.suggestions.includes(Fr)&&m.push(Fr);let h=[...l].sort((g,b)=>g.score/g.max-b.score/b.max);for(let g of h){for(let b of g.suggestions){if(m.length>=3)break;m.includes(b)||m.push(b)}if(m.length>=3)break}return{skillPath:s,skillMdPath:i,evaluatedAt:new Date().toISOString(),categories:l,overallScore:f,grade:p,topSuggestions:m,frontmatter:r}}async function Au(e){let t=Br(e)?e:jr(e),s;try{s=await ut(t)}catch{throw new Error(`Skill path does not exist: ${t}`)}let i,n;if(s.isFile())return i=t,n=await qr(i,"utf-8"),Wt({content:n,skillPath:ge(t)==="SKILL.md"?ge(t):t,skillMdPath:i});if(!s.isDirectory())throw new Error(`Skill path is not a directory or file: ${t}`);i=ft(t,"SKILL.md");try{n=await qr(i,"utf-8")}catch{throw new Error(`SKILL.md not found in ${t}. Run "asm init" to create one.`)}let r;try{r=await xu(t)}catch{r=void 0}return Wt({content:n,skillPath:t,skillMdPath:i,rootEntries:r})}function Wb(e){return e<=20?"low":e<=80?"medium":e<=250?"high":"max"}function zb(e){let t=e.split(`
210
+ `),s=[],i=[],n=0;for(;n<t.length;){let c=t[n];if(!c.trim()){n++;continue}let f=c.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);if(!f)return{newFrontmatter:e,changed:!1};let p=f[1],m=f[2];if(m===""||m===">"||m==="|"){let y=[c];for(n++;n<t.length;){let h=t[n];if(h.trim()===""){y.push(h),n++;continue}if(/^\s+/.test(h))y.push(h),n++;else break}i.push({key:p,text:y.join(`
211
+ `)})}else s.push({key:p,text:c}),n++}let r=c=>{let d=vu.indexOf(c);return d===-1?vu.length+1:d},o=[...s].sort((c,d)=>{let f=r(c.key),p=r(d.key);return f!==p?f-p:s.indexOf(c)-s.indexOf(d)}),a=o.some((c,d)=>c!==s[d]);return{newFrontmatter:[...o.map(c=>c.text),...i.map(c=>c.text)].join(`
212
+ `),changed:a}}function Qb(e,t={}){let s=[],i=[],n=e.replace(/\r\n/g,`
213
+ `);n!==e&&s.push({id:"normalise-line-endings",description:"Convert CRLF line endings to LF."});let r=n.split(`
214
+ `),o=r.map(g=>g.replace(/[ \t]+$/g,""));o.some((g,b)=>g!==r[b])&&s.push({id:"strip-trailing-whitespace",description:"Strip trailing whitespace from lines."}),n=o.join(`
215
+ `);let{rawFrontmatter:a,body:l}=Cu(n),c=ie(n);if(a===null)return i.push({id:"missing-frontmatter",description:"SKILL.md has no frontmatter \u2014 not auto-fixable (requires author decisions)."}),{newContent:n,applied:s,skipped:i};let d=a;if(!!(c.version||c["metadata.version"])||(d=_r(d,"version","0.1.0"),s.push({id:"add-missing-version",description:"Add `version: 0.1.0`."})),!!!(c.creator||c["metadata.creator"])){let g=t.gitAuthor?.trim();g?(d=_r(d,"creator",g),s.push({id:"add-missing-creator",description:`Add \`creator: ${g}\` from git config.`})):i.push({id:"add-missing-creator",description:"Missing `creator` \u2014 no git user.name found to fill in safely."})}if(!c.effort){let g=Wb(Eu(l));d=_r(d,"effort",g),s.push({id:"infer-missing-effort",description:`Infer \`effort: ${g}\` from body size.`})}c.description||i.push({id:"missing-description",description:"Missing `description` \u2014 content-level fix, left to the author."});let m=zb(d);m.changed&&(s.push({id:"reorder-frontmatter",description:"Reorder frontmatter fields to canonical order."}),d=m.newFrontmatter);let y=l.replace(/^\n+/,""),h=`---
216
+ ${d.replace(/^\n+|\n+$/g,"")}
216
217
  ---
217
218
 
218
- ${O}`;if(!K.endsWith(`
219
- `))K+=`
220
- `;if(K===$.replace(/\r\n/g,`
221
- `));return{newContent:K,applied:Z,skipped:Q}}function d4($,q,Z){if(new RegExp(`^${q}:\\s*`,"m").test($))return $;let X=/[:#{}\[\],&*?|<>=!%@`"']/.test(Z)?JSON.stringify(Z):Z,z=$.length===0||$.endsWith(`
219
+ ${y}`;return h.endsWith(`
220
+ `)||(h+=`
221
+ `),e.replace(/\r\n/g,`
222
+ `),{newContent:h,applied:s,skipped:i}}function _r(e,t,s){if(new RegExp(`^${t}:\\s*`,"m").test(e))return e;let n=/[:#{}\[\],&*?|<>=!%@`"']/.test(s)?JSON.stringify(s):s,r=e.length===0||e.endsWith(`
222
223
  `)?"":`
223
- `;return`${$}${z}${q}: ${X}
224
- `}function nV($,q,Z="SKILL.md"){if($===q)return"";let Q=$.split(`
225
- `),X=q.split(`
226
- `),z=[`--- a/${Z}`,`+++ b/${Z}`],J=0;while(J<Q.length&&J<X.length&&Q[J]===X[J])J++;let Y=0;while(Y<Q.length-J&&Y<X.length-J&&Q[Q.length-1-Y]===X[X.length-1-Y])Y++;let G=Q.slice(J,Q.length-Y),U=X.slice(J,X.length-Y),H=J+1,V=J+1;z.push(`@@ -${H},${G.length} +${V},${U.length} @@`);let B=Q.slice(Math.max(0,J-3),J).map((O)=>` ${O}`),_=Q.slice(Q.length-Y,Math.min(Q.length,Q.length-Y+3)).map((O)=>` ${O}`);z.push(...B);for(let O of G)z.push(`-${O}`);for(let O of U)z.push(`+${O}`);return z.push(..._),z.join(`
227
- `)}async function b8($,q){let Z=n4($)?$:l4($),Q,X=await G$(Z).catch(()=>null);if(!X)throw Error(`Skill path does not exist: ${Z}`);if(X.isFile())Q=Z;else if(X.isDirectory())Q=U$(Z,"SKILL.md");else throw Error(`Skill path is not a directory or file: ${Z}`);let z;try{z=await c4(Q,"utf-8")}catch{throw Error(`SKILL.md not found at ${Q}.`)}let J=lV(z,{gitAuthor:q.gitAuthor}),Y=nV(z,J.newContent),G=null;if(!q.dryRun&&J.newContent!==z)G=`${Q}.bak`,await DV(Q,G),await NV(Q,J.newContent,"utf-8");return{report:g$({content:q.dryRun?z:J.newContent,skillPath:Z,skillMdPath:Q}),applied:J.applied,skipped:J.skipped,diff:Y,dryRun:q.dryRun,backupPath:G,skillMdPath:Q}}async function x8(){try{let $=Bun.spawn(["git","config","--global","--get","user.name"],{stdout:"pipe",stderr:"pipe"}),q=await new Response($.stdout).text();if(await $.exited!==0)return null;let Q=q.trim();return Q?Q:null}catch{return null}}function aV($,q,Z=20){let Q=Math.round($/q*Z);return"".repeat(Q)+"".repeat(Math.max(0,Z-Q))}function oq($){let q=[];q.push(`Skill evaluation: ${$.skillPath}`),q.push(`SKILL.md: ${$.skillMdPath}`),q.push(""),q.push(`Overall score: ${$.overallScore}/100 (${$.grade})`);let Z=($.providers??[]).filter((Q)=>Q.id!=="quality");for(let Q of Z){let X=Q.passed?"pass":"fail",z=`${Q.id}@${Q.version}`;q.push(` ${z}: ${Q.score}/100 ${X}`)}q.push(""),q.push("Categories:");for(let Q of $.categories)q.push(` ${Q.name.padEnd(28)} ${String(Q.score).padStart(2)}/${Q.max} ${aV(Q.score,Q.max)}`);if(q.push(""),$.topSuggestions.length>0){q.push("Top suggestions:");for(let Q of $.topSuggestions)q.push(` ${Q}`)}else q.push("No suggestions skill looks great.");for(let Q of Z){if(Q.findings.length===0)continue;q.push(""),q.push(`${Q.id}@${Q.version} findings:`);for(let X of Q.findings)q.push(` [${X.severity}] ${X.message}`)}return q.join(`
228
- `)}function f8($){return JSON.stringify($,null,2)}function y8($){let q=[];if($.applied.length===0&&$.skipped.length===0)return q.push("No fixes needed SKILL.md is already clean."),q.join(`
229
- `);if($.applied.length>0){q.push(`${$.dryRun?"Would apply":"Applied"} ${$.applied.length} fix(es):`);for(let Z of $.applied)q.push(` ${Z.description}`)}if($.skipped.length>0){q.push(""),q.push(`Skipped ${$.skipped.length} issue(s) (not auto-fixable):`);for(let Z of $.skipped)q.push(` ${Z.description}`)}if($.diff)q.push(""),q.push("Diff:"),q.push($.diff);if(!$.dryRun&&$.backupPath)q.push(""),q.push(`Backup: ${$.backupPath}`);return q.join(`
230
- `)}async function iV($){let q;try{q=await PV($)}catch{return[]}let Z=[];for(let Q of q){if(Q.startsWith(".")||Q==="node_modules"||Q==="dist"||Q==="build")continue;let X=U$($,Q),z;try{z=await G$(X)}catch{continue}if(!z.isDirectory())continue;let J=U$(X,"SKILL.md");try{if((await G$(J)).isFile())Z.push(X)}catch{}}return Z.sort((Q,X)=>O0(Q).localeCompare(O0(X))),Z}async function D8($){let q=U$($,"SKILL.md");try{if((await G$(q)).isFile())return{kind:"single",skillDirs:[$]}}catch{}let Z=await iV($);if(Z.length>0)return{kind:"collection",skillDirs:Z};return{kind:"none",skillDirs:[]}}function i4($){if(!$)return!1;if($.startsWith("github:"))return!0;if(/^https?:\/\/github\.com\//i.test($))return!0;return!1}function P8($){return{skillPath:$,skillMdPath:U$($,"SKILL.md"),label:O0($)}}async function k8($,q={}){if(!$)throw Error("resolveEvalInput: input must be a non-empty string");if(i4($)){if(!q.fetchRemote)throw Error(`Remote evaluation is not available in this context: "${$}"`);let z=await q.fetchRemote($),J;try{J=await D8(z.rootDir)}catch(Y){throw await z.cleanup().catch(()=>{}),Y}if(J.kind==="none")throw await z.cleanup().catch(()=>{}),Error(`No SKILL.md found at ${z.rootDir} (source: ${$}). The location is neither a single skill nor a skill collection.`);return{targets:J.skillDirs.map(P8),isCollection:J.kind==="collection",cleanup:z.cleanup,provenance:{input:$,remote:!0,sourceRef:z.sourceRef,commitSha:z.commitSha,tempPath:z.rootDir}}}let Z=n4($)?$:l4($),Q;try{Q=await G$(Z)}catch{throw Error(`Skill path does not exist: ${Z}`)}if(Q.isFile())return{targets:[{skillPath:O0(Z)==="SKILL.md"?O0(Z):Z,skillMdPath:Z,label:O0(Z)}],isCollection:!1,cleanup:async()=>{},provenance:{input:$,remote:!1,sourceRef:null}};if(!Q.isDirectory())throw Error(`Skill path is not a directory or file: ${Z}`);let X=await D8(Z);if(X.kind==="none")throw Error(`No SKILL.md found in ${Z}. Pass a skill directory, a SKILL.md file, or a collection root with SKILL.md in its children.`);return{targets:X.skillDirs.map(P8),isCollection:X.kind==="collection",cleanup:async()=>{},provenance:{input:$,remote:!1,sourceRef:null}}}function v8($){let q=$.filter((H)=>H.report!==null),Z=$.length,Q=Z-q.length;if(q.length===0)return{total:Z,succeeded:0,failed:Q,meanScore:null,top:null,bottom:null};let X=q.map((H)=>H.report.overallScore),z=X.reduce((H,V)=>H+V,0)/X.length,J=Math.round(z),Y=[...q].sort((H,V)=>V.report.overallScore-H.report.overallScore),G=Y[0],U=Y[Y.length-1];return{total:Z,succeeded:q.length,failed:Q,meanScore:J,top:{label:G.label,score:G.report.overallScore},bottom:{label:U.label,score:U.report.overallScore}}}async function h8($,q,Z){let Q=Array($.length),X=0,z=Math.max(1,Math.floor(q)),J=[],Y=Math.min(z,$.length);for(let G=0;G<Y;G++)J.push((async()=>{while(!0){let U=X++;if(U>=$.length)break;Q[U]=await Z($[U],U)}})());return await Promise.all(J),Q}function g8($,q=28){let Z=[];if(Z.push(""),Z.push("Batch summary:"),Z.push(` Skills evaluated: ${$.aggregate.succeeded}/${$.aggregate.total}`+($.aggregate.failed>0?` (${$.aggregate.failed} failed)`:"")),$.aggregate.meanScore!==null)Z.push(` Mean score: ${$.aggregate.meanScore}/100`);if($.aggregate.top)Z.push(` Top: ${$.aggregate.top.label} (${$.aggregate.top.score}/100)`);if($.aggregate.bottom&&$.aggregate.bottom.label!==$.aggregate.top?.label)Z.push(` Bottom: ${$.aggregate.bottom.label} (${$.aggregate.bottom.score}/100)`);if($.provenance.remote){if($.provenance.sourceRef)Z.push(` Source: ${$.provenance.sourceRef}`);if($.provenance.commitSha)Z.push(` Commit: ${$.provenance.commitSha}`);if($.provenance.tempPath)Z.push(` Fetched to: ${$.provenance.tempPath}`)}return Z.join(`
231
- `)}function u8($){return{provenance:{input:$.provenance.input,remote:$.provenance.remote,source_ref:$.provenance.sourceRef??null,commit_sha:$.provenance.commitSha??null,temp_path:$.provenance.tempPath??null},aggregate:{total:$.aggregate.total,succeeded:$.aggregate.succeeded,failed:$.aggregate.failed,mean_score:$.aggregate.meanScore,top:$.aggregate.top,bottom:$.aggregate.bottom},results:$.results.map((q)=>({label:q.label,skill_path:q.skillPath,error:q.error,report:q.report?sq(q.report,null):null}))}}function sq($,q=null){return{skill_path:$.skillPath,skill_md_path:$.skillMdPath,overall_score:$.overallScore,grade:$.grade,categories:$.categories.map((Z)=>({id:Z.id,name:Z.name,score:Z.score,max:Z.max,findings:Z.findings,suggestions:Z.suggestions})),top_suggestions:$.topSuggestions,providers:$.providers?.map((Z)=>({id:Z.id,version:Z.version,schemaVersion:Z.schemaVersion,score:Z.score,passed:Z.passed,categories:Z.categories.map((Q)=>({id:Q.id,name:Q.name,score:Q.score,max:Q.max,findings:Q.findings??[]})),findings:Z.findings}))??[],fix:q?{dry_run:q.dryRun,applied:q.applied,skipped:q.skipped,backup_path:q.backupPath,diff:q.diff}:null}}var oV=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function sV($){if(typeof $!=="string")return null;let q=oV.exec($.trim());if(!q)return null;let[,Z,Q,X,z]=q;return{major:Number(Z),minor:Number(Q),patch:Number(X),prerelease:z?z.split("."):[]}}function tV($,q){let Z=sV($);if(!Z)throw Error(`invalid semver: ${q} "${$}"`);return Z}var o4=new Map;function s4($){if(!$||typeof $.id!=="string"||$.id.length===0)throw Error("register: provider.id is required");if(tV($.version,`provider ${$.id} version`),typeof $.schemaVersion!=="number"||!Number.isInteger($.schemaVersion))throw Error(`register: provider ${$.id} schemaVersion must be an integer`);let q=o4.get($.id)??[];if(q.some((Z)=>Z.version===$.version))throw Error(`register: provider ${$.id}@${$.version} already registered`);q.push($),o4.set($.id,q)}function tq(){let $=[];for(let q of o4.values())for(let Z of q)$.push(Z);return $}import{stat as rV}from"fs/promises";var m8="quality",p8="1.0.0",d8=1;function eV($){return $.topSuggestions.map((q)=>({severity:"info",message:q}))}function $H($){return $.categories.map((q)=>({id:q.id,name:q.name,score:q.score,max:q.max}))}var c8={id:m8,version:p8,schemaVersion:d8,description:"Static linter for SKILL.md structure, description, and safety.",async applicable($){try{if(!(await rV($.skillMdPath)).isFile())return{ok:!1,reason:`${$.skillMdPath} is not a file`};return{ok:!0}}catch{return{ok:!1,reason:`SKILL.md not found at ${$.skillMdPath}`}}},async run($,q){let Z=await S8($.skillPath);return{providerId:m8,providerVersion:p8,schemaVersion:d8,score:Z.overallScore,passed:Z.grade!=="F",categories:$H(Z),findings:eV(Z),raw:Z,startedAt:"",durationMs:0}}};import{readFile as qH,stat as ZH}from"fs/promises";var l8="skill-creator",n8="1.0.0",a8=1,QH=new Set(["name","description","license","allowed-tools","metadata","compatibility","effort"]),i8=new Set(["low","medium","high","max"]);function XH($){if(!$.startsWith("---"))return null;let q=$.split(`
232
- `);if(q.length<3||q[0]?.trim()!=="---")return null;let Z=q.findIndex((Q,X)=>X>0&&Q.trim()==="---");if(Z===-1)return null;return q.slice(1,Z).join(`
233
- `)}function rq($){return{severity:$.severity,message:$.message,code:$.id,categoryId:"validation"}}function t($,q,Z,Q,X,z){$.push({id:q,label:Z,passed:Q,severity:X,message:z})}function eq($,q,Z){let Q=q.filter((X)=>X.severity==="error");return{skillPath:$.skillPath,skillMdPath:$.skillMdPath,validatedAt:new Date().toISOString(),checkCount:Q.length,passedChecks:Q.filter((X)=>X.passed).length,checks:q,frontmatter:Z}}async function zH($){let q=await qH($.skillMdPath,"utf-8"),Z=[],Q=XH(q);if(Q===null){t(Z,"missing-frontmatter","Frontmatter exists",!1,"error","SKILL.md must start with a YAML frontmatter block.");let F=eq($,Z,null);return{score:0,passed:!1,findings:Z.map(rq),raw:F}}t(Z,"frontmatter-present","Frontmatter exists",!0,"error","SKILL.md contains a YAML frontmatter block.");let X;try{X=y$(Q)}catch(F){t(Z,"invalid-yaml","Frontmatter parses as YAML",!1,"error",`Invalid YAML in frontmatter: ${F?.message??String(F)}`);let A=eq($,Z,null);return{score:0,passed:!1,findings:Z.map(rq),raw:A}}if(!X||typeof X!=="object"||Array.isArray(X)){t(Z,"frontmatter-not-object","Frontmatter is a mapping",!1,"error","Frontmatter must parse to a YAML object.");let F=eq($,Z,null);return{score:0,passed:!1,findings:Z.map(rq),raw:F}}let z=X;t(Z,"frontmatter-object","Frontmatter is a mapping",!0,"error","Frontmatter parses to a YAML object.");let J=Object.keys(z).filter((F)=>!QH.has(F));t(Z,"allowed-keys","Allowed top-level keys only",J.length===0,"error",J.length===0?"Frontmatter uses only the allowed top-level keys.":`Unexpected frontmatter key(s): ${J.sort().join(", ")}.`);let Y=z.name,G=typeof Y==="string"?Y.trim():"";if(t(Z,"name-present","Name is present and non-empty",G.length>0,"error",G.length>0?"Frontmatter includes a non-empty `name`.":"Frontmatter must include a non-empty string `name`."),G.length>0){let F=/^[a-z0-9-]+$/.test(G)&&!G.startsWith("-")&&!G.endsWith("-")&&!G.includes("--")&&G.length<=64;t(Z,"name-kebab-case","Name follows skill-creator naming rules",F,"error",F?"Name follows the skill-creator kebab-case naming rules.":"Name must be kebab-case, avoid consecutive/edge hyphens, and stay within 64 characters.")}let U=z.description,H=typeof U==="string"?U.trim():"";if(t(Z,"description-present","Description is present and non-empty",H.length>0,"error",H.length>0?"Frontmatter includes a non-empty `description`.":"Frontmatter must include a non-empty string `description`."),H.length>0){let F=!H.includes(`
234
- `)&&!H.includes("\r")&&!H.includes("<")&&!H.includes(">")&&H.length<=1024;t(Z,"description-shape","Description follows skill-creator formatting rules",F,"error",F?"Description is single-line, angle-bracket free, and within 1024 characters.":"Description must be a single line, avoid angle brackets, and stay within 1024 characters.")}let V=z.effort;t(Z,"effort-enum","Effort uses the supported enum",V===void 0||typeof V==="string"&&i8.has(V.trim()),"error",V===void 0||typeof V==="string"&&i8.has(V.trim())?"Effort is omitted or uses a supported value.":"Effort must be one of: low, medium, high, max.");let B=z.compatibility;if(B!==void 0){let F=typeof B==="string"&&B.length<=500;t(Z,"compatibility-shape","Compatibility is a short string",F,"error",F?"Compatibility is a valid short string.":"Compatibility must be a string no longer than 500 characters.")}let _=/don'?t use (?:for|when|if|on)|not (?:for|intended for|suitable for|meant for)\b|skip (?:for|when|if)|avoid (?:using )?(?:for|when|on)|never (?:use )?for\b|only (?:use )?for\b/i.test(H);t(Z,"negative-trigger-clause","Description includes a negative-trigger clause",_,"warning",_?"Description names adjacent cases that should not trigger the skill.":"Description appears to lack a negative-trigger clause; consider naming adjacent cases that should not trigger the skill.");let O=eq($,Z,z),K=O.checkCount===0?100:Math.round(O.passedChecks/O.checkCount*100),L=Z.filter((F)=>!F.passed).map(rq);return{score:K,passed:L.every((F)=>F.severity!=="error"),findings:L,raw:O}}var o8={id:l8,version:n8,schemaVersion:a8,description:"Deterministic SKILL.md validation ported from skill-creator rules.",async applicable($){try{if(!(await ZH($.skillMdPath)).isFile())return{ok:!1,reason:`${$.skillMdPath} is not a file`};return{ok:!0}}catch{return{ok:!1,reason:`SKILL.md not found at ${$.skillMdPath}`}}},async run($,q){let Z=await zH($);return{providerId:l8,providerVersion:n8,schemaVersion:a8,score:Z.score,passed:Z.passed,categories:[{id:"validation",name:"Deterministic validation",score:Z.raw.passedChecks,max:Z.raw.checkCount,findings:Z.findings.length>0?Z.findings:void 0}],findings:Z.findings,raw:Z.raw,startedAt:"",durationMs:0}}};function s8(){s4(c8),s4(o8)}var t8=!1;function $1(){if(t8)return;s8(),t8=!0}function q1(){return $1(),tq()}function r8($){if($ instanceof Error)return $.message;if(typeof $==="string")return $;try{return JSON.stringify($)}catch{return String($)}}function e8($,q,Z,Q,X){let z={severity:"error",message:Q,code:X};return{providerId:$.id,providerVersion:$.version,schemaVersion:$.schemaVersion,score:0,passed:!1,categories:[],findings:[z],raw:void 0,startedAt:q,durationMs:Z}}async function Z1($,q,Z={}){let Q=new Date().toISOString(),X=performance.now(),z={id:$.id,version:$.version,schemaVersion:$.schemaVersion},J=new AbortController;if(Z.signal)if(Z.signal.aborted)J.abort(Z.signal.reason);else Z.signal.addEventListener("abort",()=>J.abort(Z.signal?.reason));let Y=null;if(typeof Z.timeoutMs==="number"&&Z.timeoutMs>0)Y=setTimeout(()=>J.abort(Error("timeout")),Z.timeoutMs);let G={...Z,signal:J.signal};try{let U=await Promise.race([$.run(q,G).then((B)=>({kind:"ok",value:B})),new Promise((B)=>{if(J.signal.aborted){B({kind:"timeout"});return}J.signal.addEventListener("abort",()=>B({kind:"timeout"}))})]),H=Math.max(0,Math.round(performance.now()-X));if(U.kind==="timeout"){let B=J.signal.reason,_=B instanceof Error&&B.message==="timeout"?`provider timed out after ${Z.timeoutMs}ms`:`provider aborted: ${r8(B)}`;return e8(z,Q,H,_,B instanceof Error&&B.message==="timeout"?"timeout":"aborted")}let V=U.value;return{...V,providerId:z.id,providerVersion:z.version,schemaVersion:V.schemaVersion??z.schemaVersion,startedAt:Q,durationMs:H}}catch(U){let H=Math.max(0,Math.round(performance.now()-X));return e8(z,Q,H,r8(U),"provider-threw")}finally{if(Y)clearTimeout(Y)}}function JH($){if($>=90)return"A";if($>=80)return"B";if($>=65)return"C";if($>=50)return"D";return"F"}function $6($){return{id:$.providerId,version:$.providerVersion,schemaVersion:$.schemaVersion,score:$.score,passed:$.passed,categories:$.categories,findings:$.findings,raw:$.raw}}function q6($,q){return{providerId:$.providerId,providerVersion:$.providerVersion,schemaVersion:$.schemaVersion,passed:$.passed,overallScore:$.score,grade:JH($.score),categories:$.categories.map((Z)=>({id:Z.id,name:Z.name,score:Z.score,max:Z.max})),evaluatedAt:$.startedAt,evaluatedVersion:q}}function u$($){return[...$].sort((q,Z)=>{if(q.id==="quality"&&Z.id!=="quality")return-1;if(Z.id==="quality"&&q.id!=="quality")return 1;return q.id.localeCompare(Z.id)})}var n={SKILL_NOT_FOUND:"SKILL_NOT_FOUND",AUDIT_FAILED:"AUDIT_FAILED",INSTALL_FAILED:"INSTALL_FAILED",PUBLISH_FAILED:"PUBLISH_FAILED",NETWORK_ERROR:"NETWORK_ERROR",INVALID_ARGUMENT:"INVALID_ARGUMENT",UNKNOWN_ERROR:"UNKNOWN_ERROR"};function c0(){let{log:$,info:q}=console,Z=(...Q)=>process.stderr.write(Q.map(String).join(" ")+`
235
- `);return console.log=Z,console.info=Z,()=>{console.log=$,console.info=q}}function Q6($){return{timestamp:new Date().toISOString(),asm_version:Z6,duration_ms:Math.round(performance.now()-$)}}function l($,q,Z){let Q={version:1,command:$,status:"ok",data:q,meta:Q6(Z)},X=process.stdout.isTTY?2:0;return JSON.stringify(Q,null,X)}function a($,q,Z,Q,X){let z={version:1,command:$,status:"error",error:{code:q,message:Z,...X!==void 0?{details:X}:{}},meta:Q6(Q)},J=process.stdout.isTTY?2:0;return JSON.stringify(z,null,J)}import{writeFile as AH,mkdir as IH,unlink as TH,readFile as MH}from"fs/promises";import{join as z1}from"path";import{readdir as YH,readFile as GH}from"fs/promises";import{join as UH}from"path";function t4($){let q=new Set,Z=$.toLowerCase().split(/[\s\-_.,;:()[\]{}"']+/);for(let Q of Z)if(Q.length>=2)q.add(Q);return q}var WH=10,VH=5,HH=3,BH=1;function KH($,q){let Z=t4($),Q=t4(q.name),X=t4(q.description),z=0;for(let J of Z){if(Q.has(J))z+=WH;if(X.has(J))z+=HH;if(q.name.toLowerCase().includes(J))z+=VH;if(q.description.toLowerCase().includes(J))z+=BH}return z}async function X6($){let q=new Map,Z;try{Z=await YH($)}catch{return q}for(let Q of Z){if(!Q.endsWith(".json"))continue;let X=UH($,Q);try{let z=await GH(X,"utf-8"),J=JSON.parse(z);for(let Y of J.skills){if(!("license"in Y))Y.license="";if(!("creator"in Y))Y.creator="";if(!("compatibility"in Y))Y.compatibility="";if(!("allowedTools"in Y))Y.allowedTools=[];if(!("verified"in Y))Y.verified=!1}q.set(`${J.owner}/${J.repo}`,J)}catch{}}return q}async function Q1(){let $=await X6(Y6()),q=await X6(m$()),Z=new Map($);for(let[Q,X]of q)Z.set(Q,X);return Array.from(Z.values())}var _H=["license","creator","version"];function z6($){return _H.includes($)}function J6($,q){return $[q]||""}function OH($,q){if(q.has)for(let Z of q.has){if(!z6(Z))continue;if(!J6($,Z))return!1}if(q.missing)for(let Z of q.missing){if(!z6(Z))continue;if(J6($,Z))return!1}return!0}function G6($){let q=[];if(!$.license)q.push("license");if(!$.creator)q.push("creator");if(!$.version||$.version==="0.0.0")q.push("version");return q}async function X1($,q=20,Z){let Q=await Q1(),X=[],z=!$&&Z;for(let J of Q)for(let Y of J.skills){if(Z&&!OH(Y,Z))continue;let G=z?1:KH($,Y);if(G>0)X.push({skill:Y,repo:{owner:J.owner,repo:J.repo},score:G})}return X.sort((J,Y)=>Y.score-J.score),X.slice(0,q)}async function U6(){return(await Q1()).reduce((q,Z)=>q+Z.skillCount,0)}var LH=[{label:"obfuscation:atob",pattern:/\batob\s*\(/},{label:"obfuscation:base64",pattern:/(?:^|[=:\s])[A-Za-z0-9+/]{40,}={1,2}(?:\s|$)/m},{label:"obfuscation:hex-escape",pattern:/\\x[0-9a-fA-F]{2}(?:\\x[0-9a-fA-F]{2}){3,}/},{label:"credential-leak:api-key",pattern:/\bAPI_KEY\s*=\s*['"][^'"]+['"]/},{label:"credential-leak:secret",pattern:/\bSECRET_KEY\s*=\s*['"][^'"]+['"]/},{label:"credential-leak:password",pattern:/\bPASSWORD\s*=\s*['"][^'"]+['"]/}];function W6($,q){let Z=[];if(!$.name||!$.name.trim())Z.push("missing frontmatter field: name");if(!$.description||!$.description.trim())Z.push("missing frontmatter field: description");if(FH(q).trim().length<20)Z.push("SKILL.md body too short (less than 20 chars of instructions)");for(let{label:X,pattern:z}of LH)if(z.test(q))Z.push(`malicious pattern detected: ${X}`);return{verified:Z.length===0,reasons:Z}}function FH($){let q=$.trimStart();if(!q.startsWith("---"))return q;let Z=q.indexOf(`
236
- ---`,3);if(Z===-1)return"";return q.slice(Z+4)}async function RH(){let $=m$();return await IH($,{recursive:!0}),$}async function V6($){await E0();let q;try{q=P0($)}catch(Q){return{success:!1,repoIndex:null,error:Q.message}}if(q.isLocal)return{success:!1,repoIndex:null,error:"Local paths are not supported for indexing. Use a GitHub source instead."};E(`ingester: cloning ${q.owner}/${q.repo}`);let Z=null;try{Z=await S0(q),E(`ingester: discovering skills in ${Z}`);let Q=await t$(Z);E(`ingester: found ${Q.length} skills`);let X=[];for(let G of Q){let U=z1(Z,G.relPath,"SKILL.md"),H="";try{H=await MH(U,"utf-8")}catch{E(`ingester: could not read SKILL.md at ${U}`)}let V=W6(G,H);if(!V.verified)E(`ingester: ${G.name} not verified: ${V.reasons.join(", ")}`);let B=typeof G.tokenCount==="number"?G.tokenCount:H?o$(H):void 0,_,O;if(H){try{let K=g$({content:H,skillPath:G.relPath||G.name,skillMdPath:U});_={overallScore:K.overallScore,grade:K.grade,categories:K.categories.map((L)=>({id:L.id,name:L.name,score:L.score,max:L.max})),evaluatedAt:K.evaluatedAt,evaluatedVersion:G.version||void 0}}catch(K){E(`ingester: eval failed for ${G.name}: ${K}`)}try{let K={skillPath:z1(Z,G.relPath),skillMdPath:U},F=(await Promise.all(u$(q1()).map(async(A)=>{if(!(await A.applicable(K,{})).ok)return null;return Z1(A,K)}))).filter((A)=>A!==null).map((A)=>q6(A,G.version||void 0));if(F.length>0)O=Object.fromEntries(F.filter((A)=>A.providerId).map((A)=>[A.providerId,A]))}catch(K){E(`ingester: provider eval failed for ${G.name}: ${K}`)}}X.push({name:G.name,description:G.description,version:G.version,license:G.license,creator:G.creator,compatibility:G.compatibility,allowedTools:G.allowedTools,installUrl:`github:${q.owner}/${q.repo}${q.ref?`#${q.ref}`:""}${G.relPath?`:${G.relPath}`:""}`,relPath:G.relPath,verified:V.verified,tokenCount:B,evalSummary:_,evalSummaries:O})}let z={repoUrl:q.cloneUrl,owner:q.owner,repo:q.repo,updatedAt:new Date().toISOString(),skillCount:X.length,skills:X},J=await RH(),Y=z1(J,`${q.owner}_${q.repo}.json`);return await AH(Y,JSON.stringify(z,null,2)+`
237
- `,"utf-8"),E(`ingester: wrote index to ${Y}`),{success:!0,repoIndex:z}}catch(Q){return{success:!1,repoIndex:null,error:Q.message}}finally{if(Z)await e(Z)}}async function H6(){return(await Q1()).map((q)=>({owner:q.owner,repo:q.repo,skillCount:q.skillCount,updatedAt:q.updatedAt})).sort((q,Z)=>Z.skillCount-q.skillCount)}async function B6($,q){let Z=m$(),Q=z1(Z,`${$}_${q}.json`);try{return await TH(Q),!0}catch{return!1}}import{join as v6}from"path";function jH($){switch($){case"dangerous":return 3;case"warning":return 2;case"caution":return 1;default:return 0}}function z2($){return{verdict:$.every((q)=>q.verdict==="safe")?"safe":$.some((q)=>q.verdict==="dangerous")?"dangerous":"warning",findings:$.map((q)=>({skill:q.skillName,verdict:q.verdict,verdict_reason:q.verdictReason,total_files:q.totalFiles,total_lines:q.totalLines})),risk_score:$.reduce((q,Z)=>q+jH(Z.verdict),0)}}function wH($){let q=$.slice(2),Z={command:null,subcommand:null,positional:[],flags:{help:!1,version:!1,json:!1,yes:!1,noColor:!1,scope:"both",sort:"name",provider:null,name:null,force:!1,path:null,all:!1,verbose:!1,flat:!1,transport:"auto",method:"default",installed:!1,available:!1,has:[],missing:[],dryRun:!1,machine:!1,noCache:!1,fix:!1,compact:!1,summary:!1,groupBy:null,limit:0,concurrency:0,keep:!1}},Q=0;while(Q<q.length){let X=q[Q];if(X==="--help"||X==="-h")Z.flags.help=!0;else if(X==="--version"||X==="-v")Z.flags.version=!0;else if(X==="--json")Z.flags.json=!0;else if(X==="--yes"||X==="-y")Z.flags.yes=!0;else if(X==="--no-color")Z.flags.noColor=!0;else if(X==="--scope"||X==="-s"){Q++;let z=q[Q];if(z==="global"||z==="project"||z==="both")Z.flags.scope=z;else D(`Invalid scope: "${z}". Must be global, project, or both.`),process.exit(2)}else if(X==="--sort"){Q++;let z=q[Q];if(z==="name"||z==="version"||z==="location")Z.flags.sort=z;else D(`Invalid sort: "${z}". Must be name, version, or location.`),process.exit(2)}else if(X==="--provider"||X==="-p"||X==="--tool")Q++,Z.flags.provider=q[Q]||null;else if(X==="--name")Q++,Z.flags.name=q[Q]||null;else if(X==="--force"||X==="-f")Z.flags.force=!0;else if(X==="--path")Q++,Z.flags.path=q[Q]||null;else if(X==="--all")Z.flags.all=!0;else if(X==="--verbose"||X==="-V")Z.flags.verbose=!0;else if(X==="--flat")Z.flags.flat=!0;else if(X==="--compact")Z.flags.compact=!0;else if(X==="--summary")Z.flags.summary=!0;else if(X==="--group-by"){Q++;let z=q[Q];if(z==="tool"||z==="scope"||z==="effort")Z.flags.groupBy=z;else D(`Invalid --group-by: "${z}". Must be tool, scope, or effort.`),process.exit(2)}else if(X==="--limit"){Q++;let z=q[Q],J=Number(z);if(!Number.isFinite(J)||J<0||!Number.isInteger(J))D(`Invalid --limit: "${z}". Must be a non-negative integer (0 means no limit).`),process.exit(2);Z.flags.limit=J}else if(X==="--installed")Z.flags.installed=!0;else if(X==="--available")Z.flags.available=!0;else if(X==="--concurrency"){Q++;let z=q[Q],J=Number(z);if(!Number.isFinite(J)||J<1||!Number.isInteger(J))D(`Invalid --concurrency: "${z}". Must be a positive integer.`),process.exit(2);Z.flags.concurrency=J}else if(X==="--keep")Z.flags.keep=!0;else if(X==="--transport"||X==="-t"){Q++;let z=q[Q];if(z==="https"||z==="ssh"||z==="auto")Z.flags.transport=z;else D(`Invalid transport: "${z}". Must be https, ssh, or auto.`),process.exit(2)}else if(X==="--method"||X==="-m"){Q++;let z=q[Q];if(z==="default"||z==="vercel")Z.flags.method=z;else D(`Invalid method: "${z}". Must be default or vercel.`),process.exit(2)}else if(X==="--skill")Q++,Z.flags.path=q[Q]||null;else if(X==="--dry-run")Z.flags.dryRun=!0;else if(X==="--fix")Z.flags.fix=!0;else if(X==="--machine")Z.flags.machine=!0;else if(X==="--no-cache")Z.flags.noCache=!0;else if(X==="--has"){if(Q++,q[Q])Z.flags.has.push(q[Q])}else if(X==="--missing"){if(Q++,q[Q])Z.flags.missing.push(q[Q])}else if(X.startsWith("-"))D(`Unknown option: ${X}`),console.error('Run "asm --help" for usage.'),process.exit(2);else if(!Z.command)Z.command=X;else if(!Z.subcommand)Z.subcommand=X;else Z.positional.push(X);Q++}return Z}function D($){console.error(W.red(`Error: ${$}`))}function NH(){console.log(`${W.blueBold("agent-skill-manager")} (${W.bold("asm")}) ${X2}
224
+ `;return`${e}${r}${t}: ${n}
225
+ `}function Xb(e,t,s="SKILL.md"){if(e===t)return"";let i=e.split(`
226
+ `),n=t.split(`
227
+ `),r=[`--- a/${s}`,`+++ b/${s}`],o=0;for(;o<i.length&&o<n.length&&i[o]===n[o];)o++;let a=0;for(;a<i.length-o&&a<n.length-o&&i[i.length-1-a]===n[n.length-1-a];)a++;let l=i.slice(o,i.length-a),c=n.slice(o,n.length-a),d=o+1,f=o+1;r.push(`@@ -${d},${l.length} +${f},${c.length} @@`);let p=i.slice(Math.max(0,o-3),o).map(y=>` ${y}`),m=i.slice(i.length-a,Math.min(i.length,i.length-a+3)).map(y=>` ${y}`);r.push(...p);for(let y of l)r.push(`-${y}`);for(let y of c)r.push(`+${y}`);return r.push(...m),r.join(`
228
+ `)}async function Pu(e,t){let s=Br(e)?e:jr(e),i,n=await ut(s).catch(()=>null);if(!n)throw new Error(`Skill path does not exist: ${s}`);if(n.isFile())i=s;else if(n.isDirectory())i=ft(s,"SKILL.md");else throw new Error(`Skill path is not a directory or file: ${s}`);let r;try{r=await qr(i,"utf-8")}catch{throw new Error(`SKILL.md not found at ${i}.`)}let o=Qb(r,{gitAuthor:t.gitAuthor}),a=Xb(r,o.newContent),l=null;return!t.dryRun&&o.newContent!==r&&(l=`${i}.bak`,await Tb(i,l),await Ob(i,o.newContent,"utf-8")),{report:Wt({content:t.dryRun?r:o.newContent,skillPath:s,skillMdPath:i}),applied:o.applied,skipped:o.skipped,diff:a,dryRun:t.dryRun,backupPath:l,skillMdPath:i}}async function Nu(){try{let{stdout:e,exitCode:t}=await V(["git","config","--global","--get","user.name"]);if(t!==0)return null;let s=e.trim();return s||null}catch{return null}}function Zb(e,t,s=20){let i=Math.round(e/t*s);return"\u2588".repeat(i)+"\u2591".repeat(Math.max(0,s-i))}function mi(e){let t=[];t.push(`Skill evaluation: ${e.skillPath}`),t.push(`SKILL.md: ${e.skillMdPath}`),t.push(""),t.push(`Overall score: ${e.overallScore}/100 (${e.grade})`);let s=(e.providers??[]).filter(i=>i.id!=="quality");for(let i of s){let n=i.passed?"pass":"fail",r=`${i.id}@${i.version}`;t.push(` ${r}: ${i.score}/100 ${n}`)}t.push(""),t.push("Categories:");for(let i of e.categories)t.push(` ${i.name.padEnd(28)} ${String(i.score).padStart(2)}/${i.max} ${Zb(i.score,i.max)}`);if(t.push(""),e.topSuggestions.length>0){t.push("Top suggestions:");for(let i of e.topSuggestions)t.push(` \u2022 ${i}`)}else t.push("No suggestions \u2014 skill looks great.");for(let i of s){let n=ew(i.raw);if(n&&n.length>0){t.push(""),t.push(`${i.id}@${i.version} breakdown:`);for(let r of n){let o=r.passed?"\u221A":r.severity==="warning"?"\u26A0":"\xD7";t.push(` ${o} ${r.label}`),r.passed||t.push(` [${r.severity}] ${r.message}`)}continue}if(i.findings.length!==0){t.push(""),t.push(`${i.id}@${i.version} findings:`);for(let r of i.findings)t.push(` [${r.severity}] ${r.message}`)}}return t.join(`
229
+ `)}function ew(e){if(!e||typeof e!="object")return null;let t=e.checks;if(!Array.isArray(t))return null;let s=[];for(let i of t){if(!i||typeof i!="object")return null;let n=i;if(typeof n.id!="string"||typeof n.label!="string"||typeof n.passed!="boolean"||typeof n.message!="string"||n.severity!=="error"&&n.severity!=="warning")return null;s.push({id:n.id,label:n.label,passed:n.passed,severity:n.severity,message:n.message})}return s}function Iu(e){return JSON.stringify(e,null,2)}function Lu(e){let t=[];if(e.applied.length===0&&e.skipped.length===0)return t.push("No fixes needed \u2014 SKILL.md is already clean."),t.join(`
230
+ `);if(e.applied.length>0){t.push(`${e.dryRun?"Would apply":"Applied"} ${e.applied.length} fix(es):`);for(let s of e.applied)t.push(` \u2022 ${s.description}`)}if(e.skipped.length>0){t.push(""),t.push(`Skipped ${e.skipped.length} issue(s) (not auto-fixable):`);for(let s of e.skipped)t.push(` \u2022 ${s.description}`)}return e.diff&&(t.push(""),t.push("Diff:"),t.push(e.diff)),!e.dryRun&&e.backupPath&&(t.push(""),t.push(`Backup: ${e.backupPath}`)),t.join(`
231
+ `)}async function tw(e){let t;try{t=await xu(e)}catch{return[]}let s=[];for(let i of t){if(i.startsWith(".")||i==="node_modules"||i==="dist"||i==="build")continue;let n=ft(e,i),r;try{r=await ut(n)}catch{continue}if(!r.isDirectory())continue;let o=ft(n,"SKILL.md");try{(await ut(o)).isFile()&&s.push(n)}catch{}}return s.sort((i,n)=>ge(i).localeCompare(ge(n))),s}async function Su(e){let t=ft(e,"SKILL.md");try{if((await ut(t)).isFile())return{kind:"single",skillDirs:[e]}}catch{}let s=await tw(e);return s.length>0?{kind:"collection",skillDirs:s}:{kind:"none",skillDirs:[]}}function Vr(e){return e?!!(e.startsWith("github:")||/^https?:\/\/github\.com\//i.test(e)):!1}function $u(e){return{skillPath:e,skillMdPath:ft(e,"SKILL.md"),label:ge(e)}}async function Ru(e,t={}){if(!e)throw new Error("resolveEvalInput: input must be a non-empty string");if(Vr(e)){if(!t.fetchRemote)throw new Error(`Remote evaluation is not available in this context: "${e}"`);let r=await t.fetchRemote(e),o;try{o=await Su(r.rootDir)}catch(a){throw await r.cleanup().catch(()=>{}),a}if(o.kind==="none")throw await r.cleanup().catch(()=>{}),new Error(`No SKILL.md found at ${r.rootDir} (source: ${e}). The location is neither a single skill nor a skill collection.`);return{targets:o.skillDirs.map($u),isCollection:o.kind==="collection",cleanup:r.cleanup,provenance:{input:e,remote:!0,sourceRef:r.sourceRef,commitSha:r.commitSha,tempPath:r.rootDir}}}let s=Br(e)?e:jr(e),i;try{i=await ut(s)}catch{throw new Error(`Skill path does not exist: ${s}`)}if(i.isFile())return{targets:[{skillPath:ge(s)==="SKILL.md"?ge(s):s,skillMdPath:s,label:ge(s)}],isCollection:!1,cleanup:async()=>{},provenance:{input:e,remote:!1,sourceRef:null}};if(!i.isDirectory())throw new Error(`Skill path is not a directory or file: ${s}`);let n=await Su(s);if(n.kind==="none")throw new Error(`No SKILL.md found in ${s}. Pass a skill directory, a SKILL.md file, or a collection root with SKILL.md in its children.`);return{targets:n.skillDirs.map($u),isCollection:n.kind==="collection",cleanup:async()=>{},provenance:{input:e,remote:!1,sourceRef:null}}}function Ou(e){let t=e.filter(d=>d.report!==null),s=e.length,i=s-t.length;if(t.length===0)return{total:s,succeeded:0,failed:i,meanScore:null,top:null,bottom:null};let n=t.map(d=>d.report.overallScore),r=n.reduce((d,f)=>d+f,0)/n.length,o=Math.round(r),a=[...t].sort((d,f)=>f.report.overallScore-d.report.overallScore),l=a[0],c=a[a.length-1];return{total:s,succeeded:t.length,failed:i,meanScore:o,top:{label:l.label,score:l.report.overallScore},bottom:{label:c.label,score:c.report.overallScore}}}async function Tu(e,t,s){let i=new Array(e.length),n=0,r=Math.max(1,Math.floor(t)),o=[],a=Math.min(r,e.length);for(let l=0;l<a;l++)o.push((async()=>{for(;;){let c=n++;if(c>=e.length)break;i[c]=await s(e[c],c)}})());return await Promise.all(o),i}function Mu(e,t=28){let s=[];return s.push(""),s.push("Batch summary:"),s.push(` Skills evaluated: ${e.aggregate.succeeded}/${e.aggregate.total}`+(e.aggregate.failed>0?` (${e.aggregate.failed} failed)`:"")),e.aggregate.meanScore!==null&&s.push(` Mean score: ${e.aggregate.meanScore}/100`),e.aggregate.top&&s.push(` Top: ${e.aggregate.top.label} (${e.aggregate.top.score}/100)`),e.aggregate.bottom&&e.aggregate.bottom.label!==e.aggregate.top?.label&&s.push(` Bottom: ${e.aggregate.bottom.label} (${e.aggregate.bottom.score}/100)`),e.provenance.remote&&(e.provenance.sourceRef&&s.push(` Source: ${e.provenance.sourceRef}`),e.provenance.commitSha&&s.push(` Commit: ${e.provenance.commitSha}`),e.provenance.tempPath&&s.push(` Fetched to: ${e.provenance.tempPath}`)),s.join(`
232
+ `)}function Du(e){return{provenance:{input:e.provenance.input,remote:e.provenance.remote,source_ref:e.provenance.sourceRef??null,commit_sha:e.provenance.commitSha??null,temp_path:e.provenance.tempPath??null},aggregate:{total:e.aggregate.total,succeeded:e.aggregate.succeeded,failed:e.aggregate.failed,mean_score:e.aggregate.meanScore,top:e.aggregate.top,bottom:e.aggregate.bottom},results:e.results.map(t=>({label:t.label,skill_path:t.skillPath,error:t.error,report:t.report?hi(t.report,null):null}))}}function hi(e,t=null){return{skill_path:e.skillPath,skill_md_path:e.skillMdPath,overall_score:e.overallScore,grade:e.grade,categories:e.categories.map(s=>({id:s.id,name:s.name,score:s.score,max:s.max,findings:s.findings,suggestions:s.suggestions})),top_suggestions:e.topSuggestions,providers:e.providers?.map(s=>({id:s.id,version:s.version,schemaVersion:s.schemaVersion,score:s.score,passed:s.passed,categories:s.categories.map(i=>({id:i.id,name:i.name,score:i.score,max:i.max,findings:i.findings??[]})),findings:s.findings}))??[],fix:t?{dry_run:t.dryRun,applied:t.applied,skipped:t.skipped,backup_path:t.backupPath,diff:t.diff}:null}}var sw=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;function iw(e){if(typeof e!="string")return null;let t=sw.exec(e.trim());if(!t)return null;let[,s,i,n,r]=t;return{major:Number(s),minor:Number(i),patch:Number(n),prerelease:r?r.split("."):[]}}function nw(e,t){let s=iw(e);if(!s)throw new Error(`invalid semver: ${t} "${e}"`);return s}var Kr=new Map;function Jr(e){if(!e||typeof e.id!="string"||e.id.length===0)throw new Error("register: provider.id is required");if(nw(e.version,`provider ${e.id} version`),typeof e.schemaVersion!="number"||!Number.isInteger(e.schemaVersion))throw new Error(`register: provider ${e.id} schemaVersion must be an integer`);let t=Kr.get(e.id)??[];if(t.some(s=>s.version===e.version))throw new Error(`register: provider ${e.id}@${e.version} already registered`);t.push(e),Kr.set(e.id,t)}function gi(){let e=[];for(let t of Kr.values())for(let s of t)e.push(s);return e}import{stat as rw}from"fs/promises";var _u="quality",qu="1.0.0",Fu=1;function ow(e){return e.topSuggestions.map(t=>({severity:"info",message:t}))}function aw(e){return e.categories.map(t=>({id:t.id,name:t.name,score:t.score,max:t.max}))}var ju={id:_u,version:qu,schemaVersion:Fu,description:"Static linter for SKILL.md structure, description, and safety.",async applicable(e){try{return(await rw(e.skillMdPath)).isFile()?{ok:!0}:{ok:!1,reason:`${e.skillMdPath} is not a file`}}catch{return{ok:!1,reason:`SKILL.md not found at ${e.skillMdPath}`}}},async run(e,t){let s=await Au(e.skillPath);return{providerId:_u,providerVersion:qu,schemaVersion:Fu,score:s.overallScore,passed:s.grade!=="F",categories:aw(s),findings:ow(s),raw:s,startedAt:"",durationMs:0}}};var Ju=Wr(wr(),1);import{readFile as lw,stat as cw}from"fs/promises";var Bu="skill-best-practice",Uu="1.0.0",Vu=1,uw=new Set(["name","description","license","allowed-tools","metadata","compatibility","effort"]),Ku=new Set(["low","medium","high","max"]);function fw(e){if(!e.startsWith("---"))return null;let t=e.split(`
233
+ `);if(t.length<3||t[0]?.trim()!=="---")return null;let s=t.findIndex((i,n)=>n>0&&i.trim()==="---");return s===-1?null:t.slice(1,s).join(`
234
+ `)}function yi(e){return{severity:e.severity,message:e.message,code:e.id,categoryId:"validation"}}function te(e,t,s,i,n,r){e.push({id:t,label:s,passed:i,severity:n,message:r})}function bi(e,t,s){return{skillPath:e.skillPath,skillMdPath:e.skillMdPath,validatedAt:new Date().toISOString(),checkCount:t.length,passedChecks:t.filter(i=>i.passed).length,checks:t,frontmatter:s}}async function dw(e){let t=await lw(e.skillMdPath,"utf-8"),s=[],i=fw(t);if(i===null){te(s,"missing-frontmatter","Frontmatter exists",!1,"error","SKILL.md must start with a YAML frontmatter block.");let b=bi(e,s,null);return{score:0,passed:!1,findings:s.map(yi),raw:b}}te(s,"frontmatter-present","Frontmatter exists",!0,"error","SKILL.md contains a YAML frontmatter block.");let n;try{n=(0,Ju.parse)(i)}catch(b){te(s,"invalid-yaml","Frontmatter parses as YAML",!1,"error",`Invalid YAML in frontmatter: ${b?.message??String(b)}`);let v=bi(e,s,null);return{score:0,passed:!1,findings:s.map(yi),raw:v}}if(!n||typeof n!="object"||Array.isArray(n)){te(s,"frontmatter-not-object","Frontmatter is a mapping",!1,"error","Frontmatter must parse to a YAML object.");let b=bi(e,s,null);return{score:0,passed:!1,findings:s.map(yi),raw:b}}let r=n;te(s,"frontmatter-object","Frontmatter is a mapping",!0,"error","Frontmatter parses to a YAML object.");let o=Object.keys(r).filter(b=>!uw.has(b));te(s,"allowed-keys","Allowed top-level keys only",o.length===0,"error",o.length===0?"Frontmatter uses only the allowed top-level keys.":`Unexpected frontmatter key(s): ${o.sort().join(", ")}.`);let a=r.name,l=typeof a=="string"?a.trim():"";if(te(s,"name-present","Name is present and non-empty",l.length>0,"error",l.length>0?"Frontmatter includes a non-empty `name`.":"Frontmatter must include a non-empty string `name`."),l.length>0){let b=/^[a-z0-9-]+$/.test(l)&&!l.startsWith("-")&&!l.endsWith("-")&&!l.includes("--")&&l.length<=64;te(s,"name-kebab-case","Name follows skill-best-practice naming rules",b,"error",b?"Name follows the skill-best-practice kebab-case naming rules.":"Name must be kebab-case, avoid consecutive/edge hyphens, and stay within 64 characters.")}let c=r.description,d=typeof c=="string"?c.trim():"";if(te(s,"description-present","Description is present and non-empty",d.length>0,"error",d.length>0?"Frontmatter includes a non-empty `description`.":"Frontmatter must include a non-empty string `description`."),d.length>0){let b=!d.includes(`
235
+ `)&&!d.includes("\r")&&!d.includes("<")&&!d.includes(">")&&d.length<=1024;te(s,"description-shape","Description follows skill-best-practice formatting rules",b,"error",b?"Description is single-line, angle-bracket free, and within 1024 characters.":"Description must be a single line, avoid angle brackets, and stay within 1024 characters.")}let f=r.effort;te(s,"effort-enum","Effort uses the supported enum",f===void 0||typeof f=="string"&&Ku.has(f.trim()),"error",f===void 0||typeof f=="string"&&Ku.has(f.trim())?"Effort is omitted or uses a supported value.":"Effort must be one of: low, medium, high, max.");let p=r.compatibility;if(p!==void 0){let b=typeof p=="string"&&p.length<=500;te(s,"compatibility-shape","Compatibility is a short string",b,"error",b?"Compatibility is a valid short string.":"Compatibility must be a string no longer than 500 characters.")}let m=/don'?t use (?:for|when|if|on)|not (?:for|intended for|suitable for|meant for)\b|skip (?:for|when|if)|avoid (?:using )?(?:for|when|on)|never (?:use )?for\b|only (?:use )?for\b/i.test(d);te(s,"negative-trigger-clause","Description includes a negative-trigger clause",m,"warning",m?"Description names adjacent cases that should not trigger the skill.":"Description appears to lack a negative-trigger clause; consider naming adjacent cases that should not trigger the skill.");let y=bi(e,s,r),h=y.checkCount===0?100:Math.round(y.passedChecks/y.checkCount*100),g=s.filter(b=>!b.passed).map(yi);return{score:h,passed:g.every(b=>b.severity!=="error"),findings:g,raw:y}}var Hu={id:Bu,version:Uu,schemaVersion:Vu,description:"Deterministic SKILL.md best-practice validation (rules ported from Anthropic's skill-creator skill).",async applicable(e){try{return(await cw(e.skillMdPath)).isFile()?{ok:!0}:{ok:!1,reason:`${e.skillMdPath} is not a file`}}catch{return{ok:!1,reason:`SKILL.md not found at ${e.skillMdPath}`}}},async run(e,t){let s=await dw(e);return{providerId:Bu,providerVersion:Uu,schemaVersion:Vu,score:s.score,passed:s.passed,categories:[{id:"validation",name:"Deterministic validation",score:s.raw.passedChecks,max:s.raw.checkCount,findings:s.findings.length>0?s.findings:void 0}],findings:s.findings,raw:s.raw,startedAt:"",durationMs:0}}};function Yu(){Jr(ju),Jr(Hu)}var Gu=!1;function wi(){Gu||(Yu(),Gu=!0)}function vi(){return wi(),gi()}function Wu(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function zu(e,t,s,i,n){let r={severity:"error",message:i,code:n};return{providerId:e.id,providerVersion:e.version,schemaVersion:e.schemaVersion,score:0,passed:!1,categories:[],findings:[r],raw:void 0,startedAt:t,durationMs:s}}async function ki(e,t,s={}){let i=new Date().toISOString(),n=performance.now(),r={id:e.id,version:e.version,schemaVersion:e.schemaVersion},o=new AbortController;s.signal&&(s.signal.aborted?o.abort(s.signal.reason):s.signal.addEventListener("abort",()=>o.abort(s.signal?.reason)));let a=null;typeof s.timeoutMs=="number"&&s.timeoutMs>0&&(a=setTimeout(()=>o.abort(new Error("timeout")),s.timeoutMs));let l={...s,signal:o.signal};try{let c=await Promise.race([e.run(t,l).then(p=>({kind:"ok",value:p})),new Promise(p=>{if(o.signal.aborted){p({kind:"timeout"});return}o.signal.addEventListener("abort",()=>p({kind:"timeout"}))})]),d=Math.max(0,Math.round(performance.now()-n));if(c.kind==="timeout"){let p=o.signal.reason,m=p instanceof Error&&p.message==="timeout"?`provider timed out after ${s.timeoutMs}ms`:`provider aborted: ${Wu(p)}`;return zu(r,i,d,m,p instanceof Error&&p.message==="timeout"?"timeout":"aborted")}let f=c.value;return{...f,providerId:r.id,providerVersion:r.version,schemaVersion:f.schemaVersion??r.schemaVersion,startedAt:i,durationMs:d}}catch(c){let d=Math.max(0,Math.round(performance.now()-n));return zu(r,i,d,Wu(c),"provider-threw")}finally{a&&clearTimeout(a)}}function pw(e){return e>=90?"A":e>=80?"B":e>=65?"C":e>=50?"D":"F"}function Qu(e){return{id:e.providerId,version:e.providerVersion,schemaVersion:e.schemaVersion,score:e.score,passed:e.passed,categories:e.categories,findings:e.findings,raw:e.raw}}function Xu(e,t){return{providerId:e.providerId,providerVersion:e.providerVersion,schemaVersion:e.schemaVersion,passed:e.passed,overallScore:e.score,grade:pw(e.score),categories:e.categories.map(s=>({id:s.id,name:s.name,score:s.score,max:s.max})),evaluatedAt:e.startedAt,evaluatedVersion:t}}function zt(e){return[...e].sort((t,s)=>t.id==="quality"&&s.id!=="quality"?-1:s.id==="quality"&&t.id!=="quality"?1:t.id.localeCompare(s.id))}var W={SKILL_NOT_FOUND:"SKILL_NOT_FOUND",AUDIT_FAILED:"AUDIT_FAILED",INSTALL_FAILED:"INSTALL_FAILED",PUBLISH_FAILED:"PUBLISH_FAILED",NETWORK_ERROR:"NETWORK_ERROR",INVALID_ARGUMENT:"INVALID_ARGUMENT",UNKNOWN_ERROR:"UNKNOWN_ERROR"};function Ge(){let e=console.log,t=console.info,s=(...i)=>process.stderr.write(i.map(String).join(" ")+`
236
+ `);return console.log=s,console.info=s,()=>{console.log=e,console.info=t}}function Zu(e){return{timestamp:new Date().toISOString(),asm_version:So,duration_ms:Math.round(performance.now()-e)}}function Y(e,t,s){let i={version:1,command:e,status:"ok",data:t,meta:Zu(s)},n=process.stdout.isTTY?2:0;return JSON.stringify(i,null,n)}function z(e,t,s,i,n){let r={version:1,command:e,status:"error",error:{code:t,message:s,...n!==void 0?{details:n}:{}},meta:Zu(i)},o=process.stdout.isTTY?2:0;return JSON.stringify(r,null,o)}import{writeFile as Ew,mkdir as Aw,unlink as Pw,readFile as Nw,readdir as Iw}from"fs/promises";import{join as Qt}from"path";import{readdir as mw,readFile as hw}from"fs/promises";import{join as gw}from"path";function Hr(e){let t=new Set,s=e.toLowerCase().split(/[\s\-_.,;:()[\]{}"']+/);for(let i of s)i.length>=2&&t.add(i);return t}var yw=10,bw=5,ww=3,vw=1;function kw(e,t){let s=Hr(e),i=Hr(t.name),n=Hr(t.description),r=0;for(let o of s)i.has(o)&&(r+=yw),n.has(o)&&(r+=ww),t.name.toLowerCase().includes(o)&&(r+=bw),t.description.toLowerCase().includes(o)&&(r+=vw);return r}async function ef(e){let t=new Map,s;try{s=await mw(e)}catch{return t}for(let i of s){if(!i.endsWith(".json"))continue;let n=gw(e,i);try{let r=await hw(n,"utf-8"),o=JSON.parse(r);for(let a of o.skills)"license"in a||(a.license=""),"creator"in a||(a.creator=""),"compatibility"in a||(a.compatibility=""),"allowedTools"in a||(a.allowedTools=[]),"verified"in a||(a.verified=!1);t.set(`${o.owner}/${o.repo}`,o)}catch{}}return t}async function Si(){let e=await ef(Zr()),t=await ef(mt()),s=new Map(e);for(let[i,n]of t)s.set(i,n);return Array.from(s.values())}var Sw=["license","creator","version"];function tf(e){return Sw.includes(e)}function sf(e,t){return e[t]||""}function $w(e,t){if(t.has){for(let s of t.has)if(tf(s)&&!sf(e,s))return!1}if(t.missing){for(let s of t.missing)if(tf(s)&&sf(e,s))return!1}return!0}function nf(e){let t=[];return e.license||t.push("license"),e.creator||t.push("creator"),(!e.version||e.version==="0.0.0")&&t.push("version"),t}async function $i(e,t=20,s){let i=await Si(),n=[],r=!e&&s;for(let o of i)for(let a of o.skills){if(s&&!$w(a,s))continue;let l=r?1:kw(e,a);l>0&&n.push({skill:a,repo:{owner:o.owner,repo:o.repo},score:l})}return n.sort((o,a)=>a.score-o.score),n.slice(0,t)}async function rf(){return(await Si()).reduce((t,s)=>t+s.skillCount,0)}var xw=[{label:"obfuscation:atob",pattern:/\batob\s*\(/},{label:"obfuscation:base64",pattern:/(?:^|[=:\s])[A-Za-z0-9+/]{40,}={1,2}(?:\s|$)/m},{label:"obfuscation:hex-escape",pattern:/\\x[0-9a-fA-F]{2}(?:\\x[0-9a-fA-F]{2}){3,}/},{label:"credential-leak:api-key",pattern:/\bAPI_KEY\s*=\s*['"][^'"]+['"]/},{label:"credential-leak:secret",pattern:/\bSECRET_KEY\s*=\s*['"][^'"]+['"]/},{label:"credential-leak:password",pattern:/\bPASSWORD\s*=\s*['"][^'"]+['"]/}];function of(e,t){let s=[];(!e.name||!e.name.trim())&&s.push("missing frontmatter field: name"),(!e.description||!e.description.trim())&&s.push("missing frontmatter field: description"),Cw(t).trim().length<20&&s.push("SKILL.md body too short (less than 20 chars of instructions)");for(let{label:n,pattern:r}of xw)r.test(t)&&s.push(`malicious pattern detected: ${n}`);return{verified:s.length===0,reasons:s}}function Cw(e){let t=e.trimStart();if(!t.startsWith("---"))return t;let s=t.indexOf(`
237
+ ---`,3);return s===-1?"":t.slice(s+4)}async function Lw(){let e=mt();return await Aw(e,{recursive:!0}),e}async function af(e){await Me();let t;try{t=Oe(e)}catch(i){return{success:!1,repoIndex:null,error:i.message}}if(t.isLocal)return{success:!1,repoIndex:null,error:"Local paths are not supported for indexing. Use a GitHub source instead."};N(`ingester: cloning ${t.owner}/${t.repo}`);let s=null;try{s=await De(t),N(`ingester: discovering skills in ${s}`);let i=await os(s);N(`ingester: found ${i.length} skills`);let n=[];for(let l of i){let c=Qt(s,l.relPath,"SKILL.md"),d="";try{d=await Nw(c,"utf-8")}catch{N(`ingester: could not read SKILL.md at ${c}`)}let f=of(l,d);f.verified||N(`ingester: ${l.name} not verified: ${f.reasons.join(", ")}`);let p=typeof l.tokenCount=="number"?l.tokenCount:d?es(d):void 0,m,y;if(d){let h;try{h=await Iw(Qt(s,l.relPath))}catch{h=void 0}try{let g=Wt({content:d,skillPath:l.relPath||l.name,skillMdPath:c,rootEntries:h});m={overallScore:g.overallScore,grade:g.grade,categories:g.categories.map(b=>({id:b.id,name:b.name,score:b.score,max:b.max})),evaluatedAt:g.evaluatedAt,evaluatedVersion:l.version||void 0}}catch(g){N(`ingester: eval failed for ${l.name}: ${g}`)}try{let g={skillPath:Qt(s,l.relPath),skillMdPath:c},v=(await Promise.all(zt(vi()).map(async k=>(await k.applicable(g,{})).ok?ki(k,g):null))).filter(k=>k!==null).map(k=>Xu(k,l.version||void 0));v.length>0&&(y=Object.fromEntries(v.filter(k=>k.providerId).map(k=>[k.providerId,k])))}catch(g){N(`ingester: provider eval failed for ${l.name}: ${g}`)}}n.push({name:l.name,description:l.description,version:l.version,license:l.license,creator:l.creator,compatibility:l.compatibility,allowedTools:l.allowedTools,installUrl:`github:${t.owner}/${t.repo}${t.ref?`#${t.ref}`:""}${l.relPath?`:${l.relPath}`:""}`,relPath:l.relPath,verified:f.verified,tokenCount:p,evalSummary:m,evalSummaries:y})}let r={repoUrl:t.cloneUrl,owner:t.owner,repo:t.repo,updatedAt:new Date().toISOString(),skillCount:n.length,skills:n},o=await Lw(),a=Qt(o,`${t.owner}_${t.repo}.json`);return await Ew(a,JSON.stringify(r,null,2)+`
238
+ `,"utf-8"),N(`ingester: wrote index to ${a}`),{success:!0,repoIndex:r}}catch(i){return{success:!1,repoIndex:null,error:i.message}}finally{s&&await ne(s)}}async function lf(){return(await Si()).map(t=>({owner:t.owner,repo:t.repo,skillCount:t.skillCount,updatedAt:t.updatedAt})).sort((t,s)=>s.skillCount-t.skillCount)}async function cf(e,t){let s=mt(),i=Qt(s,`${e}_${t}.json`);try{return await Pw(i),!0}catch{return!1}}import{join as ff}from"path";function Rw(e){switch(e){case"dangerous":return 3;case"warning":return 2;case"caution":return 1;default:return 0}}function Yr(e){return{verdict:e.every(t=>t.verdict==="safe")?"safe":e.some(t=>t.verdict==="dangerous")?"dangerous":"warning",findings:e.map(t=>({skill:t.skillName,verdict:t.verdict,verdict_reason:t.verdictReason,total_files:t.totalFiles,total_lines:t.totalLines})),risk_score:e.reduce((t,s)=>t+Rw(s.verdict),0)}}function Ow(e){let t=e.slice(2),s={command:null,subcommand:null,positional:[],flags:{help:!1,version:!1,json:!1,yes:!1,noColor:!1,scope:"both",sort:"name",provider:null,name:null,force:!1,path:null,all:!1,verbose:!1,flat:!1,transport:"auto",method:"default",installed:!1,available:!1,has:[],missing:[],dryRun:!1,machine:!1,noCache:!1,fix:!1,compact:!1,summary:!1,groupBy:null,limit:0,concurrency:0,keep:!1,add:null,remove:null,description:null,author:null,tags:null,predefined:!1}},i=0;for(;i<t.length;){let n=t[i];if(n==="--help"||n==="-h")s.flags.help=!0;else if(n==="--version"||n==="-v")s.flags.version=!0;else if(n==="--json")s.flags.json=!0;else if(n==="--yes"||n==="-y")s.flags.yes=!0;else if(n==="--no-color")s.flags.noColor=!0;else if(n==="--scope"||n==="-s"){i++;let r=t[i];r==="global"||r==="project"||r==="both"?s.flags.scope=r:(C(`Invalid scope: "${r}". Must be global, project, or both.`),process.exit(2))}else if(n==="--sort"){i++;let r=t[i];r==="name"||r==="version"||r==="location"?s.flags.sort=r:(C(`Invalid sort: "${r}". Must be name, version, or location.`),process.exit(2))}else if(n==="--provider"||n==="-p"||n==="--tool")i++,s.flags.provider=t[i]||null;else if(n==="--name")i++,s.flags.name=t[i]||null;else if(n==="--force"||n==="-f")s.flags.force=!0;else if(n==="--path")i++,s.flags.path=t[i]||null;else if(n==="--all")s.flags.all=!0;else if(n==="--verbose"||n==="-V")s.flags.verbose=!0;else if(n==="--flat")s.flags.flat=!0;else if(n==="--compact")s.flags.compact=!0;else if(n==="--summary")s.flags.summary=!0;else if(n==="--group-by"){i++;let r=t[i];r==="tool"||r==="scope"||r==="effort"?s.flags.groupBy=r:(C(`Invalid --group-by: "${r}". Must be tool, scope, or effort.`),process.exit(2))}else if(n==="--limit"){i++;let r=t[i],o=Number(r);(!Number.isFinite(o)||o<0||!Number.isInteger(o))&&(C(`Invalid --limit: "${r}". Must be a non-negative integer (0 means no limit).`),process.exit(2)),s.flags.limit=o}else if(n==="--installed")s.flags.installed=!0;else if(n==="--available")s.flags.available=!0;else if(n==="--concurrency"){i++;let r=t[i],o=Number(r);(!Number.isFinite(o)||o<1||!Number.isInteger(o))&&(C(`Invalid --concurrency: "${r}". Must be a positive integer.`),process.exit(2)),s.flags.concurrency=o}else if(n==="--keep")s.flags.keep=!0;else if(n==="--transport"||n==="-t"){i++;let r=t[i];r==="https"||r==="ssh"||r==="auto"?s.flags.transport=r:(C(`Invalid transport: "${r}". Must be https, ssh, or auto.`),process.exit(2))}else if(n==="--method"||n==="-m"){i++;let r=t[i];r==="default"||r==="vercel"?s.flags.method=r:(C(`Invalid method: "${r}". Must be default or vercel.`),process.exit(2))}else n==="--skill"?(i++,s.flags.path=t[i]||null):n==="--dry-run"?s.flags.dryRun=!0:n==="--fix"?s.flags.fix=!0:n==="--machine"?s.flags.machine=!0:n==="--no-cache"?s.flags.noCache=!0:n==="--has"?(i++,t[i]&&s.flags.has.push(t[i])):n==="--missing"?(i++,t[i]&&s.flags.missing.push(t[i])):n==="--add"?(i++,s.flags.add=t[i]||null):n==="--remove"?(i++,s.flags.remove=t[i]||null):n==="--description"?(i++,s.flags.description=t[i]||null):n==="--author"?(i++,s.flags.author=t[i]||null):n==="--tags"?(i++,s.flags.tags=t[i]||null):n==="--predefined"?s.flags.predefined=!0:n.startsWith("-")?(C(`Unknown option: ${n}`),console.error('Run "asm --help" for usage.'),process.exit(2)):s.command?s.subcommand?s.positional.push(n):s.subcommand=n:s.command=n;i++}return s}function C(e){console.error(u.red(`Error: ${e}`))}function Tw(){console.log(`${u.blueBold("agent-skill-manager")} (${u.bold("asm")}) ${Li}
238
239
 
239
240
  Interactive TUI and CLI for managing installed skills for AI coding agents.
240
241
 
241
- ${W.bold("Usage:")}
242
+ ${u.bold("Usage:")}
242
243
  asm Launch interactive TUI
243
244
  asm <command> [options] Run a CLI command
244
245
 
245
- ${W.bold("Commands:")}
246
+ ${u.bold("Commands:")}
246
247
  list List all discovered skills
247
248
  search <query> Search skills by name/description/tool
248
249
  inspect <skill-name> Show detailed info for a skill
@@ -259,7 +260,7 @@ ${W.bold("Commands:")}
259
260
  update [name...] Update outdated skills with security re-audit
260
261
  publish [path] Validate, audit, and submit a skill to the registry
261
262
  eval <skill-path> Evaluate a skill against best practices and score it
262
- eval-providers list List registered eval providers (id, version, schema, )
263
+ eval-providers list List registered eval providers (id, version, schema, \u2026)
263
264
  bundle Manage skill bundles (create, install, list, show, remove)
264
265
  index Manage skill index (ingest, search, list)
265
266
  doctor Run environment health checks and diagnostics
@@ -268,7 +269,7 @@ ${W.bold("Commands:")}
268
269
  config reset Reset config to defaults
269
270
  config edit Open config in $EDITOR
270
271
 
271
- ${W.bold("Global Options:")}
272
+ ${u.bold("Global Options:")}
272
273
  -h, --help Show help for any command
273
274
  -v, --version Print version and exit
274
275
  --json Output as JSON (list, search, inspect)
@@ -279,14 +280,14 @@ ${W.bold("Global Options:")}
279
280
  --sort <field> Sort by: name, version, or location (default: name)
280
281
  --flat Show one row per tool instance (list, search)
281
282
  -y, --yes Skip confirmation prompts
282
- -V, --verbose Show debug output`)}function DH(){console.log(`${W.bold("Usage:")} asm list [options]
283
+ -V, --verbose Show debug output`)}function Mw(){console.log(`${u.bold("Usage:")} asm list [options]
283
284
 
284
285
  List all discovered skills. By default, skills installed across multiple
285
286
  tools are grouped into a single row with tool badges. When more than
286
- ${Z2} skills are present, a compact summary is
287
+ ${Pi} skills are present, a compact summary is
287
288
  automatically prepended above the table.
288
289
 
289
- ${W.bold("Options:")}
290
+ ${u.bold("Options:")}
290
291
  --sort <field> Sort by: name, version, or location (default: name)
291
292
  -s, --scope <s> Filter: global, project, or both (default: both)
292
293
  -p, --tool <p> Filter by tool (claude, codex, openclaw, agents)
@@ -300,25 +301,25 @@ ${W.bold("Options:")}
300
301
  --no-color Disable ANSI colors
301
302
  -V, --verbose Show debug output
302
303
 
303
- ${W.bold("Examples:")}
304
- asm list ${W.dim("List all skills (grouped)")}
305
- asm list --flat ${W.dim("One row per tool instance")}
306
- asm list --compact ${W.dim("One line per skill (dense)")}
307
- asm list --summary ${W.dim("Counts by tool/scope/effort only")}
308
- asm list --group-by tool ${W.dim("Group rows under tool headers")}
309
- asm list --group-by scope ${W.dim("Group rows under scope headers")}
310
- asm list --group-by effort ${W.dim("Group rows under effort headers")}
311
- asm list --limit 20 ${W.dim("Show first 20 rows only")}
312
- asm list -p claude ${W.dim("Only Claude Code skills")}
313
- asm list -s project ${W.dim("Only project-scoped skills")}
314
- asm list --sort version ${W.dim("Sort by version")}
315
- asm list --json ${W.dim("Output as JSON")}
316
- asm list --machine ${W.dim("Machine-readable v1 envelope output")}`)}function PH(){console.log(`${W.bold("Usage:")} asm search <query> [options]
304
+ ${u.bold("Examples:")}
305
+ asm list ${u.dim("List all skills (grouped)")}
306
+ asm list --flat ${u.dim("One row per tool instance")}
307
+ asm list --compact ${u.dim("One line per skill (dense)")}
308
+ asm list --summary ${u.dim("Counts by tool/scope/effort only")}
309
+ asm list --group-by tool ${u.dim("Group rows under tool headers")}
310
+ asm list --group-by scope ${u.dim("Group rows under scope headers")}
311
+ asm list --group-by effort ${u.dim("Group rows under effort headers")}
312
+ asm list --limit 20 ${u.dim("Show first 20 rows only")}
313
+ asm list -p claude ${u.dim("Only Claude Code skills")}
314
+ asm list -s project ${u.dim("Only project-scoped skills")}
315
+ asm list --sort version ${u.dim("Sort by version")}
316
+ asm list --json ${u.dim("Output as JSON")}
317
+ asm list --machine ${u.dim("Machine-readable v1 envelope output")}`)}function Dw(){console.log(`${u.bold("Usage:")} asm search <query> [options]
317
318
 
318
319
  Search both installed skills and the skill index. Results show installation
319
320
  status and include copy-paste install commands for available skills.
320
321
 
321
- ${W.bold("Options:")}
322
+ ${u.bold("Options:")}
322
323
  --sort <field> Sort by: name, version, or location (default: name)
323
324
  -s, --scope <s> Filter: global, project, or both (default: both)
324
325
  -p, --tool <p> Filter by tool (claude, codex, openclaw, agents)
@@ -330,49 +331,49 @@ ${W.bold("Options:")}
330
331
  --no-color Disable ANSI colors
331
332
  -V, --verbose Show debug output
332
333
 
333
- ${W.bold("Examples:")}
334
- asm search code ${W.dim("Search installed and available skills")}
335
- asm search review -p claude ${W.dim("Search within Claude Code only")}
336
- asm search "test" --installed ${W.dim("Search installed skills only")}
337
- asm search "test" --available ${W.dim("Search available skills only")}
338
- asm search openspec --json ${W.dim("Output matches as JSON")}
339
- asm search openspec --machine ${W.dim("Machine-readable v1 envelope output")}`)}function CH(){console.log(`${W.bold("Usage:")} asm inspect <skill-name> [options]
334
+ ${u.bold("Examples:")}
335
+ asm search code ${u.dim("Search installed and available skills")}
336
+ asm search review -p claude ${u.dim("Search within Claude Code only")}
337
+ asm search "test" --installed ${u.dim("Search installed skills only")}
338
+ asm search "test" --available ${u.dim("Search available skills only")}
339
+ asm search openspec --json ${u.dim("Output matches as JSON")}
340
+ asm search openspec --machine ${u.dim("Machine-readable v1 envelope output")}`)}function _w(){console.log(`${u.bold("Usage:")} asm inspect <skill-name> [options]
340
341
 
341
342
  Show detailed information for a skill. The <skill-name> is the directory name.
342
343
  Shows version, description, file count, and all provider installations.
343
344
 
344
- ${W.bold("Options:")}
345
+ ${u.bold("Options:")}
345
346
  -s, --scope <s> Filter: global, project, or both (default: both)
346
347
  --json Output as JSON object
347
348
  --no-color Disable ANSI colors
348
349
  -V, --verbose Show debug output
349
350
 
350
- ${W.bold("Examples:")}
351
- asm inspect code-review ${W.dim("Show details for code-review")}
352
- asm inspect code-review --json ${W.dim("Output as JSON")}
353
- asm inspect code-review -s global ${W.dim("Global installations only")}`)}function EH(){console.log(`${W.bold("Usage:")} asm uninstall <skill-name> [options]
351
+ ${u.bold("Examples:")}
352
+ asm inspect code-review ${u.dim("Show details for code-review")}
353
+ asm inspect code-review --json ${u.dim("Output as JSON")}
354
+ asm inspect code-review -s global ${u.dim("Global installations only")}`)}function qw(){console.log(`${u.bold("Usage:")} asm uninstall <skill-name> [options]
354
355
 
355
356
  Remove a skill and its associated rule files. Shows a removal plan
356
357
  before proceeding and asks for confirmation.
357
358
 
358
- ${W.bold("Options:")}
359
+ ${u.bold("Options:")}
359
360
  -y, --yes Skip confirmation prompt
360
361
  -s, --scope <s> Filter: global, project, or both (default: both)
361
362
  --no-color Disable ANSI colors
362
363
  -V, --verbose Show debug output
363
364
 
364
- ${W.bold("Examples:")}
365
- asm uninstall code-review ${W.dim("Remove with confirmation")}
366
- asm uninstall code-review -y ${W.dim("Remove without confirmation")}
367
- asm uninstall code-review -s project ${W.dim("Remove project copy only")}`)}function SH(){console.log(`${W.bold("Usage:")} asm audit [subcommand] [options]
365
+ ${u.bold("Examples:")}
366
+ asm uninstall code-review ${u.dim("Remove with confirmation")}
367
+ asm uninstall code-review -y ${u.dim("Remove without confirmation")}
368
+ asm uninstall code-review -s project ${u.dim("Remove project copy only")}`)}function Fw(){console.log(`${u.bold("Usage:")} asm audit [subcommand] [options]
368
369
 
369
370
  Detect duplicate skills or run security audits on installed/remote skills.
370
371
 
371
- ${W.bold("Subcommands:")}
372
+ ${u.bold("Subcommands:")}
372
373
  duplicates Find duplicate skills (default)
373
374
  security <name|source> Run security audit on an installed skill or GitHub source
374
375
 
375
- ${W.bold("Options:")}
376
+ ${u.bold("Options:")}
376
377
  --json Output as JSON
377
378
  --machine Output in stable machine-readable v1 envelope format
378
379
  -y, --yes Auto-remove duplicates, keeping one instance per group
@@ -380,25 +381,25 @@ ${W.bold("Options:")}
380
381
  --no-color Disable ANSI colors
381
382
  -V, --verbose Show debug output
382
383
 
383
- ${W.bold("Examples:")}
384
- asm audit ${W.dim("Find duplicates")}
385
- asm audit -y ${W.dim("Auto-remove duplicates")}
386
- asm audit --json ${W.dim("Output as JSON")}
387
- asm audit security code-review ${W.dim("Audit an installed skill")}
388
- asm audit security github:user/repo ${W.dim("Audit a remote skill before installing")}
389
- asm audit security --all ${W.dim("Audit all installed skills")}
390
- asm audit security code-review --json ${W.dim("Output audit as JSON")}
391
- asm audit security code-review --machine ${W.dim("Machine-readable v1 envelope output")}
384
+ ${u.bold("Examples:")}
385
+ asm audit ${u.dim("Find duplicates")}
386
+ asm audit -y ${u.dim("Auto-remove duplicates")}
387
+ asm audit --json ${u.dim("Output as JSON")}
388
+ asm audit security code-review ${u.dim("Audit an installed skill")}
389
+ asm audit security github:user/repo ${u.dim("Audit a remote skill before installing")}
390
+ asm audit security --all ${u.dim("Audit all installed skills")}
391
+ asm audit security code-review --json ${u.dim("Output audit as JSON")}
392
+ asm audit security code-review --machine ${u.dim("Machine-readable v1 envelope output")}
392
393
  asm audit security https://github.com/user/skills/tree/main/skills/agent-config
393
- ${W.dim("Audit a skill from a subfolder URL")}`)}function bH(){console.log(`${W.bold("Usage:")} asm publish [path] [options]
394
+ ${u.dim("Audit a skill from a subfolder URL")}`)}function jw(){console.log(`${u.bold("Usage:")} asm publish [path] [options]
394
395
 
395
396
  Validate a skill, run a security audit, generate a registry manifest,
396
397
  and open a PR against the asm-registry.
397
398
 
398
- ${W.bold("Arguments:")}
399
+ ${u.bold("Arguments:")}
399
400
  path Path to skill directory (default: current directory)
400
401
 
401
- ${W.bold("Options:")}
402
+ ${u.bold("Options:")}
402
403
  --dry-run Print generated manifest without opening a PR
403
404
  --force Override 'warning' security verdict (blocks 'dangerous')
404
405
  -y, --yes Skip confirmation prompts
@@ -407,76 +408,76 @@ ${W.bold("Options:")}
407
408
  --no-color Disable ANSI colors
408
409
  -V, --verbose Show debug output
409
410
 
410
- ${W.bold("Examples:")}
411
- asm publish ${W.dim("Publish skill in current directory")}
412
- asm publish ./my-skill ${W.dim("Publish skill at the given path")}
413
- asm publish --dry-run ${W.dim("Preview manifest without side effects")}
414
- asm publish --force ${W.dim("Override warning-level security findings")}
415
- asm publish --json ${W.dim("Output as JSON")}
416
- asm publish --machine ${W.dim("Machine-readable v1 envelope output")}`)}function xH(){console.log(`${W.bold("Usage:")} asm outdated [options]
411
+ ${u.bold("Examples:")}
412
+ asm publish ${u.dim("Publish skill in current directory")}
413
+ asm publish ./my-skill ${u.dim("Publish skill at the given path")}
414
+ asm publish --dry-run ${u.dim("Preview manifest without side effects")}
415
+ asm publish --force ${u.dim("Override warning-level security findings")}
416
+ asm publish --json ${u.dim("Output as JSON")}
417
+ asm publish --machine ${u.dim("Machine-readable v1 envelope output")}`)}function Bw(){console.log(`${u.bold("Usage:")} asm outdated [options]
417
418
 
418
419
  Show which installed skills have newer versions available.
419
420
 
420
- ${W.bold("Options:")}
421
+ ${u.bold("Options:")}
421
422
  --json Output as JSON
422
423
  --machine Output in stable machine-readable format
423
424
  --no-color Disable ANSI colors
424
425
  -V, --verbose Show debug output
425
426
 
426
- ${W.bold("Examples:")}
427
- asm outdated ${W.dim("Show outdated skills")}
428
- asm outdated --json ${W.dim("Output as JSON")}
429
- asm outdated --machine ${W.dim("Machine-readable output")}`)}function fH(){console.log(`${W.bold("Usage:")} asm update [name...] [options]
427
+ ${u.bold("Examples:")}
428
+ asm outdated ${u.dim("Show outdated skills")}
429
+ asm outdated --json ${u.dim("Output as JSON")}
430
+ asm outdated --machine ${u.dim("Machine-readable output")}`)}function Uw(){console.log(`${u.bold("Usage:")} asm update [name...] [options]
430
431
 
431
432
  Update outdated skills to their latest version with security re-audit.
432
433
 
433
- ${W.bold("Arguments:")}
434
+ ${u.bold("Arguments:")}
434
435
  name Specific skill(s) to update (default: all outdated)
435
436
 
436
- ${W.bold("Options:")}
437
+ ${u.bold("Options:")}
437
438
  -y, --yes Skip confirmation prompts
438
439
  --json Output as JSON
439
440
  --machine Output in stable machine-readable format
440
441
  --no-color Disable ANSI colors
441
442
  -V, --verbose Show debug output
442
443
 
443
- ${W.bold("Examples:")}
444
- asm update ${W.dim("Update all outdated skills")}
445
- asm update code-review ${W.dim("Update a specific skill")}
446
- asm update --yes ${W.dim("Skip confirmation prompts")}
447
- asm update --json ${W.dim("Output as JSON")}`)}function yH(){console.log(`${W.bold("Usage:")} asm config <subcommand>
444
+ ${u.bold("Examples:")}
445
+ asm update ${u.dim("Update all outdated skills")}
446
+ asm update code-review ${u.dim("Update a specific skill")}
447
+ asm update --yes ${u.dim("Skip confirmation prompts")}
448
+ asm update --json ${u.dim("Output as JSON")}`)}function Vw(){console.log(`${u.bold("Usage:")} asm config <subcommand>
448
449
 
449
450
  Manage configuration. Config is stored at ~/.config/agent-skill-manager/.
450
451
 
451
- ${W.bold("Subcommands:")}
452
+ ${u.bold("Subcommands:")}
452
453
  show Print current config as JSON
453
454
  path Print config file path
454
455
  reset Reset config to defaults (with confirmation)
455
456
  edit Open config in $EDITOR
456
457
 
457
- ${W.bold("Options:")}
458
+ ${u.bold("Options:")}
458
459
  -V, --verbose Show debug output
459
460
 
460
- ${W.bold("Examples:")}
461
- asm config show ${W.dim("View current config")}
462
- asm config edit ${W.dim("Edit in $EDITOR")}
463
- asm config reset -y ${W.dim("Reset without confirmation")}`)}async function h6($){for(let q of $)q.warnings=await S5(q)}async function kH($){if($.flags.help){DH();return}let q=performance.now(),Z=await h(),Q=await o(Z,$.flags.scope);if($.flags.provider&&$.command==="list")Q=Q.filter((z)=>z.provider===$.flags.provider);await h6(Q);let X=e4(Q,$.flags.sort);if($.flags.machine){let z=X.map((J)=>({name:J.name,version:J.version,description:J.description,scope:J.scope,provider:J.provider,path:J.path}));console.log(l("list",z,q));return}if($.flags.json)console.log(c(X));else if($.flags.flat){let z=q2(X),J=X.filter((Y)=>Y.warnings&&Y.warnings.length>0);if(J.length>0)z+=`
464
- ${W.yellow(`${J.length} skill${J.length===1?"":"s"} with warnings -- use --json for details`)}`;console.log(z)}else if($.flags.summary)console.log(r4(X));else if($.flags.groupBy){let{skills:z,hint:J}=Y1(X,$.flags.limit);if(console.log(w6(z,$.flags.groupBy)),J)console.log(J)}else if($.flags.compact){let{skills:z,hint:J}=Y1(X,$.flags.limit);if(console.log(j6(z)),J)console.log(J)}else{let z=[];if(X.length>Z2)z.push(r4(X,{showHint:!1})),z.push("");let{skills:J,hint:Y}=Y1(X,$.flags.limit);if(z.push(N6(J)),Y)z.push(Y);console.log(z.join(`
465
- `))}}async function vH($){if($.flags.help){PH();return}let q=$.flags.machine?c0():void 0,Z=performance.now(),Q=$.subcommand;if(!Q){if($.flags.machine)q?.(),console.log(a("search",n.INVALID_ARGUMENT,"Missing required argument: <query>",Z)),process.exit(2);D("Missing required argument: <query>"),console.error('Run "asm search --help" for usage.'),process.exit(2)}let X=!$.flags.available,z=!$.flags.installed,J=[];if(X){let H=await h(),V=await o(H,$.flags.scope);if($.flags.provider)V=V.filter((_)=>_.provider===$.flags.provider);let B=F6(V,Q);J=e4(B,$.flags.sort)}let Y=[];if(z){if(Y=await X1(Q),J.length>0){let H=new Set(J.map((V)=>V.name.toLowerCase()));Y=Y.filter((V)=>!H.has(V.skill.name.toLowerCase()))}}if($.flags.machine){q?.();let H=J.map((B)=>({name:B.name,description:B.description,source:"installed",url:null,match_count:1})),V=Y.map((B)=>({name:B.skill.name,description:B.skill.description,source:"index",url:B.skill.installUrl,match_count:1}));console.log(l("search",[...H,...V],Z));return}if($.flags.json){let H=J.map((B)=>({name:B.name,description:B.description,version:B.version,scope:B.scope,provider:B.provider,status:"installed"})),V=Y.map((B)=>({name:B.skill.name,description:B.skill.description,version:B.skill.version,repo:`${B.repo.owner}/${B.repo.repo}`,installCommand:`asm install ${B.skill.installUrl}`,status:"available"}));console.log(c([...H,...V]));return}let G=J.length>0,U=Y.length>0;if(!G&&!U){console.error(`No skills matching "${Q}".`),console.error(W.dim("Try ingesting more repos with: asm index ingest <repo>"));return}if(G)if(console.error(W.bold(`Installed skills matching "${Q}":
466
- `)),$.flags.flat)console.log(q2(J));else console.log(D6(J,Q));if(U){if(G)console.error("");let H=P6(Y.map((V)=>({name:V.skill.name,version:V.skill.version,description:V.skill.description,verified:V.skill.verified,repoLabel:`${V.repo.owner}/${V.repo.repo}`,installUrl:V.skill.installUrl})),Q);console.error(H)}}async function hH($){if($.flags.help){CH();return}let q=$.subcommand;if(!q)D("Missing required argument: <skill-name>"),console.error('Run "asm inspect --help" for usage.'),process.exit(2);let Z=await h(),X=(await o(Z,$.flags.scope)).filter((z)=>z.dirName===q);if(X.length===0)D(`Skill "${q}" not found.`),console.error(W.dim(`Try ${W.bold("asm list")} to see all skills or ${W.bold(`asm search "${q}"`)} to search.`)),process.exit(1);if(await h6(X),$.flags.json)console.log(c(X.length===1?X[0]:X));else console.log(await C6(X))}async function gH($){if($.flags.help){EH();return}let q=$.subcommand;if(!q)D("Missing required argument: <skill-name>"),console.error('Run "asm uninstall --help" for usage.'),process.exit(2);let Z=await h(),Q=await o(Z,$.flags.scope),X=I6(q,Q,Z),z=await T6(X);if(z.length===0)D(`Skill "${q}" not found or nothing to remove.`),process.exit(1);console.error(W.bold("Removal plan:"));for(let Y of z)console.error(` ${W.red("")} ${R6(Y)}`);if(!$.flags.yes){if(!process.stdin.isTTY)D("Cannot prompt for confirmation in non-interactive mode. Use --yes to skip."),process.exit(2);process.stderr.write(`
467
- ${W.bold("Proceed with removal?")} [y/N] `);let Y=await Q0();if(Y.toLowerCase()!=="y"&&Y.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let J=await $2(X);for(let Y of J)console.error(Y);try{await S6(q)}catch{}console.error(W.green(`
468
- Done.`))}function Q0(){return new Promise(($)=>{let q="",Z=!1;function Q(){process.stdin.removeListener("data",z),process.stdin.removeListener("end",J),process.stdin.pause(),clearTimeout(Y)}function X(G){if(Z)return;Z=!0,Q(),$(G)}function z(G){if(q+=G,q.includes(`
469
- `))X(q.trim())}function J(){X(q.trim())}let Y=setTimeout(()=>{X(q.trim())},30000);process.stdin.setEncoding("utf-8"),process.stdin.on("data",z),process.stdin.on("end",J),process.stdin.resume()})}async function uH($){if($.flags.help){SH();return}let q=performance.now(),Z=$.subcommand??"duplicates";if(Z==="security"){await mH($,q);return}if(Z!=="duplicates")D(`Unknown audit subcommand: "${Z}". Use: duplicates, security`),process.exit(2);let Q=await h(),X=await o(Q,"both"),z=Q2(X);if($.flags.machine){let J={duplicate_groups:z.duplicateGroups.map((Y)=>({name:Y.key,count:Y.instances.length,instances:Y.instances.map((G)=>({path:G.path,scope:G.scope,provider:G.provider}))})),total_duplicates:z.duplicateGroups.length};console.log(l("audit duplicates",J,q));return}if($.flags.json){console.log(y6(z));return}if(console.log(f6(z)),$.flags.yes&&z.duplicateGroups.length>0){console.error(W.bold(`
470
- Auto-removing duplicates...`));for(let J of z.duplicateGroups){let Y=x6(J.instances),G=Y[0].path;for(let U=1;U<Y.length;U++){let H=Y[U],V=A6(H,Q),B=await $2(V,G);for(let _ of B)console.error(_)}}console.error(W.green(`
471
- Done.`))}}async function mH($,q){let Z=$.positional[0];if($.flags.all)await pH($,q);else if(!Z){if($.flags.machine)console.log(a("audit security",n.INVALID_ARGUMENT,"Missing target. Provide a skill name, GitHub source, or use --all.",q)),process.exit(2);D(`Missing target. Provide a skill name, GitHub source, or use --all.
472
- Usage: asm audit security <name|github:owner/repo> [--all]`),process.exit(2)}else if(Z.startsWith("github:")||Z.startsWith("https://github.com/"))await dH($,Z,q);else await cH($,Z,q)}async function pH($,q){let Z=await h(),Q=await o(Z,$.flags.scope);if(Q.length===0){if($.flags.machine)console.log(l("audit security",[],q));else if($.flags.json)console.log("[]");else console.log("No skills found to audit.");return}let X=new Set,z=Q.filter((Y)=>{if(X.has(Y.realPath))return!1;return X.add(Y.realPath),!0});console.error(`Auditing ${z.length} skill${z.length>1?"s":""}...
473
- `);let J=[];for(let Y of z){console.error(` Scanning ${W.bold(Y.name)}...`);let G=await N0(Y.realPath,Y.name);J.push(G)}if($.flags.machine)console.log(l("audit security",z2(J),q));else if($.flags.json)console.log(JSON.stringify(J,null,2));else{for(let G of J)console.log(dq(G));let Y={safe:0,caution:0,warning:0,dangerous:0};for(let G of J)Y[G.verdict]++;if(console.log(W.bold(`
474
- Summary:`)),Y.dangerous>0)console.log(` ${W.red(`${Y.dangerous} dangerous`)}`);if(Y.warning>0)console.log(` ${W.yellow(`${Y.warning} warning`)}`);if(Y.caution>0)console.log(` ${Y.caution} caution`);if(Y.safe>0)console.log(` ${W.green(`${Y.safe} safe`)}`);console.log("")}}async function dH($,q,Z){let Q=null;try{let X=P0(q);if(X.isLocal)throw Error("Local paths are not supported for remote security audits. Use: asm audit security <installed-skill-name>");await E0(),X=await s$(X),console.error(`Cloning ${q} for audit...`),Q=await S0(X,$.flags.transport);let{join:z}=await import("path"),J=X.subpath?z(Q,X.subpath):Q,{name:Y}=await b0(J),G=await N0(J,Y,X.owner,X.repo);if($.flags.machine)console.log(l("audit security",z2([G]),Z));else if($.flags.json)console.log(v4(G));else console.log(dq(G))}catch(X){if($.flags.machine)console.log(a("audit security",n.AUDIT_FAILED,X.message,Z)),process.exit(1);D(X.message),process.exit(1)}finally{if(Q)await e(Q)}}async function cH($,q,Z){let Q=await h(),z=(await o(Q,$.flags.scope)).filter((G)=>G.dirName===q);if(z.length===0){if($.flags.machine)console.log(a("audit security",n.SKILL_NOT_FOUND,`Skill "${q}" not found.`,Z)),process.exit(1);D(`Skill "${q}" not found. Use "asm list" to see installed skills.`),process.exit(1)}let J=z[0];console.error(`Auditing installed skill: ${W.bold(J.name)}...
475
- `);let Y=await N0(J.realPath,J.name);if($.flags.machine)console.log(l("audit security",z2([Y]),Z));else if($.flags.json)console.log(v4(Y));else console.log(dq(Y))}async function lH($){if($.flags.help){yH();return}let q=$.subcommand;if(!q)D("Missing subcommand. Use: show, path, reset, or edit."),console.error('Run "asm config --help" for usage.'),process.exit(2);switch(q){case"show":{let Z=await h();console.log(c(Z));break}case"path":{console.log(h$());break}case"reset":{if(!$.flags.yes){if(!process.stdin.isTTY)D("Cannot prompt for confirmation in non-interactive mode. Use --yes to skip."),process.exit(2);process.stderr.write(`${W.bold("Reset config to defaults?")} [y/N] `);let Q=await Q0();if(Q.toLowerCase()!=="y"&&Q.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let Z=O6();await L6(Z),console.error(W.green("Config reset to defaults."));break}case"edit":{let Z=process.env.VISUAL||process.env.EDITOR||"vi",[Q,X]=k6(Z),z=h$();await h();let{spawn:J}=await import("child_process");await new Promise((Y,G)=>{let U=J(Q,[...X,z],{stdio:"inherit"});U.on("close",()=>Y()),U.on("error",G)});break}default:D(`Unknown config subcommand: "${q}". Use: show, path, reset, or edit.`),process.exit(2)}}function nH(){console.log(`${W.bold("Usage:")} asm install <source> [options]
461
+ ${u.bold("Examples:")}
462
+ asm config show ${u.dim("View current config")}
463
+ asm config edit ${u.dim("Edit in $EDITOR")}
464
+ asm config reset -y ${u.dim("Reset without confirmation")}`)}async function df(e){for(let t of e)t.warnings=await Cc(t)}async function Kw(e){if(e.flags.help){Mw();return}let t=performance.now(),s=await q(),i=await Q(s,e.flags.scope);e.flags.provider&&e.command==="list"&&(i=i.filter(r=>r.provider===e.flags.provider)),await df(i);let n=Ci(i,e.flags.sort);if(e.flags.machine){let r=n.map(o=>({name:o.name,version:o.version,description:o.description,scope:o.scope,provider:o.provider,path:o.path}));console.log(Y("list",r,t));return}if(e.flags.json)console.log(J(n));else if(e.flags.flat){let r=Ai(n),o=n.filter(a=>a.warnings&&a.warnings.length>0);o.length>0&&(r+=`
465
+ ${u.yellow(`${o.length} skill${o.length===1?"":"s"} with warnings -- use --json for details`)}`),console.log(r)}else if(e.flags.summary)console.log(Ni(n));else if(e.flags.groupBy){let{skills:r,hint:o}=ts(n,e.flags.limit);console.log(uo(r,e.flags.groupBy)),o&&console.log(o)}else if(e.flags.compact){let{skills:r,hint:o}=ts(n,e.flags.limit);console.log(co(r)),o&&console.log(o)}else{let r=[];n.length>Pi&&(r.push(Ni(n,{showHint:!1})),r.push(""));let{skills:o,hint:a}=ts(n,e.flags.limit);r.push(fo(o)),a&&r.push(a),console.log(r.join(`
466
+ `))}}async function Jw(e){if(e.flags.help){Dw();return}let t=e.flags.machine?Ge():void 0,s=performance.now(),i=e.subcommand;i||(e.flags.machine&&(t?.(),console.log(z("search",W.INVALID_ARGUMENT,"Missing required argument: <query>",s)),process.exit(2)),C("Missing required argument: <query>"),console.error('Run "asm search --help" for usage.'),process.exit(2));let n=!e.flags.available,r=!e.flags.installed,o=[];if(n){let d=await q(),f=await Q(d,e.flags.scope);e.flags.provider&&(f=f.filter(m=>m.provider===e.flags.provider));let p=so(f,i);o=Ci(p,e.flags.sort)}let a=[];if(r&&(a=await $i(i),o.length>0)){let d=new Set(o.map(f=>f.name.toLowerCase()));a=a.filter(f=>!d.has(f.skill.name.toLowerCase()))}if(e.flags.machine){t?.();let d=o.map(p=>({name:p.name,description:p.description,source:"installed",url:null,match_count:1})),f=a.map(p=>({name:p.skill.name,description:p.skill.description,source:"index",url:p.skill.installUrl,match_count:1}));console.log(Y("search",[...d,...f],s));return}if(e.flags.json){let d=o.map(p=>({name:p.name,description:p.description,version:p.version,scope:p.scope,provider:p.provider,status:"installed"})),f=a.map(p=>({name:p.skill.name,description:p.skill.description,version:p.skill.version,repo:`${p.repo.owner}/${p.repo.repo}`,installCommand:`asm install ${p.skill.installUrl}`,status:"available"}));console.log(J([...d,...f]));return}let l=o.length>0,c=a.length>0;if(!l&&!c){console.error(`No skills matching "${i}".`),console.error(u.dim("Try ingesting more repos with: asm index ingest <repo>"));return}if(l&&(console.error(u.bold(`Installed skills matching "${i}":
467
+ `)),e.flags.flat?console.log(Ai(o)):console.log(po(o,i))),c){l&&console.error("");let d=mo(a.map(f=>({name:f.skill.name,version:f.skill.version,description:f.skill.description,verified:f.skill.verified,repoLabel:`${f.repo.owner}/${f.repo.repo}`,installUrl:f.skill.installUrl})),i);console.error(d)}}async function Hw(e){if(e.flags.help){_w();return}let t=e.subcommand;t||(C("Missing required argument: <skill-name>"),console.error('Run "asm inspect --help" for usage.'),process.exit(2));let s=await q(),n=(await Q(s,e.flags.scope)).filter(r=>r.dirName===t);n.length===0&&(C(`Skill "${t}" not found.`),console.error(u.dim(`Try ${u.bold("asm list")} to see all skills or ${u.bold(`asm search "${t}"`)} to search.`)),process.exit(1)),await df(n),e.flags.json?console.log(J(n.length===1?n[0]:n)):console.log(await ho(n))}async function Yw(e){if(e.flags.help){qw();return}let t=e.subcommand;t||(C("Missing required argument: <skill-name>"),console.error('Run "asm uninstall --help" for usage.'),process.exit(2));let s=await q(),i=await Q(s,e.flags.scope),n=no(t,i,s),r=await ro(n);r.length===0&&(C(`Skill "${t}" not found or nothing to remove.`),process.exit(1)),console.error(u.bold("Removal plan:"));for(let a of r)console.error(` ${u.red("\u2022")} ${lo(a)}`);if(!e.flags.yes){process.stdin.isTTY||(C("Cannot prompt for confirmation in non-interactive mode. Use --yes to skip."),process.exit(2)),process.stderr.write(`
468
+ ${u.bold("Proceed with removal?")} [y/N] `);let a=await G();a.toLowerCase()!=="y"&&a.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0))}let o=await Ei(n);for(let a of o)console.error(a);try{await yo(t)}catch{}console.error(u.green(`
469
+ Done.`))}function G(){return new Promise(e=>{let t="",s=!1;function i(){process.stdin.removeListener("data",r),process.stdin.removeListener("end",o),process.stdin.pause(),clearTimeout(a)}function n(l){s||(s=!0,i(),e(l))}function r(l){t+=l,t.includes(`
470
+ `)&&n(t.trim())}function o(){n(t.trim())}let a=setTimeout(()=>{n(t.trim())},3e4);process.stdin.setEncoding("utf-8"),process.stdin.on("data",r),process.stdin.on("end",o),process.stdin.resume()})}async function Gw(e){if(e.flags.help){Fw();return}let t=performance.now(),s=e.subcommand??"duplicates";if(s==="security"){await Ww(e,t);return}s!=="duplicates"&&(C(`Unknown audit subcommand: "${s}". Use: duplicates, security`),process.exit(2));let i=await q(),n=await Q(i,"both"),r=Ii(n);if(e.flags.machine){let o={duplicate_groups:r.duplicateGroups.map(a=>({name:a.key,count:a.instances.length,instances:a.instances.map(l=>({path:l.path,scope:l.scope,provider:l.provider}))})),total_duplicates:r.duplicateGroups.length};console.log(Y("audit duplicates",o,t));return}if(e.flags.json){console.log(ko(r));return}if(console.log(vo(r)),e.flags.yes&&r.duplicateGroups.length>0){console.error(u.bold(`
471
+ Auto-removing duplicates...`));for(let o of r.duplicateGroups){let a=wo(o.instances),l=a[0].path;for(let c=1;c<a.length;c++){let d=a[c],f=io(d,i),p=await Ei(f,l);for(let m of p)console.error(m)}}console.error(u.green(`
472
+ Done.`))}}async function Ww(e,t){let s=e.positional[0];e.flags.all?await zw(e,t):s?s.startsWith("github:")||s.startsWith("https://github.com/")?await Qw(e,s,t):await Xw(e,s,t):(e.flags.machine&&(console.log(z("audit security",W.INVALID_ARGUMENT,"Missing target. Provide a skill name, GitHub source, or use --all.",t)),process.exit(2)),C(`Missing target. Provide a skill name, GitHub source, or use --all.
473
+ Usage: asm audit security <name|github:owner/repo> [--all]`),process.exit(2))}async function zw(e,t){let s=await q(),i=await Q(s,e.flags.scope);if(i.length===0){e.flags.machine?console.log(Y("audit security",[],t)):e.flags.json?console.log("[]"):console.log("No skills found to audit.");return}let n=new Set,r=i.filter(a=>n.has(a.realPath)?!1:(n.add(a.realPath),!0));console.error(`Auditing ${r.length} skill${r.length>1?"s":""}...
474
+ `);let o=[];for(let a of r){console.error(` Scanning ${u.bold(a.name)}...`);let l=await Pe(a.realPath,a.name);o.push(l)}if(e.flags.machine)console.log(Y("audit security",Yr(o),t));else if(e.flags.json)console.log(JSON.stringify(o,null,2));else{for(let l of o)console.log(li(l));let a={safe:0,caution:0,warning:0,dangerous:0};for(let l of o)a[l.verdict]++;console.log(u.bold(`
475
+ Summary:`)),a.dangerous>0&&console.log(` ${u.red(`${a.dangerous} dangerous`)}`),a.warning>0&&console.log(` ${u.yellow(`${a.warning} warning`)}`),a.caution>0&&console.log(` ${a.caution} caution`),a.safe>0&&console.log(` ${u.green(`${a.safe} safe`)}`),console.log("")}}async function Qw(e,t,s){let i=null;try{let n=Oe(t);if(n.isLocal)throw new Error("Local paths are not supported for remote security audits. Use: asm audit security <installed-skill-name>");await Me(),n=await rs(n),console.error(`Cloning ${t} for audit...`),i=await De(n,e.flags.transport);let{join:r}=await import("path"),o=n.subpath?r(i,n.subpath):i,{name:a}=await _e(o),l=await Pe(o,a,n.owner,n.repo);e.flags.machine?console.log(Y("audit security",Yr([l]),s)):e.flags.json?console.log(Lr(l)):console.log(li(l))}catch(n){e.flags.machine&&(console.log(z("audit security",W.AUDIT_FAILED,n.message,s)),process.exit(1)),C(n.message),process.exit(1)}finally{i&&await ne(i)}}async function Xw(e,t,s){let i=await q(),r=(await Q(i,e.flags.scope)).filter(l=>l.dirName===t);r.length===0&&(e.flags.machine&&(console.log(z("audit security",W.SKILL_NOT_FOUND,`Skill "${t}" not found.`,s)),process.exit(1)),C(`Skill "${t}" not found. Use "asm list" to see installed skills.`),process.exit(1));let o=r[0];console.error(`Auditing installed skill: ${u.bold(o.name)}...
476
+ `);let a=await Pe(o.realPath,o.name);e.flags.machine?console.log(Y("audit security",Yr([a]),s)):e.flags.json?console.log(Lr(a)):console.log(li(a))}async function Zw(e){if(e.flags.help){Vw();return}let t=e.subcommand;switch(t||(C("Missing subcommand. Use: show, path, reset, or edit."),console.error('Run "asm config --help" for usage.'),process.exit(2)),t){case"show":{let s=await q();console.log(J(s));break}case"path":{console.log(pt());break}case"reset":{if(!e.flags.yes){process.stdin.isTTY||(C("Cannot prompt for confirmation in non-interactive mode. Use --yes to skip."),process.exit(2)),process.stderr.write(`${u.bold("Reset config to defaults?")} [y/N] `);let i=await G();i.toLowerCase()!=="y"&&i.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0))}let s=Qr();await eo(s),console.error(u.green("Config reset to defaults."));break}case"edit":{let s=process.env.VISUAL||process.env.EDITOR||"vi",[i,n]=$o(s),r=pt();await q();let{spawn:o}=await import("child_process");await new Promise((a,l)=>{let c=o(i,[...n,r],{stdio:"inherit"});c.on("close",()=>a()),c.on("error",l)});break}default:C(`Unknown config subcommand: "${t}". Use: show, path, reset, or edit.`),process.exit(2)}}function ev(){console.log(`${u.bold("Usage:")} asm install <source> [options]
476
477
 
477
478
  Install a skill from a GitHub repository, the curated registry, or a local path.
478
479
 
479
- ${W.bold("Source Format:")}
480
+ ${u.bold("Source Format:")}
480
481
  code-review Install by name from the curated registry
481
482
  author/code-review Install a scoped name (author/name) from registry
482
483
  github:owner/repo Install from default branch
@@ -489,7 +490,7 @@ ${W.bold("Source Format:")}
489
490
  ./relative/path/to/skill Install from a local folder (relative path)
490
491
  ~/path/to/skill Install from a local folder (home-relative path)
491
492
 
492
- ${W.bold("Options:")}
493
+ ${u.bold("Options:")}
493
494
  -p, --tool <name> Target tool (claude, codex, openclaw, agents, all)
494
495
  Use "all" to install to all tools (shared + symlinks)
495
496
  -s, --scope <scope> Installation scope: global or project (default: prompt)
@@ -511,82 +512,82 @@ ${W.bold("Options:")}
511
512
  --no-color Disable ANSI colors
512
513
  -V, --verbose Show debug output
513
514
 
514
- ${W.bold("Registry (bare name):")}
515
- asm install code-review ${W.dim("(resolve from registry)")}
516
- asm install luongnv89/code-review ${W.dim("(scoped name, no ambiguity)")}
517
- asm install code-review --no-cache ${W.dim("(force fresh registry fetch)")}
515
+ ${u.bold("Registry (bare name):")}
516
+ asm install code-review ${u.dim("(resolve from registry)")}
517
+ asm install luongnv89/code-review ${u.dim("(scoped name, no ambiguity)")}
518
+ asm install code-review --no-cache ${u.dim("(force fresh registry fetch)")}
518
519
 
519
- ${W.bold("Local folder:")}
520
- asm install ./my-skill ${W.dim("(relative path)")}
521
- asm install /home/user/skills/my-skill ${W.dim("(absolute path)")}
522
- asm install ~/skills/my-skill ${W.dim("(home-relative path)")}
523
- asm install ../other-project/skill ${W.dim("(parent-relative path)")}
524
- asm install ./skills-dir --all ${W.dim("(all skills in directory)")}
520
+ ${u.bold("Local folder:")}
521
+ asm install ./my-skill ${u.dim("(relative path)")}
522
+ asm install /home/user/skills/my-skill ${u.dim("(absolute path)")}
523
+ asm install ~/skills/my-skill ${u.dim("(home-relative path)")}
524
+ asm install ../other-project/skill ${u.dim("(parent-relative path)")}
525
+ asm install ./skills-dir --all ${u.dim("(all skills in directory)")}
525
526
 
526
- ${W.bold("Single-skill repo:")}
527
+ ${u.bold("Single-skill repo:")}
527
528
  asm install github:user/my-skill
528
529
  asm install github:user/my-skill#v1.0.0 -p claude
529
530
  asm install https://github.com/user/my-skill
530
- asm install github:user/my-skill -p all ${W.dim("(install to all tools)")}
531
- asm install github:user/private-skill -t ssh ${W.dim("(clone via SSH)")}
531
+ asm install github:user/my-skill -p all ${u.dim("(install to all tools)")}
532
+ asm install github:user/private-skill -t ssh ${u.dim("(clone via SSH)")}
532
533
 
533
- ${W.bold("Multi-skill repo:")}
534
+ ${u.bold("Multi-skill repo:")}
534
535
  asm install github:user/skills --path skills/code-review
535
536
  asm install github:user/skills --all -p claude -y
536
- asm install github:user/skills --all -p all -y ${W.dim("(all skills, all tools)")}
537
+ asm install github:user/skills --all -p all -y ${u.dim("(all skills, all tools)")}
537
538
  asm install https://github.com/user/skills --all
538
- asm install github:user/skills ${W.dim("(interactive picker)")}
539
+ asm install github:user/skills ${u.dim("(interactive picker)")}
539
540
 
540
- ${W.bold("Subfolder URL:")}
541
+ ${u.bold("Subfolder URL:")}
541
542
  asm install https://github.com/user/skills/tree/main/skills/agent-config
542
543
  asm install github:user/skills#main:skills/agent-config
543
544
 
544
- ${W.bold("Vercel skills CLI:")}
545
+ ${u.bold("Vercel skills CLI:")}
545
546
  asm install github:user/skills --method vercel --skill my-skill
546
547
  asm install https://github.com/user/skills -m vercel --skill my-skill -y
547
- ${W.dim("Delegates to npx skills add for Vercel tracking, then registers in asm")}`)}async function aH($,q,Z,Q,X,z,J,Y,G="global"){let U=await b0(Q),H=await O2(Q),V=Q===Z?null:Q.split(/[/\\]/).pop(),B=X||V||q.repo,_=C0(B),O=Y.find((w)=>w.name.toLowerCase()===U.name.toLowerCase()&&w.provider===J.name),K,L=!!O;if(O)if(O.version===U.version)K=$.flags.force?"REINSTALL":`UPDATE: ${O.version} (same version)`;else K=`UPDATE: ${O.version} ${U.version}`;else K="NEW";let F=B1(q,Z,Q,_,J,$.flags.force||L,G),A=H.some((w)=>["Shell commands","Code execution","Credentials"].includes(w.category)),M=H.some((w)=>["External URLs"].includes(w.category)),j=A?"high":M?"medium":"safe",T=A?W.red("[!] High Risk"):M?W.yellow("[~] Medium Risk"):W.green("[ok] Safe");return{metadata:U,skillName:_,warnings:H,installStatus:K,riskLevel:j,riskLabel:T,plan:F}}function iH($,q,Z,Q,X,z){let{metadata:J,warnings:Y,installStatus:G,riskLabel:U,plan:H}=$;if(X&&z){let V=W.dim(`[${z.index}/${z.total}]`),B=G==="NEW"?W.green(`[${G}]`):W.yellow(`[${G}]`);console.info(`${V} ${W.bold(J.name)} v${J.version} ${B} ${U}`)}else{let V=G==="NEW"?W.green(`[${G}]`):W.yellow(`[${G}]`);if(console.info(` ${W.bold(J.name)} v${J.version} ${V}`),console.info(`
548
- ${W.bold("Install preview:")}`),console.info(` ${W.bold("Name:")} ${J.name}`),console.info(` ${W.bold("Version:")} ${J.version}`),J.description)console.info(` ${W.bold("Description:")} ${W.dim(J.description)}`);if(J.effort)console.info(` ${W.bold("Effort:")} ${M6(J.effort)}`);if(console.info(` ${W.bold("Source:")} ${q}`),Q)console.info(` ${W.bold("Tool:")} All (${Q.map((B)=>B.label).join(", ")})`),console.info(` ${W.bold("Primary:")} ${Z.label} (${Z.name})`),console.info(` ${W.bold("Symlinks:")} ${Q.filter((B)=>B.name!==Z.name).map((B)=>B.label).join(", ")}`);else console.info(` ${W.bold("Tool:")} ${Z.label} (${Z.name})`);if(console.info(` ${W.bold("Scope:")} ${H.scope==="project"?"Project":"Global"}`),console.info(` ${W.bold("Target:")} ${H.targetDir}`),console.info(` ${W.bold("Status:")} ${V}`),console.info(` ${W.bold("Risk:")} ${U}`),Y.length>0){console.info(`
549
- ${W.bold("Security warnings:")}`);let B=new Map;for(let _ of Y){let O=B.get(_.category)||[];O.push(_),B.set(_.category,O)}for(let[_,O]of B){let L=["Shell commands","Code execution","Credentials"].includes(_)?W.red(`[${_}]`):W.yellow(`[${_}]`);console.info(`
550
- ${L} ${W.dim(`(${O.length} match${O.length>1?"es":""})`)}`);for(let F of O.slice(0,5))console.info(` ${W.dim(`${F.file}:${F.line}`)} -- ${F.match}`);if(O.length>5)console.info(W.dim(` ... and ${O.length-5} more`))}}}}async function oH($,q){if(q)return await L2($,q);return await r$($)}async function sH($){if($.flags.help){nH();return}let q=$.flags.machine?c0():void 0,Z=performance.now(),Q=$.subcommand;if(!Q)D("Missing required argument: <source>"),console.error('Run "asm install --help" for usage.'),process.exit(2);let X=null,z="github",J=8,Y=0,G=(H)=>{return Y++,`
551
- ${W.cyan(`[Step ${Y}/${J}]`)} ${W.bold(H)}`},U=()=>{if(X)e(X).finally(()=>process.exit(1));else process.exit(1)};process.on("SIGINT",U),process.on("SIGTERM",U);try{if(N4(Q)){console.info(`
552
- ${W.cyan("")} Resolving "${W.bold(Q)}" from registry...`);let{resolved:I,multipleMatches:R,suggestions:C}=await k5(Q,{noCache:$.flags.noCache});if(I){z="registry";let S=I.manifest,f=S.repository.replace("https://github.com/","");Q=S.skill_path?`github:${f}#${S.commit}:${S.skill_path}`:`github:${f}#${S.commit}`,console.info(` ${W.green("")} Resolved: ${W.bold(`${S.author}/${S.name}`)} @ ${S.commit.slice(0,7)}`)}else if(R.length>0){console.info(`
553
- ${W.yellow("")} Multiple skills found for "${W.bold(Q)}":`);let S=R.slice(0,5);for(let H0=0;H0<S.length;H0++){let X0=S[H0];console.info(` ${W.cyan(`${H0+1}.`)} ${W.bold(`${X0.author}/${X0.name}`)} ${X0.description}`)}if(!process.stdin.isTTY)D(`Ambiguous skill name "${Q}". Use a scoped name: asm install author/name`),process.exit(2);let f=`
554
- Select a skill [1-${S.length}]: `;process.stderr.write(f);let d=await new Promise((H0)=>{let X0="",l0=!1,d$=setTimeout(()=>{if(!l0)l0=!0,process.stdin.removeListener("data",W$),H0(X0.trim())},30000);function W$(n0){if(X0=n0.toString().trim(),!l0)l0=!0,clearTimeout(d$),process.stdin.removeListener("data",W$),H0(X0)}process.stdin.setEncoding("utf-8"),process.stdin.on("data",W$)}),p=parseInt(d,10);if(isNaN(p)||p<1||p>S.length)D("Invalid selection. Aborting."),process.exit(2);let r=S[p-1];z="registry";let p$=r.repository.replace("https://github.com/","");Q=r.skill_path?`github:${p$}#${r.commit}:${r.skill_path}`:`github:${p$}#${r.commit}`,console.info(` ${W.green("")} Selected: ${W.bold(`${r.author}/${r.name}`)} @ ${r.commit.slice(0,7)}`)}else if(D4(Q)){if(D(`Skill "${Q}" not found in the registry.`),C.length>0)console.error(`
555
- Did you mean: ${C.map((S)=>W.cyan(S)).join(", ")}?`);process.exit(1)}else console.info(` ${W.dim("Not found in registry trying existing sources...")}`),z="pre-indexed"}console.info(G("Parsing source"));let H=P0(Q),V=!!H.isLocal;if(V){let I=H.localPath;console.info(` ${W.dim(`local: ${I}`)}`);let{stat:R}=await import("fs/promises");try{if(!(await R(I)).isDirectory())throw Error(`Path is not a directory: ${I}`)}catch(C){if(C.code==="ENOENT")throw Error(`Path does not exist: ${I}`);throw C}}else await E0(),H=await s$(H),console.info(` ${W.dim(Q)}`);if($.flags.method==="vercel"){console.info(G("Installing via Vercel skills CLI")),await F2();let I=I2(H),R=$.flags.path||null;console.info(` ${W.dim(`npx skills add ${I}${R?` --skill ${R}`:""}`)}`);let{stdout:C,stderr:S}=await A2(I,R);if(C.trim())console.info(` ${W.dim(C.trim())}`);if(S.trim())console.error(` ${W.dim(S.trim())}`);console.info(` ${W.green("")} Vercel skills CLI install completed`),$.flags.force=!0,console.info(` ${W.dim("Continuing with asm install to register in local inventory...")}`)}console.info(G("Selecting provider"));let B=await h(),{provider:_,allProviders:O}=await i0(B,$.flags.provider,!!process.stdin.isTTY);console.info(G("Selecting scope"));let K;if($.flags.scope==="global"||$.flags.scope==="project")K=$.flags.scope,console.info(` ${W.dim(`scope: ${K}`)}${K==="global"?` (${_.global})`:` (${_.project})`}`);else if(!process.stdin.isTTY||$.flags.yes)K="global",console.info(` ${W.dim("scope: global (default)")} (${_.global})`);else{let I=[{label:`Global (${_.global})`,hint:"Available in all projects",checked:!0},{label:`Project (${_.project})`,hint:"Available only in this project",checked:!1}];console.info("");let R=await a0({items:I});if(R.length===0)throw Error("No scope selected. Aborting.");K=R[0]===0?"global":"project",console.info(` Selected: ${W.bold(K)} ${W.dim(`(${K==="global"?_.global:_.project})`)}`)}if(V)console.info(G("Reading local source")),console.info(` ${W.dim(H.localPath)}`),X=null;else{console.info(G("Cloning repository"));let I=$.flags.transport,R=I==="ssh"?H.sshCloneUrl:I==="https"?H.cloneUrl:`${H.cloneUrl} ${W.dim("(auto)")}`;console.info(` ${R}${H.ref?` ${W.dim(`(ref: ${H.ref})`)}`:""}${H.subpath?` ${W.dim(`(path: ${H.subpath})`)}`:""}`),X=await S0(H,I)}let L=V?H.localPath:X;console.info(G("Scanning for skills"));let{join:F}=await import("path"),A=[],M=$.flags.path||H.subpath,j=[];if(M){let I=F(L,M);try{await b0(I)}catch{throw Error(`No SKILL.md found at path "${M}" in the repository.`)}console.info(` Found skill at ${W.bold(M)}`),j=[{skillDir:I,nameOverride:$.flags.name}]}else{let I=!1;try{await b0(L),I=!0}catch{}if(I){let R=await b0(L);console.info(` Found: ${W.bold(R.name)} v${R.version}`),j=[{skillDir:L,nameOverride:$.flags.name}]}else{console.info(" No SKILL.md at root. Scanning subdirectories...");let R=await t$(L);if(R.length===0)throw Error("No skills found in this repository. Skills must have a SKILL.md file.");console.info(` Found ${W.bold(String(R.length))} skill(s):
556
- `);for(let f=0;f<R.length;f++){let d=W.cyan(` ${String(f+1).padStart(String(R.length).length)})`);if(console.info(`${d} ${W.bold(R[f].name)} ${W.dim(`v${R[f].version}`)} ${W.dim(`(${R[f].relPath})`)}`),R[f].description)console.info(` ${W.dim(R[f].description)}`)}console.info(G("Selecting skills")),Y--;let C;if($.flags.all&&($.flags.yes||!process.stdin.isTTY))C=R.map((f)=>f.relPath),console.info(` Selected all ${W.bold(String(C.length))} skills`);else if(process.stdin.isTTY)if(R.length===1)C=[R[0].relPath],console.info(` Auto-selected: ${W.bold(R[0].name)} ${W.dim(`v${R[0].version}`)}`);else{let f=R.map((p)=>({label:p.name,hint:`v${p.version}${p.description?" "+p.description:""}`,checked:!!$.flags.all}));console.info("");let d=await a0({items:f});if(d.length===0)throw Error("No skills selected. Aborting.");C=d.map((p)=>R[p].relPath),console.info(` Selected ${W.bold(String(C.length))} skill(s)`)}else{D(`Repository contains ${R.length} skills. Use --path <subdir> to pick one or --all to install all.
548
+ ${u.dim("Delegates to npx skills add for Vercel tracking, then registers in asm")}`)}async function tv(e,t,s,i,n,r,o,a,l="global"){let c=await _e(i),d=await Io(i),f=i===s?null:i.split(/[/\\]/).pop(),p=n||f||t.repo,m=Te(p),y=a.find(E=>E.name.toLowerCase()===c.name.toLowerCase()&&E.provider===o.name),h,g=!!y;y?y.version===c.version?h=e.flags.force?"REINSTALL":`UPDATE: ${y.version} (same version)`:h=`UPDATE: ${y.version} \u2192 ${c.version}`:h="NEW";let b=_i(t,s,i,m,o,e.flags.force||g,l),v=d.some(E=>["Shell commands","Code execution","Credentials"].includes(E.category)),k=d.some(E=>["External URLs"].includes(E.category)),x=v?"high":k?"medium":"safe",S=v?u.red("[!] High Risk"):k?u.yellow("[~] Medium Risk"):u.green("[ok] Safe");return{metadata:c,skillName:m,warnings:d,installStatus:h,riskLevel:x,riskLabel:S,plan:b}}function sv(e,t,s,i,n,r){let{metadata:o,warnings:a,installStatus:l,riskLabel:c,plan:d}=e;if(n&&r){let f=u.dim(`[${r.index}/${r.total}]`),p=l==="NEW"?u.green(`[${l}]`):u.yellow(`[${l}]`);console.info(`${f} ${u.bold(o.name)} v${o.version} ${p} ${c}`)}else{let f=l==="NEW"?u.green(`[${l}]`):u.yellow(`[${l}]`);if(console.info(` ${u.bold(o.name)} v${o.version} ${f}`),console.info(`
549
+ ${u.bold("Install preview:")}`),console.info(` ${u.bold("Name:")} ${o.name}`),console.info(` ${u.bold("Version:")} ${o.version}`),o.description&&console.info(` ${u.bold("Description:")} ${u.dim(o.description)}`),o.effort&&console.info(` ${u.bold("Effort:")} ${oo(o.effort)}`),console.info(` ${u.bold("Source:")} ${t}`),i?(console.info(` ${u.bold("Tool:")} All (${i.map(p=>p.label).join(", ")})`),console.info(` ${u.bold("Primary:")} ${s.label} (${s.name})`),console.info(` ${u.bold("Symlinks:")} ${i.filter(p=>p.name!==s.name).map(p=>p.label).join(", ")}`)):console.info(` ${u.bold("Tool:")} ${s.label} (${s.name})`),console.info(` ${u.bold("Scope:")} ${d.scope==="project"?"Project":"Global"}`),console.info(` ${u.bold("Target:")} ${d.targetDir}`),console.info(` ${u.bold("Status:")} ${f}`),console.info(` ${u.bold("Risk:")} ${c}`),a.length>0){console.info(`
550
+ ${u.bold("Security warnings:")}`);let p=new Map;for(let m of a){let y=p.get(m.category)||[];y.push(m),p.set(m.category,y)}for(let[m,y]of p){let g=["Shell commands","Code execution","Credentials"].includes(m)?u.red(`[${m}]`):u.yellow(`[${m}]`);console.info(`
551
+ ${g} ${u.dim(`(${y.length} match${y.length>1?"es":""})`)}`);for(let b of y.slice(0,5))console.info(` ${u.dim(`${b.file}:${b.line}`)} -- ${b.match}`);y.length>5&&console.info(u.dim(` ... and ${y.length-5} more`))}}}}async function iv(e,t){return t?await Lo(e,t):await as(e)}async function nv(e){if(e.flags.help){ev();return}let t=e.flags.machine?Ge():void 0,s=performance.now(),i=e.subcommand;i||(C("Missing required argument: <source>"),console.error('Run "asm install --help" for usage.'),process.exit(2));let n=null,r="github",o=8,a=0,l=d=>(a++,`
552
+ ${u.cyan(`[Step ${a}/${o}]`)} ${u.bold(d)}`),c=()=>{n?ne(n).finally(()=>process.exit(1)):process.exit(1)};process.on("SIGINT",c),process.on("SIGTERM",c);try{if(kr(i)){console.info(`
553
+ ${u.cyan("\u25CF")} Resolving "${u.bold(i)}" from registry...`);let{resolved:w,multipleMatches:$,suggestions:I}=await Ic(i,{noCache:e.flags.noCache});if(w){r="registry";let L=w.manifest,T=L.repository.replace("https://github.com/","");i=L.skill_path?`github:${T}#${L.commit}:${L.skill_path}`:`github:${T}#${L.commit}`,console.info(` ${u.green("\u2713")} Resolved: ${u.bold(`${L.author}/${L.name}`)} @ ${L.commit.slice(0,7)}`)}else if($.length>0){console.info(`
554
+ ${u.yellow("\u26A0")} Multiple skills found for "${u.bold(i)}":`);let L=$.slice(0,5);for(let se=0;se<L.length;se++){let j=L[se];console.info(` ${u.cyan(`${se+1}.`)} ${u.bold(`${j.author}/${j.name}`)} \u2014 ${j.description}`)}process.stdin.isTTY||(C(`Ambiguous skill name "${i}". Use a scoped name: asm install author/name`),process.exit(2));let T=`
555
+ Select a skill [1-${L.length}]: `;process.stderr.write(T);let K=await new Promise(se=>{let j="",ye=!1,Ne=setTimeout(()=>{ye||(ye=!0,process.stdin.removeListener("data",Ie),se(j.trim()))},3e4);function Ie(dt){j=dt.toString().trim(),ye||(ye=!0,clearTimeout(Ne),process.stdin.removeListener("data",Ie),se(j))}process.stdin.setEncoding("utf-8"),process.stdin.on("data",Ie)}),U=parseInt(K,10);(isNaN(U)||U<1||U>L.length)&&(C("Invalid selection. Aborting."),process.exit(2));let ee=L[U-1];r="registry";let Xt=ee.repository.replace("https://github.com/","");i=ee.skill_path?`github:${Xt}#${ee.commit}:${ee.skill_path}`:`github:${Xt}#${ee.commit}`,console.info(` ${u.green("\u2713")} Selected: ${u.bold(`${ee.author}/${ee.name}`)} @ ${ee.commit.slice(0,7)}`)}else Sr(i)?(C(`Skill "${i}" not found in the registry.`),I.length>0&&console.error(`
556
+ Did you mean: ${I.map(L=>u.cyan(L)).join(", ")}?`),process.exit(1)):(console.info(` ${u.dim("Not found in registry \u2014 trying existing sources...")}`),r="pre-indexed")}console.info(l("Parsing source"));let d=Oe(i),f=!!d.isLocal;if(f){let w=d.localPath;console.info(` ${u.dim(`local: ${w}`)}`);let{stat:$}=await import("fs/promises");try{if(!(await $(w)).isDirectory())throw new Error(`Path is not a directory: ${w}`)}catch(I){throw I.code==="ENOENT"?new Error(`Path does not exist: ${w}`):I}}else await Me(),d=await rs(d),console.info(` ${u.dim(i)}`);if(e.flags.method==="vercel"){console.info(l("Installing via Vercel skills CLI")),await Ro();let w=To(d),$=e.flags.path||null;console.info(` ${u.dim(`npx skills add ${w}${$?` --skill ${$}`:""}`)}`);let{stdout:I,stderr:L}=await Oo(w,$);I.trim()&&console.info(` ${u.dim(I.trim())}`),L.trim()&&console.error(` ${u.dim(L.trim())}`),console.info(` ${u.green("\u2713")} Vercel skills CLI install completed`),e.flags.force=!0,console.info(` ${u.dim("Continuing with asm install to register in local inventory...")}`)}console.info(l("Selecting provider"));let p=await q(),{provider:m,allProviders:y}=await ze(p,e.flags.provider,!!process.stdin.isTTY);console.info(l("Selecting scope"));let h;if(e.flags.scope==="global"||e.flags.scope==="project")h=e.flags.scope,console.info(` ${u.dim(`scope: ${h}`)}${h==="global"?` (${m.global})`:` (${m.project})`}`);else if(!process.stdin.isTTY||e.flags.yes)h="global",console.info(` ${u.dim("scope: global (default)")} (${m.global})`);else{let w=[{label:`Global (${m.global})`,hint:"Available in all projects",checked:!0},{label:`Project (${m.project})`,hint:"Available only in this project",checked:!1}];console.info("");let $=await We({items:w});if($.length===0)throw new Error("No scope selected. Aborting.");h=$[0]===0?"global":"project",console.info(` Selected: ${u.bold(h)} ${u.dim(`(${h==="global"?m.global:m.project})`)}`)}if(f)console.info(l("Reading local source")),console.info(` ${u.dim(d.localPath)}`),n=null;else{console.info(l("Cloning repository"));let w=e.flags.transport,$=w==="ssh"?d.sshCloneUrl:w==="https"?d.cloneUrl:`${d.cloneUrl} ${u.dim("(auto)")}`;console.info(` ${$}${d.ref?` ${u.dim(`(ref: ${d.ref})`)}`:""}${d.subpath?` ${u.dim(`(path: ${d.subpath})`)}`:""}`),n=await De(d,w)}let g=f?d.localPath:n;console.info(l("Scanning for skills"));let{join:b}=await import("path"),v=[],k=e.flags.path||d.subpath,x=[];if(k){let w=b(g,k);try{await _e(w)}catch{throw new Error(`No SKILL.md found at path "${k}" in the repository.`)}console.info(` Found skill at ${u.bold(k)}`),x=[{skillDir:w,nameOverride:e.flags.name}]}else{let w=!1;try{await _e(g),w=!0}catch{}if(w){let $=await _e(g);console.info(` Found: ${u.bold($.name)} v${$.version}`),x=[{skillDir:g,nameOverride:e.flags.name}]}else{console.info(" No SKILL.md at root. Scanning subdirectories...");let $=await os(g);if($.length===0)throw new Error("No skills found in this repository. Skills must have a SKILL.md file.");console.info(` Found ${u.bold(String($.length))} skill(s):
557
+ `);for(let T=0;T<$.length;T++){let K=u.cyan(` ${String(T+1).padStart(String($.length).length)})`);console.info(`${K} ${u.bold($[T].name)} ${u.dim(`v${$[T].version}`)} ${u.dim(`(${$[T].relPath})`)}`),$[T].description&&console.info(` ${u.dim($[T].description)}`)}console.info(l("Selecting skills")),a--;let I;if(e.flags.all&&(e.flags.yes||!process.stdin.isTTY))I=$.map(T=>T.relPath),console.info(` Selected all ${u.bold(String(I.length))} skills`);else if(process.stdin.isTTY)if($.length===1)I=[$[0].relPath],console.info(` Auto-selected: ${u.bold($[0].name)} ${u.dim(`v${$[0].version}`)}`);else{let T=$.map(U=>({label:U.name,hint:`v${U.version}${U.description?" "+U.description:""}`,checked:!!e.flags.all}));console.info("");let K=await We({items:T});if(K.length===0)throw new Error("No skills selected. Aborting.");I=K.map(U=>$[U].relPath),console.info(` Selected ${u.bold(String(I.length))} skill(s)`)}else{C(`Repository contains ${$.length} skills. Use --path <subdir> to pick one or --all to install all.
557
558
  Available skills:
558
- ${R.map((f)=>` --path ${f.relPath}`).join(`
559
- `)}`),process.exit(2);return}let S=_2(C);if(S.length>0){let f=S.map((p)=>` - ${p.name}: ${p.paths.map((r)=>`"${r}"`).join(", ")}`).join(`
560
- `),d=Error(`Duplicate skill names detected in selection:
561
- ${f}
562
- Choose one path per skill name or install with --path.`);throw d.duplicates=S,d}j=C.map((f)=>({skillDir:F(L,f),nameOverride:C.length===1?$.flags.name:null})),Y++}}console.info(G("Inspecting skills"));let T=await o(B,"both"),w=[],x=j.length>1;for(let I=0;I<j.length;I++){let{skillDir:R,nameOverride:C}=j[I],S=await aH($,H,L,R,C,B,_,T,K);w.push(S),iH(S,Q,_,O,x,x?{index:I+1,total:j.length}:void 0)}if(x){if(console.info(""),console.info(` ${W.bold("Install settings:")}`),console.info(` ${W.bold("Source:")} ${Q}`),O)console.info(` ${W.bold("Tool:")} All (${O.map((f)=>f.label).join(", ")})`);else console.info(` ${W.bold("Tool:")} ${_.label} (${_.name})`);console.info(` ${W.bold("Scope:")} ${K==="project"?"Project":"Global"}`);let I=w.filter((f)=>f.riskLevel==="high").length,R=w.filter((f)=>f.riskLevel==="medium").length,C=w.filter((f)=>f.riskLevel==="safe").length,S=[];if(C>0)S.push(W.green(`${C} Safe`));if(R>0)S.push(W.yellow(`${R} Medium Risk`));if(I>0)S.push(W.red(`${I} High Risk`));console.info(` ${W.bold("Risk:")} ${S.join(", ")}`)}if(console.info(G("Installing")),!$.flags.yes){let I=w.some((f)=>f.riskLevel==="high");if(!process.stdin.isTTY)D("Cannot prompt for confirmation in non-interactive mode. Use --yes to skip."),process.exit(2);let R=x?`${w.length} skills`:`"${w[0].metadata.name}"`,C=I?`
563
- ${W.red("[!]")} ${W.bold(`Install ${R}? Some have high-risk patterns.`)} [y/N] `:`
564
- ${W.bold(`Install ${R}?`)} [Y/n] `;process.stderr.write(C);let S=await Q0();if(I){if(S.toLowerCase()!=="y"&&S.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}else if(S.toLowerCase()==="n"||S.toLowerCase()==="no")console.error("Aborted."),process.exit(0)}let P=X?await b6(X):null,y=[];for(let I=0;I<w.length;I++){let R=w[I],C=x?W.dim(`[${I+1}/${w.length}]`)+" ":" ";try{console.info(`${C}Installing ${W.bold(R.metadata.name)}...`);let S=await oH(R.plan,O);A.push(S),console.info(`${C}${W.green("")} ${R.metadata.name} installed to ${W.dim(R.plan.targetDir)}`);try{let f=V?`local:${H.localPath}`:`github:${H.owner}/${H.repo}`,d=V?"local":z==="registry"?"registry":"github";await v$(S.name,{source:f,commitHash:P||"unknown",ref:H.ref||"main",installedAt:new Date().toISOString(),provider:R.plan.providerName,sourceType:d,...z==="registry"?{registryName:S.name}:{}})}catch{}}catch(S){y.push({name:R.metadata.name,error:S.message}),console.error(`${C}${W.red("")} ${W.bold(R.metadata.name)} ${W.red(S.message)}`)}}if(process.removeListener("SIGINT",U),process.removeListener("SIGTERM",U),y.length>0){console.error(`
565
- ${W.yellow(`${y.length} skill(s) failed to install:`)}`);for(let I of y)console.error(` ${W.red("")} ${I.name}: ${I.error}`)}if($.flags.machine){q?.();let I=A.map((R)=>({name:R.name,path:R.path,version:R.version,provider:R.provider,source:R.source,resolution_source:z}));console.log(l("install",I.length===1?I[0]:I,Z))}else if($.flags.json){let I=A.map((R)=>({...R,resolutionSource:z}));console.log(JSON.stringify(I.length===1?I[0]:I,null,2))}else if(A.length===1)console.error(W.green(`
566
- Done! Installed "${A[0].name}" to ${A[0].path}`));else if(A.length>0)console.error(`
567
- ${W.green(`Done! Installed ${A.length} skill(s) successfully.`)}`)}catch(H){if(process.removeListener("SIGINT",U),process.removeListener("SIGTERM",U),$.flags.machine)q?.(),console.log(a("install",n.INSTALL_FAILED,H.message,Z,H?.duplicates?{duplicates:H.duplicates}:void 0));else if($.flags.json){let V={success:!1,error:H.message};if(H?.duplicates)V.duplicates=H.duplicates;console.log(JSON.stringify(V,null,2))}else D(H.message);process.exit(1)}finally{if(X)await e(X);q?.()}}function tH(){console.log(`${W.bold("Usage:")} asm export [options]
559
+ ${$.map(T=>` --path ${T.relPath}`).join(`
560
+ `)}`),process.exit(2);return}let L=No(I);if(L.length>0){let T=L.map(U=>` - ${U.name}: ${U.paths.map(ee=>`"${ee}"`).join(", ")}`).join(`
561
+ `),K=new Error(`Duplicate skill names detected in selection:
562
+ ${T}
563
+ Choose one path per skill name or install with --path.`);throw K.duplicates=L,K}x=I.map(T=>({skillDir:b(g,T),nameOverride:I.length===1?e.flags.name:null})),a++}}console.info(l("Inspecting skills"));let S=await Q(p,"both"),E=[],O=x.length>1;for(let w=0;w<x.length;w++){let{skillDir:$,nameOverride:I}=x[w],L=await tv(e,d,g,$,I,p,m,S,h);E.push(L),sv(L,i,m,y,O,O?{index:w+1,total:x.length}:void 0)}if(O){console.info(""),console.info(` ${u.bold("Install settings:")}`),console.info(` ${u.bold("Source:")} ${i}`),console.info(y?` ${u.bold("Tool:")} All (${y.map(T=>T.label).join(", ")})`:` ${u.bold("Tool:")} ${m.label} (${m.name})`),console.info(` ${u.bold("Scope:")} ${h==="project"?"Project":"Global"}`);let w=E.filter(T=>T.riskLevel==="high").length,$=E.filter(T=>T.riskLevel==="medium").length,I=E.filter(T=>T.riskLevel==="safe").length,L=[];I>0&&L.push(u.green(`${I} Safe`)),$>0&&L.push(u.yellow(`${$} Medium Risk`)),w>0&&L.push(u.red(`${w} High Risk`)),console.info(` ${u.bold("Risk:")} ${L.join(", ")}`)}if(console.info(l("Installing")),!e.flags.yes){let w=E.some(T=>T.riskLevel==="high");process.stdin.isTTY||(C("Cannot prompt for confirmation in non-interactive mode. Use --yes to skip."),process.exit(2));let $=O?`${E.length} skills`:`"${E[0].metadata.name}"`,I=w?`
564
+ ${u.red("[!]")} ${u.bold(`Install ${$}? Some have high-risk patterns.`)} [y/N] `:`
565
+ ${u.bold(`Install ${$}?`)} [Y/n] `;process.stderr.write(I);let L=await G();w?L.toLowerCase()!=="y"&&L.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0)):(L.toLowerCase()==="n"||L.toLowerCase()==="no")&&(console.error("Aborted."),process.exit(0))}let P=n?await bo(n):null,M=[];for(let w=0;w<E.length;w++){let $=E[w],I=O?u.dim(`[${w+1}/${E.length}]`)+" ":" ";try{console.info(`${I}Installing ${u.bold($.metadata.name)}...`);let L=await iv($.plan,y);v.push(L),console.info(`${I}${u.green("\u2713")} ${$.metadata.name} installed to ${u.dim($.plan.targetDir)}`);try{let T=f?`local:${d.localPath}`:`github:${d.owner}/${d.repo}`,K=f?"local":r==="registry"?"registry":"github";await ht(L.name,{source:T,commitHash:P||"unknown",ref:d.ref||"main",installedAt:new Date().toISOString(),provider:$.plan.providerName,sourceType:K,...r==="registry"?{registryName:L.name}:{}})}catch{}}catch(L){M.push({name:$.metadata.name,error:L.message}),console.error(`${I}${u.red("\u2717")} ${u.bold($.metadata.name)} \u2014 ${u.red(L.message)}`)}}if(process.removeListener("SIGINT",c),process.removeListener("SIGTERM",c),M.length>0){console.error(`
566
+ ${u.yellow(`${M.length} skill(s) failed to install:`)}`);for(let w of M)console.error(` ${u.red("\u2717")} ${w.name}: ${w.error}`)}if(e.flags.machine){t?.();let w=v.map($=>({name:$.name,path:$.path,version:$.version,provider:$.provider,source:$.source,resolution_source:r}));console.log(Y("install",w.length===1?w[0]:w,s))}else if(e.flags.json){let w=v.map($=>({...$,resolutionSource:r}));console.log(JSON.stringify(w.length===1?w[0]:w,null,2))}else v.length===1?console.error(u.green(`
567
+ Done! Installed "${v[0].name}" to ${v[0].path}`)):v.length>0&&console.error(`
568
+ ${u.green(`Done! Installed ${v.length} skill(s) successfully.`)}`)}catch(d){if(process.removeListener("SIGINT",c),process.removeListener("SIGTERM",c),e.flags.machine)t?.(),console.log(z("install",W.INSTALL_FAILED,d.message,s,d?.duplicates?{duplicates:d.duplicates}:void 0));else if(e.flags.json){let f={success:!1,error:d.message};d?.duplicates&&(f.duplicates=d.duplicates),console.log(JSON.stringify(f,null,2))}else C(d.message);process.exit(1)}finally{n&&await ne(n),t?.()}}function rv(){console.log(`${u.bold("Usage:")} asm export [options]
568
569
 
569
570
  Export skill inventory as a portable JSON manifest. Useful for backup,
570
571
  sharing, or scripting.
571
572
 
572
- ${W.bold("Options:")}
573
+ ${u.bold("Options:")}
573
574
  -s, --scope <s> Filter: global, project, or both (default: both)
574
575
  --no-color Disable ANSI colors
575
576
  -V, --verbose Show debug output
576
577
 
577
- ${W.bold("Examples:")}
578
- asm export ${W.dim("Export all skills")}
579
- asm export -s global ${W.dim("Export global skills only")}
580
- asm export > skills.json ${W.dim("Save to file")}`)}async function rH($){if($.flags.help){tH();return}let q=await h(),Z=await o(q,$.flags.scope),Q=v5(Z);console.log(JSON.stringify(Q,null,2))}function eH(){console.log(`${W.bold("Usage:")} asm import <file> [options]
578
+ ${u.bold("Examples:")}
579
+ asm export ${u.dim("Export all skills")}
580
+ asm export -s global ${u.dim("Export global skills only")}
581
+ asm export > skills.json ${u.dim("Save to file")}`)}async function ov(e){if(e.flags.help){rv();return}let t=await q(),s=await Q(t,e.flags.scope),i=Lc(s);console.log(JSON.stringify(i,null,2))}function av(){console.log(`${u.bold("Usage:")} asm import <file> [options]
581
582
 
582
583
  Import skills from a previously exported JSON manifest. Recreates skill
583
584
  installations based on the manifest metadata.
584
585
 
585
586
  Skills that already exist at the target location are skipped unless --force
586
587
  is used. Skills whose source files cannot be found locally are reported as
587
- failed install them first with "asm install".
588
+ failed \u2014 install them first with "asm install".
588
589
 
589
- ${W.bold("Options:")}
590
+ ${u.bold("Options:")}
590
591
  -s, --scope <s> Filter: global, project, or both (default: both)
591
592
  -f, --force Overwrite existing skills
592
593
  -y, --yes Skip confirmation prompt
@@ -594,62 +595,62 @@ ${W.bold("Options:")}
594
595
  --no-color Disable ANSI colors
595
596
  -V, --verbose Show debug output
596
597
 
597
- ${W.bold("Examples:")}
598
- asm import skills.json ${W.dim("Import from manifest")}
599
- asm import skills.json --force ${W.dim("Overwrite existing skills")}
600
- asm import skills.json -s global ${W.dim("Import only global skills")}
601
- asm export > backup.json ${W.dim("Export first, then import later")}
602
- asm import backup.json ${W.dim("Restore from backup")}`)}async function $B($){if($.flags.help){eH();return}let q=$.subcommand;if(!q)D("Missing required argument: <file>"),console.error('Run "asm import --help" for usage.'),process.exit(2);let{resolve:Z}=await import("path"),Q=Z(q),X;try{X=await m5(Q)}catch(G){D(G.message),process.exit(1)}let z=X.skills.length;if(z===0){if($.flags.json)console.log(JSON.stringify({total:0,installed:0,skipped:0,failed:0,results:[]},null,2));else console.log("Manifest contains no skills. Nothing to import.");return}let J=$.flags.scope==="both"?"all scopes":$.flags.scope;if(console.error(`${W.bold("Importing")} ${z} skill${z>1?"s":""} from ${W.dim(Q)}`),console.error(` Scope filter: ${J}`),$.flags.force)console.error(` ${W.yellow("Force mode: existing skills will be overwritten")}`);if(!$.flags.yes&&process.stdin.isTTY){process.stderr.write(`
603
- ${W.bold("Proceed?")} [y/N] `);let G=await Q0();if(G.toLowerCase()!=="y"&&G.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let Y=await p5(X,{force:$.flags.force,dryRun:!1,scopeFilter:$.flags.scope});if($.flags.json){console.log(JSON.stringify(Y,null,2));return}if(Y.total===0){console.error(`
604
- Nothing to import after scope filtering (--scope ${$.flags.scope}). All skills in the manifest were excluded.`);return}console.error("");for(let G of Y.results){let U=G.status==="installed"?W.green("+++"):G.status==="skipped"?W.yellow("---"):G.status==="dry-run"?W.cyan("~~~"):W.red("!!!"),H=G.reason?` ${W.dim(G.reason)}`:"",V=G.path?` ${W.dim(G.path)}`:"";console.error(` ${U} ${G.skillName} (${G.provider}/${G.scope})${H}${V}`)}if(console.error(""),console.error(`${W.bold("Summary:")} ${Y.total} total, ${W.green(String(Y.installed))} installed, ${W.yellow(String(Y.skipped))} skipped, ${W.red(String(Y.failed))} failed`),Y.failed>0)process.exitCode=1}function qB(){console.log(`${W.bold("Usage:")} asm init <name> [options]
598
+ ${u.bold("Examples:")}
599
+ asm import skills.json ${u.dim("Import from manifest")}
600
+ asm import skills.json --force ${u.dim("Overwrite existing skills")}
601
+ asm import skills.json -s global ${u.dim("Import only global skills")}
602
+ asm export > backup.json ${u.dim("Export first, then import later")}
603
+ asm import backup.json ${u.dim("Restore from backup")}`)}async function lv(e){if(e.flags.help){av();return}let t=e.subcommand;t||(C("Missing required argument: <file>"),console.error('Run "asm import --help" for usage.'),process.exit(2));let{resolve:s}=await import("path"),i=s(t),n;try{n=await Mc(i)}catch(l){C(l.message),process.exit(1)}let r=n.skills.length;if(r===0){e.flags.json?console.log(JSON.stringify({total:0,installed:0,skipped:0,failed:0,results:[]},null,2)):console.log("Manifest contains no skills. Nothing to import.");return}let o=e.flags.scope==="both"?"all scopes":e.flags.scope;if(console.error(`${u.bold("Importing")} ${r} skill${r>1?"s":""} from ${u.dim(i)}`),console.error(` Scope filter: ${o}`),e.flags.force&&console.error(` ${u.yellow("Force mode: existing skills will be overwritten")}`),!e.flags.yes&&process.stdin.isTTY){process.stderr.write(`
604
+ ${u.bold("Proceed?")} [y/N] `);let l=await G();l.toLowerCase()!=="y"&&l.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0))}let a=await Dc(n,{force:e.flags.force,dryRun:!1,scopeFilter:e.flags.scope});if(e.flags.json){console.log(JSON.stringify(a,null,2));return}if(a.total===0){console.error(`
605
+ Nothing to import after scope filtering (--scope ${e.flags.scope}). All skills in the manifest were excluded.`);return}console.error("");for(let l of a.results){let c=l.status==="installed"?u.green("+++"):l.status==="skipped"?u.yellow("---"):l.status==="dry-run"?u.cyan("~~~"):u.red("!!!"),d=l.reason?` ${u.dim(l.reason)}`:"",f=l.path?` ${u.dim(l.path)}`:"";console.error(` ${c} ${l.skillName} (${l.provider}/${l.scope})${d}${f}`)}console.error(""),console.error(`${u.bold("Summary:")} ${a.total} total, ${u.green(String(a.installed))} installed, ${u.yellow(String(a.skipped))} skipped, ${u.red(String(a.failed))} failed`),a.failed>0&&(process.exitCode=1)}function cv(){console.log(`${u.bold("Usage:")} asm init <name> [options]
605
606
 
606
607
  Scaffold a new skill directory with a SKILL.md template. Creates a
607
608
  ready-to-edit skill in the target tool's skill folder.
608
609
 
609
- ${W.bold("Options:")}
610
+ ${u.bold("Options:")}
610
611
  -p, --tool <name> Target tool (claude, codex, openclaw, agents)
611
612
  --path <dir> Scaffold in specified directory instead of provider path
612
613
  -f, --force Overwrite if skill already exists
613
614
  --no-color Disable ANSI colors
614
615
  -V, --verbose Show debug output
615
616
 
616
- ${W.bold("Examples:")}
617
- asm init my-skill ${W.dim("Scaffold (interactive tool)")}
618
- asm init my-skill -p claude ${W.dim("Scaffold in Claude Code")}
619
- asm init my-skill --path ./skills ${W.dim("Scaffold in custom directory")}`)}async function ZB($){if($.flags.help){qB();return}let q=$.subcommand;if(!q)D("Missing required argument: <name>"),console.error('Run "asm init --help" for usage.'),process.exit(2);let Z=C0(q),Q;if($.flags.path){let{resolve:X}=await import("path");Q=X($.flags.path)}else{let X=await h(),{provider:z}=await i0(X,$.flags.provider,!!process.stdin.isTTY),{join:J}=await import("path"),{resolveProviderPath:Y}=await import("./chunk-chw0sgjp.js"),G=Y(X.providers.find((U)=>U.name===z.name).global);Q=J(G,Z)}if(await c5(Q)){if(!$.flags.force){if(!process.stdin.isTTY)D(`Directory already exists: ${Q}. Use --force to overwrite.`),process.exit(2);process.stderr.write(`${W.yellow(`Directory already exists: ${Q}`)}
620
- ${W.bold("Overwrite?")} [y/N] `);let X=await Q0();if(X.toLowerCase()!=="y"&&X.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}}await d5(Z,Q),console.error(W.green(`Done! Created skill "${Z}" at ${Q}`))}function QB(){console.log(`${W.bold("Usage:")} asm stats [options]
617
+ ${u.bold("Examples:")}
618
+ asm init my-skill ${u.dim("Scaffold (interactive tool)")}
619
+ asm init my-skill -p claude ${u.dim("Scaffold in Claude Code")}
620
+ asm init my-skill --path ./skills ${u.dim("Scaffold in custom directory")}`)}async function uv(e){if(e.flags.help){cv();return}let t=e.subcommand;t||(C("Missing required argument: <name>"),console.error('Run "asm init --help" for usage.'),process.exit(2));let s=Te(t),i;if(e.flags.path){let{resolve:n}=await import("path");i=n(e.flags.path)}else{let n=await q(),{provider:r}=await ze(n,e.flags.provider,!!process.stdin.isTTY),{join:o}=await import("path"),{resolveProviderPath:a}=await import("./config-55HAAFSH.js"),l=a(n.providers.find(c=>c.name===r.name).global);i=o(l,s)}if(await qc(i)&&!e.flags.force){process.stdin.isTTY||(C(`Directory already exists: ${i}. Use --force to overwrite.`),process.exit(2)),process.stderr.write(`${u.yellow(`Directory already exists: ${i}`)}
621
+ ${u.bold("Overwrite?")} [y/N] `);let n=await G();n.toLowerCase()!=="y"&&n.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0))}await _c(s,i),console.error(u.green(`Done! Created skill "${s}" at ${i}`))}function fv(){console.log(`${u.bold("Usage:")} asm stats [options]
621
622
 
622
623
  Show aggregate skill metrics with provider distribution charts,
623
624
  scope breakdown, disk usage, and duplicate summary.
624
625
 
625
- ${W.bold("Options:")}
626
+ ${u.bold("Options:")}
626
627
  --json Output as JSON
627
628
  -s, --scope <s> Filter: global, project, or both (default: both)
628
629
  --no-color Disable ANSI colors
629
630
  -V, --verbose Show debug output
630
631
 
631
- ${W.bold("Examples:")}
632
- asm stats ${W.dim("Show full dashboard")}
633
- asm stats -s global ${W.dim("Global skills only")}
634
- asm stats --json ${W.dim("Output raw data as JSON")}`)}async function XB($){if($.flags.help){QB();return}let q=await h(),Z=await o(q,$.flags.scope);if(Z.length===0){console.log("No skills found.");return}let Q=Q2(Z),X=await a5(Z,Q);if($.flags.json)if(!$.flags.verbose){let{perSkillDiskBytes:z,...J}=X;console.log(c(J))}else console.log(c(X));else console.log(i5(X))}function zB(){console.log(`${W.bold("Usage:")} asm doctor [options]
632
+ ${u.bold("Examples:")}
633
+ asm stats ${u.dim("Show full dashboard")}
634
+ asm stats -s global ${u.dim("Global skills only")}
635
+ asm stats --json ${u.dim("Output raw data as JSON")}`)}async function dv(e){if(e.flags.help){fv();return}let t=await q(),s=await Q(t,e.flags.scope);if(s.length===0){console.log("No skills found.");return}let i=Ii(s),n=await jc(s,i);if(e.flags.json)if(e.flags.verbose)console.log(J(n));else{let{perSkillDiskBytes:r,...o}=n;console.log(J(o))}else console.log(Bc(n))}function pv(){console.log(`${u.bold("Usage:")} asm doctor [options]
635
636
 
636
637
  Run environment health checks and diagnostics. Validates all
637
- prerequisites for using asm git, GitHub CLI, Node.js, config,
638
+ prerequisites for using asm \u2014 git, GitHub CLI, Node.js, config,
638
639
  lock file, registry, installed skills, and disk space.
639
640
 
640
- ${W.bold("Options:")}
641
+ ${u.bold("Options:")}
641
642
  --json Output as JSON
642
643
  --machine Output in stable machine-readable v1 envelope format
643
644
  --no-color Disable ANSI colors
644
645
  -V, --verbose Show debug output
645
646
 
646
- ${W.bold("Examples:")}
647
- asm doctor ${W.dim("Run all health checks")}
648
- asm doctor --json ${W.dim("Output as JSON")}
649
- asm doctor --machine ${W.dim("Machine-readable v1 envelope output")}`)}async function JB($){if($.flags.help){zB();return}let q=performance.now(),Z=await M8();if($.flags.machine){let Q={checks:Z.checks.map((X)=>({name:X.name,status:X.status,message:X.message,...X.fix?{fix:X.fix}:{}})),passed:Z.passed,warnings:Z.warnings,failures:Z.failures};console.log(l("doctor",Q,q))}else if($.flags.json)console.log(j8(Z));else console.log(R8(Z));if(Z.failures>0)process.exit(1)}function YB(){console.log(`${W.bold("Usage:")} asm eval <target> [options]
647
+ ${u.bold("Examples:")}
648
+ asm doctor ${u.dim("Run all health checks")}
649
+ asm doctor --json ${u.dim("Output as JSON")}
650
+ asm doctor --machine ${u.dim("Machine-readable v1 envelope output")}`)}async function mv(e){if(e.flags.help){pv();return}let t=performance.now(),s=await yu();if(e.flags.machine){let i={checks:s.checks.map(n=>({name:n.name,status:n.status,message:n.message,...n.fix?{fix:n.fix}:{}})),passed:s.passed,warnings:s.warnings,failures:s.failures};console.log(Y("doctor",i,t))}else e.flags.json?console.log(wu(s)):console.log(bu(s));s.failures>0&&process.exit(1)}function hv(){console.log(`${u.bold("Usage:")} asm eval <target> [options]
650
651
 
651
652
  Evaluate a skill's SKILL.md against best practices and produce a scored quality
652
- report with recommendations. Zero configuration just point it at a skill
653
+ report with recommendations. Zero configuration \u2014 just point it at a skill
653
654
  directory. Categories: structure, description quality, prompt engineering,
654
655
  context efficiency, safety, testability, and naming conventions.
655
656
 
@@ -657,11 +658,11 @@ Accepts a local path, a GitHub shorthand, or a GitHub URL. When the target is a
657
658
  collection (no SKILL.md at the root but each immediate child has one), every
658
659
  child skill is evaluated and an aggregate summary is printed.
659
660
 
660
- ${W.bold("Arguments:")}
661
+ ${u.bold("Arguments:")}
661
662
  target Local path, github:owner/repo[#ref][:subpath], or
662
663
  https://github.com/owner/repo[/tree/<ref>/<sub>]
663
664
 
664
- ${W.bold("Options:")}
665
+ ${u.bold("Options:")}
665
666
  --fix Apply deterministic auto-fixes to SKILL.md (creates .bak)
666
667
  --dry-run With --fix, preview the diff without writing
667
668
  --json Output report as JSON
@@ -672,37 +673,37 @@ ${W.bold("Options:")}
672
673
  --no-color Disable ANSI colors
673
674
  -V, --verbose Show debug output
674
675
 
675
- ${W.bold("Examples:")}
676
- asm eval ./my-skill ${W.dim("Score a single skill")}
677
- asm eval ./skills/ ${W.dim("Batch-score every skill in the dir")}
678
- asm eval github:mattpocock/skills:grill-me ${W.dim("Fetch a remote skill and score it")}
679
- asm eval github:mattpocock/skills ${W.dim("Batch-score a remote collection")}
676
+ ${u.bold("Examples:")}
677
+ asm eval ./my-skill ${u.dim("Score a single skill")}
678
+ asm eval ./skills/ ${u.dim("Batch-score every skill in the dir")}
679
+ asm eval github:mattpocock/skills:grill-me ${u.dim("Fetch a remote skill and score it")}
680
+ asm eval github:mattpocock/skills ${u.dim("Batch-score a remote collection")}
680
681
  asm eval https://github.com/mattpocock/skills/tree/main/grill-me
681
- asm eval ./my-skill --json ${W.dim("Output report as JSON")}
682
- asm eval ./my-skill --fix ${W.dim("Auto-fix deterministic issues")}
683
- asm eval ./my-skill --fix --dry-run ${W.dim("Preview fixes as diff")}
684
- asm eval ./my-skill --machine ${W.dim("Machine-readable v1 envelope")}
685
- asm eval-providers list ${W.dim("List registered eval providers")}`)}function GB($){let q=$.findings.find((Z)=>Z.severity==="error"&&(Z.code==="provider-threw"||Z.code==="timeout"||Z.code==="aborted"));if(q)throw Error(q.message)}async function UB($,q,Z){await E0();let Q=P0($);if(Q.isLocal)throw Error(`fetchRemoteForEval received a local path: "${$}". This is a bug local paths should use the non-remote branch.`);Q=await s$(Q);let X=await S0(Q,q),z=Q.subpath?v6(X,Q.subpath):X,J=null;try{let{execFile:U}=await import("child_process"),{promisify:H}=await import("util"),V=H(U),{stdout:B}=await V("git",["-C",X,"rev-parse","HEAD"],{timeout:5000}),_=B.trim();if(/^[0-9a-f]{40}$/i.test(_))J=_}catch{}let Y=`github:${Q.owner}/${Q.repo}${Q.ref?`#${Q.ref}`:""}${Q.subpath?`:${Q.subpath}`:""}`;return{rootDir:z,cleanup:async()=>{if(Z)return;await e(X)},sourceRef:Y,commitSha:J}}async function K6($){$1();try{let q={skillPath:$.skillPath,skillMdPath:$.skillMdPath},Z=(await Promise.all(u$(q1()).map(async(z)=>{if(!(await z.applicable(q,{})).ok)return null;return Z1(z,q)}))).filter((z)=>z!==null),Q=Z.find((z)=>z.providerId==="quality");if(!Q)throw Error("quality provider did not produce a result");return GB(Q),{report:{...Q.raw,providers:u$(Z.map($6))},error:null}}catch(q){return{report:null,error:q?.message??String(q)}}}async function WB($){if($.flags.help){YB();return}let q=$.flags.machine?c0():void 0,Z=performance.now(),Q=$.subcommand;if(!Q){if($.flags.machine)q?.(),console.log(a("eval",n.INVALID_ARGUMENT,"Missing required argument: <skill-path>",Z)),process.exit(2);D("Missing required argument: <skill-path>"),console.error('Run "asm eval --help" for usage.'),process.exit(2)}if($.flags.fix){if(i4(Q)){if($.flags.machine)q?.(),console.log(a("eval",n.INVALID_ARGUMENT,"--fix is only supported for local skill paths. Clone the repo first or run `asm install` to materialise it locally.",Z)),process.exit(2);D("--fix is only supported for local skill paths. Clone the repo first or run `asm install` to materialise it locally."),process.exit(2)}try{let z=await x8(),J=await b8(Q,{dryRun:$.flags.dryRun,gitAuthor:z});if($.flags.machine){q?.(),console.log(l("eval",sq(J.report,J),Z));return}if($.flags.json){console.log(JSON.stringify({report:J.report,fix:{dryRun:J.dryRun,applied:J.applied,skipped:J.skipped,backupPath:J.backupPath,diff:J.diff}},null,2));return}console.log(oq(J.report)),console.log(""),console.log(y8(J));return}catch(z){if($.flags.machine)q?.(),console.log(a("eval",n.SKILL_NOT_FOUND,z?.message??String(z),Z)),process.exit(1);D(z?.message??String(z)),process.exit(1)}return}let X=null;try{X=await k8(Q,{fetchRemote:(z)=>UB(z,$.flags.transport,$.flags.keep)})}catch(z){if($.flags.machine)q?.(),console.log(a("eval",n.SKILL_NOT_FOUND,z?.message??String(z),Z)),process.exit(1);D(z?.message??String(z)),process.exit(1)}try{if(!X.isCollection&&X.targets.length===1){let U=X.targets[0],{report:H,error:V}=await K6(U);if(!H)throw Error(V??"eval failed");if($.flags.machine){q?.();let B=sq(H,null),_=X.provenance.remote?{...B,provenance:{input:X.provenance.input,remote:!0,source_ref:X.provenance.sourceRef??null,commit_sha:X.provenance.commitSha??null,temp_path:X.provenance.tempPath??null}}:B;console.log(l("eval",_,Z));return}if($.flags.json){if(X.provenance.remote)console.log(JSON.stringify({...H,provenance:{input:X.provenance.input,remote:!0,sourceRef:X.provenance.sourceRef??null,commitSha:X.provenance.commitSha??null,tempPath:X.provenance.tempPath??null}},null,2));else console.log(f8(H));return}if(console.log(oq(H)),X.provenance.remote)VB(X.provenance);return}let z=$.flags.concurrency||4;if(X.targets.length===0)throw Error(`No skills to evaluate at "${Q}" the resolved location has no SKILL.md in itself or its immediate children.`);let J=await h8(X.targets,z,async(U)=>{let{report:H,error:V}=await K6(U);return{label:U.label,skillPath:U.skillPath,report:H,error:V}}),Y=v8(J),G={provenance:X.provenance,aggregate:Y,results:J};if($.flags.machine){q?.(),console.log(l("eval",u8(G),Z));return}if($.flags.json){console.log(JSON.stringify({provenance:G.provenance,aggregate:G.aggregate,results:G.results.map((U)=>({label:U.label,skillPath:U.skillPath,error:U.error,report:U.report}))},null,2));return}for(let U of G.results){if(U.report)console.log(oq(U.report));else console.log(`Skill evaluation: ${U.skillPath}`),console.log(` ${W.red("error:")} ${U.error??"unknown failure"}`);console.log("")}if(console.log(g8(G)),X.provenance.remote&&!$.flags.verbose);}catch(z){if($.flags.machine)q?.(),console.log(a("eval",n.SKILL_NOT_FOUND,z?.message??String(z),Z)),process.exit(1);D(z?.message??String(z)),process.exit(1)}finally{if(X)try{await X.cleanup()}catch{}}}function VB($){let q=[];if(q.push(""),q.push(W.dim("Fetched remote skill:")),$.sourceRef)q.push(W.dim(` Source: ${$.sourceRef}`));if($.commitSha)q.push(W.dim(` Commit: ${$.commitSha}`));if($.tempPath)q.push(W.dim(` Temp: ${$.tempPath}`));console.log(q.join(`
686
- `))}function HB(){console.log(`${W.bold("Usage:")} asm eval-providers <subcommand> [options]
687
-
688
- Manage evaluation providers registered with the ${W.bold("asm eval")} framework.
689
- Providers implement the ${W.bold("EvalProvider")} contract (see src/eval/types.ts) and
682
+ asm eval ./my-skill --json ${u.dim("Output report as JSON")}
683
+ asm eval ./my-skill --fix ${u.dim("Auto-fix deterministic issues")}
684
+ asm eval ./my-skill --fix --dry-run ${u.dim("Preview fixes as diff")}
685
+ asm eval ./my-skill --machine ${u.dim("Machine-readable v1 envelope")}
686
+ asm eval-providers list ${u.dim("List registered eval providers")}`)}function gv(e){let t=e.findings.find(s=>s.severity==="error"&&(s.code==="provider-threw"||s.code==="timeout"||s.code==="aborted"));if(t)throw new Error(t.message)}async function yv(e,t,s){await Me();let i=Oe(e);if(i.isLocal)throw new Error(`fetchRemoteForEval received a local path: "${e}". This is a bug \u2014 local paths should use the non-remote branch.`);i=await rs(i);let n=await De(i,t),r=i.subpath?ff(n,i.subpath):n,o=null;try{let{execFile:c}=await import("child_process"),{promisify:d}=await import("util"),f=d(c),{stdout:p}=await f("git",["-C",n,"rev-parse","HEAD"],{timeout:5e3}),m=p.trim();/^[0-9a-f]{40}$/i.test(m)&&(o=m)}catch{}let a=`github:${i.owner}/${i.repo}${i.ref?`#${i.ref}`:""}${i.subpath?`:${i.subpath}`:""}`;return{rootDir:r,cleanup:async()=>{s||await ne(n)},sourceRef:a,commitSha:o}}async function uf(e){wi();try{let t={skillPath:e.skillPath,skillMdPath:e.skillMdPath},s=(await Promise.all(zt(vi()).map(async r=>(await r.applicable(t,{})).ok?ki(r,t):null))).filter(r=>r!==null),i=s.find(r=>r.providerId==="quality");if(!i)throw new Error("quality provider did not produce a result");return gv(i),{report:{...i.raw,providers:zt(s.map(Qu))},error:null}}catch(t){return{report:null,error:t?.message??String(t)}}}async function bv(e){if(e.flags.help){hv();return}let t=e.flags.machine?Ge():void 0,s=performance.now(),i=e.subcommand;if(i||(e.flags.machine&&(t?.(),console.log(z("eval",W.INVALID_ARGUMENT,"Missing required argument: <skill-path>",s)),process.exit(2)),C("Missing required argument: <skill-path>"),console.error('Run "asm eval --help" for usage.'),process.exit(2)),e.flags.fix){if(Vr(i)){let r="--fix is only supported for local skill paths. Clone the repo first or run `asm install` to materialise it locally.";e.flags.machine&&(t?.(),console.log(z("eval",W.INVALID_ARGUMENT,r,s)),process.exit(2)),C(r),process.exit(2)}try{let r=await Nu(),o=await Pu(i,{dryRun:e.flags.dryRun,gitAuthor:r});if(e.flags.machine){t?.(),console.log(Y("eval",hi(o.report,o),s));return}if(e.flags.json){console.log(JSON.stringify({report:o.report,fix:{dryRun:o.dryRun,applied:o.applied,skipped:o.skipped,backupPath:o.backupPath,diff:o.diff}},null,2));return}console.log(mi(o.report)),console.log(""),console.log(Lu(o));return}catch(r){e.flags.machine&&(t?.(),console.log(z("eval",W.SKILL_NOT_FOUND,r?.message??String(r),s)),process.exit(1)),C(r?.message??String(r)),process.exit(1)}return}let n=null;try{n=await Ru(i,{fetchRemote:r=>yv(r,e.flags.transport,e.flags.keep)})}catch(r){e.flags.machine&&(t?.(),console.log(z("eval",W.SKILL_NOT_FOUND,r?.message??String(r),s)),process.exit(1)),C(r?.message??String(r)),process.exit(1)}try{if(!n.isCollection&&n.targets.length===1){let c=n.targets[0],{report:d,error:f}=await uf(c);if(!d)throw new Error(f??"eval failed");if(e.flags.machine){t?.();let p=hi(d,null),m=n.provenance.remote?{...p,provenance:{input:n.provenance.input,remote:!0,source_ref:n.provenance.sourceRef??null,commit_sha:n.provenance.commitSha??null,temp_path:n.provenance.tempPath??null}}:p;console.log(Y("eval",m,s));return}if(e.flags.json){n.provenance.remote?console.log(JSON.stringify({...d,provenance:{input:n.provenance.input,remote:!0,sourceRef:n.provenance.sourceRef??null,commitSha:n.provenance.commitSha??null,tempPath:n.provenance.tempPath??null}},null,2)):console.log(Iu(d));return}console.log(mi(d)),n.provenance.remote&&wv(n.provenance);return}let r=e.flags.concurrency||4;if(n.targets.length===0)throw new Error(`No skills to evaluate at "${i}" \u2014 the resolved location has no SKILL.md in itself or its immediate children.`);let o=await Tu(n.targets,r,async c=>{let{report:d,error:f}=await uf(c);return{label:c.label,skillPath:c.skillPath,report:d,error:f}}),a=Ou(o),l={provenance:n.provenance,aggregate:a,results:o};if(e.flags.machine){t?.(),console.log(Y("eval",Du(l),s));return}if(e.flags.json){console.log(JSON.stringify({provenance:l.provenance,aggregate:l.aggregate,results:l.results.map(c=>({label:c.label,skillPath:c.skillPath,error:c.error,report:c.report}))},null,2));return}for(let c of l.results)c.report?console.log(mi(c.report)):(console.log(`Skill evaluation: ${c.skillPath}`),console.log(` ${u.red("error:")} ${c.error??"unknown failure"}`)),console.log("");console.log(Mu(l)),n.provenance.remote&&e.flags.verbose}catch(r){e.flags.machine&&(t?.(),console.log(z("eval",W.SKILL_NOT_FOUND,r?.message??String(r),s)),process.exit(1)),C(r?.message??String(r)),process.exit(1)}finally{if(n)try{await n.cleanup()}catch{}}}function wv(e){let t=[];t.push(""),t.push(u.dim("Fetched remote skill:")),e.sourceRef&&t.push(u.dim(` Source: ${e.sourceRef}`)),e.commitSha&&t.push(u.dim(` Commit: ${e.commitSha}`)),e.tempPath&&t.push(u.dim(` Temp: ${e.tempPath}`)),console.log(t.join(`
687
+ `))}function vv(){console.log(`${u.bold("Usage:")} asm eval-providers <subcommand> [options]
688
+
689
+ Manage evaluation providers registered with the ${u.bold("asm eval")} framework.
690
+ Providers implement the ${u.bold("EvalProvider")} contract (see src/eval/types.ts) and
690
691
  are resolved by id and semver range.
691
692
 
692
- ${W.bold("Subcommands:")}
693
+ ${u.bold("Subcommands:")}
693
694
  list List every registered (id, version) provider
694
695
 
695
- ${W.bold("Options:")}
696
+ ${u.bold("Options:")}
696
697
  --json Output as JSON (list)
697
698
  --no-color Disable ANSI colors
698
699
  -V, --verbose Show debug output
699
700
 
700
- ${W.bold("Examples:")}
701
- asm eval-providers list ${W.dim("Show registered providers")}
702
- asm eval-providers list --json ${W.dim("Machine-readable listing")}`)}async function BB($){if($.flags.help){HB();return}let q=$.subcommand;if(!q)D("Missing subcommand. Use: list"),console.error('Run "asm eval-providers --help" for usage.'),process.exit(2);switch(q){case"list":{$1();let Z=tq();if($.flags.json){console.log(c(Z.map((Y)=>({id:Y.id,version:Y.version,schemaVersion:Y.schemaVersion,description:Y.description,requires:Y.requires??[]}))));return}if(Z.length===0){console.log("No eval providers registered.");return}let Q=["id","version","schemaVersion","description","requires"],X=Z.map((Y)=>[Y.id,Y.version,String(Y.schemaVersion),Y.description,Y.requires&&Y.requires.length>0?Y.requires.join(","):"-"]),z=Q.map((Y,G)=>Math.max(Y.length,...X.map((U)=>U[G].length))),J=(Y)=>Y.map((G,U)=>G.padEnd(z[U])).join(" ");console.log(W.bold(J(Q))),console.log(z.map((Y)=>"-".repeat(Y)).join(" "));for(let Y of X)console.log(J(Y));return}default:D(`Unknown eval-providers subcommand: "${q}". Use: list`),console.error('Run "asm eval-providers --help" for usage.'),process.exit(2)}}function KB(){console.log(`${W.bold("Usage:")} asm link <path> [<path2> ...] [options]
701
+ ${u.bold("Examples:")}
702
+ asm eval-providers list ${u.dim("Show registered providers")}
703
+ asm eval-providers list --json ${u.dim("Machine-readable listing")}`)}async function kv(e){if(e.flags.help){vv();return}let t=e.subcommand;switch(t||(C("Missing subcommand. Use: list"),console.error('Run "asm eval-providers --help" for usage.'),process.exit(2)),t){case"list":{wi();let s=gi();if(e.flags.json){console.log(J(s.map(a=>({id:a.id,version:a.version,schemaVersion:a.schemaVersion,description:a.description,requires:a.requires??[]}))));return}if(s.length===0){console.log("No eval providers registered.");return}let i=["id","version","schemaVersion","description","requires"],n=s.map(a=>[a.id,a.version,String(a.schemaVersion),a.description,a.requires&&a.requires.length>0?a.requires.join(","):"-"]),r=i.map((a,l)=>Math.max(a.length,...n.map(c=>c[l].length))),o=a=>a.map((l,c)=>l.padEnd(r[c])).join(" ");console.log(u.bold(o(i))),console.log(r.map(a=>"-".repeat(a)).join(" "));for(let a of n)console.log(o(a));return}default:C(`Unknown eval-providers subcommand: "${t}". Use: list`),console.error('Run "asm eval-providers --help" for usage.'),process.exit(2)}}function Sv(){console.log(`${u.bold("Usage:")} asm link <path> [<path2> ...] [options]
703
704
 
704
705
  Symlink a local skill directory into an agent's skill folder. Useful
705
- for local development changes to the source are reflected immediately.
706
+ for local development \u2014 changes to the source are reflected immediately.
706
707
 
707
708
  If <path> contains a SKILL.md at its root, it is linked as a single skill.
708
709
  If <path> has no root SKILL.md but contains subdirectories with SKILL.md
@@ -710,7 +711,7 @@ files, all discovered skills are linked in a single invocation.
710
711
 
711
712
  Multiple paths can be provided to link several skills at once.
712
713
 
713
- ${W.bold("Options:")}
714
+ ${u.bold("Options:")}
714
715
  -p, --tool <name> Target tool (claude, codex, openclaw, agents)
715
716
  --name <name> Override symlink name (single skill only)
716
717
  -f, --force Overwrite if target already exists
@@ -718,28 +719,28 @@ ${W.bold("Options:")}
718
719
  --no-color Disable ANSI colors
719
720
  -V, --verbose Show debug output
720
721
 
721
- ${W.bold("Examples:")}
722
- asm link ./my-skill ${W.dim("Link (interactive tool)")}
723
- asm link ./my-skill -p claude ${W.dim("Link to Claude Code")}
724
- asm link ./my-skill --name alias ${W.dim("Link with custom name")}
725
- asm link ./my-skills-folder ${W.dim("Link all skills in folder")}
726
- asm link ./skill1 ./skill2 ./skill3 -p claude ${W.dim("Link multiple skills at once")}`)}async function _B($,q){if(q)return!0;let{access:Z}=await import("fs/promises"),Q=!1;try{await Z($),Q=!0}catch{}if(!Q)return!1;if(!process.stdin.isTTY)throw Error(`Target already exists: ${$}. Use --force to overwrite.`);process.stderr.write(`${W.yellow(`Target already exists: ${$}`)}
727
- ${W.bold("Overwrite?")} [y/N] `);let X=await Q0();if(X.toLowerCase()!=="y"&&X.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0);return!0}async function J1($,q,Z,Q){let{join:X}=await import("path"),z=X(q,Z),J=await _B(z,Q);return await s5($,q,Z,J),{name:Z,symlinkPath:z,targetPath:$}}async function OB($){if($.flags.help){KB();return}let q=[];if($.subcommand)q.push($.subcommand);if(q.push(...$.positional),q.length===0)D("Missing required argument: <path>"),console.error('Run "asm link --help" for usage.'),process.exit(2);if(q.length>1){if($.flags.name)D("--name cannot be used when linking multiple paths. Link each skill individually to use --name."),process.exit(2);let O=await h(),{provider:K}=await i0(O,$.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:L}=await import("./chunk-chw0sgjp.js"),F=L(O.providers.find((w)=>w.name===K.name).global),{resolve:A,basename:M}=await import("path"),j=[],T=[];for(let w of q){let x=A(w),P=!1;try{await S4(x),P=!0}catch{}if(P){let y=M(x);try{let I=await J1(x,F,y,!!$.flags.force);if(j.push(I),!$.flags.json)console.error(W.green(` Linked "${I.name}" -> ${I.targetPath}`))}catch(I){let R=I instanceof Error?I.message:String(I);if(T.push({name:y,error:R}),!$.flags.json)console.error(W.red(` Failed to link "${y}": ${R}`))}}else{let y=[];try{y=await b4(x)}catch(I){let R=I instanceof Error?I.message:String(I);if(T.push({name:w,error:R}),!$.flags.json)console.error(W.red(` Failed to process "${w}": ${R}`));continue}if(y.length===0){let I=`No SKILL.md found in ${x} or its immediate subdirectories.`;if(T.push({name:w,error:I}),!$.flags.json)console.error(W.red(` ${I}`));continue}for(let I of y)try{let R=await J1(I.absPath,F,I.dirName,!!$.flags.force);if(j.push(R),!$.flags.json)console.error(W.green(` Linked "${R.name}" -> ${R.targetPath}`))}catch(R){let C=R instanceof Error?R.message:String(R);if(T.push({name:I.name,error:C}),!$.flags.json)console.error(W.red(` Failed to link "${I.name}": ${C}`))}}}if($.flags.json)console.log(c({success:T.length===0,linked:j,failures:T}));else if(T.length>0)console.error(W.yellow(`
728
- ${j.length} linked, ${T.length} failed.`));else console.error(W.green(`
729
- Done! Linked ${j.length} skill(s) successfully.`));if(T.length>0)process.exit(1);return}let Z=q[0],{resolve:Q,basename:X}=await import("path"),z=Q(Z),J=!1;try{await S4(z),J=!0}catch{}let Y=[];if(!J){if(Y=await b4(z),Y.length===0)D(`No SKILL.md found in ${z} or its immediate subdirectories.`),process.exit(1);if($.flags.name&&Y.length>1)D(`--name cannot be used when linking multiple skills (found ${Y.length} skills). Link each skill individually to use --name.`),process.exit(2)}let G=await h(),{provider:U}=await i0(G,$.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:H}=await import("./chunk-chw0sgjp.js"),V=H(G.providers.find((O)=>O.name===U.name).global);if(J){let O=$.flags.name?C0($.flags.name):X(z),K;try{K=await J1(z,V,O,!!$.flags.force)}catch(L){let F=L instanceof Error?L.message:String(L);if($.flags.json)console.log(c({success:!1,error:F}));else D(F);process.exit(2)}if($.flags.json)console.log(c({success:!0,...K}));else console.error(W.green(`Done! Linked "${K.name}" -> ${K.targetPath}`)),console.error(` Symlink: ${K.symlinkPath}`),console.error(W.dim(` If you move or delete the source, run "asm uninstall ${K.name}" to clean up.`));return}console.error(`Found ${W.bold(String(Y.length))} skill(s) in ${z}:`);for(let O of Y)console.error(` ${W.bold(O.name)} ${W.dim(`v${O.version}`)} ${W.dim(`(${O.dirName}/)`)}`);if(process.stdin.isTTY&&!$.flags.force){process.stderr.write(`
730
- ${W.bold(`Link ${Y.length} skill(s)?`)} [Y/n] `);let O=await Q0();if(O.toLowerCase()==="n"||O.toLowerCase()==="no")console.error("Aborted."),process.exit(0)}let B=[],_=[];for(let O of Y){let K=$.flags.name&&Y.length===1?C0($.flags.name):O.dirName;try{let L=await J1(O.absPath,V,K,!!$.flags.force);if(B.push(L),!$.flags.json)console.error(W.green(` Linked "${L.name}" -> ${L.targetPath}`))}catch(L){let F=L instanceof Error?L.message:String(L);if(_.push({name:O.name,error:F}),!$.flags.json)console.error(W.red(` Failed to link "${O.name}": ${F}`))}}if($.flags.json)console.log(c({success:_.length===0,linked:B,failures:_}));else if(_.length>0)console.error(W.yellow(`
731
- ${B.length} linked, ${_.length} failed.`));else console.error(W.green(`
732
- Done! Linked ${B.length} skill(s) successfully.`));if(_.length>0)process.exit(1)}function LB(){console.log(`${W.bold("Usage:")} asm index <subcommand> [options]
722
+ ${u.bold("Examples:")}
723
+ asm link ./my-skill ${u.dim("Link (interactive tool)")}
724
+ asm link ./my-skill -p claude ${u.dim("Link to Claude Code")}
725
+ asm link ./my-skill --name alias ${u.dim("Link with custom name")}
726
+ asm link ./my-skills-folder ${u.dim("Link all skills in folder")}
727
+ asm link ./skill1 ./skill2 ./skill3 -p claude ${u.dim("Link multiple skills at once")}`)}async function $v(e,t){if(t)return!0;let{access:s}=await import("fs/promises"),i=!1;try{await s(e),i=!0}catch{}if(!i)return!1;if(!process.stdin.isTTY)throw new Error(`Target already exists: ${e}. Use --force to overwrite.`);process.stderr.write(`${u.yellow(`Target already exists: ${e}`)}
728
+ ${u.bold("Overwrite?")} [y/N] `);let n=await G();return n.toLowerCase()!=="y"&&n.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0)),!0}async function xi(e,t,s,i){let{join:n}=await import("path"),r=n(t,s),o=await $v(r,i);return await Vc(e,t,s,o),{name:s,symlinkPath:r,targetPath:e}}async function xv(e){if(e.flags.help){Sv();return}let t=[];if(e.subcommand&&t.push(e.subcommand),t.push(...e.positional),t.length===0&&(C("Missing required argument: <path>"),console.error('Run "asm link --help" for usage.'),process.exit(2)),t.length>1){e.flags.name&&(C("--name cannot be used when linking multiple paths. Link each skill individually to use --name."),process.exit(2));let y=await q(),{provider:h}=await ze(y,e.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:g}=await import("./config-55HAAFSH.js"),b=g(y.providers.find(E=>E.name===h.name).global),{resolve:v,basename:k}=await import("path"),x=[],S=[];for(let E of t){let O=v(E),P=!1;try{await Er(O),P=!0}catch{}if(P){let M=k(O);try{let w=await xi(O,b,M,!!e.flags.force);x.push(w),e.flags.json||console.error(u.green(` Linked "${w.name}" -> ${w.targetPath}`))}catch(w){let $=w instanceof Error?w.message:String(w);S.push({name:M,error:$}),e.flags.json||console.error(u.red(` Failed to link "${M}": ${$}`))}}else{let M=[];try{M=await Ar(O)}catch(w){let $=w instanceof Error?w.message:String(w);S.push({name:E,error:$}),e.flags.json||console.error(u.red(` Failed to process "${E}": ${$}`));continue}if(M.length===0){let w=`No SKILL.md found in ${O} or its immediate subdirectories.`;S.push({name:E,error:w}),e.flags.json||console.error(u.red(` ${w}`));continue}for(let w of M)try{let $=await xi(w.absPath,b,w.dirName,!!e.flags.force);x.push($),e.flags.json||console.error(u.green(` Linked "${$.name}" -> ${$.targetPath}`))}catch($){let I=$ instanceof Error?$.message:String($);S.push({name:w.name,error:I}),e.flags.json||console.error(u.red(` Failed to link "${w.name}": ${I}`))}}}e.flags.json?console.log(J({success:S.length===0,linked:x,failures:S})):S.length>0?console.error(u.yellow(`
729
+ ${x.length} linked, ${S.length} failed.`)):console.error(u.green(`
730
+ Done! Linked ${x.length} skill(s) successfully.`)),S.length>0&&process.exit(1);return}let s=t[0],{resolve:i,basename:n}=await import("path"),r=i(s),o=!1;try{await Er(r),o=!0}catch{}let a=[];o||(a=await Ar(r),a.length===0&&(C(`No SKILL.md found in ${r} or its immediate subdirectories.`),process.exit(1)),e.flags.name&&a.length>1&&(C(`--name cannot be used when linking multiple skills (found ${a.length} skills). Link each skill individually to use --name.`),process.exit(2)));let l=await q(),{provider:c}=await ze(l,e.flags.provider,!!process.stdin.isTTY),{resolveProviderPath:d}=await import("./config-55HAAFSH.js"),f=d(l.providers.find(y=>y.name===c.name).global);if(o){let y=e.flags.name?Te(e.flags.name):n(r),h;try{h=await xi(r,f,y,!!e.flags.force)}catch(g){let b=g instanceof Error?g.message:String(g);e.flags.json?console.log(J({success:!1,error:b})):C(b),process.exit(2)}e.flags.json?console.log(J({success:!0,...h})):(console.error(u.green(`Done! Linked "${h.name}" -> ${h.targetPath}`)),console.error(` Symlink: ${h.symlinkPath}`),console.error(u.dim(` If you move or delete the source, run "asm uninstall ${h.name}" to clean up.`)));return}console.error(`Found ${u.bold(String(a.length))} skill(s) in ${r}:`);for(let y of a)console.error(` ${u.bold(y.name)} ${u.dim(`v${y.version}`)} ${u.dim(`(${y.dirName}/)`)}`);if(process.stdin.isTTY&&!e.flags.force){process.stderr.write(`
731
+ ${u.bold(`Link ${a.length} skill(s)?`)} [Y/n] `);let y=await G();(y.toLowerCase()==="n"||y.toLowerCase()==="no")&&(console.error("Aborted."),process.exit(0))}let p=[],m=[];for(let y of a){let h=e.flags.name&&a.length===1?Te(e.flags.name):y.dirName;try{let g=await xi(y.absPath,f,h,!!e.flags.force);p.push(g),e.flags.json||console.error(u.green(` Linked "${g.name}" -> ${g.targetPath}`))}catch(g){let b=g instanceof Error?g.message:String(g);m.push({name:y.name,error:b}),e.flags.json||console.error(u.red(` Failed to link "${y.name}": ${b}`))}}e.flags.json?console.log(J({success:m.length===0,linked:p,failures:m})):m.length>0?console.error(u.yellow(`
732
+ ${p.length} linked, ${m.length} failed.`)):console.error(u.green(`
733
+ Done! Linked ${p.length} skill(s) successfully.`)),m.length>0&&process.exit(1)}function Cv(){console.log(`${u.bold("Usage:")} asm index <subcommand> [options]
733
734
 
734
735
  Manage the skill index for searching available skills from indexed repos.
735
736
 
736
- ${W.bold("Subcommands:")}
737
+ ${u.bold("Subcommands:")}
737
738
  ingest <repo> Ingest a skill repository into the index
738
739
  search <query> Search indexed skills by name or description
739
740
  list List all indexed repositories
740
741
  remove <owner/repo> Remove a repo from the index
741
742
 
742
- ${W.bold("Options:")}
743
+ ${u.bold("Options:")}
743
744
  --json Output as JSON
744
745
  --has <field> Only show skills that have <field> (license, creator, version)
745
746
  --missing <field> Only show skills missing <field> (license, creator, version)
@@ -747,49 +748,59 @@ ${W.bold("Options:")}
747
748
  --no-color Disable ANSI colors
748
749
  -V, --verbose Show debug output
749
750
 
750
- ${W.bold("Examples:")}
751
- asm index ingest github:obra/superpowers ${W.dim("Index superpowers repo")}
752
- asm index search code review ${W.dim("Search for skills")}
753
- asm index search marketing --has license ${W.dim("Only with license")}
754
- asm index search "" --missing creator ${W.dim("Skills missing creator")}
755
- asm index list ${W.dim("List indexed repos")}
756
- asm index remove obra/superpowers ${W.dim("Remove from index")}`)}async function FB($){if($.flags.help){LB();return}let q=$.subcommand;if(!q)D("Missing subcommand. Use: ingest, search, list, or remove"),console.error('Run "asm index --help" for usage.'),process.exit(2);switch(q){case"ingest":{let Z=$.positional[0];if(!Z)D("Missing required argument: <repo>"),console.error('Run "asm index --help" for usage.'),process.exit(2);console.error(W.blueBold(`Ingesting ${Z}...`));let Q=await V6(Z);if(!Q.success)D(`Failed to ingest: ${Q.error}`),process.exit(1);if(Q.repoIndex)if($.flags.json)console.log(c({success:!0,owner:Q.repoIndex.owner,repo:Q.repoIndex.repo,skillCount:Q.repoIndex.skillCount,updatedAt:Q.repoIndex.updatedAt}));else console.error(W.green(`Successfully indexed ${Q.repoIndex.owner}/${Q.repoIndex.repo}`)),console.error(` Skills found: ${Q.repoIndex.skillCount}`);break}case"search":{let Z=$.positional.join(" ");if(!Z&&$.flags.has.length===0&&$.flags.missing.length===0)D("Missing required argument: <query>"),console.error('Run "asm index --help" for usage.'),process.exit(2);let Q={};if($.flags.has.length>0)Q.has=$.flags.has;if($.flags.missing.length>0)Q.missing=$.flags.missing;let z=Q.has||Q.missing?await X1(Z||"",20,Q):await X1(Z);if(z.length===0){if($.flags.json)console.log(c([]));else console.info("No skills found matching your query."),console.error(W.dim("Try ingesting more repos with: asm index ingest <repo>"));return}if($.flags.json)console.log(c(z.map((J)=>({name:J.skill.name,description:J.skill.description,version:J.skill.version,license:J.skill.license||"",creator:J.skill.creator||"",compatibility:J.skill.compatibility||"",allowedTools:J.skill.allowedTools||[],verified:J.skill.verified===!0,installUrl:J.skill.installUrl,installCommand:`asm install ${J.skill.installUrl}`,repo:`${J.repo.owner}/${J.repo.repo}`}))));else{console.error(W.bold(`Found ${z.length} skills:
757
- `));for(let J of z){let Y=J.skill.verified?W.blue(" [verified]"):"";console.error(`${W.cyan(J.skill.name)} ${W.dim(`v${J.skill.version}`)}${Y} ${W.dim(`[${J.repo.owner}/${J.repo.repo}]`)}`);for(let U of E6(J.skill.description,80))console.error(` ${U}`);let G=G6(J.skill);if(G.length>0)console.error(` ${W.yellow(`⚠ Missing: ${G.join(", ")}`)}`);console.error(` ${W.green(`asm install ${J.skill.installUrl}`)}
758
- `)}}break}case"list":{let Z=await H6();if(Z.length===0){if($.flags.json)console.log(c([]));else console.info("No repositories indexed."),console.error(W.dim("Add repos with: asm index ingest <repo>"));return}let Q=await U6();if($.flags.json)console.log(c(Z));else{console.error(W.bold(`Indexed Repositories (${Q} total skills):
759
- `));for(let X of Z)console.error(`${W.cyan(`${X.owner}/${X.repo}`)} - ${X.skillCount} skills ${W.dim(`(${new Date(X.updatedAt).toLocaleDateString()})`)}`)}break}case"remove":{let Z=$.positional[0];if(!Z)D("Missing required argument: <owner/repo>"),console.error('Run "asm index --help" for usage.'),process.exit(2);let[Q,X]=Z.split("/");if(!Q||!X)D("Invalid format. Use: <owner/repo>"),process.exit(2);if(!$.flags.yes&&process.stdin.isTTY){process.stderr.write(`${W.bold("Remove")} ${W.cyan(`${Q}/${X}`)} ${W.bold("from index?")} [y/N] `);let J=await Q0();if(J.toLowerCase()!=="y"&&J.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}if(await B6(Q,X))console.error(W.green(`Removed ${Q}/${X} from index`));else D(`Repository not found in index: ${Q}/${X}`),process.exit(1);break}default:D(`Unknown subcommand: "${q}"`),console.error('Run "asm index --help" for usage.'),process.exit(2)}}function AB(){console.log(`${W.bold("Usage:")} asm bundle <subcommand> [options]
751
+ ${u.bold("Examples:")}
752
+ asm index ingest github:obra/superpowers ${u.dim("Index superpowers repo")}
753
+ asm index search code review ${u.dim("Search for skills")}
754
+ asm index search marketing --has license ${u.dim("Only with license")}
755
+ asm index search "" --missing creator ${u.dim("Skills missing creator")}
756
+ asm index list ${u.dim("List indexed repos")}
757
+ asm index remove obra/superpowers ${u.dim("Remove from index")}`)}async function Ev(e){if(e.flags.help){Cv();return}let t=e.subcommand;switch(t||(C("Missing subcommand. Use: ingest, search, list, or remove"),console.error('Run "asm index --help" for usage.'),process.exit(2)),t){case"ingest":{let s=e.positional[0];s||(C("Missing required argument: <repo>"),console.error('Run "asm index --help" for usage.'),process.exit(2)),console.error(u.blueBold(`Ingesting ${s}...`));let i=await af(s);i.success||(C(`Failed to ingest: ${i.error}`),process.exit(1)),i.repoIndex&&(e.flags.json?console.log(J({success:!0,owner:i.repoIndex.owner,repo:i.repoIndex.repo,skillCount:i.repoIndex.skillCount,updatedAt:i.repoIndex.updatedAt})):(console.error(u.green(`Successfully indexed ${i.repoIndex.owner}/${i.repoIndex.repo}`)),console.error(` Skills found: ${i.repoIndex.skillCount}`)));break}case"search":{let s=e.positional.join(" ");!s&&e.flags.has.length===0&&e.flags.missing.length===0&&(C("Missing required argument: <query>"),console.error('Run "asm index --help" for usage.'),process.exit(2));let i={};e.flags.has.length>0&&(i.has=e.flags.has),e.flags.missing.length>0&&(i.missing=e.flags.missing);let r=i.has||i.missing?await $i(s||"",20,i):await $i(s);if(r.length===0){e.flags.json?console.log(J([])):(console.info("No skills found matching your query."),console.error(u.dim("Try ingesting more repos with: asm index ingest <repo>")));return}if(e.flags.json)console.log(J(r.map(o=>({name:o.skill.name,description:o.skill.description,version:o.skill.version,license:o.skill.license||"",creator:o.skill.creator||"",compatibility:o.skill.compatibility||"",allowedTools:o.skill.allowedTools||[],verified:o.skill.verified===!0,installUrl:o.skill.installUrl,installCommand:`asm install ${o.skill.installUrl}`,repo:`${o.repo.owner}/${o.repo.repo}`}))));else{console.error(u.bold(`Found ${r.length} skills:
758
+ `));for(let o of r){let a=o.skill.verified?u.blue(" [verified]"):"";console.error(`${u.cyan(o.skill.name)} ${u.dim(`v${o.skill.version}`)}${a} ${u.dim(`[${o.repo.owner}/${o.repo.repo}]`)}`);for(let c of go(o.skill.description,80))console.error(` ${c}`);let l=nf(o.skill);l.length>0&&console.error(` ${u.yellow(`\u26A0 Missing: ${l.join(", ")}`)}`),console.error(` ${u.green(`asm install ${o.skill.installUrl}`)}
759
+ `)}}break}case"list":{let s=await lf();if(s.length===0){e.flags.json?console.log(J([])):(console.info("No repositories indexed."),console.error(u.dim("Add repos with: asm index ingest <repo>")));return}let i=await rf();if(e.flags.json)console.log(J(s));else{console.error(u.bold(`Indexed Repositories (${i} total skills):
760
+ `));for(let n of s)console.error(`${u.cyan(`${n.owner}/${n.repo}`)} - ${n.skillCount} skills ${u.dim(`(${new Date(n.updatedAt).toLocaleDateString()})`)}`)}break}case"remove":{let s=e.positional[0];s||(C("Missing required argument: <owner/repo>"),console.error('Run "asm index --help" for usage.'),process.exit(2));let[i,n]=s.split("/");if((!i||!n)&&(C("Invalid format. Use: <owner/repo>"),process.exit(2)),!e.flags.yes&&process.stdin.isTTY){process.stderr.write(`${u.bold("Remove")} ${u.cyan(`${i}/${n}`)} ${u.bold("from index?")} [y/N] `);let o=await G();o.toLowerCase()!=="y"&&o.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0))}await cf(i,n)?console.error(u.green(`Removed ${i}/${n} from index`)):(C(`Repository not found in index: ${i}/${n}`),process.exit(1));break}default:C(`Unknown subcommand: "${t}"`),console.error('Run "asm index --help" for usage.'),process.exit(2)}}function Av(){console.log(`${u.bold("Usage:")} asm bundle <subcommand> [options]
760
761
 
761
762
  Create, install, and manage curated skill bundles. A bundle is a reusable
762
763
  recipe of skills for a particular workflow, domain, or project setup.
763
764
 
764
- ${W.bold("Subcommands:")}
765
+ ${u.bold("Subcommands:")}
765
766
  create <name> Create a new bundle from installed skills
766
- install <name|file> Install all skills from a bundle
767
+ install <name|file> Install all skills from a bundle (supports pre-defined names)
767
768
  list List all saved bundles
769
+ list --predefined List pre-defined bundles shipped with ASM
768
770
  show <name|file> Show bundle details
769
771
  remove <name> Remove a saved bundle
772
+ modify <name> Add/remove skills or update bundle metadata
773
+ export <name> [file] Export a bundle to a JSON file
770
774
 
771
- ${W.bold("Options:")}
775
+ ${u.bold("Options:")}
772
776
  -s, --scope <s> Filter: global, project, or both (default: both)
773
777
  -y, --yes Skip confirmation prompts
774
778
  --json Output as JSON
779
+ --predefined Show pre-defined bundles shipped with ASM (for list)
775
780
  --no-color Disable ANSI colors
776
781
  -V, --verbose Show debug output
777
782
 
778
- ${W.bold("Examples:")}
779
- asm bundle create my-workflow ${W.dim("Create from installed skills")}
780
- asm bundle install my-workflow ${W.dim("Install a saved bundle")}
781
- asm bundle install ./bundle.json ${W.dim("Install from file")}
782
- asm bundle list ${W.dim("Show all saved bundles")}
783
- asm bundle list --json ${W.dim("List bundles as JSON")}
784
- asm bundle show my-workflow ${W.dim("Show bundle details")}
785
- asm bundle remove my-workflow ${W.dim("Remove a saved bundle")}`)}async function IB($){if($.flags.help){AB();return}let q=$.subcommand;if(!q)D("Missing subcommand. Use: create, install, list, show, or remove"),console.error('Run "asm bundle --help" for usage.'),process.exit(2);switch(q){case"create":{let Z=$.positional[0];if(!Z)D("Missing required argument: <name>"),console.error("Usage: asm bundle create <name>"),process.exit(2);let Q=await h(),X=await o(Q,$.flags.scope);if(X.length===0)D("No skills found to include in the bundle."),process.exit(1);let z=new Set,J=X.filter((K)=>{let L=K.name.toLowerCase();if(z.has(L))return!1;return z.add(L),!0}),Y=J;if(process.stdin.isTTY&&!$.flags.yes){let K=J.map((F)=>({label:`${F.name} v${F.version}`,hint:F.description?F.description.slice(0,60)+(F.description.length>60?"...":""):`(${F.provider}/${F.scope})`,checked:!0}));console.error(W.bold(`Select skills for bundle "${Z}":
786
- `));let L=await a0({items:K});if(L.length===0)D("No skills selected. Bundle not created."),process.exit(1);Y=L.map((F)=>J[F])}let{readLock:G}=await import("./chunk-83zxj8cj.js"),U=await G(),H=await Promise.all(Y.map((K)=>r5(K,U))),V=`Bundle of ${H.length} skills`,B="unknown";try{let{execSync:K}=await import("child_process"),L=K("git config user.name",{encoding:"utf-8"}).trim();if(L)B=L}catch{}if(process.stdin.isTTY&&!$.flags.yes){process.stderr.write(`
787
- ${W.bold("Description")} (optional, press Enter to skip): `);let K=await Q0();if(K.trim())V=K.trim();process.stderr.write(`${W.bold("Author")} (optional, press Enter to skip): `);let L=await Q0();if(L.trim())B=L.trim()}let _=t5(Z,V,B,H),O=await e5(_);if($.flags.json)console.log(JSON.stringify(_,null,2));else console.error(W.green(`Bundle "${Z}" created with ${H.length} skill(s).`)),console.error(` Saved to: ${W.dim(O)}`);break}case"install":{let Z=$.positional[0];if(!Z)D("Missing required argument: <name|file>"),console.error("Usage: asm bundle install <name|file>"),process.exit(2);let Q;try{Q=await y4(Z)}catch(V){D(V.message),process.exit(1)}if(console.error(`${W.bold("Bundle:")} ${Q.name} (${Q.skills.length} skills)`),Q.description)console.error(` ${W.dim(Q.description)}`);console.error("");for(let V of Q.skills){let B=V.version?` v${V.version}`:"";console.error(` ${W.cyan(V.name)}${W.dim(B)} ${W.dim(`-> ${V.installUrl}`)}`)}if(!$.flags.yes&&process.stdin.isTTY){process.stderr.write(`
788
- ${W.bold("Install all skills from this bundle?")} [y/N] `);let V=await Q0();if(V.toLowerCase()!=="y"&&V.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let X=[],z=await h(),{provider:J}=await i0(z,$.flags.provider,!1),Y=$.flags.scope==="global"||$.flags.scope==="project"?$.flags.scope:"global";for(let V of Q.skills){console.error(`
789
- Installing ${W.bold(V.name)}...`);try{if(V.installUrl.startsWith("github:")||V.installUrl.startsWith("https://github.com/"))await E0();let _=P0(V.installUrl),O=!!_.isLocal,K=null;try{let L,F;if(!O)K=await S0(_,$.flags.transport),L=K,F=_.subpath?v6(K,_.subpath):K;else L=_.localPath,F=_.localPath;let A=await b0(F),M=C0(V.name||A.name||_.repo),j=B1(_,L,F,M,J,$.flags.force,Y);try{await T2(j.targetDir,j.force)}catch(T){if(T.message?.includes("--force")){X.push({name:V.name,status:"skipped",reason:"Already installed. Use --force to overwrite."}),console.error(` ${W.dim("---")} ${V.name} skipped (already installed)`);continue}throw T}await r$(j),X.push({name:V.name,status:"installed"}),console.error(` ${W.green("+++")} ${V.name} installed`)}finally{if(K)await e(K)}}catch(B){X.push({name:V.name,status:"failed",reason:B.message}),console.error(` ${W.red("!!!")} ${V.name}: ${B.message}`)}}let G=X.filter((V)=>V.status==="installed").length,U=X.filter((V)=>V.status==="skipped").length,H=X.filter((V)=>V.status==="failed").length;if($.flags.json)console.log(JSON.stringify({bundleName:Q.name,total:X.length,installed:G,skipped:U,failed:H,results:X},null,2));else console.error(""),console.error(`${W.bold("Summary:")} ${X.length} total, ${W.green(String(G))} installed, `+(U>0?`${W.dim(String(U))} skipped, `:"")+`${W.red(String(H))} failed`);if(H>0)process.exitCode=1;break}case"list":{let Z=await $8();if(Z.length===0){if($.flags.json)console.log("[]");else console.log("No bundles found."),console.error(W.dim("Create one with: asm bundle create <name>"));return}if($.flags.json)console.log(JSON.stringify(Z,null,2));else{console.error(W.bold(`Saved Bundles (${Z.length}):
790
- `));for(let Q of Z){let X=Q.tags&&Q.tags.length>0?` ${W.dim(`[${Q.tags.join(", ")}]`)}`:"";if(console.error(` ${W.cyan(Q.name)} ${W.dim(`(${Q.skills.length} skills)`)}${X}`),Q.description)console.error(` ${W.dim(Q.description)}`);if(Q.author)console.error(` ${W.dim(`by ${Q.author}`)}`)}}break}case"show":{let Z=$.positional[0];if(!Z)D("Missing required argument: <name|file>"),console.error("Usage: asm bundle show <name|file>"),process.exit(2);let Q;try{Q=await y4(Z)}catch(X){D(X.message),process.exit(1)}if($.flags.json)console.log(JSON.stringify(Q,null,2));else{if(console.error(W.bold(`Bundle: ${Q.name}`)),Q.description)console.error(` ${Q.description}`);if(Q.author)console.error(` ${W.dim(`Author: ${Q.author}`)}`);if(console.error(` ${W.dim(`Created: ${new Date(Q.createdAt).toLocaleString()}`)}`),Q.tags&&Q.tags.length>0)console.error(` ${W.dim(`Tags: ${Q.tags.join(", ")}`)}`);console.error(`
791
- ${W.bold(`Skills (${Q.skills.length})`)}:`);for(let X of Q.skills){let z=X.version?` v${X.version}`:"";if(console.error(` ${W.cyan(X.name)}${W.dim(z)}`),X.description)console.error(` ${W.dim(X.description)}`);console.error(` ${W.dim(`install: ${X.installUrl}`)}`)}}break}case"remove":{let Z=$.positional[0];if(!Z)D("Missing required argument: <name>"),console.error("Usage: asm bundle remove <name>"),process.exit(2);if(!$.flags.yes&&process.stdin.isTTY){process.stderr.write(`${W.bold("Remove bundle")} ${W.cyan(Z)}${W.bold("?")} [y/N] `);let X=await Q0();if(X.toLowerCase()!=="y"&&X.toLowerCase()!=="yes")console.error("Aborted."),process.exit(0)}let Q;try{Q=await q8(Z)}catch(X){D(X.message),process.exit(1)}if(Q)console.error(W.green(`Bundle "${Z}" removed.`));else D(`Bundle "${Z}" not found.`),process.exit(1);break}default:D(`Unknown subcommand: "${q}". Use: create, install, list, show, or remove`),console.error('Run "asm bundle --help" for usage.'),process.exit(2)}}async function TB($){if($.flags.help){bH();return}let q=$.flags.machine?c0():void 0,Z=performance.now(),Q=$.subcommand||".";try{let X=await Y8({path:Q,dryRun:$.flags.dryRun,force:$.flags.force,yes:$.flags.yes});if($.flags.machine){if(q?.(),!X.success)console.log(a("publish",n.PUBLISH_FAILED,X.error||"Publish failed",Z,{manifest:X.manifest,security_verdict:X.securityVerdict,fallback:X.fallback??!1})),process.exit(1);console.log(l("publish",{manifest:X.manifest,pr_url:X.prUrl,status:X.securityVerdict},Z));return}if($.flags.json){if(console.log(JSON.stringify({success:X.success,manifest:X.manifest,pr_url:X.prUrl,error:X.error,security_verdict:X.securityVerdict},null,2)),!X.success)process.exit(1);return}if(!X.success)D(X.error||"Publish failed."),process.exit(1);if(X.fallback){console.log(W.yellow("Manifest generated (gh CLI unavailable):")),console.log(G8(X));return}if($.flags.dryRun){console.error(W.dim(`Dry run no PR created.
792
- `)),console.log(JSON.stringify(X.manifest,null,2));return}if(X.prUrl)console.error(W.green("Published successfully!")),console.error(""),console.error(` PR: ${X.prUrl}`),console.error(` Manifest: manifests/${X.manifest?.author}/${X.manifest?.name}.json`),console.error(` Security: ${X.securityVerdict}`),console.error(""),console.error(W.dim("The registry maintainers will review your submission."))}catch(X){let z={success:!1,manifest:null,prUrl:null,error:X.message,securityVerdict:"pass",securityReport:{scannedAt:new Date().toISOString(),skillName:"",skillPath:"",source:null,codeScans:[],permissions:[],totalFiles:0,totalLines:0,verdict:"safe",verdictReason:""}};if($.flags.machine)q?.(),console.log(a("publish",n.PUBLISH_FAILED,X.message,Z)),process.exit(1);if($.flags.json)console.log(JSON.stringify({success:!1,manifest:null,pr_url:null,error:X.message,security_verdict:null},null,2)),process.exit(1);D(X.message),process.exit(1)}}async function MB($){if($.flags.help){xH();return}let q=$.flags.machine?c0():void 0,Z=performance.now();try{let Q=await m4();if($.flags.machine){q?.();let z=Q.entries.map((J)=>({name:J.name,installed_commit:J.installedCommit,latest_commit:J.latestCommit,source:J.sourceType,status:J.status}));console.log(l("outdated",z,Z));return}if($.flags.json){console.log(_8(Q));return}let X=!$.flags.noColor&&process.stdout.isTTY!==!1;if(console.log(K8(Q,X)),Q.outdatedCount>0)process.exitCode=1}catch(Q){if($.flags.machine)q?.(),console.log(a("outdated",n.UNKNOWN_ERROR,Q.message,Z)),process.exit(1);D(Q.message),process.exit(1)}}async function RB($){if($.flags.help){fH();return}let q=$.flags.machine?c0():void 0,Z=performance.now(),Q=[];if($.subcommand)Q.push($.subcommand);Q.push(...$.positional);try{let X=await B8(Q.length>0?Q:null,$.flags.yes);if($.flags.machine){q?.();let J=X.results.map((Y)=>({name:Y.name,status:Y.status,reason:Y.reason||null,old_commit:Y.oldCommit||null,new_commit:Y.newCommit||null,security_verdict:Y.securityVerdict||null}));console.log(l("update",J,Z));return}if($.flags.json){console.log(O8(X));return}if(X.results.length>0)console.error(W.yellow("Note: project-scoped skill detection is not yet supported. All updates target the global skill path."));if(X.warnings&&X.warnings.length>0)for(let J of X.warnings)console.error(W.yellow(`Warning: skill "${J}" not found in lock file — skipped`));if(X.results.length===0){console.log("All skills are up to date.");return}for(let J of X.results)switch(J.status){case"updated":if(console.log(`${W.green("✓")} ${J.name} ${W.dim(J.oldCommit||"")} → ${J.newCommit||""}`),J.securityVerdict==="warning")console.error(W.yellow(` ⚠ Security audit returned warning for ${J.name} — updated because --yes was supplied`));break;case"skipped":console.log(`${W.yellow("○")} ${J.name} ${W.dim(J.reason||"skipped")}`);break;case"failed":console.log(`${W.red("✗")} ${J.name} ${W.dim(J.reason||"failed")}`);break}console.log("");let z=[];if(X.updatedCount>0)z.push(W.green(`${X.updatedCount} updated`));if(X.skippedCount>0)z.push(W.yellow(`${X.skippedCount} skipped`));if(X.failedCount>0)z.push(W.red(`${X.failedCount} failed`));if(console.log(z.join(", ")),X.failedCount>0)process.exitCode=1}catch(X){if($.flags.machine)q?.(),console.log(a("update",n.UNKNOWN_ERROR,X.message,Z)),process.exit(1);D(X.message),process.exit(1)}}async function g6($){let q=wH($);if(q.flags.json&&q.flags.machine)D("--json and --machine are mutually exclusive. Use one or the other."),process.exit(2);if(q.flags.machine)q.flags.yes=!0;if(q.flags.noColor)globalThis.__CLI_NO_COLOR=!0;if(q.flags.verbose)_6(!0);if(q.flags.version){console.log(`asm ${X2}`);let Z=await aq();if(q.flags.verbose&&Z.resolved){if(console.log(` path: ${Z.resolved.path}`),Z.resolved.realPath!==Z.resolved.path)console.log(` real: ${Z.resolved.realPath}`)}if(Z.shadowed.length>0&&Z.resolved){console.error(""),console.error(W.yellow(`Warning: ${Z.shadowed.length+1} \`asm\` binaries on PATH — you may be running a shadowed install.`)),console.error(` resolved: ${Z.resolved.path}`);for(let Q of Z.shadowed)console.error(` shadowed: ${Q.path}`);console.error(W.dim(" Pick one package manager (npm OR bun) and remove the other install.")),console.error(W.dim(" See: https://github.com/luongnv89/agent-skill-manager#troubleshooting"))}return}if(!q.command&&q.flags.help){NH();return}if(!q.command)return;switch(q.command){case"list":await kH(q);break;case"search":await vH(q);break;case"inspect":await hH(q);break;case"uninstall":await gH(q);break;case"audit":await uH(q);break;case"install":await sH(q);break;case"config":await lH(q);break;case"export":await rH(q);break;case"import":await $B(q);break;case"init":await ZB(q);break;case"stats":await XB(q);break;case"link":await OB(q);break;case"index":await FB(q);break;case"bundle":await IB(q);break;case"publish":await TB(q);break;case"outdated":await MB(q);break;case"update":await RB(q);break;case"doctor":await JB(q);break;case"eval":await WB(q);break;case"eval-providers":await BB(q);break;default:D(`Unknown command: "${q.command}"`),console.error('Run "asm --help" for usage.'),process.exit(2)}}function u6($){let q=$.slice(2);if(q.length===0)return!1;let Z=["list","search","inspect","uninstall","audit","config","install","export","import","init","stats","link","index","bundle","publish","outdated","update","doctor","eval","eval-providers"],Q=q[0];if(Z.includes(Q))return!0;if(Q==="--help"||Q==="-h")return!0;if(Q==="--version"||Q==="-v")return!0;if(Q.startsWith("-")||Q.length>0)return!0;return!1}if(u6(process.argv))await g6(process.argv);else if(!(typeof globalThis.Bun<"u")){let{spawn:q}=await import("child_process"),Z=q("bun",[process.argv[1],...process.argv.slice(2)],{stdio:"inherit"});Z.on("error",()=>{console.error(`The interactive TUI requires Bun (https://bun.sh).
793
- Install it with: curl -fsSL https://bun.sh/install | bash
794
-
795
- `+"CLI commands (list, search, inspect, etc.) work with Node.js run: asm --help"),process.exit(1)}),Z.on("exit",(Q)=>process.exit(Q??0))}else await import("./chunk-76faq0t9.js");
783
+ ${u.bold("Examples:")}
784
+ asm bundle create my-workflow ${u.dim("Create from installed skills")}
785
+ asm bundle install my-workflow ${u.dim("Install a saved bundle")}
786
+ asm bundle install frontend-dev ${u.dim("Install a pre-defined bundle")}
787
+ asm bundle install ./bundle.json ${u.dim("Install from file")}
788
+ asm bundle list ${u.dim("Show all saved bundles")}
789
+ asm bundle list --predefined ${u.dim("List pre-defined bundles")}
790
+ asm bundle list --json ${u.dim("List bundles as JSON")}
791
+ asm bundle show my-workflow ${u.dim("Show bundle details")}
792
+ asm bundle remove my-workflow ${u.dim("Remove a saved bundle")}
793
+ asm bundle modify my-workflow --add github:u/r ${u.dim("Add a skill to bundle")}
794
+ asm bundle modify my-workflow --remove skill ${u.dim("Remove a skill from bundle")}
795
+ asm bundle export my-workflow ${u.dim("Export to ./my-workflow.json")}
796
+ asm bundle export my-workflow out.json ${u.dim("Export bundle to file")}`)}async function Pv(e){if(e.flags.help){Av();return}let t=e.subcommand;switch(t||(C("Missing subcommand. Use: create, install, list, show, remove, modify, or export"),console.error('Run "asm bundle --help" for usage.'),process.exit(2)),t){case"create":{let s=e.positional[0];s||(C("Missing required argument: <name>"),console.error("Usage: asm bundle create <name>"),process.exit(2));let i=await q(),n=await Q(i,e.flags.scope);n.length===0&&(C("No skills found to include in the bundle."),process.exit(1));let r=new Set,o=n.filter(h=>{let g=h.name.toLowerCase();return r.has(g)?!1:(r.add(g),!0)}),a=o;if(process.stdin.isTTY&&!e.flags.yes){let h=o.map(b=>({label:`${b.name} v${b.version}`,hint:b.description?b.description.slice(0,60)+(b.description.length>60?"...":""):`(${b.provider}/${b.scope})`,checked:!0}));console.error(u.bold(`Select skills for bundle "${s}":
797
+ `));let g=await We({items:h});g.length===0&&(C("No skills selected. Bundle not created."),process.exit(1)),a=g.map(b=>o[b])}let{readLock:l}=await import("./lock-SOHBB4N3.js"),c=await l(),d=await Promise.all(a.map(h=>Gc(h,c))),f=`Bundle of ${d.length} skills`,p="unknown";try{let{execSync:h}=await import("child_process"),g=h("git config user.name",{encoding:"utf-8"}).trim();g&&(p=g)}catch{}if(process.stdin.isTTY&&!e.flags.yes){process.stderr.write(`
798
+ ${u.bold("Description")} (optional, press Enter to skip): `);let h=await G();h.trim()&&(f=h.trim()),process.stderr.write(`${u.bold("Author")} (optional, press Enter to skip): `);let g=await G();g.trim()&&(p=g.trim())}let m=Yc(s,f,p,d),y=await Nr(m);e.flags.json?console.log(JSON.stringify(m,null,2)):(console.error(u.green(`Bundle "${s}" created with ${d.length} skill(s).`)),console.error(` Saved to: ${u.dim(y)}`));break}case"install":{let s=e.positional[0];s||(C("Missing required argument: <name|file>"),console.error("Usage: asm bundle install <name|file>"),process.exit(2));let i;try{i=await Gt(s)}catch(f){C(f.message),process.exit(1)}console.error(`${u.bold("Bundle:")} ${i.name} (${i.skills.length} skills)`),i.description&&console.error(` ${u.dim(i.description)}`),console.error("");for(let f of i.skills){let p=f.version?` v${f.version}`:"";console.error(` ${u.cyan(f.name)}${u.dim(p)} ${u.dim(`-> ${f.installUrl}`)}`)}if(!e.flags.yes&&process.stdin.isTTY){process.stderr.write(`
799
+ ${u.bold("Install all skills from this bundle?")} [y/N] `);let f=await G();f.toLowerCase()!=="y"&&f.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0))}let n=[],r=await q(),{provider:o}=await ze(r,e.flags.provider,!1),a=e.flags.scope==="global"||e.flags.scope==="project"?e.flags.scope:"global";for(let f of i.skills){console.error(`
800
+ Installing ${u.bold(f.name)}...`);try{(f.installUrl.startsWith("github:")||f.installUrl.startsWith("https://github.com/"))&&await Me();let m=Oe(f.installUrl),y=!!m.isLocal,h=null;try{let g,b;y?(g=m.localPath,b=m.localPath):(h=await De(m,e.flags.transport),g=h,b=m.subpath?ff(h,m.subpath):h);let v=await _e(b),k=Te(f.name||v.name||m.repo),x=_i(m,g,b,k,o,e.flags.force,a);try{await Mo(x.targetDir,x.force)}catch(S){if(S.message?.includes("--force")){n.push({name:f.name,status:"skipped",reason:"Already installed. Use --force to overwrite."}),console.error(` ${u.dim("---")} ${f.name} skipped (already installed)`);continue}throw S}await as(x),n.push({name:f.name,status:"installed"}),console.error(` ${u.green("+++")} ${f.name} installed`)}finally{h&&await ne(h)}}catch(p){n.push({name:f.name,status:"failed",reason:p.message}),console.error(` ${u.red("!!!")} ${f.name}: ${p.message}`)}}let l=n.filter(f=>f.status==="installed").length,c=n.filter(f=>f.status==="skipped").length,d=n.filter(f=>f.status==="failed").length;e.flags.json?console.log(JSON.stringify({bundleName:i.name,total:n.length,installed:l,skipped:c,failed:d,results:n},null,2)):(console.error(""),console.error(`${u.bold("Summary:")} ${n.length} total, ${u.green(String(l))} installed, `+(c>0?`${u.dim(String(c))} skipped, `:"")+`${u.red(String(d))} failed`)),d>0&&(process.exitCode=1);break}case"list":{if(!!e.flags.predefined){let n=await Wc();if(n.length===0){e.flags.json?console.log("[]"):console.log("No predefined bundles found.");return}if(e.flags.json)console.log(JSON.stringify(n,null,2));else{console.error(u.bold(`Pre-defined Bundles (${n.length}):
801
+ `));for(let r of n){let o=r.tags&&r.tags.length>0?` ${u.dim(`[${r.tags.join(", ")}]`)}`:"";console.error(` ${u.cyan(r.name)} ${u.dim(`(${r.skills.length} skills)`)}${o}`),r.description&&console.error(` ${u.dim(r.description)}`)}console.error(`
802
+ ${u.dim("Install a bundle with: asm bundle install <name>")}`)}return}let i=await zc();if(i.length===0){e.flags.json?console.log("[]"):(console.log("No bundles found."),console.error(u.dim("Create one with: asm bundle create <name>")),console.error(u.dim("List pre-defined bundles with: asm bundle list --predefined")));return}if(e.flags.json)console.log(JSON.stringify(i,null,2));else{console.error(u.bold(`Saved Bundles (${i.length}):
803
+ `));for(let n of i){let r=n.tags&&n.tags.length>0?` ${u.dim(`[${n.tags.join(", ")}]`)}`:"";console.error(` ${u.cyan(n.name)} ${u.dim(`(${n.skills.length} skills)`)}${r}`),n.description&&console.error(` ${u.dim(n.description)}`),n.author&&console.error(` ${u.dim(`by ${n.author}`)}`)}}break}case"show":{let s=e.positional[0];s||(C("Missing required argument: <name|file>"),console.error("Usage: asm bundle show <name|file>"),process.exit(2));let i;try{i=await Gt(s)}catch(n){C(n.message),process.exit(1)}if(e.flags.json)console.log(JSON.stringify(i,null,2));else{console.error(u.bold(`Bundle: ${i.name}`)),i.description&&console.error(` ${i.description}`),i.author&&console.error(` ${u.dim(`Author: ${i.author}`)}`),console.error(` ${u.dim(`Created: ${new Date(i.createdAt).toLocaleString()}`)}`),i.tags&&i.tags.length>0&&console.error(` ${u.dim(`Tags: ${i.tags.join(", ")}`)}`),console.error(`
804
+ ${u.bold(`Skills (${i.skills.length})`)}:`);for(let n of i.skills){let r=n.version?` v${n.version}`:"";console.error(` ${u.cyan(n.name)}${u.dim(r)}`),n.description&&console.error(` ${u.dim(n.description)}`),console.error(` ${u.dim(`install: ${n.installUrl}`)}`)}}break}case"remove":{let s=e.positional[0];if(s||(C("Missing required argument: <name>"),console.error("Usage: asm bundle remove <name>"),process.exit(2)),!e.flags.yes&&process.stdin.isTTY){process.stderr.write(`${u.bold("Remove bundle")} ${u.cyan(s)}${u.bold("?")} [y/N] `);let n=await G();n.toLowerCase()!=="y"&&n.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0))}let i;try{i=await Qc(s)}catch(n){C(n.message),process.exit(1)}i?console.error(u.green(`Bundle "${s}" removed.`)):(C(`Bundle "${s}" not found.`),process.exit(1));break}case"modify":{let s=e.positional[0];s||(C("Missing required argument: <name>"),console.error("Usage: asm bundle modify <name> [--add <installUrl>] [--remove <skillName>] [--description <desc>] [--author <author>] [--tags <tag,...>]"),process.exit(2));let i;try{i=await Gt(s)}catch(f){C(f.message),process.exit(1)}let n=!1,r=e.flags.add;if(r){let f={name:r.split("/").pop()?.replace(/\.json$/,"")??r,installUrl:r};i.skills.push(f),n=!0,console.error(u.green(`Added skill from ${r}`))}let o=e.flags.remove;if(o){let f=i.skills.length;i.skills=i.skills.filter(p=>p.name.toLowerCase()!==o.toLowerCase()),i.skills.length<f?(n=!0,console.error(u.green(`Removed skill "${o}"`))):console.error(u.dim(`Skill "${o}" not found in bundle (no change)`))}let a=e.flags.description;a!==null&&(i.description=a,n=!0);let l=e.flags.author;l!==null&&(i.author=l,n=!0);let c=e.flags.tags;if(c!==null&&(i.tags=c.split(",").map(f=>f.trim()).filter(f=>f.length>0),n=!0),!n&&process.stdin.isTTY&&!e.flags.yes&&!r&&!o&&a===null&&l===null&&c===null){console.error(u.bold(`Modifying bundle "${i.name}"`)),console.error(` Current skills: ${i.skills.map(y=>y.name).join(", ")}`),console.error(` Description: ${i.description}`),console.error(` Author: ${i.author}`),console.error(` Tags: ${i.tags?.join(", ")??"(none)"}`),console.error(""),process.stderr.write(`${u.bold("New description")} (Enter to keep current): `);let f=await G();f.trim()&&(i.description=f.trim(),n=!0),process.stderr.write(`${u.bold("New author")} (Enter to keep current): `);let p=await G();p.trim()&&(i.author=p.trim(),n=!0),process.stderr.write(`${u.bold("New tags (comma-separated)")} (Enter to keep current): `);let m=await G();m.trim()&&(i.tags=m.split(",").map(y=>y.trim()).filter(y=>y.length>0),n=!0)}if(!n){console.error(u.dim("No changes made to bundle."));break}i.skills.length===0&&(C("Bundle must contain at least one skill after modification."),process.exit(1));let d=await Nr(i);e.flags.json?console.log(JSON.stringify(i,null,2)):(console.error(u.green(`Bundle "${i.name}" updated (${i.skills.length} skill(s)).`)),console.error(` Saved to: ${u.dim(d)}`));break}case"export":{let s=e.positional[0];s||(C("Missing required argument: <name>"),console.error("Usage: asm bundle export <name> [output-file]"),process.exit(2));let i;try{i=await Gt(s)}catch(l){C(l.message),process.exit(1)}let n=e.positional[1]??`./${s}.json`,{resolve:r}=await import("path"),o=r(n);if(!e.flags.force){let{access:l}=await import("fs/promises");try{if(await l(o),process.stdin.isTTY&&!e.flags.yes){process.stderr.write(`File ${u.bold(o)} already exists. Overwrite? [y/N] `);let c=await G();c.toLowerCase()!=="y"&&c.toLowerCase()!=="yes"&&(console.error("Aborted."),process.exit(0))}else e.flags.yes||(C(`File "${o}" already exists. Use --force to overwrite.`),process.exit(1))}catch{}}let{writeFile:a}=await import("fs/promises");await a(o,JSON.stringify(i,null,2)+`
805
+ `,"utf-8"),e.flags.json?console.log(JSON.stringify({exported:!0,path:o,bundle:i},null,2)):console.error(u.green(`Exported to ${o}`));break}default:C(`Unknown subcommand: "${t}". Use: create, install, list, show, remove, modify, or export`),console.error('Run "asm bundle --help" for usage.'),process.exit(2)}}async function Nv(e){if(e.flags.help){jw();return}let t=e.flags.machine?Ge():void 0,s=performance.now(),i=e.subcommand||".";try{let n=await iu({path:i,dryRun:e.flags.dryRun,force:e.flags.force,yes:e.flags.yes});if(e.flags.machine){t?.(),n.success||(console.log(z("publish",W.PUBLISH_FAILED,n.error||"Publish failed",s,{manifest:n.manifest,security_verdict:n.securityVerdict,fallback:n.fallback??!1})),process.exit(1)),console.log(Y("publish",{manifest:n.manifest,pr_url:n.prUrl,status:n.securityVerdict},s));return}if(e.flags.json){console.log(JSON.stringify({success:n.success,manifest:n.manifest,pr_url:n.prUrl,error:n.error,security_verdict:n.securityVerdict},null,2)),n.success||process.exit(1);return}if(n.success||(C(n.error||"Publish failed."),process.exit(1)),n.fallback){console.log(u.yellow("Manifest generated (gh CLI unavailable):")),console.log(nu(n));return}if(e.flags.dryRun){console.error(u.dim(`Dry run \u2014 no PR created.
806
+ `)),console.log(JSON.stringify(n.manifest,null,2));return}n.prUrl&&(console.error(u.green("Published successfully!")),console.error(""),console.error(` PR: ${n.prUrl}`),console.error(` Manifest: manifests/${n.manifest?.author}/${n.manifest?.name}.json`),console.error(` Security: ${n.securityVerdict}`),console.error(""),console.error(u.dim("The registry maintainers will review your submission.")))}catch(n){let r={success:!1,manifest:null,prUrl:null,error:n.message,securityVerdict:"pass",securityReport:{scannedAt:new Date().toISOString(),skillName:"",skillPath:"",source:null,codeScans:[],permissions:[],totalFiles:0,totalLines:0,verdict:"safe",verdictReason:""}};e.flags.machine&&(t?.(),console.log(z("publish",W.PUBLISH_FAILED,n.message,s)),process.exit(1)),e.flags.json&&(console.log(JSON.stringify({success:!1,manifest:null,pr_url:null,error:n.message,security_verdict:null},null,2)),process.exit(1)),C(n.message),process.exit(1)}}async function Iv(e){if(e.flags.help){Bw();return}let t=e.flags.machine?Ge():void 0,s=performance.now();try{let i=await Mr();if(e.flags.machine){t?.();let r=i.entries.map(o=>({name:o.name,installed_commit:o.installedCommit,latest_commit:o.latestCommit,source:o.sourceType,status:o.status}));console.log(Y("outdated",r,s));return}if(e.flags.json){console.log(fu(i));return}let n=!e.flags.noColor&&process.stdout.isTTY!==!1;console.log(uu(i,n)),i.outdatedCount>0&&(process.exitCode=1)}catch(i){e.flags.machine&&(t?.(),console.log(z("outdated",W.UNKNOWN_ERROR,i.message,s)),process.exit(1)),C(i.message),process.exit(1)}}async function Lv(e){if(e.flags.help){Uw();return}let t=e.flags.machine?Ge():void 0,s=performance.now(),i=[];e.subcommand&&i.push(e.subcommand),i.push(...e.positional);try{let n=await cu(i.length>0?i:null,e.flags.yes);if(e.flags.machine){t?.();let o=n.results.map(a=>({name:a.name,status:a.status,reason:a.reason||null,old_commit:a.oldCommit||null,new_commit:a.newCommit||null,security_verdict:a.securityVerdict||null}));console.log(Y("update",o,s));return}if(e.flags.json){console.log(du(n));return}if(n.results.length>0&&console.error(u.yellow("Note: project-scoped skill detection is not yet supported. All updates target the global skill path.")),n.warnings&&n.warnings.length>0)for(let o of n.warnings)console.error(u.yellow(`Warning: skill "${o}" not found in lock file \u2014 skipped`));if(n.results.length===0){console.log("All skills are up to date.");return}for(let o of n.results)switch(o.status){case"updated":console.log(`${u.green("\u2713")} ${o.name} ${u.dim(o.oldCommit||"")} \u2192 ${o.newCommit||""}`),o.securityVerdict==="warning"&&console.error(u.yellow(` \u26A0 Security audit returned warning for ${o.name} \u2014 updated because --yes was supplied`));break;case"skipped":console.log(`${u.yellow("\u25CB")} ${o.name} ${u.dim(o.reason||"skipped")}`);break;case"failed":console.log(`${u.red("\u2717")} ${o.name} ${u.dim(o.reason||"failed")}`);break}console.log("");let r=[];n.updatedCount>0&&r.push(u.green(`${n.updatedCount} updated`)),n.skippedCount>0&&r.push(u.yellow(`${n.skippedCount} skipped`)),n.failedCount>0&&r.push(u.red(`${n.failedCount} failed`)),console.log(r.join(", ")),n.failedCount>0&&(process.exitCode=1)}catch(n){e.flags.machine&&(t?.(),console.log(z("update",W.UNKNOWN_ERROR,n.message,s)),process.exit(1)),C(n.message),process.exit(1)}}async function pf(e){let t=Ow(e);if(t.flags.json&&t.flags.machine&&(C("--json and --machine are mutually exclusive. Use one or the other."),process.exit(2)),t.flags.machine&&(t.flags.yes=!0),t.flags.noColor&&(globalThis.__CLI_NO_COLOR=!0),t.flags.verbose&&zr(!0),t.flags.version){console.log(`asm ${Li}`);let s=await di();if(t.flags.verbose&&s.resolved&&(console.log(` path: ${s.resolved.path}`),s.resolved.realPath!==s.resolved.path&&console.log(` real: ${s.resolved.realPath}`)),s.shadowed.length>0&&s.resolved){console.error(""),console.error(u.yellow(`Warning: ${s.shadowed.length+1} \`asm\` binaries on PATH \u2014 you may be running a shadowed install.`)),console.error(` resolved: ${s.resolved.path}`);for(let i of s.shadowed)console.error(` shadowed: ${i.path}`);console.error(u.dim(" Pick one package manager (npm OR bun) and remove the other install.")),console.error(u.dim(" See: https://github.com/luongnv89/asm#troubleshooting"))}return}if(!t.command&&t.flags.help){Tw();return}if(t.command)switch(t.command){case"list":await Kw(t);break;case"search":await Jw(t);break;case"inspect":await Hw(t);break;case"uninstall":await Yw(t);break;case"audit":await Gw(t);break;case"install":await nv(t);break;case"config":await Zw(t);break;case"export":await ov(t);break;case"import":await lv(t);break;case"init":await uv(t);break;case"stats":await dv(t);break;case"link":await xv(t);break;case"index":await Ev(t);break;case"bundle":await Pv(t);break;case"publish":await Nv(t);break;case"outdated":await Iv(t);break;case"update":await Lv(t);break;case"doctor":await mv(t);break;case"eval":await bv(t);break;case"eval-providers":await kv(t);break;default:C(`Unknown command: "${t.command}"`),console.error('Run "asm --help" for usage.'),process.exit(2)}}function mf(e){let t=e.slice(2);if(t.length===0)return!1;let s=["list","search","inspect","uninstall","audit","config","install","export","import","init","stats","link","index","bundle","publish","outdated","update","doctor","eval","eval-providers"],i=t[0];return!!(s.includes(i)||i==="--help"||i==="-h"||i==="--version"||i==="-v"||i.startsWith("-")||i.length>0)}if(mf(process.argv))await pf(process.argv);else{let{main:e}=await import("./src-YK2KIAU7.js");await e().catch(t=>{console.error("Fatal error:",t),process.exit(1)})}